Wiktionary
viwiktionary
https://vi.wiktionary.org/wiki/Wiktionary:Trang_Ch%C3%ADnh
MediaWiki 1.47.0-wmf.24
case-sensitive
Phương tiện
Đặc biệt
Thảo luận
Thành viên
Thảo luận Thành viên
Wiktionary
Thảo luận Wiktionary
Tập tin
Thảo luận Tập tin
MediaWiki
Thảo luận MediaWiki
Bản mẫu
Thảo luận Bản mẫu
Trợ giúp
Thảo luận Trợ giúp
Thể loại
Thảo luận Thể loại
Phụ lục
Thảo luận Phụ lục
TimedText
TimedText talk
Mô đun
Thảo luận Mô đun
Sự kiện
Thảo luận Sự kiện
Wiktionary:Tin tức
4
644
2572754
2572265
2026-10-22T14:25:08Z
Hiyuune
50834
+ 22 tháng 10 năm 2026
2572754
wikitext
text/x-wiki
__NOTOC__
{{Lưu trữ|
{{*ym|year=2004–2009|month=no|base=Wiktionary:Tin tức}}
{{*ym|year=2010–2020|month=no|base=Wiktionary:Tin tức}}
{{*ym|year=2021–2023|month=no|base=Wiktionary:Tin tức}}
{{*ym|year=2024|month=no|base=Wiktionary:Tin tức}}
{{*ym|year=2025|month=no|base=Wiktionary:Tin tức}}
{{*ym|year=2026|month=no|base=Wiktionary:Tin tức}}
}}
Trang này dành cho '''tin tức về dự án''' [[Wiktionary]] tiếng Việt nói riêng hay về cộng đồng Wiktionary nói chung. Bạn có biết tin tức mới không? Mời bạn ghi ra đây!
Bạn có thể chọn nút theo dõi trang để cập nhật tin tức tại [[Đặc biệt:Danh sách theo dõi|Danh sách theo dõi]].<!-- Nếu bạn đang cộng thêm một ngày nữa, và nếu đã có năm ngày ở trang này rồi, xin bạn xoá mục cuối cùng và bỏ tin tức mới trên những mục đã có rồi. Rồi, xin bạn thêm tin tức mới vào trang lưu trữ cho tháng năm phù hợp. Cám ơn. -->
== Tháng 10 năm 2026 ==
=== Thứ năm, ngày 22 tháng 10 năm 2026 ===
* {{l|tnc|Ᵽ}} trở thành mục từ tiếng Tanimuca-Retuarã đầu tiên của Wiktionary tiếng Việt.
=== Thứ ba, ngày 20 tháng 10 năm 2026 ===
* {{l|nbn|wer}} trở thành mục từ tiếng Kuri đầu tiên của Wiktionary tiếng Việt.
* {{l|bls|luton}} trở thành mục từ tiếng Balaesang đầu tiên của Wiktionary tiếng Việt.
* {{l|bot|kii}} đồng thời trở thành mục từ đầu tiên của các ngôn ngữ: Bongo và Chickasaw.
* {{l|myz|ࡋࡄࡀࡌࡀ}} trở thành mục từ tiếng Manda cổ điển đầu tiên của Wiktionary tiếng Việt.
=== Thứ hai, ngày 19 tháng 10 năm 2026 ===
* {{l|hmx-pro|*djuŋᴴ}} trở thành mục từ tiếng H'Mông-Miền nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 18 tháng 10 năm 2026 ===
* {{l|lbk|awak}} trở thành mục từ tiếng Bontoc Trung đầu tiên của Wiktionary tiếng Việt.
=== Thứ bảy, ngày 17 tháng 10 năm 2026 ===
* {{l|ayn|ת}} trở thành mục từ tiếng Ả Rập Sana'a đầu tiên của Wiktionary tiếng Việt.
* {{l|ayk|iraru}} trở thành mục từ tiếng Akuku đầu tiên của Wiktionary tiếng Việt.
* {{l|knb|atod}} trở thành mục từ tiếng Kalinga Lubuagan đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 4 tháng 10 năm 2026 ===
* {{l|shx|ɔŋ⁵³}} trở thành mục từ tiếng Xa đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 14 tháng 10 năm 2026 ===
* {{l|wbp|mula}} trở thành mục từ tiếng Warlpiri đầu tiên của Wiktionary tiếng Việt.
* {{l|aus-pam-pro|*calañ}} trở thành mục từ tiếng Pama-Nyungar nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|wyb|thalay}} trở thành mục từ tiếng Ngiyambaa đầu tiên của Wiktionary tiếng Việt.
* {{l|aus-cww-pro|*balaŋ}} trở thành mục từ tiếng Trung New South Wales nguyên thủy đầu tiên của Wiktionary tiếng Việt.
== Tháng 9 năm 2026 ==
=== Thứ ba, ngày 29 tháng 9 năm 2026 ===
* {{l|svs|kurakurape}} trở thành mục từ tiếng Savosavo đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 23 tháng 9 năm 2026 ===
* {{l|pgl|ᚃᚓᚂᚔᚈᚐᚄ}} trở thành mục từ tiếng Ireland nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ bảy, ngày 19 tháng 9 năm 2026 ===
* {{l|buq|yaŋ}} trở thành mục từ tiếng Brem đầu tiên của Wiktionary tiếng Việt.
=== Thứ sáu, ngày 18 tháng 9 năm 2026 ===
* {{l|kus|kpan}} trở thành mục từ tiếng Kusaal đầu tiên của Wiktionary tiếng Việt.
=== Thứ năm, ngày 17 tháng 9 năm 2026 ===
* {{l|nhu|wú}} trở thành mục từ tiếng Noone đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 9 tháng 9 năm 2026 ===
* {{l|inc-ogu|कमल}} trở thành mục từ tiếng Gujarat cổ đầu tiên của Wiktionary tiếng Việt.
* {{l|zpc|Z̃}} trở thành mục từ tiếng Zapotec Choapan đầu tiên của Wiktionary tiếng Việt.
=== Thứ ba, ngày 8 tháng 9 năm 2026 ===
* {{l|ine-ana-pro|*ʔésti}} trở thành mục từ tiếng Tiểu Á nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|tuw-pro|*ŋōlimi}} trở thành mục từ tiếng Tungus nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 6 tháng 9 năm 2026 ===
* {{l|afa-pro|*waraḳ-}} trở thành mục từ tiếng Phi-Á nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 3 tháng 9 năm 2026 ===
* {{l|cau-drg-pro|*xin}} trở thành mục từ tiếng Dargwa nguyên thủy đầu tiên của Wiktionary tiếng Việt.
== Tháng 8 năm 2026 ==
=== Thứ hai, ngày 31 tháng 8 năm 2026 ===
* {{l|aoa|awa}} trở thành mục từ tiếng Angola đầu tiên của Wiktionary tiếng Việt.
* {{l|chm-pro|*ik}} trở thành mục từ tiếng Mari nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|urj-mdv-pro|*tumə}} trở thành mục từ tiếng Mordvin nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 30 tháng 8 năm 2026 ===
* {{l|ghc|adhaigh}} trở thành mục từ tiếng Gael cổ điển đầu tiên của Wiktionary tiếng Việt.
=== Thứ bảy, ngày 29 tháng 8 năm 2026 ===
* [[kani]] đồng thời trở thành mục từ đầu tiên của các ngôn ngữ: Culli và Maia.
* {{l|ngf-pro|*imbi}} trở thành mục từ tiếng Liên New Guinea nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|agm|kaatɨ-́há}} trở thành mục từ tiếng Angaataha đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 26 tháng 8 năm 2026 ===
* {{l|vls|bieë}} trở thành mục từ tiếng Flemish Tây đầu tiên của Wiktionary tiếng Việt.
=== Thứ hai, ngày 24 tháng 8 năm 2026 ===
* {{l|sdc|rui}} trở thành mục từ tiếng Sassari đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 23 tháng 8 năm 2026 ===
* {{l|mis-xbi|啊干|tr=*aqa(n)}} trở thành mục từ tiếng Tiên Ti đầu tiên của Wiktionary tiếng Việt.
=== Chủ nhật, ngày 2 tháng 8 năm 2026 ===
* {{l|iro-nor-pro|*-nõhs-}} trở thành mục từ tiếng Bắc Iroquois nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ hai, ngày 3 tháng 8 năm 2026 ===
* {{l|sem-wes-pro|*baḥr-}} trở thành mục từ tiếng Semit Tây nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|qfa-cka-pro|*'iməl}} trở thành mục từ tiếng Chukotka-Kamchatka nguyên thủy đầu tiên của Wiktionary tiếng Việt.
* {{l|aql-pro|*le·kʔawe}} trở thành mục từ tiếng Algic nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ ba, ngày 4 tháng 8 năm 2026 ===
* {{l|owl|carrecc}} trở thành mục từ tiếng Wales cổ đầu tiên của Wiktionary tiếng Việt.
=== Thứ tư, ngày 5 tháng 8 năm 2026 ===
* {{l|grk-pro|*pʰernā́}} trở thành mục từ tiếng Hellen nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ năm, ngày 6 tháng 8 năm 2026 ===
* {{l|tfn|esbay}} trở thành mục từ tiếng Dena'ina đầu tiên của Wiktionary tiếng Việt.
* {{l|gmq-mno|dammr}} trở thành mục từ tiếng Na Uy trung đại đầu tiên của Wiktionary tiếng Việt.
* {{l|tbq-lob-pro|*b-ləy²}} trở thành mục từ tiếng Lô Lô-Miến nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ sáu, ngày 7 tháng 8 năm 2026 ===
* {{l|smw|asu}} đồng thời trở thành mục từ đầu tiên của các ngôn ngữ: Sumbawa và Alune.
=== Thứ ba, ngày 11 tháng 8 năm 2026 ===
* {{l|cau-nec-pro|*u̯aran}} trở thành mục từ tiếng Đông Bắc Kavkaz nguyên thủy đầu tiên của Wiktionary tiếng Việt.
=== Thứ năm, ngày 13 tháng 8 năm 2026 ===
* {{l|mge|Ɔ̰}} trở thành mục từ tiếng Mango đầu tiên của Wiktionary tiếng Việt.
== Xem thêm ==
*[[Thành viên:WikimediaNotifier/notifications|Thời sự Wikimedia]]
*[[m:Tin tức về Wikimedia|Tin tức Wikimedia]]
[[Thể loại:Tin tức Wiktionary| ]]
[[Thể loại:Cộng đồng Wiktionary|{{PAGENAME}}]]
c7uon2sn9sesb9aj106oz5ng1wcew9z
scag
0
24300
2572718
2426473
2026-10-22T12:31:01Z
~2026-56431-96
62110
/* */
2572718
wikitext
text/x-wiki
{{-eng-}}
{{-pron-}}
* [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈskæɡ/}}
{{-noun-}}
'''scag''' {{IPA-old|/ˈskæɡ/}}
# [[xì ke|Xì ke]] (ma túy).
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Danh từ tiếng Anh]]
iuv47hsfl4gdnd1958bea39o6tk51oe
Tuyên Hóa
0
85842
2572832
1310936
2026-10-22T20:13:57Z
TienMinh-mun6xnChing
57893
TienMinh-mun6xnChing đã đổi [[Tuyên Hoá]] thành [[Tuyên Hóa]] qua đổi hướng: viết đúng tên huyện
1310936
wikitext
text/x-wiki
{{-vie-}}
{{-pron-}}
{{vie-pron|Tuyên|Hoá}}
{{-pr-noun-}}
'''Tuyên Hoá'''
# {{term|Huyện}} T. [[Quảng Bình]].
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Danh từ riêng tiếng Việt]]
665mumaawj3ypis8d6031fucbbkhbjs
2572834
2572832
2026-10-22T20:14:55Z
TienMinh-mun6xnChing
57893
/* */
2572834
wikitext
text/x-wiki
{{-vie-}}
{{wikipedia|Tuyên Hóa (huyện)}}
{{-pron-}}
{{vie-pron}}
{{-pr-noun-}}
{{pn}}
# {{context|huyện}} Một huyện thuộc tỉnh [[Quảng Bình]].
{{-ref-}}
{{R:FVDP}}
{{catname|Danh từ riêng|tiếng Việt}}
jg6fdkr1743lcgwqnjvdy6xurzclp48
2572935
2572834
2026-10-23T11:07:52Z
TheHighFighter2
42988
/* */
2572935
wikitext
text/x-wiki
=={{langname|vi}}==
{{wikipedia}}
==={{ĐM|pron}}===
{{vi-pron}}
==={{ĐM|pr-noun}}===
{{vi-pr-noun}}
# {{vi-type|xã}} {{place|vi|xã|p/Quảng Trị|c/Việt Nam}}.
# {{vi-type|huyện}} {{lb|vi|historical}} {{place|vi|huyện|p/Quảng Bình|c/Việt Nam}}.
==={{ĐM|ref}}===
{{R:FVDP}}
bzmtoa48z60h1c70boterp5699oeaie
attitudinize
0
96472
2572714
2572701
2026-10-22T12:27:03Z
TheHighFighter2
42988
/* Tiếng Anh */
2572714
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|attitudinise||non-Oxford}}
==={{section\etym}}===
{{root|en|ine-pro|*h₂ep-|id=gia nhập}}
Từ {{af|en|it:attitudine|-ize}}, từ {{der|en|la|aptitūdō|aptitūdin-}} + {{suf|en|-ize}}, thân từ bổ cách của {{der|en|la|aptitūdō}}, từ {{suf|la|aptus|-tūdō|nocat=1}}. {{surf|en|attitude|-ize}}.
==={{section|pron}}===
* {{IPA|en|/ˌætɪˈtjuːdɪnaɪz/|a=RP}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-attitudinize.wav|a=Southern England}}
* {{IPA|en|/ˌætəˈtud(ɪ)nˌaɪz/|[-ɾə-]|a=GA}}
* {{hyphenation|en|at|ti|tud|in|ize}}
==={{section|v}}===
{{en-verb}} {{tlb|en|American spelling|Oxford British spelling}}
# [[lấy|Lấy]] [[dáng]], làm điệu bộ.
===={{section|drv}}====
{{col|en|attitudinisation|attitudinization|attitudiniser|attitudinizer|attitudinising|attitudinizing}}
===={{section|rel}}====
{{col|en|attitude|attitudinous}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
mt9np1sme6qw2z87d31u2v9d3mhazpm
2572715
2572714
2026-10-22T12:27:44Z
TheHighFighter2
42988
/* Từ nguyên */
2572715
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|attitudinise||non-Oxford}}
==={{section|etym}}===
{{root|en|ine-pro|*h₂ep-|id=gia nhập}}
Từ {{af|en|it:attitudine|-ize}}, từ {{der|en|la|aptitūdō|aptitūdin-}} + {{suf|en|-ize}}, thân từ bổ cách của {{der|en|la|aptitūdō}}, từ {{suf|la|aptus|-tūdō|nocat=1}}. {{surf|en|attitude|-ize}}.
==={{section|pron}}===
* {{IPA|en|/ˌætɪˈtjuːdɪnaɪz/|a=RP}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-attitudinize.wav|a=Southern England}}
* {{IPA|en|/ˌætəˈtud(ɪ)nˌaɪz/|[-ɾə-]|a=GA}}
* {{hyphenation|en|at|ti|tud|in|ize}}
==={{section|v}}===
{{en-verb}} {{tlb|en|American spelling|Oxford British spelling}}
# [[lấy|Lấy]] [[dáng]], làm điệu bộ.
===={{section|drv}}====
{{col|en|attitudinisation|attitudinization|attitudiniser|attitudinizer|attitudinising|attitudinizing}}
===={{section|rel}}====
{{col|en|attitude|attitudinous}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
q77sfth9brxmrul9vtv1x1iss8s3y5h
2572716
2572715
2026-10-22T12:28:36Z
TheHighFighter2
42988
2572716
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|attitudinise||non-Oxford}}
==={{section|etym}}===
{{root|en|ine-pro|*h₂ep-|id=gia nhập}}
Từ {{af|en|it:attitudine|-ize}}, từ {{der|en|la|aptitūdō|aptitūdin-}} + {{suf|en|-ize}}, thân từ bổ cách của {{der|en|la|aptitūdō}}, từ {{suf|la|aptus|-tūdō|nocat=1}}. {{surf|en|attitude|-ize}}.
==={{section|pron}}===
* {{IPA|en|/ˌætɪˈtjuːdɪnaɪz/|a=RP}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-attitudinize.wav|a=Southern England}}
* {{IPA|en|/ˌætəˈtud(ɪ)nˌaɪz/|[-ɾə-]|a=GA}}
* {{hyphenation|en|at|ti|tud|in|ize}}
==={{section|v}}===
{{en-verb}} {{tlb|en|American spelling|Oxford British spelling}}
# [[lấy|Lấy]] [[dáng]], làm [[điệu bộ]].
===={{section|drv}}====
{{col|en|attitudinisation|attitudinization|attitudiniser|attitudinizer|attitudinising|attitudinizing}}
===={{section|rel}}====
{{col|en|attitude|attitudinous}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
351dic0cywafpo809x8qvt4vec4qgkx
attune
0
96476
2572720
2452336
2026-10-22T13:23:02Z
Hiyuune
50834
2572720
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|etym}}===
{{ety|en|:af|ad-|tune|text=+|tree=1}}
==={{section|pron}}===
* {{IPA|en|/əˈtjuːn/|/əˈt͜ʃuːn/|a=UK}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-attune.wav|a=Southern England}}
* {{IPA|en|/əˈt(j)un/|a=US}}
* {{rhymes|en|uːn|s=2}}
==={{section|v}}===
{{en-verb}}
# Làm cho [[hoà]] [[hợp]].
# Làm cho [[hợp]] âm, [[hoà]] [[dây]] đàn; [[lên dây]] đàn.
===={{section|drv}}====
{{col3|en
|attunable
|attuner
|attunement
|misattune
|reattune
}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
==={{section|ana}}===
* {{anagrams|en|a=aenttu|UNTAET|nutate|tauten}}
dvg8a4y7shr4bcvs1bv6i0n83g5jfzb
coulomb
0
98061
2572765
2458963
2026-10-22T14:43:10Z
Ziv
58397
([[c:GR|GR]]) [[File:Coulomb.jpg]] → [[File:Charles Augustin de Coulomb.jpg]] [[c:COM:FR#FR2|Criterion 2]] · More precise and not just a meaningless one word name
2572765
wikitext
text/x-wiki
{{-eng-}}
[[Hình:Charles Augustin de Coulomb.jpg|thumb|[[Charles-Augustin de Coulomb]]]]
{{-pron-}}
* [[Wiktionary:IPA|IPA]]: {{IPA-old|/ˈkuː.ˌlɑːm/}}
{{-noun-}}
'''coulomb''' {{IPA-old|/ˈkuː.ˌlɑːm/}}
# {{term|Điện học}} [[culông|Culông]], đơn vị đo [[điện tích]] trong [[hệ đo lường quốc tế]]; đặt tên theo nhà vật lý Pháp [[Charles-Augustin de Coulomb]].
{{-ref-}}
{{R:FVDP}}
[[Thể loại:Danh từ tiếng Anh]]
nlo6w4typ7zmnf5tgvikeddpzs3lqvs
because
0
172326
2572877
2453287
2026-10-23T06:16:16Z
MinhVN1863
60203
Đoạn này là gì?
2572877
wikitext
text/x-wiki
{{-eng-}}
{{-pron-}}
* [[Wiktionary:IPA|IPA]]: {{IPA-old|/bɪ.ˈkɔz/}}
{{pron-audio
|place=Hoa Kỳ <!-- Feel free to precise the city or the area -->
|file=En-us-because.ogg
|pron=bɪ.ˈkʌz}}
{{-conj-}}
'''because''' {{IPA-old|/bɪ.ˈkɔz/}}
# Vì, [[bởi vì]].
# [[tại|Tại]].
{{-expr-}}
* '''because of''': Vì, [[do]] [[bởi]].
{{-ref-}}
{{R:FVDP}}
7iz1l1bo13c8uxc0cthq1dbb1w1upfg
2572882
2572877
2026-10-23T06:29:19Z
Hiyuune
50834
2572882
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|bycause|q1=obsolete|becos|q2=phương ngữ}}
* {{alter|en|q=từ lóng|'cause|cause|cos|cuz|coz|'cos|'cuz|'coz|b/c|bc|bcos|bcoz|bcs|bcz|bcus}}
* {{alter|mul|∵|q=logic}}
==={{section|etym}}===
{{etymon|en|:inh|enm:bi cause<ety:af<by><cause>>|tree=1}}
Từ {{inh|en|enm|bi cause}}, từ {{m|enm|bi||by}} + {{m|enm|cause}}, mô phỏng theo {{der|en|fro|par cause}}.
==={{section|pron}}===
* {{a|en|RP}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɒz/|/bɪˈkʌz/|/bɪˈkɔːz/|/bɪˈkɔːs/|q3=lỗi thời|a=mạnh}}
** {{IPA|en|[bɪˈkɵz]|a=SSB}}
*** {{audio|en|LL-Q1860 (eng)-Back ache-because.wav|a=London}}
* {{a|en|GA}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/biˈkɔz/|/biˈkʌz/|/bəˈkɔz/|/bəˈkʌz/|/bɪˈkɔz/|/bɪˈkʌz/|a=mạnh}}
*** {{audio|en|en-us-because.ogg}}
* {{a|en|father-bother}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɑz/|a=mạnh}}
* {{a|en|AU}}
** {{IPA|en|/bəkəz/|a=yếu}}
** {{IPA|en|/bəˈkɔz/|a=mạnh}}
*** {{IPA|en|/bəˈkʊz/|a=mạnh, Queensland}}
* {{a|en|phương ngữ}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkeɪz/|a=mạnh,không còn dùng}}
* {{hyphenation|en|be|cause}}
* {{rhymes|en|ɒz|ʌz|ɔːz|ɔːs|s=2}}
==={{section|conj}}===
{{etymid|en|liên từ}}
{{en-head|conj}}
# Vì, [[bởi vì]].
# [[tại|Tại]].
===={{section|drv}}====
{{col2|en|because is why|because you touch yourself at night|for because}}
===={{section|desc}}====
* {{desc|tpi|bikos}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
* {{R:Bingham IP|74}}
* {{R:en:Grandgent:1899|237}}
* {{R:en:Hurd:1847|Because|3|78}}
coubjfjrs9wdm3yyhildp5n3muofms9
2572883
2572882
2026-10-23T06:29:48Z
Hiyuune
50834
/* Từ nguyên */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572883
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|bycause|q1=obsolete|becos|q2=phương ngữ}}
* {{alter|en|q=từ lóng|'cause|cause|cos|cuz|coz|'cos|'cuz|'coz|b/c|bc|bcos|bcoz|bcs|bcz|bcus}}
* {{alter|mul|∵|q=logic}}
==={{section|etym}}===
{{etymon|en|:inh|enm:bi cause<ety:af<by><cause>>|tree=1}}
Từ {{inh|en|enm|bi cause}}, từ {{m|enm|bi}} + {{m|enm|cause}}, mô phỏng theo {{der|en|fro|par cause}}.
==={{section|pron}}===
* {{a|en|RP}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɒz/|/bɪˈkʌz/|/bɪˈkɔːz/|/bɪˈkɔːs/|q3=lỗi thời|a=mạnh}}
** {{IPA|en|[bɪˈkɵz]|a=SSB}}
*** {{audio|en|LL-Q1860 (eng)-Back ache-because.wav|a=London}}
* {{a|en|GA}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/biˈkɔz/|/biˈkʌz/|/bəˈkɔz/|/bəˈkʌz/|/bɪˈkɔz/|/bɪˈkʌz/|a=mạnh}}
*** {{audio|en|en-us-because.ogg}}
* {{a|en|father-bother}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɑz/|a=mạnh}}
* {{a|en|AU}}
** {{IPA|en|/bəkəz/|a=yếu}}
** {{IPA|en|/bəˈkɔz/|a=mạnh}}
*** {{IPA|en|/bəˈkʊz/|a=mạnh, Queensland}}
* {{a|en|phương ngữ}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkeɪz/|a=mạnh,không còn dùng}}
* {{hyphenation|en|be|cause}}
* {{rhymes|en|ɒz|ʌz|ɔːz|ɔːs|s=2}}
==={{section|conj}}===
{{etymid|en|liên từ}}
{{en-head|conj}}
# Vì, [[bởi vì]].
# [[tại|Tại]].
===={{section|drv}}====
{{col2|en|because is why|because you touch yourself at night|for because}}
===={{section|desc}}====
* {{desc|tpi|bikos}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
* {{R:Bingham IP|74}}
* {{R:en:Grandgent:1899|237}}
* {{R:en:Hurd:1847|Because|3|78}}
gubf1z1vcs7bauukdgyhogez2efogq1
2572884
2572883
2026-10-23T06:29:56Z
Hiyuune
50834
/* Cách viết khác */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572884
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|alt}}===
* {{alter|en|bycause|q1=không còn dùng|becos|q2=phương ngữ}}
* {{alter|en|q=từ lóng|'cause|cause|cos|cuz|coz|'cos|'cuz|'coz|b/c|bc|bcos|bcoz|bcs|bcz|bcus}}
* {{alter|mul|∵|q=logic}}
==={{section|etym}}===
{{etymon|en|:inh|enm:bi cause<ety:af<by><cause>>|tree=1}}
Từ {{inh|en|enm|bi cause}}, từ {{m|enm|bi}} + {{m|enm|cause}}, mô phỏng theo {{der|en|fro|par cause}}.
==={{section|pron}}===
* {{a|en|RP}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɒz/|/bɪˈkʌz/|/bɪˈkɔːz/|/bɪˈkɔːs/|q3=lỗi thời|a=mạnh}}
** {{IPA|en|[bɪˈkɵz]|a=SSB}}
*** {{audio|en|LL-Q1860 (eng)-Back ache-because.wav|a=London}}
* {{a|en|GA}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/biˈkɔz/|/biˈkʌz/|/bəˈkɔz/|/bəˈkʌz/|/bɪˈkɔz/|/bɪˈkʌz/|a=mạnh}}
*** {{audio|en|en-us-because.ogg}}
* {{a|en|father-bother}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkɑz/|a=mạnh}}
* {{a|en|AU}}
** {{IPA|en|/bəkəz/|a=yếu}}
** {{IPA|en|/bəˈkɔz/|a=mạnh}}
*** {{IPA|en|/bəˈkʊz/|a=mạnh, Queensland}}
* {{a|en|phương ngữ}}
** {{IPA|en|/bɪkəz/|a=yếu}}
** {{IPA|en|/bɪˈkeɪz/|a=mạnh,không còn dùng}}
* {{hyphenation|en|be|cause}}
* {{rhymes|en|ɒz|ʌz|ɔːz|ɔːs|s=2}}
==={{section|conj}}===
{{etymid|en|liên từ}}
{{en-head|conj}}
# Vì, [[bởi vì]].
# [[tại|Tại]].
===={{section|drv}}====
{{col2|en|because is why|because you touch yourself at night|for because}}
===={{section|desc}}====
* {{desc|tpi|bikos}}
==={{section|ref}}===
* {{R:FVDP|db=ev}}
* {{R:Bingham IP|74}}
* {{R:en:Grandgent:1899|237}}
* {{R:en:Hurd:1847|Because|3|78}}
lz4hmr8qv8cuj9i5lqu4b8j9f93lisx
attuning
0
224882
2572719
2163331
2026-10-22T13:20:32Z
Hiyuune
50834
2572719
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|attune||ing-form}}.
==={{section|ana}}===
* {{anagrams|en|a=aginnttu|nutating|taunting}}
3c3z1l7mvmsl47eryhmjqwrmrrb8wlp
attuned
0
224883
2572722
1797900
2026-10-22T13:24:41Z
Hiyuune
50834
2572722
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|attune||ed-form}}
==={{section|ana}}===
* {{anagrams|en|a=adenttu|nutated|taunted}}
hv2sj225n59bqfklpkqxutrnfffy46e
attunes
0
224884
2572721
1797901
2026-10-22T13:23:41Z
Hiyuune
50834
2572721
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|v}}===
{{head|en|Biến thể hình thái động từ}}
# {{infl of|en|attune||s-verb-form}}
==={{section|ana}}===
* {{anagrams|en|a=aensttu|tetanus|nutates|Tenutas|tautens|unstate|untaste}}
1d5hoxcxurbjuklapg5glc78uljq9mr
atžvilgis
0
238994
2572729
1797912
2026-10-22T13:32:57Z
Hiyuune
50834
2572729
wikitext
text/x-wiki
=={{langname|lt}}==
==={{section|n}}===
{{lt-noun|m}}
# Sự [[tôn trọng]], sự [[kính trọng]].
dtqov3819epoglb9p20gj7s4e2tei2l
Mô đun:languages/data/3/t
828
260866
2572739
2568664
2026-10-22T13:50:30Z
Lcsnes
40261
2572739
Scribunto
text/plain
local m_langdata = require("Module:languages/data")
-- Loaded on demand, as it may not be needed (depending on the data).
local function u(...)
u = require("Module:string utilities").char
return u(...)
end
local c = m_langdata.chars
local p = m_langdata.puaChars
local s = m_langdata.shared
local m = {}
m["taa"] = {
"tiếng Hạ Tanana",
28565,
"ath-nor",
"Latn",
"Tiếng Hạ Tanana",
"Hạ Tanana",
}
m["tab"] = {
"tiếng Tabasaran",
34079,
"cau-esm",
"Cyrl, Latn, Arab",
"Tiếng Tabasaran",
"Tabasaran",
translit = "tab-translit",
override_translit = true,
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
entry_name = {
Cyrl = s["cau-Cyrl-entryname"],
Latn = s["cau-Latn-entryname"],
},
sort_key = "tab-sortkey",
}
m["tac"] = {
"Lowland Tarahumara",
15616384,
"azc-trc",
"Latn",
}
m["tad"] = {
"tiếng Tause",
2356440,
"paa-wlp",
"Latn",
}
m["tae"] = {
"tiếng Tariana",
732726,
"awd-nwk",
"Latn",
"Tiếng Tariana",
"Tariana",
}
m["taf"] = {
"tiếng Tapirapé",
7684673,
"tup-gua",
"Latn",
"Tiếng Tapirapé",
"Tapirapé",
}
m["tag"] = {
"tiếng Tagoi",
36537,
"nic-ras",
"Latn",
"Tiếng Tagoi",
"Tagoi",
}
m["taj"] = {
"tiếng Tamang Đông",
12953177,
"sit-tam",
"sit-tam-Tibt, Deva",
display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]},
entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]},
"Tiếng Tamang Đông",
"Tamang Đông",
}
m["tak"] = {
"tiếng Tala",
3914494,
"cdc-wst",
"Latn",
"Tiếng Tala",
"Tala",
}
m["tal"] = {
"tiếng Tal",
3440387,
"cdc-wst",
"Latn",
"Tiếng Tal",
"Tal",
}
m["tan"] = {
"Tangale",
529921,
"cdc-wst",
"Latn",
}
m["tao"] = {
"tiếng Yami",
715760,
"phi",
"Latn",
"Tiếng Yami",
"Yami",
}
m["tap"] = {
"tiếng Taabwa",
7673650,
"bnt-sbi",
"Latn",
"Tiếng Taabwa",
"Taabwa",
}
m["tar"] = {
"Central Tarahumara",
20090009,
"azc-trc",
"Latn",
sort_key = {remove_diacritics = c.acute .. "ꞌ"},
}
m["tas"] = {
"tiếng Tây Bồi",
2233794,
"crp",
"Latn",
ancestors = "fr",
sort_key = s["roa-oil-sortkey"],
"Tiếng Tây Bồi",
"Tây Bồi",
}
m["tau"] = {
"Upper Tanana",
28281,
"ath-nor",
"Latn",
}
m["tav"] = {
"tiếng Tatuyo",
2524007,
"sai-tuc",
"Latn",
"Tiếng Tatuyo",
"Tatuyo",
}
m["taw"] = {
"Tai",
7675861,
"ngf-mad",
"Latn",
}
m["tax"] = {
"tiếng Tamki",
3449082,
"cdc-est",
"Latn",
"Tiếng Tamki",
"Tamki",
}
m["tay"] = {
"tiếng Atayal",
715766,
"map-ata",
"Latn",
"Tiếng Atayal",
"Atayal",
}
m["taz"] = {
"tiếng Tocho",
36680,
"alv-tal",
"Latn",
"Tiếng Tocho",
"Tocho",
}
m["tba"] = {
"Aikanã",
3409307,
"qfa-iso",
}
m["tbb"] = {
"Tapeba",
12953908,
}
m["tbc"] = {
"Takia",
3514336,
"poz-oce",
}
m["tbd"] = {
"tiếng Kaki Ae",
6349417,
"poz-ocw",
"Latn",
"Tiếng Kaki Ae",
"Kaki Ae",
}
m["tbe"] = {
"tiếng Tanimbili",
3515188,
"poz-oce",
"Latn",
"Tiếng Tanimbili",
"Tanimbili",
}
m["tbf"] = {
"tiếng Mandara",
3285424,
"poz-ocw",
"Latn",
"Tiếng Mandara",
"Mandara"
}
m["tbg"] = {
"North Tairora",
20210398,
"paa-kag",
}
m["tbh"] = {
"Thurawal",
3537135,
"aus-yuk",
}
m["tbi"] = {
"Gaam",
35338,
"sdv-eje",
"Latn",
}
m["tbj"] = {
"tiếng Tiang",
3528020,
"poz-ocw",
"Latn",
"Tiếng Tiang",
"Tiang",
}
m["tbk"] = {
"tiếng Tagbanwa Calamian",
3915487,
"phi-kal",
"Latn",
"Tiếng Tagbanwa Calamian",
"Tagbanwa Calamian",
}
m["tbl"] = {
"Tboli",
7690594,
"phi",
}
m["tbm"] = {
"Tagbu",
7675188,
"nic-ser",
}
m["tbn"] = {
"Barro Negro Tunebo",
12953943,
"cba",
}
m["tbo"] = {
"Tawala",
7689206,
"poz-ocw",
"Latn",
}
m["tbp"] = {
"Taworta",
7689337,
"paa-lkp",
"Latn",
}
m["tbr"] = {
"Tumtum",
3407029,
"qfa-kad",
}
m["tbs"] = {
"Tanguat",
7683166,
"paa",
"Latn",
}
m["tbt"] = {
"Kitembo",
13123561,
"bnt-shh",
"Latn",
}
m["tbu"] = {
"Tubar",
56730,
"azc-trc",
"Latn",
}
m["tbv"] = {
"Tobo",
7811712,
"ngf",
}
m["tbw"] = {
"Tagbanwa",
3915475,
"phi",
"Latn",
}
m["tbx"] = {
"Kapin",
6366665,
"poz-ocw",
"Latn",
}
m["tby"] = {
"Tabaru",
11732670,
"paa-nha",
}
m["tbz"] = {
"tiếng Tammari",
35186,
"nic-eov",
"Latn",
"Tiếng Tammari",
"Tammari",
}
m["tca"] = {
"Ticuna",
1815205,
"sai-tyu",
"Latn",
}
m["tcb"] = {
"Tanacross",
28268,
"ath-nor",
"Latn",
}
m["tcc"] = {
"Datooga",
35327,
"sdv-nis",
"Latn",
}
m["tcd"] = {
"tiếng Tafi",
36545,
"alv-ktg",
"Latn",
"Tiếng Tafi",
"Tafi",
}
m["tce"] = {
"Southern Tutchone",
31091048,
"ath-nor",
"Latn",
}
m["tcf"] = {
"tiếng Tlapanec Malinaltepec",
25559732,
"omq",
"Latn",
"Tiếng Tlapanec Malinaltepec",
"Tlapanec Malinaltepec",
}
m["tcg"] = {
"Tamagario",
7680531,
"ngf",
}
m["tch"] = {
"Turks and Caicos Creole English",
7855478,
"crp",
"Latn",
ancestors = "en",
}
m["tci"] = {
"Wára",
20825638,
"paa-yam",
}
m["tck"] = {
"Tchitchege",
36595,
"bnt-tek",
}
m["tcl"] = {
"Taman (Myanmar)",
15616518,
"sit-jnp",
"Latn",
}
m["tcm"] = {
"Tanahmerah",
3514927,
"ngf",
}
m["tco"] = {
"tiếng Taungyo",
12953186,
"tbq-brm",
"Mymr",
"Tiếng Taungyo",
"Taungyo",
ancestors = "obr",
}
m["tcp"] = {
"Tawr Chin",
7689338,
"tbq-kuk",
}
m["tcq"] = {
"Kaiy",
6348709,
"paa-lkp",
}
m["tcs"] = {
"Torres Strait Creole",
36648,
"crp",
"Latn",
ancestors = "en",
}
m["tct"] = {
"T'en",
3442330,
"qfa-kms",
}
m["tcu"] = {
"Southeastern Tarahumara",
36807,
"azc-trc",
"Latn",
}
m["tcw"] = {
"Tecpatlán Totonac",
7692795,
"nai-ttn",
"Latn",
}
m["tcx"] = {
"tiếng Toda",
34042,
"dra-tkt",
"Taml",
"Tiếng Toda",
"Toda",
}
m["tcy"] = {
"tiếng Tulu",
34251,
"dra-tlk",
"Tutg, Mlym, Knda", -- Tigalari is not available. Mlym is nearer than Knda but both lack ɛ/ɛː.
"Tiếng Tulu",
"Tulu",
translit = {
Mlym = "ml-translit",
Knda = "kn-translit",
},
}
m["tcz"] = {
"Thado Chin",
6583558,
"tbq-kuk",
}
m["tda"] = {
"tiếng Tagdal",
36570,
"son",
"Latn, Tfng",
"Tiếng Tagdal",
"Tagdal",
translit = {Tfng = "Tfng-translit"},
}
m["tdb"] = {
"tiếng Panchpargania",
21946879,
"inc-eas",
"Deva, as-Beng, Orya, Chis",
"Tiếng Panchpargania",
"Panchpargania",
ancestors = "bh",
}
m["tdc"] = {
"tiếng Emberá-Tadó",
3052041,
"sai-chc",
"Latn",
"Tiếng Emberá-Tadó",
"Emberá-Tadó",
}
m["tdd"] = {
"tiếng Thái Na",
36556,
"tai-swe",
"Tale",
"Tiếng Thái Na",
"Thái Na",
translit = "Tale-translit",
entry_name = {remove_diacritics = c.ZWNJ .. c.ZWJ},
}
m["tde"] = {
"Tiranige Diga Dogon",
5313387,
"nic-dgw",
}
m["tdf"] = {
"Talieng",
37525108,
"mkh-ban",
}
m["tdg"] = {
"tiếng Tamang Tây",
12953178,
"sit-tam",
"sit-tam-Tibt, Deva",
display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]},
entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]},
"Tiếng Tamang Tây",
"Tamang Tây",
}
m["tdh"] = {
"Thulung",
56553,
"sit-kiw",
}
m["tdi"] = {
"Tomadino",
7818197,
"poz-btk",
"Latn",
}
m["tdj"] = {
"tiếng Tajio",
7676870,
"poz",
"Latn",
}
m["tdk"] = {
"Tambas",
3440392,
"cdc-wst",
}
m["tdl"] = {
"Sur",
3914453,
"nic-tar",
}
m["tdm"] = {
"Taruma",
nil,
}
m["tdn"] = {
"Tondano",
3531514,
"phi",
}
m["tdo"] = {
"Teme",
3913994,
"alv-mye",
}
m["tdq"] = {
"Tita",
3914899,
"nic-bco",
}
m["tdr"] = {
"tiếng Tơ Đrá",
7812881,
"mkh-nbn",
"Latn",
"Tiếng Tơ Đrá",
"Tơ Đrá"
}
m["tds"] = {
"Doutai",
5302331,
"paa-lkp",
}
m["tdt"] = {
"Tetun Dili",
12643484,
"crp",
"Latn",
ancestors = "tet",
}
m["tdu"] = {
"Tempasuk Dusun",
3529155,
"poz-san",
}
m["tdv"] = {
"Toro",
3438367,
"nic-alu",
}
m["tdy"] = {
"tiếng Tadyawan",
7674700,
"phi",
"Latn",
"Tiếng Tadyawan",
"Tadyawan"
}
m["tea"] = {
"tiếng Temiar",
3914693,
"mkh-asl",
"Latn",
"Tiếng Temiar",
"Temiar",
}
m["teb"] = {
"Tetete",
7706087,
"sai-tuc",
"Latn",
}
m["tec"] = {
"Terik",
3518379,
"sdv-nma",
}
m["ted"] = {
"Tepo Krumen",
11152243,
"kro-grb",
}
m["tee"] = {
"Huehuetla Tepehua",
56455,
"nai-ttn",
}
m["tef"] = {
"tiếng Teressa",
3518362,
"aav-nic",
"Deva, Latn",
"Tiếng Teressa",
"Teressa",
}
m["teg"] = {
"Teke-Tege",
36478,
"bnt-tek",
}
m["teh"] = {
"Tehuelche",
33930,
"sai-cho",
"Latn",
}
m["tei"] = {
"Torricelli",
3450788,
"qfa-tor",
}
m["tek"] = {
"Ibali Teke",
2802914,
"bnt-tek",
}
m["tem"] = {
"tiếng Temne",
36613,
"alv-mel",
"Latn",
"Tiếng Temne",
"Temne",
}
m["ten"] = {
"Tama (Colombia)",
3832969,
"sai-tuc",
"Latn",
}
m["teo"] = {
"Ateso",
29474,
"sdv-ttu",
"Latn",
}
m["tep"] = {
"Tepecano",
3915525,
"azc",
"Latn",
}
m["teq"] = {
"Temein",
7698064,
"sdv",
}
m["ter"] = {
"Tereno",
3314742,
"awd",
"Latn",
}
m["tes"] = {
"tiếng Tengger",
12473479,
"poz",
"Latn",
"Tiếng Tengger",
"Tengger",
}
m["tet"] = {
"tiếng Tetum",
34125,
"poz-tim",
"Latn",
"Tiếng Tetum",
"Tetum",
}
m["teu"] = {
"Soo",
3437607,
"ssa-klk",
}
m["tev"] = {
"Teor",
12953198,
"poz-cma",
}
m["tew"] = {
"Tewa",
56492,
"nai-kta",
"Latn",
}
m["tex"] = {
"Tennet",
56346,
"sdv",
}
m["tey"] = {
"Tulishi",
12911106,
"qfa-kad",
"Latn",
}
m["tez"] = {
"tiếng Tetserret",
7706841,
"ber",
"Latn, Tfng",
"Tiếng Tetserret",
"Tetserret",
translit = {Tfng = "Tfng-translit"},
}
m["tfi"] = {
"Tofin Gbe",
3530330,
"alv-pph",
}
m["tfn"] = {
"tiếng Dena'ina",
27785,
"ath-nor",
"Latn",
}
m["tfo"] = {
"Tefaro",
7694618,
"paa-egb",
"Latn",
}
m["tfr"] = {
"tiếng Teribe",
36533,
"cba",
"Latn",
"Tiếng Teribe",
"Teribe",
}
m["tft"] = {
"tiếng Ternate",
3518492,
"paa-nha",
"Latn, Arab",
"Tiếng Ternate",
"Ternate",
}
m["tga"] = {
"Sagalla",
12953082,
"bnt-cht",
}
m["tgb"] = {
"Tobilung",
12953913,
"poz-san",
}
m["tgc"] = {
"Tigak",
3528276,
"poz-ocw",
}
m["tgd"] = {
"Ciwogai",
3438799,
"cdc-wst",
}
m["tge"] = {
"tiếng Tamang Gorkha Đông",
12953175,
"sit-tam",
"sit-tam-Tibt, Deva",
display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]},
entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]},
"Tiếng Tamang Gorkha Đông",
"Tamang Gorkha Đông",
}
m["tgf"] = {
"Chali",
3695197,
"sit-ebo",
"Tibt, Latn",
translit = {Tibt = "Tibt-translit"},
override_translit = true,
display_text = {Tibt = s["Tibt-displaytext"]},
entry_name = {Tibt = s["Tibt-entryname"]},
sort_key = {Tibt = "Tibt-sortkey"},
}
m["tgh"] = {
"Tobagonian Creole English",
7811541,
"crp",
ancestors = "en",
}
m["tgi"] = {
"Lawunuia",
3219937,
"poz-ocw",
}
m["tgn"] = {
"Tandaganon",
nil,
"phi",
}
m["tgo"] = {
"Sudest",
7675351,
"poz-ocw",
}
m["tgp"] = {
"tiếng Tangoa",
2410276,
"poz-vnc",
"Latn",
"Tiếng Tangoa",
"Tangoa",
}
m["tgq"] = {
"Tring",
7842360,
"poz-swa",
}
m["tgr"] = {
"Tareng",
25559541,
"mkh",
}
m["tgs"] = {
"Nume",
3346290,
"poz-vnc",
}
m["tgt"] = {
"Central Tagbanwa",
3915515,
"phi",
"Tagb",
}
m["tgu"] = {
"Tanggu",
7682930,
"paa",
"Latn",
}
m["tgv"] = {
"Tingui-Boto",
7808195,
"sai-mje",
"Latn",
}
m["tgw"] = {
"Tagwana Senoufo",
36514,
"alv-tdj",
}
m["tgx"] = {
"Tagish",
28064,
"ath-nor",
"Latn",
}
m["tgy"] = {
"Togoyo",
36825,
"nic-ser",
}
m["thc"] = {
"Tai Hang Tong",
7675753,
"tai-nor",
}
m["thd"] = {
"Kuuk Thaayorre",
6448718,
"aus-pmn",
"Latn",
}
m["the"] = {
"Chitwania Tharu",
22083804,
"inc-eas",
}
m["thf"] = {
"Thangmi",
7710314,
"sit-new",
}
m["thh"] = {
"Northern Tarahumara",
15616395,
"azc-trc",
"Latn",
}
m["thi"] = {
"Tai Long",
25559562,
"tai-swe",
}
m["thk"] = {
"Tharaka",
15407179,
"bnt-kka",
}
m["thl"] = {
"Dangaura Tharu",
22083815,
"inc-eas",
}
m["thm"] = {
"tiếng Thavưng",
34780,
"mkh-vie",
"Thai", --Laoo is feasible but no evidence yet.
"Tiếng Thavưng",
"Thavưng",
sort_key = "Thai-sortkey",
}
m["thn"] = {
"tiếng Thachanad",
7708880,
"dra-mal",
"Mlym",
"Tiếng Thachanad",
"Thachanad",
translit ="ml-translit",
}
m["thp"] = {
"tiếng Thompson",
1755054,
"sal",
"Latn",
"Tiếng Thompson",
"Thompson",
}
m["thq"] = {
"Kochila Tharu",
22083826,
"inc-eas",
}
m["thr"] = {
"Rana Tharu",
12953920,
"inc-eas",
}
m["ths"] = {
"Thakali",
7709348,
"sit-tam",
}
m["tht"] = {
"tiếng Tahltan",
30125,
"ath-nor",
"Latn",
"Tiếng Tahltan",
"Tahltan",
}
m["thu"] = {
"Thuri",
7799291,
"sdv-lon",
}
m["thy"] = {
"Tha",
3915849,
"alv-bwj",
}
m["tic"] = {
"Tira",
36677,
"alv-hei",
}
m["tif"] = {
"Tifal",
11732691,
"ngf-okk",
}
m["tig"] = {
"tiếng Tigre",
34129,
"sem-eth",
"Ethi, Arab",
"Tiếng Tigre",
"Tigre",
translit = {Ethi = "Ethi-translit"},
}
m["tih"] = {
"Timugon Murut",
7807680,
"poz-san",
}
m["tii"] = {
"Tiene",
36469,
"bnt-tek",
}
m["tij"] = {
"Tilung",
7803037,
"sit-kiw",
}
m["tik"] = {
"Tikar",
36483,
"nic-bdn",
"Latn",
}
m["til"] = {
"Tillamook",
2109432,
"sal",
}
m["tim"] = {
"Timbe",
7804599,
"ngf",
}
m["tin"] = {
"tiếng Tindi",
36860,
"cau-and",
"Cyrl",
"Tiếng Tindi",
"Tindi",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
entry_name = {Cyrl = s["cau-Cyrl-entryname"]},
}
m["tio"] = {
"Teop",
3518239,
"poz-ocw",
}
m["tip"] = {
"Trimuris",
7842270,
"paa-tkw",
}
m["tiq"] = {
"Tiéfo",
3914874,
"alv-sav",
}
m["tis"] = {
"Masadiit Itneg",
18748769,
"phi",
}
m["tit"] = {
"Tinigua",
3029805,
}
m["tiu"] = {
"Adasen",
11214797,
"phi",
}
m["tiv"] = {
"Tiv",
34131,
"nic-tvc",
"Latn",
}
m["tiw"] = {
"tiếng Tiwi",
1656014,
"qfa-iso",
"Latn",
"Tiếng Tiwi",
"Tiwi",
}
m["tix"] = {
"Southern Tiwa",
7570552,
"nai-kta",
"Latn",
}
m["tiy"] = {
"tiếng Tiruray",
7809425,
"phi",
"Latn",
"Tiếng Tiruray",
"Tiruray",
}
m["tiz"] = {
"Tai Hongjin",
3915716,
"tai-swe",
}
m["tja"] = {
"Tajuasohn",
3915326,
"kro-wkr",
}
m["tjg"] = {
"Tunjung",
3542117,
"poz",
}
m["tji"] = {
"tiếng Thổ Gia Bắc",
12953229,
"sit-tja",
"Latn",
"Tiếng Thổ Gia Bắc",
"Thổ Gia Bắc",
}
m["tjl"] = {
"tiếng Thái Lai",
7675773,
"tai-swe",
"Mymr",
"Tiếng Thái Lai",
"Thái Lai",
}
m["tjm"] = {
"Timucua",
638300,
"qfa-iso",
}
m["tjn"] = {
"Tonjon",
3913372,
"dmn-jje",
}
m["tjs"] = {
"tiếng Thổ Gia Nam",
12633994,
"sit-tja",
"Latn",
"Tiếng Thổ Gia Nam",
"Thổ Gia Nam",
}
m["tju"] = {
"Tjurruru",
3913834,
"aus-nga",
"Latn",
}
m["tjw"] = {
"Chaap Wuurong",
5285187,
"aus-pam",
"Latn",
}
m["tka"] = {
"Truká",
7847648,
}
m["tkb"] = {
"Buksa",
20983638,
"inc-eas",
}
m["tkd"] = {
"Tukudede",
36863,
"poz-tim",
"Latn",
}
m["tke"] = {
"Takwane",
11030092,
"bnt-mak",
ancestors = "vmw",
}
m["tkf"] = {
"Tukumanféd",
42330115,
"tup-gua",
"Latn",
}
m["tkl"] = {
"tiếng Tokelau",
34097,
"poz-pnp",
"Latn",
"Tiếng Tokelau",
"Tokelau",
}
m["tkm"] = {
"Takelma",
56710,
}
m["tkn"] = {
"tiếng Tokunoshima",
3530484,
"jpx-nry",
"Jpan",
"Tiếng Tokunoshima",
"Tokunoshima",
translit = s["jpx-translit"],
display_text = s["jpx-displaytext"],
entry_name = s["jpx-entryname"],
sort_key = s["jpx-sortkey"],
}
m["tkp"] = {
"Tikopia",
36682,
"poz-pnp",
"Latn",
}
m["tkq"] = {
"Tee",
3075144,
"nic-ogo",
"Latn",
}
m["tkr"] = {
"tiếng Tsakhur",
36853,
"cau-wsm",
"Cyrl, Latn, Arab",
"Tiếng Tsakhur",
"Tsakhur",
display_text = {Cyrl = s["cau-Cyrl-displaytext"]},
entry_name = {
Cyrl = s["cau-Cyrl-entryname"],
Latn = s["cau-Latn-entryname"],
},
}
m["tks"] = {
"Ramandi",
25261947,
"xme-ttc",
ancestors = "xme-ttc-sou",
}
m["tkt"] = {
"Kathoriya Tharu",
22083822,
"inc-eas",
}
m["tku"] = {
"Upper Necaxa Totonac",
56343,
"nai-ttn",
"Latn",
}
m["tkv"] = {
"Mur Pano",
nil,
"poz-ocw",
"Latn",
}
m["tkw"] = {
"Teanu",
3516731,
"poz-oce",
"Latn",
}
m["tkx"] = {
"Tangko",
7682993,
"ngf-okk",
}
m["tkz"] = {
"Takua",
7678544,
"mkh",
}
m["tla"] = {
"Southwestern Tepehuan",
3518245,
"azc",
"Latn",
}
m["tlb"] = {
"Tobelo",
1142333,
"paa-nha",
}
m["tlc"] = {
"Misantla Totonac",
56460,
"nai-ttn",
"Latn",
}
m["tld"] = {
"Talaud",
7678964,
"phi",
}
m["tlf"] = {
"Telefol",
7696150,
"ngf-okk",
}
m["tlg"] = {
"Tofanma",
4461493,
"paa-pau",
}
m["tlh"] = {
"tiếng Klingon",
10134,
"art",
"Latn",
"Tiếng Klingon",
"Klingon",
type = "appendix-constructed",
}
m["tli"] = {
"tiếng Tlingit",
27792,
"xnd",
"Latn, Cyrl",
"Tiếng Tlingit",
"Tlingit",
}
m["tlj"] = {
"Talinga-Bwisi",
7679530,
"bnt-haj",
}
m["tlk"] = {
"Taloki",
3514563,
"poz-btk",
}
m["tll"] = {
"Tetela",
2613465,
"bnt-tet",
}
m["tlm"] = {
"Tolomako",
3130514,
"poz-vnc",
}
m["tln"] = {
"Talondo'",
7680293,
"poz-ssw",
}
m["tlo"] = {
"Talodi",
36525,
"alv-tal",
}
m["tlp"] = {
"Filomena Mata-Coahuitlán Totonac",
5449202,
"nai-ttn",
"Latn",
}
m["tlq"] = {
"tiếng Tai Loi",
7675784,
"mkh-pal",
nil,
"Tiếng Tai Loi",
"Tai Loi"
}
m["tlr"] = {
"Talise",
3514510,
"poz-sls",
}
m["tls"] = {
"Tambotalo",
7681065,
"poz-vnc",
}
m["tlt"] = {
"Teluti",
12953194,
"poz-cma",
}
m["tlu"] = {
"Tulehu",
7852006,
"poz-cma",
}
m["tlv"] = {
"Taliabu",
3514498,
"poz-cma",
"Latn",
}
m["tlx"] = {
"Khehek",
3196124,
"poz-aay",
}
m["tly"] = {
"tiếng Talysh",
34318,
"xme-ttc",
"Latn, Cyrl, fa-Arab",
"Tiếng Talysh",
"Talysh",
}
m["tma"] = {
"Tama (Chad)",
57001,
"sdv-tmn",
}
m["tmb"] = {
"Avava",
2157461,
"poz-vnc",
}
m["tmc"] = {
"Tumak",
3121045,
"cdc-est",
}
m["tmd"] = {
"Haruai",
12632146,
"ngf-mad",
}
m["tme"] = {
"Tremembé",
5246937,
}
m["tmf"] = {
"Toba-Maskoy",
3033544,
"sai-mas",
"Latn",
}
m["tmg"] = {
"Ternateño",
7232597,
}
m["tmh"] = {
"tiếng Tuareg",
34065,
"ber",
"Latn, Tfng, Arab",
"Tiếng Tuareg",
"Tuareg",
entry_name = {remove_diacritics = c.grave .. c.acute .. c.circ},
}
m["tmi"] = {
"Tutuba",
7857052,
"poz-vnc",
}
m["tmj"] = {
"Samarokena",
7408865,
"paa-tkw",
}
m["tmk"] = {
"Northwestern Tamang",
15616509,
"sit-tam",
"sit-tam-Tibt, Deva",
display_text = {["sit-tam-Tibt"] = s["Tibt-displaytext"]},
entry_name = {["sit-tam-Tibt"] = s["Tibt-entryname"]},
}
m["tml"] = {
"Tamnim Citak",
12643315,
"ngf",
}
m["tmm"] = {
"Tai Thanh",
7675842,
"tai-swe",
}
m["tmn"] = {
"Taman (Indonesia)",
7680671,
"poz",
"Latn",
}
m["tmo"] = {
"tiếng Temoq",
7698205,
"mkh-asl",
"Latn",
"Tiếng Temoq",
"Temoq"
}
m["tmq"] = {
"Tumleo",
7852641,
"poz-ocw",
}
m["tms"] = {
"Tima",
36684,
"nic-ktl",
}
m["tmt"] = {
"Tasmate",
7687571,
"poz-vnc",
}
m["tmu"] = {
"Iau",
56867,
"paa-lkp",
}
m["tmv"] = {
"Motembo",
11013108,
"bnt-bun",
}
m["tmy"] = {
"Tami",
3514812,
"poz-oce",
}
m["tmz"] = {
"Tamanaku",
3441435,
"sai-ven",
"Latn",
}
m["tna"] = {
"Tacana",
3182551,
"sai-tac",
"Latn",
}
m["tnb"] = {
"Western Tunebo",
3181238,
"cba",
}
m["tnc"] = {
"tiếng Tanimuca-Retuarã",
36535,
"sai-tuc",
"Latn",
"Tiếng Tanimuca-Retuarã",
"Tanimuca-Retuarã",
}
m["tnd"] = {
"Angosturas Tunebo",
25559604,
"cba",
}
m["tne"] = {
"Tinoc Kallahan",
3192219,
}
m["tng"] = {
"Tobanga",
3440501,
"cdc-est",
}
m["tnh"] = {
"Maiani",
6735243,
"ngf-mad",
"Latn",
}
m["tni"] = {
"Tandia",
7682454,
"poz-hce",
"Latn",
}
m["tnk"] = {
"Kwamera",
3200806,
"poz-oce",
}
m["tnl"] = {
"Lenakel",
3229429,
"poz-oce",
}
m["tnm"] = {
"Tabla",
7673105,
"paa-sen",
}
m["tnn"] = {
"North Tanna",
957945,
"poz-oce",
}
m["tno"] = {
"Toromono",
510544,
"sai-tac",
"Latn",
}
m["tnp"] = {
"Whitesands",
3063761,
"poz-oce",
}
m["tnq"] = {
"tiếng Taíno",
5232952,
"awd-taa",
"Latn",
"Tiếng Taíno",
"Taíno",
}
m["tnr"] = {
"Bedik",
35096,
"alv-ten",
}
m["tns"] = {
"Tenis",
7699870,
"poz-ocw",
}
m["tnt"] = {
"Tontemboan",
3531666,
"phi",
"Latn",
}
m["tnu"] = {
"Tay Khang",
6362363,
"tai",
}
m["tnv"] = {
"tiếng Tanchangya",
7682361,
"inc-eas",
"Cakm, Beng",
"Tiếng Tanchangya",
"Tanchangya",
ancestors = "inc-obn",
}
m["tnw"] = {
"Tonsawang",
3531660,
"phi",
}
m["tnx"] = {
"Tanema",
2106984,
"poz-oce",
}
m["tny"] = {
"Tongwe",
7821200,
"bnt",
}
m["tnz"] = {
"tiếng Ten'edn",
3073453,
"mkh-asl",
"Latn",
"Tiếng Ten'edn",
"Ten'edn",
}
m["tob"] = {
"Toba",
3113756,
"sai-guc",
"Latn",
}
m["toc"] = {
"Coyutla Totonac",
15615591,
"nai-ttn",
"Latn",
}
m["tod"] = {
"tiếng Toma",
11055484,
"dmn-msw",
"Latn, Loma",
"Tiếng Toma",
"Toma",
}
m["tof"] = {
"Gizrra",
5565941,
}
m["tog"] = {
"Tonga (Malawi)",
3847648,
"bnt-nys",
"Latn",
}
m["toh"] = {
"Tonga (Mozambique)",
7820988,
"bnt-bso",
}
m["toi"] = {
"Tonga (Zambia)",
34101,
"bnt-bot",
}
m["toj"] = {
"Tojolabal",
36762,
"myn",
}
m["tok"] = {
"tiếng Toki Pona",
36846,
"art",
"Latn",
"Tiếng Toki Pona",
"Toki Pona",
type = "appendix-constructed",
}
m["tol"] = {
"Tolowa",
20827,
"ath-pco",
"Latn",
}
m["tom"] = {
"Tombulu",
3531199,
"phi",
}
m["too"] = {
"Xicotepec de Juárez Totonac",
8044353,
"nai-ttn",
"Latn",
}
m["top"] = {
"tiếng Totonac Papantla",
56329,
"nai-ttn",
"Latn",
"Tiếng Totonac Papantla",
"Totonac Papantla",
}
m["toq"] = {
"Toposa",
3033588,
"sdv-ttu",
}
m["tor"] = {
"Togbo-Vara Banda",
11002922,
"bad-cnt",
}
m["tos"] = {
"tiếng Totonac cao nguyên",
13154149,
"nai-ttn",
"Latn",
"Tiếng Totonac cao nguyên",
"Totonac cao nguyên",
}
m["tou"] = {
"tiếng Thổ",
22694631,
"mkh-vie",
nil,
"Tiếng Thổ",
"Thổ",
}
m["tov"] = {
"Upper Taromi",
12953183,
"xme-ttc",
ancestors = "xme-ttc-cen",
}
m["tow"] = {
"tiếng Jemez",
3912876,
"nai-kta",
"Latn",
"Tiếng Jemez",
"Jemez",
}
m["tox"] = {
"tiếng Tobi",
34022,
"poz-mic",
nil,
"Tiếng Tobi",
"Tobi",
}
m["toy"] = {
"Topoiyo",
7824977,
"poz-kal",
}
m["toz"] = {
"To",
7811216,
"alv-mbm",
}
m["tpa"] = {
"Taupota",
7688832,
"poz-ocw",
}
m["tpc"] = {
"tiếng Me'phaa Azoyú",
25559730,
"omq",
"Latn",
}
m["tpe"] = {
"tiếng Tippera",
16115423,
"tbq-bdg",
"Latn, Beng",
"Tiếng Tippera",
"Tippera",
}
m["tpf"] = {
"Tarpia",
12953185,
"poz-ocw",
}
m["tpg"] = {
"Kula",
6442714,
"qfa-tap",
}
m["tpi"] = {
"tiếng Tok Pisin",
34159,
"crp",
"Latn",
"Tiếng Tok Pisin",
"Tok Pisin",
ancestors = "en",
}
m["tpj"] = {
"Tapieté",
3121063,
}
m["tpk"] = {
"Tupinikin",
33924,
"tup-gua",
}
m["tpl"] = {
"tiếng Me'phaa Tlacoapa",
16115511,
"omq",
}
m["tpm"] = {
"Tampulma",
36590,
"nic-gnw",
}
m["tpn"] = {
"tiếng Tupi",
31528147,
"tup-gua",
"Latn",
"Tiếng Tupi",
"Tupi",
}
m["tpo"] = {
"tiếng Thái Hàng Tổng",
7675795,
"tai-nor",
"Latn",
"Tiếng Thái Hàng Tổng",
"Thái Hàng Tổng"
}
m["tpp"] = {
"Pisaflores Tepehua",
56349,
"nai-ttn",
}
m["tpq"] = {
"Tukpa",
12953230,
"sit-las",
}
m["tpr"] = {
"Tuparí",
3542217,
"tup",
"Latn",
}
m["tpt"] = {
"tiếng Tepehua Tlachichilco",
56330,
"nai-ttn",
nil,
"Tiếng Tepehua Tlachichilco",
"Tepehua Tlachichilco",
}
m["tpu"] = {
"tiếng Tampuan",
3514882,
"mkh-ban",
"Khmr",
"Tiếng Tampuan",
"Tampuan",
}
m["tpv"] = {
"Tanapag",
3397371,
"poz-mic",
}
m["tpw"] = {
"tiếng Tupi cổ",
56944,
"tup-gua",
"Latn",
"Tiếng Tupi cổ",
"Tupi cổ",
}
m["tpx"] = {
"tiếng Me'phaa Acatepec",
31157882,
"omq",
"Latn",
}
m["tpy"] = {
"Trumai",
12294279,
"qfa-iso",
}
m["tpz"] = {
"Tinputz",
3529205,
"poz-ocw",
}
m["tqb"] = {
"Tembé",
10322157,
"tup-gua",
"Latn",
}
m["tql"] = {
"Lehali",
3229119,
"poz-oce",
}
m["tqm"] = {
"Turumsa",
7856508,
"paa",
}
m["tqn"] = {
"Tenino",
15699255,
"nai-shp",
"Latn",
ancestors = "nai-spt",
}
m["tqo"] = {
"Toaripi",
7811403,
"ngf",
}
m["tqp"] = {
"Tomoip",
3531388,
"poz-ocw",
}
m["tqq"] = {
"tiếng Tunni",
3514343,
"cus-som",
nil,
"Tiếng Tunni",
"Tunni",
}
m["tqr"] = {
"Torona",
36679,
"alv-tal",
}
m["tqt"] = {
"Western Totonac",
7116691,
"nai-ttn",
"Latn",
}
m["tqu"] = {
"Touo",
56750,
}
m["tqw"] = {
"tiếng Tonkawa",
2454881,
"qfa-iso",
"Latn",
"Tiếng Tonkawa",
"Tonkawa",
}
m["tra"] = {
"Tirahi",
3812406,
"inc-koh",
}
m["trb"] = {
"Terebu",
7701797,
"poz-ocw",
}
m["trc"] = {
"tiếng Triqui Copala",
12953935,
"omq-tri",
"Latn",
}
m["trd"] = {
"Turi",
7854914,
"mun",
}
m["tre"] = {
"East Tarangan",
18609750,
"poz",
}
m["trf"] = {
"Trinidadian Creole English",
7842493,
"crp",
ancestors = "en",
}
m["trg"] = {
"Lishán Didán",
56473,
"sem-nna",
}
m["trh"] = {
"Turaka",
12953237,
"ngf",
}
m["tri"] = {
"tiếng Trió",
56885,
"sai-tar",
"Latn",
"Tiếng Trió",
"Trió",
}
m["trj"] = {
"Toram",
3441225,
"cdc-est",
}
m["trl"] = {
"Traveller Scottish",
3915671,
"crp",
"Latn",
ancestors = "sco, rom",
}
m["trm"] = {
"Tregami",
34081,
"nur-sou",
}
m["trn"] = {
"Trinitario",
3539279,
"awd",
}
m["tro"] = {
"Tarao",
3515603,
"tbq-kuk",
"Latn",
}
m["trp"] = {
"tiếng Kok Borok",
35947,
"tbq-bdg",
"Beng, Latn",
"Tiếng Kok Borok",
"Kok Borok",
}
m["trq"] = {
"tiếng Triqui San Martín Itunyoso",
12953934,
"omq-tri",
"Latn",
"Tiếng Triqui San Martín Itunyoso",
"Triqui San Martín Itunyoso",
}
m["trr"] = {
"Taushiro",
1957508,
}
m["trs"] = {
"tiếng Triqui Chicahuaxtla",
3539587,
"omq-tri",
"Latn",
"Tiếng Triqui Chicahuaxtla",
"Triqui Chicahuaxtla",
}
m["trt"] = {
"Tunggare",
615071,
"paa-egb",
"Latn",
}
m["tru"] = {
"tiếng Turoyo",
34040,
"sem-cna",
"Syrc, Latn",
"Tiếng Turoyo",
"Turoyo",
entry_name = "Syrc-entryname",
translit = "tru-translit",
}
m["trv"] = {
"tiếng Truku",
716686,
"map-ata",
"Latn",
"Tiếng Truku",
"Truku",
}
m["trw"] = {
"tiếng Torwali",
2665246,
"inc-koh",
"ur-Arab",
"Tiếng Torwali",
"Torwali",
}
m["trx"] = {
"Tringgus",
7842365,
"day",
}
m["try"] = {
"Turung",
7856514,
"tai-swe",
"as-Beng",
}
m["trz"] = {
"Torá",
7827518,
"sai-cpc",
}
m["tsa"] = {
"Tsaangi",
36675,
"bnt-nze",
}
m["tsb"] = {
"tiếng Tsamai",
2371358,
"cus-eas",
"Latn",
"Tiếng Tsamai",
"Tsamai",
}
m["tsc"] = {
"Tswa",
2085051,
"bnt-tsr",
}
m["tsd"] = {
"tiếng Tsakonia",
220607,
"grk",
"Grek",
"Tiếng Tsakonia",
"Tsakonia",
ancestors = "grc-dor",
translit = "el-translit",
entry_name = {remove_diacritics = c.caron .. c.diaerbelow .. c.brevebelow},
sort_key = s["Grek-sortkey"],
}
m["tse"] = {
"Tunisian Sign Language",
7853191,
"sgn",
}
m["tsf"] = {
"Southwestern Tamang",
12953176,
"sit-tam",
}
m["tsg"] = {
"tiếng Tausug",
34142,
"phi",
"Latn, Arab",
"Tiếng Tausug",
"Tausug",
}
m["tsh"] = {
"Tsuvan",
3502326,
"cdc-cbm",
}
m["tsi"] = {
"tiếng Tsimshian",
20085721,
"nai-tsi",
"Latn",
"Tiếng Tsimshian",
"Tsimshian",
}
m["tsj"] = {
"tiếng Tshangla",
36840,
"sit-tsk",
"Tibt, Latn, Deva",
"Tiếng Tshangla",
"Tshangla",
translit = {Tibt = "Tibt-translit"},
override_translit = true,
display_text = {Tibt = s["Tibt-displaytext"]},
entry_name = {Tibt = s["Tibt-entryname"]},
sort_key = {Tibt = "Tibt-sortkey"},
}
m["tsl"] = {
"Ts'ün-Lao",
3446675,
"tai",
}
m["tsm"] = {
"Turkish Sign Language",
36885,
"sgn",
}
m["tsp"] = {
"Northern Toussian",
11155635,
"alv-sav",
}
m["tsq"] = {
"Thai Sign Language",
7709156,
"sgn",
"Sgnw",
}
m["tsr"] = {
"Akei",
2828964,
"poz-vnc",
}
m["tss"] = {
"Taiwan Sign Language",
34019,
"sgn-jsl",
}
m["tsu"] = {
"tiếng Tsou",
716681,
"map-tsu",
"Latn",
"Tiếng Tsou",
"Tsou",
}
m["tsv"] = {
"Tsogo",
36674,
"bnt-tso",
}
m["tsw"] = {
"Tsishingini",
13123571,
"nic-kam",
}
m["tsx"] = {
"Mubami",
6930815,
"ngf",
}
m["tsy"] = {
"Tebul Sign Language",
7692090,
"sgn",
}
m["tta"] = {
"Tutelo",
2311602,
"sio-ohv",
}
m["ttb"] = {
"Gaa",
3438361,
"nic-dak",
}
m["ttc"] = {
"Tektiteko",
36686,
"myn",
}
m["ttd"] = {
"Tauade",
7688634,
}
m["tte"] = {
"Bwanabwana",
5003667,
"poz-ocw",
"Latn",
}
m["ttf"] = {
"Tuotomb",
7853459,
"nic-mbw",
"Latn",
}
m["ttg"] = {
"Tutong",
3507990,
"poz-swa",
"Latn",
}
m["tth"] = {
"tiếng Tà Ôi Thượng",
3512660,
"mkh-kat",
"Latn",
"Tiếng Tà Ôi Thượng",
"Tà Ôi Thượng"
}
m["tti"] = {
"Tobati",
7811556,
"poz-ocw",
"Latn",
}
m["ttj"] = {
"tiếng Tooro",
7824218,
"bnt-nyg",
"Latn",
"Tiếng Tooro",
"Tooro",
}
m["ttk"] = {
"Totoro",
3532756,
"sai-bar",
"Latn",
}
m["ttl"] = {
"Totela",
10962316,
"bnt-bot",
"Latn",
}
m["ttm"] = {
"Northern Tutchone",
20822,
"ath-nor",
"Latn",
}
m["ttn"] = {
"Towei",
7829606,
"paa-pau",
}
m["tto"] = {
"tiếng Tà Ôi Hạ",
25559539,
"mkh-kat",
"Laoo",
"Tiếng Tà Ôi Hạ",
"Tà Ôi Hạ",
}
m["ttp"] = {
"Tombelala",
6799663,
"poz-kal",
}
m["ttr"] = {
"Tera",
56267,
"cdc-cbm",
}
m["tts"] = {
"tiếng Isan",
33417,
"tai-swe",
"Thai",
"Tiếng Isan",
"Isan",
sort_key = "Thai-sortkey",
}
m["ttt"] = {
"tiếng Tat",
56489,
"ira-swi",
"Cyrl, Latn, Armn, fa-Arab",
"Tiếng Tat",
"Tat",
ancestors = "fa",
}
m["ttu"] = {
"Torau",
3532208,
"poz-ocw",
}
m["ttv"] = {
"Titan",
3445811,
"poz-aay",
}
m["ttw"] = {
"Long Wat",
7856961,
"poz-swa",
}
m["tty"] = {
"Sikaritai",
7513600,
"paa-lkp",
}
m["ttz"] = {
"Tsum",
12953223,
"sit-kyk",
}
m["tua"] = {
"Wiarumus",
7998045,
"qfa-tor",
"Latn",
}
m["tub"] = {
"Tübatulabal",
56704,
"azc",
"Latn",
}
m["tuc"] = {
"Mutu",
3331003,
"poz-ocw",
"Latn",
}
m["tud"] = {
"Tuxá",
7857217,
}
m["tue"] = {
"Tuyuca",
2520538,
"sai-tuc",
"Latn",
}
m["tuf"] = {
"Central Tunebo",
12953942,
"cba",
}
m["tug"] = {
"Tunia",
863721,
"alv-bua",
}
m["tuh"] = {
"Taulil",
3516141,
"paa-bng",
}
m["tui"] = {
"Tupuri",
36646,
"alv-mbm",
"Latn",
}
m["tuj"] = {
"Tugutil",
12953228,
"paa-nha"
}
m["tul"] = {
"Tula",
3914907,
"alv-wjk",
}
m["tum"] = {
"tiếng Tumbuka",
34138,
"bnt-nys",
"Latn",
"Tiếng Tumbuka",
"Tumbuka",
}
m["tun"] = {
"tiếng Tunica",
56619,
"qfa-iso",
"Latn",
"Tiếng Tunica",
"Tunica",
}
m["tuo"] = {
"Tucano",
3541834,
"sai-tuc",
"Latn",
}
m["tuq"] = {
"Tedaga",
36639,
"ssa-sah",
}
m["tus"] = {
"Tuscarora",
36944,
"iro-nor",
"Latn",
}
m["tuu"] = {
"Tututni",
20627,
"ath-pco",
"Latn",
}
m["tuv"] = {
"Turkana",
36958,
"sdv-ttu",
"Latn",
}
m["tux"] = {
"Tuxináwa",
7857204,
"sai-pan",
"Latn",
}
m["tuy"] = {
"Tugen",
3541935,
"sdv-nma",
}
m["tuz"] = {
"Turka",
36643,
"nic-gur",
"Latn",
}
m["tva"] = {
"Vaghua",
3553248,
"poz-ocw",
"Latn",
}
m["tvd"] = {
"Tsuvadi",
3914936,
"nic-kam",
}
m["tve"] = {
"Te'un",
7690709,
"poz-cet",
"Latn",
}
m["tvk"] = {
"Southeast Ambrym",
252411,
"poz-vnc",
"Latn",
}
m["tvl"] = {
"tiếng Tuvalu",
34055,
"poz-pnp",
"Latn",
"Tiếng Tuvalu",
"Tuvalu",
}
m["tvm"] = {
"Tela-Masbuar",
7695666,
"poz-tim",
}
m["tvn"] = {
"tiếng Tavoy",
7689158,
"tbq-brm",
"Mymr",
"Tiếng Tavoy",
"Tavoy",
ancestors = "obr",
}
m["tvo"] = {
"Tidore",
3528199,
"paa-nha",
"Latn, Arab",
}
m["tvs"] = {
"Taveta",
15632387,
"bnt-par",
}
m["tvt"] = {
"Tutsa Naga",
7856987,
"sit-tno",
}
m["tvu"] = {
"Tunen",
36632,
"nic-mbw",
}
m["tvw"] = {
"Sedoa",
7445362,
"poz-kal",
}
m["tvx"] = {
"tiếng Taivoan",
1975271,
"map",
"Latn",
"Tiếng Taivoan",
"Taivoan",
}
m["tvy"] = {
"Timor Pidgin",
4904029,
"crp",
ancestors = "pt",
}
m["twa"] = {
"Twana",
7857412,
"sal",
}
m["twb"] = {
"Western Tawbuid",
12953912,
"phi",
}
m["twc"] = {
"Teshenawa",
3436597,
"phi",
}
m["twe"] = {
"Teiwa",
3519302,
"ngf",
"Latn",
}
m["twf"] = {
"tiếng Taos",
7684320,
"nai-kta",
"Latn",
"Tiếng Taos",
"Taos",
}
m["twg"] = {
"Tereweng",
12953200,
"qfa-tap",
}
m["twh"] = {
"tiếng Thái Trắng",
7675751,
"tai-swe",
"Tavt",
"Tiếng Thái Trắng",
"Thái Trắng",
--translit = "Tavt-translit",
sort_key = {
from = {"[꪿ꫀ꫁ꫂ]", "([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])"},
to = {"", "%2%1"}
},
}
m["twm"] = {
"Tawang Monpa",
36586,
"sit-ebo",
"Tibt",
translit = "Tibt-translit",
override_translit = true,
display_text = s["Tibt-displaytext"],
entry_name = s["Tibt-entryname"],
sort_key = "Tibt-sortkey",
}
m["twn"] = {
"Twendi",
7857682,
"nic-mmb",
}
m["two"] = {
"Tswapong",
3446241,
"bnt-sts",
}
m["twp"] = {
"Ere",
3056045,
"poz-aay",
"Latn",
}
m["twq"] = {
"tiếng Tasawaq",
36564,
"son",
"Latn",
"Tiếng Tasawaq",
"Tasawaq",
}
m["twr"] = {
"Southwestern Tarahumara",
12953909,
"azc-trc",
"Latn",
}
m["twt"] = {
"Turiwára",
3542307,
"tup-gua",
"Latn",
}
m["twu"] = {
"Termanu",
7702572,
"poz-tim",
}
m["tww"] = {
"Tuwari",
7857159,
"paa-spk",
}
m["twy"] = {
"Tawoyan",
3513542,
"poz-bre",
}
m["txa"] = {
"Tombonuo",
7818692,
"poz-san",
}
m["txb"] = {
"tiếng Tochari B",
3199353,
"ine-toc",
"Latn",
"Tiếng Tochari B",
"Tochari B",
wikipedia_article = "Tocharian languages", -- wikidata id has no associated article
standardChars = "AaÄäĀāCcEeIiKkLlMmṂṃNnṄṅÑñOoPpRrSsŚśṢṣTtUuWwYy" .. c.punc,
}
m["txc"] = {
"Tsetsaut",
20829,
"ath-nor",
"Latn",
}
m["txe"] = {
"Totoli",
7828387,
"poz-tot",
"Latn",
}
m["txg"] = {
"tiếng Tangut",
2727930,
"sit-qia",
"Tang",
"Tiếng Tangut",
"Tangut",
translit = "txg-translit",
}
m["txj"] = {
"Tarjumo",
nil,
"ssa-sah",
"Latn, Arab",
}
m["txh"] = {
"tiếng Thracia",
36793,
"ine",
"Latn, Grek",
"Tiếng Thracia",
"Thracia",
translit = "el-translit",
}
m["txi"] = {
"Ikpeng",
9344891,
"sai-pek",
"Latn",
}
m["txm"] = {
"Tomini",
7818911,
"poz",
}
m["txn"] = {
"West Tarangan",
3515594,
"poz",
}
m["txo"] = {
"tiếng Toto",
36709,
"sit-dhi",
"Beng, Toto",
"Tiếng Toto",
"Toto",
}
m["txq"] = {
"Tii",
7801784,
"poz-tim",
}
m["txr"] = {
"Tartessian",
36795,
}
m["txs"] = {
"Tonsea",
3531659,
"phi",
}
m["txt"] = {
"Citak",
3447279,
"ngf",
}
m["txu"] = {
"tiếng Kayapó",
3101212,
"sai-nje",
"Latn",
"Tiếng Kayapó",
"Kayapó",
}
m["txx"] = {
"Tatana",
18643518,
"poz-san",
}
m["tya"] = {
"Tauya",
7688978,
"ngf-mad",
}
m["tye"] = {
"Kyenga",
3913304,
"dmn-bbu",
"Latn",
}
m["tyh"] = {
"tiếng Ơ Đu",
3347428,
"mkh-khm",
nil,
"Tiếng Ơ Đu",
"Ơ Đu",
}
m["tyi"] = {
"Teke-Tsaayi",
33123613,
"bnt-nze",
}
m["tyj"] = {
"tiếng Tay Dọ",
7675746,
"tai-nor",
"Thai, Latn, Tayo", -- Vietnamese alphabet
"Tiếng Tay Dọ",
"Tay Dọ",
}
m["tyl"] = {
"Thu Lao",
12953921,
"tai-cen",
}
m["tyn"] = {
"Kombai",
6428241,
"ngf",
}
m["typ"] = {
"Kuku-Thaypan",
3915693,
"aus-pmn",
"Latn",
}
m["tyr"] = {
"tiếng Thái Đỏ",
3915207,
"tai-swe",
"Tavt",
"Tiếng Thái Đỏ",
"Thái Đỏ",
}
m["tys"] = {
"tiếng Tày Sa Pa",
3446668,
"tai-sap",
"Latn",
"Tiếng Tày Sa Pa",
"Tày Sa Pa",
}
m["tyt"] = {
"Tày Tac",
7862029,
"tai-swe",
}
m["tyu"] = {
"Kua",
3832933,
"khi-kal",
}
m["tyv"] = {
"tiếng Tuva",
34119,
"trk-ssb",
"Cyrl",
"Tiếng Tuva",
"Tuva",
translit = "tyv-translit",
override_translit = true,
sort_key = "tyv-sortkey",
}
m["tyx"] = {
"Teke-Tyee",
36634,
"bnt-nze",
}
m["tyz"] = {
"tiếng Tày", -- This does not mean its umbrella "Tai" languages.
2511476,
"tai-tay",
"Latn, Hani",
"Tiếng Tày",
"Tày",
sort_key = {Hani = "Hani-sortkey"},
}
m["tza"] = {
"Tanzanian Sign Language",
7684177,
"sgn",
}
m["tzh"] = {
"Tzeltal",
36808,
"myn",
"Latn",
}
m["tzj"] = {
"Tz'utujil",
36941,
"myn",
"Latn",
}
m["tzl"] = {
"tiếng Talossa",
1063911,
"art",
"Latn",
"Tiếng Talossa",
"Talossa",
type = "appendix-constructed",
sort_key = "tzl-sortkey",
}
m["tzm"] = {
"tiếng Tamazight Trung Atlas",
49741,
"ber",
"Tfng, Arab, Latn",
"Tiếng Tamazight Trung Atlas",
"Tamazight Trung Atlas",
translit = "Tfng-translit",
}
m["tzn"] = {
"Tugun",
12953225,
"poz-tim",
}
m["tzo"] = {
"tiếng Tzotzil",
36809,
"myn",
"Latn",
"Tiếng Tzotzil",
"Tzotzil",
}
m["tzx"] = {
"Tabriak",
56872,
"paa-lsp",
"Latn",
}
return require("Module:languages").finalizeData(m, "language")
eirmwcugrbkes602b71dkfoanu1syha
Mô đun:families/data
828
261975
2572750
2572032
2026-10-22T14:21:56Z
Hiyuune
50834
2572750
Scribunto
text/plain
--[=[
This module contains definitions for all language family codes on Wiktionary.
]=]--
local m = {}
m["aav"] = {
"ngữ hệ Nam Á",
33199,
"Ngữ hệ Nam Á",
"Nam Á",
aliases = {"Nam Á"},
}
m["aav-khs"] = {
"nhóm ngôn ngữ Khasi",
3073734,
"aav",
"Nhóm ngôn ngữ Khasi",
"Khasi",
aliases = {"Khasi"},
}
m["aav-nic"] = {
"nhóm ngôn ngữ Nicobar",
217380,
"aav",
"Nhóm ngôn ngữ Nicobar",
"Nicobar",
}
m["aav-pkl"] = {
"nhóm ngôn ngữ Pnar-Khasi-Lyngngam",
nil,
"aav-khs",
"Nhóm ngôn ngữ Pnar-Khasi-Lyngngam",
"Pnar-Khasi-Lyngngam",
}
m["afa"] = {
"ngữ hệ Phi-Á",
25268,
aliases = {"Phi Á"},
"Ngữ hệ Phi-Á",
"Phi-Á",
}
m["alg"] = {
"nhóm ngôn ngữ Algonquin",
33392,
"aql",
"Nhóm ngôn ngữ Algonquin",
"Algonquin",
}
m["alg-abp"] = {
"nhóm ngôn ngữ Abenaki-Penobscot",
197936,
"alg-eas",
"Nhóm ngôn ngữ Abenaki-Penobscot",
"Abenaki-Penobscot",
}
m["alg-ara"] = {
"nhóm ngôn ngữ Arapahoe",
2153686,
"alg",
"Nhóm ngôn ngữ Arapahoe",
"Arapahoe",
}
m["alg-eas"] = {
"nhóm ngôn ngữ Đông Algonquin",
2257525,
"alg",
"Nhóm ngôn ngữ Đông Algonquin",
"Đông Algonquin",
}
m["alg-sfk"] = {
"nhóm ngôn ngữ Sac-Fox-Kickapoo",
1440172,
"alg",
"Nhóm ngôn ngữ Sac-Fox-Kickapoo",
"Sac-Fox-Kickapoo",
}
m["alv"] = {
"nhóm ngôn ngữ Đại Tây Dương-Congo",
771124,
"nic",
"Nhóm ngôn ngữ Đại Tây Dương-Congo",
"Đại Tây Dương-Congo",
}
m["alv-aah"] = {
"Ayere-Ahan",
750953,
"alv-von",
}
m["alv-ada"] = {
"Adamawa",
32906,
"alv-sav",
}
m["alv-bag"] = {
"Baga",
2746083,
"alv-mel",
}
m["alv-bak"] = {
"Bak",
1708174,
"alv-sng",
}
m["alv-bam"] = {
"Bambukic",
4853456,
"alv-ada",
aliases = {"Yungur-Jen"},
}
m["alv-bny"] = {
"Banyum",
2892477,
"alv-nyn",
}
m["alv-bua"] = {
"Bua",
4982094,
"alv-mbd",
}
m["alv-bwj"] = {
"Bikwin-Jen",
84542501,
"alv-bam",
}
m["alv-cng"] = {
"Cangin",
1033184,
"alv-fwo",
}
m["alv-ctn"] = {
"Central Tano",
1658486,
"alv-ptn",
aliases = {"Akan"},
}
m["alv-dlt"] = {
"Delta Edoid",
nil,
"alv-edo",
}
m["alv-dur"] = {
"Duru",
5316788,
"alv-lni",
}
m["alv-ede"] = {
"Ede",
35368,
"alv-yor",
}
m["alv-edk"] = {
"Edekiri",
5336735,
"alv-yrd",
}
m["alv-edo"] = {
"nhóm ngôn ngữ Edoid",
1287469,
"alv-von",
"Nhóm ngôn ngữ Edoid",
"Edoid",
}
m["alv-eeo"] = {
"nhóm ngôn ngữ Edo-Esan-Ora",
12630439,
"alv-nce",
"Nhóm ngôn ngữ Edo-Esan-Ora",
"Edo-Esan-Ora",
}
m["alv-fli"] = {
"Fali",
3450166,
"alv",
}
m["alv-fwo"] = {
"Fula-Wolof",
12631267,
"alv-sng",
}
m["alv-gba"] = {
"Gbaya",
3099986,
"alv-sav",
protoLanguage = "gba",
}
m["alv-gbe"] = {
"nhóm ngôn ngữ Gbe",
668284,
"alv-von",
"Nhóm ngôn ngữ Gbe",
"Gbe",
}
m["alv-gbf"] = {
"Eastern Gbaya",
nil,
"alv-gba",
}
m["alv-gbs"] = {
"Southern Gbaya",
nil,
"alv-gba",
}
m["alv-gbw"] = {
"Western Gbaya",
nil,
"alv-gba",
}
m["alv-gda"] = {
"Ga-Dangme",
3443338,
"alv-kwa",
}
m["alv-gng"] = {
"Guang",
684009,
"alv-ptn",
}
m["alv-gtm"] = {
"Ghana-Togo Mountain",
493020,
"alv-kwa",
aliases = {"Togo Remnant", "Central Togo"},
}
m["alv-hei"] = {
"nhóm ngôn ngữ Heiban",
108752116,
"alv-the",
"Nhóm ngôn ngữ Heiban",
"Heiban",
}
m["alv-ido"] = {
"Idomoid",
974196,
"alv-von",
}
m["alv-igb"] = {
"Igboid",
1429100,
"alv-von",
}
m["alv-jfe"] = {
"Jola-Felupe",
1708174,
"alv-jol",
aliases = {"Ejamat"},
}
m["alv-jol"] = {
"Jola",
35176,
"alv-bak",
aliases = {"Diola"},
}
m["alv-kim"] = {
"Kim",
6409701,
"alv-mbd",
}
m["alv-kis"] = {
"Kissi",
35696,
"alv-mel",
}
m["alv-krb"] = {
"Karaboro",
4213541,
"alv-snf",
}
m["alv-ktg"] = {
"Ka-Togo",
5972796,
"alv-gtm",
}
m["alv-kul"] = {
"Kulango",
16977424,
"alv-sav",
aliases = {"Kulango-Lorhon", "Kulango-Lorom"},
}
m["alv-kwa"] = {
"nhóm ngôn ngữ Kwa",
33430,
"nic-vco",
"Nhóm ngôn ngữ Kwa",
"Kwa",
}
m["alv-lag"] = {
"nhóm ngôn ngữ Lagoon",
111210042,
"alv-kwa",
"Nhóm ngôn ngữ Lagoon",
"Lagoon",
}
m["alv-lek"] = {
"Leko",
6520642,
otherNames = {"Sambaic"}, -- appears to be an alias in Glottolog
"alv-lni",
}
m["alv-lim"] = {
"Limba",
35825,
"alv",
}
m["alv-lni"] = {
"Leko-Nimbari",
1708170,
"alv-ada",
otherNames = {"Central Adamawa"},
aliases = {"Chamba-Mumuye"},
}
m["alv-mbd"] = {
"Mbum-Day",
6799816,
"alv-ada",
}
m["alv-mbm"] = {
"Mbum",
6799814,
"alv-mbd",
}
m["alv-mel"] = {
"Mel",
12122355,
"alv",
}
m["alv-mum"] = {
"Mumuye",
84607009,
"alv-mye",
}
m["alv-mye"] = {
"Mumuye-Yendang",
6935539,
"alv-lni",
}
m["alv-nal"] = {
"Nalu",
nil,
"alv-sng",
}
m["alv-nce"] = {
"nhóm ngôn ngữ Bắc-Trung Edoid",
16110869,
"alv-edo",
"Nhóm ngôn ngữ Bắc-Trung Edoid",
"Bắc-Trung Edoid",
}
m["alv-ngb"] = {
"Nupe-Gbagyi",
12638649,
"alv-nup",
aliases = {"Nupe-Gbari"},
}
m["alv-ntg"] = {
"Na-Togo",
nil,
"alv-gtm",
}
m["alv-nup"] = {
"Nupoid",
1429143,
"alv-von",
}
m["alv-nwd"] = {
"nhóm ngôn ngữ Tây Bắc Edoid",
16111012,
"alv-edo",
"Nhóm ngôn ngữ Tây Bắc Edoid",
"Tây Bắc Edoid",
}
m["alv-nyn"] = {
"Nyun",
nil,
"alv-fwo",
}
m["alv-pap"] = {
"Papel",
7132562,
"alv-bak",
}
m["alv-pph"] = {
"Phla-Pherá",
3849625,
"alv-gbe",
aliases = {"Phla–Pherá"},
}
m["alv-ptn"] = {
"Potou-Tano",
1475003,
"alv-kwa",
}
m["alv-sav"] = {
"nhóm ngôn ngữ Savanna",
4403672,
"nic-vco",
"Nhóm ngôn ngữ Savanna}",
"Savanna",
aliases = {"Savannas"},
}
m["alv-sma"] = {
"Suppire-Mamara",
4446348,
"alv-snf",
}
m["alv-snf"] = {
"nhóm ngôn ngữ Senufo",
33795,
"alv",
"Nhóm ngôn ngữ Senufo",
"Senufo",
aliases = {"Senufic", "Senoufo"},
}
m["alv-sng"] = {
"nhóm ngôn ngữ Senegambia",
1708753,
"alv",
"Nhóm ngôn ngữ Senegambia",
"Senegambia",
}
m["alv-snr"] = {
"Senari",
4416084,
"alv-snf",
}
m["alv-swd"] = {
"Southwestern Edoid",
12633903,
"alv-edo",
}
m["alv-tal"] = {
"Talodi",
12643302,
"alv-the",
}
m["alv-tdj"] = {
"Tagwana-Djimini",
7675362,
"alv-snf",
}
m["alv-ten"] = {
"Tenda",
3217535,
"alv-fwo",
}
m["alv-the"] = {
"nhóm ngôn ngữ Talodi-Heiban",
1521145,
"alv",
"Nhóm ngôn ngữ Talodi-Heiban",
"Talodi-Heiban",
}
m["alv-von"] = {
"nhóm ngôn ngữ Volta-Niger",
34177,
"nic-vco",
"Nhóm ngôn ngữ Volta-Niger",
"Volta-Niger",
}
m["alv-wan"] = {
"Wara-Natyoro",
7968830,
"alv-sav",
}
m["alv-wjk"] = {
"Waja-Kam",
nil,
"alv-ada",
}
m["alv-yek"] = {
"nhóm ngôn ngữ Yekhee",
nil,
"alv-nce",
"Nhóm ngôn ngữ Yekhee",
"Yekhee",
}
m["alv-yor"] = {
"Yoruba",
nil,
"alv-edk",
}
m["alv-yrd"] = {
"Yoruboid",
1789745,
"alv-von",
}
m["alv-yun"] = {
"Yungur",
84601642,
"alv-bam",
aliases = {"Bena-Mboi"},
}
m["apa"] = {
"Apachean",
27758,
"ath",
aliases = {"Southern Athabaskan"},
}
m["aqa"] = {
"Alacalufan",
1288430,
}
m["aql"] = {
"ngữ hệ Algic",
721612,
"Ngữ hệ Algic",
"Algic",
aliases = {"Algonquin-Ritwan", "Algonquin-Wiyot-Yurok"},
}
m["art"] = {
"ngôn ngữ nhân tạo",
33215,
"qfa-not",
"Ngôn ngữ nhân tạo",
"nhân tạo",
aliases = {"artificial", "planned"},
}
m["ath"] = {
"Athabaskan",
27475,
"xnd",
}
m["ath-nor"] = {
"North Athabaskan",
20738,
"ath",
aliases = {"Northern Athabaskan"},
}
m["ath-pco"] = {
"Pacific Coast Athabaskan",
20654,
"ath",
}
m["auf"] = {
"Arauan",
626772,
aliases = {"Arahuan", "Arauán", "Arawa", "Arawan", "Arawán"},
}
--[=[
Exceptional language and family codes for Australian Aboriginal languages
can use the prefix "aus-", though "aus" is no longer itself a family code.
]=]--
m["aus-arn"] = {
"Arnhem",
2581700,
aliases = {"Gunwinyguan", "Macro-Gunwinyguan"},
}
m["aus-bub"] = {
"Bunuban",
2495148,
aliases = {"Bunaban"},
}
m["aus-cww"] = {
"nhóm ngôn ngữ Trung New South Wales",
5061507,
"aus-pam",
"Nhóm ngôn ngữ Trung New South Wales",
"Trung New South Wales",
}
m["aus-dal"] = {
"Daly",
2478079,
}
m["aus-dyb"] = {
"Dyirbalic",
1850666,
"aus-pam",
}
m["aus-gar"] = {
"Garawan",
5521951,
}
m["aus-gun"] = {
"Gunwinyguan",
2581700,
"aus-arn",
aliases = {"Gunwingguan"},
}
m["aus-jar"] = {
"Jarrakan",
2039423,
}
m["aus-kar"] = {
"Karnic",
4215578,
"aus-pam",
}
m["aus-mir"] = {
"Mirndi",
4294095,
}
m["aus-nga"] = {
"Ngayarda",
16153490,
"aus-psw",
}
m["aus-nyu"] = {
"Nyulnyulan",
2039408,
}
m["aus-pam"] = {
"ngữ hệ Pama–Nyungar",
33942,
"Ngữ hệ Pama–Nyungar",
"Pama–Nyungar",
}
m["aus-pmn"] = {
"nhóm ngôn ngữ Paman",
2640654,
"aus-pam",
"Nhóm ngôn ngữ Paman",
"Paman",
}
m["aus-psw"] = {
"nhóm ngôn ngữ Tây Nam Pama–Nyungar",
2258160,
"aus-pam",
"Nhóm ngôn ngữ Tây Nam Pama–Nyungar",
"Tây Nam Pama–Nyungar",
}
m["aus-rnd"] = {
"Arandic",
4784071,
"aus-pam",
}
m["aus-tnk"] = {
"Tangkic",
1823065,
}
m["aus-wdj"] = {
"ngữ hệ Iwaidja",
4196968,
"Ngữ hệ Iwaidja",
"Iwaidja",
aliases = {"Yiwaidjan"},
}
m["aus-wor"] = {
"Worrorran",
2038619,
}
m["aus-yid"] = {
"Yidinyic",
4205849,
"aus-pam",
}
m["aus-yng"] = {
"Yangmanic",
42727644,
}
m["aus-yol"] = {
"Yolngu",
2511254,
"aus-pam",
aliases = {"Yolŋu", "Yolngu Matha"},
}
m["aus-yuk"] = {
"Yuin-Kuric",
3833021,
"aus-pam",
}
m["awd"] = {
"ngữ hệ Arawak",
626753,
"Ngữ hệ Arawak",
"Arawak",
aliases = {"Maipure", "Maipuran"},
}
m["awd-nwk"] = {
"nhóm ngôn ngữ Nawiki",
nil,
"awd",
"Nhóm ngôn ngữ Nawiki",
"Nawiki",
aliases = {"Newiki"},
}
m["awd-taa"] = {
"Ta-Arawakan",
7672731,
"awd",
aliases = {"Ta-Arawak", "Ta-Maipurean"},
}
m["azc"] = {
"ngữ hệ Ute-Aztec",
34073,
"Ngữ hệ Ute-Aztec",
"Ute-Aztec",
aliases = {"Uto-Aztekan"},
}
m["azc-cup"] = {
"Cupan",
19866871,
"azc-tak",
}
m["azc-dur"] = {
"nhóm ngôn ngữ Nahua Durango",
2386361,
"azc-nah",
"Nhóm ngôn ngữ Nahua Durango",
"Nahua Durango",
aliases = {"Mexicanero"}
}
m["azc-hua"] = {
"nhóm ngôn ngữ Nahua Huasteca",
3832950,
"azc-nah",
"Nhóm ngôn ngữ Nahua Huasteca",
"Nahua Huasteca"
}
m["azc-nah"] = {
"nhóm ngôn ngữ Nahua",
11965602,
"azc",
"Nhóm ngôn ngữ Nahua",
"Nahua",
aliases = {"Aztec"},
}
m["azc-num"] = {
"nhóm ngôn ngữ Numic",
2657541,
"azc",
"Nhóm ngôn ngữ Numic",
"Numic",
}
m["azc-pim"] = {
"nhóm ngôn ngữ Piman",
7194600,
"azc",
"Nhóm ngôn ngữ Piman",
"Piman",
aliases = {"Tepiman"},
}
m["azc-tak"] = {
"Takic",
1280305,
"azc",
}
m["azc-trc"] = {
"Taracahitic",
4245032,
"azc",
aliases = {"Taracahitan"},
}
m["bad"] = {
"nhóm ngôn ngữ Banda",
806234,
"nic-ubg",
"Nhóm ngôn ngữ Banda",
"Banda",
}
m["bad-cnt"] = {
"Central Banda",
3438391,
"bad",
}
m["bai"] = {
"Bamileke",
806005,
"nic-gre",
}
m["bat"] = {
"nhóm ngôn ngữ gốc Balt",
33136,
"ine-bsl",
"Nhóm ngôn ngữ gốc Balt",
"gốc Balt",
}
m["bat-eas"] = {
"nhóm ngôn ngữ Đông Balt",
149944,
"bat",
"Nhóm ngôn ngữ Đông Balt",
"Đông Balt",
}
m["bat-wes"] = {
"West Baltic",
149946,
"bat",
}
m["ber"] = {
"nhóm ngôn ngữ Berber",
25448,
"afa",
"Nhóm ngôn ngữ Berber",
"Berber",
aliases = {"Tamazight"},
}
m["bnt"] = {
"nhóm ngôn ngữ Bantu",
33146,
"nic-bds",
"Nhóm ngôn ngữ Bantu",
"Bantu",
}
m["bnt-baf"] = {
"Bafia",
799784,
"bnt",
}
m["bnt-bbo"] = {
"Bafo-Bonkeng",
nil,
"bnt-saw",
}
m["bnt-bdz"] = {
"Boma-Dzing",
1729203,
"bnt",
}
m["bnt-bek"] = {
"Bekwilic",
nil,
"bnt-ndb",
}
m["bnt-bki"] = {
"Bena-Kinga",
16113307,
"bnt-bne",
}
m["bnt-bmo"] = {
"Bangi-Moi",
nil,
"bnt-bnm",
}
m["bnt-bne"] = {
"Northeast Bantu",
7057832,
"bnt",
}
m["bnt-bnm"] = {
"Bangi-Ntomba",
806477,
"bnt-bte",
}
m["bnt-boa"] = {
"Boan",
4931250,
"bnt",
aliases = {"Buan", "Ababuan"},
}
m["bnt-bot"] = {
"Botatwe",
4948532,
"bnt",
}
m["bnt-bsa"] = {
"nhóm ngôn ngữ Basaa",
809739,
"bnt",
"Nhóm ngôn ngữ Basaa",
"Basaa",
}
m["bnt-bsh"] = {
"Bushoong",
5001551,
"bnt-bte",
}
m["bnt-bso"] = {
"Southern Bantu",
980498,
"bnt",
}
m["bnt-bta"] = {
"Bati-Angba",
4869303,
"bnt-boa",
otherNames = {"Late Bomokandian"},
aliases = {"Bwa"},
}
m["bnt-btb"] = {
"Beti",
35118,
"bnt",
}
m["bnt-bte"] = {
"Bangi-Tetela",
4855181,
"bnt",
}
m["bnt-bun"] = {
"Buja-Ngombe",
4986733,
"bnt-mbb",
}
m["bnt-chg"] = {
"Chaga",
33016,
"bnt-cht",
}
m["bnt-cht"] = {
"Chaga-Taita",
nil,
"bnt-bne",
}
m["bnt-clu"] = {
"Chokwe-Luchazi",
3339273,
"bnt",
}
m["bnt-com"] = {
"Comorian",
33077,
"bnt-sab",
}
m["bnt-glb"] = {
"Great Lakes Bantu",
5599420,
"bnt-bne",
}
m["bnt-haj"] = {
"Haya-Jita",
25502360,
"bnt-glb",
}
m["bnt-kak"] = {
"Kako",
nil,
"bnt-pob",
}
m["bnt-kav"] = {
"Kavango",
116544179,
"bnt-ksb",
}
m["bnt-kbi"] = {
"Komo-Bira",
6428591,
"bnt-boa",
}
m["bnt-kel"] = {
"Kele",
1738162,
"bnt-kts",
aliases = {"Sheke"},
}
m["bnt-kil"] = {
"Kilombero",
6408121,
"bnt",
}
m["bnt-kka"] = {
"Kikuyu-Kamba",
18419596,
"bnt-bne",
aliases = {"Thagiicu"},
}
m["bnt-kmb"] = {
"Kimbundu",
16947687,
"bnt",
}
m["bnt-kng"] = {
"Kongo",
6429214,
"bnt",
}
m["bnt-kpw"] = {
"Kpwe",
36428,
"bnt-saw",
}
m["bnt-ksb"] = {
"Kavango-Southwest Bantu",
6379098,
"bnt",
}
m["bnt-kts"] = {
"Kele-Tsogo",
6385577,
"bnt",
}
m["bnt-lbn"] = {
"Luban",
4536504,
"bnt",
}
m["bnt-leb"] = {
"Lebonya",
6511395,
"bnt",
}
m["bnt-lgb"] = {
"Lega-Binja",
6517694,
"bnt",
}
m["bnt-lok"] = {
"Logooli-Kuria",
nil,
"bnt-glb",
}
m["bnt-lub"] = {
"Luba",
nil,
"bnt-lbn",
}
m["bnt-lun"] = {
"Lunda",
6704091,
"bnt",
}
m["bnt-mak"] = {
"Makua",
6740431,
"bnt-bso",
aliases = {"Makhuwa"},
}
m["bnt-mbb"] = {
"Mboshi-Buja",
6799764,
"bnt",
}
m["bnt-mbe"] = {
"Mbole-Enya",
6799728,
"bnt",
}
m["bnt-mbi"] = {
"Mbinga",
nil,
"bnt-rur",
}
m["bnt-mbo"] = {
"Mboshi",
6799763,
"bnt-mbb",
}
m["bnt-mbt"] = {
"Mbete",
1346910,
"bnt-tmb",
aliases = {"Mbere"},
}
m["bnt-mby"] = {
"Mbeya",
nil,
"bnt-ruk",
}
m["bnt-mij"] = {
"Mijikenda",
6845474,
"bnt-sab",
}
m["bnt-mka"] = {
"Makaa",
nil,
"bnt-ndb",
}
m["bnt-mne"] = {
"Manenguba",
31147471,
"bnt",
aliases = {"Mbo", "Ngoe"},
}
m["bnt-mnj"] = {
"Makaa-Njem",
1603899,
"bnt-pob",
}
m["bnt-mon"] = {
"Mongo",
nil,
"bnt-bnm",
}
m["bnt-mra"] = {
"Mbugwe-Rangi",
6799795,
"bnt",
}
m["bnt-msl"] = {
"Masaba-Luhya",
12636428,
"bnt-glb",
}
m["bnt-mwi"] = {
"Mwika",
nil,
"bnt-ruk",
}
m["bnt-ncb"] = {
"Northeast Coast Bantu",
7057848,
"bnt-bne",
}
m["bnt-ndb"] = {
"Ndzem-Bomwali",
nil,
"bnt-mnj",
}
m["bnt-ngn"] = {
"Ngondi-Ngiri",
7022532,
"bnt-mbb",
}
m["bnt-ngu"] = {
"Nguni",
961559,
"bnt-bso",
aliases = {"Ngoni"},
}
m["bnt-nya"] = {
"Nyali",
7070832,
"bnt-leb",
}
m["bnt-nyb"] = {
"Nyanga-Buyi",
7070882,
"bnt",
}
m["bnt-nyg"] = {
"Nyoro-Ganda",
12638666,
"bnt-glb",
}
m["bnt-nys"] = {
"nhóm ngôn ngữ Nyasa",
7070921,
"bnt",
"Nhóm ngôn ngữ Nyasa",
"Nyasa",
}
m["bnt-nze"] = {
"Nzebi",
1755498,
"bnt-tmb",
aliases = {"Njebi"},
}
m["bnt-ova"] = {
"Ovambo",
36489,
"bnt-swb",
aliases = {"Oshivambo", "Oshiwambo", "Owambo"},
}
m["bnt-par"] = {
"Pare",
nil,
"bnt-ncb",
}
m["bnt-pen"] = {
"Pende",
7162373,
"bnt",
}
m["bnt-pob"] = {
"Pomo-Bomwali",
nil,
"bnt",
}
m["bnt-ruk"] = {
"Rukwa",
7378902,
"bnt",
}
m["bnt-run"] = {
"Rungwe",
nil,
"bnt-ruk",
}
m["bnt-rur"] = {
"Rufiji-Ruvuma",
7377947,
"bnt",
}
m["bnt-ruv"] = {
"Ruvu",
nil,
"bnt-ncb",
}
m["bnt-rvm"] = {
"Ruvuma",
nil,
"bnt-rur",
}
m["bnt-sab"] = {
"Sabaki",
2209395,
"bnt-ncb",
}
m["bnt-saw"] = {
"Sawabantu",
532003,
"bnt",
}
m["bnt-sbi"] = {
"Sabi",
7396071,
"bnt",
}
m["bnt-seu"] = {
"Seuta",
nil,
"bnt-ncb",
}
m["bnt-shh"] = {
"Shi-Havu",
nil,
"bnt-glb",
}
m["bnt-sho"] = {
"Shona",
2904660,
"bnt",
}
m["bnt-sir"] = {
"nhóm ngôn ngữ Sira",
1436372,
"bnt",
"Nhóm ngôn ngữ Sira",
"Sira",
aliases = {"Shira-Punu"},
}
m["bnt-ske"] = {
"Soko-Kele",
nil,
"bnt-bte",
}
m["bnt-sna"] = {
"Sena",
nil,
"bnt-nys",
}
m["bnt-sts"] = {
"Sotho-Tswana",
2038386,
"bnt-bso",
}
m["bnt-swb"] = {
"Southwest Bantu",
116543539,
"bnt-ksb",
}
m["bnt-swh"] = {
"Swahili",
nil,
"bnt-sab",
}
m["bnt-tek"] = {
"Teke",
36528,
"bnt-tmb",
}
m["bnt-tet"] = {
"Tetela",
7706059,
"bnt-bte",
}
m["bnt-tkc"] = {
"Central Teke",
36473,
"bnt-tek",
}
m["bnt-tkm"] = {
"Takama",
nil,
"bnt-bne",
}
m["bnt-tmb"] = {
"Teke-Mbede",
7695332,
"bnt",
aliases = {"Teke-Mbere"},
}
m["bnt-tso"] = {
"Tsogo",
2458420,
otherNames = {"Okani"}, --appears to be an alias in Glottolog
"bnt-kts",
}
m["bnt-tsr"] = {
"Tswa-Ronga",
12643962,
"bnt-bso",
}
m["bnt-yak"] = {
"Yaka",
8047027,
"bnt",
}
m["bnt-yko"] = {
"Yasa-Kombe",
nil,
"bnt-saw",
}
m["bnt-zbi"] = {
"Zamba-Binza",
nil,
"bnt-bnm",
}
m["btk"] = {
"Batak",
1998595,
"poz-nws",
}
--[=[
Exceptional language and family codes for Central American Indian languages
may use the prefix "cai-", though "cai" is no longer itself a family code.
]=]--
--[=[
Exceptional language and family codes for Caucasian languages can use
the prefix "cau-", though "cau" is no longer itself a family code.
]=]--
m["cau-abz"] = {
"nhóm ngôn ngữ Abkhaz-Abaza",
4663617,
"cau-nwc",
"Nhóm ngôn ngữ Abkhaz-Abaza",
"Abkhaz-Abaza",
otherNames = {"Abkhaz-Tapanta"},
aliases = {"Abazgi"},
}
m["cau-and"] = {
"nhóm ngôn ngữ Andic",
492152,
"cau-ava",
"Nhóm ngôn ngữ Andic",
"Andic",
aliases = {"Andian"},
}
m["cau-ava"] = {
"nhóm ngôn ngữ Avar-Andic",
4827766,
"cau-nec",
"Nhóm ngôn ngữ Avar-Andic",
"Avar-Andic",
aliases = {"Avar-Andian", "Avar-Andi", "Avaro-Andian"},
}
m["cau-cir"] = {
"Circassian",
858543,
"cau-nwc",
aliases = {"Cherkess"},
}
m["cau-drg"] = {
"nhóm ngôn ngữ Dargwa",
5222637,
"cau-nec",
"Nhóm ngôn ngữ Dargwa",
"Dargwa",
otherNames = {"Dargin"},
}
m["cau-esm"] = {
"Eastern Samur",
nil,
"cau-sam",
}
m["cau-ets"] = {
"East Tsezian",
121437666,
"cau-tsz",
aliases = {"East Tsezic", "East Didoic"},
}
m["cau-lzg"] = {
"Lezghian",
2144370,
"cau-nec",
aliases = {"Lezgi", "Lezgian", "Lezgic"},
}
m["cau-nkh"] = {
"nhóm ngôn ngữ Nakh",
24441,
"cau-nec",
"Nhóm ngôn ngữ Nakh",
"Nakh",
aliases = {"Bắc-Trung Kavkaz"},
}
m["cau-nec"] = {
"ngữ hệ Đông Bắc Kavkaz",
27387,
"Ngữ hệ Đông Bắc Kavkaz",
"Đông Bắc Kavkaz",
aliases = {"Dagestania", "Nakho-Dagestania", "Caspi"},
}
m["cau-nwc"] = {
"ngữ hệ Tây Bắc Kavkaz",
33852,
"Ngữ hệ Tây Bắc Kavkaz",
"Tây Bắc Kavkaz",
aliases = {"Abkhazo-Adyghean", "Abkhaz-Adyghe", "Pontic"},
}
m["cau-sam"] = {
"Samur",
15229151,
"cau-lzg",
}
m["cau-ssm"] = {
"Southern Samur",
nil,
"cau-sam",
}
m["cau-tsz"] = {
"Tsezian",
1651530,
"cau-nec",
aliases = {"Tsezic", "Didoic"},
}
m["cau-vay"] = {
"Vainakh",
4102486,
"cau-nkh",
aliases = {"Veinakh", "Vaynakh"},
}
m["cau-wsm"] = {
"Western Samur",
nil,
"cau-sam",
}
m["cau-wts"] = {
"West Tsezian",
121437697,
"cau-tsz",
aliases = {"West Tsezic", "West Didoic"},
}
m["cba"] = {
"Chibchan",
520478,
"qfa-mch", -- or none if Macro-Chibchan is considered undemonstrated
}
m["ccs"] = {
"ngữ hệ Kartvelia",
34030,
"Ngữ hệ Kartvelia",
"Kartvelia",
aliases = {"Ngoại Kavkaz"},
}
m["ccs-gzn"] = {
"nhóm ngôn ngữ Gruzia-Zan",
34030,
"ccs",
"Nhóm ngôn ngữ Gruzia-Zan",
"Gruzia-Zan",
aliases = {"Karto-Zan"},
}
m["ccs-zan"] = {
"Zan",
2606912,
"ccs-gzn",
aliases = {"Zanuri", "Colchian"},
}
m["cdc"] = {
"nhóm ngôn ngữ Tchad",
33184,
"afa",
"Nhóm ngôn ngữ Tchad",
"Tchad",
}
m["cdc-cbm"] = {
"nhóm ngôn ngữ Trung Tchad",
2251547,
"cdc",
"Nhóm ngôn ngữ Trung Tchad",
"Trung Tchad",
aliases = {"Biu-Mandara"},
}
m["cdc-est"] = {
"nhóm ngôn ngữ Đông Tchad",
2276221,
"cdc",
"Nhóm ngôn ngữ Đông Tchad",
"Đông Tchad",
}
m["cdc-mas"] = {
"nhóm ngôn ngữ Masa",
2136092,
"cdc",
"Nhóm ngôn ngữ Masa",
"Masa",
}
m["cdc-wst"] = {
"nhóm ngôn ngữ Tây Tchad",
2447774,
"cdc",
"Nhóm ngôn ngữ Tây Tchad",
"Tây Tchad",
}
m["cdd"] = {
"Caddoan",
1025090,
}
m["cel"] = {
"nhóm ngôn ngữ Celt",
25293,
"ine",
"Nhóm ngôn ngữ Celt",
"Celt",
}
m["cel-bry"] = {
"nhóm ngôn ngữ Britton",
156877,
"cel-ins",
"Nhóm ngôn ngữ Britton",
"Britton",
aliases = {"Brittonic"},
}
m["cel-brs"] = {
"nhóm ngôn ngữ Tây Nam Britton",
2612853,
"cel-bry",
"Nhóm ngôn ngữ Tây Nam Britton",
"Tây Nam Britton",
aliases = {"Southwestern Brittonic"},
}
m["cel-brw"] = {
"nhóm ngôn ngữ Tây Britton",
593069,
"cel-bry",
"Nhóm ngôn ngữ Tây Britton",
"Tây Britton",
aliases = {"Western Brittonic"},
}
m["cel-con"] = {
"Continental Celtic",
215566,
"cel",
}
m["cel-gae"] = {
"nhóm ngôn ngữ Goidel",
56433,
"cel-ins",
"Nhóm ngôn ngữ Goidel",
"Goidel",
aliases = {"Gaelic"},
protoLanguage = "pgl",
}
m["cel-his"] = {
"Hispano-Celtic",
4204136,
"cel-con",
}
m["cel-ins"] = {
"nhóm ngôn ngữ Celt hải đảo",
214506,
"cel",
"Nhóm ngôn ngữ Celt hải đảo",
"Celt hải đảo",
}
m["chi"] = {
"Chimakuan",
1073088,
}
m["chm"] = {
"nhóm ngôn ngữ Mari",
973685,
"urj",
"Nhóm ngôn ngữ Mari",
"Mari",
}
m["cmc"] = {
"nhóm ngôn ngữ Chăm",
2997506,
"poz-mcm",
"Nhóm ngôn ngữ Chăm",
"Chăm",
}
m["crp"] = {
"creole or pidgin",
nil,
"qfa-not",
}
m["csu"] = {
"nhóm ngôn ngữ Trung Sudan",
190822,
"ssa",
"Nhóm ngôn ngữ Trung Sudan",
"Trung Sudan",
}
m["csu-bba"] = {
"nhóm ngôn ngữ Bongo-Bagirmi",
3505042,
"csu",
"Nhóm ngôn ngữ Bongo-Bagirmi",
"Bongo-Bagirmi",
}
m["csu-bbk"] = {
"nhóm ngôn ngữ Bongo-Baka",
4941917,
"csu-bba",
"Nhóm ngôn ngữ Bongo-Baka",
"Bongo-Baka",
}
m["csu-bgr"] = {
"Bagirmi",
4841948,
"csu-bba",
aliases = {"Bagirmic"},
}
m["csu-bkr"] = {
"Birri-Kresh",
nil,
"csu",
}
m["csu-ecs"] = {
"Eastern Central Sudanic",
16911698,
"csu",
aliases = {"East Central Sudanic", "Central Sudanic East", "Lendu-Mangbetu"},
}
m["csu-kab"] = {
"Kaba",
6343715,
"csu-bba",
}
m["csu-lnd"] = {
"Lendu",
6522357,
"csu-ecs",
aliases = {"Lenduic"},
}
m["csu-maa"] = {
"Mangbetu",
6748874,
"csu-ecs",
aliases = {"Mangbetu-Asoa", "Mangbetu-Asua"},
}
m["csu-mle"] = {
"Mangbutu-Lese",
17009406,
"csu-ecs",
aliases = {"Mangbutu–Efe", "Mangbutu", "Membi-Mangbutu-Efe"},
}
m["csu-mma"] = {
"Moru-Madi",
6915156,
"csu-ecs",
}
m["csu-sar"] = {
"Sara",
2036691,
"csu-bba",
}
m["csu-val"] = {
"Vale",
7909520,
"csu-bba",
}
m["cus"] = {
"nhóm ngôn ngữ Cushit",
33248,
"afa",
"Nhóm ngôn ngữ Cushit",
"Cushit",
}
m["cus-cen"] = {
"nhóm ngôn ngữ Trung Cushit",
56569,
"cus",
"Nhóm ngôn ngữ Trung Cushit",
"Trung Cushit",
}
m["cus-eas"] = {
"nhóm ngôn ngữ Đông Cushit",
56568,
"cus",
"Nhóm ngôn ngữ Đông Cushit",
"Đông Cushit",
}
m["cus-hec"] = {
"nhóm ngôn ngữ Đông Cushit Cao nguyên",
56524,
"cus-eas",
"Nhóm ngôn ngữ Đông Cushit Cao nguyên",
"Đông Cushit Cao nguyên"
}
m["cus-som"] = {
"nhóm ngôn ngữ Somali",
56774,
"cus-eas",
"Nhóm ngôn ngữ Somali",
"Somali",
aliases = {"Sam", "Macro-Somali"},
}
m["cus-sou"] = {
"nhóm ngôn ngữ Nam Cushit",
56525,
"cus",
"Nhóm ngôn ngữ Nam Cushit",
"Nam Cushit",
}
m["day"] = {
"Land Dayak",
2760613,
"poz",
}
m["del"] = {
"Lenape",
2665761,
"alg-eas",
aliases = {"Delaware"},
}
m["den"] = {
"Slavey",
13272,
"ath-nor",
aliases = {"Slave", "Slavé"},
}
m["dmn"] = {
"nhóm ngôn ngữ Mande",
33681,
"nic",
"Nhóm ngôn ngữ Mande",
"Mande",
}
m["dmn-bbu"] = {
"nhóm ngôn ngữ Bisa-Busa",
12627956,
"dmn-mde",
"Nhóm ngôn ngữ Bisa-Busa",
"Bisa-Busa",
}
m["dmn-emn"] = {
"East Manding",
nil,
"dmn-man",
}
m["dmn-jje"] = {
"Jogo-Jeri",
nil,
"dmn-mjo",
}
m["dmn-man"] = {
"Manding",
35772,
"dmn-mmo",
}
m["dmn-mda"] = {
"Mano-Dan",
nil,
"dmn-mse",
}
m["dmn-mdc"] = {
"Central Mande",
5972907,
"dmn-mdw",
}
m["dmn-mde"] = {
"nhóm ngôn ngữ Đông Mande",
12633080,
"dmn",
"Nhóm ngôn ngữ Đông Mande",
"Đông Mande",
}
m["dmn-mdw"] = {
"Western Mande",
16113831,
"dmn",
}
m["dmn-mjo"] = {
"Manding-Jogo",
12636153,
"dmn-mdc",
}
m["dmn-mmo"] = {
"Manding-Mokole",
nil,
"dmn-mva",
}
m["dmn-mnk"] = {
"Maninka",
36186,
"dmn-emn",
}
m["dmn-mnw"] = {
"Northwestern Mande",
5972910,
"dmn-mdw",
}
m["dmn-mok"] = {
"Mokole",
16935447,
"dmn-mmo",
}
m["dmn-mse"] = {
"Southeastern Mande",
5972912,
"dmn-mde",
}
m["dmn-msw"] = {
"Southwestern Mande",
12633904,
"dmn-mdw",
}
m["dmn-mva"] = {
"Manding-Vai",
nil,
"dmn-mjo",
}
m["dmn-nbe"] = {
"Nwa-Beng",
nil,
"dmn-mse",
}
m["dmn-sam"] = {
"Samo",
36327,
"dmn-bbu",
aliases = {"Samuic"},
}
m["dmn-smg"] = {
"Samogo",
7410000,
"dmn-mnw",
aliases = {"Duun-Seenku"},
}
m["dmn-snb"] = {
"Soninke-Bobo",
16111680,
"dmn-mnw",
}
m["dmn-sya"] = {
"Susu-Yalunka",
nil,
"dmn-mdc",
}
m["dmn-vak"] = {
"Vai-Kono",
nil,
"dmn-mva",
}
m["dmn-wmn"] = {
"West Manding",
nil,
"dmn-man",
}
m["dra"] = {
"ngữ hệ Dravida",
33311,
"Ngữ hệ Dravida",
"Dravida",
}
m["dra-cen"] = {
"Central Dravidian",
68002317,
"dra",
}
m["dra-gki"] = {
"Gondi-Kui",
12631610,
"dra-sdt",
}
m["dra-gon"] = {
"Gondi",
55639812,
"dra-gki",
}
m["dra-imd"] = {
"Irula-Muduga",
nil,
"dra-tkn",
}
m["dra-kan"] = {
"nhóm ngôn ngữ Kannada",
6363888,
"dra-tkn",
"Nhóm ngôn ngữ Kannada",
"Kannada",
protoLanguage = "dra-okn",
}
m["dra-kki"] = {
"Konda-Kui",
nil,
"dra-gki",
}
m["dra-kml"] = {
"Kurukh-Malto",
68002822,
"dra-nor",
}
m["dra-knk"] = {
"Kolami-Naiki",
10547037,
"dra-cen",
}
m["dra-kod"] = {
"Kodagu",
67983106,
"dra-tkd",
}
m["dra-kor"] = {
"Koraga",
33394,
"dra-tlk",
}
m["dra-mal"] = {
"nhóm ngôn ngữ Malayalam",
6741581,
"dra-tml",
"Nhóm ngôn ngữ Malayalam",
"Malayalam",
}
m["dra-mdy"] = {
"Madiya",
27602,
"dra-gon",
}
m["dra-mlo"] = {
"Malto",
nil,
"dra-kml",
}
m["dra-mur"] = {
"Muria",
6938499,
"dra-gon",
}
m["dra-nor"] = {
"North Dravidian",
16110967,
"dra",
}
m["dra-pgd"] = {
"Parji-Gadaba",
10620428,
"dra-cen",
}
m["dra-sdo"] = {
"nhóm ngôn ngữ Nam Dravida I",
16112843, -- Wikipedia's "South Dravidian" is South Dravidian I in this scheme.
"dra-sou",
"Nhóm ngôn ngữ Nam Dravida I",
"Nam Dravida I",
aliases = {"Nam Dravida"}, -- This is why I and II are used.
}
m["dra-sdt"] = {
"nhóm ngôn ngữ Nam Dravida II",
12633975,
"dra-sou",
"Nhóm ngôn ngữ Nam Dravida II",
"Nam Dravida II",
aliases = {"Nhóm ngôn ngữ Trung-Nam Dravida"},
}
m["dra-sou"] = {
"nhóm ngôn ngữ Nam Dravida",
nil,
"dra",
"Nhóm ngôn ngữ Nam Dravida",
"Nam Dravida",
}
m["dra-tam"] = {
"Tamiloid",
7681417,
"dra-tml",
protoLanguage = "oty",
}
m["dra-tel"] = {
"nhóm ngôn ngữ Telugu",
nil,
"dra-sdt",
"Nhóm ngôn ngữ Telugu",
"Telugu",
protoLanguage = "dra-ote",
}
m["dra-tkd"] = {
"Tamil-Kodagu",
25494510,
"dra-tkn",
}
m["dra-tkn"] = {
"nhóm ngôn ngữ Tamil-Kannada",
6478506,
"dra-sdo",
"Nhóm ngôn ngữ Tamil-Kannada",
"Tamil-Kannada",
}
m["dra-tkt"] = {
"Toda-Kota",
67983857,
"dra-tkd",
}
m["dra-tlk"] = {
"nhóm ngôn ngữ Tulu-Koraga",
nil,
"dra-sdo",
"Nhóm ngôn ngữ Tulu-Koraga",
"Tulu-Koraga",
}
m["dra-tml"] = {
"Tamil-Malayalam",
10690507,
"dra-tkd",
}
m["egx"] = {
"nhóm ngôn ngữ Ai Cập",
50868,
"afa",
"Nhóm ngôn ngữ Ai Cập",
"Ai Cập",
protoLanguage = "egy",
}
m["esx"] = {
"nhóm ngôn ngữ Eskimo-Aleut",
25946,
"Nhóm ngôn ngữ Eskimo-Aleut",
"Eskimo-Aleut",
}
m["esx-esk"] = {
"Eskimo",
25946,
"esx",
}
m["esx-inu"] = {
"Inuit",
27796,
"esx-esk",
}
m["euq"] = {
"ngữ hệ Vascon",
4669240,
"Ngữ hệ Vascon",
"Vascon",
}
m["gem"] = {
"nhóm ngôn ngữ German",
21200,
"ine",
"Nhóm ngôn ngữ German",
"German",
}
m["gme"] = {
"East Germanic",
108662,
"gem",
}
m["gmq"] = {
"nhóm ngôn ngữ German Bắc",
106085,
"gem",
"Nhóm ngôn ngữ German Bắc",
"German Bắc",
}
m["gmq-eas"] = {
"nhóm ngôn ngữ Đông Scandinavia",
3090263,
"gmq",
"Nhóm ngôn ngữ Đông Scandinavia",
"Đông Scandinavia",
protoLanguage = "non-oen",
}
m["gmq-ins"] = {
"Insular Scandinavian",
nil,
"gmq-wes",
}
m["gmq-wes"] = {
"nhóm ngôn ngữ Tây Scandinavia",
1792570,
"gmq",
"Nhóm ngôn ngữ Tây Scandinavia",
"Tây Scandinavia",
protoLanguage = "non-own",
}
m["gmw"] = {
"nhóm ngôn ngữ German Tây",
26721,
"gem",
"Nhóm ngôn ngữ German Tây",
"German Tây",
}
m["gmw-afr"] = {
"nhóm ngôn ngữ Anh-Frisia",
5329170,
"gmw-nsg",
"Nhóm ngôn ngữ Anh-Frisia",
"Anh-Frisia",
}
m["gmw-nsg"] = {
"nhóm ngôn ngữ German Biển Bắc",
30134,
"gmw",
"Nhóm ngôn ngữ German Biển Bắc",
"German Biển Bắc",
}
m["gmw-ang"] = {
"nhóm ngôn ngữ Anh",
1346342,
"gmw-afr",
"Nhóm ngôn ngữ Anh",
"Anh",
protoLanguage = "ang",
}
m["gmw-fri"] = {
"Frisian",
25325,
"gmw-afr",
protoLanguage = "ofs",
}
m["gmw-frk"] = {
"nhóm ngôn ngữ Hạ Franken",
153050,
"gmw",
"Nhóm ngôn ngữ Hạ Franken",
"Hạ Franken",
protoLanguage = "odt",
}
m["gmw-hgm"] = {
"nhóm ngôn ngữ Đức cao địa",
52040,
"gmw",
"Nhóm ngôn ngữ Đức cao địa",
"Đức cao địa",
protoLanguage = "goh",
}
m["gmw-ian"] = {
"Irish Anglo-Norman",
120719384,
"gmw-ang",
protoLanguage = "enm",
}
m["gmw-lgm"] = {
"Low German",
25433,
"gmw",
protoLanguage = "osx",
}
m["grk"] = {
"nhóm ngôn ngữ gốc Hy Lạp",
2042538,
"ine",
"Nhóm ngôn ngữ gốc Hy Lạp",
"gốc Hy Lạp",
aliases = {"Greek"},
}
m["him"] = {
"Western Pahari",
12645574,
"inc-pah",
aliases = {"Himachali"},
}
m["hmn"] = {
"Hmong",
3307894,
"hmx",
}
m["hmx"] = {
"ngữ hệ Hmông-Miền",
33322,
"Ngữ hệ Hmông-Miền",
"Hmông-Miền",
aliases = {"Miao-Yao"},
}
m["hmx-mie"] = {
"nhóm ngôn ngữ Miền",
7992695,
"hmx",
"Nhóm ngôn ngữ Miền",
"Miền",
}
m["hok"] = {
"Hokan",
33406,
}
m["hyx"] = {
"nhóm ngôn ngữ Armenia",
8785,
"ine",
"Nhóm ngôn ngữ Armenia",
"Armenia",
}
m["iir"] = {
"nhóm ngôn ngữ Ấn-Iran",
33514,
"ine",
"Nhóm ngôn ngữ Ấn-Iran",
"Ấn-Iran",
}
m["iir-nur"] = {
"Nuristani",
161804,
"iir",
}
m["nur-nor"] = {
"Northern Nuristani",
nil,
"iir-nur",
}
m["nur-sou"] = {
"Southern Nuristani",
nil,
"iir-nur",
}
m["ijo"] = {
"Ijoid",
1325759,
"nic",
otherNames = {"Ijaw"}, -- Ijaw may be a subfamily
}
m["inc"] = {
"nhóm ngôn ngữ Ấn-Arya",
33577,
"iir",
"Nhóm ngôn ngữ Ấn-Arya",
"Ấn-Arya",
aliases = {"Indic"},
}
m["inc-bas"] = {
"nhóm ngôn ngữ Bengal-Assam",
4179137,
"inc-eas",
"Nhóm ngôn ngữ Bengal-Assam",
"Bengal-Assam",
aliases = {"Bengal-Assam", "Gauda-Kamarupa"},
}
m["inc-bhi"] = {
"Bhil",
4901727,
"inc-cen",
}
m["inc-bih"] = {
"nhóm ngôn ngữ Bihar",
135305,
"inc-eas",
"Nhóm ngôn ngữ Bihar",
"Bihar",
aliases = {"Bihari"},
}
m["inc-cen"] = {
"Central Indo-Aryan",
10979187,
"inc",
}
m["inc-chi"] = {
"Chitrali",
11732797,
"inc-dar",
}
m["inc-dar"] = {
"nhóm ngôn ngữ Dard",
161101,
"inc",
"Nhóm ngôn ngữ Dard",
"Dard",
protoLanguage = "sa",
}
m["inc-dre"] = {
"Eastern Dardic",
nil,
"inc-dar",
}
m["inc-eas"] = {
"nhóm ngôn ngữ Đông Ấn-Arya",
16590069,
"inc",
"Nhóm ngôn ngữ Đông Ấn-Arya",
"Đông Ấn-Arya",
protoLanguage = "pra-mag",
}
m["inc-hie"] = {
"Eastern Hindi",
4126648,
"inc",
aliases = {"Purabiyā"},
protoLanguage = "pra-ard",
}
m["inc-hiw"] = {
"Western Hindi",
12600937,
"inc-cen",
protoLanguage = "inc-sap",
}
m["inc-hnd"] = {
"tiếng Hindustan",
11051,
"inc-hiw",
"Tiếng Hindustan",
"Hindustan",
aliases = {"Hindi-Urdu"},
protoLanguage = "hi-mid",
}
m["inc-ins"] = {
"Insular Indo-Aryan",
12179302,
"inc",
protoLanguage = "pra-hel",
}
m["inc-kas"] = {
"Kashmiric",
nil,
"inc-dre",
aliases = {"Kashmiri"},
}
m["inc-koh"] = {
"Kohistani",
111971091,
"inc-dre",
}
m["inc-kun"] = {
"Kunar",
nil,
"inc-dar",
}
m["inc-mid"] = {
"nhóm ngôn ngữ Ấn-Arya trung đại",
3236316,
"inc",
"Nhóm ngôn ngữ Ấn-Arya trung đại",
"Ấn-Arya trung đại",
aliases = {"Middle Indic"},
}
m["inc-nwe"] = {
"Northwestern Indo-Aryan",
41355020,
"inc",
protoLanguage = "pra-pai",
}
m["inc-nor"] = {
"nhóm ngôn ngữ Bắc Ấn-Arya",
12642170,
"inc",
"Nhóm ngôn ngữ Bắc Ấn-Arya",
"Bắc Ấn-Arya",
protoLanguage = "pra-kha",
}
m["inc-old"] = {
"nhóm ngôn ngữ Ấn-Arya cổ",
118976896,
"inc",
"Nhóm ngôn ngữ Ấn-Arya cổ",
"Ấn-Arya cổ",
aliases = {"Old Indic"},
}
m["inc-pah"] = {
"nhóm ngôn ngữ Pahari",
946077,
"inc-nor",
"Nhóm ngôn ngữ Pahari",
"Pahari",
aliases = {"Pahadi"},
}
m["inc-pan"] = {
"Punjabi-Lahnda",
nil,
"inc-nwe",
protoLanguage = "inc-tak",
}
m["inc-pas"] = {
"Pashayi",
36670,
"inc-dar",
aliases = {"Pashai"},
}
m["inc-rom"] = {
"Romani",
13201,
"inc-wes",
aliases = {"Romany", "Gypsy", "Gipsy"},
protoLanguage = "rom",
}
m["inc-shn"] = {
"Shinaic",
12646125,
"inc-dre",
}
m["inc-snd"] = {
"Sindhi",
7522212,
"inc-nwe",
protoLanguage = "inc-vra",
}
m["inc-sou"] = {
"Southern Indo-Aryan",
12179304,
"inc",
protoLanguage = "inc-ama",
}
m["inc-wes"] = {
"nhóm ngôn ngữ Tây Ấn-Aryan",
nil,
"inc",
"Nhóm ngôn ngữ Tây Ấn-Aryan",
"Tây Ấn-Aryan",
protoLanguage = "inc-agu",
}
m["ine"] = {
"ngữ hệ Ấn-Âu",
19860,
aliases = {"Indo-Germanic"},
"Ngữ hệ Ấn-Âu",
"Ấn Âu",
}
m["ine-ana"] = {
"nhóm ngôn ngữ Tiểu Á",
147085,
"ine",
"Nhóm ngôn ngữ Tiểu Á",
"Tiểu Á",
}
m["ine-bsl"] = {
"nhóm ngôn ngữ Balt-Slav",
147356,
"ine",
"Balt-Slav",
}
m["ine-grp"] = {
"nhóm ngôn ngữ Graeco-Phrygia",
nil,
"ine",
"Nhóm ngôn ngữ Graeco-Phrygia",
"Graeco-Phrygia",
}
m["ine-luw"] = {
"Luwic",
115748615,
"ine-ana",
aliases = {"Luvic"},
}
m["ine-toc"] = {
"Tocharian",
37029,
"ine",
aliases = {"Tokharian"},
}
m["ira"] = {
"nhóm ngôn ngữ Iran",
33527,
"iir",
"Nhóm ngôn ngữ Iran",
"Iran",
}
m["ira-csp"] = {
"Caspian",
5049123,
"ira-mpr",
}
m["ira-cen"] = {
"Central Iranian",
nil,
"ira",
}
m["ira-kms"] = {
"Komisenian",
nil,
"ira-mpr",
aliases = {"Semnani"},
}
m["ira-mid"] = {
"nhóm ngôn ngữ Iran trung đại",
6841465,
"ira",
"Nhóm ngôn ngữ Iran trung đại",
"Iran trung đại",
}
m["ine-luw"] = {
"Luwic",
115748615,
"ine-ana",
aliases = {"Luvic"},
}
m["ira-mny"] = {
"Munji-Yidgha",
nil,
"ira-sym",
aliases = {"Yidgha-Munji"},
}
m["ira-msh"] = {
"Mazanderani-Shahmirzadi",
nil,
"ira-csp",
}
m["ira-nei"] = {
"nhóm ngôn ngữ Đông Bắc Iran",
10775567,
"ira",
"Nhóm ngôn ngữ Đông Bắc Iran",
"Đông Bắc Iran",
}
m["ira-nwi"] = {
"nhóm ngôn ngữ Tây Bắc Iran",
390576,
"ira-wes",
"Nhóm ngôn ngữ Tây Bắc Iran",
"Tây Bắc Iran",
}
m["ira-orp"] = {
"nhóm ngôn ngữ Ormur-Parachi",
nil,
"ira-sei",
"Nhóm ngôn ngữ Ormur-Parachi",
"Ormur-Parachi",
}
m["ira-pat"] = {
"Pathan",
nil,
"ira-sei",
}
m["ira-sbc"] = {
"Sogdo-Bactrian",
nil,
"ira-nei",
}
m["ira-mpr"] = {
"nhóm ngôn ngữ Media-Parthia",
nil,
"ira-nwi",
"Nhóm ngôn ngữ Media-Parthia",
"Media-Parthia",
}
m["ira-sgi"] = {
"Sanglechi-Ishkashimi",
18711232,
"ira-sei",
}
m["ira-shr"] = {
"nhóm ngôn ngữ Shughni-Roshani",
11732824,
"ira-shy",
"Nhóm ngôn ngữ Shughni-Roshani",
"Shughni-Roshani",
}
m["ira-shy"] = {
"Shughni-Yazghulami",
nil,
"ira-sym",
}
m["ira-sgc"] = {
"Sogdic",
nil,
"ira-sbc",
aliases = {"Sogdian"},
}
m["ira-sei"] = {
"nhóm ngôn ngữ Đông Nam Iran",
3833002,
"ira",
"Nhóm ngôn ngữ Đông Nam Iran",
"Đông Nam Iran",
}
m["ira-swi"] = {
"nhóm ngôn ngữ Tây Nam Iran",
390424,
"ira-wes",
"Nhóm ngôn ngữ Tây Nam Iran",
"Tây Nam Iran",
}
m["ira-sym"] = {
"nhóm ngôn ngữ Shughni-Yazghulami-Munji",
nil,
"ira-sei",
"Nhóm ngôn ngữ Shughni-Yazghulami-Munji",
"Shughni-Yazghulami-Munji",
}
m["ira-wes"] = {
"nhóm ngôn ngữ Tây Iran",
129850,
"ira",
"Nhóm ngôn ngữ Tây Iran",
"Tây Iran",
}
m["ira-zgr"] = {
"nhóm ngôn ngữ Zaza-Goran",
167854,
"ira-mpr",
"Nhóm ngôn ngữ Zaza-Goran",
"Zaza-Goran",
aliases = {"Zaza-Guran", "Goran-Zaza"},
}
m["iro"] = {
"ngữ hệ Iroquois",
33623,
"Ngữ hệ Iroquois",
"Iroquois",
}
m["iro-nor"] = {
"nhóm ngôn ngữ Bắc Iroquois",
nil,
"iro",
"Nhóm ngôn ngữ Bắc Iroquois",
"Bắc Iroquois",
}
m["itc"] = {
"nhóm ngôn ngữ gốc Ý",
131848,
"ine",
"Nhóm ngôn ngữ gốc Ý",
"gốc Ý",
}
m["itc-laf"] = {
"nhóm ngôn ngữ Latinh-Faliscan",
33478,
"itc",
"Nhóm ngôn ngữ Latinh-Faliscan",
"Latinh-Faliscan",
aliases = {"Latinian"},
}
m["itc-sbl"] = {
"nhóm ngôn ngữ Osco-Umbria",
515194,
"itc",
"Nhóm ngôn ngữ Osco-Umbria",
"Osco-Umbria",
aliases = { "Sabellia" },
}
m["jpx"] = {
"ngữ hệ Nhật Bản-Lưu Cầu",
33612,
aliases = {"Nhật", "Nhật Bản-Lưu Cầu"},
"Ngữ hệ Nhật Bản-Lưu Cầu",
"Nhật Bản-Lưu Cầu",
}
m["jpx-nry"] = {
"nhóm ngôn ngữ Bắc Lưu Cầu",
20862796,
"jpx-ryu",
"Nhóm ngôn ngữ Bắc Lưu Cầu",
"Bắc Lưu Cầu",
}
m["jpx-ryu"] = {
"nhóm ngôn ngữ Lưu Cầu",
56393,
"jpx",
"Nhóm ngôn ngữ Lưu Cầu",
"Lưu Cầu",
}
m["jpx-sry"] = {
"nhóm ngôn ngữ Nam Lưu Cầu",
18392243,
"jpx-ryu",
"Nhóm ngôn ngữ Nam Lưu Cầu",
"Nam Lưu Cầu",
}
m["kar"] = {
"nhóm ngôn ngữ Karen",
1364815,
"sit",
"Nhóm ngôn ngữ Karen",
"Karen",
}
m["kca"] = {
"Khanty",
33563,
"urj-ugr",
aliases = {"Khantyic", "Khantic"},
}
--[=[
Exceptional language and family codes for Khoisan and Kordofanian languages can use
the prefix "khi-" and "kdo-" respectively, though they are no longer family codes themselves.
]=]--
m["khi-kal"] = {
"Kalahari Khoe",
nil,
"khi-kho",
}
m["khi-khk"] = {
"Khoekhoe",
nil,
"khi-kho",
}
m["khi-kkw"] = {
"Khoe-Kwadi",
3833005,
aliases = {"Kwadi-Khoe"},
}
m["khi-kho"] = {
"Khoe",
2736449,
"khi-kkw",
aliases = {"Central Khoisan"},
}
m["khi-kxa"] = {
"Kx'a",
6450587,
aliases = {"Kxa", "Ju-ǂHoan"},
}
m["khi-tuu"] = {
"Tuu",
631046,
aliases = {"Kwi", "Taa-Kwi", "Southern Khoisan", "Taa-ǃKwi", "Taa-ǃUi", "ǃUi-Taa"},
}
m["kro"] = {
"nhóm ngôn ngữ Kru",
33535,
"nic-vco",
"Nhóm ngôn ngữ Kru",
"Kru",
}
m["kro-aiz"] = {
"Aizi",
4699431,
"kro",
}
m["kro-bet"] = {
"Bété",
32956,
"kro-ekr",
}
m["kro-did"] = {
"Dida",
32685,
"kro-ekr",
}
m["kro-ekr"] = {
"Eastern Kru",
5972899,
"kro",
}
m["kro-grb"] = {
"Grebo",
5601537,
"kro-wkr",
}
m["kro-wee"] = {
"Wee",
nil,
"kro-wkr",
}
m["kro-wkr"] = {
"Western Kru",
5972897,
"kro",
}
m["ku"] = {
"nhóm ngôn ngữ Kurd",
36368,
"ira-nwi",
"Nhóm ngôn ngữ Kurd",
"Kurd",
}
m["map"] = {
"ngữ hệ Nam Đảo",
49228,
"Ngữ hệ Nam Đảo",
"Nam Đảo",
}
m["map-ata"] = {
"nhóm ngôn ngữ Atayal",
716610,
"map",
"Nhóm ngôn ngữ Atayal",
"Atayal",
}
m["map-tsu"] = {
"nhóm ngôn ngữ Tsou",
716659,
"map",
"Nhóm ngôn ngữ Tsou",
"Tsou",
}
m["mjg"] = {
"nhóm ngôn ngữ Monguor",
34214,
"xgn-shr",
"Nhóm ngôn ngữ Monguor",
"Monguor",
}
m["mkh"] = {
"nhóm ngôn ngữ Môn-Khmer",
33199,
"aav",
"Nhóm ngôn ngữ Môn-Khmer",
"Môn-Khmer",
}
m["mkh-asl"] = {
"nhóm ngôn ngữ Asli",
3111082,
"mkh",
"Nhóm ngôn ngữ Asli",
"Asli",
}
m["mkh-ban"] = {
"nhóm ngôn ngữ Bahnar",
56309,
"mkh",
"Nhóm ngôn ngữ Bahnar",
"Bahnar",
}
m["mkh-kat"] = {
"nhóm ngôn ngữ Cơ Tu",
56697,
"mkh",
"Nhóm ngôn ngữ Cơ Tu",
"Cơ Tu",
}
m["mkh-khm"] = {
"nhóm ngôn ngữ Khơ Mú",
1323245,
"mkh",
"Nhóm ngôn ngữ Khơ Mú",
"Khơ Mú",
}
m["mkh-kmr"] = {
"nhóm ngôn ngữ Khmer",
nil,
"mkh",
"Nhóm ngôn ngữ Khmer",
"Khmer",
}
m["mkh-mnc"] = {
"nhóm ngôn ngữ Môn",
3217497,
"mkh",
"Nhóm ngôn ngữ Môn",
"Môn",
}
m["mkh-mng"] = {
"nhóm ngôn ngữ Mảng",
3509556,
"mkh",
"Nhóm ngôn ngữ Mảng",
"Mảng",
}
m["mkh-nbn"] = {
"nhóm ngôn ngữ Bahnar Bắc",
56309,
"mkh-ban",
"Nhóm ngôn ngữ Bahnar",
"Bahnar",
}
m["mkh-pal"] = {
"nhóm ngôn ngữ Palaung",
2391173,
"mkh",
"Nhóm ngôn ngữ Palaung",
"Palaung",
}
m["mkh-pea"] = {
"nhóm ngôn ngữ Pear",
3073022,
"mkh",
"Nhóm ngôn ngữ Pear",
"Pear",
}
m["mkh-pkn"] = {
"Pakanic",
nil,
"mkh-mng",
}
m["mkh-vie"] = {
"nhóm ngôn ngữ Việt",
2355546,
"mkh",
"Nhóm ngôn ngữ Việt",
"Việt",
}
m["mno"] = {
"nhóm ngôn ngữ Manobo",
3217483,
"phi",
"Nhóm ngôn ngữ Manobo",
"Manobo",
}
m["mns"] = {
"nhóm ngôn ngữ Mansi",
33759,
"urj-ugr",
"Nhóm ngôn ngữ Mansi",
"Mansi",
aliases = {"Mansi"},
}
m["mun"] = {
"nhóm ngôn ngữ Munda",
33892,
"aav",
"Nhóm ngôn ngữ Munda",
"Munda",
}
m["myn"] = {
"ngữ hệ Maya",
33738,
"Ngữ hệ Maya",
"Maya",
}
--[=[
Exceptional language and family codes for North American Indian languages
can use the prefix "nai-", though "nai" is no longer itself a family code.
]=]--
m["nai-cat"] = {
"Catawban",
3446638,
"nai-sca",
}
m["nai-chu"] = {
"Chumashan",
1288420,
}
m["nai-ckn"] = {
"Chinookan",
610586,
}
m["nai-coo"] = {
"Coosan",
940278,
}
m["nai-jcq"] = {
"Jicaquean",
12179308,
"hok"
}
m["nai-ker"] = {
"Keresan",
35878,
}
m["nai-klp"] = {
"Kalapuyan",
1569040,
}
m["nai-kta"] = {
"ngữ hệ Kiowa-Tanoa",
386288,
"Ngữ hệ Kiowa-Tanoa",
"Kiowa-Tanoa",
}
m["nai-len"] = {
"Lencan",
36189,
aliases = {"Lenca"},
}
m["nai-mdu"] = {
"Maiduan",
33502,
}
m["nai-miz"] = {
"Mixe-Zoquean",
954016,
aliases = {"Mixe-Zoque"},
}
m["nai-min"] = {
"Misumalpan",
281693,
"qfa-mch",
aliases = {"Misuluan", "Misumalpa"},
}
m["nai-mus"] = {
"ngữ hệ Muskogee",
902978,
"Ngữ hệ Muskogee",
"Muskogee",
aliases = {"Muskhogean"},
}
m["nai-pak"] = {
"Pakawan",
65085487,
"hok",
}
m["nai-pal"] = {
"Palaihnihan",
1288332,
}
m["nai-plp"] = {
"Plateau Penutian",
2307476,
}
m["nai-pom"] = {
"Pomoan",
2618420,
"hok",
aliases = {"Pomo", "Kulanapan"},
}
m["nai-sca"] = {
"Siouan-Catawban",
34181,
}
m["nai-shp"] = {
"Sahaptian",
114782,
"nai-plp",
}
m["nai-shs"] = {
"Shastan",
2991735,
"hok",
}
m["nai-tot"] = {
"Totozoquean",
7828419,
}
m["nai-ttn"] = {
"ngữ hệ Totonac",
34039,
"Ngữ hệ Totonac",
"Totonac",
aliases = {"Totonacan","Totonac-Tepehua", "Totonacan-Tepehuan"},
varieties = {"Totonac"},
}
m["nai-tqn"] = {
"Tequistlatecan",
1754988,
"hok",
aliases = {"Tequistlatec", "Chontal", "Chontalan", "Oaxacan Chontal", "Chontal of Oaxaca"},
}
m["nai-tsi"] = {
"Tsimshianic",
34134,
}
m["nai-utn"] = {
"Utian",
13371763,
"nai-you",
aliases = {"Miwok-Costanoan", "Mutsun"},
}
m["nai-wtq"] = {
"Wintuan",
1294259,
aliases = {"Wintun"},
}
m["nai-xin"] = {
"ngữ hệ Xinca",
1546494,
"Ngữ hệ Xinca",
"Xinca",
aliases = {"Xincan","Xinka","Sinca","Szinca"},
}
m["nai-ykn"] = {
"Yukian",
2406722,
aliases = {"Yuki-Wappo"},
}
m["nai-you"] = {
"Yok-Utian",
2886186,
}
m["nai-yuc"] = {
"ngữ hệ Yuman-Cochimí",
579137,
"Ngữ hệ Yuman-Cochimí",
"Yuman-Cochimí",
}
m["ngf"] = {
"ngữ hệ Liên New Guinea",
34018,
"Ngữ hệ Liên New Guinea",
"Liên New Guinea",
}
m["ngf-ais"] = {
"Aisian",
nil,
"ngf-eso",
}
m["ngf-ang"] = {
"nhóm ngôn ngữ Angan",
3217366,
"ngf",
"Nhóm ngôn ngữ Angan",
"Angan",
aliases = {"Kratke Range"}, -- Usher
}
m["ngf-ank"] = {
"Angal-Kewa",
12626916, -- exist in dewiki and hrwiki
"ngf-sak",
}
m["ngf-ask"] = {
"Asmat-Kamoro",
3031400,
"ngf",
-- Wikipedia uses Asmat-Kamoro to refer to a narrower group excluding the Sabakor languages (Buruwai and Kamberau,
-- which Glottolog splits into North Kamrau and South Kamrau [sic]), and uses Asmat-Kamrau to refer to what we and
-- Glottolog call Asmat-Kamoro. Glottolog does not recognize the narrower grouping.
aliases = {"Asmat-Kamrau", -- Wikipedia
"Asmat-Kamrau Bay", -- Usher
},
}
m["ngf-asm"] = {
"Asmat",
4807421,
"ngf-ask",
}
m["ngf-ata"] = {
"Ankave-Tainae-Akoye",
nil,
"ngf-ang",
aliases = {"Southwest Kratke Range"}, -- Usher
}
m["ngf-awd"] = {
"Awyu-Dumut", -- [[w:Awyu-Dumut languages]] redirects to [[w:Greater Awyu languages]]
4830163, -- exist in eswiki, hrwiki and ruwiki
"ngf-gaw",
aliases = {"Central Digul River"}, -- Usher
}
m["ngf-awy"] = {
"Awyu",
96372866,
"ngf-awd",
}
m["ngf-bda"] = {
"Becking-Dawi",
nil, -- Q55993716 ([[Category:Becking–Dawi languages]]) exists in enwiki
"ngf-gaw",
aliases = {"Becking and Dawi Rivers"}, -- Usher
}
m["ngf-bin"] = {
"Binanderean",
3217374, -- Wikidata doesn't distinguish Binanderean from Greater Binanderean
"ngf-gbi",
aliases = {"Oro"}, -- Usher (2020)
}
m["ngf-boa"] = {
"Boane",
nil,
"ngf-era",
aliases = {"Boana", -- Glottolog's name
"Wain"}, -- not in Usher; "Wain" often excludes Mungkip, perhaps because it's poorly documented
}
m["ngf-bos"] = {
"Bosavi",
4947122,
"ngf",
aliases = {"Papuan Plateau"}, -- alternative name given by Wikipedia
}
m["ngf-bsi"] = {
"Baruya-Simbari",
nil,
"ngf-ang",
aliases = {"Northwest Kratke Range"}, -- Usher
}
m["ngf-cda"] = {
"Central Dani",
nil,
"ngf-dan",
aliases = {"Dani"}, -- Usher
}
m["ngf-chw"] = {
"Chimbu-Wahgi",
3217383,
"ngf",
aliases = {"Simbu-Western Highlands"}, -- alternative name given by Wikipedia
}
m["ngf-dag"] = {
"Dagan",
5208454,
"ngf", -- not accepted as TNG by Glottolog but accepted by all others
aliases = {"Meneao Range"},
}
m["ngf-dal"] = {
"Dallman",
nil,
"ngf-huo",
aliases = {"Kinalakna-Kumukio", -- Pawley-Hammarström, who exclude Nomu, but they only had a numeral list of that language to work from
"Northeast Huon", -- Usher
},
}
m["ngf-dan"] = {
"Dani",
3217389,
"ngf",
-- Wikipedia renames the Dani languages to the Baliem Valley languages and sometimes (but not consistently)
-- reserves the name Dani (or "Dani proper") for a narrower group excluding Wano and the poorly attested Ngalik
-- languages (Nduga, Silimo, and the Yali dialect cluster, which we, following Ethnologue and Glottolog, split into
-- Anggurk Yali, Ninia Yali and Pass Valley Yali). Glottolog does not recognize the narrower grouping.
aliases = {"Baliem Valley", -- Wikipedia
"Balim Valley", -- Usher
},
}
m["ngf-dum"] = {
"Dumut", -- [[w:Dumut languages]] redirects to [[w:Greater Awyu languages]]
nil,
"ngf-awd",
aliases = {"Wambon"}, -- Usher
}
m["ngf-ehu"] = {
"Eastern Huon", -- Glottolog adds Ono and Sialum, Pawley-Hammarström adds Dedua
10567087,
"ngf-huo",
aliases = {"East Huon"}, -- Usher
}
m["ngf-eku"] = {
"East Kutubuan",
5328752,
"ngf", -- Not in TNG per Glottolog but accepted by all others. Sometimes grouped with Fasu to form a Kutubuan family.
aliases = {"East Kutubu"}, -- Glottolog's name
}
m["ngf-enc"] = {
"Engic",
nil,
"ngf-eng",
aliases = {"Engan", -- Glottolog
"Engan proper", -- Wikipedia
"North Engan", -- alternative name given by Wikipedia
"Trans-Enga", -- Usher
},
}
m["ngf-eng"] = {
"Engan",
3217449,
"ngf",
aliases = {"Enga-Kewa-Huli", -- Glottolog, Pawley-Hammarström
"Enga-Southern Highlands", -- Usher
},
}
m["ngf-era"] = {
"Erap",
nil,
"ngf-fin",
aliases = {"Erap River"}, -- Usher?
}
m["ngf-eso"] = {
"East Sogeram",
nil,
"ngf-sog",
}
m["ngf-est"] = {
"East Strickland",
5329440,
"ngf",
aliases = {"Strickland River"}, -- alternative name given by Wikipedia
}
m["ngf-eva"] = {
"Evapia",
nil,
"ngf-rai",
aliases = {"Evapia River"}, -- Usher
}
m["ngf-fgi"] = {
"Fore-Gimi",
nil,
"ngf-gor",
aliases = {"South Goroka"}, -- Usher
}
m["ngf-fhu"] = {
"Finisterre-Huon",
3217453,
"ngf",
aliases = {"Finisterre Range-Huon Peninsula"}, -- per Usher
}
m["ngf-fin"] = {
"Finisterre",
5450373,
"ngf",
}
m["ngf-mad"] = {
"nhóm ngôn ngữ Madang",
11217556,
"ngf",
"Nhóm ngôn ngữ Madang",
"Madang",
}
m["ngf-okk"] = {
"Ok",
7081687,
"ngf",
}
m["ngf-sbh"] = {
"South Bird's Head",
7566330,
"ngf",
}
m["nic"] = {
"ngữ hệ Niger-Congo",
33838,
"Ngữ hệ Niger-Congo",
"Niger-Congo",
aliases = {"Niger-Kordofania"},
}
m["nic-alu"] = {
"nhóm ngôn ngữ Alumic",
4737355,
"nic-plt",
"Nhóm ngôn ngữ Alumic",
"Alumic",
}
m["nic-bas"] = {
"Basa",
4866154,
"nic-knj",
}
m["nic-bbe"] = {
"Eastern Beboid",
nil,
"nic-beb",
}
m["nic-bco"] = {
"nhóm ngôn ngữ Benue-Congo",
33253,
"nic-vco",
"Nhóm ngôn ngữ Benue-Congo",
"Benue-Congo",
}
m["nic-bcr"] = {
"nhóm ngôn ngữ Bantoid-Cross",
806983,
"nic-bco",
"Nhóm ngôn ngữ Bantoid-Cross",
"Bantoid-Cross",
}
m["nic-bdn"] = {
"nhóm ngôn ngữ Bắc Bantoid",
nil,
"nic-bod",
"Nhóm ngôn ngữ Bắc Bantoid",
"Bắc Bantoid",
aliases = {"North Bantoid"},
}
m["nic-bds"] = {
"nhóm ngôn ngữ Nam Bantoid",
3183152,
"nic-bod",
"Nhóm ngôn ngữ Nam Bantoid",
"Nam Bantoid",
aliases = {"Wide Bantu", "Bin"},
}
m["nic-beb"] = {
"Beboid",
813549,
"nic-bds",
}
m["nic-ben"] = {
"Bendi",
4887065,
"nic-bcr",
}
m["nic-beo"] = {
"Beromic",
4894642,
"nic-plt",
}
m["nic-bod"] = {
"nhóm ngôn ngữ Bantoid",
806992,
"nic-bcr",
"Nhóm ngôn ngữ Bantoid",
"Bantoid",
}
m["nic-buk"] = {
"Buli-Koma",
nil,
"nic-ovo",
}
m["nic-bwa"] = {
"Bwa",
12628562,
"nic-gur",
otherNames = {"Bwamu", "Bomu"},
}
m["nic-cde"] = {
"Central Delta",
3813191,
"nic-cri",
}
m["nic-cri"] = {
"Cross River",
1141096,
"nic-bcr",
}
m["nic-dag"] = {
"nhóm ngôn ngữ Dagbani",
nil,
"nic-wov",
"Nhóm ngôn ngữ Dagbani",
"Dagbani",
}
m["nic-dak"] = {
"Dakoid",
1157745,
"nic-bdn",
}
m["nic-dge"] = {
"Escarpment Dogon",
5397128,
"qfa-dgn",
}
m["nic-dgw"] = {
"West Dogon",
nil,
"qfa-dgn",
}
m["nic-eko"] = {
"Ekoid",
1323395,
"nic-bds",
}
m["nic-eov"] = {
"Eastern Oti-Volta",
nil,
"nic-ovo",
aliases = {"Samba"},
}
m["nic-fru"] = {
"Furu",
5509783,
"nic-bds",
}
m["nic-gne"] = {
"Eastern Gurunsi",
12633072,
"nic-gns",
aliases = {"Eastern Grũsi"},
}
m["nic-gnn"] = {
"Northern Gurunsi",
nil,
"nic-gns",
aliases = {"Northern Grũsi"},
}
m["nic-gnw"] = {
"Western Gurunsi",
nil,
"nic-gns",
aliases = {"Western Grũsi"},
}
m["nic-gns"] = {
"Gurunsi",
721007,
"nic-gur",
aliases = {"Grũsi"},
}
m["nic-gre"] = {
"Eastern Grassfields",
5330160,
"nic-grf",
}
m["nic-grf"] = {
"Grassfields",
750932,
"nic-bds",
aliases = {"Grassfields Bantu", "Wide Grassfields"},
}
m["nic-grm"] = {
"Gurma",
30587833,
"nic-ovo",
}
m["nic-grs"] = {
"Southwest Grassfields",
7571285,
"nic-grf",
}
m["nic-gur"] = {
"Gur",
33536,
"alv-sav",
aliases = {"Voltaic"},
}
m["nic-ief"] = {
"Ibibio-Efik",
2743643,
"nic-lcr",
}
m["nic-jer"] = {
"Jera",
nil,
"nic-kne",
}
m["nic-jkn"] = {
"nhóm ngôn ngữ Jukunoid",
1711622,
"nic-pla",
"Nhóm ngôn ngữ Jukunoid",
"Jukunoid",
}
m["nic-jrn"] = {
"Jarawan",
1683430,
"nic-mba",
}
m["nic-jrw"] = {
"Jarawa",
35423,
"nic-jrn",
}
m["nic-kam"] = {
"Kambari",
6356294,
"nic-knj",
}
m["nic-ktl"] = {
"Katloid",
nil,
"nic",
}
m["nic-kau"] = {
"nhóm ngôn ngữ Kauru",
nil,
"nic-kne",
"Nhóm ngôn ngữ Kauru",
"Kauru",
}
m["nic-kmk"] = {
"Kamuku",
6359821,
"nic-knj",
}
m["nic-kne"] = {
"nhóm ngôn ngữ Đông Kainji",
5328687,
"nic-knj",
"Nhóm ngôn ngữ Đông Kainji",
"Đông Kainji",
}
m["nic-knj"] = {
"nhóm ngôn ngữ Kainji",
681495,
"nic-pla",
"Nhóm ngôn ngữ Kainji",
"Kainji",
}
m["nic-knn"] = {
"Northwest Kainji",
7060098,
"nic-knj",
}
m["nic-ktl"] = {
"Katloid",
6377681,
"nic",
aliases = {"Katla", "Katla-Tima"},
}
m["nic-lcr"] = {
"Lower Cross River",
3813193,
"nic-cri",
}
m["nic-mam"] = {
"Mamfe",
2005898,
"nic-bds",
aliases = {"Nyang"},
}
m["nic-mba"] = {
"Mbam",
687826,
"nic-bds",
}
m["nic-mbc"] = {
"Mba",
6799561,
"nic-ubg",
}
m["nic-mbw"] = {
"West Mbam",
nil,
"nic-mba",
}
m["nic-mmb"] = {
"nhóm ngôn ngữ Mambiloid",
1888151,
otherNames = {"Bắc Bantoid"}, -- per Wikipedia, North Bantoid is the parent family
"nic-bdn",
"Nhóm ngôn ngữ Mambiloid",
"Mambiloid",
}
m["nic-mom"] = {
"Momo",
6897393,
"nic-grf",
}
m["nic-mre"] = {
"Moré",
nil,
"nic-wov",
}
m["nic-ngd"] = {
"Ngbandi",
36439,
"nic-ubg",
}
m["nic-nge"] = {
"Ngemba",
7022271,
"nic-gre",
}
m["nic-ngk"] = {
"Ngbaka",
3217499,
"nic-ubg",
}
m["nic-nin"] = {
"Ninzic",
7039282,
"nic-plt",
}
m["nic-nka"] = {
"Nkambe",
7042520,
"nic-gre",
}
m["nic-nkb"] = {
"Baka",
nil,
"nic-nkw",
}
m["nic-nke"] = {
"Eastern Ngbaka",
nil,
"nic-ngk",
}
m["nic-nkg"] = {
"Gbanziri",
nil,
"nic-nkw",
}
m["nic-nkk"] = {
"Kpala",
nil,
"nic-nkw",
}
m["nic-nkm"] = {
"Mbaka",
nil,
"nic-nkw",
}
m["nic-nkw"] = {
"Western Ngbaka",
nil,
"nic-ngk",
}
m["nic-npd"] = {
"North Plateau Dogon",
nil,
"qfa-dgn",
}
m["nic-nun"] = {
"Nun",
13654297,
"nic-gre",
}
m["nic-nwa"] = {
"Nanga-Walo",
nil,
"qfa-dgn",
}
m["nic-ogo"] = {
"Ogoni",
2350726,
"nic-cri",
aliases = {"Ogonoid"},
}
m["nic-ovo"] = {
"Oti-Volta",
1157178,
"nic-gur",
}
m["nic-pla"] = {
"nhóm ngôn ngữ Platoid",
453244,
"nic-bco",
"Nhóm ngôn ngữ Platoid",
"Platoid",
aliases = {"Đông Nigeria"},
}
m["nic-plc"] = {
"nhóm ngôn ngữ Trung Plateau",
5061668,
"nic-plt",
"Nhóm ngôn ngữ Trung Plateau",
"Trung Plateau",
}
m["nic-pld"] = {
"Plains Dogon",
nil,
"qfa-dgn",
}
m["nic-ple"] = {
"East Plateau",
5329154,
"nic-plt",
}
m["nic-pls"] = {
"South Plateau",
7568236,
"nic-plt",
aliases = {"Jilic-Eggonic"},
}
m["nic-plt"] = {
"nhóm ngôn ngữ Plateau",
1267471,
"nic-pla",
"Nhóm ngôn ngữ Plateau",
"Plateau",
}
m["nic-ras"] = {
"Rashad",
3401986,
"nic",
}
m["nic-rnc"] = {
"Central Ring",
nil,
"nic-rng",
}
m["nic-rng"] = {
"Ring",
2269051,
"nic-grf",
aliases = {"Ring Road"},
}
m["nic-rnn"] = {
"Northern Ring",
nil,
"nic-rng",
}
m["nic-rnw"] = {
"Western Ring",
nil,
"nic-rng",
}
m["nic-ser"] = {
"Sere",
7453058,
"nic-ubg",
}
m["nic-shi"] = {
"Shiroro",
7498953,
"nic-knj",
aliases = {"Pongu"},
}
m["nic-sis"] = {
"Sisaala",
36532,
"nic-gnw",
}
m["nic-tar"] = {
"Tarokoid",
2394472,
"nic-plt",
}
m["nic-tiv"] = {
"nhóm ngôn ngữ Tivoid",
752377,
"nic-bds",
"Nhóm ngôn ngữ Tivoid",
"Tivoid",
}
m["nic-tvc"] = {
"Central Tivoid",
nil,
"nic-tiv",
}
m["nic-tvn"] = {
"Northern Tivoid",
nil,
"nic-tiv",
}
m["nic-ubg"] = {
"nhóm ngôn ngữ Ubangi",
33932,
"nic-vco", -- or none
"Nhóm ngôn ngữ Ubangi",
"Ubangi",
}
m["nic-uce"] = {
"East-West Upper Cross River",
nil,
"nic-ucr",
}
m["nic-ucn"] = {
"North-South Upper Cross River",
nil,
"nic-ucr",
}
m["nic-ucr"] = {
"Upper Cross River",
4108624,
"nic-cri",
aliases = {"Upper Cross"},
}
m["nic-vco"] = {
"nhóm ngôn ngữ Volta-Congo",
37228,
"alv",
"Nhóm ngôn ngữ Volta-Congo",
"Volta-Congo",
}
m["nic-wov"] = {
"Western Oti-Volta",
nil,
"nic-ovo",
aliases = {"Moré-Dagbani"}
}
m["nic-ykb"] = {
"Yukubenic",
16909196,
"nic-plt",
aliases = {"Oohum"},
}
m["nic-ymb"] = {
"Yambasa",
nil,
"nic-mba",
}
m["nic-yon"] = {
"Yom-Nawdm",
nil,
"nic-ovo",
aliases = {"Moré-Dagbani"}
}
m["nub"] = {
"Nubian",
1517194,
"sdv-nes",
}
m["nub-hil"] = {
"Hill Nubian",
5762211,
"nub",
aliases = {"Kordofan Nubian"},
}
m["omq"] = {
"ngữ hệ Oto-Mangue",
33669,
"Ngữ hệ Oto-Mangue",
"Oto-Mangue",
}
m["omq-cha"] = {
"Chatino",
35111,
"omq-zap",
}
m["omq-chi"] = {
"Chinantecan",
35828,
"omq",
}
m["omq-cui"] = {
"Cuicatec",
616024,
"omq-mix",
}
m["omq-maz"] = {
"Mazatecan",
36230,
"omq",
aliases = {"Mazatec"},
}
m["omq-mix"] = {
"ngữ tộc Mixtec",
21996392,
"omq",
"Ngữ tộc Mixtec",
"Mixtec",
}
m["omq-mxt"] = {
"nhóm ngôn ngữ Mixtec",
36363,
"omq-mix",
"Nhóm ngôn ngữ Mixtec",
"Mixtec",
}
m["omq-otp"] = {
"Oto-Pamean",
nil,
"omq",
}
m["omq-pop"] = {
"Popolocan",
5132273,
"omq",
}
m["omq-tri"] = {
"nhóm ngôn ngữ Triqui",
780200,
"omq-mix",
"Nhóm ngôn ngữ Triqui",
"Triqui",
aliases = {"Trique"},
}
m["omq-zap"] = {
"nhóm ngôn ngữ Zapotec",
8066463,
"omq",
"Nhóm ngôn ngữ Zapotec",
"Zapotec",
}
m["omq-zpc"] = {
"Zapotec",
13214,
"omq-zap",
}
m["omv"] = {
"nhóm ngôn ngữ Omo",
33860,
"afa",
"Nhóm ngôn ngữ Omo",
"Omo",
}
m["omv-aro"] = {
"nhóm ngôn ngữ Aari",
3699526,
"omv",
"Nhóm ngôn ngữ Aari",
"Aari",
aliases = {"Ari-Banna", "Nam Omo", "Somo"},
}
m["omv-diz"] = {
"nhóm ngôn ngữ Dizi",
430251,
"omv",
"Nhóm ngôn ngữ Dizi",
"Dizi",
aliases = {"Maji", "Majoid"},
}
m["omv-eom"] = {
"East Ometo",
20527288,
"omv-ome",
}
m["omv-gon"] = {
"Gonga",
4143043,
"omv",
aliases = {"Kefoid"},
}
m["omv-mao"] = {
"Mao",
1351495,
"omv",
}
m["omv-nom"] = {
"nhóm ngôn ngữ Bắc Ometo",
nil,
"omv-ome",
"Nhóm ngôn ngữ Bắc Ometo",
"Bắc Ometo",
}
m["omv-ome"] = {
"nhóm ngôn ngữ Ometo",
36310,
"omv",
"Nhóm ngôn ngữ Ometo",
"Ometo",
}
m["oto"] = {
"Otomian",
1270220,
"omq-otp",
}
m["oto-otm"] = {
"Otomi",
nil,
"oto",
}
m["paa"] = {
"ngữ hệ Papua",
236425,
"qfa-not",
"Ngữ hệ Papua",
"Papua",
}
m["paa-arf"] = {
"Arafundi",
4783702,
}
m["paa-asa"] = {
"Arai-Samaia",
48803569,
}
m["paa-bng"] = {
"Baining",
748487,
aliases = {"East New Britain"},
}
m["paa-brd"] = {
"ngữ hệ Thượng Tami",
1752158,
"Ngữ hệ Thượng Tami",
"Thượng Tami",
aliases = {"Border", "Upper Tami"},
}
m["paa-egb"] = {
"East Geelvink Bay",
1497678,
aliases = {"East Cenderawasih"},
}
m["paa-eng"] = {
"Engan",
3217449,
}
m["paa-iwm"] = {
"ngữ hệ Iwam",
15147853,
"Ngữ hệ Iwam",
"Iwam",
}
m["paa-kag"] = { -- recode as ngf-kag?
"Kainantu-Goroka",
3217463,
"ngf",
}
m["paa-kiw"] = {
"Kiwaian",
338449,
}
m["paa-kut"] = {
"nhóm ngôn ngữ Kutubuan",
48767893,
"paa-pag",
"Nhóm ngôn ngữ Kutubuan",
"Kutubuan",
}
m["paa-kwm"] = {
"Kwomtari",
2075415,
}
m["paa-lkp"] = {
"Lakes Plain",
6478969,
}
m["paa-lsp"] = {
"Lower Sepik",
7061700,
aliases = {"Nor-Pondo"},
}
m["paa-mai"] = {
"Mairasi",
6736896,
}
m["paa-msk"] = {
"Sko",
953509,
aliases = {"Skou"},
}
m["paa-nbo"] = {
"North Bougainville",
749496,
}
m["paa-nim"] = {
"Nimboran",
12638426,
}
m["paa-nha"] = {
"North Halmahera",
nil,
"paa-wpa",
}
m["paa-pag"] = {
"ngữ hệ vùng vịnh Papua",
48803685,
"Ngữ hệ vùng vịnh Papua",
"vùng vịnh Papua",
}
m["paa-pau"] = {
"Pauwasi",
7155496,
}
m["paa-ram"] = {
"Ramu",
3442808,
}
m["paa-sbo"] = {
"South Bougainville",
3217380,
}
m["paa-sen"] = {
"Sentani",
17044584,
"paa-wpa",
}
m["paa-sep"] = {
"ngữ hệ Sepik",
3508772,
"Ngữ hệ Sepik",
"Sepik",
}
m["paa-tkw"] = {
"Tor-Kwerba",
7827523,
}
m["paa-wpa"] = {
"West Papuan",
1363026,
}
m["paa-yam"] = {
"Yam",
15062272,
aliases = {"Morehead and Upper Maro River"},
}
m["paa-yua"] = {
"Yuat",
8060096,
}
m["phi"] = {
"nhóm ngôn ngữ Philippines",
947858,
"poz",
"Nhóm ngôn ngữ Philippines",
"Philippines",
}
m["phi-kal"] = {
"Kalamian",
3217466,
"phi",
aliases = {"Calamian"},
}
m["poz"] = {
"nhóm ngôn ngữ Mã Lai-Đa Đảo",
143158,
"map",
"Nhóm ngôn ngữ Mã Lai-Đa Đảo",
"Mã Lai-Đa Đảo",
}
m["poz-aay"] = {
"Admiralty Islands",
2701306,
"poz-oce",
}
m["poz-bnn"] = {
"nhóm ngôn ngữ Bắc Borneo",
1427907,
"poz",
"Nhóm ngôn ngữ Bắc Borneo",
"Bắc Borneo",
}
m["poz-bre"] = {
"nhóm ngôn ngữ Đông Barito",
2701314,
"poz",
"Nhóm ngôn ngữ Đông Barito",
"Đông Barito",
}
m["poz-brw"] = {
"nhóm ngôn ngữ Tây Barito",
2761679,
"poz",
"Nhóm ngôn ngữ Tây Barito",
"Tây Barito",
}
m["poz-bss"] = {
"nhóm ngôn ngữ Bali-Sasak-Sumbawa",
3396043,
"poz-msa",
"Nhóm ngôn ngữ Bali-Sasak-Sumbawa",
"Bali-Sasak-Sumbawa",
}
m["poz-btk"] = {
"nhóm ngôn ngữ Bungku-Tolaki",
3217381,
"poz-clb",
"Nhóm ngôn ngữ Bungku-Tolaki",
"Bungku-Tolaki",
}
m["poz-cet"] = {
"nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông",
2269883,
"poz",
"Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông",
"Mã lai-Đa Đảo Trung-Đông",
}
m["poz-clb"] = {
"nhóm ngôn ngữ Celebes",
1078041,
"poz",
"Nhóm ngôn ngữ Celebes",
"Celebes",
}
m["poz-cln"] = {
"New Caledonian",
3091221,
"poz-occ",
}
m["poz-cma"] = {
"Central Maluku",
3217479,
"poz-cet",
}
m["poz-hce"] = {
"Halmahera-Cenderawasih",
2526616,
"pqe",
}
m["poz-kal"] = {
"nhóm ngôn ngữ Kaili-Pamona",
3217465,
"poz-clb",
"Nhóm ngôn ngữ Kaili-Pamona",
"Kaili-Pamona",
}
m["poz-lgx"] = {
"Lampungic",
49215,
"poz-sus",
}
m["poz-mcm"] = {
"nhóm ngôn ngữ Mã Lai-Chăm",
nil,
"poz-msa",
"Nhóm ngôn ngữ Mã Lai-Chăm",
"Mã Lai-Chăm",
}
m["poz-mic"] = {
"nhóm ngôn ngữ Micronesia",
420591,
"poz-occ",
"Nhóm ngôn ngữ Micronesia",
"Micronesia',"
}
m["poz-mly"] = {
"nhóm ngôn ngữ Mã Lai",
662628,
"poz-mcm",
"Nhóm ngôn ngữ Mã Lai",
"Mã Lai",
}
m["poz-msa"] = {
"nhóm ngôn ngữ Mã Lai-Sumbawa",
1363818,
"poz",
"Nhóm ngôn ngữ Mã Lai-Sumbawa",
"Mã Lai-Sumbawa",
}
m["poz-mun"] = {
"nhóm ngôn ngữ Muna-Buton",
3037924,
"poz-clb",
"Nhóm ngôn ngữ Muna-Buton",
"Muna-Buton",
}
m["poz-nws"] = {
"nhóm ngôn ngữ Tây Bắc Sumatra",
2071308,
"poz",
"Nhóm ngôn ngữ Tây Bắc Sumatra",
"Tây Bắc Sumatra",
}
m["poz-occ"] = {
"nhóm ngôn ngữ Trung-Đông Châu Đại Dương",
2068435,
"poz-oce",
"Nhóm ngôn ngữ Trung-Đông Châu Đại Dương",
"Trung-Đông Châu Đại Dương",
}
m["poz-oce"] = {
"nhóm ngôn ngữ Châu Đại Dương",
324457,
"pqe",
"Nhóm ngôn ngữ Châu Đại Dương",
"Châu Đại Dương",
}
m["poz-ocw"] = {
"nhóm ngôn ngữ Tây Châu Đại Dương",
2701282,
"poz-oce",
"Nhóm ngôn ngữ Tây Châu Đại Dương",
"Tây Châu Đại Dương",
}
m["poz-pcc"] = {
"nhóm ngôn ngữ Trung Thái Bình Dương",
3130237,
"poz-occ",
"Nhóm ngôn ngữ Trung Thái Bình Dương",
"Trung Thái Bình Dương",
}
m["poz-pep"] = {
"Eastern Polynesian",
390979,
"poz-pnp",
}
m["poz-pnp"] = {
"nhóm ngôn ngữ Đa Đảo hạt nhân",
743851,
"poz-pol",
"Nhóm ngôn ngữ Đa Đảo hạt nhân",
"Đa Đảo hạt nhân",
}
m["poz-pol"] = {
"nhóm ngôn ngữ Đa Đảo",
390979,
"poz-pcc",
"Nhóm ngôn ngữ Đa Đảo",
"Đa Đảo",
}
m["poz-san"] = {
"nhóm ngôn ngữ Sabah",
3217517,
"poz-bnn",
"Nhóm ngôn ngữ Sabah",
"Sabah",
}
m["poz-sbj"] = {
"nhóm ngôn ngữ Sama-Bajaw",
2160409,
"poz",
"Nhóm ngôn ngữ Sama-Bajaw",
"Sama-Bajaw",
}
m["poz-slb"] = {
"nhóm ngôn ngữ Saluan-Banggai",
3217519,
"poz-clb",
"Nhóm ngôn ngữ Saluan-Banggai",
"Saluan-Banggai",
}
m["poz-sls"] = {
"nhóm ngôn ngữ Đông Nam Solomon",
3119671,
"poz-occ",
"Nhóm ngôn ngữ Đông Nam Solomon",
"Đông Nam Solomon",
}
m["poz-ssw"] = {
"South Sulawesi",
2778190,
"poz-sus",
}
m["poz-sus"] = {
"Sunda-Sulawesi",
319552,
"poz",
}
m["poz-swa"] = {
"North Sarawakan",
538569,
"poz-bnn",
}
m["poz-tim"] = {
"nhóm ngôn ngữ Timor",
7806987,
"poz-cet",
"Nhóm ngôn ngữ Timor",
"Timor",
}
m["poz-tot"] = {
"Tomini-Tolitoli",
3217541,
"poz-clb",
}
m["poz-vnc"] = {
"North-Central Vanuatu",
3039118,
"poz-occ",
}
m["poz-wot"] = {
"nhóm ngôn ngữ Wotu-Wolio",
1041317,
"poz-clb",
"Nhóm ngôn ngữ Wotu-Wolio",
"Wotu-Wolio",
}
m["pqe"] = {
"nhóm ngôn ngữ Mã Lai-Đa Đảo Đông",
2269883,
"poz-cet",
"Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông",
"Mã Lai-Đa Đảo Đông",
}
m["pra"] = {
"Prakrit",
192170,
"inc",
aliases = {"Prakritic"},
protoLanguage = "inc-pra",
}
m["qfa-adc"] = {
"Central Great Andamanese",
nil,
"qfa-adm",
}
m["qfa-adm"] = {
"Great Andamanese",
3515103,
}
m["qfa-adn"] = {
"Northern Great Andamanese",
nil,
"qfa-adm",
}
m["qfa-ads"] = {
"Southern Great Andamanese",
nil,
"qfa-adm",
}
m["qfa-ain"] = {
"ngữ hệ Ainu",
50111972,
"Ngữ hệ Ainu",
"Ainu",
aliases = {"Ainu"},
}
m["qfa-bej"] = {
"nhóm ngôn ngữ Bối-Cát Triệu",
nil,
"qfa-bet",
"Nhóm ngôn ngữ Bối-Cát Triệu",
"Bối-Cát Triệu"
}
m["qfa-bet"] = {
"nhóm ngôn ngữ Bối-Thái",
nil,
"qfa-tak",
"Nhóm ngôn ngữ Bối-Thái",
"Bối-Thái",
aliases = {"Thái-Bối", "Daic-Beic", "Beic-Daic"},
}
m["qfa-buy"] = {
"nhóm ngôn ngữ Bố Ương",
1109927,
"qfa-kra",
"Nhóm ngôn ngữ Bố Ương",
"Bố Ương",
}
m["qfa-cka"] = {
"ngữ hệ Chukotka-Kamchatka",
33255,
"Ngữ hệ Chukotka-Kamchatka",
"Chukotka-Kamchatka",
}
m["qfa-ckn"] = {
"nhóm ngôn ngữ Chukotka",
2606732,
"qfa-cka",
"Nhóm ngôn ngữ Chukotka",
"Chukotka",
}
m["qfa-cnt"] = {
"contact",
133253514,
"qfa-not",
}
m["qfa-dgn"] = {
"Dogon",
1234776,
"nic",
}
m["qfa-dny"] = {
"Dene-Yeniseian",
21103,
aliases = {"Dené-Yeniseian"},
}
m["qfa-gel"] = {
"Gelao",
56401,
"qfa-kra",
}
m["qfa-hur"] = {
"Hurro-Urartian",
1144159,
}
m["qfa-iso"] = {
"nhóm ngôn ngữ biệt lập",
33648,
"qfa-not",
"Nhóm ngôn ngữ biệt lập",
"biệt lập",
}
m["qfa-kad"] = {
"Kadu", -- considered either Nilo-Saharan or independent/none
1720989,
}
m["qfa-kms"] = {
"nhóm ngôn ngữ Động-Thủy",
1023641,
"qfa-tak",
"Nhóm ngôn ngữ Động-Thủy",
"Động-Thủy",
}
m["qfa-kor"] = {
"ngữ hệ Triều Tiên",
11263525,
"Ngữ hệ Triều Tiên",
"Triều Tiên",
}
m["qfa-kra"] = {
"Kra",
1022087,
"qfa-tak",
}
m["qfa-lic"] = {
"nhóm ngôn ngữ Hlai",
1023648,
"qfa-tak",
"Nhóm ngôn ngữ Hlai",
"Hlai",
aliases = {"Hlaic"},
}
m["qfa-mal"] = {
"Left May",
614468,
"paa-asa",
}
m["qfa-mch"] = { -- used in both N and S America
"Macro-Chibchan",
3438062,
}
m["qfa-mix"] = {
"mixed",
33694,
"qfa-not",
}
m["qfa-not"] = {
"not a family",
nil,
"qfa-not",
}
m["qfa-onb"] = {
"Be",
nil,
"qfa-bet",
aliases = {"Ong-Be", "Beic"},
}
m["qfa-ong"] = {
"ngữ hệ Önge",
2090575,
aliases = {"Angan", "South Andamanese", "Jarawa-Onge"},
}
m["qfa-sub"] = {
"ngôn ngữ cơ tầng",
20730913,
"qfa-not",
}
m["qfa-tak"] = {
"ngữ hệ Kra-Dai",
34171,
"Ngữ hệ Kra-Dai",
"Kra-Dai",
aliases = {"Tai-Kadai", "Kadai"},
}
m["qfa-tap"] = {
"Timor-Alor-Pantar",
16590002,
}
m["qfa-tor"] = {
"Torricelli",
1333831,
}
m["qfa-tyn"] = {
"ngữ hệ Tyrseni",
1344038,
"Ngữ hệ Tyrseni",
"Tyrseni",
}
m["qfa-xgs"] = {
"ngữ hệ Tiên Ti-Mông Cổ",
108887939,
"Ngữ hệ Tiên Ti-Mông Cổ",
"Tiên Ti-Mông Cổ",
}
m["qfa-xgx"] = {
"nhóm ngôn ngữ Liên Mông Cổ",
107619002,
"qfa-xgs",
"Nhóm ngôn ngữ Liên Mông Cổ",
"Liên Mông Cổ",
}
m["qfa-yen"] = {
"Yeniseian",
27639,
"qfa-dny",
aliases = {"Yeniseic", "Yenisei-Ostyak"},
}
m["qfa-yno"] = {
"Northern Yeniseian",
nil,
"qfa-yen",
}
m["qfa-yso"] = {
"Southern Yeniseian",
nil,
"qfa-yen",
}
m["qfa-yuk"] = {
"ngữ hệ Yukaghir",
34164,
"Ngữ hệ Yukaghir",
"Yukaghir",
aliases = {"Yukagir", "Jukagir"},
}
m["qwe"] = {
"ngữ hệ Quechua",
5218,
"Ngữ hệ Quechua",
"Quechua",
}
m["raj"] = {
"nhóm ngôn ngữ Rajasthan",
13196,
"inc-wes",
"Nhóm ngôn ngữ Rajasthan",
"Rajasthan",
protoLanguage = "inc-ogu",
}
m["roa"] = {
"nhóm ngôn ngữ Rôman",
19814,
"itc",
aliases = {"Rôman", "Latinh", "Tân Latinh"},
"Nhóm ngôn ngữ Rôman",
"Rôman",
protoLanguage = "la",
}
m["roa-asl"] = {
"Asturleonese",
35390,
"roa-ibe",
protoLanguage = "roa-ole",
}
m["roa-cas"] = {
"nhóm ngôn ngữ Castilla",
71924,
"roa-ibe",
"Nhóm ngôn ngữ Castilla",
"Castilla",
aliases = {"Castillian", "Castilic", "Castillic"},
protoLanguage = "osp",
}
m["roa-dal"] = {
"Dalmatian Romance",
97646077,
"roa-itd",
}
m["roa-eas"] = {
"Eastern Romance",
147576,
"roa",
}
m["roa-ibe"] = {
"nhóm ngôn ngữ Iberia-Rôman",
749533,
"roa-wes",
"Nhóm ngôn ngữ Iberia-Rôman",
"Iberia-Rôman",
aliases = {"Iberia-Rôman", "Tây Iberia-Rôman"},
}
m["roa-wes"] = {
"nhóm ngôn ngữ Tây Rôman",
2714388,
"roa-iwr",
"Nhóm ngôn ngữ Tây Rôman",
"Tây Rôman",
}
m["roa-iwr"] = {
"nhóm ngôn ngữ Ý-Tây Rôman",
112608,
"roa",
"Nhóm ngôn ngữ Ý-Tây Rôman",
"Ý-Tây Rôman",
aliases = {"Ý-Tây"},
}
m["roa-itd"] = {
"Italo-Dalmatian",
3313381,
"roa",
}
m["roa-git"] = {
"Gallo-Italic",
516074,
"roa",
}
m["roa-oil"] = {
"Oïl",
37351,
"roa",
protoLanguage = "fro",
}
m["roa-ocr"] = {
"Occitano-Romance",
599958,
"roa",
}
m["roa-rhe"] = {
"Rhaeto-Romance",
515593,
"roa",
}
--[=[
Exceptional language and family codes for South American Indian languages
can use the prefix "sai-", though "sai" is no longer itself a family code.
]=]--
m["sai-ara"] = {
"Araucanian",
626630,
}
m["sai-aym"] = {
"Aymaran",
33010,
}
m["sai-bar"] = {
"Barbacoan",
807304,
aliases = {"Barbakoan"},
}
m["sai-bor"] = {
"Boran",
43079266,
}
m["sai-cah"] = {
"Cahuapanan",
1025793,
}
m["sai-car"] = {
"ngữ hệ Carib",
33090,
"Ngữ hệ Carib",
"Carib",
aliases = {"Cariban"},
}
m["sai-cer"] = {
"Cerrado",
98078151,
"sai-jee",
aliases = {"Amazonian Jê"},
}
m["sai-chc"] = {
"Chocoan",
1075616,
aliases = {"Choco", "Chocó"},
}
m["sai-cho"] = {
"Chonan",
33019,
aliases = {"Chon"},
}
m["sai-cje"] = {
"Central Jê",
18010843,
"sai-cer",
aliases = {"Akuwẽ"},
}
m["sai-cpc"] = {
"Chapacuran",
1062626,
}
m["sai-crn"] = {
"Charruan",
3112423,
aliases = {"Charrúan"},
}
m["sai-ctc"] = {
"Catacaoan",
5051139,
}
m["sai-guc"] = {
"Guaicuruan",
1974973,
"sai-mgc",
aliases = {"Guaicurú", "Guaycuruana", "Guaikurú", "Guaycuruano", "Guaykuruan", "Waikurúan"},
}
m["sai-guh"] = {
"Guahiban",
944056,
aliases = {"Guahiboan", "Guajiboan", "Wahivoan"},
}
m["sai-gui"] = {
"Guianan",
nil,
"sai-car",
aliases = {"Guianan Carib", "Guiana Carib"},
}
m["sai-har"] = {
"Harákmbut",
1584402,
"sai-hkt",
aliases = {"Harákmbet"},
}
m["sai-hkt"] = {
"Harákmbut-Katukinan",
17107635,
}
m["sai-hrp"] = {
"ngữ hệ Huarpe",
1578336,
"Ngữ hệ Huarpe",
"Huarpe",
aliases = {"Warpean", "Huarpe", "Warpe"},
}
m["sai-jee"] = {
"Jê",
1483594,
"sai-mje",
aliases = {"Gê", "Jean", "Gean", "Jê-Kaingang", "Ye"},
}
m["sai-jir"] = {
"Jirajaran",
3028651,
aliases = {"Hiraháran"},
}
m["sai-jiv"] = {
"ngữ hệ Jivaro",
1393074,
"Ngữ hệ Jivaro",
"Jivaro",
aliases = {"Hívaro", "Jibaro", "Jibaroana", "Jívaro"},
}
m["sai-ktk"] = {
"Katukinan",
2636000,
"sai-hkt",
aliases = {"Catuquinan"},
}
m["sai-kui"] = {
"Kuikuroan",
nil,
"sai-car",
aliases = {"Kuikuro", "Nahukwa"},
}
m["sai-map"] = {
"Mapoyan",
61096301,
"sai-ven",
aliases = {"Mapoyo", "Mapoyo-Yabarana", "Mapoyo-Yavarana", "Mapoyo-Yawarana"},
}
m["sai-mas"] = {
"Mascoian",
1906952,
aliases = {"Mascoyan", "Maskoian", "Enlhet-Enenlhet"},
}
m["sai-mgc"] = {
"Mataco-Guaicuru",
255512,
}
m["sai-mje"] = {
"Macro-Jê",
887133,
aliases = {"Macro-Gê"},
}
m["sai-mtc"] = {
"Matacoan",
2447424,
"sai-mgc",
}
m["sai-mur"] = {
"Muran",
33826,
aliases = {"Mura"},
}
m["sai-nad"] = {
"Nadahup",
1856439,
aliases = {"Makú", "Macú", "Vaupés-Japurá"},
}
m["sai-nje"] = {
"Northern Jê",
98078225,
"sai-cer",
aliases = {"Core Jê"},
}
m["sai-nmk"] = {
"Nambikwaran",
15548027,
aliases = {"Nambicuaran", "Nambiquaran", "Nambikuaran"},
}
m["sai-otm"] = {
"Otomacoan",
3217503,
aliases = {"Otomákoan", "Otomakoan"},
}
m["sai-pan"] = {
"nhóm ngôn ngữ Pano",
1544537,
"sai-pat",
"Nhóm ngôn ngữ Pano",
"Pano",
aliases = {"Panoan"},
}
m["sai-pat"] = {
"ngữ hệ Pano-Tacana",
2475746,
"Ngữ hệ Pano-Tacana",
"Pano-Tacana",
aliases = {"Pano-Tacana", "Pano-Takana", "Páno-Takána", "Pano-Takánan"},
}
m["sai-pek"] = {
"Pekodian",
107451736,
"sai-car",
aliases = {"South Amazonian Carib", "Southern Cariban", "Pekodi"},
}
m["sai-pem"] = {
"Pemongan",
nil,
"sai-ven",
aliases = {"Pemong", "Pemóng", "Purukoto"},
}
m["sai-prk"] = {
"Parukotoan",
107451482,
"sai-car",
aliases = {"Parukoto"},
}
m["sai-sje"] = {
"Southern Jê",
98078245,
"sai-jee",
}
m["sai-tac"] = {
"Tacanan",
3113762,
"sai-pat",
}
m["sai-tar"] = {
"Taranoan",
105097814,
"sai-gui",
aliases = {"Trio", "Tarano"},
}
m["sai-tuc"] = {
"ngữ hệ Tucanoan",
788144,
"Ngữ hệ Tucanoan",
"Tucanoan",
}
m["sai-tyu"] = {
"Ticuna-Yuri",
4467010,
}
m["sai-ucp"] = {
"Uru-Chipaya",
2475488,
aliases = {"Uru-Chipayan"},
}
m["sai-ven"] = {
"Venezuelan Cariban",
nil,
"sai-car",
aliases = {"Venezuelan Carib", "Venezuelan", "Venezuelano"},
}
m["sai-wic"] = {
"Wichí",
3027047,
}
m["sai-wit"] = {
"Witotoan",
43079317,
aliases = {"Huitotoan", "Uitotoan"},
}
m["sai-ynm"] = {
"Yanomami",
nil,
aliases = {"Yanomam", "Shamatari", "Yamomami", "Yanomaman"},
}
m["sai-yuk"] = {
"Yukpan",
nil,
"sai-car",
aliases = {"Yukpa", "Yukpano", "Yukpa-Japreria"},
}
m["sai-zam"] = {
"Zamucoan",
3048461,
aliases = {"Samúkoan"},
}
m["sai-zap"] = {
"Zaparoan",
33911,
aliases = {"Záparoan", "Saparoan", "Sáparoan", "Záparo", "Zaparoano", "Zaparoana"},
}
m["sal"] = {
"ngữ hệ Salish",
33985,
"Ngữ hệ Salish",
"Salish",
}
m["sdv"] = {
"Eastern Sudanic",
2036148,
"ssa",
}
m["sdv-bri"] = {
"Bari",
nil,
"sdv-nie",
}
m["sdv-daj"] = {
"Daju",
956724,
"sdv",
}
m["sdv-dnu"] = {
"Dinka-Nuer",
nil,
"sdv-niw",
}
m["sdv-eje"] = {
"Eastern Jebel",
3408878,
"sdv",
}
m["sdv-kln"] = {
"Kalenjin",
637228,
"sdv-nis",
}
m["sdv-lma"] = {
"Lotuko-Maa",
nil,
"sdv-nie",
}
m["sdv-lon"] = {
"Northern Luo",
nil,
"sdv-luo",
}
m["sdv-los"] = {
"Southern Luo",
7570103,
"sdv-luo",
}
m["sdv-luo"] = {
"Luo",
nil,
"sdv-niw",
}
m["sdv-nes"] = {
"Northern Eastern Sudanic",
4810496,
"sdv",
aliases = {"Astaboran", "Ek Sudanic"},
}
m["sdv-nie"] = {
"Eastern Nilotic",
153795,
"sdv-nil",
}
m["sdv-nil"] = {
"Nilotic",
513408,
"sdv",
}
m["sdv-nis"] = {
"Southern Nilotic",
1552410,
"sdv-nil",
}
m["sdv-niw"] = {
"Western Nilotic",
3114989,
"sdv-nil",
}
m["sdv-nma"] = {
"Nandi-Markweta",
nil,
"sdv-kln",
}
m["sdv-nyi"] = {
"Nyima",
11688746,
"sdv-nes",
aliases = {"Nyimang"},
}
m["sdv-tmn"] = {
"Taman",
3408873,
"sdv-nes",
aliases = {"Tamaic"},
}
m["sdv-ttu"] = {
"Teso-Turkana",
7705551,
"sdv-nie",
aliases = {"Ateker"},
}
m["sel"] = {
"nhóm ngôn ngữ Selkup",
34008,
"syd",
"Nhóm ngôn ngữ Selkup",
"Selkup",
}
m["sem"] = {
"nhóm ngôn ngữ Semit",
34049,
"afa",
"Nhóm ngôn ngữ Semit",
"Semit",
}
m["sem-ara"] = {
"nhóm ngôn ngữ Aram",
28602,
"sem-nwe",
"Nhóm ngôn ngữ Aram",
"Aram",
protoLanguage = "arc",
}
m["sem-arb"] = {
"nhóm ngôn ngữ Ả Rập",
164667,
"sem-cen",
"Nhóm ngôn ngữ Ả Rập",
"Ả Rập",
protoLanguage = "ar",
}
m["sem-are"] = {
"nhóm ngôn ngữ Aram Đông",
3410322,
"sem-ara",
"Nhóm ngôn ngữ Aram Đông",
"Aram Đông",
}
m["sem-arw"] = {
"nhóm ngôn ngữ Aram Tây",
3394214,
"sem-ara",
"Nhóm ngôn ngữ Aram Tây",
"Aram Tây",
}
m["sem-ase"] = {
"Southeastern Aramaic",
3410322,
"sem-are",
}
m["sem-can"] = {
"nhóm ngôn ngữ Canaan",
747547,
"sem-nwe",
"Nhóm ngôn ngữ Canaan",
"Canaan",
}
m["sem-cen"] = {
"nhóm ngôn ngữ Semit Trung",
3433228,
"sem-wes",
"Nhóm ngôn ngữ Semit Trung",
"Semit Trung",
}
m["sem-cna"] = {
"nhóm ngôn ngữ Tân Aram Trung",
3410322,
"sem-are",
"Nhóm ngôn ngữ Tân Aram Trung",
"Tân Aram Trung",
}
m["sem-eas"] = {
"nhóm ngôn ngữ Semit Đông",
164273,
"sem",
"Nhóm ngôn ngữ Semit Đông",
"Semit Đông",
}
m["sem-eth"] = {
"nhóm ngôn ngữ Semit Ethiopia",
163629,
"sem-wes",
"Nhóm ngôn ngữ Semit Ethiopia",
"Semit Ethiopia",
aliases = {"Afro-Semitic", "Ethiopian", "Ethiopic", "Ethiosemitic"},
}
m["sem-nna"] = {
"Northeastern Neo-Aramaic",
2560578,
"sem-are",
}
m["sem-nwe"] = {
"nhóm ngôn ngữ Semit Tây Bắc",
162996,
"sem-cen",
"Nhóm ngôn ngữ Semit Tây Bắc",
"Semit Tây Bắc",
}
m["sem-osa"] = {
"Old South Arabian",
35025,
"sem-cen",
aliases = {"Epigraphic South Arabian", "Sayhadic"},
}
m["sem-sar"] = {
"nhóm ngôn ngữ Nam Ả Rập hiện đại",
1981908,
"sem-wes",
"Nhóm ngôn ngữ Nam Ả Rập hiện đại",
"Nam Ả Rập hiện đại",
}
m["sem-wes"] = {
"nhóm ngôn ngữ Semit Tây",
124901,
"sem",
"Nhóm ngôn ngữ Semit Tây",
"Semit Tây",
}
m["sgn"] = {
"sign",
34228,
"qfa-not",
}
m["sgn-fsl"] = {
"French Sign Languages",
5501921,
"sgn",
}
m["sgn-gsl"] = {
"German Sign Languages",
5551235,
"sgn",
}
m["sgn-jsl"] = {
"Japanese Sign Languages",
11722508,
"sgn",
}
m["sio"] = {
"Siouan",
34181,
"nai-sca",
}
m["sio-dhe"] = {
"Dhegihan",
3217420,
"sio-msv",
}
m["sio-dkt"] = {
"nhóm ngôn ngữ Dakota",
17188640,
"sio-msv",
"Nhóm ngôn ngữ Dakota",
"Dakota",
}
m["sio-mor"] = {
"Missouri River Siouan",
26807266,
"sio",
}
m["sio-msv"] = {
"Mississippi Valley Siouan",
17188638,
"sio",
}
m["sio-ohv"] = {
"Ohio Valley Siouan",
21070931,
"sio",
}
m["sit"] = {
"ngữ hệ Hán-Tạng",
45961,
"Ngữ hệ Hán-Tạng",
"Hán-Tạng",
}
m["sit-aao"] = {
"Ao",
615474,
"sit",
aliases = {"Central Naga languages"},
}
m["sit-alm"] = {
"Almora",
nil,
"sit-whm",
}
m["sit-bai"] = {
"nhóm ngôn ngữ Bạch",
35103,
"sit-mba",
"Nhóm ngôn ngữ Bạch",
"Bạch",
aliases = {"Bai"},
}
m["sit-bdi"] = {
"nhóm ngôn ngữ Bod",
1814078,
"sit",
"Nhóm ngôn ngữ Bod",
"Bod",
}
m["sit-cln"] = {
"nhóm ngôn ngữ Thái-Long",
107182612,
"sit-mba",
"Nhóm ngôn ngữ Thái-Long",
"Thái-Long",
aliases = {"Cai–Long", "Ta–Li", "Ta-Li"},
}
m["sit-dhi"] = {
"Dhimalish",
1207648,
"sit",
}
m["sit-ebo"] = {
"nhóm ngôn ngữ Bod Đông",
56402,
"sit-bdi",
"Nhóm ngôn ngữ Bod Đông",
"Bod Đông",
}
m["sit-gma"] = {
"nhóm ngôn ngữ Đại Magar",
55612963,
"sit",
"Nhóm ngôn ngữ Đại Magar",
"Đại Magar",
}
m["sit-gsi"] = {
"Greater Siangic",
52698851,
"sit",
}
m["sit-hrs"] = {
"Hrusish",
1632501,
"sit",
aliases = {"Southeast Kamengic"},
}
m["sit-jnp"] = {
"Jingphoic",
nil,
"sit-jpl",
aliases = {"Jingpho"},
}
m["sit-jpl"] = {
"Kachin-Luic",
1515454,
"tbq-bkj",
aliases = {"Jingpho-Luish", "Jingpho-Asakian", "Kachinic"},
}
m["sit-kch"] = {
"Konyak-Chang",
nil,
"sit-kon",
}
m["sit-kha"] = {
"nhóm ngôn ngữ Kham",
33305,
"sit-gma",
"Nhóm ngôn ngữ Kham",
"Kham",
}
m["sit-khb"] = {
"Kho-Bwa",
6401917,
"sit",
aliases = {"Bugunish", "Kamengic"},
}
m["sit-kic"] = {
"Central Kiranti",
nil,
"sit-kir",
}
m["sit-kie"] = {
"Eastern Kiranti",
nil,
"sit-kir",
}
m["sit-kin"] = {
"Kinnauric",
nil,
"sit-whm",
aliases = {"Kinnauri"},
}
m["sit-kir"] = {
"Kiranti",
922148,
"sit",
}
m["sit-kiw"] = {
"Western Kiranti",
922148,
"sit-kir",
}
m["sit-kon"] = {
"Konyak",
774590,
"tbq-bkj",
aliases = {"Konyakian", "Northern Naga"},
}
m["sit-kyk"] = {
"Kyirong-Kagate",
6450957,
"sit-tib",
}
m["sit-lab"] = {
"nhóm ngôn ngữ Ladakh-Balti",
6450957,
"sit-tib",
"Nhóm ngôn ngữ Ladakh-Balti",
"Ladakh-Balti",
}
m["sit-las"] = {
"Lahuli-Spiti",
6473510,
"sit-tib",
}
m["sit-luu"] = {
"Luish",
55621439,
"sit-jpl",
aliases = {"Asakian", "Sak"},
}
m["sit-mar"] = {
"Maringic",
nil,
"sit-tma",
}
m["sit-mba"] = {
"nhóm ngôn ngữ Đại Bạch",
16963847,
"sit-sba",
"Nhóm ngôn ngữ Đại Bạch",
"Đại Bạch",
aliases = {"Macro-Bai", "Greater Bai"},
}
m["sit-mdz"] = {
"Midzu",
6843504,
"sit",
aliases = {"Geman", "Midzuish", "Miju-Meyor", "Southern Mishmi"},
}
m["sit-mnz"] = {
"Mondzish",
6898839,
"tbq-lob",
aliases = {"Mangish"},
}
m["sit-mru"] = {
"Mruic",
16908870,
"sit",
aliases = {"Mru-Hkongso"},
}
m["sit-nas"] = {
"Naish",
25047956,
"sit-nax",
}
m["sit-nax"] = {
"Naic",
6982999,
"tbq-buq",
aliases = {"Naxish"},
}
m["sit-nba"] = {
"nhóm ngôn ngữ Bạch Bắc",
122463830,
"sit-bai",
"Nhóm ngôn ngữ Bạch Bắc",
"Bạch Bắc",
aliases = {"Northern Bai"},
}
m["sit-new"] = {
"Newaric",
55625069,
"sit",
}
m["sit-nng"] = {
"nhóm ngôn ngữ Nung",
1515482,
"sit",
"Nhóm ngôn ngữ Nung",
"Nung",
aliases = {"Nung"},
}
m["sit-qia"] = {
"Qiangic",
1636765,
"tbq-buq",
}
m["sit-rgy"] = {
"Rgyalrongic",
56936,
"sit-qia",
aliases = {"Jiarongic"},
}
m["sit-sba"] = {
"nhóm ngôn ngữ Hán-Bạch",
nil,
"sit",
"Nhóm ngôn ngữ Hán-Bạch",
"Hán-Bạch",
aliases = {"Sino-Bai", "Greater Bai"},
}
m["sit-tam"] = {
"nhóm ngôn ngữ Tamang",
3309439,
"sit",
"Nhóm ngôn ngữ Tamang",
"Tamang",
aliases = {"West Bodish"},
}
m["sit-tan"] = {
"Tani",
3217538,
"sit",
}
m["sit-tib"] = {
"nhóm ngôn ngữ Tạng",
1641150,
"sit-bdi",
"Nhóm ngôn ngữ Tạng",
"Tạng",
protoLanguage = "otb",
}
m["sit-tja"] = {
"nhóm ngôn ngữ Thổ Gia",
nil,
"sit",
"Nhóm ngôn ngữ Thổ Gia",
"Thổ Gia",
}
m["sit-tma"] = {
"Tangkhul-Maring",
nil,
"sit",
}
m["sit-tng"] = {
"nhóm ngôn ngữ Tangkhul",
1516657,
"sit-tma",
"Nhóm ngôn ngữ Tangkhul",
"Tangkhul",
aliases = {"Tangkhul"},
}
m["sit-tno"] = {
"Tangsa-Nocte",
nil,
"sit-kon",
}
m["sit-tsk"] = {
"Tshangla",
nil,
"sit-bdi",
}
m["sit-whm"] = {
"West Himalayish",
2301695,
"sit",
}
m["sit-zem"] = {
"Zeme",
189291,
"sit",
aliases = {"Zeliangrong", "Zemeic"},
}
m["sla"] = {
"nhóm ngôn ngữ gốc Slav",
23526,
"ine-bsl",
"Nhóm ngôn ngữ gốc Slav",
"gốc Slav",
aliases = {"Slavonic"},
}
m["smi"] = {
"nhóm ngôn ngữ Sami",
56463,
"urj",
"Nhóm ngôn ngữ Sami",
"Sami",
aliases = {"Saami", "Samic", "Saamic"},
}
m["son"] = {
"nhóm ngôn ngữ Songhay",
505198,
"ssa",
"Nhóm ngôn ngữ Songhay",
"Songhay",
aliases = {"Songhai"},
}
m["sqj"] = {
"nhóm ngôn ngữ Albani",
8748,
"ine",
"Nhóm ngôn ngữ Albani",
"Albani",
}
m["ssa"] = {
"ngữ hệ Nin-Sahara", -- possibly not a genetic grouping
33705,
"Ngữ hệ Nin-Sahara",
"Nin-Sahara",
}
m["ssa-fur"] = {
"Fur",
2989512,
"ssa",
}
m["ssa-klk"] = {
"Kuliak",
1791476,
"ssa",
aliases = {"Rub"},
}
m["ssa-kom"] = {
"nhóm ngôn ngữ Koman",
1781084,
"ssa",
"Nhóm ngôn ngữ Koman",
"Koman",
}
m["ssa-sah"] = {
"Saharan",
1757661,
"ssa",
}
m["syd"] = {
"nhóm ngôn ngữ Samoyed",
34005,
"urj",
"Nhóm ngôn ngữ Samoyed",
"Samoyed",
aliases = {"Samoyed", "Samodeic"},
}
m["tai"] = {
"nhóm ngôn ngữ Thái",
749720,
"qfa-bet",
"Nhóm ngôn ngữ Thái",
"Thái",
aliases = {"Daic"},
}
m["tai-wen"] = {
"nhóm ngôn ngữ Văn Ma-Thái Tây Nam",
nil,
"tai",
"Nhóm ngôn ngữ Văn Ma-Thái Tây Nam",
"Văn Ma-Thái Tây Nam",
}
m["tai-tay"] = {
"nhóm ngôn ngữ Tày",
nil,
"tai-wen",
"Nhóm ngôn ngữ Tày",
"Tày",
}
m["tai-sap"] = {
"nhóm ngôn ngữ Sa Pa-Thái Tây Nam",
nil,
"tai-wen",
"Nhóm ngôn ngữ Sa Pa-Thái Tây Nam",
"Sa Pa-Thái Tây Nam",
aliases = {"Sapa-Thai"},
}
m["tai-swe"] = {
"nhóm ngôn ngữ Thái Tây Nam",
3447105,
"tai-sap",
"Nhóm ngôn ngữ Thái Tây Nam",
"Thái Tây Nam",
}
m["tai-cho"] = {
"nhóm ngôn ngữ Thái Sùng Tả",
13216,
"tai",
"Nhóm ngôn ngữ Thái Sùng Tả",
"Thái Sùng Tả",
}
m["tai-cen"] = {
"nhóm ngôn ngữ Thái Trung tâm",
5061891,
"tai",
"Nhóm ngôn ngữ Thái Trung tâm",
"Thái Trung tâm",
}
m["tai-nor"] = {
"nhóm ngôn ngữ Thái Bắc",
7059014,
"tai",
"Nhóm ngôn ngữ Thái Bắc",
"Thái Bắc"
}
m["tbq"] = {
"nhóm ngôn ngữ Tạng-Miến",
34064,
"sit",
"Nhóm ngôn ngữ Tạng-Miến",
"Tạng-Miến",
}
m["tbq-anp"] = {
"nhóm ngôn ngữ Angami-Pochuri",
530460,
"sit",
"Nhóm ngôn ngữ Angami-Pochuri",
"Angami-Pochuri",
}
m["tbq-axi"] = {
"Axioid",
nil,
"tbq-sel",
}
m["tbq-bdg"] = {
"Bodo-Garo",
4090000,
"tbq-bkj",
}
m["tbq-bis"] = {
"Bisoid",
48844742,
"tbq-slo",
}
m["tbq-bka"] = {
"Bi-Ka",
12627890,
"tbq-slo",
}
m["tbq-bkj"] = {
"Sal",
889900,
"sit",
-- Brahmaputran appears to be Glottolog's term
aliases = {"Bodo-Konyak-Jinghpaw", "Brahmaputran", "Jingpho-Konyak-Bodo"},
}
m["tbq-brm"] = {
"nhóm ngôn ngữ Miến",
865713,
"tbq-lob",
"Nhóm ngôn ngữ Miến",
"Miến",
}
m["tbq-buq"] = {
"nhóm ngôn ngữ Miến-Khương",
16056278,
"sit",
"Nhóm ngôn ngữ Miến-Khương",
"Miến-Khương",
aliases = {"Đông Miến-Khương"},
}
m["tbq-drp"] = {
"Downriver Phula",
7188378,
"tbq-rph",
}
m["tbq-han"] = {
"nhóm ngôn ngữ Hà Nhì",
17004185,
"tbq-slo",
"Nhóm ngôn ngữ Hà Nhì",
"Hà Nhì",
aliases = {"Hanoid"},
}
m["tbq-hph"] = {
"Highland Phula",
nil,
"tbq-sel",
}
m["tbq-jin"] = {
"Jino",
6202716,
"tbq-slo",
}
m["tbq-kzh"] = {
"Kazhuoish",
48834669,
"tbq-lol",
}
m["tbq-kuk"] = {
"nhóm ngôn ngữ Kuki-Chin",
832413,
"sit",
"Nhóm ngôn ngữ Kuki-Chin",
"Kuki-Chin",
}
m["tbq-lal"] = {
"Lalo",
56548,
"tbq-lso",
}
m["tbq-lho"] = {
"Lahoish",
nil,
"tbq-lol",
}
m["tbq-llo"] = {
"Lipo-Lolopo",
nil,
"tbq-lso",
}
m["tbq-lob"] = {
"nhóm ngôn ngữ Lô Lô–Miến",
1635712,
"tbq-buq",
"Nhóm ngôn ngữ Lô Lô–Miến",
"Lô Lô–Miến",
}
m["tbq-lol"] = {
"nhóm ngôn ngữ Lô Lô",
37035,
"tbq-lob",
"Nhóm ngôn ngữ Lô Lô",
"Lô Lô",
aliases = {"Loloish", "Yi", "Ngwi", "Nisoic"},
}
m["tbq-lso"] = {
"Lisoish",
6559055,
"tbq-lol",
}
m["tbq-lwo"] = {
"Lawoish",
48847673,
"tbq-lol",
}
m["tbq-muj"] = {
"Muji",
11221327,
"tbq-hph",
}
m["tbq-nas"] = {
"Nasoid",
nil,
"tbq-nlo",
}
m["tbq-nis"] = {
"Nisu",
56404,
"tbq-nlo",
}
m["tbq-nlo"] = {
"nhóm ngôn ngữ Lô Lô Bắc",
7058676,
"tbq-nso",
"Nhóm ngôn ngữ Lô Lô Bắc",
"Lô Lô Bắc",
aliases = {"Northern Loloish"},
}
m["tbq-nso"] = {
"Nisoish",
56990,
"tbq-lol",
}
m["tbq-nus"] = {
"Nusoish",
114245231,
"tbq-lol",
}
m["tbq-phw"] = {
"Phowa",
7187959,
"tbq-hph",
}
m["tbq-rph"] = {
"Riverine Phula",
nil,
"tbq-sel",
}
m["tbq-sel"] = {
"nhóm ngôn ngữ Lô Lô Đông Nam",
16111894,
"tbq-nso",
"Nhóm ngôn ngữ Lô Lô Đông Nam",
"Lô Lô Đông Nam",
aliases = {"Southeastern Loloish"},
}
m["tbq-sil"] = {
"Siloid",
60787071,
"tbq-slo",
}
m["tbq-slo"] = {
"nhóm ngôn ngữ Lô Lô Nam",
5649340,
"tbq-lol",
"Nhóm ngôn ngữ Lô Lô Nam",
"Lô Lô Nam",
aliases = {"Southern Loloish"},
}
m["tbq-tal"] = {
"Taloid",
48804018,
"tbq-lso",
}
m["tbq-urp"] = {
"Upriver Phula",
7187058,
"tbq-rph",
}
m["trk"] = {
"ngữ hệ Turk",
34090,
"Ngữ hệ Turk",
"Turk",
}
m["trk-cmn"] = {
"nhóm ngôn ngữ Turk chung",
1126028,
"trk",
"Nhóm ngôn ngữ Turk chung",
"Turk chung",
aliases = {"Turk Shaz"},
}
m["trk-kar"] = {
"nhóm ngôn ngữ Karluk",
703173,
"trk-cmn",
"Nhóm ngôn ngữ Karluk",
"Karluk",
aliases = {"Qarluq", "Duy Ngô Nhĩ-Uzbek", "Đông Nam Turk"},
varieties = {"Đông Turk"},
}
m["trk-kbu"] = {
"nhóm ngôn ngữ Kipchak-Bulgar",
3512539,
"trk-kip",
"Nhóm ngôn ngữ Kipchak-Bulgar",
"Kipchak-Bulgar",
aliases = {"Ural", "Uralo-Caspi"},
}
m["trk-kcu"] = {
"Kipchak-Cuman",
4370412,
"trk-kip",
aliases = {"Ponto-Caspian"},
}
m["trk-kip"] = {
"nhóm ngôn ngữ Kipchak",
1339898,
"trk-cmn",
"Nhóm ngôn ngữ Kipchak",
"Kipchak",
otherNames = {"Tây Turk"},
aliases = {"Kypchak", "Qypchaq", "Tây Bắc Turk", "Tây Turk"},
protoLanguage = "qwm",
}
m["trk-kkp"] = {
"Kyrgyz-Kipchak",
4221189,
"trk-kip",
}
m["trk-kno"] = {
"nhóm ngôn ngữ Kipchak-Nogai",
4326954,
"trk-kip",
"Nhóm ngôn ngữ Kipchak-Nogai",
"Kipchak-Nogai",
aliases = {"Aralo-Caspi"},
}
m["trk-nsb"] = {
"North Siberian Turkic",
4537269,
"trk-sib",
aliases = {"Northern Siberian Turkic"},
}
m["trk-ogr"] = {
"nhóm ngôn ngữ Oghur",
1422731,
"trk",
"Nhóm ngôn ngữ Oghur",
"Oghur",
aliases = {"Lir-Turk", "r-Turk"},
}
m["trk-ogz"] = {
"nhóm ngôn ngữ Oghuz",
494600,
"trk-cmn",
"Nhóm ngôn ngữ Oghuz",
"Oghuz",
aliases = {"nhóm ngôn ngữ Turk Tây Nam"},
}
m["trk-sib"] = {
"Siberian Turkic",
354353,
"trk-cmn",
otherNames = {"Northern Turkic"},
aliases = {"Northeastern Turkic"},
}
m["trk-ssb"] = {
"South Siberian Turkic",
nil,
"trk-sib",
aliases = {"Southern Siberian Turkic"},
}
m["tup"] = {
"ngữ hệ Tupi",
34070,
"Ngữ hệ Tupi",
"Tupi",
aliases = {"Tupi"},
}
m["tup-gua"] = {
"Tupi-Guarani",
148610,
"tup",
aliases = {"Tupí-Guaraní"},
}
m["tuw"] = {
"ngữ hệ Tungus",
34230,
"Ngữ hệ Tungus",
"Tungus",
aliases = {"Mãn-Tungus"},
}
m["tuw-ewe"] = {
"nhóm ngôn ngữ Ewenic",
105889448,
"tuw",
"Nhóm ngôn ngữ Ewenic",
"Ewenic",
aliases = {"Bắc Tungus"},
}
m["tuw-jrc"] = {
"nhóm ngôn ngữ Nữ Chân",
105889432,
"tuw",
"Nhóm ngôn ngữ Nữ Chân",
"Nữ Chân",
aliases = {"Mãn"},
}
m["tuw-nan"] = {
"Nanaic",
105889264,
"tuw",
}
m["tuw-udg"] = {
"nhóm ngôn ngữ Udeghe",
105889266,
"tuw",
"Nhóm ngôn ngữ Udeghe",
"Udeghe",
}
m["urj"] = {
"ngữ hệ Ural",
34113,
"Ngữ hệ Ural",
"Ural",
varieties = {"Finn-Ugria"},
}
m["urj-fin"] = {
"nhóm ngôn ngữ Finn",
33328,
"urj",
"Nhóm ngôn ngữ Finn",
"Finn",
aliases = {"Baltic-Finn", "Balto-Finn", "Fenn"},
}
m["urj-mdv"] = {
"nhóm ngôn ngữ Mordvin",
627313,
"urj",
"Nhóm ngôn ngữ Mordvin",
"Mordvin",
}
m["urj-prm"] = {
"Permic",
161493,
"urj",
}
m["urj-ugr"] = {
"Ugric",
156631,
"urj",
}
m["wak"] = {
"ngữ hệ Wakashan",
60069,
"Ngữ hệ Wakashan",
"Wakashan",
}
m["wen"] = {
"Sorbian",
25442,
"zlw",
aliases = {"Lusatian", "Wendish"},
}
m["xgn"] = {
"ngữ hệ Mông Cổ",
33750,
"qfa-xgs",
"Ngữ hệ Mông Cổ",
"Mông Cổ",
aliases = {"Mông Cổ"},
}
m["xgn-cen"] = {
"nhóm ngôn ngữ Trung Mông Cổ",
28719447,
"xgn",
"Nhóm ngôn ngữ Trung Mông Cổ",
"Trung Mông Cổ",
protoLanguage = "xng-lat",
}
m["xgn-sou"] = {
"nhóm ngôn ngữ Nam Mông Cổ",
nil,
"xgn",
"Nhóm ngôn ngữ Nam Mông Cổ",
"Nam Mông Cổ",
protoLanguage = "xng-ear",
}
m["xgn-shr"] = {
"nhóm ngôn ngữ Shirongol",
107539435,
"xgn-sou",
"Nhóm ngôn ngữ Shirongol",
"Shirongol",
}
m["xme"] = {
"Median",
nil,
"ira-mpr",
protoLanguage = "xme-old",
}
m["xme-ttc"] = {
"Tatic",
nil,
"xme",
}
m["xnd"] = {
"Na-Dene",
26986,
"qfa-dny",
aliases = {"Na-Dené"},
}
m["xsc"] = {
"nhóm ngôn ngữ Scythia",
nil,
"ira-nei",
"Nhóm ngôn ngữ Scythia",
"Scythia",
}
m["xsc-sak"] = {
"Sakan",
nil,
"xsc-skw",
aliases = {"Saka"},
}
m["xsc-sar"] = {
"nhóm ngôn ngữ Sarmatia",
nil,
"xsc",
"Nhóm ngôn ngữ Sarmatia",
"Sarmatia",
}
m["xsc-skw"] = {
"nhóm ngôn ngữ Saka-Wakhi",
nil,
"xsc",
"Nhóm ngôn ngữ Saka-Wakhi",
"Saka-Wakhi",
}
m["yok"] = {
"Yokuts",
34249,
"nai-you",
aliases = {"Yokutsan", "Mariposan", "Mariposa"},
}
m["ypk"] = {
"Yupik",
27970,
"esx-esk",
aliases = {"Yup'ik", "Yuit"},
}
m["yrk"] = {
"Nenets",
36452,
"syd",
}
m["zhx"] = {
"nhóm ngôn ngữ Hán",
33857,
"sit-sba",
"Nhóm ngôn ngữ Hán",
"Hán",
aliases = {"Sinitic", "Chinese"},
protoLanguage = "och",
}
m["zhx-com"] = {
"Mân ven biển",
20667215,
"zhx-min",
aliases = {"Coastal Min"},
}
m["zhx-inm"] = {
"Mân nội địa",
20667237,
"zhx-min",
aliases = {"Inland Min"},
}
m["zhx-man"] = {
"Quan thoại",
nil,
"zhx",
protoLanguage = "cmn-ear",
aliases = {"Mandarinic"},
}
m["zhx-min"] = {
"Mân",
56504,
"zhx",
aliases = {"Min"},
}
m["zhx-nan"] = {
"Mân Nam",
36495,
"zhx-com",
aliases = {"Southern Min"},
}
m["zhx-pin"] = {
"Bình thoại",
2735715,
"zhx",
protoLanguage = "ltc",
aliases = {"Pinghua"},
}
m["zhx-yue"] = {
"Quảng Châu",
7033959,
"zhx",
protoLanguage = "ltc",
aliases = {"Yue"},
}
m["zle"] = {
"nhóm ngôn ngữ Slav Đông",
144713,
"sla",
"Nhóm ngôn ngữ Slav Đông",
"Slav Đông",
}
m["zls"] = {
"nhóm ngôn ngữ Slav Nam",
146665,
"sla",
"Nhóm ngôn ngữ Slav Nam",
"Slav Nam",
}
m["zlw"] = {
"nhóm ngôn ngữ Slav Tây",
145852,
"sla",
"Nhóm ngôn ngữ Slav Tây",
"Slav Tây",
}
m["zlw-lch"] = {
"nhóm ngôn ngữ Lechite",
742782,
"zlw",
"Nhóm ngôn ngữ Lechite",
"Lechite",
aliases = {"Lechitic","Lekhitic"},
}
m["zlw-pom"] = {
"Pomeranian",
nil,
"zlw-lch",
}
m["znd"] = {
"Zande",
8066072,
"nic-ubg",
}
return require("Module:languages").finalizeData(m, "family")
1f8poqn4ojfnz0kboub2vdu3l0xu109
Mô đun:languages/canonical names
828
273923
2572749
2572254
2026-10-22T14:20:53Z
Hiyuune
50834
2572749
Scribunto
text/plain
return {
["Aba"] = "utp",
["Abai Sungai"] = "abf",
["Abenlen Ayta"] = "abp",
["Abipon"] = "axb",
["Abishira"] = "ash",
["Abom"] = "aob",
["Abu"] = "ado",
["Abu' Arapesh"] = "aah",
["Abua"] = "abn",
["Abun"] = "kgr",
["Abung"] = "abl",
["Abureni"] = "mgj",
["Abé"] = "aba",
["Ache"] = "yif",
["Aché"] = "guq",
["Acroá"] = "acs",
["Adabe"] = "adb",
["Adai"] = "xad",
["Adamorobe Sign Language"] = "ads",
["Adang"] = "adn",
["Adangbe"] = "adq",
["Adap"] = "adp",
["Adasen"] = "tiu",
["Adele"] = "ade",
["Adhola"] = "adh",
["Tiếng Adjukru"] = "adj",
["Adithinngithigh"] = "dth",
["Adonara"] = "adr",
["Aduge"] = "adu",
["Aeka"] = "aez",
["Aekyom"] = "awi",
["Aequian"] = "xae",
["Afghan Sign Language"] = "afg",
["Afitti"] = "aft",
["Afra"] = "ulf",
["Afrihili"] = "afh",
["Afro-Seminole Creole"] = "afs",
["Agarabi"] = "agd",
["Agariya"] = "agi",
["Agavotaguerra"] = "avo",
["Aghu"] = "ahh",
["Aghu Tharrnggala"] = "gtu",
["Agi"] = "aif",
["Agob"] = "kit",
["Agoi"] = "ibm",
["Aguano"] = "aga",
["Aguaruna"] = "agr",
["Aguna"] = "aug",
["Agusan Manobo"] = "msm",
["Agutaynen"] = "agn",
["Agwagwune"] = "yay",
["Ahanta"] = "aha",
["Ahirani"] = "ahr",
["Ahwai"] = "nfd",
["Ai-Cham"] = "aih",
["Aighon"] = "aix",
["Aikanã"] = "tba",
["Aiklep"] = "mwg",
["Aimele"] = "ail",
["Ainbai"] = "aic",
["Aiome"] = "aki",
["Airoran"] = "air",
["Aisi"] = "mmq",
["Aiwoo"] = "nfl",
["Aja"] = "aja",
["Ajagua"] = "sai-ajg",
["Ajawa"] = "ajw",
["Ajyíninka Apurucayali"] = "cpc",
["Ak"] = "akq",
["Aka (Central Africa)"] = "axk",
["Aka (Sudan)"] = "soh",
["Aka-Bea"] = "abj",
["Aka-Cari"] = "aci",
["Aka-Kol"] = "aky",
["Aka-Kora"] = "ack",
["Akar-Bale"] = "acl",
["Akatek"] = "knj",
["Ake"] = "aik",
["Akebu"] = "keu",
["Akei"] = "tsr",
["Akeu"] = "aeu",
["Akolet"] = "akt",
["Akoye"] = "miw",
["Akpa"] = "akf",
["Akpes"] = "ibe",
["Akrukay"] = "afi",
["Tiếng Akuku"] = "ayk",
["Akum"] = "aku",
["Akurio"] = "ako",
["Akuwagel"] = "bey",
["Akwa"] = "akw",
["Akyaung Ari"] = "nqy",
["Al-Sayyid Bedouin Sign Language"] = "syy",
["Alabat Island Agta"] = "dul",
["Alacatlatzala Mixtec"] = "mim",
["Alago"] = "ala",
["Alapmunte"] = "apv",
["Alas-Kluet Batak"] = "btz",
["Alazapa"] = "nai-ala",
["Albanian Sign Language"] = "sqk",
["Alege"] = "alf",
["Algerian Sign Language"] = "asp",
["Ali"] = "aiy",
["Alladian"] = "ald",
["Alngith"] = "aid",
["Alo Phola"] = "ypo",
["Alor"] = "aol",
["Aloápam Zapotec"] = "zaq",
["Alu"] = "mte",
["Alugu"] = "aub",
["Tiếng Alune"] = "alp",
["Alungul"] = "aus-alu",
["Aluo"] = "yna",
["Alur"] = "alz",
["Alutiiq"] = "ems",
["Alviri-Vidari"] = "avd",
["Alyawarr"] = "aly",
["Amahai"] = "amq",
["Amanayé"] = "ama",
["Amara"] = "aie",
["Amarakaeri"] = "amr",
["Amarizana"] = "awd-ama",
["Amasi"] = "alv-ama",
["Amatlán Zapotec"] = "zpo",
["Amba"] = "rwm",
["Ambakich"] = "aew",
["Ambala Ayta"] = "abc",
["Ambelau"] = "amv",
["Ambele"] = "ael",
["Amblong"] = "alm",
["Ambo"] = "amb",
["Ambul"] = "apo",
["Amele"] = "aey",
["Amganad Ifugao"] = "ifa",
["Ami"] = "amy",
["Ammonite"] = "sem-amm",
["Amo"] = "amo",
["Amol"] = "alx",
["Amoltepec Mixtec"] = "mbz",
["Amondawa"] = "adw",
["Amorite"] = "sem-amo",
["Ampanang"] = "apg",
["Ampari Dogon"] = "aqd",
["Amri Karbi"] = "ajz",
["Amto"] = "amt",
["Ana Tinga Dogon"] = "dti",
["Anakalangu"] = "akg",
["Anam"] = "pda",
["Anambé"] = "aan",
["Anamgura"] = "imi",
["Anasi"] = "bpo",
["Ancient Ligurian"] = "xlg",
["Ancient North Arabian"] = "xna",
["Ancient Zapotec"] = "xzp",
["Andai"] = "afd",
["Andajin"] = "ajn",
["Andaman Creole Hindi"] = "hca",
["Andaqui"] = "ana",
["Andarum"] = "aod",
["Andegerebinha"] = "adg",
["Andh"] = "anr",
["Andio"] = "bzb",
["Andjingith"] = "aus-and",
["Andoa"] = "anb",
["Andoque"] = "ano",
["Andoquero"] = "sai-and",
["Andra-Hus"] = "anx",
["Aneityum"] = "aty",
["Anem"] = "anz",
["Aneme Wake"] = "aby",
["Anfillo"] = "myo",
["Tiếng Angaataha"] = "agm",
["Angaité"] = "aqt",
["Angal"] = "age",
["Angal Enen"] = "aoe",
["Angal Heneng"] = "akh",
["Angevin"] = "roa-ang",
["Angkamuthi"] = "avm",
["Angkola Batak"] = "akb",
["Angloromani"] = "rme",
["Angor"] = "agg",
["Angoram"] = "aog",
["Angosturas Tunebo"] = "tnd",
["Anguthimri"] = "awg",
["Ani Phowa"] = "ypn",
["Animere"] = "anf",
["Anindilyakwa"] = "aoi",
["Anjam"] = "boj",
["Anmatyerre"] = "amx",
["Anong"] = "nun",
["Anor"] = "anj",
["Anserma"] = "ans",
["Ansus"] = "and",
["Antakarinya"] = "ant",
["Antigua and Barbuda Creole English"] = "aig",
["Anu"] = "anl",
["Anufo"] = "cko",
["Anus"] = "auq",
["Anuta"] = "aud",
["Anyin Morofo"] = "mtb",
["Aoheng"] = "pni",
["Aore"] = "aor",
["Ap Ma"] = "kbx",
["Apalachee"] = "xap",
["Apali"] = "ena",
["Apasco-Apoala Mixtec"] = "mip",
["Apiaká"] = "api",
["Apma"] = "app",
["Apolista"] = "awd-apo",
["Aproumu Aizi"] = "ahp",
["Apurinã"] = "apu",
["Arabana"] = "ard",
["Arabela"] = "arl",
["Aralle-Tabulahan"] = "atq",
["Arammba"] = "stk",
["Aranama-Tamique"] = "xrt",
["Arandai"] = "jbj",
["Araona"] = "aro",
["Arapaso"] = "arj",
["Arara-Karo"] = "arr",
["Ararandewára"] = "xaj",
["Arawum"] = "awm",
["Arbore"] = "arv",
["Are"] = "mwc",
["Areba"] = "aea",
["Argentine Sign Language"] = "aed",
["Arguni"] = "agf",
["Arhâ"] = "aqr",
["Arhö"] = "aok",
["Aribwatsa"] = "laz",
["Aribwaung"] = "ylu",
["Arifama-Miniafia"] = "aai",
["Arigidi"] = "aqg",
["Arikapú"] = "ark",
["Arikara"] = "ari",
["Arikem"] = "ait",
["Tiếng Aringa"] = "luc",
["Armazic"] = "xrm",
["Armenian Sign Language"] = "aen",
["Arop-Lokep"] = "apr",
["Arop-Sissano"] = "aps",
["Arosi"] = "aia",
["Arritinngithigh"] = "rrt",
["Arta"] = "atz",
["Arua"] = "aru",
["Aruamu"] = "msy",
["Aruek"] = "aur",
["Aruop"] = "lsr",
["Arutani"] = "atx",
["Aruá"] = "arx",
["As"] = "asz",
["Asaro'o"] = "mtv",
["Ashe"] = "ahs",
["Asháninka"] = "cni",
["Ashéninka Perené"] = "prq",
["Asilulu"] = "asl",
["Asoa"] = "asv",
["Assangori"] = "sjg",
["Asu"] = "aum",
["Asue Awyu"] = "psa",
["Asunción Mixtepec Zapotec"] = "zoo",
["Ata"] = "atm",
["Ata Manobo"] = "atd",
["Atakapa"] = "aqp",
["Atampaya"] = "amz",
["Atanques"] = "cba-ata",
["Atatláhuca Mixtec"] = "mib",
["Ateso"] = "teo",
["Ati"] = "atk",
["Atohwaim"] = "aqm",
["Atong (Cameroon)"] = "ato",
["Atorada"] = "aox",
["Atsam"] = "cch",
["Atsugewi"] = "atw",
["Attié"] = "ati",
["Au"] = "avt",
["Aulua"] = "aul",
["Aurá"] = "aux",
["Aushi"] = "auh",
["Aushiri"] = "avs",
["Auslan"] = "asf",
["Austral"] = "aut",
["Australian Aboriginal Sign Language"] = "asw",
["Austrian Sign Language"] = "asq",
["Austronesian Mari"] = "hob",
["Auwe"] = "smf",
["Auyana"] = "auy",
["Auye"] = "auu",
["Auyokawa"] = "auo",
["Avau"] = "avb",
["Avava"] = "tmb",
["Avikam"] = "avi",
["Avá-Canoeiro"] = "avv",
["Awa (New Guinea)"] = "awb",
["Awa-Cuaiquer"] = "kwi",
["Awabakal"] = "awk",
["Awak"] = "awo",
["Awar"] = "aya",
["Awara"] = "awx",
["Awbono"] = "awh",
["Awera"] = "awr",
["Awetí"] = "awe",
["Awngthim"] = "gwm",
["Awtuw"] = "kmn",
["Awun"] = "aww",
["Awutu"] = "afu",
["Awyi"] = "auw",
["Axamb"] = "ahb",
["Ayabadhu"] = "ayd",
["Ayautla Mazatec"] = "vmy",
["Ayerrerenge"] = "axe",
["Ayi"] = "ayq",
["Ayizi"] = "yyz",
["Ayizo"] = "ayb",
["Ayomán"] = "sai-ayo",
["Ayoquesco Zapotec"] = "zaf",
["Ayoreo"] = "ayo",
["Tiếng Ayu"] = "ayu",
["Ayutla Mixtec"] = "miy",
["Azha"] = "aza",
["Azhe"] = "yiz",
["Baa"] = "kwb",
["Baan"] = "bvj",
["Baangi"] = "bqx",
["Baba"] = "bbw",
["Babango"] = "bbm",
["Babanki"] = "bbk",
["Babine-Witsuwit'en"] = "bcr",
["Babole"] = "bvx",
["Bada"] = "bhz",
["Badeshi"] = "bdz",
["Badimaya"] = "bia",
["Badyara"] = "pbp",
["Baeggu"] = "bvd",
["Baelelea"] = "bvc",
["Baenan"] = "sai-bae",
["Baetora"] = "btr",
["Bafanji"] = "bfj",
["Bafaw"] = "bwt",
["Bafia"] = "ksf",
["Bafut"] = "bfd",
["Baga Kaloum"] = "bqf",
["Baga Koga"] = "bgo",
["Baga Manduri"] = "bmd",
["Baga Pokur"] = "bcg",
["Baga Sitemu"] = "bsp",
["Baga Sobané"] = "bsv",
["Bagheli"] = "bfy",
["Tiếng Bagirmi"] = "bmi",
["Bago-Kusuntu"] = "bqg",
["Bagri"] = "bgq",
["Bagupi"] = "bpi",
["Bagusa"] = "bqb",
["Baha"] = "yha",
["Baham"] = "bdw",
["Bahamian Creole"] = "bah",
["Baharna Arabic"] = "abv",
["Bahau"] = "bhv",
["Bahinemo"] = "bjh",
["Bahonsuai"] = "bsu",
["Bai"] = "bdj",
["Baibai"] = "bbf",
["Baikeno"] = "bkx",
["Baima"] = "bqh",
["Baimak"] = "bmx",
["Bainouk-Gunyaamolo"] = "bcz",
["Bainouk-Samik"] = "bcb",
["Baissa Fali"] = "fah",
["Bajan"] = "bjs",
["Bajelani"] = "bjm",
["Baka"] = "bkc",
["Bakairí"] = "bkq",
["Bakoko"] = "bkh",
["Bakole"] = "kme",
["Bakpinka"] = "bbs",
["Bakulung"] = "bbu",
["Tiếng Bakumpai"] = "bkr",
["Bakwé"] = "bjw",
["Tiếng Balaesang"] = "bls",
["Balangao"] = "blw",
["Balangingi"] = "sse",
["Balau"] = "blg",
["Baldemu"] = "bdn",
["Bali"] = "bcp",
["Baliledo"] = "poz-bal",
["Balinese Malay"] = "mhp",
["Balo"] = "bqo",
["Baloi"] = "biz",
["Balong"] = "bnt-bal",
["Baluan-Pam"] = "blq",
["Bamako Sign Language"] = "bog",
["Bamali"] = "bbq",
["Bambalang"] = "bmo",
["Bambam"] = "ptu",
["Bambili-Bambui"] = "baw",
["Bamenyam"] = "bce",
["Bamu"] = "bcf",
["Bamukumbit"] = "bqt",
["Bamunka"] = "bvm",
["Bamwe"] = "bmg",
["Ban Khor Sign Language"] = "bfk",
["Banam Bay"] = "vrt",
["Banao Itneg"] = "bjx",
["Banaro"] = "byz",
["Banda"] = "bnd",
["Banda Malay"] = "bpq",
["Banda-Bambari"] = "liy",
["Banda-Banda"] = "bpd",
["Banda-Mbrès"] = "bqk",
["Banda-Ndélé"] = "bfl",
["Banda-Yangere"] = "yaj",
["Bandi"] = "bza",
["Bandial"] = "bqj",
["Bangala"] = "bxg",
["Bangandu"] = "bgf",
["Bangba"] = "bbe",
["Bangime"] = "dba",
["Bangka"] = "mfb",
["Bangru"] = "sit-ban",
["Bangubangu"] = "bnx",
["Bangwinji"] = "bsj",
["Baniva"] = "bvv",
["Baniwa"] = "bwi",
["Banka"] = "bxw",
["Bankan Tey Dogon"] = "dbw",
["Banoni"] = "bcm",
["Bantik"] = "bnq",
["Baraamu"] = "brd",
["Baram Kayan"] = "kys",
["Barama"] = "bbg",
["Barambu"] = "brm",
["Baramu"] = "bmz",
["Barapasi"] = "brp",
["Baras"] = "brs",
["Barasana"] = "bsn",
["Barbareño"] = "boi",
["Barclayville Grebo"] = "gry",
["Bardi"] = "bcj",
["Barein"] = "bva",
["Bargam"] = "mlp",
["Bariai"] = "bch",
["Bariji"] = "bjc",
["Barikanchi"] = "bxo",
["Barngarla"] = "bjb",
["Barok"] = "bjk",
["Barranbinya"] = "aus-bra",
["Barro Negro Tunebo"] = "tbn",
["Barrow Point"] = "bpt",
["Baruga"] = "bjz",
["Barunggam"] = "aus-brm",
["Baruya"] = "byr",
["Barwe"] = "bwg",
["Barí"] = "mot",
["Basa"] = "bzw",
["Basa-Gumna"] = "bsl",
["Basa-Gurmana"] = "buj",
["Basap"] = "bdb",
["Bashkardi"] = "bsg",
["Bassa-Kontagora"] = "bsr",
["Bassossi"] = "bsi",
["Bata"] = "bta",
["Bataan Ayta"] = "ayt",
["Batanga"] = "bnm",
["Bateri"] = "btv",
["Bathari"] = "bhm",
["Bati (Cameroon)"] = "btc",
["Bati (Indonesia)"] = "bvt",
["Batu"] = "btu",
["Batui"] = "zbt",
["Bau"] = "bbd",
["Bauchi"] = "bsf",
["Baure"] = "brg",
["Bauria"] = "bge",
["Bauro"] = "bxa",
["Bauwaki"] = "bwk",
["Bauzi"] = "bvz",
["Bawm Chin"] = "bgr",
["Bay Miwok"] = "mkq",
["Bayali"] = "bjy",
["Baybayanon"] = "bvy",
["Baygo"] = "byg",
["Bayogoula"] = "nai-bay",
["Bayono"] = "byl",
["Bayot"] = "bda",
["Bayungu"] = "bxj",
["Bazigar"] = "bfr",
["Baïnounk Gubëeher"] = "alv-bgu",
["Beami"] = "beo",
["Beba"] = "bfp",
["Bebe"] = "bzv",
["Bebele"] = "beb",
["Bebeli"] = "bek",
["Bebil"] = "bxp",
["Bedik"] = "tnr",
["Bedoanas"] = "bed",
["Beeke"] = "bkf",
["Beele"] = "bxq",
["Beembe"] = "beq",
["Beezen"] = "bnz",
["Befang"] = "bby",
["Begbere-Ejar"] = "bqv",
["Bekati'"] = "bei",
["Bekwarra"] = "bkv",
["Bekwel"] = "bkw",
["Belait"] = "beg",
["Belanda Bor"] = "bxb",
["Belanda Viri"] = "bvi",
["Belizean Creole"] = "bzj",
["Tiếng Bembe"] = "bmb",
["Ben Tey"] = "dbt",
["Bena"] = "yun",
["Benabena"] = "bef",
["Bende"] = "bdp",
["Bendi"] = "bct",
["Beneraf"] = "bnv",
["Beng"] = "nhb",
["Benga"] = "bng",
["Benggoi"] = "bgy",
["Bengkala Sign Language"] = "bqy",
["Bentong"] = "bnu",
["Benyadu'"] = "byd",
["Beothuk"] = "bue",
["Bepour"] = "bie",
["Bera"] = "brf",
["Berakou"] = "bxv",
["Berau Malay"] = "bve",
["Berawan"] = "lod",
["Bergish"] = "gmw-bgh",
["Berinomo"] = "bit",
["Berom"] = "bom",
["Berta"] = "wti",
["Berti"] = "byt",
["Besme"] = "bes",
["Besoa"] = "bep",
["Betaf"] = "bfe",
["Bete"] = "byf",
["Bete-Bendi"] = "btt",
["Betoi"] = "sai-bet",
["Bhalay"] = "bhx",
["Bharia"] = "bha",
["Bhaya"] = "bhe",
["Bhele"] = "bhy",
["Bhilali"] = "bhi",
["Bhoti Kinnauri"] = "nes",
["Biafada"] = "bif",
["Biage"] = "bdf",
["Biak"] = "bhw",
["Biali"] = "beh",
["Bian Marind"] = "bpv",
["Biangai"] = "big",
["Biao"] = "byk",
["Biao Mon"] = "bmt",
["Biao-Jiao Mien"] = "bje",
["Bibaali"] = "bcn",
["Bibbulman"] = "xbp",
["Bidiyo"] = "bid",
["Bidyara"] = "bym",
["Bidyogo"] = "bjg",
["Biem"] = "bmc",
["Bierebo"] = "bnk",
["Bieria"] = "brj",
["Biete"] = "biu",
["Big Nambas"] = "nmb",
["Biga"] = "bhc",
["Bigambal"] = "xbe",
["Bikaru"] = "bic",
["Bikya"] = "byb",
["Bila"] = "bip",
["Bilakura"] = "bql",
["Bilba"] = "bpz",
["Bilbil"] = "brz",
["Bile"] = "bil",
["Biliau"] = "bcu",
["Biloxi"] = "bll",
["Bilur"] = "bxf",
["Bimin"] = "bhl",
["Bimoba"] = "bim",
["Bina"] = "bmn",
["Binahari"] = "bxz",
["Binandere"] = "bhg",
["Binawa"] = "byj",
["Bindal"] = "xbd",
["Bine"] = "bon",
["Binji"] = "bpj",
["Binongan Itneg"] = "itb",
["Bintauna"] = "bne",
["Bintulu"] = "bny",
["Binumarien"] = "bjr",
["Bipi"] = "biq",
["Birgid"] = "brk",
["Biri"] = "bzr",
["Biritai"] = "bqq",
["Birri"] = "bvq",
["Birrpayi"] = "xbj",
["Birwa"] = "brl",
["Biseni"] = "ije",
["Bishuo"] = "bwh",
["Bisis"] = "bnw",
["Bisorio"] = "bir",
["Bitare"] = "brt",
["Bitur"] = "mcc",
["Biwat"] = "bwm",
["Biyo"] = "byo",
["Biyom"] = "bpm",
["Blablanga"] = "blp",
["Black Speech"] = "art-bsp",
["Blafe"] = "bfh",
["Bo"] = "bgl",
["Bo-Rukul"] = "mae",
["Bo-Ung"] = "mux",
["Boano (Maluku)"] = "bzn",
["Boano (Sulawesi)"] = "bzl",
["Bobongko"] = "bgb",
["Bobot"] = "bty",
["Bodo (Central Africa)"] = "boy",
["Bofi"] = "bff",
["Boga"] = "bvw",
["Bogaya"] = "boq",
["Boguru"] = "bqu",
["Boikin"] = "bzf",
["Bokha"] = "ybk",
["Bokoto"] = "bdt",
["Bokyi"] = "bky",
["Bolak"] = "art-blk",
["Bolango"] = "bld",
["Bole"] = "bol",
["Bolgo"] = "bvo",
["Bolia"] = "bli",
["Tiếng Bolinao"] = "smk",
["Bolivian Sign Language"] = "bvl",
["Bolon"] = "bof",
["Bolondo"] = "bzm",
["Bolongan"] = "blj",
["Bom"] = "bmf",
["Boma Nkuu"] = "bnt-bon",
["Boma Yumu"] = "bnt-boy",
["Bomboli"] = "bml",
["Bomboma"] = "bws",
["Bomitaba"] = "zmx",
["Bomwali"] = "bmw",
["Bon Gula"] = "glc",
["Bondei"] = "bou",
["Tiếng Kulango Bondoukou"] = "kzc",
["Bondum Dom Dogon"] = "dbu",
["Bonerate"] = "bna",
["Bonggi"] = "bdg",
["Bonggo"] = "bpg",
["Bongili"] = "bui",
["Tiếng Bongo"] = "bot",
["Bongu"] = "bpu",
["Bonjo"] = "bok",
["Bonkeng"] = "bvg",
["Bonkiman"] = "bop",
["Bookan"] = "bnb",
["Boor"] = "bvf",
["Bora"] = "boa",
["Border Kuna"] = "kvn",
["Borei"] = "gai",
["Boro"] = "xxb",
["Borong"] = "ksr",
["Boruca"] = "brn",
["Boselewa"] = "bwf",
["Bosngun"] = "bqs",
["Bote-Majhi"] = "bmj",
["Tiếng Kulango Bouna"] = "nku",
["Bourbonnais-Berrichon"] = "roa-bbn",
["Bozaba"] = "bzo",
["Bragat"] = "aof",
["Brazilian Sign Language"] = "bzs",
["Brek Karen"] = "kvl",
["Tiếng Brem"] = "buq",
["Bribri"] = "bzd",
["British Sign Language"] = "bfi",
["Brokskat"] = "bkk",
["Broome Pearling Lugger Pidgin"] = "bpl",
["Brunei Bisaya"] = "bsb",
["Bruny Island"] = "xpz",
["Bu"] = "jid",
["Bu-Nao Bunu"] = "bwx",
["Bua"] = "bub",
["Bualkhaw Chin"] = "cbl",
["Buamu"] = "box",
["Bubi"] = "buw",
["Bubia"] = "bbx",
["Budibud"] = "btp",
["Budong-Budong"] = "bdx",
["Budu"] = "buu",
["Buduma"] = "bdm",
["Budza"] = "bja",
["Buena Vista Yokuts"] = "nai-bvy",
["Buglere"] = "sab",
["Bugun"] = "bgg",
["Buhutu"] = "bxh",
["Bujhyal"] = "byh",
["Bukar-Sadung Bidayuh"] = "sdo",
["Bukat"] = "bvk",
["Bukawa"] = "buk",
["Bukit Malay"] = "bvu",
["Bukitan"] = "bkn",
["Buksa"] = "tkb",
["Bukusu"] = "bxk",
["Bulgarian Sign Language"] = "bqn",
["Bulgebi"] = "bmp",
["Buli (Ghana)"] = "bwu",
["Buli (Indonesia)"] = "bzq",
["Bulu (Cameroon)"] = "bum",
["Bulu (New Guinea)"] = "bjl",
["Bum"] = "bmv",
["Bumaji"] = "byp",
["Bumbita Arapesh"] = "aon",
["Bun"] = "buv",
["Buna"] = "bvn",
["Bunaba"] = "bck",
["Bunak"] = "bfn",
["Tiếng Bunama"] = "bdd",
["Bundeli"] = "bns",
["Bung"] = "bqd",
["Bungain"] = "but",
["Bunganditj"] = "xbg",
["Bungu"] = "wun",
["Bunoge"] = "dgb",
["Buol"] = "blf",
["Bura"] = "bwr",
["Burak"] = "bys",
["Buraka"] = "bkg",
["Burarra"] = "bvr",
["Burate"] = "bti",
["Burduna"] = "bxn",
["Bure"] = "bvh",
["Burgundian"] = "gem-bur",
["Burmeso"] = "bzu",
["Buru (Indonesia)"] = "mhs",
["Buru (Nigeria)"] = "bqw",
["Burui"] = "bry",
["Burumakok"] = "aip",
["Burun"] = "bdi",
["Burusu"] = "bqr",
["Buruwai"] = "asi",
["Busam"] = "bxs",
["Busami"] = "bsm",
["Busang Kayan"] = "bfg",
["Bushoong"] = "buf",
["Buso"] = "bso",
["Busoa"] = "bup",
["Busuu"] = "bju",
["Butbut Kalinga"] = "kyb",
["Butchulla"] = "xby",
["Butmas-Tur"] = "bnr",
["Buwal"] = "bhs",
["Buyeo"] = "xpy",
["Buyu"] = "byi",
["Buyuan Jino"] = "jiy",
["Bwa"] = "bww",
["Bwaidoka"] = "bwd",
["Bwala"] = "bnt-bwa",
["Bwanabwana"] = "tte",
["Bwatoo"] = "bwa",
["Bwela"] = "bwl",
["Bwile"] = "bwc",
["Bwisi"] = "bwz",
["Byangsi"] = "bee",
["Byep"] = "mkk",
["Bädi Kanum"] = "khd",
["Caac"] = "msq",
["Cabiyarí"] = "cbb",
["Cabécar"] = "cjp",
["Cacaloxtepec Mixtec"] = "miu",
["Cacaopera"] = "ccr",
["Cacua"] = "cbv",
["Cacán"] = "sai-cac",
["Caddo"] = "cad",
["Cafundó"] = "ccd",
["Cahuarano"] = "cah",
["Caka"] = "ckx",
["Cakchiquel-Quiché Mixed Language"] = "ckz",
["Cakfem-Mushere"] = "cky",
["Calabrian Greek"] = "grk-cal",
["Callawalla"] = "caw",
["Calusa"] = "nai-cal",
["Caluyanun"] = "clu",
["Caló"] = "rmq",
["Camarines Norte Agta"] = "abd",
["Cameroon Mambila"] = "mcu",
["Cameroon Pidgin"] = "wes",
["Campalagian"] = "cml",
["Camsá"] = "kbh",
["Camtho"] = "cmt",
["Candoshi-Shapra"] = "cbu",
["Canichana"] = "caz",
["Cao Miao"] = "cov",
["Capiznon"] = "cps",
["Caquinte"] = "cot",
["Cara"] = "cfd",
["Carabayo"] = "cby",
["Caramanta"] = "crf",
["Caranqui"] = "sai-caq",
["Carapana"] = "cbc",
["Carian"] = "xcr",
["Cariay"] = "awd-kar",
["Carijona"] = "cbd",
["Carolina Algonquian"] = "crr",
["Carolinian"] = "cal",
["Carpathian Romani"] = "rmc",
["Cashibo-Cacataibo"] = "cbr",
["Cashinahua"] = "cbs",
["Casiguran Dumagat Agta"] = "dgc",
["Casuarina Coast Asmat"] = "asc",
["Catacao"] = "sai-cat",
["Catalan Sign Language"] = "csc",
["Catuquinaru"] = "sai-ctq",
["Catío Chibcha"] = "cba-cat",
["Cauca"] = "cca",
["Cavere"] = "awd-cav",
["Cavineña"] = "cav",
["Cayubaba"] = "cyb",
["Cayuse"] = "xcy",
["Cazcan"] = "azc-caz",
["Cañari"] = "sai-cnr",
["Cebaara Senoufo"] = "sef",
["Cemuhî"] = "cam",
["Cen"] = "cen",
["Central Asmat"] = "cns",
["Central Awyu"] = "awu",
["Tiếng Bontoc Trung"] = "lbk",
["Central Cagayan Agta"] = "agt",
["Central Grebo"] = "grv",
["Central Huishui Hmong"] = "hmc",
["Central Maewo"] = "mwo",
["Central Mahuatlán Zapoteco"] = "zam",
["Central Malay"] = "pse",
["Central Masela"] = "mxz",
["Central Mashan Hmong"] = "hmm",
["Central Melanau"] = "mel",
["Central Ojibwa"] = "ojc",
["Central Palawano"] = "plc",
["Central Pame"] = "pbs",
["Central Pomo"] = "poo",
["Central Sierra Miwok"] = "csm",
["Central Subanen"] = "syb",
["Central Tagbanwa"] = "tgt",
["Central Tarahumara"] = "tar",
["Central Teke"] = "nzu",
["Central Tunebo"] = "tuf",
["Centúúm"] = "cet",
["Cerma"] = "cme",
["Ch'olti'"] = "myn-chl",
["Chaap Wuurong"] = "tjw",
["Chadian Sign Language"] = "cds",
["Chaha"] = "sem-cha",
["Chairel"] = "sit-cha",
["Chakali"] = "cli",
["Chala"] = "cll",
["Chali"] = "tgf",
["Chamacoco"] = "ceg",
["Chamba Daka"] = "ccg",
["Chamba Leko"] = "ndi",
["Chambri"] = "can",
["Champenois"] = "roa-cha",
["Chang"] = "nbc",
["Changriwa"] = "cga",
["Chaná"] = "sai-chn",
["Chané"] = "caj",
["Chapacura"] = "sai-chp",
["Chara"] = "cra",
["Charrua"] = "sai-chr",
["Chaudangsi"] = "cdn",
["Chayahuita"] = "cbt",
["Chazumba Mixtec"] = "xtb",
["Che"] = "ruk",
["Cheke Holo"] = "mrn",
["Chemakum"] = "xch",
["Chenapian"] = "cjn",
["Chepya"] = "ycp",
["Cherepon"] = "cpn",
["Chesu"] = "ych",
["Chetco-Tolowa"] = "ctc",
["Chhintange"] = "ctn",
["Chhulung"] = "cur",
["Chiangmai Sign Language"] = "csd",
["Chiapanec"] = "cip",
["Chichicapan Zapotec"] = "zpv",
["Chichimeca-Jonaz"] = "pei",
["Chichonyi-Chidzihana-Chikauma"] = "coh",
["Chicomuceltec"] = "cob",
["Chiduruma"] = "dug",
["Chigmecatitlán Mixtec"] = "mii",
["Chilean Sign Language"] = "csg",
["Chilisso"] = "clh",
["Chiltepec Chinantec"] = "csa",
["Chimalapa Zoque"] = "zoh",
["Chimariko"] = "cid",
["Chimila"] = "cbg",
["Chimwiini"] = "bnt-cmw",
["Chinbon Chin"] = "cnb",
["Chinese Pidgin English"] = "cpi",
["Chinese Sign Language"] = "csl",
["Chipaya"] = "cap",
["Chiquihuitlán Mazatec"] = "maq",
["Chiquimulilla"] = "nai-chi",
["Chiquitano"] = "cax",
["Chirino"] = "sai-chi",
["Chiripá"] = "nhd",
["Chitimacha"] = "ctm",
["Chitkuli Kinnauri"] = "cik",
["Chitwania Tharu"] = "the",
["Tiếng Zapotec Choapan"] = "zpc",
["Chochotec"] = "coz",
["Chokri Naga"] = "nri",
["Chokwe"] = "cjk",
["Cholón"] = "cht",
["Chono"] = "sai-cno",
["Chopi"] = "cce",
["Chuabo"] = "chw",
["Chuanqiandian Cluster Miao"] = "cqd",
["Chuave"] = "cjv",
["Chug"] = "cvg",
["Chuj"] = "cac",
["Chuka"] = "cuh",
["Chukwa"] = "cuw",
["Chumburung"] = "ncu",
["Churuya"] = "sai-chu",
["Chácobo"] = "cao",
["Ci Gbe"] = "cib",
["Cibak"] = "ckl",
["Cicipu"] = "awc",
["Ciguayo"] = "nai-cig",
["Cinamiguin Manobo"] = "mkx",
["Cinda-Regi-Tiyal"] = "cdr",
["Cineni"] = "cie",
["Cinta Larga"] = "cin",
["Cishingini"] = "asg",
["Citak"] = "txt",
["Ciwogai"] = "tgd",
["Tiếng Gael cổ điển"] = "ghc",
["Classical Guaraní"] = "gn-cls",
["Tiếng Manda cổ điển"] = "myz",
["Classical Newar"] = "nwc",
["Classical Quechua"] = "qwc",
["Coahuilteco"] = "xcw",
["Coast Miwok"] = "csi",
["Coastal Konjo"] = "kjc",
["Coatecas Altas Zapotec"] = "zca",
["Coatepec Nahuatl"] = "naz",
["Coatlán Mixe"] = "mco",
["Coatlán Zapotec"] = "zps",
["Coatzospan Mixtec"] = "miz",
["Cocopa"] = "coc",
["Cocos Islands Malay"] = "coa",
["Coeruna"] = "sai-coe",
["Cogui"] = "kog",
["Col"] = "liw",
["Colombian Sign Language"] = "csn",
["Colonia Tovar German"] = "gct",
["Columbia-Wenatchi"] = "col",
["Colán"] = "sai-col",
["Comaltepec Chinantec"] = "cco",
["Comechingon"] = "sai-cmg",
["Comecrudo"] = "xcm",
["Communicationssprache"] = "art-com",
["Como Karim"] = "cfg",
["Con"] = "cno",
["Coos"] = "csz",
["Copainalá Zoque"] = "zoc",
["Copallén"] = "sai-cop",
["Coquille"] = "coq",
["Cora"] = "crn",
["Cori"] = "cry",
["Coroado Puri"] = "sai-crd",
["Cosoleacaque Nahuatl"] = "nhk",
["Costa Rican Sign Language"] = "csr",
["Cotabato Manobo"] = "mta",
["Cotoname"] = "xcn",
["Coyaima"] = "coy",
["Coyotepec Popoloca"] = "pbf",
["Coyutla Totonac"] = "toc",
["Crimean Gothic"] = "gme-cgo",
["Croatian Sign Language"] = "csq",
["Cruzeño"] = "crz",
["Cuban Sign Language"] = "csf",
["Cubeo"] = "cub",
["Cueva"] = "sai-cva",
["Cuiba"] = "cui",
["Cuitlatec"] = "cuy",
["Culina"] = "cul",
["Tiếng Culli"] = "sai-cul",
["Cun"] = "cuq",
["Cung"] = "cug",
["Curonian"] = "xcu",
["Curripaco"] = "kpc",
["Cutchi-Swahili"] = "ccl",
["Cuvok"] = "cuv",
["Cuyamecalco Mixtec"] = "xtu",
["Cwi Bwamu"] = "bwy",
["Czech Sign Language"] = "cse",
["Da'a Kaili"] = "kzf",
["Daai Chin"] = "dao",
["Daantanai'"] = "lni",
["Daba"] = "dbq",
["Dabe"] = "dbe",
["Dadanitic"] = "sem-dad",
["Dadi Dadi"] = "dda",
["Dadiya"] = "dbd",
["Tiếng Daga"] = "dgz",
["Dagaari Dioula"] = "dgd",
["Dagik"] = "dec",
["Dagoman"] = "dgn",
["Daho-Doo"] = "das",
["Dai"] = "dij",
["Dair"] = "drb",
["Dairi Batak"] = "btd",
["Dakaka"] = "bpa",
["Dakka"] = "dkk",
["Daloa Bété"] = "bev",
["Dama (Nigeria)"] = "dmm",
["Dama (Sierra Leone)"] = "dmn-dam",
["Damakawa"] = "dam",
["Damal"] = "uhn",
["Dampelas"] = "dms",
["Danaru"] = "dnr",
["Dandami Maria"] = "daq",
["Dangaura Tharu"] = "thl",
["Danish Sign Language"] = "dsl",
["Dano"] = "aso",
["Dao"] = "daz",
["Daonda"] = "dnd",
["Dar Fur Daju"] = "daj",
["Dar Sila Daju"] = "dau",
["Darai"] = "dry",
["Darkinjung"] = "xda",
["Darlong"] = "dln",
["Darmiya"] = "drd",
["Daro-Matu Melanau"] = "dro",
["Darumbal"] = "xgm",
["Dass"] = "dot",
["Datooga"] = "tcc",
["Daungwurrung"] = "dgw",
["Davawenyo"] = "daw",
["Dawawa"] = "dww",
["Dawera-Daweloor"] = "ddw",
["Day"] = "dai",
["Dayi"] = "dax",
["Dazaga"] = "dzg",
["Deccani"] = "dcc",
["Dedua"] = "ded",
["Defaka"] = "afn",
["Defi Gbe"] = "gbh",
["Deg"] = "mzw",
["Degenan"] = "dge",
["Dehwari"] = "deh",
["Dek"] = "dek",
["Dela-Oenale"] = "row",
["Delo"] = "ntr",
["Delta Yokuts"] = "nai-dly",
["Dem"] = "dem",
["Dema"] = "dmx",
["Demisa"] = "dei",
["Demta"] = "dmy",
["Tiếng Dena'ina"] = "tfn",
["Dendi"] = "ddn",
["Dengese"] = "dez",
["Dengka"] = "dnk",
["Deno"] = "dbb",
["Denya"] = "anv",
["Dení"] = "dny",
["Desano"] = "des",
["Dewas Rai"] = "dwz",
["Dewoin"] = "dee",
["Dezfuli"] = "def",
["Dghwede"] = "dgh",
["Dhaiso"] = "dhs",
["Dhalandji"] = "dhl",
["Dhao"] = "nfa",
["Dhofari Arabic"] = "adf",
["Dhudhuroa"] = "ddr",
["Dhungaloo"] = "dhx",
["Dhurga"] = "dhu",
["Dhuwal"] = "dwu",
["Dhuwaya"] = "dwy",
["Dia"] = "dia",
["Dibiyaso"] = "dby",
["Dibo"] = "dio",
["Dicamay Agta"] = "duy",
["Didinga"] = "did",
["Digo"] = "dig",
["Tiếng Dii"] = "dur",
["Dijim-Bwilim"] = "cfa",
["Dilling"] = "dil",
["Dima"] = "jma",
["Dimbong"] = "dii",
["Dinapigue Agta"] = "phi-din",
["Dineor"] = "mrx",
["Ding"] = "diz",
["Diodio"] = "ddi",
["Diri"] = "dwa",
["Dirim"] = "dir",
["Disa"] = "dsi",
["Diuwe"] = "diy",
["Diuxi-Tilantongo Mixtec"] = "xtd",
["Dixon Reef"] = "dix",
["Djadjawurrung"] = "dja",
["Djambarrpuyngu"] = "djr",
["Djangun"] = "djf",
["Djauan"] = "djn",
["Djawi"] = "djw",
["Djimini"] = "dyi",
["Djinba"] = "djb",
["Djiwarli"] = "djl",
["Dobel"] = "kvo",
["Dobu"] = "dob",
["Doe"] = "doe",
["Doga"] = "dgg",
["Doghoro"] = "dgx",
["Dogoso"] = "dgs",
["Dogosé"] = "dos",
["Dogul Dom"] = "dbg",
["Doka"] = "dbi",
["Doko-Uyanga"] = "uya",
["Dom"] = "doa",
["Dominican Sign Language"] = "doq",
["Dompo"] = "doy",
["Domu"] = "dof",
["Domung"] = "dev",
["Dondo"] = "dok",
["Dong"] = "doh",
["Dongo"] = "doo",
["Dongotono"] = "ddd",
["Dongshanba Lalo"] = "yik",
["Donno So Dogon"] = "dds",
["Doondo"] = "dde",
["Dorasque"] = "cba-dor",
["Dori'o"] = "dor",
["Dorig"] = "wwo",
["Doromu-Koki"] = "kqc",
["Dorze"] = "doz",
["Doso"] = "dol",
["Dothraki"] = "art-dtk",
["Doura"] = "don",
["Doutai"] = "tds",
["Doyayo"] = "dow",
["Drehu"] = "dhv",
["Duala"] = "dua",
["Duano"] = "dup",
["Duau"] = "dva",
["Dubu"] = "dmu",
["Dugun"] = "ndu",
["Duguri"] = "dbm",
["Dugwor"] = "dme",
["Duhwa"] = "kbz",
["Duit"] = "cba-dui",
["Duke"] = "nke",
["Dulbu"] = "dbo",
["Duli"] = "duz",
["Duma"] = "dma",
["Dumaitic"] = "sem-dum",
["Dumbea"] = "duf",
["Dumpas"] = "dmv",
["Dumun"] = "dui",
["Duna"] = "duc",
["Dungmali"] = "raa",
["Dungu"] = "dbv",
["Dura"] = "drq",
["Duri"] = "mvp",
["Duriankere"] = "dbn",
["Dusner"] = "dsn",
["Dusun Deyah"] = "dun",
["Dusun Malang"] = "duq",
["Dutch Sign Language"] = "dse",
["Duupa"] = "dae",
["Duvle"] = "duv",
["Duwai"] = "dbp",
["Duwet"] = "gve",
["Dwang"] = "nnu",
["Dyaabugay"] = "dyy",
["Dyaberdyaber"] = "dyb",
["Dyan"] = "dya",
["Dyangadi"] = "dyn",
["Dyugun"] = "dyd",
["Dza"] = "jen",
["Dzando"] = "dzn",
["Dzao Min"] = "bpn",
["Dzodinka"] = "add",
["Dâw"] = "kwa",
["E'ma Buyang"] = "yzg",
["Early Modern Korean"] = "ko-ear",
["Early Tripuri"] = "xtr",
["East Damar"] = "dmr",
["East Franconian"] = "vmf",
["East Kewa"] = "kjs",
["East Limba"] = "lma",
["East Makian"] = "mky",
["East Masela"] = "vme",
["East Nyala"] = "nle",
["East Tarangan"] = "tre",
["Eastern Bolivian Guaraní"] = "gui",
["Eastern Durango Nahuatl"] = "azd",
["Eastern Gurung"] = "ggn",
["Eastern Highland Chatino"] = "cly",
["Eastern Highland Otomi"] = "otm",
["Eastern Huasteca Nahuatl"] = "nhe",
["Eastern Huishui Hmong"] = "hme",
["Eastern Karaboro"] = "xrb",
["Eastern Keres"] = "kee",
["Eastern Lalu"] = "yit",
["Tiếng Maninkakan Đông"] = "emk",
["Eastern Meohang"] = "emg",
["Eastern Muria"] = "emu",
["Eastern Ngad'a"] = "nea",
["Eastern Nisu"] = "nos",
["Eastern Penan"] = "pez",
["Eastern Pomo"] = "peb",
["Eastern Qiandong Miao"] = "hmq",
["Eastern Subanun"] = "sfe",
["Eastern Tawbuid"] = "bnj",
["Eastern Xiangxi Miao"] = "muq",
["Eastern Xwla Gbe"] = "gbx",
["Ebira"] = "igb",
["Ecuadorian Sign Language"] = "ecs",
["Ede Cabe"] = "cbj",
["Ede Ije"] = "ijj",
["Edera Awyu"] = "awy",
["Edolo"] = "etr",
["Edomite"] = "xdm",
["Edopi"] = "dbf",
["Efutop"] = "ofu",
["Egyptian Sign Language"] = "esl",
["Ejamat"] = "eja",
["Ekajuk"] = "eka",
["Ekari"] = "ekg",
["Ekele"] = "khy",
["Eki"] = "eki",
["Ekit"] = "eke",
["Ekpeye"] = "ekp",
["El Alto Zapotec"] = "zpp",
["El Hugeirat"] = "elh",
["Eleme"] = "elm",
["Elepi"] = "ele",
["Elip"] = "ekm",
["Elkei"] = "elk",
["Eloi"] = "art-elo",
["Elotepec Zapotec"] = "zte",
["Eloyi"] = "afo",
["Elseng"] = "mrf",
["Elu"] = "elu",
["Emae"] = "mmw",
["Emai"] = "ema",
["Eman"] = "emn",
["Embaloh"] = "emb",
["Emberá-Baudó"] = "bdc",
["Emberá-Catío"] = "cto",
["Emem"] = "enr",
["Emerillon"] = "eme",
["Emplawas"] = "emw",
["Enawené-Nawé"] = "unk",
["Ende"] = "end",
["Enga"] = "enq",
["Enggano"] = "eno",
["Enlhet"] = "enl",
["Enrekang"] = "ptt",
["Enu"] = "enu",
["Enwan"] = "env",
["Enwang"] = "enw",
["Enxet"] = "enx",
["Enya"] = "gey",
["Epena"] = "sja",
["Epi-Olmec"] = "xep",
["Epigraphic Mayan"] = "emy",
["Erave"] = "kjy",
["Ere"] = "twp",
["Erie"] = "iro-ere",
["Eritai"] = "ert",
["Erokwanas"] = "erw",
["Erre"] = "err",
["Erromintxela"] = "emx",
["Eruwa"] = "erh",
["Ese Ejja"] = "ese",
["Eshtehardi"] = "esh",
["Eskayan"] = "esy",
["Esmeralda"] = "sai-esm",
["Esselen"] = "esq",
["Estado de México Otomi"] = "ots",
["Estonian Sign Language"] = "eso",
["Esuma"] = "esm",
["Etchemin"] = "etc",
["Etebi"] = "etb",
["Eten"] = "etx",
["Eteocypriot"] = "ecy",
["Ethiopian Sign Language"] = "eth",
["Etkywan"] = "ich",
["Eton (Cameroon)"] = "eto",
["Eton (Vanuatu)"] = "etn",
["Etulo"] = "utr",
["Evant"] = "bzz",
["Ewage-Notu"] = "nou",
["Ewarhuyana"] = "sai-ewa",
["Ewondo"] = "ewo",
["Extremaduran"] = "ext",
["Eyak"] = "eya",
["Ezaa"] = "eza",
["Fagani"] = "faf",
["Faire Atta"] = "azt",
["Faita"] = "faj",
["Faiwol"] = "fai",
["Fakkanci"] = "gel",
["Fali"] = "fli",
["Fam"] = "fam",
["Fanamaket"] = "bjp",
["Fang (Beboid)"] = "fak",
["Fania"] = "fni",
["Fas"] = "fqs",
["Fasu"] = "faa",
["Fataleka"] = "far",
["Tiếng Fataluku"] = "ddg",
["Fayu"] = "fau",
["Fedan"] = "pdn",
["Fembe"] = "agl",
["Fer"] = "kah",
["Feroge"] = "fer",
["Filomena Mata-Coahuitlán Totonac"] = "tlp",
["Finisterre Yau"] = "yuw",
["Finnish Sign Language"] = "fse",
["Finnish-Swedish Sign Language"] = "fss",
["Finongan"] = "fag",
["Fipa"] = "fip",
["Firan"] = "fir",
["Fiwaga"] = "fiw",
["Flemish Sign Language"] = "vgt",
["Flinders Island"] = "fln",
["Foau"] = "flh",
["Foia Foia"] = "ffi",
["Folopa"] = "ppo",
["Foma"] = "fom",
["Fongoro"] = "fgr",
["Foodo"] = "fod",
["Forak"] = "frq",
["Fordata"] = "frd",
["Fore"] = "for",
["Forest Nenets"] = "yrk-for",
["Fortsenal"] = "frt",
["French Belgian Sign Language"] = "sfb",
["French Sign Language"] = "fsl",
["Fuliiru"] = "flr",
["Fulniô"] = "fun",
["Fum"] = "fum",
["Tiếng Fungwa"] = "ula",
["Furu"] = "fuu",
["Futuna-Aniwa"] = "fut",
["Fuyug"] = "fuy",
["Fwe"] = "fwe",
["Fwâi"] = "fwa",
["Fyam"] = "pym",
["Fyer"] = "fie",
["Ga'anda"] = "gqa",
["Ga'dang"] = "gdg",
["Gaa"] = "ttb",
["Gaam"] = "tbi",
["Gabadi"] = "kbt",
["Gabi"] = "gbw",
["Gabrielino-Fernandeño"] = "xgf",
["Gadang"] = "gdk",
["Gade"] = "ged",
["Gadjerawang"] = "gdh",
["Gadsup"] = "gaj",
["Gafat"] = "gft",
["Gagadu"] = "gbu",
["Gagnoa Bété"] = "btg",
["Gaikundi"] = "gbf",
["Gaina"] = "gcn",
["Gal"] = "gap",
["Galambu"] = "glo",
["Galela"] = "gbi",
["Galeya"] = "gar",
["Galice"] = "gce",
["Galindian"] = "xgl",
["Gallaecian"] = "cel-gal",
["Galoli"] = "gal",
["Gambera"] = "gma",
["Gamela"] = "sai-gam",
["Gamkonora"] = "gak",
["Gamo-Ningi"] = "bte",
["Gana"] = "gnq",
["Ganang"] = "gne",
["Gane"] = "gzn",
["Ganggalida"] = "gcd",
["Ganglau"] = "ggl",
["Gangte"] = "gnb",
["Gangulu"] = "gnl",
["Gants"] = "gao",
["Ganzi"] = "gnz",
["Gao"] = "gga",
["Gapapaiwa"] = "pwg",
["Garawa"] = "wrk",
["Garingbal"] = "xgi",
["Garus"] = "gyb",
["Garza"] = "xgr",
["Gashowu"] = "nai-gsy",
["Gavak"] = "dmc",
["Gavar"] = "gou",
["Gavião do Jiparaná"] = "gvo",
["Gayo"] = "gay",
["Gayón"] = "sai-gay",
["Gbagyi"] = "gbr",
["Gban"] = "ggu",
["Gbanu"] = "gbv",
["Gbanziri"] = "gbg",
["Gbari"] = "gby",
["Gbaya"] = "gba",
["Gbaya-Bossangoa"] = "gbp",
["Gbaya-Bozoum"] = "gbq",
["Gbaya-Mbodomo"] = "gmm",
["Gbayi"] = "gyg",
["Gbesi Gbe"] = "gbs",
["Gbii"] = "ggb",
["Gbin"] = "xgb",
["Gboloo Grebo"] = "gec",
["Gciriku"] = "diu",
["Gcwi"] = "gwj",
["Ge"] = "hmj",
["Gebe"] = "gei",
["Gedaged"] = "gdd",
["Geji"] = "gji",
["Gela"] = "nlg",
["Gelao"] = "gio",
["Gele'"] = "sbc",
["Geme"] = "geq",
["Gende"] = "gaf",
["Gengle"] = "geg",
["Gepo"] = "ygp",
["Gera"] = "gew",
["German Sign Language"] = "gsg",
["Geruma"] = "gea",
["Geser-Gorom"] = "ges",
["Gey"] = "guv",
["Ghanaian Sign Language"] = "gse",
["Ghandruk Sign Language"] = "gds",
["Ghanongga"] = "ghn",
["Ghari"] = "gri",
["Ghayavi"] = "bmk",
["Ghera"] = "ghr",
["Ghulfan"] = "ghl",
["Giangan"] = "bgi",
["Gibanawa"] = "gib",
["Gidar"] = "gid",
["Gikyode"] = "acd",
["Gilima"] = "gix",
["Gimi (Austronesian)"] = "gip",
["Gimme"] = "kmp",
["Gimnime"] = "gmn",
["Ginuman"] = "gnm",
["Girawa"] = "bbr",
["Githabul"] = "gih",
["Gitua"] = "ggt",
["Giyug"] = "giy",
["Gizrra"] = "tof",
["Glaro-Twabo"] = "glr",
["Glavda"] = "glw",
["Glio-Oubi"] = "oub",
["Gnau"] = "gnu",
["Goa'uld"] = "art-gld",
["Goaria"] = "gig",
["Gobasi"] = "goi",
["Gobu"] = "gox",
["Godié"] = "god",
["Godwari"] = "gdx",
["Goemai"] = "ank",
["Gogo"] = "gog",
["Gogodala"] = "ggw",
["Gokana"] = "gkn",
["Gokhy"] = "sit-gkh",
["Gola"] = "gol",
["Golin"] = "gvf",
["Golpa"] = "lja",
["Gondi"] = "gon",
["Gongduk"] = "goe",
["Gonja"] = "gjn",
["Goo"] = "gov",
["Gor"] = "gqr",
["Gorakor"] = "goc",
["Gorap"] = "goq",
["Goreng"] = "xgg",
["Gorovu"] = "grq",
["Gottscheerish"] = "gmw-gts",
["Goundo"] = "goy",
["Gowlan"] = "goj",
["Gowro"] = "gwf",
["Gozarkhani"] = "goz",
["Grangali"] = "nli",
["Grass Koiari"] = "kbk",
["Grebo"] = "grb",
["Greek Sign Language"] = "gss",
["Green Gelao"] = "giq",
["Green Hmong"] = "hnj",
["Grenadian Creole English"] = "gcl",
["Gresi"] = "grs",
["Groma"] = "gro",
["Gros Ventre"] = "ats",
["Gua"] = "gwx",
["Guahibo"] = "guh",
["Guambiano"] = "gum",
["Guamo"] = "sai-gmo",
["Guanano"] = "gvc",
["Guatemalan Sign Language"] = "gsm",
["Guató"] = "gta",
["Guayabero"] = "guo",
["Guazacapán"] = "nai-guz",
["Gudang"] = "xgd",
["Gudanji"] = "nji",
["Gude"] = "gde",
["Gudu"] = "gdu",
["Guduf-Gava"] = "gdf",
["Guerrero Nahuatl"] = "ngu",
["Guevea de Humboldt Zapotec"] = "zpg",
["Gugadj"] = "ggd",
["Gugu Badhun"] = "gdc",
["Gugu Warra"] = "wrw",
["Guhu-Samane"] = "ghs",
["Guianese Creole"] = "gcr",
["Guiberoua Bété"] = "bet",
["Guinau"] = "awd-gnu",
["Guinea-Bissau Sign Language"] = "lgs",
["Guinean Sign Language"] = "gus",
["Guiqiong"] = "gqi",
["Gula"] = "glu",
["Gula'alaa"] = "gmb",
["Gule"] = "gly",
["Gullah"] = "gul",
["Gumalu"] = "gmu",
["Gumatj"] = "gnn",
["Gumawana"] = "gvs",
["Gundi"] = "gdi",
["Gunditjmara"] = "gjm",
["Gundungurra"] = "xrd",
["Gungabula"] = "gyf",
["Gungu"] = "rub",
["Guntai"] = "gnt",
["Gunu"] = "yas",
["Gunwinggu"] = "gup",
["Tiếng Gunya"] = "gyy",
["Gupa-Abawa"] = "gpa",
["Gupapuyngu"] = "guf",
["Guragone"] = "gge",
["Guramalum"] = "grz",
["Gureng Gureng"] = "gnr",
["Gurgula"] = "ggg",
["Guriaso"] = "grx",
["Gurindji"] = "gue",
["Gurjar Apabhramsa"] = "inc-gup",
["Gurmana"] = "gvm",
["Guro"] = "goa",
["Guruntum"] = "grd",
["Gusan"] = "gsn",
["Gusii"] = "guz",
["Gusilay"] = "gsl",
["Guwa"] = "xgw",
["Guwamu"] = "gwu",
["Guwar"] = "aus-guw",
["Guya"] = "gka",
["Guyanese Creole English"] = "gyn",
["Guyani"] = "gvy",
["Guébie"] = "gie",
["Gvoko"] = "ngs",
["Gwa"] = "gwb",
["Gwahatike"] = "dah",
["Gwak"] = "jgk",
["Gwamhi-Wuri"] = "bga",
["Gwandara"] = "gwn",
["Gwara"] = "alv-gwa",
["Gweda"] = "grw",
["Gweno"] = "gwe",
["Gwere"] = "gwr",
["Gyalsumdo"] = "gyo",
["Gyele"] = "gyi",
["Gyem"] = "gye",
["Güenoa"] = "sai-gue",
["Habu"] = "hbu",
["Hadothi"] = "hoj",
["Hadrami"] = "xhd",
["Hadza"] = "hts",
["Haeke"] = "aek",
["Hahon"] = "hah",
["Haigwai"] = "hgw",
["Hainyaxo Bozo"] = "bzx",
["Haiphong Sign Language"] = "haf",
["Haitian Vodoun Culture Language"] = "hvc",
["Haiǁom"] = "hgm",
["Haji"] = "hji",
["Hakö"] = "hao",
["Halang Doan"] = "hld",
["Halia"] = "hla",
["Hamap"] = "hmu",
["Hamba"] = "hba",
["Hamtai"] = "hmt",
["Hanga"] = "hag",
["Hanga Hundi"] = "wos",
["Hanoi Sign Language"] = "hab",
["Harami"] = "xha",
["Haraza"] = "nub-har",
["Haruai"] = "tmd",
["Haruku"] = "hrk",
["Harzani"] = "hrz",
["Hasaitic"] = "sem-has",
["Hasha"] = "ybj",
["Tiếng Ả Rập Hassaniya"] = "mey",
["Tiếng Hatam"] = "had",
["Hausa Sign Language"] = "hsl",
["Haveke"] = "hvk",
["Havu"] = "hav",
["Hawai'i Pidgin Sign Language"] = "hps",
["Hawaiian Creole"] = "hwc",
["Haya"] = "hay",
["Hdi"] = "xed",
["Hehe"] = "heh",
["Helong"] = "heg",
["Helu"] = "elu-prk",
["Hema"] = "nix",
["Hemba"] = "hem",
["Herdé"] = "hed",
["Hermit"] = "llf",
["Hewa"] = "ham",
["Heyo"] = "auk",
["Hibito"] = "hib",
["Hidatsa"] = "hid",
["Highland Konjo"] = "kjk",
["Highland Oaxaca Chontal"] = "chd",
["Highland Puebla Nahuatl"] = "azz",
["Hijuk"] = "hij",
["Himarimã"] = "hir",
["Himyaritic"] = "sem-him",
["Hismaic"] = "sem-his",
["Hitchiti"] = "nai-hit",
["Hitu"] = "htu",
["Hixkaryana"] = "hix",
["Hlepho Phowa"] = "yhl",
["Hlersu"] = "hle",
["Hmar"] = "hmr",
["Hmong Dô"] = "hmv",
["Hmong Shua"] = "hmz",
["Hmwaveke"] = "mrk",
["Ho Chi Minh City Sign Language"] = "hos",
["Hobyót"] = "hoh",
["Hoia Hoia"] = "hhi",
["Holikachuk"] = "hoi",
["Holma"] = "hod",
["Holoholo"] = "hoo",
["Holu"] = "hol",
["Homa"] = "hom",
["Honduran Lenca"] = "len",
["Honduras Sign Language"] = "hds",
["Hone"] = "juh",
["Hong Kong Sign Language"] = "hks",
["Honi"] = "how",
["Horned Miao"] = "hrm",
["Horo"] = "hor",
["Horom"] = "hoe",
["Hote"] = "hot",
["Hoti"] = "hti",
["Hovongan"] = "hov",
["Hoyahoya"] = "hhy",
["Hrangkhol"] = "hra",
["Hruso"] = "hru",
["Huachipaeri"] = "hug",
["Huambisa"] = "hub",
["Huaorani"] = "auc",
["Huarijio"] = "var",
["Huaulu"] = "hud",
["Huautla Mazatec"] = "mau",
["Huave"] = "huv",
["Huaxcaleca Nahuatl"] = "nhq",
["Huba"] = "hbb",
["Huehuetla Tepehua"] = "tee",
["Huetar"] = "cba-hue",
["Huichol"] = "hch",
["Huilliche"] = "huh",
["Huitepec Mixtec"] = "mxs",
["Hukumina"] = "huw",
["Hula"] = "hul",
["Tiếng Huli"] = "hui",
["Hulung"] = "huk",
["Humene"] = "huf",
["Hun"] = "uth",
["Hunde"] = "hke",
["Hungana"] = "hum",
["Hungarian Sign Language"] = "hsh",
["Hungworo"] = "nat",
["Hunjara-Kaina Ke"] = "hkk",
["Hunnic"] = "xhc",
["Hupla"] = "hap",
["Hutterisch"] = "geh",
["Hwana"] = "hwo",
["Hya"] = "hya",
["Hän"] = "haa",
["Hértevin"] = "hrt",
["I-Wak"] = "iwk",
["Iamalele"] = "yml",
["Iatmul"] = "ian",
["Iau"] = "tmu",
["Ibali Teke"] = "tek",
["Ibani"] = "iby",
["Iberian"] = "xib",
["Iboko"] = "bkp",
["Ibu"] = "ibu",
["Icelandic Sign Language"] = "icl",
["Iceve-Maci"] = "bec",
["Idakho-Isukha-Tiriki"] = "ida",
["Idaté"] = "idt",
["Idere"] = "ide",
["Idesa"] = "ids",
["Idi"] = "idi",
["Idoma"] = "idu",
["Idon"] = "idc",
["Idun"] = "ldb",
["Iduna"] = "viv",
["Ifo"] = "iff",
["Igana"] = "igg",
["Igede"] = "ige",
["Ignaciano"] = "ign",
["Igo"] = "ahl",
["Iguta"] = "nar",
["Igwe"] = "igw",
["Iha"] = "ihp",
["Ihievbe"] = "ihi",
["Ija-Zuba"] = "vki",
["Ik"] = "ikx",
["Ika"] = "ikk",
["Ikaranggal"] = "ikr",
["Ikizu"] = "ikz",
["Iko"] = "iki",
["Ikobi-Mena"] = "meb",
["Ikoma"] = "ntk",
["Ikpeng"] = "txi",
["Ikpeshi"] = "ikp",
["Iku-Gora-Ankwa"] = "ikv",
["Ikulu"] = "ikl",
["Ikwo"] = "iqw",
["Ila"] = "ilb",
["Ile Ape"] = "ila",
["Ilgar"] = "ilg",
["Ili'uun"] = "ilu",
["Ilianen Manobo"] = "mbi",
["Illyrian"] = "xil",
["Ilongot"] = "ilk",
["Ilue"] = "ilv",
["Ilwana"] = "mlk",
["Imbongu"] = "imo",
["Imonda"] = "imn",
["Imroing"] = "imr",
["Inabaknon"] = "abx",
["Inapang"] = "mzu",
["Indanga"] = "bnt-ind",
["Indian Sign Language"] = "ins",
["Indonesian Bajau"] = "bdl",
["Indonesian Sign Language"] = "inl",
["Indri"] = "idr",
["Indus Valley Language"] = "xiv",
["Inebu One"] = "oin",
["Ineseño"] = "inz",
["Inga"] = "inb",
["Inlaod Itneg"] = "iti",
["Inoke-Yate"] = "ino",
["Inonhan"] = "loc",
["Inpui Naga"] = "nkf",
["International Sign"] = "ils",
["Inuinnaqtun"] = "esx-inq",
["Inuit Sign Language"] = "iks",
["Inuktun"] = "esx-ink",
["Ipai"] = "nai-ipa",
["Ipalapa Amuzgo"] = "azm",
["Ipiko"] = "ipo",
["Ipili"] = "ipi",
["Ipulo"] = "ass",
["Iquito"] = "iqu",
["Ir"] = "irr",
["Irantxe"] = "irn",
["Iranun"] = "ill",
["Irarutu"] = "irh",
["Iraya"] = "iry",
["Iresim"] = "ire",
["Iriga Bicolano"] = "bto",
["Irish Sign Language"] = "isg",
["Isabi"] = "isa",
["Isanzu"] = "isn",
["Isarog Agta"] = "agk",
["Isaurian"] = "und-isa",
["Isconahua"] = "isc",
["Isebe"] = "igo",
["Isinai"] = "inn",
["Isirawa"] = "srl",
["Islander Creole English"] = "icr",
["Israeli Sign Language"] = "isr",
["Isthmus Mixe"] = "mir",
["Isu"] = "isu",
["Isubu"] = "szv",
["Italian Sign Language"] = "ise",
["Itawit"] = "itv",
["Iteri"] = "itr",
["Itik"] = "itx",
["Ito"] = "itw",
["Itundujia Mixtec"] = "mce",
["Itzá"] = "itz",
["Iwal"] = "kbm",
["Iwam"] = "iwm",
["Iwur"] = "iwo",
["Ixcatec"] = "ixc",
["Ixcatlán Mazatec"] = "mzi",
["Ixtayutla Mixtec"] = "vmj",
["Ixtenco Otomi"] = "otz",
["Iyayu"] = "iya",
["Iyive"] = "uiv",
["Iyo"] = "nca",
["Iyo'wujwa Chorote"] = "crq",
["Iyojwa'ja Chorote"] = "crt",
["Izere"] = "izr",
["Izi"] = "izz",
["Izi-Ezaa-Ikwo-Mgbo"] = "izi",
["Izora"] = "cbo",
["Iñapari"] = "inp",
["Jabem"] = "jae",
["Jabutí"] = "jbt",
["Jad"] = "jda",
["Jadgali"] = "jdg",
["Jahanka"] = "jad",
["Jair Awyu"] = "awv",
["Jakati"] = "jat",
["Jalapa de Díaz Mazatec"] = "maj",
["Jalkunan"] = "bxl",
["Jamaican Country Sign Language"] = "jcs",
["Jamaican Sign Language"] = "jls",
["Jambi Malay"] = "jax",
["Jamiltepec Mixtec"] = "mxt",
["Jaminjung"] = "djd",
["Jamsay"] = "djm",
["Jamtish"] = "gmq-jmk",
["Jandavra"] = "jnd",
["Janday"] = "jan",
["Jangkang"] = "djo",
["Jangshung"] = "jna",
["Janji"] = "jni",
["Japanese Sign Language"] = "jsl",
["Japrería"] = "jru",
["Jara"] = "jaf",
["Jaru"] = "ddj",
["Jassic"] = "ysc",
["Jawe"] = "jaz",
["Jaya"] = "jyy",
["Jebero"] = "jeb",
["Jeikó"] = "sai-jko",
["Jenaama Bozo"] = "bze",
["Jeng"] = "jeg",
["Jere"] = "jer",
["Jeri Kuo"] = "jek",
["Jerung"] = "jee",
["Jhankot Sign Language"] = "jhs",
["Jiamao"] = "jio",
["Jiba"] = "juo",
["Jibu"] = "jib",
["Jilbe"] = "jie",
["Jili"] = "mgi",
["Jilim"] = "jil",
["Jimi"] = "jmi",
["Jimjimen"] = "jim",
["Jina"] = "jia",
["Jingulu"] = "jig",
["Jiongnai Bunu"] = "pnu",
["Jirajara"] = "sai-jrj",
["Jiru"] = "jrr",
["Jita"] = "jit",
["Joba"] = "job",
["Jofotek-Bromnya"] = "jbr",
["Jola-Fonyi"] = "dyo",
["Jola-Kasa"] = "csk",
["Jonkor Bourmataguil"] = "jeu",
["Jordanian Sign Language"] = "jos",
["Jorá"] = "jor",
["Jowulu"] = "jow",
["Ju"] = "juu",
["Jumla Sign Language"] = "jus",
["Jumli"] = "jml",
["Jungle Inga"] = "inj",
["Juquila Mixe"] = "mxq",
["Jur Modo"] = "bex",
["Jurúna"] = "jur",
["Jutiapa"] = "nai-jtp",
["Juwal"] = "mwb",
["Juxtlahuaca Mixtec"] = "vmc",
["Jwira-Pepesa"] = "jwi",
["Júma"] = "jua",
["Kaamba"] = "xku",
["Kaan"] = "ldl",
["Kaang Chin"] = "ckn",
["Kaansa"] = "gna",
["Kaapor Sign Language"] = "uks",
["Kaba"] = "ksp",
["Kabalai"] = "kvf",
["Kabatei"] = "xkp",
["Kabba-Laka"] = "lap",
["Kabishiana"] = "tup-kab",
["Kabola"] = "klz",
["Kabore One"] = "onk",
["Kabras"] = "lkb",
["Kaburi"] = "uka",
["Kabutra"] = "kbu",
["Kabwa"] = "cwa",
["Kabwari"] = "kcw",
["Kachari"] = "xac",
["Kacipo-Balesi"] = "koe",
["Kaco'"] = "xkk",
["Kadai"] = "kzd",
["Kadara"] = "kad",
["Kadaru"] = "kdu",
["Kadiwéu"] = "kbc",
["Kado"] = "kdv",
["Kadugli"] = "xtc",
["Kaduo"] = "ktp",
["Kaera"] = "jka",
["Kafoa"] = "kpu",
["Kagan Kalagan"] = "kll",
["Kagate"] = "syw",
["Kagoma"] = "kdm",
["Kagoro"] = "xkg",
["Kagulu"] = "kki",
["Kahe"] = "hka",
["Kahua"] = "agw",
["Kaian"] = "kct",
["Kaibobo"] = "kzb",
["Kaidipang"] = "kzp",
["Kaiep"] = "kbw",
["Kaike"] = "kzq",
["Kaiku"] = "kkq",
["Kaimbulawa"] = "zka",
["Kaimbé"] = "xai",
["Kairak"] = "ckr",
["Kairiru"] = "kxa",
["Kairui-Midiki"] = "krd",
["Kais"] = "kzm",
["Kaivi"] = "kce",
["Kaiwá"] = "kgk",
["Kaiy"] = "tcq",
["Kajakse"] = "ckq",
["Kajali"] = "xkj",
["Kajaman"] = "kag",
["Kakabe"] = "kke",
["Kakanda"] = "kka",
["Kakihum"] = "kxe",
["Kako"] = "kkj",
["Kakwa"] = "keo",
["Kala"] = "kcl",
["Kala Lagaw Ya"] = "mwp",
["Kalaamaya"] = "lkm",
["Kalabakan"] = "kve",
["Kalabari"] = "ijn",
["Kalabra"] = "kzz",
["Kalagan"] = "kqe",
["Kalaktang Monpa"] = "kkf",
["Kalam"] = "kmh",
["Kalamsé"] = "knz",
["Kalanadi"] = "wkl",
["Kalanga"] = "kck",
["Kalapuya"] = "kyl",
["Kalarko"] = "kba",
["Kalasuri"] = "xme-kls",
["Kalenjin"] = "kln",
["Kalinago"] = "crb",
["Kalkatungu"] = "ktg",
["Kalou"] = "ywa",
["Kaluli"] = "bco",
["Kalumpang"] = "kli",
["Kam"] = "kdx",
["Kamakan"] = "vkm",
["Kamang"] = "woi",
["Kamano"] = "kbq",
["Kamantan"] = "kci",
["Kamar"] = "keq",
["Kamara"] = "jmr",
["Kamarian"] = "kzx",
["Kamaru"] = "kgx",
["Kamasa"] = "klp",
["Kamasau"] = "kms",
["Kamayurá"] = "kay",
["Kamba"] = "kam",
["Kambaira"] = "kyy",
["Kamberataro"] = "kbv",
["Kamberau"] = "irx",
["Kambiwá"] = "xbw",
["Kami"] = "kmi",
["Kamkata-viri"] = "bsh",
["Kamo"] = "kcq",
["Kamoro"] = "kgq",
["Kamu"] = "xmu",
["Kamwe"] = "hig",
["Kanakuru"] = "kna",
["Kanamari"] = "knm",
["Kanashi"] = "xns",
["Kanasi"] = "soq",
["Kandas"] = "kqw",
["Kandawo"] = "gam",
["Kande"] = "kbs",
["Kang"] = "kyp",
["Kanga"] = "kcp",
["Kanggape"] = "igm",
["Kango"] = "kty",
["Kango-Sua"] = "kzy",
["Kaniet"] = "ktk",
["Kanikkaran"] = "kev",
["Kaningdon-Nindem"] = "kdp",
["Kaningi"] = "kzo",
["Kaningra"] = "knr",
["Kaninuwa"] = "wat",
["Kanite"] = "kmu",
["Kanjari"] = "kft",
["Kanju"] = "kbe",
["Kanowit"] = "kxn",
["Kanoé"] = "kxo",
["Kansa"] = "ksk",
["Kantosi"] = "xkt",
["Kanu"] = "khx",
["Kanufi"] = "kni",
["Kanyok"] = "kny",
["Kao"] = "kax",
["Kaonde"] = "kqn",
["Kap"] = "ykm",
["Kapauri"] = "khp",
["Kapin"] = "tbx",
["Kapinawá"] = "xpn",
["Kapriman"] = "dju",
["Kaptiau"] = "kbi",
["Kapya"] = "klo",
["Kara (New Guinea)"] = "leu",
["Kara (Tanzania)"] = "reg",
["Karadjeri"] = "gbd",
["Karaga Mandaya"] = "mry",
["Karami"] = "xar",
["Karamojong"] = "kdj",
["Karang"] = "kzr",
["Karanga"] = "kth",
["Karankawa"] = "zkk",
["Karas"] = "kgv",
["Karawa"] = "xrw",
["Kare (Africa)"] = "kbn",
["Kare (New Guinea)"] = "kmf",
["Karey"] = "kyd",
["Kari"] = "kbj",
["Karingani"] = "kgn",
["Karipuna"] = "kuq",
["Karipúna"] = "kgm",
["Karipúna Creole French"] = "kmv",
["Kariya"] = "kil",
["Kariyarra"] = "vka",
["Karkar-Yuri"] = "yuj",
["Karkin"] = "krb",
["Karko"] = "kko",
["Karnai"] = "bbv",
["Karo Batak"] = "btx",
["Karok"] = "kyh",
["Karolanos"] = "kyn",
["Karon"] = "krx",
["Karon Dori"] = "kgw",
["Karore"] = "xkx",
["Karranga"] = "xrq",
["Karuwali"] = "rxw",
["Kasanga"] = "ccj",
["Kasem"] = "xsm",
["Kasiguranin"] = "ksn",
["Kaska"] = "kkz",
["Kaskean"] = "zsk",
["Kaskihá"] = "gva",
["Kassite"] = "und-kas",
["Kassonke"] = "kao",
["Kasua"] = "khs",
["Kataang"] = "kgd",
["Katabaga"] = "ktq",
["Katawixi"] = "xat",
["Katembri"] = "sai-kat",
["Kathlamet"] = "nai-kat",
["Kathoriya Tharu"] = "tkt",
["Kathu"] = "ykt",
["Katkari"] = "kfu",
["Katla"] = "kcr",
["Kato"] = "ktw",
["Katso"] = "kaf",
["Katukina"] = "knt",
["Kaulong"] = "pss",
["Kaur"] = "vkk",
["Kaure"] = "bpp",
["Kauwera"] = "xau",
["Kawacha"] = "kcb",
["Kawaiisu"] = "xaw",
["Kawe"] = "kgb",
["Kawishana"] = "awd-kaw",
["Kaxararí"] = "ktx",
["Kaxuyana"] = "kbb",
["Kaya"] = "zra",
["Kayabí"] = "kyz",
["Kayagar"] = "kyt",
["Kayan Mahakam"] = "xay",
["Kayan River Kayan"] = "xkn",
["Kayardild"] = "gyd",
["Kayeli"] = "kzl",
["Kaytetye"] = "gbb",
["Kayupulau"] = "kzu",
["Kazukuru"] = "kzk",
["Ke'o"] = "xxk",
["Keak"] = "keh",
["Keapara"] = "khz",
["Kedang"] = "ksx",
["Keder"] = "kdy",
["Kehu"] = "khh",
["Kei"] = "kei",
["Keiga"] = "kec",
["Kein"] = "bmh",
["Keiyo"] = "eyo",
["Kela-Yela"] = "kel",
["Kelabit"] = "kzi",
["Keley-I Kallahan"] = "ify",
["Tiếng Keliko"] = "kbo",
["Kelo"] = "xel",
["Kelon"] = "kyo",
["Kemak"] = "kem",
["Kembayan"] = "xem",
["Kemberano"] = "bzp",
["Kembra"] = "xkw",
["Kemezung"] = "dmo",
["Kemi Sami"] = "sjk",
["Kemiehua"] = "kfj",
["Kemtuik"] = "kmt",
["Kenaboi"] = "xbn",
["Kenati"] = "gat",
["Kendayan"] = "knx",
["Kendeje"] = "klf",
["Kendem"] = "kvm",
["Kenga"] = "kyq",
["Keningau Murut"] = "kxi",
["Keninjal"] = "knl",
["Kenswei Nsei"] = "ndb",
["Kenyan Sign Language"] = "xki",
["Kenyi"] = "lke",
["Keoru-Ahia"] = "xeu",
["Kepkiriwát"] = "kpn",
["Kepo'"] = "kuk",
["Kera"] = "ker",
["Kerak"] = "hhr",
["Kereho"] = "xke",
["Kerewe"] = "ked",
["Kerewo"] = "kxz",
["Kerinci"] = "kvr",
["Kesawai"] = "xes",
["Ketangalan"] = "kae",
["Kete"] = "kcv",
["Ketengban"] = "xte",
["Ketum"] = "ktt",
["Kewa"] = "kew",
["Keyagana"] = "kyg",
["Kgalagadi"] = "xkv",
["Khana"] = "ogo",
["Khandeshi"] = "khn",
["Khao"] = "xao",
["Kharam Naga"] = "kfw",
["Kharia Thar"] = "ksy",
["Khayo"] = "lko",
["Khe"] = "kqg",
["Khehek"] = "tlx",
["Khetrani"] = "xhe",
["Khezha Naga"] = "nkh",
["Khirwar"] = "kwx",
["Khisa"] = "kqm",
["Khlor"] = "llo",
["Khlula"] = "ykl",
["Khoibu Naga"] = "nkb",
["Khoini"] = "xkc",
["Kholok"] = "ktc",
["Khumi Chin"] = "cnk",
["Khwe"] = "xuu",
["Kibala"] = "blv",
["Kibena"] = "bez",
["Kibet"] = "kie",
["Kibiri"] = "prm",
["Kichwa"] = "qwe-kch",
["Kikami"] = "kcu",
["Kilit"] = "xme-klt",
["Kilivila"] = "kij",
["Kiliwa"] = "klb",
["Kilmeri"] = "kih",
["Kimaama"] = "kig",
["Kimaragang"] = "kqr",
["Kimbu"] = "kiv",
["Kimki"] = "sbt",
["Kimré"] = "kqp",
["Kinabalian"] = "cbw",
["Kinalakna"] = "kco",
["Kinga"] = "zga",
["Kings River Yokuts"] = "nai-kry",
["Kinikinao"] = "gqn",
["Kinuku"] = "kkd",
["Kioko"] = "ues",
["Kiong"] = "kkm",
["Kiorr"] = "xko",
["Kipfokomo"] = "pkb",
["Kipsigis"] = "sgc",
["Kiput"] = "kyi",
["Kir-Balar"] = "kkr",
["Kire"] = "geb",
["Kirfi"] = "kks",
["Kirikiri"] = "kiy",
["Kirya-Konzel"] = "fkk",
["Kis"] = "kis",
["Kisa"] = "lks",
["Kisankasa"] = "kqh",
["Kisar"] = "kje",
["Kisi"] = "kiz",
["Kita Maninkakan"] = "mwk",
["Kitanemuk"] = "azc-ktn",
["Kitembo"] = "tbt",
["Kitja"] = "gia",
["Kitsai"] = "kii",
["Kiunum"] = "wei",
["Kla"] = "lda",
["Klamath-Modoc"] = "kla",
["Klao"] = "klu",
["Klias River Kadazan"] = "kqt",
["Ko"] = "fuj",
["Koasati"] = "cku",
["Koba"] = "kpd",
["Kobiana"] = "kcj",
["Kobol"] = "kgu",
["Kochila Tharu"] = "thq",
["Kodaku"] = "ksz",
["Kodeoha"] = "vko",
["Kodi"] = "kod",
["Kodia"] = "kwp",
["Koenoem"] = "kcs",
["Kofa"] = "kso",
["Kofei"] = "kpi",
["Kofyar"] = "kwl",
["Kohin"] = "kkx",
["Kohumono"] = "bcs",
["Koi"] = "kkt",
["Koireng"] = "nkd",
["Koitabu"] = "kqi",
["Koiwat"] = "kxt",
["Kok-Nar"] = "gko",
["Kok-Paponk"] = "okg",
["Kokata"] = "ktd",
["Koke"] = "kou",
["Koko-Bera"] = "kkp",
["Kokoda"] = "xod",
["Kokola"] = "kzn",
["Kokota"] = "kkk",
["Kol (Cameroon)"] = "biw",
["Kol (New Guinea)"] = "kol",
["Kola"] = "kvv",
["Kolbila"] = "klc",
["Kolibugan Subanon"] = "skn",
["Kolom"] = "klm",
["Koluwawa"] = "klx",
["Kom (India)"] = "kmm",
["Koma"] = "kmy",
["Komba"] = "kpf",
["Kombai"] = "tyn",
["Kombio"] = "xbi",
["Komering"] = "kge",
["Kominimung"] = "xoi",
["Kompane"] = "kvp",
["Komyandaret"] = "kzv",
["Kon Keu"] = "kkn",
["Konai"] = "kxw",
["Konda"] = "knd",
["Koneraw"] = "kdw",
["Konkomba"] = "xon",
["Konni"] = "kma",
["Kono (Guinea)"] = "knu",
["Kono (Nigeria)"] = "klk",
["Kono (Sierra Leone)"] = "kno",
["Konomala"] = "koa",
["Konomihu"] = "nai-knm",
["Konongo"] = "kcz",
["Konyak Naga"] = "nbe",
["Konyanka Maninka"] = "mku",
["Konzo"] = "koo",
["Kopar"] = "xop",
["Kopkaka"] = "opk",
["Korafe-Yegha"] = "kpr",
["Korak"] = "koz",
["Korana"] = "kqz",
["Korandje"] = "kcy",
["Korean Sign Language"] = "kvk",
["Koreguaje"] = "coe",
["Koresh-e Rostam"] = "okh",
["Korlai Creole Portuguese"] = "vkp",
["Koro (India)"] = "jkr",
["Koro (New Guinea)"] = "kxr",
["Koro (Vanuatu)"] = "krf",
["Koro (West Africa)"] = "kfo",
["Koromfé"] = "kfz",
["Koromira"] = "kqj",
["Koronadal Blaan"] = "bpr",
["Koroni"] = "xkq",
["Korop"] = "krp",
["Koropó"] = "xxr",
["Koroshi"] = "ktl",
["Korowai"] = "khe",
["Korubo"] = "xor",
["Korupun-Sela"] = "kpq",
["Kosadle"] = "kiq",
["Kosarek Yale"] = "kkl",
["Kosena"] = "kze",
["Koshin"] = "kid",
["Kota (Gabon)"] = "koq",
["Kota Bangun Kutai Malay"] = "mqg",
["Kota Marudu Talantang"] = "grm",
["Kota Marudu Tinagas"] = "ktr",
["Kotafon Gbe"] = "kqk",
["Koti"] = "eko",
["Kou"] = "snz",
["Kouya"] = "kyf",
["Kovai"] = "kqb",
["Kove"] = "kvc",
["Kowaki"] = "xow",
["Kowiai"] = "kwh",
["Koy Sanjaq Surat"] = "kqd",
["Koyaga"] = "kga",
["Koyo"] = "koh",
["Koyra Chiini"] = "khq",
["Koyukon"] = "koy",
["Kpagua"] = "kuw",
["Kpala"] = "kpl",
["Kpan"] = "kpk",
["Kpasam"] = "pbn",
["Kpati"] = "koc",
["Kpatili"] = "kym",
["Kpee"] = "cpo",
["Kpelle"] = "kpe",
["Kpessi"] = "kef",
["Kplang"] = "kph",
["Krache"] = "kye",
["Krahô"] = "xra",
["Krenak"] = "kqq",
["Krevinian"] = "zkv",
["Kreye"] = "xre",
["Krikati-Timbira"] = "xri",
["Krim"] = "krm",
["Krisa"] = "ksi",
["Kristang"] = "mcm",
["Krobu"] = "kxb",
["Krongo"] = "kgo",
["Kua"] = "tyu",
["Kua-nsi"] = "ykn",
["Kuamasi"] = "yku",
["Kuan"] = "uan",
["Kuanhua"] = "xnh",
["Kube"] = "kgf",
["Kubi"] = "kof",
["Kubo"] = "jko",
["Kubu"] = "kvb",
["Kucong"] = "lkc",
["Kudu-Camo"] = "kov",
["Kugama"] = "kow",
["Kugbo"] = "kes",
["Kugu-Muminh"] = "xmh",
["Kui (Indonesia)"] = "kvd",
["Kuijau"] = "dkr",
["Kuikúro"] = "kui",
["Kujarge"] = "vkj",
["Kuk"] = "kfn",
["Kukatja"] = "kux",
["Kukele"] = "kez",
["Kukkuzi"] = "urj-kuk",
["Kuku-Mangk"] = "xmq",
["Kuku-Mu'inh"] = "xmp",
["Kuku-Thaypan"] = "typ",
["Kuku-Ugbanh"] = "ugb",
["Kuku-Uwanh"] = "uwa",
["Kuku-Yalanji"] = "gvn",
["Kula"] = "tpg",
["Kulaal"] = "glj",
["Kulere"] = "kul",
["Kulfa"] = "kxj",
["Kulina"] = "xpk",
["Kulisusu"] = "vkl",
["Kulon"] = "uon",
["Kulung"] = "kle",
["Kumak"] = "nee",
["Kumalu"] = "ksl",
["Kumam"] = "kdi",
["Kuman"] = "kue",
["Kumaoni"] = "kfy",
["Kumba"] = "ksm",
["Kumbainggar"] = "kgs",
["Kumbaran"] = "wkb",
["Kumhali"] = "kra",
["Kumu"] = "kmw",
["Kumukio"] = "kuo",
["Kunama"] = "kun",
["Kunbarlang"] = "wlg",
["Kunda"] = "kdn",
["Kunduvadi"] = "wku",
["Kung"] = "kfl",
["Kungarakany"] = "ggk",
["Kungardutyi"] = "gdt",
["Kunggari"] = "kgl",
["Kungkari"] = "lku",
["Kuni"] = "kse",
["Kuni-Boazi"] = "kvg",
["Kunimaipa"] = "kup",
["Kunja"] = "pep",
["Kunjen"] = "kjn",
["Kunyi"] = "njx",
["Kunza"] = "kuz",
["Kuot"] = "kto",
["Kupa"] = "kug",
["Kupang Malay"] = "mkn",
["Kupsabiny"] = "kpz",
["Kur"] = "kuv",
["Kura Ede Nago"] = "nqk",
["Kurama"] = "krh",
["Kuranko"] = "knk",
["Tiếng Kuri"] = "nbn",
["Kuria"] = "kuj",
["Kurmukar"] = "kfv",
["Kurnai"] = "unn",
["Kurrama"] = "vku",
["Kurti"] = "ktm",
["Kurtjar"] = "gdj",
["Kurudu"] = "kjr",
["Kuruáya"] = "kyr",
["Tiếng Kusaal"] = "kus",
["Kusaghe"] = "ksg",
["Kustenau"] = "awd-kus",
["Kusu"] = "ksv",
["Kusunda"] = "kgg",
["Kuthant"] = "xut",
["Kutto"] = "kpa",
["Kutu"] = "kdc",
["Kuturmi"] = "khj",
["Kuuk Thaayorre"] = "thd",
["Kuuk Yak"] = "uky",
["Kuuku-Ya'u"] = "kuy",
["Kuvale"] = "olu",
["Kuwaa"] = "blh",
["Kuwaataay"] = "cwt",
["Kuwani"] = "paa-kwn",
["Kwa'"] = "bko",
["Kwaami"] = "ksq",
["Kwadi"] = "kwz",
["Kwaio"] = "kwd",
["Kwaja"] = "kdz",
["Kwak"] = "kwq",
["Kwakum"] = "kwu",
["Kwalhioqua-Tlatskanai"] = "qwt",
["Kwama"] = "kmq",
["Kwambi"] = "kwm",
["Kwamera"] = "tnk",
["Kwami"] = "ktf",
["Kwamtim One"] = "okk",
["Kwang"] = "kvi",
["Kwanga"] = "kwj",
["Kwangali"] = "kwn",
["Kwanka"] = "bij",
["Kwara'ae"] = "kwf",
["Kwasio"] = "nmg",
["Kwaya"] = "kya",
["Kwaza"] = "xwa",
["Kwegu"] = "xwg",
["Kwer"] = "kwr",
["Kwerba"] = "kwe",
["Kwerba Mamberamo"] = "xwr",
["Kwere"] = "cwe",
["Kwerisa"] = "kkb",
["Kwese"] = "kws",
["Kwesten"] = "kwt",
["Kwini"] = "gww",
["Kwinsu"] = "kuc",
["Kwoma"] = "kmo",
["Kwomtari"] = "kwo",
["Kyak"] = "bka",
["Kyaka"] = "kyc",
["Kyan-Karyaw Naga"] = "nqq",
["Kyenele"] = "kql",
["Kyenga"] = "tye",
["Kyerung"] = "kgy",
["Kélé"] = "keb",
["Kómnzo"] = "paa-kom",
["La'bi"] = "lbi",
["Laal"] = "gdm",
["Laba"] = "lau",
["Label"] = "lbb",
["Labir"] = "jku",
["Labo"] = "mwi",
["Labo Phowa"] = "ypb",
["Labu"] = "lbu",
["Labuk-Kinabatangan Kadazan"] = "dtb",
["Lacandon"] = "lac",
["Lachi"] = "lbt",
["Lachiguiri Zapotec"] = "zpa",
["Lachixío Zapotec"] = "zpl",
["Ladji-Ladji"] = "llj",
["Laeko-Libuat"] = "lkl",
["Lafofa"] = "laf",
["Laghu"] = "lgb",
["Laghuu"] = "lgh",
["Lagwan"] = "kot",
["Laha (Indonesia)"] = "lhh",
["Tiếng La Ha"] = "lha",
["Lahanan"] = "lhn",
["Lahu Shi"] = "lhi",
["Lahul Lohar"] = "lhl",
["Laimbue"] = "lmx",
["Laitu Chin"] = "clj",
["Laiyolo"] = "lji",
["Laka"] = "lak",
["Lake Miwok"] = "lmw",
["Lakha"] = "lkh",
["Lakkia"] = "lbc",
["Lakon"] = "lkn",
["Lakondê"] = "lkd",
["Lakota Dida"] = "dic",
["Lala (New Guinea)"] = "nrz",
["Lala (South Africa)"] = "bnt-lal",
["Lala-Bisa"] = "leb",
["Lala-Roba"] = "lla",
["Lalana Chinantec"] = "cnl",
["Lamaholot"] = "slp",
["Lamalera"] = "lmr",
["Lamang"] = "hia",
["Lamatuka"] = "lmq",
["Lamba"] = "lam",
["Lambichhong"] = "lmh",
["Lambya"] = "lai",
["Lame"] = "bma",
["Lamenu"] = "lmu",
["Lamet"] = "lbn",
["Lamja-Dengsa-Tola"] = "ldh",
["Lamma"] = "lev",
["Lamnso'"] = "lns",
["Lamogai"] = "lmg",
["Lampung Api"] = "ljp",
["Lamu"] = "llh",
["Lamu-Lamu"] = "lby",
["Lanas Lobu"] = "ruu",
["Landoma"] = "ldm",
["Lang'e"] = "yne",
["Langam"] = "lnm",
["Langbashe"] = "lna",
["Langi"] = "lag",
["Langnian Buyang"] = "yln",
["Lango (Sudan)"] = "lno",
["Lango (Uganda)"] = "laj",
["Lanima"] = "lnw",
["Lao Naga"] = "nlq",
["Laopang"] = "lbg",
["Laos Sign Language"] = "lso",
["Lapaguía-Guivini Zapotec"] = "ztl",
["Lapine"] = "art-lap",
["Lapuyan Subanun"] = "laa",
["Laragia"] = "lrg",
["Larantuka Malay"] = "lrt",
["Lardil"] = "lbz",
["Larevat"] = "lrv",
["Larike-Wakasihu"] = "alo",
["Laro"] = "lro",
["Larteh"] = "lar",
["Laru"] = "lan",
["Lasgerdi"] = "lsa",
["Lasi"] = "lss",
["Latu"] = "ltu",
["Latvian Sign Language"] = "lsl",
["Lau"] = "llu",
["Laua"] = "luf",
["Lauan"] = "llx",
["Lauje"] = "law",
["Laura"] = "lur",
["Laurentian"] = "lre",
["Lavatbura-Lamusong"] = "lbv",
["Lawangan"] = "lbx",
["Lawu"] = "lwu",
["Lawunuia"] = "tgi",
["Laze"] = "tbq-laz",
["Lealao Chinantec"] = "cle",
["Leco"] = "lec",
["Ledo Kaili"] = "lew",
["Leelau"] = "ldk",
["Lefa"] = "lfa",
["Lega-Mwenga"] = "lgm",
["Lega-Shabunda"] = "lea",
["Legbo"] = "agb",
["Legenyem"] = "lcc",
["Lehali"] = "tql",
["Lehalurup"] = "urr",
["Leinong Naga"] = "lzn",
["Leipon"] = "lek",
["Lela"] = "dri",
["Lelak"] = "llk",
["Lele (Chad)"] = "lln",
["Lele (Congo)"] = "lel",
["Lele (Guinea)"] = "llc",
["Lele (New Guinea)"] = "lle",
["Lelepa"] = "lpa",
["Lembena"] = "leq",
["Lemerig"] = "lrz",
["Lemio"] = "lei",
["Lemolang"] = "ley",
["Lemoro"] = "ldj",
["Lenakel"] = "tnl",
["Lendu"] = "led",
["Lengilu"] = "lgi",
["Lengo"] = "lgr",
["Lengola"] = "lej",
["Lenje"] = "leh",
["Lenkau"] = "ler",
["Lenyima"] = "ldg",
["Lepki"] = "lpe",
["Lere"] = "gnh",
["Lese"] = "les",
["Lesing-Gelimi"] = "let",
["Letemboi"] = "nms",
["Leti (Cameroon)"] = "leo",
["Leti (Indonesia)"] = "lti",
["Levuka"] = "lvu",
["Lewo Eleng"] = "lwe",
["Lewotobi"] = "lwt",
["Leyigha"] = "ayi",
["Lhokpu"] = "lhp",
["Li'o"] = "ljl",
["Liana-Seti"] = "ste",
["Liangmai Naga"] = "njn",
["Liberian Kreyol"] = "lir",
["Libinza"] = "liz",
["Libon Bikol"] = "lbl",
["Liburnian"] = "xli",
["Libyan Sign Language"] = "lbs",
["Ligbi"] = "lig",
["Ligenza"] = "lgz",
["Lihir"] = "lih",
["Lika"] = "lik",
["Liki"] = "lio",
["Likila"] = "lie",
["Likuba"] = "kxx",
["Likum"] = "lib",
["Likwala"] = "kwc",
["Lilau"] = "lll",
["Limassa"] = "bme",
["Limbu"] = "lif",
["Limi"] = "ylm",
["Limilngan"] = "lmc",
["Linear A"] = "lab",
["Lingkhim"] = "lii",
["Lingua Franca Nova"] = "lfn",
["Linngithigh"] = "lnj",
["Lipo"] = "lpo",
["Lisabata-Nuniali"] = "lcs",
["Lisela"] = "lcl",
["Lish"] = "lsh",
["Lishán Didán"] = "trg",
["Lithuanian Sign Language"] = "lls",
["Little Swanport"] = "aus-lsw",
["Litzlitz"] = "lzl",
["Lizu"] = "sit-liz",
["Lo-Toga"] = "lht",
["Loarki"] = "lrk",
["Lobala"] = "loq",
["Logo"] = "log",
["Logol"] = "lof",
["Logooli"] = "rag",
["Logorik"] = "liu",
["Lokaa"] = "yaz",
["Loko"] = "lok",
["Lokoya"] = "lky",
["Lola"] = "lcd",
["Lolak"] = "llq",
["Lole"] = "llg",
["Lolo"] = "llb",
["Loloda"] = "loa",
["Lolopo"] = "ycl",
["Lomaiviti"] = "lmv",
["Lomakka"] = "loi",
["Lombi"] = "lmi",
["Lombo"] = "loo",
["Lomwe"] = "ngl",
["Loncong"] = "lce",
["Long Phuri Naga"] = "lpn",
["Long Wat"] = "ttw",
["Longgu"] = "lgu",
["Longto"] = "wok",
["Longuda"] = "lnu",
["Loniu"] = "los",
["Lonwolwol"] = "crc",
["Loo"] = "ldo",
["Lopa"] = "lop",
["Lope"] = "yiu",
["Lopi"] = "lov",
["Lopit"] = "lpx",
["Lorang"] = "lrn",
["Lorediakarkar"] = "lnn",
["Lote"] = "uvl",
["Lotud"] = "dtr",
["Lotuko"] = "lot",
["Loun"] = "lox",
["Loup A"] = "xlo",
["Loup B"] = "xlb",
["Lovono"] = "vnk",
["Lower Burdekin"] = "xbb",
["Lower Chehalis"] = "cea",
["Lower Grand Valley Dani"] = "dni",
["Lower Nossob"] = "nsb",
["Lower Southern Aranda"] = "axl",
["Lower Ta'oih"] = "tto",
["Lowland Oaxaca Chontal"] = "clo",
["Lowland Tarahumara"] = "tac",
["Loxicha Zapotec"] = "ztp",
["Lozi"] = "loz",
["Luang"] = "lex",
["Tiếng Luba-Kasai"] = "lua",
["Lubila"] = "kcc",
["Lubu"] = "lcf",
["Tiếng Kalinga Lubuagan"] = "knb",
["Luchazi"] = "lch",
["Lufu"] = "ldq",
["Lugbara"] = "lgg",
["Luguru"] = "ruf",
["Luhu"] = "lcq",
["Luimbi"] = "lum",
["Luiseño"] = "lui",
["Lule"] = "ule",
["Lule Sami"] = "smj",
["Lumba-Yakkha"] = "luu",
["Lumbee"] = "lmz",
["Lumun"] = "lmd",
["Lun Bawang"] = "lnd",
["Luna"] = "luj",
["Lunda"] = "lun",
["Lungga"] = "lga",
["Luo"] = "luo",
["Luopohe Hmong"] = "hml",
["Luri (Nigeria)"] = "ldd",
["Lusengo"] = "lse",
["Lusi"] = "khl",
["Lusitanian"] = "xls",
["Lutachoni"] = "lts",
["Lutos"] = "ndy",
["Luvale"] = "lue",
["Luwati"] = "luv",
["Luwo"] = "lwo",
["Luyana"] = "lyn",
["Lwalu"] = "lwa",
["Lwel"] = "lvl",
["Lyélé"] = "lee",
["Tiếng Láadan"] = "ldn",
["Láá Láá Bwamu"] = "bwj",
["Ma"] = "msj",
["Ma Manda"] = "skc",
["Ma'di"] = "mhi",
["Ma'ya"] = "slz",
["Maba"] = "mqa",
["Mabaale"] = "mmz",
["Mabaka Valley Kalinga"] = "kkg",
["Mabire"] = "muj",
["Maca"] = "mca",
["Macaguaje"] = "mcl",
["Macaguán"] = "mbn",
["Macanese"] = "mzs",
["Macau Pidgin Portuguese"] = "crp-mpp",
["Machame"] = "jmc",
["Machiguenga"] = "mcb",
["Machinere"] = "mpd",
["Machinga"] = "mvw",
["Macoris"] = "nai-mac",
["Macuna"] = "myy",
["Mada (Cameroon)"] = "mxu",
["Mada (Nigeria)"] = "mda",
["Madagascar Sign Language"] = "mzc",
["Madak"] = "mmx",
["Maden"] = "xmx",
["Madhi Madhi"] = "dmd",
["Madi"] = "grg",
["Madngele"] = "zml",
["Madukayang Kalinga"] = "kmd",
["Mae"] = "mme",
["Maek"] = "hmk",
["Maeng Itneg"] = "itt",
["Mafa"] = "maf",
["Mafea"] = "mkv",
["Mag-Anchi Ayta"] = "sgb",
["Mag-Indi Ayta"] = "blx",
["Magadhi Prakrit"] = "inc-mgd",
["Magahat"] = "mtw",
["Magdalena Peñasco Mixtec"] = "xtm",
["Magiyi"] = "gmg",
["Magoma"] = "gmx",
["Magɨ"] = "gkd",
["Mahican"] = "mjy",
["Mahongwe"] = "mhb",
["Mahou"] = "mxx",
["Tiếng Maia"] = "sks",
["Maiadomu"] = "mzz",
["Maiani"] = "tnh",
["Maii"] = "mmm",
["Mailu"] = "mgu",
["Maindo"] = "cwb",
["Mairasi"] = "zrs",
["Maisin"] = "mbq",
["Maiwa (Indonesia)"] = "wmm",
["Maiwa (New Guinea)"] = "mti",
["Maiwala"] = "mum",
["Majera"] = "xmj",
["Majhi"] = "mjz",
["Majhwar"] = "mmj",
["Mak (China)"] = "mkg",
["Mak (Nigeria)"] = "pbl",
["Makaa"] = "mcp",
["Makah"] = "myh",
["Tiếng Makalero"] = "mjb",
["Tiếng Makasae"] = "mkz",
["Makassar Malay"] = "mfp",
["Makayam"] = "aup",
["Makhuwa"] = "vmw",
["Makhuwa-Marrevone"] = "xmc",
["Makhuwa-Meetto"] = "mgh",
["Makhuwa-Moniga"] = "mhm",
["Makhuwa-Saka"] = "xsq",
["Makhuwa-Shirima"] = "vmk",
["Maklew"] = "mgf",
["Makolkol"] = "zmh",
["Makonde"] = "kde",
["Maku"] = "xak",
["Maku'a"] = "lva",
["Makuri Naga"] = "jmn",
["Makuráp"] = "mpu",
["Makwe"] = "ymk",
["Makyan Naga"] = "umn",
["Mal Paharia"] = "mkb",
["Mala (New Guinea)"] = "ped",
["Mala (Nigeria)"] = "ruy",
["Malaccan Creole Malay"] = "ccm",
["Malalamai"] = "mmt",
["Malalí"] = "sai-mal",
["Malango"] = "mln",
["Malas"] = "mkr",
["Malasanga"] = "mqz",
["Malawi Lomwe"] = "lon",
["Malawian Sign Language"] = "lws",
["Malayic Dayak"] = "xdy",
["Malaynon"] = "mlz",
["Malaysian Sign Language"] = "xml",
["Malba Birifor"] = "bfo",
["Male"] = "mdc",
["Maleu-Kilenge"] = "mgl",
["Malfaxal"] = "mlx",
["Malgana"] = "vml",
["Malgbe"] = "mxf",
["Mali"] = "gcc",
["Malibu"] = "sai-mlb",
["Malila"] = "mgq",
["Malimba"] = "mzd",
["Malimpung"] = "mli",
["Malol"] = "mbk",
["Maltese Sign Language"] = "mdl",
["Malua Bay"] = "mll",
["Malvi"] = "mup",
["Maléku Jaíka"] = "gut",
["Mam"] = "mam",
["Mama"] = "mma",
["Mamaa"] = "mhf",
["Mamaindé"] = "wmd",
["Mamanwa"] = "mmn",
["Tiếng Senoufo Mamara"] = "myk",
["Mamasa"] = "mqj",
["Mambae"] = "mgm",
["Mambai"] = "mcs",
["Mamboru"] = "mvd",
["Mambwe-Lungu"] = "mgr",
["Mamuju"] = "mqx",
["Mamulique"] = "emm",
["Mamusi"] = "kdf",
["Mamvu"] = "mdi",
["Man Met"] = "mml",
["Manado Malay"] = "xmm",
["Manam"] = "mva",
["Manambu"] = "mle",
["Manangba"] = "nmm",
["Manangkari"] = "znk",
["Manao"] = "awd-man",
["Manda (Australia)"] = "zma",
["Manda (Tanzania)"] = "mgs",
["Tiếng Manda"] = "mid",
["Mandailing Batak"] = "btm",
["Mandalorian"] = "art-man",
["Mandan"] = "mhq",
["Mandandanyi"] = "zmk",
["Mandar"] = "mdr",
["Mandari"] = "mqu",
["Mander"] = "mqr",
["Mandingo"] = "man",
["Mandjak"] = "mfv",
["Mandobo Atas"] = "aax",
["Mandobo Bawah"] = "bwp",
["Manem"] = "jet",
["Mangala"] = "mem",
["Mangarayi"] = "mpc",
["Mangarevan"] = "mrv",
["Mangayat"] = "myj",
["Mangbetu"] = "mdj",
["Mangbutu"] = "mdk",
["Mangerr"] = "zme",
["Mangga Buang"] = "mmo",
["Tiếng Mango"] = "mge",
["Mangole"] = "mqc",
["Mangseng"] = "mbh",
["Manigri-Kambolé Ede Nago"] = "xkb",
["Manikion"] = "mnx",
["Manipa"] = "mqp",
["Mankiyali"] = "nlm",
["Manna-Dora"] = "mju",
["Manombai"] = "woo",
["Mansoanka"] = "msw",
["Manta"] = "myg",
["Mantsi"] = "nty",
["Manusela"] = "wha",
["Manya"] = "mzj",
["Manyawa"] = "mny",
["Manza"] = "mzv",
["Mao Naga"] = "nbi",
["Mape"] = "mlh",
["Mapena"] = "mnm",
["Mapia"] = "mpy",
["Mapidian"] = "mpw",
["Mapoyo"] = "mcg",
["Mapun"] = "sjm",
["Mara"] = "mec",
["Mara Chin"] = "mrh",
["Marachi"] = "lri",
["Maraghei"] = "vmh",
["Maragus"] = "mrs",
["Maram Naga"] = "nma",
["Marama"] = "lrm",
["Maranungku"] = "zmr",
["Mararit"] = "mgb",
["Maratino"] = "sai-mar",
["Marawan"] = "awd-mar",
["Marba"] = "mpg",
["Marenje"] = "vmr",
["Marfa"] = "mvu",
["Margany"] = "zmc",
["Marghi South"] = "mfm",
["Margi"] = "mrt",
["Maria"] = "mds",
["Mariaté"] = "awd-mrt",
["Maridan"] = "zmd",
["Maridjabin"] = "zmj",
["Marik"] = "dad",
["Marimanindji"] = "zmm",
["Marind"] = "mrz",
["Maring"] = "mbw",
["Maringarr"] = "zmt",
["Marino"] = "mrb",
["Mariri"] = "mqi",
["Maritime Sign Language"] = "nsr",
["Maritsauá"] = "msp",
["Mariyedi"] = "zmy",
["Marka"] = "rkm",
["Markweeta"] = "enb",
["Maroon Spirit Language"] = "cpe-mar",
["Marovo"] = "mvo",
["Marrgu"] = "mhg",
["Marriammu"] = "xru",
["Marrithiyel"] = "mfr",
["Martha's Vineyard Sign Language"] = "mre",
["Marti Ke"] = "zmg",
["Martu Wangka"] = "mpj",
["Marúbo"] = "mzr",
["Masaba"] = "myx",
["Masadiit Itneg"] = "tis",
["Masakará"] = "sai-msk",
["Masalit"] = "mls",
["Masana"] = "mcn",
["Masbate Sorsogon"] = "bks",
["Mashco Piro"] = "cuj",
["Mashi"] = "mho",
["Masimasi"] = "ism",
["Masiwang"] = "bnf",
["Maslam"] = "msv",
["Masmaje"] = "mes",
["Massachusett"] = "wam",
["Massalat"] = "mdg",
["Massep"] = "mvs",
["Matagalpa"] = "mtn",
["Matanawi"] = "sai-mat",
["Matbat"] = "xmt",
["Matengo"] = "mgv",
["Matepi"] = "mqe",
["Matigsalug Manobo"] = "mbt",
["Matipuhy"] = "mzo",
["Matlatzinca"] = "mat",
["Mato"] = "met",
["Mato Grosso Arára"] = "axg",
["Matsés"] = "mcf",
["Mattole"] = "mvb",
["Matukar"] = "mjk",
["Matumbi"] = "mgw",
["Matya Samo"] = "stj",
["Matís"] = "mpq",
["Mauritian Sign Language"] = "lsy",
["Mauwake"] = "mhl",
["Mawa"] = "mcw",
["Mawak"] = "mjj",
["Mawan"] = "mcz",
["Mawayana"] = "mzx",
["Mawchi"] = "mke",
["Mawes"] = "mgk",
["Maxakalí"] = "mbl",
["Maxi Gbe"] = "mxl",
["Maya Samo"] = "sym",
["Mayaguduna"] = "xmy",
["Mayangna"] = "yan",
["Mayawali"] = "yxa",
["Maybrat"] = "ayz",
["Mayeka"] = "myc",
["Mayi-Thakurti"] = "xyt",
["Maykulan"] = "mnt",
["Maynas"] = "sai-mys",
["Mayo"] = "mfy",
["Mayogo"] = "mdm",
["Mayoyao Ifugao"] = "ifu",
["Maypure"] = "awd-mpr",
["Mazagway"] = "dkx",
["Mazaltepec Zapotec"] = "zpy",
["Mazatlán Mazatec"] = "vmz",
["Mazatlán Mixe"] = "mzl",
["Mba"] = "mfc",
["Mbala"] = "mdp",
["Mbalanhu"] = "lnb",
["Mbandja"] = "zmz",
["Mbangala"] = "mxg",
["Mbangi"] = "mgn",
["Mbangwe"] = "zmn",
["Mbara (Australia)"] = "mvl",
["Mbara (Chad)"] = "mpk",
["Mbariman-Gudhinma"] = "zmv",
["Mbati"] = "mdn",
["Mbato"] = "gwa",
["Mbay"] = "myb",
["Mbe"] = "mfo",
["Mbe'"] = "mtk",
["Mbelime"] = "mql",
["Mbere"] = "mdt",
["Mbesa"] = "zms",
["Mbiywom"] = "aus-mbi",
["Mbo (Cameroon)"] = "mbo",
["Mbo (Congo)"] = "zmw",
["Mboi"] = "moi",
["Mboko"] = "mdu",
["Mbole"] = "mdq",
["Mbonga"] = "xmb",
["Mbongno"] = "bgu",
["Mbosi"] = "mdw",
["Mbowe"] = "mxo",
["Mbre"] = "mka",
["Mbu'"] = "muc",
["Mbudum"] = "xmd",
["Mbugu"] = "mhd",
["Mbugwe"] = "mgz",
["Mbuko"] = "mqb",
["Mbukushu"] = "mhw",
["Mbula"] = "mna",
["Mbula-Bwazza"] = "mbu",
["Mbule"] = "mlb",
["Mbulungish"] = "mbv",
["Mbum"] = "mdd",
["Mbunda"] = "mck",
["Mbunga"] = "mgy",
["Mburku"] = "bbt",
["Mbuun"] = "zmp",
["Mbwela"] = "mfu",
["Mea"] = "meg",
["Mebu"] = "mjn",
["Mecayapan Nahuatl"] = "nhx",
["Medebur"] = "mjm",
["Medefaidrin"] = "dmf",
["Mednyj Aleut"] = "mud",
["Mefele"] = "mfj",
["Megam"] = "mef",
["Mehek"] = "nux",
["Mehináku"] = "mmh",
["Mekeo"] = "mek",
["Mekmek"] = "mvk",
["Mekwei"] = "msf",
["Mekéns"] = "skf",
["Mel-Khaonh"] = "hkn",
["Mele-Fila"] = "mxe",
["Mendalam Kayan"] = "xkd",
["Mengaka"] = "xmg",
["Mengen"] = "mee",
["Menien"] = "sai-men",
["Menka"] = "mea",
["Menya"] = "mcr",
["Meoswar"] = "mvx",
["Mer"] = "mnu",
["Meramera"] = "mxm",
["Merei"] = "lmb",
["Merey"] = "meq",
["Merlav"] = "mrm",
["Meroitic"] = "xmr",
["Meru"] = "mer",
["Mese"] = "mci",
["Mesme"] = "zim",
["Mesmes"] = "mys",
["Meta'"] = "mgo",
["Metlatónoc Mixtec"] = "mxv",
["Mewari"] = "mtr",
["Mewati"] = "wtm",
["Mexican Sign Language"] = "mfs",
["Meyah"] = "mej",
["Mezontla Popoloca"] = "pbe",
["Mfinu"] = "zmf",
["Mfumte"] = "nfu",
["Mgbo"] = "gmz",
["Mian"] = "mpt",
["Miani"] = "pla",
["Micha"] = "yiq",
["Michif"] = "crg",
["Michigamea"] = "cmm",
["Michoacán Nahuatl"] = "ncl",
["Mid Grand Valley Dani"] = "dnt",
["Mid-Southern Banda"] = "bjo",
["Middle Assamese"] = "inc-mas",
["Middle Bengali"] = "inc-mbn",
["Tiếng Cornwall trung đại"] = "cnx",
["Middle Kannada"] = "dra-mkn",
["Middle Median"] = "xme-mid",
["Middle Newar"] = "nwx",
["Tiếng Na Uy trung đại"] = "gmq-mno",
["Middle Watut"] = "mpl",
["Midob"] = "mei",
["Migaama"] = "mmy",
["Migabac"] = "mpp",
["Miji"] = "sjl",
["Miju"] = "mxj",
["Mikasuki"] = "mik",
["Milang"] = "und-mil",
["Mili"] = "ymh",
["Millcayac"] = "sai-mil",
["Miltu"] = "mlj",
["Miluk"] = "iml",
["Milyan"] = "imy",
["Mimi of Decorse"] = "und-mmd",
["Mimi of Nachtigal"] = "und-mmn",
["Mina"] = "hna",
["Minaean"] = "inm",
["Minang"] = "xrg",
["Minanibai"] = "mcv",
["Minaveha"] = "mvn",
["Minderico"] = "drc",
["Mindiri"] = "mpn",
["Mingang Doso"] = "mko",
["Mingo"] = "iro-min",
["Tiếng Huitoto Minica"] = "hto",
["Minidien"] = "wii",
["Minigir"] = "vmg",
["Minjungbal"] = "xjb",
["Minkin"] = "xxm",
["Minoan"] = "omn",
["Minokok"] = "mqq",
["Miraya Bikol"] = "rbl",
["Mire"] = "mvh",
["Miriti"] = "mmv",
["Miriwoong Sign Language"] = "rsm",
["Miriwung"] = "mep",
["Mirpur Panjabi"] = "pmu",
["Misantla Totonac"] = "tlc",
["Miship"] = "mjs",
["Misima-Paneati"] = "mpx",
["Mitlatongo Mixtec"] = "vmm",
["Mittu"] = "mwu",
["Mituku"] = "zmq",
["Miu"] = "mpo",
["Miwa"] = "vmi",
["Mixed Great Andamanese"] = "gac",
["Mixifore"] = "mfg",
["Mixtepec Mixtec"] = "mix",
["Mixtepec Zapotec"] = "zpm",
["Miya"] = "mkf",
["Miyobe"] = "soy",
["Mlap"] = "kja",
["Mlomp"] = "mlo",
["Mmaala"] = "mmu",
["Mmani"] = "buy",
["Mmen"] = "bfm",
["Mo"] = "wkd",
["Mo'da"] = "gbn",
["Moabite"] = "obm",
["Moba"] = "mfq",
["Mobilian"] = "mod",
["Mobumrin Aizi"] = "ahm",
["Mocana"] = "sai-mcn",
["Mochi"] = "old",
["Mochica"] = "omc",
["Mocho"] = "mhc",
["Mocoví"] = "moc",
["Modang"] = "mxd",
["Modole"] = "mqo",
["Moere"] = "mvq",
["Mofu-Gudur"] = "mif",
["Mogum"] = "mou",
["Moi (Congo)"] = "mow",
["Moi (Indonesia)"] = "mxn",
["Moikodi"] = "mkp",
["Moingi"] = "mwz",
["Mojave"] = "mov",
["Moji"] = "ymi",
["Mok"] = "mqt",
["Mokerang"] = "mft",
["Mokole"] = "mkl",
["Mokpwe"] = "bri",
["Molale"] = "mbe",
["Moldova Sign Language"] = "vsi",
["Molengue"] = "bxc",
["Molima"] = "mox",
["Molmo One"] = "aun",
["Molo"] = "zmo",
["Molof"] = "msl",
["Moloko"] = "mlw",
["Mom Jango"] = "ver",
["Moma"] = "myl",
["Momare"] = "msz",
["Mombo Dogon"] = "dmb",
["Mombum"] = "mso",
["Momina"] = "mmb",
["Momuna"] = "mqf",
["Monastic Sign Language"] = "mzg",
["Mondropolon"] = "npn",
["Mondé"] = "mnd",
["Mongol"] = "mgt",
["Mongolian Sign Language"] = "msr",
["Moni"] = "mnz",
["Monimbo"] = "mom",
["Mono (California)"] = "mnr",
["Mono (Cameroon)"] = "mru",
["Mono (Congo)"] = "mnh",
["Monsang Naga"] = "nmh",
["Montagnais"] = "moe",
["Montana Salish"] = "fla",
["Montol"] = "mtl",
["Monumbo"] = "mxk",
["Monzombo"] = "moj",
["Moo"] = "gwg",
["Mopan Maya"] = "mop",
["Mor (Austronesian)"] = "mhz",
["Mor (Papuan)"] = "moq",
["Moraid"] = "msg",
["Moran"] = "sit-mor",
["Morawa"] = "mze",
["Morelos Nahuatl"] = "nhm",
["Morerebi"] = "xmo",
["Moresada"] = "msx",
["Mori Atas"] = "mzq",
["Mori Bawah"] = "xmz",
["Morigi"] = "mdb",
["Moroccan Sign Language"] = "xms",
["Morom"] = "bdo",
["Moronene"] = "mqn",
["Morori"] = "mok",
["Morouas"] = "mrp",
["Mortlockese"] = "mrl",
["Moru"] = "mgd",
["Mosimo"] = "mqv",
["Moskona"] = "mtj",
["Motembo"] = "tmv",
["Mouk-Aria"] = "mwh",
["Mount Iraya Agta"] = "atl",
["Mount Iriga Agta"] = "agz",
["Mountain Koiari"] = "kpx",
["Mouwase"] = "jmw",
["Movima"] = "mzp",
["Moyadan Itneg"] = "ity",
["Mozambican Sign Language"] = "mzy",
["Mpalitjanh"] = "xpj",
["Mpiemo"] = "mcx",
["Mpiin"] = "bnt-mpi",
["Mpinda"] = "pnd",
["Mpongmpong"] = "mgg",
["Mpoto"] = "mpa",
["Mpotovoro"] = "mvt",
["Mpuono"] = "bnt-mpu",
["Mpur"] = "akc",
["Mro Chin"] = "cmr",
["Mru"] = "mro",
["Mser"] = "kqx",
["Mualang"] = "mtd",
["Mubami"] = "tsx",
["Mubi"] = "mub",
["Mucuchí"] = "sai-muc",
["Muda"] = "ymd",
["Muduapa"] = "wiv",
["Muellama"] = "sai-mue",
["Mufian"] = "aoj",
["Muher"] = "sem-mhr",
["Muinane"] = "bmr",
["Mukha-Dora"] = "mmk",
["Mukulu"] = "moz",
["Mulaha"] = "mfw",
["Mulam"] = "mlm",
["Mulao"] = "giu",
["Mullukmulluk"] = "mpb",
["Muluridyi"] = "vmu",
["Mum"] = "kqa",
["Mumuye"] = "mzm",
["Mundang"] = "mua",
["Mundani"] = "mnf",
["Mundat"] = "mmf",
["Mundolinco"] = "art-mun",
["Mundurukú"] = "myu",
["Mungaka"] = "mhk",
["Mungbam"] = "mij",
["Mungkip"] = "mpv",
["Muniche"] = "myr",
["Munit"] = "mtc",
["Mur Pano"] = "tkv",
["Muratayak"] = "asx",
["Murik (Malaysia)"] = "mxr",
["Murik (New Guinea)"] = "mtf",
["Murkim"] = "rmh",
["Murrinh-Patha"] = "mwf",
["Tiếng Huitoto Murui"] = "huu",
["Murupi"] = "mqw",
["Muruwari"] = "zmu",
["Musan"] = "mmp",
["Musar"] = "mmi",
["Musasa"] = "smm",
["Musey"] = "mse",
["Musgu"] = "mug",
["Muskum"] = "mje",
["Musom"] = "msu",
["Mussau-Emira"] = "emi",
["Mutu"] = "tuc",
["Muya"] = "mvm",
["Muyang"] = "muy",
["Muyuw"] = "myw",
["Muzi"] = "ymz",
["Muzo"] = "sai-muz",
["Mvanip"] = "mcj",
["Mvuba"] = "mxh",
["Mwaghavul"] = "sur",
["Mwali Comorian"] = "wlc",
["Mwani"] = "wmw",
["Mwatebu"] = "mwa",
["Mwera"] = "mwe",
["Mwimbi-Muthambi"] = "mws",
["Mysian"] = "yms",
["Mzieme Naga"] = "nme",
["Mághdì"] = "gmd",
["Mün Chin"] = "mwq",
["Mündü"] = "muh",
["N'Ko"] = "nqo",
["Na"] = "nbt",
["Na'vi"] = "art-nav",
["Naaba"] = "nao",
["Naba"] = "mne",
["Nabak"] = "naf",
["Nabi"] = "mty",
["Nachering"] = "ncd",
["Nadruvian"] = "ndf",
["Nadëb"] = "mbj",
["Nafi"] = "srf",
["Nafri"] = "nxx",
["Naga Pidgin"] = "nag",
["Nagarchal"] = "nbg",
["Nage"] = "nxe",
["Nagtipunan Agta"] = "phi-nag",
["Nagu"] = "ngr",
["Nagumi"] = "ngv",
["Nahali"] = "nlx",
["Nahari"] = "nhh",
["Nahavaq"] = "sns",
["Nai"] = "bio",
["Najdi Arabic"] = "ars",
["Naka'ela"] = "nae",
["Nakai"] = "nkj",
["Nakame"] = "nib",
["Nakanai"] = "nak",
["Nakara"] = "nck",
["Nake"] = "nbk",
["Naki"] = "mff",
["Nakwi"] = "nax",
["Nalca"] = "nlc",
["Nali"] = "nss",
["Nalik"] = "nal",
["Nalu"] = "naj",
["Nalögo"] = "nlz",
["Namakura"] = "nmk",
["Namat"] = "nkm",
["Nambo"] = "ncm",
["Nambya"] = "nmq",
["Namia"] = "nnm",
["Namiae"] = "nvm",
["Namibian Sign Language"] = "nbs",
["Namla"] = "naa",
["Namo"] = "mxw",
["Namonuito"] = "nmt",
["Namosi-Naitasiri-Serua"] = "bwb",
["Namuyi"] = "nmy",
["Nancere"] = "nnc",
["Nande"] = "nnb",
["Nandi"] = "niq",
["Nanerigé Sénoufo"] = "sen",
["Nanga Dama Dogon"] = "nzz",
["Nanti"] = "cox",
["Nanticoke"] = "nnt",
["Nanubae"] = "afk",
["Naolan"] = "nai-nao",
["Napu"] = "npy",
["Nar Phu"] = "npa",
["Nara"] = "nrb",
["Narak"] = "nac",
["Narango"] = "nrg",
["Narau"] = "nxu",
["Narim"] = "loh",
["Naro"] = "nhr",
["Narom"] = "nrm",
["Narragansett"] = "xnt",
["Narungga"] = "nnr",
["Naruo"] = "ylo",
["Nasal"] = "nsy",
["Nasarian"] = "nvh",
["Nasioi"] = "nas",
["Nasu"] = "ywq",
["Natagaimas"] = "nts",
["Natchez"] = "ncz",
["Nathembo"] = "nte",
["Natioro"] = "nti",
["Natú"] = "sai-nat",
["Natügu"] = "ntu",
["Nauete"] = "nxa",
["Nauna"] = "ncn",
["Nauo"] = "nwo",
["Navarro-Aragonese"] = "roa-oan",
["Navut"] = "nsw",
["Nawaru"] = "nwr",
["Nawathinehena"] = "nwa",
["Nawdm"] = "nmz",
["Nawuri"] = "naw",
["Nayi"] = "noz",
["Ncane"] = "ncr",
["Nchumbulu"] = "nlu",
["Nda'nda'"] = "nnz",
["Ndai"] = "gke",
["Ndaka"] = "ndk",
["Ndali"] = "ndh",
["Ndam"] = "ndm",
["Ndamba"] = "ndj",
["Ndambomo"] = "nxo",
["Ndasa"] = "nda",
["Nde-Gbite"] = "ned",
["Nde-Nsele-Nta"] = "ndd",
["Ndemli"] = "nml",
["Ndendeule"] = "dne",
["Ndengereko"] = "ndg",
["Nding"] = "eli",
["Ndjébbana"] = "djj",
["Ndo"] = "ndp",
["Ndobo"] = "ndw",
["Ndoe"] = "nbb",
["Ndolo"] = "ndl",
["Ndom"] = "nqm",
["Ndombe"] = "ndq",
["Ndoola"] = "ndr",
["Ndrulo"] = "dno",
["Nduga"] = "ndx",
["Ndumu"] = "nmd",
["Ndunda"] = "nuh",
["Ndunga"] = "ndt",
["Ndut"] = "ndv",
["Ndyuka-Trio Pidgin"] = "njt",
["Ndzwani Comorian"] = "wni",
["Nedebang"] = "nec",
["Nefamese"] = "nef",
["Negeri Sembilan Malay"] = "zmi",
["Nehan"] = "nsn",
["Nek"] = "nif",
["Nekgini"] = "nkg",
["Neko"] = "nej",
["Neku"] = "nek",
["Neme"] = "nex",
["Nemi"] = "nem",
["Nen"] = "nqn",
["Nend"] = "anh",
["Nengone"] = "nen",
["Neo"] = "neu",
["Nepalese Sign Language"] = "nsp",
["Nepali Kurux"] = "kxl",
["Nete"] = "net",
["Neve'ei"] = "vnm",
["Neverver"] = "lgk",
["New Caledonian Javanese"] = "jas",
["New River Shasta"] = "nai-nrs",
["New Zealand Sign Language"] = "nzs",
["Neyo"] = "ney",
["Nez Perce"] = "nez",
["Nga La"] = "hlt",
["Ngaanyatjarra"] = "ntj",
["Ngadjunmaya"] = "nju",
["Ngadjuri"] = "jui",
["Ngaing"] = "nnf",
["Ngaju"] = "nij",
["Ngala"] = "nud",
["Ngalakan"] = "nig",
["Ngalkbun"] = "ngk",
["Ngamambo"] = "nbv",
["Ngamini"] = "nmv",
["Ngamo"] = "nbh",
["Ngan'gityemerri"] = "nam",
["Nganakarti"] = "xnk",
["Ngandi"] = "nid",
["Ngando (Central African Republic)"] = "ngd",
["Ngando (Congo)"] = "nxd",
["Ngandyera"] = "nne",
["Ngangam"] = "gng",
["Ngantangarra"] = "ntg",
["Nganyaywana"] = "nyx",
["Ngardi"] = "rxd",
["Ngarigu"] = "xni",
["Ngarinman"] = "nbj",
["Ngarinyin"] = "ung",
["Ngarla"] = "nrk",
["Ngarluma"] = "nrl",
["Ngarrindjeri"] = "nay",
["Ngasa"] = "nsg",
["Ngatik Men's Creole"] = "ngm",
["Ngawn Chin"] = "cnw",
["Ngawun"] = "nxn",
["Ngazidja Comorian"] = "zdj",
["Tiếng Ngbaka"] = "nga",
["Ngbaka Ma'bo"] = "nbm",
["Ngbaka Manza"] = "ngg",
["Ngbee"] = "jgb",
["Ngbinda"] = "nbd",
["Ngbundu"] = "nuu",
["Ngelima"] = "agh",
["Ngemba"] = "nge",
["Ngen"] = "gnj",
["Ngendelengo"] = "nql",
["Ngeq"] = "ngt",
["Ngete"] = "nnn",
["Nggem"] = "nbq",
["Nggwahyi"] = "ngx",
["Ngie"] = "ngj",
["Ngile"] = "jle",
["Ngindo"] = "nnq",
["Tiếng Ngiti"] = "niy",
["Ngizim"] = "ngi",
["Ngkoth"] = "aus-ngk",
["Ngkâlmpw Kanum"] = "kcd",
["Ngochang"] = "tbq-ngo",
["Ngom"] = "nra",
["Ngombale"] = "nla",
["Ngombe (Central African Republic)"] = "nmj",
["Ngong"] = "nnx",
["Ngongo"] = "noq",
["Ngoni"] = "ngo",
["Ngoreme"] = "ngq",
["Ngoshie"] = "nsh",
["Ngul"] = "nlo",
["Ngulu"] = "ngp",
["Nguluwan"] = "nuw",
["Ngumbi"] = "nui",
["Ngunawal"] = "xul",
["Ngundi"] = "ndn",
["Ngundu"] = "nue",
["Ngungwel"] = "ngz",
["Ngurmbur"] = "nrx",
["Ngwaba"] = "ngw",
["Ngwe"] = "nwe",
["Ngwo"] = "ngn",
["Ngäbere"] = "gym",
["Nhanda"] = "nha",
["Nhirrpi"] = "hrp",
["Nhuwala"] = "nhf",
["Nicaraguan Creole"] = "bzk",
["Nicaraguan Sign Language"] = "ncs",
["Nicola"] = "ath-nic",
["Niellim"] = "nie",
["Nigeria Mambila"] = "mzk",
["Nigerian Pidgin"] = "pcm",
["Nigerian Sign Language"] = "nsi",
["Nihali"] = "nll",
["Nii"] = "nii",
["Niksek"] = "gbe",
["Nila"] = "nil",
["Nilamba"] = "nim",
["Nimadi"] = "noe",
["Nimanbur"] = "nmp",
["Nimbari"] = "nmr",
["Nimboran"] = "nir",
["Nimi"] = "nis",
["Nimo"] = "niw",
["Nimoa"] = "nmw",
["Ninam"] = "shb",
["Nindi"] = "nxi",
["Ningera"] = "nby",
["Ninggerum"] = "nxr",
["Ningil"] = "niz",
["Ninia Yali"] = "nlk",
["Ninzo"] = "nin",
["Nipsan"] = "nps",
["Nisa"] = "njs",
["Nisenan"] = "nsz",
["Nisi"] = "yso",
["Niuafo'ou"] = "num",
["Niuatoputapu"] = "nkp",
["Niwer Mil"] = "hrc",
["Njalgulgule"] = "njl",
["Njebi"] = "nzb",
["Njen"] = "njj",
["Njerep"] = "njr",
["Njyem"] = "njy",
["Nkami"] = "nkq",
["Nkangala"] = "nkn",
["Nkem-Nkum"] = "isi",
["Nkhumbi"] = "khu",
["Nkongho"] = "nkc",
["Nkoroo"] = "nkx",
["Nkoya"] = "nka",
["Nkukoli"] = "nbo",
["Nkutu"] = "nkw",
["Nnam"] = "nbp",
["Nocamán"] = "nom",
["Nocte Naga"] = "njb",
["Noiri"] = "noi",
["Nokuku"] = "nkk",
["Nomaande"] = "lem",
["Nomane"] = "nof",
["Nomatsiguenga"] = "not",
["Nomlaki"] = "nol",
["Nomu"] = "noh",
["Nonuya"] = "noj",
["Nooksack"] = "nok",
["Tiếng Noone"] = "nhu",
["Nopala Chatino"] = "cya",
["Norn"] = "nrn",
["Norra"] = "nrr",
["North Ambrym"] = "mmg",
["North Asmat"] = "nks",
["North Awyu"] = "yir",
["North Babar"] = "bcd",
["North Boma"] = "boh",
["North Central Mixe"] = "neq",
["North Fali"] = "fll",
["North Giziga"] = "gis",
["North Mofu"] = "mfk",
["North Muyu"] = "kti",
["North Nuaulu"] = "nni",
["North Tairora"] = "tbg",
["North Tanna"] = "tnn",
["North Wahgi"] = "whg",
["North Watut"] = "una",
["Northeast Kiwai"] = "kiw",
["Northeast Maidu"] = "nmu",
["Northeast Pashayi"] = "aee",
["Northeastern Dinka"] = "dip",
["Northeastern Pomo"] = "pef",
["Northern Alta"] = "aqn",
["Northern Bontoc"] = "rbk",
["Northern Ghale"] = "ghh",
["Tiếng Grebo Bắc"] = "gbo",
["Northern Guiyang Hmong"] = "huj",
["Northern Haida"] = "hdn",
["Northern Huishui Hmong"] = "hmi",
["Northern Kalapuya"] = "nrt",
["Northern Kam"] = "doc",
["Northern Kankanay"] = "xnn",
["Northern Kissi"] = "kqs",
["Northern Lorung"] = "lbr",
["Northern Mashan Hmong"] = "hmp",
["Northern Muji"] = "ymx",
["Northern Ngbandi"] = "ngb",
["Northern Nuni"] = "nuv",
["Northern Oaxaca Nahuatl"] = "nhy",
["Northern Ohlone"] = "cst",
["Northern One"] = "onr",
["Northern Pame"] = "pmq",
["Northern Pinghua"] = "cnp",
["Northern Pomo"] = "pej",
["Northern Puebla Nahuatl"] = "ncj",
["Northern Pumi"] = "pmi",
["Northern Qiandong Miao"] = "hea",
["Northern Rengma Naga"] = "nnl",
["Northern Sierra Miwok"] = "nsq",
["Northern Subanen"] = "stb",
["Northern Tarahumara"] = "thh",
["Northern Tidong"] = "ntd",
["Northern Tlaxiaco Mixtec"] = "xtn",
["Northern Toussian"] = "tsp",
["Northern Tutchone"] = "ttm",
["Northern Valley Yokuts"] = "nai-nvy",
["Northwest Maidu"] = "mjd",
["Northwest Oaxaca Mixtec"] = "mxa",
["Northwest Pashayi"] = "glh",
["Northwestern Dinka"] = "diw",
["Northwestern Fars"] = "faz",
["Northwestern Tamang"] = "tmk",
["Norwegian Sign Language"] = "nsl",
["Notre"] = "bly",
["Notsi"] = "ncf",
["Nottoway"] = "ntw",
["Nottoway-Meherrin"] = "nwy",
["Noxilo"] = "art-nox",
["Noy"] = "noy",
["Nsari"] = "asj",
["Nsenga"] = "nse",
["Nshi"] = "nsc",
["Nsong"] = "soo",
["Nsongo"] = "nsx",
["Ntomba"] = "nto",
["Ntra'ngith"] = "dgt",
["Nuguria"] = "nur",
["Nuk"] = "noc",
["Nukak Makú"] = "mbr",
["Nukna"] = "klt",
["Nukuini"] = "nuc",
["Nukumanu"] = "nuq",
["Nukunu"] = "nnv",
["Nukunul"] = "xnu",
["Nukuoro"] = "nkr",
["Numana"] = "nbr",
["Numanggang"] = "nop",
["Numbami"] = "sij",
["Nume"] = "tgs",
["Numee"] = "kdk",
["Nungali"] = "nug",
["Nunggubuyu"] = "nuy",
["Nungon"] = "paa-nun",
["Nungu"] = "rin",
["Nupbikha"] = "npb",
["Nusa Laut"] = "nul",
["Nusu"] = "nuf",
["Nutabe"] = "cba-nut",
["Nyabwa"] = "nwb",
["Nyaheun"] = "nev",
["Nyakyusa"] = "nyy",
["Nyali"] = "nlj",
["Nyam"] = "nmi",
["Nyamal"] = "nly",
["Nyambo"] = "now",
["Nyamusa-Molo"] = "nwm",
["Nyamwanga"] = "mwn",
["Nyamwezi"] = "nym",
["Nyaneka"] = "nyk",
["Nyang'i"] = "nyp",
["Nyanga (Congo)"] = "nyj",
["Nyanga (Togo)"] = "ayg",
["Nyanga-li"] = "nyc",
["Nyangatom"] = "nnj",
["Nyangbo"] = "nyb",
["Nyangga"] = "nny",
["Nyangumarta"] = "nna",
["Nyankole"] = "nyn",
["Nyaturu"] = "rim",
["Nyawaygi"] = "nyt",
["Nyemba"] = "nba",
["Nyengo"] = "nye",
["Nyenkha"] = "neh",
["Nyigina"] = "nyh",
["Nyiha"] = "nih",
["Nyika"] = "nkt",
["Nyimang"] = "nyi",
["Nyindrou"] = "lid",
["Nyindu"] = "nyg",
["Nyiyaparli"] = "xny",
["Nyokon"] = "nvo",
["Nyole (Kenya)"] = "nyd",
["Nyole (Uganda)"] = "nuj",
["Nyong"] = "muo",
["Nyulnyul"] = "nyv",
["Nyungwe"] = "nyu",
["Nyâlayu"] = "yly",
["Nzakambay"] = "nzy",
["Nzakara"] = "nzk",
["Nzanyi"] = "nja",
["Nzima"] = "nzi",
["Tiếng Huitoto Nüpode"] = "hux",
["O'chi'chi'"] = "xoc",
["Obanliku"] = "bzy",
["Obispeño"] = "obi",
["Oblo"] = "obl",
["Obo Manobo"] = "obo",
["Obokuitai"] = "afz",
["Obolo"] = "ann",
["Obulom"] = "obu",
["Ocotepec Mixtec"] = "mie",
["Ocotlán Zapotec"] = "zac",
["Od"] = "odk",
["Odiai"] = "bhf",
["Odoodee"] = "kkc",
["Odual"] = "odu",
["Odut"] = "oda",
["Ofayé"] = "opy",
["Ofo"] = "ofo",
["Ogbah"] = "ogc",
["Ogbia"] = "ogb",
["Ogbogolo"] = "ogg",
["Ogea"] = "eri",
["Tiếng Oirata"] = "oia",
["Okiek"] = "oki",
["Oko-Eni-Osayen"] = "oks",
["Oko-Juwoi"] = "okj",
["Okobo"] = "okb",
["Okodia"] = "okd",
["Okolod"] = "kqv",
["Okpamheri"] = "opa",
["Okpe (Northwestern Edo)"] = "okx",
["Okpe (Southwestern Edo)"] = "oke",
["Okpela"] = "atg",
["Oksapmin"] = "opm",
["Oku"] = "oku",
["Okwanuchu"] = "nai-okw",
["Old Avar"] = "oav",
["Old Hungarian"] = "ohu",
["Old Kamta"] = "inc-ork",
["Old Kentish Sign Language"] = "okl",
["Old Manipuri"] = "omp",
["Old Punjabi"] = "inc-opa",
["Old Tati"] = "xme-ott",
["Old Tibetan"] = "otb",
["Tiếng Wales cổ"] = "owl",
["Olekha"] = "ole",
["Ollari"] = "gdb",
["Olo"] = "ong",
["Oloma"] = "olm",
["Olrat"] = "olr",
["Olu'bo"] = "lul",
["Olulumo-Ikom"] = "iko",
["Oluta Popoluca"] = "plo",
["Olutsotso"] = "lto",
["Omagua"] = "omg",
["Omba"] = "omb",
["Ombamba"] = "mbm",
["Ombo"] = "oml",
["Tiếng Nahuatl Ometepec"] = "nht",
["Omi"] = "omi",
["Omotik"] = "omt",
["Omurano"] = "omu",
["Ong"] = "oog",
["Onin"] = "oni",
["Onjob"] = "onj",
["Ono"] = "ons",
["Onobasulu"] = "onn",
["Onondaga"] = "ono",
["Ontenu"] = "ont",
["Ontong Java"] = "ojv",
["Oorlams"] = "oor",
["Opao"] = "opo",
["Opata"] = "opt",
["Opuuo"] = "lgn",
["Opón"] = "sai-opo",
["Oraon Sadri"] = "sdr",
["Orejón"] = "ore",
["Oring"] = "org",
["Orizaba Nahuatl"] = "nlv",
["Orléanais"] = "roa-orl",
["Oro"] = "orx",
["Oro Win"] = "orw",
["Oroha"] = "ora",
["Orokaiva"] = "okv",
["Oroko"] = "bdu",
["Orokolo"] = "oro",
["Orowe"] = "bpk",
["Oruma"] = "orr",
["Orya"] = "ury",
["Osamayi"] = "syx",
["Ososo"] = "oso",
["Ot Danum"] = "otd",
["Otank"] = "uta",
["Oti"] = "oti",
["Otomaco"] = "sai-oto",
["Ottawa"] = "otw",
["Ouma"] = "oum",
["Oune"] = "oue",
["Owa"] = "stn",
["Owenia"] = "wsr",
["Owiniga"] = "owi",
["Oy"] = "oyb",
["Oya'oya"] = "oyy",
["Ozolotepec Zapotec"] = "zao",
["Pa"] = "ppt",
["Pa Di"] = "pdi",
["Pa'a"] = "pqa",
["Paama"] = "pma",
["Paasaal"] = "sig",
["Pacahuara"] = "pcp",
["Padoe"] = "pdo",
["Paeonian"] = "ine-pae",
["Pagi"] = "pgi",
["Pagibete"] = "pae",
["Pahanan Agta"] = "apf",
["Pahi"] = "lgt",
["Pahlavani"] = "phv",
["Pai Tavytera"] = "pta",
["Pai-lang"] = "tbq-plg",
["Paicî"] = "pri",
["Paikoneka"] = "awd-pai",
["Paipai"] = "ppi",
["Pajapan Nahuatl"] = "nhp",
["Pak-Tong"] = "pkg",
["Pakanha"] = "pkn",
["Pakistan Sign Language"] = "pks",
["Paku Karen"] = "kpp",
["Pal"] = "abw",
["Palaka Senoufo"] = "plr",
["Palantla Chinantec"] = "cpa",
["Palawan Batak"] = "bya",
["Paleni"] = "pnl",
["Palewyami"] = "nai-ply",
["Palikur"] = "plu",
["Pallanganmiddang"] = "pmd",
["Palta"] = "sai-pal",
["Palu'e"] = "ple",
["Paluan"] = "plz",
["Palya Bareli"] = "bpx",
["Pam"] = "pmn",
["Pambia"] = "pmb",
["Pamigua"] = "sai-pam",
["Pamlico"] = "pmk",
["Pamona"] = "pmf",
["Pamosu"] = "hih",
["Pamplona Atta"] = "att",
["Pana (Central Africa)"] = "pnz",
["Pana (West Africa)"] = "pnq",
["Panamanian Sign Language"] = "lsp",
["Panamint"] = "par",
["Panare"] = "pbh",
["Panará"] = "kre",
["Panasuan"] = "psn",
["Panawa"] = "pwb",
["Pande"] = "bkj",
["Pangseng"] = "pgs",
["Pangutaran Sama"] = "slm",
["Pangwa"] = "pbr",
["Panim"] = "pnr",
["Pankararé"] = "pax",
["Pankararú"] = "paz",
["Pankhu"] = "pkh",
["Pannei"] = "pnc",
["Panobo"] = "pno",
["Panyi Bai"] = "bfc",
["Panyjima"] = "pnw",
["Panzaleo"] = "sai-pnz",
["Pao"] = "ppa",
["Papapana"] = "ppn",
["Papar"] = "dpp",
["Papasena"] = "pas",
["Papel"] = "pbo",
["Papi"] = "ppe",
["Papitalai"] = "pat",
["Papora"] = "ppu",
["Papua New Guinean Sign Language"] = "pgz",
["Papuan Malay"] = "pmy",
["Para Naga"] = "pzn",
["Paraguayan Sign Language"] = "pys",
["Parakanã"] = "pak",
["Paranan"] = "prf",
["Paranawát"] = "paf",
["Paratió"] = "sai-par",
["Parawen"] = "prw",
["Pardhan"] = "pch",
["Pardhi"] = "pcl",
["Pare"] = "asa",
["Paredarerme"] = "xpd",
["Pará Arára"] = "aap",
["Pará Gavião"] = "gvp",
["Pasi"] = "psq",
["Pass Valley Yali"] = "yac",
["Passé"] = "awd-pas",
["Patagón"] = "sai-ptg",
["Patamona"] = "pbc",
["Patani"] = "ptn",
["Pataxó Hã-Ha-Hãe"] = "pth",
["Patep"] = "ptp",
["Pathiya"] = "pty",
["Patpatar"] = "gfk",
["Pattani"] = "lae",
["Pattapu"] = "ptq",
["Patwin"] = "pwi",
["Paulohi"] = "plh",
["Paumarí"] = "pad",
["Pauri Bareli"] = "bfb",
["Pauserna"] = "psm",
["Pawaia"] = "pwa",
["Payaguá"] = "sai-pyg",
["Paynamar"] = "pmr",
["Pe"] = "pai",
["Pech"] = "pay",
["Peerapper"] = "xpw",
["Peere"] = "pfe",
["Pei"] = "ppq",
["Pekal"] = "pel",
["Pele-Ata"] = "ata",
["Penang Sign Language"] = "psg",
["Penchal"] = "pek",
["Pendau"] = "ums",
["Penrhyn"] = "pnh",
["Pentlatch"] = "ptw",
["Perai"] = "wet",
["Perema"] = "wom",
["Pericú"] = "nai-per",
["Pero"] = "pip",
["Persian Sign Language"] = "psc",
["Peruvian Sign Language"] = "prl",
["Petapa Zapotec"] = "zpe",
["Petats"] = "pex",
["Peñoles Mixtec"] = "mil",
["Phala"] = "ypa",
["Phana'"] = "phq",
["Phangduwali"] = "phw",
["Phende"] = "pem",
["Philippine Sign Language"] = "psp",
["Philistine"] = "und-phi",
["Phimbi"] = "phm",
["Phola"] = "ypg",
["Pholo"] = "yip",
["Phom"] = "nph",
["Phudagi"] = "phd",
["Phuie"] = "pug",
["Phukha"] = "phh",
["Phuma"] = "ypm",
["Phunoi"] = "pho",
["Phupa"] = "ypp",
["Phupha"] = "yph",
["Phuthi"] = "bnt-phu",
["Phuza"] = "ypz",
["Piamatsina"] = "ptr",
["Piame"] = "pin",
["Piapoco"] = "pio",
["Piaroa"] = "pid",
["Tiếng Pichinglis"] = "fpe",
["Pichis Ashéninka"] = "cpu",
["Pictish"] = "xpi",
["Picuris"] = "nai-pic",
["Pidgin Delaware"] = "dep",
["Pidgin Iha"] = "ihb",
["Pidgin Onin"] = "onx",
["Pijao"] = "pij",
["Pije"] = "piz",
["Pijin"] = "pis",
["Pileni"] = "piv",
["Pima Bajo"] = "pia",
["Pimbwe"] = "piw",
["Pinai-Hagahai"] = "pnn",
["Pingelapese"] = "pif",
["Pini"] = "pii",
["Pinigura"] = "pnv",
["Pinjarup"] = "pnj",
["Pinji"] = "pic",
["Pinotepa Nacional Mixtec"] = "mio",
["Pintiini"] = "pti",
["Pintupi-Luritja"] = "piu",
["Pirahã"] = "myp",
["Piratapuyo"] = "pir",
["Pirlatapa"] = "bxi",
["Piro"] = "pie",
["Pirriya"] = "xpa",
["Pisabo"] = "pig",
["Pisaflores Tepehua"] = "tpp",
["Piscataway"] = "psy",
["Pisidian"] = "xps",
["Pitcairn-Norfolk"] = "pih",
["Pite Sami"] = "sje",
["Piti"] = "pcn",
["Pitta-Pitta"] = "pit",
["Piu"] = "pix",
["Piya-Kwonci"] = "piy",
["Plains Indian Sign Language"] = "psd",
["Plains Miwok"] = "pmw",
["Plapo Krumen"] = "ktj",
["Playero"] = "gob",
["Pochuri Naga"] = "npo",
["Pochutec"] = "xpo",
["Podoko"] = "pbi",
["Pogali"] = "hkh",
["Pogolo"] = "poy",
["Poitevin-Saintongeais"] = "roa-poi",
["Pokangá"] = "pok",
["Poke"] = "pof",
["Pol"] = "pmm",
["Polish Sign Language"] = "pso",
["Polonombauk"] = "plb",
["Pom"] = "pmo",
["Ponam"] = "ncc",
["Pongu"] = "png",
["Ponyo"] = "npg",
["Poqomam"] = "poc",
["Poqomchi'"] = "poh",
["Porohanon"] = "prh",
["Port Sandwich"] = "psw",
["Port Sorell"] = "xpl",
["Port Vato"] = "ptv",
["Portuguese Sign Language"] = "psr",
["Potiguára"] = "pog",
["Poumei Naga"] = "pmx",
["Pouye"] = "bye",
["Powari"] = "pwr",
["Powhatan"] = "pim",
["Poyanáwa"] = "pyn",
["Tiếng Ireland nguyên thủy"] = "pgl",
["Principense"] = "pre",
["Proto-Amuesha-Chamicuro"] = "awd-amc-pro",
["Tiếng Tiểu Á nguyên thủy"] = "ine-ana-pro",
["Proto-Apachean"] = "apa-pro",
["Proto-Arawa"] = "auf-pro",
["Tiếng Armenia nguyên thủy"] = "hyx-pro",
["Proto-Arnhem"] = "aus-arn-pro",
["Proto-Atayalic"] = "map-ata-pro",
["Proto-Batak"] = "btk-pro",
["Tiếng Bongo-Bagirmi nguyên thủy"] = "csu-bba-pro",
["Proto-Boran"] = "sai-bor-pro",
["Proto-Bua"] = "alv-bua-pro",
["Proto-Bungku-Tolaki"] = "poz-btk-pro",
["Tiếng Miến nguyên thủy"] = "tbq-brm-pro",
["Proto-Caddoan"] = "cdd-pro",
["Proto-Cangin"] = "alv-cng-pro",
["Proto-Central Chadic"] = "cdc-cbm-pro",
["Proto-Central Indo-Aryan"] = "inc-cen-pro",
["Proto-Central Jê"] = "sai-cje-pro",
["Tiếng Trung New South Wales nguyên thủy"] = "aus-cww-pro",
["Tiếng Trung Sudan nguyên thủy"] = "csu-pro",
["Proto-Central Togo"] = "alv-gtm-pro",
["Proto-Chatino"] = "omq-cha-pro",
["Proto-Chibchan"] = "cba-pro",
["Proto-Chimakuan"] = "chi-pro",
["Proto-Chinookan"] = "nai-ckn-pro",
["Tiếng Chukotka-Kamchatka nguyên thủy"] = "qfa-cka-pro",
["Proto-Chumash"] = "nai-chu-pro",
["Proto-Cupan"] = "azc-cup-pro",
["Proto-Daju"] = "sdv-daj-pro",
["Proto-Daly"] = "aus-dal-pro",
["Proto-Eastern Jebel"] = "sdv-eje-pro",
["Proto-Eastern Oti-Volta"] = "nic-eov-pro",
["Proto-Fali"] = "alv-fli-pro",
["Proto-Grassfields"] = "nic-grf-pro",
["Proto-Great Andamanese"] = "qfa-adm-pro",
["Proto-Guang"] = "alv-gng-pro",
["Proto-Gur"] = "nic-gur-pro",
["Proto-Gurunsi"] = "nic-gns-pro",
["Proto-Halmahera-Cenderawasih"] = "poz-hce-pro",
["Proto-Heiban"] = "alv-hei-pro",
["Proto-Highland East Cushitic"] = "cus-hec-pro",
["Proto-Hmong"] = "hmn-pro",
["Proto-Hrusish"] = "sit-hrs-pro",
["Proto-Huitoto-Ocaina"] = "sai-hoc-pro",
["Proto-Hurro-Urartian"] = "qfa-hur-pro",
["Proto-Idomoid"] = "alv-ido-pro",
["Proto-Igboid"] = "alv-igb-pro",
["Proto-Ijoid"] = "ijo-pro",
["Tiếng Iwaidja nguyên thủy"] = "aus-wdj-pro",
["Proto-Jukunoid"] = "nic-jkn-pro",
["Proto-Kadu"] = "qfa-kad-pro",
["Proto-Kalamian"] = "phi-kal-pro",
["Proto-Kalapuyan"] = "nai-klp-pro",
["Proto-Kampa"] = "awd-kmp-pro",
["Proto-Kham"] = "sit-kha-pro",
["Proto-Khoe"] = "khi-kho-pro",
["Proto-Komisenian"] = "ira-kms-pro",
["Proto-Kru"] = "kro-pro",
["Proto-Kuliak"] = "ssa-klk-pro",
["Proto-Kurdish"] = "ku-pro",
["Proto-Kwa"] = "alv-kwa-pro",
["Proto-Lalo"] = "tbq-lal-pro",
["Proto-Lampungic"] = "poz-lgx-pro",
["Tiếng Lô Lô nguyên thủy"] = "tbq-lol-pro",
["Proto-Lower Cross River"] = "nic-lcr-pro",
["Proto-Luish"] = "sit-luu-pro",
["Proto-Maidun"] = "nai-mdu-pro",
["Proto-Mangbetu"] = "csu-maa-pro",
["Proto-Masa"] = "cdc-mas-pro",
["Proto-Mazatec"] = "omq-maz-pro",
["Proto-Medo-Parthian"] = "ira-mpr-pro",
["Proto-Mixe-Zoque"] = "nai-miz-pro",
["Proto-Mixtec"] = "omq-mxt-pro",
["Proto-Mumuye"] = "alv-mum-pro",
["Proto-Munji-Yidgha"] = "ira-mny-pro",
["Proto-Na-Dene"] = "xnd-pro",
["Proto-Nawiki"] = "awd-nwk-pro",
["Proto-Nilotic"] = "sdv-nil-pro",
["Proto-North Caucasian"] = "ccn-pro",
["Proto-North Halmahera"] = "paa-nha-pro",
["Proto-North Sarawak"] = "poz-swa-pro",
["Proto-Nubian"] = "nub-pro",
["Proto-Numic"] = "azc-num-pro",
["Proto-Nupoid"] = "alv-nup-pro",
["Proto-Nyima"] = "sdv-nyi-pro",
["Proto-Nyulnyulan"] = "aus-nyu-pro",
["Proto-Ogoni"] = "nic-ogo-pro",
["Proto-Ossetic"] = "os-pro",
["Proto-Oti-Volta"] = "nic-ovo-pro",
["Proto-Oto-Manguean"] = "omq-pro",
["Proto-Oto-Pamean"] = "omq-otp-pro",
["Proto-Otomi"] = "oto-otm-pro",
["Proto-Otomian"] = "oto-pro",
["Proto-Paresi-Waura"] = "awd-prw-pro",
["Proto-Plateau Penutian"] = "nai-plp-pro",
["Proto-Pomeranian"] = "zlw-pom-pro",
["Proto-Pomo"] = "nai-pom-pro",
["Proto-Saka"] = "xsc-sak-pro",
["Proto-Sanglechi-Ishkashimi"] = "ira-sgi-pro",
["Proto-Sara"] = "csu-sar-pro",
["Proto-Siouan-Catawban"] = "nai-sca-pro",
["Proto-Songhay"] = "son-pro",
["Proto-Sotho-Tswana"] = "bnt-sts-pro",
["Proto-South Cushitic"] = "cus-sou-pro",
["Proto-South Sulawesi"] = "poz-ssw-pro",
["Proto-Southern Jê"] = "sai-sje-pro",
["Proto-Sunda-Sulawesi"] = "poz-sus-pro",
["Proto-Ta-Arawak"] = "awd-taa-pro",
["Proto-Takic"] = "azc-tak-pro",
["Proto-Taman"] = "sdv-tmn-pro",
["Proto-Tani"] = "sit-tan-pro",
["Proto-Taranoan"] = "sai-tar-pro",
["Proto-Tatic"] = "xme-ttc-pro",
["Proto-Totozoquean"] = "nai-tot-pro",
["Tiếng Liên New Guinea nguyên thủy"] = "ngf-pro",
["Proto-Tsezian"] = "cau-tsz-pro",
["Proto-Tsimshianic"] = "nai-tsi-pro",
["Proto-Upper Cross River"] = "nic-ucr-pro",
["Proto-Utian"] = "nai-utn-pro",
["Proto-Western Mande"] = "dmn-mdw-pro",
["Proto-Witotoan"] = "sai-wit-pro",
["Proto-Yupik"] = "ypk-pro",
["Proto-Zapotecan"] = "omq-zap-pro",
["Providencia Sign Language"] = "prz",
["Psikye"] = "kvj",
["Puare"] = "pux",
["Pudtol Atta"] = "atp",
["Puebla Mazatec"] = "pbm",
["Puelche"] = "pue",
["Puerto Rican Sign Language"] = "psl",
["Puimei Naga"] = "npu",
["Puiron"] = "sit-prn",
["Pukapukan"] = "pkp",
["Pulabu"] = "pup",
["Puluwat"] = "puw",
["Puma"] = "pum",
["Pumé"] = "yae",
["Punan Aput"] = "pud",
["Punan Bah-Biau"] = "pna",
["Punan Batu"] = "pnm",
["Punan Merah"] = "puf",
["Punan Merap"] = "puc",
["Punan Tubu"] = "puj",
["Punu"] = "puu",
["Puquina"] = "puq",
["Puragi"] = "pru",
["Purari"] = "iar",
["Purepecha"] = "pua",
["Puri"] = "prr",
["Purik"] = "prx",
["Purisimeño"] = "puy",
["Puruborá"] = "pur",
["Puruhá"] = "sai-prh",
["Purukotó"] = "sai-pur",
["Purum"] = "pub",
["Putai"] = "mfl",
["Putoh"] = "put",
["Putukwam"] = "afe",
["Puyo-Paekche"] = "xpp",
["Pwaamei"] = "pme",
["Pwapwa"] = "pop",
["Pyapun"] = "pcw",
["Pye Krumen"] = "pye",
["Pyemmairre"] = "xpb",
["Pyen"] = "pyy",
["Pykobjê"] = "sai-pyk",
["Pyu"] = "pby",
["Páez"] = "pbb",
["Pááfang"] = "pfa",
["Päri"] = "lkr",
["Pémono"] = "pev",
["Pévé"] = "lme",
["Pökoot"] = "pko",
["Q'anjob'al"] = "kjb",
["Q'eqchi"] = "kek",
["Qabiao"] = "laq",
["Qaqet"] = "byx",
["Qatabanian"] = "xqt",
["Qau"] = "gqu",
["Qila Muji"] = "ymq",
["Quebec Sign Language"] = "fcs",
["Querétaro Otomi"] = "otq",
["Quetzaltepec Mixe"] = "pxm",
["Queyu"] = "qvy",
["Quiavicuzas Zapotec"] = "zpj",
["Quileute"] = "qui",
["Quimbaya"] = "sai-qmb",
["Quinigua"] = "nai-qng",
["Quinqui"] = "quq",
["Quioquitani-Quierí Zapotec"] = "ztq",
["Quiotepec Chinantec"] = "chq",
["Quitemo"] = "sai-qtm",
["Rabona"] = "sai-rab",
["Rahambuu"] = "raz",
["Rajah Kabunsuwan Manobo"] = "mqk",
["Raji"] = "rji",
["Rajong"] = "rjg",
["Rakahanga-Manihiki"] = "rkh",
["Ralte"] = "ral",
["Ramandi"] = "tks",
["Ramanos"] = "sai-ram",
["Ramoaaina"] = "rai",
["Ramopa"] = "kjx",
["Rampi"] = "lje",
["Rana Tharu"] = "thr",
["Rang"] = "rax",
["Rangkas"] = "rgk",
["Ranglong"] = "rnl",
["Rao"] = "rao",
["Rapa"] = "ray",
["Rapoisi"] = "kyx",
["Rapting"] = "rpt",
["Rara Bakati'"] = "lra",
["Ratahan"] = "rth",
["Rathawi"] = "rtw",
["Rathwi Bareli"] = "bgd",
["Rawa"] = "rwo",
["Rawat"] = "jnl",
["Rawo"] = "rwa",
["Rayón Zoque"] = "zor",
["Razajerdi"] = "rat",
["Razihi"] = "rzh",
["Reang"] = "ria",
["Red Gelao"] = "gir",
["Reel"] = "atu",
["Rejang Kayan"] = "ree",
["Rema"] = "bow",
["Rembarunga"] = "rmb",
["Rembong"] = "reb",
["Remo"] = "rem",
["Remontado Agta"] = "agv",
["Rempi"] = "rmp",
["Remun"] = "lkj",
["Rennellese"] = "mnv",
["Repanbitip"] = "rpn",
["Rer Bare"] = "rer",
["Rerau"] = "rea",
["Rerep"] = "pgk",
["Reshe"] = "res",
["Resígaro"] = "rgr",
["Retta"] = "ret",
["Reyesano"] = "rey",
["Rhine Franconian"] = "gmw-rfr",
["Riang"] = "ril",
["Riantana"] = "ran",
["Ribun"] = "rir",
["Rigwe"] = "iri",
["Rikbaktsa"] = "rkb",
["Ringgou"] = "rgu",
["Ririo"] = "rri",
["Ritarungo"] = "rit",
["Riung"] = "riu",
["Riverain Sango"] = "snj",
["Rogo"] = "rod",
["Roma"] = "rmm",
["Romani Greek"] = "rge",
["Romanian Sign Language"] = "rms",
["Romano-Serbian"] = "rsb",
["Romanova"] = "rmv",
["Romblomanon"] = "rol",
["Rombo"] = "rof",
["Romkun"] = "rmk",
["Ron"] = "cla",
["Ronga"] = "rng",
["Rongga"] = "ror",
["Rongmei Naga"] = "nbu",
["Rongpo"] = "rnp",
["Ronji"] = "roe",
["Roon"] = "rnn",
["Roria"] = "rga",
["Roro"] = "rro",
["Rotokas"] = "roo",
["Roviana"] = "rug",
["Rudbari"] = "rdb",
["Rufiji"] = "rui",
["Ruga"] = "ruh",
["Rukiga"] = "cgg",
["Ruma"] = "ruz",
["Rumu"] = "klq",
["Runga"] = "rou",
["Rungtu"] = "rtc",
["Rungwa"] = "rnw",
["Russenorsk"] = "crp-rsn",
["Russian Sign Language"] = "rsl",
["Ruuli"] = "ruc",
["Ruwund"] = "rnd",
["Rwa"] = "rwk",
["Rwanda-Rundi"] = "rw",
["Sa"] = "sax",
["Sa'a"] = "apb",
["Sa'ban"] = "snv",
["Sa'och"] = "scq",
["Saafi-Saafi"] = "sav",
["Saam"] = "raq",
["Saamia"] = "lsm",
["Saare"] = "uss",
["Sabah Malay"] = "msi",
["Sabanê"] = "sae",
["Sabaot"] = "spy",
["Sabine"] = "sbv",
["Sabir"] = "pml",
["Sabu"] = "hvn",
["Sacapulteco"] = "quv",
["Saep"] = "spd",
["Safaitic"] = "sem-saf",
["Safaliba"] = "saf",
["Safeyoka"] = "apz",
["Safwa"] = "sbk",
["Sagala"] = "sbm",
["Sagalla"] = "tga",
["Sahaptin"] = "nai-spt",
["Sahu"] = "saj",
["Sajau Basap"] = "sjb",
["Sakachep"] = "sch",
["Sakam"] = "skm",
["Sakao"] = "sku",
["Sakata"] = "skt",
["Sake"] = "sak",
["Sala"] = "shq",
["Salampasu"] = "slx",
["Salas"] = "sgu",
["Salchuq"] = "slq",
["Saleman"] = "sau",
["Saliba (Colombia)"] = "slc",
["Saliba (New Guinea)"] = "sbe",
["Salinan"] = "sln",
["Salt-Yui"] = "sll",
["Saluan"] = "loe",
["Salumá"] = "slj",
["Salvadoran Lenca"] = "nai-sln",
["Salvadoran Sign Language"] = "esn",
["Sam"] = "snx",
["Sama"] = "smd",
["Samaritan Aramaic"] = "sam",
["Samaritan Hebrew"] = "smp",
["Samarokena"] = "tmj",
["Samatao"] = "ysd",
["Samba"] = "smx",
["Sambe"] = "xab",
["Samberigi"] = "ssx",
["Samburu"] = "saq",
["Samoan Plantation Pidgin"] = "cpe-spp",
["Samosa"] = "swm",
["Sampang"] = "rav",
["Samre"] = "sxm",
["Samvedi"] = "smv",
["San Agustín Mixtepec Zapotec"] = "ztm",
["San Baltazar Loxicha Zapotec"] = "zpx",
["San Felipe Otlaltepec Popoloca"] = "pow",
["San Jerónimo Tecóatl Mazatec"] = "maa",
["San Juan Atzingo Popoloca"] = "poe",
["San Juan Colorado Mixtec"] = "mjc",
["San Juan Quiahije Chatino"] = "ctp-san",
["San Juan Teita Mixtec"] = "xtj",
["San Luís Temalacayuca Popoloca"] = "pps",
["San Marcos Tlalcoyalco Popoloca"] = "pls",
["San Miguel Creole French"] = "scf",
["San Miguel Piedras Mixtec"] = "xtp",
["San Miguel el Grande Mixtec"] = "mig",
["San Pablo Güilá Zapotec"] = "ztu",
["San Pedro Amuzgos Amuzgo"] = "azg",
["San Pedro Quiatoni Zapotec"] = "zpf",
["San Vicente Coatlán Zapotec"] = "zpt",
["Sanapaná"] = "spn",
["Sanaviron"] = "sai-san",
["Sandawe"] = "sad",
["Sanga (Congo)"] = "sng",
["Sanga (Nigeria)"] = "xsn",
["Sanggau"] = "scg",
["Sangil"] = "snl",
["Sangkong"] = "sgk",
["Sanglechi"] = "sgy",
["Sangtam Naga"] = "nsa",
["Sangu (Gabon)"] = "snq",
["Sangu (Tanzania)"] = "sbp",
["Sani"] = "ysn",
["Sanie"] = "ysy",
["Saniyo-Hiyewe"] = "sny",
["Sankaran Maninka"] = "msc",
["Sansi"] = "ssi",
["Santa Catarina Albarradas Zapotec"] = "ztn",
["Santa Inés Ahuatempan Popoloca"] = "pca",
["Santa Inés Yatzechi Zapotec"] = "zpn",
["Santa Lucía Monteverde Mixtec"] = "mdv",
["Santa María La Alta Nahuatl"] = "nhz",
["Santa María Quiegolani Zapotec"] = "zpi",
["Santa María Zacatepec Mixtec"] = "mza",
["Santa Teresa Cora"] = "cok",
["Santiago Xanica Zapotec"] = "zpr",
["Santo Domingo Albarradas Zapotec"] = "zas",
["Sanumá"] = "xsu",
["Saparua"] = "spr",
["Sapará"] = "sai-sap",
["Sapo"] = "krn",
["Saponi"] = "spi",
["Sapuan"] = "spu",
["Sapé"] = "spc",
["Sar"] = "mwm",
["Sara"] = "sre",
["Sara Kaba"] = "sbz",
["Sara Kaba Deme"] = "kwg",
["Sara Kaba Náà"] = "kwv",
["Sarangani Blaan"] = "bps",
["Sarangani Manobo"] = "mbs",
["Sarasira"] = "zsa",
["Saraveca"] = "sar",
["Sarli"] = "sdf",
["Sartang"] = "onp",
["Sarua"] = "swy",
["Sarudu"] = "sdu",
["Saruga"] = "sra",
["Sasaru"] = "sxs",
["Tiếng Sassari"] = "sdc",
["Satawalese"] = "stw",
["Sateré-Mawé"] = "mav",
["Sathmar Swabian"] = "gmw-stm",
["Saudi Arabian Sign Language"] = "sdl",
["Sauraseni Apabhramsa"] = "inc-sap",
["Sauri"] = "srt",
["Sause"] = "sao",
["Sausi"] = "ssj",
["Tiếng Savosavo"] = "svs",
["Sawai"] = "szw",
["Saweru"] = "swr",
["Sawi"] = "saw",
["Sawila"] = "swt",
["Saya"] = "say",
["Sayula Popoluca"] = "pos",
["Scanian"] = "gmq-scy",
["Seba"] = "kdg",
["Seberuang"] = "sbx",
["Sebop"] = "sib",
["Sebuyau"] = "snb",
["Sechura"] = "sai-sec",
["Secoya"] = "sey",
["Sedoa"] = "tvw",
["Seenku"] = "sos",
["Segai"] = "sge",
["Segeju"] = "seg",
["Seget"] = "sbg",
["Sehwi"] = "sfw",
["Seim"] = "sim",
["Seimat"] = "ssg",
["Seit-Kaitetu"] = "hik",
["Sekani"] = "sek",
["Sekapan"] = "skp",
["Sekar"] = "skz",
["Seke"] = "skj",
["Sekele"] = "vaj",
["Seki"] = "syi",
["Seko Padang"] = "skx",
["Seko Tengah"] = "sko",
["Sekpele"] = "lip",
["Selangor Sign Language"] = "kgi",
["Selaru"] = "slu",
["Selayar"] = "sly",
["Selee"] = "snw",
["Selepet"] = "spl",
["Selk'nam"] = "ona",
["Selonian"] = "sxl",
["Selungai Murut"] = "slg",
["Seluwasan"] = "sws",
["Sema"] = "nsm",
["Semandang"] = "sdm",
["Sembakung Murut"] = "sbr",
["Semimi"] = "etz",
["Semnani"] = "smy",
["Sempan"] = "xse",
["Senara Sénoufo"] = "seq",
["Senaya"] = "syn",
["Sene"] = "sej",
["Sengele"] = "szg",
["Senggi"] = "snu",
["Sengo"] = "spk",
["Sengseng"] = "ssz",
["Sensi"] = "sni",
["Sentani"] = "set",
["Senthang Chin"] = "sez",
["Sentinelese"] = "std",
["Sepa (Indonesia)"] = "spb",
["Sepa (New Guinea)"] = "spe",
["Sepen"] = "spm",
["Sepik Iwam"] = "iws",
["Sepik Mari"] = "mbx",
["Sera"] = "sry",
["Sere"] = "swf",
["Serili"] = "sve",
["Seroa"] = "kqu",
["Serrano"] = "ser",
["Seru"] = "szd",
["Serua"] = "srw",
["Serudung Murut"] = "srk",
["Serui-Laut"] = "seu",
["Seta"] = "stf",
["Setaman"] = "stm",
["Seti"] = "sbi",
["Sewa Bay"] = "sew",
["Seychellois Creole"] = "crs",
["Sha"] = "scw",
["Shahmirzadi"] = "srz",
["Shahrudi"] = "shm",
["Shall-Zwall"] = "sha",
["Shama-Sambuga"] = "sqa",
["Shamang"] = "xsh",
["Shambala"] = "ksb",
["Shanenawa"] = "swo",
["Shanga"] = "sho",
["Shangzhai"] = "jih",
["Shaozhou Tuhua"] = "zhx-sht",
["Sharanahua"] = "mcd",
["Shark Bay"] = "ssv",
["Sharwa"] = "swq",
["Shasta"] = "sht",
["Shatt"] = "shj",
["Shau"] = "sqh",
["Shawnee"] = "sjw",
["Tiếng Xa"] = "shx",
["Shehri"] = "shv",
["Sheko"] = "she",
["Shelta"] = "sth",
["Shendu"] = "shl",
["Sheni"] = "scv",
["Sherbro"] = "bun",
["Sherdukpen"] = "sdp",
["Shi"] = "shr",
["Shihhi Arabic"] = "ssh",
["Shiki"] = "gua",
["Shilluk"] = "shk",
["Shipibo-Conibo"] = "shp",
["Shixing"] = "sxg",
["Shoo-Minda-Nye"] = "bcv",
["Shoshone"] = "shh",
["Shua"] = "shg",
["Shuar"] = "jiv",
["Shuba"] = "cbq",
["Shumashti"] = "sts",
["Shumcho"] = "scu",
["Shuwa-Zamani"] = "ksa",
["Shwai"] = "shw",
["Sialum"] = "slw",
["Siamou"] = "sif",
["Sian"] = "spg",
["Siane"] = "snp",
["Siang"] = "sya",
["Siar-Lak"] = "sjr",
["Sibe"] = "nco",
["Sibu Melanau"] = "sdx",
["Sicanian"] = "sxc",
["Siculo-Arabic"] = "sqr",
["Sidetic"] = "xsd",
["Sie"] = "erg",
["Sierra Leone Sign Language"] = "sgx",
["Sierra Negra Nahuatl"] = "nsu",
["Sierra de Juárez Zapotec"] = "zaa",
["Sighu"] = "sxe",
["Sihan"] = "snr",
["Sika"] = "ski",
["Sikaiana"] = "sky",
["Sikaritai"] = "tty",
["Sikiana"] = "sik",
["Sikule"] = "skh",
["Sila"] = "slt",
["Silacayoapan Mixtec"] = "mks",
["Sileibi"] = "sbq",
["Silimo"] = "wul",
["Siliput"] = "mkc",
["Silopi"] = "xsp",
["Simaa"] = "sie",
["Simba"] = "sbw",
["Simbali"] = "smg",
["Simbari"] = "smb",
["Simbo"] = "sbb",
["Simeku"] = "smz",
["Simeulue"] = "smr",
["Simte"] = "smt",
["Sinacantán"] = "nai-sin",
["Sinagen"] = "siu",
["Sinasina"] = "sst",
["Sindarin"] = "sjn",
["Sindhi Bhil"] = "sbn",
["Sindihui Mixtec"] = "xts",
["Singa"] = "sgm",
["Singapore Sign Language"] = "sls",
["Singpho"] = "sgp",
["Sinicahua Mixtec"] = "xti",
["Sininkere"] = "skq",
["Sinte Romani"] = "rmo",
["Sinyar"] = "sys",
["Sinúfana"] = "sai-sin",
["Sio"] = "xsi",
["Siona"] = "snn",
["Sipakapense"] = "qum",
["Sira"] = "swj",
["Siri"] = "sir",
["Siriano"] = "sri",
["Sirionó"] = "srq",
["Siroi"] = "ssd",
["Siuslaw"] = "sis",
["Sivandi"] = "siy",
["Siwai"] = "siw",
["Siyin Chin"] = "csy",
["Skagit"] = "ska",
["Skalvian"] = "svx",
["Ske"] = "ske",
["Skou"] = "skv",
["Slavomolisano"] = "svm",
["Slovakian Sign Language"] = "svk",
["Small Flowery Miao"] = "sfm",
["Smärky Kanum"] = "kxq",
["Snohomish"] = "sno",
["So'a"] = "ssq",
["Sobei"] = "sob",
["Sochiapam Chinantec"] = "cso",
["Soga"] = "xog",
["Sok"] = "skk",
["Soko"] = "soc",
["Sokoro"] = "sok",
["Solano"] = "xso",
["Soli"] = "sby",
["Solos"] = "sol",
["Som"] = "smc",
["Somba-Siawari"] = "bmu",
["Somra"] = "ntx",
["Somrai"] = "sor",
["Somray"] = "smu",
["Somyev"] = "kgt",
["Sonaga"] = "ysg",
["Sonde"] = "shc",
["Songe"] = "sop",
["Songomeno"] = "soe",
["Songoora"] = "sod",
["Sonha"] = "soi",
["Sonia"] = "siq",
["Soo"] = "teu",
["Sop"] = "urw",
["Sori-Harengan"] = "sbh",
["Sorkhei"] = "sqo",
["Sorothaptic"] = "sxo",
["Sorsogon Ayta"] = "ays",
["Sos Kundi"] = "sdk",
["Sota Kanum"] = "krz",
["Sou"] = "sqq",
["South African Sign Language"] = "sfs",
["South Awyu"] = "aws",
["South Boma"] = "bnt-sbo",
["Tiếng Banda Trung Nam"] = "lnl",
["South Central Dinka"] = "dib",
["South Fali"] = "fal",
["South Giziga"] = "giz",
["South Lembata"] = "lmf",
["South Muyu"] = "kts",
["South Nuaulu"] = "nxl",
["South Tairora"] = "omw",
["South Ucayali Ashéninka"] = "cpy",
["South Watut"] = "mcy",
["Southeast Ambrym"] = "tvk",
["Southeast Babar"] = "vbb",
["Southeast Ijo"] = "ijs",
["Southeast Pashayi"] = "psi",
["Southeast Tasmanian"] = "xpf",
["Southeastern Dinka"] = "dks",
["Southeastern Ixtlán Zapotec"] = "zpd",
["Southeastern Nochixtlán Mixtec"] = "mxy",
["Southeastern Pomo"] = "pom",
["Southeastern Puebla Nahuatl"] = "npl",
["Southeastern Tarahumara"] = "tcu",
["Southern Alta"] = "agy",
["Southern Birifor"] = "biv",
["Southern Bobo"] = "bwq",
["Southern Bontoc"] = "obk",
["Southern Catanduanes Bicolano"] = "bln",
["Southern Dagaare"] = "dga",
["Southern Ghale"] = "ghe",
["Southern Grebo"] = "grj",
["Southern Guiyang Hmong"] = "hmy",
["Southern Haida"] = "hax",
["Southern Hindko"] = "hnd",
["Southern Kalapuya"] = "sxk",
["Southern Kalinga"] = "ksc",
["Southern Khanty"] = "kca-sou",
["Tiếng Kissi Nam"] = "kss",
["Southern Kiwai"] = "kjd",
["Tiếng Xwarin"] = "sdh",
["Southern Lolopo"] = "ysp",
["Southern Lorung"] = "lrr",
["Southern Ma'di"] = "snm",
["Southern Mashan Hmong"] = "hma",
["Southern Muji"] = "ymc",
["Southern Ngbandi"] = "nbw",
["Southern Nisu"] = "nsd",
["Southern Nuni"] = "nnw",
["Southern Ohlone"] = "css",
["Southern One"] = "osu",
["Southern Pame"] = "pmz",
["Southern Pinghua"] = "csp",
["Southern Pomo"] = "peq",
["Southern Puebla Mixtec"] = "mit",
["Southern Puget Sound Salish"] = "slh",
["Southern Pumi"] = "pmj",
["Southern Qiandong Miao"] = "hms",
["Southern Rengma Naga"] = "nre",
["Southern Sama"] = "ssb",
["Southern Sierra Miwok"] = "skd",
["Southern Tidong"] = "itd",
["Southern Tiwa"] = "tix",
["Southern Toussian"] = "wib",
["Southern Tutchone"] = "tce",
["Southern Valley Yokuts"] = "nai-svy",
["Southwest Gbaya"] = "gso",
["Southwest Palawano"] = "plv",
["Southwest Pashayi"] = "psh",
["Southwest Tanna"] = "nwi",
["Southwestern Bontoc"] = "vbk",
["Southwestern Dinka"] = "dik",
["Southwestern Fars"] = "fay",
["Southwestern Guiyang Hmong"] = "hmg",
["Southwestern Huishui Hmong"] = "hmh",
["Southwestern Nisu"] = "nsv",
["Southwestern Tamang"] = "tsf",
["Southwestern Tarahumara"] = "twr",
["Southwestern Tepehuan"] = "tla",
["Southwestern Tlaxiaco Mixtec"] = "meh",
["Sowa"] = "sww",
["Sowanda"] = "sow",
["Soyaltepec Mazatec"] = "vmp",
["Soyaltepec Mixtec"] = "vmq",
["Spanish Sign Language"] = "ssp",
["Spiti Bhoti"] = "spt",
["Spokane"] = "spo",
["Sri Lankan Creole Malay"] = "sci",
["Sri Lankan Sign Language"] = "sqs",
["Stod Bhoti"] = "sbu",
["Stoney"] = "sto",
["Suabo"] = "szp",
["Suarmin"] = "seo",
["Suau"] = "swp",
["Suba"] = "sxb",
["Suba-Simbiti"] = "ssc",
["Subi"] = "xsj",
["Subiya"] = "sbs",
["Subtiaba"] = "sut",
["Sudest"] = "tgo",
["Sudovian"] = "xsv",
["Suena"] = "sue",
["Suga"] = "sgi",
["Suganga"] = "sug",
["Sugut Dusun"] = "kzs",
["Suki"] = "sui",
["Suku"] = "sub",
["Sukuma"] = "suk",
["Sukur"] = "syk",
["Sukurum"] = "zsu",
["Sula"] = "szn",
["Sulka"] = "sua",
["Sulod"] = "srg",
["Suma"] = "sqm",
["Sumariup"] = "siv",
["Sumau"] = "six",
["Tiếng Sumbawa"] = "smw",
["Sumbwa"] = "suw",
["Sumtu Chin"] = "csv",
["Sunam"] = "ssk",
["Sunum"] = "ymn",
["Sunwar"] = "suz",
["Suoy"] = "syo",
["Supyire"] = "spp",
["Sur"] = "tdl",
["Surbakhal"] = "sbj",
["Surigaonon"] = "sgd",
["Sursurunga"] = "sgz",
["Suruahá"] = "swx",
["Surubu"] = "sde",
["Suruí"] = "sru",
["Suruí Do Pará"] = "mdz",
["Susquehannock"] = "sqn",
["Susuami"] = "ssu",
["Suundi"] = "sdj",
["Suwawa"] = "swu",
["Suyá"] = "suy",
["Swabian"] = "swg",
["Swampy Cree"] = "csw",
["Swedish Sign Language"] = "swl",
["Swiss-French Sign Language"] = "ssr",
["Swiss-German Sign Language"] = "sgg",
["Swiss-Italian Sign Language"] = "slf",
["Swo"] = "sox",
["Syenara Senoufo"] = "shz",
["Sácata"] = "sai-sac",
["São Paulo Kaingáng"] = "zkp",
["Sãotomense"] = "cri",
["Sìcìté Sénoufo"] = "sep",
["T'en"] = "tct",
["Tabaa Zapotec"] = "zat",
["Tabancale"] = "sai-tab",
["Tabaru"] = "tby",
["Tabasco Chontal"] = "chf",
["Tabasco Nahuatl"] = "nhc",
["Tabasco Zoque"] = "zoq",
["Tabla"] = "tnm",
["Tabo"] = "knv",
["Tabriak"] = "tzx",
["Tacahua Mixtec"] = "xtt",
["Tacana"] = "tna",
["Tadaksahak"] = "dsq",
["Tae'"] = "rob",
["Tafreshi"] = "xme-taf",
["Tagabawa"] = "bgs",
["Tagakaulu Kalagan"] = "klg",
["Tagbanwa"] = "tbw",
["Tagbu"] = "tbm",
["Tagish"] = "tgx",
["Tagwana Senoufo"] = "tgw",
["Tai"] = "taw",
["Tai Hang Tong"] = "thc",
["Tai Hongjin"] = "tiz",
["Tai Long"] = "thi",
["Tai Thanh"] = "tmm",
["Tai Ya"] = "cuu",
["Taiap"] = "gpn",
["Taikat"] = "aos",
["Tainae"] = "ago",
["Tairuma"] = "uar",
["Taita"] = "dav",
["Taiwan Sign Language"] = "tss",
["Taje"] = "pee",
["Tiếng Tajio"] = "tdj",
["Tajuasohn"] = "tja",
["Takelma"] = "tkm",
["Takia"] = "tbc",
["Takka Apabhramsa"] = "inc-tak",
["Takua"] = "tkz",
["Takuu"] = "nho",
["Takwane"] = "tke",
["Talaud"] = "tld",
["Taliabu"] = "tlv",
["Talieng"] = "tdf",
["Talinga-Bwisi"] = "tlj",
["Talise"] = "tlr",
["Tallán"] = "sai-tal",
["Talodi"] = "tlo",
["Taloki"] = "tlk",
["Talondo'"] = "tln",
["Talu"] = "yta",
["Tama (Chad)"] = "tma",
["Tama (Colombia)"] = "ten",
["Tamagario"] = "tcg",
["Tamambo"] = "mla",
["Taman (Indonesia)"] = "tmn",
["Taman (Myanmar)"] = "tcl",
["Tamanaku"] = "tmz",
["Tamazola Mixtec"] = "vmx",
["Tambas"] = "tdk",
["Tambora"] = "xxt",
["Tambotalo"] = "tls",
["Tambunan Dusun"] = "kzt",
["Tami"] = "tmy",
["Tamnim Citak"] = "tml",
["Tampias Lobu"] = "low",
["Tampulma"] = "tpm",
["Tanacross"] = "tcb",
["Tanahmerah"] = "tcm",
["Tanapag"] = "tpv",
["Tandaganon"] = "tgn",
["Tandia"] = "tni",
["Tanema"] = "tnx",
["Tangale"] = "tan",
["Tangam"] = "sit-tgm",
["Tanggu"] = "tgu",
["Tangko"] = "tkx",
["Tangsa"] = "nst",
["Tanguat"] = "tbs",
["Tiếng Tanimuca-Retuarã"] = "tnc",
["Tanjijili"] = "uji",
["Tanudan Kalinga"] = "kml",
["Tanzanian Sign Language"] = "tza",
["Tapachultec"] = "nai-tap",
["Taparita"] = "sai-tpr",
["Tapayuna"] = "sai-tap",
["Tapeba"] = "tbb",
["Tapei"] = "afp",
["Tapieté"] = "tpj",
["Tar Gula"] = "kcm",
["Tarairiú"] = "sai-trr",
["Tarao"] = "tro",
["Taraon"] = "mhu",
["Tareng"] = "tgr",
["Tarjumo"] = "txj",
["Tarok"] = "yer",
["Tarpia"] = "tpf",
["Tartessian"] = "txr",
["Taruma"] = "tdm",
["Tasmate"] = "tmt",
["Tataltepec Chatino"] = "cta",
["Tatana"] = "txx",
["Tataviam"] = "azc-tat",
["Tauade"] = "ttd",
["Taulil"] = "tuh",
["Taupota"] = "tpa",
["Taushiro"] = "trr",
["Tauya"] = "tya",
["Taveta"] = "tvs",
["Tawala"] = "tbo",
["Tawandê"] = "xtw",
["Tawang Monpa"] = "twm",
["Tawasa"] = "nai-taw",
["Taworta"] = "tbp",
["Tawoyan"] = "twy",
["Tawr Chin"] = "tcp",
["Tay Khang"] = "tnu",
["Tayabas Ayta"] = "ayy",
["Tayo"] = "cks",
["Tboli"] = "tbl",
["Tchitchege"] = "tck",
["Tchumbuli"] = "bqa",
["Te'un"] = "tve",
["Teanu"] = "tkw",
["Tebul Sign Language"] = "tsy",
["Tebul Ure Dogon"] = "dtu",
["Tecpatlán Totonac"] = "tcw",
["Tedaga"] = "tuq",
["Tee"] = "tkq",
["Tefaro"] = "tfo",
["Tegali"] = "ras",
["Tehit"] = "kps",
["Tehuelche"] = "teh",
["Teiwa"] = "twe",
["Tejalapan Zapotec"] = "ztt",
["Teke-Fuumu"] = "ifm",
["Teke-Kukuya"] = "kkw",
["Teke-Laali"] = "lli",
["Teke-Tege"] = "teg",
["Teke-Tsaayi"] = "tyi",
["Teke-Tyee"] = "tyx",
["Tektiteko"] = "ttc",
["Tela-Masbuar"] = "tvm",
["Telefol"] = "tlf",
["Teluti"] = "tlt",
["Tembé"] = "tqb",
["Teme"] = "tdo",
["Temein"] = "teq",
["Temi"] = "soz",
["Temne"] = "tem",
["Temoaya Otomi"] = "ott",
["Tempasuk Dusun"] = "tdu",
["Tenango Otomi"] = "otn",
["Tene Kan Dogon"] = "dtk",
["Tenggarong Kutai Malay"] = "vkt",
["Tenino"] = "tqn",
["Tenis"] = "tns",
["Tennet"] = "tex",
["Teojomulco Chatino"] = "omq-teo",
["Teop"] = "tio",
["Teor"] = "tev",
["Tepecano"] = "tep",
["Tepetotutla Chinantec"] = "cnt",
["Tepeuxila Cuicatec"] = "cux",
["Tepo Krumen"] = "ted",
["Tiếng Mixtec Teposcolula"] = "omq-tel",
["Tequistlatec"] = "nai-teq",
["Tera"] = "ttr",
["Terebu"] = "trb",
["Terei"] = "buo",
["Tereno"] = "ter",
["Tereweng"] = "twg",
["Terik"] = "tec",
["Termanu"] = "twu",
["Ternateño"] = "tmg",
["Tese"] = "keg",
["Teshenawa"] = "twc",
["Tetela"] = "tll",
["Tetelcingo Nahuatl"] = "nhg",
["Tetete"] = "teb",
["Tetun Dili"] = "tdt",
["Teushen"] = "sai-teu",
["Teutila Cuicatec"] = "cut",
["Tewa"] = "tew",
["Texcatepec Otomi"] = "otx",
["Texistepec Popoluca"] = "poq",
["Texmelucan Zapotec"] = "zpz",
["Tezoatlán Mixtec"] = "mxb",
["Tha"] = "thy",
["Thado Chin"] = "tcz",
["Thai Sign Language"] = "tsq",
["Thaiphum Chin"] = "cth",
["Thakali"] = "ths",
["Thamudic"] = "sem-tha",
["Thangmi"] = "thf",
["Thao"] = "ssf",
["Tharaka"] = "thk",
["Tharrgari"] = "dhr",
["Thawa"] = "xtv",
["Thopho"] = "ytp",
["Thu Lao"] = "tyl",
["Thulung"] = "tdh",
["Thurawal"] = "tbh",
["Thuri"] = "thu",
["Tiagbamrin Aizi"] = "ahi",
["Tiale"] = "mnl",
["Tibea"] = "ngy",
["Ticuna"] = "tca",
["Tidaá Mixtec"] = "mtx",
["Tidore"] = "tvo",
["Tiemacèwè Bozo"] = "boo",
["Tiene"] = "tii",
["Tifal"] = "tif",
["Tigak"] = "tgc",
["Tii"] = "txq",
["Tijaltepec Mixtec"] = "xtl",
["Tikar"] = "tik",
["Tikopia"] = "tkp",
["Tilapa Otomi"] = "otl",
["Tillamook"] = "til",
["Tilquiapan Zapotec"] = "zts",
["Tilung"] = "tij",
["Tima"] = "tms",
["Timbe"] = "tim",
["Timor Pidgin"] = "tvy",
["Timote"] = "sai-tim",
["Timucua"] = "tjm",
["Timugon Murut"] = "tih",
["Tinani"] = "lbf",
["Tingui-Boto"] = "tgv",
["Tinigua"] = "tit",
["Tinoc Kallahan"] = "tne",
["Tinputz"] = "tpz",
["Tira"] = "tic",
["Tirahi"] = "tra",
["Tiranige Diga Dogon"] = "tde",
["Tircul"] = "pyx",
["Tiri"] = "cir",
["Tita"] = "tdq",
["Titan"] = "ttv",
["Tiv"] = "tiv",
["Tiéfo"] = "tiq",
["Tiéyaxo Bozo"] = "boz",
["Tjurruru"] = "tju",
["Tlacoatzintepec Chinantec"] = "ctl",
["Tlacolulita Zapotec"] = "zpk",
["Tlahuica"] = "ocu",
["Tlahuitoltepec Mixe"] = "mxp",
["Tlamacazapa Nahuatl"] = "nuz",
["Tlazoyaltepec Mixtec"] = "mqh",
["To"] = "toz",
["To'abaita"] = "mlu",
["Toaripi"] = "tqo",
["Toba"] = "tob",
["Toba Batak"] = "bbc",
["Toba-Maskoy"] = "tmf",
["Tobagonian Creole English"] = "tgh",
["Tobanga"] = "tng",
["Tobati"] = "tti",
["Tobelo"] = "tlb",
["Tobilung"] = "tgb",
["Tobo"] = "tbv",
["Tocantins Asurini"] = "asu",
["Tofanma"] = "tlg",
["Tofin Gbe"] = "tfi",
["Togbo-Vara Banda"] = "tor",
["Togoyo"] = "tgy",
["Tojolabal"] = "toj",
["Toka-Leya"] = "dov",
["Tokano"] = "zuh",
["Tol"] = "jic",
["Tolai"] = "ksd",
["Tolaki"] = "lbw",
["Tolomako"] = "tlm",
["Tolowa"] = "tol",
["Toloza"] = "ytl",
["Tomadino"] = "tdi",
["Tombelala"] = "ttp",
["Tombonuo"] = "txa",
["Tombulu"] = "tom",
["Tomini"] = "txm",
["Tommeginne"] = "xpv",
["Tommo So"] = "dto",
["Tomo Kan Dogon"] = "dtm",
["Tomoip"] = "tqp",
["Tondano"] = "tdn",
["Tonga (Malawi)"] = "tog",
["Tonga (Mozambique)"] = "toh",
["Tonga (Zambia)"] = "toi",
["Tongwe"] = "tny",
["Tonjon"] = "tjn",
["Tonsawang"] = "tnw",
["Tonsea"] = "txs",
["Tontemboan"] = "tnt",
["Toogee"] = "xpx",
["Topoiyo"] = "toy",
["Toposa"] = "toq",
["Toraja-Sa'dan"] = "sda",
["Toram"] = "trj",
["Torau"] = "ttu",
["Toro"] = "tdv",
["Toro So Dogon"] = "dts",
["Toro Tegu Dogon"] = "dtt",
["Toromono"] = "tno",
["Torona"] = "tqr",
["Torres Strait Creole"] = "tcs",
["Torricelli"] = "tei",
["Torricelli Yau"] = "yyu",
["Torá"] = "trz",
["Tosu"] = "sit-tos",
["Totela"] = "ttl",
["Totoli"] = "txe",
["Totomachapan Zapotec"] = "zph",
["Totontepec Mixe"] = "mto",
["Totoro"] = "ttk",
["Touo"] = "tqu",
["Toura"] = "neb",
["Tourangeau"] = "roa-tou",
["Towei"] = "ttn",
["Traveller Danish"] = "rmd",
["Traveller Norwegian"] = "rmg",
["Traveller Scottish"] = "trl",
["Tregami"] = "trm",
["Tremembé"] = "tme",
["Trieng"] = "stg",
["Trimuris"] = "tip",
["Tring"] = "tgq",
["Tringgus"] = "trx",
["Trinidad and Tobago Sign Language"] = "lst",
["Trinidadian Creole English"] = "trf",
["Trinitario"] = "trn",
["Truká"] = "tka",
["Trumai"] = "tpy",
["Ts'ün-Lao"] = "tsl",
["Tsaangi"] = "tsa",
["Tsafiki"] = "cof",
["Tsakwambo"] = "kvz",
["Tsetsaut"] = "txc",
["Tshobdun"] = "sit-tsh",
["Tshwa"] = "hio",
["Tsikimba"] = "kdl",
["Tsimané"] = "cas",
["Tsishingini"] = "tsw",
["Tso"] = "ldp",
["Tsogo"] = "tsv",
["Tsotsitaal"] = "fly",
["Tsum"] = "ttz",
["Tsuvadi"] = "tvd",
["Tsuvan"] = "tsh",
["Tswa"] = "tsc",
["Tswapong"] = "two",
["Tubar"] = "tbu",
["Tucano"] = "tuo",
["Tugen"] = "tuy",
["Tugun"] = "tzn",
["Tugutil"] = "tuj",
["Tukpa"] = "tpq",
["Tukudede"] = "tkd",
["Tukumanféd"] = "tkf",
["Tula"] = "tul",
["Tule-Kaweah Yokuts"] = "nai-tky",
["Tulehu"] = "tlu",
["Tulishi"] = "tey",
["Tulu-Bohuai"] = "rak",
["Tulua"] = "aus-tul",
["Tuma-Irumu"] = "iou",
["Tumak"] = "tmc",
["Tumi"] = "kku",
["Tumleo"] = "tmq",
["Tumshuqese"] = "xtq",
["Tumtum"] = "tbr",
["Tumulung Sisaala"] = "sil",
["Tunen"] = "tvu",
["Tungag"] = "lcm",
["Tunggare"] = "trt",
["Tunia"] = "tug",
["Tunisian Sign Language"] = "tse",
["Tunjung"] = "tjg",
["Tunumiisut"] = "esx-tut",
["Tunzu"] = "dza",
["Tuotomb"] = "ttf",
["Tuparí"] = "tpr",
["Tupinikin"] = "tpk",
["Tupuri"] = "tui",
["Turaka"] = "trh",
["Turi"] = "trd",
["Turiwára"] = "twt",
["Turka"] = "tuz",
["Turkana"] = "tuv",
["Turkish Sign Language"] = "tsm",
["Turks and Caicos Creole English"] = "tch",
["Turumsa"] = "tqm",
["Turung"] = "try",
["Tuscarora"] = "tus",
["Tutelo"] = "tta",
["Tutong"] = "ttg",
["Tutsa Naga"] = "tvt",
["Tutuba"] = "tmi",
["Tututepec Mixtec"] = "mtu",
["Tututni"] = "tuu",
["Tuwali Ifugao"] = "ifk",
["Tuwari"] = "tww",
["Tuxináwa"] = "tux",
["Tuxá"] = "tud",
["Tuyuca"] = "tue",
["Twana"] = "twa",
["Twendi"] = "twn",
["Tyaraity"] = "woa",
["Tyerrernotepanner"] = "xph",
["Tz'utujil"] = "tzj",
["Tzeltal"] = "tzh",
["Tày Tac"] = "tyt",
["Téén"] = "lor",
["Tübatulabal"] = "tub",
["Uab Meto"] = "aoz",
["Uamué"] = "uam",
["Uare"] = "ksj",
["Ubaghara"] = "byc",
["Ubang"] = "uba",
["Ubi"] = "ubi",
["Ubir"] = "ubr",
["Ucayali-Yurúa Ashéninka"] = "cpb",
["Uda"] = "uda",
["Ufim"] = "ufi",
["Ugandan Sign Language"] = "ugn",
["Ughele"] = "uge",
["Uhami"] = "uha",
["Uisai"] = "uis",
["Ujir"] = "udj",
["Ukaan"] = "kcf",
["Ukhwejo"] = "ukh",
["Ukit"] = "umi",
["Ukpe-Bayobiri"] = "ukp",
["Ukpet-Ehom"] = "akd",
["Ukrainian Sign Language"] = "ukl",
["Ukue"] = "uku",
["Ukuriguma"] = "ukg",
["Ukwa"] = "ukq",
["Ukwuani-Aboh-Ndoni"] = "ukw",
["Ulau-Suain"] = "svb",
["Uldeme"] = "udl",
["Ulithian"] = "uli",
["Ulumanda'"] = "ulm",
["Ulwa"] = "ulw",
["Uma"] = "ppk",
["Uma' Lasan"] = "xky",
["Uma' Lung"] = "ulu",
["Umanakaina"] = "gdn",
["Umatilla"] = "uma",
["Umbindhamu"] = "umd",
["Umbu-Ungu"] = "ubu",
["Umbugarla"] = "umr",
["Umbuygamu"] = "umg",
["Umeda"] = "upi",
["Umiida"] = "xud",
["Umiray Dumaget Agta"] = "due",
["Umon"] = "umm",
["Umotína"] = "umo",
["Umpila"] = "ump",
["Una"] = "mtg",
["Unas"] = "art-una",
["Unde Kaili"] = "unz",
["Uneme"] = "une",
["Unggaranggu"] = "xun",
["Unggumi"] = "xgu",
["Tiếng Uni"] = "uni",
["Unserdeutsch"] = "uln",
["Unua"] = "onu",
["Unubahe"] = "unu",
["Uokha"] = "uok",
["Upper Chehalis"] = "cjh",
["Upper Grand Valley Dani"] = "dna",
["Upper Kuskokwim"] = "kuu",
["Upper Necaxa Totonac"] = "tku",
["Upper Tanana"] = "tau",
["Upper Taromi"] = "tov",
["Upper Umpqua"] = "xup",
["Ura (New Guinea)"] = "uro",
["Ura (Vanuatu)"] = "uur",
["Uradhi"] = "urf",
["Urapmin"] = "urm",
["Urarina"] = "ura",
["Urat"] = "urt",
["Urhobo"] = "urh",
["Uri"] = "uvh",
["Urigina"] = "urg",
["Urim"] = "uri",
["Urimo"] = "urx",
["Urningangg"] = "urc",
["Uru"] = "ure",
["Uru-Eu-Wau-Wau"] = "urz",
["Uru-Pa-In"] = "urp",
["Uruangnirin"] = "urn",
["Uruava"] = "urv",
["Uruguayan Sign Language"] = "ugy",
["Urumi"] = "uru",
["Usaghade"] = "usk",
["Usan"] = "wnu",
["Usarufa"] = "usa",
["Usila Chinantec"] = "cuc",
["Uspanteco"] = "usp",
["Utarmbung"] = "omo",
["Ute"] = "ute",
["Utu"] = "utu",
["Uwinymil"] = "aus-uwi",
["Uya"] = "usu",
["Uyajitaya"] = "duk",
["Uzekwe"] = "eze",
["Vaghua"] = "tva",
["Vagla"] = "vag",
["Vai"] = "vai",
["Vaiphei"] = "vap",
["Vale"] = "vae",
["Valencian Sign Language"] = "vsv",
["Valle Nacional Chinantec"] = "cvn",
["Valley Maidu"] = "vmv",
["Valman"] = "van",
["Valpei"] = "vlp",
["Vamale"] = "mkt",
["Vame"] = "mlr",
["Vandalic"] = "xvn",
["Vangunu"] = "mpr",
["Vanimo"] = "vam",
["Vanji"] = "ira-wnj",
["Vanuma"] = "vau",
["Vao"] = "vao",
["Varhadi"] = "vah",
["Varisi"] = "vrs",
["Vayu"] = "vay",
["Veddah"] = "ved",
["Vehes"] = "val",
["Vemgo-Mabas"] = "vem",
["Venezuelan Sign Language"] = "vsl",
["Ventureño"] = "veo",
["Vera'a"] = "vra",
["Vestinian"] = "xvs",
["Vidunda"] = "vid",
["Viemo"] = "vig",
["Vilela"] = "vil",
["Vili"] = "vif",
["Villa Viciosa Agta"] = "dyg",
["Vincentian Creole English"] = "svc",
["Viti"] = "vit",
["Vitou"] = "vto",
["Viya"] = "gev",
["Vlax Romani"] = "rmy",
["Volga German"] = "gmw-vog",
["Vono"] = "kch",
["Voro"] = "vor",
["Vracada Apabhramsa"] = "inc-vra",
["Vumbu"] = "vum",
["Vunapu"] = "vnp",
["Vunjo"] = "vun",
["Vute"] = "vut",
["Wa"] = "wbm",
["Wa'ema"] = "wag",
["Waamwang"] = "wmn",
["Wab"] = "wab",
["Wabo"] = "wbb",
["Waboda"] = "kmx",
["Wadaginam"] = "wdg",
["Waddar"] = "wbq",
["Wadi Wadi"] = "xwd",
["Wadjabangayi"] = "wdy",
["Wadjiginy"] = "wdj",
["Wadjigu"] = "wdu",
["Wae Rana"] = "wrx",
["Waffa"] = "waj",
["Wagawaga"] = "wgb",
["Wagaya"] = "wga",
["Wagdi"] = "wbr",
["Wageman"] = "waq",
["Wahau Kayan"] = "whu",
["Wahau Kenyah"] = "whk",
["Waigali"] = "wbk",
["Waigeo"] = "wgo",
["Waikuri"] = "nai-wai",
["Wailaki"] = "wlk",
["Wailapa"] = "wlr",
["Waima'a"] = "wmh",
["Waimiri-Atroari"] = "atr",
["Wainumá"] = "awd-wai",
["Waioli"] = "wli",
["Waitaká"] = "sai-wai",
["Waja"] = "wja",
["Wajarri"] = "wbv",
["Wajuk"] = "xwj",
["Waka"] = "wav",
["Wakawaka"] = "wkw",
["Wakoná"] = "waf",
["Wala"] = "lgl",
["Walak"] = "wlw",
["Walangama"] = "nlw",
["Wali (Ghana)"] = "wlx",
["Wali (Sudan)"] = "wll",
["Waling"] = "wly",
["Walio"] = "wla",
["Walla Walla"] = "waa",
["Walmajarri"] = "wmt",
["Wam"] = "wmo",
["Wamas"] = "wmc",
["Wambaya"] = "wmb",
["Wambon"] = "wms",
["Wamey"] = "cou",
["Wamin"] = "wmi",
["Wampar"] = "lbq",
["Wampur"] = "waz",
["Wan"] = "wan",
["Wanambre"] = "wnb",
["Wanap"] = "wnp",
["Wanda"] = "wbh",
["Wandala"] = "mfi",
["Wandamen"] = "wad",
["Wandarang"] = "wnd",
["Wandji"] = "wdd",
["Wanga"] = "lwg",
["Wanggamala"] = "wnm",
["Wangganguru"] = "wgg",
["Wanggom"] = "wng",
["Wangkayutyuru"] = "wky",
["Wangkumara"] = "xwk",
["Wanham"] = "sai-wnm",
["Wanji"] = "wbi",
["Wanman"] = "wbt",
["Wannu"] = "jub",
["Wano"] = "wno",
["Wantoat"] = "wnc",
["Wanukaka"] = "wnk",
["Wanyi"] = "wny",
["Wané"] = "hwa",
["Wapan"] = "juk",
["Wapishana"] = "wap",
["Wappo"] = "wao",
["Wara"] = "wbf",
["Warao"] = "wba",
["Warapu"] = "wra",
["Waray Sorsogon"] = "srv",
["Wardandi"] = "wxw",
["Warembori"] = "wsa",
["Wari'"] = "pav",
["Waris"] = "wrs",
["Waritai"] = "wbe",
["Wariyangga"] = "wri",
["Warkay-Bipim"] = "bgv",
["Warlmanpa"] = "wrl",
["Tiếng Warlpiri"] = "wbp",
["Warluwara"] = "wrb",
["Warnang"] = "wrn",
["Waropen"] = "wrp",
["Warray"] = "wrz",
["Warrgamay"] = "wgy",
["Warrwa"] = "wwr",
["Waru"] = "wru",
["Warumungu"] = "wrm",
["Waruna"] = "wrv",
["Warungu"] = "wrg",
["Warwar Feni"] = "hrw",
["Wasa"] = "wss",
["Wasco-Wishram"] = "wac",
["Wasembo"] = "gsp",
["Washo"] = "was",
["Waskia"] = "wsk",
["Wasu"] = "wsu",
["Watakataui"] = "wtk",
["Watam"] = "wax",
["Wathaurong"] = "wth",
["Watiwa"] = "wtf",
["Watubela"] = "wah",
["Waube"] = "kop",
["Wauja"] = "wau",
["Wauyai"] = "wuy",
["Wawa"] = "www",
["Tiếng Ngõa Hương"] = "wxa",
["Wayoró"] = "wyr",
["Wayumará"] = "sai-way",
["Wedau"] = "wed",
["Weh"] = "weh",
["Welaung"] = "weu",
["Weliki"] = "klh",
["Welsh Romani"] = "rmw",
["Wemale"] = "weo",
["Weme Gbe"] = "wem",
["Wendat"] = "wdt",
["Weri"] = "wer",
["Wersing"] = "kvw",
["West Albay Bikol"] = "fbl",
["West Ambae"] = "nnd",
["West Central Banda"] = "bbp",
["West Damar"] = "drn",
["West Greenlandic Pidgin"] = "crp-gep",
["West Lembata"] = "lmj",
["West Masela"] = "mss",
["West Tarangan"] = "txn",
["West Uvean"] = "uve",
["West-Central Limba"] = "lia",
["Western Arrernte"] = "are",
["Western Bolivian Guaraní"] = "gnw",
["Western Bukidnon Manobo"] = "mbb",
["Western Dani"] = "dnw",
["Western Durango Nahuatl"] = "azn",
["Western Fijian"] = "wyy",
["Western Gurung"] = "gvr",
["Western Jicaque"] = "und-wji",
["Western Juxtlahuaca Mixtec"] = "jmx",
["Western Karaboro"] = "kza",
["Western Keres"] = "kjq",
["Tiếng Krahn"] = "krw",
["Western Lalu"] = "ywl",
["Western Maninkakan"] = "mlq",
["Western Mashan Hmong"] = "hmw",
["Western Meohang"] = "raf",
["Western Muria"] = "mut",
["Western Panjabi"] = "pnb",
["Western Penan"] = "pne",
["Western Sisaala"] = "ssl",
["Western Subanon"] = "suc",
["Western Tawbuid"] = "twb",
["Western Totonac"] = "tqt",
["Western Tunebo"] = "tnb",
["Western Xwla Gbe"] = "xwl",
["Westrobothnian"] = "gmq-bot",
["Weyewa"] = "wew",
["White Lachi"] = "lwh",
["Whitesands"] = "tnp",
["Wiarumus"] = "tua",
["Wichita"] = "wic",
["Wichí Lhamtés Güisnay"] = "mzh",
["Wichí Lhamtés Nocten"] = "mtp",
["Wichí Lhamtés Vejoz"] = "wlv",
["Wik-Epa"] = "wie",
["Wik-Iiyanh"] = "wij",
["Wik-Keyangan"] = "wif",
["Wik-Me'anha"] = "wih",
["Wik-Mungkan"] = "wim",
["Wik-Ngathana"] = "wig",
["Wikalkan"] = "wik",
["Wikngenchera"] = "wua",
["Wilawila"] = "wil",
["Wintu"] = "wnw",
["Winyé"] = "kst",
["Wipi"] = "gdr",
["Wiraféd"] = "wir",
["Wirangu"] = "wgu",
["Wiru"] = "wiu",
["Wirö"] = "wpc",
["Wiwa"] = "mbp",
["Woccon"] = "xwc",
["Wogamusin"] = "wog",
["Wogeo"] = "woc",
["Woi"] = "wbw",
["Wojenaka"] = "jod",
["Wolani"] = "wod",
["Woleaian"] = "woe",
["Womo"] = "wmx",
["Wong-gie"] = "aus-won",
["Wongo"] = "won",
["Woods Cree"] = "cwd",
["Woria"] = "wor",
["Worimi"] = "kda",
["Worodougou"] = "jud",
["Worora"] = "wro",
["Wotapuri-Katarqalai"] = "wsv",
["Woun Meu"] = "noa",
["Wudu"] = "wud",
["Wulguru"] = "aus-wul",
["Wuliwuli"] = "wlu",
["Wulna"] = "wux",
["Wumboko"] = "bqm",
["Wumbvu"] = "wum",
["Wumeng"] = "ywu",
["Wunai Bunu"] = "bwn",
["Wunambal"] = "wub",
["Wurrugu"] = "wur",
["Wusa"] = "yig",
["Wushi"] = "bse",
["Wusi"] = "wsi",
["Wutung"] = "wut",
["Wuvulu-Aua"] = "wuv",
["Wyandot"] = "wya",
["Wára"] = "tci",
["Wãpha"] = "juw",
["Wè Southern"] = "gxx",
["Wè Western"] = "wec",
["Xadani Zapotec"] = "zax",
["Xakriabá"] = "xkr",
["Xanaguía Zapotec"] = "ztg",
["Xaragure"] = "axx",
["Xerénte"] = "xer",
["Xetá"] = "xet",
["Xicotepec de Juárez Totonac"] = "too",
["Xinca"] = "xin",
["Xingú Asuriní"] = "asn",
["Xipaya"] = "xiy",
["Xiri"] = "xii",
["Xiriâna"] = "xir",
["Xishanba Lalo"] = "ywt",
["Xocó"] = "sai-xoc",
["Xokleng"] = "xok",
["Xukurú"] = "xoo",
["Xwela Gbe"] = "xwe",
["Yaa"] = "iyx",
["Yabarana"] = "yar",
["Yabaâna"] = "ybn",
["Yaben"] = "ybm",
["Yabong"] = "ybo",
["Yabula Yabula"] = "yxy",
["Yace"] = "ekr",
["Yafi"] = "wfg",
["Yagara"] = "yxg",
["Yagaria"] = "ygr",
["Yagomi"] = "ygm",
["Yagua"] = "yad",
["Yagwoia"] = "ygw",
["Yahadian"] = "ner",
["Yahang"] = "rhp",
["Yahuna"] = "ynu",
["Yaka"] = "yaf",
["Yakaikeke"] = "ykk",
["Yakoma"] = "yky",
["Tiếng Yala"] = "yba",
["Yalahatan"] = "jal",
["Yalakalore"] = "xyl",
["Yalarnnga"] = "ylr",
["Yale"] = "nce",
["Yaleba"] = "ylb",
["Yalunka"] = "yal",
["Yalálag Zapotec"] = "zpu",
["Yamap"] = "ymp",
["Yamba"] = "yam",
["Yambes"] = "ymb",
["Yambeta"] = "yat",
["Yamdena"] = "jmd",
["Yameo"] = "yme",
["Yaminahua"] = "yaa",
["Yamongeri"] = "ymg",
["Yan-nhangu"] = "jay",
["Yana"] = "ynn",
["Yanda"] = "yda",
["Yanda Dogon"] = "dym",
["Yandjibara"] = "xyb",
["Yandruwandha"] = "ynd",
["Yangben"] = "yav",
["Yangkaal"] = "aus-ynk",
["Yangkam"] = "bsx",
["Yangman"] = "jng",
["Yango"] = "yng",
["Yangulam"] = "ynl",
["Yangum Dey"] = "yde",
["Yangum Gel"] = "ygl",
["Yangum Mon"] = "ymo",
["Yankunytjatjara"] = "kdd",
["Yanomamö"] = "guu",
["Yanomámi"] = "wca",
["Yansi"] = "yns",
["Yaosakor Asmat"] = "asy",
["Yaouré"] = "yre",
["Yaqay"] = "jaq",
["Yaqui"] = "yaq",
["Yarawata"] = "yrw",
["Yareba"] = "yrb",
["Yareni Zapotec"] = "zae",
["Yarli"] = "yxl",
["Yarluyandi"] = "yry",
["Yarumá"] = "sai-yar",
["Yarí"] = "yri",
["Yasa"] = "yko",
["Yatay"] = "yty",
["Yaul"] = "yla",
["Yaur"] = "jau",
["Yautepec Zapotec"] = "zpb",
["Yavitero"] = "yvt",
["Yawa"] = "yva",
["Yawalapití"] = "yaw",
["Yawanawa"] = "ywn",
["Yawarawarga"] = "yww",
["Yaweyuha"] = "yby",
["Yawijibaya"] = "jbw",
["Yawiyo"] = "ybx",
["Yawuru"] = "ywr",
["Yaygir"] = "xya",
["Yei"] = "jei",
["Yekhee"] = "ets",
["Yekora"] = "ykr",
["Yelmek"] = "jel",
["Yelogu"] = "ylg",
["Yemba"] = "ybb",
["Tiếng Ả Rập Sana'a"] = "ayn",
["Yendang"] = "yen",
["Yeni"] = "yei",
["Yeniche"] = "yec",
["Yerakai"] = "yra",
["Yeretuar"] = "gop",
["Yerukula"] = "yeu",
["Yeskwa"] = "yes",
["Yessan-Mayo"] = "yss",
["Yetfa"] = "yet",
["Yeyi"] = "yey",
["Yil"] = "yll",
["Yimas"] = "yee",
["Yimchungru Naga"] = "yim",
["Yinbaw Karen"] = "kvu",
["Yindjilandji"] = "yil",
["Yine"] = "pib",
["Yinggarda"] = "yia",
["Yinhawangka"] = "ywg",
["Yiningayi"] = "ygi",
["Yintale Karen"] = "kvy",
["Yinwum"] = "yxm",
["Yir-Yoront"] = "yiy",
["Yirandali"] = "ljw",
["Yis"] = "yis",
["Yitha Yitha"] = "xth",
["Yoba"] = "yob",
["Yocoboué Dida"] = "gud",
["Yoidik"] = "ydk",
["Yoke"] = "yki",
["Yolngu Sign Language"] = "ygs",
["Yoloxochitl Mixtec"] = "xty",
["Yombe"] = "yom",
["Yopno"] = "yut",
["Yora"] = "mts",
["Yorta Yorta"] = "xyy",
["Younuo Bunu"] = "buh",
["Yout Wam"] = "ytw",
["Yuaga"] = "nua",
["Yucatec Maya Sign Language"] = "msd",
["Yuchi"] = "yuc",
["Yucuañe Mixtec"] = "mvg",
["Yucuna"] = "ycn",
["Yugambal"] = "yub",
["Yugoslavian Sign Language"] = "ysl",
["Yugul"] = "ygu",
["Yuhup"] = "yab",
["Yuki"] = "yuk",
["Yukpa"] = "yup",
["Yukuben"] = "ybl",
["Yulu"] = "yul",
["Yuma"] = "yum",
["Yumana"] = "awd-yum",
["Yupiltepeque"] = "nai-yup",
["Yupua"] = "sai-yup",
["Yuqui"] = "yuq",
["Yuracare"] = "yuz",
["Yuru"] = "ljx",
["Yurumanguí"] = "sai-yur",
["Yurutí"] = "yui",
["Yutanduchi Mixtec"] = "mab",
["Yuwana"] = "yau",
["Yuyu"] = "yxu",
["Zaachila Zapotec"] = "ztx",
["Zabana"] = "kji",
["Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"] = "nhi",
["Zakhring"] = "zkr",
["Zambian Sign Language"] = "zsl",
["Zan Gula"] = "zna",
["Zanaki"] = "zak",
["Zande"] = "zne",
["Zangwal"] = "zah",
["Zaramo"] = "zaj",
["Zari"] = "zaz",
["Zauzou"] = "zal",
["Zazao"] = "jaj",
["Zbu"] = "sit-zbu",
["Zeem"] = "zua",
["Zemba"] = "dhm",
["Zeme Naga"] = "nzm",
["Zemgalian"] = "xzm",
["Zenag"] = "zeg",
["Zenzontepec Chatino"] = "czn",
["Zhang-Zhung"] = "xzh",
["Zhire"] = "zhi",
["Zhoa"] = "zhw",
["Zhár"] = "jjr",
["Zia"] = "zia",
["Zialo"] = "zil",
["Zigula"] = "ziw",
["Zimakani"] = "zik",
["Zimba"] = "zmb",
["Zimbabwe Sign Language"] = "zib",
["Zinza"] = "zin",
["Zipser German"] = "gmw-zps",
["Zire"] = "sih",
["Ziriya"] = "zir",
["Zizilivakan"] = "ziz",
["Zo'é"] = "pto",
["Zokhuo"] = "yzk",
["Zotung Chin"] = "czt",
["Zulgo-Gemzek"] = "gnd",
["Zumaya"] = "zuy",
["Zuni"] = "zun",
["Zuwara"] = "ber-zuw",
["Zyphe"] = "zyp",
["Záparo"] = "zro",
["Biệt ngữ Chinook"] = "chn",
["Không xác định ngôn ngữ"] = "und",
["Ngôn ngữ ký hiệu Mỹ"] = "ase",
["Tiếng 'Are'are"] = "alu",
["Tiếng A Xương"] = "acn",
["Tiếng A'ou"] = "aou",
["Tiếng A-Hmao"] = "hmd",
["Tiếng Aari"] = "aiw",
["Tiếng Aari nguyên thủy"] = "omv-aro-pro",
["Tiếng Aasax"] = "aas",
["Tiếng Abaga"] = "abg",
["Tiếng Abai"] = "poz-abi",
["Tiếng Abanyom"] = "abm",
["Tiếng Abau"] = "aau",
["Tiếng Abaza"] = "abq",
["Tiếng Abidji"] = "abi",
["Tiếng Abinomn"] = "bsa",
["Tiếng Abkhaz"] = "ab",
["Tiếng Abkhaz-Abaza nguyên thủy"] = "cau-abz-pro",
["Tiếng Abon"] = "abo",
["Tiếng Abron"] = "abr",
["Tiếng Abui"] = "abz",
["Tiếng Abure"] = "abu",
["Tiếng Aceh"] = "ace",
["Tiếng Achawa"] = "aca",
["Tiếng Acheron"] = "acz",
["Tiếng Achi"] = "acr",
["Tiếng Acholi"] = "ach",
["Tiếng Achuar"] = "acu",
["Tiếng Achumawi"] = "acv",
["Tiếng Adangme"] = "ada",
["Tiếng Adi"] = "adi",
["Tiếng Adja"] = "ajg",
["Tiếng Adnyamathanha"] = "adt",
["Tiếng Adygea"] = "ady",
["Tiếng Adzera"] = "adz",
["Tiếng Aer"] = "aeq",
["Tiếng Afade"] = "aal",
["Tiếng Afar"] = "aa",
["Tiếng Afrikaans"] = "af",
["Tiếng Agatu"] = "agc",
["Tiếng Agawam"] = "alg-aga",
["Tiếng Aghem"] = "agq",
["Tiếng Aghul"] = "agx",
["Tiếng Aghwan"] = "xag",
["Tiếng Agta Dupaningan"] = "duo",
["Tiếng Aguacateca"] = "agu",
["Tiếng Ahom"] = "aho",
["Tiếng Ahtna"] = "aht",
["Tiếng Ai"] = "eee",
["Tiếng Ai Cập"] = "egy",
["Tiếng Ai Cập bình dân"] = "egx-dem",
["Tiếng Aimol"] = "aim",
["Tiếng Ainu"] = "ain",
["Tiếng Aiton"] = "aio",
["Tiếng Ajië"] = "aji",
["Tiếng Aka-Bo"] = "akm",
["Tiếng Aka-Jeru"] = "akj",
["Tiếng Aka-Kede"] = "akx",
["Tiếng Akan"] = "ak",
["Tiếng Akaselem"] = "aks",
["Tiếng Akawaio"] = "ake",
["Tiếng Akha"] = "ahk",
["Tiếng Akhvakh"] = "akv",
["Tiếng Akkad"] = "akk",
["Tiếng Aklanon"] = "akl",
["Tiếng Akoose"] = "bss",
["Tiếng Akuntsu"] = "aqz",
["Tiếng Alaba-K’abeena"] = "alw",
["Tiếng Alabama"] = "akz",
["Tiếng Alagwa"] = "wbj",
["Tiếng Alak"] = "alk",
["Tiếng Alamblak"] = "amp",
["Tiếng Alangan"] = "alj",
["Tiếng Alawa"] = "alh",
["Tiếng Albani"] = "sq",
["Tiếng Albani nguyên thủy"] = "sqj-pro",
["Tiếng Alchuka"] = "tuw-alk",
["Tiếng Alekano"] = "gah",
["Tiếng Aleut"] = "ale",
["Tiếng Algic nguyên thủy"] = "aql-pro",
["Tiếng Algonquin"] = "alq",
["Tiếng Algonquin nguyên thủy"] = "alg-pro",
["Tiếng Allar"] = "all",
["Tiếng Alsea"] = "aes",
["Tiếng Alumu-Tesu"] = "aab",
["Tiếng Alutor"] = "alr",
["Tiếng Alyentiyak"] = "sai-all",
["Tiếng Ama"] = "amm",
["Tiếng Amahuaca"] = "amc",
["Tiếng Amaimon"] = "ali",
["Tiếng Amal"] = "aad",
["Tiếng Amanab"] = "amn",
["Tiếng Amarasi"] = "aaz",
["Tiếng Ambai"] = "amk",
["Tiếng Ambrak"] = "aag",
["Tiếng Ambulas"] = "abt",
["Tiếng Amdang"] = "amj",
["Tiếng Amhara"] = "am",
["Tiếng Amis"] = "ami",
["Tiếng Amurdag"] = "amg",
["Tiếng Amuzgo"] = "amu",
["Tiếng Anaang"] = "anw",
["Tiếng Anal"] = "anm",
["Tiếng Anauyá"] = "awd-ana",
["Tiếng Andi"] = "ani",
["Tiếng Angami"] = "njm",
["Tiếng Angika"] = "anp",
["Tiếng Angkula"] = "aus-ang",
["Tiếng Angola"] = "aoa",
["Tiếng Anh"] = "en",
["Tiếng Anh Solombala"] = "crp-slb",
["Tiếng Anh cổ"] = "ang",
["Tiếng Anh trung đại"] = "enm",
["Tiếng Anii"] = "blo",
["Tiếng Ankave"] = "aak",
["Tiếng Annobón"] = "fab",
["Tiếng Anuak"] = "anu",
["Tiếng Anuki"] = "aui",
["Tiếng Anyi"] = "any",
["Tiếng Ao"] = "njo",
["Tiếng Apabhramsa"] = "inc-apa",
["Tiếng Apache Tây"] = "apw",
["Tiếng Apache đồng bằng"] = "apk",
["Tiếng Aparaí"] = "apy",
["Tiếng Apatani"] = "apt",
["Tiếng Apinayé"] = "apn",
["Tiếng Aputai"] = "apx",
["Tiếng Aquitani"] = "xaq",
["Tiếng Aragon"] = "an",
["Tiếng Araki"] = "akr",
["Tiếng Arakwal"] = "rkw",
["Tiếng Aram"] = "arc",
["Tiếng Aranadan"] = "aaf",
["Tiếng Arapaho"] = "arp",
["Tiếng Arawak nguyên thủy"] = "awd-pro",
["Tiếng Araweté"] = "awt",
["Tiếng Archi"] = "aqc",
["Tiếng Arem"] = "aem",
["Tiếng Argobba"] = "agj",
["Tiếng Arhuaco"] = "arh",
["Tiếng Ari"] = "aac",
["Tiếng Arin"] = "xrn",
["Tiếng Armenia"] = "hy",
["Tiếng Armenia cổ"] = "xcl",
["Tiếng Armenia trung đại"] = "axm",
["Tiếng Aromania"] = "rup",
["Tiếng Arrernte Đông"] = "aer",
["Tiếng Ashkun"] = "ask",
["Tiếng Ashraaf"] = "cus-ash",
["Tiếng Ashéninka Pajonal"] = "cjo",
["Tiếng Asi"] = "bno",
["Tiếng Askopan"] = "eiv",
["Tiếng Asli nguyên thủy"] = "mkh-asl-pro",
["Tiếng Assam"] = "as",
["Tiếng Assam cận đại"] = "inc-oas",
["Tiếng Assan"] = "xss",
["Tiếng Assiniboine"] = "asb",
["Tiếng Asturias"] = "ast",
["Tiếng Asumboa"] = "aua",
["Tiếng Asur"] = "asr",
["Tiếng Atayal"] = "tay",
["Tiếng Atemble"] = "ate",
["Tiếng Athabasca nguyên thủy"] = "ath-pro",
["Tiếng Athpariya"] = "aph",
["Tiếng Atikamekw"] = "atj",
["Tiếng Atong (Ấn Độ)"] = "aot",
["Tiếng Atsahuaca"] = "atc",
["Tiếng Auhelawa"] = "kud",
["Tiếng Aukan"] = "djk",
["Tiếng Avar"] = "av",
["Tiếng Avar-Andic nguyên thủy"] = "cau-ava-pro",
["Tiếng Avatime"] = "avn",
["Tiếng Avesta"] = "ae",
["Tiếng Avokaya"] = "avu",
["Tiếng Awa (Trung Quốc)"] = "vwa",
["Tiếng Awadh"] = "awa",
["Tiếng Awadh cổ"] = "inc-oaw",
["Tiếng Aweer"] = "bob",
["Tiếng Awing"] = "azo",
["Tiếng Awjila"] = "auj",
["Tiếng Awngi"] = "awn",
["Tiếng Axi"] = "yix",
["Tiếng Ayere"] = "aye",
["Tiếng Aymara"] = "ay",
["Tiếng Azerbaijan"] = "az",
["Tiếng Ba Lan"] = "pl",
["Tiếng Ba Lan cổ"] = "zlw-opl",
["Tiếng Ba Na"] = "bdq",
["Tiếng Ba Tư"] = "fa",
["Tiếng Ba Tư cổ"] = "peo",
["Tiếng Ba Tư trung đại"] = "pal",
["Tiếng Ba Tư-Do Thái"] = "jpr",
["Tiếng Baagandji"] = "drl",
["Tiếng Baatonum"] = "bba",
["Tiếng Babatana"] = "baa",
["Tiếng Babungo"] = "bav",
["Tiếng Babuza"] = "bzg",
["Tiếng Bacama"] = "bcy",
["Tiếng Bactria"] = "xbc",
["Tiếng Badaga"] = "bfq",
["Tiếng Badanchi"] = "bau",
["Tiếng Bade"] = "bde",
["Tiếng Badui"] = "bac",
["Tiếng Bagua"] = "sai-bag",
["Tiếng Bagvalal"] = "kva",
["Tiếng Bahing"] = "bhj",
["Tiếng Bahnar nguyên thủy"] = "mkh-ban-pro",
["Tiếng Bainouk-Gunyuño"] = "bab",
["Tiếng Baiso"] = "bsw",
["Tiếng Bajjika"] = "vjk",
["Tiếng Bakaka"] = "bqz",
["Tiếng Bakhtiari"] = "bqi",
["Tiếng Baki"] = "bki",
["Tiếng Bakung"] = "xkl",
["Tiếng Bala"] = "tuw-bal",
["Tiếng Balanta-Ganja"] = "bjt",
["Tiếng Balanta-Kentohe"] = "ble",
["Tiếng Balantak"] = "blz",
["Tiếng Bali"] = "ban",
["Tiếng Baloch"] = "bal",
["Tiếng Balt-Slav nguyên thủy"] = "ine-bsl-pro",
["Tiếng Balti"] = "bft",
["Tiếng Bambara"] = "bm",
["Tiếng Bambassi"] = "myf",
["Tiếng Bamum"] = "bax",
["Tiếng Bana"] = "bcw",
["Tiếng Bandjalang"] = "bdy",
["Tiếng Banggai"] = "bgz",
["Tiếng Bangi"] = "bni",
["Tiếng Bangolan"] = "bgj",
["Tiếng Banjar"] = "bjn",
["Tiếng Bankon"] = "abb",
["Tiếng Bantawa"] = "bap",
["Tiếng Bantayanon"] = "bfx",
["Tiếng Bantoid nguyên thủy"] = "nic-bod-pro",
["Tiếng Bantu nguyên thủy"] = "bnt-pro",
["Tiếng Banyumas"] = "map-bms",
["Tiếng Baoule"] = "bci",
["Tiếng Barai"] = "bbb",
["Tiếng Barakai"] = "baj",
["Tiếng Bari"] = "bfa",
["Tiếng Barikewa"] = "jbk",
["Tiếng Barombi"] = "bbi",
["Tiếng Baré"] = "bae",
["Tiếng Basaa"] = "bas",
["Tiếng Basay"] = "byq",
["Tiếng Bashkir"] = "ba",
["Tiếng Basketo"] = "bst",
["Tiếng Basque"] = "eu",
["Tiếng Basque nguyên thủy"] = "euq-pro",
["Tiếng Bassa"] = "bsq",
["Tiếng Bassari"] = "bsc",
["Tiếng Batak Simalungun"] = "bts",
["Tiếng Batek"] = "btq",
["Tiếng Bats"] = "bbl",
["Tiếng Batuley"] = "bay",
["Tiếng Bayern"] = "bar",
["Tiếng Beaver"] = "bea",
["Tiếng Bedjond"] = "bjv",
["Tiếng Beja"] = "bej",
["Tiếng Belarus"] = "be",
["Tiếng Belhariya"] = "byw",
["Tiếng Beli"] = "blm",
["Tiếng Bella Coola"] = "blc",
["Tiếng Bellara"] = "brw",
["Tiếng Belnəng"] = "glb",
["Tiếng Bemba"] = "bem",
["Tiếng Bench"] = "bcq",
["Tiếng Bengal"] = "bn",
["Tiếng Bengal cổ"] = "inc-obn",
["Tiếng Benue-Congo nguyên thủy"] = "nic-bco-pro",
["Tiếng Berber Bắc Sahara"] = "mzb",
["Tiếng Berber Tunisia"] = "sds",
["Tiếng Berber nguyên thủy"] = "ber-pro",
["Tiếng Berber-Do Thái"] = "jbe",
["Tiếng Berik"] = "bkl",
["Tiếng Betawi"] = "bew",
["Tiếng Bezhta"] = "kap",
["Tiếng Bhadrawah"] = "bhd",
["Tiếng Bhatri"] = "bgw",
["Tiếng Bhattiyat"] = "bht",
["Tiếng Bhil"] = "bhb",
["Tiếng Bhil Dungra"] = "duh",
["Tiếng Bhnong"] = "mkh-bhn",
["Tiếng Bhojpur"] = "bho",
["Tiếng Bhumij"] = "aav-bhu",
["Tiếng Bhunjia"] = "bhu",
["Tiếng Bidayuh Bau"] = "sne",
["Tiếng Bidayuh Biatah"] = "bth",
["Tiếng Bih"] = "ibh",
["Tiếng Bihari"] = "bh",
["Tiếng Bikol Buhi'non"] = "ubl",
["Tiếng Bilaspur"] = "kfs",
["Tiếng Bilen"] = "byn",
["Tiếng Bilua"] = "blb",
["Tiếng Bima"] = "bhp",
["Tiếng Binukid"] = "bkd",
["Tiếng Birao"] = "brr",
["Tiếng Birgit"] = "btf",
["Tiếng Birhor"] = "biy",
["Tiếng Birjia"] = "bix",
["Tiếng Bisaya Sabah"] = "bsy",
["Tiếng Bishnupriya"] = "bpy",
["Tiếng Bislama"] = "bi",
["Tiếng Bissa"] = "bib",
["Tiếng Bisu"] = "bzi",
["Tiếng Bit"] = "bgk",
["Tiếng Blackfoot"] = "bla",
["Tiếng Blagar"] = "beu",
["Tiếng Blang"] = "blr",
["Tiếng Bod nguyên thủy"] = "sit-bdi-pro",
["Tiếng Bodo (Ấn Độ)"] = "brx",
["Tiếng Bodo Parja"] = "bdv",
["Tiếng Bodo-Garo nguyên thủy"] = "tbq-bdg-pro",
["Tiếng Boghom"] = "bux",
["Tiếng Bokar"] = "sit-bok",
["Tiếng Boko"] = "bqc",
["Tiếng Bokobaru"] = "bus",
["Tiếng Bola"] = "bnp",
["Tiếng Boloki"] = "bkt",
["Tiếng Bomu"] = "bmq",
["Tiếng Bondo"] = "bfw",
["Tiếng Boon"] = "bnl",
["Tiếng Borôro"] = "bor",
["Tiếng Botlikh"] = "bph",
["Tiếng Bourguignon"] = "roa-brg",
["Tiếng Brahui"] = "brh",
["Tiếng Braj"] = "bra",
["Tiếng Breri"] = "brq",
["Tiếng Breton"] = "br",
["Tiếng Breton cổ"] = "obt",
["Tiếng Breton trung đại"] = "xbm",
["Tiếng Britton nguyên thủy"] = "cel-bry-pro",
["Tiếng Brokkat"] = "bro",
["Tiếng Brokpa"] = "sgt",
["Tiếng Bru"] = "bru",
["Tiếng Bru Tây"] = "brv",
["Tiếng Brâu"] = "brb",
["Tiếng Buang Mapos"] = "bzh",
["Tiếng Bube"] = "bvb",
["Tiếng Budukh"] = "bdk",
["Tiếng Bughotu"] = "bgt",
["Tiếng Bugis"] = "bug",
["Tiếng Buhid"] = "bku",
["Tiếng Bukhara"] = "bhh",
["Tiếng Bukiyip"] = "ape",
["Tiếng Bulgar"] = "xbo",
["Tiếng Bulgari"] = "bg",
["Tiếng Bumthang"] = "kjz",
["Tiếng Bungku"] = "bkz",
["Tiếng Bunun"] = "bnn",
["Tiếng Burji"] = "bji",
["Tiếng Burunge"] = "bds",
["Tiếng Burushaski"] = "bsk",
["Tiếng Buryat"] = "bua",
["Tiếng Busa"] = "bqp",
["Tiếng Bushi"] = "buc",
["Tiếng Bussa"] = "dox",
["Tiếng Butuanon"] = "btw",
["Tiếng Bách Tế"] = "pkc",
["Tiếng Bạch Lạp Mã"] = "lay",
["Tiếng Bạch Nam"] = "bfs",
["Tiếng Bạch Trung"] = "bca",
["Tiếng Bạch nguyên thủy"] = "sit-bai-pro",
["Tiếng Bảo An"] = "peh",
["Tiếng Bắc Altai"] = "atv",
["Tiếng Bắc Amami Ōshima"] = "ryn",
["Tiếng Bắc Catanduanes Bikol"] = "cts",
["Tiếng Bắc Emberá"] = "emp",
["Tiếng Bắc Friesland"] = "frr",
["Tiếng Bắc Iroquois nguyên thủy"] = "iro-nor-pro",
["Tiếng Bắc Khanty"] = "kca-nor",
["Tiếng Bắc Mansi"] = "mns-nor",
["Tiếng Bắc Ndebele"] = "nd",
["Tiếng Bắc Nisu"] = "yiv",
["Tiếng Bắc Paiute"] = "pao",
["Tiếng Bắc Sami"] = "se",
["Tiếng Bắc Selkup"] = "sel-nor",
["Tiếng Bắc Slavey"] = "scs",
["Tiếng Bắc Thái"] = "nod",
["Tiếng Bắc Yukaghir"] = "ykg",
["Tiếng Bắc Âu cổ"] = "non",
["Tiếng Bắc Âu nguyên thủy"] = "gmq-pro",
["Tiếng Bố Cam"] = "bbh",
["Tiếng Bố Lưu"] = "ply",
["Tiếng Bố Mang"] = "bvp",
["Tiếng Bố Y"] = "pcc",
["Tiếng Bối-Thái nguyên thủy"] = "qfa-bet-pro",
["Tiếng Bồ Đào Nha"] = "pt",
["Tiếng Bổ trợ Quốc tế"] = "ia",
["Tiếng Ca Dong"] = "kxy",
["Tiếng Ca Tua"] = "kta",
["Tiếng Cahuilla"] = "chl",
["Tiếng Camling"] = "rab",
["Tiếng Camuni"] = "xcc",
["Tiếng Canela"] = "ram",
["Tiếng Cao Câu Ly"] = "zkg",
["Tiếng Capanahua"] = "kaq",
["Tiếng Carib nguyên thủy"] = "sai-car-pro",
["Tiếng Carrier"] = "crx",
["Tiếng Carrier Nam"] = "caf",
["Tiếng Catalan"] = "ca",
["Tiếng Catalan cổ"] = "roa-oca",
["Tiếng Catawba"] = "chc",
["Tiếng Cayuga"] = "cay",
["Tiếng Cebu"] = "ceb",
["Tiếng Celt nguyên thủy"] = "cel-pro",
["Tiếng Celtiberi"] = "xce",
["Tiếng Cerrado nguyên thủy"] = "sai-cer-pro",
["Tiếng Ch'orti'"] = "caa",
["Tiếng Chachi"] = "cbi",
["Tiếng Chagatai"] = "chg",
["Tiếng Chaima"] = "ciy",
["Tiếng Chak"] = "ckh",
["Tiếng Chakma"] = "ccp",
["Tiếng Chamalal"] = "cji",
["Tiếng Chamba"] = "cdh",
["Tiếng Chamicuro"] = "ccc",
["Tiếng Chamorro"] = "ch",
["Tiếng Chantyal"] = "chx",
["Tiếng Chatino cao nguyên Tây"] = "ctp",
["Tiếng Chaura"] = "crv",
["Tiếng Chavacano"] = "cbk",
["Tiếng Chechen"] = "ce",
["Tiếng Chenchu"] = "cde",
["Tiếng Chenoua"] = "cnu",
["Tiếng Chepang"] = "cdm",
["Tiếng Cherokee"] = "chr",
["Tiếng Chetti Moundadan"] = "cty",
["Tiếng Chetti Wayanad"] = "ctt",
["Tiếng Chewong"] = "cwg",
["Tiếng Cheyenne"] = "chy",
["Tiếng Chhattisgarh"] = "hne",
["Tiếng Chibcha"] = "chb",
["Tiếng Chichewa"] = "ny",
["Tiếng Chickasaw"] = "cic",
["Tiếng Chilcotin"] = "clc",
["Tiếng Chin Asho"] = "csh",
["Tiếng Chin Ekai"] = "cey",
["Tiếng Chin Falam"] = "cfm",
["Tiếng Chin Hakha"] = "cnh",
["Tiếng Chin Songlai"] = "csj",
["Tiếng Chin Tedim"] = "ctd",
["Tiếng Chinal"] = "cih",
["Tiếng Chinantec Ojitlán"] = "chj",
["Tiếng Chinantec Ozumacín"] = "chz",
["Tiếng Chinantec Tepinapa"] = "cte",
["Tiếng Chinook"] = "chh",
["Tiếng Chiricahua"] = "apm",
["Tiếng Chiru"] = "cdf",
["Tiếng Chittagong"] = "ctg",
["Tiếng Chiwere"] = "iow",
["Tiếng Chocangacakha"] = "cgk",
["Tiếng Choctaw"] = "cho",
["Tiếng Chodri"] = "cdi",
["Tiếng Chol"] = "ctu",
["Tiếng Chong"] = "cog",
["Tiếng Chu Ru"] = "cje",
["Tiếng Chukot"] = "ckt",
["Tiếng Chulym"] = "clw",
["Tiếng Churah"] = "cdj",
["Tiếng Chuuk"] = "chk",
["Tiếng Chuvan"] = "xcv",
["Tiếng Chuvash"] = "cv",
["Tiếng Châu Đại Dương nguyên thủy"] = "poz-oce-pro",
["Tiếng Chăm Tây"] = "cja",
["Tiếng Chăm cổ"] = "ocm",
["Tiếng Chăm nguyên thủy"] = "cmc-pro",
["Tiếng Chăm Đông"] = "cjm",
["Tiếng Chơ Ro"] = "crw",
["Tiếng Chứt"] = "scb",
["Tiếng Cia-Cia"] = "cia",
["Tiếng Cimbri"] = "cim",
["Tiếng Circassia nguyên thủy"] = "cau-cir-pro",
["Tiếng Co"] = "cua",
["Tiếng Cocama"] = "cod",
["Tiếng Cochimi"] = "coj",
["Tiếng Coeur d'Alene"] = "crd",
["Tiếng Cofán"] = "con",
["Tiếng Comanche"] = "com",
["Tiếng Comoros Maore"] = "swb",
["Tiếng Comox"] = "coo",
["Tiếng Copt"] = "cop",
["Tiếng Cornwall"] = "kw",
["Tiếng Cornwall cổ"] = "oco",
["Tiếng Corse"] = "co",
["Tiếng Cowlitz"] = "cow",
["Tiếng Cree"] = "cr",
["Tiếng Cree Moose"] = "crm",
["Tiếng Cree Đông Bắc"] = "crl",
["Tiếng Cree Đông Nam"] = "crj",
["Tiếng Cree đồng bằng"] = "crk",
["Tiếng Creole Antilles"] = "gcf",
["Tiếng Creole Guinea-Bissau"] = "pov",
["Tiếng Creole Haiti"] = "ht",
["Tiếng Creole Hà Lan Berbice"] = "brc",
["Tiếng Creole Jamaica"] = "jam",
["Tiếng Creole Louisiana"] = "lou",
["Tiếng Creole Mauritius"] = "mfe",
["Tiếng Creole Nghi Lan"] = "ycr",
["Tiếng Creole Réunion"] = "rcf",
["Tiếng Creole quần đảo Virgin"] = "vic",
["Tiếng Crow"] = "cro",
["Tiếng Cuman"] = "qwm",
["Tiếng Cumanagoto"] = "cuo",
["Tiếng Cumbria"] = "xcb",
["Tiếng Cupeño"] = "cup",
["Tiếng Cushit nguyên thủy"] = "cus-pro",
["Tiếng Cuyunon"] = "cyo",
["Tiếng Càn-đà-la"] = "pgd",
["Tiếng Cám"] = "gan",
["Tiếng Cơ Nặc Du Lạc"] = "jiu",
["Tiếng Cơ Tu"] = "ktv",
["Tiếng Cơ Tu Phương"] = "phg",
["Tiếng Cơ Tu Tây"] = "kuf",
["Tiếng Cơ Tu nguyên thủy"] = "mkh-kat-pro",
["Tiếng Cống"] = "cnc",
["Tiếng Cờ Lao Trắng"] = "giw",
["Tiếng Daasanach"] = "dsh",
["Tiếng Dabarre"] = "dbr",
["Tiếng Dacia"] = "xdc",
["Tiếng Dadibi"] = "mps",
["Tiếng Dagara Bắc"] = "dgi",
["Tiếng Dagba"] = "dgk",
["Tiếng Dagbani"] = "dag",
["Tiếng Dahalik"] = "dlk",
["Tiếng Dahalo"] = "dal",
["Tiếng Dakota"] = "dak",
["Tiếng Dakpa"] = "dka",
["Tiếng Dalmatia"] = "dlm",
["Tiếng Dambi"] = "dac",
["Tiếng Damel"] = "dml",
["Tiếng Dan"] = "dnj",
["Tiếng Danau"] = "dnu",
["Tiếng Dangaléat"] = "daa",
["Tiếng Danu"] = "dnv",
["Tiếng Danuwar"] = "dhw",
["Tiếng Dar Daju Daju"] = "djc",
["Tiếng Dargwa"] = "dar",
["Tiếng Dargwa nguyên thủy"] = "cau-drg-pro",
["Tiếng Daur"] = "dta",
["Tiếng Dawro"] = "dwr",
["Tiếng Deg Xinag"] = "ing",
["Tiếng Degema"] = "deg",
["Tiếng Denesuline"] = "chp",
["Tiếng Deori"] = "der",
["Tiếng Desiya"] = "dso",
["Tiếng Dhangu"] = "dhg",
["Tiếng Dhanka"] = "dhn",
["Tiếng Dharug"] = "xdk",
["Tiếng Dhatki"] = "mki",
["Tiếng Dhimal"] = "dhi",
["Tiếng Dhivehi"] = "dv",
["Tiếng Dhodia"] = "dho",
["Tiếng Dhundhar"] = "dhd",
["Tiếng Dibabawon"] = "mbd",
["Tiếng Dieri"] = "dif",
["Tiếng Digan"] = "rom",
["Tiếng Digan Balkan"] = "rmn",
["Tiếng Digan Baltic"] = "rml",
["Tiếng Digan Tavringer"] = "rmu",
["Tiếng Dimasa"] = "dis",
["Tiếng Dime"] = "dim",
["Tiếng Dinka"] = "din",
["Tiếng Dirasha"] = "gdl",
["Tiếng Ditidaht"] = "dtd",
["Tiếng Dizi"] = "mdx",
["Tiếng Dizi nguyên thủy"] = "omv-diz-pro",
["Tiếng Djinang"] = "dji",
["Tiếng Do Thái"] = "he",
["Tiếng Dogri"] = "doi",
["Tiếng Dogri Hindi"] = "dgo",
["Tiếng Dogrib"] = "dgr",
["Tiếng Dolgan"] = "dlg",
["Tiếng Dolpo"] = "dre",
["Tiếng Domaaki"] = "dmk",
["Tiếng Domari"] = "rmt",
["Tiếng Dongolawi"] = "kzh",
["Tiếng Doteli"] = "dty",
["Tiếng Dravida nguyên thủy"] = "dra-pro",
["Tiếng Dubla"] = "dub",
["Tiếng Dukha"] = "trk-dkh",
["Tiếng Dumi"] = "dus",
["Tiếng Duruwa"] = "pci",
["Tiếng Dusun Witu"] = "duw",
["Tiếng Duun"] = "dux",
["Tiếng Duy Ngô Nhĩ"] = "ug",
["Tiếng Duy Ngô Nhĩ cổ"] = "oui",
["Tiếng Dyirbal"] = "dbl",
["Tiếng Dyula"] = "dyu",
["Tiếng Dzala"] = "dzl",
["Tiếng Dzongkha"] = "dz",
["Tiếng Dzuun"] = "dnn",
["Tiếng Ebla"] = "xeb",
["Tiếng Ebrié"] = "ebr",
["Tiếng Ebughu"] = "ebg",
["Tiếng Ede Ica"] = "ica",
["Tiếng Ede Idaca"] = "idd",
["Tiếng Ede Nago"] = "nqg",
["Tiếng Edekiri nguyên thủy"] = "alv-edk-pro",
["Tiếng Edo"] = "bin",
["Tiếng Edoid nguyên thủy"] = "alv-edo-pro",
["Tiếng Efai"] = "efa",
["Tiếng Efate Bắc"] = "llp",
["Tiếng Efate Nam"] = "erk",
["Tiếng Efe"] = "efe",
["Tiếng Efik"] = "efi",
["Tiếng Ega"] = "ega",
["Tiếng Eggon"] = "ego",
["Tiếng Ehueun"] = "ehu",
["Tiếng Eipomek"] = "eip",
["Tiếng Eitiep"] = "eit",
["Tiếng Ejagham"] = "etu",
["Tiếng El Molo"] = "elo",
["Tiếng Elam"] = "elx",
["Tiếng Elymi"] = "xly",
["Tiếng Emberá-Chamí"] = "cmi",
["Tiếng Emberá-Tadó"] = "tdc",
["Tiếng Embu"] = "ebu",
["Tiếng Emilia"] = "egl",
["Tiếng Enets lãnh nguyên"] = "enh",
["Tiếng Enets rừng"] = "enf",
["Tiếng Engenni"] = "enn",
["Tiếng Enisei nguyên thủy"] = "qfa-yen-pro",
["Tiếng Eotile"] = "eot",
["Tiếng Epie"] = "epi",
["Tiếng Eravalla"] = "era",
["Tiếng Erzya"] = "myv",
["Tiếng Esan"] = "ish",
["Tiếng Ese"] = "mcq",
["Tiếng Esimbi"] = "ags",
["Tiếng Eskimo nguyên thủy"] = "esx-esk-pro",
["Tiếng Eskimo-Aleut nguyên thủy"] = "esx-pro",
["Tiếng Estonia"] = "et",
["Tiếng Eteocrete"] = "ecr",
["Tiếng Etrusca"] = "ett",
["Tiếng Even"] = "eve",
["Tiếng Evenk"] = "evn",
["Tiếng Ewe"] = "ee",
["Tiếng Fala"] = "fax",
["Tiếng Falisci"] = "xfa",
["Tiếng Fanagalo"] = "fng",
["Tiếng Fang (Bantu)"] = "fan",
["Tiếng Faroe"] = "fo",
["Tiếng Fe'fe'"] = "fmp",
["Tiếng Fiji"] = "fj",
["Tiếng Finn nguyên thủy"] = "urj-fin-pro",
["Tiếng Flemish Tây"] = "vls",
["Tiếng Fogaha"] = "ber-fog",
["Tiếng Foi"] = "foi",
["Tiếng Fon"] = "fon",
["Tiếng Fox"] = "sac",
["Tiếng Franche-Comté"] = "roa-fcm",
["Tiếng Franco-Provençal"] = "frp",
["Tiếng Franken Trung"] = "gmw-cfr",
["Tiếng Frisia Saterland"] = "stq",
["Tiếng Frisia cổ"] = "ofs",
["Tiếng Friuli"] = "fur",
["Tiếng Fula"] = "ff",
["Tiếng Fur"] = "fvr",
["Tiếng Ga"] = "gaa",
["Tiếng Gabri"] = "gab",
["Tiếng Gadaba Bodo"] = "gbj",
["Tiếng Gaddang"] = "gad",
["Tiếng Gaddi"] = "gbk",
["Tiếng Gael Scotland"] = "gd",
["Tiếng Gagauz"] = "gag",
["Tiếng Gahri"] = "bfu",
["Tiếng Galati"] = "xga",
["Tiếng Galicia"] = "gl",
["Tiếng Galicia-Bồ Đào Nha"] = "roa-opt",
["Tiếng Gallo"] = "roa-gal",
["Tiếng Gallura"] = "sdn",
["Tiếng Galo"] = "adl",
["Tiếng Gamilaraay"] = "kld",
["Tiếng Gamit"] = "gbl",
["Tiếng Gamo"] = "gmv",
["Tiếng Ganza"] = "gza",
["Tiếng Garasia Adiwasi"] = "gas",
["Tiếng Garasia Rajput"] = "gra",
["Tiếng Garhwal"] = "gbm",
["Tiếng Garifuna"] = "cab",
["Tiếng Garo"] = "grt",
["Tiếng Garre"] = "gex",
["Tiếng Gata'"] = "gaq",
["Tiếng Gaul"] = "cel-gau",
["Tiếng Gawar-Bati"] = "gwt",
["Tiếng Gawwada"] = "gwd",
["Tiếng Gayil"] = "gyl",
["Tiếng Gbe Saxwe"] = "sxw",
["Tiếng Gbe Waci"] = "wci",
["Tiếng Gbe nguyên thủy"] = "alv-gbe-pro",
["Tiếng Gbiri-Niragu"] = "grh",
["Tiếng Gedeo"] = "drs",
["Tiếng Gen"] = "gej",
["Tiếng German Tây nguyên thủy"] = "gmw-pro",
["Tiếng German nguyên thủy"] = "gem-pro",
["Tiếng Graeco-Phrygia nguyên thủy"] = "ine-grp-pro",
["Tiếng Geʽez"] = "gez",
["Tiếng Ghadames"] = "gha",
["Tiếng Ghomala'"] = "bbj",
["Tiếng Ghomara"] = "gho",
["Tiếng Ghotuo"] = "aaa",
["Tiếng Gia Rai"] = "jra",
["Tiếng Gikuyu"] = "ki",
["Tiếng Gilak"] = "glk",
["Tiếng Gimi (Goroka)"] = "gim",
["Tiếng Girirra"] = "gii",
["Tiếng Giryama"] = "nyf",
["Tiếng Gitxsan"] = "git",
["Tiếng Giẻ"] = "jeh",
["Tiếng Glosa"] = "igs",
["Tiếng Godoberi"] = "gdo",
["Tiếng Gofa"] = "gof",
["Tiếng Gone Dau"] = "goo",
["Tiếng Gooniyandi"] = "gni",
["Tiếng Goran"] = "hac",
["Tiếng Gorontalo"] = "gor",
["Tiếng Gorowa"] = "gow",
["Tiếng Goth"] = "got",
["Tiếng Gotland"] = "gmq-gut",
["Tiếng Gotland cổ"] = "gmq-ogt",
["Tiếng Greenland"] = "kl",
["Tiếng Gruzia"] = "ka",
["Tiếng Gruzia cổ"] = "oge",
["Tiếng Gruzia-Do Thái"] = "jge",
["Tiếng Gruzia-Zan nguyên thủy"] = "ccs-gzn-pro",
["Tiếng Guajajára"] = "gub",
["Tiếng Guajá"] = "gvj",
["Tiếng Guanche"] = "gnc",
["Tiếng Guarani Mbya"] = "gun",
["Tiếng Guarani Paraguay"] = "gug",
["Tiếng Guaraní"] = "gn",
["Tiếng Guarayu"] = "gyr",
["Tiếng Gujar"] = "gju",
["Tiếng Gujarat"] = "gu",
["Tiếng Gujarat cổ"] = "inc-ogu",
["Tiếng Gujarat trung đại"] = "inc-mgu",
["Tiếng Gulay"] = "gvl",
["Tiếng Gulimancema"] = "gux",
["Tiếng Gumuz"] = "guk",
["Tiếng Gun"] = "guw",
["Tiếng Gurenne"] = "gur",
["Tiếng Guugu Yimidhirr"] = "kky",
["Tiếng Gwichʼin"] = "gwi",
["Tiếng H'Mông Tương Tây Tây"] = "mmr",
["Tiếng H'Mông-Miền nguyên thủy"] = "hmx-pro",
["Tiếng H'roi"] = "hro",
["Tiếng Hachijō"] = "jpx-hcj",
["Tiếng Hadiyya"] = "hdy",
["Tiếng Haida"] = "hai",
["Tiếng Haisla"] = "has",
["Tiếng Hajong"] = "haj",
["Tiếng Halba"] = "hlb",
["Tiếng Halkomelem"] = "hur",
["Tiếng Hamer-Banna"] = "amf",
["Tiếng Hano"] = "lml",
["Tiếng Hanunoo"] = "hnn",
["Tiếng Harari"] = "har",
["Tiếng Harsusi"] = "hss",
["Tiếng Haryanvi"] = "bgc",
["Tiếng Hatti"] = "xht",
["Tiếng Hausa"] = "ha",
["Tiếng Haush"] = "sai-hau",
["Tiếng Havasupai-Walapai-Yavapai"] = "yuf",
["Tiếng Hawaii"] = "haw",
["Tiếng Hazara"] = "haz",
["Tiếng Heiban"] = "hbn",
["Tiếng Heiltsuk"] = "hei",
["Tiếng Hellen nguyên thủy"] = "grk-pro",
["Tiếng Herero"] = "hz",
["Tiếng Hernici"] = "xhr",
["Tiếng Higaonon"] = "mba",
["Tiếng Hiligaynon"] = "hil",
["Tiếng Hindi"] = "hi",
["Tiếng Hindi Fiji"] = "hif",
["Tiếng Hindi cổ"] = "inc-ohi",
["Tiếng Hindko Bắc"] = "hno",
["Tiếng Hinduri"] = "hii",
["Tiếng Hindustan Caribe"] = "hns",
["Tiếng Hinukh"] = "gin",
["Tiếng Hiri Motu"] = "ho",
["Tiếng Hitti"] = "hit",
["Tiếng Hiw"] = "hiw",
["Tiếng Hlai"] = "lic",
["Tiếng Hlai nguyên thủy"] = "qfa-lic-pro",
["Tiếng Ho"] = "hoc",
["Tiếng Hoava"] = "hoa",
["Tiếng Hocak"] = "win",
["Tiếng Holiya"] = "hoy",
["Tiếng Hopi"] = "hop",
["Tiếng Horpa"] = "ero",
["Tiếng Hozo"] = "hoz",
["Tiếng Hpon"] = "hpo",
["Tiếng Hrê"] = "hre",
["Tiếng Hu"] = "huo",
["Tiếng Hulaulá"] = "huy",
["Tiếng Hungary"] = "hu",
["Tiếng Hunsrik"] = "hrx",
["Tiếng Hunzib"] = "huz",
["Tiếng Hupa"] = "hup",
["Tiếng Hupdë"] = "jup",
["Tiếng Hurri"] = "xhu",
["Tiếng Huy"] = "czh",
["Tiếng Hy Lạp"] = "el",
["Tiếng Hy Lạp Cappadocia"] = "cpg",
["Tiếng Hy Lạp Italiot"] = "grk-ita",
["Tiếng Hy Lạp Mariupol"] = "grk-mar",
["Tiếng Hy Lạp Mycenae"] = "gmy",
["Tiếng Hy Lạp Pontos"] = "pnt",
["Tiếng Hy Lạp cổ"] = "grc",
["Tiếng Hyam"] = "jab",
["Tiếng Hà Lan"] = "nl",
["Tiếng Hà Lan Jersey"] = "gmw-jdt",
["Tiếng Hà Lan cổ"] = "odt",
["Tiếng Hà Lan trung đại"] = "dum",
["Tiếng Hà Lăng"] = "hal",
["Tiếng Hà Nhì"] = "hni",
["Tiếng Hán thượng cổ"] = "och",
["Tiếng Hán trung cổ"] = "ltc",
["Tiếng Hán-Tạng nguyên thủy"] = "sit-pro",
["Tiếng Hạ Saxon Hà Lan"] = "nds-nl",
["Tiếng Hạ Sorb"] = "dsb",
["Tiếng Hạ Tanana"] = "taa",
["Tiếng Hạ Đức"] = "nds",
["Tiếng Hạ Đức Mennonite"] = "pdt",
["Tiếng Hạ Đức trung đại"] = "gml",
["Tiếng Hạ Đức tại Đức"] = "nds-de",
["Tiếng Iaai"] = "iai",
["Tiếng Ibaloi"] = "ibl",
["Tiếng Iban"] = "iba",
["Tiếng Ibanag"] = "ibg",
["Tiếng Ibatan"] = "ivb",
["Tiếng Ibibio"] = "ibb",
["Tiếng Ibino"] = "ibn",
["Tiếng Ibuoro"] = "ibr",
["Tiếng Iceland"] = "is",
["Tiếng Ida'an"] = "dbj",
["Tiếng Ido"] = "io",
["Tiếng Idu"] = "clk",
["Tiếng Ifugao Batad"] = "ifb",
["Tiếng Ifè"] = "ife",
["Tiếng Igala"] = "igl",
["Tiếng Igbo"] = "ig",
["Tiếng Ikposo"] = "kpo",
["Tiếng Ikwere"] = "ikw",
["Tiếng Ili Turki"] = "ili",
["Tiếng Ilokano"] = "ilo",
["Tiếng Indo-Bồ Đào Nha"] = "idb",
["Tiếng Indonesia"] = "id",
["Tiếng Indonesia Peranakan"] = "pea",
["Tiếng Ingria"] = "izh",
["Tiếng Ingush"] = "inh",
["Tiếng Inor"] = "ior",
["Tiếng Interlingue"] = "ie",
["Tiếng Intha"] = "int",
["Tiếng Inuit nguyên thủy"] = "esx-inu-pro",
["Tiếng Inuktitut"] = "iu",
["Tiếng Inuktitut Đông Canada"] = "ike",
["Tiếng Inupiaq"] = "ik",
["Tiếng Inuvialuktun"] = "ikt",
["Tiếng Iran nguyên thủy"] = "ira-pro",
["Tiếng Iraqw"] = "irk",
["Tiếng Ireland"] = "ga",
["Tiếng Ireland cổ"] = "sga",
["Tiếng Ireland trung đại"] = "mga",
["Tiếng Iroquois nguyên thủy"] = "iro-pro",
["Tiếng Irula"] = "iru",
["Tiếng Isan"] = "tts",
["Tiếng Ishkashim"] = "isk",
["Tiếng Isnag"] = "isd",
["Tiếng Isoko"] = "iso",
["Tiếng Istria"] = "ist",
["Tiếng Istria Rumani"] = "ruo",
["Tiếng Italic nguyên thủy"] = "itc-pro",
["Tiếng Itaŋikom"] = "bkm",
["Tiếng Itelmen"] = "itl",
["Tiếng Itene"] = "ite",
["Tiếng Itonama"] = "ito",
["Tiếng Itsekiri"] = "its",
["Tiếng Itu Mbon Uzo"] = "itm",
["Tiếng Ivatan"] = "ivv",
["Tiếng Iwaidja"] = "ibd",
["Tiếng Ixil"] = "ixl",
["Tiếng Izon"] = "ijc",
["Tiếng Jacaltec"] = "jac",
["Tiếng Jah Hut"] = "jah",
["Tiếng Jamamadí"] = "jaa",
["Tiếng Japhug"] = "sit-jap",
["Tiếng Jaqaru"] = "jqr",
["Tiếng Jarawa"] = "anq",
["Tiếng Jaunsar"] = "jns",
["Tiếng Java"] = "jv",
["Tiếng Java Caribe"] = "jvn",
["Tiếng Java cổ"] = "kaw",
["Tiếng Javindo"] = "jvd",
["Tiếng Jehai"] = "jhi",
["Tiếng Jeju"] = "jje",
["Tiếng Jemez"] = "tow",
["Tiếng Jicarilla"] = "apj",
["Tiếng Jiiddu"] = "jii",
["Tiếng Jirel"] = "jul",
["Tiếng Jju"] = "kaj",
["Tiếng Jru'"] = "lbo",
["Tiếng Juang"] = "jun",
["Tiếng Jukun Takum"] = "jbu",
["Tiếng Jumaytepeque"] = "nai-jum",
["Tiếng Jumjum"] = "jum",
["Tiếng Juray"] = "juy",
["Tiếng Juǀ'hoan"] = "ktz",
["Tiếng Jylland"] = "jut",
["Tiếng Jê Bắc nguyên thủy"] = "sai-nje-pro",
["Tiếng Jê nguyên thủy"] = "sai-jee-pro",
["Tiếng K'Ho"] = "kpm",
["Tiếng K'iche'"] = "quc",
["Tiếng Kabardia"] = "kbd",
["Tiếng Kabiye"] = "kbp",
["Tiếng Kabuverdianu"] = "kea",
["Tiếng Kabyle"] = "kab",
["Tiếng Kachama-Ganjule"] = "kcx",
["Tiếng Kachin"] = "kac",
["Tiếng Kadar"] = "kej",
["Tiếng Kadazan bờ biển"] = "kzj",
["Tiếng Kadu"] = "zkd",
["Tiếng Kafa"] = "kbr",
["Tiếng Kagayanen"] = "cgc",
["Tiếng Kaikadi"] = "kep",
["Tiếng Kaingang"] = "kgp",
["Tiếng Kaitag"] = "xdq",
["Tiếng Kakabai"] = "kqf",
["Tiếng Kaki Ae"] = "tbd",
["Tiếng Kalam"] = "gwc",
["Tiếng Kalanguya"] = "kak",
["Tiếng Kalao"] = "kly",
["Tiếng Kalash"] = "kls",
["Tiếng Kalinga Limos"] = "kmk",
["Tiếng Kalkot"] = "xka",
["Tiếng Kalmyk"] = "xal",
["Tiếng Kalo Phần Lan"] = "rmf",
["Tiếng Kamarupi Prakrit"] = "inc-kam",
["Tiếng Kamassia"] = "xas",
["Tiếng Kamayo"] = "kyk",
["Tiếng Kambaata"] = "ktb",
["Tiếng Kambera"] = "xbr",
["Tiếng Kamula"] = "xla",
["Tiếng Kanakanavu"] = "xnb",
["Tiếng Kanan"] = "zkn",
["Tiếng Kangean"] = "kkv",
["Tiếng Kangra"] = "xnr",
["Tiếng Kankanaey"] = "kne",
["Tiếng Kannada"] = "kn",
["Tiếng Kannada cổ"] = "dra-okn",
["Tiếng Kannauj"] = "bjj",
["Tiếng Kanuri"] = "kr",
["Tiếng Kapampangan"] = "pam",
["Tiếng Kapingamarangi"] = "kpg",
["Tiếng Kaqchikel"] = "cak",
["Tiếng Karachay-Balkar"] = "krc",
["Tiếng Karaim"] = "kdr",
["Tiếng Karajá"] = "kpj",
["Tiếng Karakalpak"] = "kaa",
["Tiếng Karakhanid"] = "xqa",
["Tiếng Karao"] = "kyj",
["Tiếng Karata"] = "kpt",
["Tiếng Karbi"] = "mjw",
["Tiếng Karekare"] = "kai",
["Tiếng Karelia"] = "krl",
["Tiếng Karen Bwe"] = "bwe",
["Tiếng Karen Geba"] = "kvq",
["Tiếng Karen Geko"] = "ghk",
["Tiếng Karen Mobwa"] = "jkm",
["Tiếng Karen Paku"] = "jkp",
["Tiếng Karen S'gaw"] = "ksw",
["Tiếng Karen Zayein"] = "kxk",
["Tiếng Karen nguyên thủy"] = "kar-pro",
["Tiếng Kari'na"] = "car",
["Tiếng Kariri"] = "kzw",
["Tiếng Karitiâna"] = "ktn",
["Tiếng Karo"] = "kxh",
["Tiếng Kartvelia nguyên thủy"] = "ccs-pro",
["Tiếng Kashaya"] = "kju",
["Tiếng Kashmir"] = "ks",
["Tiếng Kaszëb"] = "csb",
["Tiếng Katang Bắc"] = "ncq",
["Tiếng Kaurna"] = "zku",
["Tiếng Kavalan"] = "ckv",
["Tiếng Kavet"] = "krv",
["Tiếng Kawésqar"] = "alc",
["Tiếng Kayan"] = "pdu",
["Tiếng Kayapó"] = "txu",
["Tiếng Kayort"] = "kyv",
["Tiếng Kazakh"] = "kk",
["Tiếng Kensiu"] = "kns",
["Tiếng Kenyang"] = "ken",
["Tiếng Kerek"] = "krk",
["Tiếng Kerman"] = "xme-ker",
["Tiếng Ket"] = "ket",
["Tiếng Khakas"] = "kjh",
["Tiếng Khalaj"] = "klj",
["Tiếng Khaling"] = "klr",
["Tiếng Kham Gamale"] = "kgj",
["Tiếng Kham Parbate Tây"] = "kjl",
["Tiếng Kham Parbate Đông"] = "kif",
["Tiếng Kham Sheshi"] = "kip",
["Tiếng Khamba"] = "kbg",
["Tiếng Khamti"] = "kht",
["Tiếng Khamyang"] = "ksu",
["Tiếng Khang Gia"] = "kxs",
["Tiếng Khanty"] = "kca",
["Tiếng Kharia"] = "khr",
["Tiếng Khasa Prakrit"] = "inc-kha",
["Tiếng Khasi"] = "kha",
["Tiếng Khasi nguyên thủy"] = "aav-khs-pro",
["Tiếng Khazar"] = "zkz",
["Tiếng Khengkha"] = "xkf",
["Tiếng Khiamniungan"] = "kix",
["Tiếng Khinalug"] = "kjj",
["Tiếng Khiết Đan"] = "zkt",
["Tiếng Khmer"] = "km",
["Tiếng Khmer Surin"] = "kxm",
["Tiếng Khmer cổ"] = "okz",
["Tiếng Khmer nguyên thủy"] = "mkh-kmr-pro",
["Tiếng Khmer trung đại"] = "xhm",
["Tiếng Khoekhoe"] = "naq",
["Tiếng Kholosi"] = "inc-kho",
["Tiếng Khotan"] = "kho",
["Tiếng Khowar"] = "khw",
["Tiếng Khroskyabs"] = "jiq",
["Tiếng Khuen"] = "khf",
["Tiếng Khvarshi"] = "khv",
["Tiếng Khwarezm"] = "xco",
["Tiếng Khách Gia"] = "hak",
["Tiếng Kháng"] = "kjm",
["Tiếng Khùa"] = "xhv",
["Tiếng Khün"] = "kkh",
["Tiếng Khơ Mú"] = "kjg",
["Tiếng Khơ Mú nguyên thủy"] = "mkh-khm-pro",
["Tiếng Khương Bắc"] = "cng",
["Tiếng Khương Nam"] = "qxs",
["Tiếng Khương Đường"] = "cna",
["Tiếng Kickapoo"] = "kic",
["Tiếng Kikai"] = "kzg",
["Tiếng Kili"] = "tuw-kil",
["Tiếng Kim"] = "kia",
["Tiếng Kim Môn"] = "mji",
["Tiếng Kimbundu"] = "kmb",
["Tiếng Kinaray-a"] = "krj",
["Tiếng Kinnaur"] = "kfk",
["Tiếng Kinnaur Harija"] = "kjo",
["Tiếng Kintaq"] = "knq",
["Tiếng Kiowa"] = "kio",
["Tiếng Gilbert"] = "gil",
["Tiếng Kirike"] = "okr",
["Tiếng Kisan"] = "xis",
["Tiếng Kistane"] = "gru",
["Tiếng Kituba"] = "ktu",
["Tiếng Klallam"] = "clm",
["Tiếng Klingon"] = "tlh",
["Tiếng Knaan"] = "czk",
["Tiếng Koalib"] = "kib",
["Tiếng Kobon"] = "kpw",
["Tiếng Koch"] = "kdq",
["Tiếng Koda"] = "cdz",
["Tiếng Kodava"] = "kfa",
["Tiếng Kohistan"] = "mvy",
["Tiếng Koibal"] = "zkb",
["Tiếng Kok Borok"] = "trp",
["Tiếng Kolami"] = "kfb",
["Tiếng Kolhe"] = "ekl",
["Tiếng Koli Kachi"] = "gjk",
["Tiếng Koli Parkar"] = "kvx",
["Tiếng Koli Wadiyara"] = "kxp",
["Tiếng Koman nguyên thủy"] = "ssa-kom-pro",
["Tiếng Komi cổ"] = "urj-koo",
["Tiếng Komi-Permyak"] = "koi",
["Tiếng Komi-Yazva"] = "urj-kya",
["Tiếng Komi-Zyrian"] = "kpv",
["Tiếng Komo"] = "xom",
["Tiếng Komodo"] = "kvh",
["Tiếng Konabéré"] = "bbo",
["Tiếng Konda-Dora"] = "kfc",
["Tiếng Kondekor"] = "gau",
["Tiếng Kongo"] = "kg",
["Tiếng Konkan"] = "kok",
["Tiếng Konobo"] = "kqo",
["Tiếng Konso"] = "kxc",
["Tiếng Koonzime"] = "ozm",
["Tiếng Koore"] = "kqy",
["Tiếng Koraga Korra"] = "kfd",
["Tiếng Koraga Mudu"] = "vmd",
["Tiếng Korku"] = "kfq",
["Tiếng Korwa"] = "kfp",
["Tiếng Koryak"] = "kpy",
["Tiếng Kosrae"] = "kos",
["Tiếng Kota (Ấn Độ)"] = "kfe",
["Tiếng Kotava"] = "avk",
["Tiếng Kott"] = "zko",
["Tiếng Koya"] = "kff",
["Tiếng Kpelle Guinea"] = "gkp",
["Tiếng Kpelle Liberia"] = "xpe",
["Tiếng Kra nguyên thủy"] = "qfa-kra-pro",
["Tiếng Kra-Dai nguyên thủy"] = "qfa-tak-pro",
["Tiếng Kraol"] = "rka",
["Tiếng Kresh"] = "krs",
["Tiếng Krio"] = "kri",
["Tiếng Kriol Úc"] = "rop",
["Tiếng Krung"] = "krr",
["Tiếng Krymchak"] = "jct",
["Tiếng Kryts"] = "kry",
["Tiếng Ktunaxa"] = "kut",
["Tiếng Kubachi"] = "ugh",
["Tiếng Kudiya"] = "kfg",
["Tiếng Kudmal"] = "kyw",
["Tiếng Kui (Ấn Độ)"] = "uki",
["Tiếng Kui Dawik"] = "dwk",
["Tiếng Kuke"] = "ght",
["Tiếng Kuki-Chin nguyên thủy"] = "tbq-kuk-pro",
["Tiếng Kukna"] = "kex",
["Tiếng Kullu"] = "kfx",
["Tiếng Kulon-Pazeh"] = "uun",
["Tiếng Kumbewaha"] = "xks",
["Tiếng Kumeyaay"] = "nai-kum",
["Tiếng Kumyk"] = "kum",
["Tiếng Kumzar"] = "zum",
["Tiếng Kuna"] = "cuk",
["Tiếng Kundal Shahi"] = "shd",
["Tiếng Kunigami"] = "xug",
["Tiếng Kuo"] = "xuo",
["Tiếng Kupia"] = "key",
["Tiếng Kurichiya"] = "kfh",
["Tiếng Kurmanji"] = "kmr",
["Tiếng Kurtokha"] = "xkz",
["Tiếng Kurukh"] = "kru",
["Tiếng Kurumba Alu"] = "xua",
["Tiếng Kurumba Attapady"] = "pkr",
["Tiếng Kurumba Betta"] = "xub",
["Tiếng Kurumba Jennu"] = "xuj",
["Tiếng Kurumba Kannada"] = "kfi",
["Tiếng Kurumba Mullu"] = "kpb",
["Tiếng Kushi"] = "kuh",
["Tiếng Kutch"] = "kfr",
["Tiếng Kutep"] = "kub",
["Tiếng Kuvi"] = "kxv",
["Tiếng Kuy"] = "kdt",
["Tiếng Kven"] = "fkv",
["Tiếng Kw'adza"] = "wka",
["Tiếng Kwak'wala"] = "kwk",
["Tiếng Kwanja"] = "knp",
["Tiếng Kwanyama"] = "kj",
["Tiếng Kwinti"] = "kww",
["Tiếng Kyakala"] = "tuw-kkl",
["Tiếng Kyrgyz"] = "ky",
["Tiếng Kyrgyz Phú Dụ"] = "trk-fyk",
["Tiếng Kâte"] = "kmg",
["Tiếng La Hủ"] = "lhu",
["Tiếng Laalaa"] = "cae",
["Tiếng Ladakh"] = "lbj",
["Tiếng Ladin"] = "lld",
["Tiếng Ladino"] = "lad",
["Tiếng Lahnda"] = "lah",
["Tiếng Lahta"] = "kvt",
["Tiếng Lak"] = "lbe",
["Tiếng Lakalei"] = "lka",
["Tiếng Laki"] = "lki",
["Tiếng Lakota"] = "lkt",
["Tiếng Lama Gur"] = "las",
["Tiếng Lambadi"] = "lmn",
["Tiếng Lamboya"] = "lmy",
["Tiếng Lamkang"] = "lmk",
["Tiếng Lanoh"] = "lnh",
["Tiếng Laomian"] = "lwm",
["Tiếng Lar"] = "lrl",
["Tiếng Lasalimu"] = "llm",
["Tiếng Lashi"] = "lsi",
["Tiếng Latgale"] = "ltg",
["Tiếng Latinh"] = "la",
["Tiếng Latundê"] = "ltn",
["Tiếng Latvia"] = "lv",
["Tiếng Lavukaleve"] = "lvk",
["Tiếng Lawa Tây"] = "lcp",
["Tiếng Lawa Đông"] = "lwl",
["Tiếng Lawi"] = "lvi",
["Tiếng Laya"] = "lya",
["Tiếng Laz"] = "lzz",
["Tiếng Lelemi"] = "lef",
["Tiếng Lemnos"] = "xle",
["Tiếng Lepcha"] = "lep",
["Tiếng Leponti"] = "xlp",
["Tiếng Lewo"] = "lww",
["Tiếng Lezgi"] = "lez",
["Tiếng Lezgi nguyên thủy"] = "cau-lzg-pro",
["Tiếng León"] = "roa-leo",
["Tiếng León cổ"] = "roa-ole",
["Tiếng Lhao Vo"] = "mhx",
["Tiếng Lhomi"] = "lhm",
["Tiếng Liabuku"] = "lix",
["Tiếng Libido"] = "liq",
["Tiếng Liguria"] = "lij",
["Tiếng Lillooet"] = "lil",
["Tiếng Limbum"] = "lmp",
["Tiếng Limburg"] = "li",
["Tiếng Lindu"] = "klw",
["Tiếng Lingala"] = "ln",
["Tiếng Lipan"] = "apl",
["Tiếng Lishana Deni"] = "lsd",
["Tiếng Lishanid Noshan"] = "aij",
["Tiếng Lisu"] = "lis",
["Tiếng Litva"] = "lt",
["Tiếng Litva cổ"] = "olt",
["Tiếng Livonia"] = "liv",
["Tiếng Livvi"] = "olo",
["Tiếng Lobi"] = "lob",
["Tiếng Lodha"] = "lbm",
["Tiếng Logba"] = "lgq",
["Tiếng Lojban"] = "jbo",
["Tiếng Loke"] = "loy",
["Tiếng Lokono"] = "arw",
["Tiếng Loma"] = "lom",
["Tiếng Lomavren"] = "rmi",
["Tiếng Lombard"] = "lmo",
["Tiếng Lorrain"] = "roa-lor",
["Tiếng Lotha Naga"] = "njh",
["Tiếng Lou"] = "loj",
["Tiếng Luba-Katanga"] = "lu",
["Tiếng Lucumí"] = "luq",
["Tiếng Luganda"] = "lg",
["Tiếng Luhya"] = "luy",
["Tiếng Lukpa"] = "dop",
["Tiếng Lumbu"] = "lup",
["Tiếng Lunana"] = "luk",
["Tiếng Lur Bắc"] = "lrc",
["Tiếng Lur Nam"] = "luz",
["Tiếng Lushootseed"] = "lut",
["Tiếng Lutuv"] = "clt",
["Tiếng Luwi"] = "xlu",
["Tiếng Luxembourg"] = "lb",
["Tiếng Lycia"] = "xlc",
["Tiếng Lydia"] = "xld",
["Tiếng Lyngngam"] = "lyg",
["Tiếng Lyydi"] = "lud",
["Tiếng Lào"] = "lo",
["Tiếng Lâm Cao"] = "onb",
["Tiếng Lô Lô"] = "ii",
["Tiếng Lô Lô-Miến nguyên thủy"] = "tbq-lob-pro",
["Tiếng Lư Nhân"] = "sit-lrn",
["Tiếng Lưu Cầu nguyên thủy"] = "jpx-ryu-pro",
["Tiếng Lự"] = "khb",
["Tiếng M'Nông Nam"] = "mnn",
["Tiếng M'Nông Trung"] = "cmo",
["Tiếng M'Nông Đông"] = "mng",
["Tiếng Ma Thoa"] = "nru",
["Tiếng Ma'anyan"] = "mhy",
["Tiếng Maaka"] = "mew",
["Tiếng Maale"] = "mdy",
["Tiếng Maasai"] = "mas",
["Tiếng Maay"] = "ymm",
["Tiếng Mabaan"] = "mfz",
["Tiếng Mabang"] = "mde",
["Tiếng Macedoni cổ đại"] = "xmk",
["Tiếng Macedonia"] = "mk",
["Tiếng Macushi"] = "mbc",
["Tiếng Madura"] = "mad",
["Tiếng Magaha"] = "mag",
["Tiếng Magar Tây"] = "mrd",
["Tiếng Magar Đông"] = "mgp",
["Tiếng Magori"] = "zgr",
["Tiếng Maguindanao"] = "mdh",
["Tiếng Mah Meri"] = "mhe",
["Tiếng Mahal"] = "mjx",
["Tiếng Maithil"] = "mai",
["Tiếng Majang"] = "mpe",
["Tiếng Makassar"] = "mak",
["Tiếng Mal"] = "mlf",
["Tiếng Malagasy"] = "mg",
["Tiếng Malankurava"] = "mjo",
["Tiếng Malapandaram"] = "mjp",
["Tiếng Malarya"] = "mjq",
["Tiếng Malasar"] = "ymr",
["Tiếng Malasar Mala"] = "ima",
["Tiếng Malavedan"] = "mjr",
["Tiếng Malayalam"] = "ml",
["Tiếng Malecite-Passamaquoddy"] = "pqm",
["Tiếng Malta"] = "mt",
["Tiếng Mampruli"] = "maw",
["Tiếng Man"] = "gv",
["Tiếng Manda (Ấn Độ)"] = "mha",
["Tiếng Mandahuaca"] = "mht",
["Tiếng Mandara"] = "tbf",
["Tiếng Mande nguyên thủy"] = "dmn-pro",
["Tiếng Mandi"] = "mjl",
["Tiếng Mandinka"] = "mnk",
["Tiếng Mangas"] = "zns",
["Tiếng Manggarai"] = "mqy",
["Tiếng Mangghuer"] = "xgn-mgr",
["Tiếng Mangghul"] = "mjg-mgr",
["Tiếng Manipur"] = "mni",
["Tiếng Mankanya"] = "knf",
["Tiếng Mannan"] = "mjv",
["Tiếng Mano"] = "mev",
["Tiếng Mansaka"] = "msk",
["Tiếng Mansi nguyên thủy"] = "mns-pro",
["Tiếng Manumanaw"] = "kxf",
["Tiếng Mao Nam"] = "mmd",
["Tiếng Maori"] = "mi",
["Tiếng Mapuche"] = "arn",
["Tiếng Maranao"] = "mrw",
["Tiếng Marathi"] = "mr",
["Tiếng Marathi cổ"] = "omr",
["Tiếng Marau"] = "mvr",
["Tiếng Mari Tây"] = "mrj",
["Tiếng Mari nguyên thủy"] = "chm-pro",
["Tiếng Mari Đông"] = "mhr",
["Tiếng Maria (Ấn Độ)"] = "mrr",
["Tiếng Maricopa"] = "mrc",
["Tiếng Marma"] = "rmz",
["Tiếng Marquises Bắc"] = "mrq",
["Tiếng Marquises Nam"] = "mqm",
["Tiếng Marrucini"] = "umc",
["Tiếng Marshall"] = "mh",
["Tiếng Marsi"] = "ims",
["Tiếng Martuthunira"] = "vma",
["Tiếng Marwar"] = "mwr",
["Tiếng Masbatenyo"] = "msb",
["Tiếng Maskelynes"] = "klv",
["Tiếng Matal"] = "mfh",
["Tiếng Mator"] = "mtm",
["Tiếng Maung"] = "mph",
["Tiếng Maya Yucatán"] = "yua",
["Tiếng Maya nguyên thủy"] = "myn-pro",
["Tiếng Mazahua Michoacán"] = "mmc",
["Tiếng Mazahua Trung"] = "maz",
["Tiếng Mazandaran"] = "mzn",
["Tiếng Mbabaram"] = "vmb",
["Tiếng Mbembe Tigon"] = "nza",
["Tiếng Mbembe sông Cross"] = "mfn",
["Tiếng Me'en"] = "mym",
["Tiếng Me'phaa Acatepec"] = "tpx",
["Tiếng Me'phaa Azoyú"] = "tpc",
["Tiếng Me'phaa Tlacoapa"] = "tpl",
["Tiếng Media cổ"] = "xme-old",
["Tiếng Medumba"] = "byv",
["Tiếng Mehri"] = "gdq",
["Tiếng Melo"] = "mfx",
["Tiếng Melpa"] = "med",
["Tiếng Memon"] = "mby",
["Tiếng Mendankwe-Nkwen"] = "mfd",
["Tiếng Mende"] = "men",
["Tiếng Menominee"] = "mez",
["Tiếng Mentawai"] = "mwv",
["Tiếng Meriam"] = "ulk",
["Tiếng Mesaka"] = "iyo",
["Tiếng Mesqan"] = "mvz",
["Tiếng Messapio"] = "cms",
["Tiếng Meänkieli"] = "fit",
["Tiếng Mi'kmaq"] = "mic",
["Tiếng Miami"] = "mia",
["Tiếng Minangkabau"] = "min",
["Tiếng Mingrelia"] = "xmf",
["Tiếng Minriq"] = "mnq",
["Tiếng Mintil"] = "mzt",
["Tiếng Miranda"] = "mwl",
["Tiếng Mirga"] = "zrg",
["Tiếng Mising"] = "mrg",
["Tiếng Miskito"] = "miq",
["Tiếng Mixtec Alcozauca"] = "xta",
["Tiếng Mixtec Chayuco"] = "mih",
["Tiếng Mixtec Yosondúa"] = "mpm",
["Tiếng Mixtec nguyên thủy"] = "omq-mix-pro",
["Tiếng Miyako"] = "mvi",
["Tiếng Mizo"] = "lus",
["Tiếng Miến Điện"] = "my",
["Tiếng Miến Điện cổ"] = "obr",
["Tiếng Miền nguyên thủy"] = "hmx-mie-pro",
["Tiếng Mlabri"] = "mra",
["Tiếng Mlahsö"] = "lhs",
["Tiếng Mogholi"] = "mhj",
["Tiếng Moglena-Rumani"] = "ruq",
["Tiếng Mohawk"] = "moh",
["Tiếng Mohegan-Pequot"] = "xpq",
["Tiếng Moken"] = "mwt",
["Tiếng Mokil"] = "mkj",
["Tiếng Moklen"] = "mkm",
["Tiếng Moksha"] = "mdf",
["Tiếng Molbog"] = "pwm",
["Tiếng Mongghul"] = "mjg-mgl",
["Tiếng Mongo"] = "lol",
["Tiếng Mongondow"] = "mog",
["Tiếng Mooré"] = "mos",
["Tiếng Mordvin nguyên thủy"] = "urj-mdv-pro",
["Tiếng Moro"] = "mor",
["Tiếng Morokodo"] = "mgc",
["Tiếng Mota"] = "mtt",
["Tiếng Motu"] = "meu",
["Tiếng Mozarab"] = "mxi",
["Tiếng Mpade"] = "mpi",
["Tiếng Mpi"] = "mpz",
["Tiếng Muak Sa-aak"] = "ukk",
["Tiếng Mudburra"] = "dmw",
["Tiếng Muduga"] = "udg",
["Tiếng Muna"] = "mnb",
["Tiếng Munda"] = "unx",
["Tiếng Munda nguyên thủy"] = "mun-pro",
["Tiếng Mundabli"] = "boe",
["Tiếng Mundari"] = "unr",
["Tiếng Munggui"] = "mth",
["Tiếng Munji"] = "mnj",
["Tiếng Munsee"] = "umu",
["Tiếng Muria Viễn Tây"] = "fmu",
["Tiếng Murle"] = "mur",
["Tiếng Mursi"] = "muz",
["Tiếng Muscogee"] = "mus",
["Tiếng Musi"] = "mui",
["Tiếng Muskogee nguyên thủy"] = "nai-mus-pro",
["Tiếng Muthuvan"] = "muv",
["Tiếng Mwan"] = "moa",
["Tiếng Mwotlap"] = "mlv",
["Tiếng Myene"] = "mye",
["Tiếng Mân Bắc"] = "mnp",
["Tiếng Mân Nam"] = "nan",
["Tiếng Mân Trung"] = "czo",
["Tiếng Mân Tuyền Chương"] = "nan-hbl",
["Tiếng Mân nguyên thủy"] = "zhx-min-pro",
["Tiếng Mân Đông"] = "cdo",
["Tiếng Mã Lai"] = "ms",
["Tiếng Mã Lai Ambon"] = "abs",
["Tiếng Mã Lai Baba"] = "mbf",
["Tiếng Mã Lai Bacan"] = "btj",
["Tiếng Mã Lai Brunei"] = "kxd",
["Tiếng Mã Lai Bắc Maluku"] = "max",
["Tiếng Mã Lai Kedah"] = "meo",
["Tiếng Mã Lai Pattani"] = "mfa",
["Tiếng Mã Lai Sarawak"] = "poz-sml",
["Tiếng Mã Lai cổ"] = "omy",
["Tiếng Mã Lai nguyên thủy"] = "poz-mly-pro",
["Tiếng Mã Lai-Chăm nguyên thủy"] = "poz-mcm-pro",
["Tiếng Mã Lai-Sumbawa nguyên thủy"] = "poz-msa-pro",
["Tiếng Mã Lai-Đa Đảo Trung Đông nguyên thủy"] = "poz-cet-pro",
["Tiếng Mã Lai-Đa Đảo nguyên thủy"] = "poz-pro",
["Tiếng Mã Lai-Đa Đảo Đông nguyên thủy"] = "pqe-pro",
["Tiếng Mã Liềng"] = "pkt",
["Tiếng Mãn Châu"] = "mnc",
["Tiếng Mòcheno"] = "mhn",
["Tiếng Môn"] = "mnw",
["Tiếng Môn Thái"] = "mnw-tha",
["Tiếng Môn cổ"] = "omx",
["Tiếng Môn nguyên thủy"] = "mkh-mnc-pro",
["Tiếng Môn trung đại"] = "mkh-mmn",
["Tiếng Môn-Khmer nguyên thủy"] = "mkh-pro",
["Tiếng Mông"] = "hmf",
["Tiếng Mông Cổ"] = "mn",
["Tiếng Mông Cổ Khamnigan"] = "ykh",
["Tiếng Mông Cổ cổ điển"] = "cmg",
["Tiếng Mông Cổ nguyên thủy"] = "xgn-pro",
["Tiếng Mông Cổ trung đại"] = "xng",
["Tiếng Mông Trắng"] = "mww",
["Tiếng Mơ Nâm"] = "moo",
["Tiếng Mường"] = "mtq",
["Tiếng Mạ"] = "cma",
["Tiếng Mảng"] = "zng",
["Tiếng Na Miểu"] = "neo",
["Tiếng Na Uy"] = "no",
["Tiếng Na Uy (Bokmål)"] = "nb",
["Tiếng Na Uy (Nynorsk)"] = "nn",
["Tiếng Nafaanra"] = "nfr",
["Tiếng Naga Chothe"] = "nct",
["Tiếng Naga Maring"] = "nng",
["Tiếng Naga Moyon"] = "nmo",
["Tiếng Naga Thangal"] = "nki",
["Tiếng Naga Trung nguyên thủy"] = "sit-aao-pro",
["Tiếng Nahua nguyên thủy"] = "azc-nah-pro",
["Tiếng Nahuatl"] = "nah",
["Tiếng Nahuatl Temascaltepec"] = "nhv",
["Tiếng Nahuatl cổ điển"] = "nci",
["Tiếng Nakh nguyên thủy"] = "cau-nkh-pro",
["Tiếng Nam Altai"] = "alt",
["Tiếng Nam Amami Ōshima"] = "ams",
["Tiếng Nam Dravida I nguyên thủy"] = "dra-sdo-pro",
["Tiếng Nam Dravida II nguyên thủy"] = "dra-sdt-pro",
["Tiếng Nam Dravida nguyên thủy"] = "dra-sou-pro",
["Tiếng Nam Kolami"] = "nit",
["Tiếng Nam Mansi"] = "mns-sou",
["Tiếng Nam Ndebele"] = "nr",
["Tiếng Nam Sami"] = "sma",
["Tiếng Nam Selkup"] = "sel-sou",
["Tiếng Nam Slavey"] = "xsl",
["Tiếng Nam Thái"] = "sou",
["Tiếng Nam Uzbek"] = "uzs",
["Tiếng Nam Yukaghir"] = "yux",
["Tiếng Nam Á nguyên thủy"] = "aav-pro",
["Tiếng Nam Đảo nguyên thủy"] = "map-pro",
["Tiếng Nam Động"] = "kmc",
["Tiếng Nam Ả Rập cổ"] = "sem-srb",
["Tiếng Nambikwara"] = "nab",
["Tiếng Nanai"] = "gld",
["Tiếng Nankina"] = "nnk",
["Tiếng Napoli"] = "nap",
["Tiếng Naskapi"] = "nsk",
["Tiếng Nateni"] = "ntm",
["Tiếng Naukan"] = "ynk",
["Tiếng Nauru"] = "na",
["Tiếng Navajo"] = "nv",
["Tiếng Ndau"] = "ndc",
["Tiếng Ndogo"] = "ndz",
["Tiếng Ndonga"] = "ng",
["Tiếng Nefusa"] = "jbn",
["Tiếng Negerhollands"] = "dcr",
["Tiếng Negidal"] = "neg",
["Tiếng Nenets lãnh nguyên"] = "yrk-tun",
["Tiếng Nepal"] = "ne",
["Tiếng Newa"] = "new",
["Tiếng Nga"] = "ru",
["Tiếng Nga bồi Taimyr"] = "crp-tpr",
["Tiếng Ngadha"] = "nxg",
["Tiếng Ngalum"] = "szb",
["Tiếng Ngam"] = "nmc",
["Tiếng Ngambay"] = "sba",
["Tiếng Nganasan"] = "nio",
["Tiếng Ngas"] = "anc",
["Tiếng Ngiemboon"] = "nnh",
["Tiếng Ngiyambaa"] = "wyb",
["Tiếng Ngomba"] = "jgo",
["Tiếng Ngombe (Congo)"] = "ngc",
["Tiếng Nguni nguyên thủy"] = "bnt-ngu-pro",
["Tiếng Nguồn"] = "nuo",
["Tiếng Ngô"] = "wuu",
["Tiếng Ngũ Đồn"] = "wuh",
["Tiếng Nha Lang"] = "yrn",
["Tiếng Nheengatu"] = "yrl",
["Tiếng Nhu Nhiên"] = "qfa-xgx-rou",
["Tiếng Nhĩ Tô"] = "ers",
["Tiếng Nhật"] = "ja",
["Tiếng Nhật Bản nguyên thủy"] = "jpx-pro",
["Tiếng Nhật cổ"] = "ojp",
["Tiếng Nias"] = "nia",
["Tiếng Nicobar Car"] = "caq",
["Tiếng Nicobar Nam"] = "nik",
["Tiếng Nicobar Trung"] = "ncb",
["Tiếng Nicobar nguyên thủy"] = "aav-nic-pro",
["Tiếng Niger-Congo nguyên thủy"] = "nic-pro",
["Tiếng Nin-Sahara nguyên thủy"] = "ssa-pro",
["Tiếng Nisga'a"] = "ncg",
["Tiếng Niue"] = "niu",
["Tiếng Nivaclé"] = "cag",
["Tiếng Nivkh"] = "niv",
["Tiếng Nkari"] = "nkz",
["Tiếng Nkonya"] = "nko",
["Tiếng Nobiin"] = "fia",
["Tiếng Nobonob"] = "gaw",
["Tiếng Nogai"] = "nog",
["Tiếng Noon"] = "snf",
["Tiếng Noreia"] = "nrc",
["Tiếng Norman"] = "nrf",
["Tiếng Novgorod cổ"] = "zle-ono",
["Tiếng Novial"] = "nov",
["Tiếng Ntcham"] = "bud",
["Tiếng Nubaca"] = "baf",
["Tiếng Nubi"] = "kcn",
["Tiếng Nubia cổ"] = "onw",
["Tiếng Nuer"] = "nus",
["Tiếng Numidia"] = "nxm",
["Tiếng Nupe"] = "nup",
["Tiếng Nuristan nguyên thủy"] = "iir-nur-pro",
["Tiếng Nuu-chah-nulth"] = "nuk",
["Tiếng Nyah Kur"] = "cbn",
["Tiếng Nyaw"] = "nyw",
["Tiếng Nyeu"] = "nyl",
["Tiếng Nyishi"] = "njz",
["Tiếng Nyoro"] = "nyo",
["Tiếng Nyunga"] = "nys",
["Tiếng Nzadi"] = "nzd",
["Tiếng Nùng"] = "nut",
["Tiếng Nùng Vẻn"] = "enc",
["Tiếng Nǀuu"] = "ngh",
["Tiếng Nạp Tây"] = "nxq",
["Tiếng Nữ Chân"] = "juc",
["Tiếng O'odham"] = "ood",
["Tiếng Ocaina"] = "oca",
["Tiếng Occitan"] = "oc",
["Tiếng Occitan cổ"] = "pro",
["Tiếng Ogbronuagum"] = "ogu",
["Tiếng Oghuz cổ sơ kỳ"] = "trk-eog",
["Tiếng Oirat"] = "xwo",
["Tiếng Ojibwe"] = "oj",
["Tiếng Ojibwe Severn"] = "ojs",
["Tiếng Ojibwe Tây"] = "ojw",
["Tiếng Ojibwe Tây Bắc"] = "ojb",
["Tiếng Ojibwe Đông"] = "ojg",
["Tiếng Okanagan"] = "oka",
["Tiếng Okinawa"] = "ryu",
["Tiếng Okinoerabu"] = "okn",
["Tiếng Olukumi"] = "ulb",
["Tiếng Omaha-Ponca"] = "oma",
["Tiếng Omo nguyên thủy"] = "omv-pro",
["Tiếng Omok"] = "omk",
["Tiếng Oneida"] = "one",
["Tiếng Ongota"] = "bxe",
["Tiếng Oriya"] = "or",
["Tiếng Oriya Adiwasi"] = "ort",
["Tiếng Oriya cổ"] = "inc-oor",
["Tiếng Oriya trung đại"] = "inc-mor",
["Tiếng Orma"] = "orc",
["Tiếng Ormu"] = "orz",
["Tiếng Ormur"] = "oru",
["Tiếng Oroch"] = "oac",
["Tiếng Orok"] = "oaa",
["Tiếng Oromo"] = "om",
["Tiếng Oromo Nam"] = "gax",
["Tiếng Oromo Đông"] = "hae",
["Tiếng Oroqen"] = "orh",
["Tiếng Osage"] = "osa",
["Tiếng Osatu"] = "ost",
["Tiếng Osci"] = "osc",
["Tiếng Osing"] = "osi",
["Tiếng Ossetia"] = "os",
["Tiếng Ossetia cổ"] = "oos",
["Tiếng Otomi Mezquital"] = "ote",
["Tiếng Otoro"] = "otr",
["Tiếng Otuke"] = "otu",
["Tiếng Oyda"] = "oyd",
["Tiếng Pa Kô"] = "pac",
["Tiếng Pa'O"] = "blk",
["Tiếng Paeligni"] = "pgn",
["Tiếng Pagu"] = "pgu",
["Tiếng Pahari Mahasu"] = "bfz",
["Tiếng Paharia Kumarbhag"] = "kmj",
["Tiếng Paharia Sauria"] = "mjt",
["Tiếng Paite"] = "pck",
["Tiếng Paiwan"] = "pwn",
["Tiếng Pakan nguyên thủy"] = "mkh-pkn-pro",
["Tiếng Paku"] = "pku",
["Tiếng Pala"] = "plq",
["Tiếng Palau"] = "pau",
["Tiếng Palaung Ruching"] = "pce",
["Tiếng Palaung Rumai"] = "rbb",
["Tiếng Palaung Shwe"] = "pll",
["Tiếng Palaung nguyên thủy"] = "mkh-pal-pro",
["Tiếng Palawano Brooke's Point"] = "plw",
["Tiếng Palenquero"] = "pln",
["Tiếng Pali"] = "pi",
["Tiếng Paliyan"] = "pcf",
["Tiếng Palor"] = "fap",
["Tiếng Pama-Nyungar nguyên thủy"] = "aus-pam-pro",
["Tiếng Pancana"] = "pnp",
["Tiếng Panchpargania"] = "tdb",
["Tiếng Pangasinan"] = "pag",
["Tiếng Pangwala"] = "pgg",
["Tiếng Paniya"] = "pcg",
["Tiếng Papiamento"] = "pap",
["Tiếng Papuma"] = "ppm",
["Tiếng Parachi"] = "prc",
["Tiếng Paraujano"] = "pbg",
["Tiếng Parauk"] = "prk",
["Tiếng Pareci"] = "pab",
["Tiếng Parenga"] = "pcj",
["Tiếng Parthia"] = "xpr",
["Tiếng Parya"] = "paq",
["Tiếng Pashtun"] = "ps",
["Tiếng Pathan nguyên thủy"] = "ira-pat-pro",
["Tiếng Pauna"] = "pnk",
["Tiếng Pawnee"] = "paw",
["Tiếng Pazeh"] = "pzh",
["Tiếng Pear"] = "pcb",
["Tiếng Pear nguyên thủy"] = "mkh-pea-pro",
["Tiếng Pecheneg"] = "xpc",
["Tiếng Pela"] = "bxd",
["Tiếng Pemon"] = "aoc",
["Tiếng Pengo"] = "peg",
["Tiếng Perm nguyên thủy"] = "urj-prm-pro",
["Tiếng Petjo"] = "pey",
["Tiếng Phai"] = "prt",
["Tiếng Phake"] = "phk",
["Tiếng Phalura"] = "phl",
["Tiếng Phi-Á nguyên thủy"] = "afa-pro",
["Tiếng Philippines nguyên thủy"] = "phi-pro",
["Tiếng Phoenicia"] = "phn",
["Tiếng Phong-Kniang"] = "pnx",
["Tiếng Phrygia"] = "xpg",
["Tiếng Phu Thái"] = "pht",
["Tiếng Phuan"] = "phu",
["Tiếng Pháp"] = "fr",
["Tiếng Pháp cổ"] = "fro",
["Tiếng Pháp trung đại"] = "frm",
["Tiếng Phạn"] = "sa",
["Tiếng Phần Lan"] = "fi",
["Tiếng Phổ Hiền"] = "cpx",
["Tiếng Phổ cổ"] = "prg",
["Tiếng Picard"] = "pcd",
["Tiếng Piceni Bắc"] = "nrp",
["Tiếng Piceni Nam"] = "spx",
["Tiếng Piemonte"] = "pms",
["Tiếng Pilagá"] = "plg",
["Tiếng Pinyin"] = "pny",
["Tiếng Pipil"] = "ppl",
["Tiếng Pitjantjatjara"] = "pjt",
["Tiếng Plateau nguyên thủy"] = "nic-plt-pro",
["Tiếng Pnar"] = "pbv",
["Tiếng Pnar-Khasi-Lyngngam nguyên thủy"] = "aav-pkl-pro",
["Tiếng Pohnpei"] = "pon",
["Tiếng Polabia"] = "pox",
["Tiếng Polci"] = "plj",
["Tiếng Ponosakan"] = "pns",
["Tiếng Popoluca cao nguyên"] = "poi",
["Tiếng Potawatomi"] = "pot",
["Tiếng Pothohar"] = "phr",
["Tiếng Prakrit"] = "pra",
["Tiếng Prakrit Ashoka"] = "inc-ash",
["Tiếng Prakrit Niya"] = "pra-niy",
["Tiếng Prakrit Paisaci"] = "inc-psc",
["Tiếng Prakrit Saurasen"] = "psu",
["Tiếng Prasun"] = "prn",
["Tiếng Pucikwar"] = "apq",
["Tiếng Puinave"] = "pui",
["Tiếng Pumpokol"] = "xpm",
["Tiếng Punic"] = "xpu",
["Tiếng Punjab"] = "pa",
["Tiếng Puroik"] = "suv",
["Tiếng Puyuma"] = "pyu",
["Tiếng Pwo Bắc"] = "pww",
["Tiếng Pwo Phrae"] = "kjt",
["Tiếng Pwo Tây"] = "pwo",
["Tiếng Pwo Đông"] = "kjp",
["Tiếng Pà Thẻn"] = "pha",
["Tiếng Pọng"] = "hnu",
["Tiếng Qashqai"] = "qxq",
["Tiếng Qimant"] = "ahg",
["Tiếng Quan Thoại"] = "cmn",
["Tiếng Quapaw"] = "qua",
["Tiếng Quechua"] = "qu",
["Tiếng Quenya"] = "qya",
["Tiếng Quichuañol"] = "mue",
["Tiếng Quinault"] = "qun",
["Tiếng Quiripi"] = "qyp",
["Tiếng Quảng Lâm"] = "aav-qal",
["Tiếng Quảng Đông"] = "yue",
["Tiếng Quốc tế ngữ"] = "eo",
["Tiếng Ra Glai Bắc"] = "rog",
["Tiếng Ra Glai Cát Gia"] = "roc",
["Tiếng Ra Glai Nam"] = "rgs",
["Tiếng Rabha"] = "rah",
["Tiếng Raetia"] = "xrr",
["Tiếng Rajasthan"] = "raj",
["Tiếng Rajbanshi"] = "rjs",
["Tiếng Rakhine"] = "rki",
["Tiếng Rama"] = "rma",
["Tiếng Rangpur"] = "rkt",
["Tiếng Rapa Nui"] = "rap",
["Tiếng Rarotonga"] = "rar",
["Tiếng Rasawa"] = "rac",
["Tiếng Ratagnon"] = "btn",
["Tiếng Raute"] = "rau",
["Tiếng Ravula"] = "yea",
["Tiếng Rawang"] = "raw",
["Tiếng Rejang"] = "rej",
["Tiếng Reli"] = "rei",
["Tiếng Rendille"] = "rel",
["Tiếng Riang Lai"] = "yin",
["Tiếng Rohingya"] = "rhg",
["Tiếng Romagnol"] = "rgn",
["Tiếng Romansh"] = "rm",
["Tiếng Rotuma"] = "rtm",
["Tiếng Rukai"] = "dru",
["Tiếng Rukai nguyên thủy"] = "dru-pro",
["Tiếng Rumani"] = "ro",
["Tiếng Rungus"] = "drg",
["Tiếng Rusnak"] = "rsk",
["Tiếng Rusyn"] = "rue",
["Tiếng Ruthenia cổ"] = "zle-ort",
["Tiếng Rutul"] = "rut",
["Tiếng Rơ Măm"] = "rmx",
["Tiếng Rơ Ngao"] = "ren",
["Tiếng Saanich"] = "str",
["Tiếng Saaroa"] = "sxr",
["Tiếng Saba"] = "saa",
["Tiếng Sabüm"] = "sbo",
["Tiếng Sadri"] = "sck",
["Tiếng Saek"] = "skb",
["Tiếng Saho"] = "ssy",
["Tiếng Saisiyat"] = "xsy",
["Tiếng Saka-Wakhi nguyên thủy"] = "xsc-skw-pro",
["Tiếng Sakizaya"] = "szy",
["Tiếng Salar"] = "slr",
["Tiếng Salish nguyên thủy"] = "sal-pro",
["Tiếng Sama Trung"] = "sml",
["Tiếng Sambal Botolan"] = "sbl",
["Tiếng Sambali"] = "xsb",
["Tiếng Sambalpur"] = "spv",
["Tiếng Sami Akkala"] = "sia",
["Tiếng Sami Inari"] = "smn",
["Tiếng Sami Kildin"] = "sjd",
["Tiếng Sami Skolt"] = "sms",
["Tiếng Sami Ter"] = "sjt",
["Tiếng Sami Ume"] = "sju",
["Tiếng Sami nguyên thủy"] = "smi-pro",
["Tiếng Samo"] = "smq",
["Tiếng Samo Nam"] = "sbd",
["Tiếng Samoa"] = "sm",
["Tiếng Samogitia"] = "sgs",
["Tiếng Samoyed nguyên thủy"] = "syd-pro",
["Tiếng Samtao"] = "stu",
["Tiếng Sangir"] = "sxn",
["Tiếng Sangisar"] = "sgr",
["Tiếng Sango"] = "sg",
["Tiếng Santal"] = "sat",
["Tiếng Saposa"] = "sps",
["Tiếng Saraiki"] = "skr",
["Tiếng Saramacca"] = "srm",
["Tiếng Sardegna"] = "sc",
["Tiếng Sarikol"] = "srh",
["Tiếng Sarmatia nguyên thủy"] = "xsc-sar-pro",
["Tiếng Sasak"] = "sas",
["Tiếng Saurashtra"] = "saz",
["Tiếng Savi"] = "sdg",
["Tiếng Saxon Transylvania"] = "gmw-tsx",
["Tiếng Saxon cổ"] = "osx",
["Tiếng Scots"] = "sco",
["Tiếng Scots trung đại"] = "gmw-msc",
["Tiếng Scythia nguyên thủy"] = "xsc-pro",
["Tiếng Sebat Bet Gurage"] = "sgw",
["Tiếng Sechelt"] = "sec",
["Tiếng Selkup"] = "sel",
["Tiếng Selkup nguyên thủy"] = "sel-pro",
["Tiếng Semai"] = "sea",
["Tiếng Semaq Beri"] = "szc",
["Tiếng Semelai"] = "sza",
["Tiếng Semit Tây nguyên thủy"] = "sem-wes-pro",
["Tiếng Semit nguyên thủy"] = "sem-pro",
["Tiếng Semnam"] = "ssm",
["Tiếng Sena"] = "seh",
["Tiếng Seneca"] = "see",
["Tiếng Senhaja de Srair"] = "sjs",
["Tiếng Senni Humburi"] = "hmb",
["Tiếng Senni Koyraboro"] = "ses",
["Tiếng Senoufo Nyarafolo"] = "sev",
["Tiếng Serbia-Croatia"] = "sh",
["Tiếng Serer"] = "srr",
["Tiếng Seri"] = "sei",
["Tiếng Seze"] = "sze",
["Tiếng Shabak"] = "sdb",
["Tiếng Shabo"] = "sbf",
["Tiếng Shan"] = "shn",
["Tiếng Shebayo"] = "awd-she",
["Tiếng Shekkacho"] = "moy",
["Tiếng Sherpa"] = "xsr",
["Tiếng Shina"] = "scl",
["Tiếng Shina Kohistan"] = "plk",
["Tiếng Shinasha"] = "bwo",
["Tiếng Sholaga"] = "sle",
["Tiếng Shompen"] = "sii",
["Tiếng Shona"] = "sn",
["Tiếng Shor"] = "cjs",
["Tiếng Shughnan"] = "sgh",
["Tiếng Shughnan-Rushan nguyên thủy"] = "ira-shr-pro",
["Tiếng Shughnan-Yazghulom nguyên thủy"] = "ira-shy-pro",
["Tiếng Shughnan-Yazghulom-Munji nguyên thủy"] = "ira-sym-pro",
["Tiếng Shuswap"] = "shs",
["Tiếng Sicel"] = "scx",
["Tiếng Sicily"] = "scn",
["Tiếng Sidamo"] = "sid",
["Tiếng Sikkim"] = "sip",
["Tiếng Silesia"] = "szl",
["Tiếng Siltʼe"] = "stv",
["Tiếng Sinaugoro"] = "snc",
["Tiếng Sindh"] = "sd",
["Tiếng Sinhala"] = "si",
["Tiếng Sioux nguyên thủy"] = "sio-pro",
["Tiếng Siraya"] = "fos",
["Tiếng Sirenik"] = "ysr",
["Tiếng Sirmaur"] = "srx",
["Tiếng Sissala"] = "sld",
["Tiếng Sissano"] = "sso",
["Tiếng Siwi"] = "siz",
["Tiếng Siwu"] = "akp",
["Tiếng Skepi"] = "skw",
["Tiếng Slav Giáo hội"] = "zls-chs",
["Tiếng Slav Giáo hội cổ"] = "cu",
["Tiếng Slav nguyên thủy"] = "sla-pro",
["Tiếng Slav Đông cổ"] = "orv",
["Tiếng Slovak"] = "sk",
["Tiếng Slovak cổ"] = "zlw-osk",
["Tiếng Slovene"] = "sl",
["Tiếng Slovincia"] = "zlw-slv",
["Tiếng Socotra"] = "sqt",
["Tiếng Sogdia"] = "sog",
["Tiếng Sogdia nguyên thủy"] = "ira-sgc-pro",
["Tiếng Sokna"] = "swn",
["Tiếng Solon"] = "tuw-sol",
["Tiếng Solong"] = "aaw",
["Tiếng Somali"] = "so",
["Tiếng Somali nguyên thủy"] = "cus-som-pro",
["Tiếng Soninke"] = "snk",
["Tiếng Sonsorol"] = "sov",
["Tiếng Sora"] = "srb",
["Tiếng Soran"] = "ckb",
["Tiếng Sotho"] = "st",
["Tiếng Sotho Bắc"] = "nso",
["Tiếng Soyot"] = "trk-soy",
["Tiếng Squamish"] = "squ",
["Tiếng Sranan Tongo"] = "srn",
["Tiếng Stau"] = "ero-tau",
["Tiếng Sumer"] = "sux",
["Tiếng Sunda"] = "su",
["Tiếng Sunda cổ"] = "osn",
["Tiếng Suri"] = "suq",
["Tiếng Surjapur"] = "sjp",
["Tiếng Susu"] = "sus",
["Tiếng Svan"] = "sva",
["Tiếng Swahili"] = "sw",
["Tiếng Swazi"] = "ss",
["Tiếng Sylhet"] = "syl",
["Tiếng Syriac cổ điển"] = "syc",
["Tiếng Sán Chay"] = "mlc",
["Tiếng Séc"] = "cs",
["Tiếng Séc cổ"] = "zlw-ocs",
["Tiếng Sô"] = "sss",
["Tiếng Taabwa"] = "tap",
["Tiếng Tabasaran"] = "tab",
["Tiếng Tachawit"] = "shy",
["Tiếng Tadyawan"] = "tdy",
["Tiếng Tafi"] = "tcd",
["Tiếng Tagal Murut"] = "mvv",
["Tiếng Tagalog"] = "tl",
["Tiếng Tagbanwa Calamian"] = "tbk",
["Tiếng Tagdal"] = "tda",
["Tiếng Tagoi"] = "tag",
["Tiếng Tahiti"] = "ty",
["Tiếng Tahltan"] = "tht",
["Tiếng Tai Loi"] = "tlq",
["Tiếng Tai Tây Nam nguyên thủy"] = "tai-swe-pro",
["Tiếng Taivoan"] = "tvx",
["Tiếng Tajik"] = "tg",
["Tiếng Tal"] = "tal",
["Tiếng Tala"] = "tak",
["Tiếng Talossa"] = "tzl",
["Tiếng Talysh"] = "tly",
["Tiếng Tamang Gorkha Đông"] = "tge",
["Tiếng Tamang Tây"] = "tdg",
["Tiếng Tamang Đông"] = "taj",
["Tiếng Tamazight Maroc chuẩn"] = "zgh",
["Tiếng Tamazight Trung Atlas"] = "tzm",
["Tiếng Tamil"] = "ta",
["Tiếng Tamil cổ"] = "oty",
["Tiếng Tamki"] = "tax",
["Tiếng Tammari"] = "tbz",
["Tiếng Tampuan"] = "tpu",
["Tiếng Tanchangya"] = "tnv",
["Tiếng Tangkhul Naga"] = "nmf",
["Tiếng Tangoa"] = "tgp",
["Tiếng Tangut"] = "txg",
["Tiếng Tanimbili"] = "tbe",
["Tiếng Taos"] = "twf",
["Tiếng Tapirapé"] = "taf",
["Tiếng Tara Baka"] = "bdh",
["Tiếng Tarantino"] = "roa-tar",
["Tiếng Tariana"] = "tae",
["Tiếng Tarifit"] = "rif",
["Tiếng Tasawaq"] = "twq",
["Tiếng Tashelhit"] = "shi",
["Tiếng Tat"] = "ttt",
["Tiếng Tat-Do Thái"] = "jdt",
["Tiếng Tatar"] = "tt",
["Tiếng Tiên Ti"] = "mis-xbi",
["Tiếng Tatar Crưm"] = "crh",
["Tiếng Tatar Siberia"] = "sty",
["Tiếng Tatuyo"] = "tav",
["Tiếng Taungyo"] = "tco",
["Tiếng Tause"] = "tad",
["Tiếng Tausug"] = "tsg",
["Tiếng Tavoy"] = "tvn",
["Tiếng Tay Dọ"] = "tyj",
["Tiếng Tayma"] = "sem-tay",
["Tiếng Taz"] = "zhx-taz",
["Tiếng Taznatit"] = "grr",
["Tiếng Taíno"] = "tnq",
["Tiếng Tchad nguyên thủy"] = "cdc-pro",
["Tiếng Telugu"] = "te",
["Tiếng Telugu cổ"] = "dra-ote",
["Tiếng Tem"] = "kdh",
["Tiếng Temiar"] = "tea",
["Tiếng Temoq"] = "tmo",
["Tiếng Ten'edn"] = "tnz",
["Tiếng Tengger"] = "tes",
["Tiếng Tenharim"] = "pah",
["Tiếng Tepehua Tlachichilco"] = "tpt",
["Tiếng Tepehuan Bắc"] = "ntp",
["Tiếng Tepehuan Đông Nam"] = "stp",
["Tiếng Teressa"] = "tef",
["Tiếng Teribe"] = "tfr",
["Tiếng Ternate"] = "tft",
["Tiếng Tetserret"] = "tez",
["Tiếng Tetum"] = "tet",
["Tiếng Thachanad"] = "thn",
["Tiếng Thavưng"] = "thm",
["Tiếng Thompson"] = "thp",
["Tiếng Thracia"] = "txh",
["Tiếng Thác Bạt"] = "qfa-xgx-tuo",
["Tiếng Thái"] = "th",
["Tiếng Thái Hàng Tổng"] = "tpo",
["Tiếng Thái Lai"] = "tjl",
["Tiếng Thái Na"] = "tdd",
["Tiếng Thái Trắng"] = "twh",
["Tiếng Thái Tống"] = "soa",
["Tiếng Thái nguyên thủy"] = "tai-pro",
["Tiếng Thái Đen"] = "blt",
["Tiếng Thái Đỏ"] = "tyr",
["Tiếng Thát Mai"] = "smh",
["Tiếng Thượng Kinabatangan"] = "dmg",
["Tiếng Thượng Sorb"] = "hsb",
["Tiếng Thổ"] = "tou",
["Tiếng Thổ Dục Hồn"] = "qfa-xgx-tuh",
["Tiếng Thổ Gia Bắc"] = "tji",
["Tiếng Thổ Gia Nam"] = "tjs",
["Tiếng Thổ Nhĩ Kỳ"] = "tr",
["Tiếng Thổ Nhĩ Kỳ Anatolia cổ"] = "trk-oat",
["Tiếng Thổ Nhĩ Kỳ Gagauz Balkan"] = "bgx",
["Tiếng Thổ Nhĩ Kỳ Ottoman"] = "ota",
["Tiếng Thụy Điển"] = "sv",
["Tiếng Thụy Điển cổ"] = "gmq-osw",
["Tiếng Thủy"] = "swi",
["Tiếng Tiang"] = "tbj",
["Tiếng Tigre"] = "tig",
["Tiếng Tigrinya"] = "ti",
["Tiếng Tindi"] = "tin",
["Tiếng Tipai"] = "nai-tip",
["Tiếng Tippera"] = "tpe",
["Tiếng Tiruray"] = "tiy",
["Tiếng Tiwa"] = "lax",
["Tiếng Tiwi"] = "tiw",
["Tiếng Tiên Ti"] = "qfa-xgx-xbi",
["Tiếng Tlapanec Malinaltepec"] = "tcf",
["Tiếng Tlingit"] = "tli",
["Tiếng Tobi"] = "tox",
["Tiếng Tochari A"] = "xto",
["Tiếng Tochari B"] = "txb",
["Tiếng Tochari nguyên thủy"] = "ine-toc-pro",
["Tiếng Tocho"] = "taz",
["Tiếng Toda"] = "tcx",
["Tiếng Tofa"] = "kim",
["Tiếng Tok Pisin"] = "tpi",
["Tiếng Tokelau"] = "tkl",
["Tiếng Toki Pona"] = "tok",
["Tiếng Tokunoshima"] = "tkn",
["Tiếng Toma"] = "tod",
["Tiếng Tonga"] = "to",
["Tiếng Tonkawa"] = "tqw",
["Tiếng Tooro"] = "ttj",
["Tiếng Torwali"] = "trw",
["Tiếng Toto"] = "txo",
["Tiếng Totonac Papantla"] = "top",
["Tiếng Totonac cao nguyên"] = "tos",
["Tiếng Triqui Chicahuaxtla"] = "trs",
["Tiếng Triqui Copala"] = "trc",
["Tiếng Triqui San Martín Itunyoso"] = "trq",
["Tiếng Triqui nguyên thủy"] = "omq-tri-pro",
["Tiếng Trió"] = "tri",
["Tiếng Triều Châu"] = "nan-tws",
["Tiếng Triều Tiên"] = "ko",
["Tiếng Triều Tiên cổ"] = "oko",
["Tiếng Triều Tiên nguyên thủy"] = "qfa-kor-pro",
["Tiếng Triều Tiên trung đại"] = "okm",
["Tiếng Truku"] = "trv",
["Tiếng Trung Bikol"] = "bcl",
["Tiếng Trung Dusun"] = "dtp",
["Tiếng Trung Mansi"] = "mns-cen",
["Tiếng Trung Nahuatl"] = "nhn",
["Tiếng Trung Nahuatl Huasteca"] = "nch",
["Tiếng Trung Nahuatl Puebla"] = "ncx",
["Tiếng Trung Quốc"] = "zh",
["Tiếng Trà Động"] = "cdy",
["Tiếng Trác Ni"] = "cda",
["Tiếng Tráng"] = "za",
["Tiếng Tráng Nông"] = "zhn",
["Tiếng Tráng Tả Giang"] = "zzj",
["Tiếng Tráng Đức Tĩnh"] = "zyg",
["Tiếng Trát Bá"] = "zhb",
["Tiếng Tsakhur"] = "tkr",
["Tiếng Tsakonia"] = "tsd",
["Tiếng Tsamai"] = "tsb",
["Tiếng Tsat"] = "huq",
["Tiếng Tsez"] = "ddo",
["Tiếng Tshangla"] = "tsj",
["Tiếng Tsimshian"] = "tsi",
["Tiếng Tsonga"] = "ts",
["Tiếng Tsou"] = "tsu",
["Tiếng Tsuut'ina"] = "srs",
["Tiếng Tswana"] = "tn",
["Tiếng Tuamotu"] = "pmt",
["Tiếng Tuareg"] = "tmh",
["Tiếng Tukang Besi Bắc"] = "khc",
["Tiếng Tukang Besi Nam"] = "bhq",
["Tiếng Tuki"] = "bag",
["Tiếng Tulu"] = "tcy",
["Tiếng Tumbuka"] = "tum",
["Tiếng Tungus nguyên thủy"] = "tuw-pro",
["Tiếng Tunica"] = "tun",
["Tiếng Tunni"] = "tqq",
["Tiếng Tupi"] = "tpn",
["Tiếng Tupi cổ"] = "tpw",
["Tiếng Tupi nguyên thủy"] = "tup-pro",
["Tiếng Tupi-Guarani nguyên thủy"] = "tup-gua-pro",
["Tiếng Turk Khorasan"] = "kmz",
["Tiếng Turk Khorezm"] = "zkh",
["Tiếng Turk cổ"] = "otk",
["Tiếng Turk nguyên thủy"] = "trk-pro",
["Tiếng Turkmen"] = "tk",
["Tiếng Turoyo"] = "tru",
["Tiếng Tuva"] = "tyv",
["Tiếng Tuvalu"] = "tvl",
["Tiếng Tuwuli"] = "bov",
["Tiếng Tyap"] = "kcg",
["Tiếng Tzotzil"] = "tzo",
["Tiếng Tà Mun"] = "aav-tam",
["Tiếng Tà Ôi Thượng"] = "tth",
["Tiếng Tày"] = "tyz",
["Tiếng Tày Sa Pa"] = "tys",
["Tiếng Tân Aram Assyria"] = "aii",
["Tiếng Tân Aram Bohtan"] = "bhn",
["Tiếng Tân Aram Chaldea"] = "cld",
["Tiếng Tân Aram Do Thái Barzani"] = "bjf",
["Tiếng Tân Aram Tây"] = "amw",
["Tiếng Tây Abenaki"] = "abe",
["Tiếng Tây Ban Nha"] = "es",
["Tiếng Tây Ban Nha cổ"] = "osp",
["Tiếng Tây Bắc Gbaya"] = "gya",
["Tiếng Tây Bắc Kavkaz nguyên thủy"] = "cau-nwc-pro",
["Tiếng Tây Bồi"] = "tas",
["Tiếng Tây Duyên hải Bajau"] = "bdr",
["Tiếng Tây Frisia"] = "fy",
["Tiếng Tây Huasteca Nahuatl"] = "nhw",
["Tiếng Tây Kayah"] = "kyu",
["Tiếng Tây Makian"] = "mqs",
["Tiếng Tây Tạng"] = "bo",
["Tiếng Tây Tạng Kham"] = "khg",
["Tiếng Tây Tạng cổ điển"] = "xct",
["Tiếng Tây Yugur"] = "ybe",
["Tiếng Tích Bá"] = "sjo",
["Tiếng Tơ Đrá"] = "tdr",
["Tiếng Tương"] = "hsn",
["Tiếng Tấn"] = "cjy",
["Tiếng Tứ Thổ"] = "sit-sit",
["Tiếng Tứ Xuyên"] = "zhx-sic",
["Tiếng U"] = "uuu",
["Tiếng Ubangi nguyên thủy"] = "nic-ubg-pro",
["Tiếng Ubykh"] = "uby",
["Tiếng Udi"] = "udi",
["Tiếng Udihe"] = "ude",
["Tiếng Udmurt"] = "udm",
["Tiếng Uduk"] = "udu",
["Tiếng Ugarit"] = "uga",
["Tiếng Ugong"] = "ugo",
["Tiếng Ugria nguyên thủy"] = "urj-ugr-pro",
["Tiếng Ukraina"] = "uk",
["Tiếng Ulch"] = "ulc",
["Tiếng Ullatan"] = "ull",
["Tiếng Umbria"] = "xum",
["Tiếng Umbundu"] = "umb",
["Tiếng Unami"] = "unm",
["Tiếng Uneapa"] = "bbn",
["Tiếng Urak Lawoi'"] = "urk",
["Tiếng Ural nguyên thủy"] = "urj-pro",
["Tiếng Urali"] = "url",
["Tiếng Urartu"] = "xur",
["Tiếng Urdu"] = "ur",
["Tiếng Uripiv-Wala-Rano-Atchin"] = "upv",
["Tiếng Urubú-Kaapor"] = "urb",
["Tiếng Urum"] = "uum",
["Tiếng Ushojo"] = "ush",
["Tiếng Usui"] = "usi",
["Tiếng Ute-Aztec nguyên thủy"] = "azc-pro",
["Tiếng Uvbie"] = "evh",
["Tiếng Uzbek"] = "uz",
["Tiếng Vaagri Booli"] = "vaa",
["Tiếng Vaghri"] = "vgr",
["Tiếng Varli"] = "vav",
["Tiếng Vasavi"] = "vas",
["Tiếng Venda"] = "ve",
["Tiếng Veneti"] = "xve",
["Tiếng Veneto"] = "vec",
["Tiếng Veps"] = "vep",
["Tiếng Vishava"] = "vis",
["Tiếng Việt"] = "vi",
["Tiếng Việt trung cổ"] = "mkh-mvi",
["Tiếng Việt-Mường nguyên thủy"] = "mkh-vie-pro",
["Tiếng Volapük"] = "vo",
["Tiếng Volsci"] = "xvo",
["Tiếng Volta-Congo nguyên thủy"] = "nic-vco-pro",
["Tiếng Volta-Niger nguyên thủy"] = "alv-von-pro",
["Tiếng Vot"] = "vot",
["Tiếng Vurës"] = "msn",
["Tiếng Võro"] = "vro",
["Tiếng Văn ngôn"] = "lzh",
["Tiếng Waama"] = "wwa",
["Tiếng Waata"] = "ssn",
["Tiếng Wagi"] = "fad",
["Tiếng Wahgi"] = "wgi",
["Tiếng Waimaha"] = "bao",
["Tiếng Waiwai"] = "waw",
["Tiếng Wakhi"] = "wbl",
["Tiếng Wales"] = "cy",
["Tiếng Wales trung đại"] = "wlm",
["Tiếng Wallis"] = "wls",
["Tiếng Wallon"] = "wa",
["Tiếng Wambule"] = "wme",
["Tiếng Wancho"] = "nnp",
["Tiếng Waneci"] = "wne",
["Tiếng War-Jaintia"] = "aml",
["Tiếng Waray"] = "war",
["Tiếng Wardaman"] = "wrr",
["Tiếng Warekena"] = "gae",
["Tiếng Warji"] = "wji",
["Tiếng Wastek"] = "hus",
["Tiếng Wawonii"] = "wow",
["Tiếng Wayampi"] = "oym",
["Tiếng Wayana"] = "way",
["Tiếng Wayuu"] = "guc",
["Tiếng Wemba-Wemba"] = "xww",
["Tiếng Wewaw"] = "wea",
["Tiếng Wiradjuri"] = "wrh",
["Tiếng Wiyot"] = "wiy",
["Tiếng Wobé"] = "wob",
["Tiếng Woiwurrung"] = "wyi",
["Tiếng Wolane"] = "wle",
["Tiếng Wolaytta"] = "wal",
["Tiếng Wolio"] = "wlo",
["Tiếng Wolof"] = "wo",
["Tiếng Wotu"] = "wtw",
["Tiếng Wymysorys"] = "wym",
["Tiếng Xamtanga"] = "xan",
["Tiếng Xavante"] = "xav",
["Tiếng Xhosa"] = "xh",
["Tiếng Xinh Mun"] = "puo",
["Tiếng Xtiêng"] = "sti",
["Tiếng Xtiêng Bù Đeh"] = "stt",
["Tiếng Xârâcùù"] = "ane",
["Tiếng Xơ Đăng"] = "sed",
["Tiếng Yaaku"] = "muu",
["Tiếng Yaeyama"] = "rys",
["Tiếng Yaghnob"] = "yai",
["Tiếng Yakan"] = "yka",
["Tiếng Yakima"] = "yak",
["Tiếng Yakkha"] = "ybh",
["Tiếng Yakut"] = "sah",
["Tiếng Yali Angguruk"] = "yli",
["Tiếng Yami"] = "tao",
["Tiếng Yamphu"] = "ybi",
["Tiếng Yanesha'"] = "ame",
["Tiếng Yanyuwa"] = "jao",
["Tiếng Yao (Nam Mĩ)"] = "sai-yao",
["Tiếng Yao (châu Phi)"] = "yao",
["Tiếng Yap"] = "yap",
["Tiếng Yapunda"] = "yev",
["Tiếng Yazghulom"] = "yah",
["Tiếng Ye'kwana"] = "mch",
["Tiếng Yele"] = "yle",
["Tiếng Yemsa"] = "jnj",
["Tiếng Yevan"] = "yej",
["Tiếng Yiddish"] = "yi",
["Tiếng Yidgha"] = "ydg",
["Tiếng Yidiny"] = "yii",
["Tiếng Yindjibarndi"] = "yij",
["Tiếng Yiwom"] = "gek",
["Tiếng Yogad"] = "yog",
["Tiếng Yola"] = "yol",
["Tiếng Yolmo"] = "scp",
["Tiếng Yom"] = "pil",
["Tiếng Yonaguni"] = "yoi",
["Tiếng Yong"] = "yno",
["Tiếng Yongkom"] = "yon",
["Tiếng Yoron"] = "yox",
["Tiếng Yoruba"] = "yo",
["Tiếng Yoruba nguyên thủy"] = "alv-yor-pro",
["Tiếng Yorubo nguyên thủy"] = "alv-yrd-pro",
["Tiếng Yoy"] = "yoy",
["Tiếng Yugh"] = "yug",
["Tiếng Yukaghir nguyên thủy"] = "qfa-yuk-pro",
["Tiếng Yup'ik"] = "esu",
["Tiếng Yupik Trung Siberia"] = "ess",
["Tiếng Yuri"] = "sai-yri",
["Tiếng Yurok"] = "yur",
["Tiếng Yámana"] = "yag",
["Tiếng Zacatepec Chatino"] = "ctz",
["Tiếng Zaghawa"] = "zag",
["Tiếng Zaiwa"] = "atb",
["Tiếng Zangskar"] = "zau",
["Tiếng Zapotec"] = "zap",
["Tiếng Zapotec Cajonos"] = "zad",
["Tiếng Zapotec Isthmus"] = "zai",
["Tiếng Zapotec Mitla"] = "zaw",
["Tiếng Zapotec Rincón"] = "zar",
["Tiếng Zapotec Rincón Nam"] = "zsr",
["Tiếng Zapotec San Juan Guelavía"] = "zab",
["Tiếng Zapotec Yatee"] = "zty",
["Tiếng Zapotec Yatzachi"] = "zav",
["Tiếng Zapotec Zaniza"] = "zpw",
["Tiếng Zapotec Zoogocho"] = "zpq",
["Tiếng Zapotec nguyên thủy"] = "omq-zpc-pro",
["Tiếng Zarma"] = "dje",
["Tiếng Zarphat"] = "zrp",
["Tiếng Zay"] = "zwa",
["Tiếng Zayse-Zergulla"] = "zay",
["Tiếng Zaza"] = "zza",
["Tiếng Zaza-Goran nguyên thủy"] = "ira-zgr-pro",
["Tiếng Zeeland"] = "zea",
["Tiếng Zenaga"] = "zen",
["Tiếng Zirenkel"] = "zrn",
["Tiếng Zoque Francisco León"] = "zos",
["Tiếng Zou"] = "zom",
["Tiếng Zulu"] = "zu",
["Tiếng Zumbun"] = "jmb",
["Tiếng Äynu"] = "aib",
["Tiếng Ê Đê"] = "rad",
["Tiếng Ông Bối nguyên thủy"] = "qfa-onb-pro",
["Tiếng Önge"] = "oon",
["Tiếng Önge nguyên thủy"] = "qfa-ong-pro",
["Tiếng Övdal"] = "ovd",
["Tiếng Ý"] = "it",
["Tiếng Ý-Do Thái"] = "itk",
["Tiếng Đa Đảo hạt nhân nguyên thủy"] = "poz-pnp-pro",
["Tiếng Đa Đảo nguyên thủy"] = "poz-pol-pro",
["Tiếng Đa Đảo Đông nguyên thủy"] = "poz-pep-pro",
["Tiếng Đan Mạch"] = "da",
["Tiếng Đan Mạch cổ"] = "gmq-oda",
["Tiếng Đài Sơn"] = "zhx-tai",
["Tiếng Đông Abenaki"] = "aaq",
["Tiếng Đông Acipa"] = "acp",
["Tiếng Đông Bontoc"] = "ebk",
["Tiếng Đông Bắc Kavkaz nguyên thủy"] = "cau-nec-pro",
["Tiếng Đông Can"] = "dng",
["Tiếng Đông Futuna"] = "fud",
["Tiếng Đông Hương"] = "sce",
["Tiếng Đông Kayah"] = "eky",
["Tiếng Đông Khanty"] = "kca-eas",
["Tiếng Đông Yugur"] = "yuy",
["Tiếng Đường Uông"] = "zhx-twa",
["Tiếng Đại Tây Dương–Congo nguyên thủy"] = "alv-pro",
["Tiếng Độc Long"] = "duu",
["Tiếng Động-Thủy nguyên thủy"] = "qfa-kms-pro",
["Tiếng Đức"] = "de",
["Tiếng Đức Alemanni"] = "gsw",
["Tiếng Đức Pennsylvania"] = "pdc",
["Tiếng Đức cao địa cổ"] = "goh",
["Tiếng Đức cao địa trung đại"] = "gmh",
["Tiếng Đức Đông Trung"] = "gmw-ecg",
["Tiếng Ơ Đu"] = "tyh",
["Tiếng Ưu Miền"] = "ium",
["Tiếng ǃXóõ"] = "nmn",
["Tiếng Ả Rập"] = "ar",
["Tiếng Ả Rập Ai Cập"] = "arz",
["Tiếng Ả Rập Algérie"] = "arq",
["Tiếng Ả Rập Andalusia"] = "xaa",
["Tiếng Ả Rập Bắc Levant"] = "apc",
["Tiếng Ả Rập Bắc Lưỡng Hà"] = "ayp",
["Tiếng Ả Rập Hijazi"] = "acw",
["Tiếng Ả Rập Iraq"] = "acm",
["Tiếng Ả Rập Juba"] = "pga",
["Tiếng Ả Rập Libya"] = "ayl",
["Tiếng Ả Rập Maroc"] = "ary",
["Tiếng Ả Rập Nam Levant"] = "ajp",
["Tiếng Ả Rập Oman"] = "acx",
["Tiếng Ả Rập Sudan"] = "apd",
["Tiếng Ả Rập Síp"] = "acy",
["Tiếng Ả Rập Tajikistan"] = "abh",
["Tiếng Ả Rập Tchad"] = "shu",
["Tiếng Ả Rập Tunisia"] = "aeb",
["Tiếng Ả Rập Uzbekistan"] = "auz",
["Tiếng Ả Rập vùng Vịnh"] = "afb",
["Tiếng Ấn-Arya nguyên thủy"] = "inc-pro",
["Tiếng Ấn-Iran nguyên thủy"] = "iir-pro",
["Tiếng Ấn-Âu nguyên thủy"] = "ine-pro",
["Tiếng Ỹaroamë"] = "yro",
["Àhàn"] = "ahn",
["Áncá"] = "acb",
["Ömie"] = "aom",
["Đa ngữ"] = "mul",
["ǀXam"] = "xam",
["ǁAni"] = "hnh",
["ǁGana"] = "gnk",
["ǁXegwi"] = "xeg",
["ǂHoan"] = "huc",
["ǃKung"] = "khi-kun",
}
2d5efzlx2tjrts6ychej2yl1ujej8sc
Mô đun:sa-headword
828
275250
2572838
2564460
2026-10-23T00:50:21Z
Hiyuune
50834
2572838
Scribunto
text/plain
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 en_utilities_module = "Module:en-utilities"
local headword_module = "Module:headword"
local headword_data_module = "Module:headword/data"
local headword_utilities_module = "Module:headword utilities"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local links_module = "Module:links"
local parameters_module = "Module:parameters"
local parse_interface_module = "Module:parse interface"
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local lang = require(languages_module).getByCode("sa")
local boolean_param = {type = "boolean"}
local gender_param = {type = "genders"}
local gender_param_with_default = {type = "genders", default = "?"}
local list_to_set = m_table.listToSet
local split = mw.text.split
local insert = table.insert
local concat = table.concat
local misc_pos_with_gender = list_to_set {
"Số từ",
"Hậu tố",
"Biến thể hình thái hậu tố",
"Biến thể hình thái tính từ",
"Biến thể hình thái danh từ",
"Biến thể hình thái danh từ riêng",
"Biến thể hình thái đại từ",
"Biến thể hình thái từ hạn định",
"Biến thể hình thái động từ",
"Biến thể hình thái hậu giới từ",
}
local function IAST_TO_SLP(...)
IAST_TO_SLP = require("Module:sa-utilities/translit/IAST-to-SLP1").tr
return IAST_TO_SLP(...)
end
local function reverse_tr(...)
reverse_tr = select(2, require("Module:sa-utilities/translit").retrieve_tr_modules("Deva"))
return reverse_tr(...)
end
local function translit(...)
translit = require("Module:sa-convert").tr
return translit(...)
end
function export.alt(frame)
local parargs = frame:getParent().args
local available_scripts = lang:getScripts()
local params = {
["pagename"] = true, -- for testing
}
for _, script in ipairs(available_scripts) do
params[script:getCode()] = {sublist = true}
end
local args = require(parameters_module).process(parargs, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local current_script = lang:findBestScript(pagename)
local current_script_code = current_script:getCode()
local deva_form = args.Deva and args.Deva[1] or current_script_code == "Deva" and pagename or
reverse_tr(IAST_TO_SLP(lang:transliterate(pagename)))
local output = {'<div class="NavFrame" style="max-width:40em"><div class="NavHead" style="background:var(--wikt-palette-lightblue,#d9ebff);color:inherit">Chữ viêt khác</div><div class="NavContent" style="text-align:left"><ul>'}
for _, script in ipairs(available_scripts) do
local script_code = script:getCode()
local terms = args[script_code] or {}
local auto = script_code == "Deva" and deva_form or translit(deva_form, script_code)
if not terms[1] or terms[1] == "" or terms[1] == "+" then
terms[1] = auto
elseif auto == "" then
-- Helpless - skip script.
elseif terms[1] ~= auto then
mw.addWarning(("Expected %s for %s but given %s"):format(auto, script_code, terms[1]))
insert(output, "[[Thể loại:Mục từ có chuyển tự không tương xứng tiếng Phạn]]")
end
if terms[1] ~= "" then
local first = true
for _, term in ipairs(terms) do
if term and term ~= pagename then
if first then
first = false
insert(output, "<li>")
else
insert(output, " hoặc ")
end
insert(output, require(links_module).full_link {lang = lang, sc = script, term = term, tr = "-"})
end
end
if not first then
insert(output, " ")
insert(output, require(labels_module).show_labels {
labels = { script:getDisplayForm() },
lang = lang
} .. "</li>")
end
end
end
insert(output, "</ul></div></div>")
return concat(output)
end
----------------------------------------------- Utilities --------------------------------------------
local function split_on_comma(val)
if val:find(",") then
return require(parse_interface_module).split_on_comma(val)
else
return {val}
end
end
local function ine(val)
if val == "" then return nil else return val end
end
local function track(page)
require("Module:debug/track")("sa-headword/" .. page)
return true
end
local function validate_genders(data, genders)
data.genders = genders
if not genders then
return
end
local valid_genders = {}
local base_genders = {"m", "f", "n", "mf", "mfbysense", "mfequiv"}
for _, suffix in ipairs {"", "-d", "-p"} do
for _, base_gender in ipairs(base_genders) do
insert(valid_genders, base_gender .. suffix)
end
end
insert(valid_genders, "?")
for _, gspec in ipairs(genders) do
local g = gspec.spec
if m_table.contains(valid_genders, g) then
-- ok
elseif g == "mn" or g == "nm" or g == "fn" or g == "nf" then
error(("In place of '%s', use a comma-separated list of genders, e.g. '%s'"):format(
g, (g:gsub("^(.)(.)$", "%1,%2"))))
elseif g == "mfn" then
error("In place of 'mfn', use a comma-separated list of genders, e.g. 'm,f,n'")
else
error(("Invalid gender: %s; valid genders are %s"):format(g, mw.text.listToText(valid_genders)))
end
end
end
-- Parse an inflection. The raw arguments come from `args[field]`, which is parsed for inline modifiers. Multiple
-- comma-separated values are allowed.
local function parse_inflection(args, field, is_head)
local retval
if args[field] then
retval = m_headword_utilities.parse_term_with_modifiers {
val = args[field],
paramname = field,
splitchar = ",",
is_head = is_head,
include_mods = {"tr"},
}
end
return retval or {}
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. Multiple comma-separated values are allowed. `label` is the
-- label that the inflections are given; sections enclosed in <<...>> are linked to the glossary. `accel_form` is the
-- accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel_form)
local terms = parse_inflection(args, field)
local accel_obj
if accel_form then
local lemmas = {}
local lemma_translits = {}
for i, headobj in ipairs(data.heads) do
lemmas[i] = headobj.term
lemma_translits[i] = headobj.tr
end
accel_obj = {
lemma = lemmas,
lemma_translit = lemma_translits,
form = accel_form,
}
end
return m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel_obj,
}
end
--[==[
Main entry point. Takes these params:
; {{para|1}}
: The part of speech, pluralized; omit for {{cd|*-head}} templates such as {{tl|hi-head}}, {{tl|pa-head}} and {{tl|ur-head}}.
; {{para|def}}
: Optional default value for the template page.
]==]
function export.show(frame)
local iparams = {
[1] = true,
def = true, -- default value
}
local iargs = require(parameters_module).process(frame.args, iparams)
local parargs = frame:getParent().args
local poscat = iargs[1]
local pos_in_1 = not poscat
if pos_in_1 then
poscat = ine(parargs[1]) or
mw.title.getCurrentTitle().fullText == "Bản_mẫu:sa-head" and "interjection" or
error("Từ loại phải được chỉ định trong tham số đầu tiên")
poscat = require(headword_module).canonicalize_pos(poscat)
end
local indexing_poscat = pos_in_1 and (misc_pos_with_gender[poscat] and "head_with_gender" or "head") or poscat
local params = {
["head"] = {template_default = iargs.def},
["head2"] = {replaced_by = false, instead = "use comma-separated |head="},
["tr"] = true,
["tr2"] = {replaced_by = false, instead = "use comma-separated |tr= or <tr:...> inline modifier on head"},
["id"] = true,
["r"] = true, -- root
["norootcat"] = boolean_param,
["sc"] = {type = "script"},
["sort"] = true,
["nolink"] = boolean_param,
["nolinkhead"] = {type = "boolean", alias_of = "nolink"},
["suffix"] = boolean_param,
["nosuffix"] = boolean_param,
["addlpos"] = true,
["splithyphen"] = boolean_param,
["json"] = boolean_param,
["pagename"] = true, -- for testing
}
if pos_in_1 then
params[1] = {required = true} -- required but ignored as already processed above
end
if pos_functions[indexing_poscat] then
for key, val in pairs(pos_functions[indexing_poscat].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local namespace = mw.loadData(headword_data_module).page.namespace
local data = {
lang = lang,
langname = lang:getCanonicalName(),
pos_category = poscat,
categories = {},
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
sort_key = args.sort,
force_cat_output = force_cat,
-- We use our own splitting algorithm so the redundant head cat will be inaccurate.
no_redundant_head_cat = true,
sccat = true,
}
local trs = args.tr and split_on_comma(args.tr) or {}
local num_trs = #trs
local heads = args.head and parse_inflection(args, "head", "is_head") or {}
local num_heads = #heads
if num_heads > 0 and num_trs > 0 and num_heads ~= num_trs then
error(("%s head%s specified explicitly but %s translit%s; they must match; use '+' to stand for the default head (the pagename) or no manual translit"):format(
num_heads, num_heads > 1 and "s" or "", num_trs, num_trs > 1 and "s" or ""))
end
-- Be careful here not to overwrite user_specified_heads if it's empty so we can later check user_specified_heads
-- to see if the user provided any heads.
if num_heads == 0 and num_trs > 0 then
heads = {}
for i = 1, num_trs do
heads[i] = {term = "+"}
end
end
if not heads[1] then
heads = {{term = "+"}}
end
local term_for_script_check = heads[1].term and heads[1].term ~= "+" and heads[1].term or pagename
local current_script
for i, headobj in ipairs(heads) do
if headobj.tr and trs[i] then
if headobj.tr ~= trs[i] then
error(("Saw two different translits '%s' and '%s' for head #%s"):format(
headobj.tr, trs[i], i))
end
else
headobj.tr = headobj.tr or trs[i]
end
if headobj.tr == "+" then
headobj.tr = nil
end
if headobj.tr and (not headobj.term or headobj.term == "+") then
current_script = current_script or lang:findBestScript(term_for_script_check)
local current_script_code = current_script:getCode()
if current_script_code == "Deva" then
-- reverse tr for the Devanagari form if tr is provided
-- this is to apply accentuation automatically
-- TODO: check if the reverse tr *only* changes accentuation
headobj.term = reverse_tr(IAST_TO_SLP(headobj.tr))
end
end
if headobj.term == "+" then
headobj.term = args.nolink and pagename or m_headword_utilities.add_links_to_multiword_term(pagename,
{split_hyphen_when_space = args.splithyphen})
if namespace == "Từ_tái_tạo" then
headobj.term = "*" .. headobj.term
end
end
end
data.heads = heads
data.is_suffix = false
if args.suffix or (
not args.nosuffix and pagename:find("^%-") and poscat ~= "Hậu tố" and poscat ~= "Biến thể hình thái hậu tố"
) then
data.is_suffix = true
local function handle_suffix_pos(pos, is_first)
local form_type = pos:match("^dạng (.*)$")
local actual_poscat
if form_type then
actual_poscat = "Biến thể hình thái hậu tố"
insert(data.categories, ("Dạng hậu tố %s %s"):format(form_type, data.langname))
insert(data.inflections, {label = "dạng hậu tố " .. form_type})
else
actual_poscat = "Hậu tố"
local singular_pos = m_en_utilities.singularize(pos)
insert(data.categories, ("Dạng hậu tố %s %s"):format(singular_pos, data.langname))
insert(data.inflections, {label = "dạng hậu tố " .. singular_pos})
end
if is_first then
data.pos_category = actual_poscat
elseif data.pos_category ~= actual_poscat then
error(("Cannot mix suffixes and suffix forms using addlpos=; '%s' is a %s while overall POS '%s' is a %s; use separate POS headers for the two"):
format(pos, actual_poscat, poscat, data.pos_category))
end
end
handle_suffix_pos(poscat, true)
if args.addlpos then
for _, addlpos in ipairs(split(args.addlpos, "%s*,%s*")) do
addlpos = require(headword_module).canonicalize_pos(addlpos)
handle_suffix_pos(addlpos, false)
end
end
end
if pos_functions[indexing_poscat] then
pos_functions[indexing_poscat].func(args, data)
end
if args.r then
insert(data.inflections, {label = "gốc từ", args.r})
if not args.norootcat then
insert(data.categories, "Từ thuộc gốc " .. args.r .. " tiếng Phạn")
end
end
if args.json then
return require("Module:JSON").toJSON(data)
end
return require(headword_module).full_headword(data)
end
pos_functions["Động từ"] = setmetatable({}, {
__index = function(t, k)
local type_to_text = {
A = {"thể trung gian"},
P = {"thể chủ động"},
}
local mode_to_cat = {
aorist = "thì quá khứ bất định",
causative = "thể sai khiến",
conditional = false, -- FIXME: What category?
denominative = "denominative",
desiderative = "desiderative",
frequentative = "intensive",
future = "future",
imperfect = false, -- FIXME: What category?
intensive = "intensive",
nominal = "denominative",
passive = "bị động",
perfect = "perfect",
["periphrastic future"] = "tương lai",
precative = "precative",
present = "hiện tại",
}
local function make_param_set(base, aliases)
local param_set = {}
for k in next, base do
param_set[k] = true
end
if aliases then
for k, v in next, aliases do
param_set[k] = v
end
end
return param_set
end
local class_param_set = {}
for i = 1, 10 do
class_param_set[i] = true
end
local class_param = {type = "number", set = class_param_set}
local type_param = {set = make_param_set(type_to_text)}
local mode_param = {set = make_param_set(mode_to_cat)}
t.params = {
[1] = {alias_of = "r"},
[2] = class_param,
[3] = type_param,
[4] = mode_param,
[5] = class_param,
[6] = type_param,
[7] = mode_param,
}
t.func = function (args, data)
local inflections, categories = data.inflections, data.categories
local function handle_class_type_mode(class, typ, mode, notfirst)
if not (class or typ or mode) then
return
end
local label = {}
if class then
insert(label, ("lớp %d"):format(class))
insert(categories, ("Động từ lớp %d %s"):format(class, data.langname))
end
if typ then
local typ_text = type_to_text[typ]
insert(label, ('loại <abbr title="%s">%s</abbr>'):format(concat(typ_text, " — "), typ))
for _, desc in ipairs(typ_text) do
insert(categories, ("Động từ %s %s"):format(desc, data.langname))
end
end
if mode then
insert(label, mode)
local cat = mode_to_cat[mode]
if cat then
insert(categories, ("Động từ %s %s"):format(cat, data.langname))
end
end
insert(inflections, {label = (notfirst and "hoặc " or "") .. concat(label, ", ")})
end
handle_class_type_mode(args[2], args[3], args[4])
handle_class_type_mode(args[5], args[6], args[7], true)
data.gloss = "trần thuật ở ngôi thứ ba"
end
setmetatable(t, nil)
return t[k]
end,
})
local function handle_indeclinable(plpos, args, data)
if args.indecl then
insert(data.inflections, {label = glossary_link("không biến cách")})
insert(data.categories, plpos .. " không biến cách " .. data.langname)
end
end
local function handle_comp_sup(plpos, args, data)
local insert_spec = parse_and_insert_inflection(data, args, "comp", "<<so sánh hơn>>", "so sánh hơn")
if insert_spec.exists == "không" then
insert(data.categories, plpos .. " không so sánh được " .. data.langname)
elseif insert_spec.exists == "thường không" then
insert(data.categories, plpos .. " không so sánh được " .. data.langname)
insert(data.categories, plpos .. " so sánh được " .. data.langname)
elseif insert_spec.exists == "có" then
insert(data.categories, plpos .. " so sánh được " .. data.langname)
end
parse_and_insert_inflection(data, args, "sup", "<<so sánh nhất>>", "so sánh nhất")
end
local function insert_comp_sup(params)
params.comp = true
params.comp2 = {replaced_by = false, instead = "use comma-separated |comp="}
params.sup = true
params.sup2 = {replaced_by = false, instead = "use comma-separated |sup="}
end
local function adjectives(plpos)
local params = {
indecl = boolean_param,
}
insert_comp_sup(params)
return {
params = params,
func = function(args, data)
handle_indeclinable(plpos, args, data)
handle_comp_sup(plpos, args, data)
data.gloss = "thân từ"
end,
}
end
pos_functions["Tính từ"] = adjectives("Tính từ")
pos_functions["Từ hạn định"] = adjectives("Từ hạn định")
pos_functions["Phó từ"] = (function()
local params = {}
insert_comp_sup(params)
return {
params = params,
func = function(args, data)
handle_comp_sup("Phó từ", args, data)
end,
}
end)()
pos_functions["Phân từ"] = {
params = {
[1] = {alias_of = "r"},
[2] = {set = {
desiderative = true,
des = "desiderative",
desid = "desiderative",
future = "tương lai",
fut = "tương lai",
futr = "tương lai",
gerundive = true,
gerv = "gerundive",
past = "quá khứ",
present = "hiện tại",
pres = "hiện tại",
perfect = "hoàn thành",
perf = "hoàn thành",
}},
[3] = {set = {
active = true,
a = "thể chủ động",
act = "thể chủ động",
actv = "thể chủ động",
mediopassive = "thể bị động trung gian",
mp = "thể bị động trung gian",
mpass = "thể bị động trung gian",
mpasv = "thể bị động trung gian",
mpsv = "thể bị động trung gian",
middle = "trung gian",
mid = "thể trung gian",
midl = "thể trung gian",
passive = "thể bị động",
p = "thể bị động",
pass = "thể bị động",
pasv = "thể bị động",
}},
[4] = {set = {
causative = "thể sai khiến",
caus = "thể sai khiến",
desiderative = true,
des = "desiderative",
desid = "desiderative",
intensive = true,
int = "intensive",
inten = "intensive",
intens = "intensive",
freq = "intensive",
frequentative = "intensive",
frequentive = "intensive",
}},
},
func = function(args, data)
local tense, voice, mood, typ = args[2], args[3], args[4], {}
if not (tense or voice) then
return
elseif tense then
if tense == "gerundive" then
tense = "tương lai"
if voice and voice ~= "thể bị động" then
error(("Gerundive cannot be be in the %s voice"):format(voice))
end
voice = "thể bị động"
end
insert(data.categories, ("Phân từ %s %s"):format(tense, data.langname))
insert(typ, tense)
end
if voice then
insert(data.categories, ("Phân từ %s %s"):format(voice, data.langname))
insert(typ, voice)
if tense then
insert(data.categories, ("Phân từ %s %s %s"):format(tense, voice, data.langname))
end
end
if mood then
insert(typ, mood)
end
data.gloss = "phân từ " .. concat(typ, " ")
end
}
local function nouns(plpos)
return {
params = {
[1] = gender_param_with_default,
["g"] = {replaced_by = 1},
["m"] = true,
["m2"] = {replaced_by = false, instead = "use comma-separated |m="},
["f"] = true,
["f2"] = {replaced_by = false, instead = "use comma-separated |f="},
["n"] = true,
["n2"] = {replaced_by = false, instead = "use comma-separated |n="},
["indecl"] = boolean_param,
},
func = function(args, data)
validate_genders(data, args[1])
handle_indeclinable(plpos, args, data)
parse_and_insert_inflection(data, args, "m", "giống đực tương đương", "m")
parse_and_insert_inflection(data, args, "f", "giống cái tương đương", "f")
parse_and_insert_inflection(data, args, "n", "giống trung tương đương", "n")
if args.m or args.f or args.n then
insert(data.categories, plpos .. " khác giống tương đương " .. data.langname)
end
data.gloss = "thân từ"
end,
}
end
pos_functions["Danh từ"] = nouns("Danh từ")
pos_functions["Danh từ riêng"] = nouns("Danh từ riêng")
pos_functions["Số từ"] = nouns("Số từ")
pos_functions.head_with_gender = {
params = {
[2] = gender_param,
},
func = function(args, data)
validate_genders(data, args[2])
end,
}
return export
pp4n3fbarpmccxeevfb13lyff71a3zn
2572847
2572838
2026-10-23T01:18:36Z
Hiyuune
50834
2572847
Scribunto
text/plain
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 en_utilities_module = "Module:en-utilities"
local headword_module = "Module:headword"
local headword_data_module = "Module:headword/data"
local headword_utilities_module = "Module:headword utilities"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local links_module = "Module:links"
local parameters_module = "Module:parameters"
local parse_interface_module = "Module:parse interface"
local m_en_utilities = require_when_needed(en_utilities_module)
local m_headword_utilities = require_when_needed(headword_utilities_module)
local glossary_link = require_when_needed(headword_utilities_module, "glossary_link")
local lang = require(languages_module).getByCode("sa")
local boolean_param = {type = "boolean"}
local gender_param = {type = "genders"}
local gender_param_with_default = {type = "genders", default = "?"}
local list_to_set = m_table.listToSet
local split = mw.text.split
local insert = table.insert
local concat = table.concat
local misc_pos_with_gender = list_to_set {
"Số từ",
"Hậu tố",
"Biến thể hình thái hậu tố",
"Biến thể hình thái tính từ",
"Biến thể hình thái danh từ",
"Biến thể hình thái danh từ riêng",
"Biến thể hình thái đại từ",
"Biến thể hình thái từ hạn định",
"Biến thể hình thái động từ",
"Biến thể hình thái hậu giới từ",
}
local function IAST_TO_SLP(...)
IAST_TO_SLP = require("Module:sa-utilities/translit/IAST-to-SLP1").tr
return IAST_TO_SLP(...)
end
local function reverse_tr(...)
reverse_tr = select(2, require("Module:sa-utilities/translit").retrieve_tr_modules("Deva"))
return reverse_tr(...)
end
local function translit(...)
translit = require("Module:sa-convert").tr
return translit(...)
end
function export.alt(frame)
local parargs = frame:getParent().args
local available_scripts = lang:getScripts()
local params = {
["pagename"] = true, -- for testing
}
for _, script in ipairs(available_scripts) do
params[script:getCode()] = {sublist = true}
end
local args = require(parameters_module).process(parargs, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local current_script = lang:findBestScript(pagename)
local current_script_code = current_script:getCode()
local deva_form = args.Deva and args.Deva[1] or current_script_code == "Deva" and pagename or
reverse_tr(IAST_TO_SLP(lang:transliterate(pagename)))
local output = {'<div class="NavFrame" style="max-width:40em"><div class="NavHead" style="background:var(--wikt-palette-lightblue,#d9ebff);color:inherit">Chữ viết khác</div><div class="NavContent" style="text-align:left"><ul>'}
for _, script in ipairs(available_scripts) do
local script_code = script:getCode()
local terms = args[script_code] or {}
local auto = script_code == "Deva" and deva_form or translit(deva_form, script_code)
if not terms[1] or terms[1] == "" or terms[1] == "+" then
terms[1] = auto
elseif auto == "" then
-- Helpless - skip script.
elseif terms[1] ~= auto then
mw.addWarning(("Expected %s for %s but given %s"):format(auto, script_code, terms[1]))
insert(output, "[[Thể loại:Mục từ có chuyển tự không tương xứng tiếng Phạn]]")
end
if terms[1] ~= "" then
local first = true
for _, term in ipairs(terms) do
if term and term ~= pagename then
if first then
first = false
insert(output, "<li>")
else
insert(output, " hoặc ")
end
insert(output, require(links_module).full_link {lang = lang, sc = script, term = term, tr = "-"})
end
end
if not first then
insert(output, " ")
insert(output, require(labels_module).show_labels {
labels = { script:getDisplayForm() },
lang = lang
} .. "</li>")
end
end
end
insert(output, "</ul></div></div>")
return concat(output)
end
----------------------------------------------- Utilities --------------------------------------------
local function split_on_comma(val)
if val:find(",") then
return require(parse_interface_module).split_on_comma(val)
else
return {val}
end
end
local function ine(val)
if val == "" then return nil else return val end
end
local function track(page)
require("Module:debug/track")("sa-headword/" .. page)
return true
end
local function validate_genders(data, genders)
data.genders = genders
if not genders then
return
end
local valid_genders = {}
local base_genders = {"m", "f", "n", "mf", "mfbysense", "mfequiv"}
for _, suffix in ipairs {"", "-d", "-p"} do
for _, base_gender in ipairs(base_genders) do
insert(valid_genders, base_gender .. suffix)
end
end
insert(valid_genders, "?")
for _, gspec in ipairs(genders) do
local g = gspec.spec
if m_table.contains(valid_genders, g) then
-- ok
elseif g == "mn" or g == "nm" or g == "fn" or g == "nf" then
error(("In place of '%s', use a comma-separated list of genders, e.g. '%s'"):format(
g, (g:gsub("^(.)(.)$", "%1,%2"))))
elseif g == "mfn" then
error("In place of 'mfn', use a comma-separated list of genders, e.g. 'm,f,n'")
else
error(("Invalid gender: %s; valid genders are %s"):format(g, mw.text.listToText(valid_genders)))
end
end
end
-- Parse an inflection. The raw arguments come from `args[field]`, which is parsed for inline modifiers. Multiple
-- comma-separated values are allowed.
local function parse_inflection(args, field, is_head)
local retval
if args[field] then
retval = m_headword_utilities.parse_term_with_modifiers {
val = args[field],
paramname = field,
splitchar = ",",
is_head = is_head,
include_mods = {"tr"},
}
end
return retval or {}
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. Multiple comma-separated values are allowed. `label` is the
-- label that the inflections are given; sections enclosed in <<...>> are linked to the glossary. `accel_form` is the
-- accelerator form, or nil.
local function parse_and_insert_inflection(data, args, field, label, accel_form)
local terms = parse_inflection(args, field)
local accel_obj
if accel_form then
local lemmas = {}
local lemma_translits = {}
for i, headobj in ipairs(data.heads) do
lemmas[i] = headobj.term
lemma_translits[i] = headobj.tr
end
accel_obj = {
lemma = lemmas,
lemma_translit = lemma_translits,
form = accel_form,
}
end
return m_headword_utilities.insert_inflection {
headdata = data,
terms = terms,
label = label,
accel = accel_obj,
}
end
--[==[
Main entry point. Takes these params:
; {{para|1}}
: The part of speech, pluralized; omit for {{cd|*-head}} templates such as {{tl|hi-head}}, {{tl|pa-head}} and {{tl|ur-head}}.
; {{para|def}}
: Optional default value for the template page.
]==]
function export.show(frame)
local iparams = {
[1] = true,
def = true, -- default value
}
local iargs = require(parameters_module).process(frame.args, iparams)
local parargs = frame:getParent().args
local poscat = iargs[1]
local pos_in_1 = not poscat
if pos_in_1 then
poscat = ine(parargs[1]) or
mw.title.getCurrentTitle().fullText == "Bản_mẫu:sa-head" and "interjection" or
error("Từ loại phải được chỉ định trong tham số đầu tiên")
poscat = require(headword_module).canonicalize_pos(poscat)
end
local indexing_poscat = pos_in_1 and (misc_pos_with_gender[poscat] and "head_with_gender" or "head") or poscat
local params = {
["head"] = {template_default = iargs.def},
["head2"] = {replaced_by = false, instead = "use comma-separated |head="},
["tr"] = true,
["tr2"] = {replaced_by = false, instead = "use comma-separated |tr= or <tr:...> inline modifier on head"},
["id"] = true,
["r"] = true, -- root
["norootcat"] = boolean_param,
["sc"] = {type = "script"},
["sort"] = true,
["nolink"] = boolean_param,
["nolinkhead"] = {type = "boolean", alias_of = "nolink"},
["suffix"] = boolean_param,
["nosuffix"] = boolean_param,
["addlpos"] = true,
["splithyphen"] = boolean_param,
["json"] = boolean_param,
["pagename"] = true, -- for testing
}
if pos_in_1 then
params[1] = {required = true} -- required but ignored as already processed above
end
if pos_functions[indexing_poscat] then
for key, val in pairs(pos_functions[indexing_poscat].params) do
params[key] = val
end
end
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData(headword_data_module).pagename
local namespace = mw.loadData(headword_data_module).page.namespace
local data = {
lang = lang,
langname = lang:getCanonicalName(),
pos_category = poscat,
categories = {},
genders = {},
inflections = {},
pagename = pagename,
id = args.id,
sort_key = args.sort,
force_cat_output = force_cat,
-- We use our own splitting algorithm so the redundant head cat will be inaccurate.
no_redundant_head_cat = true,
sccat = true,
}
local trs = args.tr and split_on_comma(args.tr) or {}
local num_trs = #trs
local heads = args.head and parse_inflection(args, "head", "is_head") or {}
local num_heads = #heads
if num_heads > 0 and num_trs > 0 and num_heads ~= num_trs then
error(("%s head%s specified explicitly but %s translit%s; they must match; use '+' to stand for the default head (the pagename) or no manual translit"):format(
num_heads, num_heads > 1 and "s" or "", num_trs, num_trs > 1 and "s" or ""))
end
-- Be careful here not to overwrite user_specified_heads if it's empty so we can later check user_specified_heads
-- to see if the user provided any heads.
if num_heads == 0 and num_trs > 0 then
heads = {}
for i = 1, num_trs do
heads[i] = {term = "+"}
end
end
if not heads[1] then
heads = {{term = "+"}}
end
local term_for_script_check = heads[1].term and heads[1].term ~= "+" and heads[1].term or pagename
local current_script
for i, headobj in ipairs(heads) do
if headobj.tr and trs[i] then
if headobj.tr ~= trs[i] then
error(("Saw two different translits '%s' and '%s' for head #%s"):format(
headobj.tr, trs[i], i))
end
else
headobj.tr = headobj.tr or trs[i]
end
if headobj.tr == "+" then
headobj.tr = nil
end
if headobj.tr and (not headobj.term or headobj.term == "+") then
current_script = current_script or lang:findBestScript(term_for_script_check)
local current_script_code = current_script:getCode()
if current_script_code == "Deva" then
-- reverse tr for the Devanagari form if tr is provided
-- this is to apply accentuation automatically
-- TODO: check if the reverse tr *only* changes accentuation
headobj.term = reverse_tr(IAST_TO_SLP(headobj.tr))
end
end
if headobj.term == "+" then
headobj.term = args.nolink and pagename or m_headword_utilities.add_links_to_multiword_term(pagename,
{split_hyphen_when_space = args.splithyphen})
if namespace == "Từ_tái_tạo" then
headobj.term = "*" .. headobj.term
end
end
end
data.heads = heads
data.is_suffix = false
if args.suffix or (
not args.nosuffix and pagename:find("^%-") and poscat ~= "Hậu tố" and poscat ~= "Biến thể hình thái hậu tố"
) then
data.is_suffix = true
local function handle_suffix_pos(pos, is_first)
local form_type = pos:match("^dạng (.*)$")
local actual_poscat
if form_type then
actual_poscat = "Biến thể hình thái hậu tố"
insert(data.categories, ("Dạng hậu tố %s %s"):format(form_type, data.langname))
insert(data.inflections, {label = "dạng hậu tố " .. form_type})
else
actual_poscat = "Hậu tố"
local singular_pos = m_en_utilities.singularize(pos)
insert(data.categories, ("Dạng hậu tố %s %s"):format(singular_pos, data.langname))
insert(data.inflections, {label = "dạng hậu tố " .. singular_pos})
end
if is_first then
data.pos_category = actual_poscat
elseif data.pos_category ~= actual_poscat then
error(("Cannot mix suffixes and suffix forms using addlpos=; '%s' is a %s while overall POS '%s' is a %s; use separate POS headers for the two"):
format(pos, actual_poscat, poscat, data.pos_category))
end
end
handle_suffix_pos(poscat, true)
if args.addlpos then
for _, addlpos in ipairs(split(args.addlpos, "%s*,%s*")) do
addlpos = require(headword_module).canonicalize_pos(addlpos)
handle_suffix_pos(addlpos, false)
end
end
end
if pos_functions[indexing_poscat] then
pos_functions[indexing_poscat].func(args, data)
end
if args.r then
insert(data.inflections, {label = "gốc từ", args.r})
if not args.norootcat then
insert(data.categories, "Từ thuộc gốc " .. args.r .. " tiếng Phạn")
end
end
if args.json then
return require("Module:JSON").toJSON(data)
end
return require(headword_module).full_headword(data)
end
pos_functions["Động từ"] = setmetatable({}, {
__index = function(t, k)
local type_to_text = {
A = {"thể trung gian"},
P = {"thể chủ động"},
}
local mode_to_cat = {
aorist = "thì quá khứ bất định",
causative = "thể sai khiến",
conditional = false, -- FIXME: What category?
denominative = "denominative",
desiderative = "desiderative",
frequentative = "intensive",
future = "future",
imperfect = false, -- FIXME: What category?
intensive = "intensive",
nominal = "denominative",
passive = "bị động",
perfect = "perfect",
["periphrastic future"] = "tương lai",
precative = "precative",
present = "hiện tại",
}
local function make_param_set(base, aliases)
local param_set = {}
for k in next, base do
param_set[k] = true
end
if aliases then
for k, v in next, aliases do
param_set[k] = v
end
end
return param_set
end
local class_param_set = {}
for i = 1, 10 do
class_param_set[i] = true
end
local class_param = {type = "number", set = class_param_set}
local type_param = {set = make_param_set(type_to_text)}
local mode_param = {set = make_param_set(mode_to_cat)}
t.params = {
[1] = {alias_of = "r"},
[2] = class_param,
[3] = type_param,
[4] = mode_param,
[5] = class_param,
[6] = type_param,
[7] = mode_param,
}
t.func = function (args, data)
local inflections, categories = data.inflections, data.categories
local function handle_class_type_mode(class, typ, mode, notfirst)
if not (class or typ or mode) then
return
end
local label = {}
if class then
insert(label, ("lớp %d"):format(class))
insert(categories, ("Động từ lớp %d %s"):format(class, data.langname))
end
if typ then
local typ_text = type_to_text[typ]
insert(label, ('loại <abbr title="%s">%s</abbr>'):format(concat(typ_text, " — "), typ))
for _, desc in ipairs(typ_text) do
insert(categories, ("Động từ %s %s"):format(desc, data.langname))
end
end
if mode then
insert(label, mode)
local cat = mode_to_cat[mode]
if cat then
insert(categories, ("Động từ %s %s"):format(cat, data.langname))
end
end
insert(inflections, {label = (notfirst and "hoặc " or "") .. concat(label, ", ")})
end
handle_class_type_mode(args[2], args[3], args[4])
handle_class_type_mode(args[5], args[6], args[7], true)
data.gloss = "trần thuật ở ngôi thứ ba"
end
setmetatable(t, nil)
return t[k]
end,
})
local function handle_indeclinable(plpos, args, data)
if args.indecl then
insert(data.inflections, {label = glossary_link("không biến cách")})
insert(data.categories, plpos .. " không biến cách " .. data.langname)
end
end
local function handle_comp_sup(plpos, args, data)
local insert_spec = parse_and_insert_inflection(data, args, "comp", "<<so sánh hơn>>", "so sánh hơn")
if insert_spec.exists == "không" then
insert(data.categories, plpos .. " không so sánh được " .. data.langname)
elseif insert_spec.exists == "thường không" then
insert(data.categories, plpos .. " không so sánh được " .. data.langname)
insert(data.categories, plpos .. " so sánh được " .. data.langname)
elseif insert_spec.exists == "có" then
insert(data.categories, plpos .. " so sánh được " .. data.langname)
end
parse_and_insert_inflection(data, args, "sup", "<<so sánh nhất>>", "so sánh nhất")
end
local function insert_comp_sup(params)
params.comp = true
params.comp2 = {replaced_by = false, instead = "use comma-separated |comp="}
params.sup = true
params.sup2 = {replaced_by = false, instead = "use comma-separated |sup="}
end
local function adjectives(plpos)
local params = {
indecl = boolean_param,
}
insert_comp_sup(params)
return {
params = params,
func = function(args, data)
handle_indeclinable(plpos, args, data)
handle_comp_sup(plpos, args, data)
data.gloss = "thân từ"
end,
}
end
pos_functions["Tính từ"] = adjectives("Tính từ")
pos_functions["Từ hạn định"] = adjectives("Từ hạn định")
pos_functions["Phó từ"] = (function()
local params = {}
insert_comp_sup(params)
return {
params = params,
func = function(args, data)
handle_comp_sup("Phó từ", args, data)
end,
}
end)()
pos_functions["Phân từ"] = {
params = {
[1] = {alias_of = "r"},
[2] = {set = {
desiderative = true,
des = "desiderative",
desid = "desiderative",
future = "tương lai",
fut = "tương lai",
futr = "tương lai",
gerundive = true,
gerv = "gerundive",
past = "quá khứ",
present = "hiện tại",
pres = "hiện tại",
perfect = "hoàn thành",
perf = "hoàn thành",
}},
[3] = {set = {
active = true,
a = "thể chủ động",
act = "thể chủ động",
actv = "thể chủ động",
mediopassive = "thể bị động trung gian",
mp = "thể bị động trung gian",
mpass = "thể bị động trung gian",
mpasv = "thể bị động trung gian",
mpsv = "thể bị động trung gian",
middle = "trung gian",
mid = "thể trung gian",
midl = "thể trung gian",
passive = "thể bị động",
p = "thể bị động",
pass = "thể bị động",
pasv = "thể bị động",
}},
[4] = {set = {
causative = "thể sai khiến",
caus = "thể sai khiến",
desiderative = true,
des = "desiderative",
desid = "desiderative",
intensive = true,
int = "intensive",
inten = "intensive",
intens = "intensive",
freq = "intensive",
frequentative = "intensive",
frequentive = "intensive",
}},
},
func = function(args, data)
local tense, voice, mood, typ = args[2], args[3], args[4], {}
if not (tense or voice) then
return
elseif tense then
if tense == "gerundive" then
tense = "tương lai"
if voice and voice ~= "thể bị động" then
error(("Gerundive cannot be be in the %s voice"):format(voice))
end
voice = "thể bị động"
end
insert(data.categories, ("Phân từ %s %s"):format(tense, data.langname))
insert(typ, tense)
end
if voice then
insert(data.categories, ("Phân từ %s %s"):format(voice, data.langname))
insert(typ, voice)
if tense then
insert(data.categories, ("Phân từ %s %s %s"):format(tense, voice, data.langname))
end
end
if mood then
insert(typ, mood)
end
data.gloss = "phân từ " .. concat(typ, " ")
end
}
local function nouns(plpos)
return {
params = {
[1] = gender_param_with_default,
["g"] = {replaced_by = 1},
["m"] = true,
["m2"] = {replaced_by = false, instead = "use comma-separated |m="},
["f"] = true,
["f2"] = {replaced_by = false, instead = "use comma-separated |f="},
["n"] = true,
["n2"] = {replaced_by = false, instead = "use comma-separated |n="},
["indecl"] = boolean_param,
},
func = function(args, data)
validate_genders(data, args[1])
handle_indeclinable(plpos, args, data)
parse_and_insert_inflection(data, args, "m", "giống đực tương đương", "m")
parse_and_insert_inflection(data, args, "f", "giống cái tương đương", "f")
parse_and_insert_inflection(data, args, "n", "giống trung tương đương", "n")
if args.m or args.f or args.n then
insert(data.categories, plpos .. " khác giống tương đương " .. data.langname)
end
data.gloss = "thân từ"
end,
}
end
pos_functions["Danh từ"] = nouns("Danh từ")
pos_functions["Danh từ riêng"] = nouns("Danh từ riêng")
pos_functions["Số từ"] = nouns("Số từ")
pos_functions.head_with_gender = {
params = {
[2] = gender_param,
},
func = function(args, data)
validate_genders(data, args[2])
end,
}
return export
rfk9gmwfuqj1g6vz0cywjdj5id85veq
Mô đun:place/placetypes
828
282248
2572974
2564017
2026-10-23T11:52:10Z
TheHighFighter2
42988
2572974
Scribunto
text/plain
local export = {}
export.force_cat = false -- set to true for testing
local m_locations = require("Module:place/locations")
local m_links = require("Module:links")
local m_table = require("Module:table")
local m_strutils = require("Module:string utilities")
local debug_track_module = "Module:debug/track"
local en_utilities_module = "Module:en-utilities"
local dump = mw.dumpObject
local insert = table.insert
local concat = table.concat
local internal_error = m_locations.internal_error
export.internal_error = internal_error
local process_error = m_locations.process_error
export.process_error = process_error
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local ucfirst = m_strutils.ucfirst
local ulower = m_strutils.lower
local rmatch = m_strutils.match
local split = m_strutils.split
--[==[ intro:
This module contains placetype data used by [[Module:place]] and {{tl|place}}, along with a significant amount of code
to work with both placetypes and locations, as well as some placename-related info (FIXME: Consider moving it to
[[Module:place/locations]]). See also [[Module:place/locations]], which has definitions of all known locations. You must
currently load this module using {{cd|require()}}, not using {{cd|mw.loadData()}}.
In particular, it contains two fundamental and tricky functions:
# `get_placetype_equivs`, which finds the equivalent placetypes to look under in order to find a given property, and in
the process correctly handles placetypes with qualifiers (including qualifiers that act similar to "type-raising"
operators in that they do something non-trivial to the placetype to their right) as well as form-of directives and
fallbacks.
# `find_matching_holonym_location`, which looks up a holonym to find a matching known location, but in the process
checks holonyms to the right to make sure there isn't a clash between the user-specified containing holonyms and the
containers of the known location being considered. This is done to prevent overcategorizing when either there are two
known locations with the same name (e.g. Birmingham in England and Birmingham, Alabama in the US), or more generally
two locations with the same name, one of which is a known location but where the other is not (e.g. we're processing
non-known-location Mérida, Spain and don't want it categorized like known location Mérida, Yucatán, Mexico).
Both of these functions are invoked repeatedly, and probably are invoked several times on the same inputs and as a
result are candidates for memoization to speed up the operation of {{tl|place}}.
]==]
------------------------------------------------------------------------------------------
-- Basic utilities --
------------------------------------------------------------------------------------------
--[==[
Return true if `force_cat` is set either in this module or in [[Module:place/locations]].
]==]
function export.get_force_cat()
return export.force_cat or m_locations.force_cat
end
-- Add the page to a tracking "category". To see the pages in the "category",
-- go to [[Wiktionary:Tracking/place/PAGE]] and click on "What links here".
local function track(page)
require(debug_track_module)("place/" .. page)
return true
end
function export.remove_links_and_html(text)
text = m_links.remove_links(text)
return text:gsub("<.->", "")
end
--[==[
Return the singular version of a maybe-plural placetype, or nil if not plural. This correctly handles placetypes with
irregular plurals such as `kibbutzim` plural of `kibbutz` by looking up in a table constructed from the `plural` values
specified in `placetype_data`. If a special plural value is not found, the regular singularization algorithm in
[[Module:en-utilities]] is invoked, which reverses the y -> ies change after vowels and the 'es' addition after sh/ch/x,
and otherwise just subtracts a final 's' (which will incorrectly generate 'passe' for plural 'passes'; FIXME: consider
changing this for words ending in '-sses'). If the generated singular is the same as the passed-in value, nil is
returned.
]==]
function export.maybe_singularize_placetype(placetype)
if not placetype then
return nil
end
if export.plural_placetype_to_singular[placetype] then
return export.plural_placetype_to_singular[placetype]
end
local retval = require(en_utilities_module).singularize(placetype)
if retval == placetype then
return nil
end
return retval
end
-- Return the correct plural of a placetype, and (if `do_ucfirst` is given) make the first letter uppercase. We first
-- look up the plural in `placetype_data`, falling back to pluralize() in [[Module:en-utilities]], which is almost
-- always correct.
function export.pluralize_placetype(placetype, do_ucfirst)
local ptdata = export.placetype_data[placetype]
if ptdata and ptdata.plural then
placetype = ptdata
else
placetype = placetype
end
if do_ucfirst then
return ucfirst(placetype)
else
return placetype
end
end
--[==[
Get the data associated with a placetype, which may be in its singular or plural form. If `from_category` is specified,
we also look for category-only placetypes (generally plural) followed by `!`. Return three values: (a) the placetype
under which the data can be looked up (i.e. in its singular form if the passed-in `placetype` is plural and did not
match a category-only placetype followed by `!`); (b) the placetype data structure; (c) the type of `placetype` match
that occurred, one of `"direct"` if the canonical placetype is the same as the passed-in `placetype` and also the same
as the key under which `ptdata` was looked up, or `"direct-category"` if the `ptdata` was looked up under a key formed
from the passed-in `placetype` by adding `!`, or `"plural"` if the `ptdata` was looked up under the singularized version
of the plural passed-in `placetype`.
]==]
function export.get_placetype_data(placetype, from_category)
local ptdata = export.placetype_data[placetype]
if ptdata then
return placetype, ptdata, "direct"
end
if from_category then
ptdata = export.placetype_data[placetype .. "!"]
if ptdata then
return placetype .. "!", ptdata, "direct-category"
end
end
local sg_placetype = export.maybe_singularize_placetype(placetype)
if sg_placetype then
ptdata = export.placetype_data[sg_placetype]
if ptdata then
return sg_placetype, ptdata, "plural"
end
end
return nil
end
--[==[
Check for special pseudo-placetypes that should be ignored for categorization purposes.
]==]
function export.placetype_is_ignorable(placetype)
return placetype == "and" or placetype == "or" or placetype:find("^%(")
end
function export.resolve_placetype_aliases(placetype)
return export.placetype_aliases[placetype] or placetype
end
--[==[
Return a property from `placetype_data` for a given placetype. If the placetype isn't found in `placetype_data`, or the
key isn't found in the placetype's entry in `placetype_data`, return nil.
]==]
function export.get_placetype_prop(placetype, key)
-- Usually we are called on equivalent placetypes returned from `get_placetype_equivs`, in which case placetype
-- aliases have been resolved, but sometimes not, e.g. when fetching the indefinite article in
-- get_placetype_article(). `resolve_placetype_aliases` is just a simple lookup and it doesn't hurt to do it twice.
placetype = export.resolve_placetype_aliases(placetype)
if export.placetype_data[placetype] then
return export.placetype_data[placetype][key]
else
return nil
end
end
--[==[
Given a placetype, split the placetype into one or more potential ''splits'', each consisting of a three-element list
{ {``prev_qualifiers``, ``this_qualifier``, ``reduced_placetype``}}, i.e.
# the concatenation of zero or more previously-recognized qualifiers on the left, normally canonicalized (if there are
zero such qualifiers, the value will be nil);
# a single recognized qualifier, normally canonicalized (if there is no qualifier, the value will be nil);
# the "reduced placetype" on the right.
Splitting between the qualifier in (2) and the reduced placetype in (3) happens at each space character, proceeding from
left to right, and stops if a qualifier isn't recognized. All placetypes are canonicalized by checking for aliases
in `placetype_aliases`, but no other checks are made as to whether the reduced placetype is recognized. Canonicalization
of qualifiers does not happen if `no_canon_qualifiers` is specified.
For example, given the placetype `"small beachside unincorporated community"`, the return value will be
{ {
{nil, nil, "small beachside unincorporated community"},
{nil, "small", "beachside unincorporated community"},
{"small", "[[beachfront]]", "unincorporated community"},
{"small [[beachfront]]", "[[unincorporated]]", "community"},
}}
Here, `"beachside"` is canonicalized to `"[[beachfront]]"` and `"unincorporated"` is canonicalized to
`"[[unincorporated]]"`, in both cases according to the entry in `placetype_qualifiers`.
On the other hand, if given `"small former haunted community"`, the return value will be
{ {
{nil, nil, "small former haunted community"},
{nil, "small", "former haunted community"},
{"small", "former", "haunted community"},
}}
because `"small"` and `"former"` but not `"haunted"` are recognized as qualifiers.
Finally, if given `"former adr"`, the return value will be
{ {
{nil, nil, "former adr"},
{nil, "former", "administrative region"},
}}
because `"adr"` is a recognized placetype alias for `"administrative region"`.
]==]
function export.split_qualifiers_from_placetype(placetype, no_canon_qualifiers)
local splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
local prev_qualifier = nil
while true do
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if canon == nil then
break
end
local new_qualifier = qualifier
if type(canon) == "table" then
canon = canon.link
end
if not no_canon_qualifiers and canon ~= false then
if canon == true then
new_qualifier = "[[" .. qualifier .. "]]"
else
new_qualifier = canon
end
end
insert(splits, {prev_qualifier, new_qualifier, export.resolve_placetype_aliases(reduced_placetype)})
prev_qualifier = prev_qualifier and prev_qualifier .. " " .. new_qualifier or new_qualifier
placetype = reduced_placetype
else
break
end
end
return splits
end
--[==[
Given a `placetype` (which may be pluralized), return an ordered list of equivalent placetypes to look under to find the
placetype's properties (such as the category or categories to be inserted). The return value is actually an ordered list
of objects of the form `{qualifier=``qualifier``, placetype=``equiv_placetype``}` where ``equiv_placetype`` is a
placetype whose properties to look up, derived from the passed-in placetype or from a contiguous subsequence of the
words in the passed-in placetype (always including the rightmost word in the placetype, i.e. we successively chop off
qualifier words from the left and use the remainder to find equivalent placetypes). ``qualifier`` is the remaining words
not part of the subsequence used to find ``equiv_placetype``; or nil if all words in the passed-in placetype were used
to find ``equiv_placetype``. (FIXME: This qualifier is not currently used anywhere.) Only placetypes for which there is
an entry in `placetype_data` are included. The placetype passed in is always checked first, and will form the first
entry if it exists in `placetype_data`.
'''NOTE:''' This is a tricky function as it implements handling of (a) qualifiers, (b) fallback logic, (c)
"type-raising" qualifiers such as `former`/`ancient`/etc. as well as `fictional` and `mythological`, and (d) form-of
directives, which act somewhat similarly to `former`, and allows interaction between more than one of these
simultaneously (e.g. official names of former places, which have their own categorization).
If {{tl|place}} gets too slow, one potential speedup is to memoize the results of this function, as it appears to be
getting called more than once on the same inputs. Another similar potential speedup is to memoize the results of
`iterate_matching_holonym_location()`.
For example, given the placetype `left tributary`, the following placetype/qualifier combinations are checked in turn:
```
{qualifier = nil, placetype="left tributary"}
{qualifier = "left", placetype="tributary"}
{qualifier = "left", placetype="river"}
```
and the return value will be
{ {
{qualifier = "left", placetype="tributary"},
{qualifier = "left", placetype="river"},
}}
The algorithm first enters the placetype itself into the list, then checks for `left tributary` as a recognized
placetype in `placetype_data` and doesn't find it, so it doesn't enter it into the returned list (if it found it, it
would add it as well as any fallbacks directly after it). It then splits off the recognized qualifier `left` to form the
''reduced placetype'' `tributary`, which is entered into the list because it is found in `placetype_data`. Then, because
it has a fallback `river`, which exists in `placetype_data`, the fallback is entered next.
Another example is `small rural fraziones` (where a ''frazione'' is type of subdivision of a ''comune'' or municipality,
often specifically an outlying hamlet). the placetype/qualifier combinations checked are:
```
{qualifier = nil, placetype="small rural fraziones"}
{qualifier = nil, placetype="small rural frazione"}
{qualifier = "small", placetype="rural fraziones"}
{qualifier = "small", placetype="rural frazione"}
{qualifier = "small [[rural]]", placetype="fraziones"}
{qualifier = "small [[rural]]", placetype="frazione"}
{qualifier = "small [[rural]]", placetype="hamlet"}
{qualifier = "small [[rural]]", placetype="village"}
```
The return value ends up as
{qualifier = "small [[rural]]", placetype="frazione"},
{qualifier = "small [[rural]]", placetype="hamlet"},
{qualifier = "small [[rural]]", placetype="village"},
}}
Here, because the result of singularizing `fraziones` returns a different value from the placetype itself, that
singularized value is checked after the original plural value. Also, in the process of splitting off qualifiers,
they are canonicalized if the entry in `placetype_qualifiers` says to do so; in this case, links are placed around
`rural`. Finally, `frazione` has `hamlet` as its fallback, which in turn has `village` as its fallback, so both
fallbacks end up being returned.
`no_fallback`, if set, disables returning equivalent placetypes based on the `fallback` setting for a placetype. This is
used in the first of two loops in find_placetype_cat_specs() in [[Module:place]] to prefer exact matches for placetypes
such as barangays with later holonyms to matches based on a fallback such as `neighborhood` with an earlier holonym.
See the comment in that function in [[Module:place]] for a more detailed explanation of why this is needed. Only the
placetype itself, and any reduced placetypes created by chopping off recognized qualifiers at the beginning, are
returned; but we do not return reduced placetypes if a containing placetype exists in `placetype_data`. (For example,
`"overseas territory"` has a fallback `"dependent territory"`, and `"overseas"` is also a recognized qualifier. When
`no_fallback` is in place, without the above proviso, we would return `"overseas territory"` followed by `"territory"`
with the incorrect effect of classifying an `"overseas territory"` of the United Kingdom such as `"Gibraltar"` under
[[:Category:Territories of the United Kingdom]] instead of [[:Category:Dependent territories of the United Kingdom]].)
As an exception, if `historical`, `ancient`, `former` or the like are found, they proceed ignoring `no_fallback`,
because it seems tricky to handle them correctly in the presence of `no_fallback`, and historical/former placetypes
rarely occur with exact match category specs anyway.
`no_split_qualifiers` prevents splitting off recognized qualifiers and returning the remainder of the placetype as an
equivalent placetype. Only the passed-in placetype, and any fallbacks, will be returned. This is used in
[[Module:category tree/topic cat/data/Places]] when looking up placetypes found in categories. Such placetypes won't
have qualifiers and so it doesn't make sense to try and look for them.
`from_category`, if set, causes category-only placetypes (those ending in `!`) to also be checked.
`form_of_directive`, if set, causes the specified form-of directive (e.g. `FORMER_NAME_OF`) to be prepended to checked
placetypes, their directive-specific type (e.g. `FORMER_NAME_OF_type`), and their classes (`class`) to get the
appropriate placetypes to check for form-of-directive categories. It falls back to the prepended generic `place` as a
placetype, e.g. `FORMER_NAME_OF place`, if nothing else matches.
`no_check_for_inherently_former` is used internally to prevent an infinite loop when checking for `inherently_former`.
`register_former_as_non_former` is a major hack used in `get_bare_categories` to deal with the mismatch between e.g.
known location `Yugoslavia` declaring itself a `country` but definitions of it declaring it a `former country`. It
causes the non-former version of the specified placetype to be included in the returned equivalents along with the
former placetypes. [FIXME: This should apply only to the entries in `former_countries` but it's tricky to do that now;
fix this in the known-location refactor. -- The known-location refactor is already done but we haven't yet fixed this.]
]==]
function export.get_placetype_equivs(placetype, props)
local no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former
local form_of_directive
if props then
no_fallback, no_split_qualifiers, no_check_for_inherently_former, from_category, register_former_as_non_former =
props.no_fallback, props.no_split_qualifiers, props.no_check_for_inherently_former, props.from_category,
props.register_former_as_non_former
form_of_directive = props.form_of_directive
end
local equivs = {}
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. `qualifier` is
-- the preceding qualifier to insert into `equivs` along with the placetype (see comment at top of function). If
-- `from_category` is given, we also check for a category-specific entry consisting of the placetype followed by
-- `!`, and in all cases we also check to see if `placetype` is plural, and if so, insert the singularized version
-- along with its fallbacks (if any) in `placetype_data`. `form_of_prefix` is a form-of prefix such as
-- `OFFICIAL_NAME_OF`. If specified, we check the fallbacks of `placetype` without the prefix but then insert into
-- `equivs` the prefixed placetype. This way, if the user says e.g. {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}},
-- we will correctly categorize into [[:Category:Official names of countries]], rather than only trying to look up
-- `OFFICIAL_NAME_OF island country` and failing, falling back ultimately to [[:Category:Official names of places]].
local function insert_placetype_and_fallbacks(qualifier, placetype, form_of_prefix)
local function insert_equiv(pt)
if form_of_prefix then
-- Let's say the user says {{tl|place|pt|@official name of:Cuba|island country|r/Caribbean}} and we have
-- no entry for `OFFICIAL_NAME_OF island country` but we do for `OFFICIAL_NAME_OF country` (which we end
-- up processing because `island country` falls back to `country`), and that entry in turn is defined
-- using a fallback. We have to insert that fallback-of-fallback, and the easiest/cleanest way of
-- handling this is by calling ourselves recursively.
insert_placetype_and_fallbacks(qualifier, form_of_prefix .. " " .. pt)
else
insert(equivs, {qualifier=qualifier, placetype=pt})
end
end
-- Insert the placetype, along with any fallbacks.
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if ptdata then
insert_equiv(canon_placetype)
if no_fallback then
return
end
local first_placetype = #equivs + 1
local prev_placetype = nil
while true do
local pt_value = export.placetype_data[canon_placetype]
if not pt_value then
internal_error("Fallback value %s specified for placetype %s but is not in `placetype_data`",
canon_placetype, prev_placetype)
end
if pt_value.fallback then
insert_equiv(pt_value.fallback)
local last_placetype = #equivs
if last_placetype - first_placetype >= 10 then
local fallback_loop = {}
for i = first_placetype, last_placetype do
insert(fallback_loop, equivs[i].placetype)
end
internal_error("Apparent loop in fallback chain: %s", table.concat(fallback_loop, " -> "))
end
prev_placetype = canon_placetype
canon_placetype = pt_value.fallback
else
break
end
end
end
end
-- Insert `placetype` into `equivs`, along with any fallback placetypes listed in `placetype_data`. This is a
-- wrapper around the more basic `insert_placetype_and_fallbacks()` which handles form-of directives. If there is no
-- form-of directive, this function directly calls `insert_placetype_and_fallbacks()`. We do things this way so that
-- form-of directives correctly combine with `former`-type qualifiers. Note that we also have special backups for
-- form-of directives that check `DIRECTIVE place` (and before that, `DIRECTIVE FORMER/ANCIENT place` is there's a
-- `former`-type directive); these backups live outside this function because we want them done once, late, rather
-- than in each invocation of `process_and_insert_placetype()`.
local function process_and_insert_placetype(qualifier, reduced_placetype)
if form_of_directive then
-- First check for e.g. `OFFICIAL_NAME_OF island country` and its fallbacks; then we look for fallbacks of
-- `island country` and check e.g. `OFFICIAL_NAME_OF country` and its fallbacks. All of this is handled by
-- `insert_placetype_and_fallbacks()` with appropriate parameters. After that, check the general class of
-- the directive, e.g. `subpolity` if something like `district` is given. (Eventually, we check for
-- `OFFICIAL_NAME_OF place` as a backup, but this happens at the end outside the loop over qualifiers.)
insert_placetype_and_fallbacks(qualifier, reduced_placetype, form_of_directive)
if not no_fallback then
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype)
local directive_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, form_of_directive .. "_type") or
export.get_placetype_prop(pt, "class") end
)
if not directive_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s in conjunction with form-of directive %s, placetype data " ..
'located but directive-specific type property %s missing, and so is "class"; ' ..
"placetypes searched are %s", reduced_placetype, form_of_directive,
form_of_directive .. "_type", reduced_placetype_equivs)
else
-- This should be allowed, as we allow unrecognized placetypes in general.
end
elseif directive_type ~= "!" then
insert_placetype_and_fallbacks(qualifier, directive_type, form_of_directive)
end
end
else
insert_placetype_and_fallbacks(qualifier, reduced_placetype)
end
end
-- Successively split off recognized qualifiers and loop over successively greater sets of qualifiers from the left
-- (unless `no_split_qualifiers` is specified, in which case we don't check for qualifiers).
local splits
if no_split_qualifiers then
splits = {{nil, nil, export.resolve_placetype_aliases(placetype)}}
else
splits = export.split_qualifiers_from_placetype(placetype)
end
for _, split in ipairs(splits) do
local prev_qualifier, this_qualifier, reduced_placetype = unpack(split, 1, 3)
-- If a special "former" qualifier like `former` or `historical` isn't present, and
-- `no_check_for_inherently_former` is not given (this flag is used to avoid infinite loops), check for
-- "inherently former" placetypes like `satrapy` and `treaty port` that always refer to no-longer-existing
-- placetypes, and handle accordingly.
local unlinked_this_qualifier
if this_qualifier and this_qualifier:find("%[") then
unlinked_this_qualifier = export.remove_links_and_html(this_qualifier)
else
unlinked_this_qualifier = this_qualifier
end
local former_qualifiers = this_qualifier and export.former_qualifiers[unlinked_this_qualifier] or nil
if not former_qualifiers and not no_check_for_inherently_former then
former_qualifiers = export.get_equiv_placetype_prop(reduced_placetype,
function(pt) return export.get_placetype_prop(pt, "inherently_former") end,
{no_check_for_inherently_former = true})
end
-- If a special "former" qualifier like `former` or `historical` is present, map it to the appropriate internal
-- qualifiers (`ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
-- qualifiers), fetch the `former_type` property, and treat the placetype as if a concatenation of the mapped
-- qualifier(s) and the value of `former_type`. For example, if `medieval village` is given, we map `medieval`
-- to `ANCIENT` and `FORMER`, and `village` to its `former_type` of `settlement`, and enter the placetypes
-- `ANCIENT settlement` and `FORMER settlement` (in that order) into `equivs`. If the placetype following the
-- "former" qualifier is recognized in `placetype_data` but has no `former_type` and no fallback with a
-- `former_type` specified, it is an internal error; but if the placetype isn't recognized (e.g. something like
-- `former greenhouse` is specified and we don't have an entry for `greenhouse`), just track the occurrence and
-- don't enter anything into `equivs`.
if former_qualifiers then
-- FIXME: Should we respect `no_fallback` here? My instinct says no.
local reduced_placetype_equivs = export.get_placetype_equivs(reduced_placetype, {
no_check_for_inherently_former = true
})
local former_type = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.get_placetype_prop(pt, "former_type") or
export.get_placetype_prop(pt, "class") end
)
if not former_type then
local pt_data = export.get_equiv_placetype_prop_from_equivs(reduced_placetype_equivs,
function(pt) return export.placetype_data[pt] end
)
if pt_data then
internal_error("For placetype %s, placetype data located but `former_type` missing; " ..
"placetypes searched are %s", reduced_placetype, reduced_placetype_equivs)
else
-- Enable error when we've verified there aren't any examples.
track("bad-former-placetype")
track("bad-former-placetype/" .. reduced_placetype)
--process_error("For placetype '%s', unrecognized placetype following 'former'-type " ..
-- "qualifier; searched placetype(s) %s", reduced_placetype, dump(reduced_placetype_equivs))
end
elseif former_type ~= "!" then
-- First check directly for `ANCIENT/FORMER` + the original following placetype. This makes it possible
-- for (e.g.) former provinces of the Roman empire to be categorized specially.
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. reduced_placetype)
end
for _, former_qualifier in ipairs(former_qualifiers) do
process_and_insert_placetype(prev_qualifier, former_qualifier .. " " .. former_type)
end
-- HACK! See explanation above for `register_former_as_non_former`.
if register_former_as_non_former then
process_and_insert_placetype(prev_qualifier, reduced_placetype)
end
-- If we're processing a form-of directive, after doing everything else we do
-- `DIRECTIVE ANCIENT/FORMER place` e.g. `OFFICIAL_NAME_OF FORMER place` as a backup.
if form_of_directive and not no_fallback then
for _, former_qualifier in ipairs(former_qualifiers) do
insert_placetype_and_fallbacks(prev_qualifier, form_of_directive .. " " .. former_qualifier ..
" place")
end
end
-- Don't continue processing equivs. The reason is probably the same as the `break` below for
-- qualifier_to_placetype_equivs[]; categories for `former BLAH` are set using `default`, and
-- non-former equivs will otherwise take precedence.
break
end
end
-- Then see if the rightmost split-off qualifier is in qualifier_to_placetype_equivs
-- (e.g. 'fictional *' -> 'fictional location'). If so, add the mapping.
if this_qualifier and export.qualifier_to_placetype_equivs[unlinked_this_qualifier] then
insert(equivs, {
qualifier=prev_qualifier,
placetype=export.qualifier_to_placetype_equivs[unlinked_this_qualifier]
})
-- Don't continue processing equivs; otherwise, if we specify 'mythological city', even though the
-- equivalent entry for 'mythological location' gets inserted ahead of the entry for 'city', the
-- latter ends up generating the category because the category for 'mythological location' is set as
-- the default value, which is used only when no non-default category can be found.
break
end
-- Finally, join the rightmost split-off qualifier to the previously split-off qualifiers to form a combined
-- qualifier, and add it along with reduced_placetype and any mapping in placetype_data for reduced_placetype.
-- NOTE: The first time through this loop, both `prev_qualifier` and `this_qualifier` are nil, and this inserts
-- the full placetype into `equivs`.
local qualifier = prev_qualifier and prev_qualifier .. " " .. this_qualifier or this_qualifier
process_and_insert_placetype(qualifier, reduced_placetype)
-- If `no_fallback` and there's an entry in `placetype_data` for this placetype, don't include any reduced
-- placetypes to avoid the "overseas territory treated as a territory" issue describe above.
if no_fallback then
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(reduced_placetype, from_category)
if canon_placetype then
break
end
end
end
-- If we're processing a form-of directive, after doing everything else we do `DIRECTIVE place` e.g.
-- `OFFICIAL_NAME_OF place` as a backup; but only if either the placetype as a whole is recognized or the placetype
-- begins with a recognized qualifier. This latter check is to avoid categorizing into e.g.
-- [[Category:en:Former names of places]] in an invocation like
-- {{place|en|@former name of:Democratic Republic of the Congo|country|r/Central Africa|;|used from 1971–1997}};
-- the `used from 1971–1997` gets treated as a placetype and we're called on it.
if form_of_directive and not no_fallback and (splits[2] or export.get_placetype_data(placetype, from_category)) then
insert_placetype_and_fallbacks(nil, form_of_directive .. " place")
end
return equivs
end
function export.get_equiv_placetype_prop_from_equivs(equivs, fun, continue_on_nil_only)
for _, equiv in ipairs(equivs) do
local retval = fun(equiv.placetype)
if continue_on_nil_only and retval ~= nil or not continue_on_nil_only and retval then
return retval, equiv
end
end
return nil, nil
end
--[==[
Given a placetype `placetype` and a function `fun` of one argument, iteratively call the function on equivalent
placetypes fetched from `get_placetype_equivs` until the function returns a non-falsy value (i.e. not {nil} or {false});
but if `continue_on_nil_only` is specified, the iterations continue until the function returns non non-{nil} value.
FIXME: We should make `continue_on_nil_only` the default; but this requires changing some callers.) When `fun` returns a
non-falsy or non-{nil} value, `get_equiv_placetype_prop` returns two values: the value returned by `fun` and the
equivalent placetype that triggered the non-falsy (or non-{nil}) return value. If `fun` never returns a non-falsy (or
non-{nil}) value, `get_equiv_placetype_prop` returns {nil} for both return values. If `placetype` is passed in as {nil},
the return value is the result of calling `fun` on {nil} (whatever it is) with {nil} for the second return value.
]==]
function export.get_equiv_placetype_prop(placetype, fun, props)
if not placetype then
return fun(nil), nil
end
return export.get_equiv_placetype_prop_from_equivs(export.get_placetype_equivs(placetype, props), fun,
props and props.continue_on_nil_only)
end
--[==[
Return the article that is used with an entry placetype. We proceed as follows:
# See if there is a recognized qualifier at the beginning that specifies an article (including `false` for no article).
This takes precedence over anything else, so that e.g. `various capitals` gets no article rather than "`the"`.
# Then check the placetype or any equivalent placetype for the `entry_placetype_use_the` property, indicating that
`"the"` should be used.
# Otherwise we look to see if the placetype itself (not any equivalents, even those involving deleting a qualifier from
the beginning) has an entry in `placetype_data` that specifies the indefinite article using `entry_placetype_use_the`
(principally for use with placetypes like `union territory`).
# Otherwise, we use [[Module:en-utilities]] to apply the standard algorithm to generate `"an"` for words beginning with
a vowel and `"a"` otherwise.
If `ucfirst` is true, the first letter of the article is made upper-case.
]==]
function export.get_placetype_article(placetype, ucfirst)
local art
local qualifier, reduced_placetype = placetype:match("^(.-) (.*)$")
if qualifier then
local canon = export.placetype_qualifiers[qualifier]
if type(canon) == "table" then
art = canon.article
end
end
if art == false then
return art
end
if art == nil then
local placetype_use_the = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "entry_placetype_use_the") end)
if placetype_use_the then
art = "tên"
else
art = export.get_placetype_prop(placetype, "entry_placetype_indefinite_article")
if not art then
art = require(en_utilities_module).get_indefinite_article(placetype)
end
end
end
if ucfirst then
art = m_strutils.ucfirst(art)
end
return art
end
--[==[
Return the preposition that should be used after `placetype` when occurring as an entry placetype or in categories
(e.g. `city >in< France` but `country >of< South America`). The preposition defaults to `"của"` if not specified.
]==]
function export.get_placetype_entry_preposition(placetype)
local pt_prep = export.get_equiv_placetype_prop(placetype,
function(pt) return export.get_placetype_prop(pt, "preposition") end
)
return pt_prep or "của"
end
--[==[
Given a place desc (see top of file) and a holonym object (see top of file), add a key/value into the place desc's
`holonyms_by_placetype` field corresponding to the placetype and placename of the holonym. For example, corresponding
to the holonym "c/Italy", a key with the list value {"Italy"} will be added to the place desc's
`holonyms_by_placetype` field. If there is already a key with that place type, the new placename will be added to the
end of the value's list.
]==]
function export.key_holonym_into_place_desc(place_desc, holonym)
if not holonym.placetype then
return
end
-- Key in equivalent placetypes, so that e.g. `cities/San Francisco` gets keyed under `city`; but don't do
-- fallbacks, as it doesn't seem correct for the "do other holonyms of the same placetype" algorithm to do holonyms
-- of different types just because they have the same fallback.
local equiv_placetypes = export.get_placetype_equivs(holonym.placetype, {no_fallback = true})
local unlinked_placename = holonym.unlinked_placename
for _, equiv in ipairs(equiv_placetypes) do
local placetype = equiv.placetype
if not place_desc.holonyms_by_placetype then
place_desc.holonyms_by_placetype = {}
end
if not place_desc.holonyms_by_placetype[placetype] then
place_desc.holonyms_by_placetype[placetype] = {unlinked_placename}
else
insert(place_desc.holonyms_by_placetype[placetype], unlinked_placename)
end
end
end
--[=[
Construct a formatted link from the raw link spec `link` given the canonical singular placetype `sg_placetype`. If the
placetype was originally plural, `orig_placetype` should contain this plural value; otherwise it should be nil. This
will construct the appropriate type of link that displays as `orig_placetype` (or otherwise `sg_placetype`) but links to
whatever the `link` spec specifies (which may be `sg_placetype`, a Wikipedia article, etc.). `ptdata` is the placetype
data structure for the placetype, and `from_category` indicates that we are generating the description of a category
(otherwise we are generating the display form of an entry placetype).
]=]
local function make_placetype_link(link, sg_placetype, orig_placetype, ptdata, from_category, noerror)
if not from_category and ptdata.disallow_in_entries then
if noerror then
return "[not meant to be specified directly, with warning: " .. ptdata.disallow_in_entries .. "]"
else
process_error("Placetype %s is not meant to be specified directly: " .. ptdata.disallow_in_entries, sg_placetype)
end
end
if link == nil then
internal_error("Placetype data present for placetype %s but no link= setting given", sg_placetype)
elseif link == true then
if orig_placetype then
return ("[[%s|%s]]"):format(sg_placetype, orig_placetype)
else
return ("[[%s]]"):format(sg_placetype)
end
elseif link == false then
process_error("Placetype %s is not meant to be specified directly, but is only for internal use", sg_placetype)
elseif link == "w" then
return ("[[w:%s|%s]]"):format(sg_placetype, orig_placetype or sg_placetype)
elseif link == "separately" then
if orig_placetype then
local sg_words = split(sg_placetype, " ")
local orig_words = split(orig_placetype, " ")
if #sg_words ~= #orig_words then
internal_error("Can't construct 'separately' link for plural placetype %s as original placetype %s " ..
"has different number of words", orig_placetype, sg_placetype)
else
for i = 1, #sg_words do
if sg_words[i] == orig_words[i] then
sg_words[i] = ("[[%s]]"):format(sg_words[i])
else
sg_words[i] = ("[[%s|%s]]"):format(sg_words[i], orig_words[i])
end
end
return concat(sg_words, " ")
end
else
return (sg_placetype:gsub("([^ ]+)", "[[%1]]"))
end
elseif link:find("^%+") then
link = link:sub(2) -- discard initial +
return ("[[%s|%s]]"):format(link, orig_placetype or sg_placetype)
elseif not orig_placetype then
return link
else
return link
end
end
--[==[
Get the display form of a placetype by looking it up in `placetype_data`. If the placetype is recognized, or is the
plural of a recognized placetype, the corresponding linked display form is returned (with plural placetypes displaying
as plural but linked to the singular form of the placetype). Otherwise, return nil. If we're generating the description
of a category, `category_type` should be set to one of `"top-level"` (for top-level categories like
[[:Category:Neighborhoods]]), `"noncity"` (for non-city categories like [[:Category:Neighborhoods in Illinois, USA]]) or
`"thành phố"` (for city categories like [[:Category:Neighborhoods of Chicago]]). Otherwise, we're generating the description
for use in formatting a {{tl|place}} call, and category-only placetypes ending in `!` will be ignored, along with
special `category_link*` settings. `return_full` is used along with `category_type` and will preferably return the
"full" variant of category link settings, i.e. `full_category_link*`; if they don't exist, the `category_link*` value is
prepended with `"names of"`. `noerror` says to not throw an error when encountering entry placetypes that would be
disallowed.
]==]
function export.get_placetype_display_form(placetype, category_type, return_full, noerror)
local from_category = not not category_type
local canon_placetype, ptdata, ptmatch = export.get_placetype_data(placetype, from_category)
if canon_placetype then
local raw_link
local function is_linked_string(str)
return type(str) == "string" and str:find("%[%[")
end
if category_type then
local fetched_full
local function fetch_maybe_full(prop)
local retval = ptdata["full_" .. prop]
if retval ~= nil then
if return_full then
return retval, true
else
internal_error("Saw full_" .. prop .. "=%s but `return_full` not set, can't handle", retval)
end
end
return ptdata[prop], false
end
local function maybe_prefix(str)
if return_full and not fetched_full then
return "names of " .. str
else
return str
end
end
-- Careful with `false` as possible value.
if category_type == "top-level" then
raw_link, fetched_full = fetch_maybe_full("category_link_top_level")
elseif category_type == "noncity" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_noncity")
elseif category_type == "thành phố" then
raw_link, fetched_full = fetch_maybe_full("category_link_before_city")
else
internal_error('Unrecognized value for `category_type` %s, should be "top-level", "noncity" or "thành phố"',
category_type)
end
if type(raw_link) == "string" then
return maybe_prefix(raw_link), ptdata
elseif raw_link ~= nil then
return raw_link, ptdata
end
raw_link, fetched_full = fetch_maybe_full("category_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
if ptmatch == "plural" then
raw_link, fetched_full = fetch_maybe_full("plural_link")
if raw_link == false then
return raw_link, ptdata
end
if is_linked_string(raw_link) then
return maybe_prefix(raw_link), ptdata
end
end
if raw_link == nil then
raw_link, fetched_full = fetch_maybe_full("link")
end
if raw_link == false then
return raw_link, ptdata
end
return maybe_prefix(make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror)), ptdata
else
if ptmatch == "plural" then
raw_link = ptdata.plural_link
if raw_link == false then
process_error("Placetype %s cannot appear plural", placetype)
end
if is_linked_string(raw_link) then
return raw_link, ptdata
end
end
if raw_link == nil then
raw_link = ptdata.link
end
return make_placetype_link(raw_link, canon_placetype,
placetype ~= canon_placetype and placetype or nil, ptdata, from_category, noerror), ptdata
end
end
return nil
end
local function resolve_unlinked_placename_display_aliases(placetype, placename)
local equiv_placetypes = export.get_placetype_equivs(placetype)
for i, equiv in ipairs(equiv_placetypes) do
equiv_placetypes[i] = equiv.placetype
end
local all_display_aliases_found = {}
local all_others_found = {}
for group, key, spec in m_locations.iterate_matching_location {
placetypes = equiv_placetypes,
placename = placename,
alias_resolution = "display",
} do
if spec.alias_of and spec.display then
insert(all_display_aliases_found, {group, key, spec, spec.display_as_full})
else
insert(all_others_found, {group, key, spec})
end
end
if not all_display_aliases_found[1] then
return placename
elseif all_display_aliases_found[2] then
internal_error("Found multiple matching display aliases for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
elseif all_others_found[1] then
internal_error("Found a display alias along with other possible meanings for placename %s, placetype %s: " ..
"all_display_aliases_found=%s, all_others_found=%s", placename, placetype, all_display_aliases_found,
all_others_found)
else
local group, key, spec, as_full = unpack(all_display_aliases_found[1])
local full, elliptical = m_locations.key_to_placename(group, key)
return as_full and full or elliptical
end
end
--[==[
If `placename` of type `placetype` is a display alias, convert it to its canonical form; otherwise, return unchanged.
Display aliases transform certain placenames into canonical displayed forms. For example, if any of `country/US`,
`country/USA` or `country/United States of America` (or `c/US`, etc.) are given, the result will be displayed as
`United States`.
'''NOTE''': Display aliases change what is displayed from what the editor wrote in the Wikitext. As a result, they
should (a) be non-political in nature, and (b) not involve a change where the word `the` needs to be added or removed.
For example, normalizing `US` and `USA` to `United States` for display purposes is OK but normalizing `Burma` to
`Myanmar` is not (instead a cat alias should be used) because the terms `Burma` and `Myanmar` have clear political
connotations. Similarly, we have a display alias that maps the old name of `Macedonia` as a country (but not a region!)
to `North Macedonia`, but `Republic of Macedonia` is mapped to `North Macedonia` only as a cat alias because the two
terms differ in their use of `the`. (For example, if we had a display alias mapping `Republic of Macedonia` to
`North Macedonia`, the call {{tl|place|en|the <<capital city>> of the <<c/Republic of Macedonia>>}} would wrongly
display as `the [[capital city]] of the [[North Macedonia]]`.) Generally, display normalizations tend to involve
alternative forms (e.g. abbreviations, ellipses, foreign spellings) where the normalization improves clarity and
consistency.
]==]
function export.resolve_placename_display_aliases(placetype, placename)
-- If the placename is a link, apply the alias inside the link.
-- This pattern matches both piped and unpiped links. If the link is not piped, the second capture (linktext) will
-- be empty.
local link, linktext = rmatch(placename, "^%[%[([^|%[%]]+)|?([^|%[%]]-)%]%]$")
if link then
if linktext ~= "" then
local alias = resolve_unlinked_placename_display_aliases(placetype, linktext)
return "[[" .. link .. "|" .. alias .. "]]"
else
local alias = resolve_unlinked_placename_display_aliases(placetype, link)
return "[[" .. alias .. "]]"
end
else
return resolve_unlinked_placename_display_aliases(placetype, placename)
end
end
--[==[
Generate the "prefixed" version of a bare key, i.e. prefix it with `the` if correct for this key.
]==]
function export.get_prefixed_key(key, spec)
if spec.the then
return key
else
return key
end
end
-- Necessary for use by [[Module:place]]. FIXME: Reorganize the modules so this isn't necessary.
export.iterate_matching_location = m_locations.iterate_matching_location
--[=[
Iterator that iterates over holonyms in `place_desc`. If `first_holonym_index` is given, start iterating at the
specified holonym and stop either when there are no more holonyms or a holonym with modifier `:also` is found. If
`first_holonym_index` is nil or omitted, iterate over all holonyms regardless. If `include_raw_text_holonyms` is
specified, raw text holonyms (those not of the form `placetype/placename`) are returned as well; they can be identified
by the fact that the `placetype` field in the holonym structure is nil. Two values are returned at each iteration, the
holonym index and holonym structure, similar to `ipairs()`.
]=]
function export.get_holonyms_to_check(place_desc, first_holonym_index, include_raw_text_holonyms)
local stop_at_also = not not first_holonym_index
return function(place_desc, index)
while true do
index = index + 1
local this_holonym = place_desc.holonyms[index]
-- If we were passed in a starting holonym index, go up to but not including a holonym marked with `:also`
-- (continue_cat_loop); the categorization code will then restart the loop at that holonym. That holonym
-- will have `:also` marked on it, so make sure not to stop immediately if the first holonym is marked with
-- `:also`.
if not this_holonym or stop_at_also and index > first_holonym_index and this_holonym.continue_cat_loop then
return nil
end
-- If not placetype, we're processing raw text, which we normally want to skip.
if include_raw_text_holonyms or this_holonym.placetype then
return index, this_holonym
end
end
end, place_desc, first_holonym_index and first_holonym_index - 1 or 0
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, iterate over all
such known locations, returning for each location the corresponding key, spec and group as well as the trail of
ancestral containers. Unlike `iterate_matching_location()`, this specifically checks that there is no mismatch between
the location's containers at any level and any of the following holonyms in the {{tl|place}} spec. The fields in `data`
are:
* `holonym_placetype`: The placetype of the holonym. It can actually be a list of possible placetypes, as with
`iterate_matching_location()`.
* `holonym_placename`: The placename of the holonym.
* `holonym_index`: The index of the holonym among the holonyms in `place_desc`, or nil if the holonym is not among the
holonyms in `place_desc`. (If a holonym index is given, we check for container mismatches among the holonyms
following the specified index, stopping either when encountering a holonym marked with modifier `:also` or, if none
exist, when we run out of holonyms. If no holonym index is given, we check all holonyms for container mismatches.)
* `place_desc`: Description of the place; used for the holonyms, to check for container mismatches.
Returns four values: the location group, the canonical key by which the location is known, the spec object describing
the location and the trail of ancestral containers for the location. The first three values are the same as for
`iterate_matching_location`.
]==]
function export.iterate_matching_holonym_location(data)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
local matching_location_iterator = m_locations.iterate_matching_location {
placetypes = holonym_placetype,
placename = holonym_placename,
}
return function()
while true do
local group, key, spec = matching_location_iterator()
if not group then
return nil
end
local container_trail = {}
-- For each level of container, check that there are no mismatches (i.e. other location of the same
-- placetype) mentioned. We allow a mismatch at a given level if there's also a match with the container
-- at that level. For example, in the case of Kansas City, defined in [[Module:place/locations]] as a city
-- in Missouri, if we define it as {{tl|place|city|s/Missouri,Kansas}}, we ignore the mismatching state of
-- Kansas because the correct state of Missouri was also mentioned. But imagine we are defining Newark,
-- Delaware as {{tl|place|city|s/Delaware|c/US}} and (as is the case) we have an entry for Newark, New
-- Jersey in [[Module:place/locations]]. Just because the containing location `US` matches isn't enough,
-- because Newark, NJ also has New Jersey as a containing location and there's a mismatch at that level. If
-- there are no mismatches at any level we assume we're dealing with the right known location.
--
-- If at a given level there are multiple containing locations, we count a match if any holonym matches any
-- containing location, and a mismatch only if a holonym exists of the same placetype that doesn't match any
-- containing location.
local containers_mismatch = false
for containers in m_locations.iterate_containers(group, key, spec) do
insert(container_trail, containers)
local match_at_level = false
local mismatch_at_level = false
for other_holonym_index, other_holonym in export.get_holonyms_to_check(place_desc,
holonym_index and holonym_index + 1 or nil) do
local other_source_holonym = other_holonym.augmented_from_holonym
if other_source_holonym and other_source_holonym.placetype == holonym_placetype and
other_source_holonym.unlinked_placename ~= holonym_placename then
-- Ignore holonyms added during the augmentation process for other holonyms of the same
-- placetype as the placetype of the holonym we're considering. See comment in
-- augment_holonyms_with_container() for why we do this.
-- continue; grrr, no 'continue' in Lua
else
local holonym_matches_at_level = false
local holonym_exists_with_same_placetype = false
for _, container in ipairs(containers) do
if not container.spec.no_check_holonym_mismatch then
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
local placetypes = container.spec.placetype
if type(placetypes) ~= "table" then
placetypes = {placetypes}
end
local placetype_equivs = {}
for _, pt in ipairs(placetypes) do
m_table.extend(placetype_equivs, export.get_placetype_equivs(pt))
end
local this_holonym_matches = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype and
(other_holonym.unlinked_placename == full_container_placename or
other_holonym.unlinked_placename == elliptical_container_placename)
end
)
if this_holonym_matches then
holonym_matches_at_level = true
break
end
local this_holonym_exists_with_same_placetype = export.get_equiv_placetype_prop_from_equivs(
placetype_equivs, function(placetype)
return other_holonym.placetype == placetype
end
)
if this_holonym_exists_with_same_placetype then
-- We seem to have a mismatch at this level. But before we decide conclusively that this
-- is the case, check to see whether the putative mismatch is an alias and matches when
-- we resolve the alias.
for oh_group, oh_key, oh_spec, oh_container_trail in
export.iterate_matching_holonym_location {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = place_desc,
} do
local oh_full_placename, oh_elliptical_placename =
m_locations.key_to_placename(oh_group, oh_key)
if oh_full_placename == full_container_placename or
oh_elliptical_placename == elliptical_container_placename then
-- Alias matched when resolved.
this_holonym_matches = true
break
end
end
if this_holonym_matches then
-- Alias matched above when resolved.
holonym_matches_at_level = true
break
else
-- Not an alias, or doesn't match when resolved. We have a true mismatch.
holonym_exists_with_same_placetype = true
end
end
end
end
if holonym_matches_at_level then
match_at_level = true
break
end
if holonym_exists_with_same_placetype then
mismatch_at_level = true
end
end
end
if not match_at_level and mismatch_at_level then
containers_mismatch = true
break
end
end
if not containers_mismatch then
return group, key, spec, container_trail
end
end
end
end
--[==[
If the holonym in `data` (in the format as passed to a category handler) refers to a known location, find and return the
corresponding key, spec and group as well as the trail of ancestral containers. This is like
`iterate_matching_holonym_location()` but throws an error if more than one location matches. (An example where this
would happen is {{tl|place|en|neighborhood|city/Newcastle}}, because there are two known locations named Newcastle. To
fix this, specify additional following disambiguating holonyms, e.g.
{{tl|place|en|neighborhood|city/Newcastle|s/New South Wales}}.
]==]
function export.find_matching_holonym_location(data)
local all_found = {}
for group, key, spec, container_trail in export.iterate_matching_holonym_location(data) do
insert(all_found, {group, key, spec, container_trail})
end
if not all_found[1] then
return nil
elseif all_found[2] then
local holonym_placetype = data.holonym_placetype
if type(holonym_placetype) == "table" then
holonym_placetype = concat(holonym_placetype, ",")
end
local found_keys = {}
for _, found in ipairs(all_found) do
local _, key, _, _ = unpack(found)
insert(found_keys, key)
end
error(("Found multiple matching locations for holonym '%s/%s'; specify disambiguating context in the " ..
"containing holonyms: %s"):format(holonym_placetype, data.holonym_placename, dump(found_keys)))
else
return unpack(all_found[1])
end
end
------------------------------------------------------------------------------------------
-- Placename and placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
This is a map from aliases to their canonical forms. Any placetypes appearing as keys here will be mapped to their
canonical forms in all respects, including the display form. Contrast entries in 'placetype_data' with a fallback, which
applies to categorization and other processes but not to display.
The most important aliases are for holonym placetypes, particularly those that occur often such as "country", "state",
"tỉnh" and the like. Particularly long placetypes that mostly occur as entry placetypes (e.g.
"census-designated place") can be given abbreviations, but it is generally preferred to spell out the entry placetype.
Note also that we purposely avoid certain abbreviations that would be ambiguous (e.g. "d", which could variously be
interpreted as "department", "district" or "division").
]==]
export.placetype_aliases = {
["acomm"] = "autonomous community",
["adr"] = "administrative region",
["adterr"] = "administrative territory", -- Pakistan
["aobl"] = "autonomous oblast",
["aokr"] = "autonomous okrug",
["ap"] = "autonomous province",
["apref"] = "autonomous prefecture",
["aprov"] = "autonomous province",
["ar"] = "autonomous region",
["arch"] = "archipelago",
["arep"] = "autonomous republic",
["aterr"] = "autonomous territory",
["atu"] = "autonomous territorial unit",
["bor"] = "borough",
["c"] = "quốc gia",
["can"] = "canton",
["carea"] = "council area",
["cc"] = "constituent country",
["cdblock"] = "community development block",
["cdep"] = "Crown dependency",
["CDP"] = "census-designated place",
["cdp"] = "census-designated place",
["clcity"] = "county-level city",
["co"] = "county",
["cobor"] = "county borough",
["colcity"] = "county-level city",
["coll"] = "collectivity",
["comm"] = "community",
["cont"] = "lục địa",
["continent"] = "lục địa",
["contr"] = "continental region",
["contregion"] = "continental region",
["cpar"] = "civil parish",
["damun"] = "direct-administered municipality",
["dep"] = "dependency",
["department capital"] = "departmental capital",
["dept"] = "department",
["depterr"] = "dependent territory",
["dist"] = "district",
["distmun"] = "district municipality",
["div"] = "division",
["emp"] = "empire",
["fpref"] = "French prefecture",
["gov"] = "governorate",
["govnat"] = "governorate",
["home-rule city"] = "home rule city",
["home-rule municipality"] = "home rule municipality",
["inner-city area"] = "inner city area",
["ires"] = "Indian reservation",
["isl"] = "island",
["lbor"] = "London borough",
["lga"] = "local government area",
["lgarea"] = "local government area",
["lgd"] = "local government district",
["lgdist"] = "local government district",
["metbor"] = "metropolitan borough",
["metcity"] = "metropolitan city",
["metmun"] = "metropolitan municipality",
["mtn"] = "núi",
["mun"] = "municipality",
["mundist"] = "municipal district",
["nonmetropolitan county"] = "non-metropolitan county",
["obl"] = "oblast",
["okr"] = "okrug",
["p"] = "tỉnh",
["par"] = "parish",
["parmun"] = "parish municipality",
["pen"] = "peninsula",
["plcity"] = "prefecture-level city",
["plcolony"] = "Polish colony",
["pref"] = "prefecture",
["prefcity"] = "prefecture-level city",
["preflcity"] = "prefecture-level city",
["prov"] = "tỉnh",
["r"] = "region",
["range"] = "dãy núi",
["rcm"] = "regional county municipality",
["rcomun"] = "regional county municipality",
["rdist"] = "regional district",
["rep"] = "republic",
["rhrom"] = "rural hromada",
["riv"] = "river",
["rmun"] = "regional municipality",
["robor"] = "royal borough",
["romp"] = "Roman province",
["runit"] = "regional unit",
["rurmun"] = "rural municipality",
["s"] = "state",
["sar"] = "special administrative region",
["shrom"] = "settlement hromada",
["spref"] = "subprefecture",
["sprefcity"] = "sub-prefectural city",
["sprovcity"] = "subprovincial city",
["submet city"] = "sub-metropolitan city",
["submetropolitan city"] = "sub-metropolitan city",
["sub-prefecture-level city"] = "sub-prefectural city",
["sub-provincial city"] = "subprovincial city",
["sub-provincial district"] = "subprovincial district",
["terr"] = "territory",
["terrauth"] = "territorial authority",
["twp"] = "township",
["twpmun"] = "township municipality",
["uauth"] = "unitary authority",
["ucomm"] = "unincorporated community",
["udist"] = "unitary district",
["uhrom"] = "urban hromada",
["uterr"] = "union territory",
["utwpmun"] = "united township municipality",
["val"] = "valley",
["vdc"] = "village development committee",
["vil"] = "village",
["voi"] = "voivodeship",
["wcomm"] = "Welsh community",
}
local no_link_def_article = {link = false, article = ""}
local no_link_no_article = {link = false, article = false}
--[==[ var:
These qualifiers can be prepended onto any placetype and will be handled correctly. For example, the placetype
`large city` will be displayed as `large <nowiki>[[city]]</nowiki>` and categorized as if `city` were specified. If the
value in the following table is a string, the qualifier will display according to the string. If the value is `true`,
the qualifier will be linked to its corresponding Wiktionary entry. If the value is `false`, the qualifier will not be
linked but will appear as-is. Note that these qualifiers do not override placetypes with entries elsewhere that contain
those same qualifiers. For example, the entry for `inland sea` in `placetype_data` will apply in preference to treating
`inland sea` as equivalent to `sea`.
]==]
export.placetype_qualifiers = {
-- generic qualifiers
["huge"] = false,
["tiny"] = false,
["large"] = false,
["big"] = false,
["mid-size"] = false,
["mid-sized"] = false,
["small"] = false,
["sizable"] = false,
["important"] = false,
["long"] = false,
["short"] = false,
["major"] = false,
["minor"] = false,
["high"] = false,
["tall"] = false,
["low"] = false,
["left"] = false, -- left tributary
["right"] = false, -- right tributary
["modern"] = false, -- for use in opposition to "ancient" in another definition
-- "former" qualifiers
["abandoned"] = true,
["ancient"] = true,
["deserted"] = true,
["extinct"] = true,
["former"] = false,
["historic"] = "historical",
["historical"] = true,
["medieval"] = true,
["mediaeval"] = true,
["ruined"] = true,
["traditional"] = true,
-- sea qualifiers
["coastal"] = true,
["inland"] = true, -- note, we also have an entry in placetype_data for 'inland sea' to get a link to [[inland sea]]
["maritime"] = true,
["overseas"] = true,
["seaside"] = true,
["beachfront"] = true,
["beachside"] = true,
["riverside"] = true,
-- lake qualifiers
["freshwater"] = true,
["saltwater"] = true,
["endorheic"] = true,
["oxbow"] = true,
["ox-bow"] = "[[oxbow]]", -- [[ox-bow]] is a red link
["tidal"] = true,
-- land qualifiers
["hilltop"] = true,
["hilly"] = true,
["insular"] = true,
["peninsular"] = true,
["chalk"] = true,
["karst"] = true,
["limestone"] = true,
["mountainous"] = true,
["mountaintop"] = true,
["alpine"] = true,
["volcanic"] = true, -- for an island
-- political status qualifiers
["autonomous"] = true,
["incorporated"] = true,
["special"] = true,
["unincorporated"] = true,
["coterminous"] = true,
-- monetary status/etc. qualifiers
["fashionable"] = true,
["wealthy"] = true,
["affluent"] = true,
["declining"] = true,
-- city vs. rural qualifiers
["urban"] = true,
["suburban"] = true,
["exurban"] = true,
["outlying"] = true,
["remote"] = true,
["rural"] = true,
["outback"] = true,
["inner"] = false,
["inner-city"] = true,
["central"] = false,
["outer"] = false,
-- land use qualifiers
["residential"] = true,
["agricultural"] = true,
["business"] = true,
["commercial"] = true,
["industrial"] = true,
-- business use qualifiers
["railroad"] = true,
["railway"] = true,
["farming"] = true,
["fishing"] = true,
["mining"] = true,
["logging"] = true,
["cattle"] = true,
-- tourism use qualifiers
["resort"] = true, -- note, we also have 'resort city' and 'resort town', that take precedecne
["spa"] = true, -- note, we also have 'spa city' and 'spa town', that take precedecne
["ski"] = true, -- note, we also have 'ski resort city' and 'ski resort town', that take precedecne
-- religious qualifiers
["holy"] = true,
["sacred"] = true,
["religious"] = true,
["secular"] = true,
-- qualifiers for nonexistent places
["claimed"] = false,
["fictional"] = true,
["legendary"] = true,
["mythical"] = true,
["mythological"] = true,
-- directional qualifiers
["northern"] = false,
["southern"] = false,
["eastern"] = false,
["western"] = false,
["north"] = false,
["south"] = false,
["east"] = false,
["west"] = false,
["northeastern"] = false,
["southeastern"] = false,
["northwestern"] = false,
["southwestern"] = false,
["northeast"] = false,
["southeast"] = false,
["northwest"] = false,
["southwest"] = false,
-- seasonal qualifiers
["summer"] = true, -- e.g. for 'summer capital'
["winter"] = true,
-- legal status qualifiers
-- FIXME: Two-word qualifiers don't work yet. But you can enter "de-facto" and it's canonicalized to [[de facto]].
["official"] = true,
["unofficial"] = true,
["de facto"] = true, -- 'de facto capital'
["de-facto"] = "[[de facto]]", -- [[de-facto]] is a red link
["de jure"] = true, -- 'de jure capital'
["de-jure"] = "[[de jure]]", -- [[de-jure]] is a red link
-- NOTE: 'unrecognized/unrecognised' are handled as placetypes 'unrecognized country', 'unrecognized state'
-- misc. qualifiers
["planned"] = true,
["chartered"] = true,
["landlocked"] = true,
["uninhabited"] = true,
-- superlative qualifiers
["first"] = no_link_def_article,
["second"] = no_link_def_article, -- for "second largest" etc.
["third"] = no_link_def_article,
["fourth"] = no_link_def_article,
["last"] = no_link_def_article,
["only"] = no_link_def_article,
["sole"] = no_link_def_article,
["main"] = no_link_def_article,
["largest"] = no_link_def_article,
["biggest"] = no_link_def_article,
["smallest"] = no_link_def_article,
["shortest"] = no_link_def_article,
["longest"] = no_link_def_article,
["tallest"] = no_link_def_article,
["highest"] = no_link_def_article,
["lowest"] = no_link_def_article,
["leftmost"] = no_link_def_article,
["rightmost"] = no_link_def_article,
["innermost"] = no_link_def_article,
["outermost"] = no_link_def_article,
["northernmost"] = no_link_def_article,
["southernmost"] = no_link_def_article,
["westernmost"] = no_link_def_article,
["easternmost"] = no_link_def_article,
["northwesternmost"] = no_link_def_article,
["southwesternmost"] = no_link_def_article,
["northeasternmost"] = no_link_def_article,
["southeasternmost"] = no_link_def_article,
-- several/various
["several"] = no_link_no_article,
["various"] = no_link_no_article,
["numerous"] = no_link_no_article,
["multiple"] = no_link_no_article,
["many"] = no_link_no_article,
["other"] = no_link_no_article,
}
--[==[ var:
In this table, the key qualifiers should be treated the same as the value qualifiers for categorization purposes. This
is overridden by `placetype_data` and `qualifier_to_placetype_equivs`.
]==]
export.former_qualifiers = {
["abandoned"] = {"FORMER"},
["ancient"] = {"ANCIENT", "FORMER"},
["former"] = {"FORMER"},
["extinct"] = {"FORMER"},
["historic"] = {"FORMER"},
["historical"] = {"FORMER"},
["medieval"] = {"ANCIENT", "FORMER"},
["mediaeval"] = {"ANCIENT", "FORMER"},
["ruined"] = {"ANCIENT", "FORMER"},
["traditional"] = {"FORMER"},
}
--[==[ var:
In this table, any placetypes containing these qualifiers that do not occur in `placetype_data` should be mapped to the
specified placetypes for categorization purposes. Entries here are overridden by `placetype_data`.
]==]
export.qualifier_to_placetype_equivs = {
["fictional"] = "fictional location",
["legendary"] = "mythological location",
["mythical"] = "mythological location",
["mythological"] = "mythological location",
-- For e.g. Taiwan as a "claimed province" of China; parts of Belize as claimed by Guatemala; various islands
-- claimed by various parties in East Asia. FIXME: We should conditionalize on what is being claimed since there are
-- also claimed capitals, e.g. Israel and Palestine claim Jerusalem as their capital.
["claimed"] = "claimed political division",
}
--[==[ var:
Mapping from placetypes to the corresponding plural category-only placetype for a capital of that placetype. The reverse
mapping also exists.
]==]
export.placetype_to_capital_cat = {
["autonomous community"] = "autonomous community capitals",
["canton"] = "cantonal capitals",
["comarca"] = "comarca capitals",
["country"] = "national capitals",
-- The following are not obviously different from 'county seats' but the latte terminology is used in the US.
["county"] = "county capitals",
["department"] = "departmental capitals",
["district"] = "district capitals",
["division"] = "division capitals",
["emirate"] = "emirate capitals",
["governorate"] = "governorate capitals",
["hromada"] = "hromada capitals",
["krai"] = "krai capitals",
["metropolitan city"] = "metropolitan city capitals",
["municipality"] = "municipal capitals",
["oblast"] = "oblast capitals",
["okrug"] = "okrug capitals",
["prefecture"] = "prefectural capitals",
["tỉnh"] = "provincial capitals",
["raion"] = "raion capitals",
["regency"] = "regency capitals",
["region"] = "regional capitals",
["regional unit"] = "regional unit capitals",
["republic"] = "republic capitals",
["state"] = "state capitals",
["territory"] = "territorial capitals",
["voivodeship"] = "voivodeship capitals",
}
--[==[ var:
This contains placenames that should be preceded by an article (almost always "the"). '''NOTE''': There are multiple
ways that placenames can come to be preceded by "the":
# Listed here.
# Given in [[Module:place/locations]] with an initial "the". All such placenames are added to this map by the code
just below the map.
# The placetype of the placename has `holonym_use_the = true` in its placetype_data.
# A regex in placename_the_re matches the placename.
Note that "the" is added only before the first holonym in a place description.
]==]
export.placename_article = {
-- This should only contain info that can't be inferred from [[Module:place/locations]].
["archipelago"] = {
["Cyclades"] = "the",
["Dodecanese"] = "the",
},
["country"] = {
["Holy Roman Empire"] = "the",
},
["empire"] = {
["Holy Roman Empire"] = "the",
},
["island"] = {
["North Island"] = "the",
["South Island"] = "the",
},
["region"] = {
["Balkans"] = "the",
["Russian Far East"] = "the",
["Caribbean"] = "the",
["Caucasus"] = "the",
["Middle East"] = "the",
["New Territories"] = "the",
["North Caucasus"] = "the",
["South Caucasus"] = "the",
["West Bank"] = "the",
["Gaza Strip"] = "the",
},
["valley"] = {
["San Fernando Valley"] = "the",
},
}
--[==[ var:
Regular expressions to apply to determine whether we need to put 'the' before a holonym. The key "*" applies to all
holonyms, otherwise only the regexes for the holonym's placetype apply.
]==]
export.placename_the_re = {
-- We don't need entries for peninsulas, seas, oceans, gulfs or rivers
-- because they have holonym_use_the = true.
["*"] = {"^Isle of ", " Islands$", " Mountains$", " Empire$", " Country$", " Region$", " District$", "^City of "},
["bay"] = {"^Vịnh của "},
["lake"] = {"^Hồ của "},
["country"] = {"^Republic of ", " Republic$"},
["republic"] = {"^Republic of ", " Republic$"},
["region"] = {"^Vùng của "},
["river"] = {"^Sông của "},
["local government area"] = {"^Shire of "},
["county"] = {"^Shire of "},
["Indian reservation"] = {" Reservation", " Nation"},
["tribal jurisdictional area"] = {" Reservation", " Nation"},
}
--[==[ var:
If any of the following holonyms are present, the associated holonyms are automatically added to the end of the list of
holonyms for categorization (but not display) purposes.
]==]
export.cat_implications = {
["region"] = {
["Eastern Europe"] = {"continent/Europe"},
["Central Europe"] = {"continent/Europe"},
["Western Europe"] = {"continent/Europe"},
["South Europe"] = {"continent/Europe"},
["Southern Europe"] = {"continent/Europe"},
["Northern Europe"] = {"continent/Europe"},
["Northeast Europe"] = {"continent/Europe"},
["Northeastern Europe"] = {"continent/Europe"},
["Southeast Europe"] = {"continent/Europe"},
["Southeastern Europe"] = {"continent/Europe"},
["North Caucasus"] = {"continent/Europe"},
["South Caucasus"] = {"continent/Asia"},
["South Asia"] = {"continent/Asia"},
["Southern Asia"] = {"continent/Asia"},
["East Asia"] = {"continent/Asia"},
["Eastern Asia"] = {"continent/Asia"},
["Central Asia"] = {"continent/Asia"},
["West Asia"] = {"continent/Asia"},
["Western Asia"] = {"continent/Asia"},
["Southeast Asia"] = {"continent/Asia"},
["North Asia"] = {"continent/Asia"},
["Northern Asia"] = {"continent/Asia"},
["Anatolia"] = {"continent/Asia"},
["Asia Minor"] = {"continent/Asia"},
["Mesopotamia"] = {"continent/Asia"},
["North Africa"] = {"continent/Africa"},
["Central Africa"] = {"continent/Africa"},
["West Africa"] = {"continent/Africa"},
["East Africa"] = {"continent/Africa"},
["Southern Africa"] = {"continent/Africa"},
["Central America"] = {"continent/Central America"},
["Caribbean"] = {"continent/North America"},
["Polynesia"] = {"continent/Oceania"},
["Micronesia"] = {"continent/Oceania"},
["Melanesia"] = {"continent/Oceania"},
["Siberia"] = {"country/Russia", "continent/Asia"},
["Russian Far East"] = {"country/Russia", "continent/Asia"},
["South Wales"] = {"constituent country/Wales", "continent/Europe"},
["Balkans"] = {"continent/Europe"},
["West Bank"] = {"country/Palestine", "continent/Asia"},
["Gaza"] = {"country/Palestine", "continent/Asia"},
["Gaza Strip"] = {"country/Palestine", "continent/Asia"},
}
}
------------------------------------------------------------------------------------------
-- Category and display handlers --
------------------------------------------------------------------------------------------
local function city_type_cat_handler(data)
local entry_placetype = data.entry_placetype
local generic_before_non_cities = export.get_placetype_prop(entry_placetype, "generic_before_non_cities")
if not generic_before_non_cities then
internal_error("city_type_cat_handler called on placetype %s that doesn't have a `generic_before_non_cities`" ..
" setting", entry_placetype)
end
local plural_entry_placetype = export.pluralize_placetype(entry_placetype)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and not spec.is_city then
-- Categorize both in key, and in the larger polity that the key is part of, e.g. [[Hirakata]] goes in both
-- "Cities in Osaka Prefecture" and "Cities in Japan". (But don't do the latter if no_container_cat is set.)
local cap_plural_entry_placetype = ucfirst(plural_entry_placetype)
local retcats = {("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(key, spec))}
if container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s %s %s"):format(cap_plural_entry_placetype, generic_before_non_cities,
export.get_prefixed_key(container.key, container.spec)))
end
end
return retcats
end
end
local function capital_city_cat_handler(data, non_city)
local holonym_placetype, holonym_placename, holonym_index, place_desc =
data.holonym_placetype, data.holonym_placename, data.holonym_index, data.place_desc
-- The first time we're called we want to return something; otherwise we will be called for later-mentioned
-- holonyms, which can result in wrongly classifying into e.g. `National capitals`. Simulate the loop in
-- find_placetype_cat_specs() over holonyms so we get the proper `Cities in ...` categories as well as the capital
-- category/categories we add below.
local retcats
if not non_city and place_desc.holonyms then
for h_index, holonym in export.get_holonyms_to_check(place_desc, holonym_index) do
local h_placetype, h_placename = holonym.placetype, holonym.unlinked_placename
retcats = city_type_cat_handler {
entry_placetype = "thành phố",
holonym_placetype = h_placetype,
holonym_placename = h_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if retcats then
break
end
end
end
if not retcats then
retcats = {}
end
-- Now find the appropriate capital-type category for the placetype of the holonym, e.g. 'State capitals'. If we
-- recognize the holonym among the known holonyms in [[Module:place/locations]], also add a category like 'State
-- capitals of the United States'. Truncate e.g. 'autonomous region' to 'region', 'union territory' to 'territory'
-- when looking up the type of capital category, if we can't find an entry for the holonym placetype itself (there's
-- an entry for 'autonomous community').
local capital_cat = export.placetype_to_capital_cat[holonym_placetype]
if not capital_cat then
capital_cat = export.placetype_to_capital_cat[holonym_placetype:gsub("^.* ", "")]
end
if capital_cat then
capital_cat = ucfirst(capital_cat)
local inserted_specific_variant_cat = false
if holonym_index then
-- Now find the first recognized holonym location. We don't stop when :also is seen because of the common pattern
-- where we use :also to specify that a given city is the capital at multiple surrounding levels.
local matching_group, matching_key, matching_spec, matching_container_trail, matching_holonym_index
for h_index = holonym_index, #place_desc.holonyms do
if place_desc.holonyms[h_index].placetype then
matching_group, matching_key, matching_spec, matching_container_trail = export.find_matching_holonym_location {
holonym_placetype = place_desc.holonyms[h_index].placetype,
holonym_placename = place_desc.holonyms[h_index].unlinked_placename,
holonym_index = h_index,
place_desc = place_desc,
}
if matching_group then
matching_holonym_index = h_index
break
end
end
end
if matching_holonym_index == holonym_index then
if matching_container_trail[1] and not matching_spec.no_container_cat then
for _, container in ipairs(matching_container_trail[1]) do
insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
elseif matching_holonym_index then
-- Check to make sure that the holonym placetype we were called on is listed among the
-- divtypes of the location we found.
local function insert_specific_variant_if_possible(key, spec)
return export.get_equiv_placetype_prop(holonym_placetype, function(pt)
local plural_holonym_placetype = export.pluralize_placetype(pt)
local saw_matching_div
if spec.divs then
local divs = spec.divs
if type(divs) ~= "table" then
divs = {divs}
end
for _, div in ipairs(divs) do
if type(div) ~= "table" then
div = {type = div}
end
if plural_holonym_placetype == div.type then
saw_matching_div = true
break
end
end
end
if saw_matching_div then
insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(key, spec)))
return true
end
return false
end)
end
if insert_specific_variant_if_possible(matching_key, matching_spec) then
inserted_specific_variant_cat = true
elseif not matching_spec.no_container_cat then
for _, containers in ipairs(matching_container_trail) do
local saw_no_container_cat = false
for _, container in ipairs(containers) do
if insert_specific_variant_if_possible(container.key, container.spec) then
inserted_specific_variant_cat = true
break
end
saw_no_container_cat = saw_no_container_cat or container.spec.no_container_cat
end
if inserted_specific_variant_cat or saw_no_container_cat then
break
end
end
end
end
else
-- This happens when in an invocation like {{place|en|capital city|s/Haryana,Punjab}} for
-- [[Chandigarh]]. We fall back to older code that doesn't depend on the holonym index existing.
-- FIXME: This may not be necessary. In the example just given, when processing Haryana we add to
-- [[:Category:en:State capitals of India]], and nothing extra gets added when processing Punjab.
-- Possibly we can just skip this case entirely.
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and container_trail[1] and not spec.no_container_cat then
for _, container in ipairs(container_trail[1]) do
insert(retcats, ("%s của %s"):format(capital_cat, export.get_prefixed_key(container.key,
container.spec)))
inserted_specific_variant_cat = true
end
end
end
if not inserted_specific_variant_cat then
insert(retcats, capital_cat)
end
else
-- We didn't recognize the holonym placetype; just put in 'Capital cities'.
insert(retcats, "Thành phố thủ đô")
end
return retcats
end
--[=[
This is invoked specially for all placetypes (see the `*` placetype key at the bottom of `placetype_data`). This is used
in two ways:
# To add pages to generic holonym categories like [[:Category:en:Places in Merseyside, England]] (and
[[:Category:en:Places in England]]) for any pages that have `co/Merseyside` as their holonym.
# To categorize demonyms in bare placename categories like [[:Category:en:Merseyside, England]] if the demonym
description mentions `co/Merseyside` and doesn't mention a more specific placename that also has a category. (In this
case there are none, but we can have demonyms at multiple levels, e.g. in France for individual villages, departments,
administrative regions, and for the entire country, and for example we only want to categorize a demonym into
[[:Category:France]] if no more specific category applies.) Unlike when invoked from {{tl|place}}, a demonym
invocation only adds the most specific holonym category and not the category of any containing polity (hence if we
add [[:Category:en:Merseyside, England]] we won't also add [[:Category:England]]).
This code also handles cities; e.g. for the first use case above, it would be used to add a page that has `city/Boston`
as a holonym to [[:Category:en:Places in Boston]], along with [[:Category:en:Places in Massachusetts, USA]] and
[[:Category:en:Places in the United States]]. The city handler tries to deal with the possibility of multiple cities
having the same name. For example, the code in [[Module:place/locations]] knows about the city of [[Columbus]],
[[Ohio]], which has containing polities `Ohio` (a state) and `the United States` (a country). If either containing
polity is mentioned, the handler proceeds to return the key `Columbus` (along with `Ohio, USA` and `the United States`).
Otherwise, if any other state or country is mentioned, the handler returns nothing, and otherwise it assumes the
mentioned city is the one we're considering and returns `Columbus` etc. This works correctly if the place only mentions
Ohio and a holonym for a Columbus in a different country is encountered, because of the function
`augment_holonyms_with_container`, which adds the US as a holonym when Ohio is encountered.
The single parameter `data` is as in category handlers. The return value is a list of categories (without the preceding
language code).
]=]
local function generic_place_cat_handler(data)
local from_demonym = data.from_demonym
local retcats = {}
local function insert_retkey(key, spec)
if from_demonym then
insert(retcats, key)
else
insert(retcats, ("Địa danh của %s"):format(export.get_prefixed_key(key, spec)))
end
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
if not spec.no_generic_place_cat then
-- This applies to continents and continental regions.
insert_retkey(key, spec)
end
-- Categorize both in key, and in the larger location(s) that the key is part of, e.g. [[Hirakata]] goes in
-- both [[Category:Places in Osaka Prefecture, Japan]] and [[Category:Places in Japan]]. But not when
-- no_container_cat is set (e.g. for 'United Kingdom').
if not spec.no_container_cat then
for _, container_set in ipairs(container_trail) do
local stop_adding_containers = false
for _, container in ipairs(container_set) do
if not container.spec.no_generic_place_cat then
insert_retkey(container.key, container.spec)
end
if container.spec.no_container_cat then
stop_adding_containers = true
end
end
if stop_adding_containers then
break
end
end
end
return retcats
end
end
--[==[
Special category handler run for all placetypes that checks for specified division placetypes of known locations and
categorizes appropriately.
]==]
function export.political_division_cat_handler(data)
if data.from_demonym then
return
end
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group then
local divlists = {}
if spec.divs then
insert(divlists, spec.divs)
end
if spec.addl_divs then
insert(divlists, spec.addl_divs)
end
for _, divlist in ipairs(divlists) do
if type(divlist) ~= "table" then
divlist = {divlist}
end
for _, div in ipairs(divlist) do
if type(div) == "string" then
div = {type = div}
end
local sgdiv = export.maybe_singularize_placetype(div.type) or div.type
local prep = div.prep or "của"
local cat_as = div.cat_as or div.type
if type(cat_as) ~= "table" then
cat_as = {cat_as}
end
if not export.placetype_data[sgdiv] then
internal_error("Placetype %s associated with known location key %s and data %s not found in " ..
"`placetype_data`", sgdiv, key, spec)
end
if sgdiv == data.entry_placetype then
local retcats = {}
for _, pt_cat in ipairs(cat_as) do
if type(pt_cat) == "string" then
pt_cat = {type = pt_cat}
end
local pt_prep = pt_cat.prep or prep
insert(retcats, ucfirst(pt_cat.type) .. " " .. pt_prep .. " " ..
export.get_prefixed_key(key, spec))
end
return retcats
end
end
end
end
end
--[==[
This is used to add pages to "bare" categories like [[:Category:en:Georgia, USA]] for `[[Georgia]]` and any
foreign-language terms that are translations of the state of Georgia. We look at the page title (or its overridden value
in {{para|pagename}}) as well as the glosses in {{para|t}}/{{para|t2}} etc., various extra-info values such as the
modern names in {{para|modern}}, and any values specified using a form-of directive. We need to pay attention to the
entry placetypes specified so we don't overcategorize; e.g. the US state of Georgia is `[[Джорджия]]` in Russian but the
country of Georgia is `[[Грузия]]`, and if we just looked for matching names, we'd get both Russian terms categorized
into both [[:Category:ru:Georgia, USA]] and [[:Category:ru:Georgia]]. We also need to check the containing holonyms to
make sure there isn't a mismatch (so we don't e.g. categorize Newark, Delaware in [[:Category:en:Newark]], which is
intended for Newark, New Jersey).
]==]
function export.get_bare_categories(args, overall_place_spec)
local bare_cats = {}
local place_descs = overall_place_spec.descs
local possible_placetypes_by_place_desc = {}
for i, place_desc in ipairs(place_descs) do
possible_placetypes_by_place_desc[i] = {}
for _, placetype in ipairs(place_desc.placetypes) do
if not export.placetype_is_ignorable(placetype) then
local equivs = export.get_placetype_equivs(placetype, {register_former_as_non_former = true})
for _, equiv in ipairs(equivs) do
insert(possible_placetypes_by_place_desc[i], equiv.placetype)
end
end
end
end
local function check_term(term)
-- Treat Wikipedia links like local ones.
term = term:gsub("%[%[w:", "[["):gsub("%[%[wikipedia:", "[[")
term = export.remove_links_and_html(term)
term = term:gsub("^ ", "")
for i, place_desc in ipairs(place_descs) do
-- Iterate over all matching locations in case there are multiple, as with Delhi defined as
-- {{place|en|megacity/and/union territory|c/India|containing the national capital [[New Delhi]]}}.
for group, key, spec, container_trail in export.iterate_matching_holonym_location {
holonym_placetype = possible_placetypes_by_place_desc[i],
holonym_placename = term,
place_desc = place_desc,
} do
insert(bare_cats, key)
end
end
end
-- FIXME: Should we only do the following if the language is English (requires that the lang is passed in)?
-- We should always do it if `pagename` is given (as it is with {{tcl}}) but maybe not otherwise unless 1=en. There
-- are cases like [[Ankara]] = English name for capital of Turkey, but also the name in various languages for the
-- capital of Ghana (= English [[Accra]]). But this should get caught by mismatching the containing country. The
-- advantage of checking when the language isn't English is we catch those places that fail to give an English
-- translation but where the translation happens to be the same as the other-language spelling. However, I don't
-- know how often this situation occurs.
check_term(args.pagename or mw.loadData("Module:headword/data").pagename)
for _, t in ipairs(args.t) do
check_term(t)
end
local function check_termobj_list(terms)
for _, term in ipairs(terms) do
if term.eq then
check_term(term.eq)
end
if term.alt or term.term then
check_term(term.alt or term.term)
end
end
end
for _, extra_info_terms in ipairs(overall_place_spec.extra_info) do
local arg = extra_info_terms.arg
if arg == "modern" or arg == "now" or arg == "full" or arg == "short" then
check_termobj_list(extra_info_terms.terms)
end
end
for _, directive in ipairs(overall_place_spec.directives) do
check_termobj_list(directive.terms)
end
return bare_cats
end
--[==[
This is used to augment the holonyms associated with a place description with the containing polities. For example,
given the following:
`# {{tl|place|en|subprefecture|pref/Hokkaido}}.`
We auto-add Japan as another holonym so that the term gets categorized into [[:Category:Subprefectures of Japan]].
To avoid over-categorizing we need to check to make sure no other countries are specified as holonyms.
]==]
function export.augment_holonyms_with_container(place_descs)
for _, place_desc in ipairs(place_descs) do
if place_desc.holonyms then
-- This ends up containing a copy of the original holonyms, with the augmented holonyms inserted in their
-- appropriate position. We don't just put them at the end because some holonyms have use the `:also`
-- modifier, which causes category processing to restart at that point after generating categories for a
-- preceding holonym, and we don't want the preceding holonym's augmented holonyms interfering with
-- categorization of a later holonym. We proceed from right to left, and each time we augment, we copy
-- the holonyms with the augmented holonym(s) inserted appropriately and replace the place description's
-- holonyms with the augmented ones before the next iteration. The reason for this is so that e.g.
-- {{place|neighborhood|city/Birmingham|co/West Midlands|cc/England}} doesn't throw an error during the
-- augmentation process due to 'Birmingham' referring to two known locations (in England and Alabama). If
-- we go left to right, we will throw an ambiguity error on `city/Birmingham` because code to exclude
-- Birmingham, Alabama needs `c/United Kingdom` present (to cause a mismatch with `c/United States`),
-- which isn't yet present as the augmentation code hasn't gotten to `cc/England` yet. For similar
-- reasons, we need to include the augmented holonyms in the holonyms considered in the next iteration
-- rather than modifying the place description once at athe end.
for i = #place_desc.holonyms, 1, -1 do
local holonym = place_desc.holonyms[i]
if holonym.placetype and not export.placetype_is_ignorable(holonym.placetype) then
local group, key, spec, container_trail = export.find_matching_holonym_location {
holonym_placetype = holonym.placetype,
holonym_placename = holonym.unlinked_placename,
holonym_index = i,
place_desc = place_desc,
}
if group and container_trail[1] and not spec.no_auto_augment_container then
local augmented_holonyms = {}
for j = 1, i do
insert(augmented_holonyms, place_desc.holonyms[j])
end
for _, containers in ipairs(container_trail) do
local any_no_auto_augment_container = false
for _, container in ipairs(containers) do
any_no_auto_augment_container = any_no_auto_augment_container or
container.spec.no_auto_augment_container
local containing_type = container.spec.placetype
if type(containing_type) == "table" then
-- If the containing type is a list, use the first element as the canonical variant.
containing_type = containing_type[1]
end
local full_container_placename, elliptical_container_placename =
m_locations.key_to_placename(container.group, container.key)
-- Don't side-effect holonyms while processing them.
local new_holonym = {
-- By the time we run, the display has already been generated so we don't need to
-- set display_placename.
placetype = containing_type,
-- placename_to_key() for the group should correctly handle both full and elliptical
-- placenames, but the full placename seems less likely to be ambiguous. FIXME: We
-- should just store the key directly and use it when available to avoid having to
-- convert key to placename and back to key.
unlinked_placename = full_container_placename,
-- Indicate that this is an augmented holonym, and was derived from the specified
-- holonym. In iterate_matching_holonym_location(), we ignore augmented holonyms
-- derived from holonyms that are different from the holonym we're searching for but
-- of the same placetype. This is to correctly handle a situation like
-- {{place|river|dept/Ardèche,Gard,Vaucluse,Bouches-du-Rhône|c/France}}. Here,
-- `Ardèche` is in `r/Auvergne-Rhône-Alpes`, while `Gard` is in `r/Occitania` and
-- the other two are in `r/Provence-Alpes-Côte d'Azur`. Augmenting proceeds from
-- right to left, so after it adds `r/Provence-Alpes-Côte d'Azur` to
-- `Bouches-du-Rhône`, Vaucluse gets augmented correctly but `Gard` fails to match
-- in find_matching_holonym_location() because of the mismatch between augmented
-- `r/Provence-Alpes-Côte d'Azur` and actual `r/Occitania`. Similarly, all later
-- calls to find_matching_holonym_location() fail to match `Gard` (and likewise
-- `Ardèche`) against any known location. To deal with this, we mark augmented
-- holoynms as being augmented due to a source holonym, and when processing a given
-- holonym, ignore augmented holonyms from other holonyms of the same placetype.
-- The restriction to the same placetype is so that `Birmingham` still gets
-- correctly disambiguated to Birmingham, England in the example given above near
-- the top of this function, using the augmented holonym `c/United Kingdom` added by
-- the specified `cc/England` (whose placetype `constituent country` differs from
-- the placetype `city` of Birmingham).
augmented_from_holonym = holonym,
}
insert(augmented_holonyms, new_holonym)
-- But it is safe to modify other parts of the place_desc.
export.key_holonym_into_place_desc(place_desc, new_holonym)
end
if any_no_auto_augment_container then
break
end
end
for j = i + 1, #place_desc.holonyms do
insert(augmented_holonyms, place_desc.holonyms[j])
end
place_desc.holonyms = augmented_holonyms
end
end
end
end
end
end
-- Cat handler for district, areas, neighborhoods and suburbs. Districts are tricky because they can either be political
-- divisions or city neighborhoods. Areas similarly can be political divisions (rarely; specifically, in Kuwait), city
-- neighborhoods or larger geographical areas/regions. We handle this as follows:
-- (1) `placetype_data` cat entries for specific countries or country divisions take precedence over cat_handlers, so if
-- the user says {{tl|place|district|s/Maharashtra|c/India}}, we won't even be called because there is an entry that
-- categorizes into [[:Category|Districts of Maharashtra, India]].
-- (2) If we're called, we check the holonym we're called on to see if it is a recognized city, e.g. if we're called
-- using {{tl|place|district|city/Mumbai|s/Maharashtra|c/India}}. If so, we categorize under e.g.
-- [[:Category:Neighbourhoods of Mumbai]]. (Choosing the spelling "neighbourhoods" because we're in India.)
-- (3) If we're called and the holonym is not a recognized city, we check if the placetype has has_neighborhoods set.
-- If so, it's "city-like" and we categorize under the first containing polity that we recognize. For example, if
-- we're called using {{tl|place|district|town/Northampton|co/Hampshire|s/Massachusetts|c/US}}, we should recognize
-- town as "city-like" and categorize under [[:Category:Neighborhoods in Massachusetts]]. (Note "in" not "của", and
-- note the spelling "neighborhoods" because we're in the US.)
-- (4) If the holonym is not city-like, we do nothing. If there's a city or city-like placetype farther up (e.g. we're
-- called as {{tl|place|district|ward/Foo|mun/Bar|...}}), we will handle the city-like entity according to (2) or
-- (3) when called on that holonym. Otherwise either the categorization in (1) takes place or there's no
-- categorization.
local function district_neighborhood_cat_handler(data)
local function get_plural_entry_placetype(location_spec, container_trail)
if data.entry_placetype == "suburb" then
return "Suburbs"
else
-- Check for `british_spelling` setting on the spec itself or any container.
local uses_british_spelling = location_spec.british_spelling
if uses_british_spelling == nil and container_trail then
for _, container_set in ipairs(container_trail) do
local must_outer_break = false
for _, container in ipairs(container_set) do
if container.spec.british_spelling ~= nil then
uses_british_spelling = container.spec.british_spelling
must_outer_break = true
break
end
end
if must_outer_break then
break
end
end
end
return uses_british_spelling and "Neighbourhoods" or "Neighborhoods"
end
end
-- First check the immediate holonym to see if it's a city or a city-like top-level entity (Hong Kong, Bonaire,
-- etc.)
local group, key, spec, container_trail = export.find_matching_holonym_location(data)
if group and not spec.is_former_place and spec.is_city then
return {get_plural_entry_placetype(spec, container_trail) .. " of " .. export.get_prefixed_key(key, spec)}
end
-- If the entry placetype is neighbo(u)rhood, assume it is a neighborhood even if there isn't a city-like
-- entity father up the chain. (E.g. due to a mistaken use of m/ instead of mun/ for municipality.)
local has_neighborhoods
local entry_placetype = data.entry_placetype
if entry_placetype == "neighborhood" or entry_placetype == "neighbourhood" or entry_placetype == "suburb" then
has_neighborhoods = true
else
-- Otherwise, make sure the current holonym is city-like.
has_neighborhoods = export.get_equiv_placetype_prop(data.holonym_placetype, function(pt)
return export.get_placetype_prop(pt, "has_neighborhoods")
end, {continue_on_nil_only = true})
end
if has_neighborhoods then
-- Loop up the holonyms, looking for city and city-like entities in case of e.g. [[Sepulveda]] written
-- {{place|en|neighborhood|valley/San Fernando Valley|city/Los Angeles|s/California|c/USA}}
-- but also look for a recognizable poldiv, and if so categorize as "Neighborhoods in POLDIV". We need
-- to start with the current holonym, which is especially important for neighborhoods and suburbs that
-- may have the first holonym be a recognizable province, etc. but can't hurt otherwise. (Previously
-- we skipped the first/current holonym.)
for other_holonym_index, other_holonym in export.get_holonyms_to_check(data.place_desc,
data.holonym_index) do
local other_holonym_data = {
holonym_placetype = other_holonym.placetype,
holonym_placename = other_holonym.unlinked_placename,
holonym_index = other_holonym_index,
place_desc = data.place_desc,
}
local group, key, spec, container_trail = export.find_matching_holonym_location(other_holonym_data)
if group and not spec.is_former_place then
return {get_plural_entry_placetype(spec, container_trail) .. (spec.is_city and " of " or " in ") ..
export.get_prefixed_key(key, spec)}
end
end
end
end
function export.check_already_seen_string(holonym_placename, already_seen_strings)
local canon_placename = ulower(m_links.remove_links(holonym_placename))
if type(already_seen_strings) ~= "table" then
already_seen_strings = {already_seen_strings}
end
for _, already_seen_string in ipairs(already_seen_strings) do
if canon_placename:find(already_seen_string) then
return true
end
end
return false
end
-- Prefix display handler that adds a prefix such as "Metropolitan Borough of " to the display
-- form of holonyms. We make sure the holonym doesn't contain the prefix or some variant already.
-- We do this by checking if any of the strings in ALREADY_SEEN_STRINGS, either a single string or
-- a list of strings, or the prefix if ALREADY_SEEN_STRINGS is omitted, are found in the holonym
-- placename, ignoring case and links. If the prefix isn't already present, we create a link that
-- uses the raw form as the link destination but the prefixed form as the display form, unless the
-- holonym already has a link in it, in which case we just add the prefix.
local function prefix_display_handler(prefix, holonym_placename, already_seen_strings)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(prefix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return prefix .. " " .. holonym_placename
end
return prefix .. " [[" .. holonym_placename .. "]]"
end
-- Suffix display handler that adds a suffix such as " parish" to the display form of holonyms.
-- Works identically to prefix_display_handler but for suffixes instead of prefixes.
local function suffix_display_handler(suffix, holonym_placename, already_seen_strings, include_suffix_in_link)
if export.check_already_seen_string(holonym_placename, already_seen_strings or ulower(suffix)) then
return holonym_placename
end
if holonym_placename:find("%[%[") then
return holonym_placename .. " " .. suffix
end
if include_suffix_in_link then
return "[[" .. holonym_placename .. " " .. suffix .. "]]"
else
return "[[" .. holonym_placename .. "]] " .. suffix
end
end
-- Display handler for boroughs. New York City boroughs are display as-is. Others are suffixed
-- with "borough".
local function borough_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.new_york_boroughs[unlinked_placename] then
-- Hack: don't display "borough" after the names of NYC boroughs
return holonym_placename
end
return suffix_display_handler("borough", holonym_placename)
end
local function county_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
-- Display handler for Irish counties. Irish counties are displayed as e.g. "County [[Cork]]".
if m_locations.ireland_counties["Hạt " .. unlinked_placename .. ", Ireland"] or
m_locations.northern_ireland_counties["Hạt " .. unlinked_placename .. ", Bắc Ireland"] then
return prefix_display_handler("Hạt", holonym_placename)
end
-- Display handler for Taiwanese counties. Taiwanese counties are displayed as e.g. "[[Chiayi]] County".
if m_locations.taiwan_counties[unlinked_placename .. ", Đài Loan"] then
return suffix_display_handler("Hạt", holonym_placename)
end
-- Display handler for Romanian counties. Romanian counties are displayed as e.g. "[[Cluj]] County".
if m_locations.romania_counties[unlinked_placename .. ", România"] then
return suffix_display_handler("Hạt", holonym_placename)
end
-- FIXME, we need the same for US counties but need to key off the country, not the specific county.
-- Others are displayed as-is.
return holonym_placename
end
-- Display handler for prefectures. Japanese prefectures are displayed as e.g. "[[Fukushima]] Prefecture".
-- Others are displayed as e.g. "[[Fthiotida]] prefecture".
local function prefecture_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
local suffix = m_locations.japan_prefectures[unlinked_placename .. ", Nhật Bản"] and "" or "prefecture"
return suffix_display_handler(suffix, holonym_placename)
end
-- Display handler for provinces of Bulgaria, Iran, Laos, North and South Korea, Thailand, Turkey and Vietnam. Recognized
-- provinces are displayed as e.g. "[[Gyeonggi]] Province" or "[[Antalya]] Province". Others are displayed as-is.
local function province_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if
m_locations.bulgaria_provinces[unlinked_placename .. ", Bulgaria"] or
m_locations.iran_provinces[unlinked_placename .. ", Iran"] or
m_locations.laos_provinces[unlinked_placename .. ", Lào"] or
m_locations.north_korea_provinces[unlinked_placename .. ", Cộng hòa Dân chủ Nhân dân Triều Tiên"] or
m_locations.south_korea_provinces[unlinked_placename .. ", Hàn Quốc"] or
m_locations.thailand_provinces[unlinked_placename .. ", Thái Lan"] or
m_locations.turkey_provinces[unlinked_placename .. ", Thổ Nhĩ Kỳ"] or
m_locations.vietnam_provinces[unlinked_placename .. ", Việt Nam"] then
return suffix_display_handler("Tỉnh", holonym_placename)
end
return holonym_placename
end
-- Display handler for Nigerian states. Nigerian states are display as "[[Kano]] State". Others are displayed as-is.
local function state_display_handler(holonym_placetype, holonym_placename)
local unlinked_placename = m_links.remove_links(holonym_placename)
if m_locations.nigeria_states[unlinked_placename .. ", Nigeria"] then
return suffix_display_handler("State", holonym_placename)
end
return holonym_placename
end
-- Display handler for voivodeships. Display as e.g. [[Subcarpathian Voivodeship]].
local function voivodesip_display_handler(holonym_placetype, holonym_placename)
return suffix_display_handler("Voivodeship", holonym_placename, nil, "include_suffix_in_link")
end
------------------------------------------------------------------------------------------
-- Placetype data --
------------------------------------------------------------------------------------------
--[==[ var:
Main placetype data structure. This specifies, for each canonicalized placetype, various properties. The keys are
placetypes (in the singular, except for category-only placetypes, which are plural and followed by `!`), and the value
is a table of properties. The `"*"` key is special and is used for adding "generic" categories of the form
`Places in ``location`` `; it runs for all entry placetypes. Keys in the form of plural placetypes followed by `!` are
used only in [[Module:category tree/topic/Places]] for specifying the properties of categories containing the
specified placetype, esp. bare categories like [[:Category:States and territories]] (rather than qualified categories
like [[:Category:States and territories of Australia]]).
Keys under the value table for a given placetype of are two types: ''property keys'' (which specify the value of
specific properties) and ''categorization keys'' (which tell how to categorize certain sorts of holonyms if the
placetype in question occurs as an entry placetype). Categorization keys are either the special value `default` or are
wildcard strings with a slash in them, such as `"country/*"`. Note that only wildcard strings are currently allowed
directly in the placetype data; everything else is handled through category handlers, either per-placetype or special
(such as `political_division_cat_handler`). The algorithm for how category keys and handlers are used to generate
categories is described at the top of [[Module:place]].
There are several recognized property keys, of various types:
1. The following link-related property keys are recognized:
* `link`: '''Required''' except in category-only placetypes ending in `!`. Describes how to link and display the
placetype in the formatted description when occurring as an entry placetype. Also used for formatting pluralized
placetypes (which may occur in entry placetypes, esp. new-format ones, such as `two <<islands>>`) and may occur in
categories). The possible values are:
*# `true`: Link to the same-named Wiktionary entry. This creates a raw link, e.g. `<nowiki>[[city]]</nowiki>`, which is
converted to an English-specific link by JavaScript postprocessing. If the placetype is plural, this creates a
two-part raw link e.g. `<nowiki>[[city|cities]]</nowiki>`.
*# `"w"`: Link to the same-named Wikipedia entry. This creates a two-part link, e.g.
`<nowiki>[[w:census town|census town]]</nowiki>`, or `<nowiki>[[w:census town|census towns]]</nowiki>` if the
placetype is given plural.
*# `"+..."`: Create a two-part link to the entry following the `+` sign. For example, if `cercle` specifies
`"+w:cercles of Mali"`, a two-part link `<nowiki>[[w:cercles of Mali|cercle]]</nowiki>` will be generated, or
`<nowiki>[[w:cercles of Mali|cercles]]</nowiki>` if plural `cercles` is specified.
*# `"separately"`: Link each word separately. For example, if `administrative territory` specifies `"separately"`, it
will be linked as `<nowiki>[[administrative]] [[territory]]</nowiki>`, or as
`<nowiki>[[administrative]] [[territory|territories]]</nowiki>` if plural `administrative territories` is given.
*# another string: Use that string directly. If the placetype is plural, `pluralize()` in [[Module:en-utilities]] is
called on the string, which will correctly pluralize most strings, including those with links in them. (If there
are multiple links, the display form of the last link is pluralized.)
*# `false`: This placetype is not allowed as an entry placetype. An error will be thrown if this placetype is given as
an entry placetype. This is specified for internal-use placetypes, especially placetypes used in conjunction with
the qualifiers `former`, `ancient`, `historical` and such.
* `plural_link`: If specified and the placetype is plural, use the value in place of generating a pluralized version of
the link spec in `link`. Most commonly, this is either a string with links in it (which is used directly) or the
value `false`, indicating that the placetype cannot occur plural. (This is used for example by `caplc`, which displays
as `<nowiki>[[capital]] and [[large]]st [[city]]</nowiki>`, where a plural version doesn't make sense.) Generally if
this is specified, `plural` also needs to be specified to give a special placetype plural; this situation occurs
especially with multiword placetypes where something other than the last word is pluralized. An example is
`town with bystatus`, whose plural is `towns with bystatus`, which needs to be explicitly given. This example uses
`link = <nowiki>"[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>` ({{m|nb|bystatus}}) is a Norwegian
Bokmål word, and template calls aren't currently permitted in link strings), along with
`plural_link = <nowiki>"[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]"</nowiki>`.
* `category_link`: Spec indicating how to display the placetype when occurring in category descriptions. Defaults to
the value of `link`, and in turn is overridden by more specific `category_link_*` keys; see below. Category-only
placetypes (which are plural and end in `!`) usually use `category_link` in preference to `link`. The value of
`category_link` can be any of the types of specs given above, but most commonly is a plural string with links in it,
spelling out the description; in this case it is used directly. When both `category_link` and `link` are given, the
value in `category_link` is typically longer and more descriptive. For example, `polity` uses `link = true`, which
just generates a link `<nowiki>[[polity]]</nowiki>` or plural `<nowiki>[[polity|polities]]</nowiki>`, but specifies a
separate `category_link = <nowiki>"[[independent]] or [[semi-]][[independent]] [[polity|polities]]"</nowiki>`, which
clarifies in the category description what a polity is.
* `category_link_top_level`: Spec indicating how to display top-level (bare/unqualified) categories, i.e. categories
where the placetype is not followed by `in ``location`` ` or `of ``location`` `. If given, this overrides
`category_link` for this type of category.
* `category_link_before_noncity`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` does not refer to a city. If given, this overrides
`category_link` for this type of category.
* `category_link_before_city`: Spec indicating how to display qualified categories of the form
` ``placetypes`` in/of ``location`` ` where ``location`` refer to a city. If given, this overrides `category_link` for
this type of category. An example where this is given is `neighborhood`, which uses the following specs:<ol>
<li>`link = true`</li>
<li>`category_link = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]"</nowiki>`</li>
<li>`category_link_before_city = <nowiki>"[[neighborhood]]s, [[district]]s and other subportions"</nowiki>`</li>
</ol> This has the effect of making the entry placetype `neighborhood` display as just
`<nowiki>[[neighborhood]]</nowiki>`, while e.g. a category like `Neighborhoods of Chicago` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[Chicago]], ...</nowiki>` and a category like
`Neighborhoods in Illinois, USA` displays as
`<nowiki>[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]] in [[Illinois]], ...</nowiki>`.
* `disallow_in_entries`: If specified, this placetype cannot occur as an entry placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
* `disallow_in_holonyms`: If specified, this placetype cannot occur as a holonym placetype, and the specified value
(a message indicating what to use instead) is displayed in the error message.
2. There is currently one fallback-related property key recognized:
* `fallback`: If specified, its value is a placetype which will be used for categorization purposes if no categories
get added using the placetype itself. As an example, `branch` sets a fallback of `river` but also sets
`preposition = "của"`, meaning that {{tl|place|en|branch|riv/Mississippi}} displays as `a branch of the Mississippi`
(whereas `river` itself uses the preposition `in`), but otherwise categorizes the same as `river`. A more complex
example is `area`, which sets a fallback of `geographic and cultural area` and also sets a category handler that
checks for cities or city-like entities (e.g. boroughs) occurring as holonyms and categorizes the toponym under
[[:Category:Neighborhoods of CITY]] (for recognized cities) or otherwise [[:Category:Neighborhoods of POLDIV]] (for
the nearest containing recognized location). In addition, `area` is set as a political division of Kuwait, meaning if
`c/Kuwait` occurs as holonym, the toponym is categorized under [[:Category:Areas of Kuwait]]. If none of these
categories trigger, the fallback of `geographic and cultural area` will take effect, and the toponym will be
categorized as e.g. [[:Category:Geographic and cultural areas of England]].
3. There is currently one property to control irregular plurals of placetypes:
* `plural`: If specified, its value is the plural of the placetype. Otherwise, the default pluralization algorithm in
[[Module:en-utilities]] applies (which correctly pluralizes most words, including those ending in `-y`, `-ch`, `-sh`,
`-x`, etc.). The value of `plural` is also used when converting a pluralized placetype into its singular equivalent;
for example, since the placetype `kibbutz` has `plural = "kibbutzim"`, the placetype `kibbutzim` will be recognized
as a plural and singularized to `kibbutz`. For this reason, it's occasionally necessary to specify a `plural` value
even when the default pluralization algorithm works correctly, if the default singularization algorithm won't
correctly reverse the pluralization (as with `pass` and other terms ending in `-ss`).
4. The following property keys relate to generating categories for entry placetypes and specifying the parents of those
categories:
* `class`: The general class of placetype. This is used for various purposes: (a) to categorize placetypes preceded by
a qualifier such as `former`, `ancient`, `medieval` or `historical` (note that these placetypes are not all treated
alike); (b) to determine the parent category of bare placetype categories (e.g. [[:Category:Villages]] for placetype
`village`); (c) to determine whether to add a parent category `political divisions of specific countries` to
qualified placetype categories (e.g. [[:Category:Villages in Mali]]). The possible values are:
*# `polity`: a more-or-less sovereign/independent polity, such as a country, kingdom or empire.
*# `subpolity`: a non-sovereign division of a polity, above the level of an individual settlement.
*# `settlement`: a city or smaller equivalent, such as a village. This also includes administrative divisions of a
settlement, such as wards and barangays.
*# `non-admin settlement`: similar to a settlement but without administrative or political significance, such as an
unincorporated community, farm or neighborhood.
*# `capital`: a settlement that is a capital. A former capital is generally still in existence, just not the capital
any more.
*# `natural feature`: any non-man-made feature, such as a lake, mountain, island, ocean, etc.
*# `man-made structure`: a man-made feature below the level of a neighborhood, such as a house, airport, university,
metro station, park or the like.
*# `geographic region`: a geographic or cultural region or area that has no administrative significance. These may vary
greatly in size but typically have some sort of cultural significance (possibly historical). The `former`, `ancient`,
etc. qualifier has no effect on the category of these placetypes.
*# `generic place`: a place that isn't further qualified into any specific subtype.
* `former_type`: The class of placetype used for categorizing placetypes preceded by a qualifier such as `former`,
`ancient`, `medieval` or `historical`. The possible values are the same as for `class` but with the addition of
`dependent territory` (for colonies, protectorates and the like) and `!` (ignore the historical/former/ancient/etc.
qualifier; used e.g. with `fictional location` and `mythological location`). If not specified, the value of `class`
is used. When a qualifier such as `former`, `ancient`, `medieval` or `historical` is encountered (specifically, those
in `former_qualifiers`), it is mapped using `former_qualifiers` to the appropriate internal qualifier or qualifiers
(one or both of `ANCIENT` and/or `FORMER`, which are written in all-caps to distinguish them from user-specified
qualifiers), which is prepended to the value of `former_type` or `class` to form a placetype whose properties are
looked up to determine how to categorize the toponym in question. For example, if `medieval village` is given, we map
`medieval` to `ANCIENT` and `FORMER`, and `village` to its `class` of `settlement`, and enter the placetypes
`ANCIENT settlement` and `FORMER settlement` (in that order) into the list of equivalent placetypes returned by
`get_placetype_equivs`. In this case, there is an entry in `placetype_data` for `ANCIENT settlement`, so its default
category spec `Ancient settlements` is used as the category. If on the other hand `medieval kingdom` is given, where
`kingdom` has a `class` value `polity`, we first look up `ANCIENT polity`, see there is no entry in `placetype_data`
for it, and then look up `FORMER polity`, which exists and has a default category spec `Former polities`, which is
used as the category. Note that if the placetype following the "former" qualifier is recognized in `placetype_data`
but has no `former_type` or `class` and no fallback with a `former_type` or `class` specified, it is an internal
error; but if the placetype isn't recognized (e.g. something like `former greenhouse` is specified and we don't have
an entry for `greenhouse`), we just track the occurrence and end up not categorizing.
* `bare_category_parent`: This specifies the first parent category of a bare placetype category named according to the
placetype in question (e.g. [[:Category:Atolls]] for placetype `atoll`, or [[:Category:Named buildings]] for
placetype `named buildings!`). If not specified, the first parent category is determined by the value of `class`,
using the mapping `class_to_bare_category_parent` in [[Module:category tree/topic cat/data/Places]].
* `addl_bare_category_parents`: Extra parent categories to add a bare placetype category to (see `bare_category_parent`
just above).
* `bare_category_breadcrumb`: Breadcrumb for bare placetype categories. Also used as the sort key of
`bare_category_parent` if it is a string.
* `inherently_former`: If specified and the given placetype is used as an entry placetype, act as if `former` or
`ancient` (depending on the value of `inherently_former`) were prefixed to the placetype. This is for placetypes that
always refer to no-longer-existing entities, such as `satrapy` and `treaty port`. The value of `inherently_former` is
a list of internal qualifiers (one or more of `ANCIENT` and/or `FORMER`), just as for `former_qualifiers`, and the
implementation is the same.
* `cat_handler`: Handler used to generate the categories to add a given toponym to, if its entry placetype is the
placetype in question. Generally the `cat_handler` function checks the holonyms specified in order to determine which
category or categories to generate. For example, `district_neighborhood_cat_handler` handles placetypes `district`,
`neighborhood`, `subdivision`, `suburb` and the like, and either adds the toponym to a category like
`Neighborhoods of ``city`` ` (if a recognized city is given as a holonym), or otherwise a category like
`Neighborhoods in ``location`` ` (for the first recognized non-city location given as a holonym, if an unrecognized
city or city-like entity is given before the recognized non-city). The algorithm that runs the category handlers
iterates over holonyms from left to right, running the `cat_handler` function on each holonym in turn until one or
more categories are returned; see below for more specifics. (Note that countries for which e.g. a `district` is a
political division do not get the corresponding category added by the `district_neighborhood_cat_handler` function but
by `political_division_cat_handler`.) `cat_handler` functions are called with one argument, `data`, describing the
resolved entry placetype (i.e. after resolving placetype aliases and fallbacks) and the holonym being processed. The
return value should be a list of category specs (categories minus the langcode prefix, with `+++` standing for the
holonym key, or the value `true`, which stands for ` ``Placetypes`` in/of ``Holonym`` `, i.e. the pluralized placetype
with the appropriate preposition as specified in `placetype_data`). `data` contains the following fields:
** `entry_placetype`: the resolved entry placetype for the entry placetype being processed (i.e. it will always have an
entry in `placetype_data` but may not be the original placetype given by the user);
** `holonym_placetype` and `holonym_placename`: the holonym placetype and placename being processed;
** `holonym_index`: the index of the holonym being processed, or {nil} if we're handling an overriding holonym (FIXME:
we will change the overriding holonym algorithm so there will be an index even when processing overriding holonyms);
** `place_desc`: a full description of the {{tl|place}} call, as specified at the top of [[Module:place]];
** `from_demonym`: If set, we are called from [[Module:demonym]], triggered by {{tl|demonym-adj}} or
{{tl|demonym-noun}}, instead of being triggered by {{tl|place}}.
* `has_neighborhoods`: If `true`, the specified placetype is city-like. This is used in the
`district_neighborhood_cat_handler` to determine whether to add a category such as `Neighborhoods in ``location`` `;
see the section just above on `cat_handler`.
5. The following preposition-related property keys are recognized:
* `preposition`: The preposition used after this placetype when it occurs as an entry placetype. Defaults to `"in"`.
* `generic_before_non_cities`: If specified, the appropriate category description handler in
[[Module:category tree/topic cat/data/Places]] will recognize categories of the form
` ``Placetype`` in/of ``location`` ` for the specified placetype and preposition, if ``location`` is a non-city. This
is used to generate descriptions for categories added by category handlers and by explicit category specs in the
placetype data. All placetypes that specify `generic_before_non_cities` or `generic_before_cities` *MUST* also specify
a value for `class` so that the category tree code can determine whether it's a political or non-political division.
* `generic_before_cities`: Like `generic_before_non_cities` but for locations referring to cities.
6. The following property keys control the auto-addition of affixes when formatting holonyms of a particular placetype:
* `affix_type`: If specified, add the placetype as an affix before or after holonyms of this placetype. Possible values
are:
*# `"pref"` (the holonym will display as `(the) placetype of Holonym`, where `the` appears when the holonym directly
follows an entry placetype);
*# `"Pref"` (same as `"pref"` but the placetype is capitalized; each word is capitalized if there are multiple);
*# `"suf"` (the holonym will display as `Holonym placetype`);
*# `"Suf"` (the holonym will display as `Holonym Placetype`, i.e. same as `"suf"` but the placetype is capitalized).
* `suffix`: String to use in place of the placetype itself when the placetype is displayed as a suffix after a holonym.
Note that `suffix` can be used independently of `affix_type` because the user can also request a suffix explicitly
using a syntax like `adr:suf/Occitania`, which will display as `Occitania region` because the placetype
`administrative region` specifies `suffix = "region"`.
* `prefix`: Like `suffix` but for use when the placetype is displayed as a prefix before the holonym.
* `affix`: Like `suffix` and `prefix` but for use when the placetype is displayed as an affix either before or after the
holonym. If both `suffix` or `prefix` and `affix` are given for a single placetype, `suffix` or `prefix` take
precedence.
* `no_affix_strings`: String or list of strings that, if they occur in the holonym, suppress the addition of any affix
requested using `affix_type`. Defaults to the placetype itself. For example, `autonomous okrug` specifies
`affix_type = "Suf"` so that `aokr/Nenets` displays as `Nenets Autonomous Okrug`, but also specifies
`no_affix_strings = "okrug"` so that `aokr/Nenets Okrug` or `aokr/Nenets Autonomous Okrug` displays as specified,
without a redundant `Autonomous Okrug` added. Matching is case-insensitive but whole-word.
* `display_handler`: A function of two arguments, `holonym_placetype` and `holonym_placename` (specifying a holonym).
Its return value is a string specifying the display form of the holonym.
7. The following property keys control the indefinite and definite articles used before entry placetypes and/or holonyms
of the specified placetype.
* `entry_placetype_use_the`: Use `"the"` before this placetype when it occurs as an entry placetype.
* `entry_placetype_indefinite_article`: Indefinite article used before this placetype when it occurs as an entry
placetype (usually `"a"`, specifically for placetypes beginning with u- that don't take the indefinite article
`"an"`). Defaults to the appropriate indefinite article (`"a"` or `"an"` depending on whether the placetype begins
with a vowel). Overridden by `entry_placetype_use_the`, and unlike for most properties, does not apply to equivalent
placetypes (i.e. fallbacks or those formed by removing a qualifier from the beginning); only to the exact placetype
specified.
* `holonym_use_the`: Use `"the"` before holonyms of this placetype.
'''NOTE:'''
# The `link` property must be specified on all placetypes, except those ending in `!` (category-only placetypes), which
must have either `link` or `category_link` specified.
# Either the `class` or `former_type` property must be specified on all placetypes not ending in `!` that do not have a
fallback (if a placetype has a fallback and omits the `class` and `former_type` properties, they are taken from the
fallback). An internal error will result if a placetype has no `class` or `former_type` property derivable either
directly or through a fallback, if an attempt is made to categorize a former/ancient/historical/etc. entity of this
placetype.
# It is possible to have multiple levels of fallback (e.g. `frazione` falls back to `hamlet`, which falls back
to `village`). Fallback loops will cause an internal error. All placetypes specified as fallbacks must exist in
`placetype_data` or an internal error occurs.
]==]
export.placetype_data = {
--[=[
If you need to sort the following, do this (using Vim):
1. Make sure all full-line comments are within the { ... } table, or are moved after and on the same line as single-line
entries.
2. Make sure the table uses tabs everywhere for indent, and not spaces.
3. Mark the top of the table with `ma`, go to the bottom and execute the following two lines in sequence:
:'a,.s/\n/\\n/g
:s/\\n\(\t\[\)/\r\1/g
The first command converts every newline to a literal `\n` sequence, so the whole thing becomes a single line, while
the second command restores the newlines before the beginning of each entry. The effect is to convert all entries to
a single line while not losing any information. (Potentially a negative lookahead could be used to do it all in one
command.)
4. Execute the following to sort:
:'a,.!perl -pe 's/^(\t\[")(.*?)(".*)$/$2 @@@ $1$2$3/' | sort -f | perl -pe 's/.*? @@@ //'
Note that a simple `sort -f` (where `-f` means case-insensitive) would almost work, but it would sort "hill station"
before "hill" and "county borough" before "county" because the space after e.g. "hill station" sorts before the
quotation mark after e.g. "hill". The above command deals with this by extracting the key, prepending it followed by
` @@@ `, sorting, and then removing key (the classic decorate-sort-undecorate pattern).
5. Put the table back to multi-line format by marking the top of the table with `ma`, going to the bottom and executing
:'a,.s/\\n/\r/g
Note that for some reason, in order to get a match a newline in the left side of a replacement, you must use \n, but
to insert a newline in the right sode of a replacement you must use \r.
]=]
["*"] = {
link = false,
cat_handler = generic_place_cat_handler,
},
["administrative atoll"] = {
-- Maldives
link = "+w:administrative divisions of the Maldives",
preposition = "của",
class = "subpolity",
},
["administrative capital"] = {
link = "w",
fallback = "capital city",
},
["administrative center"] = {
link = "w",
fallback = "non-city capital",
},
["administrative centre"] = {
link = "w",
fallback = "administrative center",
},
["administrative county"] = {
link = "w",
fallback = "county",
},
["administrative district"] = {
link = "w",
fallback = "district",
},
["administrative headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["administrative region"] = {
link = true,
preposition = "của",
suffix = "region", -- but prefix is still "administrative region (of)"
fallback = "region",
class = "subpolity",
},
["administrative seat"] = {
link = "w",
fallback = "administrative centre",
},
["administrative territory"] = {
link = "separately",
preposition = "của",
suffix = "territory", -- but prefix is still "administrative territory (of)"
fallback = "territory",
class = "subpolity",
},
["administrative unit"] = {
-- Grrr, it's difficult to generalize about "administrative units". In Albania, "administrative unit" is an
-- official term for a city-level division of municipalities; Wikipedia renders it using the more practical term
-- "commune". In Pakistan, "administrative unit" is a collective term used to refer to all the different types
-- of first-level divisions (four provinces, one federal territory, and two "disputed territories", i.e. Azad
-- Kashmir and Gilgit-Balistan, that are variously described). For this reason, we set no fallback, but we need
-- to include this so that it can be used as a placetype for Albania, categorizing as communes.
link = "w",
class = "subpolity",
},
["administrative village"] = {
link = "w",
preposition = "của",
has_neighborhoods = true,
class = "settlement",
},
["aimag"] = {
-- used in Mongolia, Russia and China (Inner Mongolia); in Mongolia, equivalent to a province;
-- in China, equivalent to a prefecture (below a province); in Russia, equivalent to a municipal district.
link = "w",
fallback = "prefecture",
},
["airport"] = {
link = true,
class = "man-made structure",
default = {true},
},
["alliance"] = {
link = true,
fallback = "confederation",
},
["archipelago"] = {
link = true,
fallback = "island",
},
["area"] = {
link = true,
preposition = "của",
fallback = "geographic and cultural area",
-- Areas can either be administrative divisions (specifically of Kuwait) or geographic areas. Assume the former
-- when categorizing 'Areas' but the latter when handling e.g. 'historical area'.
class = "subpolity",
former_type = "geographic region",
cat_handler = district_neighborhood_cat_handler,
},
["arm"] = {
link = true,
preposition = "của",
class = "natural feature",
default = {"Seas"},
},
["arrondissement"] = {
link = true,
preposition = "của",
-- FIXME!!! Grrrrr!!! In some countries, arrondissements are divisions of cities; in others, they are divisions
-- of departments or provinces. Need to conditionalize on the country for both of the following.
class = "subpolity",
has_neighborhoods = true,
},
["associated province"] = {
link = "separately",
fallback = "tỉnh",
},
["rạn san hô vòng"] = {
-- FIXME! Atolls are administrative divisions of the Maldives but natural features elsewhere. Need to
-- conditionalize `class` on the country. See also `administrative atoll`.
link = true,
class = "natural feature",
bare_category_parent = "islands",
default = {true},
},
["autonomous city"] = {
link = "w",
preposition = "của",
fallback = "thành phố",
has_neighborhoods = true,
},
["autonomous community"] = {
-- Spain; refers to regional entities, not village-like entities, as might be expected from "community"
link = true,
preposition = "của",
class = "subpolity",
},
["autonomous island"] = {
-- Comoros; seems like an administrative atoll of the Maldives.
link = "+w:autonomous islands of Comoros",
preposition = "của",
class = "subpolity",
},
["autonomous oblast"] = {
link = true,
preposition = "của",
affix_type = "Suf",
no_affix_strings = "oblast",
class = "subpolity",
},
["autonomous okrug"] = {
link = true,
preposition = "của",
affix_type = "Suf",
no_affix_strings = "okrug",
class = "subpolity",
},
["autonomous prefecture"] = {
link = true,
fallback = "prefecture",
},
["autonomous province"] = {
link = "w",
fallback = "tỉnh",
},
["autonomous region"] = {
link = "w",
preposition = "của",
fallback = "administrative region",
-- "administrative region" sets an affix of "region" but we want to display as "Tibet Autonomous Region"
-- if the user writes 'ar:Suf/Tibet'.
affix = "autonomous region",
},
["autonomous republic"] = {
link = "w",
preposition = "của",
class = "subpolity",
},
["autonomous territorial unit"] = {
-- Moldova; only two of them, one for Gagauzia and one for Transnistria.
link = "w",
preposition = "của",
class = "subpolity",
},
["autonomous territory"] = {
link = "w",
fallback = "dependent territory",
},
["bailiwick"] = {
-- Jersey, etc.
link = true,
fallback = "polity",
},
["barangay"] = {
-- Philippines
link = true,
class = "settlement",
-- Barangays are formal administrative divisions of a city rather than informal neighborhoods, but can use
-- some of the properties of a neighborhood.
fallback = "neighborhood",
default = {"Barangay"},
},
["barrio"] = {
-- Spanish-speaking countries; Philippines
link = true,
-- FIXME: Not completely correct, in some countries barrios are formal administrative divisions of a city.
-- `class` will need to conditionalize on the country to be completely correct.
fallback = "neighborhood",
},
["basin"] = {
link = true,
fallback = "lake",
},
["vịnh"] = {
link = true,
preposition = "của",
class = "natural feature",
addl_bare_category_parents = {"Vùng nước"},
default = {true},
},
["bãi biển"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"nước"},
default = {true},
},
["beach resort"] = {
link = "w",
fallback = "resort town",
},
["bishopric"] = {
link = true,
fallback = "polity",
},
["vùng nước!"] = {
-- FIXME: This is (maybe?) a type category not a name category. There should be an option for this. We need to
-- straighten out the type vs. name vs. related-to issue.
category_link = "vùng nước",
class = "natural feature",
addl_bare_category_parents = {"địa mạo", "hệ thống sinh thái", "nước"},
},
["borough"] = {
link = true,
preposition = "của",
display_handler = borough_display_handler,
has_neighborhoods = true,
-- "former borough" could be a former settlement or a former part of a city but seems more likely to
-- be a former subpolity, particularly in England. FIXME, we really need a handler to take care of this
-- properly.
class = "subpolity",
-- Grr, some boroughs are city-like but some (e.g. in Britain) may be larger.
},
["borough seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
},
["branch"] = {
link = true,
preposition = "của",
fallback = "river",
},
["bridge"] = {
link = true,
class = "man-made structure",
default = {"Named bridges"},
},
["building"] = {
link = true,
class = "man-made structure",
default = {"Named buildings"},
},
["built-up area"] = {
link = "w",
fallback = "area",
},
["burgh"] = {
link = true,
fallback = "borough",
},
["business park"] = {
link = true,
fallback = "park",
},
["caliphate"] = {
link = true,
fallback = "polity",
},
["canton"] = {
link = true,
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["cape"] = {
link = true,
fallback = "headland",
},
["thủ đô"] = {
link = true,
fallback = "thành phố thủ đô",
},
["thành phố thủ đô"] = {
link = true,
category_link = "[[thành phố]] [[thủ đô]]",
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
bare_category_parent = "thành phố",
cat_handler = capital_city_cat_handler,
default = {"Thành phố thủ đô"},
-- The following is necessary so that e.g. [[Melbourne]] defined as {{place|en|capital city|s/Victoria|c/Australia}}
-- gets categorized in the bare category [[Category:en:Melbourne]]; otherwise placetype 'capital city' wouldn't
-- match against the placetype 'city' of Melbourne.
fallback = "thành phố",
},
["caplc"] = {
link = "[[capital]] and [[large]]st [[city]]",
plural_link = false,
fallback = "capital city",
},
["captaincy"] = {
link = true,
preposition = "của",
class = "subpolity",
inherently_former = {"FORMER"},
},
["caravan city"] = {
link = "w",
fallback = "thành phố",
class = "settlement",
inherently_former = {"ANCIENT", "FORMER"},
},
["castle"] = {
link = true,
fallback = "building",
},
["cathedral city"] = {
link = true,
fallback = "thành phố",
},
["cattle station"] = {
-- Australia
link = true,
fallback = "farm",
},
["census area"] = {
link = true,
affix_type = "Suf",
has_neighborhoods = true,
class = "non-admin settlement",
},
["census-designated place"] = {
-- United States
link = true,
class = "non-admin settlement",
},
["census division"] = {
-- Canada
link = "w",
preposition = "của",
class = "subpolity",
},
["census town"] = {
link = "w",
fallback = "town",
},
["central business district"] = {
link = true,
fallback = "neighborhood",
},
["cercle"] = {
-- Mali
link = "+w:cercles of Mali",
preposition = "của",
class = "subpolity",
},
["ceremonial county"] = {
link = true,
fallback = "county",
},
["chain of islands"] = {
link = "[[chain]] of [[island]]s",
plural = "chains of islands",
plural_link = "[[chain]]s of [[island]]s",
fallback = "island",
},
["channel"] = {
link = true,
fallback = "strait",
},
["charter community"] = {
-- Northwest Territories, Canada
link = "w",
fallback = "village",
},
["thành phố"] = {
link = true,
generic_before_non_cities = "của",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["city-state"] = {
link = true,
category_link = "[[sovereign]] [[microstate]]s consisting of a single [[city]] and [[w:dependent territory|dependent territories]]",
has_neighborhoods = true,
class = "settlement",
["continent/*"] = {"City-states", "Cities in +++", "Quốc gia của +++", "National capitals"},
default = {"City-states", "Cities", "Quốc gia", "National capitals"},
},
["civil parish"] = {
-- Mostly England; similar to municipalities
link = true,
preposition = "của",
affix_type = "suf",
has_neighborhoods = true,
class = "subpolity",
},
["claimed political division"] = {
link = "[[claim]]ed [[political]] [[division]]",
class = "subpolity",
default = {true},
},
["co-capital"] = {
link = "[[co-]][[capital]]",
fallback = "capital city",
},
["coal city"] = {
link = "+w:coal town",
fallback = "thành phố",
},
["coal town"] = {
link = "w",
fallback = "town",
},
["collectivity"] = {
link = "w",
preposition = "của",
-- No default; these are weird one-off governmental divisions in France (esp. for overseas collectivities)
class = "subpolity",
},
["colony"] = {
link = true,
fallback = "dependent territory",
},
["comarca"] = {
-- per Wikipedia: traditional region or local administrative division found in Portugal, Spain, and some of
-- their former colonies, like Brazil, Nicaragua, and Panama. In the Valencian Community, for example, it
-- sits between municipalities and provinces, something like a county or district.
link = true,
preposition = "của",
class = "subpolity",
},
["commandery"] = {
link = true,
preposition = "của",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["commonwealth"] = {
link = true,
preposition = "của",
-- No default; applies specifically to Puerto Rico
class = "subpolity",
},
["commune"] = {
link = true,
fallback = "municipality",
},
["community"] = {
link = true,
category_link = "[[community|communities]] of all sizes",
fallback = "village",
},
["community development block"] = {
-- in India; appears to be similar to a rural municipality; groups several villages, unclear if there will be
-- neighborhoods so I'm not setting `has_neighborhoods` for now
link = "w",
affix_type = "suf",
no_affix_strings = "block",
class = "subpolity",
},
["comune"] = {
-- Italy, Switzerland
link = true,
fallback = "municipality",
},
["condominium"] = {
link = true,
fallback = "polity",
},
["confederacy"] = {
link = true,
fallback = "confederation",
},
["confederation"] = {
link = true,
fallback = "polity",
},
["constituency"] = {
-- currently we have them as political divisions of Namibia but many countries have them
link = true,
preposition = "của",
class = "subpolity",
},
["constituent country"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["constituent part"] = {
link = "separately",
preposition = "của",
class = "subpolity",
},
["constituent republic"] = {
-- Of Russia, Yugoslavia, etc.
link = "separately",
preposition = "của",
class = "subpolity",
},
["counties and county-level cities!"] = {
-- This is used when grouping counties and county-level cities under prefecture-level cities in China.
category_link = "[[county|counties]] and [[county-level city|county-level cities]]",
class = "subpolity",
},
["continent"] = {
link = true,
category_link = false, -- can't occur as a bare category
class = "natural feature",
default = {"Lục địa"},
},
["continental region"] = {
link = "separately",
category_link = false, -- can't occur as a bare category
class = "geographic region",
fallback = "continent",
},
["lục địa!"] = {
category_link = "[[continent]]s and [[continent]]-[[level]] [[region]]s (e.g. [[Polynesia]])",
class = "geographic region",
default = {"Lục địa"},
},
["council area"] = {
link = true,
-- in Scotland; similar to a county
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["quốc gia"] = {
link = true,
class = "polity",
["continent/*"] = {true, "Quốc gia"},
default = {"Quốc gia"},
},
["country-like entities!"] = {
category_link = "[[polity|polities]] not normally considered [[country|countries]] but treated similarly for categorization purposes; typically, [[unrecognized]] [[de-facto]] countries or [[w:dependent territory|dependent territories]]",
class = "polity",
},
["county"] = {
link = true,
preposition = "của",
display_handler = county_display_handler,
class = "subpolity",
},
["county borough"] = {
link = true,
-- in Wales; similar to a county
preposition = "của",
affix_type = "suf",
fallback = "borough",
class = "subpolity",
},
["county seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
},
["county town"] = {
link = true,
entry_placetype_use_the = true,
preposition = "của",
fallback = "town",
has_neighborhoods = true,
class = "capital",
},
["county-administered city"] = {
-- In Taiwan, per Wikipedia similar to a Taiwanese township or district, which is a small city.
-- NOT anything like a "county-level city" in PR China, which is a county masquerading as a city.
link = "w",
fallback = "thành phố",
has_neighborhoods = true,
class = "settlement",
},
["county-controlled city"] = {
-- Taiwan
link = "w",
fallback = "county-administered city",
},
["county-level city"] = {
-- PR China
link = "w",
fallback = "prefecture-level city",
},
["crater lake"] = {
link = true,
fallback = "lake",
},
["creek"] = {
link = true,
fallback = "stream",
},
["Crown colony"] = {
link = "+crown colony",
fallback = "crown colony",
},
["crown colony"] = {
link = true,
fallback = "colony",
},
["Crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["crown dependency"] = {
link = true,
fallback = "dependent territory",
},
["cultural area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["cultural region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["delegation"] = {
-- Tunisia
link = "+w:delegations of Tunisia",
preposition = "của",
class = "subpolity",
},
["department"] = {
link = true,
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["departmental capital"] = {
link = "separately",
fallback = "capital city",
},
["dependency"] = {
link = true,
fallback = "dependent territory",
},
["dependent territory"] = {
link = "w",
preposition = "của",
class = "subpolity",
former_type = "dependent territory",
bare_category_parent = "political divisions",
["country/*"] = {true},
default = {true},
},
["hoang mạc"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"hệ thống sinh thái"},
default = {true},
},
["deserted mediaeval village"] = {
link = "w",
fallback = "deserted medieval village",
},
["deserted medieval village"] = {
link = "w",
fallback = "ANCIENT settlement",
},
["direct-administered municipality"] = {
-- China
link = "+w:direct-administered municipalities of China",
fallback = "municipality",
},
["direct-controlled municipality"] = {
-- several countries
link = "w",
fallback = "municipality",
},
["distributary"] = {
link = true,
preposition = "của",
fallback = "river",
},
["district"] = {
link = true,
preposition = "của",
affix_type = "suf",
-- Grrr! FIXME! Here is where we need handlers for `class`. Using similar logic to
-- district_neighborhood_cat_handler, we need to check if we're below or above a city to determine if the class
-- is "settlement" or "subpolity".
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
-- No default. Countries for which districts are political divisions will get entries.
},
["districts and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Portugal.
category_link = "[[district]]s and [[autonomous region]]s",
class = "subpolity",
},
["districts and autonomous territorial units!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Moldova.
category_link = "[[district]]s and [[w:autonomous territorial unit|autonomous territorial unit]]s",
class = "subpolity",
},
["district capital"] = {
link = "separately",
fallback = "capital city",
},
["district headquarters"] = {
link = "separately",
fallback = "administrative centre",
},
["district municipality"] = {
-- In Canada, a district municipality is equivalent to a rural municipality and won't have neighborhoods; in
-- South Africa, district municipalities group local municipalities and hence won't have neighborhoods.
link = "w",
preposition = "của",
affix_type = "suf",
no_affix_strings = {"district", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["division"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["division capital"] = {
link = "separately",
fallback = "capital city",
},
["dome"] = {
link = true,
fallback = "Núi",
},
["dormant volcano"] = {
link = true,
fallback = "volcano",
},
["duchy"] = {
link = true,
fallback = "polity",
},
["emirate"] = {
link = true,
preposition = "của",
-- FIXME: Can be subpolities (of the United Arab Emirates).
fallback = "polity",
},
["empire"] = {
link = true,
fallback = "polity",
},
["enclave"] = {
link = true,
preposition = "của",
-- Enclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["entity"] = {
-- Bosnia and Herzegovina
link = "+w:entities of Bosnia and Herzegovina",
preposition = "của",
class = "subpolity",
},
["escarpment"] = {
link = true,
fallback = "Núi",
},
["ethnographic region"] = {
-- used in Lithuania
link = "+w:ethnographic regions of Lithuania",
fallback = "geographic and cultural area",
},
["exclave"] = {
link = true,
preposition = "của",
-- exclaves can theoretically be any size but assume a subpolity.
class = "subpolity",
},
["external territory"] = {
link = "separately",
fallback = "dependent territory",
},
["farm"] = {
link = true,
class = "non-admin settlement",
default = {"Farms and ranches"},
},
["farms and ranches!"] = {
category_link = "[[farm]]s and [[ranch]]es",
class = "non-admin settlement",
},
["federal city"] = {
link = "w",
preposition = "của",
fallback = "thành phố",
},
["federal district"] = {
link = true,
preposition = "của",
-- Might have neighborhoods as federal districts are often cities (e.g. Mexico City)
has_neighborhoods = true,
class = "settlement",
},
["federal subject"] = {
-- In Russia; a generic term for first-level administrative divisions (republics, oblasts, okrugs, krais,
-- autonomous okrugs and autonomous oblasts).
link = "w",
preposition = "của",
class = "subpolity",
},
["federal territory"] = {
link = "w",
fallback = "territory",
},
["fictional location"] = {
link = "separately",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "Địa danh",
default = {true},
},
["First Nations reserve"] = {
-- Canada
link = "[[First Nations]] [[w:Indian reserve|reserve]]",
-- Wikipedia uses "Indian reserve"; presumably that is the legal term
fallback = "Indian reserve",
class = "subpolity",
},
["fjord"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"vùng nước"},
default = {true},
},
["footpath"] = {
link = true,
fallback = "road",
},
["rừng"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"hệ thống sinh thái", "lâm nghiệp"},
default = {true},
},
["fort"] = {
link = true,
fallback = "building",
},
["fortress"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- fortresses -> fortresse, so put an entry here to ensure we singularize correctly.
plural = "fortresses",
fallback = "building",
},
["frazione"] = {
link = "w",
fallback = "hamlet",
},
["freeway"] = {
link = true,
fallback = "road",
},
["French prefecture"] = {
link = "[[w:prefectures in France|prefecture]]",
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
},
["geographic and cultural area"] = {
link = "+w:cultural area",
-- `generic_before_non_cities` is used when generating the category description of categories of the format
-- `Geographic and cultural areas of PLACE`. `preposition` is used when generating {{place}} description and
-- categories for any placetype that falls back to `geographic and cultural area`.
generic_before_non_cities = "của",
preposition = "của",
class = "geographic region",
bare_category_parent = "Địa danh",
["country/*"] = {true},
["constituent country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["geographic area"] = {
link = "+w:geographic region",
fallback = "geographic and cultural area",
},
["geographic region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical area"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geographical region"] = {
link = "w",
fallback = "geographic and cultural area",
},
["geopolitical zone"] = {
-- Nigeria
link = true,
preposition = "của",
class = "subpolity",
},
["gewog"] = {
-- Bhutan
link = true,
preposition = "của",
class = "subpolity",
},
["ghost town"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
bare_category_parent = "former settlements",
cat_handler = city_type_cat_handler,
default = {true},
},
["glen"] = {
link = true,
fallback = "valley",
},
["governorate"] = {
link = true,
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["greater administrative region"] = {
-- China (former division)
link = "w",
preposition = "của",
class = "subpolity",
inherently_former = {"FORMER"},
},
["gromada"] = {
-- Poland (former division)
link = "w",
preposition = "của",
affix_type = "Pref",
class = "subpolity",
inherently_former = {"FORMER"},
},
["group of islands"] = {
link = "[[group]] of [[island]]s",
plural = "groups of islands",
plural_link = "[[group]]s of [[island]]s",
fallback = "island group",
},
["vịnh biển"] = {
link = true,
preposition = "của",
class = "natural feature",
addl_bare_category_parents = {"vùng nước"},
default = {true},
},
["hamlet"] = {
link = true,
fallback = "village",
},
["harbor city"] = {
link = "separately",
fallback = "thành phố",
},
["harbor town"] = {
link = "separately",
fallback = "town",
},
["harbour city"] = {
link = "separately",
fallback = "thành phố",
},
["harbour town"] = {
link = "separately",
fallback = "town",
},
["mũi đất"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"địa mạo"},
default = {true},
},
["headquarters"] = {
link = "w",
fallback = "administrative centre",
},
["bãi hoang"] = {
link = true,
fallback = "đồng hoang",
},
["hemisphere"] = {
link = true,
entry_placetype_use_the = true,
fallback = "continental region",
},
["highway"] = {
link = true,
fallback = "road",
},
["đồi"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"địa mạo"},
default = {true},
},
["hill station"] = {
link = "w",
fallback = "town",
},
["hill town"] = {
link = "w",
fallback = "town",
},
["historic region"] = {
-- provided only for the link
link = "+w:historical region",
fallback = "FORMER geographic region",
},
["historical county"] = {
-- needed for historical counties of England/etc.
link = "+w:historic county",
fallback = "FORMER subpolity",
},
["historical region"] = {
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["home rule city"] = {
link = "w",
fallback = "thành phố",
},
["home rule municipality"] = {
link = "w",
fallback = "municipality",
},
["hot spring"] = {
link = true,
fallback = "spring",
},
["house"] = {
link = true,
fallback = "building",
},
["housing estate"] = {
-- not the same as a housing project (i.e. public housing)
link = true,
-- not exactly the case but approximately
fallback = "neighborhood",
},
["hromada"] = {
-- Ukraine
link = "w",
disallow_in_entries = "Use placetype 'urban hromada', 'rural hromada' or 'settlement hromada' in place of bare 'hromada'",
disallow_in_holonyms = "Use placetype 'urban hromada'/'uhrom', 'rural hromada'/'rhrom' or 'settlement hromada'/'shrom' in place of bare 'hromada'",
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["inactive volcano"] = {
link = "w",
fallback = "dormant volcano",
},
["independent city"] = {
link = true,
fallback = "thành phố",
},
["independent town"] = {
link = "+independent city",
fallback = "town",
},
["Indian reservation"] = {
link = "w",
-- In the US. Also known as "Native American reservation" or "domestic dependent nation", and the reservations
-- themselves often use the term "nation" in their official name (e.g. the "Navajo Nation"). But Wikipedia puts
-- the article at [[w:Indian reservation]] and uses that term when describing e.g. what the Navajo Nation is,
-- so this must still be the legal term.
preposition = "của",
class = "subpolity",
default = {true},
},
["Indian reserve"] = {
link = "w",
-- In Canada. "First Nations reserve" sounds more modern/PC but Wikipedia uses "Indian reserve"; presumably that
-- is still the legal term.
preposition = "của",
class = "subpolity",
default = {true},
},
["inland sea"] = {
-- note, we also have 'inland' as a qualifier
link = true,
fallback = "sea",
},
["inner city area"] = {
link = "[[inner city]] [[area]]",
fallback = "neighborhood",
},
["đảo"] = {
link = true,
preposition = "của",
class = "natural feature",
addl_bare_category_parents = {"địa mạo"},
default = {true},
},
["island country"] = {
-- FIXME: The following should map to both 'island' and 'country'.
link = "w",
fallback = "country",
},
["island group"] = {
link = "separately",
fallback = "island",
},
["island municipality"] = {
link = "w",
fallback = "municipality",
},
["islet"] = {
link = "w",
fallback = "island",
},
["Israeli settlement"] = {
link = "w",
class = "settlement",
default = {true},
},
["judicial capital"] = {
link = "w",
fallback = "capital city",
},
["khanate"] = {
link = true,
fallback = "polity",
},
["kibbutz"] = {
link = true,
plural = "kibbutzim",
class = "non-admin settlement",
default = {true},
},
["kingdom"] = {
link = true,
fallback = "monarchy",
},
["krai"] = {
link = true,
preposition = "của",
affix_type = "Suf",
class = "subpolity",
},
["hồ"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"vùng nước"},
default = {true},
},
["địa mạo!"] = {
category_link = "[[địa mạo]]",
bare_category_parent = "địa danh",
addl_bare_category_parents = {"Trái Đất"},
},
["largest city"] = {
link = "[[large]]st [[city]]",
entry_placetype_use_the = true,
fallback = "thành phố",
has_neighborhoods = true,
},
["league"] = {
link = true,
fallback = "confederation",
},
["legislative capital"] = {
link = "separately",
fallback = "capital city",
},
["library"] = {
link = true,
fallback = "building",
},
["lieutenancy area"] = {
-- used in the United Kingdom; per Wikipedia:
-- In England, lieutenancy areas are colloquially known as the ceremonial counties, although this phrase does
-- not appear in any legislation referring to them. The lieutenancy areas of Scotland are subdivisions of
-- Scotland that are more or less based on the counties of Scotland, making use of the major cities as separate
-- entities.[2] In Wales, the lieutenancy areas are known as the preserved counties of Wales and are based on
-- those used for lieutenancy and local government between 1974 and 1996. The lieutenancy areas of Northern
-- Ireland correspond to the six counties and two former county boroughs.[3]
link = "w",
fallback = "ceremonial county",
},
["local authority district"] = {
link = "w",
fallback = "local government district",
},
["local government area"] = {
-- Australia
link = "w",
preposition = "của",
class = "subpolity",
},
["local council"] = {
-- Malta; similar to municipalities
link = "+w:local councils of Malta",
preposition = "của",
fallback = "municipality",
},
["local government district"] = {
link = "w",
preposition = "của",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local government district with borough status"] = {
link = "[[w:local government district|local government district]] with [[w:borough status|borough status]]",
plural = "local government districts with borough status",
plural_link = "[[w:local government district|local government districts]] with [[w:borough status|borough status]]",
preposition = "của",
affix_type = "suf",
affix = "district",
class = "subpolity",
},
["local urban district"] = {
link = "w",
fallback = "unincorporated community",
},
["locality"] = {
link = "+w:locality (settlement)",
-- not necessarily true, but usually is the case
fallback = "village",
},
["London borough"] = {
link = "w",
preposition = "của",
affix_type = "pref",
affix = "borough",
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["macroregion"] = {
link = true,
fallback = "region",
},
["man-made structures!"] = {
category_link = "[[w:geographical feature#Engineered constructs|man-made structures]] such as [[airport]]s, [[university|universities]] and [[metro station]]s",
bare_category_parent = "Địa danh",
},
["manor"] = {
-- FIXME: or is this more like a farm?
link = true,
fallback = "building",
},
["marginal sea"] = {
link = true,
preposition = "của",
fallback = "sea",
},
["market city"] = {
link = "+market town",
fallback = "thành phố",
},
["market town"] = {
link = true,
fallback = "town",
},
["massif"] = {
link = true,
fallback = "Núi",
},
["megacity"] = {
link = true,
fallback = "thành phố",
},
["metro station"] = {
link = true,
class = "man-made structure",
},
["metropolitan borough"] = {
link = true,
preposition = "của",
affix_type = "Pref",
no_affix_strings = {"borough", "thành phố"},
fallback = "local government district",
has_neighborhoods = true,
},
["metropolitan city"] = {
-- These exist e.g. in Italy and are more like municipalities or even provinces than cities.
link = true,
preposition = "của",
affix_type = "Pref",
no_affix_strings = {"metropolitan", "thành phố"},
class = "subpolity",
},
["metropolitan county"] = {
link = true,
fallback = "county",
},
["metropolitan municipality"] = {
-- In South Africa, metropolitan municipalities group local municipalities and are like districts, between
-- provinces and municipalities.
-- In Turkey, metropolitan municipalities are provinces-level.
link = "w",
preposition = "của",
affix_type = "Suf",
no_affix_strings = {"metropolitan", "municipality"},
fallback = "municipality",
class = "subpolity",
},
["microdistrict"] = {
-- residential complex in post-Soviet states
link = true,
fallback = "neighborhood",
},
["micronations!"] = {
-- FIXME, merge with microstate
category_link = "[[micronation]]s",
bare_category_parent = "quốc gia",
},
["microstate"] = {
link = true,
fallback = "country",
},
["military base"] = {
link = "w",
class = "settlement", -- or "man-made structure"?
default = {true},
},
["minster town"] = {
-- England
link = "separately",
fallback = "town",
},
["monarchy"] = {
link = true,
fallback = "polity",
},
["đồng hoang"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"địa mạo", "hệ thống sinh thái"},
default = {true},
},
["thảo nguyên"] = {
link = true,
fallback = "đồng hoang",
},
["motorway"] = {
link = true,
fallback = "road",
},
["Núi"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"địa mạo"},
default = {true},
},
["mountain indigenous district"] = {
-- Taiwan
link = "+w:district (Taiwan)",
fallback = "district",
},
["mountain indigenous township"] = {
-- Taiwan
link = "+w:township (Taiwan)",
fallback = "township",
},
["mountain pass"] = {
link = true,
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "mountain passes",
class = "natural feature",
addl_bare_category_parents = {"Núi"},
default = {true},
},
["dãy núi"] = {
link = true,
fallback = "Núi",
},
["mountainous region"] = {
link = "separately",
fallback = "region",
},
["mukim"] = {
-- Malaysia, Brunei, Indonesia, Singapore
link = true,
preposition = "của",
class = "subpolity",
},
["municipal district"] = {
link = "w",
-- meaning varies depending on the country; for now, assume no neighborhoods.
-- FIXME: has_neighborhoods might have to be a function that looks at the containing holonyms.
preposition = "của",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "municipality",
},
["municipality"] = {
link = true,
preposition = "của",
has_neighborhoods = true,
class = "subpolity",
},
["municipality with city status"] = {
link = "[[municipality]] with [[w:city status|city status]]",
plural = "municipalities with city status",
plural_link = "[[municipality|municipalities]] with [[w:city status|city status]]",
fallback = "municipality",
},
["museum"] = {
link = true,
fallback = "building",
},
["địa danh thần thoại"] = {
link = "địa danh thần thoại",
former_type = "!",
class = "hypothetical location",
bare_category_parent = "địa danh",
default = {true},
},
["named bridges!"] = {
category_link = "notable [[bridge]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"bridges"},
},
["named buildings!"] = {
category_link = "notable [[house]]s, [[library|libraries]] and other [[building]]s",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"buildings"},
},
["named roads!"] = {
category_link = "notable [[road]]s, [[highway]]s, [[trail]]s and similar linear structures",
bare_category_parent = "man-made structures",
addl_bare_category_parents = {"roads"},
},
["national capital"] = {
link = "w",
fallback = "capital city",
},
["national park"] = {
link = true,
fallback = "park",
},
["đặc điểm tự nhiên!"] = {
category_link = "tổng hợp các yếu tố vật chất hình thành tồn tại",
bare_category_parent = "địa danh",
},
["neighborhood"] = {
-- The majority of the properties here apply to both `neighborhoods` and `neighbourhoods`; the choice of which
-- one to use is made by district_neighborhood_cat_handler() based on the value of `british_spelling` for the
-- location (city, political division, etc.) of the holonym that follows the word "neighbo(u)hoods" in the
-- category name. It does *NOT* depend on whether the {{place}} call uses "neighborhoods" or "neighbourhoods".
-- (In general it can't, because other things like "urban areas", "districts", "subdivisions" and the like also
-- categorize as neighbo(u)rhoods.)
link = true,
-- See below. These are used by category handlers in [[Module:category tree/topic cat/data/Places]].
generic_before_non_cities = "in",
generic_before_cities = "của",
-- The following text is suitable for the top-level description of a neighborhood as well as categories of the
-- form `Neighborhoods in POLDIV` e.g. `Neighborhoods in Illinois, USA` but not for categories of the form
-- `Neighborhoods of Chicago`, where we'd get "... and other subportions of [[city|cities]] of [[Chicago]]".
category_link = "[[neighborhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighborhood]]s, [[district]]s and other subportions",
-- NOTE: This setting is needed for administrative divisions like barangays that fall back to `neighborhood`,
-- when set in [[Module:place/locations]] for a specific country (e.g. the Philippines). The above settings
-- for `generic_before_non_cities` and `generic_before_cities` are used by category handlers in
-- [[Module:category tree/topic cat/data/Places]] for `Neighborhoods in POLDIV` and `Neighborhoods of CITY`
-- categories. In fact, district_neighborhood_cat_handler() does not currently pay attention to them, but
-- generates "của" before cities and "in" before non-cities regardless. (FIXME: We should change that.)
preposition = "của",
class = "non-admin settlement",
cat_handler = district_neighborhood_cat_handler,
},
["neighbourhood"] = {
link = true,
category_link = "[[neighbourhood]]s, [[district]]s and other subportions of [[city|cities]]",
category_link_before_city = "[[neighbourhood]]s, [[district]]s and other subportions",
fallback = "neighborhood",
},
["new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
preposition = "in",
class = "subpolity", --?
},
["new town"] = {
link = true,
fallback = "town",
},
["non-city capital"] = {
link = "[[capital]]",
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
cat_handler = function(data)
return capital_city_cat_handler(data, "non-city")
end,
-- FIXME, do we need the following?
default = {true},
},
["non-metropolitan county"] = {
link = "w",
fallback = "county",
},
["non-metropolitan district"] = {
link = "w",
fallback = "local government district",
},
["non-sovereign kingdom"] = {
-- especially in Africa and Asia
link = "+w:non-sovereign monarchy",
generic_before_non_cities = "in",
class = "subpolity",
["country/*"] = {true},
["continent/*"] = {true},
default = {true},
},
["non-sovereign monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["oblast"] = {
link = true,
preposition = "của",
affix_type = "Suf",
class = "subpolity",
},
["oblasts and autonomous republics!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Ukraine.
category_link = "[[oblast]]s and [[w:autonomous republic|autonomous republic]]s",
class = "subpolity",
},
["đại dương"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"biển", "vùng nước"},
default = {true},
},
["okrug"] = {
link = true,
preposition = "của",
affix_type = "Suf",
class = "subpolity",
},
["overseas collectivity"] = {
link = "w",
fallback = "collectivity",
},
["overseas department"] = {
link = "w",
fallback = "department",
},
["overseas territory"] = {
link = "w",
fallback = "dependent territory",
},
["parish"] = {
link = true,
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["parish municipality"] = {
-- in Quebec, often similar to a rural village; the famous [[Saint-Louis-du-Ha! Ha!]] is one of them.
link = "+w:parish municipality (Quebec)",
preposition = "của",
fallback = "municipality",
has_neighborhoods = true,
},
["parish seat"] = {
link = true,
entry_placetype_use_the = true,
preposition = "của",
class = "capital",
has_neighborhoods = true,
},
["park"] = {
link = true,
class = "man-made structure",
default = {true},
},
["pass"] = {
link = "+mountain pass",
-- The default plural algorithm gets this right but the singularization algorithm incorrectly converts
-- passes -> passe, so put an entry here to ensure we singularize correctly.
plural = "passes",
fallback = "mountain pass",
},
["path"] = {
link = true,
fallback = "road",
},
["peak"] = {
link = true,
fallback = "Núi",
},
["peninsula"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
},
["periphery"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["địa danh!"] = {
generic_before_non_cities = "của",
generic_before_cities = "của",
class = "generic place",
category_link = "[[place]]s of all sorts",
-- `category_link_top_level` control the description used in the top-level [[Category:Places]] and
-- language-specific variants such as [[Category:en:Places]]. The actual text for a language-spefic variant is
-- "{{{langname}}} names of [[geographical]] [[place]]s of all sorts; [[toponym]]s." where the "names of"
-- portion is automatically generated by the appropriate handler in
-- [[Module:category tree/topic cat/data/Places]].
category_link_top_level = "[[geographical]] [[place]]s of all sorts; [[toponym]]s",
bare_category_parent = "tên",
},
["planned community"] = {
-- Include this so we don't categorize 'planned community' into villages, as 'community' does.
link = true,
class = "settlement",
has_neighborhoods = true,
},
["plateau"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true},
-- FIXME: Should generate both "Plateaus" and the appropriate 'geographic and cultural area' category
},
["Polish colony"] = {
link = "[[w:colony (Poland)|colony]]",
affix_type = "suf",
affix = "colony",
fallback = "village",
has_neighborhoods = true,
},
["political divisions!"] = {
category_link = "[[political]] [[division]]s and [[subdivision]]s, such as [[state]]s, [[province]]s, [[county|counties]] or [[district]]s",
bare_category_parent = "Địa danh",
},
["tổ chức chính trị"] = {
link = true,
category_link = "[[independent]] or [[semi-]][[independent]] [[polity|polities]]",
class = "polity",
bare_category_parent = "địa danh",
default = {true},
},
["populated place"] = {
link = "+w:populated place",
-- not necessarily true, but usually is the case
fallback = "village",
},
["port"] = {
link = true,
class = "man-made structure",
default = {true},
},
["port city"] = {
-- FIXME: should categorize into "Ports" as well as "Cities"
link = true,
fallback = "thành phố",
},
["port town"] = {
-- FIXME: should categorize into "Ports" as well as "Towns"
link = "w",
fallback = "town",
},
["prefecture"] = {
-- FIXME! `prefecture` is like a county in Japan and elsewhere but a department capital city in France.
-- May need `has_neighborhoods` to be a function.
link = true,
preposition = "của",
display_handler = prefecture_display_handler,
class = "subpolity",
},
["prefecture-level city"] = {
-- China; they are huge entities with a central city; not cities themselves.
link = "w",
preposition = "của",
class = "subpolity",
},
["preserved county"] = {
-- In Wales; they are former counties enshrined in law; there are 8 of them and each consists of one or more
-- "principal areas" (styled as "counties" or "county boroughs"), of which there are 22.
link = "w",
preposition = "của",
class = "subpolity",
inherently_former = {"FORMER"},
},
["primary area"] = {
-- a grouping of "districts" (neighborhoods) in Gothenburg, Sweden
link = "+w:sv:primärområde",
fallback = "neighborhood",
},
["principality"] = {
link = true,
fallback = "monarchy",
},
["promontory"] = {
link = true,
fallback = "headland",
},
["protectorate"] = {
link = true,
fallback = "dependent territory",
},
["tỉnh"] = {
link = true,
preposition = "của",
display_handler = province_display_handler,
class = "subpolity",
},
["provinces and autonomous regions!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case China.
category_link = "[[province]]s and [[autonomous region]]s",
class = "subpolity",
},
["provinces and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Canada and Pakistan.
category_link = "[[province]]s and [[territory|territories]]",
class = "subpolity",
},
["provincial capital"] = {
link = true,
fallback = "capital city",
},
["raion"] = {
link = true,
preposition = "của",
affix_type = "Suf",
class = "subpolity",
},
["ranch"] = {
link = true,
fallback = "farm",
},
["range"] = {
-- FIXME: Where is this used? Is it a mountain range?
link = true,
class = "natural feature",
},
["regency"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["region"] = {
link = true,
preposition = "của",
-- If 'region' isn't a specific administrative division, fall back to 'geographic and cultural area'
fallback = "geographic and cultural area",
-- "former region" is a subpolity but traditional/historic(al)/ancient/medieval/etc. is a geographic region
class = "geographic region",
},
["regional capital"] = {
link = "separately",
fallback = "capital city",
},
["regional county municipality"] = {
-- Quebec
link = "w",
preposition = "của",
affix_type = "Suf",
no_affix_strings = {"municipality", "county"},
fallback = "municipality",
},
["regional district"] = {
link = "w",
preposition = "của",
affix_type = "Pref",
no_affix_strings = "district",
fallback = "district",
},
["regional municipality"] = {
link = "w",
preposition = "của",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
},
["regional unit"] = {
link = "w",
preposition = "của",
affix_type = "suf",
class = "subpolity",
},
["registration county"] = {
-- Used in Scotland for land registration purposes; formerly used in England, Wales and Ireland for statistical
-- purposes (registration of births, deaths and marriages, and for the output of census information).
link = "w",
fallback = "county",
},
["republic"] = {
-- Of Russia, Yugoslavia, etc. "Republics" in general are sovereign but we use "country" in that case.
link = true,
fallback = "constituent republic",
},
["research base"] = {
link = "+w:research station",
fallback = "research station",
},
["research station"] = {
link = "w",
class = "non-admin settlement", -- or "man-made structure"?
default = {true},
},
["reservoir"] = {
link = true,
fallback = "lake",
},
["residential area"] = {
link = "separately",
fallback = "neighborhood",
},
["resort city"] = {
link = "w",
fallback = "thành phố",
},
["resort town"] = {
link = "w",
fallback = "town",
},
["sông"] = {
link = true,
generic_before_non_cities = "của",
class = "natural feature",
addl_bare_category_parents = {"vùng nước"},
cat_handler = city_type_cat_handler,
["continent/*"] = {true},
default = {true},
},
["river island"] = {
link = "w",
fallback = "island",
},
["road"] = {
link = true,
class = "man-made structure",
default = {"Named roads"},
},
["Roman province"] = {
-- FIXME! Eliminate this in favor of 'former province|emp/Roman Empire'
link = "w",
default = {"Provinces of the Roman Empire"},
class = "subpolity",
},
["royal borough"] = {
link = "w",
preposition = "của",
affix_type = "Pref",
no_affix_strings = {"royal", "borough"},
fallback = "local government district with borough status",
has_neighborhoods = true,
},
["royal burgh"] = {
link = true,
fallback = "borough",
},
["royal capital"] = {
link = "w",
fallback = "capital city",
},
["rural committee"] = {
-- Hong Kong; a group of villages
link = "w",
affix_type = "Suf",
has_neighborhoods = true,
class = "settlement",
},
["rural community"] = {
-- New Brunswick
link = "+w:list of municipalities in New_Brunswick#Rural communities",
fallback = "municipality",
},
["rural hromada"] = {
link = "[[rural]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["rural municipality"] = {
link = "w",
preposition = "của",
affix_type = "Pref",
no_affix_strings = "municipality",
fallback = "municipality",
has_neighborhoods = true, --?
},
["rural township"] = {
-- Taiwan
link = "+w:rural township (Taiwan)",
fallback = "township",
},
["sanctuary"] = {
link = true,
fallback = "temple",
},
["satrapy"] = {
link = true,
preposition = "của",
class = "subpolity",
inherently_former = {"ANCIENT", "FORMER"},
},
["biển"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"vùng nước"},
default = {"Biển"},
},
["seaport"] = {
link = true,
fallback = "port",
},
["seat"] = {
link = true,
fallback = "administrative centre",
},
["self-administered area"] = {
-- Myanmar (groups self-administered divisions and zones)
link = "+w:self-administered zone",
preposition = "của",
class = "subpolity",
},
["self-administered division"] = {
-- Myanmar (only one of them: Wa Self-Administered Division)
link = "w",
fallback = "self-administered area",
},
["self-administered zone"] = {
-- Myanmar (five of them)
link = "w",
fallback = "self-administered area",
},
["separatist state"] = {
link = "separately",
fallback = "unrecognized country",
},
["settlement"] = {
link = true,
category_link = "[[settlement]]s such as [[city|cities]], [[village]]s and [[farm]]s",
bare_category_parent = "Địa danh",
-- not necessarily true, but usually is the case
fallback = "village",
},
["settlement hromada"] = {
link = "[[w:Populated places in Ukraine#Rural settlements|settlement]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["sheading"] = {
-- Isle of Man
link = true,
fallback = "district",
},
["sheep station"] = {
-- Australia
link = true,
fallback = "farm",
},
["shire"] = {
link = true,
fallback = "county",
},
["shire county"] = {
link = "w",
fallback = "county",
},
["shire town"] = {
link = true,
fallback = "county seat",
},
["ski resort city"] = {
link = "[[ski resort]] [[city]]",
fallback = "thành phố",
},
["ski resort town"] = {
link = "[[ski resort]] [[town]]",
fallback = "town",
},
["spa city"] = {
link = "+w:spa town",
fallback = "thành phố",
},
["spa town"] = {
link = "w",
fallback = "town",
},
["space station"] = {
link = true,
fallback = "research station",
},
["special administrative region"] = {
-- in China; in practice they are city-like (Hong Kong, Macau); also [[Oecusse]] in East Timor is formally a
-- "special administrative region"; North Korea had one such region planned (Sinuiju) but abandoned; Indonesia
-- has similar "special regions" of Jakarta, Yogyakarta and Aceh; and South Sudan has three "special
-- administrative areas"
link = "+w:special administrative regions of China",
preposition = "của",
class = "subpolity",
has_neighborhoods = true, --?
-- no suffix since places in Hong Kong or Macau are listed without China, except Hong Kong and Macau themselves
-- they also contain regions (or areas), e.g. [[Kowloon]], so it would be confusing
suffix = "",
},
["special collectivity"] = {
link = "w",
fallback = "collectivity",
},
["special municipality"] = {
-- formerly linked to the Taiwan article but there are also special municipalities of the Netherlands
link = "w",
fallback = "municipality",
},
["special ward"] = {
-- Tokyo
link = true,
fallback = "municipality",
},
["spit"] = {
link = true,
fallback = "peninsula",
},
["spring"] = {
link = true,
class = "natural feature",
default = {true},
},
["star"] = {
link = true,
class = "natural feature",
default = {true},
},
["state"] = {
link = true,
preposition = "của",
class = "subpolity",
-- 'former/historical state' could refer either to a state of a country (a division) or a state = sovereign
-- entity. The latter appears more common (e.g. in various "ancient states" of East Asia).
former_type = "polity",
},
["states and territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case Australia.
category_link = "[[state]]s and [[territory|territories]]",
class = "subpolity",
},
["states and union territories!"] = {
-- This and other similar "combined placetypes" are for use in the plural when grouping first-level
-- administrative regions of certain countries, in this case India.
category_link = "[[state]]s and [[union territory|union territories]]",
class = "subpolity",
},
["state capital"] = {
link = true,
fallback = "capital city",
},
["state park"] = {
link = true,
fallback = "park",
},
["state-level new area"] = {
-- China (type of economic development zone, varying greatly in size)
link = "w",
fallback = "new area",
},
["statistical region"] = {
-- Slovenia
link = true,
fallback = "administrative region",
},
["statutory city"] = {
link = "w",
fallback = "thành phố",
},
["statutory town"] = {
link = "w",
fallback = "town",
},
["strait"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"bodies of water"},
default = {true},
},
["stream"] = {
link = true,
fallback = "river",
},
["street"] = {
link = true,
fallback = "road",
},
["strip"] = {
link = true,
fallback = "geographic region",
},
["strip of land"] = {
link = "[[strip]] of [[land]]",
plural = "strips of land",
plural_link = "[[strip]]s of [[land]]",
fallback = "geographic region",
},
["sub-metropolitan city"] = {
link = "+w:List of cities in Nepal#Sub-metropolitan cities",
fallback = "thành phố",
},
["sub-prefectural city"] = {
link = "w",
fallback = "subprovincial city",
},
["subdistrict"] = {
link = true,
preposition = "của",
has_neighborhoods = true, --?
-- FIXME: subdistricts can be neighborhood-like (of Jakarta) or larger (in China); need a handler
class = "subpolity",
default = {true},
},
["subdivision"] = {
link = true,
preposition = "của",
affix_type = "suf",
-- FIXME: subdivisions can be neighborhood-like or larger; need a handler
class = "subpolity",
cat_handler = district_neighborhood_cat_handler,
},
["submerged ghost town"] = {
-- FIXME: Consider just having "submerged" as a qualifier.
link = "[[submerged]] [[ghost town]]",
fallback = "ghost town",
},
["subnational kingdom"] = {
link = "+w:subnational monarchy",
fallback = "non-sovereign kingdom",
},
["subnational monarchy"] = {
link = "w",
fallback = "non-sovereign kingdom",
},
["subprefecture"] = {
link = true,
affix_type = "suf",
preposition = "của",
class = "subpolity",
},
["subprovince"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["subprovincial city"] = {
link = "w",
-- China; special status given to certain prefecture-level cities
fallback = "prefecture-level city",
},
["subprovincial district"] = {
link = "w",
-- China; special status given to Binhai New Area and Pudong New Area, which are county-level districts
preposition = "của",
class = "subpolity",
},
["subregion"] = {
link = true,
fallback = "geographic region",
},
["suburb"] = {
link = true,
-- The following text is suitable for the top-level description of a suburb as well as categories of the form
-- 'Suburbs in POLDIV' e.g. 'Suburbs in Illinois, USA' but not for categories of the form 'Suburbs of Chicago',
-- where we'd get "[[suburb]]s of [[city|cities]] of [[Chicago]]".
category_link = "[[suburb]]s of [[city|cities]]",
category_link_before_city = "[[suburb]]s",
-- See comments under "neighborhood" for the following three settings. They are used by
-- [[Module:category tree/topic cat/data/Places]] for generating the text of 'Suburbs in/of PLACE' categories
-- but currently ignored by district_neighborhood_cat_handler (which actually generates the categories for a
-- given page), which hardcodes "in" for non-cities and "của" for cities. (FIXME: Change this.)
generic_before_non_cities = "in",
generic_before_cities = "của",
preposition = "của",
has_neighborhoods = true, --?
class = "non-admin settlement", --?
cat_handler = district_neighborhood_cat_handler,
},
["suburban area"] = {
link = "w",
fallback = "suburb",
},
["subway station"] = {
link = "w",
fallback = "metro station",
},
["sum"] = {
-- In China, Mongolia, Russia; something like a county in Mongolia but a township in China (Inner Mongolia),
-- and equivalent to a [[selsoviet]] in the parts of Russia where it's in use (a rural council, below a raion).
link = "+w:sum (administrative division)",
-- This fallback is somewha arbitrary. We could use "county" but that has a display handler
-- which we don't want to be active (FIXME: If the display handler would be active, that's a bug).
fallback = "division",
},
["supercontinent"] = {
link = true,
fallback = "continent",
},
["tehsil"] = {
link = true,
affix_type = "suf",
no_affix_strings = {"tehsil", "tahsil"},
class = "subpolity",
},
["temple"] = {
link = true,
fallback = "building",
},
["territorial authority"] = {
link = "w",
fallback = "district",
},
["territory"] = {
link = true,
preposition = "của",
class = "subpolity",
},
["theme"] = {
link = "+w:theme (Byzantine district)",
preposition = "của",
class = "subpolity",
},
["town"] = {
link = true,
generic_before_non_cities = "in",
has_neighborhoods = true,
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["town with bystatus"] = {
-- can't use templates in links currently
link = "[[town]] with [[bystatus#Norwegian Bokmål|bystatus]]",
plural = "towns with bystatus",
plural_link = "[[town]]s with [[bystatus#Norwegian Bokmål|bystatus]]",
fallback = "town",
},
["township"] = {
link = true,
has_neighborhoods = true,
class = "settlement", --?
default = {true},
},
["township municipality"] = {
-- Quebec
link = "+w:township municipality (Quebec)",
preposition = "của",
fallback = "municipality",
has_neighborhoods = true, --?
},
["traditional county"] = {
link = true,
fallback = "county",
},
["traditional region"] = {
-- FIXME: Verify this works. Same for 'historic(al) region'.
-- provided only for the link
link = "w",
fallback = "FORMER geographic region",
},
["trail"] = {
link = true,
fallback = "road",
},
["treaty port"] = {
link = "w",
fallback = "thành phố",
class = "settlement",
inherently_former = {"FORMER"},
},
["tributary"] = {
link = true,
preposition = "của",
fallback = "river",
},
["underground station"] = {
link = "w",
fallback = "metro station",
},
["unincorporated area"] = {
link = "w",
-- I don't know if this fallback makes sense everywhere.
fallback = "unincorporated community",
},
["unincorporated community"] = {
link = true,
generic_before_non_cities = "in",
class = "non-admin settlement",
},
["unincorporated territory"] = {
link = "w",
fallback = "territory",
},
["union territory"] = {
-- India
link = true,
preposition = "của",
entry_placetype_indefinite_article = "a",
class = "subpolity",
},
["unitary authority"] = {
-- UK, New Zealand
link = true,
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["unitary district"] = {
link = "w",
entry_placetype_indefinite_article = "a",
fallback = "local government district",
},
["united township municipality"] = {
-- Quebec
link = "+w:united township municipality (Quebec)",
entry_placetype_indefinite_article = "a",
fallback = "township municipality",
has_neighborhoods = true, --?
},
["university"] = {
link = true,
entry_placetype_indefinite_article = "a",
class = "man-made structure",
default = {true},
},
["unrecognised country"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized and nearly unrecognized countries!"] = {
category_link = "[[de facto]] [[independent]] [[state]]s with little or no {{w|international recognition}}",
bare_category_parent = "country-like entities",
},
["unrecognized country"] = {
link = "w",
class = "polity",
default = {"Unrecognized and nearly unrecognized countries"},
},
["unrecognised state"] = {
link = "w",
fallback = "unrecognized country",
},
["unrecognized state"] = {
link = "w",
fallback = "unrecognized country",
},
["urban area"] = {
link = "separately",
fallback = "neighborhood",
},
["urban hromada"] = {
link = "[[urban]] [[w:hromada|hromada]]",
affix_type = "suf",
fallback = "hromada",
},
["urban service area"] = {
-- A strange beast existing in Alberta; technically a type of hamlet but in practice used for much larger
-- cities and treated equivalent to a city. (There are only two of them, [[Fort McMurray]] and [[Sherwood Park]]).
link = "w",
fallback = "thành phố",
},
["urban township"] = {
link = "w",
fallback = "township",
},
["urban-type settlement"] = {
-- appears to be a particular type of small urban settlement in post-Soviet states,
-- had an administrative function.
link = "w",
fallback = "town",
},
["valley"] = {
link = true,
class = "natural feature",
addl_bare_category_parents = {"landforms", "water"},
default = {true},
},
["viceroyalty"] = {
-- in essence, a type of colony
link = true,
fallback = "dependent territory",
},
["village"] = {
link = true,
generic_before_non_cities = "in",
category_link = "[[village]]s, [[hamlet]]s, and other small [[community|communities]] and [[settlement]]s",
class = "settlement",
cat_handler = city_type_cat_handler,
default = {true},
},
["village development committee"] = {
-- former administrative structure in Nepal; also exists in India but not as a formal unit
link = "+w:village development committee (Nepal)",
inherently_former = {"FORMER"},
fallback = "village",
},
["village municipality"] = {
-- Quebec
link = "+w:village municipality (Quebec)",
preposition = "của",
fallback = "municipality",
has_neighborhoods = true, --?
},
["voivodeship"] = {
-- Poland
link = true,
display_handler = voivodeship_display_handler,
preposition = "của",
class = "subpolity",
},
["volcano"] = {
link = true,
plural = "volcanoes",
class = "natural feature",
addl_bare_category_parents = {"landforms"},
default = {true, "Núi"},
},
["phường"] = {
link = true,
class = "settlement",
-- Wards are formal administrative divisions of a city but have some properties of neighborhoods.
fallback = "neighborhood",
},
["watercourse"] = {
link = true,
fallback = "channel",
},
["Welsh community"] = {
-- Wales
link = "[[w:community (Wales)|community]]",
preposition = "của",
affix_type = "suf",
affix = "community",
has_neighborhoods = true,
class = "settlement",
},
["zone"] = {
-- administrative division of Ethiopia, Qatar, Nepal, India
link = "+w:zone#Place names",
preposition = "của",
class = "subpolity",
},
----------------------------------------------------------------------------------------------
-- Categories for former places --
----------------------------------------------------------------------------------------------
["ANCIENT capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
-- FIXME: Consider removing 'ancient settlements' here. Ancient capitals, like former capitals, often still
-- exist but just aren't the capital any more. Maybe we should have an 'Ancient capitals' category.
default = {"Ancient settlements", "Former capitals"},
},
["ANCIENT non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "ANCIENT settlement",
},
["ANCIENT settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Ancient settlements"},
},
["ancient settlements!"] = {
category_link = "former [[city|cities]], [[town]]s and [[village]]s that existed in [[antiquity]]",
bare_category_parent = "former settlements",
},
["FORMER capital"] = {
link = false,
entry_placetype_use_the = true,
preposition = "của",
has_neighborhoods = true,
class = "capital",
default = {"Former capitals"},
},
["former capitals!"] = {
category_link = "former [[capital]] [[city|cities]] and [[town]]s",
bare_category_parent = "settlements",
},
["former counties and county-level cities!"] = {
-- For categorizing former counties and county-level cities of China
category_link = "no-longer existing [[county|counties]] and [[county-level city|county-level cities]]",
bare_category_breadcrumb = "counties and county-level cities",
bare_category_parent = "former political divisions",
},
["FORMER county"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER county-level city"] = {
-- For categorizing former counties and county-level cities of China
link = false,
fallback = "FORMER subpolity",
},
["former countries and country-like entities!"] = {
category_link = "[[country|countries]] and similar [[polity|polities]] that no longer exist",
bare_category_breadcrumb = "countries and country-like entities",
bare_category_parent = "former polities",
},
["FORMER country"] = {
link = false,
class = "polity",
default = {"Former countries and country-like entities"},
},
["former dependent territories!"] = {
category_link = "[[w:dependent territory|dependent territories]] (colonies, dependencies, protectorates, etc.) that no longer exist",
bare_category_breadcrumb = "dependent territories",
bare_category_parent = "former political divisions",
},
["FORMER dependent territory"] = {
link = false,
preposition = "của",
class = "subpolity",
default = {"Former dependent territories"},
},
["former districts!"] = {
-- For categorizing former districts of China
category_link = "no-longer-existing [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "former political divisions",
},
["FORMER district"] = {
-- For categorizing former districts of China
link = false,
fallback = "FORMER subpolity",
},
["FORMER geographic region"] = {
link = false,
fallback = "geographic and cultural area",
},
["FORMER man-made structure"] = {
link = false,
class = "man-made structure",
default = {"Former man-made structures"},
},
["former man-made structures!"] = {
category_link = "man-made structures such as [[airport]]s and [[park]]s that no longer exist",
bare_category_breadcrumb = "man-made structures",
bare_category_parent = "former places",
},
["former municipalities!"] = {
-- For categorizing former municipalities of the Netherlands
category_link = "no-longer-existing [[municipality|municipalities]]",
bare_category_breadcrumb = "municipalities",
bare_category_parent = "former political divisions",
},
["FORMER municipality"] = {
-- For categorizing former municipalities of the Netherlands
link = false,
fallback = "FORMER subpolity",
},
["FORMER natural feature"] = {
link = false,
class = "natural feature",
default = {"Former natural features"},
},
["former natural features!"] = {
category_link = "natural features such as [[lake]]s, [[river]]s and [[island]]s that no longer exist",
bare_category_breadcrumb = "natural features",
bare_category_parent = "former places",
},
["FORMER non-admin settlement"] = {
link = false,
class = "non-admin settlement",
fallback = "FORMER settlement",
},
["former places!"] = {
category_link = "[[place]]s of all sorts that no longer exist",
bare_category_breadcrumb = "former",
bare_category_parent = "Địa danh",
},
["former political divisions!"] = {
category_link = "[[political]] [[division]]s (states, provinces, counties, etc.) that no longer exist",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former places",
},
["former polities!"] = {
category_link = "[[polity|polities]] (countries, kingdoms, empires, etc.) that no longer exist",
bare_category_breadcrumb = "polities",
bare_category_parent = "former places",
},
["FORMER polity"] = {
link = false,
class = "polity",
default = {"Former polities"},
},
["former prefectures!"] = {
-- For categorizing former prefectures of China
category_link = "no-longer-existing [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "former political divisions",
},
["FORMER prefecture"] = {
-- For categorizing former prefectures of China
link = false,
fallback = "FORMER subpolity",
},
["former provinces!"] = {
-- For categorizing former provinces of China, etc.
category_link = "no-longer-existing [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "former political divisions",
},
["FORMER province"] = {
-- For categorizing ancient/historical/former provinces of the Roman Empire
link = false,
fallback = "FORMER subpolity",
},
["former region"] = {
-- A former region is considered a former political division, but not a 'historical/traditional/etc.' region.
link = "separately",
preposition = "của",
inherently_former = {"FORMER"},
class = "subpolity",
},
["FORMER settlement"] = {
link = false,
has_neighborhoods = true,
class = "settlement",
default = {"Former settlements"},
},
["former settlements!"] = {
category_link = "[[city|cities]], [[town]]s and [[village]]s that no longer exist or have been merged or reclassified",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former political divisions",
},
["FORMER subpolity"] = {
link = false,
preposition = "của",
class = "subpolity",
default = {"Former political divisions"},
},
----------------------------------------------------------------------------------------------
-- form-of categories --
----------------------------------------------------------------------------------------------
---------- Abbreviations ----------
["abbreviations of counties!"] = {
-- For categorizing abbreviations of counties of e.g. England
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[county|counties]]",
bare_category_breadcrumb = "counties",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "abbreviations of places",
},
["abbreviations of departments!"] = {
-- For categorizing abbreviations of departments of e.g. France
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[department]]s",
bare_category_breadcrumb = "departments",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of districts!"] = {
-- For categorizing abbreviations of districts of e.g. ???
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[district]]s",
bare_category_breadcrumb = "districts",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of divisions!"] = {
-- For categorizing abbreviations of divisions of e.g. Bangladesh
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[division]]s",
bare_category_breadcrumb = "divisions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of former countries!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "abbreviations of former places",
},
["abbreviations of former places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "abbreviations of places", sort = "former"}},
},
["abbreviations of places!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "abbreviations",
bare_category_parent = "Địa danh",
},
["abbreviations of political divisions!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[political]] [[division]]s",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "abbreviations of places",
},
["abbreviations of prefectures!"] = {
-- For categorizing abbreviations of prefectures of e.g. Japan
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[prefecture]]s",
bare_category_breadcrumb = "prefectures",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces!"] = {
-- For categorizing abbreviations of provinces of e.g. Canada
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s",
bare_category_breadcrumb = "provinces",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of provinces and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[province]]s and [[territory|territories]]",
bare_category_breadcrumb = "provinces and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of regions!"] = {
-- For categorizing abbreviations of regions of e.g. Italy
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[administrative region]]s",
bare_category_breadcrumb = "regions",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states!"] = {
-- For categorizing abbreviations of states of e.g. the United States
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[territory|territories]]",
bare_category_breadcrumb = "states and territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of states and union territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[state]]s and [[union territory|union territories]]",
bare_category_breadcrumb = "states and union territories",
bare_category_parent = "abbreviations of political divisions",
},
["abbreviations of territories!"] = {
full_category_link = "{{glossary|abbreviation}}s of [[name]]s of [[territory|territories]]",
bare_category_breadcrumb = "territories",
bare_category_parent = "abbreviations of political divisions",
},
["ABBREVIATION_OF country"] = {
link = false,
default = {"Abbreviations of countries"},
},
["ABBREVIATION_OF county"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF department"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF district"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF division"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF FORMER country"] = {
link = false,
default = {"Abbreviations of former countries"},
},
["ABBREVIATION_OF FORMER place"] = {
link = false,
default = {"Abbreviations of former places"},
},
["ABBREVIATION_OF place"] = {
link = false,
default = {"Abbreviations of places"},
},
["ABBREVIATION_OF prefecture"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF province"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF region"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF state"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF subpolity"] = {
link = false,
default = {"Abbreviations of political divisions"},
},
["ABBREVIATION_OF territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
["ABBREVIATION_OF union territory"] = {
link = false,
fallback = "ABBREVIATION_OF subpolity",
},
---------- Archaic forms ----------
["archaic forms of places!"] = {
full_category_link = "{{glossary|archaic}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "archaic forms",
bare_category_parent = "Địa danh",
},
["ARCHAIC_FORM_OF place"] = {
link = false,
default = {"Archaic forms of places"},
},
---------- Clippings ----------
["clippings of places!"] = {
full_category_link = "{{glossary|clipping}}s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "clippings",
bare_category_parent = "Địa danh",
},
["CLIPPING_OF place"] = {
link = false,
default = {"Clippings of places"},
},
---------- Dated forms ----------
["dated forms of places!"] = {
full_category_link = "{{glossary|dated}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "dated forms",
bare_category_parent = "Địa danh",
},
["DATED_FORM_OF place"] = {
link = false,
default = {"Dated forms of places"},
},
---------- Derogatory names ----------
["derogatory names for cities!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[city|cities]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["derogatory names for continents!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for continents"},
},
["derogatory names for countries!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for countries"},
},
["derogatory names for places!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[place]]s",
bare_category_breadcrumb = "derogatory names",
bare_category_parent = "nicknames for places",
},
["derogatory names for states!"] = {
full_category_link = "{{glossary|derogatory}} [[name]]s for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "derogatory names for places",
addl_bare_category_parents = {"nicknames for states"},
},
["DEROGATORY_NAME_FOR capital"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR city"] = {
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR continent"] = {
link = false,
default = {"Derogatory names for continents"},
},
["DEROGATORY_NAME_FOR country"] = {
link = false,
default = {"Derogatory names for countries"},
},
["DEROGATORY_NAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "thành phố"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR place"] = {
link = false,
default = {"Derogatory names for places"},
},
["DEROGATORY_NAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "thành phố" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Derogatory names for cities"},
},
["DEROGATORY_NAME_FOR state"] = {
link = false,
default = {"Derogatory names for states"},
},
["DEROGATORY_NAME_FOR town"] = {
link = false,
default = {"Derogatory names for cities"},
},
---------- Ellipses ----------
["ellipses of places!"] = {
full_category_link = "{{glossary|ellipsis|ellipses}} of [[name]]s of [[place]]s",
bare_category_breadcrumb = "ellipses",
bare_category_parent = "Địa danh",
},
["ELLIPSIS_OF place"] = {
link = false,
default = {"Ellipses of places"},
},
---------- Former long-form names ----------
["former long-form names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "former long-form names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "long-form"}},
},
["former long-form names of places!"] = {
full_category_link = "no-longer-[[use]]d [[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form",
bare_category_parent = "former names of places",
},
["FORMER_LONG_FORM_OF country"] = {
link = false,
default = {"Former long-form names of countries"},
},
["FORMER_LONG_FORM_OF place"] = {
link = false,
default = {"Former long-form names of places"},
},
---------- Former names ----------
["former names of capitals!"] = {
full_category_link = "[[former]] [[name]]s of [[capital city|capital cities]] that generally still exist but under a different name",
bare_category_breadcrumb = "capitals",
bare_category_parent = "former names of settlements",
},
["former names of countries!"] = {
full_category_link = "[[former]] [[name]]s of [[country|countries]] that generally still exist but under a different name",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "former names of places",
},
["former names of places!"] = {
full_category_link = "[[former]] [[name]]s of [[place]]s that generally still exist but under a different name",
bare_category_breadcrumb = "former names",
bare_category_parent = "Địa danh",
},
["former names of political divisions!"] = {
full_category_link = "[[former]] [[name]]s of [[political]] [[division]]s (states, provinces, counties, etc.) that generally still exist but under a different name",
bare_category_breadcrumb = "political divisions",
bare_category_parent = "former names of places",
},
["former names of polities!"] = {
full_category_link = "[[former]] [[name]]s of [[polity|polities]] (e.g. [[country|countries]]) that generally still exist but under a different name",
bare_category_breadcrumb = "polities",
bare_category_parent = "former names of places",
},
["former names of settlements!"] = {
full_category_link = "[[former]] [[name]]s of [[city|cities]], [[town]]s, [[village]]s, etc. that generally still exist but under a different name",
bare_category_breadcrumb = "settlements",
bare_category_parent = "former names of political divisions",
},
["FORMER_NAME_OF capital"] = {
link = false,
default = {"Former names of capitals"},
},
["FORMER_NAME_OF country"] = {
link = false,
default = {"Former names of countries"},
},
["FORMER_NAME_OF place"] = {
link = false,
default = {"Former names of places"},
},
["FORMER_NAME_OF polity"] = {
link = false,
default = {"Former names of polities"},
},
["FORMER_NAME_OF region"] = {
link = false,
fallback = "FORMER_NAME_OF subpolity",
},
["FORMER_NAME_OF settlement"] = {
link = false,
default = {"Former names of settlements"},
},
["FORMER_NAME_OF subpolity"] = {
link = false,
default = {"Former names of political divisions"},
},
---------- Former nicknames ----------
["former nicknames for cities!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[city|cities]], e.g. the [[Eternal City]] for [[Kyoto]] during the {{w|Heian period}} ({{circa2|800–1100|short=yes}} {{AD}})",
bare_category_breadcrumb = "cities",
bare_category_parent = "former nicknames for places",
addl_bare_category_parents = {"nicknames for cities"},
},
["former nicknames for places!"] = {
full_category_link = "no-longer-used [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "former",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {{name = "former names of places", sort = "nicknames"}},
},
["FORMER_NICKNAME_FOR capital"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR city"] = {
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "thành phố"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR place"] = {
link = false,
default = {"Former nicknames for places"},
},
["FORMER_NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "thành phố" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Former nicknames for cities"},
},
["FORMER_NICKNAME_FOR town"] = {
link = false,
default = {"Former nicknames for cities"},
},
---------- Former official names ----------
["former official names of countries!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "former official names of places",
addl_bare_category_parents = {{name = "former names of countries", sort = "official"}},
},
["former official names of places!"] = {
full_category_link = "no-longer-[[use]]d [[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "former names of places",
},
["FORMER_OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Former official names of countries"},
},
["FORMER_OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Former official names of places"},
},
---------- Long-form names ----------
["long-form names of countries!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "long-form names of places",
},
["long-form names of places!"] = {
full_category_link = "[[long]]-[[form]] (but typically [[unofficial]]) [[name]]s of [[place]]s",
bare_category_breadcrumb = "long-form names",
bare_category_parent = "Địa danh",
},
["LONG_FORM_OF country"] = {
link = false,
default = {"Long-form names of countries"},
},
["LONG_FORM_OF place"] = {
link = false,
default = {"Long-form names of places"},
},
---------- Nicknames ----------
["nicknames for cities!"] = {
full_category_link = "[[nickname]]s for [[city|cities]], e.g. the [[Big Apple]] for [[New York City]]",
bare_category_breadcrumb = "cities",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"cities"},
},
["nicknames for continents!"] = {
full_category_link = "[[nickname]]s for [[continent]]s",
bare_category_breadcrumb = "continents",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"continents"},
},
["nicknames for countries!"] = {
full_category_link = "[[nickname]]s for [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"quốc gia"},
},
["nicknames for places!"] = {
full_category_link = "[[nickname]]s for [[place]]s",
bare_category_breadcrumb = "Địa danh",
bare_category_parent = "nicknames",
addl_bare_category_parents = {"Địa danh"},
},
["nicknames for states!"] = {
-- For categorizing nicknames for states of e.g. the United States
full_category_link = "[[nicknames]] for [[state]]s",
bare_category_breadcrumb = "states",
bare_category_parent = "nicknames for places",
addl_bare_category_parents = {"states"},
},
["NICKNAME_FOR capital"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR city"] = {
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR continent"] = {
link = false,
default = {"Nicknames for continents"},
},
["NICKNAME_FOR country"] = {
link = false,
default = {"Nicknames for countries"},
},
["NICKNAME_FOR metropolitan city"] = {
-- "metropolitan city" doesn't fall back to "thành phố"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR place"] = {
link = false,
default = {"Nicknames for places"},
},
["NICKNAME_FOR prefecture-level city"] = {
-- "prefecture-level city" doesn't fall back to "thành phố" but things like "county-level city" and
-- "subprovincial city" fall back to "prefecture-level city"
link = false,
default = {"Nicknames for cities"},
},
["NICKNAME_FOR state"] = {
link = false,
default = {"Nicknames for states"},
},
["NICKNAME_FOR town"] = {
link = false,
default = {"Nicknames for cities"},
},
---------- Obsolete forms ----------
["obsolete forms of places!"] = {
full_category_link = "{{glossary|obsolete}} [[form]]s of [[name]]s of [[place]]s",
bare_category_breadcrumb = "obsolete forms",
bare_category_parent = "Địa danh",
},
["OBSOLETE_FORM_OF place"] = {
link = false,
default = {"Obsolete forms of places"},
},
---------- Official names ----------
["official names of countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "official names of places",
},
["official names of former countries!"] = {
full_category_link = "[[official]] [[name]]s of [[country|countries]] that no longer [[exist]]",
bare_category_breadcrumb = "quốc gia",
bare_category_parent = "official names of former places",
},
["official names of former places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s that no longer [[exist]]",
bare_category_breadcrumb = "official names",
bare_category_parent = "former places",
addl_bare_category_parents = {{name = "official names of places", sort = "former"}},
},
["official names of places!"] = {
full_category_link = "[[official]] [[name]]s of [[place]]s",
bare_category_breadcrumb = "official names",
bare_category_parent = "Địa danh",
},
["OFFICIAL_NAME_OF country"] = {
link = false,
default = {"Official names of countries"},
},
["OFFICIAL_NAME_OF FORMER country"] = {
link = false,
default = {"Official names of former countries"},
},
["OFFICIAL_NAME_OF FORMER place"] = {
link = false,
default = {"Official names of former places"},
},
["OFFICIAL_NAME_OF place"] = {
link = false,
default = {"Official names of places"},
},
---------- Official nicknames ----------
["official nicknames for places!"] = {
full_category_link = "[[official]] [[nickname]]s for [[place]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for places",
},
["official nicknames for states!"] = {
-- For categorizing official nicknames for states of e.g. the United States
full_category_link = "[[official]] [[nicknames]] for [[state]]s",
bare_category_breadcrumb = "official",
bare_category_parent = "nicknames for states",
addl_bare_category_parents = {"states"},
},
["OFFICIAL_NICKNAME_FOR place"] = {
link = false,
default = {"Official nicknames for places"},
},
["OFFICIAL_NICKNAME_FOR state"] = {
link = false,
default = {"Official nicknames for states"},
},
}
export.plural_placetype_to_singular = {}
for sg_placetype, spec in pairs(export.placetype_data) do
if spec.plural then
export.plural_placetype_to_singular[spec.plural] = sg_placetype
end
end
return export
jpusyakhixdd4uwignu5yl23zqtpz6x
Mô đun:families/canonical names
828
291753
2572751
2572031
2026-10-22T14:22:23Z
Hiyuune
50834
2572751
Scribunto
text/plain
return {
["Adamawa"] = "alv-ada",
["Admiralty Islands"] = "poz-aay",
["Aizi"] = "kro-aiz",
["Alacalufan"] = "aqa",
["Almora"] = "sit-alm",
["Ao"] = "sit-aao",
["Apachean"] = "apa",
["Arafundi"] = "paa-arf",
["Arai-Samaia"] = "paa-asa",
["Arandic"] = "aus-rnd",
["Arauan"] = "auf",
["Araucanian"] = "sai-ara",
["Nhóm ngôn ngữ Armenia"] = "hyx",
["Arnhem"] = "aus-arn",
["Asturleonese"] = "roa-asl",
["Athabaskan"] = "ath",
["Axioid"] = "tbq-axi",
["Ayere-Ahan"] = "alv-aah",
["Aymaran"] = "sai-aym",
["Bafia"] = "bnt-baf",
["Bafo-Bonkeng"] = "bnt-bbo",
["Baga"] = "alv-bag",
["Bagirmi"] = "csu-bgr",
["Baining"] = "paa-bng",
["Bak"] = "alv-bak",
["Baka"] = "nic-nkb",
["Nhóm ngôn ngữ Bali-Sasak-Sumbawa"] = "poz-bss",
["Bambukic"] = "alv-bam",
["Bamileke"] = "bai",
["Nhóm ngôn ngữ Banda"] = "bad",
["Bangi-Moi"] = "bnt-bmo",
["Bangi-Ntomba"] = "bnt-bnm",
["Bangi-Tetela"] = "bnt-bte",
["Banyum"] = "alv-bny",
["Barbacoan"] = "sai-bar",
["Bari"] = "sdv-bri",
["Basa"] = "nic-bas",
["Batak"] = "btk",
["Bati-Angba"] = "bnt-bta",
["Be"] = "qfa-onb",
["Beboid"] = "nic-beb",
["Bekwilic"] = "bnt-bek",
["Bena-Kinga"] = "bnt-bki",
["Bendi"] = "nic-ben",
["Beromic"] = "nic-beo",
["Beti"] = "bnt-btb",
["Bhil"] = "inc-bhi",
["Bi-Ka"] = "tbq-bka",
["Bikwin-Jen"] = "alv-bwj",
["Birri-Kresh"] = "csu-bkr",
["Bisoid"] = "tbq-bis",
["Boan"] = "bnt-boa",
["Bodo-Garo"] = "tbq-bdg",
["Boma-Dzing"] = "bnt-bdz",
["Nhóm ngôn ngữ Bongo-Bagirmi"] = "csu-bba",
["Nhóm ngôn ngữ Bongo-Baka"] = "csu-bbk",
["Boran"] = "sai-bor",
["Botatwe"] = "bnt-bot",
["Bua"] = "alv-bua",
["Buja-Ngombe"] = "bnt-bun",
["Buli-Koma"] = "nic-buk",
["Bunuban"] = "aus-bub",
["Bushoong"] = "bnt-bsh",
["Bwa"] = "nic-bwa",
["Bété"] = "kro-bet",
["Bình thoại"] = "zhx-pin",
["Caddoan"] = "cdd",
["Cahuapanan"] = "sai-cah",
["Cangin"] = "alv-cng",
["Caspian"] = "ira-csp",
["Catacaoan"] = "sai-ctc",
["Catawban"] = "nai-cat",
["Central Banda"] = "bad-cnt",
["Central Delta"] = "nic-cde",
["Central Dravidian"] = "dra-cen",
["Central Great Andamanese"] = "qfa-adc",
["Central Indo-Aryan"] = "inc-cen",
["Central Iranian"] = "ira-cen",
["Central Jê"] = "sai-cje",
["Central Kiranti"] = "sit-kic",
["Central Maluku"] = "poz-cma",
["Central Mande"] = "dmn-mdc",
["Nhóm ngôn ngữ Trung New South Wales"] = "aus-cww",
["Central Ring"] = "nic-rnc",
["Nhóm ngôn ngữ Trung Sudan"] = "csu",
["Central Tano"] = "alv-ctn",
["Central Teke"] = "bnt-tkc",
["Central Tivoid"] = "nic-tvc",
["Cerrado"] = "sai-cer",
["Chaga"] = "bnt-chg",
["Chaga-Taita"] = "bnt-cht",
["Chapacuran"] = "sai-cpc",
["Charruan"] = "sai-crn",
["Chatino"] = "omq-cha",
["Chibchan"] = "cba",
["Chimakuan"] = "chi",
["Chinantecan"] = "omq-chi",
["Chinookan"] = "nai-ckn",
["Chitrali"] = "inc-chi",
["Chocoan"] = "sai-chc",
["Chokwe-Luchazi"] = "bnt-clu",
["Chonan"] = "sai-cho",
["Chumashan"] = "nai-chu",
["Circassian"] = "cau-cir",
["Comorian"] = "bnt-com",
["Continental Celtic"] = "cel-con",
["Coosan"] = "nai-coo",
["Cross River"] = "nic-cri",
["Cuicatec"] = "omq-cui",
["Cupan"] = "azc-cup",
["Nhóm ngôn ngữ Dagbani"] = "nic-dag",
["Daju"] = "sdv-daj",
["Dakoid"] = "nic-dak",
["Nhóm ngôn ngữ Dakota"] = "sio-dkt",
["Dalmatian Romance"] = "roa-dal",
["Daly"] = "aus-dal",
["Nhóm ngôn ngữ Dargwa"] = "cau-drg",
["Delta Edoid"] = "alv-dlt",
["Dene-Yeniseian"] = "qfa-dny",
["Dhegihan"] = "sio-dhe",
["Dhimalish"] = "sit-dhi",
["Dida"] = "kro-did",
["Dinka-Nuer"] = "sdv-dnu",
["Dogon"] = "qfa-dgn",
["Downriver Phula"] = "tbq-drp",
["Duru"] = "alv-dur",
["Dyirbalic"] = "aus-dyb",
["East Geelvink Bay"] = "paa-egb",
["East Germanic"] = "gme",
["East Manding"] = "dmn-emn",
["East Ometo"] = "omv-eom",
["East Plateau"] = "nic-ple",
["East Tsezian"] = "cau-ets",
["East-West Upper Cross River"] = "nic-uce",
["Eastern Beboid"] = "nic-bbe",
["Eastern Central Sudanic"] = "csu-ecs",
["Eastern Dardic"] = "inc-dre",
["Eastern Gbaya"] = "alv-gbf",
["Eastern Grassfields"] = "nic-gre",
["Eastern Gurunsi"] = "nic-gne",
["Eastern Hindi"] = "inc-hie",
["Eastern Jebel"] = "sdv-eje",
["Eastern Kiranti"] = "sit-kie",
["Eastern Kru"] = "kro-ekr",
["Eastern Ngbaka"] = "nic-nke",
["Eastern Nilotic"] = "sdv-nie",
["Eastern Oti-Volta"] = "nic-eov",
["Eastern Polynesian"] = "poz-pep",
["Eastern Romance"] = "roa-eas",
["Eastern Samur"] = "cau-esm",
["Eastern Sudanic"] = "sdv",
["Ede"] = "alv-ede",
["Edekiri"] = "alv-edk",
["Nhóm ngôn ngữ Edo-Esan-Ora"] = "alv-eeo",
["Ekoid"] = "nic-eko",
["Engan"] = "paa-eng",
["Escarpment Dogon"] = "nic-dge",
["Eskimo"] = "esx-esk",
["Fali"] = "alv-fli",
["Finisterre"] = "ngf-fin",
["French Sign Languages"] = "sgn-fsl",
["Frisian"] = "gmw-fri",
["Fula-Wolof"] = "alv-fwo",
["Fur"] = "ssa-fur",
["Furu"] = "nic-fru",
["Ga-Dangme"] = "alv-gda",
["Gallo-Italic"] = "roa-git",
["Garawan"] = "aus-gar",
["Gbanziri"] = "nic-nkg",
["Gbaya"] = "alv-gba",
["Gelao"] = "qfa-gel",
["German Sign Languages"] = "sgn-gsl",
["Ghana-Togo Mountain"] = "alv-gtm",
["Nhóm ngôn ngữ Goidel"] = "cel-gae",
["Gondi"] = "dra-gon",
["Gondi-Kui"] = "dra-gki",
["Gonga"] = "omv-gon",
["Goroka"] = "ngf-gor",
["Nhóm ngôn ngữ Graeco-Phrygia"] = "ine-grp",
["Grassfields"] = "nic-grf",
["Great Andamanese"] = "qfa-adm",
["Great Lakes Bantu"] = "bnt-glb",
["Greater Siangic"] = "sit-gsi",
["Grebo"] = "kro-grb",
["Guahiban"] = "sai-guh",
["Guaicuruan"] = "sai-guc",
["Guang"] = "alv-gng",
["Guianan"] = "sai-gui",
["Gunwinyguan"] = "aus-gun",
["Gur"] = "nic-gur",
["Gurma"] = "nic-grm",
["Gurunsi"] = "nic-gns",
["Halmahera-Cenderawasih"] = "poz-hce",
["Harákmbut"] = "sai-har",
["Harákmbut-Katukinan"] = "sai-hkt",
["Haya-Jita"] = "bnt-haj",
["Highland Phula"] = "tbq-hph",
["Hill Nubian"] = "nub-hil",
["Hispano-Celtic"] = "cel-his",
["Hmong"] = "hmn",
["Hokan"] = "hok",
["Hrusish"] = "sit-hrs",
["Hurro-Urartian"] = "qfa-hur",
["Ibibio-Efik"] = "nic-ief",
["Idomoid"] = "alv-ido",
["Igboid"] = "alv-igb",
["Ijoid"] = "ijo",
["Insular Indo-Aryan"] = "inc-ins",
["Insular Scandinavian"] = "gmq-ins",
["Inuit"] = "esx-inu",
["Irish Anglo-Norman"] = "gmw-ian",
["Ngữ hệ Iroquois"] = "iro",
["Irula-Muduga"] = "dra-imd",
["Italo-Dalmatian"] = "roa-itd",
["Japanese Sign Languages"] = "sgn-jsl",
["Jarawa"] = "nic-jrw",
["Jarawan"] = "nic-jrn",
["Jarrakan"] = "aus-jar",
["Jera"] = "nic-jer",
["Jicaquean"] = "nai-jcq",
["Jingphoic"] = "sit-jnp",
["Jino"] = "tbq-jin",
["Jirajaran"] = "sai-jir",
["Jogo-Jeri"] = "dmn-jje",
["Jola"] = "alv-jol",
["Jola-Felupe"] = "alv-jfe",
["Jê"] = "sai-jee",
["Ka-Togo"] = "alv-ktg",
["Kaba"] = "csu-kab",
["Kachin-Luic"] = "sit-jpl",
["Kadu"] = "qfa-kad",
["Kainantu-Goroka"] = "paa-kag",
["Kako"] = "bnt-kak",
["Kalahari Khoe"] = "khi-kal",
["Kalamian"] = "phi-kal",
["Kalapuyan"] = "nai-klp",
["Kalenjin"] = "sdv-kln",
["Kambari"] = "nic-kam",
["Kamuku"] = "nic-kmk",
["Karaboro"] = "alv-krb",
["Karnic"] = "aus-kar",
["Kashmiric"] = "inc-kas",
["Katloid"] = "nic-ktl",
["Katukinan"] = "sai-ktk",
["Kavango"] = "bnt-kav",
["Kavango-Southwest Bantu"] = "bnt-ksb",
["Kazhuoish"] = "tbq-kzh",
["Kele"] = "bnt-kel",
["Kele-Tsogo"] = "bnt-kts",
["Keresan"] = "nai-ker",
["Khanty"] = "kca",
["Kho-Bwa"] = "sit-khb",
["Khoe"] = "khi-kho",
["Khoe-Kwadi"] = "khi-kkw",
["Khoekhoe"] = "khi-khk",
["Kikuyu-Kamba"] = "bnt-kka",
["Kilombero"] = "bnt-kil",
["Kim"] = "alv-kim",
["Kimbundu"] = "bnt-kmb",
["Kinnauric"] = "sit-kin",
["Kipchak-Cuman"] = "trk-kcu",
["Kiranti"] = "sit-kir",
["Kissi"] = "alv-kis",
["Kiwaian"] = "paa-kiw",
["Kodagu"] = "dra-kod",
["Kohistani"] = "inc-koh",
["Kolami-Naiki"] = "dra-knk",
["Komisenian"] = "ira-kms",
["Komo-Bira"] = "bnt-kbi",
["Konda-Kui"] = "dra-kki",
["Kongo"] = "bnt-kng",
["Konyak"] = "sit-kon",
["Konyak-Chang"] = "sit-kch",
["Koraga"] = "dra-kor",
["Kpala"] = "nic-nkk",
["Kpwe"] = "bnt-kpw",
["Kra"] = "qfa-kra",
["Kuikuroan"] = "sai-kui",
["Kulango"] = "alv-kul",
["Kuliak"] = "ssa-klk",
["Kunar"] = "inc-kun",
["Kurukh-Malto"] = "dra-kml",
["Kwomtari"] = "paa-kwm",
["Kx'a"] = "khi-kxa",
["Kyirong-Kagate"] = "sit-kyk",
["Kyrgyz-Kipchak"] = "trk-kkp",
["Nhóm ngôn ngữ Lagoon"] = "alv-lag",
["Lahoish"] = "tbq-lho",
["Lahuli-Spiti"] = "sit-las",
["Lakes Plain"] = "paa-lkp",
["Lalo"] = "tbq-lal",
["Lampungic"] = "poz-lgx",
["Land Dayak"] = "day",
["Nhóm ngôn ngữ Latinh-Faliscan"] = "itc-laf",
["Lawoish"] = "tbq-lwo",
["Lebonya"] = "bnt-leb",
["Left May"] = "qfa-mal",
["Lega-Binja"] = "bnt-lgb",
["Leko"] = "alv-lek",
["Leko-Nimbari"] = "alv-lni",
["Lenape"] = "del",
["Lencan"] = "nai-len",
["Lendu"] = "csu-lnd",
["Lezghian"] = "cau-lzg",
["Limba"] = "alv-lim",
["Lipo-Lolopo"] = "tbq-llo",
["Lisoish"] = "tbq-lso",
["Logooli-Kuria"] = "bnt-lok",
["Lotuko-Maa"] = "sdv-lma",
["Low German"] = "gmw-lgm",
["Lower Cross River"] = "nic-lcr",
["Lower Sepik"] = "paa-lsp",
["Luba"] = "bnt-lub",
["Luban"] = "bnt-lbn",
["Luish"] = "sit-luu",
["Lunda"] = "bnt-lun",
["Luo"] = "sdv-luo",
["Luwic"] = "ine-luw",
["Macro-Chibchan"] = "qfa-mch",
["Macro-Jê"] = "sai-mje",
["Nhóm ngôn ngữ Madang"] = "ngf-mad",
["Madiya"] = "dra-mdy",
["Maiduan"] = "nai-mdu",
["Mairasi"] = "paa-mai",
["Makaa"] = "bnt-mka",
["Makaa-Njem"] = "bnt-mnj",
["Makua"] = "bnt-mak",
["Nhóm ngôn ngữ Malayalam"] = "dra-mal",
["Malto"] = "dra-mlo",
["Nhóm ngôn ngữ Mambiloid"] = "nic-mmb",
["Mamfe"] = "nic-mam",
["Manding"] = "dmn-man",
["Manding-Jogo"] = "dmn-mjo",
["Manding-Mokole"] = "dmn-mmo",
["Manding-Vai"] = "dmn-mva",
["Manenguba"] = "bnt-mne",
["Mangbetu"] = "csu-maa",
["Mangbutu-Lese"] = "csu-mle",
["Maninka"] = "dmn-mnk",
["Mano-Dan"] = "dmn-mda",
["Mao"] = "omv-mao",
["Mapoyan"] = "sai-map",
["Nhóm ngôn ngữ Mari"] = "chm",
["Maringic"] = "sit-mar",
["Masaba-Luhya"] = "bnt-msl",
["Mascoian"] = "sai-mas",
["Mataco-Guaicuru"] = "sai-mgc",
["Matacoan"] = "sai-mtc",
["Mazanderani-Shahmirzadi"] = "ira-msh",
["Mazatecan"] = "omq-maz",
["Mba"] = "nic-mbc",
["Mbaka"] = "nic-nkm",
["Mbam"] = "nic-mba",
["Mbete"] = "bnt-mbt",
["Mbeya"] = "bnt-mby",
["Mbinga"] = "bnt-mbi",
["Mbole-Enya"] = "bnt-mbe",
["Mboshi"] = "bnt-mbo",
["Mboshi-Buja"] = "bnt-mbb",
["Mbugwe-Rangi"] = "bnt-mra",
["Mbum"] = "alv-mbm",
["Mbum-Day"] = "alv-mbd",
["Median"] = "xme",
["Mel"] = "alv-mel",
["Nhóm ngôn ngữ Micronesia"] = "poz-mic",
["Midzu"] = "sit-mdz",
["Mijikenda"] = "bnt-mij",
["Mirndi"] = "aus-mir",
["Mississippi Valley Siouan"] = "sio-msv",
["Missouri River Siouan"] = "sio-mor",
["Misumalpan"] = "nai-min",
["Mixe-Zoquean"] = "nai-miz",
["Mokole"] = "dmn-mok",
["Momo"] = "nic-mom",
["Mondzish"] = "sit-mnz",
["Mongo"] = "bnt-mon",
["Nhóm ngôn ngữ Mordvin"] = "urj-mdv",
["Moru-Madi"] = "csu-mma",
["Moré"] = "nic-mre",
["Mruic"] = "sit-mru",
["Muji"] = "tbq-muj",
["Mumuye"] = "alv-mum",
["Mumuye-Yendang"] = "alv-mye",
["Munji-Yidgha"] = "ira-mny",
["Muran"] = "sai-mur",
["Muria"] = "dra-mur",
["Nhóm ngôn ngữ Muskogee"] = "nai-mus",
["Mwika"] = "bnt-mwi",
["Mân"] = "zhx-min",
["Mân Nam"] = "zhx-nan",
["Mân nội địa"] = "zhx-inm",
["Mân ven biển"] = "zhx-com",
["Na-Dene"] = "xnd",
["Na-Togo"] = "alv-ntg",
["Nadahup"] = "sai-nad",
["Naic"] = "sit-nax",
["Naish"] = "sit-nas",
["Nalu"] = "alv-nal",
["Nambikwaran"] = "sai-nmk",
["Nanaic"] = "tuw-nan",
["Nandi-Markweta"] = "sdv-nma",
["Nanga-Walo"] = "nic-nwa",
["Nasoid"] = "tbq-nas",
["Ndzem-Bomwali"] = "bnt-ndb",
["Nenets"] = "yrk",
["New Caledonian"] = "poz-cln",
["Newaric"] = "sit-new",
["Ngayarda"] = "aus-nga",
["Ngbaka"] = "nic-ngk",
["Ngbandi"] = "nic-ngd",
["Ngemba"] = "nic-nge",
["Ngondi-Ngiri"] = "bnt-ngn",
["Nguni"] = "bnt-ngu",
["Nilotic"] = "sdv-nil",
["Nimboran"] = "paa-nim",
["Ninzic"] = "nic-nin",
["Nisoish"] = "tbq-nso",
["Nisu"] = "tbq-nis",
["Nkambe"] = "nic-nka",
["North Athabaskan"] = "ath-nor",
["North Bougainville"] = "paa-nbo",
["North Dravidian"] = "dra-nor",
["North Halmahera"] = "paa-nha",
["Nhóm ngôn ngữ Bắc Iroquois"] = "iro-nor",
["Nhóm ngôn ngữ Bắc Ometo"] = "omv-nom",
["North Plateau Dogon"] = "nic-npd",
["North Sarawakan"] = "poz-swa",
["North Siberian Turkic"] = "trk-nsb",
["North-Central Vanuatu"] = "poz-vnc",
["North-South Upper Cross River"] = "nic-ucn",
["Northeast Bantu"] = "bnt-bne",
["Northeast Coast Bantu"] = "bnt-ncb",
["Northeastern Neo-Aramaic"] = "sem-nna",
["Northern Eastern Sudanic"] = "sdv-nes",
["Northern Great Andamanese"] = "qfa-adn",
["Northern Gurunsi"] = "nic-gnn",
["Northern Jê"] = "sai-nje",
["Northern Luo"] = "sdv-lon",
["Northern Nuristani"] = "nur-nor",
["Northern Ring"] = "nic-rnn",
["Northern Tivoid"] = "nic-tvn",
["Northern Yeniseian"] = "qfa-yno",
["Northwest Kainji"] = "nic-knn",
["Nhóm ngôn ngữ Tây Bắc Edoid"] = "alv-nwd",
["Northwestern Indo-Aryan"] = "inc-nwe",
["Northwestern Mande"] = "dmn-mnw",
["Nubian"] = "nub",
["Nun"] = "nic-nun",
["Nupe-Gbagyi"] = "alv-ngb",
["Nupoid"] = "alv-nup",
["Nuristani"] = "iir-nur",
["Nusoish"] = "tbq-nus",
["Nwa-Beng"] = "dmn-nbe",
["Nyali"] = "bnt-nya",
["Nyanga-Buyi"] = "bnt-nyb",
["Nyima"] = "sdv-nyi",
["Nyoro-Ganda"] = "bnt-nyg",
["Nyulnyulan"] = "aus-nyu",
["Nyun"] = "alv-nyn",
["Nzebi"] = "bnt-nze",
["Occitano-Romance"] = "roa-ocr",
["Ogoni"] = "nic-ogo",
["Ohio Valley Siouan"] = "sio-ohv",
["Ok"] = "ngf-okk",
["Old South Arabian"] = "sem-osa",
["Nhóm ngôn ngữ Ometo"] = "omv-ome",
["Oti-Volta"] = "nic-ovo",
["Oto-Pamean"] = "omq-otp",
["Otomacoan"] = "sai-otm",
["Otomi"] = "oto-otm",
["Otomian"] = "oto",
["Ovambo"] = "bnt-ova",
["Oïl"] = "roa-oil",
["Pacific Coast Athabaskan"] = "ath-pco",
["Pakanic"] = "mkh-pkn",
["Pakawan"] = "nai-pak",
["Palaihnihan"] = "nai-pal",
["Papel"] = "alv-pap",
["Pare"] = "bnt-par",
["Parji-Gadaba"] = "dra-pgd",
["Parukotoan"] = "sai-prk",
["Pashayi"] = "inc-pas",
["Pathan"] = "ira-pat",
["Pauwasi"] = "paa-pau",
["Pekodian"] = "sai-pek",
["Pemongan"] = "sai-pem",
["Pende"] = "bnt-pen",
["Permic"] = "urj-prm",
["Phla-Pherá"] = "alv-pph",
["Phowa"] = "tbq-phw",
["Plains Dogon"] = "nic-pld",
["Plateau Penutian"] = "nai-plp",
["Pomeranian"] = "zlw-pom",
["Pomo-Bomwali"] = "bnt-pob",
["Pomoan"] = "nai-pom",
["Popolocan"] = "omq-pop",
["Potou-Tano"] = "alv-ptn",
["Prakrit"] = "pra",
["Punjabi-Lahnda"] = "inc-pan",
["Qiangic"] = "sit-qia",
["Quan thoại"] = "zhx-man",
["Quảng Châu"] = "zhx-yue",
["Ramu"] = "paa-ram",
["Rashad"] = "nic-ras",
["Rgyalrongic"] = "sit-rgy",
["Rhaeto-Romance"] = "roa-rhe",
["Ring"] = "nic-rng",
["Riverine Phula"] = "tbq-rph",
["Romani"] = "inc-rom",
["Rufiji-Ruvuma"] = "bnt-rur",
["Rukwa"] = "bnt-ruk",
["Rungwe"] = "bnt-run",
["Ruvu"] = "bnt-ruv",
["Ruvuma"] = "bnt-rvm",
["Sabaki"] = "bnt-sab",
["Sabi"] = "bnt-sbi",
["Sahaptian"] = "nai-shp",
["Saharan"] = "ssa-sah",
["Sakan"] = "xsc-sak",
["Sal"] = "tbq-bkj",
["Samo"] = "dmn-sam",
["Samogo"] = "dmn-smg",
["Samur"] = "cau-sam",
["Sanglechi-Ishkashimi"] = "ira-sgi",
["Sara"] = "csu-sar",
["Sawabantu"] = "bnt-saw",
["Sena"] = "bnt-sna",
["Senari"] = "alv-snr",
["Sentani"] = "paa-sen",
["Sere"] = "nic-ser",
["Seuta"] = "bnt-seu",
["Shastan"] = "nai-shs",
["Shi-Havu"] = "bnt-shh",
["Shinaic"] = "inc-shn",
["Shiroro"] = "nic-shi",
["Shona"] = "bnt-sho",
["Shughni-Yazghulami"] = "ira-shy",
["Siberian Turkic"] = "trk-sib",
["Siloid"] = "tbq-sil",
["Sindhi"] = "inc-snd",
["Siouan"] = "sio",
["Siouan-Catawban"] = "nai-sca",
["Sisaala"] = "nic-sis",
["Sko"] = "paa-msk",
["Slavey"] = "den",
["Sogdic"] = "ira-sgc",
["Sogdo-Bactrian"] = "ira-sbc",
["Soko-Kele"] = "bnt-ske",
["Soninke-Bobo"] = "dmn-snb",
["Sorbian"] = "wen",
["Sotho-Tswana"] = "bnt-sts",
["South Bird's Head"] = "ngf-sbh",
["South Bougainville"] = "paa-sbo",
["South Plateau"] = "nic-pls",
["South Siberian Turkic"] = "trk-ssb",
["South Sulawesi"] = "poz-ssw",
["Southeastern Aramaic"] = "sem-ase",
["Southeastern Mande"] = "dmn-mse",
["Southern Bantu"] = "bnt-bso",
["Southern Gbaya"] = "alv-gbs",
["Southern Great Andamanese"] = "qfa-ads",
["Southern Indo-Aryan"] = "inc-sou",
["Southern Jê"] = "sai-sje",
["Southern Luo"] = "sdv-los",
["Southern Nilotic"] = "sdv-nis",
["Southern Nuristani"] = "nur-sou",
["Southern Samur"] = "cau-ssm",
["Southern Yeniseian"] = "qfa-yso",
["Southwest Bantu"] = "bnt-swb",
["Southwest Grassfields"] = "nic-grs",
["Southwestern Edoid"] = "alv-swd",
["Southwestern Mande"] = "dmn-msw",
["Sunda-Sulawesi"] = "poz-sus",
["Suppire-Mamara"] = "alv-sma",
["Susu-Yalunka"] = "dmn-sya",
["Swahili"] = "bnt-swh",
["Ta-Arawakan"] = "awd-taa",
["Tacanan"] = "sai-tac",
["Tagwana-Djimini"] = "alv-tdj",
["Takama"] = "bnt-tkm",
["Takic"] = "azc-tak",
["Talodi"] = "alv-tal",
["Taloid"] = "tbq-tal",
["Taman"] = "sdv-tmn",
["Tamil-Kodagu"] = "dra-tkd",
["Tamil-Malayalam"] = "dra-tml",
["Tamiloid"] = "dra-tam",
["Tangkhul-Maring"] = "sit-tma",
["Tangkic"] = "aus-tnk",
["Tangsa-Nocte"] = "sit-tno",
["Tani"] = "sit-tan",
["Taracahitic"] = "azc-trc",
["Taranoan"] = "sai-tar",
["Tarokoid"] = "nic-tar",
["Tatic"] = "xme-ttc",
["Teke"] = "bnt-tek",
["Teke-Mbede"] = "bnt-tmb",
["Tenda"] = "alv-ten",
["Tequistlatecan"] = "nai-tqn",
["Teso-Turkana"] = "sdv-ttu",
["Tetela"] = "bnt-tet",
["Ticuna-Yuri"] = "sai-tyu",
["Timor-Alor-Pantar"] = "qfa-tap",
["Tocharian"] = "ine-toc",
["Toda-Kota"] = "dra-tkt",
["Tomini-Tolitoli"] = "poz-tot",
["Tor-Kwerba"] = "paa-tkw",
["Torricelli"] = "qfa-tor",
["Totozoquean"] = "nai-tot",
["Ngữ hệ Liên New Guinea"] = "ngf",
["Tsezian"] = "cau-tsz",
["Tshangla"] = "sit-tsk",
["Tsimshianic"] = "nai-tsi",
["Tsogo"] = "bnt-tso",
["Tswa-Ronga"] = "bnt-tsr",
["Ngữ hệ Tucanoan"] = "sai-tuc",
["Tupi-Guarani"] = "tup-gua",
["Tuu"] = "khi-tuu",
["Nhóm ngôn ngữ Ubangi"] = "nic-ubg",
["Ugric"] = "urj-ugr",
["Upper Cross River"] = "nic-ucr",
["Upriver Phula"] = "tbq-urp",
["Uru-Chipaya"] = "sai-ucp",
["Utian"] = "nai-utn",
["Vai-Kono"] = "dmn-vak",
["Vainakh"] = "cau-vay",
["Vale"] = "csu-val",
["Venezuelan Cariban"] = "sai-ven",
["Waja-Kam"] = "alv-wjk",
["Ngữ hệ Wakashan"] = "wak",
["Wara-Natyoro"] = "alv-wan",
["Wee"] = "kro-wee",
["West Baltic"] = "bat-wes",
["West Dogon"] = "nic-dgw",
["West Himalayish"] = "sit-whm",
["West Manding"] = "dmn-wmn",
["West Mbam"] = "nic-mbw",
["West Papuan"] = "paa-wpa",
["West Tsezian"] = "cau-wts",
["Western Gbaya"] = "alv-gbw",
["Western Gurunsi"] = "nic-gnw",
["Western Hindi"] = "inc-hiw",
["Western Kiranti"] = "sit-kiw",
["Western Kru"] = "kro-wkr",
["Western Mande"] = "dmn-mdw",
["Western Ngbaka"] = "nic-nkw",
["Western Nilotic"] = "sdv-niw",
["Western Oti-Volta"] = "nic-wov",
["Western Pahari"] = "him",
["Western Ring"] = "nic-rnw",
["Western Samur"] = "cau-wsm",
["Wichí"] = "sai-wic",
["Wintuan"] = "nai-wtq",
["Witotoan"] = "sai-wit",
["Worrorran"] = "aus-wor",
["Yaka"] = "bnt-yak",
["Yam"] = "paa-yam",
["Yambasa"] = "nic-ymb",
["Yangmanic"] = "aus-yng",
["Yanomami"] = "sai-ynm",
["Yasa-Kombe"] = "bnt-yko",
["Yeniseian"] = "qfa-yen",
["Yidinyic"] = "aus-yid",
["Yok-Utian"] = "nai-you",
["Yokuts"] = "yok",
["Yolngu"] = "aus-yol",
["Yom-Nawdm"] = "nic-yon",
["Yoruba"] = "alv-yor",
["Yoruboid"] = "alv-yrd",
["Yuat"] = "paa-yua",
["Yuin-Kuric"] = "aus-yuk",
["Yukian"] = "nai-ykn",
["Yukpan"] = "sai-yuk",
["Yukubenic"] = "nic-ykb",
["Yungur"] = "alv-yun",
["Yupik"] = "ypk",
["Zamba-Binza"] = "bnt-zbi",
["Zamucoan"] = "sai-zam",
["Zan"] = "ccs-zan",
["Zande"] = "znd",
["Zaparoan"] = "sai-zap",
["Zapotec"] = "omq-zpc",
["Zapotecan"] = "omq-zap",
["Zeme"] = "sit-zem",
["Ngôn ngữ nhân tạo"] = "art",
["contact"] = "qfa-cnt",
["creole or pidgin"] = "crp",
["mixed"] = "qfa-mix",
["ngôn ngữ cơ tầng"] = "qfa-sub",
["Ngữ hệ Ainu"] = "qfa-ain",
["Ngữ hệ Algic"] = "aql",
["Ngữ hệ Arawak"] = "awd",
["Ngữ hệ Carib"] = "sai-car",
["Ngữ hệ Chukotka-Kamchatka"] = "qfa-cka",
["Ngữ hệ Dravida"] = "dra",
["Ngữ hệ Hmông-Miền"] = "hmx",
["Ngữ hệ Huarpe"] = "sai-hrp",
["Ngữ hệ Hán-Tạng"] = "sit",
["Ngữ hệ Iwaidja"] = "aus-wdj",
["Ngữ hệ Iwam"] = "paa-iwm",
["Ngữ hệ Jivaro"] = "sai-jiv",
["Ngữ hệ Kartvelia"] = "ccs",
["Ngữ hệ Kiowa-Tanoa"] = "nai-kta",
["Ngữ hệ Kra-Dai"] = "qfa-tak",
["Ngữ hệ Maya"] = "myn",
["Ngữ hệ Mông Cổ"] = "xgn",
["Ngữ hệ Nam Á"] = "aav",
["Ngữ hệ Nam Đảo"] = "map",
["Ngữ hệ Nhật Bản-Lưu Cầu"] = "jpx",
["Ngữ hệ Niger-Congo"] = "nic",
["Ngữ hệ Nin-Sahara"] = "ssa",
["Ngữ hệ Oto-Mangue"] = "omq",
["Ngữ hệ Pama–Nyungar"] = "aus-pam",
["Ngữ hệ Pano-Tacana"] = "sai-pat",
["Ngữ hệ Papua"] = "paa",
["Ngữ hệ Phi-Á"] = "afa",
["Ngữ hệ Quechua"] = "qwe",
["Ngữ hệ Salish"] = "sal",
["Ngữ hệ Sepik"] = "paa-sep",
["Ngữ hệ Thượng Tami"] = "paa-brd",
["Ngữ hệ Tiên Ti-Mông Cổ"] = "qfa-xgs",
["Ngữ hệ Totonac"] = "nai-ttn",
["Ngữ hệ Triều Tiên"] = "qfa-kor",
["Ngữ hệ Tungus"] = "tuw",
["Ngữ hệ Tupi"] = "tup",
["Ngữ hệ Turk"] = "trk",
["Ngữ hệ Tyrseni"] = "qfa-tyn",
["Ngữ hệ Tây Bắc Kavkaz"] = "cau-nwc",
["Ngữ hệ Ural"] = "urj",
["Ngữ hệ Ute-Aztec"] = "azc",
["Ngữ hệ Vascon"] = "euq",
["Ngữ hệ Xinca"] = "nai-xin",
["Ngữ hệ Yukaghir"] = "qfa-yuk",
["Ngữ hệ Yuman-Cochimí"] = "nai-yuc",
["Ngữ hệ vùng vịnh Papua"] = "paa-pag",
["Ngữ hệ Önge"] = "qfa-ong",
["Ngữ hệ Đông Bắc Kavkaz"] = "cau-nec",
["Ngữ hệ Ấn-Âu"] = "ine",
["Ngữ tộc Mixtec"] = "omq-mix",
["Nhóm ngôn ngữ Aari"] = "omv-aro",
["Nhóm ngôn ngữ Abenaki-Penobscot"] = "alg-abp",
["Nhóm ngôn ngữ Abkhaz-Abaza"] = "cau-abz",
["Nhóm ngôn ngữ Ai Cập"] = "egx",
["Nhóm ngôn ngữ Albani"] = "sqj",
["Nhóm ngôn ngữ Algonquin"] = "alg",
["Nhóm ngôn ngữ Alumic"] = "nic-alu",
["Nhóm ngôn ngữ Andic"] = "cau-and",
["Nhóm ngôn ngữ Angami-Pochuri"] = "tbq-anp",
["Nhóm ngôn ngữ Angan"] = "ngf-ang",
["Nhóm ngôn ngữ Anh"] = "gmw-ang",
["Nhóm ngôn ngữ Anh-Frisia"] = "gmw-afr",
["Nhóm ngôn ngữ Aram"] = "sem-ara",
["Nhóm ngôn ngữ Aram Tây"] = "sem-arw",
["Nhóm ngôn ngữ Aram Đông"] = "sem-are",
["Nhóm ngôn ngữ Arapahoe"] = "alg-ara",
["Nhóm ngôn ngữ Asli"] = "mkh-asl",
["Nhóm ngôn ngữ Atayal"] = "map-ata",
["Nhóm ngôn ngữ Avar-Andic"] = "cau-ava",
["Nhóm ngôn ngữ Bahnar"] = "mkh-ban",
["Nhóm ngôn ngữ Bahnar Bắc"] = "mkh-nbn",
["Nhóm ngôn ngữ Balt-Slav"] = "ine-bsl",
["Nhóm ngôn ngữ Bantoid"] = "nic-bod",
["Nhóm ngôn ngữ Bantoid-Cross"] = "nic-bcr",
["Nhóm ngôn ngữ Bantu"] = "bnt",
["Nhóm ngôn ngữ Basaa"] = "bnt-bsa",
["Nhóm ngôn ngữ Bengal-Assam"] = "inc-bas",
["Nhóm ngôn ngữ Benue-Congo"] = "nic-bco",
["Nhóm ngôn ngữ Berber"] = "ber",
["Nhóm ngôn ngữ Bihar"] = "inc-bih",
["Nhóm ngôn ngữ Bisa-Busa"] = "dmn-bbu",
["Nhóm ngôn ngữ Bod"] = "sit-bdi",
["Nhóm ngôn ngữ Bod Đông"] = "sit-ebo",
["Nhóm ngôn ngữ Britton"] = "cel-bry",
["Nhóm ngôn ngữ Bungku-Tolaki"] = "poz-btk",
["Nhóm ngôn ngữ Bạch"] = "sit-bai",
["Nhóm ngôn ngữ Bạch Bắc"] = "sit-nba",
["Nhóm ngôn ngữ Bắc Bantoid"] = "nic-bdn",
["Nhóm ngôn ngữ Bắc Borneo"] = "poz-bnn",
["Nhóm ngôn ngữ Bắc Lưu Cầu"] = "jpx-nry",
["Nhóm ngôn ngữ Bắc Ấn-Arya"] = "inc-nor",
["Nhóm ngôn ngữ Bắc-Trung Edoid"] = "alv-nce",
["Nhóm ngôn ngữ Bố Ương"] = "qfa-buy",
["Nhóm ngôn ngữ Bối-Cát Triệu"] = "qfa-bej",
["Nhóm ngôn ngữ Bối-Thái"] = "qfa-bet",
["Nhóm ngôn ngữ Canaan"] = "sem-can",
["Nhóm ngôn ngữ Castilla"] = "roa-cas",
["Nhóm ngôn ngữ Celebes"] = "poz-clb",
["Nhóm ngôn ngữ Celt"] = "cel",
["Nhóm ngôn ngữ Celt hải đảo"] = "cel-ins",
["Nhóm ngôn ngữ Chukotka"] = "qfa-ckn",
["Nhóm ngôn ngữ Châu Đại Dương"] = "poz-oce",
["Nhóm ngôn ngữ Chăm"] = "cmc",
["Nhóm ngôn ngữ Cushit"] = "cus",
["Nhóm ngôn ngữ Cơ Tu"] = "mkh-kat",
["Nhóm ngôn ngữ Dard"] = "inc-dar",
["Nhóm ngôn ngữ Dizi"] = "omv-diz",
["Nhóm ngôn ngữ Edoid"] = "alv-edo",
["Nhóm ngôn ngữ Eskimo-Aleut"] = "esx",
["Nhóm ngôn ngữ Ewenic"] = "tuw-ewe",
["Nhóm ngôn ngữ Finn"] = "urj-fin",
["Nhóm ngôn ngữ Gbe"] = "alv-gbe",
["Nhóm ngôn ngữ German"] = "gem",
["Nhóm ngôn ngữ German Biển Bắc"] = "gmw-nsg",
["Nhóm ngôn ngữ German Bắc"] = "gmq",
["Nhóm ngôn ngữ German Tây"] = "gmw",
["Nhóm ngôn ngữ Gruzia-Zan"] = "ccs-gzn",
["Nhóm ngôn ngữ Heiban"] = "alv-hei",
["Nhóm ngôn ngữ Hlai"] = "qfa-lic",
["Nhóm ngôn ngữ Hà Nhì"] = "tbq-han",
["Nhóm ngôn ngữ Hán"] = "zhx",
["Nhóm ngôn ngữ Hán-Bạch"] = "sit-sba",
["Nhóm ngôn ngữ Hạ Franken"] = "gmw-frk",
["Nhóm ngôn ngữ Iberia-Rôman"] = "roa-ibe",
["Nhóm ngôn ngữ Iran"] = "ira",
["Nhóm ngôn ngữ Jukunoid"] = "nic-jkn",
["Nhóm ngôn ngữ Kaili-Pamona"] = "poz-kal",
["Nhóm ngôn ngữ Kainji"] = "nic-knj",
["Nhóm ngôn ngữ Kannada"] = "dra-kan",
["Nhóm ngôn ngữ Karen"] = "kar",
["Nhóm ngôn ngữ Karluk"] = "trk-kar",
["Nhóm ngôn ngữ Kauru"] = "nic-kau",
["Nhóm ngôn ngữ Kham"] = "sit-kha",
["Nhóm ngôn ngữ Khasi"] = "aav-khs",
["Nhóm ngôn ngữ Khmer"] = "mkh-kmr",
["Nhóm ngôn ngữ Khơ Mú"] = "mkh-khm",
["Nhóm ngôn ngữ Kipchak"] = "trk-kip",
["Nhóm ngôn ngữ Kipchak-Bulgar"] = "trk-kbu",
["Nhóm ngôn ngữ Kipchak-Nogai"] = "trk-kno",
["Nhóm ngôn ngữ Koman"] = "ssa-kom",
["Nhóm ngôn ngữ Kru"] = "kro",
["Nhóm ngôn ngữ Kuki-Chin"] = "tbq-kuk",
["Nhóm ngôn ngữ Kurd"] = "ku",
["Nhóm ngôn ngữ Kutubuan"] = "paa-kut",
["Nhóm ngôn ngữ Kwa"] = "alv-kwa",
["Nhóm ngôn ngữ Ladakh-Balti"] = "sit-lab",
["Nhóm ngôn ngữ Lechite"] = "zlw-lch",
["Nhóm ngôn ngữ Liên Mông Cổ"] = "qfa-xgx",
["Nhóm ngôn ngữ Lô Lô"] = "tbq-lol",
["Nhóm ngôn ngữ Lô Lô Bắc"] = "tbq-nlo",
["Nhóm ngôn ngữ Lô Lô Nam"] = "tbq-slo",
["Nhóm ngôn ngữ Lô Lô Đông Nam"] = "tbq-sel",
["Nhóm ngôn ngữ Lô Lô–Miến"] = "tbq-lob",
["Nhóm ngôn ngữ Lưu Cầu"] = "jpx-ryu",
["Nhóm ngôn ngữ Mande"] = "dmn",
["Nhóm ngôn ngữ Manobo"] = "mno",
["Nhóm ngôn ngữ Mansi"] = "mns",
["Nhóm ngôn ngữ Masa"] = "cdc-mas",
["Nhóm ngôn ngữ Media-Parthia"] = "ira-mpr",
["Nhóm ngôn ngữ Mixtec"] = "omq-mxt",
["Nhóm ngôn ngữ Miến"] = "tbq-brm",
["Nhóm ngôn ngữ Miến-Khương"] = "tbq-buq",
["Nhóm ngôn ngữ Miền"] = "hmx-mie",
["Nhóm ngôn ngữ Monguor"] = "mjg",
["Nhóm ngôn ngữ Muna-Buton"] = "poz-mun",
["Nhóm ngôn ngữ Munda"] = "mun",
["Nhóm ngôn ngữ Mã Lai"] = "poz-mly",
["Nhóm ngôn ngữ Mã Lai-Chăm"] = "poz-mcm",
["Nhóm ngôn ngữ Mã Lai-Sumbawa"] = "poz-msa",
["Nhóm ngôn ngữ Mã Lai-Đa Đảo"] = "poz",
["Nhóm ngôn ngữ Mã Lai-Đa Đảo Trung-Đông"] = "poz-cet",
["Nhóm ngôn ngữ Mã Lai-Đa Đảo Đông"] = "pqe",
["Nhóm ngôn ngữ Môn"] = "mkh-mnc",
["Nhóm ngôn ngữ Môn-Khmer"] = "mkh",
["Nhóm ngôn ngữ Mảng"] = "mkh-mng",
["Nhóm ngôn ngữ Nahua"] = "azc-nah",
["Nhóm ngôn ngữ Nahua Durango"] = "azc-dur",
["Nhóm ngôn ngữ Nahua Huasteca"] = "azc-hua",
["Nhóm ngôn ngữ Nakh"] = "cau-nkh",
["Nhóm ngôn ngữ Nam Bantoid"] = "nic-bds",
["Nhóm ngôn ngữ Nam Cushit"] = "cus-sou",
["Nhóm ngôn ngữ Nam Dravida"] = "dra-sou",
["Nhóm ngôn ngữ Nam Dravida I"] = "dra-sdo",
["Nhóm ngôn ngữ Nam Dravida II"] = "dra-sdt",
["Nhóm ngôn ngữ Nam Lưu Cầu"] = "jpx-sry",
["Nhóm ngôn ngữ Nam Mông Cổ"] = "xgn-sou",
["Nhóm ngôn ngữ Nam Ả Rập hiện đại"] = "sem-sar",
["Nhóm ngôn ngữ Nawiki"] = "awd-nwk",
["Nhóm ngôn ngữ Nicobar"] = "aav-nic",
["Nhóm ngôn ngữ Numic"] = "azc-num",
["Nhóm ngôn ngữ Nung"] = "sit-nng",
["Nhóm ngôn ngữ Nyasa"] = "bnt-nys",
["Nhóm ngôn ngữ Nữ Chân"] = "tuw-jrc",
["Nhóm ngôn ngữ Oghur"] = "trk-ogr",
["Nhóm ngôn ngữ Oghuz"] = "trk-ogz",
["Nhóm ngôn ngữ Omo"] = "omv",
["Nhóm ngôn ngữ Ormur-Parachi"] = "ira-orp",
["Nhóm ngôn ngữ Osco-Umbria"] = "itc-sbl",
["Nhóm ngôn ngữ Pahari"] = "inc-pah",
["Nhóm ngôn ngữ Palaung"] = "mkh-pal",
["Nhóm ngôn ngữ Paman"] = "aus-pmn",
["Nhóm ngôn ngữ Pano"] = "sai-pan",
["Nhóm ngôn ngữ Pear"] = "mkh-pea",
["Nhóm ngôn ngữ Philippines"] = "phi",
["Nhóm ngôn ngữ Piman"] = "azc-pim",
["Nhóm ngôn ngữ Plateau"] = "nic-plt",
["Nhóm ngôn ngữ Platoid"] = "nic-pla",
["Nhóm ngôn ngữ Pnar-Khasi-Lyngngam"] = "aav-pkl",
["Nhóm ngôn ngữ Rajasthan"] = "raj",
["Nhóm ngôn ngữ Rôman"] = "roa",
["Nhóm ngôn ngữ Sa Pa-Thái Tây Nam"] = "tai-sap",
["Nhóm ngôn ngữ Sabah"] = "poz-san",
["Nhóm ngôn ngữ Sac-Fox-Kickapoo"] = "alg-sfk",
["Nhóm ngôn ngữ Saka-Wakhi"] = "xsc-skw",
["Nhóm ngôn ngữ Saluan-Banggai"] = "poz-slb",
["Nhóm ngôn ngữ Sama-Bajaw"] = "poz-sbj",
["Nhóm ngôn ngữ Sami"] = "smi",
["Nhóm ngôn ngữ Samoyed"] = "syd",
["Nhóm ngôn ngữ Sarmatia"] = "xsc-sar",
["Nhóm ngôn ngữ Savanna"] = "alv-sav",
["Nhóm ngôn ngữ Scythia"] = "xsc",
["Nhóm ngôn ngữ Selkup"] = "sel",
["Nhóm ngôn ngữ Semit"] = "sem",
["Nhóm ngôn ngữ Semit Ethiopia"] = "sem-eth",
["Nhóm ngôn ngữ Semit Trung"] = "sem-cen",
["Nhóm ngôn ngữ Semit Tây"] = "sem-wes",
["Nhóm ngôn ngữ Semit Tây Bắc"] = "sem-nwe",
["Nhóm ngôn ngữ Semit Đông"] = "sem-eas",
["Nhóm ngôn ngữ Senegambia"] = "alv-sng",
["Nhóm ngôn ngữ Senufo"] = "alv-snf",
["Nhóm ngôn ngữ Shirongol"] = "xgn-shr",
["Nhóm ngôn ngữ Shughni-Roshani"] = "ira-shr",
["Nhóm ngôn ngữ Shughni-Yazghulami-Munji"] = "ira-sym",
["Nhóm ngôn ngữ Sira"] = "bnt-sir",
["Nhóm ngôn ngữ Slav Nam"] = "zls",
["Nhóm ngôn ngữ Slav Tây"] = "zlw",
["Nhóm ngôn ngữ Slav Đông"] = "zle",
["Nhóm ngôn ngữ Somali"] = "cus-som",
["Nhóm ngôn ngữ Songhay"] = "son",
["Nhóm ngôn ngữ Talodi-Heiban"] = "alv-the",
["Nhóm ngôn ngữ Tamang"] = "sit-tam",
["Nhóm ngôn ngữ Tamil-Kannada"] = "dra-tkn",
["Nhóm ngôn ngữ Tangkhul"] = "sit-tng",
["Nhóm ngôn ngữ Tchad"] = "cdc",
["Nhóm ngôn ngữ Telugu"] = "dra-tel",
["Nhóm ngôn ngữ Thái"] = "tai",
["Nhóm ngôn ngữ Thái Bắc"] = "tai-nor",
["Nhóm ngôn ngữ Thái Sùng Tả"] = "tai-cho",
["Nhóm ngôn ngữ Thái Trung tâm"] = "tai-cen",
["Nhóm ngôn ngữ Thái Tây Nam"] = "tai-swe",
["Nhóm ngôn ngữ Thái-Long"] = "sit-cln",
["Nhóm ngôn ngữ Thổ Gia"] = "sit-tja",
["Nhóm ngôn ngữ Timor"] = "poz-tim",
["Nhóm ngôn ngữ Tivoid"] = "nic-tiv",
["Nhóm ngôn ngữ Tiểu Á"] = "ine-ana",
["Nhóm ngôn ngữ Triqui"] = "omq-tri",
["Nhóm ngôn ngữ Trung Cushit"] = "cus-cen",
["Nhóm ngôn ngữ Trung Mông Cổ"] = "xgn-cen",
["Nhóm ngôn ngữ Trung Plateau"] = "nic-plc",
["Nhóm ngôn ngữ Trung Tchad"] = "cdc-cbm",
["Nhóm ngôn ngữ Trung Thái Bình Dương"] = "poz-pcc",
["Nhóm ngôn ngữ Trung-Đông Châu Đại Dương"] = "poz-occ",
["Nhóm ngôn ngữ Tsou"] = "map-tsu",
["Nhóm ngôn ngữ Tulu-Koraga"] = "dra-tlk",
["Nhóm ngôn ngữ Turk chung"] = "trk-cmn",
["Nhóm ngôn ngữ Tày"] = "tai-tay",
["Nhóm ngôn ngữ Tân Aram Trung"] = "sem-cna",
["Nhóm ngôn ngữ Tây Barito"] = "poz-brw",
["Nhóm ngôn ngữ Tây Britton"] = "cel-brw",
["Nhóm ngôn ngữ Tây Bắc Iran"] = "ira-nwi",
["Nhóm ngôn ngữ Tây Bắc Sumatra"] = "poz-nws",
["Nhóm ngôn ngữ Tây Châu Đại Dương"] = "poz-ocw",
["Nhóm ngôn ngữ Tây Iran"] = "ira-wes",
["Nhóm ngôn ngữ Tây Nam Britton"] = "cel-brs",
["Nhóm ngôn ngữ Tây Nam Iran"] = "ira-swi",
["Nhóm ngôn ngữ Tây Nam Pama–Nyungar"] = "aus-psw",
["Nhóm ngôn ngữ Tây Rôman"] = "roa-wes",
["Nhóm ngôn ngữ Tây Scandinavia"] = "gmq-wes",
["Nhóm ngôn ngữ Tây Tchad"] = "cdc-wst",
["Nhóm ngôn ngữ Tây Ấn-Aryan"] = "inc-wes",
["Nhóm ngôn ngữ Tạng"] = "sit-tib",
["Nhóm ngôn ngữ Tạng-Miến"] = "tbq",
["Nhóm ngôn ngữ Udeghe"] = "tuw-udg",
["Nhóm ngôn ngữ Việt"] = "mkh-vie",
["Nhóm ngôn ngữ Volta-Congo"] = "nic-vco",
["Nhóm ngôn ngữ Volta-Niger"] = "alv-von",
["Nhóm ngôn ngữ Văn Ma-Thái Tây Nam"] = "tai-wen",
["Nhóm ngôn ngữ Wotu-Wolio"] = "poz-wot",
["Nhóm ngôn ngữ Yekhee"] = "alv-yek",
["Nhóm ngôn ngữ Zaza-Goran"] = "ira-zgr",
["Nhóm ngôn ngữ biệt lập"] = "qfa-iso",
["Nhóm ngôn ngữ gốc Balt"] = "bat",
["Nhóm ngôn ngữ gốc Hy Lạp"] = "grk",
["Nhóm ngôn ngữ gốc Slav"] = "sla",
["Nhóm ngôn ngữ gốc Ý"] = "itc",
["Nhóm ngôn ngữ Ý-Tây Rôman"] = "roa-iwr",
["Nhóm ngôn ngữ Đa Đảo"] = "poz-pol",
["Nhóm ngôn ngữ Đa Đảo hạt nhân"] = "poz-pnp",
["Nhóm ngôn ngữ Đông Algonquin"] = "alg-eas",
["Nhóm ngôn ngữ Đông Balt"] = "bat-eas",
["Nhóm ngôn ngữ Đông Barito"] = "poz-bre",
["Nhóm ngôn ngữ Đông Bắc Iran"] = "ira-nei",
["Nhóm ngôn ngữ Đông Cushit"] = "cus-eas",
["Nhóm ngôn ngữ Đông Cushit Cao nguyên"] = "cus-hec",
["Nhóm ngôn ngữ Đông Kainji"] = "nic-kne",
["Nhóm ngôn ngữ Đông Mande"] = "dmn-mde",
["Nhóm ngôn ngữ Đông Nam Iran"] = "ira-sei",
["Nhóm ngôn ngữ Đông Nam Solomon"] = "poz-sls",
["Nhóm ngôn ngữ Đông Scandinavia"] = "gmq-eas",
["Nhóm ngôn ngữ Đông Tchad"] = "cdc-est",
["Nhóm ngôn ngữ Đông Ấn-Arya"] = "inc-eas",
["Nhóm ngôn ngữ Đại Bạch"] = "sit-mba",
["Nhóm ngôn ngữ Đại Magar"] = "sit-gma",
["Nhóm ngôn ngữ Đại Tây Dương-Congo"] = "alv",
["Nhóm ngôn ngữ Động-Thủy"] = "qfa-kms",
["Nhóm ngôn ngữ Đức cao địa"] = "gmw-hgm",
["Nhóm ngôn ngữ Ả Rập"] = "sem-arb",
["Nhóm ngôn ngữ Ấn-Arya"] = "inc",
["Nhóm ngôn ngữ Ấn-Arya cổ"] = "inc-old",
["Nhóm ngôn ngữ Ấn-Arya trung đại"] = "inc-mid",
["Nhóm ngôn ngữ Ấn-Iran"] = "iir",
["not a family"] = "qfa-not",
["sign"] = "sgn",
["Tiếng Hindustan"] = "inc-hnd",
["Nhóm ngôn ngữ Iran trung đại"] = "ira-mid",
}
livurrgyf29gg9dl07sn410rjgbu3lu
Mô đun:sa-decl
828
293666
2572839
2571618
2026-10-23T00:52:32Z
Hiyuune
50834
2572839
Scribunto
text/plain
--[==[
This module implements the declension tables of Sanskrit nouns, pronouns and numerals ({{tl|sa-ndecl}}) and of
adjectives ({{tl|sa-adecl}}).
Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of
[[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026.
TERMINOLOGY:
* "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an
inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`.
* "stem class" = A way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in
[[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head
minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`.
* "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table.
* "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options
in force when it was added. A table is made of the forms of its groups, each joined with `join` in
[[Module:sa-utilities]].
Everything is worked out in SLP1 and shown in the script of the head (or of the page name), with the IAST below.
The classes, by area:
* The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion
between the input script and SLP1).
* The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method
per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group).
* The result: `Declension` (one table, with the forms of every slot, its notes and its categories),
`AdjectiveDeclension` (the tables of an adjective) and `TableRenderer` (the wikitext of a table).
Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData),
[[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an
adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in
the cells).
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
sa_utilities = "Module:sa-utilities",
scripts = "Module:scripts",
utilities = "Module:utilities",
},
loadData = {
data = "Module:sa-decl/data",
headword_data = "Module:headword/data",
},
lazy = {
lang = function() return require("Module:languages").getByCode("sa") end,
},
}
------------------------------------------------------------------------------------------------------------------------
-- Script --
------------------------------------------------------------------------------------------------------------------------
--[==[
Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the
head; if the head is in IAST (i.e. Latin), it is the script of the page name, and failing that, Devanagari. Latin input
is read as IAST, and anything else goes through the display script's converter.
]==]
local ScriptBridge = {}
ScriptBridge.__index = ScriptBridge
function ScriptBridge.new(head, pagename)
local script = M.lang:findBestScript(head)
if script:getCode() == "None" then
script = M.lang:findBestScript(pagename)
end
if script:getCode() == "None" then
script = M.scripts.getByCode("Deva")
end
local code = script:getCode()
return setmetatable({
script = script,
code = code,
from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr,
to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr,
from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr,
to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr,
}, ScriptBridge)
end
function ScriptBridge:toSlp1(text)
if M.lang:findBestScript(text):getCode() == "None" then
return self.from_iast(text)
end
return self.from_native(text)
end
-- Only Devanagari shows the accents, so strip them for any other script.
function ScriptBridge:toNative(slp1)
if self.code ~= "Deva" then
slp1 = string.gsub(slp1, M.sa_utilities.accent, "")
end
return self.to_native(slp1)
end
function ScriptBridge:toIast(slp1)
return self.to_iast(slp1)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of
`template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the
page name), and `indicators`, keyed by name. An indicator's value is {true} for a flag, a Spec (or a list of them) for
a spec value, a list for a list indicator and the string given otherwise. A spec value (the feminine and neuter heads
of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then takes only the
indicators that apply to a single stem.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Split `text` at `separator` (a Lua pattern), except inside angle brackets.
local function split_outside_brackets(text, separator)
local parts = {}
local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">")
for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do
table.insert(parts, table.concat(group))
end
return parts
end
function Spec.parse(text, template, nested)
text = mw.text.trim(text)
local spec = setmetatable({head = text, indicators = {}}, Spec)
local registry = M.data.indicators[template]
local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">")
if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then
spec_error("Only one <...> may follow the head", text)
end
spec.head = mw.text.trim(segments[1])
if string.find(spec.head, ",", 1, true) then
spec_error("The head is one form", text)
end
local needs_gender = template == "noun" and not nested
if #segments == 1 then
if needs_gender then
spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text)
end
return spec
end
local inside = string.match(segments[2], "^<(.*)>$")
local groups = {}
for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do
local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$")
if not name then
name = mw.text.trim(indicator)
end
local definition = registry[name]
if definition and definition.alias then
name = definition.alias
definition = registry[name]
end
if not definition or nested and (definition.value == "spec" or definition.group == "gender") then
local names = {}
for known, known_definition in pairs(registry) do
if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then
table.insert(names, known)
end
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text)
end
if spec.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), text)
end
if definition.group and definition.group ~= "numbers" then
if groups[definition.group] then
spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text)
end
groups[definition.group] = name
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), text)
end
if definition.value == nil then
value = true
elseif definition.value == "spec" then
if definition.list then
local specs = {}
for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do
table.insert(specs, Spec.parse(item, template, true))
end
value = specs
else
value = Spec.parse(value, template, true)
end
elseif definition.list then
local values = mw.text.split(value, "%s*,%s*")
for _, item in ipairs(values) do
if definition.values and not definition.values[item] then
spec_error(("'%s' is not a value of '%s'"):format(item, name), text)
end
end
value = values
elseif definition.values and not definition.values[value] then
local values = {}
for known in pairs(definition.values) do
table.insert(values, known)
end
table.sort(values)
spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")),
text)
end
spec.indicators[name] = value
end
-- A manual table can do without a gender.
if needs_gender and not groups.gender and not spec.indicators.manual then
spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text)
end
return spec
end
--[==[
Return the stem properties (see `export.decline_table`) set by the indicators of the spec, on top of `inherited`. Their
values are converted to SLP1 with `bridge`. For one of an adjective's heads, `inherited` holds the adjective's shared
properties.
]==]
function Spec:properties(bridge, inherited)
local properties = {}
for key, value in pairs(inherited or {}) do
properties[key] = value
end
local indicators = self.indicators
if indicators.root then
properties.root = true
elseif indicators.nonroot then
properties.root = false
end
if indicators.contract then
properties.contract = true
elseif indicators.nocontract then
properties.contract = false
end
for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate",
participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l",
husband = "husband"}) do
if indicators[name] then
properties[property] = true
end
end
if indicators.r then
properties.r = bridge.from_iast(indicators.r)
end
if indicators.final then
properties.final = bridge.from_iast(indicators.final)
end
if indicators.feminine then
properties.feminine = {}
for _, form in ipairs(indicators.feminine) do
table.insert(properties.feminine, bridge:toSlp1(form))
end
end
if indicators.sg or indicators.du or indicators.pl then
properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl}
end
-- The pronominal declension is never a root declension, even for a monosyllable such as tā́.
if properties.pron then
properties.root = false
end
return properties
end
------------------------------------------------------------------------------------------------------------------------
-- Overrides --
------------------------------------------------------------------------------------------------------------------------
--[==[
The cell parameters. `Overrides.parse` takes their values by slot and puts them in `slots`, each as a list of
`{written = FORM, footnotes = {...}}`. A value is a comma-separated list of forms, each followed by any `[footnote]`s;
a form of `-` means no form.
]==]
local Overrides = {}
Overrides.__index = Overrides
function Overrides.parse(values)
local overrides = setmetatable({slots = {}}, Overrides)
for slot, value in pairs(values) do
local forms = {}
local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do
local footnotes = {}
for i = 2, #group - 1, 2 do
if mw.text.trim(group[i + 1]) ~= "" then
error(("Text after a footnote in %s=%s"):format(slot, value), 0)
end
table.insert(footnotes, string.match(group[i], "^%[(.*)%]$"))
end
local form = mw.text.trim(group[1])
if form ~= "" then
table.insert(forms, {written = form, footnotes = footnotes})
end
end
overrides.slots[slot] = forms
end
return overrides
end
------------------------------------------------------------------------------------------------------------------------
-- Analysis --
------------------------------------------------------------------------------------------------------------------------
-- The cases of the pronouns, which have no vocative.
local CASES_WITHOUT_VOCATIVE = {"nom", "acc", "ins", "dat", "abl", "gen", "loc"}
--[==[
A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id
of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or
`unless` property into account), along with the stem the pattern captures, or {nil} if no class matches.
]==]
local Head = {}
Head.__index = Head
function Head.new(slp1)
return setmetatable({slp1 = slp1}, Head)
end
function Head:detectClass(gender, properties)
for _, class in ipairs(M.data.classes) do
if class.genders[gender] then
for _, pattern in ipairs(class.patterns) do
local text, when, unless = pattern, nil, nil
if type(pattern) == "table" then
text, when, unless = pattern[1], pattern.when, pattern.unless
end
if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then
local stem = string.match(self.slp1, text)
if stem then
return class.id, stem
end
end
end
end
end
return nil
end
--[==[
One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent`
is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and
`options` is a copy of the analysis's sandhi options at the time the group was added.
]==]
local FormGroup = {}
FormGroup.__index = FormGroup
function FormGroup.new(fields)
return setmetatable(fields, FormGroup)
end
--[==[
The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of
an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads
the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (usually the head's final
accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group
copies when it is added. The method's results are the list of `groups`, the `type` (a key of `data.types`), the
`categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). A word with fewer
numbers or cases than its class can also set `numbers` (the numbers shown unless the call gives others) and `cases`
(codes of `data.cases`).
]==]
local Analysis = {}
Analysis.__index = Analysis
function Analysis.new(input)
local properties = input.properties
local accented = string.match(input.head, M.sa_utilities.accent) ~= nil
local analysis = setmetatable({
head = input.head,
gender = input.gender,
adjective = input.adjective or false,
properties = properties,
links = input.links or {},
class = input.class,
accent = "",
stems = {base = input.base},
options = {
accented = accented,
initial_svarita = properties.svarita or false,
root_han = properties.han or false,
},
groups = {},
type = nil,
categories = {},
general_notes = {},
numbers = nil,
cases = nil,
}, Analysis)
-- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita.
if accented and analysis:inLexicon("initial_svarita") then
analysis.options.initial_svarita = true
end
return analysis
end
--[==[
Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the
group, e.g. to use a different `accent`.
]==]
function Analysis:add(set, extra)
if not M.data.endings[self.class][set] then
error(("Internal error: no set '%s' of the %s endings"):format(set, self.class))
end
local options, stems = {}, {}
for key, value in pairs(self.options) do
options[key] = value
end
for key, value in pairs(self.stems) do
stems[key] = value
end
local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head,
options = options}
for key, value in pairs(extra or {}) do
group[key] = value
end
table.insert(self.groups, FormGroup.new(group))
end
function Analysis:category(key)
table.insert(self.categories, key)
end
function Analysis:generalNote(key)
table.insert(self.general_notes, key)
end
-- Return true if the list `name` of `data.lexicon` takes the base stem (or the head, if the list's `subject` is
-- `head`): one of its `patterns` matches and none of its `except` patterns does.
function Analysis:inLexicon(name)
local list = M.data.lexicon[name]
local subject = list.subject == "head" and self.head or self.stems.base
for _, pattern in ipairs(list.except or {}) do
if string.match(subject, pattern) then
return false
end
end
for _, pattern in ipairs(list.patterns) do
if string.match(subject, pattern) then
return true
end
end
return false
end
function Analysis:headMatches(pattern)
return string.match(self.head, pattern) ~= nil
end
function Analysis:baseMatches(pattern)
return string.match(self.stems.base, pattern) ~= nil
end
function Analysis:monosyllabic()
return M.sa_utilities.is_monosyllabic(self.head)
end
-- Return the head's accent wherever it falls: "/" if it has one, else "".
function Analysis:headAccent()
return string.find(self.head, "/", 1, true) and "/" or ""
end
--[==[
Add the set `set` of whole forms, which follow `prefix` (what comes before them in the head, usually nothing). `@` in
them is the head's accent wherever it falls.
]==]
function Analysis:addWholeForms(set, prefix)
self.accent = self:headAccent()
self.stems.base = prefix
self:add(set)
end
--[==[
Make the stems of a class ending in `vowel`, besides `base`. Each is the base plus the following: the vowel
(`final_unaccented`); the vowel raised one grade, with and without the head's final accent (`raised`,
`raised_unaccented`); the lengthened vowel, likewise (`lengthened`, `lengthened_unaccented`); ''a'' with the head's
accent, followed by ''v'' (`raised_glide`); and the vowel's semivowel (`glide`). A stem whose vowel has no such grade or
semivowel is not made.
]==]
function Analysis:vowelStems(vowel)
local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent
local function stem(key, ending)
if ending then
self.stems[key] = base .. ending
end
end
stem("final_unaccented", vowel)
stem("raised", utilities.up_one_grade[vowel .. accent])
stem("raised_unaccented", utilities.up_one_grade[vowel])
stem("lengthened", utilities.lengthen[vowel .. accent])
stem("lengthened_unaccented", utilities.lengthen[vowel])
stem("raised_glide", "a" .. accent .. "v")
stem("glide", utilities.vowel_to_cons[vowel])
end
-- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; aṣṭā́ (or aṣṭaú); and páñca(n)
-- and the like (Whitney §483). The numerals 1–4 have genders, so <num> on them is an error whose message gives the
-- call to use (Whitney §482).
function Analysis:numeral()
for _, numeral in ipairs(M.data.adjective_numerals) do
if self:headMatches(numeral.pattern) then
error(("The numerals 1–4 have genders and are declined as adjectives: %s"):format(numeral.call), 0)
end
end
self.type = "numeral"
if self:headMatches("^azw[AO]/?$") then
-- Accented on the ending throughout.
self.accent = self:headAccent()
self:add("ashtau")
self:category("numeral_an")
return
end
self.accent = string.match(self.head, "(/?)[nz]?$")
if self:headMatches("a/?z$") then
self:add("sas")
self:category("numeral_s")
elseif self:headMatches("ti$") then
self:add("ti")
self:category("numeral_i")
else
self:add(self:headMatches("^azwa/?$") and "ashta_direct" or "an_direct")
-- The oblique endings take the head's own accent, wherever it falls.
self:add("an_oblique", {accent = self:headAccent()})
self:category("numeral_an")
end
end
-- The a-stems, masculine and neuter, including the pronominal declension. The pronouns ta, eta, tya, ya and ka (when
-- accented) and the adjectives of Whitney §523 are pronominal by themselves, the others with <pron>. With <pron>, the
-- adjectives of §525 have the pronominal and the nominal forms side by side.
function Analysis:aStem()
self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$")
local pronoun = self:isPronoun()
local always_pronominal = pronoun or self:inLexicon("pronominal_adjective")
local pronominal = self.properties.pron or always_pronominal
local pronominal_and_nominal = self.properties.pron and self:inLexicon("optional_pronominal")
self.type = pronominal and "pronominal_a" or "a"
-- A stem-final s doesn't become ṣ (ṛbīsa, bisa).
self.options.keep_stem_s = true
self:pronominalNumbersAndCases(pronoun, pronominal)
if self.gender == "m" then
self:add(pronoun and self:inLexicon("s_nominative") and "s_masculine_nominative" or "masculine_nominative")
self:add("masculine_direct")
self:add(pronominal_and_nominal and "pronominal_and_nominal_masculine_plural"
or pronominal and "pronominal_masculine_plural" or "masculine_plural")
else
-- The nom.-acc. sing. is in -at in the words that are pronominal by themselves (ka has kím, beside the Vedic
-- kát), and in -am in the others (Whitney §496a, §524).
self:add(pronoun and self:inLexicon("ka") and "ka_neuter_nominative"
or always_pronominal and "pronominal_neuter_nominative" or "neuter_nominative")
self:add("neuter_direct")
end
if pronominal_and_nominal then
self:add("pronominal_and_nominal_oblique")
elseif pronominal then
self:add(pronoun and self:headMatches("^ta/?$") and "ta_oblique" or self:inLexicon("visva") and "visva_oblique"
or self:inLexicon("eka") and "eka_oblique" or "pronominal_oblique")
else
self:add("nominal_oblique")
self:add(self:inLexicon("vedic_genitive_plural_am") and "genitive_plural_am" or "nominal_genitive_plural")
end
self:add("oblique")
-- The Vedic instrumental singular in -ā, of the oxytone abstracts in -tva(na) (Lanman p.335f.) and a few
-- others, and the one in -enā.
if self:headMatches("tva?n?a/$") or self:inLexicon("vedic_instrumental_a") then
self:add("instrumental_vedic_a")
else
self:add((self:inLexicon("vedic_instrumental_ena") or pronoun and self:inLexicon("pronoun_instrumental_ena"))
and "instrumental_vedic_ena" or "instrumental")
end
-- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a), as in yós (Whitney §509a).
self:add((self:baseMatches(".y$") or pronoun and self:baseMatches("^y$")) and "genitive_dual_after_y"
or "genitive_dual")
self:category("a")
end
-- Return true if the head is one of the pronouns of `data.lexicon.pronoun`: accented, or given <pron>.
function Analysis:isPronoun()
return self:inLexicon("pronoun") and (self.options.accented or self.properties.pron == true)
end
-- Set the numbers and cases of the a- and ā-stems that have fewer: the pronouns have no vocative, dvá is dual only
-- and the pronominal éka has no dual (Whitney §482a, d).
function Analysis:pronominalNumbersAndCases(pronoun, pronominal)
if pronoun then
self.cases = CASES_WITHOUT_VOCATIVE
end
if self:inLexicon("dva") then
self.numbers = {d = true}
elseif pronominal and self:inLexicon("eka") then
self.numbers = {s = true, p = true}
end
-- The nominative stem of sá, eṣá and syá, with s for t (Whitney §495a, §499).
if pronoun and self:inLexicon("s_nominative") then
self.stems.nominative = string.gsub(string.gsub(self.stems.base, "t(y?)$", "s%1"), "es$", "ez")
end
end
-- The i- and u-stems.
function Analysis:shortIUStem()
local utilities = M.sa_utilities
local vowel, accent = string.match(self.head, "([iu])(/?)$")
self.accent = accent
self.type = vowel
self:vowelStems(vowel)
if self:inLexicon("tri") then
-- Plural only, with the gen. of trayá (Whitney §482e).
if self.gender == "f" then
error("The feminine of trí is tisṛ́.", 0)
end
self.type = "numeral"
self.numbers = {p = true}
self:add(self.gender == "m" and "tri_masculine" or "tri_neuter")
self:add("tri_oblique")
return
end
if self.properties.husband and not self:inLexicon("pati") then
error("Only páti takes <husband>.", 0)
end
local genitive = "genitive"
if self:inLexicon("sakhi") then
self:add("sakhi")
elseif self.gender == "m" then
if self.properties.husband then
self:add("husband")
else
if self:inLexicon("strong_masculine_i_u") then
self:add("strong_masculine_singular")
else
self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic"
or "masculine_instrumental")
self:add("masculine_dative_ablative")
end
if vowel == "i" then
-- Whitney §336f
self:add("masculine_locative_i")
elseif self:inLexicon("rigvedic_locative_u") then
self:add("masculine_locative_u_rigvedic")
else
self:add("masculine_locative")
end
end
if self:inLexicon("krostu") then
-- The strong cases are those of kroṣṭṛ́, with the head's own accent (Whitney §343k).
self.stems.agent = string.gsub(self.stems.base, utilities.accent, "")
self:add("krostu_strong", {accent = self:headAccent()})
self:add("krostu_weak")
else
self:add(self:inLexicon("ari") and "ari_direct" or self:inLexicon("vi") and "vi_direct"
or "masculine_direct")
end
elseif self.gender == "f" then
self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u")
self:add("feminine")
self:add("feminine_" .. vowel)
if self:inLexicon("jani") then
genitive = "jani_genitive"
end
else
if self:inLexicon("weakest_from_an") then
-- The weakest cases are those of akṣán etc., with the head's own accent (Whitney §431).
self.stems.an_stem = string.gsub(self.stems.base, utilities.accent, "")
self:add("weakest_from_an", {accent = self:headAccent()})
genitive = nil
-- Adjectives and nouns differ in the neuter (Whitney §344).
elseif self.adjective then
self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective"
or "neuter_adjective_dative_ablative")
self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u")
self:add("neuter_adjective_genitive_dual")
else
self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative")
self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u")
self:add("neuter_noun_genitive_dual")
end
self:add("neuter_direct")
if genitive then
self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental")
end
end
self:add("oblique")
if genitive then
self:add(genitive)
end
self:category(vowel)
end
-- The ā-stems, both derived (feminine) and root stems.
function Analysis:longAStem()
if self.gender == "n" then
-- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b,
-- Wackernagel III p.129).
error("The neuter of radical stems in -ā ends in -a.", 0)
end
self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$")
local pronoun = self:isPronoun()
local pronominal = self.properties.pron or pronoun or self:inLexicon("pronominal_adjective")
local pronominal_and_nominal = self.properties.pron and self:inLexicon("optional_pronominal")
local root = self.properties.root
self.type = pronominal and "pronominal_long_a" or "long_a"
self:pronominalNumbersAndCases(pronoun, pronominal)
local monosyllabic = self:monosyllabic()
local masculine = self.links.masculine
-- A stem is a root stem with <root> or as a monosyllable, but a monosyllable is derived with <nonroot> or with a
-- masculine in -a. The pronominal stems and dvā́ are always derived.
local derived = pronominal or self:inLexicon("dva") or not (root or monosyllabic)
or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil)
if derived then
if self.gender == "m" then
error("Add <root> if this is a root noun or adjective.", 0)
end
self:category("long_a")
self:add(pronoun and self:inLexicon("tya") and "tya_feminine_nominative"
or pronoun and self:inLexicon("s_nominative") and "s_feminine_nominative" or "derived_nominative")
self:add(pronominal_and_nominal and "pronominal_and_nominal_derived" or pronominal and "pronominal_derived"
or "derived")
self:add("derived_direct")
self:add((self:baseMatches(".y$") or pronoun and self:baseMatches("^y$")) and "genitive_dual_after_y"
or "genitive_dual")
else
self:category("root_long_a")
if self.gender == "m" then
self:generalNote("root_long_a_masculine")
self:add("root_masculine")
else
-- The derived declension, except for the nominative singular (Macdonell p.249ff.).
self:add("root_feminine")
self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual")
end
end
self:add("oblique")
end
-- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems.
function Analysis:longIUStem()
if self.gender == "n" then
-- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand.
error("The neuter of radical stems in -ī/ū ends in -i/u.", 0)
end
local vowel, accent = string.match(self.head, "([IU])(/?)$")
self.accent = accent
self.type = vowel == "I" and "long_i" or "long_u"
self:vowelStems(vowel)
local properties, masculine = self.properties, self.links.masculine
local monosyllabic = self:monosyllabic()
local feminine = self.gender == "f"
if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then
self.options.iy_uv_before_vowel = true
self:add("stri")
elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then
if properties.vrki then
-- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension.
if vowel == "U" then
error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0)
end
self:category("vrki")
self:generalNote("vrki")
if properties.contract == false then
self.options.iy_uv_before_vowel = true
end
self:add("vrki")
self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone")
self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone")
elseif vowel == "I" then
self:category("long_i")
self:add("devi")
-- The Rigvedic genitive plural in -īnā́m (Whitney §319a).
self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone")
else
-- The ū-declension (Whitney §356a), given as the older forms of §364 (Wackernagel III p.189).
if not self.adjective then
self:category("long_u")
elseif self.gender == "m" then
self:category("long_u")
elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$")
and not self:inLexicon("classical_long_u_feminine") then
self:generalNote("vedic_long_u_feminine")
end
if self:baseMatches("y$") or self:inLexicon("vedic_uv") then
-- With the Vedic -úv- (Macdonell p.290 §384a).
self:add("vedic_uv")
else
self:add("u_derived")
self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone")
self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone")
end
self:add("u_nominative_genitive")
end
self:add("derived_oblique")
self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u")
else
self:category(vowel == "I" and "root_long_i" or "root_long_u")
if monosyllabic then
-- Root nouns (Whitney §351; Wackernagel III p.181).
self.options.iy_uv_before_vowel = true
self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic")
self:add("root_monosyllabic_oblique")
else
-- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193;
-- Macdonell p.268, 288). They are uncontracted after two consonants, the ū-stems also when accented
-- (except in -sū/-ṣū), the ī-stems in -dhī also when accented before the ī, and the words listed in
-- `data.lexicon`. <contract> and <nocontract> override this.
local utilities = M.sa_utilities
local uncontracted = properties.contract == false or properties.contract ~= true and (
self:baseMatches(utilities.consonant .. utilities.consonant .. "$")
or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$")
or self:inLexicon("uncontracted_long_u_compound"))
or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound")
or self:baseMatches("D$") and self:baseMatches(utilities.accent)))
if uncontracted then
-- -Ciy-/-Cuv- before a vowel.
self.options.iy_uv_before_vowel = true
self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative")
else
self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative")
.. (feminine and "_feminine" or ""))
end
self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative")
self:add("compound_oblique")
end
self:add("root_common")
end
end
-- The ṛ-stems, including nṛ́ and the feminine numerals tisṛ́ and cátasṛ.
function Analysis:vocalicRStem()
self.accent = string.match(self.head, "(/?)$")
self.type = "vocalic_r"
if self.gender == "f" and (self:inLexicon("tisr") or self:inLexicon("catasr")) then
-- Plural only (Whitney §482e, g). cátasṛ moves the accent to the ṛ, so it is added with the head's own
-- accent.
self.type = "numeral"
self.numbers = {p = true}
if self:inLexicon("tisr") then
self:add("tisr")
else
self:add("catasr", {accent = self:headAccent()})
end
return
end
self:category("vocalic_r")
if self.gender == "m" and self:inLexicon("nr") then
self:add("nr")
return
end
local r = self.properties.r
if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then
error("The feminine of adjectives in -tṛ ends in -trī.", 0)
end
self.stems.lengthened_unaccented = self.stems.base .. "F"
if self.gender == "n" then
self:add("neuter")
else
if not r then
error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0)
end
self:add("masculine_feminine")
self:add(r == "a" and "strong_short_a" or "strong_long_a")
self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural")
end
self:add("oblique")
end
-- The consonantal root stems. They also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and the words listed
-- in `data.lexicon` that have sets of their own (catúr, púṃs, áp, dánt, anaḍváh, the compounds in -vah ...).
function Analysis:rootStem()
local utilities = M.sa_utilities
self.type = "root"
self.options.root_noun = true
if self:inLexicon("catur") then
-- Plural only, from whole forms (Whitney §482g).
if self.gender == "f" then
error("The feminine of catúr is cátasṛ.", 0)
end
self.type = "numeral"
self.numbers = {p = true}
self:addWholeForms(self.gender == "m" and "catur_masculine" or "catur_neuter", "")
self:add("catur_oblique")
return
end
self:category("root")
-- Words declined from whole forms, which need no <final:...>.
if self:inLexicon("ap") then
-- Plural only (Whitney §393); the RV. instr. and gen. sing. show with <sg>.
self.numbers = {p = true}
self:addWholeForms("ap", "")
return
elseif self:inLexicon("dant") then
self:addWholeForms("dant", "")
return
elseif self:inLexicon("anadvah") then
self:addWholeForms("anadvah", string.match(self.head, "^(.-)anaq"))
return
end
local vowel, accent, extra, final = string.match(self.head,
"(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$")
self.accent = accent
local base = self.stems.base
if self:inLexicon("avayaj") then
-- The nom. and voc. sing. avayā́s and the middle stem avayás need no <final:...> (Whitney §406).
self.stems.nominative = base .. "A" .. accent .. "s"
self.stems.middle = base .. "a" .. accent .. "s"
self:add("avayaj")
return
end
if string.match(final, "[jSh]") and not self.properties.final then
error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0)
end
self.options.final_obstruent = self.properties.final
self.options.diaspirate = self.properties.diaspirate or false
local nasal = string.gsub(final, ".", utilities.homorganic_nasal)
self.stems.neuter_plural = base .. vowel .. accent .. nasal .. final
self.stems.neuter_plural_unaccented = base .. vowel .. nasal .. final
-- The strong stem is the head, but with the vowel lengthened in pád "foot" and its compounds (only the masculines,
-- see `data.lexicon`) and in a few others (Whitney §387).
local pad = self.gender == "m" and self:inLexicon("pad")
if pad or self:inLexicon("lengthened_strong") then
self.stems.strong = base .. utilities.lengthen[vowel .. accent] .. extra .. final
else
self.stems.strong = self.head
end
if self.gender == "n" then
-- The neuter nominative plural, with the nasal (Whitney §389c).
self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural")
end
local monosyllabic = self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita)
if self:inLexicon("pums") then
self:add("pums")
elseif self:inLexicon("vah") and self.gender ~= "n" then
-- vāh in the strong and middle cases and ūh in the weakest, where a + ū gives au (Whitney §403).
self.stems.weakest = string.gsub(base, "av$", "O" .. accent) .. "h"
self:add("vah")
elseif self:inLexicon("ksam") then
self:add("ksam")
elseif self:inLexicon("heteroclite_an") then
-- The weak and middle cases also from asán, yakán, śakán and doṣán, with the head's own accent
-- (Whitney §432).
local an_stem = string.gsub(self.head, utilities.accent, "")
an_stem = string.gsub(an_stem, "f[jt]$", "")
self.stems.an_stem = string.gsub(an_stem, "os$", "oz")
if self.gender == "n" then
self:add(monosyllabic and "monosyllabic_neuter_direct" or "polysyllabic_neuter_direct")
elseif monosyllabic then
self:add("monosyllabic_direct")
self:add("monosyllabic_accusative_plural")
else
self:add("polysyllabic_direct")
self:add("polysyllabic_nominative")
end
self:add(monosyllabic and "heteroclite_monosyllabic" or "heteroclite", {accent = self:headAccent()})
elseif monosyllabic then
if self.gender == "n" then
self:add("monosyllabic_neuter_direct")
elseif self:inLexicon("nasal_strong") then
self.stems.nasal = base .. vowel .. accent .. nasal .. final
self:add("yuj_direct")
else
self:add("monosyllabic_direct")
end
if self:inLexicon("dvar") then
-- The weak and middle cases also from dur in the Veda (Whitney §388).
self.stems.contracted = string.gsub(base, "v$", "u") .. final
self:add("dvar")
else
if self.gender ~= "n" then
-- The acc. pl. is accented on the ending in only some monosyllables (Whitney §390a).
self:add(self:inLexicon("oxytone_accusative_plural") and "oxytone_accusative_plural"
or self:inLexicon("optional_oxytone_accusative_plural") and "optional_oxytone_accusative_plural"
or "monosyllabic_accusative_plural")
end
self:add("monosyllabic_oblique")
self:add(pad and "pad_middle" or (self.gender == "m" and self:inLexicon("mas")) and "mas_middle"
or "monosyllabic_middle")
self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural")
end
else
if self.gender == "n" then
self:add("polysyllabic_neuter_direct")
else
self:add("polysyllabic_direct")
-- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246).
self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative"
or "polysyllabic_nominative")
end
self:add("polysyllabic_oblique")
if pad then
self:add("pad_compound_middle")
else
self:add("polysyllabic_middle")
self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural")
end
end
end
-- The as-, is- and us-stems, including the comparatives in -yas.
function Analysis:sStem()
local utilities = M.sa_utilities
local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$")
self.accent = accent
self.type = vowel .. "s"
local base = self.stems.base
self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms"
self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms"
local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$")
or self:baseMatches("jyA/?y$"))
if self.gender == "m" and self:inLexicon("usanas") then
-- Whitney §416, §355a
self:add("usanas")
self:category("as")
return
end
if comparative and self.gender ~= "n" then
if self.gender ~= "m" then
error("The feminine of comparatives in -yas ends in -yasī.", 0)
end
self:add("comparative_masculine")
elseif self.gender == "m" or self.gender == "f" then
if vowel == "a" then
self:add("as_direct")
else
self:add("is_us_direct")
-- The Vedic vocative (Wackernagel III p.292 §152c).
self:add(vowel == "i" and "is_vocative" or "us_vocative")
end
self:add("masculine_feminine_dual")
else
-- Compound adjectives in -as (Macdonell p.226; Whitney §418a).
if self.adjective and vowel == "a" and not comparative
and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then
self:add("compound_as_neuter_nominative")
else
self:add("neuter_nominative")
end
self:add("neuter_direct")
end
self:add("oblique")
self:category(comparative and "comparative" or vowel .. "s")
end
-- The an-stems.
function Analysis:anStem()
local utilities = M.sa_utilities
self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$")
self.type = "an"
self.options.retroflex_stem_n = true
local properties = self.properties
local contract = properties.contract
if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then
contract = true
end
self:category("an")
if self.gender == "n" and (self:inLexicon("ahan") or self:inLexicon("udhan")) then
-- With forms from parallel stems in -ar and -as (Whitney §430).
self:add(self:inLexicon("ahan") and "ahan" or "udhan")
return
end
local contracted_weakest = self:inLexicon("contracted_weakest")
if contracted_weakest then
-- śún, yū́n, maghón (Whitney §427–428): the v becomes u, which makes o with an a before it and ū with
-- a u.
local weakest = string.gsub(self.stems.base, "a(/?)v$", "o%1")
weakest = string.gsub(weakest, "u(/?)v$", "U%1")
self.stems.weakest = string.gsub(weakest, "(" .. utilities.consonant .. ")v$", "%1u" .. self.accent)
end
if self.gender == "n" then
-- Wackernagel III p.238 presupposes a neuter plural -hāni for -han.
self:add("neuter_direct")
self:add(properties.han and "han_neuter_nominative" or "neuter_nominative")
self:add(contract and "contracted_neuter_dual" or "neuter_dual")
else
self:add("masculine_nominative_vocative")
if properties.han or self:inLexicon("short_strong_an") then
self:add("short_strong")
self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural")
else
-- Whitney §426b; Wackernagel III p.267.
self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong")
self:add(contracted_weakest and "contracted_weakest_accusative_plural"
or contract and "contracted_accusative_plural" or "uncontracted_accusative_plural")
end
end
-- The Vedic locative singular without -i (Whitney §425c).
self:add(contracted_weakest and "contracted_weakest" or contract and "contracted_oblique" or "uncontracted_oblique")
self:add(self:inLexicon("maghavan") and "maghavan_middle" or "oblique")
end
-- The in-stems.
function Analysis:inStem()
self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$")
self.type = "in"
self.options.retroflex_stem_n = true
self:category("in")
-- pathín, mathín and ṛbhukṣín, from whole forms (Whitney §433–434).
local panthan = self:inLexicon("pathin") and "pathin" or self:inLexicon("mathin") and "mathin"
or self:inLexicon("rbhuksin") and "rbhuksin"
if panthan and self.gender == "m" then
self:addWholeForms(panthan, "")
return
end
self:add(self.gender == "n" and "neuter_direct" or "masculine_direct")
self:add("oblique")
end
-- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat.
function Analysis:atStem()
local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$")
self.accent = accent
local properties = self.properties
local long = vowel == "A" and "long_a" or "short_a"
if self:headMatches("[vm]a/?t$") and not properties.participle then
self.type = consonant .. "at"
self:add(self.gender == "n" and "vat_neuter" or "vat_masculine")
self:add("vat_oblique")
self:category(consonant .. "at")
return
end
self.type = "at"
if properties.nonasal then
-- Participles like júhvat, with no nasal in the strong stem.
self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine")
self:add("nonasal_oblique")
else
if self.gender ~= "n" then
self:add("participle_masculine_" .. long)
else
-- The neuter nominative dual is the feminine stem (Whitney §443a; §447b says it may be artificial).
local feminines = properties.feminine or self.links.feminine
if not feminines or not feminines[1] then
error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0)
end
self.stems.feminine = feminines[1]
self.stems.second_feminine = feminines[2]
self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine")
-- The Rigvedic neuter plural in -ānti (Wackernagel III p.262).
self:add("participle_neuter_plural_" .. long)
self:add("participle_neuter_singular")
self:add("participle_neuter_singular_" .. long)
end
self:add("participle_oblique_" .. long)
end
self:add("oblique")
self:add("oblique_" .. long)
self:category("at")
end
-- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem.
function Analysis:ancStem()
local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$")
self.accent = accent
self.type = "anc"
local middle = string.gsub(self.stems.base, "Yc$", "c")
self.stems.base = middle
self:add(self.gender == "m" and "masculine_direct" or "neuter_direct")
self:add("middle_oblique")
local weakest
if vowel == "A" then
weakest = middle
elseif self:inLexicon("tiryanc") then
weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc")
elseif consonant ~= "" then
weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent)
return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c"
end)
elseif self:inLexicon("ud_anc") then
weakest = string.gsub(middle, "ac$", "Ic")
else
error("This añc-stem is not supported.", 0)
end
self.stems.weakest = weakest
if vowel == "A" or accent ~= "/" then
self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual")
self:add("weakest_oblique")
else
-- Oxytones have both accentuations (Whitney §410).
self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual")
self:add("oxytone_weakest_oblique")
end
self:add("copies")
self:category("anc")
end
-- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds; and dyó (dyú, dív).
function Analysis:diphthongStem(vowel, type)
self.type = type
self:category(type)
if self:inLexicon("dyo") then
-- From whole forms. The voc. dyaùs has a svarita, read as díāus (Whitney §361e).
self.options.initial_svarita = true
self:addWholeForms("dyo", "")
return
end
self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$")
self:add("all")
end
-- The vāṃs-stems, i.e. the perfect participles.
function Analysis:vamsStem()
local utilities = M.sa_utilities
self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$")
self.type = "vams"
local base = self.stems.base
local weak
if self:inLexicon("vams_glide") or self:baseMatches("u$") then
weak = base .. "v"
elseif self:baseMatches("U$") then
weak = string.gsub(base, "U$", "uv")
elseif self:inLexicon("vams_keep_i") then
weak = base
elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$")
or self:inLexicon("vams_drop_i") then
-- An i after a vowel and consonants is dropped (cerivā́ṃs, cerúṣ-). The vowel is never a short i, as the
-- second i of śiśrivā́ṃs and the like belongs to the root.
weak = string.gsub(base, "i$", "")
elseif self.properties.retroflex_l then
weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh")
else
weak = base
end
self.stems.weak = weak
self:add(self.gender == "m" and "masculine_direct" or "neuter_direct")
self:add("oblique")
self:category("vams")
end
-- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person.
function Analysis:personal()
local first = self:headMatches("^a")
self.type = first and "first_person" or "second_person"
self.stems.base = ""
self:add(first and "first" or "second")
end
-- The demonstratives ayám (iyám, idám), asaú (adás) and ena, from whole forms on an empty stem. The head says
-- which of them it is, and the gender which set of forms.
function Analysis:pronoun()
local lexeme = self:headMatches("^en[aA]") and "ena" or self:headMatches("^a/?[sd]") and "adas" or "idam"
self.type = "demonstrative"
self.stems.base = ""
self:add(lexeme .. "_" .. ({m = "masculine", f = "feminine", n = "neuter"})[self.gender])
if self.gender ~= "f" then
self:add(lexeme .. "_masculine_neuter")
end
if lexeme == "ena" then
-- Only the acc. of all numbers, the instr. sing. and the gen.-loc. du. (Whitney §500).
self:add("ena_common")
self.cases = {"acc", "ins", "gen", "loc"}
end
end
local CLASS_METHODS = {
numeral = Analysis.numeral,
a = Analysis.aStem,
short_iu = Analysis.shortIUStem,
long_a = Analysis.longAStem,
long_iu = Analysis.longIUStem,
vocalic_r = Analysis.vocalicRStem,
root = Analysis.rootStem,
s = Analysis.sStem,
an = Analysis.anStem,
["in"] = Analysis.inStem,
at = Analysis.atStem,
anc = Analysis.ancStem,
o = function(analysis) analysis:diphthongStem("o", "o") end,
au = function(analysis) analysis:diphthongStem("O", "au") end,
ai = function(analysis) analysis:diphthongStem("E", "ai") end,
vams = Analysis.vamsStem,
personal = Analysis.personal,
pronoun = Analysis.pronoun,
}
------------------------------------------------------------------------------------------------------------------------
-- Generation --
------------------------------------------------------------------------------------------------------------------------
--[==[
Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ...,
options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending
within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell
that copies another (`"[nom]"`) is traced to the cell it copies once every group has run.
]==]
local FormGenerator = {}
FormGenerator.__index = FormGenerator
local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"}
function FormGenerator.new(novedic)
return setmetatable({novedic = novedic}, FormGenerator)
end
function FormGenerator:form(group, ending, case, position)
local text, note, stem_key = ending, nil, nil
if type(ending) == "table" then
text, note, stem_key = ending[1], ending.note, ending.stem
end
if self.novedic and note and M.data.notes[note].vedic then
return nil
end
local stem
if string.sub(text, 1, 1) == "+" then
text = string.sub(text, 2)
stem = group.head
elseif stem_key then
stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key,
group.class, group.set))
else
stem = group.stems.base
end
text = string.gsub(text, "@", group.accent)
local options = {}
for key, value in pairs(group.options) do
options[key] = value
end
if type(ending) == "table" then
for _, flag in ipairs(ENDING_FLAGS) do
if ending[flag] then
options[flag] = true
end
end
-- A form whose final consonant isn't the table's <final:...>, such as the Vedic yúṅ beside yúk.
if ending.final then
options.final_obstruent = ending.final
end
end
options.recessive_accent = case == "voc"
return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text,
options = options, position = position}
end
--[==[
Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot whose forms it
takes). A slot that two groups fill is an internal error.
]==]
function FormGenerator:generate(groups)
local cells, copies = {}, {}
for _, group in ipairs(groups) do
for number, cases in pairs(M.data.endings[group.class][group.set]) do
for case, cell in pairs(cases) do
local slot = case .. "_" .. number
if cells[slot] or copies[slot] then
error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set))
end
local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$")
if copied then
copies[slot] = copied .. "_" .. number
else
local forms = {}
if type(cell) == "string" then
cell = {cell}
end
for position, ending in ipairs(cell) do
local form = self:form(group, ending, case, position)
if form then
table.insert(forms, form)
end
end
cells[slot] = forms
end
end
end
end
-- Follow copies of copies back to the cell they come from.
for slot in pairs(copies) do
local source, seen = copies[slot], {[slot] = true}
while copies[source] do
if seen[source] then
error("Internal error: the copies of " .. slot .. " go round in a circle")
end
seen[source] = true
source = copies[source]
end
if not cells[source] then
error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source))
end
copies[slot] = source
end
return cells, copies
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the cases of a table made by `analysis`: those it sets, or else those listed in the entry of its class in
-- `data.classes`, or else every case except the enclitic ones.
local function cases_of(analysis)
local codes = analysis.cases
for _, entry in ipairs(M.data.classes) do
if entry.id == analysis.class then
codes = codes or entry.cases
end
end
local cases = {}
for _, case in ipairs(M.data.cases) do
local listed = not codes and not case.enclitic
for _, code in ipairs(codes or {}) do
listed = listed or code == case.code
end
if listed then
table.insert(cases, case)
end
end
return cases
end
-- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g.
-- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string
-- if it has none.
local function table_kind(gender, type)
local words = {}
local entry = gender and M.data.genders[gender]
if entry and entry.in_title ~= false then
table.insert(words, entry.name:lower())
end
if type then
table.insert(words, M.data.types[type])
end
return table.concat(words, " ")
end
--[==[
One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and
the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form,
and a form from a cell parameter also has `override = true`. It also keeps the form `groups` it was declined with, the
generated forms in `generated`, the slots that copy another in `copies` and the overridden slots in `overridden`, as
well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call.
]==]
local Declension = {}
Declension.__index = Declension
function Declension.new(analysis, cells, copies, numbers)
local declension = setmetatable({
head = analysis.head,
gender = analysis.gender,
adjective = analysis.adjective,
class = analysis.class,
type = analysis.type,
numbers = numbers,
cases = cases_of(analysis),
groups = analysis.groups,
generated = cells,
copies = copies,
slots = {},
overridden = {},
categories = analysis.categories,
general_notes = analysis.general_notes,
user_notes = {},
}, Declension)
for _, case in ipairs(declension.cases) do
for _, number in ipairs(M.data.numbers) do
local slot = case.code .. "_" .. number.code
if numbers[number.code] and not cells[copies[slot] or slot] then
error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class))
end
local forms = {}
for _, form in ipairs(cells[copies[slot] or slot] or {}) do
table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}})
end
declension.slots[slot] = forms
end
end
return declension
end
--[==[
Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is
filled by the cell parameters. `gender` can be {nil}.
]==]
function Declension.manual(head, gender, numbers)
local cells = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
cells[case.code .. "_" .. number.code] = {}
end
end
return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {},
categories = {}, general_notes = {}}, cells, {}, numbers)
end
-- Show the case `code` too, in its place in `data.cases`, with its cells empty.
function Declension:showCase(code)
local cases = {}
for _, case in ipairs(M.data.cases) do
local shown = case.code == code
for _, other in ipairs(self.cases) do
shown = shown or other.code == case.code
end
if shown then
table.insert(cases, case)
end
end
self.cases = cases
for _, number in ipairs(M.data.numbers) do
self.slots[code .. "_" .. number.code] = {}
end
end
-- Show the number `code` too, with its cells empty. The set of numbers can be shared with other tables, so it is
-- copied first.
function Declension:showNumber(code)
local numbers = {}
for shown in pairs(self.numbers) do
numbers[shown] = true
end
numbers[code] = true
self.numbers = numbers
for _, case in ipairs(self.cases) do
self.slots[case.code .. "_" .. code] = {}
end
end
--[==[
Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script and read
with `bridge`; a form of `-` means no form. A form for a case the table doesn't show (the vocative of a pronoun, a case
ena lacks) adds that row, and a form for a number it doesn't show (the singular of áp) adds that column, with the
other cells of the row or column empty. A `-` in such a slot adds nothing.
]==]
function Declension:override(slot, forms, bridge)
local replaced = {}
for _, form in ipairs(forms) do
if form.written ~= "-" then
table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true})
end
end
local case, number = slot:match("^(.-)_([sdp])$")
if not self.slots[slot] then
if not replaced[1] then
return
end
self:showCase(case)
end
if replaced[1] and not self.numbers[number] then
self:showNumber(number)
end
self.slots[slot] = replaced
self.overridden[slot] = true
end
--[==[
Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an
adjective), `numeral` or {nil}, which gives none (an adjective's other tables).
]==]
function Declension:categoryNames(kind)
local names = {}
if kind then
for _, key in ipairs(self.categories) do
table.insert(names, M.data.categories[key][kind])
end
end
return names
end
-- Return the texts of the table's general notes.
function Declension:generalNoteTexts()
local texts = {}
for _, key in ipairs(self.general_notes) do
table.insert(texts, M.data.general_notes[key])
end
return texts
end
--[==[
Return the data of the table for {{para|json|1}}: the head, the gender, the stem class and type, the numbers shown, and
for each slot its forms in SLP1, in the display script and in IAST, with their notes and whether they come from a cell
parameter. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether
`nocat` was given.
]==]
function Declension:toJson(bridge, kind, nocat)
local slots = {}
for slot, forms in pairs(self.slots) do
local list = {}
for _, form in ipairs(forms) do
table.insert(list, {
slp1 = form.slp1,
form = bridge:toNative(form.slp1),
translit = bridge:toIast(form.slp1),
notes = form.notes,
override = form.override,
})
end
slots[slot] = list
end
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.numbers[number.code] then
table.insert(numbers, number.code)
end
end
return {
head = self.head,
gender = self.gender,
class = self.class,
type = M.data.types[self.type],
numbers = numbers,
slots = slots,
user_notes = self.user_notes,
general_notes = self:generalNoteTexts(),
categories = self:categoryNames(kind),
nocat = nocat or false,
}
end
------------------------------------------------------------------------------------------------------------------------
-- The table --
------------------------------------------------------------------------------------------------------------------------
--[==[
Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for
each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from
[[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator
for `lemma`, with its IAST below. The footnotes, the user's notes and the general notes go under the table, in that
order. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(declension, bridge, lemma, kind)
return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer)
end
-- Return the numbers shown, in order.
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.declension.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number.
function TableRenderer:accel(case, number)
local declension = self.declension
local tags = {case.accel}
if declension.adjective then
table.insert(tags, M.data.genders[declension.gender].accel)
end
table.insert(tags, number.accel)
return table.concat(tags, "|")
end
-- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by case.
function TableRenderer:cells()
local declension, bridge = self.declension, self.bridge
local formtable, slot_list = {}, {}
for _, case in ipairs(declension.cases) do
for _, number in ipairs(self:numbers()) do
local slot = case.code .. "_" .. number.code
local forms = declension.slots[slot]
if forms[1] then
local list = {}
for _, form in ipairs(forms) do
local footnotes
if form.notes[1] then
footnotes = {}
for _, note in ipairs(form.notes) do
table.insert(footnotes, "[" .. note .. "]")
end
end
table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1),
footnotes = footnotes})
end
formtable[slot] = list
end
table.insert(slot_list, {slot, self:accel(case, number)})
end
end
M.inflection_utilities.show_forms(formtable, {
lang = M.lang,
lemmas = {self.lemma},
slot_list = slot_list,
include_translit = true,
})
return formtable, formtable.footnote
end
-- Return the title of the table, e.g. "Masculine a-stem declension of देव".
function TableRenderer:title()
local declension, bridge = self.declension, self.bridge
local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"})
local kind = table_kind(declension.gender, declension.type)
if kind == "" then
return "Declension of " .. head
end
return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " declension of " .. head
end
function TableRenderer:render()
local declension = self.declension
local cells, footnotes = self:cells()
local lines = {M.inflection_table.make_top{
title = self:title(),
palette = "blue",
tall = "yes",
lang = "sa",
}}
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(self:numbers()) do
table.insert(lines, '! class="outer" | ' .. number.name)
end
for _, case in ipairs(declension.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, "! " .. case.name)
for _, number in ipairs(self:numbers()) do
table.insert(lines, "| " .. cells[case.code .. "_" .. number.code])
end
end
local notes = {}
if footnotes ~= "" then
table.insert(notes, footnotes)
end
for _, note in ipairs(declension.user_notes) do
table.insert(notes, note)
end
for _, note in ipairs(declension:generalNoteTexts()) do
table.insert(notes, note)
end
table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")})
local categories = declension:categoryNames(self.kind)
if categories[1] then
table.insert(lines, M.utilities.format_categories(categories, M.lang))
end
return table.concat(lines, "\n")
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
local ALL_NUMBERS = {s = true, d = true, p = true}
-- Return true if `cells` or `copies` (as made by `FormGenerator:generate`) have a slot of the number `code`.
local function has_number(cells, copies, code)
for _, slots in ipairs({cells, copies}) do
for slot in pairs(slots) do
if string.match(slot, "_" .. code .. "$") then
return true
end
end
end
return false
end
--[==[
Decline one table without a frame. `input` has the following fields:
* `head`: the head, in SLP1;
* `gender`: `m`, `f`, `n`, `num` (the numerals) or `pers` (the personal pronouns);
* `adjective`: true if the table is one of an adjective's tables;
* `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`,
`novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true,
false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `husband`, `feminine` (a list of stems) and
`numbers` (a set of s/d/p);
* `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and
`feminine` (a list, for the neuter table).
Return the Declension.
]==]
function export.decline_table(input)
local properties = input.properties or {}
local class, base = Head.new(input.head):detectClass(input.gender, properties)
if not class then
error("No declension class could be detected. Please check the head or specify the declension.", 0)
end
local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective,
properties = properties, links = input.links, class = class}
CLASS_METHODS[class](analysis)
local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups)
local numbers = input.gender == "num" and {p = true} or properties.numbers or analysis.numbers or ALL_NUMBERS
for _, number in ipairs(M.data.numbers) do
if numbers[number.code] and not has_number(cells, copies, number.code) then
error(("This word has no %s."):format(number.name), 0)
end
end
return Declension.new(analysis, cells, copies, numbers)
end
-- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`.
local function uses(definition, class, gender)
return (definition.classes == nil or definition.classes[class] == true)
and (definition.genders == nil or definition.genders[gender] == true)
end
-- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (empty
-- for a noun, otherwise `m_`, `f2_`, etc.).
local function cell_values(args, prefix)
local values = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
local slot = case.code .. "_" .. number.code
values[slot] = args[prefix .. slot]
end
end
return values
end
local function cell_parameters(params, prefix)
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
params[prefix .. case.code .. "_" .. number.code] = {}
end
end
end
--[==[
Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and
`pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args.
]==]
function export.decline_noun(args, pagename)
local params = {
[1] = {},
note = {list = true},
nocat = {type = "boolean"},
json = {type = "boolean"},
}
cell_parameters(params, "")
args = M.parameters.process(args, params)
local spec = Spec.parse(args[1] or "", "noun")
local head = spec.head ~= "" and spec.head or pagename
local bridge = ScriptBridge.new(head, pagename)
local gender
for name, definition in pairs(M.data.indicators.noun) do
if definition.group == "gender" and spec.indicators[name] then
gender = name
end
end
local properties = spec:properties(bridge)
local declension
if spec.indicators.manual then
for name, definition in pairs(M.data.indicators.noun) do
if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender"
and definition.group ~= "numbers" then
error(("The indicator '%s' does not apply to a manual table"):format(name), 0)
end
end
declension = Declension.manual(bridge:toSlp1(head), gender,
gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS)
else
declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties}
for name in pairs(spec.indicators) do
local definition = M.data.indicators.noun[name]
if definition.group ~= "gender" and not uses(definition, declension.class, gender) then
error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0)
end
end
end
for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do
declension:override(slot, forms, bridge)
end
declension.user_notes = args.note
return declension, bridge, args
end
--[==[
The tables of an adjective, in `tables`, each a Declension, in this order: the masculine, a feminine for each head of
`f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head).
]==]
local AdjectiveDeclension = {}
AdjectiveDeclension.__index = AdjectiveDeclension
--[==[
Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and
`pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args.
]==]
function export.decline_adjective(args, pagename)
local params = {
[1] = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
}
local spec = Spec.parse(args[1] or "", "adjective")
local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)}
local prefixes = {"m_", "n_"}
for position = 1, #feminine_specs do
table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_")
end
for _, prefix in ipairs(prefixes) do
cell_parameters(params, prefix)
params[prefix .. "note"] = {list = true}
end
args = M.parameters.process(args, params)
local masculine_head = spec.head ~= "" and spec.head or pagename
local bridge = ScriptBridge.new(masculine_head, pagename)
local shared = spec:properties(bridge)
local masculine_slp1 = bridge:toSlp1(masculine_head)
-- One entry per table, with its head (and any spec of its own), gender, cell prefix and links.
local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}}
local feminine_stems = {}
for position, feminine_spec in ipairs(feminine_specs) do
local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1
table.insert(feminine_stems, slp1)
table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f",
prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}})
end
local neuter_spec = spec.indicators.n
table.insert(tables, {spec = neuter_spec,
slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1,
gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}})
local adjective = setmetatable({tables = {}}, AdjectiveDeclension)
local used = {}
for _, item in ipairs(tables) do
local properties = item.spec and item.spec:properties(bridge, shared) or shared
local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true,
properties = properties, links = item.links}
for name, definition in pairs(M.data.indicators.adjective) do
if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then
used[name] = true
end
end
for name in pairs(item.spec and item.spec.indicators or {}) do
if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then
error(("The indicator '%s' does not apply to the %s"):format(name,
table_kind(item.gender, declension.type)), 0)
end
end
for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do
declension:override(slot, forms, bridge)
end
declension.user_notes = args[item.prefix .. "note"]
table.insert(adjective.tables, declension)
end
for name, definition in pairs(M.data.indicators.adjective) do
if spec.indicators[name] and definition.value ~= "spec" and not used[name] then
error(("The indicator '%s' applies to none of the tables"):format(name), 0)
end
end
return adjective, bridge, args
end
-- Return the kind of categories a noun table adds (see `Declension:categoryNames`).
local function noun_kind(declension)
return declension.class == "numeral" and "numeral" or "noun"
end
--[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==]
function export.noun(frame)
local pagename = M.headword_data.pagename
local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename)
local kind = noun_kind(declension)
if args.json then
return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat))
end
return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render()
end
--[==[
Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of
[[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON
(`{tables = {...}}`). Only the masculine table adds categories.
]==]
function export.adjective(frame)
local pagename = M.headword_data.pagename
local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename)
if args.json then
local tables = {}
for position, declension in ipairs(adjective.tables) do
table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat))
end
return M.JSON.toJSON({tables = tables})
end
local rendered = {}
for position, declension in ipairs(adjective.tables) do
local kind = position == 1 and not args.nocat and "adjective" or nil
table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render())
end
return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n")
end
return export
r71mytt2liq75itdapyp7cijw5rh0b9
2572843
2572839
2026-10-23T01:14:56Z
Hiyuune
50834
2572843
Scribunto
text/plain
--[==[
This module implements the declension tables of Sanskrit nouns, pronouns and numerals ({{tl|sa-ndecl}}) and of
adjectives ({{tl|sa-adecl}}).
Authorship: originally written by [[User:Dragonoid76]] and [[User:Benwing2]], with the declension rules of
[[User:Exarchus]]; rewritten by [[User:Fenakhay]] in October 2026.
TERMINOLOGY:
* "head" = The form given in the call: the nominative singular, or the stem for consonant stems. It is followed by an
inline spec of indicators, e.g. `{{sa-ndecl|devá<m>}}` or `{{sa-adecl|kṛṣṇá<f:kṛṣṇā́.novedic>}}`.
* "stem class" = A way of declining, e.g. the a-stems, the i- and u-stems or the root stems. The classes in
[[Module:sa-decl/data]] are tried on the head in order, and the first one that takes it gives the "stem" (the head
minus its ending). The class's other stems are made from that one; see `Analysis:vowelStems`.
* "slot" = A particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a table.
* "form group" = One set of endings from [[Module:sa-decl/data]], together with the stems, accent and sandhi options
in force when it was added. A table is made of the forms of its groups, each joined with `join` in
[[Module:sa-utilities]].
Everything is worked out in SLP1 and shown in the script of the head (or of the page name), with the IAST below.
The classes, by area:
* The call: `Spec` (the inline spec of a head), `Overrides` (the cell parameters) and `ScriptBridge` (conversion
between the input script and SLP1).
* The analysis: `Head` (finds the stem class of a head), `Analysis` (the decisions of one stem class, with one method
per class that adds `FormGroup`s) and `FormGenerator` (makes the forms of a group).
* The result: `Declension` (one table, with the forms of every slot, its notes and its categories),
`AdjectiveDeclension` (the tables of an adjective) and `TableRenderer` (the wikitext of a table).
Other modules used: [[Module:sa-decl/data]] (the endings and every other table, loaded with mw.loadData),
[[Module:sa-utilities]] (sandhi), [[Module:inflection-table]] (the frame of each table, and the box around an
adjective's tables) and [[Module:inflection utilities]] (the links, transliteration, accelerators and footnotes in
the cells).
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
sa_utilities = "Module:sa-utilities",
scripts = "Module:scripts",
utilities = "Module:utilities",
},
loadData = {
data = "Module:sa-decl/data",
headword_data = "Module:headword/data",
},
lazy = {
lang = function() return require("Module:languages").getByCode("sa") end,
},
}
------------------------------------------------------------------------------------------------------------------------
-- Script --
------------------------------------------------------------------------------------------------------------------------
--[==[
Convert the call's input to SLP1, and SLP1 to the display script and to IAST. The display script is the script of the
head; if the head is in IAST (i.e. Latin), it is the script of the page name, and failing that, Devanagari. Latin input
is read as IAST, and anything else goes through the display script's converter.
]==]
local ScriptBridge = {}
ScriptBridge.__index = ScriptBridge
function ScriptBridge.new(head, pagename)
local script = M.lang:findBestScript(head)
if script:getCode() == "None" then
script = M.lang:findBestScript(pagename)
end
if script:getCode() == "None" then
script = M.scripts.getByCode("Deva")
end
local code = script:getCode()
return setmetatable({
script = script,
code = code,
from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr,
to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr,
from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr,
to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr,
}, ScriptBridge)
end
function ScriptBridge:toSlp1(text)
if M.lang:findBestScript(text):getCode() == "None" then
return self.from_iast(text)
end
return self.from_native(text)
end
-- Only Devanagari shows the accents, so strip them for any other script.
function ScriptBridge:toNative(slp1)
if self.code ~= "Deva" then
slp1 = string.gsub(slp1, M.sa_utilities.accent, "")
end
return self.to_native(slp1)
end
function ScriptBridge:toIast(slp1)
return self.to_iast(slp1)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
The inline spec of a head, `HEAD<NAME.NAME:VALUE...>`. `Spec.parse` parses it and checks it against the indicators of
`template` (`noun` or `adjective`, as keyed in `data.indicators`). The result has `head`, as written (empty means the
page name), and `indicators`, keyed by name. An indicator's value is {true} for a flag, a Spec (or a list of them) for
a spec value, a list for a list indicator and the string given otherwise. A spec value (the feminine and neuter heads
of {{tl|sa-adecl}}) is itself a head with a spec of its own. It is parsed with `nested` set, and then takes only the
indicators that apply to a single stem.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Split `text` at `separator` (a Lua pattern), except inside angle brackets.
local function split_outside_brackets(text, separator)
local parts = {}
local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">")
for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, separator)) do
table.insert(parts, table.concat(group))
end
return parts
end
function Spec.parse(text, template, nested)
text = mw.text.trim(text)
local spec = setmetatable({head = text, indicators = {}}, Spec)
local registry = M.data.indicators[template]
local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">")
if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then
spec_error("Only one <...> may follow the head", text)
end
spec.head = mw.text.trim(segments[1])
if string.find(spec.head, ",", 1, true) then
spec_error("The head is one form", text)
end
local needs_gender = template == "noun" and not nested
if #segments == 1 then
if needs_gender then
spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text)
end
return spec
end
local inside = string.match(segments[2], "^<(.*)>$")
local groups = {}
for _, indicator in ipairs(split_outside_brackets(inside, "%.")) do
local name, value = string.match(indicator, "^%s*([^:<]-)%s*:%s*(.-)%s*$")
if not name then
name = mw.text.trim(indicator)
end
local definition = registry[name]
if definition and definition.alias then
name = definition.alias
definition = registry[name]
end
if not definition or nested and (definition.value == "spec" or definition.group == "gender") then
local names = {}
for known, known_definition in pairs(registry) do
if not nested or known_definition.value ~= "spec" and known_definition.group ~= "gender" then
table.insert(names, known)
end
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text)
end
if spec.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), text)
end
if definition.group and definition.group ~= "numbers" then
if groups[definition.group] then
spec_error(("The indicators '%s' and '%s' exclude each other"):format(groups[definition.group], name), text)
end
groups[definition.group] = name
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), text)
end
if definition.value == nil then
value = true
elseif definition.value == "spec" then
if definition.list then
local specs = {}
for _, item in ipairs(split_outside_brackets(value, "%s*,%s*")) do
table.insert(specs, Spec.parse(item, template, true))
end
value = specs
else
value = Spec.parse(value, template, true)
end
elseif definition.list then
local values = mw.text.split(value, "%s*,%s*")
for _, item in ipairs(values) do
if definition.values and not definition.values[item] then
spec_error(("'%s' is not a value of '%s'"):format(item, name), text)
end
end
value = values
elseif definition.values and not definition.values[value] then
local values = {}
for known in pairs(definition.values) do
table.insert(values, known)
end
table.sort(values)
spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")),
text)
end
spec.indicators[name] = value
end
-- A manual table can do without a gender.
if needs_gender and not groups.gender and not spec.indicators.manual then
spec_error("Give the gender: <m>, <f>, <n>, <num> or <pers>", text)
end
return spec
end
--[==[
Return the stem properties (see `export.decline_table`) set by the indicators of the spec, on top of `inherited`. Their
values are converted to SLP1 with `bridge`. For one of an adjective's heads, `inherited` holds the adjective's shared
properties.
]==]
function Spec:properties(bridge, inherited)
local properties = {}
for key, value in pairs(inherited or {}) do
properties[key] = value
end
local indicators = self.indicators
if indicators.root then
properties.root = true
elseif indicators.nonroot then
properties.root = false
end
if indicators.contract then
properties.contract = true
elseif indicators.nocontract then
properties.contract = false
end
for name, property in pairs({vrki = "vrki", pron = "pron", novedic = "novedic", diaspirate = "diaspirate",
participle = "participle", nonasal = "nonasal", han = "han", svarita = "svarita", ["ḷ"] = "retroflex_l",
husband = "husband"}) do
if indicators[name] then
properties[property] = true
end
end
if indicators.r then
properties.r = bridge.from_iast(indicators.r)
end
if indicators.final then
properties.final = bridge.from_iast(indicators.final)
end
if indicators.feminine then
properties.feminine = {}
for _, form in ipairs(indicators.feminine) do
table.insert(properties.feminine, bridge:toSlp1(form))
end
end
if indicators.sg or indicators.du or indicators.pl then
properties.numbers = {s = indicators.sg, d = indicators.du, p = indicators.pl}
end
-- The pronominal declension is never a root declension, even for a monosyllable such as tā́.
if properties.pron then
properties.root = false
end
return properties
end
------------------------------------------------------------------------------------------------------------------------
-- Overrides --
------------------------------------------------------------------------------------------------------------------------
--[==[
The cell parameters. `Overrides.parse` takes their values by slot and puts them in `slots`, each as a list of
`{written = FORM, footnotes = {...}}`. A value is a comma-separated list of forms, each followed by any `[footnote]`s;
a form of `-` means no form.
]==]
local Overrides = {}
Overrides.__index = Overrides
function Overrides.parse(values)
local overrides = setmetatable({slots = {}}, Overrides)
for slot, value in pairs(values) do
local forms = {}
local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do
local footnotes = {}
for i = 2, #group - 1, 2 do
if mw.text.trim(group[i + 1]) ~= "" then
error(("Text after a footnote in %s=%s"):format(slot, value), 0)
end
table.insert(footnotes, string.match(group[i], "^%[(.*)%]$"))
end
local form = mw.text.trim(group[1])
if form ~= "" then
table.insert(forms, {written = form, footnotes = footnotes})
end
end
overrides.slots[slot] = forms
end
return overrides
end
------------------------------------------------------------------------------------------------------------------------
-- Analysis --
------------------------------------------------------------------------------------------------------------------------
-- The cases of the pronouns, which have no vocative.
local CASES_WITHOUT_VOCATIVE = {"nom", "acc", "ins", "dat", "abl", "gen", "loc"}
--[==[
A head in SLP1. `detectClass` finds its stem class by trying the classes of `data.classes` in order. It returns the id
of the first class whose genders include `gender` and one of whose patterns matches (taking the pattern's `when` or
`unless` property into account), along with the stem the pattern captures, or {nil} if no class matches.
]==]
local Head = {}
Head.__index = Head
function Head.new(slp1)
return setmetatable({slp1 = slp1}, Head)
end
function Head:detectClass(gender, properties)
for _, class in ipairs(M.data.classes) do
if class.genders[gender] then
for _, pattern in ipairs(class.patterns) do
local text, when, unless = pattern, nil, nil
if type(pattern) == "table" then
text, when, unless = pattern[1], pattern.when, pattern.unless
end
if (when == nil or properties[when] == true) and (unless == nil or not properties[unless]) then
local stem = string.match(self.slp1, text)
if stem then
return class.id, stem
end
end
end
end
end
return nil
end
--[==[
One set of endings of a stem class, as added by `Analysis:add`. `class` and `set` locate it in `data.endings`, `accent`
is what `@` stands for, and `stems` maps the stem keys to stems. `head` is what the `+` endings attach to, and
`options` is a copy of the analysis's sandhi options at the time the group was added.
]==]
local FormGroup = {}
FormGroup.__index = FormGroup
function FormGroup.new(fields)
return setmetatable(fields, FormGroup)
end
--[==[
The decisions made for one stem class. An analysis starts with the head and its gender, whether the table is one of
an adjective's (`adjective`), the properties set by the indicators (see `export.decline_table`) and the other heads
the table looks at (`links`). The class's method then sets the `accent` that `@` stands for (usually the head's final
accent), makes the `stems` (`base` plus whatever the class needs) and adjusts the sandhi `options`, which each group
copies when it is added. The method's results are the list of `groups`, the `type` (a key of `data.types`), the
`categories` (keys of `data.categories`) and the `general_notes` (keys of `data.general_notes`). A word with fewer
numbers or cases than its class can also set `numbers` (the numbers shown unless the call gives others) and `cases`
(codes of `data.cases`).
]==]
local Analysis = {}
Analysis.__index = Analysis
function Analysis.new(input)
local properties = input.properties
local accented = string.match(input.head, M.sa_utilities.accent) ~= nil
local analysis = setmetatable({
head = input.head,
gender = input.gender,
adjective = input.adjective or false,
properties = properties,
links = input.links or {},
class = input.class,
accent = "",
stems = {base = input.base},
options = {
accented = accented,
initial_svarita = properties.svarita or false,
root_han = properties.han or false,
},
groups = {},
type = nil,
categories = {},
general_notes = {},
numbers = nil,
cases = nil,
}, Analysis)
-- An initial tvy-, dvy-, try-, dry- or ny- counts as two syllables, so the vocative gets an initial svarita.
if accented and analysis:inLexicon("initial_svarita") then
analysis.options.initial_svarita = true
end
return analysis
end
--[==[
Add the set `set` of the class's endings, with the current stems and options. `extra` can override fields of the
group, e.g. to use a different `accent`.
]==]
function Analysis:add(set, extra)
if not M.data.endings[self.class][set] then
error(("Internal error: no set '%s' of the %s endings"):format(set, self.class))
end
local options, stems = {}, {}
for key, value in pairs(self.options) do
options[key] = value
end
for key, value in pairs(self.stems) do
stems[key] = value
end
local group = {class = self.class, set = set, accent = self.accent, stems = stems, head = self.head,
options = options}
for key, value in pairs(extra or {}) do
group[key] = value
end
table.insert(self.groups, FormGroup.new(group))
end
function Analysis:category(key)
table.insert(self.categories, key)
end
function Analysis:generalNote(key)
table.insert(self.general_notes, key)
end
-- Return true if the list `name` of `data.lexicon` takes the base stem (or the head, if the list's `subject` is
-- `head`): one of its `patterns` matches and none of its `except` patterns does.
function Analysis:inLexicon(name)
local list = M.data.lexicon[name]
local subject = list.subject == "head" and self.head or self.stems.base
for _, pattern in ipairs(list.except or {}) do
if string.match(subject, pattern) then
return false
end
end
for _, pattern in ipairs(list.patterns) do
if string.match(subject, pattern) then
return true
end
end
return false
end
function Analysis:headMatches(pattern)
return string.match(self.head, pattern) ~= nil
end
function Analysis:baseMatches(pattern)
return string.match(self.stems.base, pattern) ~= nil
end
function Analysis:monosyllabic()
return M.sa_utilities.is_monosyllabic(self.head)
end
-- Return the head's accent wherever it falls: "/" if it has one, else "".
function Analysis:headAccent()
return string.find(self.head, "/", 1, true) and "/" or ""
end
--[==[
Add the set `set` of whole forms, which follow `prefix` (what comes before them in the head, usually nothing). `@` in
them is the head's accent wherever it falls.
]==]
function Analysis:addWholeForms(set, prefix)
self.accent = self:headAccent()
self.stems.base = prefix
self:add(set)
end
--[==[
Make the stems of a class ending in `vowel`, besides `base`. Each is the base plus the following: the vowel
(`final_unaccented`); the vowel raised one grade, with and without the head's final accent (`raised`,
`raised_unaccented`); the lengthened vowel, likewise (`lengthened`, `lengthened_unaccented`); ''a'' with the head's
accent, followed by ''v'' (`raised_glide`); and the vowel's semivowel (`glide`). A stem whose vowel has no such grade or
semivowel is not made.
]==]
function Analysis:vowelStems(vowel)
local utilities, base, accent = M.sa_utilities, self.stems.base, self.accent
local function stem(key, ending)
if ending then
self.stems[key] = base .. ending
end
end
stem("final_unaccented", vowel)
stem("raised", utilities.up_one_grade[vowel .. accent])
stem("raised_unaccented", utilities.up_one_grade[vowel])
stem("lengthened", utilities.lengthen[vowel .. accent])
stem("lengthened_unaccented", utilities.lengthen[vowel])
stem("raised_glide", "a" .. accent .. "v")
stem("glide", utilities.vowel_to_cons[vowel])
end
-- The gender-neutral numerals: ṣáṣ; káti, táti and yáti; aṣṭā́ (or aṣṭaú); and páñca(n)
-- and the like (Whitney §483). The numerals 1–4 have genders, so <num> on them is an error whose message gives the
-- call to use (Whitney §482).
function Analysis:numeral()
for _, numeral in ipairs(M.data.adjective_numerals) do
if self:headMatches(numeral.pattern) then
error(("The numerals 1–4 have genders and are declined as adjectives: %s"):format(numeral.call), 0)
end
end
self.type = "numeral"
if self:headMatches("^azw[AO]/?$") then
-- Accented on the ending throughout.
self.accent = self:headAccent()
self:add("ashtau")
self:category("numeral_an")
return
end
self.accent = string.match(self.head, "(/?)[nz]?$")
if self:headMatches("a/?z$") then
self:add("sas")
self:category("numeral_s")
elseif self:headMatches("ti$") then
self:add("ti")
self:category("numeral_i")
else
self:add(self:headMatches("^azwa/?$") and "ashta_direct" or "an_direct")
-- The oblique endings take the head's own accent, wherever it falls.
self:add("an_oblique", {accent = self:headAccent()})
self:category("numeral_an")
end
end
-- The a-stems, masculine and neuter, including the pronominal declension. The pronouns ta, eta, tya, ya and ka (when
-- accented) and the adjectives of Whitney §523 are pronominal by themselves, the others with <pron>. With <pron>, the
-- adjectives of §525 have the pronominal and the nominal forms side by side.
function Analysis:aStem()
self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$")
local pronoun = self:isPronoun()
local always_pronominal = pronoun or self:inLexicon("pronominal_adjective")
local pronominal = self.properties.pron or always_pronominal
local pronominal_and_nominal = self.properties.pron and self:inLexicon("optional_pronominal")
self.type = pronominal and "pronominal_a" or "a"
-- A stem-final s doesn't become ṣ (ṛbīsa, bisa).
self.options.keep_stem_s = true
self:pronominalNumbersAndCases(pronoun, pronominal)
if self.gender == "m" then
self:add(pronoun and self:inLexicon("s_nominative") and "s_masculine_nominative" or "masculine_nominative")
self:add("masculine_direct")
self:add(pronominal_and_nominal and "pronominal_and_nominal_masculine_plural"
or pronominal and "pronominal_masculine_plural" or "masculine_plural")
else
-- The nom.-acc. sing. is in -at in the words that are pronominal by themselves (ka has kím, beside the Vedic
-- kát), and in -am in the others (Whitney §496a, §524).
self:add(pronoun and self:inLexicon("ka") and "ka_neuter_nominative"
or always_pronominal and "pronominal_neuter_nominative" or "neuter_nominative")
self:add("neuter_direct")
end
if pronominal_and_nominal then
self:add("pronominal_and_nominal_oblique")
elseif pronominal then
self:add(pronoun and self:headMatches("^ta/?$") and "ta_oblique" or self:inLexicon("visva") and "visva_oblique"
or self:inLexicon("eka") and "eka_oblique" or "pronominal_oblique")
else
self:add("nominal_oblique")
self:add(self:inLexicon("vedic_genitive_plural_am") and "genitive_plural_am" or "nominal_genitive_plural")
end
self:add("oblique")
-- The Vedic instrumental singular in -ā, of the oxytone abstracts in -tva(na) (Lanman p.335f.) and a few
-- others, and the one in -enā.
if self:headMatches("tva?n?a/$") or self:inLexicon("vedic_instrumental_a") then
self:add("instrumental_vedic_a")
else
self:add((self:inLexicon("vedic_instrumental_ena") or pronoun and self:inLexicon("pronoun_instrumental_ena"))
and "instrumental_vedic_ena" or "instrumental")
end
-- The Vedic genitive/locative dual in -os after -y- (Wackernagel III p.98-99 §48a), as in yós (Whitney §509a).
self:add((self:baseMatches(".y$") or pronoun and self:baseMatches("^y$")) and "genitive_dual_after_y"
or "genitive_dual")
self:category("a")
end
-- Return true if the head is one of the pronouns of `data.lexicon.pronoun`: accented, or given <pron>.
function Analysis:isPronoun()
return self:inLexicon("pronoun") and (self.options.accented or self.properties.pron == true)
end
-- Set the numbers and cases of the a- and ā-stems that have fewer: the pronouns have no vocative, dvá is dual only
-- and the pronominal éka has no dual (Whitney §482a, d).
function Analysis:pronominalNumbersAndCases(pronoun, pronominal)
if pronoun then
self.cases = CASES_WITHOUT_VOCATIVE
end
if self:inLexicon("dva") then
self.numbers = {d = true}
elseif pronominal and self:inLexicon("eka") then
self.numbers = {s = true, p = true}
end
-- The nominative stem of sá, eṣá and syá, with s for t (Whitney §495a, §499).
if pronoun and self:inLexicon("s_nominative") then
self.stems.nominative = string.gsub(string.gsub(self.stems.base, "t(y?)$", "s%1"), "es$", "ez")
end
end
-- The i- and u-stems.
function Analysis:shortIUStem()
local utilities = M.sa_utilities
local vowel, accent = string.match(self.head, "([iu])(/?)$")
self.accent = accent
self.type = vowel
self:vowelStems(vowel)
if self:inLexicon("tri") then
-- Plural only, with the gen. of trayá (Whitney §482e).
if self.gender == "f" then
error("The feminine of trí is tisṛ́.", 0)
end
self.type = "numeral"
self.numbers = {p = true}
self:add(self.gender == "m" and "tri_masculine" or "tri_neuter")
self:add("tri_oblique")
return
end
if self.properties.husband and not self:inLexicon("pati") then
error("Only páti takes <husband>.", 0)
end
local genitive = "genitive"
if self:inLexicon("sakhi") then
self:add("sakhi")
elseif self.gender == "m" then
if self.properties.husband then
self:add("husband")
else
if self:inLexicon("strong_masculine_i_u") then
self:add("strong_masculine_singular")
else
self:add(self:inLexicon("vedic_instrumental_masculine") and "masculine_instrumental_vedic"
or "masculine_instrumental")
self:add("masculine_dative_ablative")
end
if vowel == "i" then
-- Whitney §336f
self:add("masculine_locative_i")
elseif self:inLexicon("rigvedic_locative_u") then
self:add("masculine_locative_u_rigvedic")
else
self:add("masculine_locative")
end
end
if self:inLexicon("krostu") then
-- The strong cases are those of kroṣṭṛ́, with the head's own accent (Whitney §343k).
self.stems.agent = string.gsub(self.stems.base, utilities.accent, "")
self:add("krostu_strong", {accent = self:headAccent()})
self:add("krostu_weak")
else
self:add(self:inLexicon("ari") and "ari_direct" or self:inLexicon("vi") and "vi_direct"
or "masculine_direct")
end
elseif self.gender == "f" then
self:add(vowel == "i" and "feminine_instrumental_locative_i" or "feminine_instrumental_locative_u")
self:add("feminine")
self:add("feminine_" .. vowel)
if self:inLexicon("jani") then
genitive = "jani_genitive"
end
else
if self:inLexicon("weakest_from_an") then
-- The weakest cases are those of akṣán etc., with the head's own accent (Whitney §431).
self.stems.an_stem = string.gsub(self.stems.base, utilities.accent, "")
self:add("weakest_from_an", {accent = self:headAccent()})
genitive = nil
-- Adjectives and nouns differ in the neuter (Whitney §344).
elseif self.adjective then
self:add(self:inLexicon("strong_neuter_adjective_u") and "strong_neuter_adjective"
or "neuter_adjective_dative_ablative")
self:add(vowel == "i" and "neuter_adjective_locative_i" or "neuter_adjective_locative_u")
self:add("neuter_adjective_genitive_dual")
else
self:add(self:inLexicon("strong_neuter_noun_u") and "strong_neuter_noun" or "neuter_noun_dative_ablative")
self:add(vowel == "i" and "neuter_noun_locative_i" or "neuter_noun_locative_u")
self:add("neuter_noun_genitive_dual")
end
self:add("neuter_direct")
if genitive then
self:add(self:inLexicon("vedic_instrumental_neuter_u") and "madhu_instrumental" or "neuter_instrumental")
end
end
self:add("oblique")
if genitive then
self:add(genitive)
end
self:category(vowel)
end
-- The ā-stems, both derived (feminine) and root stems.
function Analysis:longAStem()
if self.gender == "n" then
-- We don't build a neuter on the masculine nominatives in -ās that go with neuter nouns (Whitney §367b,
-- Wackernagel III p.129).
error("The neuter of radical stems in -ā ends in -a.", 0)
end
self.accent = string.match(self.head, "(" .. M.sa_utilities.accent .. "?)$")
local pronoun = self:isPronoun()
local pronominal = self.properties.pron or pronoun or self:inLexicon("pronominal_adjective")
local pronominal_and_nominal = self.properties.pron and self:inLexicon("optional_pronominal")
local root = self.properties.root
self.type = pronominal and "pronominal_long_a" or "long_a"
self:pronominalNumbersAndCases(pronoun, pronominal)
local monosyllabic = self:monosyllabic()
local masculine = self.links.masculine
-- A stem is a root stem with <root> or as a monosyllable, but a monosyllable is derived with <nonroot> or with a
-- masculine in -a. The pronominal stems and dvā́ are always derived.
local derived = pronominal or self:inLexicon("dva") or not (root or monosyllabic)
or monosyllabic and (root == false or masculine ~= nil and string.match(masculine, "a/?$") ~= nil)
if derived then
if self.gender == "m" then
error("Add <root> if this is a root noun or adjective.", 0)
end
self:category("long_a")
self:add(pronoun and self:inLexicon("tya") and "tya_feminine_nominative"
or pronoun and self:inLexicon("s_nominative") and "s_feminine_nominative" or "derived_nominative")
self:add(pronominal_and_nominal and "pronominal_and_nominal_derived" or pronominal and "pronominal_derived"
or "derived")
self:add("derived_direct")
self:add((self:baseMatches(".y$") or pronoun and self:baseMatches("^y$")) and "genitive_dual_after_y"
or "genitive_dual")
else
self:category("root_long_a")
if self.gender == "m" then
self:generalNote("root_long_a_masculine")
self:add("root_masculine")
else
-- The derived declension, except for the nominative singular (Macdonell p.249ff.).
self:add("root_feminine")
self:add(self:baseMatches(".y$") and "genitive_dual_after_y" or "genitive_dual")
end
end
self:add("oblique")
end
-- The ī- and ū-stems: strī, the derived stems (the vṛkī-, devī- and ū-declensions) and the root stems.
function Analysis:longIUStem()
if self.gender == "n" then
-- The Vedic forms that could come from a neuter ī-stem (Whitney §367b) are better given by hand.
error("The neuter of radical stems in -ī/ū ends in -i/u.", 0)
end
local vowel, accent = string.match(self.head, "([IU])(/?)$")
self.accent = accent
self.type = vowel == "I" and "long_i" or "long_u"
self:vowelStems(vowel)
local properties, masculine = self.properties, self.links.masculine
local monosyllabic = self:monosyllabic()
local feminine = self.gender == "f"
if self:inLexicon("stri") and not (masculine and string.match(masculine, "stf/?$")) then
self.options.iy_uv_before_vowel = true
self:add("stri")
elseif not (properties.root or monosyllabic) or monosyllabic and properties.root == false or properties.han then
if properties.vrki then
-- The vṛkī́-declension (Whitney §355ff.), given as the older forms of the later declension.
if vowel == "U" then
error("The vṛkī́-declension (<vrki>) is a declension of ī-stems.", 0)
end
self:category("vrki")
self:generalNote("vrki")
if properties.contract == false then
self.options.iy_uv_before_vowel = true
end
self:add("vrki")
self:add(accent == "" and "vrki_instrumental_barytone" or "vrki_instrumental_oxytone")
self:add(accent == "" and "vrki_genitive_dual_barytone" or "vrki_genitive_dual_oxytone")
elseif vowel == "I" then
self:category("long_i")
self:add("devi")
-- The Rigvedic genitive plural in -īnā́m (Whitney §319a).
self:add(accent == "" and "devi_genitive_plural_barytone" or "devi_genitive_plural_oxytone")
else
-- The ū-declension (Whitney §356a), given as the older forms of §364 (Wackernagel III p.189).
if not self.adjective then
self:category("long_u")
elseif self.gender == "m" then
self:category("long_u")
elseif masculine and string.match(masculine, "u" .. M.sa_utilities.accent .. "?$")
and not self:inLexicon("classical_long_u_feminine") then
self:generalNote("vedic_long_u_feminine")
end
if self:baseMatches("y$") or self:inLexicon("vedic_uv") then
-- With the Vedic -úv- (Macdonell p.290 §384a).
self:add("vedic_uv")
else
self:add("u_derived")
self:add(accent == "" and "u_instrumental_barytone" or "u_instrumental_oxytone")
self:add(accent == "" and "u_genitive_dual_barytone" or "u_genitive_dual_oxytone")
end
self:add("u_nominative_genitive")
end
self:add("derived_oblique")
self:add(vowel == "I" and "derived_vocative_i" or "derived_vocative_u")
else
self:category(vowel == "I" and "root_long_i" or "root_long_u")
if monosyllabic then
-- Root nouns (Whitney §351; Wackernagel III p.181).
self.options.iy_uv_before_vowel = true
self:add(feminine and "root_monosyllabic_feminine" or "root_monosyllabic")
self:add("root_monosyllabic_oblique")
else
-- Compounds of root nouns (Whitney §352; Wackernagel III §91a p.179, §100a, §100eα p.192-193;
-- Macdonell p.268, 288). They are uncontracted after two consonants, the ū-stems also when accented
-- (except in -sū/-ṣū), the ī-stems in -dhī also when accented before the ī, and the words listed in
-- `data.lexicon`. <contract> and <nocontract> override this.
local utilities = M.sa_utilities
local uncontracted = properties.contract == false or properties.contract ~= true and (
self:baseMatches(utilities.consonant .. utilities.consonant .. "$")
or vowel == "U" and (self:headMatches(utilities.accent) and not self:baseMatches("[sz]$")
or self:inLexicon("uncontracted_long_u_compound"))
or vowel == "I" and (self:inLexicon("uncontracted_long_i_compound")
or self:baseMatches("D$") and self:baseMatches(utilities.accent)))
if uncontracted then
-- -Ciy-/-Cuv- before a vowel.
self.options.iy_uv_before_vowel = true
self:add(feminine and "uncontracted_locative_feminine" or "uncontracted_locative")
else
self:add((accent ~= "" and "contracted_locative_oxytone" or "contracted_locative")
.. (feminine and "_feminine" or ""))
end
self:add(feminine and "compound_feminine_dative_ablative" or "compound_dative_ablative")
self:add("compound_oblique")
end
self:add("root_common")
end
end
-- The ṛ-stems, including nṛ́ and the feminine numerals tisṛ́ and cátasṛ.
function Analysis:vocalicRStem()
self.accent = string.match(self.head, "(/?)$")
self.type = "vocalic_r"
if self.gender == "f" and (self:inLexicon("tisr") or self:inLexicon("catasr")) then
-- Plural only (Whitney §482e, g). cátasṛ moves the accent to the ṛ, so it is added with the head's own
-- accent.
self.type = "numeral"
self.numbers = {p = true}
if self:inLexicon("tisr") then
self:add("tisr")
else
self:add("catasr", {accent = self:headAccent()})
end
return
end
self:category("vocalic_r")
if self.gender == "m" and self:inLexicon("nr") then
self:add("nr")
return
end
local r = self.properties.r
if self.gender == "f" and r == "A" and self:baseMatches("t$") and not self:baseMatches("^s?t$") then
error("The feminine of adjectives in -tṛ ends in -trī.", 0)
end
self.stems.lengthened_unaccented = self.stems.base .. "F"
if self.gender == "n" then
self:add("neuter")
else
if not r then
error("Give the vowel of the accusative singular with <r:a> or <r:ā>.", 0)
end
self:add("masculine_feminine")
self:add(r == "a" and "strong_short_a" or "strong_long_a")
self:add(self.gender == "f" and "feminine_accusative_plural" or "masculine_accusative_plural")
end
self:add("oblique")
end
-- The consonantal root stems. They also cover the stems in -āt/-it/-ut/-ṛt, -akt and -ās/-os, and the words listed
-- in `data.lexicon` that have sets of their own (catúr, púṃs, áp, dánt, anaḍváh, the compounds in -vah ...).
function Analysis:rootStem()
local utilities = M.sa_utilities
self.type = "root"
self.options.root_noun = true
if self:inLexicon("catur") then
-- Plural only, from whole forms (Whitney §482g).
if self.gender == "f" then
error("The feminine of catúr is cátasṛ.", 0)
end
self.type = "numeral"
self.numbers = {p = true}
self:addWholeForms(self.gender == "m" and "catur_masculine" or "catur_neuter", "")
self:add("catur_oblique")
return
end
self:category("root")
-- Words declined from whole forms, which need no <final:...>.
if self:inLexicon("ap") then
-- Plural only (Whitney §393); the RV. instr. and gen. sing. show with <sg>.
self.numbers = {p = true}
self:addWholeForms("ap", "")
return
elseif self:inLexicon("dant") then
self:addWholeForms("dant", "")
return
elseif self:inLexicon("anadvah") then
self:addWholeForms("anadvah", string.match(self.head, "^(.-)anaq"))
return
end
local vowel, accent, extra, final = string.match(self.head,
"(" .. utilities.vowel .. ")(" .. utilities.accent .. "?)([rM]?)([kgGcjwqtTdDpBmrzShs]t?)$")
self.accent = accent
local base = self.stems.base
if self:inLexicon("avayaj") then
-- The nom. and voc. sing. avayā́s and the middle stem avayás need no <final:...> (Whitney §406).
self.stems.nominative = base .. "A" .. accent .. "s"
self.stems.middle = base .. "a" .. accent .. "s"
self:add("avayaj")
return
end
if string.match(final, "[jSh]") and not self.properties.final then
error("Give the final consonant of the nominative singular with <final:k> or <final:ṭ>.", 0)
end
self.options.final_obstruent = self.properties.final
self.options.diaspirate = self.properties.diaspirate or false
local nasal = string.gsub(final, ".", utilities.homorganic_nasal)
self.stems.neuter_plural = base .. vowel .. accent .. nasal .. final
self.stems.neuter_plural_unaccented = base .. vowel .. nasal .. final
-- The strong stem is the head, but with the vowel lengthened in pád "foot" and its compounds (only the masculines,
-- see `data.lexicon`) and in a few others (Whitney §387).
local pad = self.gender == "m" and self:inLexicon("pad")
if pad or self:inLexicon("lengthened_strong") then
self.stems.strong = base .. utilities.lengthen[vowel .. accent] .. extra .. final
else
self.stems.strong = self.head
end
if self.gender == "n" then
-- The neuter nominative plural, with the nasal (Whitney §389c).
self:add((string.match(final, "[mr]") == nil and extra == "") and "neuter_plural_nasal" or "neuter_plural")
end
local monosyllabic = self:monosyllabic() and not (accent == "\\" or self.options.initial_svarita)
if self:inLexicon("pums") then
self:add("pums")
elseif self:inLexicon("vah") and self.gender ~= "n" then
-- vāh in the strong and middle cases and ūh in the weakest, where a + ū gives au (Whitney §403).
self.stems.weakest = string.gsub(base, "av$", "O" .. accent) .. "h"
self:add("vah")
elseif self:inLexicon("ksam") then
self:add("ksam")
elseif self:inLexicon("heteroclite_an") then
-- The weak and middle cases also from asán, yakán, śakán and doṣán, with the head's own accent
-- (Whitney §432).
local an_stem = string.gsub(self.head, utilities.accent, "")
an_stem = string.gsub(an_stem, "f[jt]$", "")
self.stems.an_stem = string.gsub(an_stem, "os$", "oz")
if self.gender == "n" then
self:add(monosyllabic and "monosyllabic_neuter_direct" or "polysyllabic_neuter_direct")
elseif monosyllabic then
self:add("monosyllabic_direct")
self:add("monosyllabic_accusative_plural")
else
self:add("polysyllabic_direct")
self:add("polysyllabic_nominative")
end
self:add(monosyllabic and "heteroclite_monosyllabic" or "heteroclite", {accent = self:headAccent()})
elseif monosyllabic then
if self.gender == "n" then
self:add("monosyllabic_neuter_direct")
elseif self:inLexicon("nasal_strong") then
self.stems.nasal = base .. vowel .. accent .. nasal .. final
self:add("yuj_direct")
else
self:add("monosyllabic_direct")
end
if self:inLexicon("dvar") then
-- The weak and middle cases also from dur in the Veda (Whitney §388).
self.stems.contracted = string.gsub(base, "v$", "u") .. final
self:add("dvar")
else
if self.gender ~= "n" then
-- The acc. pl. is accented on the ending in only some monosyllables (Whitney §390a).
self:add(self:inLexicon("oxytone_accusative_plural") and "oxytone_accusative_plural"
or self:inLexicon("optional_oxytone_accusative_plural") and "optional_oxytone_accusative_plural"
or "monosyllabic_accusative_plural")
end
self:add("monosyllabic_oblique")
self:add(pad and "pad_middle" or (self.gender == "m" and self:inLexicon("mas")) and "mas_middle"
or "monosyllabic_middle")
self:add(final == "s" and "monosyllabic_locative_plural_s" or "monosyllabic_locative_plural")
end
else
if self.gender == "n" then
self:add("polysyllabic_neuter_direct")
else
self:add("polysyllabic_direct")
-- The Vedic masculine nominative singular of the adjectives in -dṛ́ś (Wackernagel III p.246).
self:add((self.gender == "m" and self:inLexicon("vedic_nominative_drs")) and "drs_nominative"
or "polysyllabic_nominative")
end
self:add("polysyllabic_oblique")
if pad then
self:add("pad_compound_middle")
else
self:add("polysyllabic_middle")
self:add(final == "s" and "polysyllabic_locative_plural_s" or "polysyllabic_locative_plural")
end
end
end
-- The as-, is- and us-stems, including the comparatives in -yas.
function Analysis:sStem()
local utilities = M.sa_utilities
local vowel, accent = string.match(self.head, "([aiu])(" .. utilities.accent .. "?)s$")
self.accent = accent
self.type = vowel .. "s"
local base = self.stems.base
self.stems.neuter_plural = base .. utilities.lengthen[vowel] .. accent .. "Ms"
self.stems.neuter_plural_unaccented = base .. utilities.lengthen[vowel] .. "Ms"
local comparative = vowel == "a" and (self:baseMatches("[^aAiK/\\]" .. utilities.accent .. "?y$")
or self:baseMatches("jyA/?y$"))
if self.gender == "m" and self:inLexicon("usanas") then
-- Whitney §416, §355a
self:add("usanas")
self:category("as")
return
end
if comparative and self.gender ~= "n" then
if self.gender ~= "m" then
error("The feminine of comparatives in -yas ends in -yasī.", 0)
end
self:add("comparative_masculine")
elseif self.gender == "m" or self.gender == "f" then
if vowel == "a" then
self:add("as_direct")
else
self:add("is_us_direct")
-- The Vedic vocative (Wackernagel III p.292 §152c).
self:add(vowel == "i" and "is_vocative" or "us_vocative")
end
self:add("masculine_feminine_dual")
else
-- Compound adjectives in -as (Macdonell p.226; Whitney §418a).
if self.adjective and vowel == "a" and not comparative
and (self:baseMatches(utilities.vowel .. ".*" .. utilities.vowel) or self:baseMatches("^sv")) then
self:add("compound_as_neuter_nominative")
else
self:add("neuter_nominative")
end
self:add("neuter_direct")
end
self:add("oblique")
self:category(comparative and "comparative" or vowel .. "s")
end
-- The an-stems.
function Analysis:anStem()
local utilities = M.sa_utilities
self.accent = string.match(self.head, "a(" .. utilities.accent .. "?)n$")
self.type = "an"
self.options.retroflex_stem_n = true
local properties = self.properties
local contract = properties.contract
if not self:baseMatches(utilities.consonant .. "[NYRnmyrlv]$") then
contract = true
end
self:category("an")
if self.gender == "n" and (self:inLexicon("ahan") or self:inLexicon("udhan")) then
-- With forms from parallel stems in -ar and -as (Whitney §430).
self:add(self:inLexicon("ahan") and "ahan" or "udhan")
return
end
local contracted_weakest = self:inLexicon("contracted_weakest")
if contracted_weakest then
-- śún, yū́n, maghón (Whitney §427–428): the v becomes u, which makes o with an a before it and ū with
-- a u.
local weakest = string.gsub(self.stems.base, "a(/?)v$", "o%1")
weakest = string.gsub(weakest, "u(/?)v$", "U%1")
self.stems.weakest = string.gsub(weakest, "(" .. utilities.consonant .. ")v$", "%1u" .. self.accent)
end
if self.gender == "n" then
-- Wackernagel III p.238 presupposes a neuter plural -hāni for -han.
self:add("neuter_direct")
self:add(properties.han and "han_neuter_nominative" or "neuter_nominative")
self:add(contract and "contracted_neuter_dual" or "neuter_dual")
else
self:add("masculine_nominative_vocative")
if properties.han or self:inLexicon("short_strong_an") then
self:add("short_strong")
self:add(properties.han and "han_accusative_plural" or "short_strong_accusative_plural")
else
-- Whitney §426b; Wackernagel III p.267.
self:add(self:inLexicon("optional_short_strong_an") and "optional_short_strong" or "strong")
self:add(contracted_weakest and "contracted_weakest_accusative_plural"
or contract and "contracted_accusative_plural" or "uncontracted_accusative_plural")
end
end
-- The Vedic locative singular without -i (Whitney §425c).
self:add(contracted_weakest and "contracted_weakest" or contract and "contracted_oblique" or "uncontracted_oblique")
self:add(self:inLexicon("maghavan") and "maghavan_middle" or "oblique")
end
-- The in-stems.
function Analysis:inStem()
self.accent = string.match(self.head, "i(" .. M.sa_utilities.accent .. "?)n$")
self.type = "in"
self.options.retroflex_stem_n = true
self:category("in")
-- pathín, mathín and ṛbhukṣín, from whole forms (Whitney §433–434).
local panthan = self:inLexicon("pathin") and "pathin" or self:inLexicon("mathin") and "mathin"
or self:inLexicon("rbhuksin") and "rbhuksin"
if panthan and self.gender == "m" then
self:addWholeForms(panthan, "")
return
end
self:add(self.gender == "n" and "neuter_direct" or "masculine_direct")
self:add("oblique")
end
-- The at-stems: the participles in -at (and -āt), and the stems in -vat/-mat.
function Analysis:atStem()
local consonant, vowel, accent = string.match(self.head, "([mv]?)([aA])(" .. M.sa_utilities.accent .. "?)t$")
self.accent = accent
local properties = self.properties
local long = vowel == "A" and "long_a" or "short_a"
if self:headMatches("[vm]a/?t$") and not properties.participle then
self.type = consonant .. "at"
self:add(self.gender == "n" and "vat_neuter" or "vat_masculine")
self:add("vat_oblique")
self:category(consonant .. "at")
return
end
self.type = "at"
if properties.nonasal then
-- Participles like júhvat, with no nasal in the strong stem.
self:add(self.gender == "n" and "nonasal_neuter" or "nonasal_masculine")
self:add("nonasal_oblique")
else
if self.gender ~= "n" then
self:add("participle_masculine_" .. long)
else
-- The neuter nominative dual is the feminine stem (Whitney §443a; §447b says it may be artificial).
local feminines = properties.feminine or self.links.feminine
if not feminines or not feminines[1] then
error("Give the nominative dual (the feminine stem) with <feminine:...>.", 0)
end
self.stems.feminine = feminines[1]
self.stems.second_feminine = feminines[2]
self:add(feminines[2] and "neuter_dual_two_feminines" or "neuter_dual_feminine")
-- The Rigvedic neuter plural in -ānti (Wackernagel III p.262).
self:add("participle_neuter_plural_" .. long)
self:add("participle_neuter_singular")
self:add("participle_neuter_singular_" .. long)
end
self:add("participle_oblique_" .. long)
end
self:add("oblique")
self:add("oblique_" .. long)
self:category("at")
end
-- The añc-stems, which have a strong stem (the head), a middle stem in -ac- and a weakest stem.
function Analysis:ancStem()
local consonant, vowel, accent = string.match(self.head, "([yv]?)([aA])(" .. M.sa_utilities.accent .. "?)Yc$")
self.accent = accent
self.type = "anc"
local middle = string.gsub(self.stems.base, "Yc$", "c")
self.stems.base = middle
self:add(self.gender == "m" and "masculine_direct" or "neuter_direct")
self:add("middle_oblique")
local weakest
if vowel == "A" then
weakest = middle
elseif self:inLexicon("tiryanc") then
weakest = string.gsub(middle, "ya(/?)c$", "a%1Sc")
elseif consonant ~= "" then
weakest = string.gsub(middle, "([yv])a([/\\]?)c$", function(semivowel, stem_accent)
return (semivowel == "y" and "I" or "U") .. (stem_accent == "" and "" or "/") .. "c"
end)
elseif self:inLexicon("ud_anc") then
weakest = string.gsub(middle, "ac$", "Ic")
else
error("This añc-stem is not supported.", 0)
end
self.stems.weakest = weakest
if vowel == "A" or accent ~= "/" then
self:add(self.gender == "m" and "masculine_accusative_plural" or "neuter_dual")
self:add("weakest_oblique")
else
-- Oxytones have both accentuations (Whitney §410).
self:add(self.gender == "m" and "oxytone_masculine_accusative_plural" or "oxytone_neuter_dual")
self:add("oxytone_weakest_oblique")
end
self:add("copies")
self:category("anc")
end
-- The o-stem gó, the au-stem nau and the ai-stem rái, and their compounds; and dyó (dyú, dív).
function Analysis:diphthongStem(vowel, type)
self.type = type
self:category(type)
if self:inLexicon("dyo") then
-- From whole forms. The voc. dyaùs has a svarita, read as díāus (Whitney §361e).
self.options.initial_svarita = true
self:addWholeForms("dyo", "")
return
end
self.accent = string.match(self.head, vowel .. "(" .. M.sa_utilities.accent .. "?)$")
self:add("all")
end
-- The vāṃs-stems, i.e. the perfect participles.
function Analysis:vamsStem()
local utilities = M.sa_utilities
self.accent = string.match(self.head, "vA(" .. utilities.accent .. "?)Ms$")
self.type = "vams"
local base = self.stems.base
local weak
if self:inLexicon("vams_glide") or self:baseMatches("u$") then
weak = base .. "v"
elseif self:baseMatches("U$") then
weak = string.gsub(base, "U$", "uv")
elseif self:inLexicon("vams_keep_i") then
weak = base
elseif self:baseMatches("[aAIuUfFxeEoO]" .. utilities.accent .. "?M?" .. utilities.consonant .. "+i$")
or self:inLexicon("vams_drop_i") then
-- An i after a vowel and consonants is dropped (cerivā́ṃs, cerúṣ-). The vowel is never a short i, as the
-- second i of śiśrivā́ṃs and the like belongs to the root.
weak = string.gsub(base, "i$", "")
elseif self.properties.retroflex_l then
weak = string.gsub(string.gsub(base, "q$", "L"), "Q$", "Lh")
else
weak = base
end
self.stems.weak = weak
self:add(self.gender == "m" and "masculine_direct" or "neuter_direct")
self:add("oblique")
self:category("vams")
end
-- The personal pronouns. Their forms are whole forms on an empty stem, and the head (ahám or tvám) says which person.
function Analysis:personal()
local first = self:headMatches("^a")
self.type = first and "first_person" or "second_person"
self.stems.base = ""
self:add(first and "first" or "second")
end
-- The demonstratives ayám (iyám, idám), asaú (adás) and ena, from whole forms on an empty stem. The head says
-- which of them it is, and the gender which set of forms.
function Analysis:pronoun()
local lexeme = self:headMatches("^en[aA]") and "ena" or self:headMatches("^a/?[sd]") and "adas" or "idam"
self.type = "demonstrative"
self.stems.base = ""
self:add(lexeme .. "_" .. ({m = "masculine", f = "feminine", n = "neuter"})[self.gender])
if self.gender ~= "f" then
self:add(lexeme .. "_masculine_neuter")
end
if lexeme == "ena" then
-- Only the acc. of all numbers, the instr. sing. and the gen.-loc. du. (Whitney §500).
self:add("ena_common")
self.cases = {"acc", "ins", "gen", "loc"}
end
end
local CLASS_METHODS = {
numeral = Analysis.numeral,
a = Analysis.aStem,
short_iu = Analysis.shortIUStem,
long_a = Analysis.longAStem,
long_iu = Analysis.longIUStem,
vocalic_r = Analysis.vocalicRStem,
root = Analysis.rootStem,
s = Analysis.sStem,
an = Analysis.anStem,
["in"] = Analysis.inStem,
at = Analysis.atStem,
anc = Analysis.ancStem,
o = function(analysis) analysis:diphthongStem("o", "o") end,
au = function(analysis) analysis:diphthongStem("O", "au") end,
ai = function(analysis) analysis:diphthongStem("E", "ai") end,
vams = Analysis.vamsStem,
personal = Analysis.personal,
pronoun = Analysis.pronoun,
}
------------------------------------------------------------------------------------------------------------------------
-- Generation --
------------------------------------------------------------------------------------------------------------------------
--[==[
Generate the forms of form groups, slot by slot. Each form is `{slp1 = ..., note = KEY, stem = ..., ending = ...,
options = {...}, position = N}`, i.e. the joined form, its note, the inputs to `join` and the position of the ending
within its cell. With `novedic`, the Vedic endings are left out, and the remaining endings keep their positions. A cell
that copies another (`"[nom]"`) is traced to the cell it copies once every group has run.
]==]
local FormGenerator = {}
FormGenerator.__index = FormGenerator
local ENDING_FLAGS = {"iy_uv_before_vowel", "keep_s_before_voiceless", "strip_stem_accent"}
function FormGenerator.new(novedic)
return setmetatable({novedic = novedic}, FormGenerator)
end
function FormGenerator:form(group, ending, case, position)
local text, note, stem_key = ending, nil, nil
if type(ending) == "table" then
text, note, stem_key = ending[1], ending.note, ending.stem
end
if self.novedic and note and M.data.notes[note].vedic then
return nil
end
local stem
if string.sub(text, 1, 1) == "+" then
text = string.sub(text, 2)
stem = group.head
elseif stem_key then
stem = group.stems[stem_key] or error(("Internal error: no stem '%s' in %s.%s"):format(stem_key,
group.class, group.set))
else
stem = group.stems.base
end
text = string.gsub(text, "@", group.accent)
local options = {}
for key, value in pairs(group.options) do
options[key] = value
end
if type(ending) == "table" then
for _, flag in ipairs(ENDING_FLAGS) do
if ending[flag] then
options[flag] = true
end
end
-- A form whose final consonant isn't the table's <final:...>, such as the Vedic yúṅ beside yúk.
if ending.final then
options.final_obstruent = ending.final
end
end
options.recessive_accent = case == "voc"
return {slp1 = M.sa_utilities.join(stem, text, options), note = note, stem = stem, ending = text,
options = options, position = position}
end
--[==[
Generate the forms of `groups`. Return `cells` (slot -> list of forms) and `copies` (slot -> the slot whose forms it
takes). A slot that two groups fill is an internal error.
]==]
function FormGenerator:generate(groups)
local cells, copies = {}, {}
for _, group in ipairs(groups) do
for number, cases in pairs(M.data.endings[group.class][group.set]) do
for case, cell in pairs(cases) do
local slot = case .. "_" .. number
if cells[slot] or copies[slot] then
error(("Internal error: the slot %s is filled twice (%s.%s)"):format(slot, group.class, group.set))
end
local copied = type(cell) == "string" and string.match(cell, "^%[(.*)%]$")
if copied then
copies[slot] = copied .. "_" .. number
else
local forms = {}
if type(cell) == "string" then
cell = {cell}
end
for position, ending in ipairs(cell) do
local form = self:form(group, ending, case, position)
if form then
table.insert(forms, form)
end
end
cells[slot] = forms
end
end
end
end
-- Follow copies of copies back to the cell they come from.
for slot in pairs(copies) do
local source, seen = copies[slot], {[slot] = true}
while copies[source] do
if seen[source] then
error("Internal error: the copies of " .. slot .. " go round in a circle")
end
seen[source] = true
source = copies[source]
end
if not cells[source] then
error(("Internal error: the slot %s copies %s, which is empty"):format(slot, source))
end
copies[slot] = source
end
return cells, copies
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the cases of a table made by `analysis`: those it sets, or else those listed in the entry of its class in
-- `data.classes`, or else every case except the enclitic ones.
local function cases_of(analysis)
local codes = analysis.cases
for _, entry in ipairs(M.data.classes) do
if entry.id == analysis.class then
codes = codes or entry.cases
end
end
local cases = {}
for _, case in ipairs(M.data.cases) do
local listed = not codes and not case.enclitic
for _, code in ipairs(codes or {}) do
listed = listed or code == case.code
end
if listed then
table.insert(cases, case)
end
end
return cases
end
-- Return the description of a table of gender `gender` and type `type` that titles and error messages use, e.g.
-- "masculine a-stem" or "first-person pronoun". A manual table gives just its gender ("neuter"), or the empty string
-- if it has none.
local function table_kind(gender, type)
local words = {}
local entry = gender and M.data.genders[gender]
if entry and entry.in_title ~= false then
table.insert(words, entry.name:lower())
end
if type then
table.insert(words, M.data.types[type])
end
return table.concat(words, " ")
end
--[==[
One table. It holds the `head` (in SLP1), the `gender`, the stem `class` and `type`, the `numbers` and `cases` shown and
the forms of every slot: `slots[slot]` is a list of `{slp1 = ..., notes = {text...}}`, empty if the slot has no form,
and a form from a cell parameter also has `override = true`. It also keeps the form `groups` it was declined with, the
generated forms in `generated`, the slots that copy another in `copies` and the overridden slots in `overridden`, as
well as its `categories` and `general_notes` (keys into `data`) and the `user_notes` given in the call.
]==]
local Declension = {}
Declension.__index = Declension
function Declension.new(analysis, cells, copies, numbers)
local declension = setmetatable({
head = analysis.head,
gender = analysis.gender,
adjective = analysis.adjective,
class = analysis.class,
type = analysis.type,
numbers = numbers,
cases = cases_of(analysis),
groups = analysis.groups,
generated = cells,
copies = copies,
slots = {},
overridden = {},
categories = analysis.categories,
general_notes = analysis.general_notes,
user_notes = {},
}, Declension)
for _, case in ipairs(declension.cases) do
for _, number in ipairs(M.data.numbers) do
local slot = case.code .. "_" .. number.code
if numbers[number.code] and not cells[copies[slot] or slot] then
error(("Internal error: no forms for the slot %s (%s)"):format(slot, analysis.class))
end
local forms = {}
for _, form in ipairs(cells[copies[slot] or slot] or {}) do
table.insert(forms, {slp1 = form.slp1, notes = form.note and {M.data.notes[form.note].text} or {}})
end
declension.slots[slot] = forms
end
end
return declension
end
--[==[
Make a manual table (`<manual>`), which has no stem class and no generated forms: every slot starts out empty and is
filled by the cell parameters. `gender` can be {nil}.
]==]
function Declension.manual(head, gender, numbers)
local cells = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
cells[case.code .. "_" .. number.code] = {}
end
end
return Declension.new({head = head, gender = gender, adjective = false, class = "manual", groups = {},
categories = {}, general_notes = {}}, cells, {}, numbers)
end
-- Show the case `code` too, in its place in `data.cases`, with its cells empty.
function Declension:showCase(code)
local cases = {}
for _, case in ipairs(M.data.cases) do
local shown = case.code == code
for _, other in ipairs(self.cases) do
shown = shown or other.code == case.code
end
if shown then
table.insert(cases, case)
end
end
self.cases = cases
for _, number in ipairs(M.data.numbers) do
self.slots[code .. "_" .. number.code] = {}
end
end
-- Show the number `code` too, with its cells empty. The set of numbers can be shared with other tables, so it is
-- copied first.
function Declension:showNumber(code)
local numbers = {}
for shown in pairs(self.numbers) do
numbers[shown] = true
end
numbers[code] = true
self.numbers = numbers
for _, case in ipairs(self.cases) do
self.slots[case.code .. "_" .. code] = {}
end
end
--[==[
Replace the forms of `slot` with `forms` from `Overrides`. These are written in IAST or in the display script and read
with `bridge`; a form of `-` means no form. A form for a case the table doesn't show (the vocative of a pronoun, a case
ena lacks) adds that row, and a form for a number it doesn't show (the singular of áp) adds that column, with the
other cells of the row or column empty. A `-` in such a slot adds nothing.
]==]
function Declension:override(slot, forms, bridge)
local replaced = {}
for _, form in ipairs(forms) do
if form.written ~= "-" then
table.insert(replaced, {slp1 = bridge:toSlp1(form.written), notes = form.footnotes, override = true})
end
end
local case, number = slot:match("^(.-)_([sdp])$")
if not self.slots[slot] then
if not replaced[1] then
return
end
self:showCase(case)
end
if replaced[1] and not self.numbers[number] then
self:showNumber(number)
end
self.slots[slot] = replaced
self.overridden[slot] = true
end
--[==[
Return the names of the table's categories. `kind` is `noun` ({{tl|sa-ndecl}}), `adjective` (the masculine table of an
adjective), `numeral` or {nil}, which gives none (an adjective's other tables).
]==]
function Declension:categoryNames(kind)
local names = {}
if kind then
for _, key in ipairs(self.categories) do
table.insert(names, M.data.categories[key][kind])
end
end
return names
end
-- Return the texts of the table's general notes.
function Declension:generalNoteTexts()
local texts = {}
for _, key in ipairs(self.general_notes) do
table.insert(texts, M.data.general_notes[key])
end
return texts
end
--[==[
Return the data of the table for {{para|json|1}}: the head, the gender, the stem class and type, the numbers shown, and
for each slot its forms in SLP1, in the display script and in IAST, with their notes and whether they come from a cell
parameter. It also has the user's notes, the general notes, the categories of `kind` (see `categoryNames`) and whether
`nocat` was given.
]==]
function Declension:toJson(bridge, kind, nocat)
local slots = {}
for slot, forms in pairs(self.slots) do
local list = {}
for _, form in ipairs(forms) do
table.insert(list, {
slp1 = form.slp1,
form = bridge:toNative(form.slp1),
translit = bridge:toIast(form.slp1),
notes = form.notes,
override = form.override,
})
end
slots[slot] = list
end
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.numbers[number.code] then
table.insert(numbers, number.code)
end
end
return {
head = self.head,
gender = self.gender,
class = self.class,
type = M.data.types[self.type],
numbers = numbers,
slots = slots,
user_notes = self.user_notes,
general_notes = self:generalNoteTexts(),
categories = self:categoryNames(kind),
nocat = nocat or false,
}
end
------------------------------------------------------------------------------------------------------------------------
-- The table --
------------------------------------------------------------------------------------------------------------------------
--[==[
Render a `Declension` as a table with [[Module:inflection-table]]. There is a column for each number shown and a row for
each case, and each row is marked with `data-case` so that scripts can reorder the cases. The cells come from
[[Module:inflection utilities]]' `show_forms`, which gives each form in the display script, linked with an accelerator
for `lemma`, with its IAST below. The footnotes, the user's notes and the general notes go under the table, in that
order. `kind` says which categories to add (see `Declension:categoryNames`); with {nil}, none are added.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(declension, bridge, lemma, kind)
return setmetatable({declension = declension, bridge = bridge, lemma = lemma, kind = kind}, TableRenderer)
end
-- Return the numbers shown, in order.
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.declension.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the accelerator tags of a slot: the case, then the gender for an adjective's table, then the number.
function TableRenderer:accel(case, number)
local declension = self.declension
local tags = {case.accel}
if declension.adjective then
table.insert(tags, M.data.genders[declension.gender].accel)
end
table.insert(tags, number.accel)
return table.concat(tags, "|")
end
-- Return the forms of every slot shown, as linked text (an em dash for none), and the footnotes, numbered case by case.
function TableRenderer:cells()
local declension, bridge = self.declension, self.bridge
local formtable, slot_list = {}, {}
for _, case in ipairs(declension.cases) do
for _, number in ipairs(self:numbers()) do
local slot = case.code .. "_" .. number.code
local forms = declension.slots[slot]
if forms[1] then
local list = {}
for _, form in ipairs(forms) do
local footnotes
if form.notes[1] then
footnotes = {}
for _, note in ipairs(form.notes) do
table.insert(footnotes, "[" .. note .. "]")
end
end
table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1),
footnotes = footnotes})
end
formtable[slot] = list
end
table.insert(slot_list, {slot, self:accel(case, number)})
end
end
M.inflection_utilities.show_forms(formtable, {
lang = M.lang,
lemmas = {self.lemma},
slot_list = slot_list,
include_translit = true,
})
return formtable, formtable.footnote
end
-- Return the title of the table, e.g. "Masculine a-stem declension of देव".
function TableRenderer:title()
local declension, bridge = self.declension, self.bridge
local head = M.links.full_link({lang = M.lang, sc = bridge.script, alt = bridge:toNative(declension.head), tr = "-"})
local kind = table_kind(declension.gender, declension.type)
if kind == "" then
return "biến cách của " .. head
end
return mw.ustring.upper(mw.ustring.sub(kind, 1, 1)) .. mw.ustring.sub(kind, 2) .. " biến cách của " .. head
end
function TableRenderer:render()
local declension = self.declension
local cells, footnotes = self:cells()
local lines = {M.inflection_table.make_top{
title = self:title(),
palette = "blue",
tall = "yes",
lang = "sa",
}}
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(self:numbers()) do
table.insert(lines, '! class="outer" | ' .. number.name)
end
for _, case in ipairs(declension.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, "! " .. case.name)
for _, number in ipairs(self:numbers()) do
table.insert(lines, "| " .. cells[case.code .. "_" .. number.code])
end
end
local notes = {}
if footnotes ~= "" then
table.insert(notes, footnotes)
end
for _, note in ipairs(declension.user_notes) do
table.insert(notes, note)
end
for _, note in ipairs(declension:generalNoteTexts()) do
table.insert(notes, note)
end
table.insert(lines, M.inflection_table.make_bottom{notes = table.concat(notes, "<br />")})
local categories = declension:categoryNames(self.kind)
if categories[1] then
table.insert(lines, M.utilities.format_categories(categories, M.lang))
end
return table.concat(lines, "\n")
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
local ALL_NUMBERS = {s = true, d = true, p = true}
-- Return true if `cells` or `copies` (as made by `FormGenerator:generate`) have a slot of the number `code`.
local function has_number(cells, copies, code)
for _, slots in ipairs({cells, copies}) do
for slot in pairs(slots) do
if string.match(slot, "_" .. code .. "$") then
return true
end
end
end
return false
end
--[==[
Decline one table without a frame. `input` has the following fields:
* `head`: the head, in SLP1;
* `gender`: `m`, `f`, `n`, `num` (the numerals) or `pers` (the personal pronouns);
* `adjective`: true if the table is one of an adjective's tables;
* `properties`: what the indicators set, in SLP1: `root` (true, false for `nonroot`, or nil), `vrki`, `pron`,
`novedic`, `r` (`a` or `A`), `final` (`k`, `w` or `t`), `diaspirate`, `participle`, `nonasal`, `contract` (true,
false for `nocontract`, or nil), `han`, `svarita`, `retroflex_l`, `husband`, `feminine` (a list of stems) and
`numbers` (a set of s/d/p);
* `links`: the other heads of an adjective that the table looks at, i.e. `masculine` (for a feminine table) and
`feminine` (a list, for the neuter table).
Return the Declension.
]==]
function export.decline_table(input)
local properties = input.properties or {}
local class, base = Head.new(input.head):detectClass(input.gender, properties)
if not class then
error("No declension class could be detected. Please check the head or specify the declension.", 0)
end
local analysis = Analysis.new{head = input.head, base = base, gender = input.gender, adjective = input.adjective,
properties = properties, links = input.links, class = class}
CLASS_METHODS[class](analysis)
local cells, copies = FormGenerator.new(properties.novedic):generate(analysis.groups)
local numbers = input.gender == "num" and {p = true} or properties.numbers or analysis.numbers or ALL_NUMBERS
for _, number in ipairs(M.data.numbers) do
if numbers[number.code] and not has_number(cells, copies, number.code) then
error(("This word has no %s."):format(number.name), 0)
end
end
return Declension.new(analysis, cells, copies, numbers)
end
-- Return true if a table of class `class` and gender `gender` uses the indicator defined by `definition`.
local function uses(definition, class, gender)
return (definition.classes == nil or definition.classes[class] == true)
and (definition.genders == nil or definition.genders[gender] == true)
end
-- Return the cell parameters of a table from `args`, by slot. Each parameter is the slot preceded by `prefix` (empty
-- for a noun, otherwise `m_`, `f2_`, etc.).
local function cell_values(args, prefix)
local values = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
local slot = case.code .. "_" .. number.code
values[slot] = args[prefix .. slot]
end
end
return values
end
local function cell_parameters(params, prefix)
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(M.data.numbers) do
params[prefix .. case.code .. "_" .. number.code] = {}
end
end
end
--[==[
Implement {{tl|sa-ndecl}} without a frame, for other modules and for testing. `args` are the template's arguments and
`pagename` is the page's title. Return the Declension, its ScriptBridge and the processed args.
]==]
function export.decline_noun(args, pagename)
local params = {
[1] = {},
note = {list = true},
nocat = {type = "boolean"},
json = {type = "boolean"},
}
cell_parameters(params, "")
args = M.parameters.process(args, params)
local spec = Spec.parse(args[1] or "", "noun")
local head = spec.head ~= "" and spec.head or pagename
local bridge = ScriptBridge.new(head, pagename)
local gender
for name, definition in pairs(M.data.indicators.noun) do
if definition.group == "gender" and spec.indicators[name] then
gender = name
end
end
local properties = spec:properties(bridge)
local declension
if spec.indicators.manual then
for name, definition in pairs(M.data.indicators.noun) do
if spec.indicators[name] and name ~= "manual" and definition.group ~= "gender"
and definition.group ~= "numbers" then
error(("The indicator '%s' does not apply to a manual table"):format(name), 0)
end
end
declension = Declension.manual(bridge:toSlp1(head), gender,
gender == "num" and {p = true} or properties.numbers or ALL_NUMBERS)
else
declension = export.decline_table{head = bridge:toSlp1(head), gender = gender, properties = properties}
for name in pairs(spec.indicators) do
local definition = M.data.indicators.noun[name]
if definition.group ~= "gender" and not uses(definition, declension.class, gender) then
error(("The indicator '%s' does not apply to a %s"):format(name, table_kind(gender, declension.type)), 0)
end
end
end
for slot, forms in pairs(Overrides.parse(cell_values(args, "")).slots) do
declension:override(slot, forms, bridge)
end
declension.user_notes = args.note
return declension, bridge, args
end
--[==[
The tables of an adjective, in `tables`, each a Declension, in this order: the masculine, a feminine for each head of
`f:` (by default the masculine head), and the neuter (the head of `n:`, by default the masculine head).
]==]
local AdjectiveDeclension = {}
AdjectiveDeclension.__index = AdjectiveDeclension
--[==[
Implement {{tl|sa-adecl}} without a frame, for other modules and for testing. `args` are the template's arguments and
`pagename` is the page's title. Return the AdjectiveDeclension, its ScriptBridge and the processed args.
]==]
function export.decline_adjective(args, pagename)
local params = {
[1] = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
}
local spec = Spec.parse(args[1] or "", "adjective")
local feminine_specs = spec.indicators.f or {Spec.parse("", "adjective", true)}
local prefixes = {"m_", "n_"}
for position = 1, #feminine_specs do
table.insert(prefixes, position == 1 and "f_" or "f" .. position .. "_")
end
for _, prefix in ipairs(prefixes) do
cell_parameters(params, prefix)
params[prefix .. "note"] = {list = true}
end
args = M.parameters.process(args, params)
local masculine_head = spec.head ~= "" and spec.head or pagename
local bridge = ScriptBridge.new(masculine_head, pagename)
local shared = spec:properties(bridge)
local masculine_slp1 = bridge:toSlp1(masculine_head)
-- One entry per table, with its head (and any spec of its own), gender, cell prefix and links.
local tables = {{spec = nil, slp1 = masculine_slp1, gender = "m", prefix = "m_"}}
local feminine_stems = {}
for position, feminine_spec in ipairs(feminine_specs) do
local slp1 = feminine_spec.head ~= "" and bridge:toSlp1(feminine_spec.head) or masculine_slp1
table.insert(feminine_stems, slp1)
table.insert(tables, {spec = feminine_spec, slp1 = slp1, gender = "f",
prefix = position == 1 and "f_" or "f" .. position .. "_", links = {masculine = masculine_slp1}})
end
local neuter_spec = spec.indicators.n
table.insert(tables, {spec = neuter_spec,
slp1 = neuter_spec and neuter_spec.head ~= "" and bridge:toSlp1(neuter_spec.head) or masculine_slp1,
gender = "n", prefix = "n_", links = {feminine = {feminine_stems[1], feminine_stems[2]}}})
local adjective = setmetatable({tables = {}}, AdjectiveDeclension)
local used = {}
for _, item in ipairs(tables) do
local properties = item.spec and item.spec:properties(bridge, shared) or shared
local declension = export.decline_table{head = item.slp1, gender = item.gender, adjective = true,
properties = properties, links = item.links}
for name, definition in pairs(M.data.indicators.adjective) do
if spec.indicators[name] and definition.value ~= "spec" and uses(definition, declension.class, item.gender) then
used[name] = true
end
end
for name in pairs(item.spec and item.spec.indicators or {}) do
if not uses(M.data.indicators.adjective[name], declension.class, item.gender) then
error(("The indicator '%s' does not apply to the %s"):format(name,
table_kind(item.gender, declension.type)), 0)
end
end
for slot, forms in pairs(Overrides.parse(cell_values(args, item.prefix)).slots) do
declension:override(slot, forms, bridge)
end
declension.user_notes = args[item.prefix .. "note"]
table.insert(adjective.tables, declension)
end
for name, definition in pairs(M.data.indicators.adjective) do
if spec.indicators[name] and definition.value ~= "spec" and not used[name] then
error(("The indicator '%s' applies to none of the tables"):format(name), 0)
end
end
return adjective, bridge, args
end
-- Return the kind of categories a noun table adds (see `Declension:categoryNames`).
local function noun_kind(declension)
return declension.class == "numeral" and "numeral" or "noun"
end
--[==[Entry point of {{tl|sa-ndecl}}. Return the table, or with {{para|json|1}}, its data as JSON.]==]
function export.noun(frame)
local pagename = M.headword_data.pagename
local declension, bridge, args = export.decline_noun(frame:getParent().args, pagename)
local kind = noun_kind(declension)
if args.json then
return M.JSON.toJSON(declension:toJson(bridge, kind, args.nocat))
end
return TableRenderer.new(declension, bridge, pagename, not args.nocat and kind or nil):render()
end
--[==[
Entry point of {{tl|sa-adecl}}. Return the tables one above the other in an untitled inflection box (`make_box` of
[[Module:inflection-table]], as {{tl|inflection-box-top}} makes), or with {{para|json|1}}, their data as JSON
(`{tables = {...}}`). Only the masculine table adds categories.
]==]
function export.adjective(frame)
local pagename = M.headword_data.pagename
local adjective, bridge, args = export.decline_adjective(frame:getParent().args, pagename)
if args.json then
local tables = {}
for position, declension in ipairs(adjective.tables) do
table.insert(tables, declension:toJson(bridge, position == 1 and "adjective" or nil, args.nocat))
end
return M.JSON.toJSON({tables = tables})
end
local rendered = {}
for position, declension in ipairs(adjective.tables) do
local kind = position == 1 and not args.nocat and "adjective" or nil
table.insert(rendered, TableRenderer.new(declension, bridge, pagename, kind):render())
end
return M.inflection_table.make_box({title = "-", flow = "vertical"}, "\n" .. table.concat(rendered, "\n") .. "\n")
end
return export
h60q40og50t5l40y2lih8tp5qofgscp
Mô đun:sa-decl/data
828
293668
2572840
2368880
2026-10-23T01:11:22Z
Hiyuune
50834
2572840
Scribunto
text/plain
--[==[
This module holds the data of [[Module:sa-decl]], which loads it with mw.loadData. It contains:
* the cases, numbers and genders;
* the stem classes, in the order they are tried on a head;
* the words in a table's title, the notes, the general notes and the categories;
* the lexicon, i.e. the words and word endings that some stem classes decline differently;
* the indicators of {{tl|sa-ndecl}} and {{tl|sa-adecl}};
* every set of endings.
All the Sanskrit here is in SLP1, with `/` for the udātta and `\` for the svarita, each written after its vowel. Every
pattern is a Lua pattern matched against SLP1.
ENDINGS:
`endings[CLASS][SET][NUMBER][CASE]` is one cell, where NUMBER is `s`, `d` or `p` and CASE is the code of a case in
`cases`. A cell is one of the following:
* a copy of another cell of the same number, such as `"[nom]"`, whichever set that cell comes from;
* a single ending;
* a list of endings, each either a string or `{ENDING, stem = KEY, note = KEY, FLAG = true, final = CONSONANT, ...}`,
or an empty list for a cell with no form.
An ending that starts with `+` goes on the head itself. Any other ending goes on the class's stem, or on the stem named
by `stem` (see the stem keys in [[Module:sa-decl]]). Within an ending, `@` stands for the accent the set is declined
with. That is normally the head's final accent (`/`, `\` or none); for a set added with the head's own accent, such as
the numerals' `an_oblique`, it is the head's accent wherever that falls. A `\` written out is a svarita regardless of
the head's accent.
`note` is a key of `notes`. The flags are sandhi options of [[Module:sa-utilities]] that apply to that ending alone:
`iy_uv_before_vowel`, `keep_s_before_voiceless` and `strip_stem_accent`. `final` is the consonant the form ends in, in
place of the table's <final:...>.
Some sets are of whole forms (the demonstratives, áp, anaḍváh, dyó and a few others): their endings are the whole
form, added to what comes before the word in the head (usually nothing), and `@` is the head's accent wherever it
falls (see `Analysis:addWholeForms`).
]==]
local data = {}
-- The vowels and accents of [[Module:sa-utilities]] (`vowel`, `accent`), for the patterns of `classes`.
local VOWEL = "[aAiIuUfFxXeEoO]"
local ACCENT = "[/\\]"
data.cases = {
{code = "nom", name = "danh cách", accel = "nom"},
{code = "acc", name = "đối cách", accel = "acc"},
{code = "ins", name = "cách công cụ", accel = "ins"},
{code = "dat", name = "dữ cách", accel = "dat"},
{code = "abl", name = "ly cách", accel = "abl"},
{code = "gen", name = "sinh cách", accel = "gen"},
{code = "loc", name = "định vị cách", accel = "loc"},
{code = "voc", name = "hô cách", accel = "voc"},
-- The enclitic forms of the personal pronouns, which get rows of their own. Only the tables of a class that lists
-- these cases in its `cases` have them.
{code = "encacc", name = "đối cách với từ phụ tố đứng sau", accel = "acc", enclitic = true},
{code = "encdat", name = "dữ cách/sinh cách với từ phụ tố đứng sau", accel = "dat//gen", enclitic = true},
}
data.numbers = {
{code = "s", name = "số ít", accel = "s"},
{code = "d", name = "số đôi", accel = "d"},
{code = "p", name = "số nhiều", accel = "p"},
}
-- `num` is the gender-neutral declension of the numerals, which is plural only. `pers` is for the personal pronouns,
-- which have no gender, so a title names only their type (`in_title = false`).
data.genders = {
m = {name = "giống đực", accel = "m"},
f = {name = "giống cái", accel = "f"},
n = {name = "giống trung", accel = "n"},
num = {name = "giống trung lập"},
pers = {name = "nhân xưng", in_title = false},
}
--[==[
The stem classes, in the order they are tried on a head. A class takes a head if the table's gender is one of its
`genders` and one of its `patterns` matches; the pattern's first capture is the class's stem. A pattern can also be
`{PATTERN, when = PROPERTY}`, to apply only with that indicator, or `{PATTERN, unless = PROPERTY}`, to apply only
without it. A class can also give its tables' cases in `cases` (codes of `data.cases`); otherwise they have every case
except the enclitic ones.
]==]
data.classes = {
-- The demonstratives ayám (iyám, idám), asaú (adás) and ena, declined from whole forms (Whitney §500–503). They
-- have no vocative.
{id = "pronoun", genders = {m = true, f = true, n = true}, patterns = {
"^(a/?ya/?m)$", "^(i/?ya/?m)$", "^(i/?da/?m)$", "^(a/?sO/?)$", "^(a/?da/?s)$",
"^(ena)$", "^(enA)$", "^(ena[dt])$",
}, cases = {"nom", "acc", "ins", "dat", "abl", "gen", "loc"}},
{id = "a", genders = {m = true, n = true}, patterns = {"(.+)a" .. ACCENT .. "?$"}},
-- This class comes before the i- and u-stems so that dyú, like dív, is declined with dyó (Whitney §361d).
{id = "o", genders = {m = true, f = true}, patterns = {"(.+)o" .. ACCENT .. "?$", "^(dy)u/?$", "^(d)i/?v$"}},
{id = "short_iu", genders = {m = true, f = true, n = true}, patterns = {"(.+)[iu]/?$"}},
{id = "ai", genders = {m = true, f = true}, patterns = {"(.+)E" .. ACCENT .. "?$"}},
{id = "vams", genders = {m = true, n = true}, patterns = {"(.+)vA" .. ACCENT .. "?Ms$"}},
{id = "root", genders = {m = true, f = true, n = true}, patterns = {
"(.*)" .. VOWEL .. ACCENT .. "?r?[kgGcjwqTdDpBmrzSh]$",
{"(.*)[Aiuf]" .. ACCENT .. "?t$", unless = "participle"},
"(.*)a" .. ACCENT .. "?kt$",
"(.*)[Ao]" .. ACCENT .. "?s$",
"(.*)u" .. ACCENT .. "?Ms$",
{"(.*)[ai]" .. ACCENT .. "?[ts]$", when = "root"},
-- dánt "tooth" (Whitney §396)
"^(d)a" .. ACCENT .. "?nt$",
}},
{id = "au", genders = {m = true, f = true}, patterns = {"(.+)O" .. ACCENT .. "?$"}},
{id = "s", genders = {m = true, f = true, n = true, num = true}, patterns = {"(.+)[aiu]" .. ACCENT .. "?s$"}},
-- The numerals 1–4 match here only to give the error that they are declined as adjectives (see
-- `adjective_numerals`).
{id = "numeral", genders = {num = true}, patterns = {"(.+)a/?[nz]?$", "^([kty]a/?t)i$", "^(azw)[AO]/?$",
"^(tr)i/?$", "^(dv)i/?$", "^(catu/?r)$"}},
{id = "in", genders = {m = true, n = true}, patterns = {"(.+)i" .. ACCENT .. "?n$"}},
{id = "long_iu", genders = {m = true, f = true, n = true, num = true}, patterns = {"(.+)[IU]/?$"}},
{id = "anc", genders = {m = true, n = true}, patterns = {"(.+[aA]" .. ACCENT .. "?Yc)$"}},
{id = "at", genders = {m = true, n = true}, patterns = {
"(.+)a" .. ACCENT .. "?t$",
{"(.+)A" .. ACCENT .. "?t$", when = "participle"},
}},
{id = "an", genders = {m = true, f = true, n = true}, patterns = {"(.+)a" .. ACCENT .. "?n$"}},
{id = "long_a", genders = {m = true, f = true, n = true, num = true}, patterns = {"(.+)A" .. ACCENT .. "?$"}},
{id = "vocalic_r", genders = {m = true, f = true, n = true, num = true}, patterns = {"(.+)f/?$"}},
{id = "personal", genders = {pers = true}, patterns = {"^(a/?ha/?m)$", "^(tva/?m)$"},
cases = {"nom", "acc", "ins", "dat", "abl", "gen", "loc", "encacc", "encdat"}},
}
-- The words of a table's title between the gender and "declension of".
data.types = {
numeral = "số từ",
first_person = "đại từ ngôi thứ nhất",
second_person = "đại từ ngôi thứ hai",
demonstrative = "đại từ chỉ định",
a = "thân từ a",
pronominal_a = "đại từ thân từ a",
i = "thân từ i",
u = "thân từ u",
long_a = "thân từ ā",
pronominal_long_a = "đại từ thân từ ā",
long_i = "thân từ ī",
long_u = "thân từ ū",
vocalic_r = "thân từ ṛ",
root = "thân từ gốc từ",
as = "thân từ as",
is = "thân từ is",
us = "thân từ us",
an = "thân từ an",
["in"] = "thân từ in",
at = "thân từ at",
mat = "thân từ mat",
vat = "thân từ vat",
anc = "thân từ añc",
o = "thân từ o",
au = "thân từ au",
ai = "thân từ ai",
vams = "thân từ vāṃs",
}
-- The footnotes of the endings. `novedic` leaves out every ending whose note has `vedic = true`.
data.notes = {
vedic = {text = "Vệ Đà", vedic = true},
rigvedic = {text = "Rigvedic", vedic = true},
brahmanas = {text = "Brāhmaṇas", vedic = true},
vedic_root_remnant = {text = "giữ lại biến cách gốc từ Vệ Đà", vedic = true},
later = {text = "tiếng Phạn hậu kỳ"},
rare = {text = "hiếm"},
perhaps = {text = "không chắc chắn"},
}
data.general_notes = {
root_long_a_masculine = "Trên thực tế, biến cách này chỉ giới hạn ở các trường hợp lớp biến cách mạnh (danh cách, đối cách và " ..
"hô cách,<br> ngoại trừ đối cách dạng số nhiề), và có xu hướng thay thế bằng biến cách thân từ a trong tiếng Phạn hậu kỳ.",
vrki = "Thân từ này có nguồn gốc từ hệ biến cách ''vṛkī́''.",
vedic_long_u_feminine = "Loại giống cái đi kèm -ū chỉ xảy ra trong tiếng Phạn Vệ Đà.",
}
--[==[
The categories of a table, by kind: `noun` for {{tl|sa-ndecl}}, `adjective` for the masculine table of {{tl|sa-adecl}}
(its other tables add none) and `numeral` for the numerals.
]==]
data.categories = {
a = {noun = "Danh từ thân từ a tiếng Phạn", adjective = "Tính từ thân từ a tiếng Phạn"},
i = {noun = "Danh từ thân từ i tiếng Phạn", adjective = "Tính từ thân từ i tiếng Phạn"},
u = {noun = "Danh từ thân từ u tiếng Phạn", adjective = "Tính từ thân từ u tiếng Phạn"},
long_a = {noun = "Danh từ thân từ ā tiếng Phạn"},
root_long_a = {noun = "Danh từ thân từ gốc từ với -ā tiếng Phạn", adjective = "Tính từ thân từ gốc từ với -ā tiếng Phạn"},
long_i = {noun = "Danh từ thân từ ī tiếng Phạn", adjective = "Tính từ thân từ ī tiếng Phạn"},
vrki = {noun = "Danh từ thân từ ī có nguồn gốc từ hệ biến cách vṛkī́ tiếng Phạn",
adjective = "Tính từ thân từ ī có nguồn gốc từ hệ biến cách vṛkī́ tiếng Phạn"},
long_u = {noun = "Danh từ thân từ ū tiếng Phạn", adjective = "Tính từ thân từ ū tiếng Phạn"},
root_long_i = {noun = "Danh từ thân từ gốc từ với -ī", adjective = "Tính từ thân từ gốc từ với -ī tiếng Phạn"},
root_long_u = {noun = "Danh từ thân từ gốc từ với -ū", adjective = "Tính từ thân từ gốc từ với -ū tiếng Phạn"},
vocalic_r = {noun = "Danh từ thân từ ṛ tiếng Phạn", adjective = "Tính từ thân từ ṛ tiếng Phạn"},
root = {noun = "Danh từ thân từ gốc từ phụ âm tiếng Phạn", adjective = "Tính từ thân từ gốc từ phụ âm tiếng Phạn"},
comparative = {noun = "tính từ thân từ yas tiếng Phạn", adjective = "Tính từ thân từ yas tiếng Phạn"},
as = {noun = "Danh từ thân từ as tiếng Phạn", adjective = "Tính từ thân từ as tiếng Phạn"},
is = {noun = "Danh từ thân từ is tiếng Phạn", adjective = "Tính từ thân từ is tiếng Phạn"},
us = {noun = "Danh từ thân từ us tiếng Phạn", adjective = "Tính từ thân từ us tiếng Phạn"},
an = {noun = "Danh từ thân từ an tiếng Phạn", adjective = "Tính từ thân từ an tiếng Phạn"},
["in"] = {noun = "Danh từ thân từ in tiếng Phạn", adjective = "Tính từ thân từ in tiếng Phạn"},
at = {noun = "Danh từ thân từ at tiếng Phạn", adjective = "Tính từ thân từ at tiếng Phạn"},
mat = {noun = "Danh từ thân từ mat tiếng Phạn", adjective = "Tính từ thân từ mat tiếng Phạn"},
vat = {noun = "Danh từ thân từ vat tiếng Phạn", adjective = "Tính từ thân từ vat tiếng Phạn"},
anc = {noun = "Danh từ thân từ añc tiếng Phạn", adjective = "Tính từ thân từ añc tiếng Phạn"},
o = {noun = "Danh từ thân từ o tiếng Phạn", adjective = "Tính từ thân từ o tiếng Phạn"},
au = {noun = "Danh từ thân từ au tiếng Phạn", adjective = "Tính từ thân từ au tiếng Phạn"},
ai = {noun = "Danh từ thân từ ai tiếng Phạn", adjective = "Tính từ thân từ ai tiếng Phạn"},
vams = {noun = "Danh từ thân từ vāṃs tiếng Phạn", adjective = "Tính từ thân từ vāṃs tiếng Phạn"},
numeral_an = {numeral = "Số từ thân từ an tiếng Phạn"},
numeral_i = {numeral = "Số từ thân từ i tiếng Phạn"},
numeral_s = {numeral = "Số từ thân từ ṣ tiếng Phạn"},
}
--[==[
The words and word endings that a stem class declines differently from the rest. Each list is matched against either
the `head` or the class's stem (`base`), as its `subject` says, and applies when one of its `patterns` matches and none
of its `except` patterns does.
]==]
data.lexicon = {
-- sákhi and its compounds (Wackernagel III p.141)
sakhi = {subject = "head", patterns = {"[sz]a/?Ki/?$"}},
-- masculine i- and u-stems that keep the old strong flexion in the singular: arí, ávi, krátu, paśú, pitú, mádhu,
-- vásu, śíśu (Wackernagel III p.138-139)
strong_masculine_i_u = {subject = "head",
patterns = {"^ari/$", "^a/vi$", "^kra/tu$", "^paSu/$", "^pitu/$", "^ma/Du$", "^va/su$", "^Si/Su$"}},
-- masculine i- and u-stems with a Vedic instrumental singular in -ā: ūrmí, paví, paraśú (Wackernagel III
-- p.146-147)
vedic_instrumental_masculine = {subject = "head", patterns = {"^Urmi/$", "^pavi/$", "paraSu/"}},
-- masculine u-stems with a Rigvedic locative singular in -avi (Macdonell p.296; Wackernagel III p.154)
rigvedic_locative_u = {subject = "head",
patterns = {"^a/nu$", "^da/syu$", "^trasa/dasyu$", "^druhyu/$", "^pa/vIru$", "^vi/zRu$", "^sUnu/$"}},
-- neuter u-adjectives that keep the old strong flexion: mádhu, vásu (Wackernagel III p.138-139)
strong_neuter_adjective_u = {subject = "head", patterns = {"^ma/Du$", "^va/su$"}},
-- neuter u-nouns that keep the old strong flexion: páśu, mádhu, vásu (Wackernagel III p.138-139)
strong_neuter_noun_u = {subject = "head", patterns = {"^pa/Su$", "^ma/Du$", "^va/su$"}},
-- the neuter u-stem with a Vedic instrumental singular in -ā: mádhu
vedic_instrumental_neuter_u = {subject = "head", patterns = {"^ma/Du$"}},
-- strī́ and its compounds, but not bhástrī and śástrī
stri = {subject = "head", patterns = {"strI/?$"}, except = {"^[BS]astrI$"}},
-- ū-stems with Vedic -uv- before a vowel, besides those whose stem ends in y (Macdonell p.290 §384a)
vedic_uv = {subject = "base", patterns = {"agr$", "kadr$", "bIBats"}},
-- feminines in -ū of u-adjectives that are not only Vedic (Wackernagel II.2 p.493)
classical_long_u_feminine = {subject = "base", patterns = {"paNg$", "BIr$", "or$", "bA/?h$", "asitajY", "aSmaSr"}},
-- compounds of root ī-stems that keep -iy- before a vowel, besides a stem in two consonants and an accented one in
-- -dh (Wackernagel III §91a p.179)
uncontracted_long_i_compound = {subject = "base", patterns = {"avadyaB$"}},
-- compounds of root ū-stems that keep -uv- before a vowel, besides an accented one not in -s/-ṣ (Wackernagel III
-- §100a, §100eα p.192-193)
uncontracted_long_u_compound = {subject = "base", patterns = {"B$", "jo/?g$"}},
-- púṃs
pums = {subject = "head", patterns = {"pu/?Ms$"}},
-- adjectives in -dṛ́ś with a Vedic nominative singular masculine in -dṛ́ṅ, but not svardṛ́ś and saṃdṛ́ś
-- (Wackernagel III p.246)
vedic_nominative_drs = {subject = "head", patterns = {"df/?S$"}, except = {"sv?a[Mr]df/?S$"}},
-- an-stems with a short a in the strong stem: pūṣán, aryamán, mastṛhán
short_strong_an = {subject = "base", patterns = {"pUz$", "aryam$", "mastfh$"}},
-- an-stems with a Vedic short strong stem beside the long one: ukṣán, yóṣan, vṛ́ṣan, tmán (Whitney §426b;
-- Wackernagel III p.267)
optional_short_strong_an = {subject = "base", patterns = {"ukz$", "yo/?z$", "vf/?z$", "^tm$"}},
-- tiryáñc, weakest stem tiráśc-
tiryanc = {subject = "base", patterns = {"tirya/?c$"}},
-- the compounds in -dañc (udáñc), weakest stem -dīc-
ud_anc = {subject = "base", patterns = {"dac$"}},
-- vāṃs-stems whose weak stem adds v: babhūvā́ṃs (as does every stem in -u)
vams_glide = {subject = "base", patterns = {"baBU$"}},
-- vāṃs-stems whose weak stem keeps the i: pīpivā́ṃs, dīdivā́ṃs
vams_keep_i = {subject = "base", patterns = {"pIpi$", "dI[dD]i$"}},
-- vāṃs-stems whose weak stem drops the i, besides those whose i follows a root vowel and consonants: vividvā́ṃs,
-- viviśivā́ṃs
vams_drop_i = {subject = "base", patterns = {"vi[Sd]i$"}},
-- accented heads whose vocative has an initial svarita, as an initial tvy-, dvy-, try-, dry- or ny- counts as two
-- syllables, but not nyá
initial_svarita = {subject = "head", patterns = {"^[td][rv]y", "^ny"}, except = {"^nya/$"}},
-- The a- and ā-stems.
-- the pronouns ta (sá), eta (eṣá), tya (syá), ya and ka, which have the pronominal declension and no vocative
-- (Whitney §495–509): with an accented head by themselves, and with an unaccented one (as the noun ka, a name of
-- Prajāpati, has) only with <pron>. `s_nominative`, `tya`, `ka` and `pronoun_instrumental_ena` apply only to
-- them.
pronoun = {subject = "head", patterns = {"^t[aA]/?$", "^et[aA]/?$", "^ty[aA]/?$", "^y[aA]/?$", "^k[aA]/?$"}},
-- the pronouns with sá, sā́ (eṣá, syá) in the nom. sing. (Whitney §495a, §499)
s_nominative = {subject = "head", patterns = {"^t[aA]/?$", "^et[aA]/?$", "^ty[aA]/?$"}},
-- tya, whose nom. sing. fem. is also tyā (Whitney §499a)
tya = {subject = "head", patterns = {"^tyA/?$"}},
-- ka, with the neuter kím (and the Vedic kád) (Whitney §504)
ka = {subject = "head", patterns = {"^ka/?$"}},
-- the adjectives declined like ta throughout, with the neuter in -at (Whitney §523)
pronominal_adjective = {subject = "head", patterns = {"^katar[aA]/?$", "^katam[aA]/?$", "^yatar[aA]/?$",
"^yatam[aA]/?$", "^i/?tar[aA]$", "^any[aA]/?$", "^anyatar[aA]/?$"}},
-- the adjectives that are declined pronominally "usually, or in some of their significations, or optionally": with
-- <pron>, their pronominal and nominal forms are given side by side (Whitney §525)
optional_pronominal = {subject = "head", patterns = {"^a/?Dar[aA]$", "^aDam[aA]/?$", "^a/?ntar[aA]$",
"^a/?ntam[aA]$", "^a/?par[aA]$", "^apam[aA]/?$", "^a/?var[aA]$", "^avam[aA]/?$", "^u/?ttar[aA]$",
"^uttam[aA]/?$", "^u/?par[aA]$", "^upam[aA]/?$", "^param[aA]/?$", "^caram[aA]/?$", "^maDyam[aA]/?$",
"^anyatam[aA]/?$", "^pa/?r[aA]$", "^pU/?rv[aA]$", "^da/?kziR[aA]$", "^paScim[aA]$", "^uBa/?y[aA]$",
"^ne/?m[aA]$", "^sv[aA]/?$"}},
-- víśva, with the nominal dat., abl. and loc. sing. víśvāya, víśvāt, víśve beside the pronominal ones in RV.
-- (Whitney §524a)
visva = {subject = "head", patterns = {"^vi/?Sva$"}},
-- éka, with no dual, and the occasional ékāt and (AV.) éke (Whitney §482a–b, §524a)
eka = {subject = "head", patterns = {"^e/?k[aA]$"}},
-- dvá, dual only (Whitney §482d)
dva = {subject = "head", patterns = {"^dv[aA]/?$"}},
-- a-stems with the Vedic instr. sing. in -enā beside -ena: raváthenā (Whitney §330a), and the pronouns ténā and
-- yénā (§495b, §509a)
vedic_instrumental_ena = {subject = "head", patterns = {"^rava/Ta$"}},
pronoun_instrumental_ena = {subject = "head", patterns = {"^ta/?$", "^ya/?$"}},
-- a-stems with the Vedic instr. sing. in -ā: yajñā́, suhávā (Whitney §327c, §330a), besides the abstracts in
-- -tvá(na)
vedic_instrumental_a = {subject = "head", patterns = {"^yajYa/$", "^suha/va$"}},
-- the RV. gen. pl. in -ām instead of -ānām (Whitney §329f, §330c, who names only caráthām of the "half-a-dozen")
vedic_genitive_plural_am = {subject = "head", patterns = {"^cara/Ta$"}},
-- The i- and u-stems.
-- tri, plural only, with the gen. of trayá (Whitney §482e)
tri = {subject = "head", patterns = {"^tri/?$"}},
-- páti, which is declined like sákhi in the instr., dat., abl.-gen. and loc. sing. when uncompounded and meaning
-- "husband" (Whitney §343d); the indicator <husband> says so
pati = {subject = "head", patterns = {"^pa/?ti$"}},
-- jáni "wife", with the Vedic gen. sing. jányus (Whitney §343f)
jani = {subject = "head", patterns = {"^ja/?ni$"}},
-- arí, with the Vedic aryám (acc. sing.) and aryás (nom. and acc. pl.) (Whitney §343g)
ari = {subject = "head", patterns = {"^ari/?$"}},
-- ví "bird", with the RV. nom. vés beside vís (Whitney §343h)
vi = {subject = "head", patterns = {"^vi/?$"}},
-- króṣṭu, whose strong cases are those of kroṣṭṛ́ (Whitney §343k)
krostu = {subject = "head", patterns = {"^kro/?zwu$"}},
-- the neuters whose weakest cases come from akṣán, asthán, dadhán, sakthán (Whitney §343i, §431)
weakest_from_an = {subject = "head", patterns = {"^a/?kzi$", "^a/?sTi$", "^da/?Di$", "^sa/?kTi$"}},
-- The diphthong stems.
-- dyó, dyú and dív, declined together (Whitney §361d)
dyo = {subject = "head", patterns = {"^dyo/?$", "^dyu/?$", "^di/?v$"}},
-- The ṛ-stems.
-- nṛ́, with the Vedic dat. náre and gen. náras, and the gen. pl. with a long or short ṛ (Whitney §371d, h–i)
nr = {subject = "head", patterns = {"^nf/?$"}},
-- the feminines of tri and catúr (Whitney §482e, g)
tisr = {subject = "head", patterns = {"^tisf/?$"}},
catasr = {subject = "head", patterns = {"^ca/?tasf$"}},
-- The consonantal root stems.
-- áp "water", plural only (Whitney §393)
ap = {subject = "head", patterns = {"^a/?p$"}},
-- dánt "tooth", with a participle-like weak stem dat (Whitney §396)
dant = {subject = "head", patterns = {"^da/?nt$"}},
-- anaḍváh (or anaḍúh), with a strong stem anaḍvā́h, a weakest anaḍúh and a middle anaḍúd (Whitney §404)
anadvah = {subject = "head", patterns = {"^anaqva/?h$", "^anaqu/?h$"}},
-- catúr, plural only, with catvā́r in the strong cases (Whitney §482g)
catur = {subject = "head", patterns = {"^catu/?r$"}},
-- the compounds in -vah, with vāh in the strong and middle cases and ūh (au after a) in the weakest (Whitney §403)
vah = {subject = "head", patterns = {"ava/?h$"}},
-- avayā́j, with the nom. and voc. sing. avayā́s and the middle cases from avayás (Whitney §406)
avayaj = {subject = "head", patterns = {"^avayA/?j$"}},
-- kṣam "earth", with kṣā́m- in the strong cases and kṣm- in the abl.-gen. sing. (Whitney §388)
ksam = {subject = "head", patterns = {"^kza/?m$"}},
-- dvā́r "door", with the weak cases also from dur in the Veda (Whitney §388)
dvar = {subject = "head", patterns = {"^dvA/?r$"}},
-- pád "foot" and its masculine compounds, with pā́d in the strong cases (and, in the compounds of the later
-- language, in the middle cases too); the feminines in -pad (āpád, sampád ...) are from the root pad "go"
-- (Whitney §387)
pad = {subject = "head", patterns = {"pa/?d$"}},
-- the other stems that lengthen their vowel in the strong cases: the compounds in -sah (Whitney §387, §405) and
-- -vah (§403), and kṣam (§388)
lengthened_strong = {subject = "head", patterns = {"[sz]a/?h$", "ava/?h$", "^kza/?m$"}},
-- yuj, with the older nasal strong stem yuñj beside yuj (Whitney §386)
nasal_strong = {subject = "head", patterns = {"^yu/?j$"}},
-- mā́s "month", with the middle cases from mād (Whitney §389b)
mas = {subject = "head", patterns = {"^mA/?s$"}},
-- the monosyllables whose acc. pl. is accented on the ending (Whitney §390a; datás, pathás, apás and puṃsás are
-- in sets of their own)
oxytone_accusative_plural = {subject = "head", patterns = {"^pa/?d$", "^ni/?d$", "^u/?z$", "^jYA/?s$", "^mA/?s$",
"^ma/?h$"}},
-- the monosyllables whose acc. pl. is accented on the ending or on the stem (Whitney §390a)
optional_oxytone_accusative_plural = {subject = "head", patterns = {"^vA/?c$", "^sru/?c$", "^hru/?t$",
"^sri/?D$", "^kza/?p$", "^vi/?p$", "^i/?z$", "^dvi/?z$", "^dru/?h$"}},
-- the stems whose weak and middle cases are also made from asán, yakán, śakán, doṣán (Whitney §398a, §432)
heteroclite_an = {subject = "head", patterns = {"^a/?sfj$", "^ya/?kft$", "^Sa/?kft$", "^do/?s$"}},
-- The s-stems.
-- uśánas, with the nom. uśánā and the voc. uśanas, uśana or uśanan, and the Vedic dat. and loc. uśáne (Whitney
-- §355a, §416)
usanas = {subject = "head", patterns = {"^uSa/?nas$"}},
-- The an-stems.
-- śván, yúvan and maghávan, with the contracted weakest stems śún, yū́n, maghón (Whitney §427–428)
contracted_weakest = {subject = "head", patterns = {"^Sva/?n$", "^yu/?van$", "^maGa/?van$"}},
-- maghávan, with the older middle cases from maghávant (Whitney §428b)
maghavan = {subject = "head", patterns = {"^maGa/?van$"}},
-- áhan, with the nom. sing. and the middle cases from áhar and áhas (Whitney §430a–b)
ahan = {subject = "head", patterns = {"^a/?han$"}},
-- ū́dhan, with ū́dhar or ū́dhas, ū́dhan or ū́dhani and ū́dhaḥsu (Whitney §430d)
udhan = {subject = "head", patterns = {"^U/?Dan$"}},
-- The in-stems.
-- pathín, mathín (or manthín) and ṛbhukṣín, with the strong stems pánthā(n), mánthā(n), ṛbhukṣā́(n), the middle
-- stems in -i and the weakest stems without it (Whitney §433–434)
pathin = {subject = "head", patterns = {"^paTi/?n$"}},
mathin = {subject = "head", patterns = {"^ma/?n?Ti/?n$"}},
rbhuksin = {subject = "head", patterns = {"^fBukzi/?n$"}},
}
-- The numerals 1–4, which have genders: <num> on them is an error that gives the call to use (Whitney §482).
data.adjective_numerals = {
{pattern = "^e/?ka$", call = "{{sa-adecl|éka<f:ékā.pron>}}"},
{pattern = "^dv[ai]/?$", call = "{{sa-adecl|dvá<f:dvā́>}}"},
{pattern = "^tri/?$", call = "{{sa-adecl|trí<f:tisṛ́>}}"},
{pattern = "^catu/?r$", call = "{{sa-adecl|catúr<f:cátasṛ>}}"},
}
--[==[
The indicators of the inline spec (`{{sa-ndecl|HEAD<NAME.NAME:VALUE>}}`, `{{sa-adecl|HEAD<NAME...>}}`), for each
template. A definition can have these fields:
* `value`: "form" (a Sanskrit form or stem, in any script), "word" (checked against `values`), "spec" (a head with its
own inline spec, for the feminine and neuter of {{tl|sa-adecl}}), or none for a flag;
* `list`: true if the value is a comma list;
* `group`: the group of indicators this one belongs to. At most one indicator of a group can be given, or exactly one
if the group is `gender`;
* `classes`: the stem classes that use the indicator. On a head of any other class, the indicator is an error (in
{{tl|sa-adecl}}, when none of the tables uses it). With `genders`, only those genders of the classes use it;
* `alias`: the indicator this name stands for, which then needs no other field.
]==]
local STEM_INDICATORS = {
sg = {group = "numbers", genders = {m = true, f = true, n = true, pers = true}},
du = {group = "numbers", genders = {m = true, f = true, n = true, pers = true}},
pl = {group = "numbers", genders = {m = true, f = true, n = true, pers = true}},
root = {group = "root", classes = {root = true, long_a = true, long_iu = true}},
nonroot = {group = "root", classes = {long_a = true, long_iu = true}},
vrki = {classes = {long_iu = true}},
pron = {classes = {a = true, long_a = true}},
novedic = {},
nv = {alias = "novedic"},
r = {value = "word", values = {a = true, ["ā"] = true}, classes = {vocalic_r = true},
genders = {m = true, f = true}},
final = {value = "word", values = {k = true, ["ṭ"] = true, t = true}, classes = {root = true}},
diaspirate = {classes = {root = true}},
participle = {classes = {at = true}},
nonasal = {classes = {at = true}},
contract = {group = "contraction", classes = {an = true, long_iu = true}},
nocontract = {group = "contraction", classes = {an = true, long_iu = true}},
han = {classes = {an = true, long_iu = true}},
svarita = {},
["ḷ"] = {classes = {vams = true}},
}
data.indicators = {
noun = {
m = {group = "gender"},
f = {group = "gender"},
n = {group = "gender"},
num = {group = "gender"},
pers = {group = "gender"},
feminine = {value = "form", list = true, classes = {at = true}, genders = {n = true}},
-- a table of only the cells given, with no stem class, for irregular and defective words
manual = {},
-- páti "husband", declined like sákhi in four cases of the singular (Whitney §343d)
husband = {classes = {short_iu = true}, genders = {m = true}},
},
adjective = {
f = {value = "spec", list = true},
n = {value = "spec"},
},
}
for name, definition in pairs(STEM_INDICATORS) do
for _, registry in pairs(data.indicators) do
local copy = {}
for key, value in pairs(definition) do
copy[key] = value
end
registry[name] = copy
end
end
data.endings = {
numeral = {
sas = {
p = {
nom = "+",
acc = "[nom]",
ins = "aqBi@s",
dat = "aqBya@s",
abl = "[dat]",
gen = "aRRA@m",
loc = "awsu@",
voc = "[nom]",
},
},
ti = {
p = {
nom = "+",
acc = "[nom]",
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
gen = "InAm",
loc = "+zu",
voc = "[nom]",
},
},
an_direct = {
p = {
nom = "a@",
acc = "[nom]",
abl = "[dat]",
voc = "a",
},
},
an_oblique = {
p = {
ins = {{"a@Bis", strip_stem_accent = true}},
dat = {{"a@Byas", strip_stem_accent = true}},
gen = {{"AnA@m", strip_stem_accent = true}},
loc = {{"a@su", strip_stem_accent = true}},
},
},
-- aṣṭá, whose nom.-acc. is also aṣṭaú (Whitney §483)
ashta_direct = {
p = {
nom = {"a@", "O@"},
acc = "[nom]",
abl = "[dat]",
voc = {"a", "O"},
},
},
-- aṣṭā́ (or aṣṭaú), accented on the ending throughout (Whitney §483)
ashtau = {
p = {
nom = {"O@", {"A@", note = "rigvedic"}},
acc = "[nom]",
ins = "ABi@s",
dat = "ABya@s",
abl = "[dat]",
gen = "AnA@m",
loc = "Asu@",
voc = {"O", {"A", note = "rigvedic"}},
},
},
},
a = {
masculine_nominative = {
s = {
nom = "a@s",
},
},
-- sá, eṣá, syá (Whitney §495a, §499)
s_masculine_nominative = {
s = {
nom = {{"a@s", stem = "nominative"}},
},
},
masculine_direct = {
s = {
acc = "a@m",
voc = "a",
},
d = {
nom = {"O@", {"A@", note = "vedic"}},
voc = {"O", {"A", note = "vedic"}},
},
p = {
acc = "A@n",
},
},
pronominal_masculine_plural = {
p = {
nom = "e@",
voc = "e",
},
},
masculine_plural = {
p = {
nom = {"A@s", {"A@sas", note = "vedic"}},
voc = {"As", {"Asas", note = "vedic"}},
},
},
-- The words of Whitney §525 with <pron>.
pronominal_and_nominal_masculine_plural = {
p = {
nom = {"e@", "A@s", {"A@sas", note = "vedic"}},
voc = {"e", "As", {"Asas", note = "vedic"}},
},
},
neuter_nominative = {
s = {
nom = "a@m",
acc = "[nom]",
},
},
-- tát, yát, anyát ... (Whitney §496a, §523)
pronominal_neuter_nominative = {
s = {
nom = "a@t",
acc = "[nom]",
},
},
-- kím, and the Vedic kád (Whitney §504)
ka_neuter_nominative = {
s = {
nom = {"i@m", {"a@t", note = "vedic"}},
acc = "[nom]",
},
},
neuter_direct = {
s = {
voc = "a",
},
d = {
nom = "e@",
voc = "e",
},
p = {
nom = {"A@ni", {"A@", note = "vedic"}},
acc = "[nom]",
voc = {"Ani", {"A", note = "vedic"}},
},
},
pronominal_oblique = {
s = {
dat = "a@smE",
abl = "a@smAt",
loc = "a@smin",
},
p = {
gen = "e@zAm",
},
},
-- ta, with the RV. loc. sásmin (Whitney §495b)
ta_oblique = {
s = {
dat = "a@smE",
abl = "a@smAt",
loc = {"a@smin", {"a@smin", stem = "nominative", note = "rigvedic"}},
},
p = {
gen = "e@zAm",
},
},
-- víśva, with the RV. víśvāya, víśvāt, víśve (Whitney §524a)
visva_oblique = {
s = {
dat = {"a@smE", {"A@ya", note = "rigvedic"}},
abl = {"a@smAt", {"A@t", note = "rigvedic"}},
loc = {"a@smin", {"e@", note = "rigvedic"}},
},
p = {
gen = "e@zAm",
},
},
-- éka, with the occasional ékāt and the AV. loc. éke (Whitney §482b, §524a)
eka_oblique = {
s = {
dat = "a@smE",
abl = {"a@smAt", {"A@t", note = "rare"}},
loc = {"a@smin", {"e@", note = "vedic"}},
},
p = {
gen = "e@zAm",
},
},
-- The words of Whitney §525 with <pron>.
pronominal_and_nominal_oblique = {
s = {
dat = {"a@smE", "A@ya"},
abl = {"a@smAt", "A@t"},
loc = {"a@smin", "e@"},
},
p = {
gen = {"e@zAm", "A@nAm"},
},
},
nominal_oblique = {
s = {
dat = "A@ya",
abl = "A@t",
loc = "e@",
},
},
nominal_genitive_plural = {
p = {
gen = "A@nAm",
},
},
genitive_plural_am = {
p = {
gen = {"A@nAm", {"A@m", note = "rigvedic"}},
},
},
genitive_dual = {
d = {
gen = "a@yos",
},
},
genitive_dual_after_y = {
d = {
gen = {"a@yos", {"o@s", note = "vedic"}},
},
},
instrumental = {
s = {
ins = "e@na",
},
},
instrumental_vedic_ena = {
s = {
ins = {"e@na", {"e@nA", note = "vedic"}},
},
},
instrumental_vedic_a = {
s = {
ins = {"e@na", {"A@", note = "vedic"}},
},
},
oblique = {
s = {
gen = "a@sya",
},
d = {
acc = "[nom]",
ins = "A@ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = {"E@s", {"e@Bis", note = "vedic"}},
dat = "e@Byas",
abl = "[dat]",
loc = "e@zu",
},
},
},
short_iu = {
sakhi = {
s = {
nom = "A@",
acc = "A@yam",
ins = {{"A@", stem = "final_unaccented"}},
dat = {{"e@", stem = "final_unaccented"}},
abl = {{"u@r", stem = "final_unaccented"}},
loc = {{"O@", stem = "final_unaccented"}},
voc = "e",
},
d = {
nom = {"A@yO", {"A@yA", note = "vedic"}},
gen = {{"o@s", stem = "final_unaccented"}},
voc = {"A@yO", {"A@yA", note = "vedic"}},
},
p = {
nom = "A@yas",
acc = "I@n",
voc = "Ayas",
},
},
strong_masculine_singular = {
s = {
ins = {"+nA", {"A@", stem = "final_unaccented", note = "vedic"}},
dat = {{"e", stem = "raised"}, {"e@", stem = "final_unaccented", note = "vedic"}},
abl = {{"s", stem = "raised"}, {"a@s", stem = "final_unaccented", note = "vedic"}},
},
},
masculine_dative_ablative = {
s = {
dat = {{"e", stem = "raised"}},
abl = {{"s", stem = "raised"}},
},
},
masculine_instrumental = {
s = {
ins = "+nA",
},
},
masculine_instrumental_vedic = {
s = {
ins = {"+nA", {"A@", stem = "final_unaccented", note = "vedic"}},
},
},
masculine_locative_i = {
s = {
loc = {"O@", {"A@", note = "vedic"}},
},
},
masculine_locative_u_rigvedic = {
s = {
loc = {"O@", {"a@vi", note = "rigvedic"}},
},
},
masculine_locative = {
s = {
loc = "O@",
},
},
masculine_direct = {
s = {
nom = "+s",
acc = "+m",
voc = {{"", stem = "raised_unaccented"}},
},
d = {
nom = {{"", stem = "lengthened"}},
gen = {{"o@s", stem = "final_unaccented"}},
voc = {{"", stem = "lengthened_unaccented"}},
},
p = {
nom = {{"as", stem = "raised"}},
acc = {{"n", stem = "lengthened"}},
voc = {{"as", stem = "raised_unaccented"}},
},
},
-- arí, with the Vedic aryám and aryás (Whitney §343g)
ari_direct = {
s = {
nom = "+s",
acc = {"+m", {"a@m", stem = "final_unaccented", note = "vedic"}},
voc = {{"", stem = "raised_unaccented"}},
},
d = {
nom = {{"", stem = "lengthened"}},
gen = {{"o@s", stem = "final_unaccented"}},
voc = {{"", stem = "lengthened_unaccented"}},
},
p = {
nom = {{"as", stem = "raised"}, {"a@s", stem = "final_unaccented", note = "vedic"}},
acc = {{"n", stem = "lengthened"}, {"a@s", stem = "final_unaccented", note = "vedic"}},
voc = {{"as", stem = "raised_unaccented"}},
},
},
-- ví "bird", with the RV. nom. vés (Whitney §343h)
vi_direct = {
s = {
nom = {"+s", {"s", stem = "raised", note = "rigvedic"}},
acc = "+m",
voc = {{"", stem = "raised_unaccented"}},
},
d = {
nom = {{"", stem = "lengthened"}},
gen = {{"o@s", stem = "final_unaccented"}},
voc = {{"", stem = "lengthened_unaccented"}},
},
p = {
nom = {{"as", stem = "raised"}},
acc = {{"n", stem = "lengthened"}},
voc = {{"as", stem = "raised_unaccented"}},
},
},
-- The strong cases of króṣṭu, which are those of kroṣṭṛ́ (Whitney §343k), on the stem `agent` (kroṣṭ-) with the
-- head's own accent.
krostu_strong = {
s = {
nom = {{"A@", stem = "agent"}},
acc = {{"A@ram", stem = "agent"}},
},
d = {
nom = {{"A@rO", stem = "agent"}, {"A@rA", stem = "agent", note = "vedic"}},
voc = {{"ArO", stem = "agent"}, {"ArA", stem = "agent", note = "vedic"}},
},
p = {
nom = {{"A@ras", stem = "agent"}},
voc = {{"Aras", stem = "agent"}},
},
},
-- The rest of `masculine_direct` for króṣṭu.
krostu_weak = {
s = {
voc = {{"", stem = "raised_unaccented"}},
},
d = {
gen = {{"o@s", stem = "final_unaccented"}},
},
p = {
acc = {{"n", stem = "lengthened"}},
},
},
-- páti "husband", declined like sákhi here (Whitney §343d)
husband = {
s = {
ins = {{"A@", stem = "final_unaccented"}},
dat = {{"e@", stem = "final_unaccented"}},
abl = {{"u@r", stem = "final_unaccented"}},
loc = {{"O@", stem = "final_unaccented"}},
},
},
-- tri (Whitney §482e), on the stem tr-
tri_masculine = {
p = {
nom = "a@yas",
acc = "I@n",
voc = "ayas",
},
},
tri_neuter = {
p = {
nom = {"I@Ri", {"I@", note = "vedic"}},
acc = "[nom]",
voc = {"IRi", {"I", note = "vedic"}},
},
},
-- The genitive is as if from trayá; RV. has trīṇā́m once.
tri_oblique = {
p = {
ins = "iBi@s",
dat = "iBya@s",
abl = "[dat]",
gen = {"ayARA@m", {"IRA@m", note = "rigvedic"}},
loc = "izu@",
},
},
feminine_instrumental_locative_i = {
s = {
ins = {{"A@", stem = "final_unaccented"}, {"I@", note = "vedic"}},
loc = {"O@", {"A@m", stem = "final_unaccented"}, {"A@", note = "vedic"}},
},
},
feminine_instrumental_locative_u = {
s = {
ins = {{"A@", stem = "final_unaccented"}},
loc = {"O@", {"A@m", stem = "final_unaccented"}},
},
},
feminine = {
s = {
nom = "+s",
acc = "+m",
dat = {{"e", stem = "raised"}, {"E@", stem = "final_unaccented"}},
abl = {
{"s", stem = "raised"},
{"A@s", stem = "final_unaccented"},
{"E@", stem = "final_unaccented", note = "brahmanas"},
},
},
d = {
gen = {{"o@s", stem = "final_unaccented"}},
},
p = {
nom = {{"as", stem = "raised"}},
voc = {{"as", stem = "raised_unaccented"}},
},
},
feminine_i = {
s = {
voc = "e",
},
d = {
nom = "I@",
voc = "I",
},
p = {
acc = "I@s",
},
},
feminine_u = {
s = {
voc = "o",
},
d = {
nom = "U@",
voc = "U",
},
p = {
acc = "U@s",
},
},
strong_neuter_adjective = {
s = {
dat = {"+ne", {"e", stem = "raised_glide"}, {"e", stem = "glide", note = "vedic"}},
abl = {"+nas", {"s", stem = "raised"}, {"as", stem = "final_unaccented", note = "vedic"}},
},
},
neuter_adjective_dative_ablative = {
s = {
dat = {"+ne", {"e", stem = "raised"}},
abl = {"+nas", {"s", stem = "raised"}},
},
},
neuter_adjective_locative_i = {
s = {
loc = {"+ni", "O@", {"A@", note = "vedic"}},
},
},
neuter_adjective_locative_u = {
s = {
loc = {"+ni", "O@"},
},
},
neuter_adjective_genitive_dual = {
d = {
gen = {"+nos", {"o@s", stem = "final_unaccented"}},
},
},
strong_neuter_noun = {
s = {
dat = {"+ne", {"e", stem = "raised_glide", note = "vedic"}, {"e", stem = "glide", note = "vedic"}},
abl = {
"+nas",
{"s", stem = "raised", note = "vedic"},
{"as", stem = "final_unaccented", note = "vedic"},
},
},
},
neuter_noun_dative_ablative = {
s = {
dat = {"+ne", {"e", stem = "raised", note = "vedic"}},
abl = {"+nas", {"s", stem = "raised", note = "vedic"}},
},
},
neuter_noun_locative_i = {
s = {
loc = {"+ni", {"O@", note = "vedic"}, {"A@", note = "vedic"}},
},
},
neuter_noun_locative_u = {
s = {
loc = {"+ni", {"O@", note = "vedic"}},
},
},
neuter_noun_genitive_dual = {
d = {
gen = {"+nos", {"o@s", stem = "final_unaccented", note = "vedic"}},
},
},
madhu_instrumental = {
s = {
ins = {"+nA", {"+A", note = "vedic"}},
},
},
-- The weakest cases of ákṣi, ásthi, dádhi and sákthi, from akṣán etc. (Whitney §431), on the stem `an_stem`
-- (akṣ-) with the head's own accent.
weakest_from_an = {
s = {
ins = {{"nA@", stem = "an_stem"}},
dat = {{"ne@", stem = "an_stem"}},
abl = {{"na@s", stem = "an_stem"}},
gen = "[abl]",
loc = {{"ni@", stem = "an_stem"}, {"a@ni", stem = "an_stem"}},
},
d = {
gen = {{"no@s", stem = "an_stem"}},
},
p = {
gen = {{"nA@m", stem = "an_stem"}},
},
},
neuter_direct = {
s = {
nom = "+",
acc = "[nom]",
voc = {"+", {"", stem = "raised_unaccented"}},
},
d = {
nom = {"+nI", {"I@", stem = "final_unaccented", note = "vedic"}},
voc = {"+nI", {"I", stem = "final_unaccented", note = "vedic"}},
},
p = {
nom = {{"ni", stem = "lengthened"}, {"+", note = "vedic"}, {"", stem = "lengthened", note = "vedic"}},
acc = "[nom]",
voc = {
{"ni", stem = "lengthened_unaccented"},
{"+", note = "vedic"},
{"", stem = "lengthened_unaccented", note = "vedic"},
},
},
},
neuter_instrumental = {
s = {
ins = "+nA",
},
},
genitive = {
s = {
gen = "[abl]",
},
p = {
gen = {{"nA@m", stem = "lengthened_unaccented"}},
},
},
-- jáni "wife", with the Vedic gen. sing. jányus (Whitney §343f); the rest is the abl. sing. of `feminine`.
jani_genitive = {
s = {
gen = {
{"s", stem = "raised"},
{"A@s", stem = "final_unaccented"},
{"E@", stem = "final_unaccented", note = "brahmanas"},
{"us", stem = "final_unaccented", note = "vedic"},
},
},
p = {
gen = {{"nA@m", stem = "lengthened_unaccented"}},
},
},
oblique = {
d = {
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
loc = "+su",
},
},
},
long_a = {
pronominal_derived = {
s = {
dat = "a@syE",
abl = {"a@syAs", {"a@syE", note = "brahmanas"}},
loc = "a@syAm",
},
p = {
gen = "+sAm",
},
},
derived = {
s = {
dat = "+yE",
abl = {"+yAs", {"+yE", note = "brahmanas"}},
loc = "+yAm",
},
p = {
gen = "+nAm",
},
},
-- The words of Whitney §525 with <pron>.
pronominal_and_nominal_derived = {
s = {
dat = {"a@syE", "+yE"},
abl = {"a@syAs", "+yAs", {"a@syE", note = "brahmanas"}, {"+yE", note = "brahmanas"}},
loc = {"a@syAm", "+yAm"},
},
p = {
gen = {"+sAm", "+nAm"},
},
},
derived_nominative = {
s = {
nom = "+",
},
},
-- sā́, eṣā́ (Whitney §495a, §499b)
s_feminine_nominative = {
s = {
nom = {{"A@", stem = "nominative"}},
},
},
-- syā́, also tyā (Whitney §499a)
tya_feminine_nominative = {
s = {
nom = {{"A@", stem = "nominative"}, "+"},
},
},
derived_direct = {
s = {
ins = {"a@yA", {"+", note = "vedic"}},
voc = "e",
},
d = {
nom = "e@",
voc = "e",
},
p = {
acc = "+s",
},
},
genitive_dual = {
d = {
gen = "a@yos",
},
},
genitive_dual_after_y = {
d = {
gen = {"a@yos", {"o@s", note = "vedic"}},
},
},
root_masculine = {
s = {
nom = "+s",
ins = "+",
dat = "e@",
abl = "a@s",
loc = "i@",
voc = "+s",
},
d = {
nom = {"O@", {"A@", note = "vedic"}},
gen = "o@s",
voc = {"O", {"A", note = "vedic"}},
},
p = {
acc = "a@s",
gen = {"+nAm", {"+Am", note = "perhaps"}},
},
},
root_feminine = {
s = {
nom = {"+", {"+s", note = "vedic_root_remnant"}},
ins = {"a@yA", {"+", note = "vedic"}},
dat = "+yE",
abl = {"+yAs", {"+yE", note = "brahmanas"}},
loc = "+yAm",
voc = "e",
},
d = {
nom = "e@",
voc = "e",
},
p = {
acc = "+s",
gen = "+nAm",
},
},
oblique = {
s = {
acc = "+m",
gen = "[abl]",
},
d = {
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
nom = "+s",
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
loc = "+su",
voc = "+s",
},
},
},
long_iu = {
stri = {
s = {
nom = "+",
acc = {"+am", {"+m", note = "later"}},
ins = "+A@",
dat = "+E@",
abl = {"+A@s", {"+E@", note = "brahmanas"}},
gen = "[abl]",
loc = "+A@m",
voc = "i",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
ins = "+ByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "+o@s",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = {"+as", {"+s", note = "later"}},
ins = "+Bi@s",
dat = "+Bya@s",
abl = "[dat]",
gen = "+nA@m",
loc = "+su@",
voc = "+as",
},
},
vrki = {
s = {
nom = {"+", {"+s", note = "vedic"}},
acc = {"+m", {"+am", note = "vedic"}},
dat = {{"E@", stem = "final_unaccented"}, {"+e", note = "vedic"}},
abl = {
{"A@s", stem = "final_unaccented"},
{"+as", note = "vedic"},
{"E@", stem = "final_unaccented", note = "brahmanas"},
},
loc = {{"A@m", stem = "final_unaccented"}, {"+", note = "vedic"}},
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = {"+s", {"+as", note = "vedic"}},
gen = "+nAm",
voc = "+as",
},
},
vrki_genitive_dual_barytone = {
d = {
gen = "+os",
},
},
vrki_genitive_dual_oxytone = {
d = {
gen = {{"o@s", stem = "final_unaccented"}, {"+os", note = "vedic"}},
},
},
vrki_instrumental_barytone = {
s = {
ins = "+A",
},
},
vrki_instrumental_oxytone = {
s = {
ins = {{"A@", stem = "final_unaccented"}, {"+A", note = "vedic"}},
},
},
devi = {
s = {
nom = "+",
acc = "+m",
ins = {{"A@", stem = "final_unaccented"}},
dat = {{"E@", stem = "final_unaccented"}},
abl = {{"A@s", stem = "final_unaccented"}, {"E@", stem = "final_unaccented", note = "brahmanas"}},
loc = {{"A@m", stem = "final_unaccented"}},
},
d = {
nom = {"+O", {"+", note = "vedic"}},
gen = {{"o@s", stem = "final_unaccented"}},
voc = {"+O", {"+", note = "vedic"}},
},
p = {
nom = {"+as", {"+s", note = "vedic"}},
acc = "+s",
voc = {"+as", {"+s", note = "vedic"}},
},
},
devi_genitive_plural_barytone = {
p = {
gen = "+nAm",
},
},
devi_genitive_plural_oxytone = {
p = {
gen = {"+nAm", {"nA@m", stem = "final_unaccented", note = "rigvedic"}},
},
},
vedic_uv = {
s = {
acc = {"+m", {"+am", note = "vedic", iy_uv_before_vowel = true}},
ins = {{"A@", stem = "final_unaccented"}, {"+A", note = "vedic", iy_uv_before_vowel = true}},
dat = {{"E@", stem = "final_unaccented"}, {"+e", note = "vedic", iy_uv_before_vowel = true}},
abl = {
{"A@s", stem = "final_unaccented"},
{"+as", note = "vedic", iy_uv_before_vowel = true},
{"E@", stem = "final_unaccented", note = "brahmanas"},
},
loc = {
{"A@m", stem = "final_unaccented"},
{"+i", note = "vedic", iy_uv_before_vowel = true},
{"+", note = "vedic"},
},
},
d = {
nom = {"+O", {"+A", note = "vedic", iy_uv_before_vowel = true}},
gen = {{"o@s", stem = "final_unaccented"}, {"+os", note = "vedic", iy_uv_before_vowel = true}},
voc = {"+O", {"+A", note = "vedic", iy_uv_before_vowel = true}},
},
p = {
nom = {"+as", {"+as", note = "vedic", iy_uv_before_vowel = true}},
acc = {"+s", {"+as", note = "vedic", iy_uv_before_vowel = true}},
voc = {"+as", {"+as", note = "vedic", iy_uv_before_vowel = true}},
},
},
u_derived = {
s = {
acc = {"+m", {"+am", note = "vedic"}},
dat = {{"E@", stem = "final_unaccented"}, {"+e", note = "vedic"}},
abl = {
{"A@s", stem = "final_unaccented"},
{"+as", note = "vedic"},
{"E@", stem = "final_unaccented", note = "brahmanas"},
},
loc = {{"A@m", stem = "final_unaccented"}, {"+i", note = "vedic"}, {"+", note = "vedic"}},
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = {"+s", {"+as", note = "vedic"}},
voc = "+as",
},
},
u_genitive_dual_barytone = {
d = {
gen = "+os",
},
},
u_genitive_dual_oxytone = {
d = {
gen = {{"o@s", stem = "final_unaccented"}, {"+os", note = "vedic"}},
},
},
u_instrumental_barytone = {
s = {
ins = "+A",
},
},
u_instrumental_oxytone = {
s = {
ins = {{"A@", stem = "final_unaccented"}, {"+A", note = "vedic"}},
},
},
u_nominative_genitive = {
s = {
nom = "+s",
},
p = {
gen = "+nAm",
},
},
derived_oblique = {
s = {
gen = "[abl]",
},
d = {
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
loc = "+su",
},
},
derived_vocative_i = {
s = {
voc = "i",
},
},
derived_vocative_u = {
s = {
voc = "u",
},
},
root_monosyllabic_feminine = {
s = {
dat = {"+e@", {"+E@", note = "later"}},
abl = {"+a@s", {"+A@s", note = "later"}},
loc = {"+i@", {"+A@m", note = "later"}},
},
},
root_monosyllabic = {
s = {
dat = "+e@",
abl = "+a@s",
loc = "+i@",
},
},
root_monosyllabic_oblique = {
s = {
ins = "+A@",
},
d = {
ins = "+ByA@m",
gen = "+o@s",
},
p = {
ins = "+Bi@s",
dat = "+Bya@s",
gen = {"+A@m", "+nA@m"},
loc = "+su@",
},
},
uncontracted_locative = {
s = {
loc = "+i",
},
},
uncontracted_locative_feminine = {
s = {
loc = {"+i", {"+Am", note = "later"}},
},
},
contracted_locative = {
s = {
loc = {{"i", stem = "glide"}},
},
},
contracted_locative_feminine = {
s = {
loc = {{"i", stem = "glide"}, {"+Am", note = "later"}},
},
},
contracted_locative_oxytone = {
s = {
loc = {{"i\\", stem = "glide"}},
},
},
contracted_locative_oxytone_feminine = {
s = {
loc = {{"i\\", stem = "glide"}, {"+Am", note = "later"}},
},
},
compound_feminine_dative_ablative = {
s = {
dat = {"+e", {"+E", note = "later"}},
abl = {"+as", {"+As", note = "later"}},
},
},
compound_dative_ablative = {
s = {
dat = "+e",
abl = "+as",
},
},
compound_oblique = {
s = {
ins = "+A",
},
d = {
ins = "+ByAm",
gen = "+os",
},
p = {
ins = "+Bis",
dat = "+Byas",
gen = {"+Am", "+nAm"},
loc = "+su",
},
},
root_common = {
s = {
nom = "+s",
acc = "+am",
gen = "[abl]",
voc = "+s",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "[nom]",
abl = "[dat]",
voc = "+as",
},
},
},
vocalic_r = {
-- nṛ́ (Whitney §371d, h–i, §372), with no monosyllabic accent
nr = {
s = {
nom = "A@",
acc = "a@ram",
ins = "rA@",
dat = {"re@", {"a@re", note = "vedic"}},
abl = "u@r",
gen = {"u@r", {"a@ras", note = "vedic"}},
loc = "a@ri",
voc = "ar",
},
d = {
nom = {"a@rO", {"a@rA", note = "vedic"}},
acc = "[nom]",
ins = "f@ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "ro@s",
loc = "[gen]",
voc = {"arO", {"arA", note = "vedic"}},
},
p = {
nom = "a@ras",
acc = "F@n",
ins = "f@Bis",
dat = "f@Byas",
abl = "[dat]",
gen = {"FRA@m", "fRA@m", {"arA@m", note = "vedic"}},
loc = "f@zu",
voc = "aras",
},
},
-- tisṛ́, the feminine of tri (Whitney §482e–f), with no strengthening; the later language is said to allow the
-- accent on the ending.
tisr = {
p = {
nom = "ra@s",
acc = "[nom]",
ins = {"f@Bis", {"fBi@s", note = "later"}},
dat = {"f@Byas", {"fBya@s", note = "later"}},
abl = "[dat]",
gen = {"fRA@m", {"FRA@m", note = "vedic"}, {"f@RAm", note = "later"}},
loc = {"f@zu", {"fzu@", note = "later"}},
voc = "ras",
},
},
-- cátasṛ, the feminine of catúr (Whitney §482g–h), with the accent shifted to the ṛ, added with the head's own
-- accent.
catasr = {
p = {
nom = "ras",
acc = "[nom]",
ins = {{"f@Bis", strip_stem_accent = true}, {"fBi@s", strip_stem_accent = true, note = "later"}},
dat = {{"f@Byas", strip_stem_accent = true}, {"fBya@s", strip_stem_accent = true, note = "later"}},
abl = "[dat]",
gen = {{"fRA@m", strip_stem_accent = true}, {"FRAm", strip_stem_accent = true, note = "rare"}},
loc = {{"f@zu", strip_stem_accent = true}, {"fzu@", strip_stem_accent = true, note = "later"}},
voc = "ras",
},
},
neuter = {
s = {
nom = {"f@", {"u@r", note = "rigvedic"}},
acc = "[nom]",
ins = {"+nA", "rA@"},
dat = {"+ne", "re@"},
abl = {"+nas", "u@r"},
loc = {"+ni", "a@ri"},
voc = {"f", "ar"},
},
d = {
nom = "+nI",
gen = {"+nos", "ro@s"},
voc = "+nI",
},
p = {
nom = "F@ni",
acc = "[nom]",
voc = "Fni",
},
},
feminine_accusative_plural = {
p = {
acc = "F@s",
},
},
masculine_accusative_plural = {
p = {
acc = "F@n",
},
},
masculine_feminine = {
s = {
nom = "A@",
ins = "rA@",
dat = "re@",
abl = "u@r",
loc = "a@ri",
voc = "ar",
},
d = {
gen = "ro@s",
},
},
strong_long_a = {
s = {
acc = "A@ram",
},
d = {
nom = {"A@rO", {"A@rA", note = "vedic"}},
voc = {"ArO", {"ArA", note = "vedic"}},
},
p = {
nom = "A@ras",
voc = "Aras",
},
},
strong_short_a = {
s = {
acc = "a@ram",
},
d = {
nom = {"a@rO", {"a@rA", note = "vedic"}},
voc = {"arO", {"arA", note = "vedic"}},
},
p = {
nom = "a@ras",
voc = "aras",
},
},
oblique = {
s = {
gen = "[abl]",
},
d = {
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
gen = {{"nA@m", stem = "lengthened_unaccented"}},
loc = "+su",
},
},
},
root = {
neuter_plural_nasal = {
p = {
nom = {{"i", stem = "neuter_plural"}},
voc = {{"i", stem = "neuter_plural_unaccented"}},
},
},
neuter_plural = {
p = {
nom = "+i",
voc = "+i",
},
},
pums = {
s = {
nom = "u@mAn",
acc = "u@mAMsam",
ins = "uMsA@",
dat = "uMse@",
abl = "uMsa@s",
gen = "[abl]",
loc = "uMsi@",
voc = {"uman", {"umas", note = "rigvedic"}},
},
d = {
nom = {"u@mAMsO", {"u@mAMsA", note = "vedic"}},
acc = "[nom]",
ins = "umByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "uMso@s",
loc = "[gen]",
voc = {"umAMsO", {"umAMsA", note = "vedic"}},
},
p = {
nom = "u@mAMsas",
acc = "uMsa@s",
ins = "umBi@s",
dat = "umBya@s",
abl = "[dat]",
gen = "uMsA@m",
loc = "uMsu@",
voc = "umAMsas",
},
},
-- áp (Whitney §393), whole forms: plural only, with d for p before bh. RV. has the instr. and gen. sing.
ap = {
s = {
nom = {},
acc = {},
ins = {{"apA@", note = "rigvedic"}},
dat = {},
abl = {},
gen = {{"apa@s", note = "rigvedic"}},
loc = {},
voc = {},
},
p = {
nom = "A@pas",
acc = "apa@s",
ins = "adBi@s",
dat = "adBya@s",
abl = "[dat]",
gen = "apA@m",
loc = "apsu@",
voc = "Apas",
},
},
-- dánt (Whitney §396), whole forms: strong dánt, weak dat, with the monosyllabic accent in the middle cases
dant = {
s = {
nom = "da@n",
acc = "da@ntam",
ins = "datA@",
dat = "date@",
abl = "data@s",
gen = "[abl]",
loc = "dati@",
voc = "dan",
},
d = {
nom = {"da@ntO", {"da@ntA", note = "vedic"}},
acc = "[nom]",
ins = "dadByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "dato@s",
loc = "[gen]",
voc = {"dantO", {"dantA", note = "vedic"}},
},
p = {
nom = "da@ntas",
acc = "data@s",
ins = "dadBi@s",
dat = "dadBya@s",
abl = "[dat]",
gen = "datA@m",
loc = "datsu@",
voc = "dantas",
},
},
-- anaḍváh (Whitney §404), whole forms on what precedes them: strong anaḍvā́h (nom. anaḍvā́n, voc. ánaḍvan),
-- weakest anaḍúh, middle anaḍúd
anadvah = {
s = {
nom = "anaqvA@n",
acc = "anaqvA@ham",
ins = "anaqu@hA",
dat = "anaqu@he",
abl = "anaqu@has",
gen = "[abl]",
loc = "anaqu@hi",
voc = "anaqvan",
},
d = {
nom = {"anaqvA@hO", {"anaqvA@hA", note = "vedic"}},
acc = "[nom]",
ins = "anaqu@dByAm",
dat = "[ins]",
abl = "[ins]",
gen = "anaqu@hos",
loc = "[gen]",
voc = {"anaqvAhO", {"anaqvAhA", note = "vedic"}},
},
p = {
nom = "anaqvA@has",
acc = "anaqu@has",
ins = "anaqu@dBis",
dat = "anaqu@dByas",
abl = "[dat]",
gen = "anaqu@hAm",
loc = "anaqu@tsu",
voc = "anaqvAhas",
},
},
-- catúr (Whitney §482g–h), whole forms: plural only, with catvā́r in the strong cases and n before the gen. -ām
catur_masculine = {
p = {
nom = "catvA@ras",
acc = "catu@ras",
voc = "catvAras",
},
},
catur_neuter = {
p = {
nom = "catvA@ri",
acc = "[nom]",
voc = "catvAri",
},
},
catur_oblique = {
p = {
ins = "catu@rBis",
dat = "catu@rByas",
abl = "[dat]",
gen = "caturRA@m",
loc = "catu@rzu",
},
},
-- The compounds in -vah (Whitney §403): `strong` (-vāh) in the strong and middle cases, `weakest` (-ūh, or -auh
-- after a) in the weakest.
vah = {
s = {
nom = {{"s", stem = "strong"}},
acc = {{"am", stem = "strong"}},
ins = {{"A", stem = "weakest"}},
dat = {{"e", stem = "weakest"}},
abl = {{"as", stem = "weakest"}},
gen = "[abl]",
loc = {{"i", stem = "weakest"}},
voc = {{"s", stem = "strong"}},
},
d = {
nom = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
acc = "[nom]",
ins = {{"ByAm", stem = "strong"}},
dat = "[ins]",
abl = "[ins]",
gen = {{"os", stem = "weakest"}},
loc = "[gen]",
voc = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
},
p = {
nom = {{"as", stem = "strong"}},
acc = {{"as", stem = "weakest"}},
ins = {{"Bis", stem = "strong"}},
dat = {{"Byas", stem = "strong"}},
abl = "[dat]",
gen = {{"Am", stem = "weakest"}},
loc = {{"su", stem = "strong"}},
voc = {{"as", stem = "strong"}},
},
},
-- avayā́j (Whitney §406): the nom. and voc. sing. on `nominative` (avayā́s), the middle cases on `middle`
-- (avayás)
avayaj = {
s = {
nom = {{"", stem = "nominative"}},
acc = "+am",
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = "+i",
voc = {{"", stem = "nominative"}},
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
ins = {{"ByAm", stem = "middle"}},
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "+as",
ins = {{"Bis", stem = "middle"}},
dat = {{"Byas", stem = "middle"}},
abl = "[dat]",
gen = "+Am",
loc = {{"su", stem = "middle"}, {"su", stem = "middle", keep_s_before_voiceless = true}},
voc = "+as",
},
},
-- kṣam (Whitney §388): kṣā́m (`strong`) in the strong cases, kṣmás in the abl.-gen. sing. and the loc. kṣámi
ksam = {
s = {
nom = {{"s", stem = "strong"}},
acc = {{"am", stem = "strong"}},
ins = "+A@",
dat = "+e@",
abl = "ma@s",
gen = "[abl]",
loc = "+i",
voc = {{"s", stem = "strong"}},
},
d = {
nom = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
acc = "[nom]",
ins = "+ByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "+o@s",
loc = "[gen]",
voc = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
},
p = {
nom = {{"as", stem = "strong"}},
acc = "+as",
ins = "+Bi@s",
dat = "+Bya@s",
abl = "[dat]",
gen = "+A@m",
loc = "+su@",
voc = {{"as", stem = "strong"}},
},
},
-- dvā́r (Whitney §388): the weak and middle cases, also from `contracted` (dur) in the Veda
dvar = {
s = {
ins = {"+A@", {"A@", stem = "contracted", note = "vedic"}},
dat = {"+e@", {"e@", stem = "contracted", note = "vedic"}},
abl = {"+a@s", {"a@s", stem = "contracted", note = "vedic"}},
gen = "[abl]",
loc = {"+i@", {"i@", stem = "contracted", note = "vedic"}},
},
d = {
acc = "[nom]",
ins = {"+ByA@m", {"ByA@m", stem = "contracted", note = "vedic"}},
dat = "[ins]",
abl = "[ins]",
gen = {"+o@s", {"o@s", stem = "contracted", note = "vedic"}},
loc = "[gen]",
},
p = {
acc = {"+as", {"a@s", stem = "contracted", note = "vedic"}},
ins = {"+Bi@s", {"Bi@s", stem = "contracted", note = "vedic"}},
dat = {"+Bya@s", {"Bya@s", stem = "contracted", note = "vedic"}},
abl = "[dat]",
gen = {"+A@m", {"A@m", stem = "contracted", note = "vedic"}},
loc = {"+su@", {"su@", stem = "contracted", note = "vedic"}},
},
},
-- The weak and middle cases of ásṛj, yákṛt, śákṛt (Whitney §432), also made from `an_stem` (as-, yak-, śak-)
-- with the head's own accent.
heteroclite = {
s = {
ins = {"+A", {"nA@", stem = "an_stem"}},
dat = {"+e", {"ne@", stem = "an_stem"}},
abl = {"+as", {"na@s", stem = "an_stem"}},
gen = "[abl]",
loc = {"+i", {"ni@", stem = "an_stem"}, {"a@ni", stem = "an_stem"}},
},
d = {
acc = "[nom]",
ins = {"+ByAm", {"a@ByAm", stem = "an_stem"}},
dat = "[ins]",
abl = "[ins]",
gen = {"+os", {"no@s", stem = "an_stem"}},
loc = "[gen]",
},
p = {
ins = {"+Bis", {"a@Bis", stem = "an_stem"}},
dat = {"+Byas", {"a@Byas", stem = "an_stem"}},
abl = "[dat]",
gen = {"+Am", {"nA@m", stem = "an_stem"}},
loc = {"+su", {"a@su", stem = "an_stem"}},
},
},
-- The same for the monosyllable dós, with doṣán (Whitney §432).
heteroclite_monosyllabic = {
s = {
ins = {"+A@", {"nA@", stem = "an_stem"}},
dat = {"+e@", {"ne@", stem = "an_stem"}},
abl = {"+a@s", {"na@s", stem = "an_stem"}},
gen = "[abl]",
loc = {"+i@", {"ni@", stem = "an_stem"}, {"a@ni", stem = "an_stem"}},
},
d = {
acc = "[nom]",
ins = {"+ByA@m", {"a@ByAm", stem = "an_stem"}},
dat = "[ins]",
abl = "[ins]",
gen = {"+o@s", {"no@s", stem = "an_stem"}},
loc = "[gen]",
},
p = {
ins = {"+Bi@s", {"a@Bis", stem = "an_stem"}},
dat = {"+Bya@s", {"a@Byas", stem = "an_stem"}},
abl = "[dat]",
gen = {"+A@m", {"nA@m", stem = "an_stem"}},
loc = {"+su@", {"+su@", keep_s_before_voiceless = true}, {"a@su", stem = "an_stem"}},
},
},
-- The strong cases are on `strong`: the head, or the head with its vowel lengthened (Whitney §387).
monosyllabic_direct = {
s = {
nom = {{"s", stem = "strong"}},
acc = {{"am", stem = "strong"}},
voc = {{"s", stem = "strong"}},
},
d = {
nom = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
voc = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
},
p = {
nom = {{"as", stem = "strong"}},
voc = {{"as", stem = "strong"}},
},
},
-- yuj, with the older strong stem yuñj (`nasal`) beside yuj (Whitney §386); its nom. sing. is yúṅ.
yuj_direct = {
s = {
nom = {{"s", stem = "strong"}, {"s", stem = "nasal", final = "N", note = "vedic"}},
acc = {{"am", stem = "strong"}, {"am", stem = "nasal", note = "vedic"}},
voc = {{"s", stem = "strong"}, {"s", stem = "nasal", final = "N", note = "vedic"}},
},
d = {
nom = {
{"O", stem = "strong"},
{"A", stem = "strong", note = "vedic"},
{"A", stem = "nasal", note = "vedic"},
},
voc = {
{"O", stem = "strong"},
{"A", stem = "strong", note = "vedic"},
{"A", stem = "nasal", note = "vedic"},
},
},
p = {
nom = {{"as", stem = "strong"}},
voc = {{"as", stem = "strong"}},
},
},
-- The acc. pl. is a weak case, but most monosyllables keep the accent on the stem (Whitney §390a).
monosyllabic_accusative_plural = {
p = {
acc = "+as",
},
},
oxytone_accusative_plural = {
p = {
acc = "+a@s",
},
},
optional_oxytone_accusative_plural = {
p = {
acc = {"+a@s", "+as"},
},
},
monosyllabic_neuter_direct = {
s = {
nom = "+",
acc = "[nom]",
voc = "+",
},
d = {
nom = "+I@",
voc = "+I",
},
p = {
acc = "[nom]",
},
},
monosyllabic_locative_plural = {
p = {
loc = "+su@",
},
},
monosyllabic_locative_plural_s = {
p = {
loc = {"+su@", {"+su@", keep_s_before_voiceless = true}},
},
},
monosyllabic_oblique = {
s = {
ins = "+A@",
dat = "+e@",
abl = "+a@s",
gen = "[abl]",
loc = "+i@",
},
d = {
acc = "[nom]",
dat = "[ins]",
abl = "[ins]",
gen = "+o@s",
loc = "[gen]",
},
p = {
abl = "[dat]",
gen = "+A@m",
},
},
monosyllabic_middle = {
d = {
ins = "+ByA@m",
},
p = {
ins = "+Bi@s",
dat = "+Bya@s",
},
},
-- pád, with the RV. and VS. paḍbhís (Whitney §389b)
pad_middle = {
d = {
ins = "+ByA@m",
},
p = {
ins = {"+Bi@s", {"aqBi@s", note = "vedic"}},
dat = "+Bya@s",
},
},
-- mā́s "month", with mādbhís, mādbhyás (Whitney §389b)
mas_middle = {
d = {
ins = "AdByA@m",
},
p = {
ins = "AdBi@s",
dat = "AdBya@s",
},
},
drs_nominative = {
s = {
nom = {{"s", stem = "strong"}, {"f@N", note = "vedic"}},
},
},
polysyllabic_direct = {
s = {
acc = {{"am", stem = "strong"}},
voc = {{"s", stem = "strong"}},
},
d = {
nom = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
voc = {{"O", stem = "strong"}, {"A", stem = "strong", note = "vedic"}},
},
p = {
nom = {{"as", stem = "strong"}},
acc = "+as",
voc = {{"as", stem = "strong"}},
},
},
polysyllabic_nominative = {
s = {
nom = {{"s", stem = "strong"}},
},
},
polysyllabic_neuter_direct = {
s = {
nom = "+",
acc = "[nom]",
voc = "+",
},
d = {
nom = "+I",
voc = "+I",
},
p = {
acc = "[nom]",
},
},
polysyllabic_locative_plural = {
p = {
loc = "+su",
},
},
polysyllabic_locative_plural_s = {
p = {
loc = {"+su", {"+su", keep_s_before_voiceless = true}},
},
},
polysyllabic_oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = "+i",
},
d = {
acc = "[nom]",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
},
p = {
abl = "[dat]",
gen = "+Am",
},
},
polysyllabic_middle = {
d = {
ins = "+ByAm",
},
p = {
ins = "+Bis",
dat = "+Byas",
},
},
-- The compounds of pád, which in the later language also lengthen in the middle cases (Whitney §387).
pad_compound_middle = {
d = {
ins = {"+ByAm", {"ByAm", stem = "strong", note = "later"}},
},
p = {
ins = {"+Bis", {"Bis", stem = "strong", note = "later"}},
dat = {"+Byas", {"Byas", stem = "strong", note = "later"}},
loc = {"+su", {"su", stem = "strong", note = "later"}},
},
},
},
s = {
-- uśánas (Whitney §416, §355a): the nom. uśánā, three vocatives, and the dat. and loc. uśáne of the Vedic stem
-- uśánā
usanas = {
s = {
nom = "A",
acc = "+am",
ins = "+A",
dat = {"+e", {"e", note = "vedic"}},
abl = "+as",
gen = "[abl]",
loc = {"+i", {"e", note = "vedic"}},
voc = {"+", "a", "an"},
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "[nom]",
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
gen = "+Am",
loc = {"+su", {"+su", keep_s_before_voiceless = true}},
voc = "+as",
},
},
comparative_masculine = {
s = {
nom = "An",
acc = "AMsam",
voc = {"an", {"+", note = "rigvedic"}},
},
d = {
nom = {"AMsO", {"AMsA", note = "vedic"}},
voc = {"AMsO", {"AMsA", note = "vedic"}},
},
p = {
nom = "AMsas",
acc = "+as",
voc = "AMsas",
},
},
as_direct = {
s = {
nom = "A@s",
acc = {"+am", {"A@m", note = "vedic"}},
voc = "+",
},
p = {
nom = {"+as", {"A@s", note = "vedic"}},
voc = {"+as", {"A@s", note = "vedic"}},
},
},
is_us_direct = {
s = {
nom = "+",
acc = "+am",
},
p = {
nom = "+as",
voc = "+as",
},
},
is_vocative = {
s = {
voc = {"+", {"e", note = "vedic"}},
},
},
us_vocative = {
s = {
voc = {"+", {"o", note = "vedic"}},
},
},
masculine_feminine_dual = {
d = {
nom = {"+O", {"+A", note = "vedic"}},
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
acc = "[nom]",
},
},
compound_as_neuter_nominative = {
s = {
nom = {"+", {"A@s", note = "vedic"}},
},
},
neuter_nominative = {
s = {
nom = "+",
},
},
neuter_direct = {
s = {
acc = "[nom]",
voc = "+",
},
d = {
nom = "+I",
voc = "+I",
},
p = {
nom = {{"i", stem = "neuter_plural"}},
acc = "[nom]",
voc = {{"i", stem = "neuter_plural_unaccented"}},
},
},
oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = "+i",
},
d = {
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
},
p = {
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
gen = "+Am",
loc = {"+su", {"+su", keep_s_before_voiceless = true}},
},
},
},
an = {
-- śván, yúvan, maghávan (Whitney §427–428): the weakest cases on `weakest` (śún, yū́n, maghón), and the Vedic
-- loc. sing. without -i of the an-stems (§425c)
contracted_weakest = {
s = {
ins = {{"nA", stem = "weakest"}},
dat = {{"ne", stem = "weakest"}},
abl = {{"nas", stem = "weakest"}},
gen = "[abl]",
loc = {{"ni", stem = "weakest"}, {"+", note = "vedic"}},
},
d = {
gen = {{"nos", stem = "weakest"}},
},
p = {
gen = {{"nAm", stem = "weakest"}},
},
},
contracted_weakest_accusative_plural = {
p = {
acc = {{"nas", stem = "weakest"}},
},
},
-- maghávan, whose middle cases in the older language are only from maghávant (Whitney §428b)
maghavan_middle = {
d = {
acc = "[nom]",
ins = {"a@ByAm", {"a@dByAm", note = "vedic"}},
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = {"a@Bis", {"a@dBis", note = "vedic"}},
dat = {"a@Byas", {"a@dByas", note = "vedic"}},
abl = "[dat]",
loc = {"a@su", {"a@tsu", note = "vedic"}},
},
},
-- áhan (Whitney §430a–b): the nom. sing. from áhar and the middle cases from áhas, beside the oldest áhabhis,
-- áhabhyas, áhasu and the PB. aharbhis
ahan = {
s = {
nom = "ar",
acc = "[nom]",
ins = "nA",
dat = "ne",
abl = "nas",
gen = "[abl]",
loc = {"ni", "ani", {"an", note = "vedic"}},
voc = "ar",
},
d = {
nom = {"nI", "anI"},
acc = "[nom]",
ins = "oByAm",
dat = "[ins]",
abl = "[ins]",
gen = "nos",
loc = "[gen]",
voc = {"nI", "anI"},
},
p = {
nom = {"Ani", {"A", note = "vedic"}},
acc = "[nom]",
ins = {"oBis", {"aBis", note = "vedic"}, {"arBis", note = "brahmanas"}},
dat = {"oByas", {"aByas", note = "vedic"}},
abl = "[dat]",
gen = "nAm",
loc = {"aHsu", "assu", {"asu", note = "vedic"}},
voc = {"Ani", {"A", note = "vedic"}},
},
},
-- ū́dhan (Whitney §430d): ū́dhar or ū́dhas (one form in pausa), ū́dhan or ū́dhani, ū́dhaḥsu
udhan = {
s = {
nom = "as",
acc = "[nom]",
ins = "nA",
dat = "ne",
abl = "nas",
gen = "[abl]",
loc = {"an", "ani"},
voc = "as",
},
d = {
nom = {"nI", "anI"},
acc = "[nom]",
ins = "aByAm",
dat = "[ins]",
abl = "[ins]",
gen = "nos",
loc = "[gen]",
voc = {"nI", "anI"},
},
p = {
nom = "Ani",
acc = "[nom]",
ins = "aBis",
dat = "aByas",
abl = "[dat]",
gen = "nAm",
loc = "aHsu",
voc = "Ani",
},
},
han_neuter_nominative = {
s = {
nom = {"a@", {"a@m", note = "vedic"}},
},
},
neuter_direct = {
s = {
acc = "[nom]",
voc = {"+", "a"},
},
p = {
nom = {"A@ni", {"a@", note = "vedic"}, {"A@", note = "vedic"}},
acc = "[nom]",
voc = {"Ani", {"a", note = "vedic"}, {"A", note = "vedic"}},
},
},
neuter_nominative = {
s = {
nom = "a@",
},
},
contracted_neuter_dual = {
d = {
nom = {"nI@", "+I"},
voc = {"nI", "+I"},
},
},
neuter_dual = {
d = {
nom = "+I",
voc = "+I",
},
},
masculine_nominative_vocative = {
s = {
nom = "A@",
voc = "+",
},
},
han_accusative_plural = {
p = {
acc = {"na@s", "a@nas"},
},
},
short_strong = {
s = {
acc = "a@nam",
},
d = {
nom = {"a@nO", {"a@nA", note = "vedic"}},
voc = {"anO", {"anA", note = "vedic"}},
},
p = {
nom = "a@nas",
voc = "anas",
},
},
short_strong_accusative_plural = {
p = {
acc = "na@s",
},
},
contracted_accusative_plural = {
p = {
acc = "na@s",
},
},
optional_short_strong = {
s = {
acc = {"A@nam", {"a@nam", note = "vedic"}},
},
d = {
nom = {"A@nO", {"a@nO", note = "vedic"}, {"a@nA", note = "vedic"}},
voc = {"AnO", {"anO", note = "vedic"}, {"anA", note = "vedic"}},
},
p = {
nom = {"A@nas", {"a@nas", note = "vedic"}},
voc = {"Anas", {"anas", note = "vedic"}},
},
},
uncontracted_accusative_plural = {
p = {
acc = "+as",
},
},
strong = {
s = {
acc = "A@nam",
},
d = {
nom = {"A@nO", {"A@nA", note = "vedic"}},
voc = {"AnO", {"AnA", note = "vedic"}},
},
p = {
nom = "A@nas",
voc = "Anas",
},
},
contracted_oblique = {
s = {
ins = "nA@",
dat = "ne@",
abl = "na@s",
gen = "[abl]",
loc = {"ni@", "+i", {"+", note = "vedic"}},
},
d = {
gen = "no@s",
},
p = {
gen = "nA@m",
},
},
uncontracted_oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = {"+i", {"+", note = "vedic"}},
},
d = {
gen = "+os",
},
p = {
gen = "+Am",
},
},
oblique = {
d = {
acc = "[nom]",
ins = "a@ByAm",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
ins = "a@Bis",
dat = "a@Byas",
abl = "[dat]",
loc = "a@su",
},
},
},
["in"] = {
-- pathín (Whitney §433), whole forms: strong pánthā(n), middle pathí, weakest path
pathin = {
s = {
nom = "pa@nTAs",
acc = {"pa@nTAnam", {"pa@nTAm", note = "rigvedic"}},
ins = "paTA@",
dat = "paTe@",
abl = "paTa@s",
gen = "[abl]",
loc = "paTi@",
voc = "panTAs",
},
d = {
nom = {"pa@nTAnO", {"pa@nTAnA", note = "vedic"}},
acc = "[nom]",
ins = "paTi@ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "paTo@s",
loc = "[gen]",
voc = {"panTAnO", {"panTAnA", note = "vedic"}},
},
p = {
nom = {"pa@nTAnas", {"pa@nTAs", note = "rigvedic"}, {"paTa@yas", note = "vedic"}},
acc = {"paTa@s", "pa@Tas", {"pATa@s", note = "rigvedic"}},
ins = "paTi@Bis",
dat = "paTi@Byas",
abl = "[dat]",
gen = {"paTA@m", {"paTInA@m", note = "vedic"}},
loc = "paTi@zu",
voc = {"panTAnas", {"panTAs", note = "rigvedic"}},
},
},
-- mathín (Whitney §434), declined like pathín by the grammarians, with the Vedic mánthām and mathīnā́m
mathin = {
s = {
nom = "ma@nTAs",
acc = {"ma@nTAnam", {"ma@nTAm", note = "vedic"}},
ins = "maTA@",
dat = "maTe@",
abl = "maTa@s",
gen = "[abl]",
loc = "maTi@",
voc = "manTAs",
},
d = {
nom = {"ma@nTAnO", {"ma@nTAnA", note = "vedic"}},
acc = "[nom]",
ins = "maTi@ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "maTo@s",
loc = "[gen]",
voc = {"manTAnO", {"manTAnA", note = "vedic"}},
},
p = {
nom = "ma@nTAnas",
acc = "maTa@s",
ins = "maTi@Bis",
dat = "maTi@Byas",
abl = "[dat]",
gen = {"maTA@m", {"maTInA@m", note = "vedic"}},
loc = "maTi@zu",
voc = "manTAnas",
},
},
-- ṛbhukṣín (Whitney §434), declined like pathín by the grammarians, with the Vedic ṛbhukṣáṇam and ṛbhukṣáṇas
-- after another model and the voc. pl. ṛbhukṣās
rbhuksin = {
s = {
nom = "fBukzA@s",
acc = {"fBukzA@Ram", {"fBukza@Ram", note = "vedic"}},
ins = "fBukzA@",
dat = "fBukze@",
abl = "fBukza@s",
gen = "[abl]",
loc = "fBukzi@",
voc = "fBukzAs",
},
d = {
nom = {"fBukzA@RO", {"fBukzA@RA", note = "vedic"}},
acc = "[nom]",
ins = "fBukzi@ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "fBukzo@s",
loc = "[gen]",
voc = {"fBukzARO", {"fBukzARA", note = "vedic"}},
},
p = {
nom = {"fBukzA@Ras", {"fBukza@Ras", note = "vedic"}},
acc = "fBukza@s",
ins = "fBukzi@Bis",
dat = "fBukzi@Byas",
abl = "[dat]",
gen = "fBukzA@m",
loc = "fBukzi@zu",
voc = {"fBukzARas", {"fBukzAs", note = "vedic"}},
},
},
masculine_direct = {
s = {
nom = "I@",
acc = "i@nam",
voc = "+",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "[nom]",
voc = "+as",
},
},
neuter_direct = {
s = {
nom = "i@",
acc = "[nom]",
voc = {"i", "+"},
},
d = {
nom = "+I",
voc = "+I",
},
p = {
nom = "I@ni",
acc = "[nom]",
voc = "Ini",
},
},
oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = "+i",
},
d = {
acc = "[nom]",
ins = "i@ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
},
p = {
ins = "i@Bis",
dat = "i@Byas",
abl = "[dat]",
gen = "+Am",
loc = "i@zu",
},
},
},
at = {
nonasal_masculine = {
s = {
nom = "a@t",
acc = "a@tam",
voc = "at",
},
d = {
nom = {"a@tO", {"a@tA", note = "vedic"}},
voc = {"atO", {"atA", note = "vedic"}},
},
p = {
nom = "a@tas",
acc = "a@tas",
voc = "atas",
},
},
nonasal_neuter = {
s = {
nom = "a@t",
acc = "[nom]",
voc = "at",
},
d = {
nom = "a@tI",
voc = "atI",
},
p = {
nom = "a@ti",
acc = "[nom]",
voc = "ati",
},
},
nonasal_oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
loc = "+i",
},
d = {
gen = "+os",
},
p = {
gen = "+Am",
},
},
participle_masculine_long_a = {
s = {
nom = "A@n",
acc = "A@ntam",
voc = "An",
},
d = {
nom = {"A@ntO", {"A@ntA", note = "vedic"}},
voc = {"AntO", {"AntA", note = "vedic"}},
},
p = {
nom = "A@ntas",
acc = "Ata@s",
voc = "Antas",
},
},
participle_masculine_short_a = {
s = {
nom = "a@n",
acc = "a@ntam",
voc = "an",
},
d = {
nom = {"a@ntO", {"a@ntA", note = "vedic"}},
voc = {"antO", {"antA", note = "vedic"}},
},
p = {
nom = "a@ntas",
acc = "ata@s",
voc = "antas",
},
},
neuter_dual_two_feminines = {
d = {
nom = {{"", stem = "feminine"}, {"", stem = "second_feminine"}},
voc = {{"", stem = "feminine"}, {"", stem = "second_feminine"}},
},
},
neuter_dual_feminine = {
d = {
nom = {{"", stem = "feminine"}},
voc = {{"", stem = "feminine"}},
},
},
participle_neuter_plural_short_a = {
p = {
nom = {"a@nti", {"A@nti", note = "rigvedic"}},
acc = "[nom]",
voc = {"anti", {"Anti", note = "rigvedic"}},
},
},
participle_neuter_plural_long_a = {
p = {
nom = "A@nti",
acc = "[nom]",
voc = "Anti",
},
},
participle_neuter_singular = {
s = {
acc = "[nom]",
},
},
participle_neuter_singular_long_a = {
s = {
nom = "A@t",
voc = "At",
},
},
participle_neuter_singular_short_a = {
s = {
nom = "a@t",
voc = "at",
},
},
participle_oblique_long_a = {
s = {
ins = "AtA@",
dat = "Ate@",
abl = "Ata@s",
loc = "Ati@",
},
d = {
gen = "Ato@s",
},
p = {
gen = "AtA@m",
},
},
participle_oblique_short_a = {
s = {
ins = "atA@",
dat = "ate@",
abl = "ata@s",
loc = "ati@",
},
d = {
gen = "ato@s",
},
p = {
gen = "atA@m",
},
},
oblique = {
s = {
gen = "[abl]",
},
d = {
acc = "[nom]",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
abl = "[dat]",
loc = "+su",
},
},
oblique_long_a = {
d = {
ins = "A@dByAm",
},
p = {
ins = "A@dBis",
dat = "A@dByas",
},
},
oblique_short_a = {
d = {
ins = "a@dByAm",
},
p = {
ins = "a@dBis",
dat = "a@dByas",
},
},
vat_masculine = {
s = {
nom = "A@n",
acc = "a@ntam",
voc = {"an", {"as", note = "rigvedic"}},
},
d = {
nom = {"a@ntO", {"a@ntA", note = "vedic"}},
voc = {"antO", {"antA", note = "vedic"}},
},
p = {
nom = "a@ntas",
acc = "a@tas",
voc = "antas",
},
},
vat_neuter = {
s = {
nom = "a@t",
acc = "[nom]",
voc = "at",
},
d = {
nom = "+I",
voc = "+I",
},
p = {
nom = {"a@nti", {"A@nti", note = "rigvedic"}},
acc = "[nom]",
voc = {"anti", {"Anti", note = "rigvedic"}},
},
},
vat_oblique = {
s = {
ins = "+A",
dat = "+e",
abl = "+as",
gen = "[abl]",
loc = "+i",
},
d = {
acc = "[nom]",
ins = "a@dByAm",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
},
p = {
ins = "a@dBis",
dat = "a@dByas",
abl = "[dat]",
gen = "+Am",
loc = "+su",
},
},
},
anc = {
masculine_direct = {
s = {
nom = "+",
acc = "+am",
voc = "+",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
voc = "+as",
},
},
neuter_direct = {
s = {
nom = "",
acc = "[nom]",
voc = "",
},
p = {
nom = "+i",
acc = "[nom]",
voc = "+i",
},
},
middle_oblique = {
d = {
ins = "ByAm",
},
p = {
ins = "Bis",
dat = "Byas",
loc = "su",
},
},
masculine_accusative_plural = {
p = {
acc = {{"as", stem = "weakest"}},
},
},
neuter_dual = {
d = {
nom = {{"I", stem = "weakest"}},
voc = {{"I", stem = "weakest"}},
},
},
weakest_oblique = {
s = {
ins = {{"A", stem = "weakest"}},
dat = {{"e", stem = "weakest"}},
abl = {{"as", stem = "weakest"}},
loc = {{"i", stem = "weakest"}},
},
d = {
gen = {{"os", stem = "weakest"}},
},
p = {
gen = {{"Am", stem = "weakest"}},
},
},
oxytone_masculine_accusative_plural = {
p = {
acc = {{"as", stem = "weakest"}, {"a@s", stem = "weakest", note = "rigvedic"}},
},
},
oxytone_neuter_dual = {
d = {
nom = {{"I", stem = "weakest"}, {"I@", stem = "weakest", note = "rigvedic"}},
voc = {{"I", stem = "weakest"}},
},
},
oxytone_weakest_oblique = {
s = {
ins = {{"A", stem = "weakest"}, {"A@", stem = "weakest", note = "rigvedic"}},
dat = {{"e", stem = "weakest"}, {"e@", stem = "weakest", note = "rigvedic"}},
abl = {{"as", stem = "weakest"}, {"a@s", stem = "weakest", note = "rigvedic"}},
loc = {{"i", stem = "weakest"}, {"i@", stem = "weakest", note = "rigvedic"}},
},
d = {
gen = {{"os", stem = "weakest"}, {"o@s", stem = "weakest", note = "rigvedic"}},
},
p = {
gen = {{"Am", stem = "weakest"}, {"A@m", stem = "weakest", note = "rigvedic"}},
},
},
copies = {
s = {
gen = "[abl]",
},
d = {
acc = "[nom]",
dat = "[ins]",
abl = "[ins]",
loc = "[gen]",
},
p = {
abl = "[dat]",
},
},
},
o = {
-- dyó, dyú, dív (Whitney §361d–e), whole forms: the forms Whitney found in use, and in the cells that have
-- none, the forms he brackets as not met with.
dyo = {
s = {
nom = "dyO@s",
acc = {"di@vam", "dyA@m"},
ins = "divA@",
dat = {"dive@", {"dya@ve", note = "later"}},
abl = {"diva@s", "dyo@s"},
gen = "[abl]",
loc = {"divi@", "dya@vi"},
voc = "dyO@s",
},
d = {
nom = {"dyA@vO", {"dyA@vA", note = "vedic"}},
acc = "[nom]",
ins = {"dyu@ByAm", "dyo@ByAm"},
dat = "[ins]",
abl = "[ins]",
gen = {"divo@s", "dya@vos"},
loc = "[gen]",
voc = "[nom]",
},
p = {
nom = {"di@vas", "dyA@vas"},
acc = {"diva@s", "di@vas", "dyU@n"},
ins = "dyu@Bis",
dat = {"dyu@Byas", "dyo@Byas"},
abl = "[dat]",
gen = {"divA@m", "dya@vAm"},
loc = "dyu@zu",
voc = "[nom]",
},
},
all = {
s = {
nom = "O@s",
acc = "A@m",
ins = "+A",
dat = "+e",
abl = "o@s",
gen = "[abl]",
loc = "+i",
voc = "Os",
},
d = {
nom = {"A@vO", {"A@vA", note = "vedic"}},
acc = "[nom]",
ins = "+ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "+os",
loc = "[gen]",
voc = {"AvO", {"AvA", note = "vedic"}},
},
p = {
nom = "A@vas",
acc = {"A@s", {"A@vas", note = "rare"}},
ins = "+Bis",
dat = "+Byas",
abl = "[dat]",
gen = {"+Am", {"+nAm", note = "vedic"}},
loc = "+su",
voc = "Avas",
},
},
},
au = {
all = {
s = {
nom = "+s",
acc = "+am",
ins = "+A@",
dat = "+e@",
abl = "+a@s",
gen = "[abl]",
loc = "+i@",
voc = "+s",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
ins = "+ByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "+o@s",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "[nom]",
ins = "+Bi@s",
dat = "+Bya@s",
abl = "[dat]",
gen = "+A@m",
loc = "+su@",
voc = "+as",
},
},
},
ai = {
all = {
s = {
nom = "A@s",
acc = "+am",
ins = "+A@",
dat = "+e@",
abl = "+a@s",
gen = "[abl]",
loc = "+i@",
voc = "As",
},
d = {
nom = {"+O", {"+A", note = "vedic"}},
acc = "[nom]",
ins = "AByA@m",
dat = "[ins]",
abl = "[ins]",
gen = "+o@s",
loc = "[gen]",
voc = {"+O", {"+A", note = "vedic"}},
},
p = {
nom = "+as",
acc = "+a@s",
ins = "ABi@s",
dat = "ABya@s",
abl = "[dat]",
gen = "+A@m",
loc = "Asu@",
voc = "+as",
},
},
},
vams = {
masculine_direct = {
s = {
nom = "vA@n",
acc = "vA@Msam",
voc = {"van", {"vas", note = "rigvedic"}},
},
d = {
nom = "vA@MsO",
acc = "[nom]",
voc = "vAMsO",
},
p = {
nom = "vA@Msas",
acc = {{"u@zas", stem = "weak"}},
voc = "vAMsas",
},
},
neuter_direct = {
s = {
nom = "va@t",
acc = "[nom]",
voc = "vat",
},
d = {
nom = {{"u@zI", stem = "weak"}},
acc = "[nom]",
voc = {{"uzI", stem = "weak"}},
},
p = {
nom = "vA@MsI",
acc = "[nom]",
voc = "vAMsI",
},
},
oblique = {
s = {
ins = {{"u@zA", stem = "weak"}},
dat = {{"u@ze", stem = "weak"}},
abl = {{"u@zas", stem = "weak"}},
gen = "[abl]",
loc = {{"u@zi", stem = "weak"}},
},
d = {
ins = "va@dByAm",
dat = "[ins]",
abl = "[ins]",
gen = {{"u@zos", stem = "weak"}},
loc = "[gen]",
},
p = {
ins = "va@dBis",
dat = "va@dByas",
abl = "[dat]",
gen = {{"u@zAm", stem = "weak"}},
loc = "va@tsu",
},
},
},
}
-- The personal pronouns, as whole forms on an empty stem (see `Analysis:personal` in [[Module:sa-decl]]). The Vedic
-- forms are those of Whitney §492.
data.endings.personal = {
first = {
s = {
nom = "aha/m",
acc = "mA/m",
ins = "ma/yA",
dat = {"ma/hyam", {"me/", note = "vedic"}},
abl = {"ma/t", "matta/H"},
gen = "ma/ma",
loc = {"ma/yi", {"me/", note = "vedic"}},
encacc = "mA",
encdat = "me",
},
d = {
nom = {"AvA/m", {"Ava/m", note = "vedic"}},
acc = "AvA/m",
ins = "AvA/ByAm",
dat = "AvA/ByAm",
abl = {"AvA/ByAm", {"Ava/t", note = "vedic"}},
gen = "Ava/yoH",
loc = "Ava/yoH",
encacc = "nO",
encdat = "nO",
},
p = {
nom = "vaya/m",
acc = "asmA/n",
ins = "asmA/BiH",
dat = {"asma/Byam", {"asma/Bya", note = "vedic"}, {"asme/", note = "vedic"}},
abl = {"asma/t", "asmattaH"},
gen = {"asmA/kam", {"asmA/ka", note = "vedic"}, {"asme/", note = "vedic"}},
loc = {"asmA/su", {"asme/", note = "vedic"}, {"asmatsu", note = "rare"}},
encacc = "naH",
encdat = "naH",
},
},
second = {
s = {
nom = "tva/m",
acc = "tvA/m",
ins = {"tva/yA", {"tvA/", note = "vedic"}},
dat = {"tu/Byam", {"tu/Bya", note = "vedic"}, {"tve/", note = "vedic"}},
abl = {"tva/t", "tvattaH"},
gen = "ta/va",
loc = {"tva/yi", {"tve/", note = "vedic"}},
encacc = "tvA",
encdat = "te",
},
d = {
nom = {"yuvA/m", {"yuva/m", note = "vedic"}},
acc = "yuvA/m",
ins = {"yuvA/ByAm", {"yuva/ByAm", note = "vedic"}},
dat = {"yuvA/ByAm", {"yuva/ByAm", note = "vedic"}},
abl = {"yuvA/ByAm", {"yuva/t", note = "vedic"}},
gen = {"yuva/yoH", {"yuvo/H", note = "vedic"}},
loc = {"yuva/yoH", {"yuvo/H", note = "vedic"}},
encacc = "vAm",
encdat = "vAm",
},
p = {
nom = "yUya/m",
acc = {"yuzmA/n", {"yuzmA/s", note = "vedic"}},
ins = "yuzmA/BiH",
dat = {"yuzma/Byam", {"yuzma/Bya", note = "vedic"}, {"yuzme/", note = "vedic"}},
abl = {"yuzma/t", "yuzma/ttaH"},
gen = {"yuzmA/kam", {"yuzmA/ka", note = "vedic"}, {"yuzme/", note = "vedic"}},
loc = {"yuzmA/su", {"yuzme/", note = "vedic"}},
encacc = "vaH",
encdat = "vaH",
},
},
}
-- The demonstratives of the class `pronoun`, as whole forms on an empty stem (see `Analysis:pronoun` in
-- [[Module:sa-decl]]): ayám, idám, iyám (Whitney §501–502), asaú, adás (§501, §503) and ena (§500), which is accentless
-- and has only the acc., the instr. sing. and the gen.-loc. du.
data.endings.pronoun = {
idam_masculine = {
s = {
nom = "aya/m",
acc = "ima/m",
},
d = {
nom = {"imO/", {"imA/", note = "vedic"}},
acc = "[nom]",
},
p = {
nom = "ime/",
acc = "imA/n",
},
},
idam_neuter = {
s = {
nom = "ida/m",
acc = "[nom]",
},
d = {
nom = "ime/",
acc = "[nom]",
},
p = {
nom = {"imA/ni", {"imA/", note = "vedic"}},
acc = "[nom]",
},
},
idam_masculine_neuter = {
s = {
ins = {"ane/na", {"enA/", note = "vedic"}},
dat = {"asmE/", {"a/smE", note = "rigvedic"}},
abl = "asmA/t",
gen = {"asya/", {"a/sya", note = "rigvedic"}, {"ima/sya", note = "rigvedic"}},
loc = "asmi/n",
},
d = {
ins = "AByA/m",
dat = "[ins]",
abl = "[ins]",
gen = {"ana/yos", {"ayo/s", note = "vedic"}},
loc = "[gen]",
},
p = {
ins = {"eBi/s", {"imEs", note = "later"}},
dat = "eBya/s",
abl = "[dat]",
gen = "ezA/m",
loc = {"ezu/", {"imezu", note = "later"}},
},
},
idam_feminine = {
s = {
nom = "iya/m",
acc = "imA/m",
ins = {"ana/yA", {"ayA/", note = "vedic"}},
dat = "asyE/",
abl = "asyA/s",
gen = "[abl]",
loc = "asyA/m",
},
d = {
nom = "ime/",
acc = "[nom]",
ins = "AByA/m",
dat = "[ins]",
abl = "[ins]",
gen = {"ana/yos", {"ayo/s", note = "vedic"}},
loc = "[gen]",
},
p = {
nom = "imA/s",
acc = "[nom]",
ins = {"ABi/s", {"A/Bis", note = "rigvedic"}},
dat = "ABya/s",
abl = "[dat]",
gen = "AsA/m",
loc = "Asu/",
},
},
adas_masculine = {
s = {
nom = "asO/",
acc = "amu/m",
},
d = {
nom = "amU/",
acc = "[nom]",
},
p = {
nom = "amI/",
acc = "amU/n",
},
},
adas_neuter = {
s = {
nom = "ada/s",
acc = "[nom]",
},
d = {
nom = "amU/",
acc = "[nom]",
},
p = {
nom = {"amU/ni", {"amU/", note = "vedic"}},
acc = "[nom]",
},
},
adas_masculine_neuter = {
s = {
ins = "amu/nA",
dat = "amu/zmE",
abl = "amu/zmAt",
gen = "amu/zya",
loc = "amu/zmin",
},
d = {
ins = "amU/ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "amu/yos",
loc = "[gen]",
},
p = {
ins = "amI/Bis",
dat = "amI/Byas",
abl = "[dat]",
gen = "amI/zAm",
loc = "amI/zu",
},
},
adas_feminine = {
s = {
nom = "asO/",
acc = "amU/m",
ins = "amu/yA",
dat = "amu/zyE",
abl = "amu/zyAs",
gen = "[abl]",
loc = "amu/zyAm",
},
d = {
nom = "amU/",
acc = "[nom]",
ins = "amU/ByAm",
dat = "[ins]",
abl = "[ins]",
gen = "amu/yos",
loc = "[gen]",
},
p = {
nom = "amU/s",
acc = "[nom]",
ins = "amU/Bis",
dat = "amU/Byas",
abl = "[dat]",
gen = "amU/zAm",
loc = "amU/zu",
},
},
ena_masculine = {
s = {
acc = "enam",
},
d = {
acc = "enO",
},
p = {
acc = "enAn",
},
},
ena_neuter = {
s = {
acc = "enat",
},
d = {
acc = "ene",
},
p = {
acc = "enAni",
},
},
ena_masculine_neuter = {
s = {
ins = "enena",
},
},
-- The cells that ena lacks, and its gen.-loc. du. with the RV. enos.
ena_common = {
s = {
gen = {},
loc = {},
},
d = {
ins = {},
gen = {"enayos", {"enos", note = "rigvedic"}},
loc = "[gen]",
},
p = {
ins = {},
gen = {},
loc = {},
},
},
ena_feminine = {
s = {
acc = "enAm",
ins = "enayA",
},
d = {
acc = "ene",
},
p = {
acc = "enAs",
},
},
}
return data
ey1v09g567ruwryn5eqcnzmopchrmgu
Mô đun:sa-utilities
828
293669
2572842
2571620
2026-10-23T01:13:59Z
Hiyuune
50834
2572842
Scribunto
text/plain
--[==[
This module has the Sanskrit phonology shared by [[Module:sa-verb]] and [[Module:sa-decl/data]]: the character
classes, the tables of vowel grades and consonant changes, the internal sandhi engine `join`, which puts a stem and an
ending together, and the external sandhi engine `join_words`, which puts two words together (or a preverb and a verb
form).
Every string is in SLP1, which writes each sound with one ASCII character, so the plain `string` library is enough.
An accent mark follows its vowel: `/` is the udātta and `\` the svarita.
Each engine runs a fixed pipeline of named rules. A rule gives the paragraph of Whitney's ''Sanskrit Grammar'' it
implements, where one is known. `join_traced` and `join_words_traced` also return the ids of the rules that fired, for
the tests.
Rewritten by [[User:Fenakhay]] in October 2026; the internal sandhi rules are carried over from the earlier
`internal_sandhi`.
]==]
local export = {}
export.consonant_list = "kKgGNcCjJYwWqQRtTdDnpPbBmyrlLvSzsh"
export.consonant = "[" .. export.consonant_list .. "]"
export.accent = "[/\\]"
export.vowel_list = "aAiIuUfFxXeEoO"
export.vowel = "[" .. export.vowel_list .. "]"
export.vowel_with_accent = export.vowel .. export.accent .. "?"
export.stop_list = "kKgGcCjJwWqQtTdDpPbB"
export.stop = "[" .. export.stop_list .. "]"
--[==[
Raise a vowel one grade: guṇa, or vṛddhi for `a` and the guṇa vowels.
FIXME: Should this include the guṇa of sonorants into CV configurations (e.g. i/ī -> ya -> yā)?
]==]
export.up_one_grade = {
['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\',
['i'] = 'e', ['I'] = 'e', ['i/'] = 'e/', ['I/'] = 'e/', ['i\\'] = 'e\\', ['I\\'] = 'e\\',
['u'] = 'o', ['U'] = 'o', ['u/'] = 'o/', ['U/'] = 'o/', ['u\\'] = 'o\\', ['U\\'] = 'o\\',
['e'] = 'E', ['E'] = 'E', ['e/'] = 'E/', ['E/'] = 'E/', ['e\\'] = 'E\\', ['E\\'] = 'E\\',
['o'] = 'O', ['O'] = 'O', ['o/'] = 'O/', ['O/'] = 'O/', ['o\\'] = 'O\\', ['O\\'] = 'O\\',
['f'] = 'ar', ['F'] = 'ar', ['f/'] = 'a/r', ['F/'] = 'a/r', ['f\\'] = 'a\\r', ['F\\'] = 'a\\r',
['x'] = 'al', ['x/'] = 'a/l', ['x\\'] = 'a\\l',
}
--[==[Lengthen a vowel.]==]
export.lengthen = {
['a'] = 'A', ['A'] = 'A', ['a/'] = 'A/', ['A/'] = 'A/', ['a\\'] = 'A\\', ['A\\'] = 'A\\',
['i'] = 'I', ['I'] = 'I', ['i/'] = 'I/', ['I/'] = 'I/', ['i\\'] = 'I\\', ['I\\'] = 'I\\',
['u'] = 'U', ['U'] = 'U', ['u/'] = 'U/', ['U/'] = 'U/', ['u\\'] = 'U\\', ['U\\'] = 'U\\',
['f'] = 'F', ['F'] = 'F', ['f/'] = 'F/', ['F/'] = 'F/', ['f\\'] = 'F\\', ['F\\'] = 'F\\',
}
--[==[Shorten a vowel (the reverse of `lengthen`).]==]
export.shorten = {
['a'] = 'a', ['A'] = 'a', ['a/'] = 'a/', ['A/'] = 'a/', ['a\\'] = 'a\\', ['A\\'] = 'a\\',
['i'] = 'i', ['I'] = 'i', ['i/'] = 'i/', ['I/'] = 'i/', ['i\\'] = 'i\\', ['I\\'] = 'i\\',
['u'] = 'u', ['U'] = 'u', ['u/'] = 'u/', ['U/'] = 'u/', ['u\\'] = 'u\\', ['U\\'] = 'u\\',
['f'] = 'f', ['F'] = 'f', ['f/'] = 'f/', ['F/'] = 'f/', ['f\\'] = 'f\\', ['F\\'] = 'f\\',
}
--[==[Split a diphthong into a/ā and a glide.]==]
export.split_diphthong = {
['e'] = 'ay', ['e/'] = 'a/y', ['e\\'] = 'a\\y',
['E'] = 'Ay', ['E/'] = 'A/y', ['E\\'] = 'A\\y',
['o'] = 'av', ['o/'] = 'a/v', ['o\\'] = 'a\\v',
['O'] = 'Av', ['O/'] = 'A/v', ['O\\'] = 'A\\v',
}
--[==[The consonant of each syllabic sonorant: i/ī > y, u/ū > v, ṛ/ṝ > r, ḷ/ḹ > l.]==]
export.vowel_to_cons = {
['i'] = 'y', ['I'] = 'y',
['u'] = 'v', ['U'] = 'v',
['f'] = 'r', ['F'] = 'r',
['x'] = 'l', ['X'] = 'l',
}
--[==[
The absolute final form of each stop except `j`, whose final depends on the word, and of `L`, `Y` and `z`. A stop that
is already final maps to itself (`k` = `k`), so that the table can be given to `string.gsub` for any of these.
]==]
export.to_final = {
['k'] = 'k', ['K'] = 'k', ['g'] = 'k', ['G'] = 'k',
['c'] = 'k', ['C'] = 'w', ['J'] = 'w', -- The value for 'J' is theoretical.
['w'] = 'w', ['W'] = 'w', ['q'] = 'w', ['Q'] = 'w', ['L'] = 'w',
['t'] = 't', ['T'] = 't', ['d'] = 't', ['D'] = 't',
['p'] = 'p', ['P'] = 'p', ['b'] = 'p', ['B'] = 'p',
['Y'] = 'N', ['z'] = 'w',
}
--[==[Remove the aspiration of a stop.]==]
export.deaspirate = {
['K'] = 'k', ['G'] = 'g',
['C'] = 'c', ['J'] = 'j',
['W'] = 'w', ['Q'] = 'q',
['T'] = 't', ['D'] = 'd',
['P'] = 'p', ['B'] = 'b',
}
--[==[Aspirate a voiced stop.]==]
export.aspirate = {
['g'] = 'G', ['j'] = 'J', ['q'] = 'Q', ['d'] = 'D', ['b'] = 'B'
}
--[==[Voice a voiceless unaspirated stop.]==]
export.to_voiced = {
['k'] = 'g', ['c'] = 'j', ['w'] = 'q', ['t'] = 'd', ['p'] = 'b'
}
--[==[The nasal (or anusvāra) that a nasal becomes before each consonant.]==]
export.homorganic_nasal = {
['k'] = 'N', ['K'] = 'N', ['g'] = 'N', ['G'] = 'N',
['c'] = 'Y', ['C'] = 'Y', ['j'] = 'Y', ['J'] = 'Y',
['w'] = 'R', ['W'] = 'R', ['q'] = 'R', ['Q'] = 'R',
['t'] = 'n', ['T'] = 'n', ['d'] = 'n', ['D'] = 'n',
['p'] = 'm', ['P'] = 'm', ['b'] = 'm', ['B'] = 'm',
['r'] = 'M', ['l'] = 'M', -- Or 'l~' before l.
['S'] = 'M', ['z'] = 'M', ['s'] = 'M', ['h'] = 'M'
}
--[==[
Return true if `text` has one syllable. No sandhi is applied first, so a potential phonemic form like /dā́rv/
(realised [dā́ru]) counts as one syllable.
]==]
function export.is_monosyllabic(text)
return string.match(text, "^" .. export.consonant .. "*" .. export.vowel_with_accent .. "[HM~]?" .. export.consonant .. "*$") ~= nil
end
------------------------------------------------------------------------------------------------------------------------
-- Internal sandhi --
------------------------------------------------------------------------------------------------------------------------
-- The diphthong that each a/ā + glide pair joins back into (the reverse of `split_diphthong`).
local join_diphthong = {
['ay'] = 'e', ['a/y'] = 'e/', ['a\\y'] = 'e\\',
['Ay'] = 'E', ['A/y'] = 'E/', ['A\\y'] = 'E\\',
['av'] = 'o', ['a/v'] = 'o/', ['a\\v'] = 'o\\',
['Av'] = 'O', ['A/v'] = 'O/', ['A\\v'] = 'O\\',
}
local cons_to_vowel = { ['y'] = 'i', ['r'] = 'f', ['v'] = 'u', ['l'] = 'x' }
local to_velar = { ['c'] = 'k', ['j'] = 'g', ['h'] = 'G' }
-- i/ī and u/ū before a vowel: the short vowel followed by its homorganic glide (iy, uv).
local insert_glide = {
['i'] = 'iy', ['I'] = 'iy', ['i/'] = 'i/y', ['I/'] = 'i/y', ['i\\'] = 'i\\y', ['I\\'] = 'i\\y',
['u'] = 'uv', ['U'] = 'uv', ['u/'] = 'u/v', ['U/'] = 'u/v', ['u\\'] = 'u\\v', ['U\\'] = 'u\\v',
}
local dental_to_retroflex = { ['t'] = 'w', ['T'] = 'W', ['d'] = 'q', ['D'] = 'Q', ['n'] = 'R', ['s'] = 'z' }
local first_of_word_final_cluster = "(" .. export.consonant .. "+)$"
-- A run of sounds that does not block the spread of nasal retroflexion (nati): anything but a palatal, a retroflex
-- stop or ṇ, a dental, ś, s, l or ḷ.
local nati_blockers = "[^cCjJYwWqQRtTdDnSslL]*"
--[==[
The options that `join` takes, each a boolean unless said otherwise. Any other key is an error.
* `accented`: the word carries accent marks, and the accents of stem and ending are combined (see `combineAccent`).
* `strip_stem_accent`: remove every accent mark from the stem.
* `recessive_accent`: move the accent to the first syllable (the vocative).
* `initial_svarita`: with `recessive_accent`, put a svarita on the first syllable instead of the udātta when the
stem begins with consonant + y/v.
* `no_final_sandhi`: leave the end of the word as it is (for a form used inside a word, such as a participle stem).
A bare stem (empty ending) is put in final position all the same.
* `iy_uv_before_vowel`: i/ī/u/ū become iy/uv before a vowel instead of y/v (monosyllabic root nouns, and sometimes
to avoid three consonants in a row).
* `j_retroflex`: j becomes ṣ before t/th, ḍ before d/dh and ṭ word-finally, instead of k (or g).
* `h_velar`: h + t/th/d/dh gives g + dh (duh + -tá = dugdhá) instead of ḍh (lih + -tá = līḍhá); word-final
h becomes k.
* `vedic_l`: the ḍh from h + t/th/d/dh is ḷh before a vowel (the Vedic form).
* `final_obstruent` (a string): the word-final consonant of a stem in -j/-ś/-h (which is unpredictably a velar or
a retroflex), or a replacement for the usual final in a few exceptional words. It is used for the bare stem
(empty ending) and before the pada endings -bhyām/-bhis/-bhyas/-su, and `w` (ṭ) also makes a j retroflex before
t/th/d/dh, as `j_retroflex` does.
* `diaspirate`: the root has two aspirates, and the first one shows when the second loses its aspiration
(budh > bhut).
* `keep_stem_s`: a stem-final s stays s after i/u/ṛ/k etc. (no ruki): the roots pis, niṃs, hiṃs; tresur from tras.
* `no_bartholomae`: do not apply Bartholomae's law (for dadh-).
* `palatal_to_velar`: c/j (and h with `h_velar`) become velar before a consonant ending, as before the derivative
suffix -vāṃs.
* `root_noun`: a monosyllabic root noun, whose i/u lengthens before r/s plus a consonant (gir, pur + -bhis).
* `root_han`: the root han, whose h becomes gh before n; that n is not made ṇ.
* `retroflex_stem_n`: a stem-final n can become ṇ by nasal retroflexion.
* `keep_s_before_voiceless`: before a pada ending, a stem-final s stays s instead of becoming visarga before
k/p/ṣ/s/ś (in practice, before -su).
]==]
local OPTIONS = {
accented = true, strip_stem_accent = true, recessive_accent = true, initial_svarita = true, no_final_sandhi = true,
iy_uv_before_vowel = true, j_retroflex = true, h_velar = true, vedic_l = true, final_obstruent = true,
diaspirate = true, keep_stem_s = true, no_bartholomae = true, palatal_to_velar = true, root_noun = true,
root_han = true, retroflex_stem_n = true, keep_s_before_voiceless = true,
}
--[==[
The working state of one `join`: the stem and ending as the rules change them, the `options`, and the `trace` of the
rule ids that fired.
]==]
local Junction = {}
Junction.__index = Junction
function Junction.new(stem, ending, options)
for key in pairs(options) do
if not OPTIONS[key] then
local valid = {}
for name in pairs(OPTIONS) do
table.insert(valid, name)
end
table.sort(valid)
error(("Unrecognized sandhi option '%s'; the options are %s."):format(key, table.concat(valid, ", ")))
end
end
return setmetatable({stem = stem, ending = ending, options = options, trace = {}}, Junction)
end
function Junction:stemEndsWith(pattern)
return string.match(self.stem, pattern .. "$") ~= nil
end
function Junction:endingStartsWith(pattern)
return string.match(self.ending, "^" .. pattern) ~= nil
end
function Junction:replaceStem(pattern, replacement)
self.stem = (string.gsub(self.stem, pattern, replacement))
end
function Junction:replaceEnding(pattern, replacement)
self.ending = (string.gsub(self.ending, pattern, replacement))
end
--[==[Run the first rule of `rules` that applies, if any, and return true if one did.]==]
function Junction:applyFirst(rules)
for _, rule in ipairs(rules) do
if rule.applies(self) then
table.insert(self.trace, rule.id)
rule.apply(self)
return true
end
end
return false
end
--[==[Run every rule of `rules` that applies, in order; each rule is tested after the ones before it have run.]==]
function Junction:applyAll(rules)
for _, rule in ipairs(rules) do
if rule.applies(self) then
table.insert(self.trace, rule.id)
rule.apply(self)
end
end
end
-- Throw the aspiration of a diaspirate root back onto the g, d or b that begins the last syllable of `stem`
-- (budh > bhud-, and dah > dhah- for a root in h).
local function aspirate_diaspirate(stem)
return (string.gsub(stem, "(.*)([gdb])([^gdb]+[gdb]?)$", function(before, consonant, after)
return before .. export.aspirate[consonant] .. after
end))
end
-- Before an ending that starts with a consonant (only the first rule that applies). CV, C + semivowel and C + nasal
-- are left alone.
local before_consonant_rules = {
{
id = "root-noun-vowel-lengthening", whitney = "§392",
applies = function(junction)
return junction.options.root_noun and junction:stemEndsWith("[iu][/\\]?[rs]") and not junction:stemEndsWith("catu/?r")
end,
apply = function(junction)
junction:replaceStem("([iu][/\\]?)([rs])$", function(vowel, consonant)
return export.lengthen[vowel] .. consonant
end)
end,
},
{
-- śvan > śunā; cakruḥ > cakṛma. Clusters like trv do occur (śatrvos), so there the ending is given
-- as -os, not -vos.
id = "vocalize-final-semivowel",
applies = function(junction) return junction:stemEndsWith(export.consonant .. "[yrv]") end,
apply = function(junction) junction:replaceStem(".$", cons_to_vowel) end,
},
{
-- A word cannot begin with y + consonant (the root i: eti, yanti).
id = "initial-y-to-i",
applies = function(junction) return junction.stem == "y" end,
apply = function(junction) junction.stem = "i" end,
},
{
-- yuvan > yūnā; iyaja > īje; babhūva > babhūtha. The vowel is not lengthened after two consonants.
id = "iy-uv-to-long-vowel", whitney = "§800d, §800j",
applies = function(junction)
return (junction:stemEndsWith("[uU][/\\]?v") or junction:stemEndsWith("[iI][/\\]?y")) and junction:endingStartsWith("[^yrl]")
end,
apply = function(junction)
if not junction:stemEndsWith(export.consonant .. export.consonant .. "[iu][/\\]?[yv]") then
junction:replaceStem("([iIuU][/\\]?)[yv]$", function(vowel) return export.lengthen[vowel] end)
end
end,
},
{
id = "join-diphthong",
applies = function(junction) return junction:stemEndsWith("a[/\\]?[vy]") and junction:endingStartsWith("[^yrl]") end,
apply = function(junction)
junction:replaceStem("(a[/\\]?[vy])$", function(diphthong) return join_diphthong[diphthong] end)
end,
},
{
-- The historical vocalization of the PIE syllabic nasals. Not before -y (the optative), since gmy occurs.
id = "vocalize-nasal",
applies = function(junction) return junction:stemEndsWith(export.consonant .. "[nmY]") end,
apply = function(junction)
if junction:endingStartsWith("[mv]") then
junction:replaceStem(".$", "an")
elseif junction:endingStartsWith("[tTDBs]") then
junction:replaceStem(".$", "a")
end
end,
},
}
-- Drop the verbal endings -s and -t after a consonant, and the nominal -s after a consonant stem, which is only there
-- to lengthen the vowel of -ir/-ur stems.
local drop_ending_rule = {
id = "drop-s-t-after-consonant", whitney = "§555",
applies = function(junction)
return junction:stemEndsWith("[" .. export.consonant_list .. "M]") and string.match(junction.ending, "^[st]$") ~= nil
end,
apply = function(junction) junction.ending = "" end,
}
-- When no ending is left (only the first rule that applies).
local zero_ending_rules = {
{
id = "final-m-to-n",
applies = function(junction) return junction:stemEndsWith("[mM]") end,
apply = function(junction) junction:replaceStem(".$", "n") end,
},
{
id = "diaspirate-final",
applies = function(junction) return junction.options.diaspirate end,
apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end,
},
}
-- A vowel-final stem before a vowel-initial ending (only the first rule that applies). The stem's last vowel has been
-- taken off into `junction.last` (with its accent in `junction.last_accent`), and the ending's first vowel into
-- `junction.first`.
local vowel_rules = {
{
id = "glide-before-vowel",
applies = function(junction)
return junction.options.iy_uv_before_vowel and string.match(junction.last, "[iIuU]") ~= nil
end,
apply = function(junction)
junction.stem = junction.stem .. insert_glide[junction.last .. junction.last_accent]
junction.ending = junction.first .. junction.ending
end,
},
{
id = "split-diphthong",
applies = function(junction) return export.split_diphthong[junction.last] ~= nil end,
apply = function(junction)
junction.stem = junction.stem .. export.split_diphthong[junction.last .. junction.last_accent]
junction.ending = junction.first .. junction.ending
end,
},
{
id = "homorganic-vowels",
applies = function(junction) return string.lower(junction.last) == string.lower(junction.first) end,
apply = function(junction)
junction.ending = string.upper(junction.first) .. junction.last_accent .. junction.ending
end,
},
{
id = "a-plus-vowel",
applies = function(junction) return string.lower(junction.last) == "a" end,
apply = function(junction)
junction.ending = export.up_one_grade[junction.first .. junction.last_accent] .. junction.ending
end,
},
{
-- A stem-final udātta becomes a svarita on the ending's first vowel. A ḷ(h) before the new semivowel becomes
-- ḍ(h), and a stem that is only consonants + yv gets iv instead (dyu- > divā).
id = "vowel-to-semivowel",
applies = function(junction) return export.vowel_to_cons[junction.last] ~= nil end,
apply = function(junction)
junction:replaceStem("L$", "q")
junction:replaceStem("Lh$", "Q")
junction.stem = junction.stem .. export.vowel_to_cons[junction.last]
junction.ending = junction.first .. (junction.last_accent == "/" and "\\" or "") .. junction.ending
if string.match(junction.stem, "^" .. export.consonant .. "*yv$") then
junction:replaceStem("..$", "iv")
end
end,
},
}
-- Before the pada endings -bhyām, -bhis, -bhyas and -su, the stem ends as a word would: first the cluster, then the
-- final (only the first rule of each list that applies).
local pada_cluster_rules = {
{
id = "pada-kz-to-w",
applies = function(junction) return junction:stemEndsWith("kz") end,
apply = function(junction) junction:replaceStem("..$", "w") end,
},
{
id = "pada-r-plus-stop-kept", whitney = "§150b",
applies = function(junction)
return junction:stemEndsWith(export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]")
end,
apply = function() end,
},
{
id = "pada-cluster-simplification",
applies = function(junction) return junction:stemEndsWith(export.consonant .. export.consonant) end,
apply = function(junction)
junction:replaceStem(first_of_word_final_cluster, function(cluster) return string.sub(cluster, 1, 1) end)
end,
},
}
local pada_final_rules = {
{
id = "pada-given-final",
applies = function(junction) return junction:stemEndsWith("[jSh]") or junction.options.final_obstruent end,
apply = function(junction)
if not junction.options.final_obstruent then
error(("The stem '%s' needs the option final_obstruent before the ending '%s'."):format(junction.stem,
junction.ending))
end
junction:replaceStem(".$", junction.options.final_obstruent)
end,
},
{
id = "pada-final-stop",
applies = function(junction) return junction:stemEndsWith("[KgGcCJWqQTdDPbBz]") end,
apply = function(junction) junction:replaceStem(".$", export.to_final) end,
},
{
id = "pada-m-to-n",
applies = function(junction) return junction:stemEndsWith("m") end,
apply = function(junction) junction:replaceStem(".$", "n") end,
},
{
-- The loss of z with compensatory lengthening before a voiced consonant.
-- FIXME: What about the médha- < *mázdha- type?
id = "pada-as-to-o",
applies = function(junction)
return junction:stemEndsWith("[aA][/\\]?s") and junction:endingStartsWith("[rgGdDbByvjJqQlLhnm]")
end,
apply = function(junction)
junction:replaceStem("([aA])([/\\]?)s$", function(vowel, accent)
return (vowel == "a" and "o" or "A") .. accent
end)
end,
},
{
id = "pada-final-s",
applies = function(junction) return junction:stemEndsWith("s") end,
apply = function(junction)
if junction:endingStartsWith("[kKpPzsS]") then
junction:replaceStem(".$", junction.options.keep_s_before_voiceless and "s" or "H")
elseif junction:endingStartsWith("[gGjJqQdDbByvlLhnm]") then
junction:replaceStem(".$", "r")
end
end,
},
}
-- Before any other consonant ending, `run_cluster` applies this rule, then the first of `cluster_preparation_rules`
-- that applies, then the first of `cluster_rules`, and last `devoicing_rule`. This rule drops the s of the s-aorist
-- before t/th after a consonant other than r, n or m, and before dh after any consonant.
local s_aorist_rule = {
id = "s-aorist-s-loss", whitney = "§881",
applies = function(junction)
return (junction:stemEndsWith("[^rnm]") and junction:endingStartsWith("s[tT]")) or junction:endingStartsWith("sD")
end,
apply = function(junction) junction:replaceEnding("^s", "") end,
}
-- The second step (only the first rule that applies).
local cluster_preparation_rules = {
{
-- Diaspirate verbs before -dhve/-dhvam: see Janda & Joseph (2002), "Sanskrit as she has been misanalyzed",
-- 28-29.
id = "diaspirate-before-dhv",
applies = function(junction) return junction.options.diaspirate and junction:endingStartsWith("Dv") end,
apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end,
},
{
-- jj and śc lose their last consonant before t/th/d/dh/s, and `cluster_rules` treat what is left.
id = "simplify-jj-sc",
applies = function(junction)
return (junction:stemEndsWith("jj") or junction:stemEndsWith("Sc")) and junction:endingStartsWith("[tTdDs]")
end,
apply = function(junction) junction:replaceStem(".$", "") end,
},
}
-- The third step (only the first rule that applies).
local cluster_rules = {
{
id = "kz-before-consonant",
applies = function(junction) return junction:stemEndsWith("kz") end,
apply = function(junction)
if junction:endingStartsWith("s") then
junction:replaceStem("..$", "k")
elseif junction:endingStartsWith("[tT]") then
junction:replaceStem("Nkz$", "Mz")
junction:replaceStem("kz$", "z")
elseif junction:endingStartsWith("[dD]") then
junction:replaceStem("Nkz$", "Rq")
junction:replaceStem("kz$", "q")
end
end,
},
{
id = "c-jh-to-k",
applies = function(junction) return junction:stemEndsWith("[cJ]") and junction:endingStartsWith("[tTdDs]") end,
apply = function(junction)
junction:replaceStem("Y.$", "Nk")
junction:replaceStem("[cJ]$", "k")
end,
},
{
id = "palatal-before-s",
applies = function(junction) return junction:stemEndsWith("[jCSzh]") and junction:endingStartsWith("s") end,
apply = function(junction)
junction:replaceStem("[YM].$", "Nk")
junction:replaceStem("[jCSzh]$", "k")
end,
},
{
id = "palatal-before-dental",
applies = function(junction) return junction:stemEndsWith("[jCSz]") and junction:endingStartsWith("[tTdD]") end,
apply = function(junction)
if junction.options.j_retroflex or junction.options.final_obstruent == "w" or junction:stemEndsWith("[CSz]") then
if junction:endingStartsWith("[tT]") then
junction:replaceStem("Y[jC]$", "Mz")
junction:replaceStem("[jCS]$", "z")
else
junction:replaceStem("[YM].$", "Rq")
junction:replaceStem("[jCSz]$", "q")
end
else
junction:replaceStem("Yj$", "Nk")
junction:replaceStem("j$", "k")
end
end,
},
{
-- vah (sometimes also sah) > voḍh-; {a, i, u}h + {t, th, d, dh} > {ā, ī, ū}ḍh, by Bartholomae's law with
-- retroflexion and compensatory lengthening.
id = "h-before-dental", whitney = "§224b",
applies = function(junction) return junction:stemEndsWith("h") and junction:endingStartsWith("[tTdD]") end,
apply = function(junction)
if junction.options.h_velar then
junction:replaceStem("h$", "g")
junction:replaceEnding("^.", "D")
return
end
if junction:stemEndsWith("va/?h") then
junction:replaceStem("a(/?)h$", "o%1")
else
junction:replaceStem("([aiu]?)([/\\]?)h$", function(vowel, accent)
return (export.lengthen[vowel] or "") .. accent
end)
junction:replaceStem("M$", "R")
end
if junction.options.vedic_l and junction:endingStartsWith("." .. export.vowel) then
junction:replaceEnding("^.", "Lh")
else
junction:replaceEnding("^.", "Q")
end
end,
},
{
id = "palatal-to-velar", whitney = "§216j",
applies = function(junction)
return junction.options.palatal_to_velar and ((junction:stemEndsWith("[cj]") and not junction.options.j_retroflex)
or (junction:stemEndsWith("h") and junction.options.h_velar))
end,
apply = function(junction)
junction:replaceStem(".$", to_velar)
junction:replaceStem("[YM](.)$", "N%1")
end,
},
{
id = "as-before-dhi", whitney = "§166",
applies = function(junction) return junction:stemEndsWith("As") and string.match(junction.ending, "^Di/?$") ~= nil end,
apply = function(junction) junction:replaceStem("s$", "") end,
},
{
-- s + dh/bh gives d + dh/bh, following Whitney's reading of dhv from s + dhv as ddhv. Nouns sometimes do the
-- same before -bhis etc., but those are pada endings, so there the d is given with `final_obstruent`.
id = "s-before-dh-bh", whitney = "§612, §166, §232",
applies = function(junction) return junction:stemEndsWith(".s") and junction:endingStartsWith("[DB]") end,
apply = function(junction)
junction:replaceStem("Ms$", "nd")
junction:replaceStem("s$", "d")
end,
},
{
-- The (largely theoretical) middle of asti.
id = "lone-s-dropped",
applies = function(junction) return junction.stem == "s" and junction:endingStartsWith("[sD]") end,
apply = function(junction) junction.stem = "" end,
},
{
-- m becomes ṃ before h, ś, ṣ and s, the homorganic nasal before a stop, and n before m or v.
id = "m-before-consonant", whitney = "§212",
applies = function(junction) return junction:stemEndsWith("m") end,
apply = function(junction)
if junction:endingStartsWith("[kKgGcCjJwWqQtTdDSzsh]") then
junction:replaceStem("m$", export.homorganic_nasal[string.sub(junction.ending, 1, 1)])
elseif junction:endingStartsWith("[mv]") then
junction:replaceStem("m$", "n")
end
end,
},
{
id = "n-before-sibilant",
applies = function(junction) return junction:stemEndsWith("n") end,
apply = function(junction)
if junction:endingStartsWith("[Szs]") then
junction:replaceStem(".$", "M")
end
end,
},
{
id = "aspirate-before-consonant", whitney = "§153",
applies = function(junction)
return junction:stemEndsWith("[KGWQTDPB]") and junction:endingStartsWith("[^NYRnmyrlv]")
end,
apply = function(junction)
-- Bartholomae's law: gh/ḍh/dh/bh + t/th gives g/ḍ/d/b + dh.
if junction:stemEndsWith("[GQDB]") and junction:endingStartsWith("[tT]") and not junction.options.no_bartholomae then
junction:replaceEnding("^.", "D")
end
junction:replaceStem(".$", export.deaspirate)
end,
},
}
-- The last step: a voiced stop becomes voiceless before a voiceless consonant.
local devoicing_rule = {
id = "devoice-before-voiceless",
applies = function(junction)
return junction:stemEndsWith("[gqbd]") and junction:endingStartsWith("[kKcCwWtTpPSzs]")
end,
apply = function(junction) junction:replaceStem(".$", export.to_final) end,
}
-- Voicing before a voiced stop, for every consonant ending, pada or not (only the first rule that applies).
-- `diaspirate_rule` runs after these.
local voicing_rules = {
{
id = "voice-before-voiced-stop",
applies = function(junction) return junction:stemEndsWith("[kwp]") and junction:endingStartsWith("[gGjJqQdDbB]") end,
apply = function(junction) junction:replaceStem(".$", export.to_voiced) end,
},
{
id = "t-before-voiced-stop",
applies = function(junction) return junction:stemEndsWith("t") and junction:endingStartsWith("[gGdDbB]") end,
apply = function(junction) junction:replaceStem(".$", "d") end,
},
}
-- The aspiration throwback of a diaspirate root, which nominal endings in bh- also trigger.
local diaspirate_rule = {
id = "diaspirate-throwback",
applies = function(junction)
return junction.options.diaspirate and junction:stemEndsWith("[^GDBh]") and junction:endingStartsWith("[^QD]")
end,
apply = function(junction) junction.stem = aspirate_diaspirate(junction.stem) end,
}
-- Join a consonant-final stem and a consonant-initial ending. A stem-final ḷ(h) is first made ḍ(h).
local function run_cluster(junction)
junction:replaceStem("L$", "q")
junction:replaceStem("Lh$", "Q")
if junction:endingStartsWith("B[iy]") or string.match(junction.ending, "^su" .. export.accent .. "?$") then
-- The pada endings -bhyām, -bhis, -bhyas and -su (Whitney §111a).
junction:applyFirst(pada_cluster_rules)
junction:applyFirst(pada_final_rules)
else
junction:applyAll({s_aorist_rule})
junction:applyFirst(cluster_preparation_rules)
junction:applyFirst(cluster_rules)
junction:applyAll({devoicing_rule})
end
junction:applyFirst(voicing_rules)
junction:applyAll({diaspirate_rule})
end
-- The junction before an ending that starts with a consonant (only the first rule that applies). `Junction:run`
-- handles a vowel-initial ending before it gets here.
local junction_rules = {
{
-- The second plural middle of the s-aorist.
id = "s-dh-after-vowel",
applies = function(junction)
return junction:stemEndsWith(export.vowel_with_accent .. "M?") and junction:endingStartsWith("sD")
end,
apply = function(junction)
if junction:stemEndsWith("[iIeEfFxuUoO][/\\]?") then
junction:replaceEnding("^..", "Q")
else
junction:replaceEnding("^..", "D")
junction:replaceStem("M$", "n")
end
end,
},
{
id = "n-after-palatal",
applies = function(junction) return junction:stemEndsWith("[cj]") and junction:endingStartsWith("n") end,
apply = function(junction) junction:replaceEnding("^.", "Y") end,
},
{
id = "han-before-n",
applies = function(junction) return junction.options.root_han and junction:endingStartsWith("n") end,
apply = function(junction) junction:replaceStem("h$", "G") end,
},
{
id = "consonant-cluster",
applies = function(junction)
return junction:stemEndsWith(export.consonant) and junction:endingStartsWith(export.consonant)
end,
apply = run_cluster,
},
}
-- RUKI, the spread of retroflexion into a following dental cluster, and nasal retroflexion (nati), in that order;
-- every rule that applies runs.
local retroflexion_rules = {
{
id = "ruki-ending-s",
applies = function(junction) return junction:stemEndsWith("[iIeEfFxuUoOrk][/\\]?[HM]?") end,
apply = function(junction)
junction:replaceEnding("^([HM]?)s([^rfF])", "%1z%2")
junction:replaceEnding("^[HM]?z[tTdDns]*", function(cluster)
return (string.gsub(cluster, ".", dental_to_retroflex))
end)
end,
},
{
id = "ruki-stem-s",
applies = function(junction)
return junction:stemEndsWith("[iIeEfFxuUoOrk][/\\]?[HM]?s") and junction:endingStartsWith("[^rfF]")
and not junction.options.keep_stem_s
end,
apply = function(junction) junction:replaceStem("s$", "z") end,
},
{
-- The s of the locative plural -su stays after ṭ (viṭsú, ṣaṭsú; Whitney §199b).
id = "retroflex-dental-cluster", whitney = "§197, §199b",
applies = function(junction)
return junction:stemEndsWith("[zqwR]")
and not (junction:stemEndsWith("w") and string.match(junction.ending, "^su" .. export.accent .. "?$"))
end,
apply = function(junction)
junction:replaceEnding("^[tTdDns]*", function(cluster)
return (string.gsub(cluster, ".", dental_to_retroflex))
end)
end,
},
{
id = "nati-ending",
applies = function(junction)
return junction:stemEndsWith("[zrfF]" .. nati_blockers)
and not (junction.options.root_han and junction:stemEndsWith("G") and junction:endingStartsWith("n"))
end,
apply = function(junction)
junction:replaceEnding("^(" .. nati_blockers .. ")n([aAiIeEfFxuUoOynmv])", "%1R%2")
end,
},
{
-- Only with `retroflex_stem_n`, since compounds in -na with the trigger in the first member keep their n.
id = "nati-stem",
applies = function(junction)
return junction.options.retroflex_stem_n and junction:stemEndsWith("[zrfF]" .. nati_blockers .. "n")
and junction:endingStartsWith("[aAiIuUxeEoOnmyv]")
end,
apply = function(junction) junction:replaceStem("n$", "R") end,
},
{
-- An unblocked trigger inside the ending itself.
id = "nati-within-ending",
applies = function(junction)
return string.find(junction.ending, "[zrfF]" .. nati_blockers .. "n[aAiIuUxeEoOnmyv]") ~= nil
end,
apply = function(junction)
junction:replaceEnding("([zrfF]" .. nati_blockers .. ")n([aAiIuUxeEoOnmyv])", "%1R%2")
end,
},
}
--[==[
Return the stem and ending joined, with their accents combined if `options.accented` is set. With `recessive_accent`,
the accent moves to the first syllable unless that syllable already has a svarita, and a suffix (a stem that begins
with a hyphen) is left unaccented. Otherwise the stem loses its accent with `strip_stem_accent`, or when an accented
ending follows a stem accented on its last syllable.
FIXME: Handle the other ways the accent can move between stem and ending.
]==]
function Junction:combineAccent()
local stem, ending, options = self.stem, self.ending, self.options
if options.accented then
if string.match(stem, "^%-") and options.recessive_accent then
table.insert(self.trace, "recessive-accent-suffix")
stem = string.gsub(stem, export.accent, "")
ending = string.gsub(ending, export.accent, "")
elseif options.recessive_accent and not string.match(stem, "^" .. export.consonant .. "*" .. export.vowel .. "\\") then
table.insert(self.trace, "recessive-accent")
local combined = string.gsub(stem .. ending, export.accent, "")
if options.initial_svarita and string.match(combined, "^" .. export.consonant .. "+[vy]" .. export.vowel) then
return (string.gsub(combined, "^(" .. export.consonant .. "+" .. export.vowel .. ")", "%1\\"))
end
return (string.gsub(combined, "^(" .. export.consonant .. "*" .. export.vowel .. ")", "%1/"))
elseif options.strip_stem_accent or (string.match(stem, export.accent .. export.consonant .. "*$")
and string.match(ending, export.accent)) then
table.insert(self.trace, "stem-accent-yields")
stem = string.gsub(stem, export.accent, "")
end
end
return stem .. ending
end
--[==[
Return `text` in absolute final position. `final_obstruent`, `j_retroflex` and `h_velar` decide the outcome of a
final j/ś/h (spáś- > spáṭ, but náś- > nák); `final_obstruent` replaces whatever consonant ends the word.
]==]
local function absolute_final(text, final_obstruent, j_retroflex, h_velar)
local function ends_with(pattern) return string.match(text, pattern .. "$") ~= nil end
local function replace(pattern, replacement) text = (string.gsub(text, pattern, replacement)) end
if ends_with("kz") then
replace("..$", "w")
elseif ends_with("Ms") then
replace("..$", "n")
elseif ends_with(export.vowel_with_accent .. "r[" .. export.stop_list .. "SzhL]") then
-- A final r + stop stays (Whitney §150b); the endings -s/-t after a consonant are already gone.
elseif ends_with(export.consonant .. export.consonant) then
replace(first_of_word_final_cluster, function(cluster) return string.sub(cluster, 1, 1) end)
end
-- ḷh, v and y do not occur finally and are not handled.
if final_obstruent then
replace(".$", final_obstruent)
elseif ends_with("[kwtpNRnmlaAiIuUeEoOfFxXH][/\\]?") then
-- Already a possible final.
elseif ends_with("M") then
replace(".$", "m")
elseif ends_with("[sr]") then
replace(".$", "H")
elseif ends_with("[KgGcCJWqQTdDPbBYzL]") then
replace(".$", export.to_final)
elseif ends_with("[jhS]") then
if j_retroflex then
replace("j$", "w")
elseif h_velar then
replace("h$", "k")
else
replace(".$", {['j'] = 'k', ['h'] = 'w', ['S'] = 'w'})
end
end
return text
end
--[==[Apply the internal sandhi rules to the junction and return the joined form.]==]
function Junction:run()
local options = self.options
if self:endingStartsWith(export.consonant) then
self:applyFirst(before_consonant_rules)
end
self:applyAll({drop_ending_rule})
if self.ending == "" then
self:applyFirst(zero_ending_rules)
return absolute_final(self:combineAccent(), options.final_obstruent, options.j_retroflex, options.h_velar)
elseif self:endingStartsWith(export.vowel) then
if self:stemEndsWith(export.vowel_with_accent) then
local stem, last, last_accent = string.match(self.stem, "^(.*)(" .. export.vowel .. ")(" .. export.accent .. "?)$")
self.stem, self.last, self.last_accent = stem, last, last_accent
self.first, self.ending = string.match(self.ending, "^(.)(.*)$")
self:applyFirst(vowel_rules)
end
else
self:applyFirst(junction_rules)
end
self:applyAll(retroflexion_rules)
local combined = self:combineAccent()
if options.no_final_sandhi then
return combined
end
return absolute_final(combined)
end
--[==[
Join `stem` and `ending` (SLP1) with internal sandhi, combine their accents and put the result in absolute final
position. `options.no_final_sandhi` leaves out the last step, except for a bare stem (empty ending). `options` is a
table of the options listed above `OPTIONS`, or nil.
]==]
function export.join(stem, ending, options)
return Junction.new(stem, ending, options or {}):run()
end
--[==[Like `join`, but also return the ids of the rules that fired, in order (for tests).]==]
function export.join_traced(stem, ending, options)
local junction = Junction.new(stem, ending, options or {})
local result = junction:run()
return result, junction.trace
end
------------------------------------------------------------------------------------------------------------------------
-- External sandhi --
------------------------------------------------------------------------------------------------------------------------
--[==[
The options that `join_words` takes. Any other key is an error.
* `pragrhya`: the first word ends in a vowel that is never combined with what follows (§138), such as a dual in -ī,
-ū or -e, amī, or the Vedic asmé, yuṣmé and tvé.
* `preverb`: the first word is a preverb (`prá`, `ā́`, `sám` ...) and the second is a form of the verb or a verbal
noun. The two make one word, and the rules of a preverb apply (§137, §185, §187, §192, §233c).
* `root` (a string): with `preverb`, the root as it shows in the head of the verb's table, without the augment or the
reduplication (`nayati`, `sTO` for tasthaú, `sAra` for sasā́ra). It decides the lexical side of §185 and §192.
Only a root that begins with s or n can have that sound changed, a root with an r in its first syllable keeps its
s, and only a few roots take ṇ elsewhere (an, han, hi, mī).
* `second_preverb`: with `preverb`, the second word is itself a preverb (prá + ní = praṇí).
]==]
local WORD_OPTIONS = {pragrhya = true, preverb = true, root = true, second_preverb = true}
-- The preverbs whose r (or s, which becomes r) turns a following n into ṇ (§192a).
local nati_preverbs = {parA = true, pari = true, pra = true, nis = true, antar = true, dus = true}
-- Return the last character of `text`, which in SLP1 is its last sound (or an accent mark).
local function last_of(text)
return string.sub(text, -1)
end
--[==[
The working state of one `join_words` call: the two words as the rules change them, the `options`, the `trace` of the
ids of the rules that fired, and whether the words have become one (`joined`).
]==]
local Boundary = {}
Boundary.__index = Boundary
Boundary.applyFirst = Junction.applyFirst
Boundary.applyAll = Junction.applyAll
function Boundary.new(first, second, options)
for key in pairs(options) do
if not WORD_OPTIONS[key] then
local valid = {}
for name in pairs(WORD_OPTIONS) do
table.insert(valid, name)
end
table.sort(valid)
error(("Unrecognized sandhi option '%s'; the options are %s."):format(key, table.concat(valid, ", ")))
end
end
return setmetatable({first = first, second = second, options = options, trace = {},
joined = options.preverb or false}, Boundary)
end
function Boundary:firstEndsWith(pattern)
return string.match(self.first, pattern .. "$") ~= nil
end
function Boundary:secondStartsWith(pattern)
return string.match(self.second, "^" .. pattern) ~= nil
end
function Boundary:replaceFirst(pattern, replacement)
self.first = (string.gsub(self.first, pattern, replacement))
end
function Boundary:replaceSecond(pattern, replacement)
self.second = (string.gsub(self.second, pattern, replacement, 1))
end
-- Return the accent of two vowels fused into one (§128): an udātta on either wins, then a svarita on either. The only
-- exception made is í + i = ī̀ (divī̀ ’va). The Taittirīya ú + u = ū̀ belongs to one school and is left out.
local function fused_accent(boundary)
local first, second = boundary.last_accent, boundary.initial_accent
if boundary.last == "i" and first == "/" and boundary.initial == "i" and second == "" then
return "\\"
elseif first == "/" or second == "/" then
return "/"
elseif first == "\\" or second == "\\" then
return "\\"
end
return ""
end
-- A vowel-final word before a vowel-initial one (only the first rule that applies). The first word's last vowel is in
-- `boundary.last` (its accent in `boundary.last_accent`, the rest of the word in `boundary.head`), and the second
-- word's first vowel is in `boundary.initial` (`boundary.initial_accent`, the rest in `boundary.tail`).
local external_vowel_rules = {
{
id = "pragrhya", whitney = "§138",
applies = function(boundary) return boundary.options.pragrhya end,
apply = function() end,
},
{
-- ā́ + ṛcchati = ārcchati
id = "preverb-a-plus-r", whitney = "§137a",
applies = function(boundary)
return boundary.options.preverb and string.match(boundary.last, "[aA]") ~= nil
and string.match(boundary.initial, "[fF]") ~= nil
end,
apply = function(boundary)
boundary.first = boundary.head .. "A" .. fused_accent(boundary) .. "r"
boundary.second = boundary.tail
end,
},
{
-- prá + ūḍhá = prauḍhá, with the ū of the weak stem of vah; ūh "consider" has the usual o (prohate).
id = "preverb-a-plus-udh", whitney = "§137c",
applies = function(boundary)
return boundary.options.preverb and string.match(boundary.last, "[aA]") ~= nil and boundary.initial == "U"
and string.match(boundary.tail, "^Q") ~= nil
end,
apply = function(boundary)
boundary.first = boundary.head .. "O" .. fused_accent(boundary)
boundary.second = boundary.tail
end,
},
{
id = "similar-vowels", whitney = "§126",
applies = function(boundary)
return string.lower(boundary.last) == string.lower(boundary.initial)
and string.match(boundary.last, "[aAiIuUfF]") ~= nil
end,
apply = function(boundary)
boundary.first = boundary.head .. export.lengthen[boundary.initial] .. fused_accent(boundary)
boundary.second = boundary.tail
boundary.joined = true
end,
},
{
id = "a-plus-dissimilar-vowel", whitney = "§127",
applies = function(boundary) return string.match(boundary.last, "[aA]") ~= nil end,
apply = function(boundary)
boundary.first = boundary.head .. export.up_one_grade[boundary.initial .. fused_accent(boundary)]
boundary.second = boundary.tail
boundary.joined = true
end,
},
{
-- i, u, ṛ and ḷ (short or long) become y, v, r and l. An udātta on the vowel leaves a svarita on
-- a following unaccented vowel (ví + uṣṭi = vyùṣṭi).
id = "vowel-to-semivowel", whitney = "§129, §130",
applies = function(boundary) return export.vowel_to_cons[boundary.last] ~= nil end,
apply = function(boundary)
local accent = boundary.initial_accent
if boundary.last_accent == "/" and accent == "" then
accent = "\\"
end
boundary.first = boundary.head .. export.vowel_to_cons[boundary.last]
boundary.second = boundary.initial .. accent .. boundary.tail
end,
},
{
-- té + abruvan = tè ’bruvan. An udātta on the elided a moves to the e or o, and an udātta e or o
-- becomes a svarita.
id = "e-o-before-a", whitney = "§135",
applies = function(boundary) return string.match(boundary.last, "[eo]") ~= nil and boundary.initial == "a" end,
apply = function(boundary)
local accent = boundary.last_accent
if boundary.initial_accent == "/" then
accent = "/"
elseif accent == "/" then
accent = "\\"
end
boundary.first = boundary.head .. boundary.last .. accent
boundary.second = "'" .. boundary.tail
end,
},
{
-- te + āgatāḥ = ta āgatāḥ. The rare final o goes the same way (§134a).
id = "e-o-before-vowel", whitney = "§132, §133",
applies = function(boundary) return string.match(boundary.last, "[eo]") ~= nil end,
apply = function(boundary) boundary.first = boundary.head .. "a" .. boundary.last_accent end,
},
{
-- tasmai + adadāt = tasmā adadāt
id = "ai-before-vowel", whitney = "§133",
applies = function(boundary) return boundary.last == "E" end,
apply = function(boundary) boundary.first = boundary.head .. "A" .. boundary.last_accent end,
},
{
-- tau + eva = tāv eva
id = "au-before-vowel", whitney = "§134b",
applies = function(boundary) return boundary.last == "O" end,
apply = function(boundary) boundary.first = boundary.head .. "A" .. boundary.last_accent .. "v" end,
},
}
-- A final s or r (only the first rule that applies). A final visarga is taken as s.
local s_r_rules = {
{
-- sá, eṣá and syá lose their s before a consonant: sa dadarśa.
id = "sa-before-consonant", whitney = "§176a",
applies = function(boundary)
return (string.match(boundary.first, "^sa[/\\]?s$") or string.match(boundary.first, "^eza[/\\]?s$")
or string.match(boundary.first, "^sya[/\\]?s$")) ~= nil and boundary:secondStartsWith(export.consonant)
end,
apply = function(boundary) boundary:replaceFirst("s$", "") end,
},
{
id = "bhos-before-voiced", whitney = "§174b",
applies = function(boundary)
return string.match(boundary.first, "^Bo[/\\]?s$") ~= nil
and boundary:secondStartsWith("[" .. export.vowel_list .. "gGjJqQdDbBNYRnmyrlvh]")
end,
apply = function(boundary) boundary:replaceFirst("s$", "") end,
},
{
id = "s-before-ts", whitney = "§173b",
applies = function(boundary) return boundary:secondStartsWith("ts") end,
apply = function(boundary) boundary:replaceFirst(".$", "H") end,
},
{
-- s stays before t/th, and a final r becomes s there too (§178a): dvā́r + tát = dvā́s tát.
id = "s-before-t", whitney = "§170b, §178a",
applies = function(boundary) return boundary:secondStartsWith("[tT]") end,
apply = function(boundary) boundary:replaceFirst(".$", "s") end,
},
{
id = "s-before-palatal", whitney = "§170c, §178a",
applies = function(boundary) return boundary:secondStartsWith("[cC]") end,
apply = function(boundary) boundary:replaceFirst(".$", "S") end,
},
{
id = "s-before-retroflex", whitney = "§170c, §178a",
applies = function(boundary) return boundary:secondStartsWith("[wW]") end,
apply = function(boundary) boundary:replaceFirst(".$", "z") end,
},
{
-- After a preverb the s stays, as in a compound, and becomes ṣ after i and u: puraskaroti, niṣkaroti.
id = "preverb-s-before-k-p", whitney = "§171, §187",
applies = function(boundary)
return boundary.options.preverb and boundary:firstEndsWith("s") and boundary:secondStartsWith("[kKpP]")
end,
apply = function(boundary)
if boundary:firstEndsWith("[iIuU][/\\]?s") then
boundary:replaceFirst("s$", "z")
end
end,
},
{
id = "s-before-k-p", whitney = "§170d, §178a",
applies = function(boundary) return boundary:secondStartsWith("[kKpP]") end,
apply = function(boundary) boundary:replaceFirst(".$", "H") end,
},
{
-- Whitney allows two forms (manuḥ svayam, manus svayam); this gives the visarga.
id = "s-before-sibilant", whitney = "§172",
applies = function(boundary) return boundary:secondStartsWith("[Szs]") end,
apply = function(boundary) boundary:replaceFirst(".$", "H") end,
},
{
-- r stays before a vowel or a voiced consonant: punar eti.
id = "r-before-voiced", whitney = "§178b",
applies = function(boundary) return boundary:firstEndsWith("r") end,
apply = function() end,
},
{
-- devā́s + gacchanti = devā́ gacchanti, devā́s + āgatā́s = devā́ āgatā́s
id = "as-long-before-voiced", whitney = "§177",
applies = function(boundary) return boundary:firstEndsWith("A[/\\]?s") end,
apply = function(boundary) boundary:replaceFirst("s$", "") end,
},
{
-- hantavyàs + asmi = hantavyò ’smi: -as becomes -o, and the a is elided as in §135.
id = "as-before-a", whitney = "§175a, §135",
applies = function(boundary)
return boundary:firstEndsWith("a[/\\]?s") and boundary:secondStartsWith("a")
end,
apply = function(boundary)
local accent = string.match(boundary.first, "a([/\\]?)s$")
if boundary:secondStartsWith("a/") then
accent = "/"
elseif accent == "/" then
accent = "\\"
end
boundary:replaceFirst("a[/\\]?s$", "o" .. accent)
boundary:replaceSecond("^a[/\\]?", "'")
end,
},
{
-- ādityás + iva = ādityá iva
id = "as-before-vowel", whitney = "§175c",
applies = function(boundary)
return boundary:firstEndsWith("a[/\\]?s") and boundary:secondStartsWith(export.vowel)
end,
apply = function(boundary) boundary:replaceFirst("s$", "") end,
},
{
-- nalás + nā́ma = naló nā́ma; tirás + dadhāti = tirodadhāti
id = "as-before-voiced-consonant", whitney = "§175a",
applies = function(boundary) return boundary:firstEndsWith("a[/\\]?s") end,
apply = function(boundary) boundary:replaceFirst("a([/\\]?)s$", "o%1") end,
},
{
-- agnís + iva = agnír iva
id = "s-to-r", whitney = "§174",
applies = function() return true end,
apply = function(boundary) boundary:replaceFirst("s$", "r") end,
},
}
-- A final r is dropped before another r, and a short vowel before it is lengthened (punar + ramate = punā ramate).
local double_r_rule = {
id = "no-double-r", whitney = "§179",
applies = function(boundary) return boundary:firstEndsWith("r") and boundary:secondStartsWith("r") end,
apply = function(boundary)
boundary:replaceFirst("(" .. export.vowel .. ")([/\\]?)r$", function(vowel, accent)
return (export.lengthen[vowel] or vowel) .. accent
end)
end,
}
-- sthā and stambh lose their s after ud: út + sthāpayati = utthāpayati.
local preverb_ud_sth_rule = {
id = "preverb-ud-loses-s", whitney = "§233c",
applies = function(boundary)
return boundary.options.preverb and boundary:firstEndsWith("t") and boundary:secondStartsWith("s[tT]")
end,
apply = function(boundary) boundary:replaceSecond("^s", "") end,
}
-- A final stop, already in its absolute final form (only the first rule that applies).
local stop_rules = {
{
id = "t-before-l", whitney = "§162",
applies = function(boundary) return boundary:firstEndsWith("t") and boundary:secondStartsWith("l") end,
apply = function(boundary) boundary:replaceFirst("t$", "l") end,
},
{
id = "t-before-palatal", whitney = "§202a",
applies = function(boundary) return boundary:firstEndsWith("t") and boundary:secondStartsWith("[cCjJ]") end,
apply = function(boundary)
boundary:replaceFirst("t$", boundary:secondStartsWith("[cC]") and "c" or "j")
end,
},
{
-- tát + śrutvā́ = tác chrutvā́
id = "t-before-s-palatal", whitney = "§203",
applies = function(boundary) return boundary:firstEndsWith("t") and boundary:secondStartsWith("S") end,
apply = function(boundary)
boundary:replaceFirst("t$", "c")
boundary:replaceSecond("^S", "C")
end,
},
{
-- t becomes ṭ or ḍ as the grammarians direct, though this is found "never in the older language,
-- very rarely later".
id = "t-before-retroflex", whitney = "§199a",
applies = function(boundary) return boundary:firstEndsWith("t") and boundary:secondStartsWith("[wWqQ]") end,
apply = function(boundary)
boundary:replaceFirst("t$", boundary:secondStartsWith("[wW]") and "w" or "q")
end,
},
{
-- Whitney allows two forms (tád námas, tán námas); this gives the nasal.
id = "stop-before-nasal", whitney = "§161",
applies = function(boundary) return boundary:secondStartsWith("[NYRnm]") end,
apply = function(boundary)
boundary:replaceFirst(".$", {k = "N", w = "R", t = "n", p = "m"})
end,
},
{
-- tát + hí = tád dhí, the usual one of Whitney's two forms.
id = "stop-before-h", whitney = "§163",
applies = function(boundary) return boundary:secondStartsWith("h") end,
apply = function(boundary)
boundary:replaceFirst(".$", export.to_voiced)
boundary:replaceSecond("^h", export.aspirate[last_of(boundary.first)])
end,
},
{
id = "stop-before-voiced", whitney = "§159",
applies = function(boundary)
return boundary:secondStartsWith("[" .. export.vowel_list .. "gGjJqQdDbByrlv]")
end,
apply = function(boundary) boundary:replaceFirst(".$", export.to_voiced) end,
},
}
-- A final n, ṅ or ṇ (only the first rule that applies).
local n_rules = {
{
-- After a short vowel, the nasal is doubled before a vowel: udyán + ādityás = udyánn ādityás.
id = "nasal-doubled-before-vowel", whitney = "§210",
applies = function(boundary)
return boundary:firstEndsWith("[aiufx][/\\]?[NRn]") and boundary:secondStartsWith(export.vowel)
end,
apply = function(boundary) boundary.first = boundary.first .. last_of(boundary.first) end,
},
{
-- devā́n + ca = devā́ṃś ca
id = "n-before-voiceless-stop", whitney = "§208",
applies = function(boundary) return boundary:firstEndsWith("n") and boundary:secondStartsWith("[cCwWtT]") end,
apply = function(boundary)
local sibilant = boundary:secondStartsWith("[cC]") and "S" or boundary:secondStartsWith("[wW]") and "z" or "s"
boundary:replaceFirst("n$", "M" .. sibilant)
end,
},
{
id = "n-before-j", whitney = "§202b",
applies = function(boundary) return boundary:firstEndsWith("n") and boundary:secondStartsWith("[jJ]") end,
apply = function(boundary) boundary:replaceFirst("n$", "Y") end,
},
{
-- bṛhán + śéṣas = bṛhañ chéṣas
id = "n-before-s-palatal", whitney = "§203",
applies = function(boundary) return boundary:firstEndsWith("n") and boundary:secondStartsWith("S") end,
apply = function(boundary)
boundary:replaceFirst("n$", "Y")
boundary:replaceSecond("^S", "C")
end,
},
{
id = "n-before-retroflex", whitney = "§205",
applies = function(boundary) return boundary:firstEndsWith("n") and boundary:secondStartsWith("[qQR]") end,
apply = function(boundary) boundary:replaceFirst("n$", "R") end,
},
{
-- trī́n + lokā́n = trī́m̐l lokā́n
id = "n-before-l", whitney = "§206",
applies = function(boundary) return boundary:firstEndsWith("n") and boundary:secondStartsWith("l") end,
apply = function(boundary) boundary:replaceFirst("n$", "~l") end,
},
}
-- A final m (only the first rule that applies).
local m_rules = {
{
id = "m-before-vowel-or-labial", whitney = "§213",
applies = function(boundary) return boundary:secondStartsWith("[" .. export.vowel_list .. "pPbBm]") end,
apply = function() end,
},
{
-- sam + rāj keeps its m.
id = "samraj", whitney = "§213",
applies = function(boundary)
return boundary.options.preverb and string.match(boundary.first, "^sa[/\\]?m$") ~= nil
and boundary:secondStartsWith("rA[/\\]?j")
end,
apply = function() end,
},
{
-- The anusvāra before any other consonant. Before a stop it stands for the class nasal, as it is usually
-- written: saṃgacchati.
id = "m-before-consonant", whitney = "§213",
applies = function() return true end,
apply = function(boundary) boundary:replaceFirst("m$", "M") end,
},
}
-- ch is doubled after a short vowel, after a preverb that ends in ā (ā́, parā́) and after mā́: pari + chinatti =
-- paricchinatti.
local ch_rule = {
id = "ch-doubled", whitney = "§227",
applies = function(boundary)
return boundary:secondStartsWith("C") and (boundary:firstEndsWith("[aiufx][/\\]?")
or (boundary.options.preverb and boundary:firstEndsWith("A[/\\]?"))
or string.match(boundary.first, "^mA[/\\]?$") ~= nil)
end,
apply = function(boundary) boundary.second = "c" .. boundary.second end,
}
--[==[
Return the position in `second` of the n that becomes ṇ after a preverb with an r (§192), or nil. That n is one of:
* a root-initial n, except in nṛt, nabh and nand, and in naś where its ś has become ṣ;
* the n of an (prā́ṇiti), of han before a vowel, m, v or y (prá haṇyate), of hi's -nu- (pári hiṇomi) and of
mī's -nā- (prá miṇanti);
* the -āni of the first singular imperative (prá bhavāṇi);
* the n of a suffix after a vowel, which Whitney says happens "sometimes" (§192e: prayā́ṇa) and the grammarians
make regular for the participles and the verbal nouns (pravahamāṇa, prahīṇa, prabhavaṇīya);
* the n of ní after another preverb (praṇí).
Nothing between the preverb and that n may block nati.
]==]
local function nati_position(second, options)
local root = options.root or ""
local position
if options.second_preverb then
position = string.match(second, "^()n")
elseif string.match(root, "^n") then
-- The first n of the form is the root's (or that of its reduplication).
if not (string.match(root, "^n[fF]") or string.match(root, "^na[/\\]?rt") or string.match(root, "^n[aA][/\\]?B")
or string.match(root, "^na[/\\]?nd") or string.match(second, "^[^n]*n[aA][/\\]?z")) then
position = string.match(second, "^[^n]*()n")
end
elseif string.match(root, "^[aA][/\\]?n[iI]") then
position = string.match(second, "^[^n]*()n")
elseif string.match(root, "^[hG][aA][/\\]?n") then
position = string.match(second, "[hG][aA][/\\]?()n[" .. export.vowel_list .. "mvy]")
elseif string.match(root, "^hi[/\\]?n") then
position = string.match(second, "hi[/\\]?()n[oOuUv]")
elseif string.match(root, "^m[iI][/\\]?n") then
position = string.match(second, "m[iI][/\\]?()n[aAiI]")
end
-- The -āni of the first singular imperative, and the n of a suffix after a vowel: the gerundive in -anīya
-- (prabhavaṇīya) and a final -na, -ana, -āna or -māna (prahīṇa, pravahamāṇa).
position = position or string.match(second, "A[/\\]?()ni$") or string.match(second, "a()nI[/\\]?ya$")
or string.match(second, "[aAiIuUfFeEoO][/\\]?()na[/\\]?$")
if position and string.match(string.sub(second, 1, position - 1), "^" .. nati_blockers .. "$") then
return position
end
end
--[==[
Return the position in `second` of the s that becomes ṣ after a preverb in i or u (§185), or nil. That s is the
first s of the root or of its reduplication (abhí + asiñcan = abhyàṣiñcan, ví + tasthe = vítaṣṭhe), but not
in a root with an r in its first syllable (anusarati), nor in another preverb (abhisám).
]==]
local function ruki_position(second, options)
local root = options.root or ""
if options.second_preverb or not string.match(root, "^s") then
return nil
end
local first_syllable = string.match(root, "^[^aAiIuUfFxXeEoO]*[aAiIuUfFxXeEoO][/\\]?[^aAiIuUfFxXeEoO/\\]*")
if string.find(first_syllable or root, "[rfF]") then
return nil
end
-- The first s of the form is the root's (or that of its reduplication).
return string.match(second, "^[^s]*()s")
end
--[==[Apply the lexical rules of a preverb and its root to the second word, before the two are joined.]==]
function Boundary:applyRootRules()
local options = self.options
local preverb = string.gsub(self.first, export.accent, "")
-- The last preverb of the first word decides (sam + prá + nayati = sampraṇayati).
local nati_preverb = false
for name in pairs(nati_preverbs) do
nati_preverb = nati_preverb or string.sub(preverb, -#name) == name
end
if nati_preverb then
local position = nati_position(self.second, options)
if position then
table.insert(self.trace, "preverb-nati")
self.second = string.sub(self.second, 1, position - 1) .. "R" .. string.sub(self.second, position + 1)
end
end
-- After a preverb in i or u, the root's s becomes ṣ, and dentals right after it become retroflex (vítaṣṭhe).
if string.match(preverb, "[iu]$") then
local position = ruki_position(self.second, options)
if position then
table.insert(self.trace, "preverb-ruki")
local before, after = string.sub(self.second, 1, position - 1), string.sub(self.second, position + 1)
local dentals, rest = string.match(after, "^([tTdDn]*)(.*)$")
self.second = before .. "z" .. string.gsub(dentals, ".", dental_to_retroflex) .. rest
end
end
end
--[==[Apply the external sandhi rules to the boundary and return the two words, joined or separated by a space.]==]
function Boundary:run()
if self.options.preverb then
self:applyRootRules()
end
self:replaceFirst("H$", "s")
if self:firstEndsWith("[" .. export.consonant_list .. "]") and not self:firstEndsWith("[sr]") then
self.first = absolute_final(self.first)
end
if self:firstEndsWith(export.vowel_with_accent) and self:secondStartsWith(export.vowel) then
self.head, self.last, self.last_accent = string.match(self.first,
"^(.*)(" .. export.vowel .. ")(" .. export.accent .. "?)$")
self.initial, self.initial_accent, self.tail = string.match(self.second,
"^(" .. export.vowel .. ")(" .. export.accent .. "?)(.*)$")
self:applyFirst(external_vowel_rules)
elseif self:firstEndsWith(export.vowel_with_accent) then
self:applyAll({ch_rule})
elseif self:firstEndsWith("[sr]") then
self:applyFirst(s_r_rules)
self:applyAll({double_r_rule})
else
self:applyAll({preverb_ud_sth_rule})
if self:firstEndsWith("[kwtp]") then
self:applyFirst(stop_rules)
elseif self:firstEndsWith("[NRn]") then
self:applyFirst(n_rules)
elseif self:firstEndsWith("m") then
self:applyFirst(m_rules)
end
end
return self.first .. (self.joined and "" or " ") .. self.second
end
--[==[
Join `first` and `second` (SLP1) with external sandhi, as two words of a sentence or, with `options.preverb`, as a
preverb and a verb form that make one word. Give `first` with its original final (`devas`, `punar`, `vAc`; a final
visarga is read as s) and `second` as it stands. Words that stay apart are separated by a space, and an elided a is
written with an avagraha (`'`). `options` is a table of the options listed above `WORD_OPTIONS`, or nil.
]==]
function export.join_words(first, second, options)
return Boundary.new(first, second, options or {}):run()
end
--[==[Like `join_words`, but also return the ids of the rules that fired, in order (for tests).]==]
function export.join_words_traced(first, second, options)
local boundary = Boundary.new(first, second, options or {})
local result = boundary:run()
return result, boundary.trace
end
return export
3bqtyp42py95ww5mqmx4ogn71vr3rc0
áu quám
0
298149
2572931
2143731
2026-10-23T08:48:56Z
Hiyuune
50834
2572931
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[đưa lời]], [[dẫn lời]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
1ficsuo3mzbzzgci7r8zisz94mpqoj6
áu thấc
0
298150
2572932
2143732
2026-10-23T08:48:59Z
Hiyuune
50834
2572932
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[phối giống]] cho [[trâu]], [[bò]], [[dê]], [[ngựa]]...[[nái]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
3ejwj1670bk2zs3yi7t82fv8oib83zj
áu hướn
0
298151
2572927
2143733
2026-10-23T08:47:54Z
Hiyuune
50834
2572927
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[vung]] tay [[ném]] quả [[mạc lẹ]] qua đầu về phía sau lưng để [[ghi điểm]] trong trò chơi [[tò lẹ]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
dtlx48908c823ma1x68kb3qjewu5dxi
áu phủa
0
298152
2572930
2143734
2026-10-23T08:48:54Z
Hiyuune
50834
2572930
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[lấy chồng]], [[cưới]] [[chồng]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
tfdh0b5nbgnotzvaphnz3uhom7il5gq
áu phọc
0
298153
2572928
2143735
2026-10-23T08:48:23Z
Hiyuune
50834
2572928
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[phối giống]] cho [[lợn nái]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
ssz2h5kyz9rlg4k87glpzklhxnxgw89
áu mía
0
298154
2572929
2143736
2026-10-23T08:48:25Z
Hiyuune
50834
2572929
wikitext
text/x-wiki
=={{langname|tyj}}==
==={{section|v}}===
{{head|tyj|Động từ}}
# [[lấy vợ]], [[cưới vợ]].
==={{section|ref}}===
* {{R:Sầm Văn Bình}}
giwc2iryq8toroafkfrz5emh6cx0l0b
atŭk
0
298398
2572727
2144269
2026-10-22T13:31:15Z
Hiyuune
50834
2572727
wikitext
text/x-wiki
=={{langname|ibh}}==
==={{ĐM|v}}===
{{head|ibh|Động từ}}
# [[nấu]].
==={{ĐM|ref}}===
* Tam Thi Minh Nguyen, ''A grammar of Bih ''(2013)
akx3isi1bdsj8o9tj2juyc8vuazmggn
aturrata
0
302105
2572728
2157010
2026-10-22T13:31:41Z
Hiyuune
50834
2572728
wikitext
text/x-wiki
=={{langname|kxc}}==
==={{section|n}}===
{{head|kxc|Danh từ}}
# [[mèo|Mèo]].
==={{section|ref}}===
* {{Chú thích sách|kxc|author=Borale Matewos|url=https://www.sil.org/system/files/reapdata/12/07/70/120770007088788814762090621972698906243/English_Afaa_Xonso_Amharic_School_Dictionary_2022.pdf|title=English - Afaa Xonso - Amharic School Dictionary|year=2022|publisher=SIL Ethiopia, SNNPRS Education|page=167}}
qzh29fxbqvy7jjp7t2a0feom10begzk
मैत्री
0
304775
2572844
2366822
2026-10-23T01:16:48Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572844
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA|a=2}}
==={{section|n}}===
{{sa-noun|f|tr=maitrī́}}
# [[tình bạn|Tình bạn]].
# [[từ bi|Từ bi]].
===={{section|decl}}====
{{sa-ndecl|maitrī́<f>}}
===={{section|drv}}====
* {{l|sa|मैत्रेय|tr=maitréya}}
===={{section|desc}}====
* {{desc|pi|mettī}}
* {{desc|th|ไมตรี}}
==={{section|ref}}===
* {{R:CDIAL|maitrá|10340|page=597}}
q87kf4nnigidnyoys6buk6py9dv9gll
करुणा
0
304776
2572851
2379854
2026-10-23T01:23:59Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572851
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{rfe|sa}}
==={{section|pron}}===
{{sa-IPA|a=1}}
==={{section|n}}===
{{sa-noun|f}}
# Lòng [[từ bi]].
===={{section|decl}}====
{{sa-ndecl|karuṇā<f>}}
===={{section|desc}}====
* {{desc|pgd|𐨐𐨪𐨂𐨣}}
* {{desc|pi|karuṇā}}
* {{desc|pra|𑀓𑀮𑀼𑀡𑀸}}
** Nam:
*** {{desc|dv|ކުލުނު}}
*** {{desc|si|කුලුණ}}
'''Từ vay mượn'''
* {{desc|hi|करुणा|lbor=1}}
* {{desc|kn|ಕರುಣ|bor=1}}
* {{desc|ml|കരുണ|bor=1}}
* {{desctree|kaw|karuṇā|karuṇa|bor=1}}
* {{desc|ta|கருணை|lbor=1}}
* {{desc|te|కరుణ|bor=1}}
==={{section|ref}}===
* {{R:MW|255}}
* {{R:CDIAL|karuna|2811|page=142}}
4gu3w5ll5rv7bkrfwmpmomoi9xl5ntk
विद्या
0
305126
2572854
2341672
2026-10-23T01:27:08Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572854
wikitext
text/x-wiki
=={{langname|sa}}==
{{wp|sa:|sc=Deva}}
==={{ĐM|alt sc}}===
{{sa-alt}}
==={{ĐM|etym}}===
{{etymon|sa|id=tri thức|:af|विद्<id:gốc từ>|-या<id:danh từ>|tree=1}}
{{sa-root|विद्|t=biết|-या|id2=danh từ}}. So sánh với {{cog|grc|ἰδέᾱ}}.
==={{ĐM|pron}}===
{{sa-IPA|a=2}}
==={{ĐM|noun}}===
{{sa-noun|f|r=विद्|tr=vidyā́}}
# [[trí tuệ|Trí tuệ]], [[tri thức]], [[kiến thức]].
===={{ĐM|decl}}====
{{sa-ndecl|vidyā́<f>}}
===={{ĐM|der}}====
* {{l|sa|विद्याधर}}
* {{l|sa|विद्यालय}}
* {{l|sa|अविद्य}}
===={{ĐM|desc}}====
* {{desc|bn|বিদ্যা|tr=bidda}}
* {{desc|hi|विद्या}}
* {{desctree|bor=1|kaw|widyā}}
* {{desc|pi|vijjā}}
*: {{desc|th|วิชา|bor=1}}
*: {{desc|lo|ວິຊາ|bor=1}}
*: {{desc|km|វិជ្ជា|tr=vityie|bor=1}}
* {{desc|pa|ਵਿੱਦਿਆ|lbor=1}}
* {{desc|te|విద్య}}
* {{desc|th|วิทยา|tr=wíttáyaa|bor=1}}
* {{desc|my|ဝိဇ္ဇာ|tr=wizza|bor=1}}
* {{desc|lo|ວິທະຍາ|bor=1}}
* {{desc|km|វិទ្យា|tr=vityie|bor=1}}
* {{desc|cjm|ꨝꨪꨖꨪ|bor=1}}
* {{desc|ms|widya|lbor=1}}
==={{ĐM|further}}===
* {{R:MW|963|col=3}}
* {{R:sa:DCS}}
ll0rncdrvcwkztk87hz3yjhx5uiyoa6
स्थविर
0
305213
2572856
2341673
2026-10-23T01:42:29Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572856
wikitext
text/x-wiki
=={{langname|sa}}==
==={{ĐM|alt sc}}===
{{sa-alt}}
==={{ĐM|pron}}===
{{sa-IPA|a=1}}
==={{ĐM|adj}}===
{{sa-adj|tr=sthávira}}
# [[rộng|Rộng]], [[dày]].
# [[khỏe|Khỏe]], [[mạnh]] ({{sa-a|RV}}, {{sa-a|AV}}, {{sa-a|Br}}, {{sa-a|MBh}}, {{sa-a|Hariv}}).
# [[già|Già]], [[cổ]], đáng [[tôn kính]] ({{sa-a|Br}} v.v.).
===={{ĐM|decl}}====
{{sa-adecl|sthávira<f:sthávirā>}}
<!--Ghi chú cho biên tập viên: Theo MW, có một dạng giống cái khác là: sthávirī, nhưng không được hiển thị do giới hạn của bản mẫu-->
==={{ĐM|noun}}===
{{sa-noun|m|tr=sthávira}}
# [[ông già|Ông già]] ({{sa-a|W}}).
#: {{coordinate terms|sa|स्थविरा|t=bà già}}
# {{lb|sa|Buddhism}} [[trưởng lão|Trưởng lão]] {{gloss|danh hiệu của vị [[tỳ kheo]] cao tuổi và đáng kính nhất}} ({{sa-a|MWB}} tr. 184, 255 v.v.).
# {{lb|sa|in the plural}} [[tên|Tên]] một [[bộ phái]] ({{sa-a|Buddh}}).
#: {{uxi|sa|^आर्य'''स्थाविर'''|(tên của một bộ phái Phật giáo cụ thể)}}
===={{ĐM|decl}}====
{{sa-ndecl|sthávira<m>}}
==={{ĐM|ref}}===
* {{R:MW|1265|col=2}}
fs9kxixhqtrjxa6gplxykh55a25x4sy
निर्वाण
0
305508
2572864
2341592
2026-10-23T02:28:49Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572864
wikitext
text/x-wiki
=={{langname|hi}}==
==={{ĐM|etym}}===
{{bor+|hi|sa|निर्वाण||thổi tắt, dập tắt}}.
==={{ĐM|adj}}===
{{hi-adj|ind=1}}
# [[dập tắt|Dập tắt]], [[thổi]] tắt.
==={{ĐM|noun}}===
{{hi-noun|m}}
# {{lb|hi|Buddhism}} [[niết bàn|Niết bàn]].
===={{ĐM|decl}}====
{{hi-ndecl|<M>}}
=={{langname|sa}}==
{{wp|sa:+म्}}
==={{ĐM|alt}}===
{{sa-alt}}
==={{ĐM|etym}}===
{{etymon|sa|:af|निर्-<t:ra khỏi>|वान<t:đã thổi>|tree=+|text=*}}
==={{ĐM|pron}}===
{{sa-IPA|novedic=1}}
==={{ĐM|noun}}===
{{sa-noun|n}} {{tlb|sa|Classical}}
# Sự [[thổi]] tắt, sự [[tuyệt diệt]], sự [[chấm dứt]], sự [[lặn]], sự [[tan biến]].
#: {{uxi|sa|निर्वाणं [[कृ]]|tr=nirvāṇaṃ kṛ|làm thổi tắt, dập tắt}}
# {{lb|sa|Hinduism}} Sự [[tắt]] ngọn lửa [[sự sống]], cái [[chết]], sự [[giải thoát]] tối hậu khỏi vật chất để hợp nhất với Linh hồn Tối thượng.
# {{lb|sa|Buddhism|Jainism}} Sự [[tịch diệt]] hoàn toàn (= {{mention|sa|शून्य}}) mọi [[ham muốn]] [[dục vọng]].
# {{lb|sa|figuratively}} [[cực lạc|Cực lạc]], trạng thái [[tĩnh tại]], [[an nhiên]] hoặc [[hạnh phúc]] cao nhất.
===={{ĐM|decl}}====
{{sa-ndecl|<n.novedic>}}
===={{ĐM|desc}}====
* Pahar Trung:
** {{desc|kfy|निमान|t=dập tắt}}
* {{desctree|pi|nibbāna}}
* {{desc|pra-mah|𑀡𑀺𑀯𑁆𑀯𑀸𑀡}}
** {{desc|mr|निवाण|t1=phương pháp làm mát mắt|निवाणें|t2=sự phá hủy, tiêu diệt|निव्णें|t3=lỗ đặt nồi để nguội gần lò sưởi}}
* {{desc|en|nirvana|bor=1}}
* {{desc|bn|নির্বাণ|bor=1}}
* {{desc|oui|𐽺𐽶𐽾𐽱𐽰𐽺|bor=1}}
** {{desctree|xng|ꡋꡞꡘ ꡓꡋ|tr=nir-wn|ts=nirvan|bor=1}}
* {{desc|gu|નિર્વાણ|bor=1}}
* {{desc|hi|निर्वाण|bor=1}}
* {{desc|id|nirwana|bor=1}}
* {{desc|kn|ನಿರ್ವಾಣ|bor=1}}
* {{desc|mr|निर्वाण|bor=1}}
* {{desc|ru|нирва́на|bor=1}}
* {{desc|pa|ਨਿਰਵਾਣ|bor=1}}
* {{desc|zh|涅槃|tr=nièpán|bor=1}}
** {{desc|ja|涅槃|tr=nehan|bor=1}}
** {{desc|ko|열반(涅槃)|bor=1}}
** {{desc|vi|niết bàn|bor=1}}
* {{desc|uk|нірва́на|bor=1}}
==={{ĐM|adj}}===
{{sa-adj}}
# Đã thổi tắt, đã làm tắt (ánh đèn hay ánh ánh lửa); lặn (mặt trời); đã làm [[dịu]], đã [[lắng]] xuống; đã [[thuần hóa]]; đã chết (n.đen: lửa sự sống bị dập tắt); đã biến mất.
# [[chìm đắm|Chìm đắm]].
# Không thể [[di chuyển]] được.
===={{ĐM|decl}}====
{{sa-adecl|<f:निर्वाणा>}}
==={{ĐM|ref}}===
* Collins, Steven (2010) ''Nirvana: Concept, Imagery, Narrative''. Nhà xuất bản Đại học Cambridge, tr. 63-64.
* {{R:MW|0557}}
{{C|sa|Chết|Trạng thái cảm xúc}}
t2ioecllzvng9jxon53ulkn8wpkdm0w
àu
0
308199
2572732
2171086
2026-10-22T13:35:22Z
Hiyuune
50834
2572732
wikitext
text/x-wiki
=={{langname|kpm}}==
==={{section|n}}===
{{head|kpm|Danh từ}}
# [[áo|Áo]].
#:{{uxi|kpm|'''àu''' niam|'''áo''' đẹp}}
==={{section|ref}}===
* Lý Toàn Thắng, Tạ Văn Thông, K'Brêu, K'Bròh (1985) ''Ngữ pháp tiếng Kơ Ho''. Sở Văn hóa và Thông tin Lâm Đồng.
=={{langname|nan-hbl}}==
{{zh-see|漚|poj}}
qeljm667j0mihkd3lkktlqrul3k07kq
atua
0
309531
2572723
2173995
2026-10-22T13:25:34Z
Hiyuune
50834
2572723
wikitext
text/x-wiki
{{also|Atua|'atua}}
=={{langname|cje}}==
==={{section|n}}
{{head|cje|Danh từ}}
# [[hạn hán|Hạn hán]].
maa84cesu04b60ae3g4hdx5rto9d1ab
2572724
2572723
2026-10-22T13:25:58Z
Hiyuune
50834
2572724
wikitext
text/x-wiki
{{also|Atua|'atua}}
=={{langname|cje}}==
==={{section|n}}===
{{head|cje|Danh từ}}
# [[hạn hán|Hạn hán]].
=={{langname|gl}}==
==={{section|v}}===
{{head|gl|Biến thể hình thái động từ}}
# {{gl-reinteg-verb form of|atuar}}
68blqv2sfo815u6yz19tuy3h9yggwxy
2572725
2572724
2026-10-22T13:29:32Z
Hiyuune
50834
2572725
wikitext
text/x-wiki
{{also|Atua|'atua}}
=={{langname|pt}}==
==={{section|pron}}===
{{pt-IPA}}
* {{rhymes|pt|uɐ|s=3}}
* {{hyph|pt|a|tu|a}}
==={{section|v}}===
{{head|pt|Biến thể hình thái động từ}}
# {{pt-verb form of|atuar}}
=={{langname|cje}}==
==={{section|n}}===
{{head|cje|Danh từ}}
# [[hạn hán|Hạn hán]].
=={{langname|gl}}==
==={{section|v}}===
{{head|gl|Biến thể hình thái động từ}}
# {{gl-reinteg-verb form of|atuar}}
=={{langname|lld}}==
==={{section|v}}===
{{head|lld|Biến thể hình thái động từ}}
# {{inflection of|lld|atuer||indc|pres|ở|3|s}}
# {{inflection of|lld|atuer||indc|pres|ở|3|p}}
# {{inflection of|lld|atuer||impr|ở|2|s}}
=={{langname|mi}}==
==={{section|etym}}===
Từ {{inh|mi|poz-pol-pro|*qatua}},<ref>{{R:Pollex|QATUA|qatua}}</ref> từ tiếng Trung Thái Bình Dương nguyên thủy {{m|und||*qatua}}, từ {{inh|mi|poz-oce-pro|*qatuan}},<ref>{{R:poz-oce:LPO|6|page=245}}</ref> từ {{inh|mi|pqe-pro|*qatuan}}, từ {{inh|mi|poz-cet-pro|*qatuan}}, từ {{inh|mi|poz-pro|*qatuan}}. Các từ cùng gốc bao gồm {{cog|haw|akua}}, {{cog|sm|atua}}, {{cog|ty|atua}} và {{cog|tvl|atua}}.
==={{section|pron}}===
* {{mi-IPA|atua|stress='--}}
==={{section|n}}===
{{mi-noun}}
# [[chúa|Chúa]] {{gloss|thần thánh}}.
===={{section|desc}}====
* {{desc|en|atua}}
==={{section|ref}}===
{{reflist}}
ftyxdo08xy9sfjk0r5kxt5f95976h72
počasí
0
314676
2572925
2182556
2026-10-23T08:08:36Z
Hiyuune
50834
2572925
wikitext
text/x-wiki
{{also|počasi}}
=={{langname|cs}}==
{{wp|cs:}}
==={{section|etym}}===
{{ety|cs|:inh|zlw-ocs:počěsie|:af<surf>|po-|čas|-í|text=+|tree=1}}
==={{section|pron}}===
* {{cs-IPA}}
* {{audio|cs|Cs-počasí.ogg}}
==={{section|n}}===
{{cs-noun|n}}
# [[thời tiết|Thời tiết]].
===={{section|decl}}====
{{cs-ndecl|n}}
==={{section|further}}===
* {{R:cs:PSJC}}
* {{R:cs:SSJC}}
* {{R:cs:IJP}}
{{C|cs|Thời tiết}}
ec84j0mej9w95auxj67fxhpk173tu69
aʈ
0
315651
2572730
2184190
2026-10-22T13:34:02Z
Hiyuune
50834
2572730
wikitext
text/x-wiki
=={{langname|ekl}}==
==={{section|num}}===
{{head|ekl|Số từ}}
# [[tám]].
==={{section|ref}}===
* [https://sealang.net/munda/database/retrieve.pl?language=Kol&sort=gloss&format=html Tiếng Kolhe] tại cơ sở dữ liệu Môn-Khmer.
1g8ki670srnadai6cfyxzfg1qcmfl0w
æɡaɾo
0
315654
2572731
2252518
2026-10-22T13:34:16Z
Hiyuune
50834
2572731
wikitext
text/x-wiki
=={{langname|ekl}}==
==={{ĐM|num}}===
{{head|ekl|Số từ|cat2=Số đếm}}
# [[mười một|Mười một]].
==={{ĐM|ref}}===
* [https://sealang.net/munda/database/retrieve.pl?language=Kol&sort=gloss&format=html Tiếng Kolhe] tại cơ sở dữ liệu Môn-Khmer.
i0b394e1zfrzfbtx1nfjragmgzw71lm
Mô đun:category tree/topic/Animals
828
324855
2572756
2560991
2026-10-22T14:27:56Z
Hiyuune
50834
2572756
Scribunto
text/plain
local labels = {}
labels["Động vật"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Sinh vật"},
commonscat = "Animalia",
wpcat = true,
}
labels["Acanthurus"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[surgeonfish]], [[light-horseman]], [[louvar]]s, [[scat]]s, [[rabbitfish]], [[Moorish idol]]s and other fish in the [[perciform]] [[suborder]] [[Acanthuroidei]]",
parents = {"Cá"},
}
labels["accentors"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[family]] [[Prunellidae]]",
parents = {"Bộ Sẻ"},
}
labels["accipiters"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[besra]]s, [[Cooper's hawk]]s, [[goshawk]]s, [[sharp-shinned hawk]]s, [[shikra]]s, [[sparrowhawk]]s, and other [[hawk]]s in the [[genus]] ''[[Accipiter]]''",
parents = {"birds of prey"},
}
labels["Bộ Cá tầm"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[paddlefish]], [[sturgeon]]s and other fish in the [[order]] [[Acipenseriformes]]",
parents = {"Cá"},
}
labels["adephagan beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[diving beetle]]s, [[ground beetle]]s (including [[bombardier beetle]]s and [[tiger beetle]]s), [[whirligig beetle]]s and other [[beetle]]s in the [[suborder]] [[Adephaga]]",
parents = {"beetles"},
}
labels["African insectivores"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[aardvark]]s, [[elephant shrew]]s, [[golden mole]]s, [[otter shrew]]s, [[tenrec]]s, and other [[mammal]]s in the [[clade]] [[Afroinsectiphilia]]",
parents = {"mammals"},
}
labels["agamid lizards"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[agama]]s, [[bearded dragon]]s, [[flying dragon]]s, [[frilled lizard]]s, [[moloch]]s, [[spiny-tailed lizard]]s, [[stellion]]s and other [[lizard]]s in the [[family]] [[Agamidae]]",
parents = {"Phân bộ Thằn lằn"},
}
labels["alcelaphine antelopes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blesbuck]]s, [[bontebok]]s, [[bubal]]s, [[gnu]]s or [[wildebeest]], [[hartebeest]]s, [[hirola]], [[sassaby]]s, [[topi]]s, [[tetel]]s, and other [[antelopes]] in the [[subfamily]] [[Alcelaphinae]]",
parents = {"antelopes"},
}
labels["ammonites"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[extinct]] [[cephalopod]]s in the [[subclass]] [[Ammonoidea]]",
parents = {"cephalopods"},
}
labels["Lớp Lưỡng cư"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân ngành Có xương sống"},
commonscat = "Amphibia",
wpcat = true,
}
labels["amphipods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[beach flea]]s, [[lawn shrimp]], [[scud]]s, [[side swimmer]]s, [[skeleton shrimp]], [[whale louse|whale lice]], and other [[crustacean]]s in the [[order]] [[Amphipoda]]",
parents = {"Phân ngành Giáp xác"},
}
labels["Họ Vịt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[:w:vi:Họ Vịt|họ Vịt]]: ([[vịt]], [[ngỗng]] và [[thiên nga]])",
parents = {"Chim nước"},
}
labels["annelids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[earthworm]]s, [[leech]]es, [[ragworm]]s and many other [[segment]]ed [[worm]]s in the [[phylum]] [[Annelida]]",
parents = {"worms"},
}
labels["Bộ Cá vây chân"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the [[order]] [[Lophiiformes]]",
parents = {"Cá"},
}
labels["anguimorph lizards"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[alligator lizard]]s, [[beaded lizard]]s, [[blindworm]]s, [[crocodile monitor]]s, [[galliwasp]]s, [[Gila monster]]s, [[glass lizard]]s, [[goanna]]s, [[Komodo dragon]]s, [[legless lizard]]s, [[nile monitor]]s, [[perentie]]s, [[sheltopusik]]s, [[water monitor]]s, and other [[lizards]] in the [[suborder]] [[Anguimorpha]]",
parents = {"Phân bộ Thằn lằn"},
}
labels["anomurans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=crablike [[crustacean]]s in the [[decapod]] [[infraorder]] [[Anomura]], which are closely related to the true [[crab]]s in the infraorder [[Brachyura]]",
parents = {"Phân ngành Giáp xác", "Bộ Mười chân"},
}
labels["anteaters and sloths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[order]] [[Pilosa]]",
parents = {"mammals"},
}
labels["antelopes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Guốc chẵn"},
}
labels["antilopine antelopes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blackbuck]]s, [[chinkara]]s, [[dibatag]]s, [[dik-dik]]s, [[gazelle]]s, [[gerenuk]]s, [[grysbok]]s, [[klipspringer]]s, [[oribi]]s, [[royal antelope]]s, [[saiga]]s, [[springbok]]s, [[steenbok]]s, [[zeren]], and other [[antelope]]s in the [[bovid]] [[subfamily]] [[Antilopinae]]",
parents = {"antelopes"},
}
labels["ants"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"hymenopterans"},
}
labels["antshrikes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"suboscines", "perching birds"},
}
labels["Anuran"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[amphibian]]s in the [[order]] [[Anura]], which are short-bodied and without tails, having long hind legs adapted for leaping that are typically folded at rest. Anurans are mostly known as [[frog]]s or [[toad]]s",
parents = {"Lớp Lưỡng cư"},
}
labels["Aphid"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s in the [[superfamily]] [[Aphidoidea]]",
parents = {"Bộ Cánh nửa"},
}
labels["apodiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hummingbird]]s, [[needletail]]s, [[spinetail]]s, [[swift]]s, [[swiftlet]]s, [[treeswift]]s, and other [[bird]]s in the [[order]] [[Apodiformes]]",
parents = {"birds"},
}
labels["Lớp Hình nhện"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Chân đốt"},
}
labels["araneoid spiders"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bird dropping spider]]s, [[cobweb spiders]] (including [[black widow]]s and [[redback]]s), [[orbweaver]]s (including [[cross spider]]s and [[writing spider]]s), [[long-jawed spider]]s, [[money spider]]s, [[nesticid]]s, [[pimoid]], [[pirate spider]]s, [[tetragnathid]]s and other [[spider]]s in the [[superfamily]] [[Araneoidea]]",
parents = {"spiders"},
}
labels["argentiniform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[argentine]]s, [[barreleye]]s, [[blacksmelt]]s, [[smoothtongue]]s and other fish in the [[order]] [[Argentiniformes]]",
parents = {"fish"},
}
labels["armadillos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"mammals"},
}
labels["Ngành Chân đốt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Động vật"},
commonscat = "Arthropoda",
wpcat = true,
}
labels["aschizan flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[fly|flies]] in the [[dipteran]] [[section]] [[Aschiza]]",
parents = {"dipterans"},
}
labels["asilomorph flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bee fly|bee flies]], [[dance fly|dance flies]], [[Mydas fly|Mydas flies]], [[robber fly|robber flies]], [[stiletto fly|stiletto flies]], [[window fly|window flies]] and other [[fly|flies]] in the [[dipteran]] [[infraorder]] [[Asilomorpha]]",
parents = {"dipterans"},
}
labels["assassin bugs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ambush bug]]s, [[assassin bug]]s, [[corsair]]s, [[feather-legged bug]]s, [[kissing bug]]s or [[conenose bug]]s, [[masked hunter]]s, [[wheel bug]]s, and other [[true bug]]s in the [[family]] [[Reduviidae]]",
parents = {"true bugs"},
}
labels["astacideans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crustacean]]s in the [[decapod]] [[infraorder]] [[Astacidea]], including the original [[species]] known as [[crayfish]] and [[lobster]]s, and their relatives",
parents = {"Phân ngành Giáp xác", "Bộ Mười chân"},
}
labels["atheriniform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blue-eye]]s, [[hardyhead]]s, [[grunion]], [[jacksmelt]], [[rainbowfish]], [[silverside]]s, [[zona]], and other fish in the [[order]] [[Atheriniformes]]",
parents = {"fish"},
}
labels["Alcidae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[auk]]s, [[guillemot]]s, [[murre]]s, [[puffin]]s, [[razorbill]]s, and other [[seabird]]s in the family [[Alcidae]]",
parents = {"Chim biển"},
}
labels["Bộ Cá răng kiếm"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[daggertooth]]s, [[lancetfish]], [[sergeant baker]]s, [[greeneye]]s, [[telescopefish]], [[lizardfish]] and other fish in the [[order]] [[Aulopiformes]]",
parents = {"Cá"},
}
labels["Australasian robins"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[passerine]] [[family]] [[Petroicidae]], which are not closely related to the [[European robin]] (an [[Old World flycatcher]] in the family [[Muscicapidae]]), or the [[American robin]] (a [[thrush]] in the family [[Turdidae]])",
parents = {"perching birds"},
}
labels["động vật khi nhỏ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"động vật"},
}
labels["bandicoots and bilbies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[peramelid]]s, [[bandicoot]]s, [[marl]]s, [[quenda]]s, [[chaeropodid]]s, [[pig-footed bandicoot]]s, [[thylacomyid]]s, [[bilby|bilbies]], [[dalgite]]s, [[rabbit-eared bandicoot]]s, [[philander]]s, [[pinkie]]s, and other [[marsupial]]s in the [[order]] [[Peramelemorphia]]",
parents = {"marsupials"},
}
labels["barklice"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=non-[[parasitic]] [[insect]]s in the [[order]] [[Psocodea]]",
parents = {"insects"},
}
labels["barnacles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crustacean]]s in the [[infraclass]] [[Cirripedia]], including the parasitic [[rhizocephalan]]s",
parents = {"Phân ngành Giáp xác"},
}
labels["bats"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"mammals"},
}
labels["bees"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"hymenopterans", "beekeeping"},
}
labels["beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"insects"},
}
labels["Bộ Cá nhói"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ballyhoo]], [[flying fish]], [[garfish]], [[halfbeak]]s, [[houndfish]], [[mackerel pike]]s, [[medaka]]s, [[needlefish]], [[ricefish]], [[saury|sauries]], [[silver gar]], and other fish in the [[order]] [[Beloniformes]]",
parents = {"Cá"},
}
labels["bibionomorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[March fly|March flies]], [[cecidomyiid]] [[gall midge]]s, [[keroplatid]] [[fungus gnat]]s, [[mycetophilid]]s, [[sciarid]]s and other [[fly|flies]], [[gnat]]s and [[midge]]s in the [[dipteran]] [[infraorder]] [[Bibionomorpha]]",
parents = {"dipterans"},
}
labels["Lớp Chim"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân ngành Có xương sống"},
commonscat = "Aves",
wpcat = true,
}
labels["Chim săn mồi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds that live by [[predatory]] hunting, and from [[carrion]]",
parents = {"Lớp Chim"},
}
labels["bivalves"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[clam]]s, [[cockle]]s, [[mussel]]s, [[oyster]]s, [[scallop]]s and other [[mollusk]]s in the [[class]] [[Bivalvia]]",
parents = {"Ngành Thân mềm"},
}
labels["blennies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blenny|blennies]], [[chaenopsid]]s, [[clinid]]s, [[dactyloscopid]]s, [[klipfish]], [[labrisomid]]s, [[triplefin]]s, [[weedfish]] and other fish in the [[perciform]] [[suborder]] [[Blennioidei]]",
parents = {"fish"},
}
labels["boas"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[snake]]s in the family [[Boidae]]",
parents = {"Phân bộ Rắn"},
}
labels["bostrichiform beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[carpet beetle]]s, [[deathwatch beetle]]s, [[drugstore beetle]]s, [[museum beetle]]s, [[powder-post beetle]]s, and other [[anobiid]]s/[[ptinid]]s, [[bostrichid]]s, [[dermestid]]s, [[derodontid]]s, [[jacobsoniid]]s and [[nosodendrid]]s in the [[coleopteran]] [[infraorder]] [[Bostrichiformia]]",
parents = {"beetles"},
}
labels["bovines"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Guốc chẵn"},
}
labels["brachiopods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[animal]]s in the [[phylum]] [[Brachiopoda]]. <u>Note</u>: not to be confused with [[branchiopod]]s, which are [[crustacean]]s",
parents = {"animals"},
}
labels["branchiopods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[[brine shrimp]], [[clam shrimp]], [[fairy shrimp]], [[tadpole shrimp]], [[water flea]]s, and other [[crustacean]]s in the [[class]] [[Branchiopoda]]. <u>Note</u>: not to be confused with [[brachiopod]]s, which are a separate [[phylum]]",
parents = {"Phân ngành Giáp xác"},
}
labels["bryozoans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[animal]]s in the [[phylum]] [[Bryozoa]], also known as [[Ectoprocta]]",
parents = {"animals"},
}
labels["bulbuls"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bulbul]]s, [[greenbul]]s, [[brownbul]]s, [[leaflove]]s, [[bristlebill]]s, and other birds in the [[passerine]] [[family]] [[Pycnonotidae]]",
parents = {"perching birds"},
}
labels["buteos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hawk]]s in the [[genus]] ''[[Buteo]]'', known as [[buzzard]]s in Europe",
parents = {"birds of prey"},
}
labels["Bướm ngày"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Côn trùng"},
}
labels["caddis flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the order [[Trichoptera]], which are closely related to the [[butterfly|butterflies]] and [[moth]]s but with hairs on their wings instead of scales, and which have [[aquatic]] [[larvae]] that live in cases that they build around themselves",
parents = {"insects"},
}
labels["caecilians"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[amphibian]]s in the [[order]] [[Gymnophiona]], which are legless and resemble [[earthworm]]s or [[snake]]s",
parents = {"amphibians"},
}
labels["Họ Lạc đà"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=động vật thuộc họ [[lạc đà]]",
parents = {"Lớp Thú", "Bộ Guốc chẵn"},
}
labels["Họ Chó"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Ăn thịt"},
}
labels["Caprinae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sheep]], [[goat]]s, [[goat antelope]]s, [[chamois]], [[muskox]]en, [[bharal]], [[goral]], [[ibex]], [[mouflon]], [[serow]], [[tahr]], [[tur]], [[takin]] and other animals in the [[bovid]] [[subfamily]] [[Caprinae]], formerly known as the [[family]] Capridae",
parents = {"Bộ Guốc chẵn"},
}
labels["caprimulgiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[caprimulgiform]]s: birds in the taxonomic order [[Caprimulgiformes]]- the [[nightjar]]s, [[oilbird]]s, [[frogmouth]]s, [[potoo]]s, etc",
parents = {"birds"},
}
labels["carcharhiniform sharks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bull shark]]s, [[catshark]]s, [[gummy shark]]s, [[hammerhead]]s, [[leopard shark]]s, [[morgay]]s, [[requiem shark]]s, [[tiger shark]]s, [[tope]]s, [[whaler]]s, [[whitetip]]s and other sharks in the [[order]] [[Carcharhiniformes]]",
parents = {"Liên bộ Cá mập"},
}
labels["cardinalids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cardinal]]s, [[dickcissel]]s, [[indigo bunting]]s, [[pyrrhuloxia]]s, [[rose-breasted grosbeak]]s, [[scarlet tanager]]s, and other birds in the [[family]] [[Cardinalidae]]",
parents = {"perching birds"},
}
labels["caridean shrimp"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crustacean]]s in the [[decapod]] [[infraorder]] [[Caridea]], mostly known as [[shrimp]] or [[prawn]]s",
parents = {"Phân ngành Giáp xác", "Bộ Mười chân"},
}
labels["Bộ Ăn thịt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bear]]s, [[cat]]s, [[civet]]s, [[dog]]s, [[fossa]]s, [[hyaena]]s, [[mongoose]]s, [[panda]]s, [[raccoon]]s, [[seal]]s, [[skunk]]s, [[weasel]]s and various other [[mammal]]s in the [[order]] [[Carnivora]]",
parents = {"Lớp Thú"},
}
labels["Cá chép"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the [[subfamily]] [[Cyprininae]], the [[carps]] and [[goldfish]]",
parents = {"Họ Cá chép"},
}
labels["Bộ Cá da trơn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Cá", "Otomorpha"},
}
labels["Mèo"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cat]]s in the sense of members of the genus ''[[Felis]]''",
parents = {"Họ Mèo"},
commonscat = "Felis silvestris catus",
wpcat = true,
}
labels["cattle"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"bovines", "gia súc"},
}
labels["caviomorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[agouti]]s, [[capybara]]s, [[chinchilla]]s, [[guinea pig]]s, [[New World porcupine]]s, [[nutria]]s, [[tuco-tuco]]s and other [[rodent]]s in the parvorder [[Caviomorpha]]",
parents = {"Bộ Gặm nhấm"},
}
labels["Lớp Chân đầu"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Thân mềm"},
}
labels["cercopithecin monkeys"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blue monkey]]s, [[Diana monkey]]s, [[guenon]]s, [[lesula]]s, [[malbrouck]]s, [[patas monkey]]s, [[talapoin]]s, [[vervet]]s, and other [[Old World monkey]]s in the [[cercopithecine]] [[tribe]] [[Cercopithecini]]",
parents = {"Old World monkeys"},
}
labels["Liên họ Đuôi cứng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[passerine]] [[superfamily]] [[Certhioidea]], the [[treecreeper]]s, [[nuthatch]]es, [[gnatcatcher]]s and [[wren]]s",
parents = {"Bộ Sẻ"},
}
labels["Họ Hươu nai"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Guốc chẵn"},
}
labels["Phân thứ bộ Cá voi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cetacean]]s ([[dolphin]]s, [[whale]]s and [[porpoise]]s)",
parents = {"Bộ Guốc chẵn"},
}
labels["chalcidoid wasps"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[chalcidid]]s, [[encyrtid]]s, [[fig wasp]]s, [[jointworm]]s, [[mymarid]] [[fairyfly|fairyflies]], [[perilampid]]s, [[torymid]]s, [[trichogramma]]s, and other [[wasp]]s in the [[superfamily]] [[Chalcidoidea]]",
parents = {"hymenopterans"},
}
labels["Characidae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the order [[Characiformes]]",
parents = {"Cá", "Otomorpha"},
}
labels["Gà"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Gia cầm", "Bộ Gà"},
}
labels["chimaeras (fish)"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cartilaginous]] fish in the [[Chimaeriformes]], the only surviving [[order]] of the [[subclass]] [[Holocephali]], and separate from the [[shark]]s, [[ray]]s, [[skate]]s and [[sawfish]] of the subclass [[Elasmobranchii]]",
parents = {"fish"},
}
labels["Ngành Dây sống"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=animals in the [[phylum]] [[Chordata]]",
parents = {"Động vật"},
}
labels["chrysomeloid beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cerambycid]]s or [[longhorn beetle]]s such as [[apple borer]]s, [[huhu beetle]]s, [[locust borer]]s and [[thunderbolt beetle]]s, as well as [[chrysomelid]]s or [[leaf beetle]]s such as [[asparagus beetle]]s, [[bean weevil]]s, [[Colorado beetle]]s, [[cucumber beetle]]s, [[flea beetle]]s, [[potato beetle]]s, and other [[beetle]]s in the [[superfamily]] [[Chrysomeloidea]]",
parents = {"beetles"},
}
labels["cicadas"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s in the [[superfamily]] [[Cicadoidea]]",
parents = {"hemipterans"},
}
labels["cichlids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Cichlidae]]",
parents = {"labroid fish"},
}
labels["clinids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Clinidae]]",
parents = {"fish"},
}
labels["Ngành Thích ty bào"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[coral]]s, [[gorgonian]]s, [[hydra]]s, [[myxozoan]]s, [[Portuguese man-of-war]], [[sea anemone]]s, [[sea fir]]s, [[sea wasp]]s, and other animals in the in the [[phylum]] [[Cnidaria]]",
parents = {"Động vật"},
wpcat = true,
}
labels["Phân ngành San hô"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "một phân ngành động vật không xương sống [[thủy sinh]] bao gồm [[hải quỳ]], [[:w:vi:Bộ San hô cứng|san hô đá]] và san hô mềm, thuộc ngành [[:w:vi:Ngành Thích ty bào|Ngành Thích ty bào]] (Cnidaria)",
parents = {"Ngành Thích ty bào"},
wpcat = true,
commonscat = "Anthozoa",
}
labels["cockatoos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crested]] [[parrot]]s in the [[family]] [[Cacatuidae]]",
parents = {"parrots"},
}
labels["cockroaches"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"insects"},
}
labels["colobine monkeys"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[colobus]]es, [[douc]]s, [[langur]]s, [[guereza]]s, [[hanuman]]s,[[leaf monkey]]s, [[lutung]]s, [[proboscis monkey]]s, and other [[Old World monkey]]s in the [[subfamily]] [[Colobinae]]",
parents = {"Old World monkeys"},
}
labels["colubrid snakes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[snake]]s in the family [[Colubridae]]",
parents = {"Phân bộ Rắn"},
}
labels["colugos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=the [[primate]]-like [[gliding]] [[mammal]]s in the [[order]] [[Dermoptera]], also known as [[flying lemur]]s",
parents = {"mammals"},
}
labels["columbids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[columbid]]s, i.e. [[pigeon]]s and [[dove]]s",
parents = {"birds"},
}
labels["copepods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crustacean]]s in the [[subclass]] [[Copepoda]]",
parents = {"Phân ngành Giáp xác"},
}
labels["coraciiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bee-eater]]s, [[ground rollers]], [[kingfisher]]s, [[motmot]]s, [[roller]]s, [[tody|todies]] and other birds in the taxonomic order [[Coraciiformes]]",
parents = {"birds"},
}
labels["corvids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"perching birds", "corvoid birds"},
}
labels["corvoid birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[apostlebird]]s, [[bird of paradise|birds of paradise]], [[crow]]s, [[drongo]]s, [[fantail]]s, [[grinder]]s, [[jackdaw]]s, [[jay]]s, [[magpie]]s, [[magpie-lark]]s, [[manucode]]s, [[monarchid]]s, [[nutcracker]]s, [[piwakawaka]]s, [[raven]]s, [[restless flycatcher]]s, [[riflebird]]s, [[shrike]]s, [[standard-wing]]s, and other birds in the [[superfamily]] [[Corvoidea]]",
parents = {"perching birds"},
}
labels["cotingas"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[suboscine]] [[family]] [[Cotingidae]]",
parents = {"suboscines"},
}
labels["crabs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crab]]s, [[decapod]] [[crustacean]]s in the [[infraorder]] [[Brachyura]]",
parents = {"Phân ngành Giáp xác", "Bộ Mười chân"},
}
labels["cranes (birds)"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crane]]s",
parents = {"gruiforms"},
}
labels["cricetids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cotton rat]]s, [[deer mouse|deer mice]], [[hamster]]s, [[harvest mouse|harvest mice]], [[lemming]]s, [[vole]]s, [[woodrat]]s, and other [[rodent]]s in the [[family]] [[Cricetidae]]",
parents = {"Bộ Gặm nhấm"},
}
labels["crickets and grasshoppers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cricket]]s, [[grasshopper]]s, [[katydid]]s, [[weta]]s and other [[insect]]s in the order [[Orthoptera]]",
parents = {"insects"},
}
labels["croakers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[croaker]]s, [[drum]]s, [[weakfish]]s and other fish in the family [[Sciaenidae]]",
parents = {"percoid fish"},
}
labels["Bộ Cá sấu"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crocodile]]s, [[alligator]]s, [[caymans]], and other [[reptile]]s in the order [[Crocodilia]]",
parents = {"Lớp Bò sát"},
}
labels["Phân ngành Giáp xác"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Chân đốt"},
}
labels["cuckoos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cuckoo]]s and other birds in the [[family]] [[Cuculidae]]",
parents = {"otidimorph birds"},
}
labels["cuckooshrikes and minivets"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[family]] [[Campephagidae]]",
parents = {"perching birds"},
}
labels["cucujoid beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[flower beetle]]s, [[fungus beetle]]s, [[grain beetle]]s, [[lady beetle]]s, [[lizard beetle]]s, [[Mexican bean beetle]]s, and other [[beetle]]s in the [[superfamily]] [[Cucujoidea]]",
parents = {"beetles"},
}
labels["Ngành Sứa lược"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=animals in the [[phylum]] [[Ctenophora]], the [[comb jelly|comb jellies]]",
parents = {"Động vật"},
}
labels["culicomorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[biting midge]]s, [[blackfly|blackflies]], [[blood worm]]s, [[glassworm]]s, [[meniscus midge]]s, [[mosquito]]s, [[no-see-um]]s, [[non-biting midge]]s, [[phantom midge]]s and other [[insect]]s in the [[dipteran]] [[infraorder]] [[Culicomorpha]]",
parents = {"dipterans"},
}
labels["Họ Cá chép"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[carp]], [[minnow]]s, [[chub]]s and other fish in the [[family]] [[Cyprinidae]]. In some classifications, this group is known as the [[superfamily]] [[Cyprinoidea]] or [[suborder]] [[Cyprinoidei]], with the [[cyprinid]] [[subfamily|subfamilies]] considered to be families",
parents = {"Cá", "Otomorpha"},
}
labels["Phân họ Vịt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[gadwall]]s [[garganey]]s, [[mallard]]s, [[mottled duck]]s, [[pintail]]s, [[shoveler]]s, [[teal]]s, [[wigeon]]s and other ducks in either the [[anatid]] [[tribe]] [[Anatini]] or [[subfamily]] [[Anatinae]], depending on the classification",
parents = {"Vịt"},
}
labels["damselflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bluestreak]]s, [[bluetail]]s, [[demoiselle]]s, [[flatwing]]s, [[redtail]]s, [[riverdamsel]]s, [[rubyspot]]s, [[spreadwing]]s, [[threadtail]]s, [[whitetip]]s, and other insects in the [[odonate]] [[suborder]] [[Zygoptera]]",
parents = {"dragonflies and damselflies"},
}
labels["danaine butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[clearwing]]s, [[crow]]s, [[milkweed]]s, [[monarch]]s, [[paper kite butterfly|paper kite butterflies]], [[tiger]]s, [[wanderer]]s and other [[butterfly|butterflies]] in the [[nymphalid]] [[subfamily]] [[Danainae]]",
parents = {"nymphalid butterflies"},
}
labels["dasyuromorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[thylacine]]s, [[numbat]]s, [[dasyure]]s, [[antechinus]]es, [[dibbler]]s, [[dunnart]]s, [[mulgara]]s. [[phascogale]]s, [[planigale]]s, [[quoll]]s, [[Tasmanian devil]]s, and other [[marsupial]]s in the [[order]] [[Dasyuromorphia]]",
parents = {"marsupials"},
}
labels["Bộ Mười chân"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crabs]], [[crayfish]], [[lobster]]s, [[prawn]]s, ([[caridean]]) [[shrimp]], and many other [[crustacean]]s in the [[order]] [[Decapoda]]",
parents = {"Phân ngành Giáp xác"},
}
labels["delphinids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=(oceanic) [[dolphin]]s, [[grampus]]es, [[killer whale]]s/[[orca]]s, [[pilot whale]]s, and other [[cetacean]]s in the [[family]] [[Delphinidae]]",
additional = "Note: [[river dolphin]]s and [[porpoise]]s are in other families.",
parents = {"Phân thứ bộ Cá voi"},
}
labels["designer dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"dogs"},
commonscat = true,
wpcat = true,
}
labels["dinosaurs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"reptiles"},
}
labels["dionychan spiders"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crab spider]]s, [[flattie]]s, [[ground spider]]s, [[huntsman spider]]s, [[jumping spider]], [[scorpion spider]]s, and other [[spiders]] in the [[entelegyne]] [[clade]] [[Dionycha]]",
parents = {"spiders"},
}
labels["dipterans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[fly|flies]], [[gnat]]s, [[midge]]s, [[mosquito]]s and other [[insect]]s in the order [[Diptera]]",
parents = {"insects"},
}
labels["Chó"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Chó"},
commonscat = true,
wpcat = true,
}
labels["Mèo nhà"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Mèo"},
}
labels["dragonflies and damselflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the order [[Odonata]]",
parents = {"insects"},
}
labels["Vịt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Vịt", "Gia cầm"},
}
labels["dugongs and manatees"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the order [[Sirenia]]",
parents = {"mammals"},
}
labels["Đại bàng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chim săn mồi"},
}
labels["earthworms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=worms in the [[annelid]] [[suborder]] [[Lumbricina]]",
parents = {"annelids"},
}
labels["earwigs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the order [[Dermaptera]]",
parents = {"insects"},
}
labels["echinoderms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"animals"},
commonscat = "Echinodermata",
wpcat = true,
}
labels["eels"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[eel]]s, elongated, snakelike fish in the order [[Anguilliformes]]",
parents = {"elopomorph fish"},
}
labels["elapid snakes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cobra]]s, [[coral snake]]s, [[krait]]s, [[mamba]]s, [[sea snake]]s, and other [[venomous]] snakes in the family [[Elapidae]]",
parents = {"Phân bộ Rắn"},
}
labels["elateroid beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[click beetle]]s/[[elaterid]]s, [[fire beetle]]s, [[firefly|fireflies]]/[[lampyrid]]s, [[glowworm]]s, [[net-winged beetle]]s/[[lycid]]s, [[railroad worm]]s/[[phengodid]]s, [[soldier beetle]]s/[[cantharid]]s, [[throscid]]s, [[wireworm]]s and other [[beetle]]s in the [[superfamily]] [[Elateroidea]]",
parents = {"beetles"},
}
labels["Họ Voi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Thú"},
commonscat = "Elephantidae",
wpcat = true,
}
labels["elopomorph fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bonefish]], [[eel]]s, [[gulper eel]]s, [[halosaur]]s, [[ladyfish]], [[tarpon]] and other fish in the [[superorder]] [[Elopomorpha]]",
parents = {"fish"},
}
labels["emberizids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bunting]]s, [[yellowhammer]]s and related birds in the [[passerine]] family [[Emberizidae]]",
additional = "<u>Note</u>: for New World species that were formerly classified in this family, see [[:Category:{{{langcode}}}:New World sparrows]].",
parents = {"perching birds"},
}
labels["emydid turtles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=(North American) [[box turtle]]s, [[chicken turtle]]s, [[cooter]]s, [[ellachick]]s, [[pond turtle]]s, [[slider]]s, [[terrapin]]s, and other [[turtle]]s in the [[family]] [[Emydidae]]",
parents = {"turtles"},
}
labels["Họ Ngựa"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Guốc lẻ"},
}
labels["erinaceids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[erinaceid]]s – hedgehogs and relatives",
parents = {"mammals"},
}
labels["Eupleridae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[euplerid]]s — mongoose-like mammals found in Madagascar",
parents = {"Bộ Ăn thịt"},
}
labels["Bộ Guốc chẵn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[order]] [[Artiodactyla]]",
parents = {"Lớp Thú"},
}
labels["Họ Cắt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[caracara]]s, [[falcon]]s, [[hobby|hobbies]], [[kestrel]]s, [[lanner]]s, [[merlin]]s, [[saker]]s, and other birds in the [[family]] [[Falconidae]]",
parents = {"Chim săn mồi"},
}
labels["Họ Mèo"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Ăn thịt"},
}
labels["female animals"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"animals", "female"},
}
labels["Cá"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân ngành Có xương sống"},
commonscat = "Fish",
wpcat = true,
}
labels["flamingos"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chim nước"},
}
labels["flatfish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sole]]s, [[flounder]]s, [[halibut]]s and other fish in the order [[Pleuronectiformes]]",
parents = {"fish"},
}
labels["flatworms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[fluke]]s, [[monogenean]]s, [[planarian]]s, [[polyclad]]s, [[tapeworm]]s, and other animals in the [[phylum]] [[Platyhelminthes]]",
additional = "For terms related to the study of [[parasitic]] [[worm#Noun|worms]], see [[:Category:Helminthology]] and its subcategories.",
parents = {"worms"},
}
labels["Bộ Bọ chét"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Côn trùng"},
}
labels["Bộ Gà"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[fowl]]s: land birds in the [[order]] [[Galliformes]]",
parents = {"Lớp Chim"},
}
labels["Cáo"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Chó"},
}
labels["Chim nước"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds that live mainly in [[freshwater]] areas, including [[estuaries]]",
parents = {"Lớp Chim"},
}
labels["freshwater whitefish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cisco]]s, [[houting]]s, [[inconnu]]s, [[lavaret]]s, [[marena]]s, [[omul]]s, [[Otsego bass]], [[peled]]s, [[pollan]]s, [[roundfish]], [[tullibee]]s, [[vendace]]s, [[whitefish]] and other fish in the [[salmonid]] [[subfamily]] [[Coregoninae]]",
parents = {"Họ Cá hồi"},
}
labels["Bộ Không đuôi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Anuran"},
}
labels["gadiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cod]], [[haddock]], [[hake]] and other fish in the [[order]] [[Gadiformes]]",
parents = {"fish"},
}
labels["gasterosteiform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[stickleback]]s, [[hypoptychid]] [[sand eel]]s, [[tubesnout]]s and other fish in the [[order]] [[Gasterosteiformes]]",
additional = "Note: See [[:Category:Syngnathiform fish]] for a group formerly included within this order.",
parents = {"fish"},
}
labels["Lớp Chân bụng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Thân mềm"},
}
labels["họ Tắc kè"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "Mục từ {{{langname}}} thuộc chủ đề họ Tắc kè, một họ các loài thằn lằn cổ nhất trong nhóm thằn lằn hiện đại.",
parents = {"Phân bộ Thằn lằn"},
}
labels["ngỗng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Vịt", "Gia cầm"},
}
labels["geometrid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[carpet]]s, [[engrailed]]s, [[heath]]s, [[pug]]s, [[peppered moth]]s, [[streak]]s, [[wave]]s and other [[moth]]s in the [[family]] [[Geometridae]], most of which have [[caterpillar]]s known as [[inchworm]]s, [[looper]]s, [[measuring worm]]s or [[spanworm]]s",
parents = {"moths"},
}
labels["dê"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Caprinae", "gia súc"},
}
labels["gobies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[goby|gobies]], [[dartfish]], [[mudskipper]]s, [[sea gudgeon]]s, [[sleeper]]s, [[wormfish]], and other [[fish]] in the [[perciform]] [[suborder]] [[Gobioidei]]",
parents = {"fish"},
}
labels["gossamer-winged butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blue]]s, [[copper]]s, [[elfin]]s, [[harvester]]s, [[hairstreak]]s, [[sunbeam]]s and other [[butterfly|butterflies]] in the [[family]] [[Lycaenidae]]",
parents = {"Bướm ngày"},
}
labels["grebes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chim nước"},
}
labels["Gà gô"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blackcock]]s, [[capercaillie]]s, [[grouse]], [[moorcock]]s, [[prairie chicken]]s, [[ptarmigan]]s, [[sagehen]]s, and other birds in the [[phasianid]] [[subfamily]] [[Tetraoninae]]",
parents = {"Bộ Gà"},
}
labels["gruiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[coot]]s, [[crake]]s, [[crane]]s, [[finfoot]]s, [[flufftail]]s, [[gallinule]]s, [[limpkin]]s, [[rail]]s, [[sungrebe]]s, [[trumpeter]]s, and other birds in the [[order]] [[Gruiformes]]",
parents = {"Chim nước"},
}
labels["gulls"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[gull]]s, [[seabird]]s in the [[family]] [[Laridae]]",
parents = {"Chim biển"},
}
labels["gun dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó săn"},
}
labels["hares"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"lagomorphs"},
}
labels["Bộ Cánh nửa"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[aphid]]s, [[leafhopper]]s, [[scale insect]]s, [[true bug]]s, [[whitefly|whiteflies]], and other [[insect]]s in the order [[Hemiptera]]",
parents = {"Lớp Côn trùng"},
}
labels["herding dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"pastoral dogs"},
}
labels["herons"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[heron]]s, [[bittern]]s and [[egret]]s",
parents = {"Chim nước"},
}
labels["Họ Cầy lỏn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[herpestid]]s- mongooses, meerkats, and relatives",
parents = {"Bộ Ăn thịt"},
}
labels["Họ Cá trích"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[herring]]s, [[shad]]s, [[sardine]]s and other fish in the family [[Clupeidae]]",
parents = {"Cá", "Otomorpha"},
}
labels["holostean fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[gar]]s and [[bowfin]]s, primitive fish in the [[infraclass]] [[Holostei]]",
parents = {"fish"},
}
labels["hominids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Linh trưởng"},
}
labels["honeyeaters"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=Australian [[chat]]s, [[bellbird]]s, [[friarbird]]s, [[gibberbird]]s, [[honeyeater]]s, [[miner]]s, [[spinebill]]s, [[wattlebird]]s, and other birds in the [[family]] [[Meliphagidae]]",
parents = {"meliphagoid birds"},
}
labels["hoopoes and hornbills"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hoopoe]]s, [[woodhoopoe]]s (including [[scimitarbill]]s), [[hornbill]]s, [[ground hornbill]]s, and other birds in the taxonomic order [[Bucerotiformes]]",
parents = {"birds"},
}
labels["horseflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blind-fly|blind-flies]], [[breezefly|breezeflies]], [[cleg]]s, [[deerfly|deerflies]], [[forest fly|forest flies]], [[gadfly|gadflies]], [[horsefly|horseflies]], [[oxfly|oxflies]], [[zimb]]s, and other biting flies in the [[family]] [[Tabanidae]]",
parents = {"dipterans"},
}
labels["horse breeds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngựa"},
commonscat = true,
wpcat = true,
}
labels["Ngựa"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Ngựa", "gia súc"},
}
labels["hummingbirds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"apodiforms"},
}
labels["Chó săn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó"},
}
labels["hyaenids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Ăn thịt"},
}
labels["hydrozoans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bluebottle]]s, [[calycophoran]]s, [[filiferan]]s, [[hydra]]s, [[hydractinian]]s, [[leptothecate]]s, [[narcomedusa]]s, [[pandeid]]s, [[physonect]]s, [[plumularian]]s, [[Portuguese man-of-war]]s, [[siphonophore]]s, [[stylaster]]s, [[sea fir]]s, [[sea ginger]], [[trachylid]]s, [[trachymedusa]]s, amd other animals in the [[cnidarian]] [[class]] [[Hydrozoa]]",
parents = {"cnidarians"},
}
labels["hymenopterans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ant]]s, [[bee]]s, [[ichneumon wasp]]s, [[sawfly|sawflies]], [[wasp]]s and other [[insect]]s in the order [[Hymenoptera]]",
parents = {"insects"},
}
labels["hyraxes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"mammals"},
}
labels["ibises and spoonbills"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ibis]]es and [[spoonbill]]s",
parents = {"Chim nước"},
}
labels["ichthyosauromorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ichthyosaurs]] and related groups of [[extinct]] [[aquatic]] [[reptile]]s in the [[clade]] [[Ichthyosauromorpha]]",
parents = {"reptiles"},
}
labels["icterids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[New World]] [[passerine]] family [[Icteridae]]",
parents = {"perching birds"},
}
labels["iguanoid lizards"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[anole]]s, [[basilisk]]s, [[collared lizard]]s, [[chuckwalla]]s, [[fence lizard]]s, [[fringe-toed lizard]]s, [[horned lizard]]s, [[iguana]]s, [[leopard lizard]]s, [[side-blotched lizard]]s, [[zebra-tailed lizard]]s and other [[lizard]]s formerly included in the [[family]] [[Iguanidae]], and now mostly treated as comprising either the [[infraorder]] [[Pleurodonta]] or the [[superfamily]] [[Iguanoidea]]",
parents = {"Phân bộ Thằn lằn"},
}
labels["Lớp Côn trùng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Chân đốt"},
}
labels["isopods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[gribble]]s, [[pillbug]]s, [[salve bug]]s, [[slater]]s, [[sea slater]]s, [[sowbug]]s, [[woodlouse|woodlice]], and other [[crustacean]]s in the [[order]] [[Isopoda]]",
parents = {"Phân ngành Giáp xác"},
}
labels["jackfish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[jack]]s, [[pompano]]s, [[jack mackerel]]s, [[scad]]s and other fish in the family [[Carangidae]]",
parents = {"percoid fish"},
}
labels["jawless fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[lamprey]]s and [[hagfish]]: primitive eel-like fishes that have no jaws",
parents = {"fish"},
}
labels["kingfishers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"coraciiforms"},
}
labels["kites (birds)"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hawk]]s in the [[accipitrid]] [[subfamily|subfamilies]] [[Milvinae]] and [[Elaninae]], as well as some in the subfamily [[Perninae]]",
parents = {"birds of prey"},
}
labels["kyphosid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blackfish]], [[drummer]]s, [[footballer]]s, [[greenfish]], [[halfmoon]]s, [[luderick]]s, [[mado]]s, [[moonlighter]]s, [[nibbler]]s, [[opaleye]]s, [[sea chub]]s, [[stripey]]s, [[sweep]]s and other fish in the [[percoid]] [[family]] [[Kyphosidae]]",
parents = {"percoid fish"},
}
labels["labroid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[anemonefish]], [[cale]]s, [[cichlid]]s, [[clownfish]], [[damselfish]], [[parrotfish]], [[surfperch]], [[wrasse]]s, and other fish in the [[perciform]] [[suborder]] [[Labroidei]]",
parents = {"fish"},
}
labels["labyrinth fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[climbing perch]], [[gourami]]s, [[paradisefish]], [[Siamese fighting fish]] and other fish in the [[suborder]] [[Anabantoidei]]",
parents = {"fish"},
}
labels["lacertoid lizards"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[amphisbaena]]s, [[caiman lizard]]s, [[green lizard]]s, [[ocellated lizard]]s, [[racerunner]]s, [[rock lizard]]s, [[tegu]]s, [[teiid]]s, [[thunderworm]]s, [[viviparous lizard]]s, [[wall lizard]]s, [[whiptail]]s, and other [[lizard]]s in the [[superfamily]] [[Lacertoidea]]",
parents = {"Phân bộ Thằn lằn"},
}
labels["Bộ Thỏ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Thú"},
}
labels["lamniform sharks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[basking shark]]s, [[goblin shark]]s, [[great white shark]]s, [[mako shark]]s, [[megamouth shark]]s, [[porbeagle]]s, [[sand shark]]s, [[thresher shark]]s, and other [[shark]]s in the [[order]] [[Lamniformes]]",
parents = {"Liên bộ Cá mập"},
}
labels["lampriform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[crestfish]], [[oarfish]], [[opah]]s, [[ribbonfish]], [[velifer]]s and other fish in the [[order]] [[Lampridiformes]] (not to be confused with the unrelated [[lamprey]]s)",
parents = {"fish"},
}
labels["larks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"perching birds"},
}
labels["laughingthrushes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[family]] [[Leiothrichidae]]",
parents = {"perching birds"},
}
labels["leaf warblers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the family [[Phylloscopidae]]",
parents = {"warblers"},
}
labels["lesser apes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[gibbon]]s (including [[hoolock]]s, [[lar gibbon]]s [[wow-wow]]s, etc.) and [[siamang]]s, comprising the [[family]] [[Hylobatidae]], which is closely related to the [[hominid]]s",
parents = {"Bộ Linh trưởng"},
}
labels["Cá Leuciscine"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bream]]s, [[chub]]s, [[dace]]s, [[ide]]s, many [[minnow]]s, [[nase]]s, [[roach]]es, [[shiner]]s, [[ziege]]s, and other fish in the [[cyprinid]] [[subfamily]] [[Leuciscinae]], sometimes treated as the [[family]] [[Leuciscidae]], or as the [[tribe]] [[Leuciscini]] within the [[subfamily]] [[Cyprininae]]",
parents = {"Họ Cá chép"},
}
labels["libellulid dragonflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[amberwing]]s, [[basker]]s, [[darter]]s, [[dropwing]]s, [[duskhawk]]s, [[flutterer]]s, [[glider]]s, [[meadowhawk]]s, [[pennant]]s, [[percher]]s, [[skimmer]]s, [[slimwing]]s, [[swampdragon]]s, [[twister]]s, and other [[dragonfly|dragonflies]] in the [[family]] [[Libellulidae]]",
parents = {"dragonflies and damselflies"},
}
labels["lice"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[parasitic]] insects in the [[order]] [[Psocodea]]",
parents = {"insects"},
}
labels["limenitidine butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[admiral]]s, [[clipper]]s, [[count]]s, [[duke]]s, [[purple]]s, [[sister]]s, and other [[butterfly|butterflies]] in the [[nymphalid]] [[subfamily]] [[Limenitidinae]]",
parents = {"nymphalid butterflies"},
}
labels["littorinimorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[boat shell]]s, [[carrier shell]]s, [[conch]]s, [[cowry|cowries]], [[flamingo tongue]]s, [[helmet shell]]s, [[moon snail]]s, [[pebblesnail]]s, [[trumpet shell]]s, [[velutinid]]s, [[winkle]]s, [[worm-shell]]s, and other [[gastropod]]s in the [[order]] [[Littorinimorpha]]",
parents = {"Lớp Chân bụng"},
}
labels["livestock guardian dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"pastoral dogs"},
}
labels["Phân bộ Thằn lằn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Bò sát"},
}
labels["loaches"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the [[cypriniform]] [[superfamily]] [[Cobitoidea]]",
parents = {"fish", "Otomorpha"},
}
labels["lobe-finned fishes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[coelacanth]]s, [[lungfish]] and other fishes in the [[subclass]] [[Sarcopterygii]] of the [[bony fish]]es",
additional = "<u>Please note</u>: although the [[tetrapod]]s (including all [[reptile]]s, [[amphibian]]s, [[bird]]s and [[mammal]]s) are descended from within this group, they are excluded from this category by not being fish.",
parents = {"fish"},
}
labels["loons"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[loon]]s, birds known as [[diver]]s outside the US",
parents = {"Chim nước"},
}
labels["macaques"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[Barbary ape]]s, [[bonnet monkey]]s, [[crab-eating macaque]]s, [[Japanese macaque]]s, [[moor macaque]]s, [[pigtail macaque]]s, [[rhesus monkey]]s, [[toque]]s, and other [[Old World monkey]]s in the [[genus]] ''[[Macaca]]''",
parents = {"Old World monkeys"},
}
labels["macropods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bettong]]s, [[kangaroo]]s, [[pademelon]]s, [[potoroo]]s, [[quokka]]s, [[wallaby]]s, and other [[marsupial]]s in the [[diprotodont]] [[suborder]] [[Macropodiformes]]",
parents = {"marsupials"},
}
labels["malaconotoid birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[Australian magpie]]s, [[bushshrike]]s, [[butcherbird]]s, [[boubou]]s, [[brubru]]s, [[currawong]]s, [[gonolek]]s, [[squeaker]]s, [[vanga]]s, and other birds in the [[passerine]] [[superfamily]] [[Malaconotoidea]]",
parents = {"perching birds"},
}
labels["male animals"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"animals", "male"},
}
labels["Lớp Thú"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân ngành Có xương sống"},
}
labels["mantids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the [[order]] [[Mantodea]], often known as [[praying mantis]]es",
parents = {"insects"},
}
labels["marsupials"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"mammals"},
}
labels["mayflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the [[order]] [[Ephemeroptera]]",
parents = {"insects"},
}
labels["megalopterans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[alderfly|alderflies]], [[dobsonfly|dobsonflies]], [[fishfly|fishflies]] and other insects in the [[order]] [[Megaloptera]]",
parents = {"insects"},
}
labels["meliphagoid birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blue wren]]s, [[bristlebird]]s, [[emu-wren]]s, [[fairywren]]s, [[gerygone]]s, [[grasswren]]s, [[honeyeater]]s, [[pardalote]]s, [[pilotbird]]s, [[redthroat]]s, [[scrubwren]]s, [[thornbill]]s, [[weebill]]s, [[whiteface]]s, and other birds in the [[passerine]] [[superfamily]] [[Meliphagoidea]]",
parents = {"perching birds"},
}
labels["mephitids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mephitid]]s: skunks and stink badgers",
parents = {"Bộ Ăn thịt"},
}
labels["Mergus"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[diving]] [[duck]]s in the [[genus]] ''[[Mergus]]'' and a few similar species",
parents = {"Vịt"},
wpcat = true,
}
labels["mimids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[catbird]]s, [[mockingbird]]s, [[thrasher]]s and other birds in the [[passerine]] family [[Mimidae]]",
parents = {"perching birds"},
}
labels["mites and ticks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[arachnid]]s in the [[subclass]] [[Acari]]",
parents = {"arachnids"},
}
labels["Ngành Thân mềm"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Động vật"},
commonscat = "Mollusca",
wpcat = true,
wp = "Động vật thân mềm",
}
labels["Khỉ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Linh trưởng"},
}
labels["Bộ Đơn huyệt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Thú"},
}
labels["mosquitoes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s in the [[dipteran]] [[family]] [[Culicidae]]",
parents = {"culicomorphs"},
}
labels["moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"insects"},
}
labels["murids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=a number of [[rats]], [[mice]], and other [[rodent]]s in the [[Old World]] [[family]] [[Muridae]]",
parents = {"Bộ Gặm nhấm"},
}
labels["muscicapids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[passerine]] family [[Muscicapidae]]",
parents = {"perching birds"},
}
labels["muscoid flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[anthomyiid]]s such as [[root fly|root flies]], [[cabbage fly|cabbage flies]] and [[onion fly|onion flies]]; [[fanniid]]s; [[muscid]]s such as [[housefly|houseflies]], [[face fly|face flies]] and [[stable fly|stable flies]]; [[scathophagid]]s such as [[dungfly|dungflies]]; and other [[fly|flies]] in the [[dipteran]] [[superfamily]] [[Muscoidea]]",
parents = {"dipterans"},
}
labels["Họ Chồn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Ăn thịt"},
}
labels["mygalomorph spiders"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[baboon spider]]s, [[barking spider]]s, [[bird spider]]s, [[purseweb spider]]s, [[tarantula]]s, [[trapdoor spider]]s, and other [[spider]]s in the [[infraorder]] [[Mygalomorphae]]",
parents = {"spiders"},
}
labels["myriapods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[centipede]]s, [[millipede]]s, [[pauropod]]s, [[symphylan]]s, and other [[arthropod]]s in the [[subphylum]] [[Myriapoda]]",
parents = {"arthropods"},
}
labels["myrmicine ants"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ant]]s in the [[subfamily]] [[Myrmicinae]]",
parents = {"ants"},
}
labels["nematodes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[filaria]], [[gapeworm]]s, [[lungworm]]s, [[pinworm]]s, [[threadworm]]s, [[wheatworm]]s, [[whipworm]]s and other [[worm]]s in the [[phylum]] [[Nematoda]]",
parents = {"worms"},
}
labels["Neogastropoda"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[admiral shell]]s, [[cone snail]]s, [[harp shell]]s, [[murex]]es, [[olive]]s, [[rhombus]]es, [[spindle]]s, [[tulip shell]]s, [[turnip shell]]s, [[volute]]s, [[whelk]]s, [[winkle]]s and other [[gastropod]]s in the [[clade]] [[Neogastropoda]] (treated as an [[order]] in some classifications)",
parents = {"Lớp Chân bụng"},
}
labels["New World monkeys"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[capuchin]]s, [[howler monkey]]s, [[marmochủ đề thuộc nhóm tập hợp]]s, [[night monkey]]s, [[saki]]s, [[spider monkey]]s, [[squirrel monkey]]s, [[tamarin]]s, [[titi]]s, [[uakari]]s, [[woolly monkey]]s, and other [[monkey]]s in the [[parvorder]] [[Platyrrhini]]",
parents = {"Khỉ"},
}
labels["Họ Cút Tân thế giới"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[family]] [[Odontophoridae]], most of which live in the [[New World]] and are known as [[quail]]s, but the family also includes the African [[genus]] ''[[Ptilopachus]]'' and some [[species]] are known as partridges",
parents = {"Bộ Gà"},
}
labels["New World sparrows"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sparrow]]- and [[finch]]-like birds in the [[passerine]] [[family]] [[Passerellidae]], until recently considered part of the family [[Emberizidae]]",
parents = {"perching birds"},
}
labels["New World warblers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the family [[Parulidae]]",
parents = {"warblers"},
}
labels["neuropterans"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[antlion]]s, [[lacewing]]s, [[mantisfly|mantisflies]], [[owlfly|owlflies]] and other insects in the [[order]] [[Neuroptera]]",
parents = {"insects"},
}
labels["newts"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[terrestrial]] [[salamander]]s in the [[subfamily]] [[Pleurodelinae]]",
parents = {"salamanders"},
}
labels["noctuoid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[armyworm]]s, [[cinnabar]]s, [[corn earworm]]s, [[cutworm]]s, [[gypsy moth]]s, [[owlet moth]]s, [[processionary|processionaries]], [[tiger moth]]s, [[underwing]]s, [[wainscot]]s, [[wooly bear]]s, and many other [[moth]]s (and [[caterpillar]]s) in the [[superfamily]] [[Noctuoidea]]",
parents = {"moths"},
}
labels["nudibranchs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sea slug]]s in the [[gastropod]] [[order]] [[Nudibranchia]]",
parents = {"Lớp Chân bụng"},
}
labels["nymphalid butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[admiral]]s, [[brown]]s, [[buckeye]]s, [[checkerspot]]s, [[emperor]]s, [[fritillary|fritillaries]], [[leafwing]]s, [[longwing]]s, [[monarch]]s, [[morpho]]s, [[painted lady|painted ladies]], [[ringlet]]s, [[satyr]]s, [[sister]]s, [[snout]]s, [[tortoiseshell]]s, and other butterflies in the [[family]] [[Nymphalidae]]",
parents = {"Bướm ngày"},
}
labels["octopuses"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"cephalopods"},
}
labels["Bộ Guốc lẻ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[order]] [[Perissodactyla]], including the [[equid]]s, [[tapir]]s and [[rhinoceros]]es",
parents = {"Lớp Thú"},
}
labels["oestroid flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blowfly|blowflies]], [[bluebottle]]s, [[botfly|botflies]], [[flesh fly|flesh fles]], [[greenbottle]]s, [[mango fly|mango flies]], [[screwworm]]s, [[tachinid]]s, [[torsalo]]s, [[tumbu fly|tumbu flies]], [[warble fly|warble flies]], and other flies in the [[superfamily]] [[Oestroidea]]",
parents = {"dipterans"},
}
labels["Old World monkeys"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[baboon]]s, [[colobus]], [[douc]]s, [[gelada]]s, [[green monkey]]s, [[grivet]]s, [[langur]]s, [[malbrouck]]s, [[mandrill]]s, [[mangabey]]s, [[patas monkey]]s, [[proboscis monkey]]s, [[talapoin]]s, [[vervet]]s, and other [[monkeys]] in the [[family]] [[Cercopithecidae]], the only [[members]] of the [[parvorder]] [[Catarrhini]] aside from the greater/lesser apes and humans",
parents = {"Khỉ"},
}
labels["Old World orioles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[perching bird]]s in the [[family]] [[Oriolidae]], which are not closely related to the New World orioles in the family [[Icteridae]]",
parents = {"perching birds"},
}
labels["ornithopods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[camptosaurid]]s, [[hadrosaur]]s, [[iguanodontid]]s, [[lambeosaurid]]s, [[rhabdodontid]]s, [[saurolophid]]s, [[thescelosaurid]]s, [[trachodontid]]s, and other [[dinosaur]]s in the [[ornithischian]] [[clade]] [[Ornithopoda]]",
parents = {"dinosaurs"},
}
labels["osteoglossomorph fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[aba]]s, [[arapaima]]s, [[arowana]]s, [[butterfly fish]], [[elephantfish]], [[featherback]]s, [[mooneye]]s and other fish in the [[superorder]] [[Osteoglossomorpha]]",
parents = {"fish"},
}
labels["Otariidae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[family]] [[Otariidae]], including the [[fur seal]]s and [[sea lion]]s",
parents = {"Pinnipedia"},
}
labels["otidimorph birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bustard]]s in the [[family]] [[Otididae]] and [[order]] [[Otidiformes]]; [[turaco]]s or [[lourie]]s, [[go-away bird]]s, [[plantain-eater]]s, etc., in the [[family]] [[Musophagidae]] and [[order]] [[Musophagiformes]]; and [[cuckoo]]s in the [[family]] [[Cuculidae]] and [[order]] [[Cuculiformes]]; all in the [[clade]] [[Otidimorphae]]",
parents = {"birds"},
}
labels["Otomorpha"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[anchovy|anchovies]], [[beaked salmon]], [[carp]], [[catfish]], [[characin]]s, [[electric eel]]s, [[ghost knifefish]], [[herring]]s, [[loach]]es, [[milkfish]], [[minnow]]s, [[mousefish]], [[slickhead]]s, [[sucker]]s, [[tubeshoulder]]s, and other fish in the [[clade]] [[Otocephala]]",
parents = {"Cá"},
}
labels["ovenbirds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[suboscine]] family [[Furnariidae]], including the former family Dendrocolaptidae (now the [[subfamily]] [[Dendrocolaptinae]])",
parents = {"suboscines"},
}
labels["Bộ Cú"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chim săn mồi"},
}
labels["pangolins"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[order]] [[Pholidota]]",
parents = {"mammals"},
}
labels["Chi Báo"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[panther]]s in the sense of members of the genus ''[[Panthera]]''",
parents = {"Họ Mèo"},
}
labels["parrots"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"birds"},
}
labels["pastoral dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"dogs"},
}
labels["chim cánh cụt"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Chim"},
}
labels["pentatomoid bugs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[acanthosomatid]]s, [[burrowing bug]]s, [[jewel bug]]s, [[shield bug]]s, [[stinkbug]]s, [[thyreocorid]]s, and other [[true bug]]s in the [[superfamily]] [[Pentatomoidea]]",
parents = {"true bugs"},
}
labels["perch and darters"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Percidae]]",
parents = {"percoid fish"},
}
labels["Bộ Sẻ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[passerine]]s or perching birds: members of the order [[Passeriformes]]",
parents = {"Lớp Chim"},
}
labels["percoid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[archerfish]], [[bass]], [[bigeye]]s, [[bluefish]], [[butterflyfish]], [[cardinalfish]], [[cobia]], [[croaker]]s, [[flagtail]]s, [[goatfish]], [[grouper]]s, [[grunt]]s, [[horse mackerel]], [[jack]]s, [[jawfish]], [[leaffish]], [[mahi-mahi]], [[mojarra]], [[perch]], [[pomfret]]s, [[pompano]], [[ponyfish]], [[porgy|porgies]], [[remora]]s, [[roosterfish]], [[sea bass]], [[sea bream]], [[snapper]], [[sunfish]], [[sweeper]]s, [[threadfin]], [[tilefish]], [[wreckfish]], and other [[perciform]] fish in the [[superfamily]] [[Percoidea]]",
parents = {"fish"},
}
labels["Phiomorpha"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blesmol]]s, [[sand mole]]s, [[mole rat]]s, [[dassie rat]]s or [[rock rat]]s, [[Old World porcupine]]s, [[cane rat]]s or [[grasscutter]]s and other [[rodent]]s in the parvorder [[Phiomorpha]], which is the Old World counterpart of the [[caviomorph]]s",
parents = {"Bộ Gặm nhấm"},
}
labels["Họ Hải cẩu thật sự"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mammal]]s in the [[family]] [[Phocidae]], including the [[earless seal]]s (also known as [[true seal]]s)",
parents = {"Pinnipedia"},
}
labels["piciforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[woodpecker]]s, [[aracari]]s, [[coppersmith]]s, [[honeyguide]]s, [[jacamar]]s, [[nunlet]]s, [[puffbird]]s, [[toucan]]s, and other birds in the [[order]] [[Piciformes]]",
parents = {"birds"},
}
labels["pierid butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[brimstone]]s, [[orange tip]]s, [[sulfur]]s, [[white]]s and other [[butterfly|butterflies]] in the [[family]] [[Pieridae]]",
parents = {"Bướm ngày"},
}
labels["lợn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Guốc chẵn", "gia súc"},
commonscat = "Suidae",
wpcat = true,
}
labels["pikes (fish)"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Esocidae]]",
parents = {"fish"},
}
labels["Pinnipedia"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Ăn thịt"},
}
labels["pipits and wagtails"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[passerine]] family [[Motacillidae]]",
parents = {"perching birds"},
}
labels["placoderms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[extinct]] armored fish of the [[class]] [[Placodermi]] from the [[Silurian]] and [[Devonian]] [[geologic]] [[period]]s",
parents = {"fish"},
}
labels["plovers and lapwings"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=birds in the [[charadriiform]] [[family]] [[Charadriidae]]",
parents = {"shorebirds"},
}
labels["pomfrets"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Bramidae]]",
parents = {"percoid fish"},
}
labels["Bộ Linh trưởng"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Thú"},
commonscat = "Primates",
wpcat = true,
}
labels["procyonids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[procyonid]]s: ([[raccoon]]s, [[coati]]s, [[kinkajou]]s, [[olingo]]s, [[ringtail]]s and [[cacomistle]]s)",
parents = {"Bộ Ăn thịt"},
}
labels["prosimians"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Linh trưởng"},
}
labels["pterosaurs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"reptiles"},
}
labels["pyraloid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bee moth]]s, [[flour moth]]s, [[leaf crumpler]]s, [[magpie moth]]s, [[melonworm]]s, [[mint moth]]s, [[orangeworm]]s, [[pantry moth]]s, [[pickleworm]]s, [[snout moth]]s, [[veneer moth]]s, [[wax moth]]s and other [[crambid]] and [[pyralid]] [[moths]] in the [[superfamily]] [[Pyraloidea]]",
parents = {"moths"},
}
labels["Thỏ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Bộ Thỏ"},
}
labels["rallids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[rallid]]s: [[rail]]s and other birds in the family [[Rallidae]]",
parents = {"gruiforms"},
}
labels["ratites"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ratite]]s: birds in the superorder [[Palaeognathae]], including large flightless birds such as [[ostrich]]es, and [[emu]]s, as well as the smaller [[kiwi]]s and [[flighted]] [[tinamous]]",
parents = {"birds"},
}
labels["rays and skates"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[fish]] in the superorder [[Batoidea]]",
parents = {"fish"},
}
labels["reindeers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Hươu nai"},
}
labels["Lớp Bò sát"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân ngành Có xương sống"},
commonscat = "Reptilia",
wpcat = true,
}
labels["retrievers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"gun dogs"},
}
labels["rhinoceroses"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[rhinoceros]]es, [[mammal]]s in the [[perissodactylic]] [[family]] [[Rhinocerotidae]]",
parents = {"odd-toed ungulates"},
}
labels["Bộ Gặm nhấm"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Thú"},
}
labels["salamanders"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[amphiuma]]s, [[axolotl]]s, [[hellbender]]s, [[mud puppy|mud puppies]], [[olm]]s, [[newt]]s, [[salamander]]s, [[siren]]s, and other [[amphibian]]s in the [[order]] [[Caudata]]",
parents = {"amphibians"},
}
labels["Họ Cá hồi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[salmon]]s, [[trout]], and other fish in the family [[Salmonidae]]",
parents = {"Cá"},
}
labels["saturniid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[Atlas moth]]s, [[cecropia]]s, [[hickory horned devil]]s, [[io moth]]s, [[luna moth]]s, [[polyphemus moth]]s, and other [[moth]]s (and [[caterpillar]]s) in the [[family]] [[Saturniidae]]",
parents = {"moths"},
}
labels["satyrine butterflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[brown]]s, [[forester]]s, [[grayling]]s, [[heath]]s, [[palmfly|palmflies]], [[ringlet]]s, [[satyr]]s, and other [[butterfly|butterflies]] in the [[nymphalid]] [[subfamily]] [[Satyrinae]]",
parents = {"nymphalid butterflies"},
}
labels["sauropods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[apatosaur]]s, [[brachiosaur]]s, [[brontosaur]]s, [[camarasaur]]s, [[cetiosaur]]s, [[diplodocus]]es, [[saltasaurid]]s, [[titanosaurian]]s, [[turiasaur]]s, [[vulcanodontid]]s, and other [[dinosaurs]] in the [[saurischian]] [[infraorder]] [[Sauropoda]]",
parents = {"dinosaurs"},
}
labels["sauropterygians"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[elasmosaur]]s, [[placodont]]s, [[plesiosaur]]s, and other extinct aquatic [[reptile]]s in the [[superorder]] [[Sauropterygia]]",
parents = {"reptiles"},
}
labels["sawflies and wood wasps"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[horntail]]s, [[pigeon tremex]], [[rose slug]]s, [[sawfly|sawflies]], [[wood wasp]]s, and other primitive [[hymenopteran]]s in the [[suborder]] [[Symphyta]]",
parents = {"hymenopterans"},
}
labels["scale insects"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s in the [[superfamily]] [[Coccoidea]]",
parents = {"hemipterans"},
}
labels["scarabaeoids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cockchafer]]s, [[dor]]s, [[dung beetle]]s, [[June beetle]]s, [[rain beetle]]s, [[rose chafer]]s, [[scarab]]s, [[stag beetle]]s, and other beetles in the [[superfamily]] [[Scarabaeoidea]]",
parents = {"beetles"},
}
labels["scenthounds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó săn"},
}
labels["scincomorph lizards"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[blue-tongue lizard]]s, [[night lizard]]s, [[sandfish]], [[skink]]s, [[sungazer]]s, and other [[lizard]]s in the [[infraorder]] [[Scincomorpha]]",
parents = {"Phân bộ Thằn lằn"},
}
labels["scolopacids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[curlew]]s, [[dunlin]]s, [[godwit]]s, [[knot]]s, [[redshank]]s, [[ruff]]s, [[sandpiper]]s, [[snipe]]s, [[stint]]s, [[turnstone]]s, [[tattler]]s, [[whimbrel]]s, [[woodcock]]s, [[yellowleg]]s, and other birds in the [[charadriiform]] [[family]] [[Scolopacidae]]",
parents = {"shorebirds"},
}
labels["Họ Cá thu ngừ"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[mackerel]]s, [[tuna]]s, [[barracuda]]s, [[swordfish]], and other fish in the suborder [[Scombroidei]]",
parents = {"Cá"},
}
labels["scorpaeniform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bullhead]]s, [[cabezon]], [[golomyanka]], [[greenling]]s, [[gurnard]]s, [[Irish lord]], [[lionfish]], [[lumpsucker]]s, [[pigfish]], [[poacher]]s, [[sablefish]], [[scorpionfish]], [[sculpin]]s, [[sea raven]]s, [[sea toad]]s, [[skilfish]], [[snailfish]], [[stonefish]], [[wingfish]], and other fish in the [[order]] [[Scorpaeniformes]]",
parents = {"fish"},
}
labels["scorpions"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=true [[scorpion]]s: [[arachnid]]s in the [[order]] [[Scorpiones]]",
parents = {"arachnids"},
}
labels["screamers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[screamer]]s: birds in the family [[Anhimidae]], related to [[duck]]s and [[geese]]",
parents = {"birds"},
}
labels["Chim biển"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Chim"},
}
labels["sea anemones"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cnidarian]]s in the [[order]] [[Actiniaria]]",
parents = {"cnidarians"},
}
labels["sea cucumbers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[echinoderm]]s in the [[class]] [[Holothuroidea]]",
parents = {"echinoderms"},
}
labels["sea urchins"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[echinoderm]]s in the [[class]] [[Echinoidea]], including the [[sand dollar]]s",
parents = {"echinoderms"},
}
labels["sea turtles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[flatback]]s, [[green turtle]]s, [[hawksbill]]s, [[leatherback]]s, [[loggerhead]]s, [[ridley]]s, and other [[turtle]]s in the [[superfamily]] [[Chelonioidea]]",
parents = {"turtles"},
}
labels["sebastids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Sebastidae]]",
parents = {"scorpaeniform fish"},
}
labels["serranids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sea bass]], [[grouper]]s, [[rockcod]]s, [[comber]]s and other fish in the family [[Serranidae]]",
parents = {"percoid fish"},
}
labels["Liên bộ Cá mập"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Cá"},
}
labels["Cừu"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Caprinae", "gia súc"},
}
labels["shorebirds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"birds"},
}
labels["shrikes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"perching birds", "corvoid birds"},
}
labels["sighthounds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó săn"},
}
labels["skippers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=insects in the family [[Hesperiidae]]",
parents = {"Bướm ngày"},
}
labels["smelts"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the [[order]] [[Osmeriformes]]",
parents = {"fish"},
}
labels["snails"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Chân bụng"},
}
labels["Phân bộ Rắn"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Bò sát"},
}
labels["snappers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the [[family]] [[Lutjanidae]]",
parents = {"percoid fish"},
}
labels["soft corals"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[calcaxonian]]s, [[dead man's fingers]], [[fan coral]]s, [[gorgonian]]s, [[holaxonian]]s, [[scleraxonian]]s, [[sea feather]]s, [[sea willow]]s, [[stoloniferan]]s, [[whip coral]]s, and other marine animals in the [[cnidarian]] order [[Alcyonacea]]",
parents = {"cnidarians"},
}
labels["soricomorphs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[shrew]]s, [[mole]]s, [[solenodon]]s, and other [[mammal]]s in the [[order]] [[Soricomorpha]]",
parents = {"mammals"},
}
labels["South American canids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fox-like [[canid]]s in the [[subtribe]] [[Cerdocyonina]], which are more closely related to the [[dog]]s and [[wolf|wolves]] than to the true [[fox]]es. Also known as [[zorro]]s",
parents = {"Họ Chó"},
}
labels["spaniels"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"gun dogs"},
}
labels["sparids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[sea breams]], [[porgie]]s, [[scup]]s and other fish in the family [[Sparidae]]",
parents = {"percoid fish"},
}
labels["sphinx moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hawkmoth]]s, [[hornworm]]s, [[hummingbird moth]]s, [[sphinx moth]]s,[[tomato worm]]s, and other [[moth]]s (and [[caterpillar]]s) in the [[family]] [[Sphingidae]]",
parents = {"moths"},
}
labels["Nhện"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Lớp Hình nhện"},
}
labels["sponges"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[aquatic]] [[animal]]s in the [[phylum]] [[Porifera]]",
parents = {"animals"},
}
labels["squid"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"cephalopods"},
}
labels["Họ Sóc"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[squirrel]]s, [[chipmunk]]s, [[marmot]]s, [[prairie dog]]s, [[woodchuck]]s and other [[rodent]]s in the family [[Sciuridae]]",
parents = {"Bộ Gặm nhấm"},
}
labels["staphylinoid beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[beetle]]s in the [[superfamily]] [[Staphylinoidea]]",
parents = {"beetles"},
}
labels["starlings"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[starling]]s, [[mynah]]s, and other birds in the [[passerine]] family [[Sturnidae]]",
parents = {"perching birds"},
}
labels["stick insects"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s (including the [[leaf insect]]s) in the [[order]] known as either [[Phasmida]] or [[Phasmatodea]], which are noted for their extreme adaptations in form and color to look like parts of the plants they feed on",
parents = {"insects"},
}
labels["stoneflies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[freshwater]] [[aquatic]] [[insect]]s in the [[order]] [[Plecoptera]]",
parents = {"insects"},
}
labels["stony corals"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=marine animals in the [[cnidarian]] order [[Scleractinia]]",
parents = {"cnidarians"},
}
labels["storks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chim nước"},
}
labels["stromateoid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[barrelfish]], [[blue eye cod]], [[dollarfish]], [[driftfish]], [[lafayette]], [[medusafish]], [[rudderfish]], [[squaretail]], [[warehou]], and other fish in the [[perciform]] [[suborder]] [[Stromateoidei]]",
parents = {"fish"},
}
labels["sturgeons"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Acipenseridae]]",
parents = {"fish"},
}
labels["suboscines"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[antpitta]]s, [[antshrike]]s, [[antthrush]]es, [[asity|asities]], [[broadbill]]s, [[cotinga]]s, [[crescentchest]]s, [[gnateater]]s, [[manakin]]s, [[ovenbird]]s, [[pitta]]s, [[sharpbill]]s, [[spadebill]]s, [[tapaculo]]s, [[tityra]]s, [[tyrant flycatcher]]s, [[woodcreeper]]s, and other birds in the [[passerine]] [[suborder]] [[Tyranni]]",
parents = {"perching birds"},
}
labels["suckers (fish)"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[buffalo fish]], [[cuiui]], [[jumprock]]s, [[quillback]], [[redhorse]], [[sucker]]s, and other freshwater fish in the family [[Catostomidae]]",
parents = {"fish", "Otomorpha"},
}
labels["suliform birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[anhinga]]s, [[booby|boobies]], [[cormorant]]s, [[frigatebird]]s, [[gannet]]s, and other [[seabirds]] in the [[order]] [[Suliformes]]",
parents = {"seabirds"},
}
labels["sunfish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=freshwater fish in the family [[Centrarchidae]]",
parents = {"percoid fish"},
}
labels["swallows"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"perching birds"},
}
labels["swallowtails"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[apollo]]s, [[batwing]]s, [[birdwing]]s, [[clubtail]]s, [[festoon]]s, [[flying handkerchief]]s, [[Helen]]s, [[jay]]s, [[mime]]s, [[parnassian]]s, [[rose]]s, [[swallowtail]]s, [[swordtail]]s, [[triangle]]s, [[turnus]]es, [[windmill]]s, [[zebra]]s, and other [[butterfly|butterflies]] in the [[family]] [[Papilionidae]], notable for (mostly) having tail-like extensions on their [[hindwing]]s",
parents = {"Bướm ngày"},
}
labels["Chi Thiên nga"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Họ Vịt"},
}
labels["syngnathiform fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bellowsfish]], [[cornetfish]], [[pipefish]], [[razorfish]], [[sea dragon]]s, [[sea horse]]s, [[snipefish]], [[trumpetfish]], and other fish in the [[order]] [[Syngnathiformes]]",
parents = {"fish"},
}
labels["Thraupidae"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bananaquit]]s, [[conebill]]s, [[dacnis]]es, [[Darwin's finch]]es, [[grassquit]]s, [[ground finch]]es, [[honeycreeper]]s, [[pardusco]]s, [[tanager]]s, and other [[passerine]] birds in the family [[Thraupidae]]",
parents = {"Bộ Sẻ"},
}
labels["temnospondyls"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[extinct]] early [[amphibian]]s in the [[order]] [[Temnospondyli]]",
parents = {"amphibians"},
}
labels["tenebrionoid beetles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[aderid]]s, [[anthicid]]s, [[blister beetle]]s, [[borid]]s, [[ciid]]s, [[flour beetle]]s, [[darkling beetle]]s, [[mealworm]]s, [[melandryid]]s, [[mordellid]]s, [[mycetophagid]]s, [[oedemerid]]s, [[pinacate beetle]]s, [[pyrochroid]]s, [[pythid]]s, [[ripiphorid]]s, [[salpingid]]s, [[toktokkie]]s, [[ulodid]]s, [[wharf borer]]s, [[zopherid]]s and other [[beetle]]s in the [[superfamily]] [[Tenebrionoidea]]",
parents = {"beetles"},
}
labels["tephritoid flies"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cheese fly|cheese flies]], [[tephritid]] [[fruit fly|fruit flies]], [[picture-winged fly|picture-winged flies]] and other [[fly|flies]] in the [[dipteran]] [[superfamily]] [[Tephritoidea]]",
parents = {"dipterans"},
}
labels["termites"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[termite]]s, [[insect]]s in the former [[order]] [[Isoptera]], which is now considered a [[suborder]] or other group within the [[cockroach]]es in the order [[Blattodea]]",
parents = {"insects", "cockroaches"},
}
labels["terns"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[tern]]s, [[seabirds]] in the [[family]] [[Sternidae]]",
parents = {"seabirds"},
}
labels["tetraodontiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[pufferfish]], [[triggerfish]], [[boxfish]], [[ocean sunfish]] and other fish in the order [[Tetraodontiformes]]",
parents = {"fish"},
}
labels["Chó sục"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó săn"},
}
labels["theropods"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[dinosaur]]s in the [[clade]] [[Theropoda]]",
parents = {"dinosaurs"},
}
labels["thrushes"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"perching birds"},
}
labels["ticks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bloodsucking]] [[arachnids]] in the [[order]] [[Ixodida]] (also known as [[Metastigmata]])",
parents = {"mites and ticks"},
}
labels["tinamous"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"ratites"},
}
labels["tits"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[tit]]s, birds known as [[chickadee]]s in the US",
parents = {"perching birds"},
}
labels["toads"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Anuran"},
}
labels["toothcarps"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[four-eyed fish]], [[guppy|guppies]], [[killifish]], [[molly|mollies]], [[mummichog]]s, [[platy|platies]], [[swordtail]]s, [[topminnow]]s and other fish in the [[order]] [[Cyprinodontiformes]]",
parents = {"fish"},
}
labels["tortoises"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[terrestrial]] [[turtle]]s in the [[family]] [[Testudinidae]]",
parents = {"turtles"},
}
labels["tortricid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[moth]]s (and [[caterpillar]]s) in the [[family]] [[Tortricidae]]",
parents = {"moths"},
}
labels["trachinoid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[black swallower]]s, [[blue cod]], [[duckbill]]s, [[gaper]]s, [[sand eel]]s, [[torrentfish]], [[weeverfish]] and other fish in the [[perciform]] [[suborder]] [[Trachinoidei]]",
parents = {"fish"},
}
labels["toy dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"dogs"},
}
labels["trilobites"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"arthropods"},
}
labels["true bugs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[insect]]s in the [[hemipteran]] suborder [[Heteroptera]]",
parents = {"hemipterans"},
}
labels["Họ Sẻ thông"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[finch]]es in the [[passerine]] family [[Fringillidae]]",
parents = {"Bộ Sẻ"},
}
labels["true jellyfish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[cnidarian]]s in the [[class]] [[Scyphozoa]]",
parents = {"cnidarians"},
}
labels["true sparrows"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[passerine]] birds in the family [[Passeridae]] (for other birds called sparrows, see the [[emberizid]]s)",
parents = {"perching birds"},
}
labels["tubenose birds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[albatross]]es, [[fulmar]]s, [[petrel]]s, [[prion]]s, [[shearwater]]s, and other [[seabird]]s in the [[order]] [[Procellariiformes]]",
parents = {"seabirds"},
}
labels["tunicates"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"animals"},
}
labels["turtles"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"reptiles"},
}
labels["tyrant flycatchers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[passerine]] birds in the family [[Tyrannidae]]",
parents = {"suboscines"},
}
labels["ursids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[ursid]]s ([[bear]]s)",
parents = {"Bộ Ăn thịt"},
}
labels["Venerida order mollusks"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[basket clam]]s, [[bean clam]]s, [[boring clam]]s, [[cockle]]s, [[duck clam]]s, [[giant clam]]s, [[hard clam]]s, [[lentil shell]]s, [[pipi]]s, [[pooquaw]]s, [[quahog]]s, [[surf clam]]s, [[trough-shell]]s, [[ugari]]s, [[Venus clam]]s, [[zebra mussel]]s, and other [[bivalve]]s in the [[order]] [[Venerida]]",
parents = {"bivalves"},
}
labels["Phân ngành Có xương sống"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Ngành Dây sống"},
wpcat = true,
commonscat = "Vertebrata",
}
labels["vespids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[hornet]]s, [[paper wasp]]s, [[pollen wasp]]s, [[potter wasp]]s, [[yellow jacket]]s, and other [[wasp]]s in the [[family]] [[Vespidae]]",
parents = {"hymenopterans"},
}
labels["Vetigastropoda"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[abalone]]s or [[ear shell]]s, [[duck's-bill limpet]]s, [[keyhole limpet]]s, [[rosary shell]]s, [[slit-shell]]s, [[topshell]]s, [[turban shell]]s, and other [[gastropod]]s in the [[clade]] [[Vetigastropoda]] (treated in some classifications as an [[order]], in others as [[subclass]])",
parents = {"Lớp Chân bụng"},
}
labels["vipers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[adder]]s, [[asp]]s, [[rattlesnake]]s, [[viper]]s, [[water moccasin]]s and other [[venomous]] snakes in the [[Viperidae]]",
parents = {"Phân bộ Rắn"},
}
labels["viverrids"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[viverrid]]s ([[civet]]s, [[genet]]s and relatives)",
parents = {"Bộ Ăn thịt"},
}
labels["vombatiforms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[diprotodontid]]s, [[diprotodon]]s, [[phascolarctid]]s, [[koala]]s, [[vombatid]]s, [[wombat]]s, [[phascolome]]s, [[ilariid]]s, [[maradid]]s, [[palorchestid]]s, [[thylacoleonid]]s, [[marsupial lion]]s , [[wynyardiid]]s and other [[marsupial]]s in the [[diprotodont]] [[suborder]] [[Vombatiformes]]",
parents = {"marsupials"},
}
labels["vultures"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[vulture]]s (both Old World and New World)",
parents = {"birds of prey"},
}
labels["warblers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[warbler]]s, various small [[passerine]] songbirds, especially of the families Sylviidae (Old World warblers) and Parulidae (New World warblers)",
parents = {"perching birds"},
}
labels["warren hounds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Chó săn"},
}
labels["water dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"retrievers"},
}
labels["weaver finches"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[finch]]es in the family [[Estrildidae]]",
parents = {"perching birds"},
}
labels["weaverbirds"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[baya]]s, [[bishop]]s, [[fody|fodies]], [[malimbe]]s, [[quelea]]s, [[sakabula]]s, [[taha]]s, [[weaver]]s, and other birds in the [[family]] [[Ploceidae]]",
parents = {"perching birds"},
}
labels["weevils"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[bill-beetle]]s, [[curculio]]s, [[grugru worm]]s, [[snout beetle]]s, and other [[beetle]]s in the [[superfamily]] [[Curculionoidea]]",
parents = {"beetles"},
}
labels["cá voi"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Phân thứ bộ Cá voi"},
}
labels["wolves"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[wolves]]",
parents = {"Họ Chó"},
}
labels["woodpeckers"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[flicker]]s, [[sapsucker]]s, [[wryneck]]s, and other birds in the [[family]] [[Picidae]]",
parents = {"piciforms"},
}
labels["working dogs"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"dogs"},
}
labels["worms"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"animals"},
}
labels["wrasses"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=fish in the family [[Labridae]]",
parents = {"labroid fish"},
}
labels["Họ Tiêu liêu"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "default",
parents = {"Liên họ Đuôi cứng"},
}
labels["zoarcoid fish"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[butterfish]], [[eelpout]]s, [[guffer]]s, [[gunnel]]s, [[lumper]]s, [[prickleback]]s, [[prowfish]], [[wolf eel]]s and other fish in the [[perciform]] [[suborder]] [[Zoarcoidei]]",
parents = {"fish"},
}
labels["zygaenoid moths"] = {
type = "chủ đề thuộc nhóm tập hợp",
description = "=[[burnet moth]]s, [[forester]]s, [[hag moth]]s, [[limacodid]]s, [[megalopygid]]s, [[monkey slug]]s, [[puss moth]]s, [[saddleback caterpillar]]s, [[zygaenid]]s, and other [[moth]]s in the [[superfamily]] [[Zygaenoidea]]",
parents = {"moths"},
}
return labels
qh1784xsm131rogaduhl8rj0cxz96ud
ñī
0
328230
2572946
2210461
2026-10-23T11:47:09Z
WhoAlone
40420
2572946
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ɲiː/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[nhà]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Chỗ ở}}
84b0w1yhgc4ore1kzzs6iinhku774gf
kalahöiya
0
328237
2572997
2210468
2026-10-23T11:58:37Z
WhoAlone
40420
2572997
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kalahəja/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[bầu trời]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Tự nhiên}}
cirmc609xnhyf4drc1zv4kp8g7lhlen
meàu
0
332066
2572962
2216699
2026-10-23T11:49:52Z
WhoAlone
40420
2572962
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/meaw/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[mèo]].
#:{{synonym|ncb|koching}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Mèo}}
i75aapfw62tu8tdzbdhyzk8fwb82e4j
koching
0
332067
2572976
2216700
2026-10-23T11:52:41Z
WhoAlone
40420
2572976
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kociŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[mèo]].
#:{{synonym|ncb|meàu}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Mèo}}
dt288stw454fqhs1rjrtxsahfd9ukum
ñī-kapo
0
332069
2572945
2216703
2026-10-23T11:46:59Z
WhoAlone
40420
2572945
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ɲi-kapo/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[chuồng]] [[gia súc]].
#:{{synonym|ncb|chuk-kapo|chuk-ñī-kapo}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Gia súc|Chăn nuôi}}
rb7a58d69aot9xujkedfnkr8ahd1x02
pulang-tana
0
332071
2572818
2216705
2026-10-22T15:39:47Z
WhoAlone
40420
2572818
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/pulaŋ-tana/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[sâu bướm]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Lớp Côn trùng}}
pn6pvkj3lnmajtfy8lx5riiekzc5fuz
ohàuwa
0
332072
2572939
2216706
2026-10-23T11:43:46Z
WhoAlone
40420
2572939
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔohauwa/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[hang động]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Địa mạo}}
myivjwp9d7n3ia9gorejk4hg1wujf2i
kâtēre
0
332073
2572992
2216707
2026-10-23T11:56:36Z
WhoAlone
40420
2572992
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/katere/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[ghế]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Hàng gia dụng}}
noyqvj1v3wyrncoh4v23cnczt1mt9pf
kenchâp
0
332074
2572985
2216708
2026-10-23T11:54:44Z
WhoAlone
40420
2572985
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kencap/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[xích]] [[chó]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Dụng cụ|Chó}}
agnfzij1rzm9pf693n83ixjmaumdutj
shom-chīna
0
332079
2572793
2216713
2026-10-22T15:35:07Z
WhoAlone
40420
2572793
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃom-cina/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[người]] [[Trung Quốc]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Mọi người|Trung Quốc}}
axs1p82i8eu78pmrg8cazirov7c5fls
kalong-döanga-bi
0
332080
2572999
2216714
2026-10-23T11:58:58Z
WhoAlone
40420
2572999
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kaloŋ-dəaŋa-bi/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[bọ cạp]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Ngành Chân đốt}}
ptkoorynza6lzxgd6v6312kqdcu0rg9
moah
0
332081
2572960
2216716
2026-10-23T11:49:01Z
WhoAlone
40420
2572960
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/moah/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[mũi]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Khuôn mặt}}
583unh8mw3mcy61fa1j6dcs7tckm915
kabâ
0
332082
2572995
2216717
2026-10-23T11:58:17Z
WhoAlone
40420
2572995
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kaba/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[gió bắc]].
#:{{synonym|ncb|hâṅsh-kapâ}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Hiện tượng khí quyển}}
kv565cymwhde4bvbc8eun6butlpruiv
kâm-heng
0
332087
2572993
2216722
2026-10-23T11:56:47Z
WhoAlone
40420
2572993
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kam-heŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[buổi trưa]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
716l12th95l5bh0w4x4nhzj6sy2jjl3
kehōah-oal-moah
0
332088
2572984
2216723
2026-10-23T11:54:32Z
WhoAlone
40420
2572984
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kehoah-ʔoal-moah/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[lỗ]] [[mũi]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Khuôn mặt}}
iojnl2lazah22j33ir11w19gscp3xen
paiyūh-ta-miīṅho-chuk
0
332089
2572821
2216724
2026-10-22T15:41:00Z
WhoAlone
40420
2572821
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/pajuh-ta-miĩho-cuk/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[hàng xóm]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Xã hội}}
7e2l78dyfx4g64nu8d4bc2l2hurwz9o
ong-lônga
0
332090
2572938
2216725
2026-10-23T11:42:48Z
WhoAlone
40420
2572938
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔoŋ-loŋa/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cổ]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Đầu và cổ}}
4cabjpzzx6205r78msv6nisegyr1pjc
lâ-hanga-heng
0
332203
2572975
2216921
2026-10-23T11:52:34Z
WhoAlone
40420
2572975
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/la-haŋa-heŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[buổi chiều]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
m3cnjbv4oblgl8ondlh2iw4i5rkl0hj
shanī-la-tòh
0
332204
2572815
2216922
2026-10-22T15:39:12Z
WhoAlone
40420
2572815
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃani-latɔh/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[tuổi]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
70ezdvs5ol1thhn9m38wiie4qaezste
shanī-tashe
0
332205
2572814
2216923
2026-10-22T15:39:05Z
WhoAlone
40420
2572814
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃani-taʃe/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[tuổi]] (của vật vô tri giác).
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
jkr4df8i2c7nstucnk4y6xlj7e3ieb2
shīri-kaneäl
0
332206
2572809
2216925
2026-10-22T15:37:54Z
WhoAlone
40420
2572809
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃiri-kaneal/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[trăng]] [[lưỡi liềm]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Tự nhiên}}
iobt32b5vq9zkokoi9h3e5gyx176ti6
maiñ
0
332207
2572966
2216926
2026-10-23T11:50:12Z
WhoAlone
40420
2572966
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/maɲ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cá mập]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Cá}}
bpjnigzha5bcthchwyt5hqojp6ptmms
kentôka
0
332211
2572987
2216932
2026-10-23T11:55:02Z
WhoAlone
40420
2572987
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kentoka/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[điệu]] [[múa]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Nghệ thuật}}
88eoi4m7q1dzww7ex3y7m58odfg67f1
kōan-enkâna
0
332212
2572977
2216933
2026-10-23T11:52:59Z
WhoAlone
40420
2572977
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/koan-ʔenkana/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[con gái]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thành viên nữ trong gia đình}}
c63ue70h8xsmna9jl2jvsn8ypv80hrn
puyü
0
332213
2572817
2216934
2026-10-22T15:39:38Z
WhoAlone
40420
2572817
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/pujɯ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[bình minh]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian|Tự nhiên}}
5a89lo9ehgj2uu0l9v1azlknyp8tl6y
shaiyūh-lâng
0
332214
2572816
2216935
2026-10-22T15:39:22Z
WhoAlone
40420
2572816
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃajuh-laŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[ngày kia]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{C|ncb|Thời gian}}
pm6ce04k5knw9xbgxc2x0iit2jvqi3h
ong-wāhnga
0
332215
2572937
2216936
2026-10-23T11:42:38Z
WhoAlone
40420
2572937
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔoŋ-wahŋa/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[hôm kia]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
auv18h1h5k6kxz0tou2pzy2vukyvziu
shin-kâm
0
332217
2572806
2216938
2026-10-22T15:37:40Z
WhoAlone
40420
2572806
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃin-kam/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[ban ngày]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Thời gian}}
mnd3zpu4435x6p21jxt58s3k6vub4ot
shin-kaiñe
0
332278
2572805
2217034
2026-10-22T15:37:34Z
WhoAlone
40420
2572805
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʃin-kaɲe/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[góc]] [[trong]] [[phòng]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer.
{{c|ncb|Kiến trúc}}
dyrr9jjqbhl998ekub93ozar4r761i1
panòkenlait
0
332280
2572820
2217036
2026-10-22T15:40:50Z
WhoAlone
40420
2572820
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/panɔkenlac/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[nồi]] [[nấu]] [[ăn]].
#:{{synonym|ncb|henpak-ngaich}}
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Dụng cụ nhà bếp}}
7ygaf7h527x0dvanfcb6z6j5a79uwd3
kinòng
0
332282
2572978
2217043
2026-10-23T11:53:08Z
WhoAlone
40420
2572978
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kinɔŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[một]] [[loài]] [[cua]] [[lớn]] [[ăn]] [[được]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Phân ngành Giáp xác}}
jvxyks0ulczpa5wrzptov27q5houu08
2572982
2572978
2026-10-23T11:54:09Z
WhoAlone
40420
2572982
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kinɔŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[một]] [[loài]] [[cua]] [[lớn]] [[ăn]] [[được]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Bộ Mười chân}}
kosjumkvi3lh81whbktmzmgl0aqag42
kefēh
0
332283
2572991
2217042
2026-10-23T11:55:50Z
WhoAlone
40420
2572991
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kefeh/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[một]] [[loài]] [[cua]] [[lớn]].
==={{ĐM|ref}}===
* [http://www.sealang.net/monkhmer/database/retrieve.pl?language=Nancowry&sort=gloss&format=html Tiếng Nicobar Trung (Nancowry)] tại Cơ sở Dữ liệu Môn-Khmer
{{c|ncb|Bộ Mười chân}}
j3hm4k6tq4yi58chujn0l3p0nowo947
sööm pū
0
332286
2572795
2217104
2026-10-22T15:35:19Z
WhoAlone
40420
2572795
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/səˑm puː/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[người]] [[Nicobar]] ở [[đảo]] [[Car Nicobar]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Mọi người}}
3rr5krg7h6pdgc1ppvhxg63szbda3y4
sööm ta-tāt
0
332287
2572796
2217105
2026-10-22T15:35:25Z
WhoAlone
40420
2572796
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/səˑm t̪ɑt̪ɑˑt/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[người]] [[Nicobar]] ở [[đảo]] [[Chowra]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Mọi người}}
d4v9dcxijg0d78bjeanvcmkscncnuum
sööm mūöt
0
332288
2572794
2217106
2026-10-22T15:35:14Z
WhoAlone
40420
2572794
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/səˑm muˑət/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[người]] [[Nicobar]] ở [[đảo]] [[Nancowry]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Mọi người}}
bezl7js2jm5rq6x8i1c7vizfijwyi3v
min-lān
0
332289
2572961
2217103
2026-10-23T11:49:42Z
WhoAlone
40420
2572961
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/minlɑˑn/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cua cạn]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Phân ngành Giáp xác}}
qqxu6y14proozd1ynrosaltjdius2j2
2572981
2572961
2026-10-23T11:54:01Z
WhoAlone
40420
2572981
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/minlɑˑn/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cua cạn]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Bộ Mười chân}}
h37fppe5l92cmlvvgb2dipqrrfhadqh
sööm tēh lông
0
332291
2572797
2217101
2026-10-22T15:35:28Z
WhoAlone
40420
2572797
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/səˑm t̪eˑx lɔˑŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[người]] [[Nicobar]] ở [[đảo]] [[Teressa]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Mọi người}}
36cvdc6lhvqcdhrgo65zz472418ml2o
òāl fāng
0
332293
2572944
2217098
2026-10-23T11:45:57Z
WhoAlone
40420
2572944
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|etym}}===
Cùng gốc với {{cognate|caq|el vāng}}, {{cognate|crv|a-fāng}}, {{cognate|tef|a-fāṅ}}, {{cognate|nik|u-fāk|i-fēk}}.
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɔɑˑl fɑˑŋ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[miệng]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Khuôn mặt}}
4xjl16zye5t27mzp49c9lpo8c3nwxjm
òāl tāi
0
332294
2572940
2217097
2026-10-23T11:44:03Z
WhoAlone
40420
2572940
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|etym}}===
Cùng gốc với {{cognate|caq|el tī}}, {{cognate|crv|ô nôi}}, {{cognate|tef|ô kô}}, {{cognate|nik|ô tāi}}.
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɔɑˑl t̪ɑˑj/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[lòng bàn tay]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Bộ phận cơ thể}}
2je659u0peyyv6p6k1knh4ilfhpj29m
òāl in-rāyö
0
332302
2572943
2217096
2026-10-23T11:44:41Z
WhoAlone
40420
2572943
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɔɑˑl ʔinɹɑːjɛ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[ngực]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Bộ phận cơ thể}}
nsy3zl9lueuxgajn9cc4fitmlwtic7d
mūah
0
332303
2572949
2217095
2026-10-23T11:47:38Z
WhoAlone
40420
2572949
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/muˑɑx/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[mũi]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Khuôn mặt}}
7lvq5sibb74iipls9sfarltwo967uor
òāl nyī
0
332304
2572941
2217094
2026-10-23T11:44:19Z
WhoAlone
40420
2572941
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɔɑˑl ɲiː/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[sàn nhà]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Kiến trúc|Xây dựng}}
qlc1pgwv57pnunbnlbaj81i7uws1nj3
òāl ma-tāi
0
332305
2572942
2217093
2026-10-23T11:44:27Z
WhoAlone
40420
2572942
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/ʔɔɑˑl mɑt̪ɑˑj/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[làng]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Xã hội}}
fgtuipshlw6d0wf01kmrs4h89xiby5o
ma-ngëḵ
0
332306
2572971
2217092
2026-10-23T11:50:44Z
WhoAlone
40420
2572971
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/mɑŋɛˑʔ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[đá]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Địa chất học}}
7chminx9dyx4ia1cagps5mc9bso2vts
kin-ūatö
0
332313
2572986
2217087
2026-10-23T11:54:54Z
WhoAlone
40420
2572986
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kinʔuːɑtɛ/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cơn]] [[khát]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Cơ thể}}
c8cbpdhrfhrp0odp0eu3g2eg4ky03si
ka-mīöl
0
332314
2572994
2217086
2026-10-23T11:57:47Z
WhoAlone
40420
2572994
wikitext
text/x-wiki
=={{langname|ncb}}==
==={{ĐM|pron}}===
* {{IPA4|ncb|/kɑmiˑəl/}}
==={{ĐM|noun}}===
{{head|ncb|Danh từ}}
# {{label|ncb|Nancowry}} [[cua ẩn sĩ]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Phân ngành Giáp xác}}
3a4wrd845ixwg1has7vgs8uzbsy9exi
piöt-chuk nyī
0
332893
2572819
2218053
2026-10-22T15:40:41Z
WhoAlone
40420
2572819
wikitext
text/x-wiki
== {{langname|ncb}} ==
=== {{ĐM|pron}} ===
* {{IPA4|ncb|/piəˑtcuk ɲiː/}}
=== {{ĐM|noun}} ===
{{head|ncb|Danh từ}}
# [[đất]] [[phát quang]] để làm [[nhà]].
==={{ĐM|ref}}===
* V.R. Rajasingh. (2019) ''[https://drive.google.com/open?id=1sJ_kFSvTHaxp24iH3Sx90jPm83fBXV8l Nicobarese-Hindi-English Dictionary (Pū-Sanënyö-Luröö-Mūöt-Lamôngsĕ-Tökahāṅilāhngö-Hindi-English)]''
{{c|ncb|Xây dựng}}
6l701klblus2nuy1zmytle54fu60ovw
acardenálales
0
348971
2572850
2245709
2026-10-23T01:23:26Z
Hiyuune
50834
/* Tiếng Tây Ban Nha */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572850
wikitext
text/x-wiki
=={{langname|es}}==
==={{ĐM|v}}===
{{head|es|Biến thể hình thái động từ}}
# {{es-verb form of|acardenalar}}
sqj20s0jmo06i0tvn4fj10n2ame4k51
Mô đun:category tree/lang/sa
828
359926
2572836
2374470
2026-10-23T00:46:11Z
Hiyuune
50834
2572836
Scribunto
text/plain
local labels = {}
local handlers = {}
local rmatch = mw.ustring.match
--------------------------------- Gốc từ --------------------------------
labels["Gốc từ hai phụ âm bật hơi"] = { -- en: "diaspirate roots"
description = "Sanskrit roots where an initial unaspirated consonant may become aspirated in some derivatives. This occurs when the root is followed immediately by a {{w|sibilant}}, which triggers an aspiration throwback and the aspiration migrates leftward, docking onto the initial consonant. See more at {{w|Grassmann's law}}",
parents = {{ name = "Gốc từ" }}
}
--------------------------------- In fine compositi --------------------------------
labels["compound-final adjectives"] = {
description = "Sanskrit terms that only appear at the end of a compound adjective.",
parents = {{ name = "Tính từ" }}
}
labels["compound-final nouns"] = {
description = "Sanskrit terms that only appear at the end of a compound noun.",
parents = {{ name = "Danh từ" }}
}
labels["compound-final adverbs"] = {
description = "Sanskrit terms that only appear at the end of a compound adverb.",
parents = {{ name = "Phó từ" }}
}
--------------------------------- Nominal --------------------------------
labels["desiderative participles"] = {
description = "Sanskrit desiderative participles.",
parents = {{ name = "Phân từ" }}
}
-- Adjective stem types
local adjective_stems = {
"a", "an", "añc", "as", "at", "ai", "au", "ā", "i", "in", "is", "ī", "mat", "o", "ṛ", "u", "us", "ū", "vat", "vāṃs", "yas", "consonantal root",
}
for _, stem in ipairs(adjective_stems) do
labels["Tính từ thân từ " .. stem] = {
description = "Tính từ tiếng Phạn có thân từ " .. stem .. ".",
parents = {{name = "Tính từ theo loại biến tố", sort = stem}},
breadcrumb = "thân từ " .. stem
}
end
-- Noun stem types
local noun_stems = {
"a", "an", "añc", "as", "at", "ai", "au", "ā", "i", "in", "is", "ī", "mat", "o", "ṛ", "u", "us", "ū", "vat", "vāṃs", "consonantal root",
}
for _, stem in ipairs(noun_stems) do
labels["Danh từ thân từ " .. stem] = {
description = "Danh từ tiếng Phạn có thân từ " .. stem .. ".",
parents = {{name = "Danh từ theo loại biến tố", sort = stem}},
breadcrumb = "thân từ " .. stem
}
end
-- Root-stem nouns and adjectives on -ā, -ī and -ū, which are declined differently from the derived stems
for _, vowel in ipairs({"ā", "ī", "ū"}) do
for _, pos in ipairs({"nouns", "adjectives"}) do
labels["root-stem " .. pos .. " on -" .. vowel] = {
description = "Sanskrit root " .. pos .. " on -" .. vowel .. ", and the compounds that end in one.",
parents = {{name = pos .. " by inflection type", sort = vowel .. "-stem, root"}},
breadcrumb = "root-stem on -" .. vowel
}
end
end
-- ī-stems with the original vṛkī́-declension
for _, pos in ipairs({"nouns", "adjectives"}) do
labels["ī-stem " .. pos .. " with original vṛkī́-declension"] = {
description = "Sanskrit ī-stem " .. pos .. " that originally had the ''vṛkī́''-declension, whose forms their " ..
"declension tables give as the older ones.",
parents = {{name = "ī-stem " .. pos, sort = "vṛkī́"}},
breadcrumb = "original vṛkī́-declension"
}
end
-- Numeral stem types (the numerals without gender, which are declined in the plural only)
local numeral_stems = {
an = "{{m|sa|पञ्च|tr=páñca}} and {{m|sa|दश|tr=dáśa}}",
i = "{{m|sa|कति|tr=káti}}, {{m|sa|तति|tr=táti}} and {{m|sa|यति|tr=yáti}}",
["ṣ"] = "{{m|sa|षष्|tr=ṣáṣ}}",
}
for stem, examples in pairs(numeral_stems) do
labels["Số từ thân từ " .. stem] = {
description = "Số từ tiếng Phạn có thân từ " .. stem .. ", ví dụ như " .. examples .. ".",
parents = {{name = "Số từ theo loại biến tố", sort = stem}},
breadcrumb = "thân từ " .. stem
}
end
--------------------------------- Verbs --------------------------------
labels["Động từ theo lớp"] = {
description = "Động từ theo lớp tiếng Phạn.",
parents = {{name = "Động từ theo loại biến tố", sort = "lớp"}},
}
table.insert(handlers, function(data)
local cls = rmatch(data.label, "^Động từ lớp ([0-9]*)")
if cls then
return {
description = "Động từ lớp " .. cls .. " tiếng Phạn.",
breadcrumb = cls,
parents = {{name = "Động từ theo lớp", sort = cls}},
}
end
end)
labels["verbs by aorist type"] = {
description = "Sanskrit verbs categorized by aorist type.",
parents = {{name = "verbs by inflection type", sort = "aorist"}},
breadcrumb = "aorist types"
}
for _, aor in pairs({ "iṣ", "s", "kṣ", "a", "root", "sa", "siṣ"}) do
labels["verbs with " .. aor .. "-aorist"] = {
description = "Sanskrit verbs with the " .. aor .. "-aorist.",
parents = {{ name = "verbs by aorist type", sort = aor }},
breadcrumb = aor .. "-aorist"
}
end
-- Future types
labels["verbs by future type"] = {
description = "Sanskrit verbs categorized by future type.",
parents = {{name = "verbs by inflection type", sort = "future"}},
breadcrumb = "future types"
}
labels["verbs with periphrastic future"] = {
description = "Sanskrit verbs with periphrastic future.",
parents = {{name = "verbs by future type", sort = "periphrastic"}},
breadcrumb = "periphrastic future"
}
labels["verbs with s-future"] = {
description = "Sanskrit verbs with s-future.",
parents = {{name = "verbs by future type", sort = "s"}},
breadcrumb = "s-future"
}
-- Perfect types
labels["verbs by perfect type"] = {
description = "Sanskrit verbs categorized by perfect type.",
parents = {{name = "verbs by inflection type", sort = "perfect"}},
breadcrumb = "perfect types"
}
labels["verbs with periphrastic perfect"] = {
description = "Sanskrit verbs with periphrastic perfect.",
parents = {{name = "verbs by perfect type", sort = "periphrastic"}},
breadcrumb = "periphrastic perfect"
}
labels["present verbs"] = {
description = "Sanskrit {{w|Sanskrit_verbs#Present_system|present system}} verbs.",
parents = {{name = "verbs"}},
breadcrumb = "present verbs"
}
labels["perfect verbs"] = {
description = "Sanskrit {{w|Sanskrit_verbs#Perfect_system|perfect system}} verbs.",
parents = {{name = "verbs"}},
breadcrumb = "perfect verbs"
}
labels["Động từ thì quá khứ bất định"] = {
description = "Động từ với {{w|lang=en|Sanskrit_verbs#Aorist_system|hệ thống thì quá khứ bất định}} tiếng Phạn.",
parents = {{name = "Động từ"}},
breadcrumb = "thì quá khứ bất định"
}
labels["Động từ thì tương lai"] = {
description = "Động từ với {{w|lang=en|Sanskrit_verbs#Future_system|hệ thống thì tương lai}} tiếng Phạn.",
parents = {{name = "Động từ"}},
breadcrumb = "thì tương lai"
}
labels["precative verbs"] = {
description = "Sanskrit {{w|Sanskrit_verbs#Aorist_system|precative/benedictive}} verbs.",
parents = {{name = "verbs"}},
breadcrumb = "precative verbs"
}
--------------------------------- Etymology --------------------------------
labels["terms derived from Middle Indo-Aryan by Sanskritization"] = {
description = "Terms derived from various {{w|Middle Indo-Aryan languages}}, such {{w|Prakrit}} and {{w|Pali}} through [[Sanskritization]] (sometimes also called '''hyper-Sanskritization''', '''re-Sanskritization''', or '''hyper-Sanskritism'''). The [[sociolinguistic]] [[prestige]] of Sanskrit often gave rise to restitution-driven hypercorrection, i.e. using knowledge of regular sound innovations from Sanskrit to Middle Indo-Aryan in an attempt to revert these phonological processes. Numerous previously unattested Sanskrit words have hence been \"falsely\" reconstructed by scribes and lexicographers.",
parents = {{ name = "terms by etymology" }}
}
labels["terms with unexpected retroflexion"] = {
description = "Sanskrit terms undergoing unexpected retroflexion.",
parents = {"terms by phonemic property"},
}
labels["terms claimed to undergo Fortunatov's law"] = {
description = "Sanskrit terms claimed to undergo [[w:Fortunatov's law|Fortunatov's law]].",
parents = {"terms by phonemic property"},
}
labels["terms of the defective word group"] = {
description = "{{{langname}}} terms belonging to an Indo-Aryan group " ..
"of words that {{w|Ralph Lilley Turner|Turner}} refers to " ..
"as \"defective\". These words can express a physical, " ..
"mental, or moral defect or express a general meaning of " ..
"''[[lump]]'' or ''[[heap]]''. Such \"defective\" terms " ..
"included here do not have clear Indo-European etymology. " ..
"They are characterized by showing a wide variety of " ..
"alternative forms, perhaps indicating [[substrate]] " ..
"origin or [[taboo deformation]].",
parents = {"terms by etymology"}
}
labels["Proto-New Indo-Aryan"] = {
description = "{{{langname}}} terms reconstructed from New Indo-Aryan lemmas.",
parents = {"terms by etymology"},
}
return {LABELS = labels, HANDLERS = handlers}
e5i2vcuoede4axh4laon155g0d7c3tj
काङ्क्षित
0
372474
2572868
2305560
2026-10-23T05:59:28Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572868
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alt}}===
{{sa-alt}}
==={{section|etym}}===
{{etymon|sa|id=mong muốn|:af|काङ्क्ष्<id:mong muốn>|-इत<id:-ed>|tree=1|text=+}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|participle}}===
{{sa-part|काङ्क्ष्|past|pass}}
# [[mong muốn|Mong muốn]], [[khát khao]].
# [[chờ|Chờ]] [[đợi]].
# Để ý [[đến]], [[quan tâm]] [[đến]], [[lưu ý]] [[đến]].
===={{section|decl}}====
{{sa-adecl|<f:kāṅkṣitā>}}
==={{section|n}}===
{{sa-noun|n|r=काङ्क्ष्}}
# Sự [[mong muốn]], sự [[ao]] ước, sự [[khát khao]].
===={{section|decl}}====
{{sa-ndecl|<n>}}
===={{section|desc}}====
* {{desc|bor=1|hi|कांक्षित}}
==={{section|ref}}===
* {{R:sa:MW|0268}}
8p5bf95w9luptlfstn6b22x40p1iimq
2572869
2572868
2026-10-23T06:00:25Z
Hiyuune
50834
/* Phân từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572869
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alt}}===
{{sa-alt}}
==={{section|etym}}===
{{etymon|sa|id=mong muốn|:af|काङ्क्ष्<id:mong muốn>|-इत<id:-ed>|tree=1|text=+}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|participle}}===
{{sa-part|काङ्क्ष्}}
# [[mong muốn|Mong muốn]], [[khát khao]].
# [[chờ|Chờ]] [[đợi]].
# Để ý [[đến]], [[quan tâm]] [[đến]], [[lưu ý]] [[đến]].
===={{section|decl}}====
{{sa-adecl|<f:kāṅkṣitā>}}
==={{section|n}}===
{{sa-noun|n|r=काङ्क्ष्}}
# Sự [[mong muốn]], sự [[ao]] ước, sự [[khát khao]].
===={{section|decl}}====
{{sa-ndecl|<n>}}
===={{section|desc}}====
* {{desc|bor=1|hi|कांक्षित}}
==={{section|ref}}===
* {{R:sa:MW|0268}}
pnly6reybgs9ntzoq75nc74cfohokgz
Mô đun:number list/data/sa
828
376024
2572837
2432833
2026-10-23T00:47:04Z
Hiyuune
50834
2572837
Scribunto
text/plain
local export = {numbers = {}}
-- Hindi numerals included
export.numbers[0] = {
numeral = "०",
cardinal = "शून्य",
}
export.numbers[1] = {
numeral = "१",
cardinal = "एक",
ordinal = "प्रथम",
multiplier = "एकधा",
distributive = "एकशस्"
}
export.numbers[2] = {
numeral = "२",
cardinal = "द्व",
ordinal = "द्वितीय",
adverbial = "द्विस्",
multiplier = {"द्विधा", "द्वेधा"},
distributive = "द्विशस्"
}
export.numbers[3] = {
numeral = "३",
cardinal = "त्रि",
ordinal = "तृतीय",
adverbial = "त्रिस्",
multiplier = {"त्रिधा", "त्रेधा"},
distributive = "त्रिशस्"
}
export.numbers[4] = {
numeral = "४",
cardinal = "चतुर्",
ordinal = {"चतुर्थ", "तुरीय"},
adverbial = "चतुस्",
multiplier = "चतुर्धा",
}
export.numbers[5] = {
numeral = "५",
cardinal = "पञ्च",
ordinal = "पञ्चम",
multiplier = "पञ्चधा",
distributive = "पञ्चशस्",
collective = "पङ्क्ति",
}
export.numbers[6] = {
numeral = "६",
cardinal = "षष्",
ordinal = "षष्ठ",
multiplier = "षोढा",
distributive = "षट्शस्",
}
export.numbers[7] = {
numeral = "७",
cardinal = "सप्त",
ordinal = {"सप्तम","सप्तथ"},
multiplier = "सप्तधा",
}
export.numbers[8] = {
numeral = "८",
cardinal = "अष्ट",
ordinal = "अष्टम",
multiplier = "अष्टधा",
}
export.numbers[9] = {
numeral = "९",
cardinal = "नव",
ordinal = "नवम",
multiplier = "नवधा",
}
export.numbers[10] = {
numeral = "१०",
cardinal = "दश",
ordinal = "दशम",
multiplier = "दशधा",
collective = "दशत्",
}
export.numbers[11] = {
numeral = "११",
cardinal = "एकादश",
ordinal = "एकादश",
multiplier = "एकादशधा",
}
export.numbers[12] = {
numeral = "१२",
cardinal = "द्वादश",
ordinal = "द्वादश",
multiplier = "द्वादशधा",
}
export.numbers[13] = {
numeral = "१३",
cardinal = "त्रयोदश",
ordinal = "त्रयोदश",
multiplier = "त्रयोदशधा",
}
export.numbers[14] = {
numeral = "१४",
cardinal = "चतुर्दश",
ordinal = "चतुर्दश",
multiplier = "चतुर्दशधा",
}
export.numbers[15] = {
numeral = "१५",
cardinal = "पञ्चदश",
ordinal = "पञ्चदश",
multiplier = "पञ्चदशधा",
}
export.numbers[16] = {
numeral = "१६",
cardinal = "षोडश",
ordinal = "षोडश",
multiplier = "षोडशधा",
}
export.numbers[17] = {
numeral = "१७",
cardinal = "सप्तदश",
ordinal = "सप्तदश",
multiplier = "सप्तदशधा",
}
export.numbers[18] = {
numeral = "१८",
cardinal = "अष्टादश",
ordinal = "अष्टादश",
multiplier = "अष्टादशधा",
}
export.numbers[19] = {
numeral = "१९",
cardinal = {"नवदश", "एकोनविंशति", "ऊनविंशति"},
ordinal = {"नवदश", "एकोनविंश", "ऊनविंश"},
}
export.numbers[20] = {
numeral = "२०",
cardinal = "विंशति",
ordinal = {"विंश","विंशतितम"},
multiplier = "विंशतिधा",
}
export.numbers[21] = {
numeral = "२१",
cardinal = "एकविंशति",
ordinal = {"एकविंश","एकविंशतितम"},
multiplier = "एकविंशतिधा",
}
export.numbers[22] = {
numeral = "२२",
cardinal = "द्वाविंशति",
ordinal = {"द्वाविंश","द्वाविंशतितम"},
multiplier = "द्वाविंशतिधा",
}
export.numbers[23] = {
numeral = "२३",
cardinal = "त्रयोविंशति",
ordinal = {"त्रयोविंश","त्रयोविंशतितम"},
multiplier = "त्रयोविंशतिधा",
}
export.numbers[24] = {
numeral = "२४",
cardinal = "चतुर्विंशति",
ordinal = {"चतुर्विंश","चतुर्विंशतितम"},
multiplier = "चतुर्विंशतिधा",
}
export.numbers[25] = {
numeral = "२५",
cardinal = "पञ्चविंशति",
ordinal = {"पञ्चविंश","पञ्चविंशतितम"},
}
export.numbers[26] = {
numeral = "२६",
cardinal = "षड्विंशति",
ordinal = {"षड्विंश","षड्विंशतितम"},
}
export.numbers[27] = {
numeral = "२७",
cardinal = "सप्तविंशति",
ordinal = {"सप्तविंश","सप्तविंशतितम"},
}
export.numbers[28] = {
numeral = "२८",
cardinal = "अष्टाविंशति",
ordinal = {"अष्टाविंश","अष्टाविंशतितम"},
}
export.numbers[29] = {
numeral = "२९",
cardinal = {"नवविंशति","एकोनत्रिंशत्", "ऊनत्रिंशत्"},
ordinal = {"नवविंश","एकोनत्रिंश", "ऊनत्रिंश"},
}
export.numbers[30] = {
numeral = "३०",
cardinal = "त्रिंशत्",
ordinal = {"त्रिंश","त्रिंशत्तम"},
multiplier = "त्रिंशद्धा",
}
export.numbers[31] = {
numeral = "३१",
cardinal = "एकत्रिंशत्",
ordinal = {"एकत्रिंश","एकत्रिंशत्तम"},
}
export.numbers[32] = {
numeral = "३२",
cardinal = "द्वात्रिंशत्",
ordinal = {"द्वात्रिंश","द्वात्रिंशत्तम"},
}
export.numbers[33] = {
numeral = "३३",
cardinal = "त्रयस्त्रिंशत्",
ordinal = {"त्रयस्त्रिंश","त्रयस्त्रिंशत्तम"},
}
export.numbers[34] = {
numeral = "३४",
cardinal = "चतुस्त्रिंशत्",
ordinal = {"चतुस्त्रिंश","चतुस्त्रिंशत्तम"},
}
export.numbers[35] = {
numeral = "३५",
cardinal = "पञ्चत्रिंशत्",
ordinal = {"पञ्चत्रिंश","पञ्चत्रिंशत्तम"},
}
export.numbers[36] = {
numeral = "३६",
cardinal = "षट्त्रिंशत्",
ordinal = {"षट्त्रिंश","षट्त्रिंशत्तम"},
}
export.numbers[37] = {
numeral = "३७",
cardinal = "सप्तत्रिंशत्",
ordinal = {"सप्तत्रिंश","सप्तत्रिंशत्तम"},
}
export.numbers[38] = {
numeral = "३८",
cardinal = "अष्टात्रिंशत्",
ordinal = {"अष्टात्रिंश","अष्टात्रिंशत्तम"},
}
export.numbers[39] = {
numeral = "३९",
cardinal = {"नवत्रिंशत्","एकोनचत्वारिंशत्", "ऊनचत्वारिंशत्"},
ordinal = {"नवत्रिंश","एकोनचत्वारिंश", "ऊनचत्वारिंश"},
}
export.numbers[40] = {
numeral = "४०",
cardinal = "चत्वारिंशत्",
ordinal = {"चत्वारिंश","चत्वारिंशत्तम"},
}
export.numbers[41] = {
numeral = "४१",
cardinal = "एकचत्वारिंशत्",
ordinal = "एकचत्वारिंश",
}
export.numbers[42] = {
numeral = "४२",
cardinal = {"द्विचत्वारिंशत्", "द्वाचत्वारिंशत्"},
ordinal = {"द्विचत्वारिंश","द्वाचत्वारिंश"},
}
export.numbers[43] = {
numeral = "४३",
cardinal = {"त्रिचत्वारिंशत्", "त्रयश्चत्वारिंशत्"},
ordinal = {"त्रिचत्वारिंश","त्रयश्चत्वारिंश"},
}
export.numbers[44] = {
numeral = "४४",
cardinal = "चतुश्चत्वारिंशत्",
ordinal = "चतुश्चत्वारिंश",
}
export.numbers[45] = {
numeral = "४५",
cardinal = "पञ्चचत्वारिंशत्",
ordinal = "पञ्चचत्वारिंश",
}
export.numbers[46] = {
numeral = "४६",
cardinal = "षट्चत्वारिंशत्",
ordinal = "षट्चत्वारिंश",
}
export.numbers[47] = {
numeral = "४७",
cardinal = "सप्तचत्वारिंशत्",
ordinal = "सप्तचत्वारिंश",
}
export.numbers[48] = {
numeral = "४८",
cardinal = {"अष्टचत्वारिंशत्", "अष्टाचत्वारिंशत्"},
ordinal = {"अष्टचत्वारिंश","अष्टाचत्वारिंश"},
}
export.numbers[49] = {
numeral = "४९",
cardinal = {"नवचत्वारिंशत्","एकोनपञ्चाशत्", "ऊनपञ्चाशत्"},
ordinal = {"नवचत्वारिंश","एकोनपञ्चाशत्तम","ऊनपञ्चाशत्तम"},
}
export.numbers[50] = {
numeral = "५०",
cardinal = "पञ्चाशत्",
ordinal = {"पञ्चाशत्तम","पञ्चाश"},
multiplier = "पञ्चाशद्धा",
distributive = "पञ्चाशच्छस्"
}
export.numbers[51] = {
numeral = "५१",
cardinal = "एकपञ्चाशत्",
ordinal = "एकपञ्चाशत्तम",
}
export.numbers[52] = {
numeral = "५२",
cardinal = {"द्विपञ्चाशत्", "द्वापञ्चाशत्"},
ordinal = {"द्विपञ्चाशत्तम","द्वापञ्चाशत्तम"},
}
export.numbers[53] = {
numeral = "५३",
cardinal = {"त्रिपञ्चाशत्", "त्रयःपञ्चाशत्"},
ordinal = {"त्रिपञ्चाशत्तम","त्रयःपञ्चाशत्तम"},
}
export.numbers[54] = {
numeral = "५४",
cardinal = "चतुःपञ्चाशत्",
ordinal = "चतुःपञ्चाशत्तम",
}
export.numbers[55] = {
numeral = "५५",
cardinal = "पञ्चपञ्चाशत्",
ordinal = "पञ्चपञ्चाशत्तम",
}
export.numbers[56] = {
numeral = "५६",
cardinal = "षट्पञ्चाशत्",
ordinal = "षट्पञ्चाशत्तम",
}
export.numbers[57] = {
numeral = "५७",
cardinal = "सप्तपञ्चाशत्",
ordinal = "सप्तपञ्चाशत्तम",
}
export.numbers[58] = {
numeral = "५८",
cardinal = {"अष्टपञ्चाशत्", "अष्टापञ्चाशत्"},
ordinal = {"अष्टपञ्चाशत्तम","अष्टापञ्चाशत्तम"},
}
export.numbers[59] = {
numeral = "५९",
cardinal = {"नवपञ्चाशत्","एकोनषष्टि", "ऊनषष्टि"},
ordinal = {"नवपञ्चाशत्तम","एकोनषष्टितम","ऊनषष्टितम"},
}
export.numbers[60] = {
numeral = "६०",
cardinal = "षष्टि",
ordinal = {"षष्टितम","षष्ट"},
multiplier = "षष्टिधा",
}
export.numbers[61] = {
numeral = "६१",
cardinal = "एकषष्टि",
ordinal = "एकषष्टितम",
}
export.numbers[62] = {
numeral = "६२",
cardinal = {"द्विषष्टि", "द्वाषष्टि"},
ordinal = {"द्विषष्टितम","द्वाषष्टितम"},
}
export.numbers[63] = {
numeral = "६३",
cardinal = {"त्रिषष्टि", "त्रयःषष्टि"},
ordinal = {"त्रिषष्टितम","त्रयःषष्टितम"},
multiplier = "त्रिषष्टिधा",
}
export.numbers[64] = {
numeral = "६४",
cardinal = "चतुष्षष्टि",
ordinal = "चतुष्षष्टितम",
}
export.numbers[65] = {
numeral = "६५",
cardinal = "पञ्चषष्टि",
ordinal = "पञ्चषष्टितम",
}
export.numbers[66] = {
numeral = "६६",
cardinal = "षट्षष्टि",
ordinal = "षट्षष्टितम",
}
export.numbers[67] = {
numeral = "६७",
cardinal = "सप्तषष्टि",
ordinal = "सप्तषष्टितम",
}
export.numbers[68] = {
numeral = "६८",
cardinal = {"अष्टषष्टि", "अष्टाषष्टि"},
ordinal = {"अष्टषष्टितम","अष्टाषष्टितम"},
}
export.numbers[69] = {
numeral = "६९",
cardinal = {"नवषष्टि","एकोनसप्तति", "ऊनसप्तति"},
ordinal = {"नवषष्टितम","एकोनसप्ततितम","ऊनसप्ततितम"},
}
export.numbers[70] = {
numeral = "७०",
cardinal = "सप्तति",
ordinal = {"सप्ततितम","सप्तत"},
multiplier = "सप्ततिधा",
}
export.numbers[71] = {
numeral = "७१",
cardinal = "एकसप्तति",
ordinal = "एकसप्ततितम",
}
export.numbers[72] = {
numeral = "७२",
cardinal = {"द्विसप्तति", "द्वासप्तति"},
ordinal = {"द्विसप्ततितम","द्वासप्ततितम"},
}
export.numbers[73] = {
numeral = "७३",
cardinal = {"त्रिसप्तति", "त्रयस्सप्तति"},
ordinal = {"त्रिसप्ततितम","त्रयस्सप्ततितम"},
}
export.numbers[74] = {
numeral = "७४",
cardinal = "चतुस्सप्तति",
ordinal = "चतुस्सप्ततितम",
}
export.numbers[75] = {
numeral = "७५",
cardinal = "पञ्चसप्तति",
ordinal = "पञ्चसप्ततितम",
}
export.numbers[76] = {
numeral = "७६",
cardinal = "षट्सप्तति",
ordinal = "षट्सप्ततितम",
}
export.numbers[77] = {
numeral = "७७",
cardinal = "सप्तसप्तति",
ordinal = "सप्तसप्ततितम",
}
export.numbers[78] = {
numeral = "७८",
cardinal = {"अष्टसप्तति", "अष्टासप्तति"},
ordinal = {"अष्टसप्ततितम","अष्टासप्ततितम"},
}
export.numbers[79] = {
numeral = "७९",
cardinal = {"नवसप्तति","एकोनाशीति", "ऊनाशीति"},
ordinal = {"नवसप्ततितम","एकोनाशीतितम","ऊनाशीतितम"},
}
export.numbers[80] = {
numeral = "८०",
cardinal = "अशीति",
ordinal = {"अशीतितम","अशीत"},
}
export.numbers[81] = {
numeral = "८१",
cardinal = "एकाशीति",
ordinal = "एकाशीतितम",
}
export.numbers[82] = {
numeral = "८२",
cardinal = "द्व्यशीति",
ordinal = "द्व्यशीतितम",
}
export.numbers[83] = {
numeral = "८३",
cardinal = "त्र्यशीति",
ordinal = "त्र्यशीतितम",
}
export.numbers[84] = {
numeral = "८४",
cardinal = "चतुरशीति",
ordinal = "चतुरशीतितम",
}
export.numbers[85] = {
numeral = "८५",
cardinal = "पञ्चाशीति",
ordinal = "पञ्चाशीतितम",
}
export.numbers[86] = {
numeral = "८६",
cardinal = "षडशीति",
ordinal = "षडशीतितम",
}
export.numbers[87] = {
numeral = "८७",
cardinal = "सप्ताशीति",
ordinal = "सप्ताशीतितम",
}
export.numbers[88] = {
numeral = "८८",
cardinal = "अष्टाशीति",
ordinal = "अष्टाशीतितम",
}
export.numbers[89] = {
numeral = "८९",
cardinal = {"नवाशीति","एकोननवति","ऊननवति"},
ordinal = {"नवाशीतितम","एकोननवतितम","ऊननवतितम"},
}
export.numbers[90] = {
numeral = "९०",
cardinal = "नवति",
ordinal = {"नवतितम","नवत"},
}
export.numbers[91] = {
numeral = "९१",
cardinal = "एकनवति",
ordinal = "एकनवतितम",
}
export.numbers[92] = {
numeral = "९२",
cardinal = {"द्विनवति", "द्वानवति"},
ordinal = {"द्विनवतितम","द्वानवतितम"},
}
export.numbers[93] = {
numeral = "९३",
cardinal = {"त्रिनवति", "त्रयोनवति"},
ordinal = {"त्रिनवतितम","त्रयोनवतितम"},
}
export.numbers[94] = {
numeral = "९४",
cardinal = "चतुर्नवति",
ordinal = "चतुर्नवतितम",
}
export.numbers[95] = {
numeral = "९५",
cardinal = "पञ्चनवति",
ordinal = "पञ्चनवतितम",
}
export.numbers[96] = {
numeral = "९६",
cardinal = "षण्णवति",
ordinal = "षण्णवतितम",
}
export.numbers[97] = {
numeral = "९७",
cardinal = "सप्तनवति",
ordinal = "सप्तनवतितम",
}
export.numbers[98] = {
numeral = "९८",
cardinal = {"अष्टनवति", "अष्टानवति"},
ordinal = {"अष्टनवतितम","अष्टानवतितम"},
}
export.numbers[99] = {
numeral = "९९",
cardinal = {"नवनवति","एकोनशत","ऊनशत"},
ordinal = {"नवनवतितम","एकोनशततम","ऊनशततम"},
}
export.numbers[100] = {
numeral = "१००",
cardinal = "शत",
ordinal = "शततम",
multiplier = "शतधा",
distributive = "शतशस्"
}
export.numbers[1000] = {
numeral = "१०००",
cardinal = "सहस्र",
ordinal = "सहस्रतम",
multiplier = "सहस्रधा",
distributive = "सहस्रशस्",
}
export.numbers[10000] = {
numeral = "१००००",
cardinal = "अयुत",
multiplier = "अयुतधा",
distributive = "अयुतशस्"
}
export.numbers[100000] = {
numeral = "१०००००",
cardinal = "लक्ष",
multiplier = "लक्षधा",
distributive = "लक्षशस्"
}
export.numbers[1000000] = {
numeral = "१००००००",
cardinal = {"प्रयुत", "नियुत"}
}
export.numbers[10000000] = {
numeral = "१०००००००",
cardinal = "कोटि",
multiplier = "कोटिधा",
distributive = "कोटिशस्"
}
export.numbers[100000000] = {
numeral = "१००००००००",
cardinal = "अर्बुद",
}
export.numbers[1000000000] = {
numeral = "१०००००००००",
cardinal = {"अब्ज", "महार्बुद"}
}
export.numbers[10000000000] = {
numeral = "१००००००००००",
cardinal = "खर्व",
}
export.numbers[100000000000] = {
numeral = "१०००००००००००",
cardinal = {"निखर्व", "महाखर्व"}
}
export.numbers[1000000000000] = {
numeral = "१००००००००००००",
cardinal = "महापद्म",
}
export.numbers[10000000000000] = {
numeral = "१०००००००००००००",
cardinal = "शङ्कु",
}
export.numbers[100000000000000] = {
numeral = "१००००००००००००००",
cardinal = {"जलधि", "महाशङ्कु"}
}
export.numbers[1000000000000000] = {
numeral = "१०००००००००००००००",
cardinal = "अन्त्य",
}
export.numbers[10000000000000000] = {
numeral = "१००००००००००००००००",
cardinal = "मध्य",
}
export.numbers[100000000000000000] = {
numeral = "१०००००००००००००००००",
cardinal = "परार्ध",
}
return export
5w67neowvruq3m1kujbrfona9mgzxjf
एकोनविंशति
0
376025
2572870
2312704
2026-10-23T06:00:56Z
Hiyuune
50834
2572870
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|19}}
===Chữ viết khác===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|num}}===
{{head|sa|Số từ|g=f}}
# [[mười chín|Mười chín]].
#: {{syn|sa|नवदश|ऊनविंशति|tr1=návadaśa|tr2=ūnáviṃśatí}}
===={{section|decl}}====
{{sa-ndecl|<f>}}
==={{section|ref}}===
* {{R:CDIAL}}
* {{R:MW|0230}}
{{cln|sa|Số đếm}}
ghxf6a29ge2vmfqmapfgj3ekglemott
अष्टादश
0
376069
2572871
2455193
2026-10-23T06:02:03Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572871
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|18}}
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}} 1===
{{com+|sa|अष्टा|दश|tr1=aṣṭā́|tr2=dáśa}}.
===={{section|pron}}====
{{sa-IPA|a=2}}
===={{section|num}}====
{{head|sa|Số từ|tr=aṣṭā́daśa}}
# [[mười tám|Mười tám]].
====={{section|decl}}=====
{{sa-ndecl|aṣṭā́daśa<num>}}
====={{section|alt}}=====
* {{alt|sa|अष्टादशन्|tr=aṣṭā́daśan||thân từ trong ngữ pháp truyền thống}}
====={{section|desc}}=====
* {{desc|pra-mag|𑀅𑀝𑁆𑀞𑀸𑀮𑀰}}
** {{desc|inc-oas|অঠাৰ}}
*** {{desc|as|ওঠৰ|tr=üthoro|অঠাৰ|tr2=otharo}}
* {{desc|pra-sau|-}}
** {{desc|hi|अठारह}}
* Dard:
** {{desc|ks|اَرٕداہ|tr=arụdāh}}
===={{section|ref}}====
* {{R:MW|116|col=3|head=aṣṭā́daśan}}
* {{R:CDIAL|aṣṭā́daśa|946|page=42}}
==={{section|etym}} 2===
Xem [[अष्टादश#Từ nguyên 1|từ nguyên 1]], với thay đổi trọng âm.
===={{section|pron}}====
{{sa-IPA|a=4}}
===={{section|adj}}====
{{sa-adj|tr=aṣṭādaśá}}
# Thứ [[mười tám]].
====={{section|decl}}=====
{{sa-decl-adj-mfn|aṣṭādaśá|aṣṭādaśī́|aṣṭādaśá}}
===={{section|ref}}====
* {{R:MW|116|col=3|head=aṣṭādaśá}}
{{cln|sa|Số đếm|Số thứ tự}}
1sqgviflvez20lhh6g1yuciij5fq1qk
2572878
2572871
2026-10-23T06:20:54Z
Hiyuune
50834
2572878
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|18}}
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}} 1===
{{com+|sa|अष्टा|दश|tr1=aṣṭā́|tr2=dáśa}}.
===={{section|pron}}====
{{sa-IPA|a=2}}
===={{section|num}}====
{{head|sa|Số từ|tr=aṣṭā́daśa}}
# [[mười tám|Mười tám]].
====={{section|decl}}=====
{{sa-ndecl|aṣṭā́daśa<num>}}
====={{section|alt}}=====
* {{alt|sa|अष्टादशन्|tr=aṣṭā́daśan||thân từ trong ngữ pháp truyền thống}}
====={{section|desc}}=====
* {{desc|pra-mag|𑀅𑀝𑁆𑀞𑀸𑀮𑀰}}
** {{desc|inc-oas|অঠাৰ}}
*** {{desc|as|ওঠৰ|tr=üthoro|অঠাৰ|tr2=otharo}}
* {{desc|pra-sau|-}}
** {{desc|hi|अठारह}}
* Dard:
** {{desc|ks|اَرٕداہ|tr=arụdāh}}
===={{section|ref}}====
* {{R:MW|116|col=3|head=aṣṭā́daśan}}
* {{R:CDIAL|aṣṭā́daśa|946|page=42}}
==={{section|etym}} 2===
Xem [[अष्टादश#Từ nguyên 1|từ nguyên 1]], với thay đổi trọng âm.
===={{section|pron}}====
{{sa-IPA|a=4}}
===={{section|adj}}====
{{sa-adj|tr=aṣṭādaśá}}
# Thứ [[mười tám]].
====={{section|decl}}=====
{{sa-adecl|aṣṭādaśá<f:aṣṭādaśī́>}}
===={{section|ref}}====
* {{R:MW|116|col=3|head=aṣṭādaśá}}
{{cln|sa|Số đếm|Số thứ tự}}
8q7sz2q9zgen2nolyl4zdks5rdzsdon
सङ्गीत
0
376682
2572872
2314457
2026-10-23T06:02:45Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572872
wikitext
text/x-wiki
{{also|सङ्गति}}
=={{langname|hi}}==
==={{section|n}}===
{{hi-head|Danh từ}}
# {{alt sp|hi|संगीत}}
===={{section|decl}}====
{{hi-ndecl|<M>}}
=={{langname|ne}}==
==={{section|n}}===
{{ne-noun}}
# {{alt sp|ne|संगीत}}
=={{langname|sa}}==
===Chữ viết khác===
{{sa-alt}}
==={{section|etym}}===
{{rfe|sa}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|adj}}===
{{sa-adj}}
# {{alternative form of|sa|संगीत}}
===={{section|decl}}====
{{sa-adecl|सङ्गीत<f:saṅgītā>}}
==={{section|n}}===
{{sa-noun|n}}
# {{alternative form of|sa|संगीत|t=âm nhạc}}
===={{section|decl}}====
{{sa-ndecl|<n>}}
keg7nxllgd99kys4vpx9ft5oa6y6itl
द्वादश
0
377459
2572873
2315907
2026-10-23T06:04:25Z
Hiyuune
50834
2572873
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|12}}
===Chữ viết khác===
{{sa-alt}}
==={{section|etym}} 1===
{{etymon|sa|id=mười hai|:af|द्व<id:hai>|दश<id:mười>|tree=1}}
Từ {{com|sa|द्व|दश|tr1=dvá|tr2=dáśa}}.
===={{section|pron}}====
{{sa-IPA|a=1}}
===={{section|num}}====
{{head|sa|Số từ|tr=dvā́daśa}}
# [[mười hai|Mười hai]].
====={{section|alt}}=====
* {{alt|sa|द्वादशन्|tr=dvā́daśan||thân từ với ngữ pháp truyền thống}}
====={{section|decl}}=====
{{sa-decl-num|dvā́daśa}}
====={{section|drv}}=====
* {{l|sa|द्वादशाह}}
====={{section|desc}}=====
* {{desc|pi|dvādasa}}
* {{desc|pra|𑀩𑀸𑀭𑀲}} {{see desc}}
===={{section|ref}}====
* {{R:MW|503|col=3|head=dvā́daśan}}
* {{R:CDIAL|dvā́daśa|6658|page=380}}
==={{section|etym}} 2===
{{etymon|sa|id=thứ mười hai}}
Từ '[[{{pagename}}#Từ nguyên 1|từ nguyên 1]]', với thay đổi trọng âm.
===={{section|pron}}====
{{sa-IPA|a=3}}
===={{section|adj}}====
{{sa-adj|tr=dvādaśá}}
# Thứ [[mười hai]].
====={{section|decl}}=====
{{sa-adecl|dvādaśá<f:dvādaśī́>}}
===={{section|ref}}====
* {{R:MW|503|col=3|head=dvādaśá}}
* {{R:CDIAL|dvādaśá|6659|page=380}}
{{cln|sa|Số đếm}}
{{cln|sa|Số thứ tự}}
6neh38op15qk0408c34f6wvoarfgvdf
2572874
2572873
2026-10-23T06:04:43Z
Hiyuune
50834
2572874
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|12}}
===Chữ viết khác===
{{sa-alt}}
==={{section|etym}} 1===
{{etymon|sa|id=mười hai|:af|द्व<id:hai>|दश<id:mười>|tree=1}}
Từ {{com|sa|द्व|दश|tr1=dvá|tr2=dáśa}}.
===={{section|pron}}====
{{sa-IPA|a=1}}
===={{section|num}}====
{{head|sa|Số từ|tr=dvā́daśa}}
# [[mười hai|Mười hai]].
====={{section|alt}}=====
* {{alt|sa|द्वादशन्|tr=dvā́daśan||thân từ với ngữ pháp truyền thống}}
====={{section|decl}}=====
{{sa-ndecl|dvā́daśa<num>}}
====={{section|drv}}=====
* {{l|sa|द्वादशाह}}
====={{section|desc}}=====
* {{desc|pi|dvādasa}}
* {{desc|pra|𑀩𑀸𑀭𑀲}} {{see desc}}
===={{section|ref}}====
* {{R:MW|503|col=3|head=dvā́daśan}}
* {{R:CDIAL|dvā́daśa|6658|page=380}}
==={{section|etym}} 2===
{{etymon|sa|id=thứ mười hai}}
Từ '[[{{pagename}}#Từ nguyên 1|từ nguyên 1]]', với thay đổi trọng âm.
===={{section|pron}}====
{{sa-IPA|a=3}}
===={{section|adj}}====
{{sa-adj|tr=dvādaśá}}
# Thứ [[mười hai]].
====={{section|decl}}=====
{{sa-adecl|dvādaśá<f:dvādaśī́>}}
===={{section|ref}}====
* {{R:MW|503|col=3|head=dvādaśá}}
* {{R:CDIAL|dvādaśá|6659|page=380}}
{{cln|sa|Số đếm}}
{{cln|sa|Số thứ tự}}
2m231n8krzmwr9d9lgh9aia7wl2qtwj
xì ke
0
377623
2572717
2316195
2026-10-22T12:30:15Z
~2026-56431-96
62110
/* Tiếng Việt */
2572717
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|etym}}===
{{rfe|vi|Có thể từ {{com|vi|xì|ke|t2=ketamine}} hoặc từ {{bor|vi|en|scag}}.}}
==={{section|pron}}===
{{vi-pron}}
==={{section|noun}}===
{{vi-noun}}
# Loại [[ma túy]] [[tổng hợp]] có [[tác dụng]] [[phân ly]], [[kích thích]] hệ [[thần kinh]] [[trung ương]] dạng [[bột]] hoặc viên nén màu trắng.
===={{section|trans}}====
{{trans-top|{{pagename}}}}
* {{langname|en}}: {{t+|en|scag}}.
{{trans-bottom}}
49784yg2guth5stp1ak5edvomksrag6
प्रज्ञा
0
378872
2572875
2512560
2026-10-23T06:05:43Z
Hiyuune
50834
/* Danh từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572875
wikitext
text/x-wiki
=={{langname|hi}}==
==={{đm|etym}}===
{{lbor|hi|sa|प्रज्ञा|t=[[trí tuệ]], [[tri thức]], [[sáng trí]]}}.
==={{đm|pron}}===
* {{hi-IPA}}
==={{đm|n}}===
{{hi-noun|f}}
# Sự [[minh triết]], [[trí tuệ]], sự [[sáng trí]], sự [[thấu hiểu]] [[sâu sắc]].
#: {{syn|hi|बुद्धि|विवेक|ज्ञान}}
#: {{ant|hi|मूर्खता|अज्ञान}}
==={{đm|pr-n}}===
{{hi-proper noun|f}}
# {{given name|hi|nữ|from=tiếng Phạn}}.
===={{đm|decl}}====
{{hi-ndecl|<F>}}
==={{đm|ref}}===
* {{R:hi:Dasa||3143}}
* {{R:hi:McGregor||654}}
* {{R:hi:Chaturvedi||450}}
=={{langname|sa}}==
==={{đm|alt-script}}===
{{sa-alt}}
==={{đm|etym}}===
Từ {{etym-af|sa|प्र-|ज्ञा|tr2=√jñā|gloss1=hướng tới, về phía trước|gloss2=biết}}.
==={{đm|pron}}===
{{sa-IPA|a=2}}
==={{đm|n}}===
{{sa-noun|f|tr=prajñā́}}
# [[tri thức|Tri thức]], [[trí tuệ]], sự [[hiếu biết]], óc [[phán đoán]]. ({{sa-a|ŚBr}})
# [[kế hoạch|Kế hoạch]], [[phương pháp]]. ({{sa-a|ŚBr}}, {{sa-a|ŚāṅkhŚr}})
# Người phụ nữ thông minh hoặc sáng suốt. ({{sa-a|W}})
# Sự minh triết được nhân hóa thành nữ thần, [[Saraswati]]. ({{sa-a|L}})
# Một trong số những {{mention|sa|शक्ति||năng lượng}}.
# {{lb|sa|Buddhism}} Trí tuệ toàn hảo. ({{sa-a|MWB}})
# Năng lượng của [[bản sơ Phật]]. ({{sa-a|MWB}})
===={{đm|decl}}====
{{sa-ndecl|prajñā́<f>}}
===={{đm|desc}}====
* {{desctree|pi|paññā}}
* {{desc|bor=1|as|প্রজ্ঞা}}
* {{desc|bor=1|bn|প্রজ্ঞা}}
** {{desc|bor=1|en|Progya|Pragya}}
** {{desc|bor=1|syl|ꠙ꠆ꠞꠎ꠆ꠘꠣ}}
* {{desc|bor=1|en|Prajna|prajna|prajñā}}
* {{desc|bor=1|inc-hnd|-}}
*: {{desc|hi|प्रज्ञा}}
*: {{desc|ur|پرگیہ|tr=pragya}}
** {{desc|bor=1|en|Pragya}}
* {{desc|bor=1|kn|ಪ್ರಜ್ಞ}}
* {{desc|bor=1|ml|പ്രജ്ഞ}}
* {{desc|bor=1|mr|प्रज्ञा}}
* {{desc|bor=1|ne|प्रज्ञा}}
* {{desc|bor=1|or|ପ୍ରଜ୍ଞା}}
* {{desc|bor=1|si|ප්රඥ්ඥාව}}
* {{desc|bor=1|ta|பிரக்யா}}
** {{desc|bor=1|en|Pirakya}}
* {{desc|bor=1|te|ప్రజ్ఞ}}
* {{desc|bor=1|th|ปรัชญา}}
==={{đm|adj}}===
{{sa-adj form}}
# {{inflection of|sa|प्रज्ञ||nom|s|ở|f}}.
==={{đm|root}}===
{{sa-root}}
# [[biết|Biết]], [[hiểu]] (nhất là [[phương pháp]] hoặc [[cách thức]] của [[hành động]]), [[nhận thức]], [[phân biệt]], biết về, [[quen biết]] (với).
# [[tìm|Tìm]] ra, [[khám phá]], [[lĩnh hội]], [[học hỏi]].
===={{đm|drv}}====
{{col2|sa|प्रजानाति|प्रज्ञापयति|प्रज्ञित}}
===={{đm|desc}}====
* {{desctree|pra|𑀧𑀡𑁆𑀡𑀸}}
==={{đm|ref}}===
* {{R:MW|0659/1-2}}
{{cln|sa|Gốc từ có tiền tố}}
j8aaz3cwtj9d1sbyi4mv7tbdf5xbbdn
2572876
2572875
2026-10-23T06:06:13Z
Hiyuune
50834
/* Tính từ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572876
wikitext
text/x-wiki
=={{langname|hi}}==
==={{đm|etym}}===
{{lbor|hi|sa|प्रज्ञा|t=[[trí tuệ]], [[tri thức]], [[sáng trí]]}}.
==={{đm|pron}}===
* {{hi-IPA}}
==={{đm|n}}===
{{hi-noun|f}}
# Sự [[minh triết]], [[trí tuệ]], sự [[sáng trí]], sự [[thấu hiểu]] [[sâu sắc]].
#: {{syn|hi|बुद्धि|विवेक|ज्ञान}}
#: {{ant|hi|मूर्खता|अज्ञान}}
==={{đm|pr-n}}===
{{hi-proper noun|f}}
# {{given name|hi|nữ|from=tiếng Phạn}}.
===={{đm|decl}}====
{{hi-ndecl|<F>}}
==={{đm|ref}}===
* {{R:hi:Dasa||3143}}
* {{R:hi:McGregor||654}}
* {{R:hi:Chaturvedi||450}}
=={{langname|sa}}==
==={{đm|alt-script}}===
{{sa-alt}}
==={{đm|etym}}===
Từ {{etym-af|sa|प्र-|ज्ञा|tr2=√jñā|gloss1=hướng tới, về phía trước|gloss2=biết}}.
==={{đm|pron}}===
{{sa-IPA|a=2}}
==={{đm|n}}===
{{sa-noun|f|tr=prajñā́}}
# [[tri thức|Tri thức]], [[trí tuệ]], sự [[hiếu biết]], óc [[phán đoán]]. ({{sa-a|ŚBr}})
# [[kế hoạch|Kế hoạch]], [[phương pháp]]. ({{sa-a|ŚBr}}, {{sa-a|ŚāṅkhŚr}})
# Người phụ nữ thông minh hoặc sáng suốt. ({{sa-a|W}})
# Sự minh triết được nhân hóa thành nữ thần, [[Saraswati]]. ({{sa-a|L}})
# Một trong số những {{mention|sa|शक्ति||năng lượng}}.
# {{lb|sa|Buddhism}} Trí tuệ toàn hảo. ({{sa-a|MWB}})
# Năng lượng của [[bản sơ Phật]]. ({{sa-a|MWB}})
===={{đm|decl}}====
{{sa-ndecl|prajñā́<f>}}
===={{đm|desc}}====
* {{desctree|pi|paññā}}
* {{desc|bor=1|as|প্রজ্ঞা}}
* {{desc|bor=1|bn|প্রজ্ঞা}}
** {{desc|bor=1|en|Progya|Pragya}}
** {{desc|bor=1|syl|ꠙ꠆ꠞꠎ꠆ꠘꠣ}}
* {{desc|bor=1|en|Prajna|prajna|prajñā}}
* {{desc|bor=1|inc-hnd|-}}
*: {{desc|hi|प्रज्ञा}}
*: {{desc|ur|پرگیہ|tr=pragya}}
** {{desc|bor=1|en|Pragya}}
* {{desc|bor=1|kn|ಪ್ರಜ್ಞ}}
* {{desc|bor=1|ml|പ്രജ്ഞ}}
* {{desc|bor=1|mr|प्रज्ञा}}
* {{desc|bor=1|ne|प्रज्ञा}}
* {{desc|bor=1|or|ପ୍ରଜ୍ଞା}}
* {{desc|bor=1|si|ප්රඥ්ඥාව}}
* {{desc|bor=1|ta|பிரக்யா}}
** {{desc|bor=1|en|Pirakya}}
* {{desc|bor=1|te|ప్రజ్ఞ}}
* {{desc|bor=1|th|ปรัชญา}}
==={{đm|adj}}===
{{sa-head|af}}
# {{inflection of|sa|प्रज्ञ||nom|s|ở|f}}.
==={{đm|root}}===
{{sa-root}}
# [[biết|Biết]], [[hiểu]] (nhất là [[phương pháp]] hoặc [[cách thức]] của [[hành động]]), [[nhận thức]], [[phân biệt]], biết về, [[quen biết]] (với).
# [[tìm|Tìm]] ra, [[khám phá]], [[lĩnh hội]], [[học hỏi]].
===={{đm|drv}}====
{{col2|sa|प्रजानाति|प्रज्ञापयति|प्रज्ञित}}
===={{đm|desc}}====
* {{desctree|pra|𑀧𑀡𑁆𑀡𑀸}}
==={{đm|ref}}===
* {{R:MW|0659/1-2}}
{{cln|sa|Gốc từ có tiền tố}}
k4qo7eo1hcmmjljvo3kwr3a83fzxo0u
ताम्र
0
379568
2572885
2320280
2026-10-23T06:32:16Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572885
wikitext
text/x-wiki
=={{langname|sa}}==
{{wp|ताम्रम्|lang=sa}}
==={{section|alternative script}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA|a=2}}
==={{section|adj}}===
{{sa-adj|tr=tāmrá}}
# [[màu|Màu]] [[đồng]] [[đỏ]].
===={{section|decl}}====
{{sa-adecl|tāmrá<f:tāmrā́>}}
==={{section|n}}===
{{sa-noun|n|tr=tāmrá}}
# [[đồng|Đồng]].
===={{section|decl}}====
{{sa-ndecl|tāmrá<n>}}
===={{section|drv}}====
{{col|sa|ताम्रक|ताम्रपर्णी}}
===={{section|desc}}====
{{top2}}
* {{desc|pi|tamba}}
* {{desc|pra-ard|𑀢𑀁𑀩}}
** {{desc|hif|tamba}}
* {{desc|pra-hel}}
** {{desc|si|තඹ}}
* {{desc|pra-mag}}
** {{desc|as|তাম}}
** {{desc|bn|তামা}}
*** {{desc|aot|tama|bor=1}}
** {{desc|haj|তামা}}
* {{desc|pra-mah|𑀢𑀁𑀩}}
** {{desc|mr|तांबे}}
* {{desc|pra-sau|𑀢𑀁𑀩}}
** {{desc|saz|ꢡꢪ꣄ꢨꢾ}}
** {{desc|sd|ٽامو|टामो}}
** {{desc|gu|તાંબું}}
** Hindustan:
**: {{desc|hi|ताँबा}}
**: {{desc|ur|تانبا}}
** {{desc|pa|ਤਾਂਬਾ}}
* {{desc|hi|ताम्र|bor=1}}
* {{desc|kn|ತಾಮ್ರ|bor=1}}
* {{desc|ml|താമ്ര|താമ്രം|bor=1}}
* {{desc|tcy|താംബ്ര|bor=1}}
* {{desc|sd|टामो|bor=1}}
* {{desc|ta|தாமிரம்|bor=1}}
* {{desc|te|తామ్రము|bor=1}}
* {{desc|sa|ताम्रक|der=1}}
** {{desc|jv|tembaga|bor=1}}
** {{desc|ms|tembaga|bor=1}}
*** {{desc|id|tembaga|bor=1}}
*** {{desc|nl|tombak|bor=1}}
**** {{desc|da|tombak|bor=1}}
**** {{desc|de|Tombak|bor=1}}
**** {{desc|bor=1|en|tombak|tombac}}
**** {{desc|fr|tombac|bor=1}}
**** {{desc|it|tombacco|bor=1}}
**** {{desc|ps|ټومباک|bor=1}}
**** {{desc|bor=1|pt|tambaque|tambaca}}
**** {{desc|ru|томпа́к|bor=1}}
*** {{desc|es|tumbaga|bor=1}}
**** {{desc|en|tumbaga|bor=1}}
{{bottom}}
===={{section|see}}====
* {{l|sa|तमर}}
* {{l|sa|तामरस}}
==={{section|further}}===
* {{R:Cappeller Sanskrit-English|column=2|page=201}}
* {{R:MCD|108}}
* {{R:sa:MW|443|column=1}}
* {{R:sa:DCS}}
{{C|sa|Nguyên tố hóa học|Kim loại}}
p81th4rxde62ingw4vmyw5kvxbywqcy
Hautkrebs
0
383994
2572896
2328721
2026-10-23T06:47:37Z
Hiyuune
50834
/* Cách phát âm */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572896
wikitext
text/x-wiki
=={{langname|de}}==
{{wp|lang=de}}
==={{ĐM|etym}}===
Từ {{compound|de|Haut|t1=da|Krebs|t2=ung thư}}
==={{ĐM|pron}}===
* {{IPA|de|/ˈhaʊ̯tˌkʁeːps/}}
* {{audio|de|De-Hautkrebs.ogg|a=Berlin}}
* {{hyph|de|Haut|krebs}}
==={{ĐM|n}}===
{{de-noun|m}}
# {{lb|de|pathology}} [[ung thư|Ung thư]] [[da]].
===={{ĐM|decl}}====
{{de-ndecl|m}}
==={{ĐM|further}}===
* {{R:de:Duden}}
{{C|de|Ung thư học}}
qmfephl729ph8brzuwv20ly7zemj1pg
Hautkrebsen
0
383997
2572895
2328690
2026-10-23T06:47:28Z
Hiyuune
50834
/* Cách phát âm */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572895
wikitext
text/x-wiki
=={{langname|de}}==
==={{ĐM|pron}}===
* {{IPA|de|/ˈhaʊ̯tˌkʁeːpsn̩/}}
* {{audio|de|De-Hautkrebsen.ogg|a=Berlin}}
* {{hyph|de|Haut|kreb|sen}}
==={{ĐM|n}}===
{{head|de|Biến thể hình thái danh từ|g=m}}
# {{inflection of|de|Hautkrebs||dat|p}}
0zvlflruoorhcj66bx4mhhrhjsetydt
शत
0
385849
2572886
2512303
2026-10-23T06:32:44Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572886
wikitext
text/x-wiki
{{also|शांत}}
=={{langname|hi}}==
==={{ĐM|etym}}===
{{bor+|hi|sa|शत}}. {{doublet|hi|सौ|सद}}.
==={{ĐM|pron}}===
* {{hi-IPA}}
==={{ĐM|numeral}}===
{{hi-num-card}}
# {{lb|hi|literary}} [[trăm|Trăm]].
#: {{syn|hi|सौ|सद|q2=thơ ca}}
===={{ĐM|drv}}====
{{col|hi|प्रतिशत|शताब्दी|शतवर्ष|शतवार्षिक|शतांश|शतशत|शतपाद}}
==={{ĐM|ref}}===
* {{R:hi:McGregor}}
=={{langname|sa}}==
{{number box|sa|100}}
==={{ĐM|alt sc}}===
{{sa-alt}}
==={{ĐM|etym}}===
{{dercat|sa|inc-pro|inh=1}}
<!-- {{ety|sa|id=hundred|:inh|iir-pro:*ćatám<id:hundred>|tree=1}} -->
Từ {{inh|sa|iir-pro|*ćatám|t=trăm}}, từ {{inh|sa|ine-pro|*ḱm̥tóm|t=trăm}}.<ref>{{R:sa:EWAia|vol=2|page=606|head=śatá-}}</ref> Cùng gốc với {{cog|ae|𐬯𐬀𐬙𐬀}}, {{cog|grc|ἑκατόν}}, {{cog|la|centum}}, {{cog|xto|känt}}, {{cog|en|hundred|hund-red}}.
==={{ĐM|pron}}===
{{sa-IPA|a=2}}
==={{ĐM|numeral}}===
{{head|sa|numeral|tr=śatá|g=n}}, hiếm khi {{g|m}}, ở cuối một từ ghép {{g|f}}(ī)
# [[trăm|Trăm]].
# Bất kỳ con [[số]] rất lớn nào.
===={{ĐM|decl}}====
{{sa-ndecl|śatá<n>}}
{{sa-ndecl|śatá<m>}}
===={{ĐM|desc}}====
* {{desctree|inc-ash|𑀲𑀢}}
* Dard:
** {{desc|ks|ہَتھ|tr=hath}}
** {{desc|scl|شل|tr=śal}}
* {{desctree|bor=1|kaw|śata}}
* {{desc|pi|sata}}
* {{desc|bn|শত|bor=1}}
** {{desc|rhg|cót|bor=1}}
* {{desc|hi|शत|bor=1}}
* {{desc|ta|சதம்|bor=1}}
* {{desc|te|శతము|lbor=1}}
* {{desc|dv|ސަތޭކަ|bor=1|der=1}}
* {{desc|th|ศต|bor=1}}
==={{ĐM|ref}}===
<references />
==={{ĐM|further}}===
* {{R:MW|1048|col=3}}
{{cln|sa|Số đếm}}
5o90hpszritsffjoya7cu026xpqbyux
2572887
2572886
2026-10-23T06:33:02Z
Hiyuune
50834
/* Từ nguyên */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572887
wikitext
text/x-wiki
{{also|शांत}}
=={{langname|hi}}==
==={{ĐM|etym}}===
{{bor+|hi|sa|शत}}. {{doublet|hi|सौ|सद}}.
==={{ĐM|pron}}===
* {{hi-IPA}}
==={{ĐM|numeral}}===
{{hi-num-card}}
# {{lb|hi|literary}} [[trăm|Trăm]].
#: {{syn|hi|सौ|सद|q2=thơ ca}}
===={{ĐM|drv}}====
{{col|hi|प्रतिशत|शताब्दी|शतवर्ष|शतवार्षिक|शतांश|शतशत|शतपाद}}
==={{ĐM|ref}}===
* {{R:hi:McGregor}}
=={{langname|sa}}==
{{number box|sa|100}}
==={{ĐM|alt sc}}===
{{sa-alt}}
==={{ĐM|etym}}===
{{dercat|sa|inc-pro|inh=1}}
{{ety|sa|id=hundred|:inh|iir-pro:*ćatám<id:hundred>|tree=1}}
Từ {{inh|sa|iir-pro|*ćatám|t=trăm}}, từ {{inh|sa|ine-pro|*ḱm̥tóm|t=trăm}}.<ref>{{R:sa:EWAia|vol=2|page=606|head=śatá-}}</ref> Cùng gốc với {{cog|ae|𐬯𐬀𐬙𐬀}}, {{cog|grc|ἑκατόν}}, {{cog|la|centum}}, {{cog|xto|känt}}, {{cog|en|hundred|hund-red}}.
==={{ĐM|pron}}===
{{sa-IPA|a=2}}
==={{ĐM|numeral}}===
{{head|sa|numeral|tr=śatá|g=n}}, hiếm khi {{g|m}}, ở cuối một từ ghép {{g|f}}(ī)
# [[trăm|Trăm]].
# Bất kỳ con [[số]] rất lớn nào.
===={{ĐM|decl}}====
{{sa-ndecl|śatá<n>}}
{{sa-ndecl|śatá<m>}}
===={{ĐM|desc}}====
* {{desctree|inc-ash|𑀲𑀢}}
* Dard:
** {{desc|ks|ہَتھ|tr=hath}}
** {{desc|scl|شل|tr=śal}}
* {{desctree|bor=1|kaw|śata}}
* {{desc|pi|sata}}
* {{desc|bn|শত|bor=1}}
** {{desc|rhg|cót|bor=1}}
* {{desc|hi|शत|bor=1}}
* {{desc|ta|சதம்|bor=1}}
* {{desc|te|శతము|lbor=1}}
* {{desc|dv|ސަތޭކަ|bor=1|der=1}}
* {{desc|th|ศต|bor=1}}
==={{ĐM|ref}}===
<references />
==={{ĐM|further}}===
* {{R:MW|1048|col=3}}
{{cln|sa|Số đếm}}
cgxlino67ebm50qy8ook6q6g7b8o9cd
2572888
2572887
2026-10-23T06:33:14Z
Hiyuune
50834
2572888
wikitext
text/x-wiki
{{also|शांत}}
=={{langname|hi}}==
==={{ĐM|etym}}===
{{bor+|hi|sa|शत}}. {{doublet|hi|सौ|सद}}.
==={{ĐM|pron}}===
* {{hi-IPA}}
==={{ĐM|numeral}}===
{{hi-num-card}}
# {{lb|hi|literary}} [[trăm|Trăm]].
#: {{syn|hi|सौ|सद|q2=thơ ca}}
===={{ĐM|drv}}====
{{col|hi|प्रतिशत|शताब्दी|शतवर्ष|शतवार्षिक|शतांश|शतशत|शतपाद}}
==={{ĐM|ref}}===
* {{R:hi:McGregor}}
=={{langname|sa}}==
{{number box|sa|100}}
==={{ĐM|alt sc}}===
{{sa-alt}}
==={{ĐM|etym}}===
{{dercat|sa|inc-pro|inh=1}}
{{ety|sa|id=trăm|:inh|iir-pro:*ćatám<id:trăm>|tree=1}}
Từ {{inh|sa|iir-pro|*ćatám|t=trăm}}, từ {{inh|sa|ine-pro|*ḱm̥tóm|t=trăm}}.<ref>{{R:sa:EWAia|vol=2|page=606|head=śatá-}}</ref> Cùng gốc với {{cog|ae|𐬯𐬀𐬙𐬀}}, {{cog|grc|ἑκατόν}}, {{cog|la|centum}}, {{cog|xto|känt}}, {{cog|en|hundred|hund-red}}.
==={{ĐM|pron}}===
{{sa-IPA|a=2}}
==={{ĐM|numeral}}===
{{head|sa|numeral|tr=śatá|g=n}}, hiếm khi {{g|m}}, ở cuối một từ ghép {{g|f}}(ī)
# [[trăm|Trăm]].
# Bất kỳ con [[số]] rất lớn nào.
===={{ĐM|decl}}====
{{sa-ndecl|śatá<n>}}
{{sa-ndecl|śatá<m>}}
===={{ĐM|desc}}====
* {{desctree|inc-ash|𑀲𑀢}}
* Dard:
** {{desc|ks|ہَتھ|tr=hath}}
** {{desc|scl|شل|tr=śal}}
* {{desctree|bor=1|kaw|śata}}
* {{desc|pi|sata}}
* {{desc|bn|শত|bor=1}}
** {{desc|rhg|cót|bor=1}}
* {{desc|hi|शत|bor=1}}
* {{desc|ta|சதம்|bor=1}}
* {{desc|te|శతము|lbor=1}}
* {{desc|dv|ސަތޭކަ|bor=1|der=1}}
* {{desc|th|ศต|bor=1}}
==={{ĐM|ref}}===
<references />
==={{ĐM|further}}===
* {{R:MW|1048|col=3}}
{{cln|sa|Số đếm}}
n4a0czj8smp1srg1n38grsiqcs59g8e
ປູຈ
0
389617
2572726
2338804
2026-10-22T13:30:22Z
Hiyuune
50834
/* Tiếng Khơ Mú */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572726
wikitext
text/x-wiki
=={{langname|kjg}}==
==={{ĐM|etym}}===
Từ {{inh|kjg|aav-pro|*puːcˀ}}.
==={{ĐM|pron}}===
* {{IPA|kjg|/púːc/}}
==={{ĐM|verb}}===
{{head|kjg|Động từ|tr=puuc|nguyên nhân|ປຶນປູຈ}}
# [[cởi]] [[quần áo]].
mpglcakgadby6lzdn7wj9c17oq2woxe
पश्चिम
0
396820
2572891
2352592
2026-10-23T06:40:09Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572891
wikitext
text/x-wiki
{{also|पश्चिमी}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:Compass-icon bb W.svg|thumb|'''पश्चिम''']]
==={{section|etym}}===
{{lbor|hi|sa|पश्चिम}}.
==={{section|pron}}===
* {{hi-IPA}}
==={{section|n}}===
{{hi-noun|m|ur=پشچم}}
# [[hướng|Hướng]] [[tây|Tây]].
===={{section|decl}}====
{{hi-ndecl|<M>}}
===={{section|coord}}====
{{danh sách:điểm la bàn/hi}}
===={{section|drv}}====
* {{l|hi|पश्चिमी}}
{{topics|hi|Điểm la bàn}}
=={{langname|mr}}==
[[File:Brosen windrose MR.png|thumb|{{lang|mr|पश्चिम दिशा}}]]
{{swp|mr:+ दिशा}}
==={{section|etym}}===
{{lbor|mr|sa|पश्चिम}}.
==={{section|pron}}===
* {{mr-IPA}}
==={{section|adj}}===
{{mr-adj}}
# [[Tây]].
#: {{syn|mr|पाश्चिमात्य}}
==={{section|n}}===
{{mr-noun|g=f}}
# [[hướng|Hướng]] [[tây|Tây]].
==={{section|see}}===
{{list:điểm la bàn/mr}}
==={{section|further}}===
* {{R:mr:Berntsen}}
* {{R:mr:Molesworth}}
{{C|mr|Điểm la bàn}}
=={{langname|ne}}==
==={{section|etym}}===
{{lbor|ne|sa|पश्चिम}}.
==={{section|pron}}===
* {{ne-IPA}}
==={{section|n}}===
{{ne-noun}}
# [[hướng|Hướng]] [[tây|Tây]].
{{C|ne|Điểm la bàn}}
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
Có liên quan từ {{l|sa|पश्चा|tr=paścā́}}, từ {{inh|sa|iir-pro|*pasčaH}}, từ {{inh|sa|ine-pro||*pos-kʷéh₁ }}, từ {{mention|ine-pro|*pós||đằng sau}}. Cùng gốc với {{cog|la|post||đằng sau}}, {{cog|ae|𐬞𐬀𐬯𐬗𐬀}}, {{cog|peo|ts=pasā}}.
==={{section|pron}}===
{{sa-IPA}}
==={{section|adj}}===
{{sa-adj}}
# Đứng [[sau cùng]]; đứng [[cuối cùng]].
===={{section|decl}}====
{{sa-adecl|<f:paścimā>}}
===={{section|coord}}====
{{list:điểm la bàn/sa}}
===={{section|desc}}====
* {{desc|pra|𑀧𑀘𑁆𑀙𑀼𑀫}}
* Dard:
** {{desc|ks|پَچھیُٛم}}
* Tây:
** Prakrit Shauraseni:
*** {{desc|pa}}
**** {{desc|pa|ਪਛਵਾ|t=gió Tây|sclang=1}}
**** {{desc|pa|پَچوَا|t=Tây|sclang=1}}
*** Hindustan:
**** {{desc|hi|पच्वां}}
**** {{desc|ur|پَچوَاں}}
* Nam:
** Prakrit Elu:
*** {{desc|si|පැසිම්|පැසුම්}}
'''Từ vay mượn'''
* {{desc|dv|ފަކުސަމަ}}
* {{desc|bbc|pastima}}
* {{desc|bn|পশ্চিম}}
* {{desc|gu|પશ્ચિમ}}
* {{desc|hi|पश्चिम}}
* {{desc|kn|ಪಶ್ಚಿಮ}}
* {{desc|km|បស្ចិម}}
* {{desc|mr|पश्चिम}}
* {{desc|ne|पश्चिम}}
* {{desctree|kaw|paścima}}
* {{desc|pi|pacchima}}
* {{desc|pa|ਪੱਛਮ}}
* {{desc|rhg|fosím}}
* {{desc|te|పశ్చిమ}}
* {{desc|th|ประจิม}}
==={{section|ref}}===
* {{R:MW|612|col=2}}
* {{R:DCS}}
{{C|sa|Điểm la bàn}}
940nhi7h5malohu98goyou254vr3scd
स्थूणा
0
402888
2572916
2367514
2026-10-23T07:29:51Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572916
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
Từ {{inh|sa|iir-pro|*stʰuHnáH||cột, trụ}}, từ {{inh|sa|ine-pro||*sth₂-uh₂-néh₂}}, từ {{mention|ine-pro|*steh₂-||đứng}}. Cùng gốc với {{cog|ae|𐬯𐬙𐬏𐬥𐬀}}, {{cog|fa|ستون|tr=sotun|t=cột, trụ}}.
==={{section|pron}}===
{{sa-IPA|a=1}}
==={{section|n}}===
{{sa-noun|f|tr=sthū́ṇā}}
# [[cột|Cột]], [[trụ]].
===={{section|decl}}====
{{sa-ndecl|sthū́ṇā<f>}}
===={{section|desc}}====
* {{desc|pi|thūṇā}}
* {{desctree|pra|𑀣𑀽𑀡𑀸}}
aw5gbdjeaxkiuj9yqsbn7138xe1hhly
पञ्चदश
0
403010
2572917
2368874
2026-10-23T07:30:21Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572917
wikitext
text/x-wiki
=={{langname|sa}}==
{{number box|sa|15}}
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}} 1===
{{ety|sa|id=15|:af|पञ्च<id:năm>|दश<id:mười>|tree=1|text=+}}
===={{section|pron}}====
{{sa-IPA|a=1}}
===={{section|num}}====
{{head|sa|Số từ|tr=páñcadaśa}}
# [[mười lăm|Mười lăm]].
====={{section|decl}}=====
{{sa-ndecl|páñcadaśa<num>}}
====={{section|alternative form}}=====
* {{alt|sa|पञ्चदशन्|tr=páñcadaśan||thân từ theo ngữ pháp truyền thống}}
====={{section|desc}}=====
* {{desc|inc-ash|𑀧𑀁𑀘𑀤𑀲}}
** {{desc|pra|𑀧𑀡𑁆𑀡𑀭𑀲|𑀧𑀡𑁆𑀡𑀸𑀭𑀲|𑀧𑀡𑀭𑀲}} {{see desc}}
===={{section|ref}}====
* {{R:MW|576|col=2|head=páñcadaśan}}
* {{R:CDIAL|páñcadaśa|7662|page=432}}
==={{section|etym}} 2===
Xem 'Từ nguyên 1', với thay đổi trọng âm.
===={{section|pron}}====
{{sa-IPA|a=4}}
===={{section|adj}}====
{{sa-adj|tr=pañcadaśá}}
# Thứ [[mười lăm]].
====={{section|decl}}=====
{{sa-adecl|pañcadaśá<f:pañcadaśī́>}}
===={{section|ref}}====
* {{R:MW|576|col=1|head=pañcadaśa}}
* {{R:CDIAL|pañcadaśá|7663|page=432}}
{{cln|sa|Số đếm}}
{{cln|sa|Số thứ tự}}
7u31x55rm2btlr8j4y5fh1ayuuxzqan
Mô đun:sa-verb
828
403192
2572920
2448713
2026-10-23T07:46:26Z
Hiyuune
50834
2572920
Scribunto
text/plain
--[==[
This module implements {{tl|sa-conj}}, which shows the conjugation table of one tense of a Sanskrit verb (or several
tables, for a table set), and {{tl|sa-root deriv}}, which lists the forms and terms derived from a root.
The following terminology is used:
* A '''principal part''' is a form given in the call. The '''head''' is the third-person singular of the tense; where
needed, the call also gives the third-person plural (`3p:`), the middle (`mid:`) or the passive (`pass:`). A principal
part may come with its '''stem''' (`stem:`, `weakstem:`, `midstem:`) when the stem can't be read off the form.
* A '''slot''' is one cell of a table: a mood, voice and person-number such as `indic_act_3s`, a participle such as
`part_mid`, or a nonfinite form such as `inf`.
* A '''form group''' is one stem with one set of endings from [[Module:sa-verb/data]], along with the sandhi options in
force when the group was added. The forms of a table are the forms of its groups, in order, each made by joining a
stem and an ending with `join` in [[Module:sa-utilities]].
* A '''table set''' is a code given in place of the tense (e.g. `caus` for a causative) that shows several tables from
one head. We read the stem off the head and add each table's ending to it; the tables are listed in
`data.table_sets`.
All the work is done in SLP1. The forms are shown in the script of the head (or of the page name, if the head is in
IAST), with the IAST below them.
The code is organized as follows:
* Parsing the call: `export.show` and `export.conjugate` (the entry points), `Spec` (the inline spec after the head),
`Overrides` (the cell parameters), `ScriptBridge` (conversion between the input script, SLP1 and the display script)
and `table_set_calls` (the calls a table set stands for).
* Analysis: `Part` (a principal part and the stem read off it) and `Analysis` (the decisions for one tense, with one
method per tense, each adding `FormGroup`s). `FormGenerator` then makes the forms of each group, and `add_preverbs`
joins the preverbs of `pre:` to them.
* The result: `Conjugation` (the forms of every slot shown, including those attested for the verb in the data, with
their notes and categories) and `TableRenderer`.
* Root lists: `RootDerivations`, which makes the regular nonfinite forms of a root with the `nonf` method of
`Analysis`.
Besides [[Module:sa-verb/data]] (the endings and every other table, loaded with mw.loadData), the module uses
[[Module:sa-utilities]] for sandhi, [[Module:inflection-table]] for the table frame and [[Module:inflection utilities]]
for the links, transliterations, accelerators and footnotes in the cells.
Originally written by [[User:Dragonoid76]], with the conjugation rules of [[User:Exarchus]]; rewritten by
[[User:Fenakhay]] in October 2026.
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
columns = "Module:columns",
debug_track = "Module:debug/track",
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
links = "Module:links",
parameter_utilities = "Module:parameter utilities",
parameters = "Module:parameters",
parse_interface = "Module:parse interface",
parse_utilities = "Module:parse utilities",
sa_utilities = "Module:sa-utilities",
scripts = "Module:scripts",
string_utilities = "Module:string utilities",
utilities = "Module:utilities",
},
loadData = {
data = "Module:sa-verb/data",
headword_data = "Module:headword/data",
},
lazy = {
lang = function() return require("Module:languages").getByCode("sa") end,
},
}
local VOWEL = "[aAiIuUfFxXeEoO]"
local VOWEL_WITH_ACCENT = VOWEL .. "[/\\]?"
local CONSONANT = "[kKgGNcCjJYwWqQRtTdDnpPbBmyrlLvSzsh]"
local ACCENT = "[/\\]"
local PERSON_NUMBERS = {"1s", "2s", "3s", "1d", "2d", "3d", "1p", "2p", "3p"}
-- A past passive participle in -ta or -na (after sandhi: kṛtá, dagdhá, iṣṭá, bhinná), as the head of the
-- nonfinite forms of a simple verb; the capture is the participle without its -a.
local PARTICIPLE_HEAD = "^(.+[tTdDwWqQnR])a/?$"
-- The moods of a thematic aorist that are made like those of a thematic present (Whitney §850–852).
local THEMATIC_MODES = {optat = true, imper = true, part = true}
-- Return the number of times `pattern` matches in `text`.
local function count(text, pattern)
return select(2, string.gsub(text, pattern, ""))
end
-- Return the last character of `text`, which in SLP1 is always its last sound.
local function last_of(text)
return string.sub(text, -1)
end
------------------------------------------------------------------------------------------------------------------------
-- Script --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object that converts the input of a call to SLP1, and SLP1 to the display script and to IAST. The display script is
the script of the head; if the head is in IAST (Latin script), it is the script of the page name, and failing that,
Devanagari. Latin-script input is always read as IAST, and anything else with the converter of the display script.
]==]
local ScriptBridge = {}
ScriptBridge.__index = ScriptBridge
function ScriptBridge.new(head, pagename)
local script = M.lang:findBestScript(head)
if script:getCode() == "None" then
script = M.lang:findBestScript(pagename)
end
if script:getCode() == "None" then
script = M.scripts.getByCode("Deva")
end
local code = script:getCode()
return setmetatable({
script = script,
code = code,
from_native = require("Module:sa-utilities/translit/" .. code .. "-to-SLP1").tr,
to_native = require("Module:sa-utilities/translit/SLP1-to-" .. code).tr,
from_iast = require("Module:sa-utilities/translit/IAST-to-SLP1").tr,
to_iast = require("Module:sa-utilities/translit/SLP1-to-IAST").tr,
}, ScriptBridge)
end
function ScriptBridge:toSlp1(text)
if M.lang:findBestScript(text):getCode() == "None" then
return self.from_iast(text)
end
return self.from_native(text)
end
function ScriptBridge:toNative(slp1)
return self.to_native(slp1)
end
function ScriptBridge:toIast(slp1)
return self.to_iast(slp1)
end
-- Convert `slp1` back into the script `text` is written in. If `text` is in Latin script, this is IAST; otherwise it is
-- the display script, which in that case is the script of `text`.
function ScriptBridge:toScriptOf(slp1, text)
if M.lang:findBestScript(text):getCode() == "None" then
return self.to_iast(slp1)
end
return self.to_native(slp1)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the inline spec of a {{tl|sa-conj}} call, `HEAD<NAME:VALUE.NAME...>`, as parsed by `Spec.parse` and
checked against `data.indicators`. `head` is the head as written, and `indicators` maps each indicator name to its
value: a string, a list for list-valued indicators, or {true} for a flag.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
function Spec.parse(text, tense)
local spec = setmetatable({head = text, indicators = {}}, Spec)
local segments = M.parse_utilities.parse_balanced_segment_run(text, "<", ">")
if #segments > 3 or segments[#segments] ~= "" and #segments > 1 then
spec_error("Only one <...> may follow the head", text)
end
spec.head = mw.text.trim(segments[1])
if string.find(spec.head, ",", 1, true) then
spec_error("The head is one form; write each formation in a call of its own", text)
end
if #segments == 1 then
return spec
end
local inside = string.match(segments[2], "^<(.*)>$")
for indicator in mw.text.gsplit(inside, ".", true) do
local name, value = string.match(indicator, "^%s*([^:]-)%s*:%s*(.-)%s*$")
if not name then
name = mw.text.trim(indicator)
end
local definition = M.data.indicators[name]
if not definition then
local names = {}
for known in pairs(M.data.indicators) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")), text)
end
if not definition.tenses[tense] then
spec_error(("The indicator '%s' does not apply to the %s '%s'"):format(name,
M.data.table_sets[tense] and "table set" or "tense", tense), text)
end
if spec.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), text)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), text)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), text)
end
if definition.value == nil then
value = true
elseif definition.list then
local values = mw.text.split(value, "%s*,%s*")
for _, item in ipairs(values) do
if definition.values and not definition.values[item] then
spec_error(("'%s' is not a value of '%s'"):format(item, name), text)
end
end
value = values
elseif definition.values and not definition.values[value] then
local values = {}
for known in pairs(definition.values) do
table.insert(values, known)
end
table.sort(values)
spec_error(("'%s' is not a value of '%s'; the values are %s"):format(value, name, table.concat(values, ", ")),
text)
end
spec.indicators[name] = value
end
return spec
end
------------------------------------------------------------------------------------------------------------------------
-- Overrides --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the cell parameters of a call. For each slot given, `slots` has the list of its forms as written
(comma-separated in the parameter, each optionally followed by `[footnote]`s); a form `-` leaves the slot empty.
]==]
local Overrides = {}
Overrides.__index = Overrides
function Overrides.parse(values)
local overrides = setmetatable({slots = {}}, Overrides)
for slot, value in pairs(values) do
local forms = {}
local segments = M.parse_utilities.parse_balanced_segment_run(value, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs(segments, "%s*,%s*")) do
local footnotes = {}
for i = 2, #group - 1, 2 do
if mw.text.trim(group[i + 1]) ~= "" then
error(("Text after a footnote in %s=%s"):format(slot, value), 0)
end
table.insert(footnotes, string.match(group[i], "^%[(.*)%]$"))
end
local form = mw.text.trim(group[1])
if form ~= "" then
table.insert(forms, {written = form, footnotes = footnotes})
end
end
overrides.slots[slot] = forms
end
return overrides
end
------------------------------------------------------------------------------------------------------------------------
-- Analysis --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding a principal part and the stem read off it. `form` is the form in SLP1, and `written` is the same form
followed by its stem in angle brackets, if a stem was given; the rules of the analysis are written against this shape.
`stem` starts out as the given stem, if any, and is otherwise filled in by the first successful call to `detect`.
`accent` is the accent of the form's ending (`/` or empty), which the endings take in place of `@`.
]==]
local Part = {}
Part.__index = Part
function Part.new(form, stem)
return setmetatable({
form = form or "",
stem = stem,
accent = "",
given = form ~= nil or stem ~= nil,
written = (form or "") .. (stem and ("<" .. stem .. ">") or ""),
}, Part)
end
--[==[
Check whether the form matches `pattern`, and return true if it does. The capture then becomes the stem (unless a stem
was given), and if `accent_pattern` is given, its capture becomes the accent.
]==]
function Part:detect(pattern, accent_pattern)
if not self.given then
return false
end
local stem = string.match(self.form, pattern)
if stem == nil then
return false
end
if accent_pattern then
self.accent = string.match(self.form, accent_pattern) or ""
end
if self.stem == nil then
self.stem = stem
end
return true
end
--[==[
Object describing one stem with one set of endings. `endings` names a set in `data.endings`; `accent` replaces `@` in
the endings and `connecting` replaces `#`. `options` is a copy of the analysis's sandhi options at the time the group
was added. `voices` optionally maps the set's voices to the table's (the passive uses the middle endings), and `moods`
optionally limits the moods taken from the set. If `replaces` is set, the group's forms take the place of those made
by the groups before it.
]==]
local FormGroup = {}
FormGroup.__index = FormGroup
function FormGroup.new(fields)
return setmetatable(fields, FormGroup)
end
-- Return true if the athematic weak stem `stem` (SLP1, perhaps augmented or with a preverb) ends in one of the roots
-- that also have a third plural in -ur (`data.third_plural_ur`).
local function has_third_plural_ur(stem)
stem = string.gsub(stem, ACCENT, "")
for root in pairs(M.data.third_plural_ur) do
if string.sub(stem, -#root) == root then
return true
end
end
return false
end
-- Return the guṇa of `root` (SLP1) as it is before a vowel, for the suffix -ana (Whitney §1150, §240): a final vowel
-- and a short medial vowel before a single consonant take guṇa (nī > ne-, budh > bodh-, dṛś > darś-).
local function guna_of_root(root)
root = string.gsub(root, ACCENT, "")
local before, vowel, after = string.match(root, "^(.-)([iIuUfFx])(" .. CONSONANT .. "?)$")
if not vowel or (after ~= "" and string.match(vowel, "[IUF]")) then
return root
end
return before .. M.sa_utilities.up_one_grade[vowel] .. after
end
--[==[
Object holding the decisions for one tense: its principal parts (`strong`, `weak` and `passive`), the sandhi `options`
(changed as the rules decide, and copied into each group as it is added), the `forced_voice` when the forms decide the
voice, the `groups` in the order their forms go in each cell, the `categories` and the `general_notes` (keys of
`data.general_notes`). A tense method may also set `reduplicated` (whether the head is reduplicated, for the
preverbs), `periphrastic` (the head and auxiliaries of a periphrastic perfect) or `missing` (the nonfinite forms that
need another principal part).
FIXME: Nothing fills `general_notes`; `Conjugation.new` adds the general notes itself. Remove the field?
]==]
local Analysis = {}
Analysis.__index = Analysis
function Analysis.new(tense, parts, properties)
return setmetatable({
tense = tense,
strong = parts.strong,
weak = parts.weak,
passive = parts.passive,
properties = properties,
options = {
insert_i = properties.insert_i or false,
set_and_anit = properties.set_and_anit or false,
strip_stem_accent = false,
iy_uv_before_vowel = false,
h_velar = properties.h_velar or false,
j_retroflex = properties.j_retroflex or false,
final_obstruent = properties.final_obstruent,
no_bartholomae = false,
diaspirate = properties.diaspirate or false,
vedic_l = properties.vedic_l or false,
},
forced_voice = nil,
groups = {},
categories = {},
general_notes = {},
}, Analysis)
end
--[==[
Add a form group on `stem` with the set of endings `endings` and the accent `accent`, along with the other fields of
`FormGroup` in `extra`. The group takes a copy of the current sandhi options.
]==]
function Analysis:add(stem, endings, accent, extra)
local options = {}
for key, value in pairs(self.options) do
options[key] = value
end
local group = {stem = stem, endings = endings, accent = accent or "", connecting = "", options = options}
for key, value in pairs(extra or {}) do
group[key] = value
end
table.insert(self.groups, FormGroup.new(group))
end
function Analysis:category(key)
table.insert(self.categories, M.data.categories[key])
end
function Analysis:forceVoice(voice)
self.forced_voice = voice
end
-- Throw an error asking for the stem of `part` (`what` names it in the message) if it couldn't be read off the form.
function Analysis:requireStem(part, what)
if part.stem == nil then
error(("Could not read the stem off %s '%s' of the %s; give it with <%s:...>"):format(what,
self.properties.bridge:toIast(part.form), M.data.tenses[self.tense].name,
part == self.strong and "stem" or (self.tense == "aor" or self.tense == "prec") and "midstem" or "weakstem"), 0)
end
end
--[==[
Check whether `stem` (a present or imperfect stem whose third plural is in -ati or -ur) is an intensive stem. Return
true if it is, along with `"1"` if its reduplication isn't disyllabic (such stems also have the forms in -ī-).
]==]
function Analysis:intensiveStem(stem)
-- The patterns are anchored at the end so that prefixed verbs match too.
if string.match(stem, CONSONANT .. "a/?[nrlv][iI]" .. CONSONANT .. "+" .. VOWEL .. "M?" .. CONSONANT .. "*$") then
if string.match(stem, "vivy?" .. VOWEL .. CONSONANT .. "$") then
-- This is a prefixed class 3 verb like upaviveṣṭi, not an intensive.
return false
end
-- The reduplication is disyllabic.
return true
elseif string.match(stem, CONSONANT .. "[Aeo]/?" .. CONSONANT .. "+" .. VOWEL_WITH_ACCENT .. "M?" .. CONSONANT .. "*$")
-- (The next pattern doesn't match saṃśās.)
or string.match(stem, CONSONANT .. "a/?[rlNYRnmMd]" .. CONSONANT .. "+[aiufx]M?" .. CONSONANT .. "*$")
or string.match(stem, "[aA]/?lar$")
or self.properties.class == "int" then
return true, "1"
end
return false
end
-- Analyze a present: a thematic one, an athematic one with active endings, or an athematic one with middle forms only.
function Analysis:pres()
local strong, weak, properties = self.strong, self.weak, self.properties
local mv_stem = properties.mv_stem
if not weak.given then
if not strong:detect("(.+)a/?ti$", "a(/?)ti$") then
if not strong:detect("(.+)a/?te$", "a(/?)te$") then
self:requireStem(strong, "the head")
else
self:forceVoice("mid")
end
end
self:add(strong.stem, "present thematic", strong.accent)
if properties.tat then
self:add(strong.stem, "present thematic tat", strong.accent)
end
-- A class 10 verb (Whitney §1043f) also has a later participle in -āna, without the stem's accent. An accented
-- head shows it by its accent on -áya- (cintáyati, but the denominative devayáti has none).
if (properties.class == "10" or not properties.class)
and string.match(strong.stem, VOWEL .. "M?" .. CONSONANT .. "+a/?y$")
and (strong.accent == "" or string.match(strong.stem, "a/y$") or properties.class == "10") then
self.options.strip_stem_accent = true
self:add(strong.stem, "present class 10 participle")
end
elseif strong:detect("(.+)[tDwQL]h?i$") or (strong.form == "" and strong.stem ~= nil) then
local reduplicated_or_intensive = false
if not weak:detect("(.+)a/?nti$", "a(/?)nti$") then
if not weak:detect("(.+A)/?nti$", "A(/?)nti$") then
if not weak:detect("(.+)ati$") then
self:requireStem(weak, "the third plural")
else
reduplicated_or_intensive = true
-- Work out whether the endings are accented or the reduplication is. They are not when `mvstem:`
-- carries the accent; otherwise the relevant syllable of the weak stem decides.
if mv_stem and string.match(mv_stem, ACCENT) then
weak.accent = ""
elseif count(strong.stem, VOWEL_WITH_ACCENT) == count(weak.stem, VOWEL_WITH_ACCENT) + 1
and not string.match(strong.stem, "I$") then
weak.accent = string.match(weak.stem, "(/?)M?" .. CONSONANT .. "+$") or ""
else
weak.accent = string.match(weak.stem, "(/?)M?" .. CONSONANT .. "*" .. VOWEL .. "?M?" .. CONSONANT .. "+$")
or ""
end
end
end
end
self.reduplicated = reduplicated_or_intensive
-- Before -ti, sandhi may have changed the last consonant of the strong stem, so take it from the weak stem.
if string.match(strong.written, "[ktp]ti$") then
strong.stem = string.gsub(strong.stem, ".$", last_of(weak.stem))
elseif string.match(strong.written, "[Dw]i$") then
if string.match(weak.stem, "kz$") then
strong.stem = string.gsub(strong.stem, "z$", "kz")
else
strong.stem = string.gsub(strong.stem, ".$", last_of(weak.stem))
if string.match(strong.stem, "h$") then
self.options.h_velar = true
elseif string.match(strong.stem, "j$") then
self.options.j_retroflex = true
end
end
elseif string.match(strong.written, "Qi$") or string.match(strong.written, "Lhi$") then
strong.stem = strong.stem .. "h"
elseif string.match(weak.written, CONSONANT .. "i?/?ya/?n?ti$")
or (string.match(weak.written, "uva/?n?ti$") and not string.match(strong.stem, "[nR]o/?")) then
error("The weak stem of roots in -i/-ī and -u/-ū can't be read off the third plural; give it with <weakstem:...>", 0)
end
if string.match(weak.stem, "da/?D$") then
self.options.no_bartholomae = true
end
if string.match(strong.stem, "i$") and string.match(weak.stem, "[^iy]$") then -- seṭ root
self.options.insert_i = true
strong.stem = string.gsub(strong.stem, "i$", "")
end
self:add(strong.stem, "present strong before consonant")
local root_as = string.match(strong.stem, "a/?s$") ~= nil and weak.stem == (string.gsub(strong.stem, "a/?s$", "s"))
if root_as then
-- The root as has ási, not assi (Whitney §636).
self:add((string.gsub(strong.stem, "s$", "")), "present 2s si", nil, {replaces = true})
end
-- A third singular in -īti is taken to be an intensive, since a class 3 root in -ī would have -eti.
local intensive, intensive_kind = false, nil
if reduplicated_or_intensive and (not properties.class or properties.class == "int") then
if string.match(strong.stem, "I$") then
intensive = true
else
intensive, intensive_kind = self:intensiveStem(strong.stem)
end
end
if intensive then
self:forceVoice("act")
local before_vowel = string.gsub(strong.stem, "I$", "")
if string.match(before_vowel, VOWEL .. "[yrlv]?$") then
self:add(before_vowel, "present strong before vowel")
else
-- Use the weak stem with the endings that are normally strong.
self:add(weak.stem, "present strong before vowel")
end
if intensive_kind == "1" then
-- The extra forms in -ī- of an intensive without disyllabic reduplication (Whitney §1004a).
if string.match(strong.stem, VOWEL_WITH_ACCENT .. "[rl]?$") then
self:add(strong.stem, "present intensive extra")
else
self:add(weak.stem, "present intensive extra")
end
end
else
if string.match(strong.stem, "O/?$") and string.match(weak.stem, "u$") then
-- au becomes av before a vowel (Whitney §626).
strong.stem = string.gsub(strong.stem, "O(/?)$", "a%1v")
elseif string.match(strong.stem, "a/?vI$") and string.match(weak.stem, "[uU]v?$") then
-- brū has brav- before a vowel (Whitney §632-3).
strong.stem = string.gsub(strong.stem, "I$", "")
end
if reduplicated_or_intensive and string.match(strong.stem, "A/?$") then -- class 3 verbs on -ā (Whitney §649)
self:add(weak.stem, "present strong before vowel")
else
self:add(strong.stem, "present strong before vowel")
end
end
local imperative_2s_added = false
if string.match(weak.written, "ati$") and weak.accent ~= "" then
self.options.strip_stem_accent = true
elseif string.match(strong.stem, VOWEL_WITH_ACCENT .. "[nR]o/?$") then
-- Class 5 and 8 after a vowel: the short forms without the -u- before v and m, and the second singular
-- imperative in -u (sunú).
self:add((string.gsub(strong.stem, "o/?$", "")), "present nu extra", weak.accent)
imperative_2s_added = true
elseif string.match(strong.stem, CONSONANT .. "[nR]o/?$") then
-- āpnoti and the like, with a consonant before -no-: -nuv- before a vowel.
self.options.iy_uv_before_vowel = true
weak.stem = string.gsub(weak.stem, "uv$", "u")
elseif string.match(strong.stem, "[nR]A/?$") and string.match(weak.stem, "[nR]$") then
-- Class 9: the weak stem is in -nī- before a consonant.
weak.stem = weak.stem .. "I"
end
-- A few class 3 roots in -ā also have a weak stem in -ī- before a consonant (jahīmáḥ, jahīhí, mimīhi;
-- Whitney §661–666), but hā drops the vowel in the optative (jahyā́m, §665).
local long_i = reduplicated_or_intensive and string.match(strong.stem, "A/?$")
and M.data.reduplicated_long_i[(string.gsub(weak.stem, ACCENT, ""))]
local before_vowel = weak.stem
if long_i then
weak.stem = weak.stem .. "I"
end
if imperative_2s_added then
-- The second singular imperative was added above.
elseif string.match(weak.stem, CONSONANT .. "[nR]I$") then -- -āna after a consonant (Whitney §722)
self:add((string.gsub(weak.stem, "[nR]I$", "")), "present imperative 2s ana", weak.accent)
elseif root_as then -- as: edhí (Whitney §636)
self:add((string.gsub(strong.stem, "a/?s$", "e")), "present imperative 2s dhi", weak.accent)
elseif string.match(strong.stem, "ha/?n$") then -- han: jahí (Whitney §637)
self:add((string.gsub(strong.stem, "ha/?n$", "ja")), "present imperative 2s hi", weak.accent)
elseif string.match(strong.stem, "uho/?$") then -- hu: juhudhí (Whitney §652)
self:add(weak.stem, "present imperative 2s dhi", weak.accent)
elseif string.match(strong.stem, "aro/?$") and string.match(weak.stem, "urv$") then -- kṛ: kurú (Whitney §714)
self:add((string.gsub(weak.stem, "v$", "")), "present imperative 2s u", weak.accent)
elseif string.match(strong.stem, "da/?[dD]A/?$") and string.match(weak.stem, "da/?[dD]$") then
-- dā and dhā have dehí and dhehí, and the Vedic daddhí for both (Whitney §667, §669).
self:add((string.gsub(weak.stem, "da/?([dD])$", "%1e")), "present imperative 2s hi", weak.accent)
self:add(weak.stem, "present imperative 2s dhi vedic", weak.accent)
elseif string.match(weak.stem, VOWEL_WITH_ACCENT .. "$") or string.match(weak.stem, CONSONANT .. "[yrv]$")
or weak.stem == "y" or self.options.insert_i then
self:add(weak.stem, "present imperative 2s hi", weak.accent)
else
self:add(weak.stem, "present imperative 2s dhi", weak.accent)
end
self:add(weak.stem, "present weak before consonant", weak.accent)
if properties.tat then
-- Whitney has no -tāt imperative of the nasal class (§570).
if properties.class == "7" then
error("Whitney gives no imperative in -tāt for a class 7 verb (§570); leave out <tāt>", 0)
end
self:add(weak.stem, "present imperative tat", weak.accent)
end
if mv_stem then
weak.stem = mv_stem
end
if long_i == "drop" then
self:add(weak.stem, "present weak before m v y", weak.accent, {moods = {indic = true, inj = true}})
self:add(before_vowel, "present weak before m v y", weak.accent, {moods = {optat = true}})
else
self:add(weak.stem, "present weak before m v y", weak.accent)
end
if string.match(weak.written, ".<.*>$") then
weak.stem = string.gsub(weak.written, "a?/?n?ti<.*>$", "")
elseif mv_stem or string.match(weak.stem, "[nR]I$") then
weak.stem = string.gsub(weak.written, "a?/?nti$", "")
elseif long_i then
weak.stem = before_vowel
end
if reduplicated_or_intensive then
self.options.strip_stem_accent = false
self:add(weak.stem, "present reduplicated weak before vowel")
if string.match(weak.stem, CONSONANT .. "[iu]?[yvr]$") then
self:add(strong.stem, "present injunctive unaccented 3p ur")
else
self:add(weak.stem, "present injunctive unaccented 3p ur")
end
else
self:add(weak.stem, "present weak before vowel", weak.accent)
-- The third plural of the injunctive.
if string.match(strong.stem, "A/?$") and string.match(weak.stem, "A/?$") then
-- Roots in -ā also have -ur (Whitney §621a).
self:add((string.gsub(weak.stem, "A$", "")), "present injunctive 3p ur", weak.accent)
end
self:add(weak.stem, "present injunctive 3p an", weak.accent)
if has_third_plural_ur(weak.stem) then
self:add(weak.stem, "present injunctive 3p ur", weak.accent)
end
end
elseif strong:detect("(.+)[tDwQ]e/?$", "[tDwQ]e(/?)$") then
-- An athematic verb with middle forms only.
self:forceVoice("mid")
if not weak:detect("(.+)a/?te$", "a(/?)te$") then
if not weak:detect("(.+A/?)te$") then
self:requireStem(weak, "the third plural")
end
end
local accented_class_3 = false
if string.match(weak.stem, "/") and strong.accent == "/" then
accented_class_3 = true
weak.accent = "/"
end
if string.match(weak.stem, "da/?D$") then
self.options.no_bartholomae = true
end
-- Class 5 and 8 after a vowel (and tarute). The pattern also accepts -no, since that may be the strong stem
-- given for the first-person imperative.
if string.match(strong.stem, VOWEL_WITH_ACCENT .. "[nRr][uo]/?$")
and (not properties.class or string.match(properties.class, "^[58]$")) and not mv_stem then
self:add((string.gsub(strong.stem, "[uo]/?$", "")), "present nu extra", weak.accent)
elseif string.match(strong.stem, CONSONANT .. "[nR][uo]/?$") then
-- āpnoti in the middle. The pattern also matches hnute, which goes the same way.
self.options.iy_uv_before_vowel = true
end
-- The first-person imperative, when the strong stem is given or can be worked out.
if string.match(strong.written, "<.*>$") then
self:add(strong.stem, "present strong before vowel")
elseif string.match(strong.stem, "[aA]" .. ACCENT .. "?" .. CONSONANT .. "*$") and not accented_class_3
and not string.match(strong.stem, "[NYRnm]" .. CONSONANT .. "$") then
-- A root in a or ā, where guṇa changes nothing, but not an accented class 3 verb (its accent can't be
-- predicted) or a class 7 verb. Take the stem from the third plural, to avoid the sandhi before -te.
strong.stem = string.gsub(weak.stem, "([aA])(" .. CONSONANT .. "*)$", "%1" .. strong.accent .. "%2")
self:add(strong.stem, "present strong before vowel")
elseif string.match(strong.stem, "[nR]u$") then
strong.stem = string.gsub(strong.stem, "u$", "o" .. strong.accent)
self:add(strong.stem, "present strong before vowel")
elseif string.match(strong.stem, "[nR]I$") and string.match(weak.stem, "[nR]$") then
-- Class 9: the strong stem is in -nā-.
strong.stem = string.gsub(strong.stem, "I$", "A" .. strong.accent)
self:add(strong.stem, "present strong before vowel")
end
local before_consonant
if string.match(strong.written, VOWEL_WITH_ACCENT .. "te/?$") then
before_consonant = string.gsub(strong.written, "te/?$", "")
elseif string.match(strong.written, VOWEL_WITH_ACCENT .. "te/?<.*>$") then
before_consonant = string.gsub(strong.written, "te/?<.*>$", "")
else
before_consonant = weak.stem
end
if accented_class_3 then
-- A class 3 stem has no accent before a consonant-initial ending.
self.options.strip_stem_accent = true
end
self:add(before_consonant, "present weak before consonant", strong.accent)
if mv_stem then
before_consonant = mv_stem
end
self:add(before_consonant, "present weak before m v y", strong.accent)
if string.match(weak.written, ".<.*>$") then
weak.stem = string.gsub(weak.written, "a?/?te<.*>$", "")
end
if accented_class_3 then
self.options.strip_stem_accent = false
self:add(weak.stem, "present reduplicated weak before vowel")
else
self:add(weak.stem, "present weak before vowel", weak.accent)
end
else
self:requireStem(strong, "the head")
end
end
-- Analyze an imperfect.
function Analysis:impf()
local strong, weak, properties = self.strong, self.weak, self.properties
local mv_stem = properties.mv_stem
if not weak.given then
if not strong:detect("(.+)a/?t$", "a(/?)t$") then
if not strong:detect("(.+)a/?ta$", "a(/?)ta$") then
self:requireStem(strong, "the head")
else
self:forceVoice("mid")
end
end
self:add(strong.stem, "imperfect thematic", strong.accent)
elseif strong:detect("(.*" .. VOWEL_WITH_ACCENT .. ")t$") or strong:detect("(.+[kNwRtnprlsH])$")
or (strong.form == "" and strong.stem ~= nil) then
local third_plural_ur = false
if not weak:detect("(.+)a/?n$", "a(/?)n$") then
if not weak:detect("(.+A)/?n$", "A(/?)n$") then
if not weak:detect("(.+)u[Hrs]$") then
self:requireStem(weak, "the third plural")
else
third_plural_ur = true
end
end
end
self.reduplicated = third_plural_ur
-- The last consonant of the strong stem can be unclear in the third singular, so take it from the weak stem.
if string.match(strong.written, "[kwpH]$") then
if self.options.diaspirate then
strong.stem = string.gsub(strong.stem, "([GDB])(.+)$", function(consonant, after)
return M.sa_utilities.deaspirate[consonant] .. after
end)
end
if string.match(strong.written, "k$") then
strong.stem = string.gsub(strong.stem, ".$", last_of(weak.stem))
if string.match(strong.stem, "h$") then
self.options.h_velar = true
elseif string.match(strong.stem, "S$") then
self.options.final_obstruent = "k"
end
elseif string.match(weak.stem, "kz$") then
strong.stem = string.gsub(strong.stem, ".$", "kz")
else
strong.stem = string.gsub(strong.stem, ".$", last_of(weak.stem))
if string.match(strong.stem, "j$") then
self.options.j_retroflex = true
elseif string.match(strong.stem, "f$") then
strong.stem = string.gsub(strong.stem, ".$", "r")
end
end
elseif string.match(weak.stem, "[tTdD]$") and string.match(strong.written, "[^tTdD]" .. VOWEL_WITH_ACCENT .. "t$") then
strong.stem = strong.stem .. last_of(weak.stem)
elseif string.match(weak.written, CONSONANT .. "i?/?ya/?n$")
or (string.match(weak.written, "uva/?n$") and not string.match(strong.stem, "[nR]o/?")) then
error("The weak stem of roots in -i/-ī and -u/-ū can't be read off the third plural; give it with <weakstem:...>", 0)
end
if string.match(weak.stem, "da/?D$") then
self.options.no_bartholomae = true
end
-- A third singular in -īt is taken to be an intensive, since a class 3 root in -ī would have -et. A
-- pluperfect is made on a perfect stem, which isn't an intensive.
local intensive, intensive_kind = false, nil
if third_plural_ur and not properties.perfect_stem and (not properties.class or properties.class == "int") then
if string.match(strong.stem, "I$") then
intensive = true
else
intensive, intensive_kind = self:intensiveStem(strong.stem)
end
end
if intensive then
self:forceVoice("act")
local before_vowel = string.gsub(strong.stem, "I$", "")
if string.match(before_vowel, VOWEL .. "[yrlv]?$") then
self:add(before_vowel, "imperfect strong before vowel")
else
-- Use the weak stem with the endings that are normally strong.
self:add(weak.stem, "imperfect strong before vowel")
end
else
local before_vowel
if string.match(strong.written, "O/?t$") and string.match(weak.stem, "u$") then
-- au becomes av before a vowel (Whitney §626).
before_vowel = string.gsub(strong.stem, "O(/?)$", "a%1v")
elseif string.match(strong.written, "It$") then
-- The -ī- is only inserted in the second and third singular (Whitney §631-3); a root in -ī has -e- in
-- the strong stem.
before_vowel = string.gsub(strong.stem, "I$", "")
else
before_vowel = strong.stem
end
self:add(before_vowel, "imperfect strong before vowel")
end
-- When the given stem has fewer syllables than the third singular, the second and third singular use the third
-- singular's own stem.
if count(strong.stem, VOWEL_WITH_ACCENT) == count((string.gsub(strong.written, "<.+>$", "")), VOWEL_WITH_ACCENT) then
-- The stems are the same.
elseif string.match(strong.written, VOWEL_WITH_ACCENT .. "t<.+>$") then
strong.stem = string.gsub(strong.written, "t<.+>$", "")
end
self:add(strong.stem, "imperfect strong before consonant")
if intensive_kind == "1" then
-- The extra forms in -ī- of an intensive without disyllabic reduplication (Whitney §1004a).
if string.match(strong.stem, VOWEL_WITH_ACCENT .. "[rl]?$") then
self:add(strong.stem, "imperfect intensive extra")
else
self:add(weak.stem, "imperfect intensive extra")
end
end
if string.match(strong.stem, CONSONANT .. "[nR]o/?$") then
-- āpnot and the like: -nuv- before a vowel.
self.options.iy_uv_before_vowel = true
weak.stem = string.gsub(weak.stem, "uv$", "u")
elseif string.match(strong.stem, VOWEL_WITH_ACCENT .. "[nR]o/?$") then
-- Class 5 and 8 after a vowel: the short forms without the -u- before v and m.
self:add((string.gsub(strong.stem, "o/?$", "")), "imperfect weak before m v y", weak.accent)
elseif string.match(strong.stem, "[nR]A/?$") and string.match(weak.stem, "[nR]$") then
-- Class 9: the weak stem is in -nī- before a consonant.
weak.stem = weak.stem .. "I"
elseif string.match(weak.written, ".aru[Hrs]$") and not string.match(strong.stem, "A/?$") then
-- Class 3 roots in -ṛ have a weak stem in -ṛ.
weak.stem = string.gsub(weak.stem, "ar$", "f")
elseif string.match(weak.written, ".a[vy]u[Hrs]$") and not string.match(strong.stem, "A/?$") then
error("The weak stem of class 3 roots in -i/-ī and -u/-ū can't be read off the third plural; give it with "
.. "<weakstem:...>", 0)
end
-- For i and its compounds, the augment and the root give āy- before a vowel (ā́yan) but ai- before a consonant
-- (áiva), as in the third singular (Whitney §621a).
local before_consonant = weak.stem
if (string.gsub(strong.stem, "E(/?)$", "A%1y")) == weak.stem then
before_consonant = strong.stem
end
self:add(before_consonant, "imperfect weak before consonant", weak.accent)
if mv_stem then
weak.stem = mv_stem
before_consonant = mv_stem
end
self:add(before_consonant, "imperfect weak before m v y", weak.accent)
if string.match(weak.written, "n<.*>$") then
weak.stem = string.gsub(weak.written, "a?/?n<.*>$", "")
elseif string.match(weak.written, "u[Hrs]<.*>$") and string.match(strong.stem, "A$") then
-- A class 3 root in -ā whose weak stem is given.
weak.stem = string.gsub(weak.written, "u[Hrs]<.*>$", "")
elseif mv_stem or string.match(weak.stem, "[nR]I$") then
weak.stem = string.gsub(weak.written, "a/?n$", "")
elseif string.match(weak.stem, "[iI]$") then
weak.stem = string.gsub(weak.stem, ".$", "y")
end
self:add(weak.stem, "imperfect weak before vowel", weak.accent)
if properties.perfect_stem then
self:add(weak.stem, "pluperfect middle 3p iran", weak.accent)
end
if third_plural_ur then
-- The active third plural of class 3 is often not made from the weak stem, so it is taken from the given
-- form.
if string.match(weak.written, ".<.*>$") then
weak.stem = string.gsub(weak.written, "u[Hrs]<.*>$", "")
else
weak.stem = string.gsub(weak.stem, "f$", "ar")
end
self:add(weak.stem, "imperfect 3p ur", weak.accent)
else
if string.match(strong.stem, "A$") and string.match(weak.stem, "A$") then
-- Roots in -ā also have -ur (Whitney §621a).
self:add((string.gsub(weak.stem, "A$", "")), "imperfect 3p ur", weak.accent)
end
self:add(weak.stem, "imperfect 3p an", weak.accent)
if has_third_plural_ur(weak.stem) then
self:add(weak.stem, "imperfect 3p ur", weak.accent)
end
end
elseif strong:detect("(.+)[tDwQ]a/?$") then
-- An athematic verb with middle forms only.
if weak:detect("(.+)a/?ta$", "a(/?)ta$") or weak:detect("(.+A/?)ta$") then
self:forceVoice("mid")
if string.match(weak.stem, "da/?D$") then
self.options.no_bartholomae = true
end
if string.match(strong.stem, VOWEL_WITH_ACCENT .. "[nRr]u$")
and (not properties.class or string.match(properties.class, "^[58]$")) and not mv_stem then
-- -nuta after a vowel (and the imperfect of tarute): the short forms before v and m.
self:add((string.gsub(strong.stem, "u$", "")), "imperfect weak before m v y", weak.accent)
elseif string.match(strong.stem, CONSONANT .. "[nR]u?$") then
-- āpnot in the middle: -nuv- before a vowel.
self.options.iy_uv_before_vowel = true
end
local before_consonant
if string.match(strong.written, VOWEL_WITH_ACCENT .. "ta$") then
before_consonant = string.gsub(strong.written, "ta$", "")
else
before_consonant = weak.stem
end
self:add(before_consonant, "imperfect weak before consonant", weak.accent)
if mv_stem then
before_consonant = mv_stem
end
self:add(before_consonant, "imperfect weak before m v y", weak.accent)
if string.match(weak.written, ".<.*>$") then
weak.stem = string.gsub(weak.written, "a?/?ta<.*>$", "")
end
self:add(weak.stem, "imperfect weak before vowel", weak.accent)
else
self:requireStem(weak, "the third plural")
end
else
self:requireStem(strong, "the head")
end
end
-- Analyze an s-future.
function Analysis:fut()
local strong = self.strong
if not strong:detect("(.+).ya/?ti$", "(/?)ti$") then
if not strong:detect("(.+).ya/?te$", "(/?)te$") then
self:requireStem(strong, "the head")
else
self:forceVoice("mid")
end
end
self:add(strong.stem, "future", strong.accent)
self:category("s-future")
end
-- Analyze a periphrastic future. Its third singular doesn't show whether the verb is middle-only; a middle-only verb
-- takes `voice:mid`.
function Analysis:pfut()
local strong = self.strong
if not strong:detect("(.+[tDwQ]A/?)$") then
self:requireStem(strong, "the head")
end
self:add(strong.stem, "periphrastic future")
self:category("periphrastic future")
end
-- Analyze a conditional.
function Analysis:cond()
local strong = self.strong
if not strong:detect("(.+).yat$") then
if not strong:detect("(.+).yata$") then
self:requireStem(strong, "the head")
else
self:forceVoice("mid")
end
end
self:add(strong.stem, "conditional")
end
--[==[
Return the injunctive stem of an aorist, given its augmented indicative stem `stem`. If `given` (from `inj:`) is set,
use it; otherwise drop the augment, which only works for a monosyllabic root (the accent moves to the root vowel).
Return {nil} if the stem can't be worked out. If `thematic` is set (for the a- and sa-aorists, and reduplicated ones),
also return the accent of the thematic vowel, and true if the aorist is a reduplicated one.
]==]
local function injunctive_stem(stem, given, thematic)
if given then
if thematic then
return given, string.gsub(stem, "^[^/]+(/?).+$", "%1")
end
return given
end
if not thematic then
if string.match(stem, "^a/?" .. CONSONANT .. "+" .. VOWEL .. "M?" .. CONSONANT .. "*$") then
local injunctive = string.gsub(stem, "^a(/?)(" .. CONSONANT .. "+" .. VOWEL .. ")(M?" .. CONSONANT .. "*)$", "%2%1%3")
return (string.gsub(injunctive, "c(C.+)$", "%1"))
end
return nil
end
if string.match(stem, "^a/?" .. CONSONANT .. "+" .. VOWEL .. "M?" .. CONSONANT .. "*$") then
local injunctive, accent
if string.match(stem, "^a/?[sk]ar$") or string.match(stem, "^a/?sa[dn]$") then
-- akar, asar, asad and asan (Whitney §853).
injunctive = string.gsub(stem, "^a(/?)(" .. CONSONANT .. "a)(" .. CONSONANT .. ")$", "%2%1%3")
accent = ""
else
injunctive = string.gsub(stem, "^a/?(.+)$", "%1")
accent = string.gsub(stem, "^a(/?).+$", "%1")
end
return (string.gsub(injunctive, "c(C.+)$", "%1")), accent
elseif string.match(stem, "^a/?" .. CONSONANT .. "[IUaiu]" .. CONSONANT .. "+" .. VOWEL .. "M?" .. CONSONANT .. "+$") then
-- A reduplicated aorist (the third return value). FIXME: It is left unaccented, since the place of the accent
-- isn't clear (Whitney §869c).
return (string.gsub(stem, "^a/?(.+)$", "%1")), "", true
end
return nil
end
-- Return the middle injunctive stem, like `injunctive_stem` (with `given` from `midinj:`). The second return value is
-- "1" if the stem was given and "2" if it was taken off the indicative, in which case the root aorist works it out
-- again after changing its stem. If `thematic` is set, the third is the accent, as in `injunctive_stem`.
local function middle_injunctive_stem(stem, given, thematic)
if given then
if thematic then
return given, "1", string.gsub(stem, "^[^/]+(/?).+$", "%1")
end
return given, "1"
end
-- The weak stem of a root aorist sometimes has no vowel.
if string.match(stem, "^a/?" .. CONSONANT .. "+" .. VOWEL .. "?M?" .. CONSONANT .. "*$") then
if thematic then
local injunctive = string.gsub(stem, "^a/?(.+)$", "%1")
return (string.gsub(injunctive, "c(C.+)$", "%1")), "2", (string.gsub(stem, "^a(/?).+$", "%1"))
end
local injunctive = string.gsub(stem, "^a(/?)(" .. CONSONANT .. "+" .. VOWEL .. ")(M?" .. CONSONANT .. "*)$", "%2%1%3")
return (string.gsub(injunctive, "c(C.+)$", "%1")), "2"
end
return nil
end
-- Analyze an aorist: an s-, iṣ- (with siṣ- and īṣ-), sa-, a- (with reduplicated) or root aorist, with its injunctive
-- and the modes made on the injunctive stem (subjunctive, optative, imperative and participle, as each type has them).
function Analysis:aor()
local strong, weak, properties = self.strong, self.weak, self.properties
local type = properties.aorist_type
local injunctive_given, middle_injunctive_given = properties.injunctive_stem, properties.middle_injunctive_stem
local injunctive, injunctive_accent
local strong_absent = strong.form == "-"
-- The modes of the aorist are accented on the ending, when the call is accented at all.
local ending_accent = string.find(strong.form .. weak.form, ACCENT) and "/" or ""
local function weak_from_strong()
if weak.given then
return false
end
weak.stem = strong.stem
weak.accent = strong.accent
return true
end
if strong_absent then
-- There are no active forms.
elseif (not type or type == "s") and strong:detect("(.+)[sz]It$") then
self:category("s-aorist")
self:add(strong.stem, "aorist s")
injunctive = injunctive_stem(strong.stem, injunctive_given)
if injunctive then
self:add(injunctive, "aorist s injunctive")
-- A root in -ā, or rādh or (av)āp, which keep their ā (Whitney gives no other roots with a medial ā).
local subjunctive
if string.match(injunctive, "A/?$") or string.match(injunctive, "rA/?D$")
or string.match(injunctive, "^A/?p$") or string.match(injunctive, "^avA/?p$") then
subjunctive = injunctive
elseif string.match(injunctive, "[AEOaeo]/?M?" .. CONSONANT .. "*$") then
local guna = {A = "a", E = "e", O = "o", a = "a", e = "e", o = "o"}
subjunctive = string.gsub(injunctive, "(" .. VOWEL .. ")(/?M?" .. CONSONANT .. "*)$", function(vowel, after)
return guna[vowel] .. after
end)
end
if subjunctive then
self:add(subjunctive, "aorist s subjunctive")
-- see Narten p.45-49 regarding the imperative; note HCHIEL p.1918-9 gives no regular imperative
-- for the s-aorist, only the 'si-imperative' with -sva counterpart
end
end
elseif (not type or type == "iṣ" or type == "siṣ" or type == "īṣ") and strong:detect("(.+)It$") then
if type == "siṣ" then
self:category("siṣ-aorist")
self:add(strong.stem, "aorist is", nil, {connecting = "i"})
injunctive = injunctive_stem(strong.stem, injunctive_given)
if injunctive then
self:add(injunctive, "aorist is injunctive", nil, {connecting = "i"})
end
-- No middle: the grammarians don't allow one, though it may have existed (Whitney §915).
else
self:category("iṣ-aorist")
-- īṣ is for gra(b)h (Whitney §900b).
local connecting = type == "īṣ" and "I" or "i"
self:add(strong.stem, "aorist is", nil, {connecting = connecting})
injunctive = injunctive_stem(strong.stem, injunctive_given)
if injunctive then
-- The subjunctive stem of an iṣ-aorist is usually the same as the indicative and injunctive one
-- (Whitney §906b), except for san- against sān-.
self:add(injunctive, "aorist is injunctive", nil, {connecting = connecting})
-- see Narten p.68-69 regarding the imperative; regularly the injunctive was used
end
if weak_from_strong() then
self:add(weak.stem, "aorist is middle", nil, {connecting = connecting})
if injunctive then
self:add(injunctive, "aorist is middle injunctive", nil, {connecting = connecting})
self:add(injunctive, "aorist is middle optative", ending_accent, {connecting = connecting})
end
end
end
elseif (not type or type == "sa") and strong:detect("(.+kz)a/?t$", "kza(/?)t$") then
self:category("sa-aorist")
self:add(strong.stem, "aorist thematic", strong.accent)
injunctive, injunctive_accent = injunctive_stem(strong.stem, injunctive_given, true)
if injunctive then
self:add(injunctive, "aorist thematic injunctive", injunctive_accent)
end
if weak_from_strong() then
self:add(weak.stem, "aorist sa middle", weak.accent)
self:add(weak.stem, "aorist thematic middle", weak.accent)
if injunctive then
self:add(injunctive, "aorist sa middle injunctive", injunctive_accent)
self:add(injunctive, "aorist thematic middle injunctive", injunctive_accent)
end
end
elseif (not type or type == "a") and strong:detect("(.+)a/?t$", "a(/?)t$") then
self:category("a-aorist")
self:add(strong.stem, "aorist thematic", strong.accent)
local reduplicated
injunctive, injunctive_accent, reduplicated = injunctive_stem(strong.stem, injunctive_given, true)
self.reduplicated = reduplicated
if injunctive then
self:add(injunctive, "aorist thematic injunctive", injunctive_accent)
-- The modes and participles of an a-aorist are thematic, like those of a present of class 6 (gaméma,
-- sadatu, tṛpánt; Whitney §850–852). Those of a reduplicated aorist are too few and mixed to make (§870–871).
if not reduplicated then
self:add(injunctive, "present thematic", injunctive_accent, {moods = THEMATIC_MODES, voices = {act = "act"}})
end
end
if weak_from_strong() then
self:add(weak.stem, "aorist a middle", weak.accent)
self:add(weak.stem, "aorist thematic middle", weak.accent)
if injunctive then
self:add(injunctive, "aorist a middle injunctive", injunctive_accent)
self:add(injunctive, "aorist thematic middle injunctive", injunctive_accent)
if not reduplicated then
self:add(injunctive, "present thematic", injunctive_accent,
{moods = THEMATIC_MODES, voices = {mid = "mid"}})
end
end
end
elseif (not type or type == "root") and (strong:detect("(.+)It$") or strong:detect("(.+" .. VOWEL .. ")t$")
or strong:detect("(.+[kNwRtnprlsH])$") or (strong.form == "" and strong.stem ~= nil)) then
-- The t of avart belongs to the stem.
self:category("root-aorist")
local bhu = string.match(strong.stem, "U$") ~= nil
if bhu then
-- bhū has bhuv- before a vowel in the subjunctive (bhúvāni).
self.options.iy_uv_before_vowel = true
end
self:add(strong.stem, "aorist root")
injunctive = injunctive_stem(strong.stem, injunctive_given)
if injunctive then
self:add(injunctive, "aorist root injunctive")
end
if bhu then
-- In the first singular, though, it keeps the long vowel: ábhūvam (Whitney §830a).
self:add(strong.stem .. "v", "aorist root 1s", nil, {replaces = true})
if injunctive then
self:add(injunctive .. "v", "aorist root injunctive 1s", nil, {replaces = true})
end
end
-- The weak stem of a root in -i/-ī/-u/-ū can't be read off the head (ábhet is from bhī, ácet from ci), so it is
-- only known when `weakstem:` gives it. Before a vowel, a final ī or ū becomes iy or uv, as in Vedic (bhiyāná),
-- and so does a short one after two consonants (śruvántu); after one consonant it becomes y or v (áhyan).
local weak_given = properties.root_weak_stem and string.gsub(properties.root_weak_stem, ACCENT, "")
local weak_before_vowel
if weak_given then
weak_before_vowel = string.gsub(weak_given, "I$", "iy")
weak_before_vowel = string.gsub(weak_before_vowel, "U$", "uv")
weak_before_vowel = string.gsub(weak_before_vowel, "(" .. CONSONANT .. CONSONANT .. ")i$", "%1iy")
weak_before_vowel = string.gsub(weak_before_vowel, "(" .. CONSONANT .. CONSONANT .. ")u$", "%1uv")
weak_before_vowel = string.gsub(weak_before_vowel, "i$", "y")
weak_before_vowel = string.gsub(weak_before_vowel, "u$", "v")
end
-- The active third plural.
local third_plural = strong.stem
local third_plural_ur = false
if string.match(strong.stem, "A$") then
third_plural = string.gsub(third_plural, "A$", "")
self:add(third_plural, "aorist root 3p ur")
third_plural_ur = true
elseif string.match(strong.stem, "U$") then
-- bhū: ábhūvan.
third_plural = string.gsub(third_plural, "U$", "Uv")
self:add(third_plural, "aorist root 3p an")
else
-- The Vedic root aorist, reconstructed with the strong stem throughout the active except in the third
-- plural. The only forms in Whitney that don't fit are arudhma (more likely an imperfect, from arundhma)
-- and aśravan.
third_plural = string.gsub(third_plural, "e(" .. CONSONANT .. ")$", "i%1")
third_plural = string.gsub(third_plural, "o(" .. CONSONANT .. ")$", "u%1")
third_plural = string.gsub(third_plural, "ar(" .. CONSONANT .. ")$", "f%1")
third_plural = string.gsub(third_plural, "ar$", "r")
third_plural = string.gsub(third_plural, "(" .. CONSONANT .. CONSONANT .. ")e$", "%1iy")
third_plural = string.gsub(third_plural, "e$", "y")
third_plural = string.gsub(third_plural, "(" .. CONSONANT .. CONSONANT .. ")o$", "%1uv")
third_plural = string.gsub(third_plural, "o$", "v")
third_plural = string.gsub(third_plural, "(a/?[tgm])a([mn])$", "%1%2")
third_plural = string.gsub(third_plural, "(a/?j)an$", "%1Y")
third_plural = string.gsub(third_plural, "(a/?)Gas$", "%1kz")
third_plural = string.gsub(third_plural, "(a/?[ks][rk]a)nd$", "%1d") -- krand and skand
third_plural = string.gsub(third_plural, "(a/?g)raB$", "%1fB")
third_plural = string.gsub(third_plural, "(a/?m)yakz$", "%1ikz")
if weak_given and string.match(strong.stem, "[eo]/?$") then
third_plural = (string.match(strong.stem, "^a/?") or "") .. weak_before_vowel
end
if third_plural == strong.stem then
self:add(third_plural, "aorist root 3p ur")
third_plural_ur = true
else
self:add(third_plural, "aorist root 3p an")
end
end
if injunctive then
local injunctive_third_plural
if middle_injunctive_given then
injunctive_third_plural = middle_injunctive_given
elseif not injunctive_given then
injunctive_third_plural = string.gsub(third_plural, "^a/?(.+)$", "%1")
injunctive_third_plural = string.gsub(injunctive_third_plural, "^c(C.+)$", "%1")
else
injunctive_third_plural = injunctive_given
end
local accent = string.gsub(third_plural, "^[^/]+(/?).+$", "%1")
if third_plural_ur then
self:add(injunctive_third_plural, "aorist root injunctive 3p ur", accent)
else
self:add(injunctive_third_plural, "aorist root injunctive 3p an", accent)
end
if weak_given then
self:rootAoristModes(injunctive, weak_before_vowel, ending_accent, weak_given)
elseif not string.match(strong.stem, "[eoIU]/?$") then
self:rootAoristModes(injunctive, third_plural_ur and injunctive or injunctive_third_plural, ending_accent)
end
end
else
error(("Could not tell the aorist type of '%s'; give it with <type:...>"):format(
properties.bridge:toIast(strong.form)), 0)
end
if not weak.given then
return
end
-- Now the middle.
-- Before -gdha, -ddha and -bdha, the stem ends in -h, -dh or -bh (except in (a)gdha).
local aspirated = {g = "h", d = "D", b = "B"}
weak.form = string.gsub(weak.form, "(.+)([gdb])(Da)$", function(before, consonant, after)
return before .. aspirated[consonant] .. after
end)
if string.match(weak.form, "hDa$") then
self.options.h_velar = true
end
if (not type or type == "iṣ" or type == "īṣ") and weak:detect("(.+)[iI]zwa$") then
self:category("iṣ-aorist")
local connecting = (type == "īṣ" or string.match(weak.written, "Izwa$")) and "I" or "i"
self:add(weak.stem, "aorist is middle", nil, {connecting = connecting})
local middle_injunctive = middle_injunctive_stem(weak.stem, middle_injunctive_given)
if middle_injunctive then
self:add(middle_injunctive, "aorist is middle injunctive", nil, {connecting = connecting})
self:add(middle_injunctive, "aorist is middle optative", ending_accent, {connecting = connecting})
end
elseif (not type or type == "s") and (weak:detect("(.+)sta$") or weak:detect("(.+)zwa$")
or weak:detect("(.+[ktp])ta$") or weak:detect("(.+[ghdDbB])Da$")) then
self:category("s-aorist")
self:add(weak.stem, "aorist s middle")
local middle_injunctive = middle_injunctive_stem(weak.stem, middle_injunctive_given)
if middle_injunctive then
self:add(middle_injunctive, "aorist s middle injunctive")
-- The middle optative is the precative middle (bhakṣīyá, maṃsīṣṭa; Whitney §895).
self:add(middle_injunctive, "precative middle", ending_accent, {moods = {optat = true}})
-- FIXME: Only roots with guṇa in the indicative and injunctive get a middle subjunctive; make it for the
-- others too.
if string.match(middle_injunctive, "[Aeoa]/?M?" .. CONSONANT .. "*$") then
self:add(middle_injunctive, "aorist s middle subjunctive")
end
end
elseif (not type or type == "sa") and weak:detect("(.+kz)a/?ta$", "kza(/?)ta$") then
self:category("sa-aorist")
self:add(weak.stem, "aorist sa middle", weak.accent)
self:add(weak.stem, "aorist thematic middle", weak.accent)
local middle_injunctive, _, accent = middle_injunctive_stem(weak.stem, middle_injunctive_given, true)
if middle_injunctive then
self:add(middle_injunctive, "aorist sa middle injunctive", accent)
self:add(middle_injunctive, "aorist thematic middle injunctive", accent)
end
elseif (not type or type == "a") and weak:detect("(.+)a/?ta$", "a(/?)ta$") then
self:category("a-aorist")
self:add(weak.stem, "aorist a middle", weak.accent)
self:add(weak.stem, "aorist thematic middle", weak.accent)
local middle_injunctive, _, accent = middle_injunctive_stem(weak.stem, middle_injunctive_given, true)
if middle_injunctive then
self:add(middle_injunctive, "aorist a middle injunctive", accent)
self:add(middle_injunctive, "aorist thematic middle injunctive", accent)
self:add(middle_injunctive, "present thematic", accent, {moods = THEMATIC_MODES, voices = {mid = "mid"}})
end
elseif (not type or type == "root") and weak:detect("(.+)[tDw]a$") then
self:category("root-aorist")
self:add(weak.stem, "aorist root middle before vowel")
local middle_injunctive, how, accent = middle_injunctive_stem(weak.stem, middle_injunctive_given, true)
local middle_injunctive_before_vowel = middle_injunctive
if middle_injunctive then
self:add(middle_injunctive, "aorist root middle injunctive before vowel", accent)
end
if string.match(weak.written, VOWEL .. "ta<.*>$") then
-- The roots gam, tan and man.
weak.stem = string.gsub(weak.written, "ta<.*>$", "")
elseif string.match(weak.written, "^a/?gDa<.*>$") then
-- agdha, whose stem is agh-.
weak.stem = string.gsub(weak.written, "gDa<.*>$", "G")
end
self:add(weak.stem, "aorist root middle before consonant")
if middle_injunctive then
if how == "2" then
middle_injunctive = string.gsub(weak.stem, "^a/?(.+)$", "%1")
end
self:add(middle_injunctive, "aorist root middle injunctive before consonant", accent)
end
if properties.mv_stem then
weak.stem = properties.mv_stem
end
self:add(weak.stem, "aorist root middle before m v y")
if middle_injunctive then
if how == "2" then
middle_injunctive = string.gsub(weak.stem, "^a/?(.+)$", "%1")
end
self:add(middle_injunctive, "aorist root middle injunctive before m v y", accent)
end
if middle_injunctive then
-- The middle modes and participle: aśīmáhi, kṛṣvá, yujāná (Whitney §837b, §839, §840).
self:add(middle_injunctive_before_vowel, "present weak before vowel", ending_accent,
{moods = {optat = true, imper = true, part = true}, voices = {mid = "mid"}})
self:add(middle_injunctive, "present weak before consonant", ending_accent,
{moods = {imper = true}, voices = {mid = "mid"}})
end
if injunctive_given then
self:add(injunctive_given, "aorist root middle subjunctive")
elseif injunctive then
self:add(injunctive, "aorist root middle subjunctive")
end
else
error(("Could not tell the aorist type of '%s'; give it with <type:...>"):format(
properties.bridge:toIast(weak.form)), 0)
end
end
--[==[
Add the active modes and participle of a root aorist (Whitney §837–840), on its injunctive stem `strong` and the weak
stem `weak` (that of the third plural): the optative on the weak stem (bhūyā́ma, aśyā́m; an ā becomes e, as in deyā́m,
and a final r after a consonant ri, as in kriyā́ma), the imperative with the strong stem in the third singular
(gántu, śrótu) and the weak one elsewhere (śrudhí, kṛdhí, śrutám, bhūtá), and the participle in -ánt on the weak
stem (gmánt, bhidánt). The roots in -ā keep their ā throughout, except in the optative (dātám, sthā́nt). A
final ū or ī before a vowel is written uv or iy in the weak stem; the optative lengthens a short one (śrūyā́s,
against śrudhí). The weak forms take `accent` on their ending.
`before_consonant` is the weak stem as `weakstem:` gives it (bhū, ci), which a root in -i/-ī/-u/-ū needs, since its
vowel can't be read off the head; otherwise it is made from `weak`. A weak stem that has neither a vowel nor a final
nasal, which becomes a before a consonant (gm-: gatá), makes no optative and no imperative (kṣ-, of ghas).
]==]
function Analysis:rootAoristModes(strong, weak, accent, before_consonant)
-- The weak forms are accented on the ending, so their stems lose the accent.
weak = string.gsub(weak, ACCENT, "")
local consonant = before_consonant
if not consonant then
consonant = weak
if string.match(strong, "A/?$") then
consonant = string.gsub(strong, ACCENT, "")
end
consonant = string.gsub(consonant, "(" .. CONSONANT .. ")r$", "%1f")
consonant = string.gsub(consonant, "([iIuU])[yv]$", "%1")
end
if not string.match(consonant, VOWEL) and not string.match(consonant, "[mn]$") then
return
end
local optative = string.gsub(consonant, "A$", "e")
optative = string.gsub(optative, "([iu])$", M.sa_utilities.lengthen)
optative = string.gsub(optative, "(" .. CONSONANT .. ")f$", "%1ri")
self:add(optative, "present weak before m v y", accent, {moods = {optat = true}, voices = {act = "act"}})
self:add(strong, "present strong before consonant", nil, {moods = {imper = true}})
self:add(consonant, "present weak before consonant", accent, {moods = {imper = true}, voices = {act = "act"}})
-- -hi after a long vowel (māhi), -dhi elsewhere (śrudhí, kṛdhí).
if string.match(consonant, "[AIUFeEoO]$") then
self:add(consonant, "present imperative 2s hi", accent)
else
self:add(consonant, "present imperative 2s dhi", accent)
end
self:add(string.match(strong, "A/?$") and consonant or weak, "present weak before vowel", accent,
{moods = {imper = true, part = true}, voices = {act = "act"}})
end
-- Analyze a precative (benedictive).
function Analysis:prec()
local strong, weak = self.strong, self.weak
if strong.form ~= "-" then
if strong:detect("(.+)yA/?t$", "yA(/?)t$") then
self:add(strong.stem, "precative", strong.accent)
else
self:requireStem(strong, "the head")
end
end
if weak.given then
if weak:detect("(.+)[sz]Izwa/?$", "[sz]Izwa(/?)$") then
self:add(weak.stem, "precative middle", weak.accent)
else
self:requireStem(weak, "the middle")
end
end
end
-- Analyze a perfect.
function Analysis:perf()
local strong, weak = self.strong, self.weak
local strong_absent = strong.form == "-"
self.reduplicated = true
if self.options.set_and_anit then
self.options.insert_i = true
end
if not strong_absent and strong:detect("(.+)O/?$", "O(/?)$") then
-- Roots in -ā, with -au in the third singular.
self:add(strong.stem, "perfect au", strong.accent)
self.options.insert_i = true
self:add(strong.stem, "perfect weak before consonant", strong.accent)
self:add(strong.stem, "perfect set participle", strong.accent)
self:add(strong.stem, "perfect weak before vowel", strong.accent)
return
end
if not strong_absent and not strong:detect("(.+)a$") then
if not strong:detect("(.+)e/?$", "e(/?)$") then
self:requireStem(strong, "the head")
else
self:forceVoice("mid")
end
end
if strong_absent and not weak.given then
-- A table made from cell parameters alone.
return
end
if not weak.given then
weak.stem = strong.stem
weak.accent = strong.accent
elseif not weak:detect("(.+)u/?[Hrs]$", "u(/?)[Hrs]$") then
self:requireStem(weak, "the third plural")
end
if not strong_absent then
-- cakā́ra and the like: shorten the ā of the strong stem, unless the weak stem has it too.
if string.match(strong.written, "A" .. ACCENT .. "?" .. CONSONANT .. "a$")
and not string.match(weak.stem, "A" .. ACCENT .. "?" .. CONSONANT .. "$") then
strong.stem = string.gsub(strong.stem, "A(" .. ACCENT .. "?.)$", "a%1")
end
-- A stem in a + consonant, or in -e or -o, follows Brugmann's law.
if string.match(strong.stem, "a" .. ACCENT .. "?" .. CONSONANT .. "$") or string.match(strong.stem, "[eo]" .. ACCENT .. "?$") then
self:add(strong.stem, "perfect strong brugmann")
else
self:add(strong.stem, "perfect strong")
end
end
if weak.given and (string.match(weak.written, CONSONANT .. "i?yu/?[Hrs]$") or string.match(weak.written, "uvu/?[Hrs]$")) then
error("The weak stem of roots in -i/-ī and -u/-ū can't be read off the third plural (for the active participle); "
.. "give it with <weakstem:...>", 0)
elseif string.match(weak.stem, CONSONANT .. "r$") then
-- A final -r after a consonant becomes -ṛ.
weak.stem = string.gsub(weak.stem, "r$", "f")
elseif string.match(weak.stem, "[uU]$") or string.match(weak.stem, CONSONANT .. CONSONANT .. "[iI]$") then
self.options.iy_uv_before_vowel = true
end
local strong_stem = strong.stem or ""
if (string.match(weak.stem, "[uf]$") or string.match(weak.stem, "^vid$") or string.match(weak.stem, "[^sz]vid$"))
and not self.options.insert_i then
-- The aniṭ roots in -ṛ or -u, and vid.
if not strong_absent then
self:add(strong_stem, "perfect 2s tha")
end
self:add(weak.stem, "perfect weak before consonant", weak.accent)
self:add(weak.stem, "perfect anit participle", weak.accent)
if string.match(weak.written, ".<.*>$") then
weak.stem = string.gsub(weak.written, "u/?[Hrs]<.*>$", "")
end
self:add(weak.stem, "perfect weak before vowel", weak.accent)
if string.match(weak.stem, "vid$") then
self:add(weak.stem, "perfect vedic anit middle 3p", weak.accent)
end
return
end
-- Turn off `insert_i` here, since it would add -i- to -tha.
self.options.insert_i = false
if not strong_absent then
local tha_added = false
if (string.match(strong_stem, "uva/?.$") and string.match(weak.stem, "U.$")) -- uvac-
or (string.match(strong_stem, "iya/?.$") and string.match(weak.stem, "I.$")) -- iyaj-
or (string.match(strong_stem, "[aA]/?[NYRnmM]?[^yrv]$") and (string.match(weak.stem, "e.$") -- tatan- / ten-
or string.match(weak.stem, CONSONANT .. CONSONANT .. "$"))) -- jajan- / jajñ-
or string.match(strong_stem, "U/?v$") -- babhūv-
or string.match(strong_stem, "a/?[yvr]$") or string.match(strong_stem, "[eo]/?$") then -- ninay-, dadhar-
self:add(strong_stem, "perfect 2s tha")
tha_added = true
end
-- The rules below leave out jajñithá, which Whitney mentions at §800h: Whitney's Roots has jagamitha against
-- it, and arguably so does §793g.
if string.match(strong_stem, "a/?[^yrlv]$") and string.match(weak.stem, "e.$") then
self:add(weak.stem, "perfect weak 2s itha", weak.accent)
elseif string.match(strong_stem, "a/?[kKgGNcCjJYwWqQRtTdDnpPbBmLSzsh]$") then
-- This form is post-Vedic.
self:add(strong_stem, "perfect 2s itha later")
else
self:add(strong_stem, "perfect 2s itha")
end
if string.match(strong_stem, "a" .. ACCENT .. "?" .. CONSONANT .. "$") and not tha_added then
self:add(strong_stem, "perfect 2s tha vedic")
end
end
-- The active participle is made from the weak stem, with -i- when that stem is one syllable (Whitney §803). This
-- happens when it has lost a syllable or when the reduplication has merged with an initial a- (ādivā́ṃs,
-- §783a). A stem that is one syllable because it has no reduplication takes no -i- (vidvā́ṃs, dāśvā́ṃs,
-- §803a).
if not strong_absent then
local weak_syllables = count(weak.stem, VOWEL_WITH_ACCENT)
if weak_syllables == count(strong_stem, VOWEL_WITH_ACCENT)
and not (weak_syllables == 1 and string.match(weak.stem, "^" .. VOWEL)) then
self:add(weak.stem, "perfect anit participle", weak.accent)
else
self:add(weak.stem, "perfect set participle", weak.accent)
end
end
-- The weak stem as read off the third plural goes in `weak.stem2`, so that `weak.stem` keeps the original.
if weak.given then
if string.match(weak.written, ".<.*>$") then
weak.stem2 = string.gsub(weak.written, "u/?[Hrs]<.*>$", "")
else
weak.stem2 = weak.stem
weak.stem2 = string.gsub(weak.stem2, "(" .. CONSONANT .. ")f$", "%1r")
weak.stem2 = string.gsub(weak.stem2, "[uU]$", "uv")
weak.stem2 = string.gsub(weak.stem2, "(" .. VOWEL .. CONSONANT .. ")[iI]$", "%1y")
weak.stem2 = string.gsub(weak.stem2, "(" .. CONSONANT .. CONSONANT .. ")[iI]$", "%1iy")
end
else
weak.stem2 = strong.stem
end
self.options.insert_i = true
self:add(weak.stem2, "perfect weak before consonant", weak.accent)
self:add(weak.stem2, "perfect weak before vowel", weak.accent)
-- The Vedic aniṭ forms (Whitney §798a). The consonants leave out y, r, l and v: r + r is impossible, and none of
-- them is among Whitney's examples. See Macdonell p.355 for the roots in -i/ī/u/ū.
if string.match(weak.stem, "[aiufx][kKgGNcCjJYwWqQRtTdDnpPbBmLSzsh]$")
or string.match(weak.stem, "[iIuU]$") then
self.options.insert_i = false
if weak.given and weak.stem ~= nil and string.match(weak.written, "<.*>$") then
weak.stem = string.match(weak.written, "^.*<(.*)>$")
end
self:add(weak.stem, "perfect vedic anit", weak.accent)
elseif self.options.set_and_anit then
self.options.insert_i = false
self:add(weak.stem, "perfect weak before consonant", weak.accent)
end
end
--[==[
Analyze a pluperfect (Whitney §817–820): an augmented preterite made on the perfect stem with the endings of the
imperfect. The active singular and plural have the strong stem (ájagan, ájaganma, ajabhartana), and the dual and the
middle the weak one (amumuktam); the third plural is in -ur in the active and in -ata or -iran in the middle. A strong
stem that ends in a consonant also has second and third singulars with an inserted -ī- (ábubhojīs, arirecīt; §819). A
head without a weak stem is declined like a thematic imperfect (asasvajat; §820).
]==]
function Analysis:plup()
self.properties.perfect_stem = true
self:impf()
local strong = self.strong
if self.weak.given and strong.stem and self.forced_voice ~= "mid" then
self:add(strong.stem, "pluperfect strong plural", nil, {replaces = true})
if string.match(strong.stem, CONSONANT .. "$") then
self:add(strong.stem, "pluperfect 2s 3s i")
end
end
end
-- Analyze a periphrastic perfect: the head in -ām followed by the perfect of each auxiliary.
function Analysis:pperf()
local head = self.strong.form
if not string.match(head, "A" .. ACCENT .. "?m$") then
error(("The head of a periphrastic perfect ends in -ām, not '%s'"):format(self.properties.bridge:toIast(head)), 0)
end
self.periphrastic = {head = head, auxiliaries = self.properties.auxiliaries or M.data.periphrastic_perfect.default}
self:category("periphrastic perfect")
end
--[==[
Analyze the nonfinite forms (Whitney §952–995, §1051). The head is either a present in -áyati, for a causative (or a
verb of class 10), or the past passive participle of a simple verb, with the other principal parts in `properties`:
`infinitive` (from `inf:`) and `root` (from `root:`, or the page of a root list).
Of a causative we make the infinitive in -ayitum and the gerundive in -ya, accented on the root as they are with a
simple root (§972, §963, §1051h), the gerund in -ayitvā́, the past participles in -itá and -itávat, and the gerundives in
-ayitavyà and -anī́ya (dhāráyati: dhā́rayitum, dhā́rya, dhārayitavyà, dhāraṇī́ya; §1051e).
Of a simple verb we make the past active participle in -vat from the head (§959) and the gerund in -tvā́ like it
(§991): -ta becomes -tvā (kṛtá, kṛtvā́; dagdhá, dagdhvā́), as does a -ná after a dental, ṛ or a velar (bhinná, bhittvā́;
tīrṇá, tīrtvā́; bhagná, bhaktvā́); any other -ná gerund is given with `gerund:`. From the infinitive we make the
gerundive in -tavyà (§964), and the gerundive in -anī́ya from the guṇa of the root (§965, §1150), which the stem of the
infinitive shows unless sandhi has changed the root's last sound (bhávitum, bhavanī́ya; but váktum needs `root:`).
With `pre:`, the gerund is the one in -ya: for a causative, on the causatively strengthened root (§1051d), and for a
simple verb, as `gerundInYa` makes it (§990, §992).
`missing` lists the forms that couldn't be made for want of a principal part.
]==]
function Analysis:nonf()
local strong, properties = self.strong, self.properties
self.missing = {}
if strong:detect("(.+)a/?yati$", "a(/?)yati$") then
local root_accented = strong.stem
if strong.accent ~= "" then
root_accented = (string.gsub(strong.stem, "^(.-" .. VOWEL .. ")", "%1/", 1))
end
self:add(root_accented, "causative infinitive")
self:add(strong.stem, "causative nonfinite", strong.accent)
self:add(strong.stem, "causative gerundive tavya", strong.accent ~= "" and "\\" or "")
self:add(strong.stem, "gerundive aniya", strong.accent)
if properties.preverbs then
-- With a preverb, the gerund in -ya on the causatively strengthened root, which keeps the -ay- when the
-- root is unchanged (pratiṣṭhāpya, but -gamayya; §1051d).
self:add(root_accented, string.match(strong.stem, "a" .. CONSONANT .. "$") and "gerund ayya" or "gerund ya")
end
return
end
if not strong:detect(PARTICIPLE_HEAD, "a(/?)$") then
error(("The head of the nonfinite forms is a present in -áyati or a past participle, not '%s'"):format(
properties.bridge:toIast(strong.form)), 0)
end
local accented = string.find(strong.form, ACCENT) ~= nil
self:add(strong.form, "past participles")
-- The gerund in -tvā, from the participle without its -a.
local gerund = strong.stem
if string.match(gerund, "[tTdDwWqQ]$") then
-- kṛt-, dagdh-, iṣṭ-
elseif string.match(gerund, "nn$") then
gerund = string.gsub(gerund, "nn$", "tt")
elseif string.match(gerund, "[IU]/?r[Rn]$") then
gerund = string.gsub(gerund, "[Rn]$", "t")
elseif string.match(gerund, "[gk][nR]$") then
gerund = string.gsub(gerund, "[gk][nR]$", "kt")
else
gerund = nil
end
-- The infinitive and the gerundives, from the stem of the infinitive with its t (kart-, dagdh-).
local infinitive = properties.infinitive and string.match(properties.infinitive, "^(.+[tTdDwWqQ])u/?m$")
if properties.preverbs then
-- With a preverb, the gerund in -ya, or -tya after a short vowel (§990, §992).
gerund = self:gerundInYa(infinitive)
if gerund then
self:add(gerund, "gerund ya")
end
elseif gerund then
self:add((string.gsub(gerund, ACCENT, "")), "gerund tva", strong.accent)
end
if not gerund and not properties.gerund then
table.insert(self.missing, "gerund")
end
if not infinitive then
table.insert(self.missing, "inf")
return
end
local unaccented = string.gsub(infinitive, ACCENT, "")
local root_accented = unaccented
if accented then
root_accented = (string.gsub(unaccented, "^(.-" .. VOWEL .. ")", "%1/", 1))
end
self:add(root_accented, "infinitive")
self:add(unaccented, "gerundive tavya", accented and "\\" or "")
-- The root before -anīya: the stem without its t, and without the -i- of a seṭ root (bhavi-t-), unless sandhi has
-- changed the root's last sound; then `root:` gives it.
local guna = string.match(unaccented, "^(.*[aAiIuUfFxXeEoOrl])t$")
if guna and string.match(guna, CONSONANT .. "i$") then
guna = string.sub(guna, 1, -2)
elseif not guna or string.match(guna, "[iIuU]$") then
guna = properties.root and guna_of_root(properties.root)
end
if guna then
self:add(guna, "gerundive aniya", accented and "/" or "")
end
end
--[==[
Return the stem of the gerund in -ya of a simple verb, accented on the root (Whitney §992), or nil: that of a root in
-ā, from the infinitive (-sthā́ya, -dā́ya); the weak root of a participle in -ita (-pátya, -gṛ́hya, -údya), or of one in
-ta after a vowel, which takes -t- after a short one (-kṛ́tya, -gátya; -bhū́ya); or `root:` when the participle keeps
the root's vowel (dṛṣṭá, -dṛ́śya). `infinitive` is the stem of the infinitive with its t.
]==]
function Analysis:gerundInYa(infinitive)
local participle = string.gsub(self.strong.form, ACCENT, "")
local accented = string.find(self.strong.form, ACCENT) ~= nil
local root = infinitive and string.match((string.gsub(infinitive, ACCENT, "")), "^(.*A)t$")
if not root then
-- (A root before -ita has a vowel of its own: gṛh-ītá, but nī-tá.)
root = string.match(participle, "^(.-" .. VOWEL .. ".-" .. CONSONANT .. ")[iI]ta$")
end
if not root then
local vowel_final = string.match(participle, "^(.*" .. VOWEL .. ")ta$")
if vowel_final then
root = string.match(vowel_final, "[aiufx]$") and vowel_final .. "t" or vowel_final
end
end
if not root and self.properties.root then
local given = string.gsub(self.properties.root, ACCENT, "")
local start = string.match(given, "^(.-" .. VOWEL .. ")" .. CONSONANT .. "+$")
if start and string.sub(participle, 1, #start) == start then
root = given
end
end
if not root then
return nil
end
if accented then
root = string.gsub(root, "^(.-" .. VOWEL .. ")", "%1/", 1)
end
return root
end
-- Add the passive from `pass:`. That of a present or imperfect is conjugated as a thematic middle on the -ya- stem; that
-- of an aorist is its third singular in -i, with the injunctive made by dropping the augment (Whitney §842–844).
function Analysis:addPassive()
local passive = self.passive
if not passive.given then
return
end
if self.tense == "aor" then
if not passive:detect("(.+)i$") then
error(("The aorist passive ends in -i, not '%s'"):format(self.properties.bridge:toIast(passive.form)), 0)
end
self:add(passive.stem, "aorist passive", nil, {moods = {indic = true}})
local injunctive = injunctive_stem(passive.stem)
if injunctive then
self:add(injunctive, "aorist passive", nil, {moods = {inj = true}})
end
return
end
if self.tense == "pres" then
if not passive:detect("(.+)a/?te$", "a(/?)te$") then
self:requireStem(passive, "the passive")
end
self:add(passive.stem, "present thematic", passive.accent, {voices = {mid = "pass"}})
else
if not passive:detect("(.+)a/?ta$", "a(/?)ta$") then
self:requireStem(passive, "the passive")
end
self:add(passive.stem, "imperfect thematic", passive.accent, {voices = {mid = "pass"}})
end
end
------------------------------------------------------------------------------------------------------------------------
-- Generation --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object that makes the forms of a form group, slot by slot, as `{slot = {{slp1 = ..., note = KEY}, ...}}`, in the order
of the endings in the set. With `novedic`, the endings with a Vedic note are left out.
]==]
local FormGenerator = {}
FormGenerator.__index = FormGenerator
function FormGenerator.new(novedic)
return setmetatable({novedic = novedic}, FormGenerator)
end
-- Return the stem of a seṭ root (`options.insert_i`) with its connecting vowel for `ending`: -ī- before the endings
-- -s and -t, and -i- before the other endings that start with a consonant other than y.
local function set_stem(stem, ending, options, accented)
if not options.insert_i or not string.match(stem, CONSONANT .. "$") then
return stem
end
local vowel
if string.match(ending, "^[st]$") then
vowel = "I"
elseif string.match(ending, "^[tTDmrvshQz]") then
vowel = "i"
else
return stem
end
return M.sa_utilities.join(stem, vowel, {accented = accented, no_final_sandhi = true,
strip_stem_accent = options.strip_stem_accent, keep_stem_s = true})
end
--[==[
Return the form made from `group` and `ending` (a string, or a table with the ending and its `note`, `brugmann` and
`palatal_to_velar`), as `{slp1 = ..., note = KEY}`, or nil for a Vedic ending left out by `novedic`. With
`participle` (for the participles and the nonfinite forms), the form is joined without final sandhi.
]==]
function FormGenerator:form(group, ending, participle)
local text = ending
local note, brugmann, palatal_to_velar
if type(ending) == "table" then
text, note, brugmann, palatal_to_velar = ending[1], ending.note, ending.brugmann, ending.palatal_to_velar
end
if self.novedic and note and M.data.notes[note].vedic then
return nil
end
text = string.gsub(text, "@", group.accent)
text = string.gsub(text, "#", group.connecting)
local options = group.options
local accented = string.match(group.stem, ACCENT) ~= nil
local form = M.sa_utilities.join(set_stem(group.stem, text, options, accented), text, {
accented = accented,
no_final_sandhi = participle,
j_retroflex = options.j_retroflex,
h_velar = options.h_velar,
vedic_l = options.vedic_l,
final_obstruent = options.final_obstruent,
diaspirate = options.diaspirate,
iy_uv_before_vowel = options.iy_uv_before_vowel,
strip_stem_accent = options.strip_stem_accent,
keep_stem_s = true,
no_bartholomae = options.no_bartholomae,
palatal_to_velar = palatal_to_velar,
})
if brugmann then
form = string.gsub(form, "a(" .. ACCENT .. "?)(" .. CONSONANT .. "a)$", "A%1%2")
end
return {slp1 = form, note = note}
end
-- Add the forms of `group` to `cells`, for every mood, voice and person-number of its set of endings that the group's
-- `moods` and `voices` let through.
function FormGenerator:generate(group, cells)
local set = M.data.endings[group.endings]
if not set then
error("Internal error: no endings '" .. group.endings .. "'")
end
for mood, contents in pairs(set) do
if mood == "nonf" then
-- The nonfinite forms have no voice or person, so each key is directly a slot name.
for slot, endings in pairs(contents) do
self:addAll(cells, slot, group, endings, true)
end
elseif not group.moods or group.moods[mood] then
for voice, endings in pairs(contents) do
local table_voice = voice
if group.voices then
table_voice = group.voices[voice]
end
if table_voice then
if mood == "part" then
self:addAll(cells, "part_" .. table_voice, group, endings, true)
else
for person_number, person_endings in pairs(endings) do
self:addAll(cells, mood .. "_" .. table_voice .. "_" .. person_number, group, person_endings, false)
end
end
end
end
end
end
end
-- Add the forms of `endings` on `group` to the cell `slot`. If the group `replaces` (as for an irregular form), its
-- forms take the place of those the earlier groups made.
function FormGenerator:addAll(cells, slot, group, endings, participle)
local list = not group.replaces and cells[slot] or {}
cells[slot] = list
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings) do
local form = self:form(group, ending, participle)
if form then
table.insert(list, form)
end
end
end
-- Add the forms of a periphrastic perfect: the head followed by each auxiliary's forms, with -m before a vowel or a
-- labial and -ṃ before any other consonant. After an unaccented head, the auxiliary loses its accent.
function FormGenerator:periphrastic(periphrastic, cells)
local head = periphrastic.head
local accented = string.match(head, ACCENT) ~= nil
local function joined(form)
if string.match(form, "^" .. VOWEL) or string.match(form, "^[pPbBm]") then
if not accented then -- An unaccented head takes an unaccented auxiliary.
return head .. string.gsub(form, "/", "")
else
return head .. form
end
elseif not accented then
return string.gsub(head, "m$", "M") .. string.gsub(form, "/", "")
end
return string.gsub(head, "m$", "M") .. form
end
for _, name in ipairs(periphrastic.auxiliaries) do
local auxiliary = M.data.periphrastic_perfect.auxiliaries[name]
for mood, voices in pairs(auxiliary) do
for voice, forms in pairs(voices) do
if mood == "part" then
local list = cells["part_" .. voice] or {}
cells["part_" .. voice] = list
table.insert(list, {slp1 = joined(forms)})
else
for person_number, form in pairs(forms) do
local slot = mood .. "_" .. voice .. "_" .. person_number
local list = cells[slot] or {}
cells[slot] = list
table.insert(list, {slp1 = joined(form)})
end
end
end
end
end
end
--[==[
Return the preverbs `written` of `pre:` (a list as written, or nil) in SLP1, accented, in order, or nil if there are
none. A preverb may be written as one of its aliases in `data.preverb_aliases`; an unknown preverb is an error.
]==]
local function preverbs_of(written, bridge)
if not written then
return nil
end
local preverbs = {}
for _, text in ipairs(written) do
local key = string.gsub(bridge:toSlp1(text), ACCENT, "")
key = M.data.preverb_aliases[key] or key
if not M.data.preverbs[key] then
local known = {}
for name in pairs(M.data.preverbs) do
table.insert(known, bridge:toIast(name))
end
table.sort(known)
error(("Unrecognized preverb '%s'; the preverbs are %s"):format(text, table.concat(known, ", ")), 0)
end
table.insert(preverbs, M.data.preverbs[key])
end
return preverbs
end
-- The consonant a reduplication begins with, for each first consonant of a root (Whitney §590): a deaspirated stop,
-- and a palatal for a velar or h.
local reduplicating_consonant = {
k = "c", K = "c", g = "j", G = "j", h = "j", C = "c", J = "j", W = "w", Q = "q", T = "t", D = "d", P = "p",
B = "b",
}
--[==[
Return the root as it shows in `head` (SLP1), for `join_words`: without the augment of an augmented tense, and
without the reduplication if `reduplicated` (tasthaú > sthau, jaghā́na > ghāna).
]==]
local function root_of_head(head, tense, reduplicated)
local root = string.gsub(head, ACCENT, "")
if tense == "impf" or tense == "aor" or tense == "cond" or tense == "plup" then
root = string.gsub(root, "^a(" .. CONSONANT .. ")", "%1")
end
if reduplicated then
local first, rest = string.match(root, "^(" .. CONSONANT .. ")" .. VOWEL .. "(.*)$")
local onset = rest and string.match(rest, "^[sSz]?(" .. CONSONANT .. ")")
if first and onset and (reduplicating_consonant[onset] or onset) == first then
root = rest
end
end
return root
end
-- Return the preverbs (SLP1, accented, in order) joined to one another (prá + ní = praṇí), twice: unaccented, and
-- accented on the last of them.
local function preverb_chain(preverbs)
local unaccented, accented
for i, preverb in ipairs(preverbs) do
local bare = string.gsub(preverb, ACCENT, "")
local last = i == #preverbs and preverb or bare
if unaccented then
local options = {preverb = true, second_preverb = true}
accented = M.sa_utilities.join_words(unaccented, last, options)
unaccented = M.sa_utilities.join_words(unaccented, bare, options)
else
unaccented, accented = bare, last
end
end
return unaccented, accented
end
--[==[
Return `form` (SLP1) without the preverbs (as `preverbs_of` gives them), or nil if it isn't made with them: the form
of the simple verb that the preverbs, joined to it, give back (ignoring accents). It keeps the accents `form` has
after the preverbs (prakṛtá > kṛtá).
]==]
local function without_preverbs(form, preverbs)
local chain = preverb_chain(preverbs)
local target = string.gsub(form, ACCENT, "")
-- What sandhi may have done to the start of the simple form: a vowel merged with the preverb, an s or n made
-- retroflex, the s lost after ud.
local restorations = {"", "a", "A", "i", "I", "u", "U", "f", "s"}
for start = 1, #form do
local rest = string.sub(form, start)
local candidates = {}
for _, initial in ipairs(restorations) do
table.insert(candidates, initial .. rest)
end
if string.match(rest, "^R") then
table.insert(candidates, "n" .. string.sub(rest, 2))
elseif string.match(rest, "^z") then
table.insert(candidates, "s" .. string.sub(rest, 2))
end
for _, candidate in ipairs(candidates) do
local bare = string.gsub(candidate, ACCENT, "")
if bare ~= "" and string.gsub(M.sa_utilities.join_words(chain, bare, {preverb = true, root = bare}),
ACCENT, "") == target then
return candidate
end
end
end
return nil
end
--[==[
Put the preverbs (SLP1, accented, in order) before the forms of `cells` (Whitney §1082–1087). The preverbs are joined
to one another first (prá + ní = praṇí), and then to each form with external sandhi and the rules of a preverb (see
`join_words`; `root` is the root as it shows in the head). The verb keeps its accent and the preverbs lose theirs, as
in a subordinate clause (§1083): prabhávati, prā́vahat. In the nonfinite table, the past participles and the
infinitive are accented on the preverb nearest the verb (§1085a, c: prákṛta, prákartum), and the gerund is the one
in -ya (§990), which the analysis makes.
]==]
local function add_preverbs(cells, preverbs, root, nonfinite)
local unaccented, accented = preverb_chain(preverbs)
if nonfinite then
cells.gerund, cells.gerund_ya = cells.gerund_ya, nil
end
for slot, forms in pairs(cells) do
local preverb_accented = nonfinite and (slot == "inf" or slot == "ppp" or slot == "pap")
for _, form in ipairs(forms) do
local text = form.slp1
if preverb_accented then
text = string.gsub(text, ACCENT, "")
end
form.slp1 = M.sa_utilities.join_words(preverb_accented and accented or unaccented, text,
{preverb = true, root = root})
end
end
end
--[==[
Return the forms of every slot that `analysis` makes, as `{slot = {{slp1 = ..., note = KEY, attested = true}, ...}}`:
the forms of its groups (and of a periphrastic perfect), followed by the forms that `data.attested` gives for the verb
whose head is `head` (in SLP1; nil for none). `bridge` converts the attested forms, which are in IAST. An attested
form that the groups have already made isn't repeated, and an entry with `replaces` takes the place of the made forms.
]==]
local function make_cells(analysis, head, bridge)
local cells = {}
local novedic = analysis.properties.novedic
local generator = FormGenerator.new(novedic)
for _, group in ipairs(analysis.groups) do
generator:generate(group, cells)
end
if analysis.periphrastic then
generator:periphrastic(analysis.periphrastic, cells)
end
local attested = M.data.attested[analysis.tense]
attested = attested and head and attested[bridge:toIast((string.gsub(head, ACCENT, "")))]
if attested then
local accented = string.find(head, ACCENT) ~= nil
for _, entry in ipairs(attested) do
if not (novedic and entry.note and M.data.notes[entry.note].vedic) then
local list = not entry.replaces and cells[entry.slot] or {}
cells[entry.slot] = list
for _, written in ipairs(entry.forms) do
local form = bridge.from_iast(written)
if not accented then
form = string.gsub(form, ACCENT, "")
end
local made = false
for _, existing in ipairs(list) do
made = made or existing.slp1 == form
end
if not made then
table.insert(list, {slp1 = form, note = entry.note, attested = true})
end
end
end
end
end
return cells
end
------------------------------------------------------------------------------------------------------------------------
-- Conjugation --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the conjugation of one tense of one verb. It is built from the parts of a {{tl|sa-conj}} call (the
processed template arguments and the page name), and holds the moods and voices shown, the forms of each slot shown
(each with its notes as text), the general notes, the categories and the head forms for the title.
]==]
local Conjugation = {}
Conjugation.__index = Conjugation
function Conjugation.new(tense, spec_text, overrides, user_notes, pagename)
local tense_data = M.data.tenses[tense]
if not tense_data then
local tenses, table_sets = {}, {}
for _, code in ipairs(M.data.tense_order) do
table.insert(tenses, code)
end
for code in pairs(M.data.table_sets) do
table.insert(table_sets, code)
end
table.sort(table_sets)
error(("Unrecognized tense '%s'; the tenses are %s, and the table sets %s."):format(tense,
table.concat(tenses, ", "), table.concat(table_sets, ", ")), 0)
end
local spec = Spec.parse(spec_text or "", tense)
local indicators = spec.indicators
local head = spec.head
local stem = indicators.stem
if head == "" and not stem then
head = pagename
end
local bridge = ScriptBridge.new(head ~= "" and head or (stem or ""), pagename)
local function slp1(text)
return text and bridge:toSlp1(text) or nil
end
local properties = {
bridge = bridge,
class = indicators.class,
aorist_type = indicators.type,
insert_i = indicators["seṭ"],
set_and_anit = indicators["veṭ"],
novedic = indicators.novedic or false,
mv_stem = slp1(indicators.mvstem),
injunctive_stem = slp1(indicators.inj),
middle_injunctive_stem = slp1(indicators.midinj),
final_obstruent = slp1(indicators.final),
j_retroflex = indicators.j ~= nil,
h_velar = indicators.h ~= nil,
diaspirate = indicators.diaspirate,
vedic_l = indicators["ḷ"],
auxiliaries = indicators.aux,
infinitive = slp1(indicators.inf),
root = slp1(indicators.root),
gerund = slp1(indicators.gerund),
preverbs = preverbs_of(indicators.pre, bridge),
-- In the aorist, `weakstem:` is the weak stem of a root aorist's active (bhī for ábhet); the weak part is the
-- middle there.
root_weak_stem = tense == "aor" and slp1(indicators.weakstem) or nil,
}
local strong_form = head == "-" and "-" or slp1(head)
local passive_form = slp1(indicators.pass)
-- An aorist head in -i is the aorist passive (Whitney §842): the table has the passive only.
if tense == "aor" and not passive_form and string.match(strong_form, "i" .. ACCENT .. "?$") then
passive_form, strong_form = strong_form, "-"
end
-- Whitney's imperative in -tāt, given with `tāt` or listed for the verb in `data.tat_imperative`.
properties.tat = indicators["tāt"]
or M.data.tat_imperative[bridge:toIast((string.gsub(strong_form, ACCENT, "")))] or false
-- A weak (or middle) stem may be given without its form, when the form wouldn't tell us anything more.
local weak_form = indicators["3p"] or indicators.mid
local weak_stem = tense ~= "aor" and indicators.weakstem or indicators.midstem
local parts = {
strong = Part.new(strong_form, slp1(stem)),
weak = (weak_form or weak_stem) and Part.new(slp1(weak_form) or "", slp1(weak_stem)) or Part.new(),
passive = passive_form and Part.new(passive_form) or Part.new(),
}
local analysis = Analysis.new(tense, parts, properties)
analysis[tense](analysis)
analysis:addPassive()
if analysis.missing and analysis.missing[1] then
error(("The %s of a simple verb can't be made from its participle; give it with <%s:...>"):format(
M.data.moods[analysis.missing[1]].name, analysis.missing[1]), 0)
end
local cells = make_cells(analysis, strong_form, bridge)
if properties.preverbs then
local head_part = strong_form ~= "-" and strong_form or parts.weak.given and parts.weak.form or parts.passive.form
add_preverbs(cells, properties.preverbs, root_of_head(head_part, tense, analysis.reduplicated),
tense_data.nonfinite)
end
-- If `gerund:` was given (an irregular gerund), it replaces the regular one.
if properties.gerund then
cells.gerund = {{slp1 = properties.gerund}}
end
-- Work out the voices and moods to show. The nonfinite table has no voices at all.
local voices = {}
local shown_voice = analysis.forced_voice or indicators.voice
if strong_form == "-" and not parts.weak.given and parts.passive.given then
-- Only the passive is given (as for an aorist passive in -i).
shown_voice = "pass"
end
if not tense_data.nonfinite then
for _, voice in ipairs({"act", "mid"}) do
if not shown_voice or shown_voice == voice then
table.insert(voices, voice)
end
end
if parts.passive.given then
table.insert(voices, "pass")
end
end
local moods = {}
for _, mood in ipairs(tense_data.moods) do
if not (properties.novedic and tense_data.vedic_moods and tense_data.vedic_moods[mood]) then
table.insert(moods, mood)
end
end
local conjugation = setmetatable({
tense = tense,
head = head,
bridge = bridge,
voices = voices,
moods = moods,
slots = {},
general_notes = {},
categories = analysis.categories,
overridden = false,
}, Conjugation)
-- Fill in the slots shown, with any cell parameters taking precedence over the generated forms.
for _, mood in ipairs(moods) do
for _, slot in ipairs(conjugation:moodSlots(mood)) do
conjugation:fill(slot, cells, overrides)
end
end
for slot in pairs(overrides.slots) do
if conjugation.slots[slot] == nil then
error(("The parameter %s is not a cell of this table"):format(slot), 0)
end
end
-- A sparse mood is only shown when one of its cells has a form.
if tense_data.sparse_moods then
local shown = {}
for _, mood in ipairs(moods) do
local slots, empty = conjugation:moodSlots(mood), true
for _, slot in ipairs(slots) do
empty = empty and not conjugation.slots[slot][1]
end
if tense_data.sparse_moods[mood] and empty then
for _, slot in ipairs(slots) do
conjugation.slots[slot] = nil
end
else
table.insert(shown, mood)
end
end
conjugation.moods = shown
end
-- [[Wiktionary:Tracking/sa-verb/override]], [[Wiktionary:Tracking/sa-verb/manual]]
if conjugation.overridden then
M.debug_track("sa-verb/override")
end
if head == "-" and not parts.weak.given and not parts.passive.given then
M.debug_track("sa-verb/manual")
end
-- Add the general notes.
local strong_written = parts.strong.written
local weak_written = parts.weak.written
local shown_moods = {}
for _, mood in ipairs(conjugation.moods) do
shown_moods[mood] = true
end
local function add_note(key)
table.insert(conjugation.general_notes, M.data.general_notes[key])
end
if tense == "impf" then
add_note("imperfect")
elseif tense == "pfut" then
if shown_voice ~= "act" then
add_note("periphrastic_future_middle")
end
elseif tense == "prec" then
add_note("precative")
elseif tense == "plup" then
add_note("pluperfect")
elseif tense == "perf" then
if shown_moods.subj or shown_moods.optat or shown_moods.imper then
add_note("perfect_modes")
end
elseif tense == "aor" then
if indicators.mid and string.match(strong_written, "At$") and string.match(weak_written, "[iI]ta") then
add_note("root_aorist_middle")
elseif shown_moods.optat or shown_moods.imper or shown_moods.part then
add_note("aorist_modes")
elseif shown_moods.subj then
add_note("subjunctive")
end
if parts.passive.given then
add_note("passive_aorist")
end
elseif tense == "pres" and shown_moods.subj then
add_note("subjunctive")
end
for _, note in ipairs(user_notes) do
table.insert(conjugation.general_notes, note)
end
return conjugation
end
-- Return the slots of `mood` in the voices shown: the mood itself in the nonfinite table, one participle per voice, and
-- otherwise one slot per voice and person-number.
function Conjugation:moodSlots(mood)
if M.data.tenses[self.tense].nonfinite then
return {mood}
end
local slots = {}
for _, voice in ipairs(self.voices) do
if mood == "part" then
table.insert(slots, "part_" .. voice)
else
for _, person_number in ipairs(PERSON_NUMBERS) do
table.insert(slots, mood .. "_" .. voice .. "_" .. person_number)
end
end
end
return slots
end
-- Fill `slot` with the forms of its cell parameter in `overrides`, if there is one (`-` leaves it empty), or else with
-- the forms made in `cells`, each with its note as text.
function Conjugation:fill(slot, cells, overrides)
local given = overrides.slots[slot]
if given then
self.overridden = true
local forms = {}
for _, form in ipairs(given) do
if form.written ~= "-" then
table.insert(forms, {slp1 = self.bridge:toSlp1(form.written), notes = form.footnotes, override = true})
end
end
self.slots[slot] = forms
return
end
local forms = {}
for _, form in ipairs(cells[slot] or {}) do
local notes = {}
if form.note then
table.insert(notes, M.data.notes[form.note].text)
end
table.insert(forms, {slp1 = form.slp1, notes = notes, attested = form.attested})
end
self.slots[slot] = forms
end
--[==[
Return the data of the table for `json=1`, as a table to be encoded as JSON: the tense, head, voices and moods, and for
each slot its forms in SLP1, in the display script and in IAST, with their notes and whether they come from a cell
parameter (`override`) or from `data.attested` (`attested`); also the general notes and the categories.
]==]
function Conjugation:jsonObject()
local slots = {}
for slot, forms in pairs(self.slots) do
local list = {}
for _, form in ipairs(forms) do
table.insert(list, {
slp1 = form.slp1,
form = self.bridge:toNative(form.slp1),
translit = self.bridge:toIast(form.slp1),
notes = form.notes,
override = form.override,
attested = form.attested,
})
end
slots[slot] = list
end
return {
tense = self.tense,
head = self.head,
voices = self.voices,
moods = self.moods,
slots = slots,
notes = self.general_notes,
categories = self.categories,
}
end
------------------------------------------------------------------------------------------------------------------------
-- The table --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object that renders a `Conjugation` with [[Module:inflection-table]]. There is a column group for each voice shown and
a section for each mood, with the persons from third to first and the participles in one row. The cells are made by
`show_forms` in [[Module:inflection utilities]] (each form in the display script, linked with an accelerator for
`lemma`, with its IAST below it), and the notes and the categories follow the table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(conjugation, lemma, nocat)
return setmetatable({conjugation = conjugation, lemma = lemma, nocat = nocat}, TableRenderer)
end
-- Return the inflection tags of the accelerator for `slot`.
function TableRenderer:accel(slot)
local tense = M.data.tenses[self.conjugation.tense]
if tense.nonfinite then
return M.data.moods[slot].accel
end
local mood, voice, person, number = string.match(slot, "^(%a+)_(%a+)_(%d)(%a)$")
if mood then
return person .. "|" .. number .. "|" .. tense.accel .. "|" .. M.data.voices[voice].accel .. "|" .. M.data.moods[mood].accel
end
voice = string.match(slot, "^part_(%a+)$")
return tense.accel .. "|" .. M.data.voices[voice].accel .. "|part"
end
-- Return the forms of every slot shown as linked text (with an em dash where there are none), and the footnotes.
function TableRenderer:cells()
local conjugation, bridge = self.conjugation, self.conjugation.bridge
local formtable, slot_table = {}, {}
for slot, forms in pairs(conjugation.slots) do
if forms[1] then
local list = {}
for _, form in ipairs(forms) do
local footnotes
if form.notes[1] then
footnotes = {}
for _, note in ipairs(form.notes) do
table.insert(footnotes, "[" .. note .. "]")
end
end
table.insert(list, {form = bridge:toNative(form.slp1), translit = bridge:toIast(form.slp1), footnotes = footnotes})
end
formtable[slot] = list
slot_table[slot] = self:accel(slot)
end
end
M.inflection_utilities.show_forms(formtable, {
lang = M.lang,
lemmas = {self.lemma},
slot_table = slot_table,
include_translit = true,
})
return setmetatable({}, {__index = function(_, slot) return formtable[slot] or "—" end}), formtable.footnote
end
-- Return the title: the tense followed by its third singular in each voice shown.
function TableRenderer:title()
local conjugation, bridge = self.conjugation, self.conjugation.bridge
local first_mood = conjugation.moods[1]
local heads = {}
for _, voice in ipairs(conjugation.voices) do
local forms = {}
for _, form in ipairs(conjugation.slots[first_mood .. "_" .. voice .. "_3s"] or {}) do
local native, iast = bridge:toNative(form.slp1), bridge:toIast(form.slp1)
-- Only give the IAST when it differs from the automatic transliteration.
local tr = (M.lang:transliterate(native, bridge.script)) ~= iast and iast or nil
table.insert(forms, M.links.full_link({lang = M.lang, sc = bridge.script, alt = native, tr = tr}))
end
if forms[1] then
table.insert(heads, table.concat(forms, " or "))
end
end
local title = mw.getContentLanguage():ucfirst(M.data.tenses[conjugation.tense].name)
if heads[1] then
title = title .. ": " .. table.concat(heads, ", ")
end
return title
end
-- Add the rows of a finite table to `lines`: a column group for each voice, with a separator between them, and a band
-- for each mood followed by its persons (or one row for the participles).
function TableRenderer:addFiniteRows(lines, cells)
local conjugation = self.conjugation
local voices = conjugation.voices
table.insert(lines, '! rowspan="2" class="outer" |')
for i, voice in ipairs(voices) do
if i > 1 then
-- A separator column between two voices, down the whole table.
table.insert(lines, '! rowspan="999" class="separator" |')
end
table.insert(lines, '! colspan="3" class="outer" | ' .. M.data.voices[voice].name)
end
table.insert(lines, "|-")
for _ in ipairs(voices) do
for _, number in ipairs(M.data.numbers) do
table.insert(lines, "! " .. number.name)
end
end
for _, mood in ipairs(conjugation.moods) do
if mood == "part" then
table.insert(lines, '|- data-mood="part"')
table.insert(lines, "! " .. M.data.moods.part.name)
for _, voice in ipairs(voices) do
table.insert(lines, '| colspan="3" | ' .. cells["part_" .. voice])
end
else
-- The mood as a band across the table: its name in the (sticky) left column, and the rest of the row in the
-- same colour, one cell per voice so as to leave the separators alone.
table.insert(lines, ('|- data-mood="%s"'):format(mood))
table.insert(lines, '! class="secondary" | ' .. M.data.moods[mood].name)
for _ in ipairs(voices) do
table.insert(lines, '! colspan="3" class="secondary" |')
end
for _, person in ipairs(M.data.persons) do
table.insert(lines, ('|- data-mood="%s" data-person="%s"'):format(mood, person.code))
table.insert(lines, "! " .. person.label)
for _, voice in ipairs(voices) do
for _, number in ipairs(M.data.numbers) do
local slot = mood .. "_" .. voice .. "_" .. person.code .. number.code
table.insert(lines, "| " .. (conjugation.slots[slot] and cells[slot] or "—"))
end
end
end
end
end
end
-- Return the table as wikitext, followed by its categories unless `nocat` is set.
function TableRenderer:render()
local conjugation = self.conjugation
local cells, footnotes = self:cells()
local voices = conjugation.voices
local lines = {M.inflection_table.make_top{
title = self:title(),
palette = "blue",
tall = "yes",
lang = "sa",
class = #voices > 2 and "sticky-left-column wide" or "sticky-left-column",
}}
if M.data.tenses[conjugation.tense].nonfinite then
-- One row per form, with its name in the sticky left column. make_top() has already opened the first row, so we
-- only need `|-` between rows.
for i, mood in ipairs(conjugation.moods) do
if i > 1 then
table.insert(lines, "|-")
end
table.insert(lines, "! " .. M.data.moods[mood].name)
table.insert(lines, "| " .. cells[mood])
end
else
self:addFiniteRows(lines, cells)
end
local notes = {}
if footnotes and footnotes ~= "" then
table.insert(notes, footnotes)
end
for _, note in ipairs(conjugation.general_notes) do
table.insert(notes, note)
end
table.insert(lines, M.inflection_table.make_bottom{notes = notes[1] and table.concat(notes, "<br />") or nil})
local output = table.concat(lines, "\n")
if not self.nocat and conjugation.categories[1] then
output = output .. M.utilities.format_categories(conjugation.categories, M.lang)
end
return output
end
------------------------------------------------------------------------------------------------------------------------
-- Root derivations --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object that renders the lists of {{tl|sa-root deriv}}: the verbal forms of a root (each formation parameter is a
comma-separated list), the nominals derived from it (the positional parameters, one each) and its prefixed roots
(`prefixed=`, a comma-separated list). The regular nonfinite forms are made from the principal parts given (see
`generated`), as for the nonfinite table of {{tl|sa-conj}}. Every item may carry the inline modifiers of a link (<t:>,
<tr:>, <alt:>, <pos:>, <g:>, <id:>, <lit:>) and qualifiers (<q:>, <qq:>). A form in IAST is shown in the page's
script, with the IAST as its transliteration.
]==]
local RootDerivations = {}
RootDerivations.__index = RootDerivations
function RootDerivations.new(args, pagename)
return setmetatable({
args = args,
pagename = pagename,
bridge = ScriptBridge.new("", pagename),
param_mods = M.parameter_utilities.construct_param_mods {{group = {"link", "q"}}},
}, RootDerivations)
end
-- Return the items of one parameter as objects for [[Module:columns]], with `label` as their default pos. If `list` is
-- set, the value is a comma-separated list.
function RootDerivations:items(name, value, label, list)
local bridge = self.bridge
local values = list and M.parse_interface.split_on_comma(value) or {value}
local items = {}
for _, text in ipairs(values) do
text = mw.text.trim(text)
if text ~= "" then
local item = M.parse_utilities.parse_inline_modifiers(text, {
paramname = name,
param_mods = self.param_mods,
generate_obj = function(term) return {term = term} end,
})
if string.find(item.term, "<span", 1, true) or string.find(item.term, "[[", 1, true) then
error(("The item '%s' of %s is already linked; give the form alone, with inline modifiers"):format(text, name), 0)
end
local latin = M.lang:findBestScript(item.term):getCode() == "None"
local slp1 = bridge:toSlp1(item.term)
-- The form as typed, with its accents, for comparing it with the made forms: a form in another script has
-- them only in its transliteration (गत<tr:gatá>).
item.slp1 = slp1
if not latin and item.tr then
local transliteration = bridge.from_iast(item.tr)
if string.gsub(transliteration, ACCENT, "") == slp1 then
item.slp1 = transliteration
end
end
item.term = bridge:toNative(slp1)
item.lang = M.lang
item.sc = bridge.script
if latin and not item.tr then
-- Keep the IAST as typed when it differs from the automatic transliteration.
local typed = mw.text.trim(string.match(text, "^[^<]*"))
if (M.lang:transliterate(item.term, bridge.script)) ~= typed then
item.tr = typed
end
end
item.pos = item.pos or label
table.insert(items, item)
end
end
return items
end
-- Return a collapsible list in columns with `header` and the items `content`.
function RootDerivations:list(header, content)
return M.columns.create_list {
header = header,
title_new_style = true,
format_header = true,
content = content,
lang = M.lang,
class = "columns-bg",
column_count = 3,
collapse = true,
}
end
-- Return the SLP1 of the first item of the parameter `name`, as typed, or nil.
function RootDerivations:firstForm(name)
local value = self.args[name]
if not value then
return nil
end
local item = self:items(name, value, nil, true)[1]
return item and item.slp1
end
--[==[
Return the nonfinite forms made from the root's principal parts, as `{field = {slp1, ...}}`: those of the simple verb
from the first `ppp=` (with the first `inf=` in -tum, or else the first `pfut=`, and the page's root), and those of the
causative from the first `caus=`. A form the parts don't give is left out. For a prefixed root, `pre=` gives its
preverbs: the parts are then read without them, and the forms made with them, as with `pre:` in {{tl|sa-conj}}.
]==]
function RootDerivations:generated()
local bridge, generated = self.bridge, {}
local preverbs = self.args.pre and preverbs_of(M.parse_interface.split_on_comma(self.args.pre), bridge)
local function simple(form)
if form and preverbs then
return without_preverbs(form, preverbs)
end
return form
end
local function generate(head, properties, fields)
head = simple(head)
if not head then
return
end
properties.bridge = bridge
properties.preverbs = preverbs
properties.infinitive = simple(properties.infinitive)
properties.root = simple(properties.root)
local analysis = Analysis.new("nonf", {strong = Part.new(head), weak = Part.new(), passive = Part.new()},
properties)
analysis:nonf()
local cells = make_cells(analysis, nil, bridge)
if preverbs then
add_preverbs(cells, preverbs, root_of_head(head, "nonf"), true)
end
for mood, field in pairs(fields) do
for _, form in ipairs(cells[mood] or {}) do
generated[field] = generated[field] or {}
table.insert(generated[field], form.slp1)
end
end
end
local ppp = self:firstForm("ppp")
if ppp and string.match(ppp, PARTICIPLE_HEAD) then
local infinitive = self:firstForm("inf")
if not (infinitive and string.match(infinitive, "tu" .. ACCENT .. "?m$")) then
local future = self:firstForm("pfut")
infinitive = future and (string.gsub(future, "A" .. ACCENT .. "?$", "um"))
end
generate(ppp, {infinitive = infinitive, root = bridge:toSlp1(self.pagename)},
{inf = "inf", gerund = "gerund", pap = "pap", gerundive = "gerundive"})
end
local causative = self:firstForm("caus")
if causative and string.match(causative, "a" .. ACCENT .. "?yati$") then
generate(causative, {}, {inf = "caus_inf", gerund = "caus_gerund", ppp = "caus_ppp", pap = "caus_pap",
gerundive = "caus_gerundive"})
end
return generated
end
--[==[
Return the items of `field`: the forms made by `generated()` first, then the items of the parameter not among them.
An item of the parameter that is one of the made forms (ignoring accents) takes that form's place, with its own
modifiers.
]==]
function RootDerivations:fieldItems(field, label, generated)
local bridge = self.bridge
local given = self.args[field] and self:items(field, self.args[field], label, true) or {}
local function key(slp1)
return (string.gsub(slp1, ACCENT, ""))
end
local items, used = {}, {}
for _, slp1 in ipairs(generated or {}) do
local item
for i, candidate in ipairs(given) do
if not used[i] and key(candidate.slp1) == key(slp1) then
item, used[i] = candidate, true
break
end
end
if not item then
item = {term = bridge:toNative(slp1), slp1 = slp1, lang = M.lang, sc = bridge.script, pos = label}
local iast = bridge:toIast(slp1)
if (M.lang:transliterate(item.term, bridge.script)) ~= iast then
item.tr = iast
end
end
table.insert(items, item)
end
for i, item in ipairs(given) do
if not used[i] then
table.insert(items, item)
end
end
return items
end
-- Return the lists: one per group of fields in `data.root_derivations`, then the nominals and the prefixed roots.
function RootDerivations:render()
local args, data = self.args, M.data.root_derivations
local generated = self:generated()
local output = {}
for _, group in ipairs(data.groups) do
local content = {}
for _, field in ipairs(group.fields) do
for _, item in ipairs(self:fieldItems(field[1], field[2], generated[field[1]])) do
table.insert(content, item)
end
end
if content[1] then
table.insert(output, self:list(group.header, content))
end
end
local nominals = {}
for i, value in ipairs(args[1]) do
for _, item in ipairs(self:items(tostring(i), value, nil, false)) do
table.insert(nominals, item)
end
end
if nominals[1] then
table.insert(output, self:list(data.nominal_header, nominals))
end
if args.prefixed then
local prefixed = self:items("prefixed", args.prefixed, nil, true)
if prefixed[1] then
table.insert(output, self:list(data.prefixed_header, prefixed))
end
end
return "\n" .. table.concat(output, "\n")
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
-- Return the set of the slots of every tense, which are the names of the cell parameters.
local function slot_parameters()
local slots = {}
for _, tense in pairs(M.data.tenses) do
for _, mood in ipairs(tense.moods) do
if tense.nonfinite then
slots[mood] = true
else
for _, voice in ipairs(M.data.voice_order) do
if mood == "part" then
slots["part_" .. voice] = true
else
for _, person_number in ipairs(PERSON_NUMBERS) do
slots[mood .. "_" .. voice .. "_" .. person_number] = true
end
end
end
end
end
end
return slots
end
--[==[
Return the calls that the table set `code` (a key of `data.table_sets`) stands for, given the spec `text` of the call
and the page name `pagename`: a list of `{tense = TENSE, spec = SPEC}`, with each spec written in the script of the
head. We get the stem by stripping the set's ending off the head (or its `middle_ending`, for a middle head, whose
tables then take their own `middle_ending`). For the augmented tables we normally put the augment in front of the
stem, but if the spec gives the head of an augmented table directly (e.g. `impf:`, for an irregular augment), we read
the augmented stem off that head instead.
The accent: `@` in an ending stands for the accent of the head's ending, and the stem keeps its own accent; but a
table marked `suffix_accent` (and the indicators of one marked `suffix_accent_indicators`) puts the stem's accent on
its `@` instead, and an augment takes it from an accented head. `stem_indicators` are made on the bare stem, without
augment or accent, and `words` are given as they are.
]==]
local function table_set_calls(code, text, pagename)
local table_set = M.data.table_sets[code]
local spec = Spec.parse(text or "", code)
local head = spec.head ~= "" and spec.head or pagename
local bridge = ScriptBridge.new(head, pagename)
local function pattern(ending)
return "^(.-)" .. (string.gsub(ending, "@", "(/?)")) .. "$"
end
local head_slp1 = bridge:toSlp1(head)
local accented = string.find(head_slp1, ACCENT) and "/" or ""
local stem, accent = string.match(head_slp1, pattern(table_set.ending))
local middle = false
if (not stem or stem == "") and table_set.middle_ending then
stem, accent = string.match(head_slp1, pattern(table_set.middle_ending))
middle = true
end
if not stem or stem == "" then
error(("The head of a %s is in -%s, not '%s'."):format(table_set.name,
bridge:toIast((string.gsub(table_set.ending, "@", "/"))), head), 0)
end
accent = accent or ""
local unaccented = string.gsub(stem, ACCENT, "")
local augmented
for _, member in ipairs(table_set.tables) do
local given = member.augment and spec.indicators[member.tense]
if given then
augmented = string.match(bridge:toSlp1(given), pattern(member.ending))
if not augmented or augmented == "" then
error(("The %s given with '%s:' is in -%s, not '%s'."):format(M.data.tenses[member.tense].name,
member.tense, bridge:toIast((string.gsub(member.ending, "@", ""))), given), 0)
end
end
end
if not augmented then
local vowel, rest = string.match(unaccented, "^(" .. VOWEL .. ")(.*)$")
augmented = vowel and M.data.augment.vowels[vowel] .. rest or M.data.augment.consonant .. unaccented
augmented = string.gsub(augmented, "@", accented)
end
local calls = {}
for _, member in ipairs(table_set.tables) do
local base, ending_accent = stem, accent
if member.augment then
base = augmented
elseif member.suffix_accent then
base, ending_accent = unaccented, accented
end
local function form(ending, suffix_accent)
if suffix_accent then
return bridge:toScriptOf(unaccented .. (string.gsub(ending, "@", accented)), head)
end
return bridge:toScriptOf(base .. (string.gsub(ending, "@", ending_accent)), head)
end
local indicators = {}
for name, ending in pairs((middle and member.middle_indicators or member.indicators) or {}) do
table.insert(indicators, name .. ":" .. form(ending, member.suffix_accent_indicators))
end
for name, ending in pairs((middle and member.middle_stem_indicators or member.stem_indicators) or {}) do
table.insert(indicators, name .. ":" .. bridge:toScriptOf(unaccented .. ending, head))
end
for name, word in pairs(member.words or {}) do
table.insert(indicators, name .. ":" .. word)
end
-- Pass each indicator of the call on to every table whose tense accepts it (e.g. `novedic` goes to the finite
-- tables and `gerund:` to the nonfinite one).
for name, value in pairs(spec.indicators) do
if M.data.indicators[name].tenses[member.tense] then
if type(value) == "table" then
value = table.concat(value, ",")
end
table.insert(indicators, value == true and name or name .. ":" .. value)
end
end
table.sort(indicators)
local ending = middle and member.middle_ending or member.ending
local member_spec = ending == "-" and "-" or form(ending)
if indicators[1] then
member_spec = member_spec .. "<" .. table.concat(indicators, ".") .. ">"
end
table.insert(calls, {tense = member.tense, spec = member_spec})
end
return calls
end
--[==[
Return the conjugations of the {{tl|sa-conj}} call with arguments `args` (a table of parameter values, as a template
receives them) on the page `pagename`, without a frame or any links, for other modules and for tests. The return values
are a list of `Conjugation`s (one for a tense, and one per table for a table set) and the processed arguments.
]==]
function export.conjugate(args, pagename)
local params = {
[1] = {required = true},
[2] = true,
note = {list = true},
nocat = {type = "boolean"},
json = {type = "boolean"},
}
for slot in pairs(slot_parameters()) do
params[slot] = true
end
args = M.parameters.process(args, params)
local override_values = {}
for slot in pairs(slot_parameters()) do
override_values[slot] = args[slot]
end
if M.data.table_sets[args[1]] then
local given = next(override_values) or args.note[1] and "note"
if given then
error(("The parameter %s can't be used with the table set '%s'; give the tables as calls of their own."):format(
given, args[1]), 0)
end
local conjugations = {}
for _, call in ipairs(table_set_calls(args[1], args[2], pagename)) do
table.insert(conjugations, Conjugation.new(call.tense, call.spec, Overrides.parse({}), {}, pagename))
end
return conjugations, args
end
return {Conjugation.new(args[1], args[2], Overrides.parse(override_values), args.note, pagename)}, args
end
--[==[
Entry point of {{tl|sa-conj}}. Return the table (or for a table set, the tables), or with {{para|json|1}} its data as
JSON (for a table set, a list with the data of each table).
]==]
function export.show(frame)
local pagename = M.headword_data.pagename
local conjugations, args = export.conjugate(frame:getParent().args, pagename)
if args.json then
local objects = {}
for _, conjugation in ipairs(conjugations) do
table.insert(objects, conjugation:jsonObject())
end
return M.JSON.toJSON(M.data.table_sets[args[1]] and objects or objects[1])
end
local tables = {}
for _, conjugation in ipairs(conjugations) do
table.insert(tables, TableRenderer.new(conjugation, pagename, args.nocat):render())
end
return table.concat(tables, "\n")
end
--[==[Entry point of {{tl|sa-root deriv}}. Return the lists of forms derived from a root.]==]
function export.root_derivations(frame)
local params = {
[1] = {list = true},
prefixed = true,
pre = true,
noderiv = {type = "boolean"},
id = true,
}
for _, group in ipairs(M.data.root_derivations.groups) do
for _, field in ipairs(group.fields) do
params[field[1]] = true
end
end
local args = M.parameters.process(frame:getParent().args, params)
return RootDerivations.new(args, M.headword_data.pagename):render()
end
return export
6jakwxgbypiql1d9ppe8t1l80676oym
Mô đun:sa-verb/data
828
403396
2572918
2373098
2026-10-23T07:44:13Z
Hiyuune
50834
2572918
Scribunto
text/plain
--[==[
Data for [[Module:sa-verb]], loaded with mw.loadData. It holds the tenses and the layout of their tables, the table
sets and the augment, every set of endings, the notes, the indicators of the inline spec, the auxiliaries of the
periphrastic perfect, the categories, the fields of {{tl|sa-root deriv}} and the forms attested for particular verbs.
All Sanskrit here is in SLP1, except in `attested`, which is in IAST.
The endings are in `endings[NAME][mood][voice][person]` (or `endings[NAME].part[voice]` for participles, and
`endings[NAME].nonf[mood]` for the nonfinite forms). Each is one ending or a list of alternatives, and each alternative
is either a string or `{ending, note = KEY, brugmann = true, palatal_to_velar = true}`. In an ending, `@` stands for the
accent of the principal part's ending (`/` or nothing) and `#` for the connecting vowel of the iṣ-aorist (`i`, or `I`
for the īṣ-aorist). `note` is a key of `notes`. `brugmann` lengthens a stem `a` before a single consonant (Brugmann's
law) after sandhi, and `palatal_to_velar` turns on the sandhi option of that name for this ending alone.
]==]
local data = {}
--[==[
The tenses, in the order of `tense_order`. `moods` are the moods of the table, in the order shown; `vedic_moods` are
the ones `novedic` leaves out, and `sparse_moods` the ones shown only when one of their cells has a form (the modes
of the perfect and the aorist, which not every verb makes, and the modes of the future, which only a few verbs have).
]==]
data.tenses = {
pres = {name = "hiện tại", moods = {"indic", "imper", "optat", "inj", "subj", "part"}, vedic_moods = {subj = true},
accel = "pres"},
impf = {name = "chưa hoàn thành", moods = {"indic"}, accel = "impf"},
fut = {name = "tương lai", moods = {"indic", "subj", "optat", "imper", "part"},
sparse_moods = {subj = true, optat = true, imper = true}, accel = "fut"},
pfut = {name = "thì tương lai diễn đạt bằng cụm từ", moods = {"indic"}, accel = "peri|fut"}, -- en: "periphrastic future"
cond = {name = "điều kiện", moods = {"indic"}, accel = "cond"},
aor = {name = "thì quá khứ bất định", moods = {"indic", "inj", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true, part = true},
sparse_moods = {subj = true, optat = true, imper = true, part = true}, accel = "aor"},
prec = {name = "precative/benedictive", moods = {"optat"}, accel = "prec"},
perf = {name = "hoàn thành", moods = {"indic", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true}, sparse_moods = {subj = true, optat = true, imper = true},
accel = "perf"},
plup = {name = "hoàn thành số nhiều", moods = {"indic"}, accel = "plup"},
pperf = {name = "thì hoàn thành diễn đạt bằng cụm từ", moods = {"indic", "part"}, accel = "peri|perf"}, -- en: "periphrastic perfect"
-- The nonfinite forms: each mood is a single slot, with no persons or voices.
nonf = {name = "dạng không nguyên mẫu", moods = {"inf", "gerund", "ppp", "pap", "gerundive"}, nonfinite = true},
}
data.tense_order = {"pres", "impf", "fut", "pfut", "cond", "aor", "prec", "perf", "plup", "pperf", "nonf"}
--[==[
The table sets: codes that show several tables in one call (`{{sa-conj|CODE|HEAD}}`). The head of a table set ends in
`ending`, and what comes before that ending is the stem. Each of the `tables` is made as a call of its own, whose head
is the stem followed by the table's `ending` (or with `augment`, the augmented stem, as in `augment` below);
`indicators` gives the other principal parts of the table in the same way. In an ending, `@` stands for the accent of
the head (`/` or nothing).
The causative tables follow Whitney §1043–1052. The present and the imperfect are made from the causative stem in -aya-,
and their passive from the stem without -aya- (§1052). The futures and the conditional put i in place of the final a of
-aya-, as does the middle of the precative, whose active is made without -aya- (§1049). The periphrastic perfect is
made from the form in -ām (§1045). The aorist is reduplicated (§1046) and can't be made from the stem, so it is given
in a call of its own. The nonfinite table comes first, with the infinitive, the gerund and the two past participles of
the causative stem (§1051).
]==]
data.table_sets = {
-- The desiderative tables follow Whitney §1034–1038. The stem is the head without -ati (or -ate, for a middle
-- desiderative, whose tables take each member's `middle_ending` and `middle_indicators`); its accent, on the
-- reduplication, stays in the present system, and the forms marked `suffix_accent` are accented on the suffix
-- instead (`@` is then the accent of the head). The aorist is the iṣ-aorist made from the stem (§1035), whose
-- injunctive stem is the stem itself (`stem_indicators` are made on the bare stem); the perfect is the periphrastic
-- one (§1034); the precative, though allowed by the grammarians, never occurs (§1035b).
desid = {
name = "desiderative",
ending = "ati",
middle_ending = "ate",
tables = {
{tense = "nonf", ending = "ita@", suffix_accent = true, indicators = {inf = "itum"}},
{tense = "pres", ending = "ati", middle_ending = "ate", indicators = {pass = "ya@te"},
suffix_accent_indicators = true},
{tense = "impf", augment = true, ending = "at", middle_ending = "ata", indicators = {pass = "yata"}},
{tense = "fut", ending = "izya@ti", middle_ending = "izya@te", suffix_accent = true},
{tense = "cond", augment = true, ending = "izyat", middle_ending = "izyata"},
{tense = "pfut", ending = "itA@", suffix_accent = true},
{tense = "aor", augment = true, ending = "It", middle_ending = "-", words = {type = "iṣ"},
stem_indicators = {inj = ""}, middle_indicators = {mid = "izwa"}, middle_stem_indicators = {midinj = ""}},
{tense = "pperf", ending = "A@m", suffix_accent = true},
},
},
caus = {
name = "causative",
ending = "a@yati",
tables = {
{tense = "nonf", ending = "a@yati"},
{tense = "pres", ending = "a@yati", indicators = {pass = "ya@te"}},
{tense = "impf", augment = true, ending = "ayat", indicators = {pass = "yata"}},
{tense = "fut", ending = "ayizya@ti"},
{tense = "cond", augment = true, ending = "ayizyat"},
{tense = "pfut", ending = "ayitA@"},
{tense = "prec", ending = "yA@t", indicators = {mid = "ayizIzwa@"}},
{tense = "pperf", ending = "ayA@m"},
},
},
}
--[==[
The augment, with `@` for its accent: `a@` before a consonant, and before a vowel the vṛddhi of that vowel
(Whitney §585).
]==]
data.augment = {
consonant = "a@",
vowels = {a = "A@", A = "A@", i = "E@", I = "E@", e = "E@", E = "E@", u = "O@", U = "O@", o = "O@", O = "O@",
f = "A@r", F = "A@r", x = "A@l", X = "A@l"},
}
data.moods = {
indic = {name = "trần thuật", accel = "ind"},
imper = {name = "mệnh lệnh", accel = "imp"},
optat = {name = "ước vọng/Khả năng", accel = "opt"},
subj = {name = "giả định", accel = "sub"},
inj = {name = "mệnh lệnh", accel = "inj"},
part = {name = "phân từ", accel = "part"},
-- The moods of the nonfinite table. Each of them is a single slot.
inf = {name = "nguyên mẫu", accel = "inf"},
gerund = {name = "danh động từ", accel = "ger"},
ppp = {name = "phân từ quá khứ bị động", accel = "past|pass|part"},
pap = {name = "phân từ quá khứ chủ động", accel = "past|act|part"},
gerundive = {name = "danh động từ", accel = "gerv"},
}
data.voices = {
act = {name = "thể chủ động", accel = "act"},
mid = {name = "thể trung gian", accel = "mid"},
pass = {name = "thể bị động", accel = "pass"},
}
data.voice_order = {"act", "mid", "pass"}
data.persons = {
{code = "3", name = "ngôi thứ ba", label = "ngôi thứ ba"},
{code = "2", name = "ngôi thứ hai", label = "ngôi thứ hai"},
{code = "1", name = "ngôi thứ nhất", label = "ngôi thứ nhất"},
}
data.numbers = {
{code = "s", name = "số ít", accel = "s"},
{code = "d", name = "số đôi", accel = "d"},
{code = "p", name = "số nhiều", accel = "p"},
}
data.notes = {
vedic = {text = "Vệ Đà", vedic = true},
rigvedic = {text = "Rigvedic", vedic = true},
later = {text = "tiếng Phạn hậu kỳ"},
epic = {text = "sử thi"},
uncertain = {text = "không chắc chắn"},
}
data.general_notes = {
periphrastic_future_middle = "The middle forms of the periphrastic future rarely occur.",
root_aorist_middle = "The middle root-aorist and the subjunctive are only used in Vedic Sanskrit.",
subjunctive = "The subjunctive is only used in Vedic Sanskrit.",
-- Whitney §808, §836
perfect_modes = "The subjunctive, optative and imperative of the perfect are only used in Vedic Sanskrit, and are "
.. "rare outside the Rigveda. Only the attested forms are shown.",
aorist_modes = "The subjunctive, the optative (other than the precative), the imperative and the participles of the "
.. "aorist are only used in Vedic Sanskrit.",
-- Whitney §817
pluperfect = "The pluperfect is only used in Vedic Sanskrit, and is rare even there.",
-- Whitney §842, §998
passive_aorist = "The aorist passive has only a third-person singular; the middle forms serve as the passive in the "
.. "other persons.",
-- Whitney §925; a Buddhist text has the precative middle twice (https://www.jstor.org/stable/24662164).
precative = "In Later Sanskrit, the precative active is very rare, and the precative middle virtually unknown.",
-- Whitney §587d; Oberlies (Grammar of Epic Sanskrit), pp. 178–181.
imperfect = "In Epic Sanskrit, the imperfect can occur without augment.",
}
--[==[
The indicators of the inline spec (`{{sa-conj|TENSE|HEAD<NAME:VALUE.NAME>}}`). `value` is "form" (a Sanskrit form or
stem, in any script), "word" (plain text, checked against `values` if given) or {nil} (for a flag); `tenses` lists the
tenses and table sets that accept the indicator.
]==]
data.indicators = {
stem = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
["3p"] = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true}},
weakstem = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true, aor = true}},
mid = {value = "form", tenses = {aor = true, prec = true}},
midstem = {value = "form", tenses = {aor = true, prec = true}},
pass = {value = "form", tenses = {pres = true, impf = true, aor = true}},
mvstem = {value = "form", tenses = {pres = true, impf = true, aor = true, plup = true}},
inj = {value = "form", tenses = {aor = true}},
midinj = {value = "form", tenses = {aor = true}},
voice = {value = "word", values = {act = true, mid = true}, tenses = {pres = true, impf = true, fut = true,
pfut = true, cond = true, aor = true, prec = true, perf = true, plup = true, pperf = true}},
class = {value = "word", values = {["1"] = true, ["2"] = true, ["3"] = true, ["4"] = true, ["5"] = true,
["6"] = true, ["7"] = true, ["8"] = true, ["9"] = true, ["10"] = true, int = true}, tenses = {pres = true,
impf = true}},
type = {value = "word", values = {root = true, a = true, s = true, ["iṣ"] = true, ["īṣ"] = true, ["siṣ"] = true,
sa = true}, tenses = {aor = true}},
["seṭ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["veṭ"] = {tenses = {perf = true}},
novedic = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true, pperf = true, caus = true, desid = true}},
final = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
j = {value = "word", values = {["ṣ"] = true}, tenses = {pres = true, impf = true, fut = true, pfut = true,
cond = true, aor = true, prec = true, perf = true, plup = true}},
h = {value = "word", values = {gh = true}, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true}},
diaspirate = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["ḷ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
aux = {value = "word", values = {["kṛ"] = true, ["bhū"] = true, as = true}, list = true, tenses = {pperf = true}},
impf = {value = "form", tenses = {caus = true}},
gerund = {value = "form", tenses = {caus = true, nonf = true}},
inf = {value = "form", tenses = {nonf = true}},
root = {value = "form", tenses = {nonf = true}},
pre = {value = "form", list = true, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true, pperf = true, nonf = true, caus = true, desid = true}},
["tāt"] = {tenses = {pres = true}},
}
--[==[
The athematic roots that also have a third plural in -ur in the imperfect and the injunctive (Whitney §621a:
ádviṣuḥ beside ádviṣan), keyed by the weak stem in SLP1.
]==]
data.third_plural_ur = {dviz = true, duh = true, vid = true, cakz = true, mfj = true}
--[==[
The class 3 roots in -ā whose weak stem has -ī- before a consonant (Whitney §661–666: śā, mā, hā), keyed by the weak
stem as read off the third plural, in SLP1. The value says what the optative does: hā drops the vowel (jahyā́m), the
others keep -ī- (mimīyā́t).
]==]
data.reduplicated_long_i = {SiS = "keep", mim = "keep", jah = "drop", jih = "keep"}
--[==[
The preverbs `pre:` takes (Whitney §1077–1079), keyed by their unaccented SLP1, with their accent. `nir`, `dur` and
`ut` are taken as `nis`, `dus` and `ud`, and a final ṃ as m.
]==]
data.preverbs = {
ati = "a/ti", aDi = "a/Di", anu = "a/nu", antar = "anta/r", apa = "a/pa", api = "a/pi", aBi = "aBi/", ava = "a/va",
A = "A/", ud = "u/d", upa = "u/pa", ni = "ni/", nis = "ni/s", parA = "pa/rA", pari = "pa/ri", pra = "pra/",
prati = "pra/ti", vi = "vi/", sam = "sa/m",
-- The more limited prefixes: ácha, āvís, tirás, purás, prādús, alam, śrad, hiṅ.
acCa = "a/cCa", acCA = "a/cCA", Avis = "Avi/s", tiras = "tira/s", puras = "pura/s", prAdus = "prAdu/s",
alam = "ala/m", Srat = "Sra/t", hiN = "hi/N",
-- dus is treated as a preverb in compounds such as duṣkṛta, though the language has no preverb dus.
dus = "du/s",
}
data.preverb_aliases = {nir = "nis", niH = "nis", dur = "dus", duH = "dus", ut = "ud", saM = "sam", alaM = "alam"}
--[==[
The presents that have the Vedic imperative in -tāt without `<tāt>` (Whitney §570a, §571), keyed by the head in IAST
without accents: the tāt-forms Whitney quotes, and those he gives for single verbs (§618, §654, §723, §740, §752c).
]==]
data.tat_imperative = {
["bravīti"] = true, hanti = true, vetti = true, piparti = true, ["jahāti"] = true, ["dadāti"] = true,
["dadhāti"] = true, ["kṛṇoti"] = true, karoti = true, ["gṛhṇāti"] = true, ["jānāti"] = true, avati = true,
["rakṣati"] = true, vasati = true, ["viśati"] = true, ["sṛjati"] = true, asyati = true, ["naśyati"] = true,
chyati = true, gamayati = true, ["cyāvayati"] = true, ["vārayati"] = true, ["īpsati"] = true, ["jāgarti"] = true,
bhavati = true,
}
--[==[
The perfect of each auxiliary of the periphrastic perfect, as it is written after the form in `-ām` (whose `m` becomes
`ṃ` before a consonant other than a labial). The default auxiliaries are as and kṛ, in that order.
]==]
data.periphrastic_perfect = {
default = {"as", "kṛ"},
auxiliaries = {
["kṛ"] = {
indic = {
act = {
["1s"] = "caka/ra", ["2s"] = "caka/rTa", ["3s"] = "cakA/ra",
["1d"] = "cakfva/", ["2d"] = "cakra/TuH", ["3d"] = "cakra/tuH",
["1p"] = "cakfma/", ["2p"] = "cakra/", ["3p"] = "cakru/H",
},
mid = {
["1s"] = "cakre/", ["2s"] = "cakfze/", ["3s"] = "cakre/",
["1d"] = "cakfva/he", ["2d"] = "cakrA/Te", ["3d"] = "cakrA/te",
["1p"] = "cakfma/he", ["2p"] = "cakfDve/", ["3p"] = "cakrire/",
},
},
-- FIXME: Is the periphrastic perfect ever used with a participle?
part = {act = "cakfvA/Ms", mid = "cakrARa/"},
},
["bhū"] = {
indic = {
act = {
["1s"] = "baBU/va", ["2s"] = "baBU/viTa", ["3s"] = "baBU/va",
["1d"] = "baBUviva/", ["2d"] = "baBUva/TuH", ["3d"] = "baBUva/tuH",
["1p"] = "baBUvima/", ["2p"] = "baBUva/", ["3p"] = "baBUvu/H",
},
},
part = {act = "baBUvA/Ms"},
},
as = {
indic = {
act = {
["1s"] = "A/sa", ["2s"] = "A/siTa", ["3s"] = "A/sa",
["1d"] = "Asiva/", ["2d"] = "Asa/TuH", ["3d"] = "Asa/tuH",
["1p"] = "Asima/", ["2p"] = "Asa/", ["3p"] = "Asu/H",
},
},
},
},
}
data.categories = {
["s-future"] = "Động từ với thì tương lai s tiếng Phạn",
["periphrastic future"] = "Động từ với thì tương lai diễn đạt bằng cụm từ tiếng Phạn",
["s-aorist"] = "Động từ với thì quá khứ bất định s tiếng Phạn",
["siṣ-aorist"] = "Động từ với thì quá khứ bất định siṣ tiếng Phạn",
["iṣ-aorist"] = "Động từ với thì quá khứ bất định iṣ tiếng Phạn",
["sa-aorist"] = "Động từ với thì quá khứ bất định sa tiếng Phạn",
["a-aorist"] = "Động từ với thì quá khứ bất định a tiếng Phạn",
["root-aorist"] = "Động từ với thì quá khứ bất định gốc từ tiếng Phạn",
["periphrastic perfect"] = "Động từ với thì hoàn thành diễn đạt bằng cụm từ tiếng Phạn",
}
--[==[
The fields of {{tl|sa-root deriv}}, grouped by the list they appear in. Each field is a parameter name and the label
shown after its forms. After them come the headers of the lists of derived nominals (the positional parameters) and of
prefixed roots (`prefixed=`).
]==]
data.root_derivations = {
groups = {
{
header = "Dạng trực tiếp",
fields = {
{"pres", "present"}, {"imper", "present imperative"}, {"opt", "present optative"},
{"subj", "present subjunctive"}, {"impf", "imperfect"}, {"fut", "future"}, {"pfut", "periphrastic future"},
{"cond", "conditional"}, {"aor", "aorist"}, {"paor", "periphrastic aorist"}, {"prec", "precative"},
{"bene", "precative"}, {"perf", "perfect"}, {"pperf", "periphrastic perfect"}, {"si_imper", "si-imperative"},
},
},
{
header = "Dạng gián tiếp",
fields = {
{"pass", "present passive"}, {"pass_impf", "imperfect passive"}, {"pass_aor", "aorist passive"},
{"caus", "causative"}, {"pass_caus", "causative passive"}, {"caus_aor", "causative aorist"},
{"pass_aor_caus", "causative aorist passive"}, {"desid", "desiderative"},
{"pass_desid", "desiderative passive"}, {"desid_fut", "desiderative future"},
{"desid_aor", "desiderative aorist"}, {"caus_desid", "causative of desiderative"},
{"desid_caus", "desiderative of causative"}, {"desid_desid", "desiderative of desiderative"},
{"int", "intensive"}, {"intens", "intensive"}, {"int_perf", "intensive perfect"},
{"caus_int", "causative of intensive"}, {"desid_int", "desiderative of intensive"},
},
},
{
header = "Dạng không nguyên mẫu",
fields = {
{"ppp", "past passive participle"}, {"pap", "past active participle"}, {"inf", "infinitive"},
{"gerund", "gerund"}, {"gerundive", "gerundive"}, {"caus_ppp", "causative past passive participle"},
{"caus_pap", "causative past active participle"}, {"caus_inf", "causative infinitive"},
{"caus_gerund", "causative gerund"}, {"caus_gerundive", "causative gerundive"},
{"desid_part", "desiderative participle"}, {"desid_gerundive", "desiderative gerundive"},
{"desid_caus_part", "desiderative participle of causative"}, {"int_inf", "intensive infinitive"},
{"int_part", "intensive participle"},
},
},
},
nominal_header = "Dạng phái sinh danh hóa",
prefixed_header = "Dạng tiền tố gốc từ",
}
--[==[
Forms that the sources give for particular verbs, besides the ones the module makes. Most come from Whitney's
''Sanskrit Grammar'' (cited by §). The table is keyed by tense and then by the head as written in the call, without
accents, in IAST. Each entry describes one cell (`slot`): its forms, in IAST as the table shows them, and the key of
their note in `notes` (none for a form of the same standing as the made ones). The forms are written with ḥ for a final
s and accented as Whitney accents them; where he gives no accent, a Vedic form is accented the way its class is, and
the epic forms are left unaccented. They come after the made forms, or take their place when `replaces` is set. A call
without accents gets them without accents too.
]==]
data.attested = {
pres = {
asti = { -- §636c, §636d, §613
{slot = "indic_act_1d", forms = {"sva"}, note = "epic"},
{slot = "indic_act_1p", forms = {"sma"}, note = "epic"},
{slot = "indic_act_2p", forms = {"sthána"}, note = "vedic"},
{slot = "optat_act_1d", forms = {"syāvaḥ"}, note = "epic"},
{slot = "optat_act_1p", forms = {"syāmaḥ"}, note = "epic"},
},
["īṣṭe"] = { -- §630: ī́śiṣe, ī́śidhve (and the RV ī́kṣe), ī́śiṣva; ī́śire is a present by its accent
{slot = "indic_mid_2s", forms = {"ī́śiṣe"}},
{slot = "indic_mid_2p", forms = {"ī́śidhve"}, replaces = true},
{slot = "indic_mid_3p", forms = {"ī́śire"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"ī́śiṣva"}, replaces = true},
},
["īṭṭe"] = { -- §630: ī́ḍiṣva
{slot = "imper_mid_2s", forms = {"ī́ḍiṣva"}, replaces = true},
},
["amīti"] = { -- §634: amīṣi, amīṣva
{slot = "indic_act_2s", forms = {"amīṣi"}, note = "rigvedic"},
{slot = "imper_mid_2s", forms = {"amīṣva"}, note = "vedic"},
},
["śete"] = { -- §629: śérate (and śére), śératām
{slot = "indic_mid_3p", forms = {"śérate"}, replaces = true},
{slot = "indic_mid_3p", forms = {"śére"}, note = "vedic"},
{slot = "imper_mid_3p", forms = {"śératām"}, replaces = true},
},
["ūrṇoti"] = { -- §713: ūrṇauti (as if of the root class), ūrṇu or ūrṇuhi
{slot = "indic_act_3s", forms = {"ūrṇauti"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"ūrṇu", "ūrṇuhi"}, replaces = true},
},
["āste"] = { -- §619c: ā́sīna is anomalous and isolated, and the RV has āsāná; there is no ā́sāna.
{slot = "part_mid", forms = {"ā́sīna", "āsāná"}, replaces = true},
},
hanti = { -- §637b (hanītá is accented like ghnītá)
{slot = "optat_mid_3s", forms = {"hanītá"}, note = "vedic"},
},
dogdhi = { -- §619d, §635
{slot = "part_mid", forms = {"dúhāna", "dúghāna"}, note = "vedic"},
},
["dadāti"] = { -- §654, §668 (dádātana is accented like the forms of dhā)
{slot = "imper_act_2p", forms = {"dádāta", "dádātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
["dadhāti"] = { -- §654, §668 (dhattána is accented like the other forms)
{slot = "imper_act_2p", forms = {"dhattána", "dádhāta", "dádhātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
datte = { -- §668: the middle of dā
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
dhatte = { -- §668: the middle of dhā
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
sunoti = { -- §699b, §704
{slot = "indic_mid_3p", forms = {"sunviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"sunóta", "sunótana"}, note = "vedic"},
},
["śṛṇoti"] = { -- §699b, §704 (śṛṇótana is accented like sunótana)
{slot = "indic_mid_3p", forms = {"śṛṇviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"śṛṇóta", "śṛṇótana"}, note = "vedic"},
},
tanoti = { -- §699a, §704 (tanóta is accented like sunóta)
{slot = "indic_mid_3p", forms = {"tanvaté"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"tanóta"}, note = "vedic"},
},
["gṛhṇāti"] = { -- §723 (gṛhṇāhí is accented like punāhí)
{slot = "imper_act_2s", forms = {"gṛhṇāhí"}, note = "vedic"},
},
},
impf = {
["āsīt"] = { -- §636c
{slot = "indic_act_2s", forms = {"ā́ḥ"}, note = "vedic"},
{slot = "indic_act_3s", forms = {"ā́ḥ"}, note = "vedic"},
},
ahan = { -- §637b
{slot = "indic_mid_3p", forms = {"áhata"}, note = "vedic"},
},
-- §631: rud, svap, an and śvas take -a- or -ī- in the second and third singular (árodat or árodīt).
["arodīt"] = {
{slot = "indic_act_2s", forms = {"árodaḥ"}},
{slot = "indic_act_3s", forms = {"árodat"}},
},
["asvapīt"] = {
{slot = "indic_act_2s", forms = {"ásvapaḥ"}},
{slot = "indic_act_3s", forms = {"ásvapat"}},
},
["ānīt"] = {
{slot = "indic_act_2s", forms = {"ā́naḥ"}},
{slot = "indic_act_3s", forms = {"ā́nat"}},
},
["aśvasīt"] = {
{slot = "indic_act_2s", forms = {"áśvasaḥ"}},
{slot = "indic_act_3s", forms = {"áśvasat"}},
},
["aśeta"] = { -- §629: áśerata (RV also áśeran)
{slot = "indic_mid_3p", forms = {"áśerata"}, replaces = true},
{slot = "indic_mid_3p", forms = {"áśeran"}, note = "rigvedic"},
},
["aurṇot"] = { -- §713: aúrṇoḥ
{slot = "indic_act_2s", forms = {"aúrṇoḥ"}, replaces = true},
},
},
aor = {
-- The modes of the reduplicated aorist (§870–871): a precative middle and imperatives with a short reduplicating
-- vowel, accented like a reduplicated imperfect.
["arīriṣat"] = {
{slot = "optat_mid_3s", forms = {"rīriṣīṣṭa"}, note = "vedic"},
},
["ajīgar"] = {
{slot = "imper_act_2d", forms = {"jigṛtám"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"jigṛtá"}, note = "rigvedic"},
},
["adīdhar"] = {
{slot = "imper_act_2d", forms = {"didhṛtam"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"didhṛtá"}, note = "rigvedic"},
},
["apūpurat"] = {
{slot = "imper_act_3p", forms = {"pūpurantu"}, note = "vedic"},
},
-- The participles of the s-aorist (§897).
["adhākṣīt"] = {
{slot = "part_act", forms = {"dhákṣat", "dákṣat"}, note = "rigvedic"},
},
["asākṣīt"] = {
{slot = "part_act", forms = {"sákṣat"}, note = "rigvedic"},
},
["anaiṣīt"] = { -- §889a
{slot = "indic_act_3s", forms = {"ánait"}, note = "vedic"},
{slot = "inj_act_3s", forms = {"náit"}, note = "vedic"},
},
["naiṣīt"] = { -- §889a, for the injunctive given as its own head
{slot = "indic_act_3s", forms = {"náit"}, note = "vedic"},
},
-- The imperatives of the root aorist with the strong stem, beside the weak ones (§839), and bodhí, which stands
-- for bhūdhí.
["abhūt"] = {
{slot = "imper_act_2s", forms = {"bodhí"}, note = "vedic", replaces = true},
},
["adhāt"] = {
{slot = "imper_act_2p", forms = {"dhétana"}, note = "vedic"},
},
["agan"] = {
{slot = "imper_act_2p", forms = {"gánta", "gántana"}, note = "vedic"},
},
["ahet"] = {
{slot = "imper_act_2p", forms = {"héta"}, note = "vedic"},
},
["akar"] = {
{slot = "imper_act_2p", forms = {"kárta", "kártana"}, note = "vedic"},
},
["aśrot"] = {
{slot = "imper_act_2p", forms = {"śróta"}, note = "vedic"},
},
["avar"] = {
{slot = "imper_act_2d", forms = {"vártam"}, note = "vedic"},
},
["avark"] = {
{slot = "imper_act_2d", forms = {"várktam"}, note = "vedic"},
},
["avart"] = {
{slot = "imper_act_2p", forms = {"vártta"}, note = "vedic"},
},
},
-- The modes of the s-future are "of the utmost rarity" (Whitney §938); the forms in -dhvam may be imperatives or an
-- epic use of the secondary ending for the primary.
fut = {
["kariṣyati"] = {
{slot = "subj_act_2s", forms = {"kariṣyā́ḥ"}, note = "rigvedic"},
},
["dhakṣyati"] = {
{slot = "optat_act_3s", forms = {"dhakṣyet"}, note = "epic"},
},
["maṃsyate"] = {
{slot = "optat_mid_3p", forms = {"maṃsyeran"}, note = "epic"},
},
["drakṣyati"] = {
{slot = "optat_mid_3s", forms = {"drakṣyeta"}, note = "epic"},
},
patsyati = {
{slot = "imper_act_3p", forms = {"patsyantu"}, note = "epic"},
},
["vetsyati"] = {
{slot = "imper_mid_2p", forms = {"vetsyadhvam"}, note = "uncertain"},
},
["saviṣyati"] = {
{slot = "imper_mid_2p", forms = {"saviṣyadhvam"}, note = "uncertain"},
},
["bhaviṣyati"] = {
{slot = "imper_mid_2p", forms = {"bhaviṣyadhvam"}, note = "uncertain"},
},
["mokṣyati"] = {
{slot = "imper_mid_2p", forms = {"mokṣyadhvam"}, note = "uncertain"},
},
},
perf = {
-- The modes of the perfect are only shown where the texts attest them (Whitney §808–816). The regular forms
-- (§810, §812–813) have the subjunctive on the strong stem, accented like the strong forms, the optative and
-- most of the imperative on the weak stem, accented on the ending; the others (§811, §814–816) have the
-- subjunctive accented on the reduplication (jújoṣati) or imperatives in -atam, -ata and -asva. Where Whitney
-- gives no accent, a form is accented that way.
["babhūva"] = { -- §808a, §812, §813
{slot = "optat_act_2s", forms = {"babhūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"babhūyā́t"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"babhū́tu"}, note = "vedic"},
},
["bubodha"] = { -- §810
{slot = "subj_act_2s", forms = {"bubódhaḥ"}, note = "vedic"},
},
["cakāra"] = { -- §812c
{slot = "optat_act_2s", forms = {"cakriyā́ḥ"}, note = "vedic"},
},
["cakṣama"] = { -- §812
{slot = "optat_mid_2s", forms = {"cakṣamīthā́ḥ"}, note = "vedic"},
},
["dadharṣa"] = { -- §810, §811b, §816
{slot = "subj_act_3s", forms = {"dadhárṣati"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"dádhṛṣate"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"dádhṛṣanta"}, note = "vedic"},
},
["dadarśa"] = { -- §813 (Atharvaveda)
{slot = "imper_mid_3p", forms = {"dadṛśrā́m"}, note = "vedic"},
},
["jabhāra"] = { -- §810
{slot = "subj_act_3s", forms = {"jabhárat"}, note = "vedic"},
},
["jagāma"] = { -- §805a, §812
{slot = "part_act", forms = {"jaganvā́ṃs"}},
{slot = "optat_act_1s", forms = {"jagamyā́m"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"jagamyā́t"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"jagmyā́tam"}, note = "vedic"},
},
["jaghāna"] = { -- §805a
{slot = "part_act", forms = {"jaghanvā́ṃs"}},
},
["jaghāsa"] = { -- §812c
{slot = "optat_act_3s", forms = {"jakṣīyā́t"}, note = "vedic"},
},
["jujoṣa"] = { -- §811a, §813, §814
{slot = "subj_act_2s", forms = {"jújoṣasi"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"jújoṣati"}, note = "vedic"},
{slot = "subj_act_2d", forms = {"jújoṣathaḥ"}, note = "vedic"},
{slot = "subj_act_2p", forms = {"jújoṣatha"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"jújoṣate"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"jujoṣatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"jujuṣṭána"}, note = "vedic"},
},
["mamārja"] = { -- §812
{slot = "optat_mid_3s", forms = {"māmṛjītá"}, note = "vedic"},
},
["mumoca"] = { -- §811b, §813, §814, §816
{slot = "subj_act_2s", forms = {"mumócaḥ", "múmucaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"múmocati"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"mumugdhí"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"mumóktu"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"mumuktám", "mumócatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"mumócata"}, note = "vedic"},
},
["paparca"] = { -- §812
{slot = "optat_act_1s", forms = {"papṛcyā́m"}, note = "vedic"},
},
["papau"] = { -- §812c
{slot = "optat_act_3s", forms = {"papīyā́t"}, note = "vedic"},
},
["piprāya"] = { -- §810, §813, §814, §816
{slot = "subj_act_2s", forms = {"pipráyaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"pipráyat"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"piprīhí"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"pipráyasva"}, note = "vedic"},
},
["rireca"] = { -- §812
{slot = "optat_act_1s", forms = {"riricyā́m"}, note = "vedic"},
},
["śuśoca"] = { -- §812, §813
{slot = "optat_mid_3s", forms = {"śuśucītá"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"śuśugdhí"}, note = "vedic"},
},
["śuśrāva"] = { -- §812c
{slot = "optat_act_2s", forms = {"śuśrūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"śuśrūyā́tam"}, note = "vedic"},
},
["tatāna"] = { -- §810, §812
{slot = "subj_act_1p", forms = {"tatánāma"}, note = "vedic"},
{slot = "subj_act_3p", forms = {"tatánan"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"tatánanta"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"tatanyúḥ"}, note = "vedic"},
},
["tatāpa"] = { -- §810
{slot = "subj_mid_3s", forms = {"tatápate"}, note = "vedic"},
},
["vavarta"] = { -- §810, §811b, §812, §813
{slot = "subj_act_3s", forms = {"vavártati", "vávṛtat"}, note = "vedic"},
{slot = "optat_act_2s", forms = {"vavṛtyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"vavṛtyā́t"}, note = "vedic"},
{slot = "optat_act_1p", forms = {"vavṛtyā́ma"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"vavṛtyúḥ"}, note = "vedic"},
{slot = "optat_mid_1s", forms = {"vavṛtīyá"}, note = "vedic"},
{slot = "optat_mid_3s", forms = {"vavṛtītá"}, note = "vedic"},
{slot = "optat_mid_1p", forms = {"vavṛtīmáhi"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"vavṛttána"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"vavṛtsvá"}, note = "vedic"},
{slot = "imper_mid_2p", forms = {"vavṛddhvám"}, note = "vedic"},
},
["viveśa"] = { -- §812
{slot = "optat_act_2s", forms = {"viviśyā́ḥ"}, note = "vedic"},
},
["yuyoja"] = { -- §810
{slot = "subj_mid_3s", forms = {"yuyójate"}, note = "vedic"},
},
},
}
data.endings = {
["present thematic"] = {
indic = {
act = {
["1s"] = "A@mi",
["2s"] = "a@si",
["3s"] = "a@ti",
["1d"] = "A@vas",
["2d"] = "a@Tas",
["3d"] = "a@tas",
["1p"] = {"A@mas", {"A@masi", note = "vedic"}},
["2p"] = "a@Ta",
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2s"] = "a@se",
["3s"] = "a@te",
["1d"] = "A@vahe",
["2d"] = "e@Te",
["3d"] = "e@te",
["1p"] = "A@mahe",
["2p"] = "a@Dve",
["3p"] = "a@nte",
},
},
imper = {
act = {
["1s"] = "A@ni",
["2s"] = "a@",
["3s"] = "a@tu",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@ntu",
},
mid = {
["1s"] = "E@",
["2s"] = "a@sva",
["3s"] = "a@tAm",
["1d"] = "A@vahE",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahE",
["2p"] = "a@Dvam",
["3p"] = "a@ntAm",
},
},
optat = {
act = {
["1s"] = "e@yam",
["2s"] = "e@s",
["3s"] = "e@t",
["1d"] = "e@va",
["2d"] = "e@tam",
["3d"] = "e@tAm",
["1p"] = "e@ma",
["2p"] = "e@ta",
["3p"] = "e@yur",
},
mid = {
["1s"] = "e@ya",
["2s"] = "e@TAs",
["3s"] = "e@ta",
["1d"] = "e@vahi",
["2d"] = "e@yATAm",
["3d"] = "e@yAtAm",
["1p"] = "e@mahi",
["2p"] = "e@Dvam",
["3p"] = "e@ran",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = "A@mahE",
["2p"] = "A@DvE",
["3p"] = {"a@nta", "A@ntE"},
},
},
part = {
act = "a@t",
mid = "a@mAna",
},
},
["present strong before consonant"] = {
indic = {
act = {
["1s"] = "mi",
["2s"] = "si",
["3s"] = "ti",
},
},
imper = {
act = {
["3s"] = "tu",
},
},
inj = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["present strong before vowel"] = {
imper = {
act = {
["1s"] = "Ani",
["1d"] = "Ava",
["1p"] = "Ama",
},
mid = {
["1s"] = "E",
["1d"] = "AvahE",
["1p"] = "AmahE",
},
},
inj = {
act = {
["1s"] = "am",
},
},
subj = {
act = {
["1s"] = {"Ani", {"A", note = "rigvedic"}},
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = "an",
},
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = "AmahE",
["2p"] = {"aDve", "ADvE"},
["3p"] = {"anta", "AntE"},
},
},
},
["present weak before consonant"] = {
indic = {
act = {
["2d"] = "Ta@s",
["3d"] = "ta@s",
["2p"] = "Ta@",
},
mid = {
["2s"] = "se@",
["3s"] = "te@",
["2p"] = "Dve@",
},
},
imper = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "sva@",
["3s"] = "tA@m",
["2p"] = "Dva@m",
},
},
inj = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["present weak before m v y"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
optat = {
act = {
["1s"] = "yA@m",
["2s"] = "yA@s",
["3s"] = "yA@t",
["1d"] = "yA@va",
["2d"] = "yA@tam",
["3d"] = "yA@tAm",
["1p"] = "yA@ma",
["2p"] = "yA@ta",
["3p"] = "yu@s",
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present weak before vowel"] = {
indic = {
act = {
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "a@te",
},
},
imper = {
act = {
["3p"] = "a@ntu",
},
mid = {
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@tAm",
},
},
optat = {
mid = {
["1s"] = "Iya@",
["2s"] = "ITA@s",
["3s"] = "Ita@",
["1d"] = "Iva@hi",
["2d"] = "IyA@TAm",
["3d"] = "IyA@tAm",
["1p"] = "Ima@hi",
["2p"] = "IDva@m",
["3p"] = "Ira@n",
},
},
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
part = {
act = "a@t",
mid = "Ana@",
},
},
["present reduplicated weak before vowel"] = {
indic = {
act = {
["3p"] = "ati",
},
mid = {
["1s"] = "e",
["2d"] = "ATe",
["3d"] = "Ate",
["3p"] = "ate",
},
},
imper = {
act = {
["3p"] = "atu",
},
mid = {
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "atAm",
},
},
optat = {
mid = {
["1s"] = "Iya",
["2s"] = "ITAs",
["3s"] = "Ita",
["1d"] = "Ivahi",
["2d"] = "IyATAm",
["3d"] = "IyAtAm",
["1p"] = "Imahi",
["2p"] = "IDvam",
["3p"] = "Iran",
},
},
inj = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
part = {
act = "at",
mid = "Ana",
},
},
["present nu extra"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
imper = {
act = {
["2s"] = {"u@", {"uhi@", note = "vedic"}},
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present intensive extra"] = {
indic = {
act = {
["1s"] = "Imi",
["2s"] = "Izi",
["3s"] = "Iti",
},
},
imper = {
act = {
["3s"] = "Itu",
},
},
inj = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["present imperative 2s dhi"] = {
imper = {
act = {
["2s"] = "Di@",
},
},
},
["present imperative 2s dhi vedic"] = {
imper = {
act = {
["2s"] = {{"Di@", note = "vedic"}},
},
},
},
["present imperative 2s hi"] = {
imper = {
act = {
["2s"] = "hi@",
},
},
},
["present imperative 2s u"] = {
imper = {
act = {
["2s"] = "u@",
},
},
},
["present 2s si"] = {
indic = {
act = {
["2s"] = "si",
},
},
},
["present imperative 2s ana"] = {
imper = {
act = {
["2s"] = "Ana@",
},
},
},
["present class 10 participle"] = {
part = {
mid = {{"Ana", note = "later"}},
},
},
["present injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["present injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["present injunctive unaccented 3p ur"] = {
inj = {
act = {
["3p"] = "ur",
},
},
},
["imperfect thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["imperfect strong before consonant"] = {
indic = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["imperfect strong before vowel"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["imperfect weak before consonant"] = {
indic = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["imperfect weak before m v y"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["imperfect weak before vowel"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
},
["imperfect 3p an"] = {
indic = {
act = {
["3p"] = "a@n",
},
},
},
["imperfect 3p ur"] = {
indic = {
act = {
["3p"] = "u@r",
},
},
},
["imperfect intensive extra"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["future"] = {
indic = {
act = {
["1s"] = "syA@mi",
["2s"] = "sya@si",
["3s"] = "sya@ti",
["1d"] = "syA@vas",
["2d"] = "sya@Tas",
["3d"] = "sya@tas",
["1p"] = {"syA@mas", {"syA@masi", note = "vedic"}},
["2p"] = "sya@Ta",
["3p"] = "sya@nti",
},
mid = {
["1s"] = "sye@",
["2s"] = "sya@se",
["3s"] = "sya@te",
["1d"] = "syA@vahe",
["2d"] = "sye@Te",
["3d"] = "sye@te",
["1p"] = "syA@mahe",
["2p"] = "sya@Dve",
["3p"] = "sya@nte",
},
},
part = {
act = "sya@t",
mid = "sya@mAna",
},
},
["periphrastic future"] = {
indic = {
act = {
["1s"] = "smi",
["2s"] = "si",
["3s"] = "",
["1d"] = "svas",
["2d"] = "sTas",
["3d"] = {"rO", {"rA", note = "vedic"}}, -- gantārā occurs in Rigveda 8.13.10.
["1p"] = {"smas", {"smasi", note = "vedic"}},
["2p"] = "sTa",
["3p"] = "ras",
},
mid = {
["1s"] = "he",
["2s"] = "se",
["3s"] = "",
["1d"] = "svahe",
["2d"] = "sATe",
["3d"] = "rO",
["1p"] = "smahe",
["2p"] = "Dve",
["3p"] = "ras",
},
},
},
["conditional"] = {
indic = {
act = {
["1s"] = "syam",
["2s"] = "syas",
["3s"] = "syat",
["1d"] = "syAva",
["2d"] = "syatam",
["3d"] = "syatAm",
["1p"] = "syAma",
["2p"] = "syata",
["3p"] = "syan",
},
mid = {
["1s"] = "sye",
["2s"] = "syaTAs",
["3s"] = "syata",
["1d"] = "syAvahi",
["2d"] = "syeTAm",
["3d"] = "syetAm",
["1p"] = "syAmahi",
["2p"] = "syaDvam",
["3p"] = "syanta",
},
},
},
["aorist is"] = {
indic = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is injunctive"] = {
subj = {
act = {
["1s"] = "#zAni",
["2s"] = {"#zas", "#zasi"},
["3s"] = {"#zat", "#zati"},
["1d"] = "#zAva",
["2d"] = "#zaTas",
["3d"] = "#zatas",
["1p"] = "#zAma",
["2p"] = "#zaTa",
["3p"] = "#zan",
},
},
inj = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is middle"] = {
indic = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist is middle injunctive"] = {
subj = {
mid = {
["1s"] = "#zE",
["2s"] = {"#zase", "#zAsE"},
["3s"] = {"#zate", "#zAtE"},
["1d"] = "#zAvahe",
["2d"] = "#zETe",
["3d"] = "#zEte",
["1p"] = {"#zAmahe", "#zAmahE"},
["2p"] = {"#zaDve", "#zADvE"},
["3p"] = "#zanta",
},
},
inj = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist s"] = {
indic = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s injunctive"] = {
inj = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s subjunctive"] = {
subj = {
act = {
["1s"] = "sAni",
["2s"] = {"sas", "sasi"},
["3s"] = {"sat", "sati"},
["1d"] = "sAva",
["2d"] = "saTas",
["3d"] = "satas",
["1p"] = "sAma",
["2p"] = "saTa",
["3p"] = "san",
},
},
},
["aorist s middle"] = {
indic = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle injunctive"] = {
inj = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle subjunctive"] = {
subj = {
mid = {
["1s"] = "sE",
["2s"] = {"sase", "sAsE"},
["3s"] = {"sate", "sAtE"},
["1d"] = "sAvahE",
["2d"] = "sETe",
["3d"] = "sEte",
["1p"] = {"sAmahe", "sAmahE"},
["2p"] = {"saDve", "sADvE"},
["3p"] = "santa",
},
},
},
["aorist thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist thematic injunctive"] = {
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist sa middle"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist sa middle injunctive"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist a middle"] = {
indic = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist a middle injunctive"] = {
inj = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist thematic middle"] = {
indic = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist thematic middle injunctive"] = {
subj = {
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = {"A@mahe", "A@mahE"},
["2p"] = {"A@Dve", "A@DvE"},
["3p"] = "a@nta",
},
},
inj = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist root"] = {
indic = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root injunctive"] = {
subj = {
act = {
["1s"] = "Ani",
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = {"an", "anti"},
},
},
inj = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root 1s"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["aorist root injunctive 1s"] = {
inj = {
act = {
["1s"] = "am",
},
},
},
["aorist root 3p an"] = {
indic = {
act = {
["3p"] = "an",
},
},
},
["aorist root injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["aorist root 3p ur"] = {
indic = {
act = {
["3p"] = "ur",
},
},
},
["aorist root injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["aorist root middle before vowel"] = {
indic = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
},
["aorist root middle before consonant"] = {
indic = {
mid = {
["2s"] = "TAs",
["3s"] = "ta",
["2p"] = "Dvam",
},
},
},
["aorist root middle before m v y"] = {
indic = {
mid = {
["1d"] = "vahi",
["1p"] = "mahi",
},
},
},
["aorist root middle injunctive before vowel"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@nta",
},
},
},
["aorist root middle injunctive before consonant"] = {
inj = {
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["aorist root middle injunctive before m v y"] = {
inj = {
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["aorist root middle subjunctive"] = {
subj = {
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = {"Amahe", "AmahE"},
["2p"] = {"aDve", "ADvE"},
["3p"] = "anta",
},
},
},
-- The imperative of the iṣ-aorist (Whitney §908: aviḍḍhí, aviṣṭu, aviṣṭám, aviṣṭána; kramiṣṭam), accented on the
-- ending, and its middle optative, the precative middle on the iṣ-stem (§907: janiṣīya, edhiṣīmáhi).
["aorist is middle optative"] = {
optat = {
mid = {
["1s"] = "#zIya@",
["2s"] = "#zIzWA@s",
["3s"] = "#zIzwa@",
["1d"] = "#zIva@hi",
["1p"] = "#zIma@hi",
["2p"] = "#zIQva@m",
["3p"] = "#zIra@n",
},
},
},
["precative"] = {
optat = {
act = {
["1s"] = "yA@sam",
["2s"] = "yA@s",
["3s"] = {"yA@t", {"yA@s", note = "vedic"}},
["1d"] = "yA@sva",
["2d"] = "yA@stam",
["3d"] = "yA@stAm",
["1p"] = "yA@sma",
["2p"] = "yA@sta",
["3p"] = "yA@sur",
},
},
},
["precative middle"] = {
optat = {
mid = {
["1s"] = "sIya@",
["2s"] = "sIzWA@s",
["3s"] = "sIzwa@",
["1d"] = "sIva@hi",
["2d"] = {{"sIyA@sTAm", note = "uncertain"}},
["3d"] = {{"sIyA@stAm", note = "uncertain"}},
["1p"] = "sIma@hi",
["2p"] = "sIQva@m",
["3p"] = "sIra@n",
},
},
},
["perfect weak before consonant"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["2s"] = "se@",
["1d"] = "va@he",
["1p"] = "ma@he",
["2p"] = "Dve@",
},
},
},
["perfect weak before vowel"] = {
indic = {
act = {
["2d"] = "a@Tur",
["3d"] = "a@tur",
["2p"] = "a@",
["3p"] = "u@s",
},
mid = {
["1s"] = "e@",
["3s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "ire@",
},
},
part = {
mid = "Ana@",
},
},
["perfect vedic anit"] = {
indic = {
act = {
["1d"] = {{"va@", note = "vedic"}},
["1p"] = {{"ma@", note = "vedic"}},
},
mid = {
["2s"] = {{"se@", note = "vedic"}},
["1d"] = {{"va@he", note = "vedic"}},
["1p"] = {{"ma@he", note = "vedic"}},
["2p"] = {{"Dve@", note = "vedic"}},
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect vedic anit middle 3p"] = {
indic = {
mid = {
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect anit participle"] = {
part = {
act = {{"vA@Ms", palatal_to_velar = true}},
},
},
["perfect set participle"] = {
part = {
act = "ivA@Ms",
},
},
["perfect au"] = {
indic = {
act = {
["1s"] = "O@",
["2s"] = {"A@Ta", {"iTa@", note = "later"}},
["3s"] = "O@",
},
},
},
["perfect weak 2s itha"] = {
indic = {
act = {
["2s"] = {{"iTa@", note = "later"}},
},
},
},
["perfect 2s tha"] = {
indic = {
act = {
["2s"] = "Ta",
},
},
},
["perfect 2s itha"] = {
indic = {
act = {
["2s"] = "iTa",
},
},
},
["perfect 2s itha later"] = {
indic = {
act = {
["2s"] = {{"iTa", note = "later"}},
},
},
},
["perfect 2s tha vedic"] = {
indic = {
act = {
["2s"] = {{"Ta", note = "vedic"}},
},
},
},
["perfect strong"] = {
indic = {
act = {
["1s"] = "a",
["3s"] = "a",
},
},
},
["perfect strong brugmann"] = {
indic = {
act = {
-- Only 3 verbs have the vṛddhi form in Vedic (Whitney §793d).
["1s"] = {"a", {"a", note = "later", brugmann = true}},
["3s"] = {{"a", brugmann = true}},
},
},
},
-- The Vedic third plural middle of the pluperfect in -iran (Whitney §818a: acakriran, ajagmiran).
-- The active first and second plural of the pluperfect, which have the strong stem (Whitney §818a: ájaganma,
-- ájaganta, ájagantana, ajabhartana).
["pluperfect strong plural"] = {
indic = {
act = {
["1p"] = "ma@",
["2p"] = {"ta@", "tana@"},
},
},
},
-- The second and third singular active of a pluperfect stem ending in a consonant, with an inserted -ī- (Whitney
-- §819: ábubhojīs, arirecīt), beside the forms without it.
["pluperfect 2s 3s i"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["pluperfect middle 3p iran"] = {
indic = {
mid = {
["3p"] = {{"iran", note = "vedic"}},
},
},
},
-- The Vedic imperative in -tāt (Whitney §570), on the weak stem of an athematic present or the stem of a thematic
-- one. It is mostly a second singular (§571).
["present imperative tat"] = {
imper = {
act = {
["2s"] = {{"tA@t", note = "vedic"}},
},
},
},
["present thematic tat"] = {
imper = {
act = {
["2s"] = {{"a@tAt", note = "vedic"}},
},
},
},
-- The aorist passive in -i (Whitney §842–844), made from its augmented stem and, without the augment, accented on
-- the root (§844c).
["aorist passive"] = {
indic = {
pass = {
["3s"] = "i",
},
},
inj = {
pass = {
["3s"] = "i",
},
},
},
-- The nonfinite forms of a causative (Whitney §1051). The infinitive and the gerundive in -ya are accented on the
-- root, just as with the simple root (§972, §963, §1051h), so the analysis supplies an accented stem and the ending
-- itself is unaccented; the gerundive in -tavya has the svarita of accented texts (§964), given as `@`.
["causative infinitive"] = {
nonf = {inf = "ayitum", gerundive = "ya"},
},
["causative nonfinite"] = {
nonf = {gerund = "ayitvA@", ppp = "ita@", pap = "ita@vat"},
},
["causative gerundive tavya"] = {
nonf = {gerundive = "ayitavya@"},
},
-- The gerundive in -anīya (§965), from the causatively strengthened root or the guṇa of a simple root (§1150).
["gerundive aniya"] = {
nonf = {gerundive = "anI@ya"},
},
-- The nonfinite forms of a simple verb: the past participles (the head itself and -vat, §959), the gerund in -tvā
-- made like the participle (§991), and from the stem of the infinitive, the infinitive and the gerundive in -tavya
-- (§968, §964).
["past participles"] = {
nonf = {ppp = "", pap = "vat"},
},
["gerund tva"] = {
nonf = {gerund = "vA@"},
},
-- The gerund in -ya of a verb with a preverb (§990, §992; with -ayya for a causative whose root is unchanged,
-- §1051d), on a stem accented on the root. It is made into the slot `gerund_ya`, which takes the place of the
-- gerund once the preverbs are added.
["gerund ya"] = {
nonf = {gerund_ya = "ya"},
},
["gerund ayya"] = {
nonf = {gerund_ya = "ayya"},
},
["infinitive"] = {
nonf = {inf = "um"},
},
["gerundive tavya"] = {
nonf = {gerundive = "avya@"},
},
}
return data
kooipeopa3vbxsa0ctvxobsnmb9g5f7
2572919
2572918
2026-10-23T07:46:09Z
Hiyuune
50834
2572919
Scribunto
text/plain
--[==[
Data for [[Module:sa-verb]], loaded with mw.loadData. It holds the tenses and the layout of their tables, the table
sets and the augment, every set of endings, the notes, the indicators of the inline spec, the auxiliaries of the
periphrastic perfect, the categories, the fields of {{tl|sa-root deriv}} and the forms attested for particular verbs.
All Sanskrit here is in SLP1, except in `attested`, which is in IAST.
The endings are in `endings[NAME][mood][voice][person]` (or `endings[NAME].part[voice]` for participles, and
`endings[NAME].nonf[mood]` for the nonfinite forms). Each is one ending or a list of alternatives, and each alternative
is either a string or `{ending, note = KEY, brugmann = true, palatal_to_velar = true}`. In an ending, `@` stands for the
accent of the principal part's ending (`/` or nothing) and `#` for the connecting vowel of the iṣ-aorist (`i`, or `I`
for the īṣ-aorist). `note` is a key of `notes`. `brugmann` lengthens a stem `a` before a single consonant (Brugmann's
law) after sandhi, and `palatal_to_velar` turns on the sandhi option of that name for this ending alone.
]==]
local data = {}
--[==[
The tenses, in the order of `tense_order`. `moods` are the moods of the table, in the order shown; `vedic_moods` are
the ones `novedic` leaves out, and `sparse_moods` the ones shown only when one of their cells has a form (the modes
of the perfect and the aorist, which not every verb makes, and the modes of the future, which only a few verbs have).
]==]
data.tenses = {
pres = {name = "hiện tại", moods = {"indic", "imper", "optat", "inj", "subj", "part"}, vedic_moods = {subj = true},
accel = "pres"},
impf = {name = "chưa hoàn thành", moods = {"indic"}, accel = "impf"},
fut = {name = "tương lai", moods = {"indic", "subj", "optat", "imper", "part"},
sparse_moods = {subj = true, optat = true, imper = true}, accel = "fut"},
pfut = {name = "thì tương lai diễn đạt bằng cụm từ", moods = {"indic"}, accel = "peri|fut"}, -- en: "periphrastic future"
cond = {name = "điều kiện", moods = {"indic"}, accel = "cond"},
aor = {name = "thì quá khứ bất định", moods = {"indic", "inj", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true, part = true},
sparse_moods = {subj = true, optat = true, imper = true, part = true}, accel = "aor"},
prec = {name = "precative/benedictive", moods = {"optat"}, accel = "prec"},
perf = {name = "hoàn thành", moods = {"indic", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true}, sparse_moods = {subj = true, optat = true, imper = true},
accel = "perf"},
plup = {name = "hoàn thành số nhiều", moods = {"indic"}, accel = "plup"},
pperf = {name = "thì hoàn thành diễn đạt bằng cụm từ", moods = {"indic", "part"}, accel = "peri|perf"}, -- en: "periphrastic perfect"
-- The nonfinite forms: each mood is a single slot, with no persons or voices.
nonf = {name = "dạng không nguyên mẫu", moods = {"inf", "gerund", "ppp", "pap", "gerundive"}, nonfinite = true},
}
data.tense_order = {"pres", "impf", "fut", "pfut", "cond", "aor", "prec", "perf", "plup", "pperf", "nonf"}
--[==[
The table sets: codes that show several tables in one call (`{{sa-conj|CODE|HEAD}}`). The head of a table set ends in
`ending`, and what comes before that ending is the stem. Each of the `tables` is made as a call of its own, whose head
is the stem followed by the table's `ending` (or with `augment`, the augmented stem, as in `augment` below);
`indicators` gives the other principal parts of the table in the same way. In an ending, `@` stands for the accent of
the head (`/` or nothing).
The causative tables follow Whitney §1043–1052. The present and the imperfect are made from the causative stem in -aya-,
and their passive from the stem without -aya- (§1052). The futures and the conditional put i in place of the final a of
-aya-, as does the middle of the precative, whose active is made without -aya- (§1049). The periphrastic perfect is
made from the form in -ām (§1045). The aorist is reduplicated (§1046) and can't be made from the stem, so it is given
in a call of its own. The nonfinite table comes first, with the infinitive, the gerund and the two past participles of
the causative stem (§1051).
]==]
data.table_sets = {
-- The desiderative tables follow Whitney §1034–1038. The stem is the head without -ati (or -ate, for a middle
-- desiderative, whose tables take each member's `middle_ending` and `middle_indicators`); its accent, on the
-- reduplication, stays in the present system, and the forms marked `suffix_accent` are accented on the suffix
-- instead (`@` is then the accent of the head). The aorist is the iṣ-aorist made from the stem (§1035), whose
-- injunctive stem is the stem itself (`stem_indicators` are made on the bare stem); the perfect is the periphrastic
-- one (§1034); the precative, though allowed by the grammarians, never occurs (§1035b).
desid = {
name = "desiderative",
ending = "ati",
middle_ending = "ate",
tables = {
{tense = "nonf", ending = "ita@", suffix_accent = true, indicators = {inf = "itum"}},
{tense = "pres", ending = "ati", middle_ending = "ate", indicators = {pass = "ya@te"},
suffix_accent_indicators = true},
{tense = "impf", augment = true, ending = "at", middle_ending = "ata", indicators = {pass = "yata"}},
{tense = "fut", ending = "izya@ti", middle_ending = "izya@te", suffix_accent = true},
{tense = "cond", augment = true, ending = "izyat", middle_ending = "izyata"},
{tense = "pfut", ending = "itA@", suffix_accent = true},
{tense = "aor", augment = true, ending = "It", middle_ending = "-", words = {type = "iṣ"},
stem_indicators = {inj = ""}, middle_indicators = {mid = "izwa"}, middle_stem_indicators = {midinj = ""}},
{tense = "pperf", ending = "A@m", suffix_accent = true},
},
},
caus = {
name = "causative",
ending = "a@yati",
tables = {
{tense = "nonf", ending = "a@yati"},
{tense = "pres", ending = "a@yati", indicators = {pass = "ya@te"}},
{tense = "impf", augment = true, ending = "ayat", indicators = {pass = "yata"}},
{tense = "fut", ending = "ayizya@ti"},
{tense = "cond", augment = true, ending = "ayizyat"},
{tense = "pfut", ending = "ayitA@"},
{tense = "prec", ending = "yA@t", indicators = {mid = "ayizIzwa@"}},
{tense = "pperf", ending = "ayA@m"},
},
},
}
--[==[
The augment, with `@` for its accent: `a@` before a consonant, and before a vowel the vṛddhi of that vowel
(Whitney §585).
]==]
data.augment = {
consonant = "a@",
vowels = {a = "A@", A = "A@", i = "E@", I = "E@", e = "E@", E = "E@", u = "O@", U = "O@", o = "O@", O = "O@",
f = "A@r", F = "A@r", x = "A@l", X = "A@l"},
}
data.moods = {
indic = {name = "trần thuật", accel = "ind"},
imper = {name = "mệnh lệnh", accel = "imp"},
optat = {name = "ước vọng/Khả năng", accel = "opt"},
subj = {name = "giả định", accel = "sub"},
inj = {name = "mệnh lệnh", accel = "inj"},
part = {name = "phân từ", accel = "part"},
-- The moods of the nonfinite table. Each of them is a single slot.
inf = {name = "nguyên mẫu", accel = "inf"},
gerund = {name = "danh động từ", accel = "ger"},
ppp = {name = "phân từ quá khứ bị động", accel = "past|pass|part"},
pap = {name = "phân từ quá khứ chủ động", accel = "past|act|part"},
gerundive = {name = "danh động từ", accel = "gerv"},
}
data.voices = {
act = {name = "thể chủ động", accel = "act"},
mid = {name = "thể trung gian", accel = "mid"},
pass = {name = "thể bị động", accel = "pass"},
}
data.voice_order = {"act", "mid", "pass"}
data.persons = {
{code = "3", name = "ngôi thứ ba", label = "ngôi thứ ba"},
{code = "2", name = "ngôi thứ hai", label = "ngôi thứ hai"},
{code = "1", name = "ngôi thứ nhất", label = "ngôi thứ nhất"},
}
data.numbers = {
{code = "s", name = "số ít", accel = "s"},
{code = "d", name = "số đôi", accel = "d"},
{code = "p", name = "số nhiều", accel = "p"},
}
data.notes = {
vedic = {text = "Vệ Đà", vedic = true},
rigvedic = {text = "Rigvedic", vedic = true},
later = {text = "tiếng Phạn hậu kỳ"},
epic = {text = "sử thi"},
uncertain = {text = "không chắc chắn"},
}
data.general_notes = {
periphrastic_future_middle = "The middle forms of the periphrastic future rarely occur.",
root_aorist_middle = "The middle root-aorist and the subjunctive are only used in Vedic Sanskrit.",
subjunctive = "Thể giả định chỉ dùng trong tiếng Phạn Vệ Đà.",
-- Whitney §808, §836
perfect_modes = "The subjunctive, optative and imperative of the perfect are only used in Vedic Sanskrit, and are "
.. "rare outside the Rigveda. Only the attested forms are shown.",
aorist_modes = "The subjunctive, the optative (other than the precative), the imperative and the participles of the "
.. "aorist are only used in Vedic Sanskrit.",
-- Whitney §817
pluperfect = "The pluperfect is only used in Vedic Sanskrit, and is rare even there.",
-- Whitney §842, §998
passive_aorist = "The aorist passive has only a third-person singular; the middle forms serve as the passive in the "
.. "other persons.",
-- Whitney §925; a Buddhist text has the precative middle twice (https://www.jstor.org/stable/24662164).
precative = "In Later Sanskrit, the precative active is very rare, and the precative middle virtually unknown.",
-- Whitney §587d; Oberlies (Grammar of Epic Sanskrit), pp. 178–181.
imperfect = "Trong tiếng Phạn sử thi, thì chưa hoàn thành có thể xảy ra mà không có tranh cãi.",
}
--[==[
The indicators of the inline spec (`{{sa-conj|TENSE|HEAD<NAME:VALUE.NAME>}}`). `value` is "form" (a Sanskrit form or
stem, in any script), "word" (plain text, checked against `values` if given) or {nil} (for a flag); `tenses` lists the
tenses and table sets that accept the indicator.
]==]
data.indicators = {
stem = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
["3p"] = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true}},
weakstem = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true, aor = true}},
mid = {value = "form", tenses = {aor = true, prec = true}},
midstem = {value = "form", tenses = {aor = true, prec = true}},
pass = {value = "form", tenses = {pres = true, impf = true, aor = true}},
mvstem = {value = "form", tenses = {pres = true, impf = true, aor = true, plup = true}},
inj = {value = "form", tenses = {aor = true}},
midinj = {value = "form", tenses = {aor = true}},
voice = {value = "word", values = {act = true, mid = true}, tenses = {pres = true, impf = true, fut = true,
pfut = true, cond = true, aor = true, prec = true, perf = true, plup = true, pperf = true}},
class = {value = "word", values = {["1"] = true, ["2"] = true, ["3"] = true, ["4"] = true, ["5"] = true,
["6"] = true, ["7"] = true, ["8"] = true, ["9"] = true, ["10"] = true, int = true}, tenses = {pres = true,
impf = true}},
type = {value = "word", values = {root = true, a = true, s = true, ["iṣ"] = true, ["īṣ"] = true, ["siṣ"] = true,
sa = true}, tenses = {aor = true}},
["seṭ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["veṭ"] = {tenses = {perf = true}},
novedic = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true, pperf = true, caus = true, desid = true}},
final = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
j = {value = "word", values = {["ṣ"] = true}, tenses = {pres = true, impf = true, fut = true, pfut = true,
cond = true, aor = true, prec = true, perf = true, plup = true}},
h = {value = "word", values = {gh = true}, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true}},
diaspirate = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["ḷ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
aux = {value = "word", values = {["kṛ"] = true, ["bhū"] = true, as = true}, list = true, tenses = {pperf = true}},
impf = {value = "form", tenses = {caus = true}},
gerund = {value = "form", tenses = {caus = true, nonf = true}},
inf = {value = "form", tenses = {nonf = true}},
root = {value = "form", tenses = {nonf = true}},
pre = {value = "form", list = true, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true, pperf = true, nonf = true, caus = true, desid = true}},
["tāt"] = {tenses = {pres = true}},
}
--[==[
The athematic roots that also have a third plural in -ur in the imperfect and the injunctive (Whitney §621a:
ádviṣuḥ beside ádviṣan), keyed by the weak stem in SLP1.
]==]
data.third_plural_ur = {dviz = true, duh = true, vid = true, cakz = true, mfj = true}
--[==[
The class 3 roots in -ā whose weak stem has -ī- before a consonant (Whitney §661–666: śā, mā, hā), keyed by the weak
stem as read off the third plural, in SLP1. The value says what the optative does: hā drops the vowel (jahyā́m), the
others keep -ī- (mimīyā́t).
]==]
data.reduplicated_long_i = {SiS = "keep", mim = "keep", jah = "drop", jih = "keep"}
--[==[
The preverbs `pre:` takes (Whitney §1077–1079), keyed by their unaccented SLP1, with their accent. `nir`, `dur` and
`ut` are taken as `nis`, `dus` and `ud`, and a final ṃ as m.
]==]
data.preverbs = {
ati = "a/ti", aDi = "a/Di", anu = "a/nu", antar = "anta/r", apa = "a/pa", api = "a/pi", aBi = "aBi/", ava = "a/va",
A = "A/", ud = "u/d", upa = "u/pa", ni = "ni/", nis = "ni/s", parA = "pa/rA", pari = "pa/ri", pra = "pra/",
prati = "pra/ti", vi = "vi/", sam = "sa/m",
-- The more limited prefixes: ácha, āvís, tirás, purás, prādús, alam, śrad, hiṅ.
acCa = "a/cCa", acCA = "a/cCA", Avis = "Avi/s", tiras = "tira/s", puras = "pura/s", prAdus = "prAdu/s",
alam = "ala/m", Srat = "Sra/t", hiN = "hi/N",
-- dus is treated as a preverb in compounds such as duṣkṛta, though the language has no preverb dus.
dus = "du/s",
}
data.preverb_aliases = {nir = "nis", niH = "nis", dur = "dus", duH = "dus", ut = "ud", saM = "sam", alaM = "alam"}
--[==[
The presents that have the Vedic imperative in -tāt without `<tāt>` (Whitney §570a, §571), keyed by the head in IAST
without accents: the tāt-forms Whitney quotes, and those he gives for single verbs (§618, §654, §723, §740, §752c).
]==]
data.tat_imperative = {
["bravīti"] = true, hanti = true, vetti = true, piparti = true, ["jahāti"] = true, ["dadāti"] = true,
["dadhāti"] = true, ["kṛṇoti"] = true, karoti = true, ["gṛhṇāti"] = true, ["jānāti"] = true, avati = true,
["rakṣati"] = true, vasati = true, ["viśati"] = true, ["sṛjati"] = true, asyati = true, ["naśyati"] = true,
chyati = true, gamayati = true, ["cyāvayati"] = true, ["vārayati"] = true, ["īpsati"] = true, ["jāgarti"] = true,
bhavati = true,
}
--[==[
The perfect of each auxiliary of the periphrastic perfect, as it is written after the form in `-ām` (whose `m` becomes
`ṃ` before a consonant other than a labial). The default auxiliaries are as and kṛ, in that order.
]==]
data.periphrastic_perfect = {
default = {"as", "kṛ"},
auxiliaries = {
["kṛ"] = {
indic = {
act = {
["1s"] = "caka/ra", ["2s"] = "caka/rTa", ["3s"] = "cakA/ra",
["1d"] = "cakfva/", ["2d"] = "cakra/TuH", ["3d"] = "cakra/tuH",
["1p"] = "cakfma/", ["2p"] = "cakra/", ["3p"] = "cakru/H",
},
mid = {
["1s"] = "cakre/", ["2s"] = "cakfze/", ["3s"] = "cakre/",
["1d"] = "cakfva/he", ["2d"] = "cakrA/Te", ["3d"] = "cakrA/te",
["1p"] = "cakfma/he", ["2p"] = "cakfDve/", ["3p"] = "cakrire/",
},
},
-- FIXME: Is the periphrastic perfect ever used with a participle?
part = {act = "cakfvA/Ms", mid = "cakrARa/"},
},
["bhū"] = {
indic = {
act = {
["1s"] = "baBU/va", ["2s"] = "baBU/viTa", ["3s"] = "baBU/va",
["1d"] = "baBUviva/", ["2d"] = "baBUva/TuH", ["3d"] = "baBUva/tuH",
["1p"] = "baBUvima/", ["2p"] = "baBUva/", ["3p"] = "baBUvu/H",
},
},
part = {act = "baBUvA/Ms"},
},
as = {
indic = {
act = {
["1s"] = "A/sa", ["2s"] = "A/siTa", ["3s"] = "A/sa",
["1d"] = "Asiva/", ["2d"] = "Asa/TuH", ["3d"] = "Asa/tuH",
["1p"] = "Asima/", ["2p"] = "Asa/", ["3p"] = "Asu/H",
},
},
},
},
}
data.categories = {
["s-future"] = "Động từ với thì tương lai s tiếng Phạn",
["periphrastic future"] = "Động từ với thì tương lai diễn đạt bằng cụm từ tiếng Phạn",
["s-aorist"] = "Động từ với thì quá khứ bất định s tiếng Phạn",
["siṣ-aorist"] = "Động từ với thì quá khứ bất định siṣ tiếng Phạn",
["iṣ-aorist"] = "Động từ với thì quá khứ bất định iṣ tiếng Phạn",
["sa-aorist"] = "Động từ với thì quá khứ bất định sa tiếng Phạn",
["a-aorist"] = "Động từ với thì quá khứ bất định a tiếng Phạn",
["root-aorist"] = "Động từ với thì quá khứ bất định gốc từ tiếng Phạn",
["periphrastic perfect"] = "Động từ với thì hoàn thành diễn đạt bằng cụm từ tiếng Phạn",
}
--[==[
The fields of {{tl|sa-root deriv}}, grouped by the list they appear in. Each field is a parameter name and the label
shown after its forms. After them come the headers of the lists of derived nominals (the positional parameters) and of
prefixed roots (`prefixed=`).
]==]
data.root_derivations = {
groups = {
{
header = "Dạng trực tiếp",
fields = {
{"pres", "present"}, {"imper", "present imperative"}, {"opt", "present optative"},
{"subj", "present subjunctive"}, {"impf", "imperfect"}, {"fut", "future"}, {"pfut", "periphrastic future"},
{"cond", "conditional"}, {"aor", "aorist"}, {"paor", "periphrastic aorist"}, {"prec", "precative"},
{"bene", "precative"}, {"perf", "perfect"}, {"pperf", "periphrastic perfect"}, {"si_imper", "si-imperative"},
},
},
{
header = "Dạng gián tiếp",
fields = {
{"pass", "present passive"}, {"pass_impf", "imperfect passive"}, {"pass_aor", "aorist passive"},
{"caus", "causative"}, {"pass_caus", "causative passive"}, {"caus_aor", "causative aorist"},
{"pass_aor_caus", "causative aorist passive"}, {"desid", "desiderative"},
{"pass_desid", "desiderative passive"}, {"desid_fut", "desiderative future"},
{"desid_aor", "desiderative aorist"}, {"caus_desid", "causative of desiderative"},
{"desid_caus", "desiderative of causative"}, {"desid_desid", "desiderative of desiderative"},
{"int", "intensive"}, {"intens", "intensive"}, {"int_perf", "intensive perfect"},
{"caus_int", "causative of intensive"}, {"desid_int", "desiderative of intensive"},
},
},
{
header = "Dạng không nguyên mẫu",
fields = {
{"ppp", "past passive participle"}, {"pap", "past active participle"}, {"inf", "infinitive"},
{"gerund", "gerund"}, {"gerundive", "gerundive"}, {"caus_ppp", "causative past passive participle"},
{"caus_pap", "causative past active participle"}, {"caus_inf", "causative infinitive"},
{"caus_gerund", "causative gerund"}, {"caus_gerundive", "causative gerundive"},
{"desid_part", "desiderative participle"}, {"desid_gerundive", "desiderative gerundive"},
{"desid_caus_part", "desiderative participle of causative"}, {"int_inf", "intensive infinitive"},
{"int_part", "intensive participle"},
},
},
},
nominal_header = "Dạng phái sinh danh hóa",
prefixed_header = "Dạng tiền tố gốc từ",
}
--[==[
Forms that the sources give for particular verbs, besides the ones the module makes. Most come from Whitney's
''Sanskrit Grammar'' (cited by §). The table is keyed by tense and then by the head as written in the call, without
accents, in IAST. Each entry describes one cell (`slot`): its forms, in IAST as the table shows them, and the key of
their note in `notes` (none for a form of the same standing as the made ones). The forms are written with ḥ for a final
s and accented as Whitney accents them; where he gives no accent, a Vedic form is accented the way its class is, and
the epic forms are left unaccented. They come after the made forms, or take their place when `replaces` is set. A call
without accents gets them without accents too.
]==]
data.attested = {
pres = {
asti = { -- §636c, §636d, §613
{slot = "indic_act_1d", forms = {"sva"}, note = "epic"},
{slot = "indic_act_1p", forms = {"sma"}, note = "epic"},
{slot = "indic_act_2p", forms = {"sthána"}, note = "vedic"},
{slot = "optat_act_1d", forms = {"syāvaḥ"}, note = "epic"},
{slot = "optat_act_1p", forms = {"syāmaḥ"}, note = "epic"},
},
["īṣṭe"] = { -- §630: ī́śiṣe, ī́śidhve (and the RV ī́kṣe), ī́śiṣva; ī́śire is a present by its accent
{slot = "indic_mid_2s", forms = {"ī́śiṣe"}},
{slot = "indic_mid_2p", forms = {"ī́śidhve"}, replaces = true},
{slot = "indic_mid_3p", forms = {"ī́śire"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"ī́śiṣva"}, replaces = true},
},
["īṭṭe"] = { -- §630: ī́ḍiṣva
{slot = "imper_mid_2s", forms = {"ī́ḍiṣva"}, replaces = true},
},
["amīti"] = { -- §634: amīṣi, amīṣva
{slot = "indic_act_2s", forms = {"amīṣi"}, note = "rigvedic"},
{slot = "imper_mid_2s", forms = {"amīṣva"}, note = "vedic"},
},
["śete"] = { -- §629: śérate (and śére), śératām
{slot = "indic_mid_3p", forms = {"śérate"}, replaces = true},
{slot = "indic_mid_3p", forms = {"śére"}, note = "vedic"},
{slot = "imper_mid_3p", forms = {"śératām"}, replaces = true},
},
["ūrṇoti"] = { -- §713: ūrṇauti (as if of the root class), ūrṇu or ūrṇuhi
{slot = "indic_act_3s", forms = {"ūrṇauti"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"ūrṇu", "ūrṇuhi"}, replaces = true},
},
["āste"] = { -- §619c: ā́sīna is anomalous and isolated, and the RV has āsāná; there is no ā́sāna.
{slot = "part_mid", forms = {"ā́sīna", "āsāná"}, replaces = true},
},
hanti = { -- §637b (hanītá is accented like ghnītá)
{slot = "optat_mid_3s", forms = {"hanītá"}, note = "vedic"},
},
dogdhi = { -- §619d, §635
{slot = "part_mid", forms = {"dúhāna", "dúghāna"}, note = "vedic"},
},
["dadāti"] = { -- §654, §668 (dádātana is accented like the forms of dhā)
{slot = "imper_act_2p", forms = {"dádāta", "dádātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
["dadhāti"] = { -- §654, §668 (dhattána is accented like the other forms)
{slot = "imper_act_2p", forms = {"dhattána", "dádhāta", "dádhātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
datte = { -- §668: the middle of dā
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
dhatte = { -- §668: the middle of dhā
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
sunoti = { -- §699b, §704
{slot = "indic_mid_3p", forms = {"sunviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"sunóta", "sunótana"}, note = "vedic"},
},
["śṛṇoti"] = { -- §699b, §704 (śṛṇótana is accented like sunótana)
{slot = "indic_mid_3p", forms = {"śṛṇviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"śṛṇóta", "śṛṇótana"}, note = "vedic"},
},
tanoti = { -- §699a, §704 (tanóta is accented like sunóta)
{slot = "indic_mid_3p", forms = {"tanvaté"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"tanóta"}, note = "vedic"},
},
["gṛhṇāti"] = { -- §723 (gṛhṇāhí is accented like punāhí)
{slot = "imper_act_2s", forms = {"gṛhṇāhí"}, note = "vedic"},
},
},
impf = {
["āsīt"] = { -- §636c
{slot = "indic_act_2s", forms = {"ā́ḥ"}, note = "vedic"},
{slot = "indic_act_3s", forms = {"ā́ḥ"}, note = "vedic"},
},
ahan = { -- §637b
{slot = "indic_mid_3p", forms = {"áhata"}, note = "vedic"},
},
-- §631: rud, svap, an and śvas take -a- or -ī- in the second and third singular (árodat or árodīt).
["arodīt"] = {
{slot = "indic_act_2s", forms = {"árodaḥ"}},
{slot = "indic_act_3s", forms = {"árodat"}},
},
["asvapīt"] = {
{slot = "indic_act_2s", forms = {"ásvapaḥ"}},
{slot = "indic_act_3s", forms = {"ásvapat"}},
},
["ānīt"] = {
{slot = "indic_act_2s", forms = {"ā́naḥ"}},
{slot = "indic_act_3s", forms = {"ā́nat"}},
},
["aśvasīt"] = {
{slot = "indic_act_2s", forms = {"áśvasaḥ"}},
{slot = "indic_act_3s", forms = {"áśvasat"}},
},
["aśeta"] = { -- §629: áśerata (RV also áśeran)
{slot = "indic_mid_3p", forms = {"áśerata"}, replaces = true},
{slot = "indic_mid_3p", forms = {"áśeran"}, note = "rigvedic"},
},
["aurṇot"] = { -- §713: aúrṇoḥ
{slot = "indic_act_2s", forms = {"aúrṇoḥ"}, replaces = true},
},
},
aor = {
-- The modes of the reduplicated aorist (§870–871): a precative middle and imperatives with a short reduplicating
-- vowel, accented like a reduplicated imperfect.
["arīriṣat"] = {
{slot = "optat_mid_3s", forms = {"rīriṣīṣṭa"}, note = "vedic"},
},
["ajīgar"] = {
{slot = "imper_act_2d", forms = {"jigṛtám"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"jigṛtá"}, note = "rigvedic"},
},
["adīdhar"] = {
{slot = "imper_act_2d", forms = {"didhṛtam"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"didhṛtá"}, note = "rigvedic"},
},
["apūpurat"] = {
{slot = "imper_act_3p", forms = {"pūpurantu"}, note = "vedic"},
},
-- The participles of the s-aorist (§897).
["adhākṣīt"] = {
{slot = "part_act", forms = {"dhákṣat", "dákṣat"}, note = "rigvedic"},
},
["asākṣīt"] = {
{slot = "part_act", forms = {"sákṣat"}, note = "rigvedic"},
},
["anaiṣīt"] = { -- §889a
{slot = "indic_act_3s", forms = {"ánait"}, note = "vedic"},
{slot = "inj_act_3s", forms = {"náit"}, note = "vedic"},
},
["naiṣīt"] = { -- §889a, for the injunctive given as its own head
{slot = "indic_act_3s", forms = {"náit"}, note = "vedic"},
},
-- The imperatives of the root aorist with the strong stem, beside the weak ones (§839), and bodhí, which stands
-- for bhūdhí.
["abhūt"] = {
{slot = "imper_act_2s", forms = {"bodhí"}, note = "vedic", replaces = true},
},
["adhāt"] = {
{slot = "imper_act_2p", forms = {"dhétana"}, note = "vedic"},
},
["agan"] = {
{slot = "imper_act_2p", forms = {"gánta", "gántana"}, note = "vedic"},
},
["ahet"] = {
{slot = "imper_act_2p", forms = {"héta"}, note = "vedic"},
},
["akar"] = {
{slot = "imper_act_2p", forms = {"kárta", "kártana"}, note = "vedic"},
},
["aśrot"] = {
{slot = "imper_act_2p", forms = {"śróta"}, note = "vedic"},
},
["avar"] = {
{slot = "imper_act_2d", forms = {"vártam"}, note = "vedic"},
},
["avark"] = {
{slot = "imper_act_2d", forms = {"várktam"}, note = "vedic"},
},
["avart"] = {
{slot = "imper_act_2p", forms = {"vártta"}, note = "vedic"},
},
},
-- The modes of the s-future are "of the utmost rarity" (Whitney §938); the forms in -dhvam may be imperatives or an
-- epic use of the secondary ending for the primary.
fut = {
["kariṣyati"] = {
{slot = "subj_act_2s", forms = {"kariṣyā́ḥ"}, note = "rigvedic"},
},
["dhakṣyati"] = {
{slot = "optat_act_3s", forms = {"dhakṣyet"}, note = "epic"},
},
["maṃsyate"] = {
{slot = "optat_mid_3p", forms = {"maṃsyeran"}, note = "epic"},
},
["drakṣyati"] = {
{slot = "optat_mid_3s", forms = {"drakṣyeta"}, note = "epic"},
},
patsyati = {
{slot = "imper_act_3p", forms = {"patsyantu"}, note = "epic"},
},
["vetsyati"] = {
{slot = "imper_mid_2p", forms = {"vetsyadhvam"}, note = "uncertain"},
},
["saviṣyati"] = {
{slot = "imper_mid_2p", forms = {"saviṣyadhvam"}, note = "uncertain"},
},
["bhaviṣyati"] = {
{slot = "imper_mid_2p", forms = {"bhaviṣyadhvam"}, note = "uncertain"},
},
["mokṣyati"] = {
{slot = "imper_mid_2p", forms = {"mokṣyadhvam"}, note = "uncertain"},
},
},
perf = {
-- The modes of the perfect are only shown where the texts attest them (Whitney §808–816). The regular forms
-- (§810, §812–813) have the subjunctive on the strong stem, accented like the strong forms, the optative and
-- most of the imperative on the weak stem, accented on the ending; the others (§811, §814–816) have the
-- subjunctive accented on the reduplication (jújoṣati) or imperatives in -atam, -ata and -asva. Where Whitney
-- gives no accent, a form is accented that way.
["babhūva"] = { -- §808a, §812, §813
{slot = "optat_act_2s", forms = {"babhūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"babhūyā́t"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"babhū́tu"}, note = "vedic"},
},
["bubodha"] = { -- §810
{slot = "subj_act_2s", forms = {"bubódhaḥ"}, note = "vedic"},
},
["cakāra"] = { -- §812c
{slot = "optat_act_2s", forms = {"cakriyā́ḥ"}, note = "vedic"},
},
["cakṣama"] = { -- §812
{slot = "optat_mid_2s", forms = {"cakṣamīthā́ḥ"}, note = "vedic"},
},
["dadharṣa"] = { -- §810, §811b, §816
{slot = "subj_act_3s", forms = {"dadhárṣati"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"dádhṛṣate"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"dádhṛṣanta"}, note = "vedic"},
},
["dadarśa"] = { -- §813 (Atharvaveda)
{slot = "imper_mid_3p", forms = {"dadṛśrā́m"}, note = "vedic"},
},
["jabhāra"] = { -- §810
{slot = "subj_act_3s", forms = {"jabhárat"}, note = "vedic"},
},
["jagāma"] = { -- §805a, §812
{slot = "part_act", forms = {"jaganvā́ṃs"}},
{slot = "optat_act_1s", forms = {"jagamyā́m"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"jagamyā́t"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"jagmyā́tam"}, note = "vedic"},
},
["jaghāna"] = { -- §805a
{slot = "part_act", forms = {"jaghanvā́ṃs"}},
},
["jaghāsa"] = { -- §812c
{slot = "optat_act_3s", forms = {"jakṣīyā́t"}, note = "vedic"},
},
["jujoṣa"] = { -- §811a, §813, §814
{slot = "subj_act_2s", forms = {"jújoṣasi"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"jújoṣati"}, note = "vedic"},
{slot = "subj_act_2d", forms = {"jújoṣathaḥ"}, note = "vedic"},
{slot = "subj_act_2p", forms = {"jújoṣatha"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"jújoṣate"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"jujoṣatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"jujuṣṭána"}, note = "vedic"},
},
["mamārja"] = { -- §812
{slot = "optat_mid_3s", forms = {"māmṛjītá"}, note = "vedic"},
},
["mumoca"] = { -- §811b, §813, §814, §816
{slot = "subj_act_2s", forms = {"mumócaḥ", "múmucaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"múmocati"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"mumugdhí"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"mumóktu"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"mumuktám", "mumócatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"mumócata"}, note = "vedic"},
},
["paparca"] = { -- §812
{slot = "optat_act_1s", forms = {"papṛcyā́m"}, note = "vedic"},
},
["papau"] = { -- §812c
{slot = "optat_act_3s", forms = {"papīyā́t"}, note = "vedic"},
},
["piprāya"] = { -- §810, §813, §814, §816
{slot = "subj_act_2s", forms = {"pipráyaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"pipráyat"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"piprīhí"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"pipráyasva"}, note = "vedic"},
},
["rireca"] = { -- §812
{slot = "optat_act_1s", forms = {"riricyā́m"}, note = "vedic"},
},
["śuśoca"] = { -- §812, §813
{slot = "optat_mid_3s", forms = {"śuśucītá"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"śuśugdhí"}, note = "vedic"},
},
["śuśrāva"] = { -- §812c
{slot = "optat_act_2s", forms = {"śuśrūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"śuśrūyā́tam"}, note = "vedic"},
},
["tatāna"] = { -- §810, §812
{slot = "subj_act_1p", forms = {"tatánāma"}, note = "vedic"},
{slot = "subj_act_3p", forms = {"tatánan"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"tatánanta"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"tatanyúḥ"}, note = "vedic"},
},
["tatāpa"] = { -- §810
{slot = "subj_mid_3s", forms = {"tatápate"}, note = "vedic"},
},
["vavarta"] = { -- §810, §811b, §812, §813
{slot = "subj_act_3s", forms = {"vavártati", "vávṛtat"}, note = "vedic"},
{slot = "optat_act_2s", forms = {"vavṛtyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"vavṛtyā́t"}, note = "vedic"},
{slot = "optat_act_1p", forms = {"vavṛtyā́ma"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"vavṛtyúḥ"}, note = "vedic"},
{slot = "optat_mid_1s", forms = {"vavṛtīyá"}, note = "vedic"},
{slot = "optat_mid_3s", forms = {"vavṛtītá"}, note = "vedic"},
{slot = "optat_mid_1p", forms = {"vavṛtīmáhi"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"vavṛttána"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"vavṛtsvá"}, note = "vedic"},
{slot = "imper_mid_2p", forms = {"vavṛddhvám"}, note = "vedic"},
},
["viveśa"] = { -- §812
{slot = "optat_act_2s", forms = {"viviśyā́ḥ"}, note = "vedic"},
},
["yuyoja"] = { -- §810
{slot = "subj_mid_3s", forms = {"yuyójate"}, note = "vedic"},
},
},
}
data.endings = {
["present thematic"] = {
indic = {
act = {
["1s"] = "A@mi",
["2s"] = "a@si",
["3s"] = "a@ti",
["1d"] = "A@vas",
["2d"] = "a@Tas",
["3d"] = "a@tas",
["1p"] = {"A@mas", {"A@masi", note = "vedic"}},
["2p"] = "a@Ta",
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2s"] = "a@se",
["3s"] = "a@te",
["1d"] = "A@vahe",
["2d"] = "e@Te",
["3d"] = "e@te",
["1p"] = "A@mahe",
["2p"] = "a@Dve",
["3p"] = "a@nte",
},
},
imper = {
act = {
["1s"] = "A@ni",
["2s"] = "a@",
["3s"] = "a@tu",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@ntu",
},
mid = {
["1s"] = "E@",
["2s"] = "a@sva",
["3s"] = "a@tAm",
["1d"] = "A@vahE",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahE",
["2p"] = "a@Dvam",
["3p"] = "a@ntAm",
},
},
optat = {
act = {
["1s"] = "e@yam",
["2s"] = "e@s",
["3s"] = "e@t",
["1d"] = "e@va",
["2d"] = "e@tam",
["3d"] = "e@tAm",
["1p"] = "e@ma",
["2p"] = "e@ta",
["3p"] = "e@yur",
},
mid = {
["1s"] = "e@ya",
["2s"] = "e@TAs",
["3s"] = "e@ta",
["1d"] = "e@vahi",
["2d"] = "e@yATAm",
["3d"] = "e@yAtAm",
["1p"] = "e@mahi",
["2p"] = "e@Dvam",
["3p"] = "e@ran",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = "A@mahE",
["2p"] = "A@DvE",
["3p"] = {"a@nta", "A@ntE"},
},
},
part = {
act = "a@t",
mid = "a@mAna",
},
},
["present strong before consonant"] = {
indic = {
act = {
["1s"] = "mi",
["2s"] = "si",
["3s"] = "ti",
},
},
imper = {
act = {
["3s"] = "tu",
},
},
inj = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["present strong before vowel"] = {
imper = {
act = {
["1s"] = "Ani",
["1d"] = "Ava",
["1p"] = "Ama",
},
mid = {
["1s"] = "E",
["1d"] = "AvahE",
["1p"] = "AmahE",
},
},
inj = {
act = {
["1s"] = "am",
},
},
subj = {
act = {
["1s"] = {"Ani", {"A", note = "rigvedic"}},
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = "an",
},
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = "AmahE",
["2p"] = {"aDve", "ADvE"},
["3p"] = {"anta", "AntE"},
},
},
},
["present weak before consonant"] = {
indic = {
act = {
["2d"] = "Ta@s",
["3d"] = "ta@s",
["2p"] = "Ta@",
},
mid = {
["2s"] = "se@",
["3s"] = "te@",
["2p"] = "Dve@",
},
},
imper = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "sva@",
["3s"] = "tA@m",
["2p"] = "Dva@m",
},
},
inj = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["present weak before m v y"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
optat = {
act = {
["1s"] = "yA@m",
["2s"] = "yA@s",
["3s"] = "yA@t",
["1d"] = "yA@va",
["2d"] = "yA@tam",
["3d"] = "yA@tAm",
["1p"] = "yA@ma",
["2p"] = "yA@ta",
["3p"] = "yu@s",
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present weak before vowel"] = {
indic = {
act = {
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "a@te",
},
},
imper = {
act = {
["3p"] = "a@ntu",
},
mid = {
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@tAm",
},
},
optat = {
mid = {
["1s"] = "Iya@",
["2s"] = "ITA@s",
["3s"] = "Ita@",
["1d"] = "Iva@hi",
["2d"] = "IyA@TAm",
["3d"] = "IyA@tAm",
["1p"] = "Ima@hi",
["2p"] = "IDva@m",
["3p"] = "Ira@n",
},
},
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
part = {
act = "a@t",
mid = "Ana@",
},
},
["present reduplicated weak before vowel"] = {
indic = {
act = {
["3p"] = "ati",
},
mid = {
["1s"] = "e",
["2d"] = "ATe",
["3d"] = "Ate",
["3p"] = "ate",
},
},
imper = {
act = {
["3p"] = "atu",
},
mid = {
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "atAm",
},
},
optat = {
mid = {
["1s"] = "Iya",
["2s"] = "ITAs",
["3s"] = "Ita",
["1d"] = "Ivahi",
["2d"] = "IyATAm",
["3d"] = "IyAtAm",
["1p"] = "Imahi",
["2p"] = "IDvam",
["3p"] = "Iran",
},
},
inj = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
part = {
act = "at",
mid = "Ana",
},
},
["present nu extra"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
imper = {
act = {
["2s"] = {"u@", {"uhi@", note = "vedic"}},
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present intensive extra"] = {
indic = {
act = {
["1s"] = "Imi",
["2s"] = "Izi",
["3s"] = "Iti",
},
},
imper = {
act = {
["3s"] = "Itu",
},
},
inj = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["present imperative 2s dhi"] = {
imper = {
act = {
["2s"] = "Di@",
},
},
},
["present imperative 2s dhi vedic"] = {
imper = {
act = {
["2s"] = {{"Di@", note = "vedic"}},
},
},
},
["present imperative 2s hi"] = {
imper = {
act = {
["2s"] = "hi@",
},
},
},
["present imperative 2s u"] = {
imper = {
act = {
["2s"] = "u@",
},
},
},
["present 2s si"] = {
indic = {
act = {
["2s"] = "si",
},
},
},
["present imperative 2s ana"] = {
imper = {
act = {
["2s"] = "Ana@",
},
},
},
["present class 10 participle"] = {
part = {
mid = {{"Ana", note = "later"}},
},
},
["present injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["present injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["present injunctive unaccented 3p ur"] = {
inj = {
act = {
["3p"] = "ur",
},
},
},
["imperfect thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["imperfect strong before consonant"] = {
indic = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["imperfect strong before vowel"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["imperfect weak before consonant"] = {
indic = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["imperfect weak before m v y"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["imperfect weak before vowel"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
},
["imperfect 3p an"] = {
indic = {
act = {
["3p"] = "a@n",
},
},
},
["imperfect 3p ur"] = {
indic = {
act = {
["3p"] = "u@r",
},
},
},
["imperfect intensive extra"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["future"] = {
indic = {
act = {
["1s"] = "syA@mi",
["2s"] = "sya@si",
["3s"] = "sya@ti",
["1d"] = "syA@vas",
["2d"] = "sya@Tas",
["3d"] = "sya@tas",
["1p"] = {"syA@mas", {"syA@masi", note = "vedic"}},
["2p"] = "sya@Ta",
["3p"] = "sya@nti",
},
mid = {
["1s"] = "sye@",
["2s"] = "sya@se",
["3s"] = "sya@te",
["1d"] = "syA@vahe",
["2d"] = "sye@Te",
["3d"] = "sye@te",
["1p"] = "syA@mahe",
["2p"] = "sya@Dve",
["3p"] = "sya@nte",
},
},
part = {
act = "sya@t",
mid = "sya@mAna",
},
},
["periphrastic future"] = {
indic = {
act = {
["1s"] = "smi",
["2s"] = "si",
["3s"] = "",
["1d"] = "svas",
["2d"] = "sTas",
["3d"] = {"rO", {"rA", note = "vedic"}}, -- gantārā occurs in Rigveda 8.13.10.
["1p"] = {"smas", {"smasi", note = "vedic"}},
["2p"] = "sTa",
["3p"] = "ras",
},
mid = {
["1s"] = "he",
["2s"] = "se",
["3s"] = "",
["1d"] = "svahe",
["2d"] = "sATe",
["3d"] = "rO",
["1p"] = "smahe",
["2p"] = "Dve",
["3p"] = "ras",
},
},
},
["conditional"] = {
indic = {
act = {
["1s"] = "syam",
["2s"] = "syas",
["3s"] = "syat",
["1d"] = "syAva",
["2d"] = "syatam",
["3d"] = "syatAm",
["1p"] = "syAma",
["2p"] = "syata",
["3p"] = "syan",
},
mid = {
["1s"] = "sye",
["2s"] = "syaTAs",
["3s"] = "syata",
["1d"] = "syAvahi",
["2d"] = "syeTAm",
["3d"] = "syetAm",
["1p"] = "syAmahi",
["2p"] = "syaDvam",
["3p"] = "syanta",
},
},
},
["aorist is"] = {
indic = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is injunctive"] = {
subj = {
act = {
["1s"] = "#zAni",
["2s"] = {"#zas", "#zasi"},
["3s"] = {"#zat", "#zati"},
["1d"] = "#zAva",
["2d"] = "#zaTas",
["3d"] = "#zatas",
["1p"] = "#zAma",
["2p"] = "#zaTa",
["3p"] = "#zan",
},
},
inj = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is middle"] = {
indic = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist is middle injunctive"] = {
subj = {
mid = {
["1s"] = "#zE",
["2s"] = {"#zase", "#zAsE"},
["3s"] = {"#zate", "#zAtE"},
["1d"] = "#zAvahe",
["2d"] = "#zETe",
["3d"] = "#zEte",
["1p"] = {"#zAmahe", "#zAmahE"},
["2p"] = {"#zaDve", "#zADvE"},
["3p"] = "#zanta",
},
},
inj = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist s"] = {
indic = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s injunctive"] = {
inj = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s subjunctive"] = {
subj = {
act = {
["1s"] = "sAni",
["2s"] = {"sas", "sasi"},
["3s"] = {"sat", "sati"},
["1d"] = "sAva",
["2d"] = "saTas",
["3d"] = "satas",
["1p"] = "sAma",
["2p"] = "saTa",
["3p"] = "san",
},
},
},
["aorist s middle"] = {
indic = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle injunctive"] = {
inj = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle subjunctive"] = {
subj = {
mid = {
["1s"] = "sE",
["2s"] = {"sase", "sAsE"},
["3s"] = {"sate", "sAtE"},
["1d"] = "sAvahE",
["2d"] = "sETe",
["3d"] = "sEte",
["1p"] = {"sAmahe", "sAmahE"},
["2p"] = {"saDve", "sADvE"},
["3p"] = "santa",
},
},
},
["aorist thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist thematic injunctive"] = {
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist sa middle"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist sa middle injunctive"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist a middle"] = {
indic = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist a middle injunctive"] = {
inj = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist thematic middle"] = {
indic = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist thematic middle injunctive"] = {
subj = {
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = {"A@mahe", "A@mahE"},
["2p"] = {"A@Dve", "A@DvE"},
["3p"] = "a@nta",
},
},
inj = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist root"] = {
indic = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root injunctive"] = {
subj = {
act = {
["1s"] = "Ani",
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = {"an", "anti"},
},
},
inj = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root 1s"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["aorist root injunctive 1s"] = {
inj = {
act = {
["1s"] = "am",
},
},
},
["aorist root 3p an"] = {
indic = {
act = {
["3p"] = "an",
},
},
},
["aorist root injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["aorist root 3p ur"] = {
indic = {
act = {
["3p"] = "ur",
},
},
},
["aorist root injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["aorist root middle before vowel"] = {
indic = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
},
["aorist root middle before consonant"] = {
indic = {
mid = {
["2s"] = "TAs",
["3s"] = "ta",
["2p"] = "Dvam",
},
},
},
["aorist root middle before m v y"] = {
indic = {
mid = {
["1d"] = "vahi",
["1p"] = "mahi",
},
},
},
["aorist root middle injunctive before vowel"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@nta",
},
},
},
["aorist root middle injunctive before consonant"] = {
inj = {
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["aorist root middle injunctive before m v y"] = {
inj = {
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["aorist root middle subjunctive"] = {
subj = {
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = {"Amahe", "AmahE"},
["2p"] = {"aDve", "ADvE"},
["3p"] = "anta",
},
},
},
-- The imperative of the iṣ-aorist (Whitney §908: aviḍḍhí, aviṣṭu, aviṣṭám, aviṣṭána; kramiṣṭam), accented on the
-- ending, and its middle optative, the precative middle on the iṣ-stem (§907: janiṣīya, edhiṣīmáhi).
["aorist is middle optative"] = {
optat = {
mid = {
["1s"] = "#zIya@",
["2s"] = "#zIzWA@s",
["3s"] = "#zIzwa@",
["1d"] = "#zIva@hi",
["1p"] = "#zIma@hi",
["2p"] = "#zIQva@m",
["3p"] = "#zIra@n",
},
},
},
["precative"] = {
optat = {
act = {
["1s"] = "yA@sam",
["2s"] = "yA@s",
["3s"] = {"yA@t", {"yA@s", note = "vedic"}},
["1d"] = "yA@sva",
["2d"] = "yA@stam",
["3d"] = "yA@stAm",
["1p"] = "yA@sma",
["2p"] = "yA@sta",
["3p"] = "yA@sur",
},
},
},
["precative middle"] = {
optat = {
mid = {
["1s"] = "sIya@",
["2s"] = "sIzWA@s",
["3s"] = "sIzwa@",
["1d"] = "sIva@hi",
["2d"] = {{"sIyA@sTAm", note = "uncertain"}},
["3d"] = {{"sIyA@stAm", note = "uncertain"}},
["1p"] = "sIma@hi",
["2p"] = "sIQva@m",
["3p"] = "sIra@n",
},
},
},
["perfect weak before consonant"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["2s"] = "se@",
["1d"] = "va@he",
["1p"] = "ma@he",
["2p"] = "Dve@",
},
},
},
["perfect weak before vowel"] = {
indic = {
act = {
["2d"] = "a@Tur",
["3d"] = "a@tur",
["2p"] = "a@",
["3p"] = "u@s",
},
mid = {
["1s"] = "e@",
["3s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "ire@",
},
},
part = {
mid = "Ana@",
},
},
["perfect vedic anit"] = {
indic = {
act = {
["1d"] = {{"va@", note = "vedic"}},
["1p"] = {{"ma@", note = "vedic"}},
},
mid = {
["2s"] = {{"se@", note = "vedic"}},
["1d"] = {{"va@he", note = "vedic"}},
["1p"] = {{"ma@he", note = "vedic"}},
["2p"] = {{"Dve@", note = "vedic"}},
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect vedic anit middle 3p"] = {
indic = {
mid = {
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect anit participle"] = {
part = {
act = {{"vA@Ms", palatal_to_velar = true}},
},
},
["perfect set participle"] = {
part = {
act = "ivA@Ms",
},
},
["perfect au"] = {
indic = {
act = {
["1s"] = "O@",
["2s"] = {"A@Ta", {"iTa@", note = "later"}},
["3s"] = "O@",
},
},
},
["perfect weak 2s itha"] = {
indic = {
act = {
["2s"] = {{"iTa@", note = "later"}},
},
},
},
["perfect 2s tha"] = {
indic = {
act = {
["2s"] = "Ta",
},
},
},
["perfect 2s itha"] = {
indic = {
act = {
["2s"] = "iTa",
},
},
},
["perfect 2s itha later"] = {
indic = {
act = {
["2s"] = {{"iTa", note = "later"}},
},
},
},
["perfect 2s tha vedic"] = {
indic = {
act = {
["2s"] = {{"Ta", note = "vedic"}},
},
},
},
["perfect strong"] = {
indic = {
act = {
["1s"] = "a",
["3s"] = "a",
},
},
},
["perfect strong brugmann"] = {
indic = {
act = {
-- Only 3 verbs have the vṛddhi form in Vedic (Whitney §793d).
["1s"] = {"a", {"a", note = "later", brugmann = true}},
["3s"] = {{"a", brugmann = true}},
},
},
},
-- The Vedic third plural middle of the pluperfect in -iran (Whitney §818a: acakriran, ajagmiran).
-- The active first and second plural of the pluperfect, which have the strong stem (Whitney §818a: ájaganma,
-- ájaganta, ájagantana, ajabhartana).
["pluperfect strong plural"] = {
indic = {
act = {
["1p"] = "ma@",
["2p"] = {"ta@", "tana@"},
},
},
},
-- The second and third singular active of a pluperfect stem ending in a consonant, with an inserted -ī- (Whitney
-- §819: ábubhojīs, arirecīt), beside the forms without it.
["pluperfect 2s 3s i"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["pluperfect middle 3p iran"] = {
indic = {
mid = {
["3p"] = {{"iran", note = "vedic"}},
},
},
},
-- The Vedic imperative in -tāt (Whitney §570), on the weak stem of an athematic present or the stem of a thematic
-- one. It is mostly a second singular (§571).
["present imperative tat"] = {
imper = {
act = {
["2s"] = {{"tA@t", note = "vedic"}},
},
},
},
["present thematic tat"] = {
imper = {
act = {
["2s"] = {{"a@tAt", note = "vedic"}},
},
},
},
-- The aorist passive in -i (Whitney §842–844), made from its augmented stem and, without the augment, accented on
-- the root (§844c).
["aorist passive"] = {
indic = {
pass = {
["3s"] = "i",
},
},
inj = {
pass = {
["3s"] = "i",
},
},
},
-- The nonfinite forms of a causative (Whitney §1051). The infinitive and the gerundive in -ya are accented on the
-- root, just as with the simple root (§972, §963, §1051h), so the analysis supplies an accented stem and the ending
-- itself is unaccented; the gerundive in -tavya has the svarita of accented texts (§964), given as `@`.
["causative infinitive"] = {
nonf = {inf = "ayitum", gerundive = "ya"},
},
["causative nonfinite"] = {
nonf = {gerund = "ayitvA@", ppp = "ita@", pap = "ita@vat"},
},
["causative gerundive tavya"] = {
nonf = {gerundive = "ayitavya@"},
},
-- The gerundive in -anīya (§965), from the causatively strengthened root or the guṇa of a simple root (§1150).
["gerundive aniya"] = {
nonf = {gerundive = "anI@ya"},
},
-- The nonfinite forms of a simple verb: the past participles (the head itself and -vat, §959), the gerund in -tvā
-- made like the participle (§991), and from the stem of the infinitive, the infinitive and the gerundive in -tavya
-- (§968, §964).
["past participles"] = {
nonf = {ppp = "", pap = "vat"},
},
["gerund tva"] = {
nonf = {gerund = "vA@"},
},
-- The gerund in -ya of a verb with a preverb (§990, §992; with -ayya for a causative whose root is unchanged,
-- §1051d), on a stem accented on the root. It is made into the slot `gerund_ya`, which takes the place of the
-- gerund once the preverbs are added.
["gerund ya"] = {
nonf = {gerund_ya = "ya"},
},
["gerund ayya"] = {
nonf = {gerund_ya = "ayya"},
},
["infinitive"] = {
nonf = {inf = "um"},
},
["gerundive tavya"] = {
nonf = {gerundive = "avya@"},
},
}
return data
77w0gwl69d422un62shpnzhzu8dwv8m
2572921
2572919
2026-10-23T07:48:36Z
Hiyuune
50834
2572921
Scribunto
text/plain
--[==[
Data for [[Module:sa-verb]], loaded with mw.loadData. It holds the tenses and the layout of their tables, the table
sets and the augment, every set of endings, the notes, the indicators of the inline spec, the auxiliaries of the
periphrastic perfect, the categories, the fields of {{tl|sa-root deriv}} and the forms attested for particular verbs.
All Sanskrit here is in SLP1, except in `attested`, which is in IAST.
The endings are in `endings[NAME][mood][voice][person]` (or `endings[NAME].part[voice]` for participles, and
`endings[NAME].nonf[mood]` for the nonfinite forms). Each is one ending or a list of alternatives, and each alternative
is either a string or `{ending, note = KEY, brugmann = true, palatal_to_velar = true}`. In an ending, `@` stands for the
accent of the principal part's ending (`/` or nothing) and `#` for the connecting vowel of the iṣ-aorist (`i`, or `I`
for the īṣ-aorist). `note` is a key of `notes`. `brugmann` lengthens a stem `a` before a single consonant (Brugmann's
law) after sandhi, and `palatal_to_velar` turns on the sandhi option of that name for this ending alone.
]==]
local data = {}
--[==[
The tenses, in the order of `tense_order`. `moods` are the moods of the table, in the order shown; `vedic_moods` are
the ones `novedic` leaves out, and `sparse_moods` the ones shown only when one of their cells has a form (the modes
of the perfect and the aorist, which not every verb makes, and the modes of the future, which only a few verbs have).
]==]
data.tenses = {
pres = {name = "hiện tại", moods = {"indic", "imper", "optat", "inj", "subj", "part"}, vedic_moods = {subj = true},
accel = "pres"},
impf = {name = "chưa hoàn thành", moods = {"indic"}, accel = "impf"},
fut = {name = "tương lai", moods = {"indic", "subj", "optat", "imper", "part"},
sparse_moods = {subj = true, optat = true, imper = true}, accel = "fut"},
pfut = {name = "thì tương lai diễn đạt bằng cụm từ", moods = {"indic"}, accel = "peri|fut"}, -- en: "periphrastic future"
cond = {name = "điều kiện", moods = {"indic"}, accel = "cond"},
aor = {name = "thì quá khứ bất định", moods = {"indic", "inj", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true, part = true},
sparse_moods = {subj = true, optat = true, imper = true, part = true}, accel = "aor"},
prec = {name = "precative/benedictive", moods = {"optat"}, accel = "prec"},
perf = {name = "hoàn thành", moods = {"indic", "subj", "optat", "imper", "part"},
vedic_moods = {subj = true, optat = true, imper = true}, sparse_moods = {subj = true, optat = true, imper = true},
accel = "perf"},
plup = {name = "hoàn thành số nhiều", moods = {"indic"}, accel = "plup"},
pperf = {name = "thì hoàn thành diễn đạt bằng cụm từ", moods = {"indic", "part"}, accel = "peri|perf"}, -- en: "periphrastic perfect"
-- The nonfinite forms: each mood is a single slot, with no persons or voices.
nonf = {name = "dạng không nguyên mẫu", moods = {"inf", "gerund", "ppp", "pap", "gerundive"}, nonfinite = true},
}
data.tense_order = {"pres", "impf", "fut", "pfut", "cond", "aor", "prec", "perf", "plup", "pperf", "nonf"}
--[==[
The table sets: codes that show several tables in one call (`{{sa-conj|CODE|HEAD}}`). The head of a table set ends in
`ending`, and what comes before that ending is the stem. Each of the `tables` is made as a call of its own, whose head
is the stem followed by the table's `ending` (or with `augment`, the augmented stem, as in `augment` below);
`indicators` gives the other principal parts of the table in the same way. In an ending, `@` stands for the accent of
the head (`/` or nothing).
The causative tables follow Whitney §1043–1052. The present and the imperfect are made from the causative stem in -aya-,
and their passive from the stem without -aya- (§1052). The futures and the conditional put i in place of the final a of
-aya-, as does the middle of the precative, whose active is made without -aya- (§1049). The periphrastic perfect is
made from the form in -ām (§1045). The aorist is reduplicated (§1046) and can't be made from the stem, so it is given
in a call of its own. The nonfinite table comes first, with the infinitive, the gerund and the two past participles of
the causative stem (§1051).
]==]
data.table_sets = {
-- The desiderative tables follow Whitney §1034–1038. The stem is the head without -ati (or -ate, for a middle
-- desiderative, whose tables take each member's `middle_ending` and `middle_indicators`); its accent, on the
-- reduplication, stays in the present system, and the forms marked `suffix_accent` are accented on the suffix
-- instead (`@` is then the accent of the head). The aorist is the iṣ-aorist made from the stem (§1035), whose
-- injunctive stem is the stem itself (`stem_indicators` are made on the bare stem); the perfect is the periphrastic
-- one (§1034); the precative, though allowed by the grammarians, never occurs (§1035b).
desid = {
name = "thể mong muốn",
ending = "ati",
middle_ending = "ate",
tables = {
{tense = "nonf", ending = "ita@", suffix_accent = true, indicators = {inf = "itum"}},
{tense = "pres", ending = "ati", middle_ending = "ate", indicators = {pass = "ya@te"},
suffix_accent_indicators = true},
{tense = "impf", augment = true, ending = "at", middle_ending = "ata", indicators = {pass = "yata"}},
{tense = "fut", ending = "izya@ti", middle_ending = "izya@te", suffix_accent = true},
{tense = "cond", augment = true, ending = "izyat", middle_ending = "izyata"},
{tense = "pfut", ending = "itA@", suffix_accent = true},
{tense = "aor", augment = true, ending = "It", middle_ending = "-", words = {type = "iṣ"},
stem_indicators = {inj = ""}, middle_indicators = {mid = "izwa"}, middle_stem_indicators = {midinj = ""}},
{tense = "pperf", ending = "A@m", suffix_accent = true},
},
},
caus = {
name = "thể sai khiến",
ending = "a@yati",
tables = {
{tense = "nonf", ending = "a@yati"},
{tense = "pres", ending = "a@yati", indicators = {pass = "ya@te"}},
{tense = "impf", augment = true, ending = "ayat", indicators = {pass = "yata"}},
{tense = "fut", ending = "ayizya@ti"},
{tense = "cond", augment = true, ending = "ayizyat"},
{tense = "pfut", ending = "ayitA@"},
{tense = "prec", ending = "yA@t", indicators = {mid = "ayizIzwa@"}},
{tense = "pperf", ending = "ayA@m"},
},
},
}
--[==[
The augment, with `@` for its accent: `a@` before a consonant, and before a vowel the vṛddhi of that vowel
(Whitney §585).
]==]
data.augment = {
consonant = "a@",
vowels = {a = "A@", A = "A@", i = "E@", I = "E@", e = "E@", E = "E@", u = "O@", U = "O@", o = "O@", O = "O@",
f = "A@r", F = "A@r", x = "A@l", X = "A@l"},
}
data.moods = {
indic = {name = "trần thuật", accel = "ind"},
imper = {name = "mệnh lệnh", accel = "imp"},
optat = {name = "ước vọng/Khả năng", accel = "opt"},
subj = {name = "giả định", accel = "sub"},
inj = {name = "mệnh lệnh", accel = "inj"},
part = {name = "phân từ", accel = "part"},
-- The moods of the nonfinite table. Each of them is a single slot.
inf = {name = "nguyên mẫu", accel = "inf"},
gerund = {name = "danh động từ", accel = "ger"},
ppp = {name = "phân từ quá khứ bị động", accel = "past|pass|part"},
pap = {name = "phân từ quá khứ chủ động", accel = "past|act|part"},
gerundive = {name = "danh động từ", accel = "gerv"},
}
data.voices = {
act = {name = "thể chủ động", accel = "act"},
mid = {name = "thể trung gian", accel = "mid"},
pass = {name = "thể bị động", accel = "pass"},
}
data.voice_order = {"act", "mid", "pass"}
data.persons = {
{code = "3", name = "ngôi thứ ba", label = "ngôi thứ ba"},
{code = "2", name = "ngôi thứ hai", label = "ngôi thứ hai"},
{code = "1", name = "ngôi thứ nhất", label = "ngôi thứ nhất"},
}
data.numbers = {
{code = "s", name = "số ít", accel = "s"},
{code = "d", name = "số đôi", accel = "d"},
{code = "p", name = "số nhiều", accel = "p"},
}
data.notes = {
vedic = {text = "Vệ Đà", vedic = true},
rigvedic = {text = "Rigvedic", vedic = true},
later = {text = "tiếng Phạn hậu kỳ"},
epic = {text = "sử thi"},
uncertain = {text = "không chắc chắn"},
}
data.general_notes = {
periphrastic_future_middle = "The middle forms of the periphrastic future rarely occur.",
root_aorist_middle = "The middle root-aorist and the subjunctive are only used in Vedic Sanskrit.",
subjunctive = "Thể giả định chỉ dùng trong tiếng Phạn Vệ Đà.",
-- Whitney §808, §836
perfect_modes = "The subjunctive, optative and imperative of the perfect are only used in Vedic Sanskrit, and are "
.. "rare outside the Rigveda. Only the attested forms are shown.",
aorist_modes = "The subjunctive, the optative (other than the precative), the imperative and the participles of the "
.. "aorist are only used in Vedic Sanskrit.",
-- Whitney §817
pluperfect = "The pluperfect is only used in Vedic Sanskrit, and is rare even there.",
-- Whitney §842, §998
passive_aorist = "The aorist passive has only a third-person singular; the middle forms serve as the passive in the "
.. "other persons.",
-- Whitney §925; a Buddhist text has the precative middle twice (https://www.jstor.org/stable/24662164).
precative = "In Later Sanskrit, the precative active is very rare, and the precative middle virtually unknown.",
-- Whitney §587d; Oberlies (Grammar of Epic Sanskrit), pp. 178–181.
imperfect = "Trong tiếng Phạn sử thi, thì chưa hoàn thành có thể xảy ra mà không có tranh cãi.",
}
--[==[
The indicators of the inline spec (`{{sa-conj|TENSE|HEAD<NAME:VALUE.NAME>}}`). `value` is "form" (a Sanskrit form or
stem, in any script), "word" (plain text, checked against `values` if given) or {nil} (for a flag); `tenses` lists the
tenses and table sets that accept the indicator.
]==]
data.indicators = {
stem = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
["3p"] = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true}},
weakstem = {value = "form", tenses = {pres = true, impf = true, perf = true, plup = true, aor = true}},
mid = {value = "form", tenses = {aor = true, prec = true}},
midstem = {value = "form", tenses = {aor = true, prec = true}},
pass = {value = "form", tenses = {pres = true, impf = true, aor = true}},
mvstem = {value = "form", tenses = {pres = true, impf = true, aor = true, plup = true}},
inj = {value = "form", tenses = {aor = true}},
midinj = {value = "form", tenses = {aor = true}},
voice = {value = "word", values = {act = true, mid = true}, tenses = {pres = true, impf = true, fut = true,
pfut = true, cond = true, aor = true, prec = true, perf = true, plup = true, pperf = true}},
class = {value = "word", values = {["1"] = true, ["2"] = true, ["3"] = true, ["4"] = true, ["5"] = true,
["6"] = true, ["7"] = true, ["8"] = true, ["9"] = true, ["10"] = true, int = true}, tenses = {pres = true,
impf = true}},
type = {value = "word", values = {root = true, a = true, s = true, ["iṣ"] = true, ["īṣ"] = true, ["siṣ"] = true,
sa = true}, tenses = {aor = true}},
["seṭ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["veṭ"] = {tenses = {perf = true}},
novedic = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true, pperf = true, caus = true, desid = true}},
final = {value = "form", tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true,
prec = true, perf = true, plup = true}},
j = {value = "word", values = {["ṣ"] = true}, tenses = {pres = true, impf = true, fut = true, pfut = true,
cond = true, aor = true, prec = true, perf = true, plup = true}},
h = {value = "word", values = {gh = true}, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true}},
diaspirate = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
["ḷ"] = {tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true, aor = true, prec = true,
perf = true, plup = true}},
aux = {value = "word", values = {["kṛ"] = true, ["bhū"] = true, as = true}, list = true, tenses = {pperf = true}},
impf = {value = "form", tenses = {caus = true}},
gerund = {value = "form", tenses = {caus = true, nonf = true}},
inf = {value = "form", tenses = {nonf = true}},
root = {value = "form", tenses = {nonf = true}},
pre = {value = "form", list = true, tenses = {pres = true, impf = true, fut = true, pfut = true, cond = true,
aor = true, prec = true, perf = true, plup = true, pperf = true, nonf = true, caus = true, desid = true}},
["tāt"] = {tenses = {pres = true}},
}
--[==[
The athematic roots that also have a third plural in -ur in the imperfect and the injunctive (Whitney §621a:
ádviṣuḥ beside ádviṣan), keyed by the weak stem in SLP1.
]==]
data.third_plural_ur = {dviz = true, duh = true, vid = true, cakz = true, mfj = true}
--[==[
The class 3 roots in -ā whose weak stem has -ī- before a consonant (Whitney §661–666: śā, mā, hā), keyed by the weak
stem as read off the third plural, in SLP1. The value says what the optative does: hā drops the vowel (jahyā́m), the
others keep -ī- (mimīyā́t).
]==]
data.reduplicated_long_i = {SiS = "keep", mim = "keep", jah = "drop", jih = "keep"}
--[==[
The preverbs `pre:` takes (Whitney §1077–1079), keyed by their unaccented SLP1, with their accent. `nir`, `dur` and
`ut` are taken as `nis`, `dus` and `ud`, and a final ṃ as m.
]==]
data.preverbs = {
ati = "a/ti", aDi = "a/Di", anu = "a/nu", antar = "anta/r", apa = "a/pa", api = "a/pi", aBi = "aBi/", ava = "a/va",
A = "A/", ud = "u/d", upa = "u/pa", ni = "ni/", nis = "ni/s", parA = "pa/rA", pari = "pa/ri", pra = "pra/",
prati = "pra/ti", vi = "vi/", sam = "sa/m",
-- The more limited prefixes: ácha, āvís, tirás, purás, prādús, alam, śrad, hiṅ.
acCa = "a/cCa", acCA = "a/cCA", Avis = "Avi/s", tiras = "tira/s", puras = "pura/s", prAdus = "prAdu/s",
alam = "ala/m", Srat = "Sra/t", hiN = "hi/N",
-- dus is treated as a preverb in compounds such as duṣkṛta, though the language has no preverb dus.
dus = "du/s",
}
data.preverb_aliases = {nir = "nis", niH = "nis", dur = "dus", duH = "dus", ut = "ud", saM = "sam", alaM = "alam"}
--[==[
The presents that have the Vedic imperative in -tāt without `<tāt>` (Whitney §570a, §571), keyed by the head in IAST
without accents: the tāt-forms Whitney quotes, and those he gives for single verbs (§618, §654, §723, §740, §752c).
]==]
data.tat_imperative = {
["bravīti"] = true, hanti = true, vetti = true, piparti = true, ["jahāti"] = true, ["dadāti"] = true,
["dadhāti"] = true, ["kṛṇoti"] = true, karoti = true, ["gṛhṇāti"] = true, ["jānāti"] = true, avati = true,
["rakṣati"] = true, vasati = true, ["viśati"] = true, ["sṛjati"] = true, asyati = true, ["naśyati"] = true,
chyati = true, gamayati = true, ["cyāvayati"] = true, ["vārayati"] = true, ["īpsati"] = true, ["jāgarti"] = true,
bhavati = true,
}
--[==[
The perfect of each auxiliary of the periphrastic perfect, as it is written after the form in `-ām` (whose `m` becomes
`ṃ` before a consonant other than a labial). The default auxiliaries are as and kṛ, in that order.
]==]
data.periphrastic_perfect = {
default = {"as", "kṛ"},
auxiliaries = {
["kṛ"] = {
indic = {
act = {
["1s"] = "caka/ra", ["2s"] = "caka/rTa", ["3s"] = "cakA/ra",
["1d"] = "cakfva/", ["2d"] = "cakra/TuH", ["3d"] = "cakra/tuH",
["1p"] = "cakfma/", ["2p"] = "cakra/", ["3p"] = "cakru/H",
},
mid = {
["1s"] = "cakre/", ["2s"] = "cakfze/", ["3s"] = "cakre/",
["1d"] = "cakfva/he", ["2d"] = "cakrA/Te", ["3d"] = "cakrA/te",
["1p"] = "cakfma/he", ["2p"] = "cakfDve/", ["3p"] = "cakrire/",
},
},
-- FIXME: Is the periphrastic perfect ever used with a participle?
part = {act = "cakfvA/Ms", mid = "cakrARa/"},
},
["bhū"] = {
indic = {
act = {
["1s"] = "baBU/va", ["2s"] = "baBU/viTa", ["3s"] = "baBU/va",
["1d"] = "baBUviva/", ["2d"] = "baBUva/TuH", ["3d"] = "baBUva/tuH",
["1p"] = "baBUvima/", ["2p"] = "baBUva/", ["3p"] = "baBUvu/H",
},
},
part = {act = "baBUvA/Ms"},
},
as = {
indic = {
act = {
["1s"] = "A/sa", ["2s"] = "A/siTa", ["3s"] = "A/sa",
["1d"] = "Asiva/", ["2d"] = "Asa/TuH", ["3d"] = "Asa/tuH",
["1p"] = "Asima/", ["2p"] = "Asa/", ["3p"] = "Asu/H",
},
},
},
},
}
data.categories = {
["s-future"] = "Động từ với thì tương lai s tiếng Phạn",
["periphrastic future"] = "Động từ với thì tương lai diễn đạt bằng cụm từ tiếng Phạn",
["s-aorist"] = "Động từ với thì quá khứ bất định s tiếng Phạn",
["siṣ-aorist"] = "Động từ với thì quá khứ bất định siṣ tiếng Phạn",
["iṣ-aorist"] = "Động từ với thì quá khứ bất định iṣ tiếng Phạn",
["sa-aorist"] = "Động từ với thì quá khứ bất định sa tiếng Phạn",
["a-aorist"] = "Động từ với thì quá khứ bất định a tiếng Phạn",
["root-aorist"] = "Động từ với thì quá khứ bất định gốc từ tiếng Phạn",
["periphrastic perfect"] = "Động từ với thì hoàn thành diễn đạt bằng cụm từ tiếng Phạn",
}
--[==[
The fields of {{tl|sa-root deriv}}, grouped by the list they appear in. Each field is a parameter name and the label
shown after its forms. After them come the headers of the lists of derived nominals (the positional parameters) and of
prefixed roots (`prefixed=`).
]==]
data.root_derivations = {
groups = {
{
header = "Dạng trực tiếp",
fields = {
{"pres", "present"}, {"imper", "present imperative"}, {"opt", "present optative"},
{"subj", "present subjunctive"}, {"impf", "imperfect"}, {"fut", "future"}, {"pfut", "periphrastic future"},
{"cond", "conditional"}, {"aor", "aorist"}, {"paor", "periphrastic aorist"}, {"prec", "precative"},
{"bene", "precative"}, {"perf", "perfect"}, {"pperf", "periphrastic perfect"}, {"si_imper", "si-imperative"},
},
},
{
header = "Dạng gián tiếp",
fields = {
{"pass", "present passive"}, {"pass_impf", "imperfect passive"}, {"pass_aor", "aorist passive"},
{"caus", "causative"}, {"pass_caus", "causative passive"}, {"caus_aor", "causative aorist"},
{"pass_aor_caus", "causative aorist passive"}, {"desid", "desiderative"},
{"pass_desid", "desiderative passive"}, {"desid_fut", "desiderative future"},
{"desid_aor", "desiderative aorist"}, {"caus_desid", "causative of desiderative"},
{"desid_caus", "desiderative of causative"}, {"desid_desid", "desiderative of desiderative"},
{"int", "intensive"}, {"intens", "intensive"}, {"int_perf", "intensive perfect"},
{"caus_int", "causative of intensive"}, {"desid_int", "desiderative of intensive"},
},
},
{
header = "Dạng không nguyên mẫu",
fields = {
{"ppp", "past passive participle"}, {"pap", "past active participle"}, {"inf", "infinitive"},
{"gerund", "gerund"}, {"gerundive", "gerundive"}, {"caus_ppp", "causative past passive participle"},
{"caus_pap", "causative past active participle"}, {"caus_inf", "causative infinitive"},
{"caus_gerund", "causative gerund"}, {"caus_gerundive", "causative gerundive"},
{"desid_part", "desiderative participle"}, {"desid_gerundive", "desiderative gerundive"},
{"desid_caus_part", "desiderative participle of causative"}, {"int_inf", "intensive infinitive"},
{"int_part", "intensive participle"},
},
},
},
nominal_header = "Dạng phái sinh danh hóa",
prefixed_header = "Dạng tiền tố gốc từ",
}
--[==[
Forms that the sources give for particular verbs, besides the ones the module makes. Most come from Whitney's
''Sanskrit Grammar'' (cited by §). The table is keyed by tense and then by the head as written in the call, without
accents, in IAST. Each entry describes one cell (`slot`): its forms, in IAST as the table shows them, and the key of
their note in `notes` (none for a form of the same standing as the made ones). The forms are written with ḥ for a final
s and accented as Whitney accents them; where he gives no accent, a Vedic form is accented the way its class is, and
the epic forms are left unaccented. They come after the made forms, or take their place when `replaces` is set. A call
without accents gets them without accents too.
]==]
data.attested = {
pres = {
asti = { -- §636c, §636d, §613
{slot = "indic_act_1d", forms = {"sva"}, note = "epic"},
{slot = "indic_act_1p", forms = {"sma"}, note = "epic"},
{slot = "indic_act_2p", forms = {"sthána"}, note = "vedic"},
{slot = "optat_act_1d", forms = {"syāvaḥ"}, note = "epic"},
{slot = "optat_act_1p", forms = {"syāmaḥ"}, note = "epic"},
},
["īṣṭe"] = { -- §630: ī́śiṣe, ī́śidhve (and the RV ī́kṣe), ī́śiṣva; ī́śire is a present by its accent
{slot = "indic_mid_2s", forms = {"ī́śiṣe"}},
{slot = "indic_mid_2p", forms = {"ī́śidhve"}, replaces = true},
{slot = "indic_mid_3p", forms = {"ī́śire"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"ī́śiṣva"}, replaces = true},
},
["īṭṭe"] = { -- §630: ī́ḍiṣva
{slot = "imper_mid_2s", forms = {"ī́ḍiṣva"}, replaces = true},
},
["amīti"] = { -- §634: amīṣi, amīṣva
{slot = "indic_act_2s", forms = {"amīṣi"}, note = "rigvedic"},
{slot = "imper_mid_2s", forms = {"amīṣva"}, note = "vedic"},
},
["śete"] = { -- §629: śérate (and śére), śératām
{slot = "indic_mid_3p", forms = {"śérate"}, replaces = true},
{slot = "indic_mid_3p", forms = {"śére"}, note = "vedic"},
{slot = "imper_mid_3p", forms = {"śératām"}, replaces = true},
},
["ūrṇoti"] = { -- §713: ūrṇauti (as if of the root class), ūrṇu or ūrṇuhi
{slot = "indic_act_3s", forms = {"ūrṇauti"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"ūrṇu", "ūrṇuhi"}, replaces = true},
},
["āste"] = { -- §619c: ā́sīna is anomalous and isolated, and the RV has āsāná; there is no ā́sāna.
{slot = "part_mid", forms = {"ā́sīna", "āsāná"}, replaces = true},
},
hanti = { -- §637b (hanītá is accented like ghnītá)
{slot = "optat_mid_3s", forms = {"hanītá"}, note = "vedic"},
},
dogdhi = { -- §619d, §635
{slot = "part_mid", forms = {"dúhāna", "dúghāna"}, note = "vedic"},
},
["dadāti"] = { -- §654, §668 (dádātana is accented like the forms of dhā)
{slot = "imper_act_2p", forms = {"dádāta", "dádātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
["dadhāti"] = { -- §654, §668 (dhattána is accented like the other forms)
{slot = "imper_act_2p", forms = {"dhattána", "dádhāta", "dádhātana"}, note = "vedic"},
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
datte = { -- §668: the middle of dā
{slot = "indic_mid_1s", forms = {"dadé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadā́te"}, replaces = true},
},
dhatte = { -- §668: the middle of dhā
{slot = "indic_mid_1s", forms = {"dadhé"}, replaces = true},
{slot = "indic_mid_1d", forms = {"dádhvahe"}, replaces = true},
{slot = "indic_mid_1p", forms = {"dádhmahe"}, replaces = true},
{slot = "indic_mid_3d", forms = {"dadhā́te"}, replaces = true},
},
sunoti = { -- §699b, §704
{slot = "indic_mid_3p", forms = {"sunviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"sunóta", "sunótana"}, note = "vedic"},
},
["śṛṇoti"] = { -- §699b, §704 (śṛṇótana is accented like sunótana)
{slot = "indic_mid_3p", forms = {"śṛṇviré"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"śṛṇóta", "śṛṇótana"}, note = "vedic"},
},
tanoti = { -- §699a, §704 (tanóta is accented like sunóta)
{slot = "indic_mid_3p", forms = {"tanvaté"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"tanóta"}, note = "vedic"},
},
["gṛhṇāti"] = { -- §723 (gṛhṇāhí is accented like punāhí)
{slot = "imper_act_2s", forms = {"gṛhṇāhí"}, note = "vedic"},
},
},
impf = {
["āsīt"] = { -- §636c
{slot = "indic_act_2s", forms = {"ā́ḥ"}, note = "vedic"},
{slot = "indic_act_3s", forms = {"ā́ḥ"}, note = "vedic"},
},
ahan = { -- §637b
{slot = "indic_mid_3p", forms = {"áhata"}, note = "vedic"},
},
-- §631: rud, svap, an and śvas take -a- or -ī- in the second and third singular (árodat or árodīt).
["arodīt"] = {
{slot = "indic_act_2s", forms = {"árodaḥ"}},
{slot = "indic_act_3s", forms = {"árodat"}},
},
["asvapīt"] = {
{slot = "indic_act_2s", forms = {"ásvapaḥ"}},
{slot = "indic_act_3s", forms = {"ásvapat"}},
},
["ānīt"] = {
{slot = "indic_act_2s", forms = {"ā́naḥ"}},
{slot = "indic_act_3s", forms = {"ā́nat"}},
},
["aśvasīt"] = {
{slot = "indic_act_2s", forms = {"áśvasaḥ"}},
{slot = "indic_act_3s", forms = {"áśvasat"}},
},
["aśeta"] = { -- §629: áśerata (RV also áśeran)
{slot = "indic_mid_3p", forms = {"áśerata"}, replaces = true},
{slot = "indic_mid_3p", forms = {"áśeran"}, note = "rigvedic"},
},
["aurṇot"] = { -- §713: aúrṇoḥ
{slot = "indic_act_2s", forms = {"aúrṇoḥ"}, replaces = true},
},
},
aor = {
-- The modes of the reduplicated aorist (§870–871): a precative middle and imperatives with a short reduplicating
-- vowel, accented like a reduplicated imperfect.
["arīriṣat"] = {
{slot = "optat_mid_3s", forms = {"rīriṣīṣṭa"}, note = "vedic"},
},
["ajīgar"] = {
{slot = "imper_act_2d", forms = {"jigṛtám"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"jigṛtá"}, note = "rigvedic"},
},
["adīdhar"] = {
{slot = "imper_act_2d", forms = {"didhṛtam"}, note = "rigvedic"},
{slot = "imper_act_2p", forms = {"didhṛtá"}, note = "rigvedic"},
},
["apūpurat"] = {
{slot = "imper_act_3p", forms = {"pūpurantu"}, note = "vedic"},
},
-- The participles of the s-aorist (§897).
["adhākṣīt"] = {
{slot = "part_act", forms = {"dhákṣat", "dákṣat"}, note = "rigvedic"},
},
["asākṣīt"] = {
{slot = "part_act", forms = {"sákṣat"}, note = "rigvedic"},
},
["anaiṣīt"] = { -- §889a
{slot = "indic_act_3s", forms = {"ánait"}, note = "vedic"},
{slot = "inj_act_3s", forms = {"náit"}, note = "vedic"},
},
["naiṣīt"] = { -- §889a, for the injunctive given as its own head
{slot = "indic_act_3s", forms = {"náit"}, note = "vedic"},
},
-- The imperatives of the root aorist with the strong stem, beside the weak ones (§839), and bodhí, which stands
-- for bhūdhí.
["abhūt"] = {
{slot = "imper_act_2s", forms = {"bodhí"}, note = "vedic", replaces = true},
},
["adhāt"] = {
{slot = "imper_act_2p", forms = {"dhétana"}, note = "vedic"},
},
["agan"] = {
{slot = "imper_act_2p", forms = {"gánta", "gántana"}, note = "vedic"},
},
["ahet"] = {
{slot = "imper_act_2p", forms = {"héta"}, note = "vedic"},
},
["akar"] = {
{slot = "imper_act_2p", forms = {"kárta", "kártana"}, note = "vedic"},
},
["aśrot"] = {
{slot = "imper_act_2p", forms = {"śróta"}, note = "vedic"},
},
["avar"] = {
{slot = "imper_act_2d", forms = {"vártam"}, note = "vedic"},
},
["avark"] = {
{slot = "imper_act_2d", forms = {"várktam"}, note = "vedic"},
},
["avart"] = {
{slot = "imper_act_2p", forms = {"vártta"}, note = "vedic"},
},
},
-- The modes of the s-future are "of the utmost rarity" (Whitney §938); the forms in -dhvam may be imperatives or an
-- epic use of the secondary ending for the primary.
fut = {
["kariṣyati"] = {
{slot = "subj_act_2s", forms = {"kariṣyā́ḥ"}, note = "rigvedic"},
},
["dhakṣyati"] = {
{slot = "optat_act_3s", forms = {"dhakṣyet"}, note = "epic"},
},
["maṃsyate"] = {
{slot = "optat_mid_3p", forms = {"maṃsyeran"}, note = "epic"},
},
["drakṣyati"] = {
{slot = "optat_mid_3s", forms = {"drakṣyeta"}, note = "epic"},
},
patsyati = {
{slot = "imper_act_3p", forms = {"patsyantu"}, note = "epic"},
},
["vetsyati"] = {
{slot = "imper_mid_2p", forms = {"vetsyadhvam"}, note = "uncertain"},
},
["saviṣyati"] = {
{slot = "imper_mid_2p", forms = {"saviṣyadhvam"}, note = "uncertain"},
},
["bhaviṣyati"] = {
{slot = "imper_mid_2p", forms = {"bhaviṣyadhvam"}, note = "uncertain"},
},
["mokṣyati"] = {
{slot = "imper_mid_2p", forms = {"mokṣyadhvam"}, note = "uncertain"},
},
},
perf = {
-- The modes of the perfect are only shown where the texts attest them (Whitney §808–816). The regular forms
-- (§810, §812–813) have the subjunctive on the strong stem, accented like the strong forms, the optative and
-- most of the imperative on the weak stem, accented on the ending; the others (§811, §814–816) have the
-- subjunctive accented on the reduplication (jújoṣati) or imperatives in -atam, -ata and -asva. Where Whitney
-- gives no accent, a form is accented that way.
["babhūva"] = { -- §808a, §812, §813
{slot = "optat_act_2s", forms = {"babhūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"babhūyā́t"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"babhū́tu"}, note = "vedic"},
},
["bubodha"] = { -- §810
{slot = "subj_act_2s", forms = {"bubódhaḥ"}, note = "vedic"},
},
["cakāra"] = { -- §812c
{slot = "optat_act_2s", forms = {"cakriyā́ḥ"}, note = "vedic"},
},
["cakṣama"] = { -- §812
{slot = "optat_mid_2s", forms = {"cakṣamīthā́ḥ"}, note = "vedic"},
},
["dadharṣa"] = { -- §810, §811b, §816
{slot = "subj_act_3s", forms = {"dadhárṣati"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"dádhṛṣate"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"dádhṛṣanta"}, note = "vedic"},
},
["dadarśa"] = { -- §813 (Atharvaveda)
{slot = "imper_mid_3p", forms = {"dadṛśrā́m"}, note = "vedic"},
},
["jabhāra"] = { -- §810
{slot = "subj_act_3s", forms = {"jabhárat"}, note = "vedic"},
},
["jagāma"] = { -- §805a, §812
{slot = "part_act", forms = {"jaganvā́ṃs"}},
{slot = "optat_act_1s", forms = {"jagamyā́m"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"jagamyā́t"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"jagmyā́tam"}, note = "vedic"},
},
["jaghāna"] = { -- §805a
{slot = "part_act", forms = {"jaghanvā́ṃs"}},
},
["jaghāsa"] = { -- §812c
{slot = "optat_act_3s", forms = {"jakṣīyā́t"}, note = "vedic"},
},
["jujoṣa"] = { -- §811a, §813, §814
{slot = "subj_act_2s", forms = {"jújoṣasi"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"jújoṣati"}, note = "vedic"},
{slot = "subj_act_2d", forms = {"jújoṣathaḥ"}, note = "vedic"},
{slot = "subj_act_2p", forms = {"jújoṣatha"}, note = "vedic"},
{slot = "subj_mid_3s", forms = {"jújoṣate"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"jujoṣatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"jujuṣṭána"}, note = "vedic"},
},
["mamārja"] = { -- §812
{slot = "optat_mid_3s", forms = {"māmṛjītá"}, note = "vedic"},
},
["mumoca"] = { -- §811b, §813, §814, §816
{slot = "subj_act_2s", forms = {"mumócaḥ", "múmucaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"múmocati"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"mumugdhí"}, note = "vedic"},
{slot = "imper_act_3s", forms = {"mumóktu"}, note = "vedic"},
{slot = "imper_act_2d", forms = {"mumuktám", "mumócatam"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"mumócata"}, note = "vedic"},
},
["paparca"] = { -- §812
{slot = "optat_act_1s", forms = {"papṛcyā́m"}, note = "vedic"},
},
["papau"] = { -- §812c
{slot = "optat_act_3s", forms = {"papīyā́t"}, note = "vedic"},
},
["piprāya"] = { -- §810, §813, §814, §816
{slot = "subj_act_2s", forms = {"pipráyaḥ"}, note = "vedic"},
{slot = "subj_act_3s", forms = {"pipráyat"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"piprīhí"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"pipráyasva"}, note = "vedic"},
},
["rireca"] = { -- §812
{slot = "optat_act_1s", forms = {"riricyā́m"}, note = "vedic"},
},
["śuśoca"] = { -- §812, §813
{slot = "optat_mid_3s", forms = {"śuśucītá"}, note = "vedic"},
{slot = "imper_act_2s", forms = {"śuśugdhí"}, note = "vedic"},
},
["śuśrāva"] = { -- §812c
{slot = "optat_act_2s", forms = {"śuśrūyā́ḥ"}, note = "vedic"},
{slot = "optat_act_2d", forms = {"śuśrūyā́tam"}, note = "vedic"},
},
["tatāna"] = { -- §810, §812
{slot = "subj_act_1p", forms = {"tatánāma"}, note = "vedic"},
{slot = "subj_act_3p", forms = {"tatánan"}, note = "vedic"},
{slot = "subj_mid_3p", forms = {"tatánanta"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"tatanyúḥ"}, note = "vedic"},
},
["tatāpa"] = { -- §810
{slot = "subj_mid_3s", forms = {"tatápate"}, note = "vedic"},
},
["vavarta"] = { -- §810, §811b, §812, §813
{slot = "subj_act_3s", forms = {"vavártati", "vávṛtat"}, note = "vedic"},
{slot = "optat_act_2s", forms = {"vavṛtyā́ḥ"}, note = "vedic"},
{slot = "optat_act_3s", forms = {"vavṛtyā́t"}, note = "vedic"},
{slot = "optat_act_1p", forms = {"vavṛtyā́ma"}, note = "vedic"},
{slot = "optat_act_3p", forms = {"vavṛtyúḥ"}, note = "vedic"},
{slot = "optat_mid_1s", forms = {"vavṛtīyá"}, note = "vedic"},
{slot = "optat_mid_3s", forms = {"vavṛtītá"}, note = "vedic"},
{slot = "optat_mid_1p", forms = {"vavṛtīmáhi"}, note = "vedic"},
{slot = "imper_act_2p", forms = {"vavṛttána"}, note = "vedic"},
{slot = "imper_mid_2s", forms = {"vavṛtsvá"}, note = "vedic"},
{slot = "imper_mid_2p", forms = {"vavṛddhvám"}, note = "vedic"},
},
["viveśa"] = { -- §812
{slot = "optat_act_2s", forms = {"viviśyā́ḥ"}, note = "vedic"},
},
["yuyoja"] = { -- §810
{slot = "subj_mid_3s", forms = {"yuyójate"}, note = "vedic"},
},
},
}
data.endings = {
["present thematic"] = {
indic = {
act = {
["1s"] = "A@mi",
["2s"] = "a@si",
["3s"] = "a@ti",
["1d"] = "A@vas",
["2d"] = "a@Tas",
["3d"] = "a@tas",
["1p"] = {"A@mas", {"A@masi", note = "vedic"}},
["2p"] = "a@Ta",
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2s"] = "a@se",
["3s"] = "a@te",
["1d"] = "A@vahe",
["2d"] = "e@Te",
["3d"] = "e@te",
["1p"] = "A@mahe",
["2p"] = "a@Dve",
["3p"] = "a@nte",
},
},
imper = {
act = {
["1s"] = "A@ni",
["2s"] = "a@",
["3s"] = "a@tu",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@ntu",
},
mid = {
["1s"] = "E@",
["2s"] = "a@sva",
["3s"] = "a@tAm",
["1d"] = "A@vahE",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahE",
["2p"] = "a@Dvam",
["3p"] = "a@ntAm",
},
},
optat = {
act = {
["1s"] = "e@yam",
["2s"] = "e@s",
["3s"] = "e@t",
["1d"] = "e@va",
["2d"] = "e@tam",
["3d"] = "e@tAm",
["1p"] = "e@ma",
["2p"] = "e@ta",
["3p"] = "e@yur",
},
mid = {
["1s"] = "e@ya",
["2s"] = "e@TAs",
["3s"] = "e@ta",
["1d"] = "e@vahi",
["2d"] = "e@yATAm",
["3d"] = "e@yAtAm",
["1p"] = "e@mahi",
["2p"] = "e@Dvam",
["3p"] = "e@ran",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = "A@mahE",
["2p"] = "A@DvE",
["3p"] = {"a@nta", "A@ntE"},
},
},
part = {
act = "a@t",
mid = "a@mAna",
},
},
["present strong before consonant"] = {
indic = {
act = {
["1s"] = "mi",
["2s"] = "si",
["3s"] = "ti",
},
},
imper = {
act = {
["3s"] = "tu",
},
},
inj = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["present strong before vowel"] = {
imper = {
act = {
["1s"] = "Ani",
["1d"] = "Ava",
["1p"] = "Ama",
},
mid = {
["1s"] = "E",
["1d"] = "AvahE",
["1p"] = "AmahE",
},
},
inj = {
act = {
["1s"] = "am",
},
},
subj = {
act = {
["1s"] = {"Ani", {"A", note = "rigvedic"}},
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = "an",
},
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = "AmahE",
["2p"] = {"aDve", "ADvE"},
["3p"] = {"anta", "AntE"},
},
},
},
["present weak before consonant"] = {
indic = {
act = {
["2d"] = "Ta@s",
["3d"] = "ta@s",
["2p"] = "Ta@",
},
mid = {
["2s"] = "se@",
["3s"] = "te@",
["2p"] = "Dve@",
},
},
imper = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "sva@",
["3s"] = "tA@m",
["2p"] = "Dva@m",
},
},
inj = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["present weak before m v y"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
optat = {
act = {
["1s"] = "yA@m",
["2s"] = "yA@s",
["3s"] = "yA@t",
["1d"] = "yA@va",
["2d"] = "yA@tam",
["3d"] = "yA@tAm",
["1p"] = "yA@ma",
["2p"] = "yA@ta",
["3p"] = "yu@s",
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present weak before vowel"] = {
indic = {
act = {
["3p"] = "a@nti",
},
mid = {
["1s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "a@te",
},
},
imper = {
act = {
["3p"] = "a@ntu",
},
mid = {
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@tAm",
},
},
optat = {
mid = {
["1s"] = "Iya@",
["2s"] = "ITA@s",
["3s"] = "Ita@",
["1d"] = "Iva@hi",
["2d"] = "IyA@TAm",
["3d"] = "IyA@tAm",
["1p"] = "Ima@hi",
["2p"] = "IDva@m",
["3p"] = "Ira@n",
},
},
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
part = {
act = "a@t",
mid = "Ana@",
},
},
["present reduplicated weak before vowel"] = {
indic = {
act = {
["3p"] = "ati",
},
mid = {
["1s"] = "e",
["2d"] = "ATe",
["3d"] = "Ate",
["3p"] = "ate",
},
},
imper = {
act = {
["3p"] = "atu",
},
mid = {
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "atAm",
},
},
optat = {
mid = {
["1s"] = "Iya",
["2s"] = "ITAs",
["3s"] = "Ita",
["1d"] = "Ivahi",
["2d"] = "IyATAm",
["3d"] = "IyAtAm",
["1p"] = "Imahi",
["2p"] = "IDvam",
["3p"] = "Iran",
},
},
inj = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
part = {
act = "at",
mid = "Ana",
},
},
["present nu extra"] = {
indic = {
act = {
["1d"] = "va@s",
["1p"] = {"ma@s", {"ma@si", note = "vedic"}},
},
mid = {
["1d"] = "va@he",
["1p"] = "ma@he",
},
},
imper = {
act = {
["2s"] = {"u@", {"uhi@", note = "vedic"}},
},
},
inj = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["present intensive extra"] = {
indic = {
act = {
["1s"] = "Imi",
["2s"] = "Izi",
["3s"] = "Iti",
},
},
imper = {
act = {
["3s"] = "Itu",
},
},
inj = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["present imperative 2s dhi"] = {
imper = {
act = {
["2s"] = "Di@",
},
},
},
["present imperative 2s dhi vedic"] = {
imper = {
act = {
["2s"] = {{"Di@", note = "vedic"}},
},
},
},
["present imperative 2s hi"] = {
imper = {
act = {
["2s"] = "hi@",
},
},
},
["present imperative 2s u"] = {
imper = {
act = {
["2s"] = "u@",
},
},
},
["present 2s si"] = {
indic = {
act = {
["2s"] = "si",
},
},
},
["present imperative 2s ana"] = {
imper = {
act = {
["2s"] = "Ana@",
},
},
},
["present class 10 participle"] = {
part = {
mid = {{"Ana", note = "later"}},
},
},
["present injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["present injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["present injunctive unaccented 3p ur"] = {
inj = {
act = {
["3p"] = "ur",
},
},
},
["imperfect thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
mid = {
["1s"] = "e@",
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["imperfect strong before consonant"] = {
indic = {
act = {
["2s"] = "s",
["3s"] = "t",
},
},
},
["imperfect strong before vowel"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["imperfect weak before consonant"] = {
indic = {
act = {
["2d"] = "ta@m",
["3d"] = "tA@m",
["2p"] = "ta@",
},
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["imperfect weak before m v y"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["imperfect weak before vowel"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@ta",
},
},
},
["imperfect 3p an"] = {
indic = {
act = {
["3p"] = "a@n",
},
},
},
["imperfect 3p ur"] = {
indic = {
act = {
["3p"] = "u@r",
},
},
},
["imperfect intensive extra"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["future"] = {
indic = {
act = {
["1s"] = "syA@mi",
["2s"] = "sya@si",
["3s"] = "sya@ti",
["1d"] = "syA@vas",
["2d"] = "sya@Tas",
["3d"] = "sya@tas",
["1p"] = {"syA@mas", {"syA@masi", note = "vedic"}},
["2p"] = "sya@Ta",
["3p"] = "sya@nti",
},
mid = {
["1s"] = "sye@",
["2s"] = "sya@se",
["3s"] = "sya@te",
["1d"] = "syA@vahe",
["2d"] = "sye@Te",
["3d"] = "sye@te",
["1p"] = "syA@mahe",
["2p"] = "sya@Dve",
["3p"] = "sya@nte",
},
},
part = {
act = "sya@t",
mid = "sya@mAna",
},
},
["periphrastic future"] = {
indic = {
act = {
["1s"] = "smi",
["2s"] = "si",
["3s"] = "",
["1d"] = "svas",
["2d"] = "sTas",
["3d"] = {"rO", {"rA", note = "vedic"}}, -- gantārā occurs in Rigveda 8.13.10.
["1p"] = {"smas", {"smasi", note = "vedic"}},
["2p"] = "sTa",
["3p"] = "ras",
},
mid = {
["1s"] = "he",
["2s"] = "se",
["3s"] = "",
["1d"] = "svahe",
["2d"] = "sATe",
["3d"] = "rO",
["1p"] = "smahe",
["2p"] = "Dve",
["3p"] = "ras",
},
},
},
["conditional"] = {
indic = {
act = {
["1s"] = "syam",
["2s"] = "syas",
["3s"] = "syat",
["1d"] = "syAva",
["2d"] = "syatam",
["3d"] = "syatAm",
["1p"] = "syAma",
["2p"] = "syata",
["3p"] = "syan",
},
mid = {
["1s"] = "sye",
["2s"] = "syaTAs",
["3s"] = "syata",
["1d"] = "syAvahi",
["2d"] = "syeTAm",
["3d"] = "syetAm",
["1p"] = "syAmahi",
["2p"] = "syaDvam",
["3p"] = "syanta",
},
},
},
["aorist is"] = {
indic = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is injunctive"] = {
subj = {
act = {
["1s"] = "#zAni",
["2s"] = {"#zas", "#zasi"},
["3s"] = {"#zat", "#zati"},
["1d"] = "#zAva",
["2d"] = "#zaTas",
["3d"] = "#zatas",
["1p"] = "#zAma",
["2p"] = "#zaTa",
["3p"] = "#zan",
},
},
inj = {
act = {
["1s"] = "#zam",
["2s"] = "Is",
["3s"] = "It",
["1d"] = "#zva",
["2d"] = "#zwam",
["3d"] = "#zwAm",
["1p"] = "#zma",
["2p"] = "#zwa",
["3p"] = "#zur",
},
},
},
["aorist is middle"] = {
indic = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist is middle injunctive"] = {
subj = {
mid = {
["1s"] = "#zE",
["2s"] = {"#zase", "#zAsE"},
["3s"] = {"#zate", "#zAtE"},
["1d"] = "#zAvahe",
["2d"] = "#zETe",
["3d"] = "#zEte",
["1p"] = {"#zAmahe", "#zAmahE"},
["2p"] = {"#zaDve", "#zADvE"},
["3p"] = "#zanta",
},
},
inj = {
mid = {
["1s"] = "#zi",
["2s"] = "#zWAs",
["3s"] = "#zwa",
["1d"] = "#zvahi",
["2d"] = "#zATAm",
["3d"] = "#zAtAm",
["1p"] = "#zmahi",
["2p"] = "#Qvam",
["3p"] = "#zata",
},
},
},
["aorist s"] = {
indic = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s injunctive"] = {
inj = {
act = {
["1s"] = "sam",
["2s"] = {"sIs", {"s", note = "vedic"}},
["3s"] = {"sIt", {"s", note = "vedic"}},
["1d"] = "sva",
["2d"] = "stam",
["3d"] = "stAm",
["1p"] = "sma",
["2p"] = "sta",
["3p"] = "sur",
},
},
},
["aorist s subjunctive"] = {
subj = {
act = {
["1s"] = "sAni",
["2s"] = {"sas", "sasi"},
["3s"] = {"sat", "sati"},
["1d"] = "sAva",
["2d"] = "saTas",
["3d"] = "satas",
["1p"] = "sAma",
["2p"] = "saTa",
["3p"] = "san",
},
},
},
["aorist s middle"] = {
indic = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle injunctive"] = {
inj = {
mid = {
["1s"] = "si",
["2s"] = "sTAs",
["3s"] = "sta",
["1d"] = "svahi",
["2d"] = "sATAm",
["3d"] = "sAtAm",
["1p"] = "smahi",
["2p"] = "sDvam",
["3p"] = "sata",
},
},
},
["aorist s middle subjunctive"] = {
subj = {
mid = {
["1s"] = "sE",
["2s"] = {"sase", "sAsE"},
["3s"] = {"sate", "sAtE"},
["1d"] = "sAvahE",
["2d"] = "sETe",
["3d"] = "sEte",
["1p"] = {"sAmahe", "sAmahE"},
["2p"] = {"saDve", "sADvE"},
["3p"] = "santa",
},
},
},
["aorist thematic"] = {
indic = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist thematic injunctive"] = {
subj = {
act = {
["1s"] = "A@ni",
["2s"] = {"A@s", "A@si"},
["3s"] = {"A@t", "A@ti"},
["1d"] = "A@va",
["2d"] = "A@Tas",
["3d"] = "A@tas",
["1p"] = "A@ma",
["2p"] = "A@Ta",
["3p"] = "A@n",
},
},
inj = {
act = {
["1s"] = "a@m",
["2s"] = "a@s",
["3s"] = "a@t",
["1d"] = "A@va",
["2d"] = "a@tam",
["3d"] = "a@tAm",
["1p"] = "A@ma",
["2p"] = "a@ta",
["3p"] = "a@n",
},
},
},
["aorist sa middle"] = {
indic = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist sa middle injunctive"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
},
},
},
["aorist a middle"] = {
indic = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist a middle injunctive"] = {
inj = {
mid = {
["1s"] = "e@",
["2d"] = "e@TAm",
["3d"] = "e@tAm",
},
},
},
["aorist thematic middle"] = {
indic = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist thematic middle injunctive"] = {
subj = {
mid = {
["1s"] = "E@",
["2s"] = {"A@se", "A@sE"},
["3s"] = {"A@te", "A@tE"},
["1d"] = "A@vahE",
["2d"] = "E@Te",
["3d"] = "E@te",
["1p"] = {"A@mahe", "A@mahE"},
["2p"] = {"A@Dve", "A@DvE"},
["3p"] = "a@nta",
},
},
inj = {
mid = {
["2s"] = "a@TAs",
["3s"] = "a@ta",
["1d"] = "A@vahi",
["1p"] = "A@mahi",
["2p"] = "a@Dvam",
["3p"] = "a@nta",
},
},
},
["aorist root"] = {
indic = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root injunctive"] = {
subj = {
act = {
["1s"] = "Ani",
["2s"] = {"as", "asi"},
["3s"] = {"at", "ati"},
["1d"] = "Ava",
["2d"] = "aTas",
["3d"] = "atas",
["1p"] = "Ama",
["2p"] = "aTa",
["3p"] = {"an", "anti"},
},
},
inj = {
act = {
["1s"] = "am",
["2s"] = "s",
["3s"] = "t",
["1d"] = "va",
["2d"] = "tam",
["3d"] = "tAm",
["1p"] = "ma",
["2p"] = "ta",
},
},
},
["aorist root 1s"] = {
indic = {
act = {
["1s"] = "am",
},
},
},
["aorist root injunctive 1s"] = {
inj = {
act = {
["1s"] = "am",
},
},
},
["aorist root 3p an"] = {
indic = {
act = {
["3p"] = "an",
},
},
},
["aorist root injunctive 3p an"] = {
inj = {
act = {
["3p"] = "a@n",
},
},
},
["aorist root 3p ur"] = {
indic = {
act = {
["3p"] = "ur",
},
},
},
["aorist root injunctive 3p ur"] = {
inj = {
act = {
["3p"] = "u@r",
},
},
},
["aorist root middle before vowel"] = {
indic = {
mid = {
["1s"] = "i",
["2d"] = "ATAm",
["3d"] = "AtAm",
["3p"] = "ata",
},
},
},
["aorist root middle before consonant"] = {
indic = {
mid = {
["2s"] = "TAs",
["3s"] = "ta",
["2p"] = "Dvam",
},
},
},
["aorist root middle before m v y"] = {
indic = {
mid = {
["1d"] = "vahi",
["1p"] = "mahi",
},
},
},
["aorist root middle injunctive before vowel"] = {
inj = {
mid = {
["1s"] = "i@",
["2d"] = "A@TAm",
["3d"] = "A@tAm",
["3p"] = "a@nta",
},
},
},
["aorist root middle injunctive before consonant"] = {
inj = {
mid = {
["2s"] = "TA@s",
["3s"] = "ta@",
["2p"] = "Dva@m",
},
},
},
["aorist root middle injunctive before m v y"] = {
inj = {
mid = {
["1d"] = "va@hi",
["1p"] = "ma@hi",
},
},
},
["aorist root middle subjunctive"] = {
subj = {
mid = {
["1s"] = "E",
["2s"] = {"ase", "AsE"},
["3s"] = {"ate", "AtE"},
["1d"] = "AvahE",
["2d"] = "ETe",
["3d"] = "Ete",
["1p"] = {"Amahe", "AmahE"},
["2p"] = {"aDve", "ADvE"},
["3p"] = "anta",
},
},
},
-- The imperative of the iṣ-aorist (Whitney §908: aviḍḍhí, aviṣṭu, aviṣṭám, aviṣṭána; kramiṣṭam), accented on the
-- ending, and its middle optative, the precative middle on the iṣ-stem (§907: janiṣīya, edhiṣīmáhi).
["aorist is middle optative"] = {
optat = {
mid = {
["1s"] = "#zIya@",
["2s"] = "#zIzWA@s",
["3s"] = "#zIzwa@",
["1d"] = "#zIva@hi",
["1p"] = "#zIma@hi",
["2p"] = "#zIQva@m",
["3p"] = "#zIra@n",
},
},
},
["precative"] = {
optat = {
act = {
["1s"] = "yA@sam",
["2s"] = "yA@s",
["3s"] = {"yA@t", {"yA@s", note = "vedic"}},
["1d"] = "yA@sva",
["2d"] = "yA@stam",
["3d"] = "yA@stAm",
["1p"] = "yA@sma",
["2p"] = "yA@sta",
["3p"] = "yA@sur",
},
},
},
["precative middle"] = {
optat = {
mid = {
["1s"] = "sIya@",
["2s"] = "sIzWA@s",
["3s"] = "sIzwa@",
["1d"] = "sIva@hi",
["2d"] = {{"sIyA@sTAm", note = "uncertain"}},
["3d"] = {{"sIyA@stAm", note = "uncertain"}},
["1p"] = "sIma@hi",
["2p"] = "sIQva@m",
["3p"] = "sIra@n",
},
},
},
["perfect weak before consonant"] = {
indic = {
act = {
["1d"] = "va@",
["1p"] = "ma@",
},
mid = {
["2s"] = "se@",
["1d"] = "va@he",
["1p"] = "ma@he",
["2p"] = "Dve@",
},
},
},
["perfect weak before vowel"] = {
indic = {
act = {
["2d"] = "a@Tur",
["3d"] = "a@tur",
["2p"] = "a@",
["3p"] = "u@s",
},
mid = {
["1s"] = "e@",
["3s"] = "e@",
["2d"] = "A@Te",
["3d"] = "A@te",
["3p"] = "ire@",
},
},
part = {
mid = "Ana@",
},
},
["perfect vedic anit"] = {
indic = {
act = {
["1d"] = {{"va@", note = "vedic"}},
["1p"] = {{"ma@", note = "vedic"}},
},
mid = {
["2s"] = {{"se@", note = "vedic"}},
["1d"] = {{"va@he", note = "vedic"}},
["1p"] = {{"ma@he", note = "vedic"}},
["2p"] = {{"Dve@", note = "vedic"}},
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect vedic anit middle 3p"] = {
indic = {
mid = {
["3p"] = {{"re@", note = "vedic"}},
},
},
},
["perfect anit participle"] = {
part = {
act = {{"vA@Ms", palatal_to_velar = true}},
},
},
["perfect set participle"] = {
part = {
act = "ivA@Ms",
},
},
["perfect au"] = {
indic = {
act = {
["1s"] = "O@",
["2s"] = {"A@Ta", {"iTa@", note = "later"}},
["3s"] = "O@",
},
},
},
["perfect weak 2s itha"] = {
indic = {
act = {
["2s"] = {{"iTa@", note = "later"}},
},
},
},
["perfect 2s tha"] = {
indic = {
act = {
["2s"] = "Ta",
},
},
},
["perfect 2s itha"] = {
indic = {
act = {
["2s"] = "iTa",
},
},
},
["perfect 2s itha later"] = {
indic = {
act = {
["2s"] = {{"iTa", note = "later"}},
},
},
},
["perfect 2s tha vedic"] = {
indic = {
act = {
["2s"] = {{"Ta", note = "vedic"}},
},
},
},
["perfect strong"] = {
indic = {
act = {
["1s"] = "a",
["3s"] = "a",
},
},
},
["perfect strong brugmann"] = {
indic = {
act = {
-- Only 3 verbs have the vṛddhi form in Vedic (Whitney §793d).
["1s"] = {"a", {"a", note = "later", brugmann = true}},
["3s"] = {{"a", brugmann = true}},
},
},
},
-- The Vedic third plural middle of the pluperfect in -iran (Whitney §818a: acakriran, ajagmiran).
-- The active first and second plural of the pluperfect, which have the strong stem (Whitney §818a: ájaganma,
-- ájaganta, ájagantana, ajabhartana).
["pluperfect strong plural"] = {
indic = {
act = {
["1p"] = "ma@",
["2p"] = {"ta@", "tana@"},
},
},
},
-- The second and third singular active of a pluperfect stem ending in a consonant, with an inserted -ī- (Whitney
-- §819: ábubhojīs, arirecīt), beside the forms without it.
["pluperfect 2s 3s i"] = {
indic = {
act = {
["2s"] = "Is",
["3s"] = "It",
},
},
},
["pluperfect middle 3p iran"] = {
indic = {
mid = {
["3p"] = {{"iran", note = "vedic"}},
},
},
},
-- The Vedic imperative in -tāt (Whitney §570), on the weak stem of an athematic present or the stem of a thematic
-- one. It is mostly a second singular (§571).
["present imperative tat"] = {
imper = {
act = {
["2s"] = {{"tA@t", note = "vedic"}},
},
},
},
["present thematic tat"] = {
imper = {
act = {
["2s"] = {{"a@tAt", note = "vedic"}},
},
},
},
-- The aorist passive in -i (Whitney §842–844), made from its augmented stem and, without the augment, accented on
-- the root (§844c).
["aorist passive"] = {
indic = {
pass = {
["3s"] = "i",
},
},
inj = {
pass = {
["3s"] = "i",
},
},
},
-- The nonfinite forms of a causative (Whitney §1051). The infinitive and the gerundive in -ya are accented on the
-- root, just as with the simple root (§972, §963, §1051h), so the analysis supplies an accented stem and the ending
-- itself is unaccented; the gerundive in -tavya has the svarita of accented texts (§964), given as `@`.
["causative infinitive"] = {
nonf = {inf = "ayitum", gerundive = "ya"},
},
["causative nonfinite"] = {
nonf = {gerund = "ayitvA@", ppp = "ita@", pap = "ita@vat"},
},
["causative gerundive tavya"] = {
nonf = {gerundive = "ayitavya@"},
},
-- The gerundive in -anīya (§965), from the causatively strengthened root or the guṇa of a simple root (§1150).
["gerundive aniya"] = {
nonf = {gerundive = "anI@ya"},
},
-- The nonfinite forms of a simple verb: the past participles (the head itself and -vat, §959), the gerund in -tvā
-- made like the participle (§991), and from the stem of the infinitive, the infinitive and the gerundive in -tavya
-- (§968, §964).
["past participles"] = {
nonf = {ppp = "", pap = "vat"},
},
["gerund tva"] = {
nonf = {gerund = "vA@"},
},
-- The gerund in -ya of a verb with a preverb (§990, §992; with -ayya for a causative whose root is unchanged,
-- §1051d), on a stem accented on the root. It is made into the slot `gerund_ya`, which takes the place of the
-- gerund once the preverbs are added.
["gerund ya"] = {
nonf = {gerund_ya = "ya"},
},
["gerund ayya"] = {
nonf = {gerund_ya = "ayya"},
},
["infinitive"] = {
nonf = {inf = "um"},
},
["gerundive tavya"] = {
nonf = {gerundive = "avya@"},
},
}
return data
pkbqu28s0yg8du5grpdzhsua32lw3a2
kobieta
0
406213
2572865
2423928
2026-10-23T05:56:08Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572865
wikitext
text/x-wiki
{{also|kobieta|kobietą|kobiéta|kòbiéta|kòbiétą|kòbiétã|kóbieta}}
=={{langname|pl}}==
{{wp|pl:}}
{{img
|image1=Woman Montage (1).jpg|caption1={{lang|pl|kobiety}}
}}
==={{section|etym}}===
{{etymon|pl|id=phụ nữ}}
{{rfe|pl}}
==={{section|pron}}===
{{pl-pr|a=Pl-#.ogg;LL-Q809 (pol)-Gower-#.wav|mp=[ét]|CGP=#|pdl=#|MB=#|WL=#|low=#|kra=#|mas=#}}
==={{section|n}}===
{{pl-noun|f|dim=kobietka|aug=kobiecisko|adj=kobiecy,kobiecki<l:obsolete>}}
# [[phụ nữ|Phụ nữ]].
#: {{syn|pl|białogłowa|dama|facetka<q:thông tục>|niewiasta|kobiałka<q:hài hước>|żona<q:không còn dùng>}}
#: {{cot|pl|mężczyzna}}
# {{lb|pl|colloquial|or|dialectal|Krajna|Wielkopolska |Masuria|Jabłonka|Bogacko|Podlachia|Tykocin|Gwary Mazowsza|Czersk|Łowicz|Lubelszczyzny Zachodniej|Chmielnik|Rzeczyca Księża}} [[phụ nữ|Phụ nữ]] ([[vợ]] hoặc [[người yêu]]).
===={{section|decl}}====
{{pl-ndecl|kobieta<f>}}
Tiếng Ba Lan trung đại:
{{pl-mid-decl-noun
|noms=kobieta
|gens=kobiety/kobietę
|dats=kobiecie
|accs=-
|inss=-
|locs=-
|vocs=-
|nomp=kobiety
|genp=-
|datp=-
|accp=kobiety
|insp=kobietami
|locp=kobietach
|vocp=-
}}
===={{section|drv}}====
{{col|pl|title=danh từ|kobieta fatalna|kobieta luksusowa|kobieta publiczna|kobieta sukcesu|kobieta z przeszłością|kobieciarz|kobieciątko|kobiecina|kobieton}}
{{pl-derived verbs|-/być kobietą}}
===={{section|rel}}====
{{col|pl|title=phó từ|kobieco}}
{{col|pl|title=danh từ|kobieciarstwo|kobiecinka|kobiecość}}
===={{section|syn}}====
{{dial syn|pl}}
===={{section|desc}}====
* {{desc|be|кабе́та|bor=1}}
* {{desc|csb|kòbiéta|bor=1}}
* {{desc|szl|kobiyta|bor=1}}
* {{desc|zlw-slv|kôbjéta|bor=1}}
* {{desc|uk|кобі́та|bor=1}}
==={{section|further}}===
* Tiếng Ba Lan hiện tại tiêu chuẩn:
** {{R:pl:WSJP||3950}}
** {{R:pl:PWN}}
** {{R:pl:PSWP}}
** {{R:pl:SGJP|+|8306}}
** {{R:pl:USJP}}
** {{R:pl:NFJP}}
** {{R:pl:SPP||135}}
* Tiếng Ba Lan trung đại:
** {{R:pl:SXVII|KOBIETA|19831||13.03.2023}}
* Từ điển lịch sử:
** {{R:pl:SJP1807}}
** {{R:pl:SJP1861}}
** {{R:pl:SJP1900||383|2}}
* Từ điển phương ngữ:
** {{R:pl:SGP1900||387|2}}
** {{R:pl:Świderska:1929|kob́eta|106}}
** {{R:pl:Kęcińska:2004||45}}
** {{R:pl:SgOWiM|kobieta|233|3}}
j8gvcv14oiaks4zzs06ai3bqxzpepi0
नदी
0
410112
2572893
2564977
2026-10-23T06:45:29Z
Hiyuune
50834
2572893
wikitext
text/x-wiki
{{also|नाद|नींद}}
=={{langname|bho}}==
==={{section|etym}}===
{{lbor|bho|sa|नदी}}. {{dbt|bho|नद्दी}}.
==={{section|n}}===
{{bho-noun|g=f}}
# [[sông|Sông]].
{{C|bho|Vùng nước|Địa mạo}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:River Mithi 2.jpg|thumb|{{lang|hi|नदी}}]]
==={{section|etym}}===
{{bor+|hi|sa|नदी|tr=nadī́}}.
==={{section|pron}}===
* {{hi-IPA}}
* {{audio|hi|LL-Q1568 (hin)-AryamanA-नदी.wav|a=Delhi}}
==={{section|n}}===
{{hi-noun|f|ur=ندی}}
# {{lb|hi|geography}} [[sông|Sông]].
#: {{syn|hi|सरिता|दरिया|नदिया|सरि}}
===={{section|decl}}====
{{hi-ndecl|<F>}}
===={{section|ref}}====
* {{R:inc-hnd:Platts}}
* {{R:hi:Bahri}}
* {{R:hi:Dasa}}
* {{R:hi:McGregor}}
{{topics|hi|Vùng nước|Địa mạo}}
=={{langname|pi}}==
==={{section|alt}}===
{{pi-alt|Latn=nadī}}
==={{section|n}}===
{{pi-noun|f}}
# {{pi-sc|Deva|nadī|t=sông}}
===={{section|decl}}====
{{pi-decl-noun|g=f}}
{{C|pi|Vùng nước|Địa mạo}}
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{dercat|sa|inc-pro|inh=1}}
{{etymon|sa|id=sông|:inh|iir-pro:*nadíH<id:sông>|tree=1}}
{{inh+|sa|iir-pro|*nadíH||sông}}. Cùng gốc với {{cog|ae-yng|𐬀𐬥𐬀𐬌𐬜𐬍𐬨}}. Có khả năng liên quan đến {{cog|grc|Νέδα}}, {{cog|gml|Nette}}.
==={{section|pron}}===
* {{sa-IPA|a=2}}
==={{section|n}}===
{{sa-noun|f|tr=nadī́}}
# [[sông|Sông]].
===={{section|decl}}====
{{sa-ndecl|nadī́<f.vrki>}}
===={{section|drv}}====
* {{l|sa|नादेय|tr=nādeyá}}
* {{l|sa|नादेयी|tr=nādeyī}}
===={{section|desc}}====
{{top3}}
* {{desc|pi|nadī<alt:नदी>}}
* {{desc|pra|𑀡𑀈<alt:नई>}} {{see desc}}
* {{desc|bn|নদী|lbor=1}}
* {{desc|gu|નદી|lbor=1}}
* {{desc|inc-hnd|lbor=1}}
*: {{desc|hi|नदी}}
*: {{desc|ur|نَدِی}}
* {{desctree|bor=1|kaw|nadī}}
* {{desc|kn|ನದಿ|lbor=1}}
* {{desc|ks|नदी|lbor=1}}
* {{desc|ml|നദി|lbor=1}}
* {{desc|mr|नदी|lbor=1}}
* {{desc|mwr|नंदी|lbor=1}}
* {{desc|ne|नदी|lbor=1}}
* {{desc|or|ନଦୀ|lbor=1}}
* {{desc|pa|ਨਦੀ|lbor=1}}
* {{desc|sd|ندي|lbor=1}}
* {{desc|ta|நதி|lbor=1}}
* {{desc|te|నది|lbor=1}}
{{bottom}}
==={{section|ref}}===
* {{R:CDIAL|nadī́|6943|page=399}}
* {{R:MW|526/1}}
* {{R:sa:EWAia|vol=2|page=9}}
* {{R:inc:IAIL|page=324}}
{{C|sa|Vùng nước|Địa mạo}}
d8m2q26rdz6g1c5ip2voaoakuoz3rab
गर्भिणी
0
411323
2572846
2564979
2026-10-23T01:17:48Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572846
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{dercat|sa|ine-pro}}
{{etymon|sa|id=có thai}}
Từ {{af|sa|गर्भ॒|-इनी}}.
==={{section|pron}}===
{{sa-IPA|a=2}}
==={{section|adj}}===
{{sa-adj form|head=ग॒र्भिणी॑}}
# {{infl of|sa|ग॒र्भिन्॑||f|t=có [[thai]], [[thụ thai]]}}
==={{section|n}}===
{{sa-noun|f|head=ग॒र्भिणी॑}}
# Người [[phụ nữ]] có [[thai]].
#* {{Q|sa||RV|3|29|2||quote=अ॒रण्यो॒र् निहि॑तो जा॒तवे॑दा॒ गर्भ॑ इव॒ सुधि॑तो '''ग॒र्भिणी॑षु''' ।<br>दि॒वे दि॑व॒ ईड्यो॑ जागृ॒वद्भि॑र् ह॒विष्म॑द्भिर् मनु॒ष्ये॑भिर् अ॒ग्निः ॥}}
===={{section|decl}}====
{{sa-ndecl|garbhíṇī<f>}}
===={{section|desc}}====
{{col-top|2|Từ kế thừa}}
* {{desctree|inc-ash|𑀕𑀪𑀺𑀦𑀻<ts:{{xlit|inc-ash|𑀕𑀩𑁆𑀪𑀺𑀦𑀻}}>}}
* {{desc|inc-dar|-}}
** {{desc|khw|گاربین|tr=garbiín}}
* {{desc|pra-niy|𐨒𐨪𐨿𐨧𐨁𐨣𐨁}}
* {{desc|pi|gabbhinī}}
{{col-bottom}}
{{col-top|2|Từ vay mượn}}
* {{desc|as|গৰ্ভিণী|bor=1}}
* {{desc|bn|গর্ভিণী|bor=1}}
* {{desc|gu|ગર્ભિણી|bor=1}}
* {{desc|hi|गर्भिणी|bor=1}}
* {{desc|kn|ಗರ್ಭಿಣಿ|bor=1}}
* {{desc|mai|-|bor=1}} {{xlit|mai|गर्भिणी}}
*: {{desc|mai|गर्भिणी<tr:->|sclang=1}}
*: {{desc|mai|𑒑𑒩𑓂𑒦𑒱𑒝𑒲<tr:->|sclang=1}}
* {{desc|ml|ഗര്ഭിണി|bor=1}}
* {{desc|mr|-|bor=1}}
*: {{desc|mr|गर्भिणी|sclang=1}}
*: {{desc|mr|𑘐𑘨𑘿𑘥𑘲𑘜𑘲|sclang=1}}
* {{desc|or|ଗର୍ଭିଣୀ|bor=1}}
* {{desc|ta|கருப்பிணி|bor=1}}
* {{desc|te|గర్భిణి|bor=1}}
* {{desc|tcy|ಗರ್ಭಿಣಿ|bor=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
* {{R:sa:Apte||653}}
* {{R:sa:Macdonell|83|गर्भिन्|disp=गर्भिन्-î}}
* {{R:sa:MW|head=Garbhiṇī|350|column=2}}
* {{R:CDIAL|garbhíṇī|page=217}}
{{box-bottom}}
{{C|sa|Mang thai}}
1r7nniek9t0frfb0khoy8xq5n4c9oz7
2572848
2572846
2026-10-23T01:20:31Z
Hiyuune
50834
2572848
wikitext
text/x-wiki
=={{langname|mr}}==
==={{secton|etym}}===
{{root|mr|ine-pro|*gʷelbʰ-}}
{{lbor|mr|sa|गर्भिणी}}. {{dbt|mr|गाभण}}.
==={{section|pron}}===
* {{mr-IPA}}
* {{hyph|mr|गर्|भि|णी}}
* {{rhyme|mr|i.ɳi|s=3}}
==={{section|adj}}===
{{mr-adj|ind=1}}
# Có [[thai]].
#: {{syn|mr|Kho từ vựng:गरोदर}}
==={{section|n}}===
{{mr-noun|g=f}}
# Người [[phụ nữ]] có [[thai]].
#: {{syn|mr|गर्भवती<tr:garbhavatī>|गर्भारशी}}
===={{section|decl}}====
{{mr-ndecl|<F>}}
==={{section|ref}}===
* {{R:mr:Molesworth}}
* {{R:mr:Amarkosh}}
* {{R:mr:Date}}
{{C|mr|Mang thai}}
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{dercat|sa|ine-pro}}
{{etymon|sa|id=có thai}}
Từ {{af|sa|गर्भ॒|-इनी}}.
==={{section|pron}}===
{{sa-IPA|a=2}}
==={{section|adj}}===
{{sa-adj form|head=ग॒र्भिणी॑}}
# {{infl of|sa|ग॒र्भिन्॑||f|t=có [[thai]], [[thụ thai]]}}
==={{section|n}}===
{{sa-noun|f|head=ग॒र्भिणी॑}}
# Người [[phụ nữ]] có [[thai]].
#* {{Q|sa||RV|3|29|2||quote=अ॒रण्यो॒र् निहि॑तो जा॒तवे॑दा॒ गर्भ॑ इव॒ सुधि॑तो '''ग॒र्भिणी॑षु''' ।<br>दि॒वे दि॑व॒ ईड्यो॑ जागृ॒वद्भि॑र् ह॒विष्म॑द्भिर् मनु॒ष्ये॑भिर् अ॒ग्निः ॥}}
===={{section|decl}}====
{{sa-ndecl|garbhíṇī<f>}}
===={{section|desc}}====
{{col-top|2|Từ kế thừa}}
* {{desctree|inc-ash|𑀕𑀪𑀺𑀦𑀻<ts:{{xlit|inc-ash|𑀕𑀩𑁆𑀪𑀺𑀦𑀻}}>}}
* {{desc|inc-dar|-}}
** {{desc|khw|گاربین|tr=garbiín}}
* {{desc|pra-niy|𐨒𐨪𐨿𐨧𐨁𐨣𐨁}}
* {{desc|pi|gabbhinī}}
{{col-bottom}}
{{col-top|2|Từ vay mượn}}
* {{desc|as|গৰ্ভিণী|bor=1}}
* {{desc|bn|গর্ভিণী|bor=1}}
* {{desc|gu|ગર્ભિણી|bor=1}}
* {{desc|hi|गर्भिणी|bor=1}}
* {{desc|kn|ಗರ್ಭಿಣಿ|bor=1}}
* {{desc|mai|-|bor=1}} {{xlit|mai|गर्भिणी}}
*: {{desc|mai|गर्भिणी<tr:->|sclang=1}}
*: {{desc|mai|𑒑𑒩𑓂𑒦𑒱𑒝𑒲<tr:->|sclang=1}}
* {{desc|ml|ഗര്ഭിണി|bor=1}}
* {{desc|mr|-|bor=1}}
*: {{desc|mr|गर्भिणी|sclang=1}}
*: {{desc|mr|𑘐𑘨𑘿𑘥𑘲𑘜𑘲|sclang=1}}
* {{desc|or|ଗର୍ଭିଣୀ|bor=1}}
* {{desc|ta|கருப்பிணி|bor=1}}
* {{desc|te|గర్భిణి|bor=1}}
* {{desc|tcy|ಗರ್ಭಿಣಿ|bor=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
* {{R:sa:Apte||653}}
* {{R:sa:Macdonell|83|गर्भिन्|disp=गर्भिन्-î}}
* {{R:sa:MW|head=Garbhiṇī|350|column=2}}
* {{R:CDIAL|garbhíṇī|page=217}}
{{box-bottom}}
{{C|sa|Mang thai}}
orzgt2he2ivmskfbuvz2vxbbw0vi6in
2572849
2572848
2026-10-23T01:20:40Z
Hiyuune
50834
2572849
wikitext
text/x-wiki
=={{langname|mr}}==
==={{section|etym}}===
{{root|mr|ine-pro|*gʷelbʰ-}}
{{lbor|mr|sa|गर्भिणी}}. {{dbt|mr|गाभण}}.
==={{section|pron}}===
* {{mr-IPA}}
* {{hyph|mr|गर्|भि|णी}}
* {{rhyme|mr|i.ɳi|s=3}}
==={{section|adj}}===
{{mr-adj|ind=1}}
# Có [[thai]].
#: {{syn|mr|Kho từ vựng:गरोदर}}
==={{section|n}}===
{{mr-noun|g=f}}
# Người [[phụ nữ]] có [[thai]].
#: {{syn|mr|गर्भवती<tr:garbhavatī>|गर्भारशी}}
===={{section|decl}}====
{{mr-ndecl|<F>}}
==={{section|ref}}===
* {{R:mr:Molesworth}}
* {{R:mr:Amarkosh}}
* {{R:mr:Date}}
{{C|mr|Mang thai}}
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{dercat|sa|ine-pro}}
{{etymon|sa|id=có thai}}
Từ {{af|sa|गर्भ॒|-इनी}}.
==={{section|pron}}===
{{sa-IPA|a=2}}
==={{section|adj}}===
{{sa-adj form|head=ग॒र्भिणी॑}}
# {{infl of|sa|ग॒र्भिन्॑||f|t=có [[thai]], [[thụ thai]]}}
==={{section|n}}===
{{sa-noun|f|head=ग॒र्भिणी॑}}
# Người [[phụ nữ]] có [[thai]].
#* {{Q|sa||RV|3|29|2||quote=अ॒रण्यो॒र् निहि॑तो जा॒तवे॑दा॒ गर्भ॑ इव॒ सुधि॑तो '''ग॒र्भिणी॑षु''' ।<br>दि॒वे दि॑व॒ ईड्यो॑ जागृ॒वद्भि॑र् ह॒विष्म॑द्भिर् मनु॒ष्ये॑भिर् अ॒ग्निः ॥}}
===={{section|decl}}====
{{sa-ndecl|garbhíṇī<f>}}
===={{section|desc}}====
{{col-top|2|Từ kế thừa}}
* {{desctree|inc-ash|𑀕𑀪𑀺𑀦𑀻<ts:{{xlit|inc-ash|𑀕𑀩𑁆𑀪𑀺𑀦𑀻}}>}}
* {{desc|inc-dar|-}}
** {{desc|khw|گاربین|tr=garbiín}}
* {{desc|pra-niy|𐨒𐨪𐨿𐨧𐨁𐨣𐨁}}
* {{desc|pi|gabbhinī}}
{{col-bottom}}
{{col-top|2|Từ vay mượn}}
* {{desc|as|গৰ্ভিণী|bor=1}}
* {{desc|bn|গর্ভিণী|bor=1}}
* {{desc|gu|ગર્ભિણી|bor=1}}
* {{desc|hi|गर्भिणी|bor=1}}
* {{desc|kn|ಗರ್ಭಿಣಿ|bor=1}}
* {{desc|mai|-|bor=1}} {{xlit|mai|गर्भिणी}}
*: {{desc|mai|गर्भिणी<tr:->|sclang=1}}
*: {{desc|mai|𑒑𑒩𑓂𑒦𑒱𑒝𑒲<tr:->|sclang=1}}
* {{desc|ml|ഗര്ഭിണി|bor=1}}
* {{desc|mr|-|bor=1}}
*: {{desc|mr|गर्भिणी|sclang=1}}
*: {{desc|mr|𑘐𑘨𑘿𑘥𑘲𑘜𑘲|sclang=1}}
* {{desc|or|ଗର୍ଭିଣୀ|bor=1}}
* {{desc|ta|கருப்பிணி|bor=1}}
* {{desc|te|గర్భిణి|bor=1}}
* {{desc|tcy|ಗರ್ಭಿಣಿ|bor=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
* {{R:sa:Apte||653}}
* {{R:sa:Macdonell|83|गर्भिन्|disp=गर्भिन्-î}}
* {{R:sa:MW|head=Garbhiṇī|350|column=2}}
* {{R:CDIAL|garbhíṇī|page=217}}
{{box-bottom}}
{{C|sa|Mang thai}}
rkufag6eo4gzjjevfcv070l7j2sy6yi
कमल
0
415472
2572900
2561941
2026-10-23T06:51:58Z
Hiyuune
50834
/* Tham khảo */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572900
wikitext
text/x-wiki
{{also|कोमल|कमिलो|काम्लो}}
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|𑆑𑆩𑆬||Kasmir}}
==={{section|etym}}===
{{etymon|inc-apa|id=hoa sen|:inh|pra:𑀓𑀫𑀮<id:hoa sen>|tree=1}}
{{dercat|inc-apa|dra}}
{{inh+|inc-apa|pra|कमल}}, từ {{inh|inc-apa|sa|कमल}}.
==={{section|n}}===
{{inc-apa-pos|n|g=n}}{{ref|{{R:inc:AHK||194|col=2}}}}{{ref|{{R:inc:ARS||60}}}}{{ref|{{R:inc:Pischel|136|passage=''kamalu'' = ''kamalam''}}}}
# Hoa [[sen]].
===={{section|decl}}====
{{inc-apa-decl-noun|n}}
===={{section|desc}}====
{{col-top|2|desc}}
* {{desc|inc-cen}}
** {{desc|inc-hie}}
*** {{desc|inc-oaw|-}}
***: {{desc|inc-oaw|कँवल|sclang=1}}
***: {{desc|inc-oaw|𑂍𑂁𑂫𑂪|sclang=1}}
** {{desc|inc-hiw}}
*** {{desc|inc-ohi|कवल}}
**** {{desc|inc-hnd|-}} {{xlit|hi|कँवल}}
****: {{desc|hi|कँवल<tr:->}}
****: {{desc|ur|کَن٘وَل<tr:->}}
* {{desc|inc-eas}}
** {{desc|inc-bih}}
*** {{desc|bho|-}} {{xlit|bho|कँवल}}
***: {{desc|bho|कँवल<tr:->|sclang=1}}
***: {{desc|bho|𑂍𑂁𑂫𑂪<tr:->|sclang=1}}
*** {{desc|mag|-}} {{xlit|mag|कँवल}}
***: {{desc|mag|कँवल|sclang=1}}
***: {{desc|mag|𑂍𑂁𑂫𑂪|sclang=1}}
* {{desc|inc-ins}}
*: {{desc|si|කමල}}
* {{desc|inc-sou}}
** {{desc|omr|-}} {{xlit|omr|कवळ}}
**: {{desc|omr|कवळ<tr:->|sclang=1}}
**: {{desc|omr|𑘎𑘪𑘯<tr:->|sclang=1}}
* {{desc|inc-wes}}
** {{desc|inc-ogu|कमल}}
*** {{desc|gu|કમળ}}
*** {{desc|mwr|-}}
***: {{desc|mwr|कंवल|sclang=1}}
***: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
{{C|inc-apa|Hoa}}
=={{langname|awa}}==
==={{section|etym}}===
{{bor+|awa|sa|कमल}}.
==={{section|n}}===
{{head|awa|Danh từ|g=m}}
# Hoa [[sen]].
{{C|awa|Hoa}}
=={{langname|bra}}==
==={{section|etym}}===
{{bor+|bra|sa|कमल}}.
==={{section|pron}}===
* {{bra-IPA}}
==={{section|n}}===
{{head|bra|Danh từ|g=m}}
# Hoa [[sen]].
{{C|bra|Hoa}}
=={{langname|inc-ogu}}==
==={{section|etym}}===
{{inh+|inc-ogu|inc-agu|कमल|tr=kamala}}, từ {{inh|inc-ogu|pra-sau|𑀓𑀫𑀮}}, từ {{inh|inc-ogu|sa|कमल}}, từ {{der|inc-ogu|dra}}.<ref>* {{R:CDIAL|kamala<sup>2</sup>|2764}}
</ref>
==={{section|n}}===
{{head|inc-ogu|Danh từ|g=n}}
# Hoa [[sen]].
===={{section|desc}}====
* {{desc|inc-mgu|कमल|tr=kamala}}<ref>{{R:inc-mgu:Kothari|page=८९|column=2}}</ref>
** {{desc|gu|કમળ}}
* {{desc|raj}}
** {{desc|gju|کَمَل}}
** {{desc|mwr|-}}
**: {{desc|mwr|कंवल|sclang=1}}
**: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
** {{desc|mtr|कमल}}
==={{section|ref}}===
{{reflist}}
{{C|inc-ogu|Hoa}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:Sacred_lotus_Nelumbo_nucifera.jpg|thumb|'''कमल''']]
==={{section|etym}}===
{{lbor|hi|sa|कमल}}. {{doublet|hi|कमला|कँवल}}.
==={{section|pron}}===
* {{hi-IPA}}
==={{section|n}}===
{{hi-noun|m|ur=کَمَل}}
# {{taxfmt|Nelumbo nucifera|loài}}; hoa [[sen]].
#: {{syn|hi|Kho từ vựng:कमल}}
===={{section|decl}}====
{{hi-ndecl|<M>}}
===={{section|drv}}====
{{col|hi|कमलकंद|कमलगट्टा|कमल-ककड़ी|कमलनयन<tr:kamalnayan>|कमलाकार|कमलज|कमलासन|कमलनाल|कमल-वन|कमलाक्ष|कमलअंडा<tr:kamalaṇḍā>|हिम कमल}}
===={{section|desc}}====
* {{desc|en|Kamal|bor=1}}
==={{section|ref}}===
* {{R:hi:Dasa||797}}
* {{R:hi:Chaturvedi||118}}
* {{R:hi:McGregor||169}}
* {{R:hi:Bahri||91}}
{{topics|hi|Hoa}}
=={{langname|pi}}==
==={{section|alt sp}}===
{{pi-alt|Latn=kamala}}
==={{section|n}}===
{{pi-noun|n}}
# {{pi-sc|t=hoa sen}}
===={{section|decl}}====
{{pi-decl-noun|g=n}}
bxy08kr6zzacu474q58diw15386abk8
2572901
2572900
2026-10-23T06:52:07Z
Hiyuune
50834
/* Tên đề mục không đúng hoặc không có sẵn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572901
wikitext
text/x-wiki
{{also|कोमल|कमिलो|काम्लो}}
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|𑆑𑆩𑆬||Kasmir}}
==={{section|etym}}===
{{etymon|inc-apa|id=hoa sen|:inh|pra:𑀓𑀫𑀮<id:hoa sen>|tree=1}}
{{dercat|inc-apa|dra}}
{{inh+|inc-apa|pra|कमल}}, từ {{inh|inc-apa|sa|कमल}}.
==={{section|n}}===
{{inc-apa-pos|n|g=n}}{{ref|{{R:inc:AHK||194|col=2}}}}{{ref|{{R:inc:ARS||60}}}}{{ref|{{R:inc:Pischel|136|passage=''kamalu'' = ''kamalam''}}}}
# Hoa [[sen]].
===={{section|decl}}====
{{inc-apa-decl-noun|n}}
===={{section|desc}}====
{{col-top|2|desc}}
* {{desc|inc-cen}}
** {{desc|inc-hie}}
*** {{desc|inc-oaw|-}}
***: {{desc|inc-oaw|कँवल|sclang=1}}
***: {{desc|inc-oaw|𑂍𑂁𑂫𑂪|sclang=1}}
** {{desc|inc-hiw}}
*** {{desc|inc-ohi|कवल}}
**** {{desc|inc-hnd|-}} {{xlit|hi|कँवल}}
****: {{desc|hi|कँवल<tr:->}}
****: {{desc|ur|کَن٘وَل<tr:->}}
* {{desc|inc-eas}}
** {{desc|inc-bih}}
*** {{desc|bho|-}} {{xlit|bho|कँवल}}
***: {{desc|bho|कँवल<tr:->|sclang=1}}
***: {{desc|bho|𑂍𑂁𑂫𑂪<tr:->|sclang=1}}
*** {{desc|mag|-}} {{xlit|mag|कँवल}}
***: {{desc|mag|कँवल|sclang=1}}
***: {{desc|mag|𑂍𑂁𑂫𑂪|sclang=1}}
* {{desc|inc-ins}}
*: {{desc|si|කමල}}
* {{desc|inc-sou}}
** {{desc|omr|-}} {{xlit|omr|कवळ}}
**: {{desc|omr|कवळ<tr:->|sclang=1}}
**: {{desc|omr|𑘎𑘪𑘯<tr:->|sclang=1}}
* {{desc|inc-wes}}
** {{desc|inc-ogu|कमल}}
*** {{desc|gu|કમળ}}
*** {{desc|mwr|-}}
***: {{desc|mwr|कंवल|sclang=1}}
***: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
{{C|inc-apa|Hoa}}
=={{langname|awa}}==
==={{section|etym}}===
{{bor+|awa|sa|कमल}}.
==={{section|n}}===
{{head|awa|Danh từ|g=m}}
# Hoa [[sen]].
{{C|awa|Hoa}}
=={{langname|bra}}==
==={{section|etym}}===
{{bor+|bra|sa|कमल}}.
==={{section|pron}}===
* {{bra-IPA}}
==={{section|n}}===
{{head|bra|Danh từ|g=m}}
# Hoa [[sen]].
{{C|bra|Hoa}}
=={{langname|inc-ogu}}==
==={{section|etym}}===
{{inh+|inc-ogu|inc-agu|कमल|tr=kamala}}, từ {{inh|inc-ogu|pra-sau|𑀓𑀫𑀮}}, từ {{inh|inc-ogu|sa|कमल}}, từ {{der|inc-ogu|dra}}.<ref>* {{R:CDIAL|kamala<sup>2</sup>|2764}}
</ref>
==={{section|n}}===
{{head|inc-ogu|Danh từ|g=n}}
# Hoa [[sen]].
===={{section|desc}}====
* {{desc|inc-mgu|कमल|tr=kamala}}<ref>{{R:inc-mgu:Kothari|page=८९|column=2}}</ref>
** {{desc|gu|કમળ}}
* {{desc|raj}}
** {{desc|gju|کَمَل}}
** {{desc|mwr|-}}
**: {{desc|mwr|कंवल|sclang=1}}
**: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
** {{desc|mtr|कमल}}
==={{section|ref}}===
{{reflist}}
{{C|inc-ogu|Hoa}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:Sacred_lotus_Nelumbo_nucifera.jpg|thumb|'''कमल''']]
==={{section|etym}}===
{{lbor|hi|sa|कमल}}. {{doublet|hi|कमला|कँवल}}.
==={{section|pron}}===
* {{hi-IPA}}
==={{section|n}}===
{{hi-noun|m|ur=کَمَل}}
# {{taxfmt|Nelumbo nucifera|loài}}; hoa [[sen]].
#: {{syn|hi|Kho từ vựng:कमल}}
===={{section|decl}}====
{{hi-ndecl|<M>}}
===={{section|drv}}====
{{col|hi|कमलकंद|कमलगट्टा|कमल-ककड़ी|कमलनयन<tr:kamalnayan>|कमलाकार|कमलज|कमलासन|कमलनाल|कमल-वन|कमलाक्ष|कमलअंडा<tr:kamalaṇḍā>|हिम कमल}}
===={{section|desc}}====
* {{desc|en|Kamal|bor=1}}
==={{section|ref}}===
* {{R:hi:Dasa||797}}
* {{R:hi:Chaturvedi||118}}
* {{R:hi:McGregor||169}}
* {{R:hi:Bahri||91}}
{{topics|hi|Hoa}}
=={{langname|pi}}==
==={{section|alt sc}}===
{{pi-alt|Latn=kamala}}
==={{section|n}}===
{{pi-noun|n}}
# {{pi-sc|t=hoa sen}}
===={{section|decl}}====
{{pi-decl-noun|g=n}}
pexf8b2l9s5f30j474nelkn12lm78qj
2572902
2572901
2026-10-23T06:53:31Z
Hiyuune
50834
2572902
wikitext
text/x-wiki
{{also|कोमल|कमिलो|काम्लो}}
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|𑆑𑆩𑆬||Kasmir}}
==={{section|etym}}===
{{etymon|inc-apa|id=hoa sen|:inh|pra:𑀓𑀫𑀮<id:hoa sen>|tree=1}}
{{dercat|inc-apa|dra}}
{{inh+|inc-apa|pra|कमल}}, từ {{inh|inc-apa|sa|कमल}}.
==={{section|n}}===
{{inc-apa-pos|n|g=n}}{{ref|{{R:inc:AHK||194|col=2}}}}{{ref|{{R:inc:ARS||60}}}}{{ref|{{R:inc:Pischel|136|passage=''kamalu'' = ''kamalam''}}}}
# Hoa [[sen]].
===={{section|decl}}====
{{inc-apa-decl-noun|n}}
===={{section|desc}}====
{{col-top|2|desc}}
* {{desc|inc-cen}}
** {{desc|inc-hie}}
*** {{desc|inc-oaw|-}}
***: {{desc|inc-oaw|कँवल|sclang=1}}
***: {{desc|inc-oaw|𑂍𑂁𑂫𑂪|sclang=1}}
** {{desc|inc-hiw}}
*** {{desc|inc-ohi|कवल}}
**** {{desc|inc-hnd|-}} {{xlit|hi|कँवल}}
****: {{desc|hi|कँवल<tr:->}}
****: {{desc|ur|کَن٘وَل<tr:->}}
* {{desc|inc-eas}}
** {{desc|inc-bih}}
*** {{desc|bho|-}} {{xlit|bho|कँवल}}
***: {{desc|bho|कँवल<tr:->|sclang=1}}
***: {{desc|bho|𑂍𑂁𑂫𑂪<tr:->|sclang=1}}
*** {{desc|mag|-}} {{xlit|mag|कँवल}}
***: {{desc|mag|कँवल|sclang=1}}
***: {{desc|mag|𑂍𑂁𑂫𑂪|sclang=1}}
* {{desc|inc-ins}}
*: {{desc|si|කමල}}
* {{desc|inc-sou}}
** {{desc|omr|-}} {{xlit|omr|कवळ}}
**: {{desc|omr|कवळ<tr:->|sclang=1}}
**: {{desc|omr|𑘎𑘪𑘯<tr:->|sclang=1}}
* {{desc|inc-wes}}
** {{desc|inc-ogu|कमल}}
*** {{desc|gu|કમળ}}
*** {{desc|mwr|-}}
***: {{desc|mwr|कंवल|sclang=1}}
***: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
{{C|inc-apa|Hoa}}
=={{langname|awa}}==
==={{section|etym}}===
{{bor+|awa|sa|कमल}}.
==={{section|n}}===
{{head|awa|Danh từ|g=m}}
# Hoa [[sen]].
{{C|awa|Hoa}}
=={{langname|bra}}==
==={{section|etym}}===
{{bor+|bra|sa|कमल}}.
==={{section|pron}}===
* {{bra-IPA}}
==={{section|n}}===
{{head|bra|Danh từ|g=m}}
# Hoa [[sen]].
{{C|bra|Hoa}}
=={{langname|inc-ogu}}==
==={{section|etym}}===
{{inh+|inc-ogu|inc-agu|कमल|tr=kamala}}, từ {{inh|inc-ogu|pra-sau|𑀓𑀫𑀮}}, từ {{inh|inc-ogu|sa|कमल}}, từ {{der|inc-ogu|dra}}.<ref>* {{R:CDIAL|kamala<sup>2</sup>|2764}}
</ref>
==={{section|n}}===
{{head|inc-ogu|Danh từ|g=n}}
# Hoa [[sen]].
===={{section|desc}}====
* {{desc|inc-mgu|कमल|tr=kamala}}<ref>{{R:inc-mgu:Kothari|page=८९|column=2}}</ref>
** {{desc|gu|કમળ}}
* {{desc|raj}}
** {{desc|gju|کَمَل}}
** {{desc|mwr|-}}
**: {{desc|mwr|कंवल|sclang=1}}
**: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
** {{desc|mtr|कमल}}
==={{section|ref}}===
{{reflist}}
{{C|inc-ogu|Hoa}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:Sacred_lotus_Nelumbo_nucifera.jpg|thumb|'''कमल''']]
==={{section|etym}}===
{{lbor|hi|sa|कमल}}. {{doublet|hi|कमला|कँवल}}.
==={{section|pron}}===
* {{hi-IPA}}
==={{section|n}}===
{{hi-noun|m|ur=کَمَل}}
# {{taxfmt|Nelumbo nucifera|loài}}; hoa [[sen]].
#: {{syn|hi|Kho từ vựng:कमल}}
===={{section|decl}}====
{{hi-ndecl|<M>}}
===={{section|drv}}====
{{col|hi|कमलकंद|कमलगट्टा|कमल-ककड़ी|कमलनयन<tr:kamalnayan>|कमलाकार|कमलज|कमलासन|कमलनाल|कमल-वन|कमलाक्ष|कमलअंडा<tr:kamalaṇḍā>|हिम कमल}}
===={{section|desc}}====
* {{desc|en|Kamal|bor=1}}
==={{section|ref}}===
* {{R:hi:Dasa||797}}
* {{R:hi:Chaturvedi||118}}
* {{R:hi:McGregor||169}}
* {{R:hi:Bahri||91}}
{{topics|hi|Hoa}}
=={{langname|pi}}==
==={{section|alt sc}}===
{{pi-alt|Latn=kamala}}
==={{section|n}}===
{{pi-noun|n}}
# {{pi-sc|t=hoa sen}}
===={{section|decl}}====
{{pi-decl-noun|g=n}}
=={{langname|pra}}==
==={{section|n}}===
{{pra-noun|g=n}}
# {{pra-sc|t=[[hoa]] [[sen]]}}
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
==={{section|ref}}===
{{reflist}}
es19kcbgpbmiwjv3tj8g9pfiu0nzez7
2572903
2572902
2026-10-23T06:53:53Z
Hiyuune
50834
2572903
wikitext
text/x-wiki
{{also|कोमल|कमिलो|काम्लो}}
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|𑆑𑆩𑆬||Kasmir}}
==={{section|etym}}===
{{etymon|inc-apa|id=hoa sen|:inh|pra:𑀓𑀫𑀮<id:hoa sen>|tree=1}}
{{dercat|inc-apa|dra}}
{{inh+|inc-apa|pra|कमल}}, từ {{inh|inc-apa|sa|कमल}}.
==={{section|n}}===
{{inc-apa-pos|n|g=n}}{{ref|{{R:inc:AHK||194|col=2}}}}{{ref|{{R:inc:ARS||60}}}}{{ref|{{R:inc:Pischel|136|passage=''kamalu'' = ''kamalam''}}}}
# Hoa [[sen]].
===={{section|decl}}====
{{inc-apa-decl-noun|n}}
===={{section|desc}}====
{{col-top|2|desc}}
* {{desc|inc-cen}}
** {{desc|inc-hie}}
*** {{desc|inc-oaw|-}}
***: {{desc|inc-oaw|कँवल|sclang=1}}
***: {{desc|inc-oaw|𑂍𑂁𑂫𑂪|sclang=1}}
** {{desc|inc-hiw}}
*** {{desc|inc-ohi|कवल}}
**** {{desc|inc-hnd|-}} {{xlit|hi|कँवल}}
****: {{desc|hi|कँवल<tr:->}}
****: {{desc|ur|کَن٘وَل<tr:->}}
* {{desc|inc-eas}}
** {{desc|inc-bih}}
*** {{desc|bho|-}} {{xlit|bho|कँवल}}
***: {{desc|bho|कँवल<tr:->|sclang=1}}
***: {{desc|bho|𑂍𑂁𑂫𑂪<tr:->|sclang=1}}
*** {{desc|mag|-}} {{xlit|mag|कँवल}}
***: {{desc|mag|कँवल|sclang=1}}
***: {{desc|mag|𑂍𑂁𑂫𑂪|sclang=1}}
* {{desc|inc-ins}}
*: {{desc|si|කමල}}
* {{desc|inc-sou}}
** {{desc|omr|-}} {{xlit|omr|कवळ}}
**: {{desc|omr|कवळ<tr:->|sclang=1}}
**: {{desc|omr|𑘎𑘪𑘯<tr:->|sclang=1}}
* {{desc|inc-wes}}
** {{desc|inc-ogu|कमल}}
*** {{desc|gu|કમળ}}
*** {{desc|mwr|-}}
***: {{desc|mwr|कंवल|sclang=1}}
***: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
{{col-bottom}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
{{C|inc-apa|Hoa}}
=={{langname|awa}}==
==={{section|etym}}===
{{bor+|awa|sa|कमल}}.
==={{section|n}}===
{{head|awa|Danh từ|g=m}}
# Hoa [[sen]].
{{C|awa|Hoa}}
=={{langname|bra}}==
==={{section|etym}}===
{{bor+|bra|sa|कमल}}.
==={{section|pron}}===
* {{bra-IPA}}
==={{section|n}}===
{{head|bra|Danh từ|g=m}}
# Hoa [[sen]].
{{C|bra|Hoa}}
=={{langname|inc-ogu}}==
==={{section|etym}}===
{{inh+|inc-ogu|inc-agu|कमल|tr=kamala}}, từ {{inh|inc-ogu|pra-sau|𑀓𑀫𑀮}}, từ {{inh|inc-ogu|sa|कमल}}, từ {{der|inc-ogu|dra}}.<ref>* {{R:CDIAL|kamala<sup>2</sup>|2764}}
</ref>
==={{section|n}}===
{{head|inc-ogu|Danh từ|g=n}}
# Hoa [[sen]].
===={{section|desc}}====
* {{desc|inc-mgu|कमल|tr=kamala}}<ref>{{R:inc-mgu:Kothari|page=८९|column=2}}</ref>
** {{desc|gu|કમળ}}
* {{desc|raj}}
** {{desc|gju|کَمَل}}
** {{desc|mwr|-}}
**: {{desc|mwr|कंवल|sclang=1}}
**: {{desc|mwr|𑅕𑅧𑅯𑅮<ts:{{xlit|mwr|कंवल}}>|sclang=1}}
** {{desc|mtr|कमल}}
==={{section|ref}}===
{{reflist}}
{{C|inc-ogu|Hoa}}
=={{langname|hi}}==
{{wp|hi:}}
[[File:Sacred_lotus_Nelumbo_nucifera.jpg|thumb|'''कमल''']]
==={{section|etym}}===
{{lbor|hi|sa|कमल}}. {{doublet|hi|कमला|कँवल}}.
==={{section|pron}}===
* {{hi-IPA}}
==={{section|n}}===
{{hi-noun|m|ur=کَمَل}}
# {{taxfmt|Nelumbo nucifera|loài}}; hoa [[sen]].
#: {{syn|hi|Kho từ vựng:कमल}}
===={{section|decl}}====
{{hi-ndecl|<M>}}
===={{section|drv}}====
{{col|hi|कमलकंद|कमलगट्टा|कमल-ककड़ी|कमलनयन<tr:kamalnayan>|कमलाकार|कमलज|कमलासन|कमलनाल|कमल-वन|कमलाक्ष|कमलअंडा<tr:kamalaṇḍā>|हिम कमल}}
===={{section|desc}}====
* {{desc|en|Kamal|bor=1}}
==={{section|ref}}===
* {{R:hi:Dasa||797}}
* {{R:hi:Chaturvedi||118}}
* {{R:hi:McGregor||169}}
* {{R:hi:Bahri||91}}
{{topics|hi|Hoa}}
=={{langname|pi}}==
==={{section|alt sc}}===
{{pi-alt|Latn=kamala}}
==={{section|n}}===
{{pi-noun|n}}
# {{pi-sc|t=hoa sen}}
===={{section|decl}}====
{{pi-decl-noun|g=n}}
=={{langname|pra}}==
==={{section|n}}===
{{pra-noun|g=n}}
# {{pra-sc|t=[[hoa]] [[sen]]}}
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
lznrr8f210vufo91dyxnb188v55i2um
गुहा
0
416222
2572914
2563263
2026-10-23T07:27:10Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572914
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alt}}===
{{sa-alt}}
==={{section|etym}}===
Có nguồn gốc từ căn tố {{m|sa|गुह्}}, từ {{der|sa|iir-pro|*gʰawȷ́ʰ-}}. Xem thêm từ cùng gốc tại {{m|sa|गूहति|tr=gū́hati}}.
==={{section|pron}}===
{{sa-IPA|a=1}}
==={{section|n}}===
{{sa-noun|f|tr=gúhā}}
# [[nơi|Nơi]] [[ẩn náu]], [[hang]], [[động]].
===={{section|decl}}====
{{sa-ndecl|gúhā<f>}}
===={{section|desc}}====
* {{desc|pi|guhā}}
** {{desc|my|ဂူ|lbor=1}}
* {{desc|pra-sau|}}
** {{desc|gu|ગોહ}}
* {{desc|as|গুহা|lbor=1}}
* {{desc|bn|গুহা|lbor=1}}
* {{→}} Cổ điển {{desc|ms|ݢوا|tr=gua}} (''vay mượn học tập'')
** {{desc|kxd|gua}}
** {{desc|ms|gua}}
*** {{desc|id|gua}}
*** {{desc|sne|gua|bor=1}}
*** {{desc|mel|gua|bor=1}}
* {{→}} Hindustan: (''vay mượn học tập'')
*: {{desc|hi|गुहा}}
*: {{desc|ur|گہا|tr=guhā}}
* {{desc|kn|ಗುಹೆ|lbor=1}}
* {{desc|ml|ഗുഹ|lbor=1}}
* {{desc|mr|गुहा|lbor=1}}
* {{desc|ne|गुहा|lbor=1}}
* {{desctree|kaw|guhā|lbor=1}}
* {{desc|oty|bor=1}}
** {{desc|ta|குகை}}
* {{desc|or|ଗୁହା|lbor=1}}
* {{desc|bor=1|okz-pre|tr=guhā|3=|tr2=guha|4=|tr3=gūha}} (''vay mượn học tập'')
** {{desc|okz|gohā|gūha|guhā}}
*** {{desc|km|គុហា}}
*** {{desc|lo|ຄູຫາ|bor=1}}
*** {{desc|th|คูหา|bor=1}}
* {{desc|te|గుహ|lbor=1}}
2ujsaaq3ayqsfc6agg0rev8chd4yqfq
2572915
2572914
2026-10-23T07:27:26Z
Hiyuune
50834
/* Hậu duệ */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572915
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alt}}===
{{sa-alt}}
==={{section|etym}}===
Có nguồn gốc từ căn tố {{m|sa|गुह्}}, từ {{der|sa|iir-pro|*gʰawȷ́ʰ-}}. Xem thêm từ cùng gốc tại {{m|sa|गूहति|tr=gū́hati}}.
==={{section|pron}}===
{{sa-IPA|a=1}}
==={{section|n}}===
{{sa-noun|f|tr=gúhā}}
# [[nơi|Nơi]] [[ẩn náu]], [[hang]], [[động]].
===={{section|decl}}====
{{sa-ndecl|gúhā<f>}}
===={{section|desc}}====
* {{desc|pi|guhā}}
** {{desc|my|ဂူ|lbor=1}}
* {{desc|pra-sau|}}
** {{desc|gu|ગોહ}}
* {{desc|as|গুহা|lbor=1}}
* {{desc|bn|গুহা|lbor=1}}
* {{→}} {{desc|ms|ݢوا|tr=gua}} cổ điển (''vay mượn học tập'')
** {{desc|kxd|gua}}
** {{desc|ms|gua}}
*** {{desc|id|gua}}
*** {{desc|sne|gua|bor=1}}
*** {{desc|mel|gua|bor=1}}
* {{→}} Hindustan: (''vay mượn học tập'')
*: {{desc|hi|गुहा}}
*: {{desc|ur|گہا|tr=guhā}}
* {{desc|kn|ಗುಹೆ|lbor=1}}
* {{desc|ml|ഗുഹ|lbor=1}}
* {{desc|mr|गुहा|lbor=1}}
* {{desc|ne|गुहा|lbor=1}}
* {{desctree|kaw|guhā|lbor=1}}
* {{desc|oty|bor=1}}
** {{desc|ta|குகை}}
* {{desc|or|ଗୁହା|lbor=1}}
* {{desc|bor=1|okz-pre|tr=guhā|3=|tr2=guha|4=|tr3=gūha}} (''vay mượn học tập'')
** {{desc|okz|gohā|gūha|guhā}}
*** {{desc|km|គុហា}}
*** {{desc|lo|ຄູຫາ|bor=1}}
*** {{desc|th|คูหา|bor=1}}
* {{desc|te|గుహ|lbor=1}}
n8ifayc9qwh6a2u08rnefv4xue932oi
दुहितृ
0
416920
2572913
2564457
2026-10-23T07:26:56Z
Hiyuune
50834
2572913
wikitext
text/x-wiki
{{also|दहातु|दहति}}
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
{{etymon|sa|id=con gái|:inh|inc-pro:*dúźʰHtā<ety:inh<iir-pro:*dʰúgʰHtā<id:con gái>>>|tree=1}}
{{inh+|sa|inc-pro|*dúźʰHtā}}{{attn|inc-pro|có liệt kê *dúźʰitā vào mục từ tiếng Ấn-Iran nguyên thủy}}, từ {{inh|sa|iir-pro|*dʰuǰʰHtā}}, trước {{m|iir-pro|*dʰúgʰHtā|t=con gái}}, từ {{inh|sa|ine-pro|*dʰugh₂tḗr||con gái}}. Cùng gốc với {{cog|ae|𐬛𐬎𐬔𐬆𐬛𐬀𐬭}}, {{cog|fa-cls|دختر|tr=duxtar}}, {{cog|grc|θυγάτηρ}}, {{cog|en|daughter}}.
==={{section|pron}}===
{{sa-IPA|a=3}}
==={{section|noun}}===
{{sa-noun|f|r=दुह्|tr=duhitṛ́}}
# [[con gái|Con gái]].
#: {{syn|sa|पुत्री|tr1=putrī́}}
===={{section|decl}}====
{{sa-ndecl|duhitṛ́<f.r:a>}}
===={{section|desc}}====
* Dard:
** {{desc|kls|čhu}}
* {{desc|pgd|𐨢𐨁𐨡}}
* {{desc|pra-niy|𐨢𐨁𐨟𐨂}}
* {{desc|pra|𑀤𑀼𑀳𑀺𑀆|𑀥𑀻𑀆|𑀥𑀽𑀆}} {{see desc}}
* {{desc|pi|duhitā|dhītar|dhītā}}
* {{desc|bn|দুহিতা|lbor=1}}
* {{desc|hi|दुहिता|lbor=1}}
* {{desc|kn|ದುಹಿತೆ|bor=1}}
* {{desc|ml|ദുഹിതാ|bor=1}}
* {{desc|or|ଦୁହିତା|lbor=1}}
* {{desc|te|దుహిత|bor=1}}
==={{section|ref}}===
* {{R:Cappeller Sanskrit-English|column=2|page=233|दुहितृ॑}}
* {{R:sa:MW|0489|column=2|head=Duhitṛi}}
* {{R:WIL|418}}
{{topics|sa|Gia đình}}
d0b1wrq4sucdh05uocs3ykywtf3a9id
अवश्या
0
417986
2572912
2566284
2026-10-23T07:26:20Z
Hiyuune
50834
2572912
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
Từ {{af|sa|अव-|[[श्यै|श्या]]}}. So sánh với {{cog|fa-cls|بژم|tr=bažm}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|n}}===
{{sa-noun|f|r=श्यै}}
# [[sương muối|Sương muối]], [[sương]].
===={{section|decl}}====
{{sa-ndecl|<f>}}
===={{section|drv}}====
* {{l|sa|अवश्याय}}
===={{section|desc}}====
Có nhiều hậu duệ liên quan đến {{m|sa|अवश्याय}}.
* {{desc|pi|ussāva}}
* Dard:
** {{desc|kls|oš}}
** {{desc|khw|یوز|tr=yoz}}
** {{desc|trw|اوش|tr=ōš}}
* {{desc|pra|𑀅𑀯𑀲𑀸𑀬|𑀑𑀲𑀸𑀅|𑀑𑀲𑁆𑀲𑀸|𑀉𑀲𑁆𑀲𑀸|𑀑𑀲𑀸|𑀉𑀲𑁆𑀲|𑀑𑀲}}
** {{desc|ne|ओस}}
** {{desc|gu|ઓસ}}
** {{desc|bn|ওস}}
** Hindustan:
*** {{desc|hi|ओस}}
*** {{desc|ur|اوس|tr=os}}
==={{section|ref}}===
* {{R:sa:MW|104}}
* {{R:CDIAL}}
6vyb8iern8t2pu641b9u184droji9n2
सदातन
0
418505
2572879
2567273
2026-10-23T06:21:27Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572879
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|etym}}===
Từ {{af|sa|सदा|-तन}}.
==={{section|pron}}===
{{sa-IPA|nv=1}}
==={{section|adj}}===
{{sa-adj}}
# [[liên tục|Liên tục]], [[vĩnh cửu]], [[không ngừng]] ({{sa-a|Bhaṭṭ}}, {{sa-a|Kusum}})
===={{section|decl}}====
{{sa-adecl|<f:sadātanī.novedic>}}
===={{section|drv}}====
* {{l|sa|सदातनत्व}}
==={{section|pr-noun}}===
{{sa-prop|m}}
# Tên gọi của thần [[Vishnu]] ({{sa-a|L}})
===={{section|decl}}====
{{sa-ndecl|<m.novedic>}}
==={{section|ref}}===
* {{R:MW|165|col=3}}
* {{R:DCS}}
derimoh0yjo197w5x1rddfsjuapdn81
तिर्यग्योनि
0
419740
2572841
2569512
2026-10-23T01:13:23Z
Hiyuune
50834
/* Biến cách */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572841
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|alternative script}}===
{{sa-alt}}
==={{section|pron}}===
{{sa-IPA}}
==={{section|n}}===
{{sa-noun|m}}
# Loài [[súc sinh]]; bản tính [[muông thú]].
===={{section|decl}}====
{{sa-ndecl|tiryagyoni<m>}}
4ov8iniql2z9spzcjrzgccsky2ageop
lối sống
0
421021
2572742
2572663
2026-10-22T14:06:25Z
TheHighFighter2
42988
/* */
2572742
wikitext
text/x-wiki
=={{langname|vi}}==
==={{đm|etym}}===
Từ {{com|vi|lối|sống}}.
==={{đm|pron}}===
{{vi-IPA}}
==={{đm|noun}}===
{{vi-noun}}
# [[cách thức|Cách thức]] [[sinh hoạt]], [[ứng xử]] biểu hiện [[thái độ]] và các [[giá trị]] của một cá nhân hay một nhóm người.
===={{đm|trans}}====
{{trans-top|Cách thức sinh hoạt, ứng xử}}
* {{langname|en}}: {{t+|en|way of life}}, {{t+|en|lifestyle}}
{{trans-bottom}}
6l9wqr5bvtle5f2thj690u1ifkh5sl7
2572766
2572742
2026-10-22T14:46:49Z
TheHighFighter2
42988
2572766
wikitext
text/x-wiki
=={{langname|vi}}==
{{wp}}
==={{đm|etym}}===
Từ {{com|vi|lối|sống}}.
==={{đm|pron}}===
{{vi-IPA}}
==={{đm|noun}}===
{{vi-noun}}
# [[cách thức|Cách thức]] [[sinh hoạt]], [[ứng xử]] biểu hiện [[thái độ]] và các [[giá trị]] của một cá nhân hay một nhóm người.
===={{đm|trans}}====
{{trans-top|Cách thức sinh hoạt, ứng xử}}
* {{langname|en}}: {{t+|en|way of life}}, {{t+|en|lifestyle}}
{{trans-bottom}}
1lre0opeu3zy1d9sedyqnatgiv72exj
2572767
2572766
2026-10-22T14:50:52Z
TheHighFighter2
42988
/* Danh từ */
2572767
wikitext
text/x-wiki
=={{langname|vi}}==
{{wp}}
==={{đm|etym}}===
Từ {{com|vi|lối|sống}}.
==={{đm|pron}}===
{{vi-IPA}}
==={{đm|noun}}===
{{vi-noun}}
# [[cách thức|Cách thức]] [[sinh hoạt]], [[ứng xử]] biểu hiện [[thái độ]] và các [[giá trị]] của một cá nhân hay một nhóm người.
#: {{ux|vi|'''Lối sống''' lành mạnh và '''lối sống''' không lành mạnh.}}
===={{đm|trans}}====
{{trans-top|Cách thức sinh hoạt, ứng xử}}
* {{langname|en}}: {{t+|en|way of life}}, {{t+|en|lifestyle}}
{{trans-bottom}}
is4jils55c1k9n6pwoqlqz5j9vp7bb1
欧
0
421033
2572733
2026-10-22T13:37:16Z
Hiyuune
50834
Trang mới: “{{also|歐}} {{character info}} =={{langname|mul}}== {{stroke order|strokes=8}} {{ja-forms|欧|欧|[[歐]]}} ==={{section|etym}}=== {{Han simp|歐|f=區|t=区}}. Ở dạng biến thể hiện tại, {{Han compound|区|欠|ls=psc|c1=p|c2=s}}. ==={{section|han}}=== {{Han char|rn=76|rad=欠|as=04|sn=8|four=|canj=SKNO|ids=⿰区欠}} ===={{section|derived characters}}==== * {{charlist|sc=Hani|𫪘𱫓𰎦}} ===={{section|ref}}==== * {{Han ref|kx=0566.181|dkj=16024|dj=095…”
2572733
wikitext
text/x-wiki
{{also|歐}}
{{character info}}
=={{langname|mul}}==
{{stroke order|strokes=8}}
{{ja-forms|欧|欧|[[歐]]}}
==={{section|etym}}===
{{Han simp|歐|f=區|t=区}}. Ở dạng biến thể hiện tại, {{Han compound|区|欠|ls=psc|c1=p|c2=s}}.
==={{section|han}}===
{{Han char|rn=76|rad=欠|as=04|sn=8|four=|canj=SKNO|ids=⿰区欠}}
===={{section|derived characters}}====
* {{charlist|sc=Hani|𫪘𱫓𰎦}}
===={{section|ref}}====
* {{Han ref|kx=0566.181|dkj=16024|dj=0955.070|hdz=32135.040|uh=6B27}}
=={{langname|zh}}==
{{zh-see|歐}}
94f6cueei5l3k9xv3wc559ri0dzf36n
𫪘
0
421034
2572734
2026-10-22T13:38:12Z
Hiyuune
50834
Trang mới: “{{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=30|rad=口|as=8|sn=11|four=|canj=|ids=⿰口欧}} ===={{section|ref}}==== {{Han ref|uh=2BA98}} {{-}} =={{langname|zh}}== {{zh-see|𡂿}}”
2572734
wikitext
text/x-wiki
{{character info}}
=={{langname|mul}}==
==={{section|han}}===
{{Han char|rn=30|rad=口|as=8|sn=11|four=|canj=|ids=⿰口欧}}
===={{section|ref}}====
{{Han ref|uh=2BA98}}
{{-}}
=={{langname|zh}}==
{{zh-see|𡂿}}
nnohkwl8t3pcnd85bh5ge9fdkkglr9y
𱫓
0
421035
2572735
2026-10-22T13:38:59Z
Hiyuune
50834
Trang mới: “{{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=86|rad=火|as=8|sn=12|four=|canj=|ids=⿱欧灬}} ===={{section|ref}}==== * {{Han ref|kx=|dkj=|dj=|hdz=|uh=31AD3}}”
2572735
wikitext
text/x-wiki
{{character info}}
=={{langname|mul}}==
==={{section|han}}===
{{Han char|rn=86|rad=火|as=8|sn=12|four=|canj=|ids=⿱欧灬}}
===={{section|ref}}====
* {{Han ref|kx=|dkj=|dj=|hdz=|uh=31AD3}}
pcjk3acr2n41u5k9d890slja5hfg124
𰎦
0
421036
2572736
2026-10-22T13:39:47Z
Hiyuune
50834
Trang mới: “{{character info}} =={{langname|mul}}== ==={{section|han}}=== {{Han char|rn=46|rad=山|as=8|sn=11|four=|canj=|ids=⿱山欧}} ===={{section|ref}}==== * {{Han ref|kx=|dkj=|dj=|hdz=|uh=303A6}}”
2572736
wikitext
text/x-wiki
{{character info}}
=={{langname|mul}}==
==={{section|han}}===
{{Han char|rn=46|rad=山|as=8|sn=11|four=|canj=|ids=⿱山欧}}
===={{section|ref}}====
* {{Han ref|kx=|dkj=|dj=|hdz=|uh=303A6}}
la01bs8gq7wt8we7xr3a9r4levwbn88
achomharc
0
421037
2572737
2026-10-22T13:43:28Z
Hiyuune
50834
+ ga
2572737
wikitext
text/x-wiki
=={{langname|ga}}==
==={{section|etym}}===
Từ {{inh|ga|sga|athchomarc}}, danh động từ của {{m|sga|ad·comairc|t=asks, questions}}.
==={{section|n}}===
{{ga-noun|m|-airc|-airc}}
# {{verbal noun of|ga|achomharc}}
# {{lb|ga|law}} [[chống án|Chống án]]; [[kháng cáo]].
===={{section|decl}}====
{{ga-decl-m1|a|chomharc|chomhairc}}
==={{section|v}}===
{{ga-verb|pres=~ann|fut=~faidh|pp=~tha|vn=~}}
# {{lb|ga|transitive|law}} [[chống án|Chống án]]; [[kháng cáo]].
===={{section|forms}}====
{{ga-conj-1a|a|chomhar|c|broad|vn=achomharc}}
===={{section|drv}}====
{{col2
|ga|{{l|ga|achomharcach|pos=a}}
|{{l|ga|achomharcóir|g=m|pos=n}}
}}
==={{section|mut}}===
{{ga-mut|msn}}
==={{section|further}}===
* {{R:ga:Ó Dónaill}}
* {{R:DIL|4713|head=athchomarc}}
* {{R:DIL|399|head=ad·comairc}}
* {{R:ga:EID}}
* {{R:ga:NEID}}
h06hnocrio2d746tz52dr7a7vc2xirv
2572738
2572737
2026-10-22T13:43:40Z
Hiyuune
50834
/* Từ nguyên */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572738
wikitext
text/x-wiki
=={{langname|ga}}==
==={{section|etym}}===
Từ {{inh|ga|sga|athchomarc}}, danh động từ của {{m|sga|ad·comairc|t=hỏi}}.
==={{section|n}}===
{{ga-noun|m|-airc|-airc}}
# {{verbal noun of|ga|achomharc}}
# {{lb|ga|law}} [[chống án|Chống án]]; [[kháng cáo]].
===={{section|decl}}====
{{ga-decl-m1|a|chomharc|chomhairc}}
==={{section|v}}===
{{ga-verb|pres=~ann|fut=~faidh|pp=~tha|vn=~}}
# {{lb|ga|transitive|law}} [[chống án|Chống án]]; [[kháng cáo]].
===={{section|forms}}====
{{ga-conj-1a|a|chomhar|c|broad|vn=achomharc}}
===={{section|drv}}====
{{col2
|ga|{{l|ga|achomharcach|pos=a}}
|{{l|ga|achomharcóir|g=m|pos=n}}
}}
==={{section|mut}}===
{{ga-mut|msn}}
==={{section|further}}===
* {{R:ga:Ó Dónaill}}
* {{R:DIL|4713|head=athchomarc}}
* {{R:DIL|399|head=ad·comairc}}
* {{R:ga:EID}}
* {{R:ga:NEID}}
9zx5gfex4cv1pp1vcn15coweqvqxqyj
Ᵽ
0
421038
2572740
2026-10-22T13:51:05Z
Lcsnes
40261
Trang mới: “{{-Latn-}} {{character info}} ==={{ĐM|desction}}=== {{mul-letter}} #[[chữ cái|Chữ cái]] '''[[P]] viết hoa''' với nét sổ ngang. ==={{ĐM|see}}=== {{Latn-script}} =={{langname|tnc}}== ==={{ĐM|pron}}=== *{{IPA|tnc|/ɸ/}} ==={{ĐM|letter}}=== {{letter|tnc}} #Chữ cái thứ 17 viết hoa trong bảng chữ cái Latinh tiếng Tanimuca-Retuarã . #:{{quote|tnc|Cesarearã eyatirã ĩᵽi Félixre ᵽaᵽera najaꞌataeyaeka. Suᵽabaatirã '''Ᵽ'''ablore kiᵽ…”
2572740
wikitext
text/x-wiki
{{-Latn-}}
{{character info}}
==={{ĐM|desction}}===
{{mul-letter}}
#[[chữ cái|Chữ cái]] '''[[P]] viết hoa''' với nét sổ ngang.
==={{ĐM|see}}===
{{Latn-script}}
=={{langname|tnc}}==
==={{ĐM|pron}}===
*{{IPA|tnc|/ɸ/}}
==={{ĐM|letter}}===
{{letter|tnc}}
#Chữ cái thứ 17 viết hoa trong bảng chữ cái Latinh tiếng Tanimuca-Retuarã .
#:{{quote|tnc|Cesarearã eyatirã ĩᵽi Félixre ᵽaᵽera najaꞌataeyaeka. Suᵽabaatirã '''Ᵽ'''ablore kiᵽõꞌirã natarika.|Những người nầy tới thành Sê-sa-rê, đưa thơ cho quan tổng-đốc và đem nộp Phao-lô. ([[s:Công vụ các Sứ đồ/23#23:33|Công vụ các Sứ đồ 23:33]])}}
==={{ĐM|see}}===
*{{letters|lang=tnc|sc=Latn|qual=Bảng chữ cái Latinh tiếng Tanimuca-Retuarã|a|ã|b|d|e|ẽ|ꞌ|i|ĩ|j|k|m|n|ñ|o|õ|ᵽ|r|s|t|u|ũ|w|y}}
==={{ĐM|ref}}===
*{{Chú thích sách|es|editor=Beverly A. & Clay Strom|title=[https://www.sil.org/system/files/reapdata/10/79/34/107934606148734185048344380672936353358/tncdic.pdf Diccionario Escolar Trilingüe: letuama & tanimuka – español – inglés]|year=2019|page=59}}
*{{Chú thích web|tnc|author=Wycliffe Bible Translators, Inc.|entryurl=https://www.bible.com/bible/1110/ACT.23.TNC|entry=Hch 23|year=2019|work=Porciones del Nuevo Testamento en el idioma Letuama}}
[[Thể loại:Khối ký tự Latin Extended-C|63]]
cuw6296hh8k8szvv9mkdqsrliuffmdi
valitusoikeus
0
421039
2572741
2026-10-22T13:53:03Z
Hiyuune
50834
+ fi
2572741
wikitext
text/x-wiki
=={{langname|fi}}==
==={{section|etym}}===
{{affix|fi|valitus|oikeus}}
==={{section|pron}}===
{{fi-pronunciation|valitus-oikeus}}
==={{section|n}}===
{{fi-noun}}
# [[quyền|Quyền]] [[kháng cáo]].
===={{section|decl}}====
{{fi-decl-kalleus|valitusoikeu|a}}
==={{section|further}}===
* {{R:fi:KTSK|accessdate=2023-07-04}}
8lvym209xyhxbm96li8njxkuadfu5ix
ceithir
0
421040
2572743
2026-10-22T14:08:15Z
Hiyuune
50834
+ gd
2572743
wikitext
text/x-wiki
=={{langname|gd}}==
{{number box|gd}}
==={{section|etym}}===
Từ {{inh|gd|sga|cethair}},<ref>{{R:DIL|8908|head=cethair}}</ref> từ {{inh|gd|cel-pro|*kʷetwores}}, từ {{inh|gd|ine-pro|*kʷetwóres}}.
==={{section|pron}}===
* {{IPA|gd|/ˈkʲʰehiɾʲ/|ref={{R:gd:MacPherson:1945}} !!! {{R:Mac Gill-Fhinnein:1966}} !!! {{R:gd:Borgstrom1941|page=51}}}}
* {{IPA|gd|/ˈkʲʰehəð/|[ˈkʲʰehəð̥ʲ]|ref={{R:gd:Oftedal}}|ref2={{R:gd:Borgstrom1940|page=242}} !!! {{R:gd:Morrison:2022}}|a=Lewis}}
==={{section|num}}===
{{head|gd|Số từ}}
# {{cln|gd|Số đếm}} [[bốn|Bốn]].
===={{section|drv}}====
{{col2|gd
|às na ceithir ranna ruadha
|ceathramh
|ceathrad<t:bốn mươi>
|ceathrar<t:bốn người>
|ceithir-thimcheall
}}
==={{section|mut}}===
{{gd-mut-cons|c|eithir}}
==={{section|ref}}===
{{reflist|size=smaller}}
==={{section|further}}===
* {{R:Dwelly}}
fc443725nmi9gnkgnx6ols93cozm0g9
Bản mẫu:R:gd:Morrison:2022
10
421041
2572744
2026-10-22T14:09:25Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->{{cite-journal|title=Vowel allophony in Ness Gaelic: Phonetic and phonological patterns of laxing and retraction|author=Donald A. Morrison|journal={{w|en:Journal of the International Phonetic Association|Journal of the International Phonetic Association}}|volume=53|issue=3|year=2022|pages=607-643|location=Cambridge|publisher={{w|en:International Phonetic Association|International Phonetic Association}} |pag…”
2572744
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{cite-journal|title=Vowel allophony in Ness Gaelic: Phonetic and phonological patterns of laxing and retraction|author=Donald A. Morrison|journal={{w|en:Journal of the International Phonetic Association|Journal of the International Phonetic Association}}|volume=53|issue=3|year=2022|pages=607-643|location=Cambridge|publisher={{w|en:International Phonetic Association|International Phonetic Association}}
|page = {{{page|{{{2|}}}}}}
}}<noinclude>{{documentation}}</noinclude>
5s0di8bosqc2w7h3wkmf2fraxg5p528
Bản mẫu:sga-decl-num-4
10
421042
2572745
2026-10-22T14:13:50Z
Hiyuune
50834
Trang mới: “{{inflection-table-top|title=Biến cách số từ bất quy tắc|palette=yellow|tall=yes}} |- ! class="outer" | số nhiều ! giống đực ! giống cái ! giống trung |- ! [[nominative|danh cách]] | rowspan=2 | {{l|sga|cethair}} | rowspan=2 | {{l|sga|cethéoir}}, {{l|sga|cethéora}}<sup>H</sup> | rowspan=3 | {{l|sga|cethair}}<sup>L</sup> |- ! [[vocative|hô cách]] |- ! [[accusative|đối cách]] | {{l|sga|cethri}}<sup>H</sup> | {{l|sga|cethéora}}<sup>H</sup>…”
2572745
wikitext
text/x-wiki
{{inflection-table-top|title=Biến cách số từ bất quy tắc|palette=yellow|tall=yes}}
|-
! class="outer" | số nhiều
! giống đực
! giống cái
! giống trung
|-
! [[nominative|danh cách]]
| rowspan=2 | {{l|sga|cethair}}
| rowspan=2 | {{l|sga|cethéoir}}, {{l|sga|cethéora}}<sup>H</sup>
| rowspan=3 | {{l|sga|cethair}}<sup>L</sup>
|-
! [[vocative|hô cách]]
|-
! [[accusative|đối cách]]
| {{l|sga|cethri}}<sup>H</sup>
| {{l|sga|cethéora}}<sup>H</sup>
|-
! [[genitive|sinh cách]]
| {{l|sga|ceithre}}<sup>N</sup>
| {{l|sga|cethéora}}<sup>N</sup>
| {{l|sga|ceithre}}<sup>N</sup>
|-
! [[dative|dữ cách]]
| {{l|sga|ceithrib}}
| {{l|sga|cethéoraib}}
| {{l|sga|ceithrib}}
{{inflection-table-bottom|notes=<div>Biến đổi phụ âm đầu của danh từ theo sau:
*<sup>H</sup> = gây ra tiếng hơi
*<sup>L</sup> = gây ra nhược hóa
*<sup>N</sup> = gây ra âm mũi hoá</div>
}}<noinclude>{{documentation}}</noinclude>
g3lfq5zilotevvcvoquzrkpb0z9ee91
cethair
0
421043
2572746
2026-10-22T14:15:34Z
Hiyuune
50834
+ sga
2572746
wikitext
text/x-wiki
=={{langname|sga}}==
==={{section|etym}}===
Từ {{inh|sga|cel-pro|*kʷetwores}}, từ {{inh|sga|ine-pro|*kʷetwóres}}.
==={{section|pron}}===
* {{sga-IPA}}
==={{section|num}}===
{{cardinalbox|sga|3|4|5|trí|cóic|ord=cethramad|opt=Male personal|optx=cethrar}}
{{head|sga|Số từ|giống cái|cetheoir}}
# [[bốn]].
===={{section|infl}}====
{{sga-decl-num-4}}
===={{section|drv}}====
* {{l|sga|cethrar}}
===={{section|desc}}====
* {{desc|ga|ceathair|ceithre}}
* {{desc|gv|kiare}}
* {{desc|gd|ceithir}}
==={{section|mut}}===
{{sga-mutation}}
==={{section|ref}}===
* {{R:DIL|8908}}
{{catlangname|sga|Số đếm}}
1n7c5vjo5amfmm3k9w9arfuyi2t96n5
Bản mẫu:sga-decl-o-neut
10
421044
2572747
2026-10-22T14:18:12Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->{{sga-decl-noun |class=o-n|n={{{n|}}} |nom_sg={{{head|{{pagename}}}}}+N|nom_sg2={{{nom_sg2|}}}|nom_sg3={{{nom_sg3|}}} |voc_sg={{{head|{{pagename}}}}}+N|voc_sg2={{{nom_sg2|}}}|voc_sg3={{{nom_sg3|}}} |acc_sg={{{head|{{pagename}}}}}+N|acc_sg2={{{nom_sg2|}}}|acc_sg3={{{nom_sg3|}}} |gen_sg={{{gen_sg|{{{1}}}}}}+L|gen_sg2={{{gen_sg2|}}}|gen_sg3={{{gen_sg3|}}} |dat_sg={{{dat_sg|{{{head|{{pagename}}}}}}}}+L|dat_sg2…”
2572747
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{sga-decl-noun
|class=o-n|n={{{n|}}}
|nom_sg={{{head|{{pagename}}}}}+N|nom_sg2={{{nom_sg2|}}}|nom_sg3={{{nom_sg3|}}}
|voc_sg={{{head|{{pagename}}}}}+N|voc_sg2={{{nom_sg2|}}}|voc_sg3={{{nom_sg3|}}}
|acc_sg={{{head|{{pagename}}}}}+N|acc_sg2={{{nom_sg2|}}}|acc_sg3={{{nom_sg3|}}}
|gen_sg={{{gen_sg|{{{1}}}}}}+L|gen_sg2={{{gen_sg2|}}}|gen_sg3={{{gen_sg3|}}}
|dat_sg={{{dat_sg|{{{head|{{pagename}}}}}}}}+L|dat_sg2={{{dat_sg2|}}}|dat_sg3={{{dat_sg3|}}}
|nom_du={{{head|{{pagename}}}}}+N|nom_du2={{{nom_sg2|}}}|nom_du3={{{nom_sg3|}}}
|voc_du={{{head|{{pagename}}}}}+N|voc_du2={{{nom_sg2|}}}|voc_du3={{{nom_sg3|}}}
|acc_du={{{head|{{pagename}}}}}+N|acc_du2={{{nom_sg2|}}}|acc_du3={{{nom_sg3|}}}
|gen_du={{{head|{{pagename}}}}}|gen_du2={{{nom_sg2|}}}|gen_du3={{{nom_sg3|}}}
|dat_du={{{dat_pl|{{{2|{{{head|{{pagename}}}}}}}}{{#ifeq:{{{3|}}}|e||a}}ib}}}|dat_du2={{{dat_pl2|}}}|dat_du3={{{dat_pl3|}}}
|nom_pl={{{nom_pl|{{{head|{{pagename}}}}}+L}}}
|nom_pl2={{#ifeq:{{{nom_pl2|}}}|-||{{{nom_pl2|{{{2|{{{head|{{pagename}}}}}}}}{{#ifeq:{{{3|}}}|e|e|}}a}}}}}|nom_pl3={{{nom_pl3|}}}
|voc_pl={{{nom_pl|{{{head|{{pagename}}}}}+L}}}
|voc_pl2={{#ifeq:{{{nom_pl2|}}}|-||{{{nom_pl2|{{{2|{{{head|{{pagename}}}}}}}}{{#ifeq:{{{3|}}}|e|e|}}a}}}}}|voc_pl3={{{nom_pl3|}}}
|acc_pl={{{nom_pl|{{{head|{{pagename}}}}}+L}}}
|acc_pl2={{#ifeq:{{{nom_pl2|}}}|-||{{{nom_pl2|{{{2|{{{head|{{pagename}}}}}}}}{{#ifeq:{{{3|}}}|e|e|}}a}}}}}|acc_pl3={{{nom_pl3|}}}
|gen_pl={{{head|{{pagename}}}}}+N|gen_pl2={{{nom_sg2|}}}|gen_pl3={{{nom_sg3|}}}
|dat_pl={{{dat_pl|{{{2|{{{head|{{pagename}}}}}}}}{{#ifeq:{{{3|}}}|e||a}}ib}}}|dat_pl2={{{dat_pl2|}}}|dat_pl3={{{dat_pl3|}}}
}}<!--
--><noinclude>{{documentation}}</noinclude>
648s6y8e3pk7edritl5lamighb45cdd
cethrar
0
421045
2572748
2026-10-22T14:18:20Z
Hiyuune
50834
Trang mới: “=={{langname|sga}}== ==={{section|etym}}=== Từ {{af|sga|cethair|-ar}}. ==={{section|n}}=== {{sga-noun|n}} # [[bốn]] [[người]]. ===={{section|infl}}==== {{sga-decl-o-neut|cethrair|dat_sg=cethrur|n=s}} ===={{section|desc}}==== * {{desc|ga|ceathrar}} * {{desc|gd|ceathrar}} ==={{section|mut}}=== {{sga-mutation}} ==={{section|ref}}=== * {{R:DIL|8930}}”
2572748
wikitext
text/x-wiki
=={{langname|sga}}==
==={{section|etym}}===
Từ {{af|sga|cethair|-ar}}.
==={{section|n}}===
{{sga-noun|n}}
# [[bốn]] [[người]].
===={{section|infl}}====
{{sga-decl-o-neut|cethrair|dat_sg=cethrur|n=s}}
===={{section|desc}}====
* {{desc|ga|ceathrar}}
* {{desc|gd|ceathrar}}
==={{section|mut}}===
{{sga-mutation}}
==={{section|ref}}===
* {{R:DIL|8930}}
97prfva55eqvuctm821x6jq439qu2sf
Thể loại:Tiếng Tanimuca-Retuarã
14
421046
2572752
2026-10-22T14:22:57Z
Hiyuune
50834
Trang mới: “{{auto cat|Colombia}}”
2572752
wikitext
text/x-wiki
{{auto cat|Colombia}}
9qd0n0tfkzw97i396tegtnmigkclfii
Thể loại:Ngữ hệ Tucanoan
14
421047
2572753
2026-10-22T14:23:41Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572753
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:Mục từ tiếng Tanimuca-Retuarã
14
421048
2572755
2026-10-22T14:25:24Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572755
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
kajua
0
421049
2572757
2026-10-22T14:28:02Z
Hiyuune
50834
+ tnc
2572757
wikitext
text/x-wiki
=={{langname|tnc}}==
==={{section|n}}===
{{head|tnc|Danh từ}}
# [[cá sấu|Cá sấu]] [[đeo]] [[kính]] ({{taxfmt|Caiman crocodilus|loài}})
==={{section|ref}}===
* {{R:Strom & Strom 2019|page=39}}
{{c|tnc|Bộ Cá sấu}}
0ykq60yn6em17rvbv6bezzxiwspgdmr
2572758
2572757
2026-10-22T14:29:03Z
Hiyuune
50834
/* Tiếng Tanimuca-Retuarã */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572758
wikitext
text/x-wiki
=={{langname|tnc}}==
==={{section|n}}===
{{head|tnc|Danh từ}}
# [[cá sấu|Cá sấu]] [[đeo]] [[kính]] ({{taxfmt|Caiman crocodilus|loài}}).
==={{section|ref}}===
* {{R:Strom & Strom 2019|page=39}}
{{c|tnc|Bộ Cá sấu}}
0t2iog23ugx2nffsa3at9new76su3ba
Bản mẫu:R:Strom & Strom 2019
10
421050
2572759
2026-10-22T14:29:29Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |author=Strom, Clay |author2=Strom, Beverly |year=2019 |title=Diccionario escolar trilingüe: Letuama & tanimuka — español — inglés |url=https://www.sil.org/resources/archives/82061 |worklang=es, en |pageparam=page }}<noinclude>{{reference template cat|tnc}}</noinclude>”
2572759
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|author=Strom, Clay
|author2=Strom, Beverly
|year=2019
|title=Diccionario escolar trilingüe: Letuama & tanimuka — español — inglés
|url=https://www.sil.org/resources/archives/82061
|worklang=es, en
|pageparam=page
}}<noinclude>{{reference template cat|tnc}}</noinclude>
8mkysso6lvz25rw7sdoa2c1yybe21ql
Thể loại:Danh từ tiếng Tanimuca-Retuarã
14
421051
2572760
2026-10-22T14:29:55Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572760
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Caiman crocodilus
0
421052
2572761
2026-10-22T14:32:41Z
Hiyuune
50834
Trang mới: “=={{langname|mul}}== [[File:Esfriando.jpg|thumb|'''''Caiman crocodilus''''']] ==={{section|pr-noun}}=== {{taxoninfl|i=1|g=m|head=[[Caiman]] {{epinew|crocodilus||la}}}} # {{taxon|loài|họ|Alligatoridae|[[spectacled caiman|cá sấu đeo kính]]}} ===={{section|hyper}}==== * {{sense|loài}} {{taxfmt|Crocodilia|bộ}} - bộ; {{taxfmt|Eusuchia|phân bộ}} - phân bộ; {{taxfmt|Alligatoridae|họ}} - họ; {{taxfmt|Caimaninae|phân họ}} - phân h…”
2572761
wikitext
text/x-wiki
=={{langname|mul}}==
[[File:Esfriando.jpg|thumb|'''''Caiman crocodilus''''']]
==={{section|pr-noun}}===
{{taxoninfl|i=1|g=m|head=[[Caiman]] {{epinew|crocodilus||la}}}}
# {{taxon|loài|họ|Alligatoridae|[[spectacled caiman|cá sấu đeo kính]]}}
===={{section|hyper}}====
* {{sense|loài}} {{taxfmt|Crocodilia|bộ}} - bộ; {{taxfmt|Eusuchia|phân bộ}} - phân bộ; {{taxfmt|Alligatoridae|họ}} - họ; {{taxfmt|Caimaninae|phân họ}} - phân họ; {{taxfmt|Caiman|chi}} - chi
==={{section|ref}}===
* {{pedia|i=1}}
* {{specieslite|i=1}}
* {{comcatlite|i=1}}
* {{R:ITIS|174370}}
* {{R:COLTax|PBBP}}
* {{R:EOL|454113}}
* {{R:NCBI|8499}}
* {{R:AnimalDiversityWeb|Caiman_crocodilus}}
* {{R:WoRMS|1417014}}
nsla9cghpygql6etmounuav1qsi21fg
Bản mẫu:R:COLTax
10
421053
2572762
2026-10-22T14:33:28Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->[http://www.catalogueoflife.org/data/taxon/{{{1|}}} {{#if:{{{noi|}}}|{{{2|{{PAGENAME}}}}}|''{{{2|{{PAGENAME}}}}}''}}] trong {{w|Catalogue of Life}} <noinclude>{{documentation}}</noinclude>”
2572762
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->[http://www.catalogueoflife.org/data/taxon/{{{1|}}} {{#if:{{{noi|}}}|{{{2|{{PAGENAME}}}}}|''{{{2|{{PAGENAME}}}}}''}}] trong {{w|Catalogue of Life}} <noinclude>{{documentation}}</noinclude>
s4dztsd28lbm3kildjcddz6o8o9oyu4
Bản mẫu:R:AnimalDiversityWeb
10
421054
2572763
2026-10-22T14:34:49Z
Hiyuune
50834
Trang mới: “{{#invoke:checkparams|error}}<!-- Validate template parameters -->[http://animaldiversity.org/site/accounts/information/{{urlencode:{{{1|{{pagename}}}}}|PATH}}.html {{#if:{{{noi|}}}|{{{1|{{pagename}}}}}|''{{{1|{{pagename}}}}}''}}] trong {{w|en:Animal Diversity Web|Animal Diversity Web}}<noinclude>{{documentation}}</noinclude>”
2572763
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->[http://animaldiversity.org/site/accounts/information/{{urlencode:{{{1|{{pagename}}}}}|PATH}}.html {{#if:{{{noi|}}}|{{{1|{{pagename}}}}}|''{{{1|{{pagename}}}}}''}}] trong {{w|en:Animal Diversity Web|Animal Diversity Web}}<noinclude>{{documentation}}</noinclude>
gd5yl9la6jj46iqb3l1iaa2y01ai46h
niñerũ
0
421055
2572764
2026-10-22T14:37:24Z
Hiyuune
50834
Trang mới: “=={{langname|tnc}}== ==={{section|etym}}=== Vay mượn từ {{bor|tnc|es|dinero}}. ==={{section|n}}=== {{head|tnc|Danh từ}} # [[tiền]]. ==={{section|ref}}=== * {{R:Strom & Strom 2019|page=51}}”
2572764
wikitext
text/x-wiki
=={{langname|tnc}}==
==={{section|etym}}===
Vay mượn từ {{bor|tnc|es|dinero}}.
==={{section|n}}===
{{head|tnc|Danh từ}}
# [[tiền]].
==={{section|ref}}===
* {{R:Strom & Strom 2019|page=51}}
g7au5gehrq5slb7uuus6nss4jagwjqb
Bản mẫu:sga-decl-ia-fem
10
421056
2572768
2026-10-22T14:51:59Z
Hiyuune
50834
Trang mới: “<includeonly>{{#invoke:checkparams|error}}</includeonly>{{sga-decl-noun |class=iā-f|n={{{n|}}} |nom_sg={{{nom_sg|{{{1}}}e}}}+L |voc_sg={{{nom_sg|{{{1}}}e}}}+L |acc_sg={{{acc_sg|{{{1}}}i}}}+N |gen_sg={{{gen_sg|{{{1}}}e}}} |dat_sg={{{acc_sg|{{{1}}}i}}}+L |nom_du={{{acc_sg|{{{1}}}i}}}+L |voc_du={{{acc_sg|{{{1}}}i}}}+L |acc_du={{{acc_sg|{{{1}}}i}}}+L |gen_du={{{nom_sg|{{{1}}}e}}}+L |dat_du={{{dat_pl|{{{1}}}ib}}} |nom_pl={{{nom_pl|{{{1}}}i}}} |acc_pl={{{nom_pl|{{{1}}}i}}}…”
2572768
wikitext
text/x-wiki
<includeonly>{{#invoke:checkparams|error}}</includeonly>{{sga-decl-noun
|class=iā-f|n={{{n|}}}
|nom_sg={{{nom_sg|{{{1}}}e}}}+L
|voc_sg={{{nom_sg|{{{1}}}e}}}+L
|acc_sg={{{acc_sg|{{{1}}}i}}}+N
|gen_sg={{{gen_sg|{{{1}}}e}}}
|dat_sg={{{acc_sg|{{{1}}}i}}}+L
|nom_du={{{acc_sg|{{{1}}}i}}}+L
|voc_du={{{acc_sg|{{{1}}}i}}}+L
|acc_du={{{acc_sg|{{{1}}}i}}}+L
|gen_du={{{nom_sg|{{{1}}}e}}}+L
|dat_du={{{dat_pl|{{{1}}}ib}}}
|nom_pl={{{nom_pl|{{{1}}}i}}}
|acc_pl={{{nom_pl|{{{1}}}i}}}
|voc_pl={{{nom_pl|{{{1}}}i}}}
|gen_pl={{{nom_sg|{{{1}}}e}}}+N
|dat_pl={{{dat_pl|{{{1}}}ib}}}
}}<!--
--><noinclude>{{documentation}}</noinclude>
j53jpn5p19ouw0tkuimlm2ad6gckea9
なんかい
0
421057
2572769
2026-10-22T14:55:36Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|何回|何階|難解|南海}}”
2572769
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|何回|何階|難解|南海}}
q457v4ydb2fw6nb0arbyl90ad8k3vr2
nankai
0
421058
2572770
2026-10-22T14:59:06Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|なんかい}}”
2572770
wikitext
text/x-wiki
=={{langname|ja}}==
==={{ĐM|rom}}===
{{ja-romaji}}
# {{ja-romanization of|なんかい}}
48yk1xugvuwsvpgbhm2klelhwycabvr
línshí
0
421059
2572771
2026-10-22T15:02:19Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|臨時}}”
2572771
wikitext
text/x-wiki
=={{langname|ja}}==
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|臨時}}
rmjkub0rpgk7yycwtiagx8v1sxca2wm
2572777
2572771
2026-10-22T15:08:23Z
WhoAlone
40420
2572777
wikitext
text/x-wiki
=={{langname|cmn}}==
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|臨時}}
epnmfjcldj8x8zernsbilqptplqdlf1
りんじ
0
421060
2572772
2026-10-22T15:03:26Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|臨時}}”
2572772
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|臨時}}
oxsd08ofxs634wle5rm7qt94ivc5p1m
rinji
0
421061
2572773
2026-10-22T15:04:37Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|りんじ}}”
2572773
wikitext
text/x-wiki
=={{langname|ja}}==
==={{ĐM|rom}}===
{{ja-romaji}}
# {{ja-romanization of|りんじ}}
8e5b7cd30fmsk20sybm0g0trwqwi36i
임시
0
421062
2572774
2026-10-22T15:06:31Z
WhoAlone
40420
Trang mới: “=={{langname|ko}}== ==={{ĐM|alter form}}=== * {{ko-l|림시}} (Bắc Triều Tiên) ==={{ĐM|etym}}=== {{ko-etym-sino|臨時}} ==={{ĐM|etym}}=== {{ko-IPA}} ==={{ĐM|noun}}=== {{ko-noun|hanja=臨時}} # [[lâm thời]].”
2572774
wikitext
text/x-wiki
=={{langname|ko}}==
==={{ĐM|alter form}}===
* {{ko-l|림시}} (Bắc Triều Tiên)
==={{ĐM|etym}}===
{{ko-etym-sino|臨時}}
==={{ĐM|etym}}===
{{ko-IPA}}
==={{ĐM|noun}}===
{{ko-noun|hanja=臨時}}
# [[lâm thời]].
8mmyh4cwxhs5rph1atmakd5yx08jbrz
mótuka
0
421063
2572775
2026-10-22T15:08:01Z
TheHighFighter2
42988
/* */
2572775
wikitext
text/x-wiki
=={{langname|ln}}==
==={{ĐM|alter}}===
* {{alter|ln|mútuka}}
==={{ĐM|etym}}===
Từ {{bor|ln|sw|motokaa}}, từ {{der|ln|en|motorcar}}.<ref>{{cite-book|author=Jan Knappert|year=1979|chapter=The origin and development of Lingala|title=Readings in Creole Studies|editor=Ian F. Hancock|location=Ghent|publisher=E. Story-Scientia|page=161|doi=10.1075/ssls.2.11kna|isbn=9789064391637|pageurl=https://books.google.com/books?id=2awbAgAAQBAJ&pg=PA161}}</ref>
==={{ĐM|pron}}===
* {{IPA|ln|/mo˥ˈtu˩.ka˩/}}
==={{ĐM|noun}}===
{{ln-noun|3|mítuka}}
# [[xe hơi|Xe hơi]]; [[ô tô]].
==={{ĐM|ref}}===
{{reflist}}
{{C|ln|Xe hơi}}
47nhe8c1fnrgkuxmwsfpprbmxqexiic
림시
0
421064
2572776
2026-10-22T15:08:18Z
WhoAlone
40420
Trang mới: “=={{langname|ko}}== ==={{ĐM|alter form}}=== * {{ko-l|임시}} (Hàn Quốc) ==={{ĐM|etym}}=== {{ko-etym-sino|臨時}} ==={{ĐM|etym}}=== {{ko-IPA}} ==={{ĐM|noun}}=== {{ko-noun|hanja=臨時}} # {{label|ko|North Korea}} [[lâm thời]].”
2572776
wikitext
text/x-wiki
=={{langname|ko}}==
==={{ĐM|alter form}}===
* {{ko-l|임시}} (Hàn Quốc)
==={{ĐM|etym}}===
{{ko-etym-sino|臨時}}
==={{ĐM|etym}}===
{{ko-IPA}}
==={{ĐM|noun}}===
{{ko-noun|hanja=臨時}}
# {{label|ko|North Korea}} [[lâm thời]].
ispolaebxzdrpm9wm2v4c83hr72pgvz
情报
0
421065
2572778
2026-10-22T15:11:30Z
WhoAlone
40420
Trang mới: “{{also|情報}} =={{langname|zh}}== {{zh-see|情報}}”
2572778
wikitext
text/x-wiki
{{also|情報}}
=={{langname|zh}}==
{{zh-see|情報}}
25jhc3xbaz6i0xjatbd2s5j8a5bev2f
qíngbào
0
421066
2572779
2026-10-22T15:15:05Z
WhoAlone
40420
Trang mới: “=={{langname|cmn}}== ==={{ĐM|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|情報}}”
2572779
wikitext
text/x-wiki
=={{langname|cmn}}==
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|情報}}
17hvl0yqvw4bza24y4x8kfe76thirfd
じょうほう
0
421067
2572780
2026-10-22T15:15:34Z
WhoAlone
40420
Trang mới: “{{also|しょうほう|しょうぼう}} =={{langname|ja}}== {{ja-see|上方|定法|乗法|城堡|常法|情報|承保|条法}}”
2572780
wikitext
text/x-wiki
{{also|しょうほう|しょうぼう}}
=={{langname|ja}}==
{{ja-see|上方|定法|乗法|城堡|常法|情報|承保|条法}}
2rdvza0f0edli2kys9uffzd0a37uz74
じやうほう
0
421068
2572781
2026-10-22T15:16:27Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|情報}}”
2572781
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|情報}}
nfqztpuwj85swutx60bzlurymhjldc9
jōhō
0
421069
2572782
2026-10-22T15:17:40Z
WhoAlone
40420
Trang mới: “{{also|joho|johō|jōho}} =={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|じょうほう}}”
2572782
wikitext
text/x-wiki
{{also|joho|johō|jōho}}
=={{langname|ja}}==
==={{ĐM|rom}}===
{{ja-romaji}}
# {{ja-romanization of|じょうほう}}
iykzcpw2899tws6uawy05d1l6xwkom8
調查
0
421070
2572783
2026-10-22T15:18:46Z
WhoAlone
40420
Trang mới: “=={{langname|vi}}== {{vi-hantutab}} ==={{ĐM|verb}}=== {{vi-verb|sc=Hani}} # {{vi-Han form of|điều tra}}”
2572783
wikitext
text/x-wiki
=={{langname|vi}}==
{{vi-hantutab}}
==={{ĐM|verb}}===
{{vi-verb|sc=Hani}}
# {{vi-Han form of|điều tra}}
iqxefqckf4ufydp7gqiqrm4pdmydkna
2572784
2572783
2026-10-22T15:18:58Z
WhoAlone
40420
2572784
wikitext
text/x-wiki
{{also|調査|调查}}
=={{langname|vi}}==
{{vi-hantutab}}
==={{ĐM|verb}}===
{{vi-verb|sc=Hani}}
# {{vi-Han form of|điều tra}}
gw3ttw2j3nzsjnkmvfptcrszdwes1wu
ちょうさ
0
421071
2572785
2026-10-22T15:19:20Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|調査|潮差}}”
2572785
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|調査|潮差}}
dhoatnfynsie1kn0e3nd4w53d41367r
てうさ
0
421072
2572786
2026-10-22T15:20:32Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|調査}}”
2572786
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|調査}}
73j25p97ftd99teb3re0fivmzgin7b2
chōsa
0
421073
2572787
2026-10-22T15:20:55Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|ちょうさ}}”
2572787
wikitext
text/x-wiki
=={{langname|ja}}==
==={{ĐM|rom}}===
{{ja-romaji}}
# {{ja-romanization of|ちょうさ}}
b0s5rclj8a14rhnjotb6niosjfn6idx
Chūnrìjǐng
0
421074
2572788
2026-10-22T15:21:40Z
WhoAlone
40420
Trang mới: “=={{langname|cmn}}== ==={{ĐM|rom}}=== {{cmn-pinyin}} # {{cmn-pinyin of|春日井}}”
2572788
wikitext
text/x-wiki
=={{langname|cmn}}==
==={{ĐM|rom}}===
{{cmn-pinyin}}
# {{cmn-pinyin of|春日井}}
fzkmnvmgh6nw5kg6fbbl0j2sb8eerda
かすがい
0
421075
2572789
2026-10-22T15:23:09Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|春日井}}”
2572789
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|春日井}}
fy13gdpmber6s2amnb6wftegukhcam2
かすがゐ
0
421076
2572790
2026-10-22T15:23:11Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|春日井}}”
2572790
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|春日井}}
fy13gdpmber6s2amnb6wftegukhcam2
しもだ
0
421077
2572791
2026-10-22T15:25:11Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== {{ja-see|下田}}”
2572791
wikitext
text/x-wiki
=={{langname|ja}}==
{{ja-see|下田}}
4yi02xkahnj30ouohddawru419rd8o6
Shimoda
0
421078
2572792
2026-10-22T15:25:30Z
WhoAlone
40420
Trang mới: “=={{langname|ja}}== ==={{ĐM|rom}}=== {{ja-romaji}} # {{ja-romanization of|しもだ}}”
2572792
wikitext
text/x-wiki
=={{langname|ja}}==
==={{ĐM|rom}}===
{{ja-romaji}}
# {{ja-romanization of|しもだ}}
0tqzr30hh2plfwc7eivffbtxlbmkeng
Thể loại:ncb:Mọi người
14
421079
2572798
2026-10-22T15:35:41Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572798
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Trung Quốc
14
421080
2572799
2026-10-22T15:35:43Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572799
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Quốc gia của châu Á
14
421081
2572800
2026-10-22T15:35:54Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572800
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Quốc gia
14
421082
2572801
2026-10-22T15:35:57Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572801
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Châu Á
14
421083
2572802
2026-10-22T15:37:04Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572802
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Tổ chức chính trị
14
421084
2572803
2026-10-22T15:37:05Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572803
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Đại lục Á Âu
14
421085
2572804
2026-10-22T15:37:12Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572804
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Kiến trúc
14
421086
2572807
2026-10-22T15:37:45Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572807
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Thời gian
14
421087
2572808
2026-10-22T15:37:46Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572808
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khoa học ứng dụng
14
421088
2572810
2026-10-22T15:38:30Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572810
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Nghệ thuật
14
421089
2572811
2026-10-22T15:38:32Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572811
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Văn hóa
14
421090
2572812
2026-10-22T15:38:40Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572812
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Xã hội
14
421091
2572813
2026-10-22T15:38:48Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572813
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Xây dựng
14
421092
2572822
2026-10-22T15:41:05Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572822
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Dụng cụ nhà bếp
14
421093
2572823
2026-10-22T15:41:06Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572823
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Kỹ thuật
14
421094
2572824
2026-10-22T15:41:14Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572824
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Nấu ăn
14
421095
2572825
2026-10-22T15:41:21Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572825
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Hàng gia dụng
14
421096
2572826
2026-10-22T15:41:22Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572826
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Ăn uống
14
421097
2572827
2026-10-22T15:41:31Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572827
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Máy móc
14
421098
2572828
2026-10-22T15:41:38Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572828
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Chỗ ở
14
421099
2572829
2026-10-22T15:41:41Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572829
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
kích cầu
0
421100
2572830
2026-10-22T20:12:36Z
TienMinh-mun6xnChing
57893
/* */
2572830
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|adj}}===
{{vi-adj}}
# [[kích thích|Kích thích]] [[nhu cầu]] [[tiêu dùng]], [[tiêu thụ]] [[hàng hóa]] nhằm [[phát triển]] [[sản xuất]].
#: {{ux|vi|Các biện pháp '''kích cầu'''}}
#: {{ux|vi|Giảm giá để '''kích cầu'''}}
==={{section|ref}}===
{{R:Tratu}}
dpa3jxjp7vcahytnxls77ue3ntef1wo
2572831
2572830
2026-10-22T20:13:01Z
TienMinh-mun6xnChing
57893
2572831
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# [[kích thích|Kích thích]] [[nhu cầu]] [[tiêu dùng]], [[tiêu thụ]] [[hàng hóa]] nhằm [[phát triển]] [[sản xuất]].
#: {{ux|vi|Các biện pháp '''kích cầu'''.}}
#: {{ux|vi|Giảm giá để '''kích cầu'''.}}
==={{section|ref}}===
{{R:Tratu}}
1ue5ayqfawvf172w9w6v7wzilmox6k3
2572907
2572831
2026-10-23T07:11:25Z
TheHighFighter2
42988
2572907
wikitext
text/x-wiki
=={{langname|vi}}==
==={{section|pron}}===
{{vi-pron}}
==={{section|verb}}===
{{vi-verb}}
# [[kích thích|Kích thích]] [[nhu cầu]] [[tiêu dùng]], [[tiêu thụ]] [[hàng hóa]] nhằm [[phát triển]] [[sản xuất]].
#: {{ux|vi|Các biện pháp '''kích cầu'''.}}
#: {{ux|vi|Giảm giá để '''kích cầu'''.}}
==={{section|ref}}===
{{R:Tratu}}
h75rv8es8y594sfec3sgx9cfs0z1lcm
Tuyên Hoá
0
421101
2572833
2026-10-22T20:13:57Z
TienMinh-mun6xnChing
57893
TienMinh-mun6xnChing đã đổi [[Tuyên Hoá]] thành [[Tuyên Hóa]] qua đổi hướng: viết đúng tên huyện
2572833
wikitext
text/x-wiki
#đổi [[Tuyên Hóa]]
t8j12vlyfibcyibu6mx4knd349vhaca
Thể loại:Mô đun dữ liệu tiếng Phạn
14
421102
2572835
2026-10-23T00:37:01Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572835
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:Danh từ thân từ ī tiếng Phạn
14
421103
2572845
2026-10-23T01:17:06Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572845
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
करुणाम्
0
421104
2572852
2026-10-23T01:25:19Z
Hiyuune
50834
+ sa
2572852
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|v}}===
{{head|sa|Biến thể hình thái danh từ|tr=karuṇām}}
# {{infl of|sa|करुणा||acc|s}}
9i6micfaii1fw79dni0opt6ob21tryy
2572853
2572852
2026-10-23T01:25:35Z
Hiyuune
50834
/* Tiếng Phạn */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572853
wikitext
text/x-wiki
=={{langname|sa}}==
==={{section|n}}===
{{head|sa|Biến thể hình thái danh từ|tr=karuṇām}}
# {{infl of|sa|करुणा||acc|s}}
bp12lgktchet5jx3u0eg7vp5hb9r006
विद्
0
421105
2572855
2026-10-23T01:39:57Z
Hiyuune
50834
Trang mới: “{{also|वद्|वेदि|वादा|वेदी|वेद|वाद|-वादी}} =={{langname|sa}}== ==={{section|alt sc}}=== {{sa-alt}} ==={{section|etym}}=== {{etymon|sa|pos=root|:inh|ine-pro:*weyd-<id:nhìn, xem>|id=gốc từ}} Từ {{inh|sa|iir-pro|*wayd-}}, từ {{inh|sa|ine-pro|*weyd-|t=nhìn, xem}}; theo nghĩa bóng "biết".<ref>{{R:sa:EWAia|vol=II|page=579|head=VED}}</ref> Cùng gốc với {{cog|la|videō|t=nhìn, xem}}, {{cog|grc|οἶδα|t=bi…”
2572855
wikitext
text/x-wiki
{{also|वद्|वेदि|वादा|वेदी|वेद|वाद|-वादी}}
=={{langname|sa}}==
==={{section|alt sc}}===
{{sa-alt}}
==={{section|etym}}===
{{etymon|sa|pos=root|:inh|ine-pro:*weyd-<id:nhìn, xem>|id=gốc từ}}
Từ {{inh|sa|iir-pro|*wayd-}}, từ {{inh|sa|ine-pro|*weyd-|t=nhìn, xem}}; theo nghĩa bóng "biết".<ref>{{R:sa:EWAia|vol=II|page=579|head=VED}}</ref> Cùng gốc với {{cog|la|videō|t=nhìn, xem}}, {{cog|grc|οἶδα|t=biết}}, {{cog|be|ве́даць|t=biết}}, {{cog|ru|ве́дать|t=biết}}, {{cog|cu|вѣдѣти|t=biết; nhìn, xem}}. So sánh thêm {{cog|en|wit}}, {{cog|bg|ви́дя|t=nhìn, xem}}, {{cog|ru|ви́деть|t=nhìn, xem}}.
==={{section|pron}}===
{{sa-IPA}}
==={{section|root}}===
{{head|sa|Gốc từ}}
# [[biết|Biết]].
# [[tìm|Tìm]].
# [[xem|Xem]] như cái gì đó; [[hiểu lầm]] cái gì đó.
===={{section|usage}}====
Gốc từ {{pagename}} được chia thành hai nghĩa là "biết" và "tìm". Có nguồn gốc dựa trên nghĩa "tìm" của {{m|sa|विन्दति|tr=vindáti}}, {{m|sa|अविदत्|tr=ávidat}}, {{m|sa|विवेद|tr=vivéda}}, {{m|sa|वित्त|tr=vittá}}, {{m|sa|वित्त्वा|tr=vittvā́}}, và những từ khác.
===={{section|drv}}====
{{sa-root deriv
|pres=vétti,vidáti,vindáti,védati,vintte
|fut=vediṣyati,vetsyati
|pfut=veditā́,vettā́
|aor=ávedīt,ávidat,ávitsi
|perf=véda,vivéda
|pperf=vidā́ṃcakāra
|pass=vidyáte
|pass_aor=ávedi
|caus=vedáyati
|pass_caus=vedyate
|caus_aor=ávīvidat
|desid=vivitsati,vividiṣati
|intens=vevidyate,vevetti
|ppp=viditá,vittá,vinná
|inf=vettum,vettave,vettavai,vettos,vide
|gerund=vittvā́,vídya
|gerundive=védya,veditavyà
|desid_part=vivitsu,vividiṣu
|desid_caus_part=vivedayiṣu
|víd
|vida
|véda
|vedaka
|vedana
|védas
|vedi
|vedin
|vedyā́
|vidu
|vitti
|vettṛ
|véditṛ
|vidátha
|vidyā́
|vidmán
|vidura
|vidvas
|vidvalá
|vivitsā
|vividiṣā
|vedayitṛ
|prefixed=anuvid,nirvid,parivid,pravid,saṃvid,prativid
}}
===={{section|desc}}====
{{rootsee|+|sa}}
==={{section|adj}}===
{{sa-adj|comp=वित्तर|sup=वित्तम}}
# {{sa-ifc|adj}} Có [[hiểu biết]].
# {{sa-ifc|adj}} [[tìm kiếm|Tìm kiếm]]; [[tìm hiểu]].
===={{section|decl}}====
{{sa-adecl|}}
==={{section|n}}===
{{sa-noun|m}}
# {{lb|sa|astronomy}} [[Sao Thủy]].
===={{section|decl}}====
{{sa-ndecl|<m>}}
==={{section|n}}===
{{sa-noun|f}}
# Có [[hiểu biết]].
===={{section|decl}}====
{{sa-ndecl|<f>}}
==={{section|ref}}===
{{reflist}}
==={{section|further}}===
* {{R:MW|963|col=2}}
* {{R:MW|964|col=3}}
* {{R:sa:Whitney|159}}
4suqaepmtzz3shi829wztokinxvryyx
Bản mẫu:sa-adecl
10
421106
2572857
2026-10-23T01:43:24Z
Hiyuune
50834
Trang mới: “<includeonly>{{#invoke:sa-decl|adjective}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude>”
2572857
wikitext
text/x-wiki
<includeonly>{{#invoke:sa-decl|adjective}}</includeonly><!--
--><noinclude>{{documentation}}</noinclude>
akklk32f0aqtqbpgq1li8xpop9wd9dm
kirjaimikko
0
421107
2572858
2026-10-23T01:52:12Z
Hiyuune
50834
Trang mới: “=={{langname|olo}}== ==={{section|n}}=== {{olo-noun|kirjaimikon|kirjaimikkuo}} # [[bảng chữ cái]]. ==={{section|ref}}=== * {{R:olo:Zarinova:2012|page=9}} * {{R:olo:Boiko:2019|+}}”
2572858
wikitext
text/x-wiki
=={{langname|olo}}==
==={{section|n}}===
{{olo-noun|kirjaimikon|kirjaimikkuo}}
# [[bảng chữ cái]].
==={{section|ref}}===
* {{R:olo:Zarinova:2012|page=9}}
* {{R:olo:Boiko:2019|+}}
7y7hatyaihthqwt82lbdh64gms81szn
Mô đun:zlw-lch-decl
828
421108
2572859
2026-10-23T01:54:13Z
Hiyuune
50834
Trang mới: “--[==[ intro: This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and {{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and {{tl|zlw-opl-ndecl}} for Old Polish nouns. The following terminology is helpful to understand: * The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale tantum. In a call it's…”
2572859
Scribunto
text/plain
--[==[ intro:
This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and
{{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and
{{tl|zlw-opl-ndecl}} for Old Polish nouns.
The following terminology is helpful to understand:
* The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale
tantum. In a call it's followed by an inline spec of indicators in angle brackets, e.g.
`{{pl-ndecl|<m.anml.*.datu>}}` (the page name as an animal noun with a mobile ''e'' and the dative in ''-u'') or
`{{pl-ndecl|Morze<n.sg> Bałtyckie<+>}}`.
* A '''slot''' is a particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a
table.
* The '''stem''' is the lemma minus its nominative ending. A '''group''' is the set of nouns that share one set of
rules; a '''rule''' gives the forms of a slot for the stems that end in particular letters; and a '''copy''' is a
slot that takes its forms from another one. See [[Module:zlw-lch-decl/data/pl]] for the details.
* An '''alternation''' is a change to the stem that a rule asks for: dropping or inserting the mobile ''e'', ''ó''/''o''
and ''ą''/''ę'', and the palatalizations.
* A '''base''' is what [[Module:inflection utilities]] calls the parsed spec of a single word: its lemma, indicators and
overrides, plus its forms once it has been declined.
Authorship: [[User:Fenakhay]]
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
languages = "Module:languages",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
utilities = "Module:utilities",
},
loadData = {
data = "Module:zlw-lch-decl/data",
headword_data = "Module:headword/data",
},
}
-- Return the data module of the language `code` (`Module:zlw-lch-decl/data/CODE`) and its language object. `entry` is
-- the entry point being invoked (`noun` or `adjective`); throw an error if `languages` in [[Module:zlw-lch-decl/data]]
-- doesn't list that entry for the language.
local function language_of(code, entry)
local language = code and M.data.languages[code]
if not language or not language[entry] then
local codes = {}
for known, entries in pairs(M.data.languages) do
if entries[entry] then
table.insert(codes, known)
end
end
table.sort(codes)
error(("The #invoke needs lang= with one of %s"):format(table.concat(codes, ", ")), 0)
end
return mw.loadData("Module:zlw-lch-decl/data/" .. code), M.languages.getByCode(code)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the indicators of a single word, i.e. the `<...>` after its lemma, e.g. `<m.anml.*.datu>`. `Spec.parse`
is the `parse_indicator_spec` callback passed to [[Module:inflection utilities]]; it returns the base of the word, with
its indicators by group and its overrides by slot. The indicators each template knows are listed under `indicators` in
the language's data module, and an unknown one is an error that lists the known ones.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Return the footnotes in a group that `split_alternating_runs` produced from a bracketed run, i.e. the bracketed
-- segments after the first segment. Throw an error if any text follows a footnote.
local function fetch_footnotes(group, text)
local footnotes
for i = 2, #group - 1, 2 do
if group[i + 1] ~= "" then
spec_error("Extraneous text after a bracketed footnote", text)
end
footnotes = footnotes or {}
table.insert(footnotes, group[i])
end
return footnotes
end
--[==[
Parse an override of one or more slots of a noun. There are two kinds of overrides:
* Endings, written `CASE[pl]ENDING:ENDING...`, e.g. `genu` or `insplami:mi`. These go on the stem that the slot's rule
uses.
* Whole forms, written `CASE[pl]:FORM:FORM...`, e.g. `voc:człowiecze:człowieku`.
`CASE+CASE...` sets several cases at once, and `du` in place of `pl` names a dual slot (`nomdu`). Among endings, `+`
stands for the forms the rules give, so that e.g. `nomplowie:+` adds ''-owie'' to them. `-` stands for no ending (among
endings) or no form (among forms), and a footnote can follow any value. `depr` is the deprecative nominative plural of
a masculine personal noun. Return two values: the slots the override applies to, and an object describing it.
]==]
local Overrides = {}
function Overrides.parse(group, text)
local part = group[1]
local slots = {}
while true do
if mw.ustring.sub(part, 1, 4) == "depr" then
table.insert(slots, "depr_p")
part = mw.ustring.sub(part, 5)
else
local case = mw.ustring.sub(part, 1, 3)
if not M.data.case_codes[case] then
spec_error(("Unrecognized case '%s' in an override"):format(case), text)
end
part = mw.ustring.sub(part, 4)
if mw.ustring.find(part, "^pl") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_p")
elseif mw.ustring.find(part, "^du") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_d")
else
table.insert(slots, case .. "_s")
end
end
if mw.ustring.find(part, "^%+[a-z]") then
part = mw.ustring.sub(part, 2)
else
break
end
end
local override = {values = {}}
if mw.ustring.find(part, "^:") then
override.full = true
part = mw.ustring.sub(part, 2)
end
group[1] = part
for _, value_group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")) do
local value = value_group[1]
if value == "" then
spec_error("Use - for an empty ending or no form", text)
end
table.insert(override.values, {
form = value == "-" and "" or value,
default = not override.full and value == "+" or nil,
footnotes = fetch_footnotes(value_group, text),
})
end
return slots, override
end
-- The slots of an adjective table, which an override of {{tl|pl-adecl}} can name, with their accelerator tags (using the
-- codes in [[Module:form of/data]], `nv` = non-virile).
local ADJECTIVE_ACCEL = {
nom_m = "nom|m|s", nom_f = "nom|f|s", nom_n = "nom|n|s", nom_mp_pers = "vr|nom|p", nom_p_not_mp_pers = "nv|nom|p",
nom_mp_npers = "nv|nom|m|p", nom_fp = "nom|f|p", nom_np = "nom|n|p",
gen_mn = "gen|m//n|s", gen_f = "gen|f|s", gen_p = "gen|p",
dat_mn = "dat|m//n|s", dat_f = "dat|f|s", dat_p = "dat|p",
acc_m_an = "an|acc|m|s", acc_m_in = "in|acc|m|s", acc_f = "acc|f|s", acc_n = "acc|n|s",
acc_mp_pers = "vr|acc|p", acc_p_not_mp_pers = "nv|acc|p", acc_mp_npers = "nv|acc|m|p", acc_fp = "acc|f|p",
acc_np = "acc|n|p",
ins_mn = "ins|m//n|s", ins_f = "ins|f|s", ins_p = "ins|p", ins_mnp = "ins|m//n|p", ins_fp = "ins|f|p",
loc_mn = "loc|m//n|s", loc_f = "loc|f|s", loc_p = "loc|p",
nom_m_d = "nom|m|d", nom_fn_d = "nom|f//n|d", gen_d = "gen|d", dat_d = "dat|d", acc_m_d = "acc|m|d",
acc_fn_d = "acc|f//n|d", ins_d = "ins|d", loc_d = "loc|d",
short = "short",
}
--[==[
Parse an override of {{tl|pl-adecl}}, in the format of the former [[Module:pl-adjective]]: `SLOT[+SLOT...]:FORM:FORM...`
with the slot names of the adjective, e.g. `nom_mp_pers:weseli` or `gen_p+loc_p:...`. Only whole forms are allowed.
Return the same two values as `Overrides.parse`.
]==]
function Overrides.parseAdjective(group, text)
local slots = {}
local value_groups = M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")
if #value_groups[1] > 1 then
spec_error("A footnote can't follow the slot name of an override", text)
end
for slot in mw.text.gsplit(value_groups[1][1], "+", true) do
if not ADJECTIVE_ACCEL[slot] then
spec_error(("Unrecognized slot '%s' in an override"):format(slot), text)
end
table.insert(slots, slot)
end
local override = {values = {}, full = true}
for i = 2, #value_groups do
local value = value_groups[i][1]
if value == "" then
spec_error("Use - for no form", text)
end
table.insert(override.values, {form = value == "-" and "" or value, footnotes = fetch_footnotes(value_groups[i], text)})
end
return slots, override
end
-- Return the definition of the indicator `name` for `template`, or nil if there isn't one.
local function indicator_definition(data, template, name)
return data.indicators[template][name]
end
-- Return true if `part` of a spec is an override, i.e. it begins with a case code (or `depr`) and isn't an indicator.
local function is_override(data, template, part)
local name = mw.ustring.match(part, "^([^:]*)") or part
if indicator_definition(data, template, name) then
return false
end
return M.data.case_codes[mw.ustring.sub(part, 1, 3)] ~= nil or mw.ustring.sub(part, 1, 4) == "depr"
end
-- Return true if `part` (`NAME:VALUE`) is an indicator that takes a value (e.g. `decllemma:dń` or `lect:skur`) rather
-- than an override.
local function takes_value(data, template, part)
local definition = indicator_definition(data, template, mw.ustring.match(part, "^([^:]+):"))
return definition and definition.value ~= nil
end
function Spec.parse(angle_bracket_spec, template, data)
local inside = mw.ustring.match(angle_bracket_spec, "^<(.*)>$")
local base = setmetatable({overrides = {}, indicators = {}, groups = {}, template = template, data = data,
text = angle_bracket_spec}, Spec)
if inside == "" then
return base
end
local segments = M.parse_utilities.parse_balanced_segment_run(inside, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(segments, "%.")) do
local part = group[1]
if part == "" then
if #group == 1 then
spec_error("Blank indicator", angle_bracket_spec)
end
base.footnotes = fetch_footnotes(group, angle_bracket_spec)
elseif template == "adjective" and mw.ustring.find(part, ":") and not takes_value(data, template, part)
or template ~= "adjective" and is_override(data, template, part) then
local slots, override
if template == "adjective" then
slots, override = Overrides.parseAdjective(group, angle_bracket_spec)
else
slots, override = Overrides.parse(group, angle_bracket_spec)
end
for _, slot in ipairs(slots) do
if base.overrides[slot] then
spec_error(("Two overrides for the slot '%s'"):format(slot), angle_bracket_spec)
end
base.overrides[slot] = override
end
else
if #group > 1 then
spec_error("A footnote can only follow an override or stand alone", angle_bracket_spec)
end
local name, value = mw.ustring.match(part, "^([^:]+):(.*)$")
name = name or part
local definition = indicator_definition(data, template, name)
if not definition then
local names = {}
for known in pairs(data.indicators[template]) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")),
angle_bracket_spec)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), angle_bracket_spec)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), angle_bracket_spec)
end
if base.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), angle_bracket_spec)
end
local key = definition.group or name
if base.groups[key] then
spec_error(("The indicators '%s' and '%s' exclude each other"):format(base.groups[key], name),
angle_bracket_spec)
end
base.groups[key] = name
base.indicators[name] = value or true
end
end
return base
end
-- Return the value set by a group of indicators (e.g. "m" for `gender`), or nil if none of the group was given.
function Spec:group(group)
local name = self.groups[group]
if not name then
return nil
end
return indicator_definition(self.data, self.template, name).sets or name
end
------------------------------------------------------------------------------------------------------------------------
-- Stem --
------------------------------------------------------------------------------------------------------------------------
--[==[
Functions to find the stem of a lemma and apply the alternations of the language's data module to it.
]==]
local Stem = {}
-- Split a lemma into its stem and nominative ending. The ending is the first of the `nominative_endings` of its gender
-- (`m`, `f` or `n`, or `plural` for a plurale tantum) that the lemma ends in with something before it; if there's none,
-- the lemma is its own stem and the ending is empty.
function Stem.split(data, lemma, gender, plural)
for _, ending in ipairs(data.nominative_endings[plural and "plural" or gender]) do
local stem = mw.ustring.match(lemma, "^(.+)" .. ending .. "$")
if stem then
return stem, ending
end
end
return lemma, ""
end
-- Replace the last letters of `stem` according to `map`, trying the longest keys first (up to three letters). Return
-- nil if the stem ends in none of the keys.
local function replace_final(stem, map)
for _, length in ipairs({3, 2, 1}) do
if mw.ustring.len(stem) >= length then
local final = mw.ustring.sub(stem, -length)
if map[final] then
return mw.ustring.sub(stem, 1, -length - 1) .. map[final]
end
end
end
return nil
end
-- Remove the mobile vowel from `stem`, i.e. the first of the data's `mobile_vowels` that it has before its final
-- consonants. Return nil if it has none.
local function reduce(data, stem)
local vowels = data.vowels
for _, mobile in ipairs(data.mobile_vowels) do
local head, final = mw.ustring.match(stem, "^(.-)" .. mobile[1] .. "([^" .. vowels .. "]+)$")
if head and head ~= "" and not (mobile.after_consonant
and mw.ustring.find(mw.ustring.sub(head, -1), "[" .. vowels .. "]")) then
return (mobile.soften and replace_final(head, data[mobile.soften]) or head) .. final
end
end
return nil
end
-- Insert `vowel` before the last consonant of `stem`. Return nil if the stem doesn't end in two consonants.
local function insert(data, stem, vowel)
local vowels = data.vowels
local head, final = mw.ustring.match(stem, "^(.-[^" .. vowels .. "])([^" .. vowels .. "])$")
return head and head .. vowel .. final or nil
end
-- Change the vowel of the last syllable of `stem` according to `map` (`shorten`, `lengthen` or `front` in the data).
-- Return nil if that vowel isn't one of the keys of `map`.
local function alternate(data, stem, map)
local letters = ""
for vowel in pairs(map) do
letters = letters .. vowel
end
local head, vowel, tail = mw.ustring.match(stem, "^(.*)([" .. letters .. "])([^" .. data.vowels .. "]*)$")
return head and head .. map[vowel] .. tail or nil
end
-- Return the stem that `label` names, which is either `plain` or a set of alternations joined with "+" (e.g.
-- `reduced+palatal`). Return nil if one of the alternations doesn't apply to `stem`.
function Stem.apply(data, stem, label)
local text = stem
for part in mw.text.gsplit(label, "+", true) do
if not text then
return nil
end
if part == "reduced" then
text = reduce(data, text)
elseif mw.ustring.find(part, "^inserted_") then
-- `inserted_VOWEL` puts the mobile vowel VOWEL in.
text = insert(data, text, mw.ustring.sub(part, 10))
elseif part == "shortened" then
text = alternate(data, text, data.shorten)
elseif part == "lengthened" then
text = alternate(data, text, data.lengthen)
elseif part == "fronted" then
text = alternate(data, text, data.front)
elseif part == "soft" or part == "final_soft" then
-- This is only a spelling, so leave the stem alone if it has no such letter.
text = replace_final(text, data[part]) or text
elseif part == "palatal" or part == "virile" then
text = replace_final(text, data[part])
elseif part == "irregular" then
text = ""
elseif part ~= "plain" then
error(("Internal error: unknown alternation '%s'"):format(part))
end
end
return text
end
------------------------------------------------------------------------------------------------------------------------
-- Noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the rules of one word's group, with the word's indicators applied. `NounRules.new(base)` finds the group
from the word's gender, kind, number and nominative ending, and `:forms(slot)` returns the forms of a slot by the rule
of the longest matching stem ending, as form objects `{form = ..., footnotes = {...}}`.
]==]
local NounRules = {}
NounRules.__index = NounRules
local function group_key(rule_gender, kind, plural, nominative)
return ("%s %s %s %s"):format(rule_gender, kind, plural and "pl" or "sg", nominative)
end
function NounRules.new(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy]
end
local plural = base.number == "pl"
-- A plurale tantum is either masculine personal (m-pr) or not, and the non-personal ones share the groups of the
-- neuter.
if plural and rule_gender ~= "m-pr" then
rule_gender = "n"
end
if not rule_gender then
spec_error(("The noun '%s' needs a gender (m, f or n)"):format(word), base.text)
end
local stem, nominative = Stem.split(data, word, rule_gender:sub(1, 1), plural)
local kind = base.kind or "common"
local group = data.noun_groups[group_key(rule_gender, kind, plural, nominative)]
or kind ~= "common" and data.noun_groups[group_key(rule_gender, "common", plural, nominative)]
if not group then
error(("No rules for %s nouns in -%s ('%s'); give the forms with overrides and <!>"):format(
rule_gender, nominative, word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
used = {}, head_slot = plural and "nom_p" or "nom_s"}, NounRules)
end
-- Return the rule of `slot` for this stem, i.e. the rule of the longest stem ending (up to three letters) that has one.
function NounRules:rule(slot)
local rules = self.group.rules
for size = math.min(3, mw.ustring.len(self.stem)), 0, -1 do
local suffix = size == 0 and "" or mw.ustring.sub(self.stem, -size)
local by_slot = rules[suffix]
if by_slot and by_slot[slot] then
return by_slot[slot]
end
end
return nil
end
-- Return true if a part of an alternation label is about the mobile vowel, i.e. it's `reduced` or `inserted_VOWEL`.
local function is_mobile(part)
return part == "reduced" or mw.ustring.find(part, "^inserted_") ~= nil
end
-- Return the alternation label of an ending of a rule, with the word's indicators applied. `-*` takes out the mobile
-- vowel and `*` puts it in: for a lemma ending in a consonant it's dropped before an ending, and for one ending in a
-- vowel it's inserted into a bare stem (as `inserted_vowel` in the data says). `-#` and `#` do the same for ''ó''/''o''
-- and ''ą''/''ę''. A bare form of a lemma ending in a consonant is the lemma itself (e.g. the accusative of an
-- inanimate noun) and takes neither.
function NounRules:label(label, ending)
local base = self.base
local parts = {}
for part in mw.text.gsplit(label, "+", true) do
parts[part] = true
end
local mobile = false
for part in pairs(parts) do
mobile = mobile or is_mobile(part)
end
local consonant_final = self.nominative == ""
if base.reducible == false then
for part in pairs(parts) do
if is_mobile(part) then
parts[part] = nil
end
end
elseif base.reducible and not mobile then
if consonant_final and ending ~= "" then
parts.reduced = true
elseif ending == "" then
local inserted = self.data.inserted_vowel
parts["inserted_" .. (inserted.after[mw.ustring.sub(self.stem, -2, -2)] or inserted.default)] = true
end
end
if base.quantity == "none" then
parts.shortened, parts.lengthened = nil, nil
elseif base.quantity == "full" and not (parts.shortened or parts.lengthened) then
if consonant_final and ending ~= "" then
parts.shortened = true
elseif ending == "" then
parts.lengthened = true
end
end
-- Put the parts in the order they apply in, with the mobile vowel first.
local ordered = {}
if parts.reduced then
table.insert(ordered, "reduced")
end
local inserted = {}
for part in pairs(parts) do
if mw.ustring.find(part, "^inserted_") then
table.insert(inserted, part)
end
end
table.sort(inserted)
for _, part in ipairs(inserted) do
table.insert(ordered, part)
end
for _, name in ipairs({"shortened", "lengthened", "fronted", "soft", "final_soft", "palatal", "virile", "irregular"}) do
if parts[name] then
table.insert(ordered, name)
end
end
return ordered[1] and table.concat(ordered, "+") or "plain"
end
-- Join a stem and an ending as the language spells them. A final soft consonant before a vowel is written with the
-- data's `soft_vowel`, which merges with the same vowel at the start of the ending (e.g. ''koń'' + ''-a'' → ''konia'',
-- ''goleń'' + ''-i'' → ''goleni'').
local function join(data, stem, ending)
if ending ~= "" and mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") then
local spelled = replace_final(stem, data.soft)
if spelled then
local vowel = data.soft_vowel
local length = mw.ustring.len(vowel)
return spelled .. (mw.ustring.sub(ending, 1, length) == vowel and mw.ustring.sub(ending, length + 1) or ending)
end
end
return stem .. ending
end
function NounRules:form(label, ending, note)
local full = self:label(label, ending)
-- Note the alternations used, for the categories of the table.
for part in mw.text.gsplit(full, "+", true) do
self.used[part] = true
end
local stem = Stem.apply(self.data, self.stem, full) or self.stem
local footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil
return {form = join(self.data, stem, ending), footnotes = footnotes}
end
-- Return the endings of a rule's cell as a list of `{ending, stem = ..., note = ...}`. A cell is an ending (a string),
-- one ending with a stem or note (e.g. `{ "e", stem = "palatal" }`), or a list of either (e.g. `{ "i", "ów" }`).
local function cell_endings(cell)
if type(cell) == "string" then
return {{cell}}
elseif type(cell[1]) == "string" and cell[2] == nil then
return {cell}
end
local list = {}
for _, ending in ipairs(cell) do
table.insert(list, type(ending) == "string" and {ending} or ending)
end
return list
end
-- Return the forms of `slot` according to its rule, or nil if the group has no rule for the slot.
function NounRules:forms(slot)
local cell = self:rule(slot)
if not cell then
return nil
end
local list = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(list, self:form(ending.stem or "plain", ending[1], ending.note))
end
return list
end
-- Return the alternation label for an ending given in an override of `slot`. If the ending is one of the rule's own
-- endings, use that ending's label; otherwise use the label of the rule's first ending minus the softening that its
-- ending brings (`palatal` before ''-e'', `virile` before the virile ''-i''/''-y''). This way ''dom'' with the locative
-- ''-u'' gives ''domu'', and ''Polak'' with the nominative plural ''-owie'' gives ''Polakowie''.
function NounRules:overrideLabel(slot, ending)
local cell = self:rule(slot)
local endings = cell and cell_endings(cell) or {}
for _, item in ipairs(endings) do
if item[1] == ending then
return item.stem or "plain"
end
end
local kept = {}
for part in mw.text.gsplit(endings[1] and endings[1].stem or "plain", "+", true) do
if part ~= "palatal" and part ~= "virile" and part ~= "irregular" and part ~= "plain" then
table.insert(kept, part)
end
end
return kept[1] and table.concat(kept, "+") or "plain"
end
--[==[
Object holding the rules of an adjective, with the methods of `NounRules`. The group comes from `adjective_groups`
according to the ending of the lemma (one of `adjective_nominatives`). Adjectives take no stem indicators.
]==]
local AdjectiveRules = setmetatable({}, {__index = NounRules})
AdjectiveRules.__index = AdjectiveRules
function AdjectiveRules.new(base, word)
local data = base.data
local stem, nominative, group
for _, ending in ipairs(data.adjective_nominatives) do
stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
if stem then
nominative = ending
group = data.adjective_groups["adj common sg " .. ending]
break
end
end
if not group then
local endings = {}
for _, ending in ipairs(data.adjective_nominatives) do
table.insert(endings, "-" .. ending)
end
error(("An adjective ends in %s ('%s'); for an irregular one use <irreg>"):format(table.concat(endings, " or "),
word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
head_slot = "nom_m", used = {}}, AdjectiveRules)
end
--[==[
Object holding the rules of a lect's paradigm, i.e. an entry of `lect_tables` with `table = "paradigm"`, such as
Standard Kurpie (`lect:skur`). The paradigm is the table in the data named by the entry's `rules`. Its `types` decide
the type of a lemma, and each type has one ending per slot. It answers the same calls from `decline_word` as
`NounRules`.
]==]
local ParadigmRules = {}
ParadigmRules.__index = ParadigmRules
-- Return the last consonant of a stem, which is either one of the data's `digraphs` or a single letter.
local function final_consonant(data, stem)
local last_two = mw.ustring.sub(stem, -2)
return data.digraphs[last_two] and last_two or mw.ustring.sub(stem, -1)
end
-- Return the stem and type of a lemma in `paradigm`, decided by its gender and ending (see `types` in the data). `name`
-- is the name of the lect, for the error messages.
local function paradigm_type(data, paradigm, name, word, gender, text)
for _, entry in ipairs(gender and paradigm.types[gender] or {}) do
local stem = entry.ending == "" and word or mw.ustring.match(word, "^(.+)" .. entry.ending .. "$")
if stem and not (entry.consonant_final and mw.ustring.find(word, "[" .. paradigm.vowels .. "]$")) then
local final = final_consonant(data, stem)
for _, class in ipairs(entry.by_final or {}) do
if paradigm[class[1]][final] then
return stem, class[2]
end
end
return stem, entry.default
end
end
spec_error(("The %s rules have no %s noun like '%s'; give its forms as overrides"):format(name,
gender and M.data.genders[gender].name or "genderless", word), text)
end
function ParadigmRules.new(base, word, paradigm, name)
local data = base.data
if base.number == "pl" then
spec_error(("The %s rules decline from a nominative singular"):format(name), base.text)
end
local stem, type = paradigm_type(data, paradigm, name, word, base.gender, base.text)
if base.gender == "m" and base.animacy ~= "inan" and paradigm.animate_types[type] then
type = paradigm.animate_types[type]
end
if base.reducible then
stem = reduce(data, stem) or spec_error(("The stem '%s' has no mobile e"):format(stem), base.text)
end
local copies = {}
for slot, source in pairs(paradigm.copies[base.gender]) do
copies[slot] = source
end
if base.gender == "m" then
for slot, source in pairs(paradigm.animate_copies[base.animacy]) do
copies[slot] = source
end
end
return setmetatable({base = base, data = data, paradigm = paradigm, word = word, stem = stem,
endings = paradigm.nouns[base.gender][type], group = {copies = copies}, head_slot = "nom_s"}, ParadigmRules)
end
-- Return one form: the stem, palatalized if `label` is `palatal` (by the paradigm's own `palatal` table), followed by
-- the ending. After a hardened consonant, the first letter of the ending is respelled by `hardened_spelling`.
function ParadigmRules:form(label, ending, note)
local paradigm = self.paradigm
local stem = self.stem
if label == "palatal" then
local last_two = mw.ustring.sub(stem, -2)
if paradigm.palatal[last_two] then
stem = mw.ustring.sub(stem, 1, -3) .. paradigm.palatal[last_two]
else
stem = mw.ustring.sub(stem, 1, -2) .. (paradigm.palatal[mw.ustring.sub(stem, -1)] or mw.ustring.sub(stem, -1))
end
end
if paradigm.hardened[final_consonant(self.data, stem)] then
local respelled = paradigm.hardened_spelling[mw.ustring.sub(ending, 1, 1)]
if respelled then
ending = respelled .. mw.ustring.sub(ending, 2)
end
end
return {form = stem .. ending, footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil}
end
function ParadigmRules:forms(slot)
local cell = self.endings[slot]
if not cell then
return {}
end
if type(cell) == "string" then
return {self:form("plain", cell)}
end
return {self:form(cell.stem or "plain", cell[1], cell.note)}
end
-- Return the stem label of a slot's rule. An ending given for the slot in an override goes on that stem.
function ParadigmRules:overrideLabel(slot)
local cell = self.endings[slot]
return type(cell) == "table" and cell.stem or "plain"
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the forms of a noun from the lexicon (`<irreg>`) or of an indeclinable noun (`<indecl>`).
local function lexicon_forms(base, word)
local forms = {}
if base.indicators.irreg then
local list = base.data.irregular_nouns[word]
if not list then
error(("'%s' is not one of the irregular nouns"):format(word), 0)
end
for i, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = list[i]}}
end
elseif base.indicators.indecl then
for _, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = word}}
end
end
return forms
end
-- Return the masculine nominative singular of an adjectival word given in another gender, using `adjective_lemma` in
-- the data, e.g. ''teściowa'' → ''teściowy'', ''tania'' → ''tani'', ''bykowe'' → ''bykowy'', ''wielkie'' →
-- ''wielki''. A plural such as ''Zjednoczone'' works the same way.
local function adjective_lemma(data, word, rule_gender, plural)
local lemma = data.adjective_lemma
for _, ending in ipairs(lemma.endings[plural and "plural" or rule_gender] or {}) do
local stem = mw.ustring.match(word, "^(.+)" .. ending[1] .. "$")
if stem then
return stem .. ((ending.soft or lemma.soft_after[mw.ustring.sub(stem, -1)]) and lemma.soft or lemma.hard)
end
end
return word
end
--[==[
Return the masculine nominative singular that goes with a virile plural, e.g. ''krewni'' → ''krewny'', ''polscy'' →
''polski''. We try each word that the data's `palatal` table could have softened into the plural (before one of the
`virile_endings`) and return the one whose virile nominative plural, as the adjective rules give it, is that plural.
Return {nil} if there's none.
]==]
local function virile_lemma(data, word)
local adjective = {indicators = {}, overrides = {}, data = data}
for final, softened in pairs(data.palatal) do
for _, ending in ipairs(data.virile_endings) do
local stem = mw.ustring.match(word, "^(.+)" .. softened .. ending .. "$")
if stem then
for _, nominative in ipairs(data.adjective_nominatives) do
local lemma = stem .. final .. nominative
local ok, rules = pcall(AdjectiveRules.new, adjective, lemma)
if ok then
for _, form in ipairs(rules:forms("nom_mp_pers")) do
if form.form == word then
return lemma
end
end
end
end
end
end
end
return nil
end
-- Return the forms of an adjectival word (`+`) in noun slots, using `adjectival_slots` in the data.
local function adjectival_forms(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy or "inan"]
end
local plural = base.number == "pl"
local lemma = plural and rule_gender == "m-pr" and virile_lemma(data, word) or adjective_lemma(data, word, rule_gender, plural)
local adjective = {lemma = lemma, indicators = {}, overrides = {}, data = data}
local rules = AdjectiveRules.new(adjective, adjective.lemma)
local function forms_of(slot)
if slot == "nom_m" then
return {{form = adjective.lemma}}
end
local source = rules.group.copies[slot]
while source and rules.group.copies[source] do
source = rules.group.copies[source]
end
if source == "nom_m" then
return {{form = adjective.lemma}}
end
return rules:forms(source or slot) or {}
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = forms_of(adjective_slot)
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = forms_of(adjective_slot)
end
end
-- The word as given heads its table.
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
--[==[
Resolve the lect of a `lect:` indicator or a `[lect:CODE:PLACE]` tag through the aliases in the data module of the lects
(`lect_module` in the language's data, which is [[Module:zlw-lch-IPA/data/pl]] for Polish). Return the code and the
name of the lect.
]==]
local function lect_of(data, code, text)
local lects = mw.loadData(data.lect_module)
code = lects.lect_aliases[code] or code
local lect = lects.lects[code]
if not lect then
local codes = {}
for known in pairs(lects.lects) do
table.insert(codes, known)
end
table.sort(codes)
spec_error(("Unrecognized lect '%s'; the lects are %s"):format(code, table.concat(codes, ", ")), text)
end
return code, lect.name
end
-- Return a footnote `[lect:CODE]` or `[lect:CODE:PLACE]` as it's shown, with the name of the lect and the place. Return
-- nil if the footnote isn't a lect tag.
local function lect_footnote(data, footnote, text)
local code, place = mw.ustring.match(footnote, "^%[lect:([^:%]]+):?(.-)%]$")
if not code then
return nil
end
local _, name = lect_of(data, code, text)
return "[" .. name .. (place ~= "" and " (" .. place .. ")" or "") .. "]"
end
-- Return the link target of a form of an attested lect, i.e. its modern spelling according to `respelling` (e.g.
-- ''ptåka'' → ''ptaka''). Return nil if it's spelled the same.
local function respelled(respelling, form)
local target = mw.ustring.gsub(form, ".", respelling)
return target ~= form and target or nil
end
-- Return a `generate_link` function for `show_forms` for the table of `spec`, which links a respelled form (one with a
-- `target`) to its modern spelling.
local function respelled_link(spec)
return function(data)
if data.form.target then
return M.links.full_link{lang = spec.lang, term = data.form.target, alt = data.form.formval_for_link,
tr = "-"} .. M.inflection_utilities.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
end
--[==[
Return the forms of an attested table (Middle Polish `lect:mpl`, the `dialectal` table and every Old Polish table),
which are the cells given, exactly as given, and nothing else. In a dialectal table, every form must have a lect,
either from its own `[lect:...]` tag or from a tag given for the whole word.
]==]
local function attested_forms(base)
local forms = {}
local word_lect
local word_footnotes = {}
for _, note in ipairs(base.footnotes or {}) do
local shown = lect_footnote(base.data, note, base.text)
word_lect = word_lect or shown
table.insert(word_footnotes, shown or note)
end
-- the forms with a lect tag of their own, which the lect tag of the word doesn't go on
local own_lect = {}
local respelling = base.lect_table and base.lect_table.respelling and base.data[base.lect_table.respelling]
for slot, override in pairs(base.overrides) do
if not override.full then
spec_error(("An attested table takes whole forms: '%s:FORM'"):format(slot), base.text)
end
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
local footnotes, lect = {}, nil
for _, note in ipairs(value.footnotes or {}) do
local shown = lect_footnote(base.data, note, base.text)
lect = lect or shown
table.insert(footnotes, shown or note)
end
if base.indicators.dialectal then
if not lect and not word_lect then
spec_error(("The dialectal form '%s' needs [lect:CODE]"):format(value.form), base.text)
end
end
local form = {
form = value.form,
target = respelling and respelled(respelling, value.form) or nil,
footnotes = footnotes[1] and footnotes or nil,
}
own_lect[form] = lect and true or nil
table.insert(list, form)
end
end
forms[slot] = list
end
if base.footnotes then
base.footnotes, base.word_lect, base.own_lect = word_footnotes, word_lect, own_lect
end
return forms
end
-- Return the entry of a pronoun in the data's `pronouns` along with the ending its forms take. This is the lemma's own
-- entry (with no ending), or the entry of the pronoun it's made from plus one of the `pronoun_suffixes` (e.g.
-- ''cośkolwiek'' is ''co'' plus ''-śkolwiek'').
local function pronoun_entry(data, lemma)
local pronouns = data.pronouns
if pronouns[lemma] then
return pronouns[lemma], ""
end
for _, suffix in ipairs(data.pronoun_suffixes or {}) do
local head = mw.ustring.match(lemma, "^(.+)" .. suffix .. "$")
if head and pronouns[head] then
return pronouns[head], suffix
end
end
return nil
end
-- Return the forms of a pronoun (`<pron>`) with their notes. In an attested table (Old Polish), the forms given in the
-- spec go on top of them.
local function pronoun_forms(base, word)
local data = base.data
local pronoun, suffix = pronoun_entry(data, word)
if not pronoun then
local lemmas = {}
for lemma in pairs(data.pronouns) do
table.insert(lemmas, lemma)
end
table.sort(lemmas)
local message = ("No pronoun '%s'; the pronouns are %s"):format(word, table.concat(lemmas, ", "))
if data.pronoun_suffixes then
local suffixes = {}
for _, item in ipairs(data.pronoun_suffixes) do
table.insert(suffixes, "-" .. item)
end
message = message .. ", and these with " .. table.concat(suffixes, ", ")
end
spec_error(message, base.text)
end
base.pronoun = pronoun
local forms = {}
for slot, list in pairs(pronoun) do
if slot ~= "numbers" and slot ~= "numberless" then
forms[slot] = {}
for _, item in ipairs(list) do
local form = {form = (type(item) == "table" and item[1] or item) .. suffix}
if type(item) == "table" then
form.footnotes = {}
for _, note in ipairs(item.notes) do
table.insert(form.footnotes, "[" .. data.notes[note] .. "]")
end
end
table.insert(forms[slot], form)
end
end
end
if base.attested then
for slot, list in pairs(attested_forms(base)) do
forms[slot] = list
end
end
return forms
end
-- Return the rule of a numeral in `rules` (`numeral_rules` or `collective_rules` in the data), i.e. the rule of the
-- longest key that the lemma ends in, along with the lemma minus that key.
local function numeral_rule(rules, word, text)
for length = mw.ustring.len(word), 0, -1 do
local key = length == 0 and "" or mw.ustring.sub(word, -length)
if rules[key] then
return rules[key], mw.ustring.sub(word, 1, mw.ustring.len(word) - length)
end
end
spec_error(("No numeral declines like '%s'"):format(word), text)
end
-- Return the forms of a numeral (`<num>`), i.e. the endings of its rule added to its stem.
local function numeral_forms(rules, base, word)
local rule, stem = numeral_rule(rules, word, base.text)
local forms = {}
for slot, cell in pairs(rule) do
forms[slot] = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(forms[slot], {form = stem .. ending[1],
footnotes = ending.note and {"[" .. base.data.notes[ending.note] .. "]"} or nil})
end
end
return forms
end
--[==[
Add the footnotes given for the whole word (`base.footnotes`) after the footnotes of every form, as new form objects,
since a copied slot shares the form objects of its source. In an attested table the word's lect tag
(`base.word_lect`) only goes on the forms without a lect tag of their own (`base.own_lect`). Return the forms.
]==]
local function add_word_footnotes(base, forms)
if not base.footnotes then
return forms
end
for slot, list in pairs(forms) do
local copy = {}
for _, form in ipairs(list) do
local footnotes = {}
for _, note in ipairs(form.footnotes or {}) do
table.insert(footnotes, note)
end
for _, note in ipairs(base.footnotes) do
if not (note == base.word_lect and base.own_lect[form]) then
table.insert(footnotes, note)
end
end
table.insert(copy, {form = form.form, footnotes = footnotes, target = form.target})
end
forms[slot] = copy
end
return forms
end
--[==[
Decline a single word. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]]. First the
rules fill every slot they cover. Then the overrides apply (an ending goes on the stem that the slot's rule uses, and a
form replaces the cell), followed by the copies (unless a copy is overridden itself), the deprecative forms of a
masculine personal noun (after its nominative plural, with a footnote) and finally the footnote for the whole word.
]==]
local function decline_word(base)
local word = base.indicators.decllemma or base.lemma
local forms, rules
if base.attested then
base.forms = add_word_footnotes(base, base.indicators.pron and pronoun_forms(base, word) or attested_forms(base))
return
elseif base.indicators.pron then
forms = pronoun_forms(base, word)
elseif base.indicators.num then
forms = numeral_forms(base.data.collective_rules, base, word)
elseif base.indicators.irreg or base.indicators.indecl then
forms = lexicon_forms(base, word)
elseif base.indicators["!"] then
-- A manual table has only the forms its overrides give.
forms = {}
elseif base.indicators["+"] then
forms = adjectival_forms(base, word)
else
rules = base.lect_table and base.lect_table.table == "paradigm"
and ParadigmRules.new(base, word, base.data[base.lect_table.rules], base.lect_name) or NounRules.new(base, word)
-- The lemma heads the table, even when another word is declined in its place (`decllemma`).
forms = {[rules.head_slot] = {{form = base.lemma}}}
-- The rules give the singular and the plural; only an attested table has the dual.
for _, entry in ipairs(M.data.noun_slots) do
local slot = entry.slot
if entry.number ~= "d" and slot ~= rules.head_slot and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
-- A form that is the declined word itself (e.g. an inanimate accusative) belongs to the lemma.
for _, form in ipairs(forms[slot] or {}) do
if form.form == word then
form.form = base.lemma
end
end
end
end
-- In a phrase the deprecative forms would agree with nothing (''pany młodzi''), so only a single word shows
-- them.
if not base.in_phrase then
forms.depr_p = rules:forms("depr_p")
end
end
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.default then
for _, form in ipairs(rules and rules:forms(slot) or {}) do
table.insert(list, form)
end
elseif override.full then
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
else
local form = rules and rules:form(rules:overrideLabel(slot, value.form), value.form) or {form = word .. value.form}
form.footnotes = value.footnotes
table.insert(list, form)
end
end
forms[slot] = list
end
if rules then
-- A copy can copy another copy (e.g. the vocative of a feminine consonant-stem noun is its locative, which is
-- its dative). Fill each one from the slot at the end of its chain, unless a slot along the way is overridden.
local copies = rules.group.copies
for slot in pairs(copies) do
if not base.overrides[slot] then
local source = copies[slot]
while copies[source] and not base.overrides[source] do
source = copies[source]
end
local list = {}
for _, form in ipairs(forms[source] or {}) do
table.insert(list, form)
end
forms[slot] = list
end
end
end
if forms.depr_p then
forms.nom_p = forms.nom_p or {}
-- A deprecative form that's the same as a virile form (e.g. ''zaklinacze'') isn't a separate form, so don't
-- show it twice.
local virile = {}
for _, form in ipairs(forms.nom_p) do
virile[form.form] = true
end
for _, form in ipairs(forms.depr_p) do
if not virile[form.form] then
table.insert(forms.nom_p, {form = form.form, footnotes = form.footnotes or {"[" .. base.data.notes.deprecative .. "]"}})
end
end
forms.depr_p = nil
end
base.forms = add_word_footnotes(base, forms)
-- Keep the rules the forms came from, and the alternations they used, for the categories.
base.rules = rules
end
-- Join an adjective stem and an ending. If the data's `adjective_dropped` says the last letter of the stem drops before
-- the first letter of the ending, drop it (e.g. ''moj-'' + ''-ich'' → ''moich'').
local function adjective_form(data, stem, ending)
local before = data.adjective_dropped[mw.ustring.sub(stem, -1)]
if before and mw.ustring.sub(ending, 1, mw.ustring.len(before)) == before then
return mw.ustring.sub(stem, 1, -2) .. ending
end
return stem .. ending
end
-- Return the forms of an irregular adjective from `irregular_adjectives`, along with the layout of the table it needs
-- (nil, `dwa` or `plonly`).
local function irregular_adjective_forms(base, word)
local data = base.data
for _, entry in ipairs(data.irregular_adjectives) do
local captured = mw.ustring.match(word, entry.pattern)
if captured or entry.stem and mw.ustring.find(word, entry.pattern) then
local forms = {}
local function add(slot, stem, endings, note)
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings or {}) do
forms[slot] = forms[slot] or {}
local form = ending == "-" and base.lemma or adjective_form(data, stem, ending)
table.insert(forms[slot], {form = form, footnotes = note and {"[" .. note .. "]"} or nil})
end
end
if entry.table ~= "dwa" then
add("nom_m", nil, "-")
end
for _, set in ipairs(entry.sets) do
local stem = (entry.stem or captured) .. (set.add or "")
for slot, endings in pairs(set.endings or {}) do
add(slot, stem, endings, set.note)
for _, target in ipairs(data.adjective_shared[slot] or {}) do
add(target, stem, endings, set.note)
end
end
for slot, endings in pairs(set.own or {}) do
add(slot, stem, endings, set.note)
end
if set.archaic_dative and base.indicators.archdat then
add("dat_mn", stem, set.archaic_dative, data.notes[data.archaic_dative.note])
end
end
return forms, entry.table
end
end
error(("Unrecognized irregular adjective '%s'"):format(word), 0)
end
-- Return the forms of an adjective in a lect's paradigm (`lect:skur`): the endings of the paradigm's `adjective` added
-- to the lemma minus its last letter, with the slots shared as for every adjective (`adjective_shared` in the data).
local function paradigm_adjective_forms(data, paradigm, word)
local stem = mw.ustring.sub(word, 1, -2)
local forms = {nom_m = {{form = word}}}
for slot, ending in pairs(paradigm.adjective) do
forms[slot] = {{form = stem .. ending}}
end
for source, targets in pairs(data.adjective_shared) do
for _, target in ipairs(targets) do
forms[target] = forms[source]
end
end
return forms
end
--[==[
Decline a single adjective. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]] for
{{tl|pl-adecl}}. The rules (or the lexicon of irregular adjectives) fill the slots; then the overrides apply, followed
by the accusatives taken from other slots (unless overridden) and the footnote for the whole word. An attested table
has the cells given and nothing else.
]==]
local function decline_adjective_word(base)
local data = base.data
local word = base.indicators.decllemma or base.lemma
local forms, layout
if base.attested then
-- The cells given and nothing else, with the dual columns if `du` is given.
forms, layout = attested_forms(base), base.indicators.du and "dual" or nil
elseif base.indicators.irreg then
forms, layout = irregular_adjective_forms(base, word)
elseif base.indicators.lect then
forms = paradigm_adjective_forms(data, data[data.lect_tables[base.indicators.lect].rules], word)
elseif base.indicators.num then
forms, layout = numeral_forms(data.numeral_rules, base, word), "plonly"
else
local rules = AdjectiveRules.new(base, word)
-- With `decllemma`, the lemma itself still heads the table (''wart'' declined as ''warty'').
forms = {nom_m = {{form = base.lemma}}}
for _, slot in ipairs(data.adjective_slots) do
if slot ~= "nom_m" and slot ~= "short" and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
end
end
if base.indicators.archdat then
local archaic = data.archaic_dative
table.insert(forms.dat_mn, {form = rules.stem .. archaic[1], footnotes = {"[" .. data.notes[archaic.note] .. "]"}})
end
-- Keep the slots that every adjective shares as copies, so that an override of the source carries over.
for slot, source in pairs(rules.group.copies) do
local accusative = mw.ustring.find(slot, "^acc")
if not accusative and not base.overrides[slot] then
forms[slot] = forms[source]
end
end
end
if not base.attested then
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
end
forms[slot] = list
end
for _, pair in ipairs(data.adjective_accusatives) do
local source, target = pair[1], pair[2]
if not base.overrides[target] and forms[source] and not (base.indicators.irreg and forms[target]) then
forms[target] = forms[source]
end
end
end
base.forms = add_word_footnotes(base, forms)
base.layout = layout
end
-- Return the attested tables there are for `template` (`noun` or `adjective`), for the error messages: those of the
-- language's attested lects and its dialectal table, plus the templates of the languages whose tables of that kind are
-- all attested.
local function attested_tables(data, template)
local tables = {}
local codes = {}
for code, lect_table in pairs(data.lect_tables or {}) do
if lect_table.table == "attested" then
table.insert(codes, code)
end
end
table.sort(codes)
for _, code in ipairs(codes) do
table.insert(tables, "<lect:" .. code .. ">")
end
if data.indicators[template].dialectal then
table.insert(tables, "<dialectal>")
end
local languages = {}
for code, language in pairs(M.data.languages) do
if language[template] then
table.insert(languages, code)
end
end
table.sort(languages)
for _, code in ipairs(languages) do
if mw.loadData("Module:zlw-lch-decl/data/" .. code).attested then
table.insert(tables, "{{" .. M.data.languages[code][template] .. "}}")
end
end
return table.concat(tables, ", ")
end
-- Work out the table a base is for: its lect (`lect:CODE`), and whether the table is attested, i.e. has only the cells
-- given (for an attested lect, the dialectal table, or a language whose tables are all attested). Throw an error if
-- `recon` or `du` is given for a table that isn't attested, if a lect tag appears outside the dialectal table, or if a
-- dual slot is given without `du`.
local function resolve_table(base)
local data = base.data
if base.indicators.lect then
base.indicators.lect, base.lect_name = lect_of(data, base.indicators.lect, base.text)
base.lect_table = data.lect_tables[base.indicators.lect]
if not base.lect_table then
spec_error(("The lect '%s' has no table of its own; give its forms in a <dialectal> table"):format(
base.indicators.lect), base.text)
end
end
base.attested = data.attested or base.indicators.dialectal
or base.lect_table and base.lect_table.table == "attested" or nil
for _, name in ipairs({"recon", "du"}) do
if base.indicators[name] and not base.attested then
spec_error(("Only an attested table (%s) takes '%s'"):format(attested_tables(data, base.template), name),
base.text)
end
end
-- A form of a lect can only be tagged in the dialectal table, so that none ends up among the standard forms.
if not base.indicators.dialectal then
local function check(footnotes)
for _, footnote in ipairs(footnotes or {}) do
if mw.ustring.find(footnote, "^%[lect:") then
spec_error(("A lect's form (%s) belongs in a <dialectal> table"):format(footnote), base.text)
end
end
end
check(base.footnotes)
for _, override in pairs(base.overrides) do
for _, value in ipairs(override.values) do
check(value.footnotes)
end
end
end
if not base.indicators.du then
for slot in pairs(base.overrides) do
if mw.ustring.find(slot, "_d$") then
spec_error(("The dual slot '%s' needs the indicator 'du'"):format(slot), base.text)
end
end
end
end
-- Set the fields of a base that the rules use, based on its indicators.
local function normalize_base(base)
base.gender = base:group("gender")
base.animacy = base:group("animacy")
base.number = base:group("number")
base.kind = base:group("kind")
base.reducible = base.indicators["*"] and true or base.indicators["-*"] and false or nil
base.quantity = base.indicators["#"] and "full" or base.indicators["-#"] and "none" or nil
if base.gender == "m" and not base.animacy then
base.animacy = "inan"
end
resolve_table(base)
end
------------------------------------------------------------------------------------------------------------------------
-- Output --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object to render the declined words as a table with [[Module:inflection-table]], with a column for each number shown and
a row for each case. Each row has a `data-case` attribute so that scripts can reorder the cases. The cells come from
`show_forms` in [[Module:inflection utilities]], linked with accelerators for the lemma, and the footnotes go under the
table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(spec)
return setmetatable({spec = spec}, TableRenderer)
end
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.spec.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the title of a table: `title=` if given, otherwise what the table is (e.g. "Declension of " or "Attested
-- Middle Polish forms of ") followed by its head, unlinked. `suffix` follows the default title (`default_kind` and the
-- lemma), e.g. the declension kinds of an adjective.
function TableRenderer:title(default_kind, suffix)
local spec = self.spec
if spec.title then
return spec.title
end
local kind, head = default_kind, spec.forms.lemma
if spec.kind_title then
kind, head, suffix = spec.kind_title[1], spec.kind_title[2] or head, nil
end
return kind .. M.links.full_link({lang = spec.lang, alt = head}, "term") .. (suffix or "")
end
-- Return the first lines of a table titled `title`: the frame from [[Module:inflection-table]], with its first row
-- opened.
function TableRenderer:top(title)
return {M.inflection_table.make_top{
title = title,
palette = "blue",
tall = "yes",
lang = self.spec.lang:getCode(),
}}
end
-- Close the table in `lines` with its footnotes and categories, and return its wikitext.
function TableRenderer:finish(lines)
local spec = self.spec
table.insert(lines, M.inflection_table.make_bottom{notes = spec.forms.footnote or ""})
if spec.categories[1] and not spec.nocat then
table.insert(lines, M.utilities.format_categories(spec.categories, spec.lang))
end
return table.concat(lines, "\n")
end
function TableRenderer:render()
local spec = self.spec
local numbers = self:numbers()
local slot_list = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(numbers) do
-- A table with one number doesn't name it in its accelerators, and an attested or lect table has none
-- ("-").
local accel = (spec.attested or spec.lect) and "-" or #numbers > 1 and case.accel .. "|" .. number.accel or case.accel
table.insert(slot_list, {case.code .. "_" .. number.code, accel})
end
end
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
-- A Middle Polish form links to its modern spelling.
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Declension of "))
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(numbers) do
-- A numberless pronoun (e.g. ''siebie'') has an empty header over its one column.
table.insert(lines, '! class="outer" | ' .. (spec.numberless and "" or number.name))
end
for _, case in ipairs(M.data.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, ('! title="%s" | %s'):format(spec.data.case_titles[case.code], case.name))
for _, number in ipairs(numbers) do
local cell = spec.forms[case.code .. "_" .. number.code]
table.insert(lines, "| " .. (cell or "—"))
end
end
return self:finish(lines)
end
--[==[
The rows of an adjective table, by layout. Each row is a case and its cells, and each cell is a slot and the number of
columns it spans. The regular table has the masculine animate, masculine inanimate, feminine and neuter singular, then
the virile and non-virile plural, as in the former [[Module:pl-adjective]]. The dual table (an attested table with `du`)
puts the dual, masculine and feminine/neuter, between them.
]==]
local ADJECTIVE_LAYOUTS = {
regular = {
columns = {
{"singular", 4, {"masculine animate", "masculine inanimate", "feminine", "neuter"}},
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_p", 2}}},
{"dat", "dative", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_p", 2}}},
{"acc", "accusative", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_mp_pers"},
{"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_p", 2}}},
{"loc", "locative", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_p", 2}}},
},
},
plonly = {
columns = {
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_p", 2}}},
{"dat", "dative", {{"dat_p", 2}}},
{"acc", "accusative", {{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_p", 2}}},
{"loc", "locative", {{"loc_p", 2}}},
},
},
-- an attested table with the dual (`du`), between the singular and the plural
dual = {
columns = {
{"singular", 4, {"masculine animate", "masculine inanimate", "feminine", "neuter"}},
{"dual", 2, {"masculine", "feminine/<wbr />neuter"}},
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_m_d"}, {"nom_fn_d"},
{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_d", 2}, {"gen_p", 2}}},
{"dat", "dative", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_d", 2}, {"dat_p", 2}}},
{"acc", "accusative", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_m_d"}, {"acc_fn_d"},
{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_d", 2}, {"ins_p", 2}}},
{"loc", "locative", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_d", 2}, {"loc_p", 2}}},
},
},
dwa = {
columns = {
{"plural", 4, {"masculine personal", "masculine non-personal", "feminine", "neuter"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_mp_pers"}, {"nom_mp_npers"}, {"nom_fp"}, {"nom_np"}}},
{"gen", "genitive", {{"gen_p", 4}}},
{"dat", "dative", {{"dat_p", 4}}},
{"acc", "accusative", {{"acc_mp_pers"}, {"acc_mp_npers"}, {"acc_fp"}, {"acc_np"}}},
{"ins", "instrumental", {{"ins_mnp", 2}, {"ins_fp"}, {"ins_mnp"}}},
{"loc", "locative", {{"loc_p", 4}}},
},
},
}
function TableRenderer:renderAdjective()
local spec = self.spec
local layout = ADJECTIVE_LAYOUTS[spec.layout]
local slot_list = {}
for slot, accel in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, (spec.lect or spec.attested) and "-" or accel})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Declension of ",
spec.kinds[1] and " (" .. table.concat(spec.kinds, " // ") .. ")" or nil))
-- make_top has already opened the first row. Add the number headers, then the gender headers.
table.insert(lines, '! class="outer" rowspan="2" |')
for _, column in ipairs(layout.columns) do
table.insert(lines, ('! class="outer" colspan="%d" | %s'):format(column[2], column[1]))
end
table.insert(lines, "|- class=\"secondary\"")
for _, column in ipairs(layout.columns) do
for _, header in ipairs(column[3]) do
table.insert(lines, "! " .. header)
end
end
for _, row in ipairs(layout.rows) do
table.insert(lines, ('|- data-case="%s"'):format(row[1]))
table.insert(lines, "! " .. row[2])
for _, cell in ipairs(row[3]) do
local span = cell[2] and ('colspan="%d" | '):format(cell[2]) or ""
table.insert(lines, "| " .. span .. (spec.forms[cell[1]] or "—"))
end
end
if spec.forms.short and spec.forms.short ~= "—" then
table.insert(lines, '|- data-case="short"')
table.insert(lines, "! short")
table.insert(lines, '| colspan="2" | ' .. spec.forms.short)
end
return self:finish(lines)
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
--[==[
Decline a noun call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl` or `zlw-opl`). Return the
alternant multiword spec from [[Module:inflection utilities]], with the fields `forms` (a table mapping each slot to a
list of form objects), `numbers` (a set of `s`, `d` and `p`), `categories`, `title` and `nocat`.
]==]
function export.decline_noun(args, pagename, lang_code)
local data, lang = language_of(lang_code, "noun")
-- The angle brackets are omittable, so a bare word would be read as an indicator; with no spec, decline the page
-- name with no indicators.
local spec_text = args[1] or ""
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
local base = Spec.parse(angle_bracket_spec, "noun", data)
normalize_base(base)
return base
end,
allow_blank_lemma = true,
angle_brackets_omittable = true,
}
local spec = M.inflection_utilities.parse_inflected_text(spec_text, parse_props)
local number, noun
local word_count = 0
M.inflection_utilities.map_word_specs(spec, function()
word_count = word_count + 1
end)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
-- An irregular noun has the gender and animacy of its lexicon entry. They're used if the spec gives none, and
-- giving others is an error.
local irregular = base.indicators.irreg and data.irregular_nouns[base.indicators.decllemma or base.lemma]
if irregular then
if base.gender and (base.gender ~= irregular.gender or base.animacy ~= irregular.animacy) then
spec_error(("The irregular noun '%s' is <%s>"):format(base.lemma,
irregular.gender .. (irregular.animacy and "." .. irregular.animacy or "")), base.text)
end
base.gender, base.animacy = irregular.gender, irregular.animacy
end
base.in_phrase = word_count > 1 and #spec.alternant_or_word_specs > 1 or nil
number = number or base.number
if not base.indicators["+"] and base.gender then
noun = noun or base
end
end)
-- An adjectival word (`+`) agrees with the noun of the phrase, taking whatever gender, animacy and number it
-- doesn't give itself.
M.inflection_utilities.map_word_specs(spec, function(base)
if base.indicators["+"] and noun then
base.gender = base.gender or noun.gender
if base.gender == noun.gender then
base.animacy = base.animacy or noun.animacy
end
base.number = base.number or noun.number
end
if base.indicators["+"] and not base.gender then
error(("The adjectival word '%s' needs a gender, or a noun in the phrase"):format(base.lemma), 0)
end
end)
local slot_list = {}
for _, entry in ipairs(M.data.noun_slots) do
table.insert(slot_list, {entry.slot, entry.slot})
end
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_word,
})
local first
M.inflection_utilities.map_word_specs(spec, function(base)
first = first or base
end)
spec.lang = lang
spec.data = data
spec.numbers = number == "sg" and {s = true} or number == "pl" and {p = true} or {s = true, p = true}
if first.indicators.du then
spec.numbers.d = true
end
-- A collective numeral has only the plural.
if first.indicators.num then
spec.numbers = {p = true}
end
if first.pronoun then
spec.numbers = {}
for _, number_code in ipairs(first.pronoun.numbers) do
spec.numbers[number_code] = true
end
spec.numberless = first.pronoun.numberless
end
spec.categories = {}
-- Only a table of the standard language is categorized; for the lects, the labels of the entry do that.
if not first.attested and not first.indicators.lect then
local function add(name, ...)
table.insert(spec.categories, lang:getCanonicalName() .. " " .. data.categories[name]:format(...))
end
if number == "sg" then
add("singularia_tantum")
elseif number == "pl" then
add("pluralia_tantum")
end
if word_count == 1 then
local indicators = first.indicators
if indicators.irreg then
add("irregular")
elseif indicators.indecl then
add("indeclinable")
elseif indicators["+"] then
add("adjectival")
elseif first.rules and first.rules.used then
local final = final_consonant(data, first.rules.stem)
local stem_type = data.stem_types.velar[final] and "velar" or data.stem_types.soft[final] and "soft"
or "hard"
local gender = data.category_genders[first.gender]
if type(gender) == "table" then
gender = gender[first.animacy]
end
-- A plurale tantum has no gender to tell apart, except for a personal one.
if gender and (number ~= "pl" or first.animacy == "pr") then
add("stem", stem_type, gender)
end
local reducible = false
for part in pairs(first.rules.used) do
reducible = reducible or is_mobile(part)
end
if reducible then
add("reducible")
end
local used = first.rules.used
if used.shortened or used.lengthened then
add("quantitative")
end
end
end
end
-- An attested table says what it attests in its title. Its head is the nominative given, or the reconstructed one
-- starred.
spec.attested = first.attested
local head
if first.attested then
local nominative = spec.forms[number == "pl" and "nom_p" or "nom_s"]
head = first.indicators.recon and "*" .. first.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil
end
spec.lect = first.indicators.lect
if first.indicators.lect then
-- A paradigm's table is headed by the lemma, and an attested one by its nominative.
spec.kind_title = {data.lect_titles[first.indicators.lect], first.attested and head or nil}
elseif first.indicators.dialectal then
spec.kind_title = {data.lect_titles.dialectal, head}
elseif data.attested then
spec.kind_title = {"Declension of ", head}
end
spec.title = args.title
spec.nocat = args.nocat
spec.lemmas = {pagename}
return spec
end
-- Return the kind of declension of an adjective, for its title and category: `irregular`, or the kind of the first
-- entry in the data's `adjective_kinds` that its lemma matches (hard ''-y'', velar ''-ki'' and ''-gi'', or soft).
local function adjective_kind(base)
if base.indicators.irreg then
return "irregular"
end
local word = base.indicators.decllemma or base.lemma
for _, kind in ipairs(base.data.adjective_kinds) do
if mw.ustring.find(word, kind[1]) then
return kind[2]
end
end
end
--[==[
Decline an adjective call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl`). Return the alternant
multiword spec from [[Module:inflection utilities]], with the fields `forms`, `layout` (`regular`, `plonly`, `dwa` or
`dual`), `kinds` (the declension kinds of its words), `pos` (the part of speech of the table, from `pos:` on one of its
words), `categories`, `title` and `nocat`.
]==]
function export.decline_adjective(args, pagename, lang_code)
local data, lang = language_of(lang_code, "adjective")
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
return Spec.parse(angle_bracket_spec, "adjective", data)
end,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local spec = M.inflection_utilities.parse_inflected_text(args[1] or pagename, parse_props)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.lemma = M.links.remove_links(base.lemma)
-- The part of speech belongs to the whole table, so only one word may give it.
local pos = base.indicators.pos
if pos then
if not data.parts_of_speech[pos] then
local names = {}
for name in pairs(data.parts_of_speech) do
table.insert(names, name)
end
table.sort(names)
spec_error(("Unrecognized part of speech '%s'; the parts of speech are %s"):format(pos,
table.concat(names, ", ")), base.text)
elseif spec.pos then
spec_error("The part of speech ('pos:') is given on more than one word", base.text)
end
spec.pos = pos
end
resolve_table(base)
end)
local slot_list = {}
for slot in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, slot})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_adjective_word,
})
spec.pos = spec.pos or "adjective"
local plural_pos = data.parts_of_speech[spec.pos]
spec.layout, spec.kinds, spec.categories = "regular", {}, {}
local seen = {}
M.inflection_utilities.map_word_specs(spec, function(base)
-- A lect's table names its lect and isn't categorized, and neither is a numeral's. An attested table is headed
-- by the masculine nominative given, or the reconstructed lemma starred.
if base.attested then
local nominative = spec.forms.nom_m
spec.attested = true
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect or "dialectal"], base.indicators.recon and "*" .. base.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil}
spec.layout = base.layout or base.indicators.plonly and "plonly" or spec.layout
return
elseif base.indicators.lect then
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect]}
return
elseif base.indicators.num then
spec.layout = base.layout
return
end
local function add(name, ...)
table.insert(spec.categories, lang:getCanonicalName() .. " " .. data.categories[name]:format(...))
end
local kind = adjective_kind(base)
if not seen[kind] then
seen[kind] = true
table.insert(spec.kinds, kind)
add("adjective_kind", kind, plural_pos)
end
if base.overrides.short then
add("short_forms", plural_pos)
end
if base.indicators.decllemma then
add("irregular_stem", plural_pos)
end
if base.layout or base.indicators.plonly then
spec.layout = base.layout or "plonly"
end
end)
spec.title = args.title
spec.nocat = args.nocat
spec.lang = lang
spec.lemmas = {pagename}
return spec
end
-- Process the arguments of a call of the template of `entry` (`noun` or `adjective`). On the template's own page, a call
-- with no arguments declines the language's example (`examples` in [[Module:zlw-lch-decl/data]]) instead of the page
-- name.
local function process_args(frame, entry)
local language = M.data.languages[frame.args.lang]
return M.parameters.process(frame:getParent().args, {
[1] = {template_default = language and language.examples[entry]},
title = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
pagename = {},
})
end
-- Run the template entry point `entry` (`noun` or `adjective`) on the call of `frame`: decline it with `decline`
-- (`export.decline_noun` or `export.decline_adjective`) and return its table, made by the `TableRenderer` method
-- `render`, or with json=1 the table's data, as `json_data` gives it from the declined spec.
local function run_entry(frame, entry, decline, render, json_data)
local args = process_args(frame, entry)
local spec = decline(args, args.pagename or M.headword_data.pagename, frame.args.lang)
if args.json then
return M.JSON.toJSON(json_data(spec))
end
local renderer = TableRenderer.new(spec)
return renderer[render](renderer)
end
--[==[
Entry point for {{tl|pl-ndecl}} and {{tl|zlw-opl-ndecl}}. Template-callable function to parse and decline a noun given
user-specified arguments and generate a displayable table of the declined forms, or the table's data as JSON with
{{para|json|1}}.
]==]
function export.noun(frame)
return run_entry(frame, "noun", export.decline_noun, "render", function(spec)
return {forms = spec.forms, numbers = spec.numbers, categories = spec.categories, title = spec.title}
end)
end
--[==[
Entry point for {{tl|pl-adecl}}. Template-callable function to parse and decline an adjective given user-specified
arguments and generate a displayable table of the declined forms, or the table's data as JSON with {{para|json|1}}.
]==]
function export.adjective(frame)
return run_entry(frame, "adjective", export.decline_adjective, "renderAdjective", function(spec)
return {forms = spec.forms, layout = spec.layout, kinds = spec.kinds, categories = spec.categories,
title = spec.title}
end)
end
return export
ho5q09bh726og8olu4r7q41hwne3h0r
2572862
2572859
2026-10-23T02:04:52Z
Hiyuune
50834
2572862
Scribunto
text/plain
--[==[ intro:
This module implements the declension tables of the Lechitic languages: {{tl|pl-ndecl}} for Polish nouns and
{{tl|pl-adecl}} for Polish adjectives (both with their Middle Polish, Standard Kurpie and dialectal tables), and
{{tl|zlw-opl-ndecl}} for Old Polish nouns.
The following terminology is helpful to understand:
* The '''lemma''' is the word being declined, normally the nominative singular, or the nominative plural of a plurale
tantum. In a call it's followed by an inline spec of indicators in angle brackets, e.g.
`{{pl-ndecl|<m.anml.*.datu>}}` (the page name as an animal noun with a mobile ''e'' and the dative in ''-u'') or
`{{pl-ndecl|Morze<n.sg> Bałtyckie<+>}}`.
* A '''slot''' is a particular combination of case and number, e.g. `nom_s` or `loc_p`. Each slot is one cell of a
table.
* The '''stem''' is the lemma minus its nominative ending. A '''group''' is the set of nouns that share one set of
rules; a '''rule''' gives the forms of a slot for the stems that end in particular letters; and a '''copy''' is a
slot that takes its forms from another one. See [[Module:zlw-lch-decl/data/pl]] for the details.
* An '''alternation''' is a change to the stem that a rule asks for: dropping or inserting the mobile ''e'', ''ó''/''o''
and ''ą''/''ę'', and the palatalizations.
* A '''base''' is what [[Module:inflection utilities]] calls the parsed spec of a single word: its lemma, indicators and
overrides, plus its forms once it has been declined.
Authorship: [[User:Fenakhay]]
]==]
local export = {}
local M = require("Module:module loader").init {
require = {
inflection_table = "Module:inflection-table",
inflection_utilities = "Module:inflection utilities",
JSON = "Module:JSON",
languages = "Module:languages",
links = "Module:links",
parameters = "Module:parameters",
parse_utilities = "Module:parse utilities",
utilities = "Module:utilities",
},
loadData = {
data = "Module:zlw-lch-decl/data",
headword_data = "Module:headword/data",
},
}
-- Return the data module of the language `code` (`Module:zlw-lch-decl/data/CODE`) and its language object. `entry` is
-- the entry point being invoked (`noun` or `adjective`); throw an error if `languages` in [[Module:zlw-lch-decl/data]]
-- doesn't list that entry for the language.
local function language_of(code, entry)
local language = code and M.data.languages[code]
if not language or not language[entry] then
local codes = {}
for known, entries in pairs(M.data.languages) do
if entries[entry] then
table.insert(codes, known)
end
end
table.sort(codes)
error(("The #invoke needs lang= with one of %s"):format(table.concat(codes, ", ")), 0)
end
return mw.loadData("Module:zlw-lch-decl/data/" .. code), M.languages.getByCode(code)
end
------------------------------------------------------------------------------------------------------------------------
-- Spec --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the indicators of a single word, i.e. the `<...>` after its lemma, e.g. `<m.anml.*.datu>`. `Spec.parse`
is the `parse_indicator_spec` callback passed to [[Module:inflection utilities]]; it returns the base of the word, with
its indicators by group and its overrides by slot. The indicators each template knows are listed under `indicators` in
the language's data module, and an unknown one is an error that lists the known ones.
]==]
local Spec = {}
Spec.__index = Spec
local function spec_error(message, text)
error(message .. " in the spec '" .. text .. "'.", 0)
end
-- Return the footnotes in a group that `split_alternating_runs` produced from a bracketed run, i.e. the bracketed
-- segments after the first segment. Throw an error if any text follows a footnote.
local function fetch_footnotes(group, text)
local footnotes
for i = 2, #group - 1, 2 do
if group[i + 1] ~= "" then
spec_error("Extraneous text after a bracketed footnote", text)
end
footnotes = footnotes or {}
table.insert(footnotes, group[i])
end
return footnotes
end
--[==[
Parse an override of one or more slots of a noun. There are two kinds of overrides:
* Endings, written `CASE[pl]ENDING:ENDING...`, e.g. `genu` or `insplami:mi`. These go on the stem that the slot's rule
uses.
* Whole forms, written `CASE[pl]:FORM:FORM...`, e.g. `voc:człowiecze:człowieku`.
`CASE+CASE...` sets several cases at once, and `du` in place of `pl` names a dual slot (`nomdu`). Among endings, `+`
stands for the forms the rules give, so that e.g. `nomplowie:+` adds ''-owie'' to them. `-` stands for no ending (among
endings) or no form (among forms), and a footnote can follow any value. `depr` is the deprecative nominative plural of
a masculine personal noun. Return two values: the slots the override applies to, and an object describing it.
]==]
local Overrides = {}
function Overrides.parse(group, text)
local part = group[1]
local slots = {}
while true do
if mw.ustring.sub(part, 1, 4) == "depr" then
table.insert(slots, "depr_p")
part = mw.ustring.sub(part, 5)
else
local case = mw.ustring.sub(part, 1, 3)
if not M.data.case_codes[case] then
spec_error(("Unrecognized case '%s' in an override"):format(case), text)
end
part = mw.ustring.sub(part, 4)
if mw.ustring.find(part, "^pl") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_p")
elseif mw.ustring.find(part, "^du") then
part = mw.ustring.sub(part, 3)
table.insert(slots, case .. "_d")
else
table.insert(slots, case .. "_s")
end
end
if mw.ustring.find(part, "^%+[a-z]") then
part = mw.ustring.sub(part, 2)
else
break
end
end
local override = {values = {}}
if mw.ustring.find(part, "^:") then
override.full = true
part = mw.ustring.sub(part, 2)
end
group[1] = part
for _, value_group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")) do
local value = value_group[1]
if value == "" then
spec_error("Use - for an empty ending or no form", text)
end
table.insert(override.values, {
form = value == "-" and "" or value,
default = not override.full and value == "+" or nil,
footnotes = fetch_footnotes(value_group, text),
})
end
return slots, override
end
-- The slots of an adjective table, which an override of {{tl|pl-adecl}} can name, with their accelerator tags (using the
-- codes in [[Module:form of/data]], `nv` = non-virile).
local ADJECTIVE_ACCEL = {
nom_m = "nom|m|s", nom_f = "nom|f|s", nom_n = "nom|n|s", nom_mp_pers = "vr|nom|p", nom_p_not_mp_pers = "nv|nom|p",
nom_mp_npers = "nv|nom|m|p", nom_fp = "nom|f|p", nom_np = "nom|n|p",
gen_mn = "gen|m//n|s", gen_f = "gen|f|s", gen_p = "gen|p",
dat_mn = "dat|m//n|s", dat_f = "dat|f|s", dat_p = "dat|p",
acc_m_an = "an|acc|m|s", acc_m_in = "in|acc|m|s", acc_f = "acc|f|s", acc_n = "acc|n|s",
acc_mp_pers = "vr|acc|p", acc_p_not_mp_pers = "nv|acc|p", acc_mp_npers = "nv|acc|m|p", acc_fp = "acc|f|p",
acc_np = "acc|n|p",
ins_mn = "ins|m//n|s", ins_f = "ins|f|s", ins_p = "ins|p", ins_mnp = "ins|m//n|p", ins_fp = "ins|f|p",
loc_mn = "loc|m//n|s", loc_f = "loc|f|s", loc_p = "loc|p",
nom_m_d = "nom|m|d", nom_fn_d = "nom|f//n|d", gen_d = "gen|d", dat_d = "dat|d", acc_m_d = "acc|m|d",
acc_fn_d = "acc|f//n|d", ins_d = "ins|d", loc_d = "loc|d",
short = "short",
}
--[==[
Parse an override of {{tl|pl-adecl}}, in the format of the former [[Module:pl-adjective]]: `SLOT[+SLOT...]:FORM:FORM...`
with the slot names of the adjective, e.g. `nom_mp_pers:weseli` or `gen_p+loc_p:...`. Only whole forms are allowed.
Return the same two values as `Overrides.parse`.
]==]
function Overrides.parseAdjective(group, text)
local slots = {}
local value_groups = M.parse_utilities.split_alternating_runs_and_strip_spaces(group, ":")
if #value_groups[1] > 1 then
spec_error("A footnote can't follow the slot name of an override", text)
end
for slot in mw.text.gsplit(value_groups[1][1], "+", true) do
if not ADJECTIVE_ACCEL[slot] then
spec_error(("Unrecognized slot '%s' in an override"):format(slot), text)
end
table.insert(slots, slot)
end
local override = {values = {}, full = true}
for i = 2, #value_groups do
local value = value_groups[i][1]
if value == "" then
spec_error("Use - for no form", text)
end
table.insert(override.values, {form = value == "-" and "" or value, footnotes = fetch_footnotes(value_groups[i], text)})
end
return slots, override
end
-- Return the definition of the indicator `name` for `template`, or nil if there isn't one.
local function indicator_definition(data, template, name)
return data.indicators[template][name]
end
-- Return true if `part` of a spec is an override, i.e. it begins with a case code (or `depr`) and isn't an indicator.
local function is_override(data, template, part)
local name = mw.ustring.match(part, "^([^:]*)") or part
if indicator_definition(data, template, name) then
return false
end
return M.data.case_codes[mw.ustring.sub(part, 1, 3)] ~= nil or mw.ustring.sub(part, 1, 4) == "depr"
end
-- Return true if `part` (`NAME:VALUE`) is an indicator that takes a value (e.g. `decllemma:dń` or `lect:skur`) rather
-- than an override.
local function takes_value(data, template, part)
local definition = indicator_definition(data, template, mw.ustring.match(part, "^([^:]+):"))
return definition and definition.value ~= nil
end
function Spec.parse(angle_bracket_spec, template, data)
local inside = mw.ustring.match(angle_bracket_spec, "^<(.*)>$")
local base = setmetatable({overrides = {}, indicators = {}, groups = {}, template = template, data = data,
text = angle_bracket_spec}, Spec)
if inside == "" then
return base
end
local segments = M.parse_utilities.parse_balanced_segment_run(inside, "[", "]")
for _, group in ipairs(M.parse_utilities.split_alternating_runs_and_strip_spaces(segments, "%.")) do
local part = group[1]
if part == "" then
if #group == 1 then
spec_error("Blank indicator", angle_bracket_spec)
end
base.footnotes = fetch_footnotes(group, angle_bracket_spec)
elseif template == "adjective" and mw.ustring.find(part, ":") and not takes_value(data, template, part)
or template ~= "adjective" and is_override(data, template, part) then
local slots, override
if template == "adjective" then
slots, override = Overrides.parseAdjective(group, angle_bracket_spec)
else
slots, override = Overrides.parse(group, angle_bracket_spec)
end
for _, slot in ipairs(slots) do
if base.overrides[slot] then
spec_error(("Two overrides for the slot '%s'"):format(slot), angle_bracket_spec)
end
base.overrides[slot] = override
end
else
if #group > 1 then
spec_error("A footnote can only follow an override or stand alone", angle_bracket_spec)
end
local name, value = mw.ustring.match(part, "^([^:]+):(.*)$")
name = name or part
local definition = indicator_definition(data, template, name)
if not definition then
local names = {}
for known in pairs(data.indicators[template]) do
table.insert(names, known)
end
table.sort(names)
spec_error(("Unrecognized indicator '%s'; the indicators are %s"):format(name, table.concat(names, ", ")),
angle_bracket_spec)
end
if definition.value and (value == nil or value == "") then
spec_error(("The indicator '%s' needs a value ('%s:...')"):format(name, name), angle_bracket_spec)
elseif not definition.value and value ~= nil then
spec_error(("The indicator '%s' takes no value"):format(name), angle_bracket_spec)
end
if base.indicators[name] ~= nil then
spec_error(("The indicator '%s' is given twice"):format(name), angle_bracket_spec)
end
local key = definition.group or name
if base.groups[key] then
spec_error(("The indicators '%s' and '%s' exclude each other"):format(base.groups[key], name),
angle_bracket_spec)
end
base.groups[key] = name
base.indicators[name] = value or true
end
end
return base
end
-- Return the value set by a group of indicators (e.g. "m" for `gender`), or nil if none of the group was given.
function Spec:group(group)
local name = self.groups[group]
if not name then
return nil
end
return indicator_definition(self.data, self.template, name).sets or name
end
------------------------------------------------------------------------------------------------------------------------
-- Stem --
------------------------------------------------------------------------------------------------------------------------
--[==[
Functions to find the stem of a lemma and apply the alternations of the language's data module to it.
]==]
local Stem = {}
-- Split a lemma into its stem and nominative ending. The ending is the first of the `nominative_endings` of its gender
-- (`m`, `f` or `n`, or `plural` for a plurale tantum) that the lemma ends in with something before it; if there's none,
-- the lemma is its own stem and the ending is empty.
function Stem.split(data, lemma, gender, plural)
for _, ending in ipairs(data.nominative_endings[plural and "plural" or gender]) do
local stem = mw.ustring.match(lemma, "^(.+)" .. ending .. "$")
if stem then
return stem, ending
end
end
return lemma, ""
end
-- Replace the last letters of `stem` according to `map`, trying the longest keys first (up to three letters). Return
-- nil if the stem ends in none of the keys.
local function replace_final(stem, map)
for _, length in ipairs({3, 2, 1}) do
if mw.ustring.len(stem) >= length then
local final = mw.ustring.sub(stem, -length)
if map[final] then
return mw.ustring.sub(stem, 1, -length - 1) .. map[final]
end
end
end
return nil
end
-- Remove the mobile vowel from `stem`, i.e. the first of the data's `mobile_vowels` that it has before its final
-- consonants. Return nil if it has none.
local function reduce(data, stem)
local vowels = data.vowels
for _, mobile in ipairs(data.mobile_vowels) do
local head, final = mw.ustring.match(stem, "^(.-)" .. mobile[1] .. "([^" .. vowels .. "]+)$")
if head and head ~= "" and not (mobile.after_consonant
and mw.ustring.find(mw.ustring.sub(head, -1), "[" .. vowels .. "]")) then
return (mobile.soften and replace_final(head, data[mobile.soften]) or head) .. final
end
end
return nil
end
-- Insert `vowel` before the last consonant of `stem`. Return nil if the stem doesn't end in two consonants.
local function insert(data, stem, vowel)
local vowels = data.vowels
local head, final = mw.ustring.match(stem, "^(.-[^" .. vowels .. "])([^" .. vowels .. "])$")
return head and head .. vowel .. final or nil
end
-- Change the vowel of the last syllable of `stem` according to `map` (`shorten`, `lengthen` or `front` in the data).
-- Return nil if that vowel isn't one of the keys of `map`.
local function alternate(data, stem, map)
local letters = ""
for vowel in pairs(map) do
letters = letters .. vowel
end
local head, vowel, tail = mw.ustring.match(stem, "^(.*)([" .. letters .. "])([^" .. data.vowels .. "]*)$")
return head and head .. map[vowel] .. tail or nil
end
-- Return the stem that `label` names, which is either `plain` or a set of alternations joined with "+" (e.g.
-- `reduced+palatal`). Return nil if one of the alternations doesn't apply to `stem`.
function Stem.apply(data, stem, label)
local text = stem
for part in mw.text.gsplit(label, "+", true) do
if not text then
return nil
end
if part == "reduced" then
text = reduce(data, text)
elseif mw.ustring.find(part, "^inserted_") then
-- `inserted_VOWEL` puts the mobile vowel VOWEL in.
text = insert(data, text, mw.ustring.sub(part, 10))
elseif part == "shortened" then
text = alternate(data, text, data.shorten)
elseif part == "lengthened" then
text = alternate(data, text, data.lengthen)
elseif part == "fronted" then
text = alternate(data, text, data.front)
elseif part == "soft" or part == "final_soft" then
-- This is only a spelling, so leave the stem alone if it has no such letter.
text = replace_final(text, data[part]) or text
elseif part == "palatal" or part == "virile" then
text = replace_final(text, data[part])
elseif part == "irregular" then
text = ""
elseif part ~= "plain" then
error(("Internal error: unknown alternation '%s'"):format(part))
end
end
return text
end
------------------------------------------------------------------------------------------------------------------------
-- Noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object holding the rules of one word's group, with the word's indicators applied. `NounRules.new(base)` finds the group
from the word's gender, kind, number and nominative ending, and `:forms(slot)` returns the forms of a slot by the rule
of the longest matching stem ending, as form objects `{form = ..., footnotes = {...}}`.
]==]
local NounRules = {}
NounRules.__index = NounRules
local function group_key(rule_gender, kind, plural, nominative)
return ("%s %s %s %s"):format(rule_gender, kind, plural and "pl" or "sg", nominative)
end
function NounRules.new(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy]
end
local plural = base.number == "pl"
-- A plurale tantum is either masculine personal (m-pr) or not, and the non-personal ones share the groups of the
-- neuter.
if plural and rule_gender ~= "m-pr" then
rule_gender = "n"
end
if not rule_gender then
spec_error(("The noun '%s' needs a gender (m, f or n)"):format(word), base.text)
end
local stem, nominative = Stem.split(data, word, rule_gender:sub(1, 1), plural)
local kind = base.kind or "common"
local group = data.noun_groups[group_key(rule_gender, kind, plural, nominative)]
or kind ~= "common" and data.noun_groups[group_key(rule_gender, "common", plural, nominative)]
if not group then
error(("No rules for %s nouns in -%s ('%s'); give the forms with overrides and <!>"):format(
rule_gender, nominative, word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
used = {}, head_slot = plural and "nom_p" or "nom_s"}, NounRules)
end
-- Return the rule of `slot` for this stem, i.e. the rule of the longest stem ending (up to three letters) that has one.
function NounRules:rule(slot)
local rules = self.group.rules
for size = math.min(3, mw.ustring.len(self.stem)), 0, -1 do
local suffix = size == 0 and "" or mw.ustring.sub(self.stem, -size)
local by_slot = rules[suffix]
if by_slot and by_slot[slot] then
return by_slot[slot]
end
end
return nil
end
-- Return true if a part of an alternation label is about the mobile vowel, i.e. it's `reduced` or `inserted_VOWEL`.
local function is_mobile(part)
return part == "reduced" or mw.ustring.find(part, "^inserted_") ~= nil
end
-- Return the alternation label of an ending of a rule, with the word's indicators applied. `-*` takes out the mobile
-- vowel and `*` puts it in: for a lemma ending in a consonant it's dropped before an ending, and for one ending in a
-- vowel it's inserted into a bare stem (as `inserted_vowel` in the data says). `-#` and `#` do the same for ''ó''/''o''
-- and ''ą''/''ę''. A bare form of a lemma ending in a consonant is the lemma itself (e.g. the accusative of an
-- inanimate noun) and takes neither.
function NounRules:label(label, ending)
local base = self.base
local parts = {}
for part in mw.text.gsplit(label, "+", true) do
parts[part] = true
end
local mobile = false
for part in pairs(parts) do
mobile = mobile or is_mobile(part)
end
local consonant_final = self.nominative == ""
if base.reducible == false then
for part in pairs(parts) do
if is_mobile(part) then
parts[part] = nil
end
end
elseif base.reducible and not mobile then
if consonant_final and ending ~= "" then
parts.reduced = true
elseif ending == "" then
local inserted = self.data.inserted_vowel
parts["inserted_" .. (inserted.after[mw.ustring.sub(self.stem, -2, -2)] or inserted.default)] = true
end
end
if base.quantity == "none" then
parts.shortened, parts.lengthened = nil, nil
elseif base.quantity == "full" and not (parts.shortened or parts.lengthened) then
if consonant_final and ending ~= "" then
parts.shortened = true
elseif ending == "" then
parts.lengthened = true
end
end
-- Put the parts in the order they apply in, with the mobile vowel first.
local ordered = {}
if parts.reduced then
table.insert(ordered, "reduced")
end
local inserted = {}
for part in pairs(parts) do
if mw.ustring.find(part, "^inserted_") then
table.insert(inserted, part)
end
end
table.sort(inserted)
for _, part in ipairs(inserted) do
table.insert(ordered, part)
end
for _, name in ipairs({"shortened", "lengthened", "fronted", "soft", "final_soft", "palatal", "virile", "irregular"}) do
if parts[name] then
table.insert(ordered, name)
end
end
return ordered[1] and table.concat(ordered, "+") or "plain"
end
-- Join a stem and an ending as the language spells them. A final soft consonant before a vowel is written with the
-- data's `soft_vowel`, which merges with the same vowel at the start of the ending (e.g. ''koń'' + ''-a'' → ''konia'',
-- ''goleń'' + ''-i'' → ''goleni'').
local function join(data, stem, ending)
if ending ~= "" and mw.ustring.find(mw.ustring.sub(ending, 1, 1), "[" .. data.vowels .. "]") then
local spelled = replace_final(stem, data.soft)
if spelled then
local vowel = data.soft_vowel
local length = mw.ustring.len(vowel)
return spelled .. (mw.ustring.sub(ending, 1, length) == vowel and mw.ustring.sub(ending, length + 1) or ending)
end
end
return stem .. ending
end
function NounRules:form(label, ending, note)
local full = self:label(label, ending)
-- Note the alternations used, for the categories of the table.
for part in mw.text.gsplit(full, "+", true) do
self.used[part] = true
end
local stem = Stem.apply(self.data, self.stem, full) or self.stem
local footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil
return {form = join(self.data, stem, ending), footnotes = footnotes}
end
-- Return the endings of a rule's cell as a list of `{ending, stem = ..., note = ...}`. A cell is an ending (a string),
-- one ending with a stem or note (e.g. `{ "e", stem = "palatal" }`), or a list of either (e.g. `{ "i", "ów" }`).
local function cell_endings(cell)
if type(cell) == "string" then
return {{cell}}
elseif type(cell[1]) == "string" and cell[2] == nil then
return {cell}
end
local list = {}
for _, ending in ipairs(cell) do
table.insert(list, type(ending) == "string" and {ending} or ending)
end
return list
end
-- Return the forms of `slot` according to its rule, or nil if the group has no rule for the slot.
function NounRules:forms(slot)
local cell = self:rule(slot)
if not cell then
return nil
end
local list = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(list, self:form(ending.stem or "plain", ending[1], ending.note))
end
return list
end
-- Return the alternation label for an ending given in an override of `slot`. If the ending is one of the rule's own
-- endings, use that ending's label; otherwise use the label of the rule's first ending minus the softening that its
-- ending brings (`palatal` before ''-e'', `virile` before the virile ''-i''/''-y''). This way ''dom'' with the locative
-- ''-u'' gives ''domu'', and ''Polak'' with the nominative plural ''-owie'' gives ''Polakowie''.
function NounRules:overrideLabel(slot, ending)
local cell = self:rule(slot)
local endings = cell and cell_endings(cell) or {}
for _, item in ipairs(endings) do
if item[1] == ending then
return item.stem or "plain"
end
end
local kept = {}
for part in mw.text.gsplit(endings[1] and endings[1].stem or "plain", "+", true) do
if part ~= "palatal" and part ~= "virile" and part ~= "irregular" and part ~= "plain" then
table.insert(kept, part)
end
end
return kept[1] and table.concat(kept, "+") or "plain"
end
--[==[
Object holding the rules of an adjective, with the methods of `NounRules`. The group comes from `adjective_groups`
according to the ending of the lemma (one of `adjective_nominatives`). Adjectives take no stem indicators.
]==]
local AdjectiveRules = setmetatable({}, {__index = NounRules})
AdjectiveRules.__index = AdjectiveRules
function AdjectiveRules.new(base, word)
local data = base.data
local stem, nominative, group
for _, ending in ipairs(data.adjective_nominatives) do
stem = mw.ustring.match(word, "^(.+)" .. ending .. "$")
if stem then
nominative = ending
group = data.adjective_groups["adj common sg " .. ending]
break
end
end
if not group then
local endings = {}
for _, ending in ipairs(data.adjective_nominatives) do
table.insert(endings, "-" .. ending)
end
error(("An adjective ends in %s ('%s'); for an irregular one use <irreg>"):format(table.concat(endings, " or "),
word), 0)
end
return setmetatable({base = base, data = data, word = word, stem = stem, nominative = nominative, group = group,
head_slot = "nom_m", used = {}}, AdjectiveRules)
end
--[==[
Object holding the rules of a lect's paradigm, i.e. an entry of `lect_tables` with `table = "paradigm"`, such as
Standard Kurpie (`lect:skur`). The paradigm is the table in the data named by the entry's `rules`. Its `types` decide
the type of a lemma, and each type has one ending per slot. It answers the same calls from `decline_word` as
`NounRules`.
]==]
local ParadigmRules = {}
ParadigmRules.__index = ParadigmRules
-- Return the last consonant of a stem, which is either one of the data's `digraphs` or a single letter.
local function final_consonant(data, stem)
local last_two = mw.ustring.sub(stem, -2)
return data.digraphs[last_two] and last_two or mw.ustring.sub(stem, -1)
end
-- Return the stem and type of a lemma in `paradigm`, decided by its gender and ending (see `types` in the data). `name`
-- is the name of the lect, for the error messages.
local function paradigm_type(data, paradigm, name, word, gender, text)
for _, entry in ipairs(gender and paradigm.types[gender] or {}) do
local stem = entry.ending == "" and word or mw.ustring.match(word, "^(.+)" .. entry.ending .. "$")
if stem and not (entry.consonant_final and mw.ustring.find(word, "[" .. paradigm.vowels .. "]$")) then
local final = final_consonant(data, stem)
for _, class in ipairs(entry.by_final or {}) do
if paradigm[class[1]][final] then
return stem, class[2]
end
end
return stem, entry.default
end
end
spec_error(("The %s rules have no %s noun like '%s'; give its forms as overrides"):format(name,
gender and M.data.genders[gender].name or "genderless", word), text)
end
function ParadigmRules.new(base, word, paradigm, name)
local data = base.data
if base.number == "pl" then
spec_error(("The %s rules decline from a nominative singular"):format(name), base.text)
end
local stem, type = paradigm_type(data, paradigm, name, word, base.gender, base.text)
if base.gender == "m" and base.animacy ~= "inan" and paradigm.animate_types[type] then
type = paradigm.animate_types[type]
end
if base.reducible then
stem = reduce(data, stem) or spec_error(("The stem '%s' has no mobile e"):format(stem), base.text)
end
local copies = {}
for slot, source in pairs(paradigm.copies[base.gender]) do
copies[slot] = source
end
if base.gender == "m" then
for slot, source in pairs(paradigm.animate_copies[base.animacy]) do
copies[slot] = source
end
end
return setmetatable({base = base, data = data, paradigm = paradigm, word = word, stem = stem,
endings = paradigm.nouns[base.gender][type], group = {copies = copies}, head_slot = "nom_s"}, ParadigmRules)
end
-- Return one form: the stem, palatalized if `label` is `palatal` (by the paradigm's own `palatal` table), followed by
-- the ending. After a hardened consonant, the first letter of the ending is respelled by `hardened_spelling`.
function ParadigmRules:form(label, ending, note)
local paradigm = self.paradigm
local stem = self.stem
if label == "palatal" then
local last_two = mw.ustring.sub(stem, -2)
if paradigm.palatal[last_two] then
stem = mw.ustring.sub(stem, 1, -3) .. paradigm.palatal[last_two]
else
stem = mw.ustring.sub(stem, 1, -2) .. (paradigm.palatal[mw.ustring.sub(stem, -1)] or mw.ustring.sub(stem, -1))
end
end
if paradigm.hardened[final_consonant(self.data, stem)] then
local respelled = paradigm.hardened_spelling[mw.ustring.sub(ending, 1, 1)]
if respelled then
ending = respelled .. mw.ustring.sub(ending, 2)
end
end
return {form = stem .. ending, footnotes = note and {"[" .. self.data.notes[note] .. "]"} or nil}
end
function ParadigmRules:forms(slot)
local cell = self.endings[slot]
if not cell then
return {}
end
if type(cell) == "string" then
return {self:form("plain", cell)}
end
return {self:form(cell.stem or "plain", cell[1], cell.note)}
end
-- Return the stem label of a slot's rule. An ending given for the slot in an override goes on that stem.
function ParadigmRules:overrideLabel(slot)
local cell = self.endings[slot]
return type(cell) == "table" and cell.stem or "plain"
end
------------------------------------------------------------------------------------------------------------------------
-- Declension --
------------------------------------------------------------------------------------------------------------------------
-- Return the forms of a noun from the lexicon (`<irreg>`) or of an indeclinable noun (`<indecl>`).
local function lexicon_forms(base, word)
local forms = {}
if base.indicators.irreg then
local list = base.data.irregular_nouns[word]
if not list then
error(("'%s' is not one of the irregular nouns"):format(word), 0)
end
for i, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = list[i]}}
end
elseif base.indicators.indecl then
for _, slot in ipairs(base.data.slot_order) do
forms[slot] = {{form = word}}
end
end
return forms
end
-- Return the masculine nominative singular of an adjectival word given in another gender, using `adjective_lemma` in
-- the data, e.g. ''teściowa'' → ''teściowy'', ''tania'' → ''tani'', ''bykowe'' → ''bykowy'', ''wielkie'' →
-- ''wielki''. A plural such as ''Zjednoczone'' works the same way.
local function adjective_lemma(data, word, rule_gender, plural)
local lemma = data.adjective_lemma
for _, ending in ipairs(lemma.endings[plural and "plural" or rule_gender] or {}) do
local stem = mw.ustring.match(word, "^(.+)" .. ending[1] .. "$")
if stem then
return stem .. ((ending.soft or lemma.soft_after[mw.ustring.sub(stem, -1)]) and lemma.soft or lemma.hard)
end
end
return word
end
--[==[
Return the masculine nominative singular that goes with a virile plural, e.g. ''krewni'' → ''krewny'', ''polscy'' →
''polski''. We try each word that the data's `palatal` table could have softened into the plural (before one of the
`virile_endings`) and return the one whose virile nominative plural, as the adjective rules give it, is that plural.
Return {nil} if there's none.
]==]
local function virile_lemma(data, word)
local adjective = {indicators = {}, overrides = {}, data = data}
for final, softened in pairs(data.palatal) do
for _, ending in ipairs(data.virile_endings) do
local stem = mw.ustring.match(word, "^(.+)" .. softened .. ending .. "$")
if stem then
for _, nominative in ipairs(data.adjective_nominatives) do
local lemma = stem .. final .. nominative
local ok, rules = pcall(AdjectiveRules.new, adjective, lemma)
if ok then
for _, form in ipairs(rules:forms("nom_mp_pers")) do
if form.form == word then
return lemma
end
end
end
end
end
end
end
return nil
end
-- Return the forms of an adjectival word (`+`) in noun slots, using `adjectival_slots` in the data.
local function adjectival_forms(base, word)
local data = base.data
local rule_gender = data.rule_gender[base.gender]
if type(rule_gender) == "table" then
rule_gender = rule_gender[base.animacy or "inan"]
end
local plural = base.number == "pl"
local lemma = plural and rule_gender == "m-pr" and virile_lemma(data, word) or adjective_lemma(data, word, rule_gender, plural)
local adjective = {lemma = lemma, indicators = {}, overrides = {}, data = data}
local rules = AdjectiveRules.new(adjective, adjective.lemma)
local function forms_of(slot)
if slot == "nom_m" then
return {{form = adjective.lemma}}
end
local source = rules.group.copies[slot]
while source and rules.group.copies[source] do
source = rules.group.copies[source]
end
if source == "nom_m" then
return {{form = adjective.lemma}}
end
return rules:forms(source or slot) or {}
end
local forms = {}
for slot, adjective_slot in pairs(data.adjectival_slots[rule_gender]) do
forms[slot] = forms_of(adjective_slot)
end
if rule_gender ~= "m-pr" then
for slot, adjective_slot in pairs(data.adjectival_slots.plural) do
forms[slot] = forms_of(adjective_slot)
end
end
-- The word as given heads its table.
forms[plural and "nom_p" or "nom_s"] = {{form = word}}
return forms
end
--[==[
Resolve the lect of a `lect:` indicator or a `[lect:CODE:PLACE]` tag through the aliases in the data module of the lects
(`lect_module` in the language's data, which is [[Module:zlw-lch-IPA/data/pl]] for Polish). Return the code and the
name of the lect.
]==]
local function lect_of(data, code, text)
local lects = mw.loadData(data.lect_module)
code = lects.lect_aliases[code] or code
local lect = lects.lects[code]
if not lect then
local codes = {}
for known in pairs(lects.lects) do
table.insert(codes, known)
end
table.sort(codes)
spec_error(("Unrecognized lect '%s'; the lects are %s"):format(code, table.concat(codes, ", ")), text)
end
return code, lect.name
end
-- Return a footnote `[lect:CODE]` or `[lect:CODE:PLACE]` as it's shown, with the name of the lect and the place. Return
-- nil if the footnote isn't a lect tag.
local function lect_footnote(data, footnote, text)
local code, place = mw.ustring.match(footnote, "^%[lect:([^:%]]+):?(.-)%]$")
if not code then
return nil
end
local _, name = lect_of(data, code, text)
return "[" .. name .. (place ~= "" and " (" .. place .. ")" or "") .. "]"
end
-- Return the link target of a form of an attested lect, i.e. its modern spelling according to `respelling` (e.g.
-- ''ptåka'' → ''ptaka''). Return nil if it's spelled the same.
local function respelled(respelling, form)
local target = mw.ustring.gsub(form, ".", respelling)
return target ~= form and target or nil
end
-- Return a `generate_link` function for `show_forms` for the table of `spec`, which links a respelled form (one with a
-- `target`) to its modern spelling.
local function respelled_link(spec)
return function(data)
if data.form.target then
return M.links.full_link{lang = spec.lang, term = data.form.target, alt = data.form.formval_for_link,
tr = "-"} .. M.inflection_utilities.get_footnote_text(data.form.footnotes, data.footnote_obj)
end
end
end
--[==[
Return the forms of an attested table (Middle Polish `lect:mpl`, the `dialectal` table and every Old Polish table),
which are the cells given, exactly as given, and nothing else. In a dialectal table, every form must have a lect,
either from its own `[lect:...]` tag or from a tag given for the whole word.
]==]
local function attested_forms(base)
local forms = {}
local word_lect
local word_footnotes = {}
for _, note in ipairs(base.footnotes or {}) do
local shown = lect_footnote(base.data, note, base.text)
word_lect = word_lect or shown
table.insert(word_footnotes, shown or note)
end
-- the forms with a lect tag of their own, which the lect tag of the word doesn't go on
local own_lect = {}
local respelling = base.lect_table and base.lect_table.respelling and base.data[base.lect_table.respelling]
for slot, override in pairs(base.overrides) do
if not override.full then
spec_error(("An attested table takes whole forms: '%s:FORM'"):format(slot), base.text)
end
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
local footnotes, lect = {}, nil
for _, note in ipairs(value.footnotes or {}) do
local shown = lect_footnote(base.data, note, base.text)
lect = lect or shown
table.insert(footnotes, shown or note)
end
if base.indicators.dialectal then
if not lect and not word_lect then
spec_error(("The dialectal form '%s' needs [lect:CODE]"):format(value.form), base.text)
end
end
local form = {
form = value.form,
target = respelling and respelled(respelling, value.form) or nil,
footnotes = footnotes[1] and footnotes or nil,
}
own_lect[form] = lect and true or nil
table.insert(list, form)
end
end
forms[slot] = list
end
if base.footnotes then
base.footnotes, base.word_lect, base.own_lect = word_footnotes, word_lect, own_lect
end
return forms
end
-- Return the entry of a pronoun in the data's `pronouns` along with the ending its forms take. This is the lemma's own
-- entry (with no ending), or the entry of the pronoun it's made from plus one of the `pronoun_suffixes` (e.g.
-- ''cośkolwiek'' is ''co'' plus ''-śkolwiek'').
local function pronoun_entry(data, lemma)
local pronouns = data.pronouns
if pronouns[lemma] then
return pronouns[lemma], ""
end
for _, suffix in ipairs(data.pronoun_suffixes or {}) do
local head = mw.ustring.match(lemma, "^(.+)" .. suffix .. "$")
if head and pronouns[head] then
return pronouns[head], suffix
end
end
return nil
end
-- Return the forms of a pronoun (`<pron>`) with their notes. In an attested table (Old Polish), the forms given in the
-- spec go on top of them.
local function pronoun_forms(base, word)
local data = base.data
local pronoun, suffix = pronoun_entry(data, word)
if not pronoun then
local lemmas = {}
for lemma in pairs(data.pronouns) do
table.insert(lemmas, lemma)
end
table.sort(lemmas)
local message = ("No pronoun '%s'; the pronouns are %s"):format(word, table.concat(lemmas, ", "))
if data.pronoun_suffixes then
local suffixes = {}
for _, item in ipairs(data.pronoun_suffixes) do
table.insert(suffixes, "-" .. item)
end
message = message .. ", and these with " .. table.concat(suffixes, ", ")
end
spec_error(message, base.text)
end
base.pronoun = pronoun
local forms = {}
for slot, list in pairs(pronoun) do
if slot ~= "numbers" and slot ~= "numberless" then
forms[slot] = {}
for _, item in ipairs(list) do
local form = {form = (type(item) == "table" and item[1] or item) .. suffix}
if type(item) == "table" then
form.footnotes = {}
for _, note in ipairs(item.notes) do
table.insert(form.footnotes, "[" .. data.notes[note] .. "]")
end
end
table.insert(forms[slot], form)
end
end
end
if base.attested then
for slot, list in pairs(attested_forms(base)) do
forms[slot] = list
end
end
return forms
end
-- Return the rule of a numeral in `rules` (`numeral_rules` or `collective_rules` in the data), i.e. the rule of the
-- longest key that the lemma ends in, along with the lemma minus that key.
local function numeral_rule(rules, word, text)
for length = mw.ustring.len(word), 0, -1 do
local key = length == 0 and "" or mw.ustring.sub(word, -length)
if rules[key] then
return rules[key], mw.ustring.sub(word, 1, mw.ustring.len(word) - length)
end
end
spec_error(("No numeral declines like '%s'"):format(word), text)
end
-- Return the forms of a numeral (`<num>`), i.e. the endings of its rule added to its stem.
local function numeral_forms(rules, base, word)
local rule, stem = numeral_rule(rules, word, base.text)
local forms = {}
for slot, cell in pairs(rule) do
forms[slot] = {}
for _, ending in ipairs(cell_endings(cell)) do
table.insert(forms[slot], {form = stem .. ending[1],
footnotes = ending.note and {"[" .. base.data.notes[ending.note] .. "]"} or nil})
end
end
return forms
end
--[==[
Add the footnotes given for the whole word (`base.footnotes`) after the footnotes of every form, as new form objects,
since a copied slot shares the form objects of its source. In an attested table the word's lect tag
(`base.word_lect`) only goes on the forms without a lect tag of their own (`base.own_lect`). Return the forms.
]==]
local function add_word_footnotes(base, forms)
if not base.footnotes then
return forms
end
for slot, list in pairs(forms) do
local copy = {}
for _, form in ipairs(list) do
local footnotes = {}
for _, note in ipairs(form.footnotes or {}) do
table.insert(footnotes, note)
end
for _, note in ipairs(base.footnotes) do
if not (note == base.word_lect and base.own_lect[form]) then
table.insert(footnotes, note)
end
end
table.insert(copy, {form = form.form, footnotes = footnotes, target = form.target})
end
forms[slot] = copy
end
return forms
end
--[==[
Decline a single word. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]]. First the
rules fill every slot they cover. Then the overrides apply (an ending goes on the stem that the slot's rule uses, and a
form replaces the cell), followed by the copies (unless a copy is overridden itself), the deprecative forms of a
masculine personal noun (after its nominative plural, with a footnote) and finally the footnote for the whole word.
]==]
local function decline_word(base)
local word = base.indicators.decllemma or base.lemma
local forms, rules
if base.attested then
base.forms = add_word_footnotes(base, base.indicators.pron and pronoun_forms(base, word) or attested_forms(base))
return
elseif base.indicators.pron then
forms = pronoun_forms(base, word)
elseif base.indicators.num then
forms = numeral_forms(base.data.collective_rules, base, word)
elseif base.indicators.irreg or base.indicators.indecl then
forms = lexicon_forms(base, word)
elseif base.indicators["!"] then
-- A manual table has only the forms its overrides give.
forms = {}
elseif base.indicators["+"] then
forms = adjectival_forms(base, word)
else
rules = base.lect_table and base.lect_table.table == "paradigm"
and ParadigmRules.new(base, word, base.data[base.lect_table.rules], base.lect_name) or NounRules.new(base, word)
-- The lemma heads the table, even when another word is declined in its place (`decllemma`).
forms = {[rules.head_slot] = {{form = base.lemma}}}
-- The rules give the singular and the plural; only an attested table has the dual.
for _, entry in ipairs(M.data.noun_slots) do
local slot = entry.slot
if entry.number ~= "d" and slot ~= rules.head_slot and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
-- A form that is the declined word itself (e.g. an inanimate accusative) belongs to the lemma.
for _, form in ipairs(forms[slot] or {}) do
if form.form == word then
form.form = base.lemma
end
end
end
end
-- In a phrase the deprecative forms would agree with nothing (''pany młodzi''), so only a single word shows
-- them.
if not base.in_phrase then
forms.depr_p = rules:forms("depr_p")
end
end
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.default then
for _, form in ipairs(rules and rules:forms(slot) or {}) do
table.insert(list, form)
end
elseif override.full then
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
else
local form = rules and rules:form(rules:overrideLabel(slot, value.form), value.form) or {form = word .. value.form}
form.footnotes = value.footnotes
table.insert(list, form)
end
end
forms[slot] = list
end
if rules then
-- A copy can copy another copy (e.g. the vocative of a feminine consonant-stem noun is its locative, which is
-- its dative). Fill each one from the slot at the end of its chain, unless a slot along the way is overridden.
local copies = rules.group.copies
for slot in pairs(copies) do
if not base.overrides[slot] then
local source = copies[slot]
while copies[source] and not base.overrides[source] do
source = copies[source]
end
local list = {}
for _, form in ipairs(forms[source] or {}) do
table.insert(list, form)
end
forms[slot] = list
end
end
end
if forms.depr_p then
forms.nom_p = forms.nom_p or {}
-- A deprecative form that's the same as a virile form (e.g. ''zaklinacze'') isn't a separate form, so don't
-- show it twice.
local virile = {}
for _, form in ipairs(forms.nom_p) do
virile[form.form] = true
end
for _, form in ipairs(forms.depr_p) do
if not virile[form.form] then
table.insert(forms.nom_p, {form = form.form, footnotes = form.footnotes or {"[" .. base.data.notes.deprecative .. "]"}})
end
end
forms.depr_p = nil
end
base.forms = add_word_footnotes(base, forms)
-- Keep the rules the forms came from, and the alternations they used, for the categories.
base.rules = rules
end
-- Join an adjective stem and an ending. If the data's `adjective_dropped` says the last letter of the stem drops before
-- the first letter of the ending, drop it (e.g. ''moj-'' + ''-ich'' → ''moich'').
local function adjective_form(data, stem, ending)
local before = data.adjective_dropped[mw.ustring.sub(stem, -1)]
if before and mw.ustring.sub(ending, 1, mw.ustring.len(before)) == before then
return mw.ustring.sub(stem, 1, -2) .. ending
end
return stem .. ending
end
-- Return the forms of an irregular adjective from `irregular_adjectives`, along with the layout of the table it needs
-- (nil, `dwa` or `plonly`).
local function irregular_adjective_forms(base, word)
local data = base.data
for _, entry in ipairs(data.irregular_adjectives) do
local captured = mw.ustring.match(word, entry.pattern)
if captured or entry.stem and mw.ustring.find(word, entry.pattern) then
local forms = {}
local function add(slot, stem, endings, note)
if type(endings) == "string" then
endings = {endings}
end
for _, ending in ipairs(endings or {}) do
forms[slot] = forms[slot] or {}
local form = ending == "-" and base.lemma or adjective_form(data, stem, ending)
table.insert(forms[slot], {form = form, footnotes = note and {"[" .. note .. "]"} or nil})
end
end
if entry.table ~= "dwa" then
add("nom_m", nil, "-")
end
for _, set in ipairs(entry.sets) do
local stem = (entry.stem or captured) .. (set.add or "")
for slot, endings in pairs(set.endings or {}) do
add(slot, stem, endings, set.note)
for _, target in ipairs(data.adjective_shared[slot] or {}) do
add(target, stem, endings, set.note)
end
end
for slot, endings in pairs(set.own or {}) do
add(slot, stem, endings, set.note)
end
if set.archaic_dative and base.indicators.archdat then
add("dat_mn", stem, set.archaic_dative, data.notes[data.archaic_dative.note])
end
end
return forms, entry.table
end
end
error(("Unrecognized irregular adjective '%s'"):format(word), 0)
end
-- Return the forms of an adjective in a lect's paradigm (`lect:skur`): the endings of the paradigm's `adjective` added
-- to the lemma minus its last letter, with the slots shared as for every adjective (`adjective_shared` in the data).
local function paradigm_adjective_forms(data, paradigm, word)
local stem = mw.ustring.sub(word, 1, -2)
local forms = {nom_m = {{form = word}}}
for slot, ending in pairs(paradigm.adjective) do
forms[slot] = {{form = stem .. ending}}
end
for source, targets in pairs(data.adjective_shared) do
for _, target in ipairs(targets) do
forms[target] = forms[source]
end
end
return forms
end
--[==[
Decline a single adjective. This is the `inflect_word_spec` callback passed to [[Module:inflection utilities]] for
{{tl|pl-adecl}}. The rules (or the lexicon of irregular adjectives) fill the slots; then the overrides apply, followed
by the accusatives taken from other slots (unless overridden) and the footnote for the whole word. An attested table
has the cells given and nothing else.
]==]
local function decline_adjective_word(base)
local data = base.data
local word = base.indicators.decllemma or base.lemma
local forms, layout
if base.attested then
-- The cells given and nothing else, with the dual columns if `du` is given.
forms, layout = attested_forms(base), base.indicators.du and "dual" or nil
elseif base.indicators.irreg then
forms, layout = irregular_adjective_forms(base, word)
elseif base.indicators.lect then
forms = paradigm_adjective_forms(data, data[data.lect_tables[base.indicators.lect].rules], word)
elseif base.indicators.num then
forms, layout = numeral_forms(data.numeral_rules, base, word), "plonly"
else
local rules = AdjectiveRules.new(base, word)
-- With `decllemma`, the lemma itself still heads the table (''wart'' declined as ''warty'').
forms = {nom_m = {{form = base.lemma}}}
for _, slot in ipairs(data.adjective_slots) do
if slot ~= "nom_m" and slot ~= "short" and not rules.group.copies[slot] then
forms[slot] = rules:forms(slot)
end
end
if base.indicators.archdat then
local archaic = data.archaic_dative
table.insert(forms.dat_mn, {form = rules.stem .. archaic[1], footnotes = {"[" .. data.notes[archaic.note] .. "]"}})
end
-- Keep the slots that every adjective shares as copies, so that an override of the source carries over.
for slot, source in pairs(rules.group.copies) do
local accusative = mw.ustring.find(slot, "^acc")
if not accusative and not base.overrides[slot] then
forms[slot] = forms[source]
end
end
end
if not base.attested then
for slot, override in pairs(base.overrides) do
local list = {}
for _, value in ipairs(override.values) do
if value.form ~= "" then
table.insert(list, {form = value.form, footnotes = value.footnotes})
end
end
forms[slot] = list
end
for _, pair in ipairs(data.adjective_accusatives) do
local source, target = pair[1], pair[2]
if not base.overrides[target] and forms[source] and not (base.indicators.irreg and forms[target]) then
forms[target] = forms[source]
end
end
end
base.forms = add_word_footnotes(base, forms)
base.layout = layout
end
-- Return the attested tables there are for `template` (`noun` or `adjective`), for the error messages: those of the
-- language's attested lects and its dialectal table, plus the templates of the languages whose tables of that kind are
-- all attested.
local function attested_tables(data, template)
local tables = {}
local codes = {}
for code, lect_table in pairs(data.lect_tables or {}) do
if lect_table.table == "attested" then
table.insert(codes, code)
end
end
table.sort(codes)
for _, code in ipairs(codes) do
table.insert(tables, "<lect:" .. code .. ">")
end
if data.indicators[template].dialectal then
table.insert(tables, "<dialectal>")
end
local languages = {}
for code, language in pairs(M.data.languages) do
if language[template] then
table.insert(languages, code)
end
end
table.sort(languages)
for _, code in ipairs(languages) do
if mw.loadData("Module:zlw-lch-decl/data/" .. code).attested then
table.insert(tables, "{{" .. M.data.languages[code][template] .. "}}")
end
end
return table.concat(tables, ", ")
end
-- Work out the table a base is for: its lect (`lect:CODE`), and whether the table is attested, i.e. has only the cells
-- given (for an attested lect, the dialectal table, or a language whose tables are all attested). Throw an error if
-- `recon` or `du` is given for a table that isn't attested, if a lect tag appears outside the dialectal table, or if a
-- dual slot is given without `du`.
local function resolve_table(base)
local data = base.data
if base.indicators.lect then
base.indicators.lect, base.lect_name = lect_of(data, base.indicators.lect, base.text)
base.lect_table = data.lect_tables[base.indicators.lect]
if not base.lect_table then
spec_error(("The lect '%s' has no table of its own; give its forms in a <dialectal> table"):format(
base.indicators.lect), base.text)
end
end
base.attested = data.attested or base.indicators.dialectal
or base.lect_table and base.lect_table.table == "attested" or nil
for _, name in ipairs({"recon", "du"}) do
if base.indicators[name] and not base.attested then
spec_error(("Only an attested table (%s) takes '%s'"):format(attested_tables(data, base.template), name),
base.text)
end
end
-- A form of a lect can only be tagged in the dialectal table, so that none ends up among the standard forms.
if not base.indicators.dialectal then
local function check(footnotes)
for _, footnote in ipairs(footnotes or {}) do
if mw.ustring.find(footnote, "^%[lect:") then
spec_error(("A lect's form (%s) belongs in a <dialectal> table"):format(footnote), base.text)
end
end
end
check(base.footnotes)
for _, override in pairs(base.overrides) do
for _, value in ipairs(override.values) do
check(value.footnotes)
end
end
end
if not base.indicators.du then
for slot in pairs(base.overrides) do
if mw.ustring.find(slot, "_d$") then
spec_error(("The dual slot '%s' needs the indicator 'du'"):format(slot), base.text)
end
end
end
end
-- Set the fields of a base that the rules use, based on its indicators.
local function normalize_base(base)
base.gender = base:group("gender")
base.animacy = base:group("animacy")
base.number = base:group("number")
base.kind = base:group("kind")
base.reducible = base.indicators["*"] and true or base.indicators["-*"] and false or nil
base.quantity = base.indicators["#"] and "full" or base.indicators["-#"] and "none" or nil
if base.gender == "m" and not base.animacy then
base.animacy = "inan"
end
resolve_table(base)
end
------------------------------------------------------------------------------------------------------------------------
-- Output --
------------------------------------------------------------------------------------------------------------------------
--[==[
Object to render the declined words as a table with [[Module:inflection-table]], with a column for each number shown and
a row for each case. Each row has a `data-case` attribute so that scripts can reorder the cases. The cells come from
`show_forms` in [[Module:inflection utilities]], linked with accelerators for the lemma, and the footnotes go under the
table.
]==]
local TableRenderer = {}
TableRenderer.__index = TableRenderer
function TableRenderer.new(spec)
return setmetatable({spec = spec}, TableRenderer)
end
function TableRenderer:numbers()
local numbers = {}
for _, number in ipairs(M.data.numbers) do
if self.spec.numbers[number.code] then
table.insert(numbers, number)
end
end
return numbers
end
-- Return the title of a table: `title=` if given, otherwise what the table is (e.g. "Declension of " or "Attested
-- Middle Polish forms of ") followed by its head, unlinked. `suffix` follows the default title (`default_kind` and the
-- lemma), e.g. the declension kinds of an adjective.
function TableRenderer:title(default_kind, suffix)
local spec = self.spec
if spec.title then
return spec.title
end
local kind, head = default_kind, spec.forms.lemma
if spec.kind_title then
kind, head, suffix = spec.kind_title[1], spec.kind_title[2] or head, nil
end
return kind .. M.links.full_link({lang = spec.lang, alt = head}, "term") .. (suffix or "")
end
-- Return the first lines of a table titled `title`: the frame from [[Module:inflection-table]], with its first row
-- opened.
function TableRenderer:top(title)
return {M.inflection_table.make_top{
title = title,
palette = "blue",
tall = "yes",
lang = self.spec.lang:getCode(),
}}
end
-- Close the table in `lines` with its footnotes and categories, and return its wikitext.
function TableRenderer:finish(lines)
local spec = self.spec
table.insert(lines, M.inflection_table.make_bottom{notes = spec.forms.footnote or ""})
if spec.categories[1] and not spec.nocat then
table.insert(lines, M.utilities.format_categories(spec.categories, spec.lang))
end
return table.concat(lines, "\n")
end
function TableRenderer:render()
local spec = self.spec
local numbers = self:numbers()
local slot_list = {}
for _, case in ipairs(M.data.cases) do
for _, number in ipairs(numbers) do
-- A table with one number doesn't name it in its accelerators, and an attested or lect table has none
-- ("-").
local accel = (spec.attested or spec.lect) and "-" or #numbers > 1 and case.accel .. "|" .. number.accel or case.accel
table.insert(slot_list, {case.code .. "_" .. number.code, accel})
end
end
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
-- A Middle Polish form links to its modern spelling.
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của "))
-- make_top has already opened the first row.
table.insert(lines, '! class="outer" |')
for _, number in ipairs(numbers) do
-- A numberless pronoun (e.g. ''siebie'') has an empty header over its one column.
table.insert(lines, '! class="outer" | ' .. (spec.numberless and "" or number.name))
end
for _, case in ipairs(M.data.cases) do
table.insert(lines, ('|- data-case="%s"'):format(case.code))
table.insert(lines, ('! title="%s" | %s'):format(spec.data.case_titles[case.code], case.name))
for _, number in ipairs(numbers) do
local cell = spec.forms[case.code .. "_" .. number.code]
table.insert(lines, "| " .. (cell or "—"))
end
end
return self:finish(lines)
end
--[==[
The rows of an adjective table, by layout. Each row is a case and its cells, and each cell is a slot and the number of
columns it spans. The regular table has the masculine animate, masculine inanimate, feminine and neuter singular, then
the virile and non-virile plural, as in the former [[Module:pl-adjective]]. The dual table (an attested table with `du`)
puts the dual, masculine and feminine/neuter, between them.
]==]
local ADJECTIVE_LAYOUTS = {
regular = {
columns = {
{"singular", 4, {"masculine animate", "masculine inanimate", "feminine", "neuter"}},
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_p", 2}}},
{"dat", "dative", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_p", 2}}},
{"acc", "accusative", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_mp_pers"},
{"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_p", 2}}},
{"loc", "locative", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_p", 2}}},
},
},
plonly = {
columns = {
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_p", 2}}},
{"dat", "dative", {{"dat_p", 2}}},
{"acc", "accusative", {{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_p", 2}}},
{"loc", "locative", {{"loc_p", 2}}},
},
},
-- an attested table with the dual (`du`), between the singular and the plural
dual = {
columns = {
{"singular", 4, {"masculine animate", "masculine inanimate", "feminine", "neuter"}},
{"dual", 2, {"masculine", "feminine/<wbr />neuter"}},
{"plural", 2, {"virile (= masculine personal)", "non-virile"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_m", 2}, {"nom_f"}, {"nom_n"}, {"nom_m_d"}, {"nom_fn_d"},
{"nom_mp_pers"}, {"nom_p_not_mp_pers"}}},
{"gen", "genitive", {{"gen_mn", 2}, {"gen_f"}, {"gen_mn"}, {"gen_d", 2}, {"gen_p", 2}}},
{"dat", "dative", {{"dat_mn", 2}, {"dat_f"}, {"dat_mn"}, {"dat_d", 2}, {"dat_p", 2}}},
{"acc", "accusative", {{"acc_m_an"}, {"acc_m_in"}, {"acc_f"}, {"acc_n"}, {"acc_m_d"}, {"acc_fn_d"},
{"acc_mp_pers"}, {"acc_p_not_mp_pers"}}},
{"ins", "instrumental", {{"ins_mn", 2}, {"ins_f"}, {"ins_mn"}, {"ins_d", 2}, {"ins_p", 2}}},
{"loc", "locative", {{"loc_mn", 2}, {"loc_f"}, {"loc_mn"}, {"loc_d", 2}, {"loc_p", 2}}},
},
},
dwa = {
columns = {
{"plural", 4, {"masculine personal", "masculine non-personal", "feminine", "neuter"}},
},
rows = {
{"nom", "nominative/<wbr />vocative", {{"nom_mp_pers"}, {"nom_mp_npers"}, {"nom_fp"}, {"nom_np"}}},
{"gen", "genitive", {{"gen_p", 4}}},
{"dat", "dative", {{"dat_p", 4}}},
{"acc", "accusative", {{"acc_mp_pers"}, {"acc_mp_npers"}, {"acc_fp"}, {"acc_np"}}},
{"ins", "instrumental", {{"ins_mnp", 2}, {"ins_fp"}, {"ins_mnp"}}},
{"loc", "locative", {{"loc_p", 4}}},
},
},
}
function TableRenderer:renderAdjective()
local spec = self.spec
local layout = ADJECTIVE_LAYOUTS[spec.layout]
local slot_list = {}
for slot, accel in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, (spec.lect or spec.attested) and "-" or accel})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.show_forms(spec.forms, {
lang = spec.lang,
lemmas = spec.lemmas,
slot_list = slot_list,
generate_link = respelled_link(spec),
})
local lines = self:top(self:title("Biến cách của ",
spec.kinds[1] and " (" .. table.concat(spec.kinds, " // ") .. ")" or nil))
-- make_top has already opened the first row. Add the number headers, then the gender headers.
table.insert(lines, '! class="outer" rowspan="2" |')
for _, column in ipairs(layout.columns) do
table.insert(lines, ('! class="outer" colspan="%d" | %s'):format(column[2], column[1]))
end
table.insert(lines, "|- class=\"secondary\"")
for _, column in ipairs(layout.columns) do
for _, header in ipairs(column[3]) do
table.insert(lines, "! " .. header)
end
end
for _, row in ipairs(layout.rows) do
table.insert(lines, ('|- data-case="%s"'):format(row[1]))
table.insert(lines, "! " .. row[2])
for _, cell in ipairs(row[3]) do
local span = cell[2] and ('colspan="%d" | '):format(cell[2]) or ""
table.insert(lines, "| " .. span .. (spec.forms[cell[1]] or "—"))
end
end
if spec.forms.short and spec.forms.short ~= "—" then
table.insert(lines, '|- data-case="short"')
table.insert(lines, "! short")
table.insert(lines, '| colspan="2" | ' .. spec.forms.short)
end
return self:finish(lines)
end
------------------------------------------------------------------------------------------------------------------------
-- The call --
------------------------------------------------------------------------------------------------------------------------
--[==[
Decline a noun call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl` or `zlw-opl`). Return the
alternant multiword spec from [[Module:inflection utilities]], with the fields `forms` (a table mapping each slot to a
list of form objects), `numbers` (a set of `s`, `d` and `p`), `categories`, `title` and `nocat`.
]==]
function export.decline_noun(args, pagename, lang_code)
local data, lang = language_of(lang_code, "noun")
-- The angle brackets are omittable, so a bare word would be read as an indicator; with no spec, decline the page
-- name with no indicators.
local spec_text = args[1] or ""
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
local base = Spec.parse(angle_bracket_spec, "noun", data)
normalize_base(base)
return base
end,
allow_blank_lemma = true,
angle_brackets_omittable = true,
}
local spec = M.inflection_utilities.parse_inflected_text(spec_text, parse_props)
local number, noun
local word_count = 0
M.inflection_utilities.map_word_specs(spec, function()
word_count = word_count + 1
end)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
-- An irregular noun has the gender and animacy of its lexicon entry. They're used if the spec gives none, and
-- giving others is an error.
local irregular = base.indicators.irreg and data.irregular_nouns[base.indicators.decllemma or base.lemma]
if irregular then
if base.gender and (base.gender ~= irregular.gender or base.animacy ~= irregular.animacy) then
spec_error(("The irregular noun '%s' is <%s>"):format(base.lemma,
irregular.gender .. (irregular.animacy and "." .. irregular.animacy or "")), base.text)
end
base.gender, base.animacy = irregular.gender, irregular.animacy
end
base.in_phrase = word_count > 1 and #spec.alternant_or_word_specs > 1 or nil
number = number or base.number
if not base.indicators["+"] and base.gender then
noun = noun or base
end
end)
-- An adjectival word (`+`) agrees with the noun of the phrase, taking whatever gender, animacy and number it
-- doesn't give itself.
M.inflection_utilities.map_word_specs(spec, function(base)
if base.indicators["+"] and noun then
base.gender = base.gender or noun.gender
if base.gender == noun.gender then
base.animacy = base.animacy or noun.animacy
end
base.number = base.number or noun.number
end
if base.indicators["+"] and not base.gender then
error(("The adjectival word '%s' needs a gender, or a noun in the phrase"):format(base.lemma), 0)
end
end)
local slot_list = {}
for _, entry in ipairs(M.data.noun_slots) do
table.insert(slot_list, {entry.slot, entry.slot})
end
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_word,
})
local first
M.inflection_utilities.map_word_specs(spec, function(base)
first = first or base
end)
spec.lang = lang
spec.data = data
spec.numbers = number == "sg" and {s = true} or number == "pl" and {p = true} or {s = true, p = true}
if first.indicators.du then
spec.numbers.d = true
end
-- A collective numeral has only the plural.
if first.indicators.num then
spec.numbers = {p = true}
end
if first.pronoun then
spec.numbers = {}
for _, number_code in ipairs(first.pronoun.numbers) do
spec.numbers[number_code] = true
end
spec.numberless = first.pronoun.numberless
end
spec.categories = {}
-- Only a table of the standard language is categorized; for the lects, the labels of the entry do that.
if not first.attested and not first.indicators.lect then
local function add(name, ...)
table.insert(spec.categories, lang:getCanonicalName() .. " " .. data.categories[name]:format(...))
end
if number == "sg" then
add("singularia_tantum")
elseif number == "pl" then
add("pluralia_tantum")
end
if word_count == 1 then
local indicators = first.indicators
if indicators.irreg then
add("irregular")
elseif indicators.indecl then
add("indeclinable")
elseif indicators["+"] then
add("adjectival")
elseif first.rules and first.rules.used then
local final = final_consonant(data, first.rules.stem)
local stem_type = data.stem_types.velar[final] and "velar" or data.stem_types.soft[final] and "soft"
or "hard"
local gender = data.category_genders[first.gender]
if type(gender) == "table" then
gender = gender[first.animacy]
end
-- A plurale tantum has no gender to tell apart, except for a personal one.
if gender and (number ~= "pl" or first.animacy == "pr") then
add("stem", stem_type, gender)
end
local reducible = false
for part in pairs(first.rules.used) do
reducible = reducible or is_mobile(part)
end
if reducible then
add("reducible")
end
local used = first.rules.used
if used.shortened or used.lengthened then
add("quantitative")
end
end
end
end
-- An attested table says what it attests in its title. Its head is the nominative given, or the reconstructed one
-- starred.
spec.attested = first.attested
local head
if first.attested then
local nominative = spec.forms[number == "pl" and "nom_p" or "nom_s"]
head = first.indicators.recon and "*" .. first.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil
end
spec.lect = first.indicators.lect
if first.indicators.lect then
-- A paradigm's table is headed by the lemma, and an attested one by its nominative.
spec.kind_title = {data.lect_titles[first.indicators.lect], first.attested and head or nil}
elseif first.indicators.dialectal then
spec.kind_title = {data.lect_titles.dialectal, head}
elseif data.attested then
spec.kind_title = {"Biến cách của ", head}
end
spec.title = args.title
spec.nocat = args.nocat
spec.lemmas = {pagename}
return spec
end
-- Return the kind of declension of an adjective, for its title and category: `irregular`, or the kind of the first
-- entry in the data's `adjective_kinds` that its lemma matches (hard ''-y'', velar ''-ki'' and ''-gi'', or soft).
local function adjective_kind(base)
if base.indicators.irreg then
return "irregular"
end
local word = base.indicators.decllemma or base.lemma
for _, kind in ipairs(base.data.adjective_kinds) do
if mw.ustring.find(word, kind[1]) then
return kind[2]
end
end
end
--[==[
Decline an adjective call without a frame. `args` are the template's arguments (`1` is the spec, along with `title` and
`nocat`), `pagename` is the page the call is on and `lang_code` is the language code (`pl`). Return the alternant
multiword spec from [[Module:inflection utilities]], with the fields `forms`, `layout` (`regular`, `plonly`, `dwa` or
`dual`), `kinds` (the declension kinds of its words), `pos` (the part of speech of the table, from `pos:` on one of its
words), `categories`, `title` and `nocat`.
]==]
function export.decline_adjective(args, pagename, lang_code)
local data, lang = language_of(lang_code, "adjective")
local parse_props = {
parse_indicator_spec = function(angle_bracket_spec)
return Spec.parse(angle_bracket_spec, "adjective", data)
end,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local spec = M.inflection_utilities.parse_inflected_text(args[1] or pagename, parse_props)
M.inflection_utilities.map_word_specs(spec, function(base)
if base.lemma == "" then
base.lemma = pagename
end
base.lemma = M.links.remove_links(base.lemma)
-- The part of speech belongs to the whole table, so only one word may give it.
local pos = base.indicators.pos
if pos then
if not data.parts_of_speech[pos] then
local names = {}
for name in pairs(data.parts_of_speech) do
table.insert(names, name)
end
table.sort(names)
spec_error(("Unrecognized part of speech '%s'; the parts of speech are %s"):format(pos,
table.concat(names, ", ")), base.text)
elseif spec.pos then
spec_error("The part of speech ('pos:') is given on more than one word", base.text)
end
spec.pos = pos
end
resolve_table(base)
end)
local slot_list = {}
for slot in pairs(ADJECTIVE_ACCEL) do
table.insert(slot_list, {slot, slot})
end
table.sort(slot_list, function(a, b) return a[1] < b[1] end)
M.inflection_utilities.inflect_multiword_or_alternant_multiword_spec(spec, {
slot_list = slot_list,
inflect_word_spec = decline_adjective_word,
})
spec.pos = spec.pos or "adjective"
local plural_pos = data.parts_of_speech[spec.pos]
spec.layout, spec.kinds, spec.categories = "regular", {}, {}
local seen = {}
M.inflection_utilities.map_word_specs(spec, function(base)
-- A lect's table names its lect and isn't categorized, and neither is a numeral's. An attested table is headed
-- by the masculine nominative given, or the reconstructed lemma starred.
if base.attested then
local nominative = spec.forms.nom_m
spec.attested = true
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect or "dialectal"], base.indicators.recon and "*" .. base.indicators.recon
or nominative and nominative[1] and M.links.remove_links(nominative[1].form) or nil}
spec.layout = base.layout or base.indicators.plonly and "plonly" or spec.layout
return
elseif base.indicators.lect then
spec.lect = base.indicators.lect
spec.kind_title = {data.lect_titles[spec.lect]}
return
elseif base.indicators.num then
spec.layout = base.layout
return
end
local function add(name, ...)
table.insert(spec.categories, lang:getCanonicalName() .. " " .. data.categories[name]:format(...))
end
local kind = adjective_kind(base)
if not seen[kind] then
seen[kind] = true
table.insert(spec.kinds, kind)
add("adjective_kind", kind, plural_pos)
end
if base.overrides.short then
add("short_forms", plural_pos)
end
if base.indicators.decllemma then
add("irregular_stem", plural_pos)
end
if base.layout or base.indicators.plonly then
spec.layout = base.layout or "plonly"
end
end)
spec.title = args.title
spec.nocat = args.nocat
spec.lang = lang
spec.lemmas = {pagename}
return spec
end
-- Process the arguments of a call of the template of `entry` (`noun` or `adjective`). On the template's own page, a call
-- with no arguments declines the language's example (`examples` in [[Module:zlw-lch-decl/data]]) instead of the page
-- name.
local function process_args(frame, entry)
local language = M.data.languages[frame.args.lang]
return M.parameters.process(frame:getParent().args, {
[1] = {template_default = language and language.examples[entry]},
title = {},
nocat = {type = "boolean"},
json = {type = "boolean"},
pagename = {},
})
end
-- Run the template entry point `entry` (`noun` or `adjective`) on the call of `frame`: decline it with `decline`
-- (`export.decline_noun` or `export.decline_adjective`) and return its table, made by the `TableRenderer` method
-- `render`, or with json=1 the table's data, as `json_data` gives it from the declined spec.
local function run_entry(frame, entry, decline, render, json_data)
local args = process_args(frame, entry)
local spec = decline(args, args.pagename or M.headword_data.pagename, frame.args.lang)
if args.json then
return M.JSON.toJSON(json_data(spec))
end
local renderer = TableRenderer.new(spec)
return renderer[render](renderer)
end
--[==[
Entry point for {{tl|pl-ndecl}} and {{tl|zlw-opl-ndecl}}. Template-callable function to parse and decline a noun given
user-specified arguments and generate a displayable table of the declined forms, or the table's data as JSON with
{{para|json|1}}.
]==]
function export.noun(frame)
return run_entry(frame, "noun", export.decline_noun, "render", function(spec)
return {forms = spec.forms, numbers = spec.numbers, categories = spec.categories, title = spec.title}
end)
end
--[==[
Entry point for {{tl|pl-adecl}}. Template-callable function to parse and decline an adjective given user-specified
arguments and generate a displayable table of the declined forms, or the table's data as JSON with {{para|json|1}}.
]==]
function export.adjective(frame)
return run_entry(frame, "adjective", export.decline_adjective, "renderAdjective", function(spec)
return {forms = spec.forms, layout = spec.layout, kinds = spec.kinds, categories = spec.categories,
title = spec.title}
end)
end
return export
6ftd16cj7xzbyxuvq4vy4l0t4bi06up
Mô đun:zlw-lch-decl/data
828
421109
2572860
2026-10-23T01:55:45Z
Hiyuune
50834
Trang mới: “--[==[ Data shared by all the languages of [[Module:zlw-lch-decl]]: the cases, numbers, genders and animacies, and the slots of each kind of table. Each language's own data (its rules, alternations, lexicons and so on) is in its own module: [[Module:zlw-lch-decl/data/pl]] and [[Module:zlw-lch-decl/data/zlw-opl]]. A "slot" is one cell of a table: a case and a number for a noun (e.g. `gen_p`), or a case and a gender column for an adjective (e.g. `gen_mn`). Each slot has an…”
2572860
Scribunto
text/plain
--[==[
Data shared by all the languages of [[Module:zlw-lch-decl]]: the cases, numbers, genders and animacies, and the slots of
each kind of table. Each language's own data (its rules, alternations, lexicons and so on)
is in its own module: [[Module:zlw-lch-decl/data/pl]] and [[Module:zlw-lch-decl/data/zlw-opl]].
A "slot" is one cell of a table: a case and a number for a noun (e.g. `gen_p`), or a case and a gender column for an
adjective (e.g. `gen_mn`). Each slot has an accelerator tag (using the codes in [[Module:form of/data]]), so that a red
link in a cell can create the entry for the form.
]==]
local data = {}
-- The languages that have declension tables, by code. The code also names the language's data module
-- (`Module:zlw-lch-decl/data/CODE`), and each entry point the language uses (`noun`, `adjective`) gives the template
-- that invokes it, for the error messages. `examples` gives, for each entry point, the call that its template shows on
-- its own page when called with no arguments.
data.languages = {
["pl"] = {
noun = "pl-ndecl",
adjective = "pl-adecl",
examples = { noun = "kobieta<f>", adjective = "biały<>" },
},
["zlw-opl"] = {
noun = "zlw-opl-ndecl",
examples = { noun = "ptak<nom:ptak.nompl:ptacy.genpl:ptaków>" },
},
}
-- The cases in table order. `name` is the row header; the tooltip over it comes from the language (`case_titles` in its
-- data).
data.cases = {
{ code = "nom", name = "danh cách", accel = "nom" },
{ code = "gen", name = "sinh cách", accel = "gen" },
{ code = "dat", name = "dữ cách", accel = "dat" },
{ code = "acc", name = "đối cách", accel = "acc" },
{ code = "ins", name = "cách công cụ", accel = "ins" },
{ code = "loc", name = "định vị cách", accel = "loc" },
{ code = "voc", name = "hô cách", accel = "voc" },
}
-- The case codes, used to check the case of an override.
data.case_codes = {}
for _, case in ipairs(data.cases) do
data.case_codes[case.code] = true
end
-- The numbers in column order. Only an attested table has the dual (`du`), i.e. an Old Polish table or a Middle Polish
-- or dialectal table of Polish.
data.numbers = {
{ code = "s", name = "số ít", accel = "s" },
{ code = "d", name = "số đôi", accel = "d" },
{ code = "p", name = "số nhiều", accel = "p" },
}
data.genders = {
m = { name = "giống đực" },
f = { name = "giống cái" },
n = { name = "giống trung" },
}
-- The noun slots, ordered by case first, as the cells are shown, so that the footnotes are numbered in reading order.
data.noun_slots = {}
for _, case in ipairs(data.cases) do
for _, number in ipairs(data.numbers) do
table.insert(data.noun_slots, {slot = case.code .. "_" .. number.code, case = case.code, number = number.code})
end
end
return data
llknwig4xm1aiz41xyjaquzqgidtu4v
Mô đun:zlw-lch-decl/data/pl
828
421110
2572861
2026-10-23T02:02:02Z
Hiyuune
50834
Trang mới: “--[==[ Polish data for [[Module:zlw-lch-decl]]: the declension rules, the stem alternations they use, the irregular words, the footnotes, and the indicators of {{tl|pl-ndecl}} and {{tl|pl-adecl}}. TERMINOLOGY: * "stem" = The lemma minus its nominative ending, e.g. ''kobiet-'' from ''kobieta'' and ''okn-'' from ''okno''. A masculine noun ending in a consonant is its own stem (''pies''). * "group" = The nouns that share one set of rules, i.e. those with the same gender…”
2572861
Scribunto
text/plain
--[==[
Polish data for [[Module:zlw-lch-decl]]: the declension rules, the stem alternations they use, the irregular words,
the footnotes, and the indicators of {{tl|pl-ndecl}} and {{tl|pl-adecl}}.
TERMINOLOGY:
* "stem" = The lemma minus its nominative ending, e.g. ''kobiet-'' from ''kobieta'' and ''okn-'' from ''okno''. A
masculine noun ending in a consonant is its own stem (''pies'').
* "group" = The nouns that share one set of rules, i.e. those with the same gender (`m-pr` masculine personal,
`m-anml` masculine animal, `m-in` masculine inanimate, `f`, `n`), kind (common nouns, surnames, given names, place names and other names) and
nominative ending (`""` for a consonant, `a`, `o`, `e`, `ę`, `um`, `i`). Pluralia tantum have groups of their own,
by the ending of their nominative plural.
* "rule" = The forms of one slot for the nouns of a group whose stem ends in particular letters. The rule for the
longest such ending applies, and `""` holds the group's default. A form is an ending added either to the stem or to
the stem changed by an alternation (e.g. with `stem = "palatal"`, ''kobiet-'' becomes ''kobieci-'' before ''-e'').
* "copy" = A slot whose forms are always those of another slot in its group, e.g. the accusative singular of a
personal noun is its genitive.
]==]
local data = {}
------------------------------------------------------------------------------------------------------------------------
-- Alternations --
------------------------------------------------------------------------------------------------------------------------
-- The vowels, used by the rules that look for the last syllable of a stem.
data.vowels = "aąeęioóuy"
--[==[
The alternations a rule can ask for (`stem = "..."`). Several are joined with "+", in this order:
* `reduced`: drop the mobile ''e'' of the stem's last syllable (''pies'' → ''ps-'', ''sweter'' → ''swetr-'').
* `inserted_e`, `inserted_ie`: put in ''e'' or ''ie'' before the last consonant (''matk-'' → ''matek'', ''okn-'' →
''okien'').
* `shortened`: change ''ó'' to ''o'' and ''ą'' to ''ę'' in the last syllable (''stół'' → ''stoł-'', ''ząb'' →
''zęb-'').
* `lengthened`: change ''o'' to ''ó'' and ''ę'' to ''ą'' in the last syllable (''drog-'' → ''dróg'', ''ręk-'' →
''rąk'').
* `fronted`: change ''o'' or ''a'' to ''e'' in the last syllable (''uczony'' → ''uczeni'', ''sąsiad'' → ''sąsiedzi'').
* `soft`, `palatal`, `virile`: change the last consonant (or two) using one of the tables below.
]==]
-- How `shortened` (''stół'' → ''stołu''), `lengthened` (''droga'' → ''dróg'') and `fronted` (''uczony'' → ''uczeni'',
-- ''sąsiad'' → ''sąsiedzi'') change the vowel of a stem's last syllable.
data.shorten = { ["ó"] = "o", ["ą"] = "ę" }
data.lengthen = { ["o"] = "ó", ["ę"] = "ą" }
data.front = { ["o"] = "e", ["a"] = "e" }
-- How a soft consonant at the end of a stem is written before a vowel, e.g. ''koń'' → ''konia''.
data.soft = { ["dź"] = "dzi", ["ć"] = "ci", ["ń"] = "ni", ["ś"] = "si", ["ź"] = "zi" }
-- The reverse: how a stem's soft consonant spelled with ''i'' is written at the end of a word with no ending, e.g.
-- ''danie'' → ''dań''. The module also uses `soft` to respell a final soft consonant before a vowel, as Polish
-- spelling always does (''niedźwiedź'' + ''-a'' → ''niedźwiedzia''), so a rule's ending doesn't need `soft` for that.
data.final_soft = { ["dzi"] = "dź", ["ci"] = "ć", ["ni"] = "ń", ["si"] = "ś", ["zi"] = "ź" }
-- The consonants that stay soft when a mobile ''ie'' before them drops, e.g. ''goniec'' → ''gońca'', ''wrzesień'' →
-- ''września''. Before the other consonants, the ''i'' only marked their softness and goes with it (''pies'' →
-- ''psa'', ''łokieć'' → ''łokcia'').
data.reduced_soft = { n = "ń", s = "ś", z = "ź", c = "ć", dz = "dź" }
-- The first palatalization, before ''-e'' (in the locative singular and the feminine dative singular).
data.palatal = {
-- After ''c'', ''r'' and ''s'', the ''z'' of ''-zn-'' and ''-zł-'' is part of a digraph and doesn't soften
-- (''logiczny'' → ''logiczni'', ''Leszno'' → ''Lesznie'', ''zeszły'' → ''zeszli'', but ''żelazny'' → ''żelaźni'').
["czn"] = "czni", ["rzn"] = "rzni", ["szn"] = "szni", ["czł"] = "czl", ["rzł"] = "rzl", ["szł"] = "szl",
["st"] = "ści", ["zd"] = "ździ", ["sł"] = "śl", ["zł"] = "źl", ["sn"] = "śni", ["zn"] = "źni", ["sm"] = "śmi",
["zm"] = "źmi", ["ch"] = "sz", ["p"] = "pi", ["b"] = "bi", ["f"] = "fi", ["w"] = "wi", ["m"] = "mi", ["n"] = "ni",
["s"] = "si", ["z"] = "zi", ["t"] = "ci", ["d"] = "dzi", ["r"] = "rz", ["ł"] = "l", ["k"] = "c", ["g"] = "dz",
["h"] = "ż",
}
-- The tooltip over the row header of each case, giving its Polish name and questions.
data.case_titles = {
nom = "mianownik (kto? co?)", gen = "dopełniacz (kogo? czego?)", dat = "celownik (komu? czemu?)",
acc = "biernik (kogo? co?)", ins = "narzędnik (kim? czym?)", loc = "miejscownik (o kim? o czym?)", voc = "wołacz (o!)",
}
-- The nominative endings split off a lemma to get its stem, by gender (and `plural` for a plurale tantum), tried in
-- order. For example, ''kobieta'' is ''kobiet-'' plus ''-a'', and a masculine in ''-y'' or ''-i'' is an adjectival noun
-- (''Kowalski''). A lemma with none of them is its own stem (''pies'').
data.nominative_endings = {
m = { "a", "o", "y", "i" },
f = { "a", "i" },
n = { "um", "o", "e", "ę" },
plural = { "i", "y", "e", "a" },
}
-- The mobile vowels that `reduced` drops, tried in order: ''ie'' after a consonant, which stays soft according to
-- `soften` (''goniec'' → ''gońc-''), and ''e'' (''pies'' → ''ps-'').
data.mobile_vowels = {
{ "ie", after_consonant = true, soften = "reduced_soft" },
{ "e" },
}
-- The mobile vowel that `*` puts into a bare form: ''ie'' after the letters in `after` (''okno'' → ''okien'', ''igła''
-- → ''igieł''), and otherwise `default` (''matka'' → ''matek'').
data.inserted_vowel = { default = "e", after = { k = "ie", g = "ie" } }
-- The vowel used to spell a soft consonant before another vowel (''koń'' + ''-a'' → ''konia''). An ending that starts
-- with the same vowel merges with it (''goleń'' + ''-i'' → ''goleni'').
data.soft_vowel = "i"
-- The digraphs a stem can end in, which count as one consonant (for the stem type in the categories, and for Standard
-- Kurpie).
data.digraphs = { ch = true, cz = true, dz = true, ["dź"] = true, ["dż"] = true, rz = true, sz = true }
-- The softening in the masculine personal nominative plural (''student'' → ''studenci'', ''Polak'' → ''Polacy'').
data.virile = {
["st"] = "ści", ["ch"] = "s", ["t"] = "c", ["d"] = "dz", ["r"] = "rz", ["k"] = "c", ["g"] = "dz", ["ł"] = "l",
["sz"] = "s", ["s"] = "s", ["z"] = "z", ["n"] = "n", ["p"] = "p", ["b"] = "b", ["m"] = "m", ["w"] = "w",
["f"] = "f",
}
------------------------------------------------------------------------------------------------------------------------
-- Notes --
------------------------------------------------------------------------------------------------------------------------
-- The footnotes a rule or an override can give a form, by key: `note = "dated"` in a rule, or `[dated]` in a spec.
data.notes = {
archaic = "cổ xưa",
colloquial = "thông tục",
dated = "lỗi thời",
deprecative = "từ miệt thị",
dialectal = "phương ngữ",
humorous = "từ hài hước",
literary = "ngôn ngữ văn chương",
obsolete = "không còn dùng",
pejorative = "nghĩa xấu",
proscribed = "proscribed",
rare = "hiếm",
regional = "từ địa phương",
vulgar = "thô tục",
-- Notes for the forms of a pronoun that are only clitics (''go'', ''mi'') or only follow a preposition (''niego'').
unstressed = "không nhấn trọng âm",
after_preposition = "sau giới từ",
}
------------------------------------------------------------------------------------------------------------------------
-- Indicators --
------------------------------------------------------------------------------------------------------------------------
--[==[
The indicators of each template, by name. Indicators with the same `group` exclude each other, and the group names
what they set (read with `Spec:group`). `sets` is the value the indicator gives its group if that isn't its own name,
and `value` means it takes a value (e.g. `decllemma:dń`).
]==]
data.indicators = {
noun = {
m = { group = "gender" }, f = { group = "gender" }, n = { group = "gender" },
pr = { group = "animacy" }, anml = { group = "animacy" }, inan = { group = "animacy" },
sg = { group = "number" }, pl = { group = "number" },
["*"] = { group = "reducible" }, ["-*"] = { group = "reducible" },
["#"] = { group = "quantity" }, ["-#"] = { group = "quantity" },
surname = { group = "kind" }, given = { group = "kind" }, place = { group = "kind" },
proper = { group = "kind" },
irreg = { group = "type" }, indecl = { group = "type" }, ["!"] = { group = "type" }, ["+"] = { group = "type" },
pron = { group = "type" }, num = { group = "type" },
decllemma = { value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" },
recon = { value = "word" }, du = {},
},
adjective = {
irreg = {}, plonly = {}, archdat = {},
decllemma = { value = "word" },
lect = { group = "table", value = "code" }, dialectal = { group = "table" }, num = {},
recon = { value = "word" }, du = {},
pos = { value = "part of speech" },
},
}
-- The parts of speech an adjective table can be categorized under (given with `pos:` on one of its words, with
-- `adjective` as the default), along with the plural its categories use ("Polish hard pronouns").
data.parts_of_speech = {
adjective = "tính từ",
pronoun = "đại từ",
determiner = "từ hạn định",
numeral = "số từ",
suffix = "hậu tố",
}
------------------------------------------------------------------------------------------------------------------------
-- Lects --
------------------------------------------------------------------------------------------------------------------------
--[==[
The lects that have a table of their own (`lect:CODE`), by their code in [[Module:zlw-lch-IPA/data/pl]]. An
"attested" table lists the forms given and nothing else (`respelling` gives the link target of each form), and a
"paradigm" generates the forms from the `rules` named. The forms of any other lect go in the `dialectal` table, each
tagged with its lect. The names of the lects are read from [[Module:zlw-lch-IPA/data/pl]].
]==]
data.lect_tables = {
-- The Middle Polish forms link to their modern spelling, using `middle_polish_respelling`.
mpl = { table = "attested", respelling = "middle_polish_respelling" },
-- The Standard Kurpie forms are generated from `kurpie`.
skur = { table = "paradigm", rules = "kurpie" },
}
-- The data module of the lects, with their codes, names and aliases.
data.lect_module = "Module:zlw-lch-IPA/data/pl"
-- The start of the title of a lect's table (or of the dialectal table), before its head.
data.lect_titles = {
mpl = "Attested Middle Polish forms of ",
skur = "Standard Kurpian declension of ",
dialectal = "Attested dialectal forms of ",
}
------------------------------------------------------------------------------------------------------------------------
-- Categories --
------------------------------------------------------------------------------------------------------------------------
--[==[
The categories of a table of the standard language, each after the language's name ("Polish singularia tantum"). A
noun table of one word is categorized by its stem type and gender (`stem`, e.g. "velar feminine nouns"), by what its
forms show (`reducible` for a mobile ''e'', `quantitative` for ''ó''/''o'' or ''ą''/''ę''), and by its type
(`irregular`, `adjectival`, `indeclinable`). A phrase, a pronoun or a numeral is only categorized by its number. An
adjective table is categorized by its kind and part of speech (`adjective_kind`, e.g. "hard adjectives" or "soft
pronouns"), and by any short forms and irregular stem.
]==]
data.categories = {
singularia_tantum = "chỉ có số ít",
pluralia_tantum = "chỉ có số nhiều",
stem = "Danh từ %s %s",
reducible = "Danh từ với thân từ rút gọn",
quantitative = "nouns with quantitative vowel alternation",
irregular = "Danh từ bất quy tắc",
adjectival = "Danh tính từ",
indeclinable = "Danh từ không biến cách",
adjective_kind = "%s %s",
short_forms = "%s với dạng ngắn",
irregular_stem = "%s với thân từ bất quy tắc",
}
-- The gender of a noun as its stem category names it, by gender and (for masculines) animacy.
data.category_genders = {
m = { pr = "giống đực nhân xưng", anml = "giống đực hữu sinh", inan = "giống đực vô sinh" },
f = "giống cái",
n = "giống trung",
}
-- The stem type of a noun by the last consonant of its stem: velar, soft (including the functionally soft ''c'',
-- ''cz'', ''dz'', ''dż'', ''rz'', ''sz'' and ''ż''), or otherwise hard.
data.stem_types = {
velar = { k = true, g = true, ch = true },
soft = {
["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true, i = true,
c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true,
},
}
-- The Middle Polish letters that are respelled in the link target of a form (''ptåka'' links to [[ptaka]]). The form
-- itself is shown as written.
data.middle_polish_respelling = {
["å"] = "a", ["á"] = "a", ["é"] = "e",
["Å"] = "A", ["Á"] = "A", ["É"] = "E",
}
--[==[
The Standard Kurpie paradigm (`lect:skur`)
* `palatal`: what the last consonant (or cluster) of a stem becomes before an ending with `stem = "palatal"`. The
velars only change before the ''-e'' of a feminine; a masculine or neuter velar takes ''-u''.
* `hardened`: the consonants after which an ending's ''ï'' is written ''y'' (''ulicy'', ''nocy'').
* `soft` and `velar`: the last consonants that make a stem soft or velar, which decide the type of a lemma.
* `nouns[GENDER][TYPE]`: the ending of each slot, as in `noun_groups` (a string, or `{ ending, stem = "palatal" }`).
The type comes from the lemma; see `paradigm_type` in [[Module:zlw-lch-decl]].
* `copies[GENDER]` and `animate_copies[ANIMACY]`: the slots that take the forms of another slot.
* `adjective`: the endings of the single adjective declension, by slot of `adjective_slots`, added to the lemma minus
its last letter.
]==]
data.kurpie = {
palatal = {
b = "bź", p = "pś", f = "ś", w = "ź", m = "ń", s = "ś", z = "ź", t = "ć", d = "dź", n = "ń", r = "rz",
["ł"] = "l", ch = "s", k = "c", g = "dz", st = "ść", zd = "źdź",
},
hardened = { c = true, cz = true, dz = true, ["dż"] = true, rz = true, sz = true, ["ż"] = true },
-- The type of a lemma, by gender. Take the first entry whose ending the lemma has (`""` for none; with
-- `consonant_final`, only if it doesn't end in one of the `vowels`). The type is that of the first class in the
-- entry's `by_final` that has the last consonant of the stem, and otherwise `default`.
types = {
f = {
{ ending = "a", by_final = { { "soft", "soft" }, { "hardened", "soft" } }, default = "hard" },
{ ending = "", by_final = { { "soft", "soft_consonant" } }, default = "hard_consonant" },
},
n = {
{ ending = "um", default = "latinate" },
{ ending = "ę", default = "nasal" },
{ ending = "o", by_final = { { "velar", "velar" } }, default = "hard" },
{ ending = "e", by_final = { { "hardened", "hardened" } }, default = "soft" },
},
m = {
{ ending = "", consonant_final = true,
by_final = { { "velar", "velar" }, { "soft", "soft" }, { "hardened", "soft" } }, default = "hard" },
},
},
vowels = "aąeęioóuyåéëï",
-- A personal or animal velar has a type of its own, with the genitive and accusative in ''-a'' (''ptaka'').
animate_types = { velar = "animate_velar" },
-- How the first letter of an ending is written after a hardened consonant (''ï'' as ''y'').
hardened_spelling = { ["ï"] = "y" },
soft = { ["ć"] = true, ["ń"] = true, ["ś"] = true, ["ź"] = true, ["dź"] = true, j = true, l = true },
velar = { k = true, g = true, ch = true },
nouns = {
m = {
hard = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "y", gen_s = "u", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
-- A personal or animal velar takes the genitive (and accusative) in ''-a'' (''ptaka'').
animate_velar = {
nom_p = "y", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "e", gen_s = "å", gen_p = "ów", dat_s = "oźu", dat_p = "óm", acc_s = "a",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
},
f = {
hard = {
nom_p = "y", gen_s = "y", gen_p = "ów", dat_s = { "e", stem = "palatal" }, dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach", voc_s = "o",
},
soft = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "ë",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "o",
},
hard_consonant = {
nom_p = "e", gen_s = "y", gen_p = "ów", dat_s = "y", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "y", loc_p = "ach", voc_s = "y",
},
soft_consonant = {
nom_p = "e", gen_s = "ï", gen_p = "ów", dat_s = "ï", dat_p = "óm", acc_s = "",
ins_s = "ó", ins_p = "ańï", loc_s = "ï", loc_p = "ach", voc_s = "ï",
},
},
n = {
hard = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = { "e", stem = "palatal" }, loc_p = "ach",
},
velar = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
soft = {
nom_p = "a", gen_s = "å", gen_p = "ów", dat_s = "u", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
hardened = {
nom_p = "a", gen_s = "a", gen_p = "ów", dat_s = "oźu", dat_p = "óm",
ins_s = "ëm", ins_p = "ańï", loc_s = "u", loc_p = "ach",
},
nasal = {
nom_p = "óna", gen_s = "ëńå", gen_p = "ónów", dat_s = "ëńu", dat_p = "ónóm",
ins_s = "ëńëm", ins_p = "ónańï", loc_s = "ëńu", loc_p = "ónach",
},
latinate = {
nom_p = "a", gen_s = "um", gen_p = "ów", dat_s = "um", dat_p = "óm",
ins_s = "um", ins_p = "ańï", loc_s = "um", loc_p = "ach",
},
},
},
copies = {
m = { voc_s = "loc_s", voc_p = "nom_p" },
f = { acc_p = "nom_p", voc_p = "nom_p" },
n = { acc_s = "nom_s", voc_s = "nom_s", acc_p = "nom_p", voc_p = "nom_p" },
},
animate_copies = {
pr = { acc_p = "gen_p" },
anml = { acc_p = "nom_p" },
inan = { acc_s = "nom_s", acc_p = "nom_p" },
},
-- The other slots are shared as in the standard tables (e.g. the dative and locative feminine come from the
-- genitive), and the plural has one nominative for both genders.
adjective = {
nom_n = "e", nom_f = "å", nom_mp_pers = "e", nom_p_not_mp_pers = "e",
gen_mn = "égo", gen_f = "éj", gen_p = "éch",
dat_mn = "ëmu", dat_p = "ëm",
acc_f = "ó",
ins_mn = "ëm", ins_p = "ëńï",
},
}
-- The rule gender of each gender and animacy of a call.
data.rule_gender = {
m = { pr = "m-pr", anml = "m-anml", inan = "m-in" },
f = "f",
n = "n",
}
------------------------------------------------------------------------------------------------------------------------
-- Lexicon --
------------------------------------------------------------------------------------------------------------------------
-- The slots of a noun in the order the lexicon lists them in.
data.slot_order = {
"nom_s", "gen_s", "dat_s", "acc_s", "ins_s", "loc_s", "voc_s",
"nom_p", "gen_p", "dat_p", "acc_p", "ins_p", "loc_p", "voc_p",
}
-- The irregular nouns of `<irreg>`, by lemma, with their gender and animacy and every form, in `slot_order`.
data.irregular_nouns = {
["brat"] = { gender = "m", animacy = "pr",
"brat", "brata", "bratu", "brata", "bratem", "bracie", "bracie",
"bracia", "braci", "braciom", "braci", "braćmi", "braciach", "bracia",
},
["dziecko"] = { gender = "n",
"dziecko", "dziecka", "dziecku", "dziecko", "dzieckiem", "dziecku", "dziecko",
"dzieci", "dzieci", "dzieciom", "dzieci", "dziećmi", "dzieciach", "dzieci",
},
["ksiądz"] = { gender = "m", animacy = "pr",
"ksiądz", "księdza", "księdzu", "księdza", "księdzem", "księdzu", "księże",
"księża", "księży", "księżom", "księży", "księżmi", "księżach", "księża",
},
["książę"] = { gender = "m", animacy = "pr",
"książę", "księcia", "księciu", "księcia", "księciem", "księciu", "książę",
"książęta", "książąt", "książętom", "książąt", "książętami", "książętach", "książęta",
},
["rok"] = { gender = "m", animacy = "inan",
"rok", "roku", "rokowi", "rok", "rokiem", "roku", "roku",
"lata", "lat", "latom", "lata", "latami", "latach", "lata",
},
["arcyksiążę"] = { gender = "m", animacy = "pr",
"arcyksiążę", "arcyksięcia", "arcyksięciu", "arcyksięcia", "arcyksięciem", "arcyksięciu", "arcyksiążę",
"arcyksiążęta", "arcyksiążąt", "arcyksiążętom", "arcyksiążąt", "arcyksiążętami", "arcyksiążętach",
"arcyksiążęta",
},
}
------------------------------------------------------------------------------------------------------------------------
-- Pronouns, numerals and noun rules --
------------------------------------------------------------------------------------------------------------------------
--[==[
The pronouns of `<pron>`, by lemma, with the numbers of the table (`numberless` for ''siebie'') and the forms of each
slot, each a string or `{ form, notes = { KEY... } }` with keys of `notes`. A pronoun made of one of these plus an
ending in `pronoun_suffixes` (e.g. ''cośkolwiek'') declines like the pronoun, with the ending after every form.
]==]
data.pronouns = {
["co"] = {
numbers = { "s" },
nom_s = { "co" },
gen_s = { "czego", { "co", notes = { "rare" } } },
dat_s = { "czemu" },
acc_s = { "co" },
ins_s = { "czym" },
loc_s = { "czym" },
},
["cokolwiek"] = {
numbers = { "s" },
nom_s = { "cokolwiek" },
gen_s = { "czegokolwiek", { "cokolwiek", notes = { "rare" } } },
dat_s = { "czemukolwiek" },
acc_s = { "cokolwiek" },
ins_s = { "czymkolwiek" },
loc_s = { "czymkolwiek" },
},
["coś"] = {
numbers = { "s" },
nom_s = { "coś" },
gen_s = { "czegoś", { "coś", notes = { "rare" } } },
dat_s = { "czemuś" },
acc_s = { "coś" },
ins_s = { "czymś" },
loc_s = { "czymś" },
},
["cóż"] = {
numbers = { "s" },
nom_s = { "cóż" },
gen_s = { "czegoż", "czegóż", { "cóż", notes = { "rare" } } },
dat_s = { "czemuż" },
acc_s = { "cóż" },
ins_s = { "czymże" },
loc_s = { "czymże" },
},
["ja"] = {
numbers = { "s" },
nom_s = { "ja" },
gen_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
dat_s = { "mnie", { "mi", notes = { "unstressed" } } },
acc_s = { "mnie", { "mię", notes = { "unstressed", "rare" } } },
ins_s = { "mną" },
loc_s = { "mnie" },
},
["kto"] = {
numbers = { "s" },
nom_s = { "kto" },
gen_s = { "kogo" },
dat_s = { "komu" },
acc_s = { "kogo" },
ins_s = { "kim" },
loc_s = { "kim" },
},
["ktokolwiek"] = {
numbers = { "s" },
nom_s = { "ktokolwiek" },
gen_s = { "kogokolwiek" },
dat_s = { "komukolwiek" },
acc_s = { "kogokolwiek" },
ins_s = { "kimkolwiek" },
loc_s = { "kimkolwiek" },
},
["ktoś"] = {
numbers = { "s" },
nom_s = { "ktoś" },
gen_s = { "kogoś" },
dat_s = { "komuś" },
acc_s = { "kogoś" },
ins_s = { "kimś" },
loc_s = { "kimś" },
},
["któż"] = {
numbers = { "s" },
nom_s = { "któż" },
gen_s = { "kogoż", "kogóż" },
dat_s = { "komuż" },
acc_s = { "kogoż", "kogóż" },
ins_s = { "kimże" },
loc_s = { "kimże" },
},
["my"] = {
numbers = { "p" },
nom_p = { "my" },
gen_p = { "nas" },
dat_p = { "nam" },
acc_p = { "nas" },
ins_p = { "nami" },
loc_p = { "nas" },
voc_p = { "my" },
},
["nic"] = {
numbers = { "s" },
nom_s = { "nic" },
gen_s = { "nic", "niczego" },
dat_s = { "niczemu" },
acc_s = { "nic" },
ins_s = { "niczym" },
loc_s = { "niczym" },
},
["nikt"] = {
numbers = { "s" },
nom_s = { "nikt" },
gen_s = { "nikogo" },
dat_s = { "nikomu" },
acc_s = { "nikogo" },
ins_s = { "nikim" },
loc_s = { "nikim" },
},
["on"] = {
numbers = { "s" },
nom_s = { "on" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["ona"] = {
numbers = { "s" },
nom_s = { "ona" },
gen_s = { "jej", { "niej", notes = { "after_preposition" } } },
dat_s = { "jej", { "niej", notes = { "after_preposition" } } },
acc_s = { "ją", { "nią", notes = { "after_preposition" } } },
ins_s = { "nią" },
loc_s = { "niej" },
},
["one"] = {
numbers = { "p" },
nom_p = { "one" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "je", { "nie", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["oni"] = {
numbers = { "p" },
nom_p = { "oni" },
gen_p = { "ich", { "nich", notes = { "after_preposition" } } },
dat_p = { "im", { "nim", notes = { "after_preposition" } } },
acc_p = { "ich", { "nich", notes = { "after_preposition" } } },
ins_p = { "nimi" },
loc_p = { "nich" },
},
["ono"] = {
numbers = { "s" },
nom_s = { "ono" },
gen_s = { "jego", { "go", notes = { "unstressed" } }, { "niego", notes = { "after_preposition" } } },
dat_s = { "jemu", { "mu", notes = { "unstressed" } }, { "niemu", notes = { "after_preposition" } } },
acc_s = { "je", { "nie", notes = { "after_preposition" } } },
ins_s = { "nim" },
loc_s = { "nim" },
},
["siebie"] = {
numbers = { "s" }, numberless = true,
gen_s = { "siebie", "się" },
dat_s = { "sobie", "se" },
acc_s = { "siebie", "się" },
ins_s = { "sobą" },
loc_s = { "sobie", "se" },
},
["ty"] = {
numbers = { "s" },
nom_s = { "ty" },
gen_s = { "ciebie", { "cię", notes = { "unstressed" } } },
dat_s = { "tobie", { "ci", notes = { "unstressed" } } },
acc_s = { "ciebie", { "cię", notes = { "unstressed" } } },
ins_s = { "tobą" },
loc_s = { "tobie" },
voc_s = { "ty", { "te", notes = { "proscribed", "colloquial" } } },
},
["wszystko"] = {
numbers = { "s" },
nom_s = { "wszystko" },
gen_s = { "wszystkiego" },
dat_s = { "wszystkiemu" },
acc_s = { "wszystko" },
ins_s = { "wszystkim" },
loc_s = { "wszystkim" },
},
["wy"] = {
numbers = { "p" },
nom_p = { "wy" },
gen_p = { "was" },
dat_p = { "wam" },
acc_p = { "was" },
ins_p = { "wami" },
loc_p = { "was" },
voc_p = { "wy" },
},
}
data.pronoun_suffixes = { "śkolwiek", "kolwiek", "ś" }
--[==[
The numerals of `<num>`, by the end of their lemma (the longest one a lemma ends in applies). `numeral_rules` has the
cardinals of {{tl|pl-adecl}} (''pięć'', ''trzy'', ''-naście'', ''-set''), with a virile and a non-virile column in the
slots of `adjective_slots`, and `collective_rules` has the collectives of {{tl|pl-ndecl}} (''pięcioro'', ''dwoje''), in
the plural slots of a noun. Each slot has the endings that follow the lemma minus its key, as in `noun_groups`, and the
comment on each rule names the numerals it was made from.
]==]
data.numeral_rules = {
["a"] = { -- kilka
nom_mp_pers = "u", nom_p_not_mp_pers = "a", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "a", ins_p = { "oma", "u" }, loc_p = "u",
},
["adziesiąt"] = { -- kilkadziesiąt
nom_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, nom_p_not_mp_pers = "adziesiąt", gen_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, dat_p = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_mp_pers = { "udziesięciu", { "udziesiąt", note = "dated" } }, acc_p_not_mp_pers = "adziesiąt", ins_p = { "udziesięcioma", "udziesięciu", { "udziesiąt", note = "dated" } }, loc_p = { "udziesięciu", { "udziesiąt", note = "dated" } },
},
["adzieścia"] = { -- dwadzieścia
nom_mp_pers = "udziestu", nom_p_not_mp_pers = "adzieścia", gen_p = "udziestu", dat_p = "udziestu", acc_mp_pers = "udziestu", acc_p_not_mp_pers = "adzieścia", ins_p = { "udziestoma", "udziestu" }, loc_p = "udziestu",
},
["akroć"] = { -- dwakroć
nom_mp_pers = "ukroć", nom_p_not_mp_pers = "akroć", gen_p = "ukroć", dat_p = "ukroć", acc_mp_pers = "ukroć", acc_p_not_mp_pers = "akroć", ins_p = { "ukroć", { "omakroć", note = "rare" } }, loc_p = "ukroć",
},
["anaście"] = { -- dwanaście, kilkanaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "anaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "anaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["aset"] = { -- kilkaset
nom_mp_pers = "uset", nom_p_not_mp_pers = "aset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "aset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["edziesiąt"] = { -- wieledziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "edziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "edziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ekolwiek"] = { -- ilekolwiek
nom_mp_pers = "ukolwiek", nom_p_not_mp_pers = "ekolwiek", gen_p = "ukolwiek", dat_p = "ukolwiek", acc_mp_pers = "ukolwiek", acc_p_not_mp_pers = "ekolwiek", ins_p = { "ukolwiek", { "omakolwiek", note = "rare" } }, loc_p = "ukolwiek",
},
["ele"] = { -- niewiele, wiele
nom_mp_pers = { "elu", { "ela", note = "dated" } }, nom_p_not_mp_pers = "ele", gen_p = { "elu", { "ela", note = "dated" } }, dat_p = { "elu", { "ela", note = "dated" } }, acc_mp_pers = { "elu", { "ela", note = "dated" } }, acc_p_not_mp_pers = "ele", ins_p = { "eloma", "elu", { "ela", note = "dated" }, { "elą", note = "dated" } }, loc_p = { "elu", { "ela", note = "dated" } },
},
["em"] = { -- siedem
nom_mp_pers = "miu", nom_p_not_mp_pers = { "em", { "m", note = "dated" } }, gen_p = "miu", dat_p = "miu", acc_mp_pers = "miu", acc_p_not_mp_pers = { "em", { "m", note = "dated" } }, ins_p = { "mioma", "miu" }, loc_p = "miu",
},
["emkroć"] = { -- siedemkroć
nom_mp_pers = "miukroć", nom_p_not_mp_pers = "emkroć", gen_p = "miukroć", dat_p = "miukroć", acc_mp_pers = "miukroć", acc_p_not_mp_pers = "emkroć", ins_p = { "miukroć", { "miomakroć", note = "rare" } }, loc_p = "miukroć",
},
["emset"] = { -- siedemset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", { "mset", note = "dated" } }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["eset"] = { -- wieleset
nom_mp_pers = "uset", nom_p_not_mp_pers = "eset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "eset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["eś"] = { -- ileś
nom_mp_pers = "uś", nom_p_not_mp_pers = "eś", gen_p = "uś", dat_p = "uś", acc_mp_pers = "uś", acc_p_not_mp_pers = "eś", ins_p = { "uś", { "omaś", note = "rare" } }, loc_p = "uś",
},
["eż"] = { -- ileż, tyleż, wieleż
nom_mp_pers = "uż", nom_p_not_mp_pers = "eż", gen_p = "uż", dat_p = "uż", acc_mp_pers = "uż", acc_p_not_mp_pers = "eż", ins_p = { "uż", { "omaż", note = "rare" } }, loc_p = "uż",
},
["ieście"] = { -- dwieście
nom_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, nom_p_not_mp_pers = "ieście", gen_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, dat_p = "ustu", acc_mp_pers = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } }, acc_p_not_mp_pers = "ieście", ins_p = { "ustu", { "omaset", note = "rare" }, { "ustoma", note = "rare" } }, loc_p = { "ustu", { "uset", note = "dated" }, { "óchset", note = "dated" } },
},
["ile"] = { -- ile
nom_mp_pers = "ilu", nom_p_not_mp_pers = "ile", gen_p = "ilu", dat_p = "ilu", acc_mp_pers = "ilu", acc_p_not_mp_pers = "ile", ins_p = { "iloma", "ilu" }, loc_p = "ilu",
},
["mset"] = { -- siedmset
nom_mp_pers = "miuset", nom_p_not_mp_pers = { "emset", "mset" }, gen_p = "miuset", dat_p = "miuset", acc_mp_pers = "miuset", acc_p_not_mp_pers = { "emset", "mset" }, ins_p = { "miuset", { "miomaset", note = "rare" } }, loc_p = "miuset",
},
["o"] = { -- sto
nom_mp_pers = "u", nom_p_not_mp_pers = "o", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "o", ins_p = { "u", { "oma", note = "rare" } }, loc_p = "u",
},
["siem"] = { -- osiem
nom_mp_pers = "śmiu", nom_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, gen_p = "śmiu", dat_p = "śmiu", acc_mp_pers = "śmiu", acc_p_not_mp_pers = { "siem", { "śm", note = "dated" } }, ins_p = { "śmioma", "śmiu" }, loc_p = "śmiu",
},
["siemkroć"] = { -- osiemkroć
nom_mp_pers = "śmiukroć", nom_p_not_mp_pers = "siemkroć", gen_p = "śmiukroć", dat_p = "śmiukroć", acc_mp_pers = "śmiukroć", acc_p_not_mp_pers = "siemkroć", ins_p = { "śmiukroć", { "śmiomakroć", note = "rare" } }, loc_p = "śmiukroć",
},
["siemset"] = { -- osiemset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", { "śmset", note = "dated" } }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
["y"] = { -- cztery, trzy
nom_mp_pers = { "ech", "ej" }, nom_p_not_mp_pers = "y", gen_p = "ech", dat_p = "em", acc_mp_pers = "ech", acc_p_not_mp_pers = "y", ins_p = "ema", loc_p = "ech",
},
["ykroć"] = { -- trzykroć
nom_mp_pers = "echkroć", nom_p_not_mp_pers = "ykroć", gen_p = "echkroć", dat_p = "echkroć", acc_mp_pers = "echkroć", acc_p_not_mp_pers = "ykroć", ins_p = { "echkroć", { "emakroć", note = "rare" } }, loc_p = "echkroć",
},
["yle"] = { -- tyle
nom_mp_pers = { "ylu", { "yla", note = "dated" } }, nom_p_not_mp_pers = "yle", gen_p = { "ylu", { "yla", note = "dated" } }, dat_p = { "ylu", { "yla", note = "dated" } }, acc_mp_pers = { "ylu", { "yla", note = "dated" } }, acc_p_not_mp_pers = "yle", ins_p = { "yloma", "ylu", { "yla", note = "dated" }, { "ylą", note = "dated" } }, loc_p = { "ylu", { "yla", note = "dated" } },
},
["ysta"] = { -- czterysta, trzysta
nom_mp_pers = { "ystu", { "echset", note = "rare" } }, nom_p_not_mp_pers = "ysta", gen_p = { "ystu", { "echset", note = "rare" } }, dat_p = "ystu", acc_mp_pers = { "ystu", { "echset", note = "rare" } }, acc_p_not_mp_pers = "ysta", ins_p = { "ystu", { "ystoma", note = "rare" } }, loc_p = { "ystu", { "echset", note = "rare" } },
},
["ąt"] = { -- dziewięćdziesiąt, osiemdziesiąt, ośmdziesiąt, pięćdziesiąt, siedemdziesiąt, siedmdziesiąt, sześćdziesiąt
nom_mp_pers = "ęciu", nom_p_not_mp_pers = "ąt", gen_p = "ęciu", dat_p = "ęciu", acc_mp_pers = "ęciu", acc_p_not_mp_pers = "ąt", ins_p = { "ęcioma", "ęciu" }, loc_p = "ęciu",
},
["ć"] = { -- dziesięć, dziewięć, pięć, sześć
nom_mp_pers = "ciu", nom_p_not_mp_pers = "ć", gen_p = "ciu", dat_p = "ciu", acc_mp_pers = "ciu", acc_p_not_mp_pers = "ć", ins_p = { "cioma", "ciu" }, loc_p = "ciu",
},
["ćkroć"] = { -- pięćkroć
nom_mp_pers = "ciukroć", nom_p_not_mp_pers = "ćkroć", gen_p = "ciukroć", dat_p = "ciukroć", acc_mp_pers = "ciukroć", acc_p_not_mp_pers = "ćkroć", ins_p = { "ciukroć", { "ciomakroć", note = "rare" } }, loc_p = "ciukroć",
},
["ćset"] = { -- dziewięćset, pięćset, sześćset
nom_mp_pers = "ciuset", nom_p_not_mp_pers = "ćset", gen_p = "ciuset", dat_p = "ciuset", acc_mp_pers = "ciuset", acc_p_not_mp_pers = "ćset", ins_p = { "ciuset", { "ciomaset", note = "rare" } }, loc_p = "ciuset",
},
["ę"] = { -- parę
nom_mp_pers = "u", nom_p_not_mp_pers = "ę", gen_p = "u", dat_p = "u", acc_mp_pers = "u", acc_p_not_mp_pers = "ę", ins_p = { "oma", "u" }, loc_p = "u",
},
["ędziesiąt"] = { -- parędziesiąt
nom_mp_pers = "udziesięciu", nom_p_not_mp_pers = "ędziesiąt", gen_p = "udziesięciu", dat_p = "udziesięciu", acc_mp_pers = "udziesięciu", acc_p_not_mp_pers = "ędziesiąt", ins_p = { "udziesięciu", { "udziesięcioma", note = "rare" } }, loc_p = "udziesięciu",
},
["ęnaście"] = { -- paręnaście
nom_mp_pers = "unastu", nom_p_not_mp_pers = "ęnaście", gen_p = "unastu", dat_p = "unastu", acc_mp_pers = "unastu", acc_p_not_mp_pers = "ęnaście", ins_p = { "unastoma", "unastu" }, loc_p = "unastu",
},
["ęset"] = { -- paręset
nom_mp_pers = "uset", nom_p_not_mp_pers = "ęset", gen_p = "uset", dat_p = "uset", acc_mp_pers = "uset", acc_p_not_mp_pers = "ęset", ins_p = { "uset", { "omaset", note = "rare" } }, loc_p = "uset",
},
["ści"] = { -- czterdzieści, trzydzieści
nom_mp_pers = "stu", nom_p_not_mp_pers = "ści", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ści", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["ście"] = { -- czternaście, dziewiętnaście, jedenaście, naście, osiemnaście, ośmnaście, piętnaście, siedemnaście, siedmnaście, szesnaście, trzynaście
nom_mp_pers = "stu", nom_p_not_mp_pers = "ście", gen_p = "stu", dat_p = "stu", acc_mp_pers = "stu", acc_p_not_mp_pers = "ście", ins_p = { "stoma", "stu" }, loc_p = "stu",
},
["śmset"] = { -- ośmset
nom_mp_pers = "śmiuset", nom_p_not_mp_pers = { "siemset", "śmset" }, gen_p = "śmiuset", dat_p = "śmiuset", acc_mp_pers = "śmiuset", acc_p_not_mp_pers = { "siemset", "śmset" }, ins_p = { "śmiuset", { "śmiomaset", note = "rare" } }, loc_p = "śmiuset",
},
}
data.collective_rules = {
["e"] = { -- dwoje, oboje, obydwoje, obydwoje, troje
nom_p = "e", gen_p = "ga", dat_p = "gu", acc_p = "e", ins_p = "giem", loc_p = "gu", voc_p = "e",
},
["o"] = { -- czterdzieścioro, czternaścioro, czworo, dwadzieścioro, dwanaścioro, dziesięcioro, dziewiętnaścioro, dziewięcioro, dziewięćdziesięcioro, jedenaścioro, kilkoro, kilkadziesięcioro, kilkanaścioro, naścioro, ośmioro, osiemdziesięcioro, osiemnaścioro, ośmdziesięcioro, ośmnaścioro, piętnaścioro, pięcioro, pięćdziesięcioro, siedmioro, siedemdziesięcioro, siedemnaścioro, siedmdziesięcioro, siedmnaścioro, szesnaścioro, sześcioro, sześćdziesięcioro, trzydzieścioro, trzynaścioro
nom_p = "o", gen_p = "ga", dat_p = "gu", acc_p = "o", ins_p = "giem", loc_p = "gu", voc_p = "o",
},
}
--[==[
The noun groups, keyed `GENDER KIND NUMBER NOMINATIVE` (e.g. `m-pr common sg `, `f common sg a`, `n place pl y`):
* `copies`: the slots that take the forms of another slot (e.g. `acc_s = "gen_s"`).
* `rules`: the forms of each slot, by the ending of the stem (`""` is the default). A slot's forms are an ending (a
string) or a list of endings, and an ending given as a table can name a `stem` alternation and a `note`.
]==]
data.noun_groups = {
["f common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "soft" } },
["D"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["V"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["c"] = { gen_s = "y", nom_p = "e" },
["e"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["edź"] = { nom_p = { "", stem = "soft" } },
["g"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["j"] = { nom_p = "e" },
["k"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["l"] = { gen_s = "i", nom_p = "e" },
["n"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["nt"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["o"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["oć"] = { nom_p = "e" },
["r"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["rś"] = { nom_p = { "", stem = "soft" } },
["s"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["tać"] = { nom_p = { { "", stem = "soft" }, "e" } },
["u"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["y"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["z"] = { gen_s = "y", nom_p = "e" },
["é"] = { dat_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ódź"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "", stem = "shortened+soft" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "i", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ąż"] = { dat_p = { "om", stem = "shortened" }, gen_s = { "y", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "ą", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ęś"] = { ins_p = { "ami", "mi" }, nom_p = { "", stem = "soft" } },
["ń"] = { nom_p = "e" },
["ś"] = { nom_p = "e" },
["ź"] = { nom_p = "e" },
["ż"] = { gen_s = "y", nom_p = "e" },
},
},
["f common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "i", voc_s = "o" },
["acz"] = { gen_p = "" },
["ak"] = { gen_p = "" },
["all"] = { gen_p = { "", "i" } },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["arł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ast"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["bi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["bl"] = { gen_p = "i" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["bni"] = { gen_p = "" },
["bol"] = { gen_p = "i" },
["bow"] = { voc_s = "a" },
["c"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["ci"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "", voc_s = "u" },
["cn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["cni"] = { gen_p = "" },
["cow"] = { voc_s = "a" },
["cz"] = { dat_s = "y", gen_p = { "", "y" }, nom_p = "e" },
["czi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["czm"] = { dat_s = "ie" },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["dl"] = { gen_p = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dni"] = { gen_p = "" },
["dow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["dz"] = { dat_s = "y", nom_p = "e" },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["ebn"] = { voc_s = "a" },
["ecn"] = { voc_s = "a" },
["ek"] = { gen_p = "" },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["fi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["g"] = { gen_p = "" },
["gi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["gl"] = { gen_p = "i" },
["gog"] = { gen_p = "" },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["hi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["hni"] = { gen_p = "" },
["how"] = { voc_s = "a" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["i"] = { dat_s = "i", nom_p = "e" },
["ik"] = { gen_p = "" },
["ini"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iod"] = { gen_p = "" },
["ion"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["izd"] = { dat_s = { "e", stem = "palatal" } },
["izi"] = { voc_s = "u" },
["j"] = { dat_s = "i", nom_p = "e" },
["jni"] = { gen_p = "" },
["jog"] = { gen_p = "" },
["jom"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ki"] = { gen_p = { "i", { "j", note = "archaic" } } },
["kk"] = { gen_p = "" },
["kl"] = { gen_p = "i" },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_s = "i", gen_p = { "", "i" }, nom_p = "e" },
["li"] = { gen_p = { "i", { "j", note = "archaic" } } },
["ll"] = { gen_p = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["lsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["lsz"] = { gen_p = { "", "y" } },
["m"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["mi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["mij"] = { gen_p = "" },
["ml"] = { gen_p = "i" },
["mow"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "lengthened" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y" },
["msz"] = { gen_p = "y" },
["n"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["nan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ni"] = { dat_s = "", gen_s = "" },
["nni"] = { gen_p = "" },
["nod"] = { gen_p = "" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["odł"] = { gen_p = { "", stem = "inserted_e" } },
["og"] = { gen_p = { "", stem = "lengthened" } },
["ok"] = { gen_p = "" },
["omn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["osm"] = { dat_s = "ie" },
["otw"] = { gen_p = { "", stem = "inserted_e" } },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["oźn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["p"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["pi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["pl"] = { gen_p = "i" },
["pn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["pow"] = { voc_s = "a" },
["r"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["raż"] = { gen_p = "y" },
["rl"] = { gen_p = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rol"] = { gen_p = "i" },
["rz"] = { dat_s = "y", nom_p = "e" },
["rzn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["rąż"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["s"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["sc"] = { dat_s = "e", gen_p = { "", stem = "inserted_e" } },
["si"] = { dat_s = "", gen_p = { { "", note = "rare" }, { "", stem = "final_soft" } }, gen_s = "", voc_s = "u" },
["sl"] = { gen_p = "i" },
["sz"] = { dat_s = "y", nom_p = "e" },
["t"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["tel"] = { gen_p = "i" },
["tl"] = { gen_p = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tni"] = { gen_p = "" },
["tod"] = { gen_p = "" },
["tł"] = { gen_p = { "", stem = "inserted_e" } },
["udł"] = { gen_p = { "", stem = "inserted_e" } },
["uk"] = { gen_p = "" },
["uni"] = { gen_p = { { "", note = "rare" }, { "", stem = "final_soft" } }, voc_s = "u" },
["uzd"] = { dat_s = { "e", stem = "palatal" } },
["w"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["wl"] = { gen_p = "i" },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["wni"] = { gen_p = "" },
["wol"] = { gen_p = "i" },
["wsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["yk"] = { gen_p = "" },
["z"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["zd"] = { dat_s = { "e", stem = "fronted+palatal" } },
["zdr"] = { gen_p = { "", stem = "inserted_e" } },
["zi"] = { dat_s = "", gen_p = { "", { "", stem = "final_soft" } }, gen_s = "" },
["zm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["zni"] = { gen_p = "" },
["zon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["zz"] = { dat_s = "y", nom_p = "e" },
["ój"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąk"] = { gen_p = "" },
["ąt"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ęcz"] = { gen_p = "" },
["ęk"] = { gen_p = "" },
["ępi"] = { dat_s = "", gen_p = "", gen_s = "" },
["ł"] = { gen_p = "", gen_s = "y", nom_p = "y" },
["łbi"] = { dat_s = "", gen_p = "", gen_s = "" },
["ńsk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ści"] = { voc_s = { "o", "u" } },
["śni"] = { gen_p = "" },
["źni"] = { gen_p = "" },
["ż"] = { dat_s = "y", gen_p = "", gen_s = "y", nom_p = "e" },
["żi"] = { gen_p = { "i", { "j", note = "archaic" } } },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["żni"] = { gen_p = "" },
["żon"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f common sg i"] = {
copies = { acc_p = "nom_p", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = { "ę", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, depr_p = {}, gen_p = "i", gen_s = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "ą", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["an"] = { acc_s = { "ą", stem = "palatal" } },
["can"] = { acc_s = { "ę", stem = "palatal" } },
["on"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["san"] = { acc_s = { "ę", stem = "palatal" } },
["t"] = { acc_s = "i", dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f given sg "] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "", voc_s = "" },
},
},
["f given sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["aj"] = { voc_s = { "o", "u" } },
["ak"] = { gen_p = "" },
["bi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["ci"] = { gen_p = { "", { "", stem = "final_soft" } } },
["di"] = { dat_s = "i", gen_s = "i" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["fi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["i"] = { dat_s = "", gen_s = "", nom_p = "e", voc_s = "u" },
["ik"] = { gen_p = "" },
["j"] = { dat_s = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["ki"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = { "", "i" }, gen_s = "i", nom_p = "e", voc_s = { "o", "u" } },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["mi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["nc"] = { dat_s = "y", nom_p = "e" },
["ni"] = { gen_p = { { "", note = "rare" }, { "", stem = "final_soft" } } },
["nul"] = { gen_p = "", voc_s = "u" },
["pi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["ri"] = { dat_s = "i", gen_s = "i", voc_s = "o" },
["si"] = { gen_p = { { "", note = "rare" }, { "", stem = "final_soft" } } },
["sz"] = { dat_s = "y", nom_p = "e" },
["ti"] = { dat_s = "i", gen_s = "i", voc_s = "o" },
["wi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i", voc_s = "o" },
["wł"] = { gen_p = { "", stem = "inserted_e" } },
["yk"] = { gen_p = "" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["ż"] = { dat_s = "y", nom_p = "e" },
},
},
["f given sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["f place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = { "", stem = "soft" }, depr_p = {}, gen_p = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e" },
["D"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["L"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-e" } },
["e"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["eś"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "", stem = "reduced+soft" }, gen_p = { "", stem = "reduced+soft" }, gen_s = { "", stem = "reduced+soft" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "ą", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, nom_p = { { "", stem = "reduced+soft" }, { "e", stem = "reduced" } } },
["gać"] = { nom_p = { "", stem = "soft" } },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["o"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["ość"] = { nom_p = { "", stem = "soft" } },
["s"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["w"] = { dat_p = { "om", stem = "reduced+palatal" }, dat_s = { "", stem = "reduced+palatal" }, gen_p = { "", stem = "reduced+palatal" }, gen_s = { "", stem = "reduced+palatal" }, ins_p = { "ami", stem = "reduced+palatal" }, ins_s = { "ą", stem = "reduced+palatal" }, loc_p = { "ach", stem = "reduced+palatal" }, nom_p = { "e", stem = "reduced+palatal" } },
["z"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
["ż"] = { dat_s = "y", gen_p = "y", gen_s = "y" },
},
},
["f place sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ak"] = { gen_p = "" },
["ani"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ask"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["aw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["b"] = { nom_p = "y" },
["bn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["c"] = { dat_s = "y" },
["ck"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["cz"] = { gen_p = { "", "y" } },
["czn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["d"] = { nom_p = "y" },
["di"] = { dat_s = "i", gen_s = "i" },
["dn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["dw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["e"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["ek"] = { gen_p = "" },
["el"] = { gen_p = { "", "i" } },
["eni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["enn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ew"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ewn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["ez"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["eśn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["f"] = { nom_p = "y" },
["g"] = { gen_s = "i", nom_p = "i" },
["gi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["gol"] = { gen_p = { "", "i" } },
["h"] = { nom_p = "y" },
["i"] = { dat_s = "", gen_s = "" },
["ibi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["iel"] = { gen_p = "i" },
["ik"] = { gen_p = "" },
["ini"] = { gen_p = { "", { "", stem = "final_soft" } } },
["iw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["iz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { dat_s = "i", gen_s = "i" },
["k"] = { gen_p = { "", stem = "inserted_e" }, gen_s = "i", nom_p = "i" },
["kol"] = { gen_p = { "", "i" } },
["kw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["li"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["ln"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["lsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["lw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["lz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { nom_p = "y" },
["mbi"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["mż"] = { gen_p = "y" },
["n"] = { nom_p = "y" },
["ob"] = { gen_p = { "", stem = "lengthened" } },
["od"] = { gen_p = { "", stem = "lengthened" } },
["odz"] = { gen_p = "y" },
["og"] = { gen_p = { "", stem = "lengthened" } },
["omn"] = { acc_s = { "ą", "ę" }, dat_p = { "om", "ym" }, dat_s = { "ej", { "e", stem = "palatal" } }, gen_p = { "", "ych" }, gen_s = { "ej", "y" }, ins_p = { "ami", "ymi" }, loc_p = { "ach", "ych" }, nom_p = { "e", "y" }, voc_s = { "a", "o" } },
["oni"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, gen_s = "i" },
["opn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["oz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["p"] = { nom_p = "y" },
["pcz"] = { gen_p = "y" },
["prz"] = { gen_p = { "", "y" } },
["r"] = { nom_p = "y" },
["rcz"] = { gen_p = "" },
["ri"] = { dat_s = "i", gen_s = "i" },
["rni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["rw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rz"] = { gen_p = "y" },
["rł"] = { gen_p = { "", stem = "inserted_e" } },
["s"] = { nom_p = "y" },
["sal"] = { gen_p = { "", "i" } },
["sk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["sol"] = { gen_p = { "", "i" } },
["t"] = { nom_p = "y" },
["tcz"] = { gen_p = "y" },
["ti"] = { dat_s = "i", gen_s = "i" },
["tn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["tok"] = { gen_p = "" },
["u"] = { dat_s = "i", gen_p = "i", gen_s = { "i", "y" }, nom_p = "y" },
["udz"] = { gen_p = { "", "y" } },
["usk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uz"] = { dat_s = { "e", stem = "palatal" }, nom_p = "y" },
["w"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["wcz"] = { gen_p = "y" },
["yk"] = { gen_p = "" },
["yni"] = { gen_p = { "", { "", stem = "final_soft" } } },
["yst"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["z"] = { dat_s = "y" },
["zi"] = { gen_p = { "", { "", stem = "final_soft" } } },
["zw"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ąc"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", voc_s = "a" },
["ąck"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ąk"] = { gen_p = "" },
["ąsk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęcz"] = { gen_p = "" },
["ędz"] = { gen_p = { "", "y" } },
["ęk"] = { gen_p = "" },
["ł"] = { nom_p = "y" },
["źn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ż"] = { dat_s = "y" },
["żn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
},
},
["f place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = { "", stem = "palatal" }, depr_p = {}, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["r"] = { dat_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
},
},
["f proper sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["C"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-a" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["EP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["M"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["N"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OK"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-iem" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-i" }, voc_s = { "", "-u" } },
["OP"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["PR"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_s = { "", "-ze" } },
["S"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_s = { "", "-ie" } },
["Z"] = { loc_s = { "", "-ecie" }, voc_s = { "", "-ecie" } },
},
},
["f proper sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["at"] = { gen_s = "y" },
["c"] = { dat_s = "y", gen_s = "y", nom_p = "e" },
["d"] = { gen_s = "y" },
["e"] = { dat_s = "i", gen_p = "i", nom_p = "e" },
["g"] = { nom_p = "i" },
["h"] = { gen_s = "y" },
["i"] = { dat_s = "i", gen_p = { "i", { "j", note = "archaic" } }, nom_p = "e" },
["j"] = { nom_p = "e" },
["k"] = { gen_p = { "", stem = "inserted_e" }, nom_p = "i" },
["n"] = { gen_s = "y" },
["r"] = { gen_s = "y" },
["z"] = { gen_s = "y" },
},
},
["f surname sg "] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", depr_p = {}, gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
},
},
["f surname sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ą", dat_p = "im", dat_s = "iej", depr_p = {}, gen_p = "ich", gen_s = "iej", ins_p = "imi", ins_s = "ą", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["adł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ajn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ak"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["an"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["awn"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["azł"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["b"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["bk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["c"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["cz"] = { dat_s = "y", nom_p = "e" },
["czm"] = { dat_s = "ie" },
["d"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["dk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["dni"] = { acc_s = "ą", dat_p = "m", dat_s = "ej", gen_p = "ch", gen_s = "ej", ins_p = "mi", loc_p = "ch", voc_s = "a" },
["dz"] = { dat_s = "y", nom_p = "e" },
["dzk"] = { acc_s = "ą", dat_p = "im", dat_s = "iej", gen_p = "ich", gen_s = "iej", ins_p = "imi", loc_p = "ich", nom_p = "ie", voc_s = "a" },
["ek"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["en"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["esk"] = { dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i" },
["f"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["fk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["g"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["gł"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["h"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["hn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["i"] = { acc_s = "ę", dat_p = "om", dat_s = "", gen_p = "", gen_s = "", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["ian"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["ik"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["in"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["izn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["j"] = { acc_s = "ę", dat_p = "om", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["jew"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["jk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["jn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["kat"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["l"] = { acc_s = "ę", dat_p = "om", dat_s = "i", gen_p = { "", "i" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["lan"] = { acc_s = "ą", gen_s = "ej", nom_p = "e", voc_s = "a" },
["lk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["m"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["mk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["n"] = { dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e" },
["nk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["od"] = { gen_p = { "", stem = "lengthened" } },
["ok"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["on"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["osk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["osn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ow"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["own"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["p"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["pi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["pk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["r"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["rk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["rz"] = { nom_p = "e" },
["s"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", nom_p = "e" },
["t"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["tk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["uk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["un"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["urz"] = { dat_s = "y" },
["w"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["wan"] = { acc_s = "ą", dat_p = "ym", dat_s = "ej", gen_p = "ych", gen_s = "ej", ins_p = "ymi", loc_p = "ych", nom_p = "e", voc_s = "a" },
["wi"] = { dat_s = "i", gen_p = "i", gen_s = "i" },
["wk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["wn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_ie" }, gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["x"] = { acc_s = "ę", dat_p = "om", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["y"] = { acc_s = "ę", dat_p = "om", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["yk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["yn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["z"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["zk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ąk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ćk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ęk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ł"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["łk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["łn"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "y", voc_s = "o" },
["ńk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["śk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
["ż"] = { acc_s = "ę", dat_p = "om", dat_s = "y", gen_p = "", gen_s = "y", ins_p = "ami", loc_p = "ach", nom_p = "e", voc_s = "o" },
["żk"] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, gen_p = { "", stem = "inserted_e" }, gen_s = "i", ins_p = "ami", loc_p = "ach", nom_p = "i", voc_s = "o" },
},
},
["f surname sg i"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "i", depr_p = {}, gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", nom_p = "i" },
["m"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["n"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["s"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["z"] = { dat_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-pr common pl "] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = {}, dat_s = {}, depr_p = {}, gen_p = {}, gen_s = {}, ins_p = { "m", stem = "fronted" }, ins_s = {}, loc_p = {}, loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl e"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "dziadków", stem = "irregular" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["m-pr common pl i"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "zym", dat_s = {}, depr_p = {}, gen_p = "zych", gen_s = {}, ins_p = "zymi", ins_s = {}, loc_p = "zych", loc_s = {}, nom_s = {}, voc_s = {} },
["o"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", loc_p = "ich" },
},
},
["m-pr common pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "ów", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["m-pr common sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = { "y", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["ad"] = { nom_p = { "", stem = "palatal" } },
["al"] = { gen_p = { "i", "ów" } },
["an"] = { nom_p = { "", stem = "palatal" } },
["ard"] = { nom_p = { "", stem = "palatal" } },
["ast"] = { nom_p = "owie" },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["aść"] = { dat_s = { "", stem = "soft" }, gen_s = { "", stem = "soft" }, ins_s = "ą", loc_s = { "", stem = "soft" }, nom_p = { "e", "owie" }, voc_s = { "", stem = "soft" } },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["bp"] = { nom_p = { "", stem = "palatal" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "y", stem = "reduced" }, voc_s = { { "u", stem = "reduced" }, { "ze", stem = "reduced" } } },
["cel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["cik"] = { nom_p = "owie" },
["cz"] = { gen_p = { "y", "ów" } },
["dan"] = { nom_p = "owie" },
["dr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dur"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["dyw"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["en"] = { nom_p = { "", stem = "palatal" } },
["erk"] = { nom_p = "owie" },
["eus"] = { nom_p = "owie" },
["eń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["eś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["eż"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["f"] = { nom_p = "owie" },
["fel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { { "i", stem = "reduced" }, { "ów", stem = "reduced" } }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["fil"] = { gen_p = { { "i", note = "rare" }, "ów" } },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u", nom_p = { { "y", stem = "palatal" }, "owie" }, voc_s = "u" },
["ger"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["h"] = { loc_s = "u", nom_p = "owie", voc_s = "u" },
["hot"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ib"] = { nom_p = "owie" },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["icz"] = { gen_p = "ów" },
["id"] = { nom_p = { "", stem = "palatal" } },
["ieć"] = { loc_s = "u", nom_p = "e", voc_s = "u" },
["iks"] = { nom_p = "owie" },
["il"] = { gen_p = { "i", "ów" } },
["ior"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ir"] = { nom_p = "owie" },
["iz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["iór"] = { nom_p = "owie" },
["j"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["jas"] = { nom_p = "owie" },
["jeb"] = { nom_p = "owie" },
["jn"] = { nom_p = { "", stem = "palatal" } },
["jor"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["k"] = { depr_p = "i", ins_s = "iem", loc_s = "u", voc_s = "u" },
["kon"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["kup"] = { nom_p = { "", stem = "palatal" } },
["l"] = { depr_p = "e", gen_p = "i", loc_s = "u", nom_p = "e", voc_s = "u" },
["lan"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["lar"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["len"] = { nom_p = "owie" },
["leń"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = { { "", stem = "soft" }, "ów" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["lub"] = { nom_p = { "", stem = "palatal" } },
["m"] = { nom_p = "owie" },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["nel"] = { gen_p = { "i", "ów" } },
["ng"] = { nom_p = "owie" },
["nuk"] = { nom_p = "owie" },
["nuś"] = { nom_p = { "e", "owie" } },
["ob"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ojk"] = { nom_p = "owie" },
["on"] = { nom_p = { "", stem = "palatal" } },
["ont"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["op"] = { nom_p = { "", stem = "palatal" } },
["ord"] = { nom_p = "owie" },
["otr"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["oń"] = { depr_p = "e", gen_p = { { "", stem = "soft" }, "ów" }, loc_s = "u", nom_p = "e", voc_s = "u" },
["pan"] = { dat_s = "u", loc_s = "u", nom_p = "owie" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["pis"] = { nom_p = "owie" },
["ral"] = { gen_p = "i" },
["rb"] = { nom_p = "owie" },
["rel"] = { gen_p = { "i", "ów" } },
["rep"] = { nom_p = "owie" },
["rl"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["rn"] = { nom_p = { "", stem = "palatal" } },
["rz"] = { gen_p = { "y", { "ów", note = "rare" } } },
["róg"] = { dat_s = { "owi", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["rż"] = { depr_p = "e", gen_p = { "y", "ów" }, loc_s = "u", voc_s = "u" },
["s"] = { nom_p = { "", stem = "palatal" } },
["san"] = { nom_p = "owie" },
["seł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" }, voc_s = { "e", stem = "reduced+palatal" } },
["sik"] = { nom_p = "owie" },
["sin"] = { nom_p = { "", stem = "palatal" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { nom_p = { "", stem = "palatal" } },
["trz"] = { gen_p = "ów", nom_p = { "e", "owie" } },
["tur"] = { nom_p = "owie" },
["uaw"] = { nom_p = { "", stem = "palatal" } },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ud"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["uin"] = { nom_p = { "", stem = "palatal" } },
["ul"] = { gen_p = "ów" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["uń"] = { depr_p = "e", loc_s = "u", voc_s = "u" },
["wed"] = { nom_p = { "", stem = "palatal" } },
["win"] = { nom_p = { "", stem = "palatal" } },
["wun"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wód"] = { nom_p = { "owie", stem = "shortened" } },
["wój"] = { depr_p = { "e", stem = "shortened" } },
["wór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["yn"] = { nom_p = { "", stem = "palatal" } },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = { "e", stem = "palatal" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["zcz"] = { gen_p = "ów" },
["zes"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["zeń"] = { nom_p = { "owie", stem = "reduced" } },
["zin"] = { nom_p = { "", stem = "palatal" } },
["zuk"] = { nom_p = "owie" },
["zuń"] = { nom_p = "e" },
["zyr"] = { nom_p = "owie" },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { { "", stem = "shortened+palatal" }, { "owie", stem = "shortened" } }, voc_s = { "e", stem = "shortened+palatal" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["ódz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "u", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ójt"] = { nom_p = "owie" },
["ól"] = { gen_p = "ów" },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" }, voc_s = { "e", stem = "shortened+palatal" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, voc_s = { "e", stem = "shortened+palatal" } },
["óż"] = { depr_p = "e", gen_p = { "y", "ów" }, loc_s = "u", voc_s = "u" },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", voc_s = "u" },
["ć"] = { depr_p = "e", gen_p = { "", stem = "soft" } },
["ę"] = { dat_p = "tom", depr_p = "ta", gen_p = { "t", stem = "lengthened" }, ins_p = "tami", loc_p = "tach", nom_p = "ta", voc_s = "" },
["ł"] = { nom_p = "owie" },
["łaz"] = { nom_p = { "", stem = "palatal" } },
["łup"] = { nom_p = "owie" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = "e", voc_s = "u" },
["ź"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" }, voc_s = "u" },
["żer"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["żeń"] = { gen_p = { "ów", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
},
},
["m-pr common sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = { "", stem = "palatal" }, voc_s = "o" },
["adż"] = { nom_p = "owie" },
["ak"] = { nom_p = { "y", stem = "palatal" } },
["b"] = { nom_p = "owie" },
["c"] = { dat_s = "y", depr_p = "e", nom_p = "y" },
["d"] = { nom_p = "owie" },
["dok"] = { nom_p = { "y", stem = "palatal" } },
["dyk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["ek"] = { nom_p = { "y", stem = "palatal" } },
["f"] = { nom_p = "owie" },
["g"] = { depr_p = "i", gen_s = "i", nom_p = { "y", stem = "palatal" } },
["h"] = { nom_p = "owie" },
["i"] = { acc_s = { "ego", "ę" }, dat_s = { "", "emu" }, depr_p = "e", gen_s = { "", "ego" }, nom_p = "owie" },
["id"] = { nom_p = { "", stem = "palatal" } },
["j"] = { depr_p = "e", nom_p = "e" },
["k"] = { depr_p = "i", gen_s = "i", nom_p = "owie" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i", nom_p = "e" },
["m"] = { nom_p = "owie" },
["odż"] = { nom_p = "owie" },
["p"] = { nom_p = "owie" },
["ped"] = { nom_p = { "", stem = "palatal" } },
["r"] = { nom_p = { "y", stem = "palatal" } },
["ri"] = { acc_s = "ę", dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["tw"] = { nom_p = "owie" },
["usz"] = { nom_p = "e" },
["uz"] = { dat_s = { "e", stem = "palatal" }, depr_p = "y" },
["yd"] = { nom_p = { "", stem = "palatal" } },
["z"] = { dat_s = "y", depr_p = "e", nom_p = "owie" },
["ór"] = { nom_p = "owie" },
["ł"] = { nom_p = "owie" },
["łk"] = { gen_p = { { "", stem = "inserted_e" }, "ów" } },
["ż"] = { dat_s = "y", depr_p = "e" },
},
},
["m-pr common sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["b"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "owie", stem = "palatal" } },
["c"] = { nom_p = "iowie" },
["d"] = { nom_p = "iowie" },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" } },
["tn"] = { nom_p = { "", stem = "palatal" } },
["z"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "owie", stem = "palatal" } },
["źn"] = { nom_p = { "", stem = "palatal" } },
["ż"] = { nom_p = "iowie" },
},
},
["m-pr common sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["d"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["g"] = { depr_p = "i", ins_s = "iem" },
["gol"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "e", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "o", "owie" } },
["jł"] = { depr_p = { "a", "y" } },
["k"] = { depr_p = "i", ins_s = "iem" },
["ol"] = { voc_s = "o" },
["r"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["z"] = { voc_s = "o" },
["ł"] = { acc_s = "ę", dat_s = { "e", stem = "palatal" }, gen_s = "y", ins_s = "ą", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr common sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { "", stem = "fronted+palatal" }, voc_s = "y" },
["e"] = { dat_p = "yom", dat_s = "yowi", depr_p = "ye", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "ye", voc_s = "yu" },
["o"] = { dat_p = "yom", dat_s = "yowi", depr_p = "ye", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "ye", voc_s = "yu" },
["t"] = { nom_p = { "", stem = "palatal" } },
["z"] = { nom_p = { "i", stem = "virile" } },
["ł"] = { nom_p = { "i", stem = "palatal" } },
},
},
["m-pr given sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["aak"] = { nom_p = "owie" },
["ad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["ak"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u" },
["ck"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" } },
["dot"] = { nom_p = "owie" },
["eg"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["ew"] = { nom_p = "owie" },
["g"] = { depr_p = "i", ins_s = "iem", loc_s = "u" },
["h"] = { loc_s = "u" },
["ier"] = { nom_p = "owie" },
["ik"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["j"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["jan"] = { nom_p = "owie" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["l"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["las"] = { nom_p = "owie" },
["lf"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["oe"] = { depr_p = "" },
["op"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["r"] = { nom_p = { "owie", { "y", stem = "palatal" } } },
["ros"] = { nom_p = "owie" },
["ryc"] = { nom_p = { "e", "owie" } },
["s"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ses"] = { nom_p = "owie" },
["st"] = { nom_p = "owie" },
["t"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["tan"] = { nom_p = "owie" },
["uk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ur"] = { nom_p = "owie" },
["v"] = { loc_s = "ie" },
["van"] = { nom_p = "owie" },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["weł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "y", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "owie", stem = "reduced" } },
["yc"] = { depr_p = "e", loc_s = "u" },
["yk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["yp"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["z"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
["zor"] = { nom_p = "owie" },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { { "e", stem = "shortened" }, { "owie", stem = "shortened" } } },
["ąd"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["łk"] = { dat_p = "om", dat_s = "owi", depr_p = "i", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ś"] = { depr_p = "e", loc_s = "u", nom_p = { "e", "owie" } },
},
},
["m-pr given sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["sz"] = { dat_s = "y", depr_p = "e" },
["u"] = { dat_s = "i", gen_s = { "i", "y" } },
},
},
["m-pr given sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { "owie", stem = "palatal" } },
},
},
["m-pr given sg o"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie", voc_s = "u" },
["an"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["at"] = { dat_p = "onom", dat_s = "onowi", depr_p = "ony", gen_p = "onów", gen_s = "ona", ins_p = "onami", ins_s = "onem", loc_p = "onach", loc_s = "onie", nom_p = "onowie", voc_s = { "o", "onie" } },
["c"] = { voc_s = "o" },
["k"] = { depr_p = "i", ins_s = "iem" },
["l"] = { voc_s = "o" },
["rt"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
["st"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, voc_s = "o" },
},
},
["m-pr proper sg "] = {
copies = { acc_s = "gen_s" },
rules = {
[""] = { acc_p = "ów", dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie", voc_p = "owie", voc_s = { "e", stem = "palatal" } },
["iek"] = { acc_p = {}, dat_p = {}, depr_p = {}, gen_p = {}, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["k"] = { depr_p = "i", ins_s = "iem", loc_s = "u", voc_s = "u" },
["l"] = { depr_p = "e", loc_s = "u", voc_s = "u" },
["ng"] = { depr_p = "i", ins_s = "iem", loc_s = "u", voc_s = "u" },
["z"] = { depr_p = "e", loc_s = "u", voc_s = "u" },
},
},
["m-pr proper sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["g"] = { depr_p = "i", gen_s = "i" },
},
},
["m-pr surname sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ac"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["acz"] = { nom_p = "owie" },
["ake"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", loc_p = "'ach", loc_s = "'u", nom_p = "'owie" },
["az"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["ble"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'e", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", loc_s = "'u", nom_p = "'owie" },
["bót"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "e", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["ce"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["d"] = { loc_s = { "e", stem = "palatal" } },
["dz"] = { nom_p = "owie" },
["e"] = { dat_s = "mu", depr_p = "", gen_s = "go", ins_s = "m", loc_s = "m" },
["ecz"] = { nom_p = "owie" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, depr_p = { "i", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "owie", stem = "reduced" } },
["el"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "e", { "e", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { "u", { "u", stem = "reduced" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["ez"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["eł"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, depr_p = { "y", { "y", stem = "reduced" } }, gen_p = { "ów", { "ów", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { { "e", stem = "palatal" }, { "e", stem = "reduced+palatal" } }, nom_p = { "owie", { "owie", stem = "reduced" } } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { depr_p = "i", ins_s = "iem" },
["gne"] = { depr_p = "'e", loc_s = "'u" },
["ic"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ide"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["iel"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ieł"] = { dat_p = "om", dat_s = "owi", depr_p = "y", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["iz"] = { nom_p = "owie" },
["j"] = { depr_p = "e" },
["jc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["k"] = { depr_p = "i", ins_s = "iem" },
["kój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "e", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["l"] = { depr_p = "e" },
["lc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["lcz"] = { nom_p = "owie" },
["lz"] = { nom_p = "owie" },
["m"] = { loc_s = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" } },
["nc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ncz"] = { nom_p = "owie" },
["ne"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["nz"] = { nom_p = "owie" },
["oc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ocz"] = { nom_p = "owie" },
["oe"] = { loc_s = { "", "m" } },
["owe"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", loc_s = "", nom_p = "'owie" },
["oz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["p"] = { loc_s = { "e", stem = "palatal" } },
["pc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["r"] = { loc_s = { "e", stem = "palatal" } },
["rc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["rcz"] = { nom_p = "owie" },
["re"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["reć"] = { dat_p = { { "om", stem = "reduced" }, "om" }, dat_s = { { "owi", stem = "reduced" }, "owi" }, depr_p = { { "e", stem = "reduced" }, "e" }, gen_p = { { "ów", stem = "reduced" }, "ów" }, gen_s = { { "a", stem = "reduced" }, "a" }, ins_p = { { "ami", stem = "reduced" }, "ami" }, ins_s = { { "em", stem = "reduced" }, "em" }, loc_p = { { "ach", stem = "reduced" }, "ach" }, loc_s = { { "u", stem = "reduced" }, "u" }, nom_p = { { "owie", stem = "reduced" }, "owie" } },
["rp"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, depr_p = { { "e", stem = "palatal" }, "y" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, gen_s = { "a", { "a", stem = "palatal" } }, ins_p = { "ami", { "ami", stem = "palatal" } }, ins_s = { "em", { "em", stem = "palatal" } }, loc_p = { "ach", { "ach", stem = "palatal" } }, loc_s = { { "e", stem = "palatal" }, { "u", stem = "palatal" } }, nom_p = { { "owie", stem = "palatal" }, "owie" } },
["rte"] = { dat_s = "mu", depr_p = "", gen_s = "go", ins_s = "m" },
["rz"] = { nom_p = "owie" },
["rót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["róz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["te"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["tz"] = { nom_p = "owie" },
["u"] = { loc_s = "" },
["uc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ucz"] = { nom_p = "owie" },
["uz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ve"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'y", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'owie" },
["w"] = { loc_s = { "e", stem = "palatal" } },
["wc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["wec"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["yc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ycz"] = { nom_p = "owie" },
["yle"] = { dat_p = "'om", dat_s = "'owi", depr_p = "'e", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", loc_s = "'u", nom_p = "'owie" },
["yz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["z"] = { depr_p = "e", nom_p = { "e", "owie" } },
["zcz"] = { nom_p = "owie" },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "i", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "owie", stem = "shortened" } },
["ój"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ól"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "e", stem = "shortened" }, "e" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "u", stem = "shortened" }, "u" }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ór"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, depr_p = { "y", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "owie", stem = "shortened" } },
["ół"] = { dat_p = { { "om", stem = "shortened" }, "om" }, dat_s = { { "owi", stem = "shortened" }, "owi" }, depr_p = { { "y", stem = "shortened" }, "y" }, gen_p = { { "ów", stem = "shortened" }, "ów" }, gen_s = { { "a", stem = "shortened" }, "a" }, ins_p = { { "ami", stem = "shortened" }, "ami" }, ins_s = { { "em", stem = "shortened" }, "em" }, loc_p = { { "ach", stem = "shortened" }, "ach" }, loc_s = { { "e", stem = "shortened+palatal" }, { "e", stem = "palatal" } }, nom_p = { { "owie", stem = "shortened" }, "owie" } },
["ąc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ącz"] = { nom_p = "owie" },
["ąz"] = { depr_p = "y", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["ć"] = { depr_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["ęcz"] = { nom_p = "owie" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["łc"] = { dat_p = "om", dat_s = "owi", depr_p = "e", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "owie" },
["łcz"] = { nom_p = "owie" },
["ń"] = { depr_p = "e" },
["ńcz"] = { nom_p = "owie" },
["ś"] = { depr_p = "e", nom_p = { "e", "owie" } },
["ź"] = { depr_p = "e" },
["ż"] = { depr_p = "e" },
},
},
["m-pr surname sg a"] = {
copies = { acc_p = "gen_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "y", gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "owie", voc_s = "o" },
["c"] = { dat_s = "y", depr_p = "e" },
["cz"] = { dat_s = "y", depr_p = "e" },
["czm"] = { dat_s = "ie" },
["dz"] = { dat_s = "y", depr_p = "e" },
["g"] = { depr_p = "i", gen_s = "i" },
["i"] = { dat_s = "", depr_p = "e", gen_s = "" },
["j"] = { depr_p = "e" },
["k"] = { depr_p = "i", gen_s = "i" },
["l"] = { dat_s = "i", depr_p = "e", gen_s = "i" },
["pi"] = { dat_s = "i", gen_s = "i" },
["ri"] = { dat_s = "i", gen_s = "i" },
["rz"] = { dat_s = "y", depr_p = "e" },
["sm"] = { dat_s = "ie" },
["sz"] = { dat_s = "y", depr_p = "e" },
["v"] = { dat_s = "ie" },
["wi"] = { dat_s = "i", gen_s = "i" },
["y"] = { depr_p = "e" },
["yzm"] = { dat_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["ż"] = { dat_s = "y", depr_p = "e" },
},
},
["m-pr surname sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = "ie", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["a"] = { dat_p = { "im", "iom" }, dat_s = { "iemu", "iowi" }, gen_p = { "ich", "iów" }, gen_s = { "ia", "iego" }, ins_p = { "iami", "imi" }, ins_s = { "iem", "im" }, loc_p = { "iach", "ich" }, loc_s = { "im", "iu" }, nom_p = "iowie" },
["ak"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["c"] = { nom_p = { "i", "iowie" } },
["czk"] = { nom_p = "owie" },
["d"] = { nom_p = { "i", "iowie" } },
["dk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["f"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["g"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["h"] = { nom_p = { "i", "iowie" } },
["hk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["lk"] = { nom_p = "owie" },
["m"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["n"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["r"] = { nom_p = { "i", "iowie" } },
["s"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["t"] = { nom_p = { "i", "iowie" } },
["tk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
["z"] = { dat_p = { "m", stem = "palatal" }, dat_s = { "emu", stem = "palatal" }, depr_p = { "e", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, gen_s = { "ego", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, ins_s = { "m", stem = "palatal" }, loc_p = { "ch", stem = "palatal" }, loc_s = { "m", stem = "palatal" }, nom_p = { { "", stem = "palatal" }, { "owie", stem = "palatal" } } },
["śk"] = { nom_p = { { "y", stem = "palatal" }, "owie" } },
},
},
["m-pr surname sg o"] = {
copies = { acc_p = "gen_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = "i", gen_p = "ów", gen_s = "i", ins_p = "ami", ins_s = "ą", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "owie" },
["and"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, gen_s = { "a", "y" }, ins_s = { "em", "ą" } },
["d"] = { depr_p = "y" },
["ejn"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["ett"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["h"] = { depr_p = "y", gen_s = "y" },
["i"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["ied"] = { acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "owie" } },
["j"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["jd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, gen_s = { "a", "y" }, ins_s = { "em", "ą" } },
["jm"] = { depr_p = "y", gen_s = "y" },
["l"] = { acc_s = "a", dat_s = "owi", depr_p = "e", gen_s = "a", ins_s = "em", loc_s = "u" },
["mb"] = { dat_p = { "o", "om" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, ins_p = { "ami", "o" }, loc_p = { "ach", "o" }, nom_p = { "o", "owie" } },
["n"] = { depr_p = "y", gen_s = "y" },
["ng"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "i", "o" }, gen_p = { "o", "ów" }, gen_s = { "a", "i", "o" }, ins_p = { "ami", "o" }, ins_s = { "iem", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o", "u" }, nom_p = { "o", "owie" } },
["nt"] = { acc_s = { "a", "o", "ę" }, dat_p = { "o", "om" }, dat_s = { { "e", stem = "palatal" }, "o", "owi" }, depr_p = { "o", "y" }, gen_p = { "o", "ów" }, gen_s = { "a", "o", "y" }, ins_p = { "ami", "o" }, ins_s = { "em", "o", "ą" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "o", "owie" } },
["ott"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["p"] = { depr_p = "y", gen_s = "y" },
["r"] = { depr_p = "y", gen_s = "y" },
["rd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, gen_s = { "a", "y" }, ins_s = { "em", "ą" } },
["rr"] = { acc_s = "a", dat_s = "owi", gen_s = "a", ins_s = "em" },
["ss"] = { acc_s = "a", dat_s = "owi", depr_p = "y", gen_s = "a", ins_s = "em" },
["t"] = { depr_p = "y", gen_s = "y" },
["yd"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, gen_s = { "a", "y" }, ins_s = { "em", "ą" } },
["z"] = { acc_s = { "a", "ę" }, dat_s = { "owi", "y" }, depr_p = "e", gen_s = { "a", "y" }, ins_s = { "em", "ą" }, loc_s = { "u", "y" } },
["zad"] = { acc_s = { "a", "ę" }, dat_s = { "owi", { "e", stem = "palatal" } }, gen_s = { "a", "y" }, ins_s = { "em", "ą" } },
["ł"] = { depr_p = "y", gen_s = "y" },
["łd"] = { gen_s = "y" },
["ńd"] = { gen_s = "y" },
},
},
["m-pr surname sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { { "i", stem = "palatal" }, "owie" }, voc_s = "y" },
["a"] = { dat_p = "yom", dat_s = "yowi", depr_p = "ye", gen_p = "yów", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", voc_s = "yu" },
["e"] = { dat_p = "yom", dat_s = "yowi", depr_p = "ye", gen_p = "yów", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "yowie", voc_s = "yu" },
["o"] = { dat_p = "yom", dat_s = "yowi", depr_p = "ye", gen_p = "yów", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "yowie", voc_s = "yu" },
["r"] = { dat_s = "y'emu", depr_p = "y'e", gen_s = "y'ego", nom_p = "y" },
["sk"] = { dat_p = "im", depr_p = "ie", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = { "y", stem = "palatal" } },
["t"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["wat"] = { nom_p = { "", stem = "palatal" } },
},
},
["m-anml common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "a", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "y" },
["ac"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["arp"] = { gen_p = { "", stem = "palatal" } },
["art"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["aź"] = { nom_p = "e" },
["b"] = { loc_s = { "e", stem = "palatal" } },
["bal"] = { gen_p = "i" },
["bel"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["d"] = { loc_s = { "e", stem = "palatal" } },
["dał"] = { acc_s = { "", "a" } },
["del"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["dz"] = { gen_p = "ów" },
["e"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ec"] = { acc_s = { { "a", stem = "reduced" }, "" } },
["edź"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["eet"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["ek"] = { acc_s = { "a", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["f"] = { loc_s = { "e", stem = "palatal" } },
["g"] = { ins_s = "iem", nom_p = "i" },
["iel"] = { gen_p = "i" },
["ieł"] = { loc_s = { "e", stem = "reduced+palatal" } },
["iz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["j"] = { nom_p = "e" },
["jec"] = { acc_s = { "a", stem = "reduced" } },
["k"] = { ins_s = "iem", nom_p = "i" },
["l"] = { gen_p = { "i", "ów" }, nom_p = "e" },
["lac"] = { gen_p = "ów" },
["lec"] = { acc_s = { "a", stem = "reduced" } },
["m"] = { loc_s = { "e", stem = "palatal" } },
["mul"] = { gen_p = "i" },
["n"] = { loc_s = { "e", stem = "palatal" } },
["niś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["oll"] = { gen_p = "i" },
["ont"] = { acc_s = { "", "a" }, gen_s = { "a", "u" } },
["oz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["oś"] = { gen_p = { "", stem = "soft" } },
["p"] = { loc_s = { "e", stem = "palatal" } },
["paw"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["peć"] = { acc_s = { { "a", stem = "reduced" }, "" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["r"] = { loc_s = { "e", stem = "palatal" } },
["raś"] = { gen_p = { "", stem = "soft" } },
["rp"] = { acc_s = { "a", stem = "palatal" }, dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["s"] = { loc_s = { "e", stem = "palatal" } },
["sz"] = { gen_p = { "y", "ów" } },
["t"] = { loc_s = { "e", stem = "palatal" } },
["tat"] = { acc_s = { "", "a" } },
["tu"] = { depr_p = "" },
["tw"] = { loc_s = { "e", stem = "palatal" } },
["u"] = { acc_s = "", dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["wół"] = { acc_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } }, gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } } },
["yz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["yś"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, nom_p = "e" },
["zal"] = { gen_p = "i" },
["ze"] = { depr_p = "" },
["é"] = { acc_s = "", dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ód"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ór"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { acc_s = { "a", stem = "shortened" }, dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ć"] = { nom_p = "e" },
["ł"] = { loc_s = { "e", stem = "palatal" } },
["ław"] = { loc_s = { "e", stem = "palatal" } },
["łż"] = { gen_p = { "y", "ów" } },
["ń"] = { gen_p = { "", stem = "soft" }, nom_p = "e" },
["ś"] = { nom_p = "e" },
["ż"] = { nom_p = "e" },
["żec"] = { acc_s = { "a", stem = "reduced" } },
},
},
["m-anml common sg a"] = {
copies = { acc_p = "nom_p", loc_s = "dat_s", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "ę", dat_p = "om", dat_s = { "e", stem = "palatal" }, depr_p = {}, gen_p = "ów", gen_s = "y", ins_p = "ami", ins_s = "ą", loc_p = "ach", nom_p = "y", voc_s = "o" },
["c"] = { dat_s = "y", nom_p = "e" },
["j"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["k"] = { gen_s = "i", nom_p = "i" },
["l"] = { dat_s = "i", gen_p = "i", gen_s = "i", nom_p = "e" },
["o"] = { acc_s = "a", dat_p = "a", dat_s = "a", gen_p = "a", gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a", voc_s = "a" },
["u"] = { acc_s = "a", dat_p = "a", dat_s = "a", gen_p = "a", gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a", voc_s = "a" },
},
},
["m-anml common sg i"] = {
copies = { acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { acc_p = "i", dat_p = "i", dat_s = "i", depr_p = {}, gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i", voc_s = "i" },
["s"] = { acc_p = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, depr_p = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" }, voc_s = { "", stem = "palatal" } },
["sk"] = { acc_p = "ie", dat_p = "im", dat_s = "iemu", gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["z"] = { nom_p = { "", stem = "palatal" }, voc_s = { "", stem = "palatal" } },
},
},
["m-anml common sg o"] = {
copies = { voc_p = "nom_p" },
rules = {
[""] = { acc_p = "o", acc_s = "o", dat_p = "o", dat_s = "o", depr_p = {}, gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_s = "o" },
["er"] = { depr_p = "o" },
["ni"] = { acc_p = "e", acc_s = "a", dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["si"] = { acc_p = "e", acc_s = "a", dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
["ud"] = { acc_p = { "o", "y" }, acc_s = { "a", "o" }, dat_p = { "o", "om" }, dat_s = { "o", "owi" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "o", "y" } },
},
},
["m-anml common sg y"] = {
copies = { voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_p = "ych", acc_s = "ego", dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { "", stem = "palatal" } },
["asz"] = { nom_p = "owie" },
["c"] = { nom_p = "y" },
["e"] = { acc_p = "ye", acc_s = "ya", dat_p = "yom", dat_s = "yowi", depr_p = {}, gen_p = "yów", gen_s = "ya", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "ye" },
["etw"] = { acc_p = "e", depr_p = {}, nom_p = "e" },
["on"] = { acc_p = "e", depr_p = {}, nom_p = "e" },
["ryw"] = { acc_p = "e", depr_p = {}, nom_p = "e" },
["rz"] = { nom_p = "owie" },
["t"] = { acc_p = "e", acc_s = { "ego", "y" }, depr_p = {}, nom_p = "e" },
["usz"] = { nom_p = "owie" },
["z"] = { nom_p = { "owie", "y" } },
["ór"] = { nom_p = { "y", stem = "palatal" } },
["ł"] = { nom_p = { "i", stem = "palatal" } },
["ż"] = { nom_p = "owie" },
},
},
["m-anml given sg "] = {
copies = { acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { acc_p = "", dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["ie"] = { acc_p = "ch", dat_p = "m", dat_s = "mu", gen_p = "ch", gen_s = "go", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m" },
["ks"] = { acc_p = "y", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y", voc_s = { "e", stem = "palatal" } },
["r"] = { acc_p = "y", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y", voc_s = { "e", stem = "palatal" } },
["z"] = { depr_p = {} },
},
},
["m-anml given sg i"] = {
copies = { acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_p = "ich", dat_p = "im", dat_s = "emu", depr_p = "e", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "owie" },
},
},
["m-anml given sg o"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "o", dat_s = "o", depr_p = { "a", "o" }, gen_p = "o", gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = "o", nom_p = "o" },
},
},
["m-anml given sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["rr"] = { dat_s = { "emu", "y'emu" }, depr_p = { "e", "y'e" }, gen_s = { "ego", "y'ego" }, nom_p = { "owie", "y" } },
},
},
["m-anml proper sg "] = {
copies = { acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { acc_p = "y", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y", voc_s = { "e", stem = "palatal" } },
["e"] = { acc_p = "", dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["ec"] = { acc_p = { "e", stem = "reduced" }, dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" }, voc_s = { "u", stem = "reduced" } },
["k"] = { acc_p = "i", ins_s = "iem", loc_s = "u", nom_p = "i", voc_s = "u" },
["sz"] = { acc_p = "e", gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e", voc_s = "u" },
["u"] = { depr_p = "", nom_p = "", voc_s = "" },
},
},
["m-anml proper sg o"] = {
copies = { },
rules = {
[""] = { acc_p = "o", acc_s = "o", dat_p = "o", dat_s = "o", depr_p = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_p = "o", voc_s = "o" },
},
},
["m-anml proper sg y"] = {
copies = { },
rules = {
[""] = { acc_p = "ych", acc_s = "ego", dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = { "", stem = "palatal" }, voc_p = { "", stem = "palatal" }, voc_s = "y" },
},
},
["m-anml surname sg "] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_s = "" },
["cu"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["d"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, depr_p = { "", "y" }, gen_p = { "", "ów" }, gen_s = { "", "a" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "owie" }, voc_s = { "", { "e", stem = "palatal" } } },
["eau"] = { dat_p = "", dat_s = "", depr_p = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", nom_p = "" },
["es"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", loc_p = "'ach", loc_s = "'u", nom_p = "'owie", voc_s = "'u" },
["eu"] = { depr_p = "", nom_p = "" },
["ieu"] = { dat_p = { "", "m" }, dat_s = { "", "mu" }, gen_p = { "", "ch" }, gen_s = { "", "go" }, ins_p = { "", "mi" }, ins_s = { "", "m" }, loc_p = { "", "ch" }, loc_s = { "", "m" } },
["que"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", loc_p = "'ach", loc_s = "'u", nom_p = "'owie", voc_s = "'u" },
["u"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, depr_p = { "", "y" }, gen_p = { "", "ów" }, gen_s = { "", "a" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, nom_p = { "", "owie" } },
},
},
["m-anml surname sg i"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "emu", depr_p = "e", gen_p = "ich", gen_s = "ego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "i" },
["i"] = { dat_p = { "i", "im" }, dat_s = { "emu", "i" }, depr_p = { "e", "i" }, gen_p = { "i", "ich" }, gen_s = { "ego", "i" }, ins_p = { "i", "imi" }, ins_s = { "i", "im" }, loc_p = { "i", "ich" }, loc_s = { "i", "im" } },
["l"] = { nom_p = { "i", "owie" } },
},
},
["m-anml surname sg o"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "o", depr_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", nom_p = "o" },
},
},
["m-anml surname sg y"] = {
copies = { acc_p = "gen_p", acc_s = "gen_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = "e", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "owie" },
["ern"] = { nom_p = "owie" },
["h"] = { nom_p = { "owie", { "i", stem = "virile" } } },
["iad"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["l"] = { dat_p = "im", gen_p = "ich", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im" },
["n"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["st"] = { nom_p = { "owie", { "", stem = "palatal" } } },
["sł"] = { nom_p = { "owie", { "i", stem = "palatal" } } },
["w"] = { nom_p = { { "", stem = "palatal" }, "owie" } },
["ąc"] = { nom_p = { "owie", "y" } },
["źn"] = { nom_p = "owie" },
},
},
["m-in common sg "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { acc_s = "", dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["A"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["AN"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["AT"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-y" } },
["C"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["CD"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["CR"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["DD"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["DL"] = { gen_p = "-i", gen_s = "-u" },
["I"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["IT"] = { dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, nom_p = { "", "-y" } },
["K"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["L"] = { dat_p = "-om", dat_s = "-owi", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["ML"] = { acc_s = { "", "-a" }, gen_p = { "-i", "-ów" }, gen_s = { "-a", "-u" } },
["OP"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OR"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["P"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["V"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["abl"] = { gen_s = "a" },
["ac"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["ak"] = { gen_s = "a" },
["am"] = { loc_s = { "e", stem = "palatal" } },
["arc"] = { gen_s = "u" },
["az"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bel"] = { gen_p = { "i", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["bul"] = { gen_s = "u" },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["cel"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["cer"] = { gen_s = "a" },
["cik"] = { gen_s = "u" },
["dej"] = { gen_s = { "a", "u" } },
["dol"] = { gen_p = { "i", "ów" } },
["e"] = { dat_p = "'om", dat_s = "'owi", ins_p = "'ami", ins_s = "'em", loc_p = "'ach" },
["ecz"] = { gen_s = "u" },
["ek"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["el"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["em"] = { loc_s = { "e", stem = "palatal" } },
["enc"] = { gen_s = "a" },
["eus"] = { gen_s = "a" },
["ez"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eć"] = { gen_p = { "", stem = "reduced+soft" } },
["eł"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["fel"] = { gen_p = { "i", stem = "reduced" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["ge"] = { gen_s = "'u", loc_s = "'u", nom_p = "'e" },
["ger"] = { gen_s = "a" },
["gor"] = { gen_s = "u" },
["gół"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["h"] = { loc_s = "u" },
["hej"] = { gen_s = { "a", "u" } },
["her"] = { gen_s = "a" },
["hol"] = { gen_p = { "i", "ów" } },
["hyl"] = { gen_p = "i" },
["hór"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ial"] = { gen_p = { "i", "ów" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["idz"] = { gen_p = "ów" },
["iej"] = { gen_s = "a" },
["iek"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ień"] = { gen_p = { "", stem = "soft" } },
["ij"] = { gen_s = "a" },
["ik"] = { gen_s = "a" },
["il"] = { gen_p = { "i", "ów" } },
["im"] = { loc_s = { "e", stem = "palatal" } },
["ior"] = { gen_s = "u" },
["isz"] = { gen_s = "u" },
["itr"] = { gen_s = "a" },
["iz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["izd"] = { loc_s = { "e", stem = "palatal" } },
["iąc"] = { gen_p = { "y", stem = "shortened" } },
["iąk"] = { gen_s = "u" },
["iąz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["iść"] = { ins_p = "mi" },
["j"] = { loc_s = "u", nom_p = "e" },
["jas"] = { gen_s = "a" },
["jem"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "u", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["jm"] = { loc_s = { "e", stem = "palatal" } },
["k"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["kal"] = { gen_p = "i" },
["kch"] = { gen_s = { "a", "u" } },
["kej"] = { acc_s = { "", "a" }, gen_s = "a" },
["ker"] = { gen_s = "a" },
["kic"] = { gen_s = "u" },
["kl"] = { gen_p = { "i", "ów" } },
["kor"] = { gen_s = "u" },
["koń"] = { gen_p = { "", stem = "soft" } },
["kul"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["laż"] = { gen_p = "y" },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ler"] = { gen_s = "a" },
["leń"] = { gen_p = { "", stem = "soft" } },
["ll"] = { gen_p = { "i", "ów" } },
["lle"] = { gen_p = "'ów", gen_s = "'u", loc_s = "'u", nom_p = "'e" },
["lm"] = { loc_s = { "e", stem = "palatal" } },
["lor"] = { gen_s = "u" },
["lus"] = { gen_s = "a" },
["ląt"] = { gen_s = "u" },
["m"] = { loc_s = { "ie", { "e", stem = "palatal", note = "proscribed" } } },
["maj"] = { gen_s = "a" },
["mbl"] = { gen_p = { "i", "ów" } },
["me"] = { gen_p = "'ów", gen_s = "'u", nom_p = "'y" },
["mik"] = { gen_s = "u" },
["mor"] = { gen_s = "u" },
["nal"] = { gen_p = { "i", "ów" } },
["nar"] = { gen_s = "a" },
["nc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["nch"] = { nom_p = "e" },
["nek"] = { gen_s = { "u", stem = "reduced" } },
["nel"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ner"] = { gen_s = "a" },
["neż"] = { gen_p = "y", gen_s = { "a", "u" } },
["nol"] = { gen_p = "i" },
["nor"] = { gen_s = "u" },
["nsz"] = { gen_s = "u" },
["nur"] = { gen_s = "a" },
["nus"] = { gen_s = { "a", "u" } },
["nyp"] = { gen_s = "a" },
["nóż"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { { "y", stem = "shortened" }, { "ów", stem = "shortened" } }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["oc"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["och"] = { gen_s = "a" },
["ocz"] = { gen_s = "u" },
["oik"] = { gen_s = "u" },
["om"] = { loc_s = { "e", stem = "palatal" } },
["ool"] = { gen_p = "i" },
["or"] = { gen_s = "a" },
["otl"] = { gen_p = { "i", "ów" } },
["our"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["oz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["pel"] = { gen_p = { "i", stem = "reduced" } },
["per"] = { gen_s = "a" },
["pik"] = { gen_s = "u" },
["pol"] = { gen_p = { "i", "ów" } },
["por"] = { gen_s = "u" },
["prz"] = { gen_s = "u" },
["ral"] = { gen_p = { "i", "ów" } },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["rcz"] = { gen_s = "u" },
["re"] = { gen_p = "'ów", gen_s = "'u", nom_p = "'y" },
["rel"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["reń"] = { dat_p = { "om", { "om", stem = "reduced" } }, dat_s = { "owi", { "owi", stem = "reduced" } }, gen_s = { "a", { "a", stem = "reduced" } }, ins_p = { "ami", { "ami", stem = "reduced" } }, ins_s = { "em", { "em", stem = "reduced" } }, loc_p = { "ach", { "ach", stem = "reduced" } }, loc_s = { "u", { "u", stem = "reduced" } }, nom_p = { "e", { "e", stem = "reduced" } } },
["rm"] = { loc_s = { "e", stem = "palatal" } },
["rol"] = { gen_p = "i" },
["ror"] = { gen_s = "u" },
["rsz"] = { gen_s = "u" },
["rus"] = { acc_s = { "", "a" }, gen_s = "a" },
["rąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["sar"] = { gen_s = "a" },
["sel"] = { gen_p = { "i", stem = "reduced" } },
["ser"] = { gen_s = "a" },
["sh"] = { nom_p = "e" },
["sm"] = { loc_s = "ie" },
["sz"] = { gen_p = { "y", "ów" } },
["tal"] = { gen_p = "i" },
["tch"] = { nom_p = "e" },
["til"] = { gen_p = "ów" },
["tm"] = { loc_s = { "e", stem = "palatal" } },
["tol"] = { gen_p = { "i", "ów" } },
["tus"] = { gen_s = "a" },
["tyk"] = { gen_s = "u" },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["uc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["uel"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ul"] = { gen_p = { "i", "ów" }, gen_s = "a" },
["um"] = { loc_s = { "e", stem = "palatal" } },
["unk"] = { acc_s = { "", "a" } },
["urz"] = { gen_s = "u" },
["use"] = { gen_p = "'ów", gen_s = "'u", nom_p = "'y" },
["uz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["wl"] = { gen_p = "i" },
["wor"] = { gen_s = "u" },
["wyk"] = { gen_s = "u" },
["wyż"] = { gen_p = "ów" },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["yj"] = { gen_s = "a" },
["yk"] = { gen_s = "a" },
["yl"] = { gen_p = { "i", "ów" } },
["ym"] = { loc_s = { "e", stem = "palatal" } },
["ysz"] = { gen_s = "u" },
["yz"] = { gen_p = "ów", gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["z"] = { gen_p = { "y", { "ów", note = "rare" } }, gen_s = "a", loc_s = "u", nom_p = "e" },
["zac"] = { gen_p = "ów" },
["zcz"] = { gen_s = "u" },
["zd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ze"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["zel"] = { gen_p = { "i", stem = "reduced" } },
["zer"] = { gen_s = "a" },
["zeń"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["zol"] = { gen_p = "i" },
["ząg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ób"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ól"] = { gen_p = { "i", "ów" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ót"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ów"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ąk"] = { gen_s = "a" },
["ąp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ąt"] = { gen_s = "a" },
["ć"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["łat"] = { gen_s = { "a", "u" } },
["łn"] = { gen_s = "a" },
["łup"] = { gen_s = "a" },
["łąg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ń"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ńc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ś"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ść"] = { dat_p = "om", dat_s = "owi", gen_p = { "", stem = "soft" }, gen_s = "a", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ź"] = { gen_s = "a", loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["żel"] = { dat_p = "om", dat_s = "owi", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["życ"] = { gen_s = "a" },
["żyk"] = { gen_s = "u" },
},
},
["m-in common sg a"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", gen_p = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "a", depr_p = {}, gen_s = "a", ins_p = "a", ins_s = "a", loc_p = "a", nom_p = "a" },
},
},
["m-in common sg i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { acc_s = "i", dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["a"] = { dat_p = "i", dat_s = "i", gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["an"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["l"] = { dat_p = "i", dat_s = "i", gen_p = "i", gen_s = "i", ins_p = "i", ins_s = "i", loc_p = "i", loc_s = "i", nom_p = "i" },
["m"] = { acc_s = { "", stem = "palatal" }, dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
["n"] = { acc_s = { "", stem = "palatal" } },
},
},
["m-in common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "o", dat_s = "o", depr_p = {}, gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o", voc_s = "o" },
["i"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e", voc_s = "u" },
},
},
["m-in common sg y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = "y", dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e", voc_s = "y" },
["a"] = { dat_p = "yom", dat_s = "yowi", gen_p = "yów", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "ye", voc_s = "yu" },
["e"] = { dat_p = "yom", dat_s = "yowi", gen_p = "yów", ins_p = "yami", ins_s = "yem", loc_p = "yach", loc_s = "yu", nom_p = "ye", voc_s = "yu" },
},
},
["m-in place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", dat_s = "owi", depr_p = {}, gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["Kum"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["R"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["adz"] = { gen_p = { "y", "ów" } },
["aj"] = { gen_s = "u" },
["ak"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["al"] = { gen_p = "i" },
["am"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["an"] = { gen_s = "u" },
["ask"] = { gen_s = "u" },
["aw"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["az"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["azd"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["bcz"] = { gen_p = "ów" },
["bel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ber"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["biń"] = { gen_p = { "", stem = "soft" } },
["boń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["byl"] = { gen_p = { "i", "ów" } },
["c"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ceń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["ck"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["d"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["der"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "e", stem = "reduced+palatal" }, nom_p = { "y", stem = "reduced" } },
["doń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["duń"] = { gen_p = { "", stem = "soft" } },
["dyń"] = { gen_p = { "", stem = "soft" } },
["dz"] = { gen_p = "ów" },
["ew"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["eń"] = { gen_p = { "", stem = "soft" } },
["eść"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["g"] = { ins_s = "iem", loc_s = "u", nom_p = "i" },
["gal"] = { gen_p = { "i", "ów" } },
["goń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["h"] = { loc_s = "u", nom_p = "y" },
["hel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "i", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ik"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["j"] = { loc_s = "u", nom_p = "e" },
["k"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_p = { "ów", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "iem", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "i", stem = "reduced" } },
["kok"] = { gen_s = "u" },
["l"] = { loc_s = "u", nom_p = "e" },
["las"] = { loc_s = { "e", stem = "fronted+palatal" } },
["lc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["lep"] = { gen_s = "u" },
["leń"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["lk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["lm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["m"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["n"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ng"] = { gen_s = "u" },
["nim"] = { dat_p = { { "om", stem = "palatal" }, "om" }, dat_s = { { "owi", stem = "palatal" }, "owi" }, gen_p = { { "ów", stem = "palatal" }, "ów" }, gen_s = { "a", { "a", stem = "palatal" } }, ins_p = { "ami", { "ami", stem = "palatal" } }, ins_s = { "em", { "em", stem = "palatal" } }, loc_p = { "ach", { "ach", stem = "palatal" } }, loc_s = { { "e", stem = "palatal" }, { "u", stem = "palatal" } }, nom_p = { { "e", stem = "palatal" }, "y" } },
["ok"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ol"] = { gen_p = "i" },
["on"] = { gen_s = "u" },
["ork"] = { gen_s = "a" },
["oń"] = { gen_p = { "", stem = "soft" } },
["oś"] = { gen_p = { "", stem = "soft" } },
["ość"] = { gen_p = { { "", stem = "soft" }, "ów" } },
["p"] = { loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["pas"] = { gen_s = "a" },
["pcz"] = { gen_p = "ów" },
["pel"] = { dat_p = { "om", stem = "reduced" }, dat_s = { "owi", stem = "reduced" }, gen_s = { "a", stem = "reduced" }, ins_p = { "ami", stem = "reduced" }, ins_s = { "em", stem = "reduced" }, loc_p = { "ach", stem = "reduced" }, loc_s = { "u", stem = "reduced" }, nom_p = { "e", stem = "reduced" } },
["r"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ral"] = { gen_p = { "i", "ów" } },
["rb"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["rc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["rk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["rp"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { "ów", stem = "palatal" }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["rsz"] = { gen_p = "y" },
["ryń"] = { gen_p = { "", stem = "soft" } },
["rój"] = { gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" } },
["róz"] = { gen_s = { { "a", stem = "shortened" }, { "u", stem = "shortened" } } },
["s"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["sk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["t"] = { gen_s = "u", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["tul"] = { gen_p = "i" },
["u"] = { dat_p = "", dat_s = "", gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ub"] = { dat_p = { "om", stem = "palatal" }, dat_s = { "owi", stem = "palatal" }, gen_p = { { "", stem = "palatal" }, { "ów", stem = "palatal" } }, gen_s = { "a", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, ins_s = { "em", stem = "palatal" }, loc_p = { "ach", stem = "palatal" }, loc_s = { "u", stem = "palatal" }, nom_p = { "e", stem = "palatal" } },
["ud"] = { gen_s = "a" },
["uk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["um"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["us"] = { gen_s = "a" },
["uz"] = { gen_p = "ów", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["uł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["vik"] = { gen_s = "u" },
["w"] = { dat_p = { "om", stem = "shortened" }, dat_s = { { "owi", stem = "shortened" }, { "u", stem = "shortened", note = "archaic" } }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["wil"] = { gen_p = { "i", "ów" } },
["wój"] = { gen_p = { "ów", stem = "shortened" } },
["yc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["yk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["yż"] = { gen_p = "ów" },
["z"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
["zk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["zok"] = { gen_s = "a" },
["zyż"] = { gen_p = { "y", "ów" } },
["ód"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["óg"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "iem", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "i", stem = "shortened" } },
["ój"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["ór"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, gen_s = { "u", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["órz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "y", stem = "shortened" }, gen_s = { "a", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "u", stem = "shortened" }, nom_p = { "e", stem = "shortened" } },
["óz"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" }, loc_s = { "e", stem = "shortened+palatal" }, nom_p = { "y", stem = "shortened" } },
["ół"] = { gen_s = { "u", stem = "shortened" } },
["ąb"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["ąc"] = { dat_p = "om", dat_s = "owi", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ć"] = { loc_s = "u", nom_p = "e" },
["ęc"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["ędz"] = { gen_p = { "y", "ów" } },
["ęk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["ęp"] = { gen_s = "u" },
["ł"] = { dat_p = { "om", stem = "shortened" }, dat_s = { "owi", stem = "shortened" }, gen_p = { "ów", stem = "shortened" }, ins_p = { "ami", stem = "shortened" }, ins_s = { "em", stem = "shortened" }, loc_p = { "ach", stem = "shortened" } },
["łak"] = { gen_s = "u" },
["łk"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["łm"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["łub"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ń"] = { gen_p = { { "", stem = "soft" }, "ów" }, loc_s = "u", nom_p = "e" },
["ś"] = { loc_s = "u", nom_p = "e" },
["śl"] = { gen_p = { "i", "ów" } },
["ź"] = { gen_p = { "", stem = "soft" }, loc_s = "u", nom_p = "e" },
["ż"] = { gen_p = { "y", "ów" }, loc_s = "u", nom_p = "e" },
},
},
["m-in place sg i"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "im", dat_s = "iemu", depr_p = {}, gen_p = "ich", gen_s = "iego", ins_p = "imi", ins_s = "im", loc_p = "ich", loc_s = "im", nom_p = "ie" },
["p"] = { dat_p = { "", stem = "palatal" }, dat_s = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, gen_s = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, ins_s = { "", stem = "palatal" }, loc_p = { "", stem = "palatal" }, loc_s = { "", stem = "palatal" }, nom_p = { "", stem = "palatal" } },
},
},
["m-in place sg y"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p" },
rules = {
[""] = { dat_p = "ym", dat_s = "emu", depr_p = {}, gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e", voc_s = "y" },
},
},
["m-in proper sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["J"] = { dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" } },
["L"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-i", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
["M"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["N"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["OT"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", nom_p = "-y" },
["R"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ze", nom_p = "-y" },
["S"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-ie", nom_p = "-y" },
["Z"] = { dat_p = { "-etom", "-om" }, dat_s = { "-etowi", "-owi" }, gen_p = { "-etów", "-ów" }, gen_s = { "-etu", "-u" }, ins_p = { "-ami", "-etami" }, ins_s = { "-em", "-etem" }, loc_p = { "-ach", "-etach" }, loc_s = "-ecie", nom_p = { "-ety", "-y" } },
["am"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["b"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ch"] = { gen_p = "ów", gen_s = "u", nom_p = "y" },
["d"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["e"] = { dat_p = "'om", dat_s = "'owi", gen_p = "'ów", gen_s = "'a", ins_p = "'ami", ins_s = "'em", loc_p = "'ach", nom_p = "'y" },
["el"] = { gen_s = "a" },
["g"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["h"] = { dat_p = "om", dat_s = "owi", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u" },
["iD"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-zie", nom_p = "-y" },
["iK"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-iem", loc_p = "-ach", loc_s = "-u", nom_p = "-i" },
["ic"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", loc_p = "ach", loc_s = "u" },
["k"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", ins_p = "ami", ins_s = "iem", loc_p = "ach", loc_s = "u", nom_p = "i" },
["kot"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { { "e", stem = "palatal" }, "" }, nom_p = { "", "y" } },
["l"] = { dat_p = "om", dat_s = "owi", gen_p = { "i", "ów" }, gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "e" },
["n"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ok"] = { gen_s = "a" },
["r"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["s"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["t"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["ł"] = { dat_p = "om", dat_s = "owi", gen_p = "ów", gen_s = "u", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "y" },
["Ś"] = { dat_p = "-om", dat_s = "-owi", gen_p = "-ów", gen_s = "-u", ins_p = "-ami", ins_s = "-em", loc_p = "-ach", loc_s = "-u", nom_p = "-e" },
},
},
["n common pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n common pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["ekt"] = { gen_p = "ów" },
["ik"] = { gen_p = "ów" },
["it"] = { gen_p = "ów" },
["k"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { gen_p = "i" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["nt"] = { gen_p = "ów" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["ust"] = { gen_p = "" },
["zwi"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "ym", dat_s = {}, depr_p = {}, gen_p = "ych", gen_s = {}, ins_p = "ymi", ins_s = {}, loc_p = "ych", loc_s = {}, nom_s = {}, voc_s = {} },
["ani"] = { gen_p = { "", { "", stem = "final_soft" } }, ins_p = { "ami", { "mi", stem = "final_soft" } } },
["bi"] = { gen_p = "" },
["c"] = { dat_p = "om", ins_p = "ami", loc_p = "ach" },
["gi"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["i"] = { dat_p = "om", ins_p = "ami", loc_p = "ach" },
["ic"] = { gen_p = "" },
["iej"] = { gen_p = "ów" },
["j"] = { dat_p = "om", ins_p = "ami", loc_p = "ach" },
["jc"] = { gen_p = "ów" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { dat_p = "om", gen_p = "i", ins_p = "ami", loc_p = "ach" },
["ns"] = { dat_p = "om", gen_p = "ów", ins_p = "ami", loc_p = "ach" },
["pi"] = { gen_p = "" },
["rc"] = { gen_p = "ów" },
["sat"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e" },
["z"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
["ąc"] = { dat_p = "ym", ins_p = "ymi", loc_p = "ych" },
["ńc"] = { gen_p = "ów" },
["ż"] = { dat_p = "om", gen_p = "y", ins_p = "ami", loc_p = "ach" },
},
},
["n common pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ajk"] = { gen_p = { "", stem = "inserted_e" } },
["c"] = { dat_p = "iom", gen_p = "i", ins_p = "iami", loc_p = "iach" },
["jtk"] = { gen_p = { "", stem = "inserted_e" } },
["l"] = { dat_p = "i", gen_p = "i", ins_p = "i", loc_p = "i" },
["n"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["unk"] = { gen_p = "ów" },
["w"] = { dat_p = { "om", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_p = { "ami", stem = "palatal" }, loc_p = { "ach", stem = "palatal" } },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n common pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["m"] = { gen_p = "" },
["n"] = { gen_p = "" },
["om"] = { gen_p = "ów" },
["on"] = { gen_p = "ów" },
},
},
["n common sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["ema"] = { dat_p = "tom", gen_p = "tów", ins_p = "tami", loc_p = "tach", nom_p = "ta" },
["lon"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n common sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = { "", stem = "final_soft" }, gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["aci"] = { gen_p = "" },
["aj"] = { gen_p = "" },
["al"] = { dat_s = "e", gen_s = "e", ins_s = "e", loc_s = "e" },
["b"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["bi"] = { gen_p = "" },
["bil"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e", nom_p = "e" },
["d"] = { nom_p = "e" },
["dni"] = { gen_p = "" },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["eci"] = { gen_p = "" },
["eł"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e" },
["f"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["gi"] = { nom_p = "e" },
["il"] = { dat_s = "e", gen_s = "e", ins_s = "e", loc_s = "e" },
["jni"] = { gen_p = "" },
["k"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ki"] = { nom_p = "e" },
["kni"] = { gen_p = "" },
["l"] = { gen_p = "i" },
["m"] = { nom_p = "e" },
["mi"] = { gen_p = "" },
["mil"] = { dat_p = "iom", gen_p = "iów", ins_p = "iami", loc_p = "iach", nom_p = "ia" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["nal"] = { dat_p = "e", gen_p = "e", ins_p = "e", loc_p = "e", nom_p = "e" },
["nci"] = { gen_p = "" },
["o"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["oci"] = { gen_p = "" },
["ogi"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e" },
["pi"] = { gen_p = "" },
["r"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["rc"] = { gen_p = "" },
["si"] = { gen_p = "" },
["ski"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", ins_s = "m", loc_p = "ch", loc_s = "m" },
["st"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym" },
["t"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["tel"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["um"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", ins_s = "ym", loc_p = "ych", loc_s = "ym", nom_p = "e" },
["wal"] = { dat_s = "u", gen_s = "a", ins_s = "em", loc_s = "u" },
["wc"] = { gen_p = { "", "ów" } },
["wi"] = { gen_p = "" },
["woj"] = { dat_s = "emu", gen_s = "ego", nom_p = "e" },
["z"] = { gen_p = "y" },
["zc"] = { gen_p = { "", stem = "inserted_ie" } },
["zi"] = { gen_p = "" },
["é"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["ąci"] = { gen_p = "" },
["ł"] = { nom_p = "e" },
["śni"] = { gen_p = "" },
["ż"] = { gen_p = "y" },
["żci"] = { gen_p = "" },
},
},
["n common sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["al"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["ast"] = { loc_s = { "e", stem = "fronted+palatal" } },
["at"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["atł"] = { loc_s = { "e", stem = "fronted+palatal" } },
["ał"] = { gen_p = "" },
["b"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["cer"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "o", "ów" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["de"] = { dat_p = { "o", { "om", note = "rare" } }, dat_s = { "o", { "u", note = "rare" } }, gen_p = { "o", { "ów", note = "rare" } }, gen_s = { { "a", note = "rare" }, "o" }, ins_p = { { "ami", note = "rare" }, "o" }, ins_s = { { "em", note = "rare" }, "o" }, loc_p = { { "ach", note = "rare" }, "o" }, loc_s = { "o", { "u", note = "rare" } }, nom_p = { { "a", note = "rare" }, "o" } },
["dk"] = { gen_p = { "", stem = "inserted_e" } },
["dr"] = { gen_p = { "", stem = "inserted_e" } },
["ebr"] = { gen_p = { "", stem = "inserted_e" } },
["eg"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["eł"] = { gen_p = "" },
["f"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["fot"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["gn"] = { gen_p = { "", stem = "inserted_ie" } },
["gł"] = { gen_p = { "", stem = "inserted_ie" } },
["h"] = { loc_s = "u" },
["i"] = { gen_p = "ów", loc_s = "u" },
["int"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["jk"] = { gen_p = { "", stem = "inserted_e" } },
["k"] = { ins_s = "iem", loc_s = "u" },
["kid"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["ll"] = { loc_s = "u" },
["mk"] = { gen_p = { "", stem = "inserted_e" } },
["ng"] = { ins_s = "iem", loc_s = "u" },
["nk"] = { gen_p = { "", stem = "inserted_e" } },
["o"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ol"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", "u" }, nom_p = { "a", "o" } },
["ors"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { { "e", stem = "palatal" }, "o" }, nom_p = { "a", "o" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pk"] = { gen_p = { "", stem = "inserted_e" } },
["pn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["pol"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ps"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["re"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["red"] = { dat_p = { "o", "om" }, dat_s = { "o", "u" }, gen_p = { "", "o" }, gen_s = { "a", "o" }, ins_p = { "ami", "o" }, ins_s = { "em", "o" }, loc_p = { "ach", "o" }, loc_s = { "o", { "e", stem = "palatal" } }, nom_p = { "a", "o" } },
["rk"] = { gen_p = { "", stem = "inserted_e" } },
["rzm"] = { loc_s = "ie" },
["tk"] = { gen_p = { "", stem = "inserted_e" } },
["ukn"] = { gen_p = { "", stem = "inserted_ie" } },
["wk"] = { gen_p = { "", stem = "inserted_e" } },
["wn"] = { gen_p = { "", stem = "inserted_ie" } },
["zk"] = { gen_p = { "", stem = "inserted_e" } },
["ókn"] = { gen_p = { "", stem = "inserted_ie" } },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łk"] = { gen_p = { "", stem = "inserted_e" } },
["łn"] = { gen_p = { "", stem = "inserted_e" } },
["łow"] = { gen_p = { "", stem = "lengthened" } },
},
},
["n common sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
["n common sg ę"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "ętom", dat_s = "ęciu", depr_p = {}, gen_p = "ąt", gen_s = "ęcia", ins_p = "ętami", ins_s = "ęciem", loc_p = "ętach", nom_p = "ęta" },
["mi"] = { dat_p = "onom", dat_s = "eniu", gen_p = "on", gen_s = "enia", ins_p = "onami", ins_s = "eniem", loc_p = "onach", nom_p = "ona" },
},
},
["n place pl a"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ot"] = { gen_p = "" },
["t"] = { gen_p = { "", stem = "lengthened" } },
["yt"] = { gen_p = "" },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
},
},
["n place pl e"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["aj"] = { gen_p = "ów" },
["alc"] = { gen_p = "ów" },
["ki"] = { dat_p = "m", gen_p = "ch", ins_p = "mi", loc_p = "ch" },
["l"] = { gen_p = "i" },
["n"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oc"] = { gen_p = "ów" },
["oj"] = { gen_p = "ów" },
["pel"] = { gen_p = { "i", "ów" } },
["r"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["rz"] = { gen_p = "y" },
["sel"] = { gen_p = "" },
["t"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["tel"] = { gen_p = "" },
["ul"] = { gen_p = "" },
["upc"] = { gen_p = { "", stem = "inserted_ie" } },
["w"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
["wc"] = { gen_p = { "", stem = "inserted_ie" } },
["wel"] = { gen_p = "" },
["ł"] = { dat_p = "ym", gen_p = "ych", ins_p = "ymi", loc_p = "ych" },
},
},
["n place pl i"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = { "", stem = "inserted_e" }, gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["ag"] = { gen_p = "" },
["ak"] = { gen_p = "ów" },
["ek"] = { gen_p = "" },
["ik"] = { gen_p = "" },
["isk"] = { gen_p = "" },
["kok"] = { gen_p = "ów" },
["og"] = { gen_p = "ów" },
["ok"] = { gen_p = "" },
["org"] = { gen_p = "ów" },
["ośk"] = { gen_p = "ów" },
["ruk"] = { gen_p = "ów" },
["rąg"] = { gen_p = "ów" },
["sęk"] = { gen_p = "ów" },
["ug"] = { gen_p = "" },
["uk"] = { gen_p = "" },
["yg"] = { gen_p = "" },
["yk"] = { gen_p = "" },
["zeg"] = { gen_p = "ów" },
["zg"] = { gen_p = "" },
["ók"] = { gen_p = "" },
["ąg"] = { gen_p = "" },
["łak"] = { gen_p = "" },
},
},
["n place pl y"] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_s = {} },
["abł"] = { gen_p = "ów" },
["ach"] = { gen_p = "ów" },
["br"] = { gen_p = "ów" },
["ep"] = { gen_p = "ów" },
["gon"] = { gen_p = "ów" },
["gw"] = { gen_p = { "", stem = "inserted_ie" } },
["hab"] = { gen_p = "ów" },
["hł"] = { gen_p = { "", stem = "inserted_e" } },
["id"] = { gen_p = { "", "ów" } },
["kan"] = { gen_p = "ów" },
["ndr"] = { gen_p = "ów" },
["ord"] = { gen_p = "ów" },
["os"] = { gen_p = "ów" },
["ow"] = { gen_p = { "", stem = "lengthened" } },
["ozd"] = { gen_p = "ów" },
["rob"] = { gen_p = "ów" },
["rod"] = { gen_p = { "", stem = "lengthened" } },
["roz"] = { gen_p = "ów" },
["rąd"] = { gen_p = "ów" },
["sł"] = { gen_p = "ów" },
["tos"] = { gen_p = "" },
["tr"] = { gen_p = "ów" },
["um"] = { gen_p = "ów" },
["was"] = { gen_p = "ów" },
["wł"] = { gen_p = "ów" },
["zch"] = { gen_p = "ów" },
["zyb"] = { gen_p = "ów" },
["ąs"] = { gen_p = "ów" },
["ład"] = { gen_p = "ów" },
["łod"] = { gen_p = "ów" },
["łoz"] = { gen_p = { "", stem = "lengthened" } },
["łyn"] = { gen_p = "ów" },
},
},
["n place sg "] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "" },
["nd"] = { dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" } },
},
},
["n place sg e"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a" },
["b"] = { nom_p = "e" },
["ci"] = { gen_p = { "", stem = "final_soft" } },
["e"] = { dat_p = "e", dat_s = "e", gen_p = "e", gen_s = "e", ins_p = "e", ins_s = "e", loc_p = "e", loc_s = "e", nom_p = "e" },
["gi"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["h"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ki"] = { dat_p = "m", dat_s = "emu", gen_p = "ch", gen_s = "ego", ins_p = "mi", loc_p = "ch", loc_s = "em", nom_p = "e" },
["l"] = { gen_p = "i" },
["n"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ni"] = { gen_p = { "", stem = "final_soft" } },
["oci"] = { gen_p = "" },
["oni"] = { gen_p = "" },
["p"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["r"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["s"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["t"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["w"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["z"] = { gen_p = "y" },
["ł"] = { dat_p = "ym", dat_s = "emu", gen_p = "ych", gen_s = "ego", ins_p = "ymi", loc_p = "ych", loc_s = "em", nom_p = "e" },
["ż"] = { gen_p = "y" },
},
},
["n place sg o"] = {
copies = { acc_p = "nom_p", acc_s = "nom_s", voc_p = "nom_p", voc_s = "nom_s" },
rules = {
[""] = { dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
["ad"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ag"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ajn"] = { gen_p = { "", stem = "inserted_e" } },
["amn"] = { gen_p = { { "", stem = "inserted_ie" }, "" } },
["arn"] = { gen_p = { { "", stem = "inserted_e" }, "" } },
["c"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ck"] = { gen_p = "" },
["e"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ew"] = { gen_p = "" },
["ewn"] = { gen_p = { "", stem = "inserted_ie" } },
["hn"] = { gen_p = { "", stem = "inserted_e" } },
["iw"] = { gen_p = "" },
["izn"] = { loc_s = "ie" },
["k"] = { gen_p = { "", stem = "inserted_e" }, ins_s = "iem", loc_s = "u" },
["kn"] = { gen_p = { "", stem = "inserted_ie" } },
["kł"] = { gen_p = { "", stem = "inserted_ie" } },
["l"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["ong"] = { ins_s = "iem", loc_s = "u" },
["osn"] = { gen_p = { "", stem = "inserted_ie" }, loc_s = { "e", stem = "palatal" } },
["oł"] = { gen_p = { "", stem = "lengthened" } },
["pn"] = { gen_p = { "", stem = "inserted_ie" } },
["sk"] = { gen_p = "" },
["sn"] = { loc_s = "ie" },
["st"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "fronted+palatal" }, nom_p = "a" },
["t"] = { dat_p = "o", dat_s = "o", gen_p = "o", gen_s = "o", ins_p = "o", ins_s = "o", loc_p = "o", loc_s = "o", nom_p = "o" },
["tw"] = { gen_p = "" },
["udn"] = { gen_p = { "", stem = "inserted_e" } },
["w"] = { gen_p = { "", "ów", { "", stem = "lengthened" } } },
["ówn"] = { gen_p = { "", stem = "inserted_ie" } },
["ł"] = { gen_p = { "", stem = "inserted_e" } },
["łot"] = { dat_p = "om", dat_s = "u", gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = { "e", stem = "palatal" }, nom_p = "a" },
},
},
["n place sg um"] = {
copies = { },
rules = {
[""] = { acc_p = { "a", "um" }, acc_s = "um", dat_p = { "om", "um" }, dat_s = "um", depr_p = {}, gen_p = "um", gen_s = "um", ins_p = { "ami", "um" }, ins_s = "um", loc_p = { "ach", "um" }, loc_s = "um", nom_p = { "a", "um" }, voc_p = { "a", "um" }, voc_s = "um" },
},
},
["n proper pl "] = {
copies = { acc_p = "nom_p", voc_p = "nom_p" },
rules = {
[""] = { acc_s = {}, dat_p = "", dat_s = {}, depr_p = {}, gen_p = "", gen_s = {}, ins_p = "", ins_s = {}, loc_p = "", loc_s = {}, nom_s = {}, voc_s = {} },
},
},
["n proper pl e"] = {
copies = { },
rules = {
[""] = { acc_p = "e", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "e", voc_s = {} },
},
},
["n proper pl y"] = {
copies = { },
rules = {
[""] = { acc_p = "y", acc_s = {}, dat_p = "om", dat_s = {}, depr_p = {}, gen_p = "ów", gen_s = {}, ins_p = "ami", ins_s = {}, loc_p = "ach", loc_s = {}, nom_s = {}, voc_p = "y", voc_s = {} },
},
},
["n proper sg "] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "", dat_p = "", dat_s = "", depr_p = {}, gen_p = "", gen_s = "", ins_p = "", ins_s = "", loc_p = "", loc_s = "", nom_p = "", voc_p = "", voc_s = "" },
["BS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["F"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["J"] = { acc_p = { "", "-oty" }, dat_p = { "", "-otom" }, dat_s = { "", "-otowi" }, gen_p = { "", "-otów" }, gen_s = { "", "-otu" }, ins_p = { "", "-otami" }, ins_s = { "", "-otem" }, loc_p = { "", "-otach" }, loc_s = { "", "-ocie" }, nom_p = { "", "-oty" }, voc_p = { "", "-oty" }, voc_s = { "", "-ocie" } },
["L"] = { acc_p = { "", "-e" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-i" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-u" }, nom_p = { "", "-e" }, voc_p = { "", "-e" }, voc_s = { "", "-u" } },
["N"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["OS"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ie" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ie" } },
["R"] = { acc_p = { "", "-y" }, dat_p = { "", "-om" }, dat_s = { "", "-owi" }, gen_p = { "", "-ów" }, gen_s = { "", "-u" }, ins_p = { "", "-ami" }, ins_s = { "", "-em" }, loc_p = { "", "-ach" }, loc_s = { "", "-ze" }, nom_p = { "", "-y" }, voc_p = { "", "-y" }, voc_s = { "", "-ze" } },
["k"] = { acc_p = {}, dat_p = {}, gen_p = {}, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
["m"] = { acc_p = { "", "y" }, dat_p = { "", "om" }, dat_s = { "", "owi" }, gen_p = { "", "ów" }, gen_s = { "", "u" }, ins_p = { "", "ami" }, ins_s = { "", "em" }, loc_p = { "", "ach" }, loc_s = { "", { "e", stem = "palatal" } }, nom_p = { "", "y" }, voc_p = { "", "y" }, voc_s = { "", { "e", stem = "palatal" } } },
["ś"] = { acc_p = {}, dat_p = {}, gen_p = {}, ins_p = {}, loc_p = {}, nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg e"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = "a", dat_p = "om", dat_s = "u", depr_p = {}, gen_p = "", gen_s = "a", ins_p = "ami", ins_s = "em", loc_p = "ach", loc_s = "u", nom_p = "a", voc_p = "a", voc_s = "e" },
},
},
["n proper sg o"] = {
copies = { acc_s = "nom_s" },
rules = {
[""] = { acc_p = {}, dat_p = {}, dat_s = "emu", depr_p = {}, gen_p = {}, gen_s = "ego", ins_p = {}, ins_s = "ym", loc_p = {}, loc_s = "ym", nom_p = {}, voc_p = {}, voc_s = {} },
},
},
["n proper sg um"] = {
copies = { acc_p = "nom_p", acc_s = "gen_s", dat_s = "gen_s", loc_s = "dat_s", voc_p = "nom_p", voc_s = "loc_s" },
rules = {
[""] = { dat_p = "om", depr_p = {}, gen_p = "ów", gen_s = "um", ins_p = "ami", ins_s = "um", loc_p = "ach", nom_p = "a" },
},
},
}
------------------------------------------------------------------------------------------------------------------------
-- Adjective rules --
------------------------------------------------------------------------------------------------------------------------
-- The slots of an adjective in table order: the singular by gender column (the masculine animate and inanimate share
-- most of them), then the virile and non-virile plural.
data.adjective_slots = {
"nom_m", "nom_f", "nom_n", "nom_mp_pers", "nom_p_not_mp_pers",
"gen_mn", "gen_f", "gen_p",
"dat_mn", "dat_f", "dat_p",
"acc_m_an", "acc_m_in", "acc_f", "acc_n", "acc_mp_pers", "acc_p_not_mp_pers",
"ins_mn", "ins_f", "ins_p",
"loc_mn", "loc_f", "loc_p",
"short",
}
-- The nominative endings of an adjective's lemma (its masculine singular), which pick its group in `adjective_groups`.
data.adjective_nominatives = { "y", "i" }
-- The kind of an adjective, for its title and category, given by the first pattern its lemma matches.
data.adjective_kinds = { { "y$", "hard" }, { "[kg]i$", "velar" }, { "", "soft" } }
-- How to find the masculine of an adjectival word given in another gender (''teściowa'' → ''teściowy'', ''tania'' →
-- ''tani'', ''wielkie'' → ''wielki'', and likewise a non-virile plural such as ''Zjednoczone''). Take the first ending
-- of its rule gender (`plural` for a plural) that it has, and replace it with the soft masculine ending if the ending
-- is `soft` or the stem ends in a letter of `soft_after`, and with the hard one otherwise.
data.adjective_lemma = {
endings = {
f = { { "ia", soft = true }, { "a" } },
n = { { "ie", soft = true }, { "e" } },
plural = { { "ie", soft = true }, { "e" } },
},
soft = "i",
hard = "y",
soft_after = { k = true, g = true },
}
-- The endings that follow the softened consonant of a virile nominative plural (''krew|ni'', ''pols|c|y''), used to
-- find the masculine of a virile adjectival word.
data.virile_endings = { "", "y" }
-- The noun slot that each adjective slot of an adjectival word fills, by the rule gender of the noun. `plural` is the
-- plural of every rule gender except `m-pr`, whose plural is in its own entry. The vocative is the nominative.
data.adjectival_slots = {
["m-pr"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m", nom_p = "nom_mp_pers", acc_p = "acc_mp_pers", voc_p = "nom_mp_pers",
gen_p = "gen_p", dat_p = "dat_p", ins_p = "ins_p", loc_p = "loc_p",
},
["m-anml"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_an", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
["m-in"] = {
nom_s = "nom_m", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_m_in", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_m",
},
f = {
nom_s = "nom_f", gen_s = "gen_f", dat_s = "dat_f", acc_s = "acc_f", ins_s = "ins_f", loc_s = "loc_f",
voc_s = "nom_f",
},
n = {
nom_s = "nom_n", gen_s = "gen_mn", dat_s = "dat_mn", acc_s = "acc_n", ins_s = "ins_mn", loc_s = "loc_mn",
voc_s = "nom_n",
},
plural = {
nom_p = "nom_p_not_mp_pers", gen_p = "gen_p", dat_p = "dat_p", acc_p = "acc_p_not_mp_pers",
ins_p = "ins_p", loc_p = "loc_p", voc_p = "nom_p_not_mp_pers",
},
}
-- The adjective slots that always have the forms of another slot, by source slot: the dative, instrumental and
-- locative feminine singular come from the genitive and accusative, the locative masculine singular from the
-- instrumental, and the locative plural from the genitive.
data.adjective_shared = {
gen_f = { "dat_f", "loc_f" }, acc_f = { "ins_f" }, ins_mn = { "loc_mn" }, gen_p = { "loc_p" },
}
-- The accusatives an adjective takes from other slots, as pairs of source and accusative.
data.adjective_accusatives = {
{ "nom_n", "acc_n" }, { "gen_mn", "acc_m_an" }, { "nom_m", "acc_m_in" }, { "gen_p", "acc_mp_pers" },
{ "nom_p_not_mp_pers", "acc_p_not_mp_pers" }, { "nom_mp_npers", "acc_mp_npers" }, { "nom_fp", "acc_fp" },
{ "nom_np", "acc_np" },
}
-- The last letter of an adjective stem that drops before an ending starting with the given letter (e.g. ''moj-'' +
-- ''-ich'' → ''moich'').
data.adjective_dropped = { j = "i" }
-- The archaic dative added by `archdat` (''polsku''): its ending, added to the adjective's stem, and its footnote (a
-- key of `notes`).
data.archaic_dative = { "u", note = "archaic" }
--[==[
The irregular adjectives of `<irreg>`, tried on the lemma in order.
`pattern` captures the stem (or `stem` gives it), and each of the `sets` adds forms to the stem (plus `add`), with an
optional footnote.
A set's `endings` give the slots in which a regular adjective has its own forms; the other slots are shared as for
every adjective (the dative, instrumental and locative feminine singular are the genitive, accusative and genitive; the
locative masculine singular is the instrumental; and the locative plural is the genitive). `-` as an ending means the
lemma itself. A set's `own` endings fill a slot without that sharing. `table` names a table with slots of its own
(`dwa` for the plural of ''dwa'' and ''oba'', and `plonly` for the plural only).
]==]
local function normal(nom_f, nom_n, nom_mp_pers, nom_p_not_mp_pers, gen_mn, gen_f, gen_p, dat_mn, dat_p, acc_f, ins_mn,
ins_p)
return {
nom_f = nom_f, nom_n = nom_n, nom_mp_pers = nom_mp_pers, nom_p_not_mp_pers = nom_p_not_mp_pers,
gen_mn = gen_mn, gen_f = gen_f, gen_p = gen_p, dat_mn = dat_mn, dat_p = dat_p, acc_f = acc_f, ins_mn = ins_mn,
ins_p = ins_p,
}
end
local DWA = {
table = "dwa",
sets = { {
own = {
nom_mp_pers = "aj", nom_mp_npers = "a", nom_fp = "ie", nom_np = "a", gen_p = { "u", "óch" },
dat_p = { "u", "om", "óm" }, ins_mnp = { "oma", "u" }, ins_fp = { "iema", "oma", "u" }, loc_p = { "u", "óch" },
},
} },
}
data.irregular_adjectives = {
{ pattern = "^(dw)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(ob)a$", table = DWA.table, sets = DWA.sets },
{ pattern = "^(.*[st]w)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*m)ój$", sets = {
{ add = "oj", endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
{ endings = normal("a", "e", nil, "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi"),
note = "literary or archaic" },
} },
{ pattern = "^(.*)ten$", sets = {
{ endings = normal("ta", "to", "ci", "te", "tego", "tej", "tych", "temu", "tym", nil, "tym", "tymi") },
{ own = { acc_f = "tę" } },
{ own = { acc_f = "tą" }, note = "proscribed but much more common" },
{ own = { ins_f = "tą" } },
} },
-- ''tenże'' declines like ''ten'', with ''-ż'' after a vowel and ''-że'' after a consonant.
{ pattern = "^(.*)tenże$", sets = {
{ endings = normal("taż", "toż", "ciż", "też", "tegoż", "tejże", "tychże", "temuż", "tymże", nil, "tymże", "tymiż") },
{ own = { acc_f = { "tęż", "tęże", "tąż", "tąże" }, ins_f = { "tąż", "tąże" } } },
} },
{ pattern = "^(.*czyj)$", sets = {
{ endings = normal("a", "e", "i", "e", "ego", "ej", "ich", "emu", "im", "ą", "im", "imi") },
} },
{ pattern = "^(.*sam)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*jed)en$", sets = {
{ add = "n", endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(on)$", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^ów$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^owy$", stem = "ow", sets = {
{ endings = normal("a", "o", "i", "e", "ego", "ej", "ych", "emu", "ym", "ą", "ym", "ymi") },
} },
{ pattern = "^(.*il)e$", table = "plonly", sets = {
{ endings = normal(nil, nil, "u", "e", nil, nil, "u", nil, "u", nil, nil, "u") },
{ own = { ins_p = "oma" }, note = "rare" },
} },
{ pattern = "^(.*wszys)tek$", sets = {
{ add = "tk", endings = normal("a", "o", nil, "ie", "iego", "iej", "ich", "iemu", "im", "ą", "im", "imi"),
archaic_dative = "u" },
{ add = "c", own = { nom_mp_pers = "y" } },
} },
}
--[==[
The adjective groups, keyed `adj common sg NOMINATIVE` (the lemma's ending, `y` or `i`) like the noun groups.
]==]
data.adjective_groups = {
["adj common sg "] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_f = "ą", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = "", nom_n = "e", nom_p_not_mp_pers = "e" },
["."] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["a"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ad"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {}, nom_mp_pers = { "", stem = "palatal" } },
["asz"] = { nom_mp_pers = { "i", stem = "virile" } },
["e"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["en"] = { acc_f = { "ą", stem = "reduced" }, dat_mn = { "emu", stem = "reduced" }, gen_f = { "ej", stem = "reduced" }, gen_mn = { "ego", stem = "reduced" }, gen_p = { "ych", stem = "reduced" }, ins_f = { "ą", stem = "reduced" }, ins_mn = { "ym", stem = "reduced" }, ins_p = { "ymi", stem = "reduced" }, nom_f = { "a", stem = "reduced" }, nom_mp_pers = { "", stem = "reduced+palatal" }, nom_n = { "e", stem = "reduced" }, nom_p_not_mp_pers = { "e", stem = "reduced" } },
["ent"] = { acc_f = {}, dat_mn = {}, gen_f = {}, gen_mn = {}, gen_p = {}, ins_f = {}, ins_mn = {}, ins_p = {} },
["l"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["n"] = { nom_mp_pers = { "", stem = "palatal" } },
["nd"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["o"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["om"] = { nom_mp_pers = { "", stem = "palatal" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["ron"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_mp_pers = "", nom_n = "", nom_p_not_mp_pers = "" },
["s"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
["t"] = { nom_mp_pers = { "", stem = "palatal" } },
["w"] = { nom_mp_pers = { "", stem = "palatal" } },
["é"] = { acc_f = "", dat_mn = "", gen_f = "", gen_mn = "", gen_p = "", ins_f = "", ins_mn = "", ins_p = "", nom_f = "", nom_n = "", nom_p_not_mp_pers = "" },
},
},
["adj common sg i"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "iemu", gen_f = "iej", gen_mn = "iego", gen_p = "ich", ins_mn = "im", ins_p = "imi", nom_f = "a", nom_mp_pers = { "y", stem = "palatal" }, nom_n = "ie", nom_p_not_mp_pers = "ie" },
["b"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["c"] = { acc_f = "ią", nom_f = "ia", nom_mp_pers = "i" },
["f"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["i"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["ks"] = { acc_f = { "", stem = "palatal" }, dat_mn = { "", stem = "palatal" }, gen_f = { "", stem = "palatal" }, gen_mn = { "", stem = "palatal" }, gen_p = { "", stem = "palatal" }, ins_mn = { "", stem = "palatal" }, ins_p = { "", stem = "palatal" }, nom_f = { "", stem = "palatal" }, nom_n = { "", stem = "palatal" }, nom_p_not_mp_pers = { "", stem = "palatal" } },
["l"] = { dat_mn = "emu", gen_f = "ej", gen_mn = "ego", nom_mp_pers = "i", nom_n = "e", nom_p_not_mp_pers = "e" },
["m"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["n"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["p"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["s"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["u"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["w"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
["y"] = { acc_f = "ją", dat_mn = "jemu", gen_f = "jej", gen_mn = "jego", nom_f = "ja", nom_mp_pers = "i", nom_n = "je", nom_p_not_mp_pers = "je" },
["z"] = { acc_f = { "ą", stem = "palatal" }, dat_mn = { "emu", stem = "palatal" }, gen_f = { "ej", stem = "palatal" }, gen_mn = { "ego", stem = "palatal" }, gen_p = { "ch", stem = "palatal" }, ins_mn = { "m", stem = "palatal" }, ins_p = { "mi", stem = "palatal" }, nom_f = { "a", stem = "palatal" }, nom_mp_pers = { "", stem = "palatal" }, nom_n = { "e", stem = "palatal" }, nom_p_not_mp_pers = { "e", stem = "palatal" } },
},
},
["adj common sg y"] = {
copies = { acc_m_an = "gen_mn", acc_m_in = "nom_m", acc_mp_pers = "gen_p", acc_n = "nom_n", acc_p_not_mp_pers = "nom_p_not_mp_pers", dat_f = "gen_f", dat_p = "ins_mn", ins_f = "acc_f", loc_f = "gen_f", loc_mn = "ins_mn", loc_p = "gen_p" },
rules = {
[""] = { acc_f = "ą", dat_mn = "emu", gen_f = "ej", gen_mn = "ego", gen_p = "ych", ins_mn = "ym", ins_p = "ymi", nom_f = "a", nom_mp_pers = { "", stem = "palatal" }, nom_n = "e", nom_p_not_mp_pers = "e" },
["c"] = { nom_mp_pers = "y" },
["dzn"] = { nom_mp_pers = "i" },
["h"] = { nom_mp_pers = { "i", stem = "virile" } },
["on"] = { nom_mp_pers = { "", stem = "fronted+palatal" } },
["r"] = { nom_mp_pers = { "y", stem = "palatal" } },
["ron"] = { nom_mp_pers = { "", stem = "palatal" } },
["soł"] = { nom_mp_pers = { "i", stem = "fronted+palatal" } },
["sz"] = { nom_mp_pers = { "i", stem = "virile" } },
["won"] = { nom_mp_pers = { "", stem = "palatal" } },
["z"] = { nom_mp_pers = "y" },
["ł"] = { nom_mp_pers = { "i", stem = "palatal" } },
["łon"] = { nom_mp_pers = { "", stem = "palatal" } },
["łzł"] = { nom_mp_pers = { { "i", stem = "virile" }, { "i", stem = "palatal" } } },
["ż"] = { nom_mp_pers = "y" },
},
},
}
return data
lnhgxdzhgbuajt5ecg7uk7fbm6h75l5
Bản mẫu:pl-ndecl
10
421111
2572863
2026-10-23T02:05:08Z
Hiyuune
50834
Trang mới: “{{#invoke:zlw-lch-decl|noun|lang=pl}}<!-- --><noinclude>{{documentation}}</noinclude>”
2572863
wikitext
text/x-wiki
{{#invoke:zlw-lch-decl|noun|lang=pl}}<!--
--><noinclude>{{documentation}}</noinclude>
iaubuvxpsr4dercj73jt8w0muk57ssb
Bản mẫu:sa-participle
10
421112
2572866
2026-10-23T05:57:20Z
Hiyuune
50834
Trang mới: “{{#invoke:sa-headword|show|Phân từ}}<noinclude>{{documentation}}</noinclude>”
2572866
wikitext
text/x-wiki
{{#invoke:sa-headword|show|Phân từ}}<noinclude>{{documentation}}</noinclude>
gsgx958326x7qvmzao2ul1lirpzm59b
Bản mẫu:sa-part
10
421113
2572867
2026-10-23T05:57:28Z
Hiyuune
50834
Đổi hướng đến [[Bản mẫu:sa-participle]]
2572867
wikitext
text/x-wiki
#redirect [[Bản mẫu:sa-participle]]
5phpdg40vf4jt0ut4wzaoezrtaxn9s2
Bản mẫu:R:sa:DCS
10
421114
2572880
2026-10-23T06:22:15Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-web |last=Hellwig |first=Oliver |entry=[{{{url|http://www.sanskrit-linguistics.org/dcs/index.php?contents=abfrage&word={{urlencode:<noinclude>saṃskṛta</noinclude><includeonly>{{{1|{{xlit|sa|{{pagename}}}}}}}</includeonly>}}&query_type=1&sort_by=alpha}}} <noinclude>saṃskṛta</noinclude><includeonly>{{{1|{{xlit|sa|{{pagename}}}}}}}</includeonly>] |work=DCS - The Digital Corpus of Sanskrit |location=Berlin, Đức |year=201…”
2572880
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-web
|last=Hellwig
|first=Oliver
|entry=[{{{url|http://www.sanskrit-linguistics.org/dcs/index.php?contents=abfrage&word={{urlencode:<noinclude>saṃskṛta</noinclude><includeonly>{{{1|{{xlit|sa|{{pagename}}}}}}}</includeonly>}}&query_type=1&sort_by=alpha}}} <noinclude>saṃskṛta</noinclude><includeonly>{{{1|{{xlit|sa|{{pagename}}}}}}}</includeonly>]
|work=DCS - The Digital Corpus of Sanskrit
|location=Berlin, Đức
|year=2010–{{CURRENTYEAR}}
|allowparams=url,1
|usenodot=1
}}<noinclude>{{refcat}}</noinclude>
b0zwox5kk1xrw7kzm9vgmlh573xdmw4
Bản mẫu:R:DCS
10
421115
2572881
2026-10-23T06:22:42Z
Hiyuune
50834
Đổi hướng đến [[Bản mẫu:R:sa:DCS]]
2572881
wikitext
text/x-wiki
#redirect [[Bản mẫu:R:sa:DCS]]
c326d7ntvjl0wjncm42l8hvp0tkcxyb
Mô đun:lki-translit
828
421116
2572889
2026-10-23T06:38:05Z
Hiyuune
50834
Trang mới: “-- Authors: JavaScript ئاسۆ; Lua Ghybu, Calak local export = {} local gsub = mw.ustring.gsub local U = require("Module:string/char") local mapping = { ["ا"] = "a", ["ب"] = "b", ["چ"] = "ç", ["ج"] = "c", ["د"] = "d", ["ە"] = "e", ["ێ"] = "ê", ["ف"] = "f", ["گ"] = "g", ["ھ"] = "h", ["ه"] = "h", ["ح"] = "ḧ", ["ژ"] = "j", ["ک"] = "k", ["ڵ"] = "ll", ["ل"] = "l", ["م"] = "m", ["ن"] = "n", ["ۆ"] = "o", ["پ"] = "p", ["ق"] = "q", ["ر"] = "r", ["…”
2572889
Scribunto
text/plain
-- Authors: JavaScript ئاسۆ; Lua Ghybu, Calak
local export = {}
local gsub = mw.ustring.gsub
local U = require("Module:string/char")
local mapping = {
["ا"] = "a", ["ب"] = "b", ["چ"] = "ç", ["ج"] = "c", ["د"] = "d", ["ە"] = "e", ["ێ"] = "ê", ["ف"] = "f", ["گ"] = "g",
["ھ"] = "h", ["ه"] = "h", ["ح"] = "ḧ", ["ژ"] = "j", ["ک"] = "k", ["ڵ"] = "ll", ["ل"] = "l", ["م"] = "m", ["ن"] = "n",
["ۆ"] = "o", ["پ"] = "p", ["ق"] = "q", ["ر"] = "r", ["ڕ"] = "r", ["س"] = "s", ["ش"] = "ş", ["ت"] = "t", ["ۊ"] = "ü",
["ڤ"] = "v", ["خ"] = "x", ["غ"] = "ẍ", ["ز"] = "z", ["ئ"] = "", ["ع"] = "'",
[U(0x200C)] = "", -- ZWNJ (zero-width non-joiner)
["ـ"] = "", -- kashida, no sound
-- numerals
["١"] = "1", ["٢"] = "2", ["٣"] = "3", ["٤"] = "4", ["٥"] = "5",
["٦"] = "6", ["٧"] = "7", ["٨"] = "8", ["٩"] = "9", ["٠"] = "0",
-- persian variants to numerals
["۱"] = "1", ["۲"] = "2", ["۳"] = "3", ["۴"] = "4", ["۵"] = "5",
["۶"] = "6", ["۷"] = "7", ["۸"] = "8", ["۹"] = "9", ["۰"] = "0",
}
-- punctuation (leave on separate lines)
local punctuation = {
["؟"] = "?", -- question mark
["،"] = ",", -- comma
["؛"] = ";", -- semicolon
["«"] = '“', -- quotation mark
["»"] = '”', -- quotation mark
["٪"] = "%", -- percent
["؉"] = "‰", -- per mille
["٫"] = ".", -- decimals
["٬"] = ",", -- thousand
}
-- translit
local function tr_word(word)
word = gsub(word, '.', punctuation)
--Remove punctuation at the end of the word.
local ponct
if mw.ustring.find(word, '[%.%!،؛»«٪؉٫٬%p]$') then
ponct = mw.ustring.sub(word, -1)
word = gsub(word, '[%.%!،؛»«٪؉٫٬%p]$', '')
else
word = word
ponct = ''
end
word = gsub(word, 'ه', "ە") --correct unicode for letter ە
-- U+0647 (Arabic letter heh) + U+200C (zero-width non-joiner) → U+06D5 (Arabic letter ae)
-- diacritics
word = gsub(word, 'ْ', "i") -- U+0652, Arabic sukun
word = gsub(word, 'ِ', "i") -- U+0650, Arabic kasra
--managing 'و' and 'ی'
word = gsub(word, 'و([iاێۆۊە])', "w%1") --و + vowel => w (e.g. wan)
word = gsub(word, 'ی([iاێۆۊە])', "y%1") --ی + vowel => y (e.g. yas)
word = gsub(word, '([iاێۆۊە])و', "%1w") --vowel + و => w (e.g. kew)
word = gsub(word, '([iاێۆۊە])ی', "%1y") --vowel + ی => y (e.g. bey)
word = gsub(word, '([iاێۆە])ۊ', "%1ẅ") --vowel + و => ẅ (e.g. taẅ)
word = gsub(word, '([iاۆۊە])ێ', "%1ÿ") --vowel + ێ => ÿ (e.g. şeÿtan)
word = gsub(word, '^و$', "û") --non-letter + 'و' + non-letter => û (=and)
word = gsub(word, '([^ء-يٱ-ەiwẅyÿ])و', "%1w") --non-letter + 'و' => w (e.g. wetar)
word = gsub(word, '^و', "w") --first 'و' => w (e.g. wetar)
word = gsub(word, 'یو', "îw") --'ی' + 'و' => îw (e.g. mîwe)
word = gsub(word, '([^و])یی', "%1îy") --'ی' + 'ی' => îy (e.g. kanîy)
word = gsub(word, 'وی', "uy") --'و' + 'ی' => uy (e.g. buyn)
word = gsub(word, 'وو', "û") --'و' + 'و' => û (e.g. nû)
word = gsub(word, 'ی', "î")
word = gsub(word, 'و', "u")
word = gsub(word, 'uu', "û") --'و' + 'و' => û (e.g. nû)
word = gsub(word, '([ء-يٱ-ەiîuûwẅyÿ])ڕ', "%1rr") --when 'ڕ' not at the beginning of a word => rr
word = gsub(word, '([ء-يٱ-ەiîuûwẅyÿ])ئ', "%1'") --when 'ئ' not at the beginning of a word => '
word = gsub(word, '.', mapping)
--insert i where applicable
word = gsub(word, 'll', "Ľ") -- temporary conversion to avoid seeing ll as 2 letters
word = gsub(word, 'rr', "Ŕ") -- temporary conversion to avoid seeing rr as 2 letters
word = gsub(word, '([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([fjlĽmnrŔsşvwẅxẍyÿz])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûüy])', "%1%2i%3%4") --e.g. grft -> grift
word = gsub(word, '([aeêiîouûü])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2%3i%4") --e.g. cejnt -> cejnit
word = gsub(word, '([fjlĽrŔsşwyz])([fjlĽmnrŔsşvwẅxẍyÿz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])', "%1i%2%3") --e.g. wrd -> wird
word = gsub(word, '([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])', "%1i%2%3") --e.g. prd -> pird
word = gsub(word, '([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$', "%1i%2") --like above
word = gsub(word, '([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])([^aeêiîouûü])', "%1%2i%3%4") --repeat the latter expression, in case skipped
word = gsub(word, '([^aeêiîouûü])([bcçdghḧkmnpqtvxẍ])([fjlĽmnrŔsşvwẅxẍyÿz])$', "%1%2i%3") --repeat the latter expression, in case skipped
word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])', "%1i%2%3") --e.g. ktk -> kitk
word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1i%2") --e.g. ktk -> kitk
word = gsub(word, '([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([^aeêiîouûü])', "%1%2i%3%4") --e.g. ktk -> kitk
word = gsub(word, '([^aeêiîouüy])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2i%3") --e.g. ktk -> kitk
word = gsub(word, '([^a-zçşêîûüĽŔ])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1%2i") --e.g. j -> ji
word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])$', "%1i") --e.g. j -> ji
--word = gsub(word, '([^a-zêîûçş0-9\'’])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])', "%1%2i%3") --e.g. bra -> bira
--word = gsub(word, '^([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvxẍz])', "%1i%2") --e.g. bra -> bira
--word = gsub(word, '([bcçdfghḧjklmnpqrsştvwẅxẍz][bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])([bcçdfghḧjklĽmnpqrŔsştvwẅxẍz])', "%1i%2") --e.g. aşkra -> aşkira
--word = gsub(word, 'si([tp][aeêiîouû])', "s%1") -- sp, st cluster
word = gsub(word, 'Ľ', "ll") --revert the temporary conversion
word = gsub(word, 'Ŕ', "rr") --revert the temporary conversion
-- Add the punctuation who had previously deleted.
word = word .. ponct
return word
end
function export.tr(text, lang, sc)
local textTab = {}
-- Create a word table separated by a space (%s).
for _, word in ipairs(mw.text.split(text, '%s+')) do
table.insert(textTab, word)
end
-- Tablo of translit.
for key, word in ipairs(textTab) do
textTab[key] = tr_word(word)
end
return table.concat(textTab, ' ')
end
return export
nyl8y43xba2k7f8nukjuhd2vo5fwsf8
Từ tái tạo:Tiếng Ấn-Iran nguyên thủy/ćatám
0
421117
2572890
2026-10-23T06:38:27Z
Hiyuune
50834
Trang mới: “{{reconstructed}} =={{langname|iir-pro}}== ==={{section|etym}}=== {{ety|iir-pro|id=trăm|:inh|ine-pro:*ḱm̥tóm<id:trăm>}} Từ {{inh|iir-pro|ine-pro|*ḱm̥tóm}}. ==={{section|num}}=== {{head|iir-pro|Số từ|head=*ćatám|g=n}}<ref>{{R:inc:IAIL|page=450|head=śatá-}}</ref> # [[trăm|Trăm]]. ===={{section|infl}}==== {{iir-decl-noun}} ===={{section|drv}}==== * {{l|ira-pro|*catákah|}} ** Kurd: {{q|có thể do ảnh hưởng từ Tân Ba Tư}} **: {{desc|ckb|…”
2572890
wikitext
text/x-wiki
{{reconstructed}}
=={{langname|iir-pro}}==
==={{section|etym}}===
{{ety|iir-pro|id=trăm|:inh|ine-pro:*ḱm̥tóm<id:trăm>}}
Từ {{inh|iir-pro|ine-pro|*ḱm̥tóm}}.
==={{section|num}}===
{{head|iir-pro|Số từ|head=*ćatám|g=n}}<ref>{{R:inc:IAIL|page=450|head=śatá-}}</ref>
# [[trăm|Trăm]].
===={{section|infl}}====
{{iir-decl-noun}}
===={{section|drv}}====
* {{l|ira-pro|*catákah|}}
** Kurd: {{q|có thể do ảnh hưởng từ Tân Ba Tư}}
**: {{desc|ckb|سەدە|ts=sada}}, {{l|ckb|صەدە|ts=sˤada|tr=ṣede}}
**: {{desc|kmr|sede|ts=sada}}
** {{desc|pal|-|ts=sadag}}
**: {{desc|pal|tr=stk'|sc=Phlv|sclang=1}}
**: {{desc|pal|𐬯𐬀𐬛𐬀|sclang=1}}
*** {{desc|fa-cls|سده|tr=sada}}
***: {{desc|prs|سده|tr=sada}}
***: {{desc|fa-ira|سده|tr=sade}}
***: {{desc|tg|сада}}
*** {{desc|ar|سدق|tr=sadaq|bor=1}}, {{l|ar|سذق|tr=saḏaq}}
**** {{desc|ps|صده|tr=sadá|bor=1}}, {{l|ps|سدۍ|tr=sadə́y}}
**** {{desc|sd|صدي|tr=sadī|bor=1}}
**** {{tooltip|1=borrowed|2=→}} Hindustan:
***** {{desc|hi|सदी}}
***** {{desc|ur|صدی|tr=sadī}}
****** {{desc|ps|صدي|tr=sadí|bor=1}}
===={{section|desc}}====
* {{desc|inc-pro|*śatám}}
** {{desc|sa|शत|tr=śatá}} {{see desc}}
* {{desc|ira-pro|*catám}}
** Trung Iran:
*** {{desc|ae|𐬯𐬀𐬙𐬀}} {{see desc}}
** Đông Bắc Iran:
*** {{desc|xsc-pro|*satā}} {{see desc}}
*** Sogdo-Bactria:
**** {{desc|xbc|σαδο|ts=saδ}}
**** {{desc|xco|syd|ts=sed, səd}}
**** {{desc|sog|-|ts=sat(u)}}
****: {{desc|sog|𐼼𐽂|sclang=1}}, {{l|sog|𐽔}}
****: {{desc|sog|𐫘𐫤|sc=Mani|sclang=1}}, {{l|sog|𐫯}}
****: {{desc|sog|ܣܬܘ|tr=stw|sc=Syrc|sclang=1}}
** Tây Nam Iran:
*** Ormuri-Parachi:
**** {{desc|oru|سو|ts=sū}}
**** {{desc|prc|سو|ts=sȫ}}
*** {{desc|ps|سل|tr=sël}}
*** {{desc|sgy|ساذ|tr=sāδ}}
*** {{desc|ydg|شور|tr=šōr}}
** Tây Bắc Iran:
*** {{desc|bal|سد|ts=sad}}
*** Kurd:
***: {{desc|ckb|سەد|ts=sad}}, {{l|ckb|صهد|ts=sˤad|tr=ṣed}} {{q|dạng {{l|ckb|صهد|tr=ṣed}} phổ biến ở một số phương ngữ Soran}}
***: {{desc|lki|سەد|ts=sad}}
***: {{desc|kmr|sed|ts=sad}}, {{l|kmr|sid|ts=sid}}
***: {{desc|sdh|سەد|ts=sad}}
*** {{desc|ira-mpr-pro|*sata-}}
**** Medi:
***** {{desc|xme-klt|са|ts=sa}}
**** Caspi:
***** {{desc|glk|سد|ts=sad, səd}}
***** Cổ {{desc|mzn|صد|tr=ṣd|ts=sad}}
****** {{desc|mzn|صد|tr=ṣd|ts=sad|سد|ts2=sad}}
**** {{desc|xpr|-|ts=sad}}
****: {{desc|xpr|𐭞|sclang=1}}
****: {{desc|xpr|𐫘𐫅|sc=Mani|sclang=1}}, {{l|xpr|𐫯}}
**** Zaza-Gurani
***** {{desc|hac|سەڎ|tr=seð̞|ts=sað̞}}
***** {{desc|zza|se|ts=sa}}
** Tây Nam Iran:
*** {{desc|peo|*θatam}} {{see desc}}
* {{desc|urj-pro|*śëta|bor=1}} {{see desc}}
* {{desc|qfa-yen-pro|<alt:*?>|bor=1}}
** {{desc|zko|astams̔e}}
** {{desc|xpm|útamssa}}
==={{section|ref}}===
{{reflist}}
[[en:Reconstruction:Proto-Indo-Iranian/ćatám]]
5lv5s7ymlk2suw3k0t1gsxctwnj1qls
nadī
0
421118
2572892
2026-10-23T06:44:51Z
Hiyuune
50834
Trang mới: “{{also|Phụ lục:Biến thể của "nadi"}} =={{langname|kaw}}== ==={{section|etym}}=== {{bor+|kaw|sa|नदी|t=[[sông]]}}. ==={{section|pron}}=== * {{IPA|kaw|/na.d̼i/}} * {{homophones|kaw|nadī|nāḍi|nāḍī}} * {{hyphenation|kaw|na|dī}} ==={{section|n}}=== {{head|kaw|Danh từ}} # [[sông]]. #: {{syn|kaw|baṅawan|gaṅgā|gĕṅga|kali|kaweri|loh|lwah|nadī|prawāha|saraswat|sarit|sindhu|suṅe|suṅhe|suṅeṅ|suṅhay|suṅi}} ===={{section|drv}}====…”
2572892
wikitext
text/x-wiki
{{also|Phụ lục:Biến thể của "nadi"}}
=={{langname|kaw}}==
==={{section|etym}}===
{{bor+|kaw|sa|नदी|t=[[sông]]}}.
==={{section|pron}}===
* {{IPA|kaw|/na.d̼i/}}
* {{homophones|kaw|nadī|nāḍi|nāḍī}}
* {{hyphenation|kaw|na|dī}}
==={{section|n}}===
{{head|kaw|Danh từ}}
# [[sông]].
#: {{syn|kaw|baṅawan|gaṅgā|gĕṅga|kali|kaweri|loh|lwah|nadī|prawāha|saraswat|sarit|sindhu|suṅe|suṅhe|suṅeṅ|suṅhay|suṅi}}
===={{section|drv}}====
{{col4|kaw|
| mahānadī
| sarwanadī
| suranadī
| nadīndra
| nadītaṭa
| nadītīra
}}
===={{section|desc}}====
* {{desc|jv|ꦤꦢꦶ}}
==={{section|further}}===
* {{R:Zoetmulder 1982}}
=={{langname|pi}}==
==={{section|alt}}===
{{pi-alt}}
==={{section|etym}}===
{{inh+|pi|sa|नदी}}.
==={{section|n}}===
{{pi-noun|f}}
# [[sông]].
===={{section|decl}}====
{{pi-decl-noun|g=f}}
==={{section|ref}}===
* {{R:pi:PTS}}
mav7fih1ea39pisxvwwdiqzihbz6twy
Thảo luận Thành viên:MinhVN1863
3
421119
2572894
2026-10-23T06:47:04Z
Hiyuune
50834
Chào mừng bạn đến với Wiktionary!
2572894
wikitext
text/x-wiki
== Chào mừng! ==
<div style="border:1px solid #FDA; vertical-align:top; padding: 0.5em; background-color: var(--background-color-progressive-subtle, #f1f4fd); border: 1px solid var(--border-color-progressive, #36c); color: var(--color-base, #202122)">
<div style="margin-left:0.5em; margin-right: 0.5em; margin-bottom:1em; margin-top: 0.1em;">
<span style="font-size: 1.3rem;">'''Xin chào MinhVN1863! Chào mừng bạn đến với Wiktionary tiếng Việt!'''</span>
<div class="plainlinks"><p style="margin-top:0.1em; margin-bottom: 1em;">
Wiktionary là từ điển mở mà ai cũng đều có thể chỉnh sửa. Cách sử dụng và quy định có thể gây khó khăn cho bạn, nhưng hãy dần học hỏi và '''[[Wiktionary:Táo bạo|mạnh dạn đóng góp]]'''. Các thông tin dưới đây sẽ có thể giúp bạn sử dụng và chỉnh sửa Wiktionary.</p></div>
</div>
<!-- Quan trọng -->
<div style="clear: both; margin-left: 1.5em; margin-right 1.5em; font-size: 100%;">
{| class="plainlinks" width="100%" style="margin:auto;"
| style="text-align:center; padding:4px" | [[File:OOjs UI icon search-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Trợ giúp:Tìm kiếm|Tìm kiếm Wiktionary]]''' <br />Tìm hiểu cách tìm và tra cứu mục từ trên Wiktionary.
| style="text-align:center; padding:4px" | [[File:OOjs UI icon lightbulb.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Yêu cầu mục từ|Yêu cầu mục từ]]'''<br />Nơi để bạn thêm những từ cần viết nhưng chưa có tại Wiktionary.
|-
| style="text-align:center; padding:4px" | [[File:OOjs UI icon userAvatar.svg|30px|link=|]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Cộng đồng|Cổng Cộng đồng Wiktionary tiếng Việt]]'''<br />Nơi tìm hiểu mọi thông tin về của Wiktionary.
| style="text-align:center; padding:4px" | [[File:OOjs UI icon articleCheck-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Quy định và hướng dẫn|Quy định và hướng dẫn]]''' <br />Chính sách của Wiktionary là gì? Xin vui lòng đọc nó trước khi thực hiện chỉnh sửa!
|-
| style="text-align:center; padding:4px" | [[File:OOjs UI icon edit-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Trợ giúp:Viết trang mới|Viết trang mới]]'''<br />Tham khảo cách viết trang hay mục từ mới tại Wiktionary.
| style="text-align:center; padding:4px" | [[File:OOjs UI icon tray.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Chỗ thử|Chỗ thử]]'''<br />Nơi để bạn viết nháp và thử nghiệm.
|-
| style="text-align:center; padding:4px" | [[File:OOjs UI icon wikiText.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Trợ giúp:Sửa đổi|Thực hiện sửa đổi]]'''<br />Tham khảo hướng dẫn sửa đổi và cùng bắt đầu sửa đổi Wiktionary.
| style="text-align:center; padding:4px" | [[File:OOjs UI icon helpNotice-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Bàn giúp đỡ|Bàn giúp đỡ]]'''<br />Nơi hỏi đáp khi gặp khó khăn trên Wiktionary.
|-
| style="text-align:center; padding:4px" | [[File:OOjs UI icon book-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Trợ giúp:Mục lục|Mục lục trợ giúp]]''' <br />Mục lục giúp bạn thông tin và hướng dẫn khác khi gặp khó khăn trong những lúc đóng góp!
| style="text-align:center; padding:4px" | [[File:OOjs UI icon speechBubbles-ltr.svg|30px|link=]]
| style="width:50%; padding:4px;" | '''[[Wiktionary:Thảo luận|Thảo luận chung]]'''<br />Nơi trao đổi ý kiến giữa bạn và các thành viên khác!
|}</div>
<div style="padding: 0.5em; margin-top: 1em; font-size: 1em; background-color: var(--background-color-progressive-subtle, #f1f4fd); border: 1px solid var(--border-color-progressive, #36c); color: var(--color-base, #202122)">
[[File:Vector sig vi.png|250px|right]]
'''Hãy luôn nhớ rằng, sau khi viết thảo luận xong thì đừng quên bước quan trọng đó là ký tên ở phía sau thảo luận'''. Phương thức ký tên được sử dụng trong Wiktionary không phải là viết tên trực tiếp, nhưng xin hãy ký tên bằng cách sử dụng 4 dấu ngã (<code><nowiki>--~~~~</nowiki></code>) hoặc bằng cách nhấp vào nút chữ ký ([[File:OOUI JS signature icon LTR.svg|20px|border]]) trong cửa sổ chỉnh sửa của phiên bản trình soạn thảo mã nguồn thông thường.<br/>
[[Wiktionary:Guestbook_for_non-Vietnamese_speakers|Welcome! If you are not good at Vietnamese or do not speak it, click here.]]
</div>
</div> <!-- Template:Welcome--> [[User:Hiyuune|<span style="font-family: Segoe UI Light;color:#FF69B4;letter-spacing:">Linh Huynh</span>]] ([[User talk:Hiyuune|<span style="color:#008080;">talk</span>]]) 06:47, ngày 23 tháng 10 năm 2026 (UTC)
jpabsd2i34bsjydk5aqftvxgrenemdz
នទី
0
421120
2572897
2026-10-23T06:48:55Z
Hiyuune
50834
Trang mới: “=={{langname|pi}}== ==={{section|alt}}=== {{pi-alt|Latn=nadī}} ==={{section|n}}=== {{pi-noun|f}} # {{pi-sc|Khmr|nadī}} ===={{section|decl}}==== {{pi-decl-noun|g=f}}”
2572897
wikitext
text/x-wiki
=={{langname|pi}}==
==={{section|alt}}===
{{pi-alt|Latn=nadī}}
==={{section|n}}===
{{pi-noun|f}}
# {{pi-sc|Khmr|nadī}}
===={{section|decl}}====
{{pi-decl-noun|g=f}}
e0mo61h12sjlow7c0cld6yrnq1lk4ut
Mô đun:pi-decl/noun/Lana
828
421121
2572898
2026-10-23T06:50:31Z
Hiyuune
50834
Trang mới: “local decl = {} decl['a'] = { m = {{'ᩮᩣ'}, {'ᩣ'}, {'ᩴ'}, {'ᩮ'}, {'ᩮᨶ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ', 'ᩣᨿ', 'ᨲ᩠ᨳᩴ'}, {'ᩣᨶᩴ'}, {'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ', 'ᩣ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ'}, {'ᩣᨶᩴ'}, {'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ', 'ᩮ'}, {'ᩮᩈᩩ'}, {''}, {'ᩣ'}}, n = {{'ᩴ'}, {'ᩣᨶᩥ'}, {'ᩴ'}, {'ᩣᨶᩥ'}, {'ᩮᨶ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ'…”
2572898
Scribunto
text/plain
local decl = {}
decl['a'] = {
m = {{'ᩮᩣ'}, {'ᩣ'}, {'ᩴ'}, {'ᩮ'},
{'ᩮᨶ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ', 'ᩣᨿ', 'ᨲ᩠ᨳᩴ'}, {'ᩣᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ', 'ᩣ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ'}, {'ᩣᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ', 'ᩮ'}, {'ᩮᩈᩩ'}, {''}, {'ᩣ'}},
n = {{'ᩴ'}, {'ᩣᨶᩥ'}, {'ᩴ'}, {'ᩣᨶᩥ'},
{'ᩮᨶ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ', 'ᩣᨿ', 'ᨲ᩠ᨳᩴ'}, {'ᩣᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ', 'ᩣ'}, {'ᩮᩉᩥ', 'ᩮᨽᩥ'}, {'ᩔ'}, {'ᩣᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ', 'ᩮ'}, {'ᩮᩈᩩ'}, {''}, {'ᩣᨶᩥ'}},
}
decl['ā'] = {
f = {{''}, {'ᨿᩮᩣ', ''}, {'⌫ᩴ'}, {'ᨿᩮᩣ', ''},
{'ᨿ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'ᨿ'}, {'ᨶᩴ'},
{'ᨿ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'ᨿ'}, {'ᨶᩴ'},
{'ᨿ', 'ᨿᩴ'}, {'ᩈᩩ'}, {'⌫ᩮ'}, {'ᨿᩮᩣ', ''}},
m = {{''}, {''}, {'⌫ᩴ'}, {'ᨶᩮ'},
{'⌫ᩮᨶ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩔ', 'ᨿ'}, {'ᨶᩴ'},
{'⌫ᩈ᩠ᨾᩣ', '⌫ᨾ᩠ᩉᩣ', ''}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩔ'}, {'ᨶᩴ'},
{'⌫ᩈ᩠ᨾᩥᩴ', '⌫ᨾ᩠ᩉᩥ', '⌫ᩮ'}, {'ᩈᩩ'}, {'⌫'}, {''}},
}
decl['aa'] = decl['ā']
decl['i'] = {
m = {{''}, {'⌫ᨿᩮᩣ', '⌫ᩦ'}, {'ᩴ'}, {'⌫ᨿᩮᩣ', '⌫ᩦ'},
{'ᨶᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ'}, {'⌫ᩦᩈᩩ'}, {''}, {'⌫ᨿᩮᩣ', '⌫ᩦ'}},
n = {{''}, {'⌫ᩦᨶᩥ', '⌫ᩦ'}, {'ᩴ'}, {'⌫ᩦᨶᩥ', '⌫ᩦ'},
{'ᨶᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ'}, {'⌫ᩦᩈᩩ'}, {''}, {'⌫ᩦᨶᩥ', '⌫ᩦ'}},
f = {{''}, {'ᨿᩮᩣ', '⌫ᩦ'}, {'ᩴ'}, {'ᨿᩮᩣ', '⌫ᩦ'},
{'ᨿᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᨿᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᨿᩣ', '⌫᩠ᨿᩣ'}, {'⌫ᩦᩉᩥ', '⌫ᩦᨽᩥ'}, {'ᨿᩣ'}, {'⌫ᩦᨶᩴ'},
{'ᨿᩣ', 'ᨿᩴ', '⌫᩠ᨿᩴ'}, {'⌫ᩦᩈᩩ'}, {''}, {'ᨿᩮᩣ', '⌫ᩦ'}},
}
decl['ī'] = {
m = {{''}, {'⌫ᩥᨶᩮᩣ', ''}, {'⌫ᩥᩴ', '⌫ᩥᨶᩴ'}, {'⌫ᩥᨶᩮᩣ', ''},
{'⌫ᩥᨶᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩥᩔ', '⌫ᩥᨶᩮᩣ'}, {'ᨶᩴ'},
{'⌫ᩥᩈ᩠ᨾᩣ', '⌫ᩥᨾ᩠ᩉᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩥᩔ', '⌫ᩥᨶᩮᩣ'}, {'ᨶᩴ'},
{'⌫ᩥᩈ᩠ᨾᩥᩴ', '⌫ᩥᨾ᩠ᩉᩥ'}, {'ᩈᩩ'}, {'⌫ᩥ'}, {'⌫ᩥᨶᩮᩣ', ''}},
f = {{''}, {'⌫ᩥᨿᩮᩣ', ''}, {'⌫ᩥᩴ', '⌫ᩥᨿᩴ'}, {'⌫ᩥᨿᩮᩣ', ''},
{'⌫ᩥᨿᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩥᨿᩣ'}, {'ᨶᩴ'},
{'⌫ᩥᨿᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩥᨿᩣ'}, {'ᨶᩴ'},
{'⌫ᩥᨿᩣ', '⌫ᩥᨿᩴ'}, {'ᩈᩩ'}, {'⌫ᩥ'}, {'⌫ᩥᨿᩮᩣ', ''}},
}
decl['ii'] = decl['ī']
decl['u'] = {
m = {{''}, {'⌫ᩅᩮᩣ', '⌫ᩪ'}, {'ᩴ'}, {'⌫ᩅᩮᩣ', '⌫ᩪ'},
{'ᨶᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ'}, {'⌫ᩪᩈᩩ'}, {''}, {'⌫ᩅᩮ', '⌫ᩅᩮᩣ'}},
n = {{''}, {'⌫ᩪᨶᩥ', '⌫ᩪ'}, {'ᩴ'}, {'⌫ᩪᨶᩥ', '⌫ᩪ'},
{'ᨶᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᩈ᩠ᨾᩣ', 'ᨾ᩠ᩉᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᩔ', 'ᨶᩮᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᩈ᩠ᨾᩥᩴ', 'ᨾ᩠ᩉᩥ'}, {'⌫ᩪᩈᩩ'}, {''}, {'⌫ᩪᨶᩥ', '⌫ᩪ'}},
f = {{''}, {'ᨿᩮᩣ', '⌫ᩪ'}, {'ᩴ'}, {'ᨿᩮᩣ', '⌫ᩪ'},
{'ᨿᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᨿᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᨿᩣ'}, {'⌫ᩪᩉᩥ', '⌫ᩪᨽᩥ'}, {'ᨿᩣ'}, {'⌫ᩪᨶᩴ'},
{'ᨿᩣ', 'ᨿᩴ'}, {'⌫ᩪᩈᩩ'}, {''}, {'ᨿᩮᩣ', '⌫ᩪ'}},
}
decl['ū'] = {
m = {{''}, {'⌫ᩩᨶᩮᩣ', ''}, {'⌫ᩩᩴ'}, {'⌫ᩩᨶᩮᩣ', ''},
{'⌫ᩩᨶᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩩᩔ', '⌫ᩩᨶᩮᩣ'}, {'ᨶᩴ'},
{'⌫ᩩᩈ᩠ᨾᩣ', '⌫ᩩᨾ᩠ᩉᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩩᩔ', '⌫ᩩᨶᩮᩣ'}, {'ᨶᩴ'},
{'⌫ᩩᩈ᩠ᨾᩥᩴ', '⌫ᩩᨾ᩠ᩉᩥ'}, {'ᩈᩩ'}, {'⌫ᩩ'}, {'⌫ᩩᨶᩮᩣ', ''}},
f = {{''}, {'⌫ᩩᨿᩮᩣ', ''}, {'⌫ᩩᩴ'}, {'⌫ᩩᨿᩮᩣ', ''},
{'⌫ᩩᨿᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩩᨿᩣ'}, {'ᨶᩴ'},
{'⌫ᩩᨿᩣ'}, {'ᩉᩥ', 'ᨽᩥ'}, {'⌫ᩩᨿᩣ'}, {'ᨶᩴ'},
{'⌫ᩩᨿᩣ', '⌫ᩩᨿᩴ'}, {'ᩈᩩ'}, {'⌫ᩩ'}, {'⌫ᩩᨿᩮᩣ', ''}},
}
decl['uu'] = decl['ū']
return decl
civn3vxtkubxqi01ckgw1dr7c6jje7k
ᨶᨴᩦ
0
421122
2572899
2026-10-23T06:50:50Z
Hiyuune
50834
Trang mới: “=={{langname|pi}}== ==={{section|alt}}=== {{pi-alt|Latn=nadī}} ==={{section|n}}=== {{pi-noun|f}} # {{pi-sc|Lana|nadī}} ===={{section|decl}}==== {{pi-decl-noun|g=f}}”
2572899
wikitext
text/x-wiki
=={{langname|pi}}==
==={{section|alt}}===
{{pi-alt|Latn=nadī}}
==={{section|n}}===
{{pi-noun|f}}
# {{pi-sc|Lana|nadī}}
===={{section|decl}}====
{{pi-decl-noun|g=f}}
lkjn5nilh0c4ld11nfop3q77drrodyv
𑀓𑀫𑀮
0
421123
2572904
2026-10-23T06:55:16Z
Hiyuune
50834
Trang mới: “=={{langname|pra}}== ==={{section|alt}}=== * {{alt|pra|𑀓𑀫𑀴||Paisaci}} ==={{section|etym}}=== {{etymon|pra|id=hoa sen|:inh|sa:कमल<id:hoa sen>}} {{dercat|pra|dra}} {{inh+|pra|sa|कमल}}. ==={{section|n}}=== {{pra-noun|m|a|g=n}}{{ref|{{R:pra:Sheth||224}}}}{{ref|{{R:inc:Pischel|115|passage=M. ''kamalaṁ va'' = ''kamalam iva''}}}}{{ref|{{R:pra-ard:Maharaj:1923|volume=2|page=407|column=407}}}} # [[hoa|Hoa]] [[sen]]. ===={{section|decl}}==== {{pra-mah-de…”
2572904
wikitext
text/x-wiki
=={{langname|pra}}==
==={{section|alt}}===
* {{alt|pra|𑀓𑀫𑀴||Paisaci}}
==={{section|etym}}===
{{etymon|pra|id=hoa sen|:inh|sa:कमल<id:hoa sen>}}
{{dercat|pra|dra}}
{{inh+|pra|sa|कमल}}.
==={{section|n}}===
{{pra-noun|m|a|g=n}}{{ref|{{R:pra:Sheth||224}}}}{{ref|{{R:inc:Pischel|115|passage=M. ''kamalaṁ va'' = ''kamalam iva''}}}}{{ref|{{R:pra-ard:Maharaj:1923|volume=2|page=407|column=407}}}}
# [[hoa|Hoa]] [[sen]].
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
===={{section|desc}}====
* {{desc|inc-apa|alt={{xlit|inc-apa|कमल}}}}
** {{desc|inc-apa|कमल<tr:->|sclang=1}} {{see desc}}
** {{desc|inc-apa|𑆑𑆩𑆬<tr:->|sclang=1}} {{see desc}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
{{C|pra|Hoa}}
1vq7fk7j0rpovld0sqvvkovmpc1ilfm
Bản mẫu:R:pra-ard:Maharaj:1923
10
421124
2572905
2026-10-23T06:56:16Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |author=Maharaj, Ratnachandraji |title=An Illustrated Ardha-Magadhi Dictionary |entry={{#if:{{{1|<noinclude>आइक्खइ</noinclude>}}}|{{{1|<noinclude>आइक्खइ</noinclude>}}}|{{chars|sa|{{xlit|pra|{{pagename}}}}}}}} |publisher=Kesarichand Bhandari |publisher2={{w|lang=en|Motilal Banarsidass}} |location2=Bungalow Road, Jawahar Nagar, Delhi 110007 |year=1923-1938 |year2=1988 |volume={{{volume|{{{vol|<noinclu…”
2572905
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|author=Maharaj, Ratnachandraji
|title=An Illustrated Ardha-Magadhi Dictionary
|entry={{#if:{{{1|<noinclude>आइक्खइ</noinclude>}}}|{{{1|<noinclude>आइक्खइ</noinclude>}}}|{{chars|sa|{{xlit|pra|{{pagename}}}}}}}}
|publisher=Kesarichand Bhandari
|publisher2={{w|lang=en|Motilal Banarsidass}}
|location2=Bungalow Road, Jawahar Nagar, Delhi 110007
|year=1923-1938
|year2=1988
|volume={{{volume|{{{vol|<noinclude>2</noinclude>}}}}}}
|page={{{page|<noinclude>3</noinclude>}}}
|column={{{column|<noinclude>1</noinclude>}}}
|propagateparams=pages
|allowparams=1,volume,vol,page,column
}}<noinclude>{{documentation}}{{refcat|pra}}</noinclude>
f2hssqzdwtpew0wuxsmtr1aesqsobi6
अकम्म
0
421125
2572906
2026-10-23T06:58:57Z
Hiyuune
50834
+ inc-apa, pra
2572906
wikitext
text/x-wiki
=={{langname|inc-apa}}==
==={{section|etym}}===
{{inh+|inc-apa|pra|अकम्म}}, từ {{inh|inc-apa|sa|अकर्मन्|अकर्म}}.
==={{section|n}}===
{{inc-apa-pos|n}}
# [[làm ác]], [[ác nghiệp]].
===={{section|decl}}====
{{inc-apa-decl-noun|m}}
=={{langname|pra}}==
==={{section|n}}===
{{pra-noun|g=n}}
# {{pra-sc}}
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
jhruy0tdwrxsc78etb2of7qk8h4a3sf
आलिंगण
0
421126
2572908
2026-10-23T07:16:03Z
Hiyuune
50834
Trang mới: “=={{langname|inc-apa}}== ==={{section|alt}}=== * {{alt|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟}} ==={{section|etym}}=== {{root|inc-apa|sa|आलिङ्ग्}} {{inh+|inc-apa|pra|𑀆𑀮𑀺𑀁𑀕𑀡}}, từ {{inh|inc-apa|sa|आलिङ्गन}}. ==={{section|n}}=== {{inc-apa-pos|n}}{{ref|{{R:inc:JSC||२९५}}}} # [[ôm|Ôm]] [[chặt]]. ===={{section|decl}}==== {{inc-apa-decl-noun|m}} {{inc-apa-decl-noun|n}} ==={{section|ref}}=== {{reflist}} =={{langname|pra}…”
2572908
wikitext
text/x-wiki
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟}}
==={{section|etym}}===
{{root|inc-apa|sa|आलिङ्ग्}}
{{inh+|inc-apa|pra|𑀆𑀮𑀺𑀁𑀕𑀡}}, từ {{inh|inc-apa|sa|आलिङ्गन}}.
==={{section|n}}===
{{inc-apa-pos|n}}{{ref|{{R:inc:JSC||२९५}}}}
# [[ôm|Ôm]] [[chặt]].
===={{section|decl}}====
{{inc-apa-decl-noun|m}}
{{inc-apa-decl-noun|n}}
==={{section|ref}}===
{{reflist}}
=={{langname|pra}}==
==={{section|n}}===
{{pra-noun|g=n}}
# {{pra-sc}}
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
mi6xboxtzazxw6g9c3csadezwxy43kj
𑀆𑀮𑀺𑀁𑀕𑀡
0
421127
2572909
2026-10-23T07:20:18Z
Hiyuune
50834
Trang mới: “=={{langname|pra}}== ==={{section|etym}}=== {{root|pra|sa|आलिङ्ग्}} {{inh+|pra|sa|आलिङ्गन}}. ==={{section|n}}=== {{pra-noun|g=n}}{{ref|{{R:pra:Sheth||119}}}} # [[ôm|Ôm]] [[chặt]]. ===={{section|decl}}==== {{pra-mah-decl-noun|n}} ===={{section|decl}}==== * {{desc|inc-apa||alt={{xlit|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟}}}} *: {{desc|inc-apa|आलिंगण|sclang=1|tr=-}} *: {{desc|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟|sclang=1|tr=-}} ==={{s…”
2572909
wikitext
text/x-wiki
=={{langname|pra}}==
==={{section|etym}}===
{{root|pra|sa|आलिङ्ग्}}
{{inh+|pra|sa|आलिङ्गन}}.
==={{section|n}}===
{{pra-noun|g=n}}{{ref|{{R:pra:Sheth||119}}}}
# [[ôm|Ôm]] [[chặt]].
===={{section|decl}}====
{{pra-mah-decl-noun|n}}
===={{section|decl}}====
* {{desc|inc-apa||alt={{xlit|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟}}}}
*: {{desc|inc-apa|आलिंगण|sclang=1|tr=-}}
*: {{desc|inc-apa|𑆄𑆬𑆴𑆁𑆓𑆟|sclang=1|tr=-}}
==={{section|ref}}===
{{reflist}}
k8dqnn4idtnvkxm443kh90nbmo9ypt4
𑆄𑆬𑆴𑆁𑆓𑆟
0
421128
2572910
2026-10-23T07:21:24Z
Hiyuune
50834
Trang mới: “=={{langname|inc-apa}}== ==={{section|alt}}=== * {{alt|inc-apa|आलिंगण}} ==={{section|etym}}=== {{root|inc-apa|sa|आलिङ्ग्}} {{inh+|inc-apa|pra|𑀆𑀮𑀺𑀁𑀕𑀡}}, từ {{inh|inc-apa|sa|आलिङ्गन}}. ==={{section|n}}=== {{inc-apa-pos|n|t}}{{ref|{{R:inc:Sandesarasaka||९६|col=1}}}} # [[ôm|Ôm]] [[chặt]]. ===={{section|decl}}==== {{inc-apa-decl-noun|m}} {{inc-apa-decl-noun|n}} ==={{section|ref}}=== {{box-top}} {{reflist…”
2572910
wikitext
text/x-wiki
=={{langname|inc-apa}}==
==={{section|alt}}===
* {{alt|inc-apa|आलिंगण}}
==={{section|etym}}===
{{root|inc-apa|sa|आलिङ्ग्}}
{{inh+|inc-apa|pra|𑀆𑀮𑀺𑀁𑀕𑀡}}, từ {{inh|inc-apa|sa|आलिङ्गन}}.
==={{section|n}}===
{{inc-apa-pos|n|t}}{{ref|{{R:inc:Sandesarasaka||९६|col=1}}}}
# [[ôm|Ôm]] [[chặt]].
===={{section|decl}}====
{{inc-apa-decl-noun|m}}
{{inc-apa-decl-noun|n}}
==={{section|ref}}===
{{box-top}}
{{reflist}}
{{box-bottom}}
l42bsf2qv1uh5oqrqreyss3bgdp1a2o
Bản mẫu:R:inc:Sandesarasaka
10
421129
2572911
2026-10-23T07:22:24Z
Hiyuune
50834
Trang mới: “{{#invoke:quote|call_template |template=cite-book |title=sa:सन्देश रासक |edition=1 |author={{w|en:Muni Jinavijaya|Muni Jinavijaya}} |author2={{w|en:Harivallabh Bhayani|Harivallabh Bhayani}} |location=Bombay |publisher={{w|en:Bharatiya Vidya Bhavan|Bharatiya Vidya Bhavan}} |series=Singhi Jain Series |year=1945 |oclc=1356147353 |entry={{{1|}}} |pageparam=2 |column={{{col|}}} |allowparams=1,col }}<noinclude>{{refcat|inc-apa}}</noinclude>”
2572911
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|title=sa:सन्देश रासक
|edition=1
|author={{w|en:Muni Jinavijaya|Muni Jinavijaya}}
|author2={{w|en:Harivallabh Bhayani|Harivallabh Bhayani}}
|location=Bombay
|publisher={{w|en:Bharatiya Vidya Bhavan|Bharatiya Vidya Bhavan}}
|series=Singhi Jain Series
|year=1945
|oclc=1356147353
|entry={{{1|}}}
|pageparam=2
|column={{{col|}}}
|allowparams=1,col
}}<noinclude>{{refcat|inc-apa}}</noinclude>
8vz071ukc31l7osbxj35hukbpp6ofi5
Thể loại:Phân từ hiện tại tiếng Ý
14
421130
2572922
2026-10-23T07:50:28Z
Hiyuune
50834
Trang mới: “{{auto cat}}”
2572922
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
mangag-
0
421131
2572923
2026-10-23T07:52:44Z
Hiyuune
50834
Trang mới: “=={{langname|tl}}== ==={{section|etym}}=== {{ety|tl|:af|mag-|<alt:*-ang-><aftype:infix><ng:trợ từ số nhiều><unc>|text=+|tree=1}} ==={{section|pron}}=== {{tl-pr|mangág-}} ==={{section|prefix}}=== {{tl-head|Tiền tố|mangág-|b=+}} # {{infl of|tl|mag-||pl}} ===={{section|drv}}==== {{prefixsee|tl}} ===={{section|see}}==== {{col|tl|magsi-|manga-|nangag-}} ==={{section|further}}=== * {{R:KWF Diksiyonaryo}} * {{R:Pambansang Diksiyonaryo}} * {{R:Vicassan's Pili…”
2572923
wikitext
text/x-wiki
=={{langname|tl}}==
==={{section|etym}}===
{{ety|tl|:af|mag-|<alt:*-ang-><aftype:infix><ng:trợ từ số nhiều><unc>|text=+|tree=1}}
==={{section|pron}}===
{{tl-pr|mangág-}}
==={{section|prefix}}===
{{tl-head|Tiền tố|mangág-|b=+}}
# {{infl of|tl|mag-||pl}}
===={{section|drv}}====
{{prefixsee|tl}}
===={{section|see}}====
{{col|tl|magsi-|manga-|nangag-}}
==={{section|further}}===
* {{R:KWF Diksiyonaryo}}
* {{R:Pambansang Diksiyonaryo}}
* {{R:Vicassan's Pilipino-English Dictionary 1978|page=1179}}
5d0bgndwszbiq02aetr1ov5io7k7kz4
jento
0
421132
2572924
2026-10-23T08:06:45Z
Hiyuune
50834
+ la
2572924
wikitext
text/x-wiki
=={{langname|la}}==
==={{section|pron}}===
* {{la-IPA|jentō}}
==={{section|v}}===
{{la-verb|1+|jentō}}
# {{alternative form of|la|ientō}}
===={{section|forms}}====
{{la-conj|1+|jentō}}
==={{section|ref}}===
* {{R:la:L&S}}
* {{R:la:Gaffiot}}
73k6bpsix8bqctuy5k3yad7ltapqgj2
počěsie
0
421133
2572926
2026-10-23T08:13:21Z
Hiyuune
50834
+ zlw-ocs
2572926
wikitext
text/x-wiki
=={{langname|zlw-ocs}}==
==={{section|etym}}===
{{ety|zlw-ocs|:af|po-|čas|-ie|text=+|tree=1}}
==={{section|pron}}===
* {{zlw-ocs-IPA}}
==={{section|n}}===
{{zlw-ocs-noun|n}}
# [[cơ hội|Cơ hội]].
# [[thời tiết|Thời tiết]].
===={{section|decl}}====
{{zlw-ocs-ndecl|n}}
==={{section|further}}===
* {{R:zlw-ocs:Gebauer}}
{{C|zlw-ocs|Thời tiết}}
ofvji3hny9plbe9e1uf7bf0n44dq2dl
UNHRC
0
421134
2572933
2026-10-23T09:24:56Z
Hiyuune
50834
Trang mới: “=={{langname|en}}== ==={{section|pr-noun}}=== {{en-proper noun}} # {{lb|en|UN}} {{init of|en|w:United Nations Human Rights Council}}”
2572933
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pr-noun}}===
{{en-proper noun}}
# {{lb|en|UN}} {{init of|en|w:United Nations Human Rights Council}}
q4dhup3zrz9t2utv1z9lm3vez9mwaz8
2572934
2572933
2026-10-23T09:25:12Z
Hiyuune
50834
/* Danh từ riêng */ (sử dụng [[MediaWiki:Gadget-AjaxEdit.js|AjaxEdit]])
2572934
wikitext
text/x-wiki
=={{langname|en}}==
==={{section|pr-noun}}===
{{en-proper noun}}
# {{lb|en|UN}} {{init of|en|w:en:United Nations Human Rights Council}}
it781598xb20pbiqj0ltpcgk4yiaqku
ccp
0
421135
2572936
2026-10-23T11:34:49Z
Hiyuune
50834
/* */
2572936
wikitext
text/x-wiki
{{also|CCP|ССР}}
=={{langname|mul}}==
==={{sect|symbol}}===
{{mul-symbol}}
# {{ISO 639|3|Chakma}}
==={{sect|see}}===
* {{langcat}}
1445v1fkz9dpg3p35159y0x0xtt2tnb
Thể loại:ncb:Gia súc
14
421136
2572947
2026-10-23T11:47:25Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572947
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Chăn nuôi
14
421137
2572948
2026-10-23T11:47:27Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572948
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Nông nghiệp
14
421138
2572950
2026-10-23T11:47:49Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572950
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khoa học xã hội môi trường
14
421139
2572951
2026-10-23T11:48:04Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572951
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Tiêu khiển
14
421140
2572952
2026-10-23T11:48:06Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572952
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Động vật học
14
421141
2572953
2026-10-23T11:48:08Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572953
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Sinh hoạt
14
421142
2572954
2026-10-23T11:48:10Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572954
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Nhân loại học
14
421143
2572955
2026-10-23T11:48:13Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572955
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Môi trường
14
421144
2572956
2026-10-23T11:48:21Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572956
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khoa học môi trường
14
421145
2572957
2026-10-23T11:48:24Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572957
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khoa học xã hội
14
421146
2572958
2026-10-23T11:48:26Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572958
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khoa học Trái Đất
14
421147
2572959
2026-10-23T11:48:47Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572959
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Phân ngành Giáp xác
14
421148
2572963
2026-10-23T11:49:54Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572963
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Mèo
14
421149
2572964
2026-10-23T11:49:58Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572964
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Họ Mèo
14
421150
2572965
2026-10-23T11:50:06Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572965
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Bộ Ăn thịt
14
421151
2572967
2026-10-23T11:50:17Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572967
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Cá
14
421152
2572968
2026-10-23T11:50:19Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572968
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Lớp Thú
14
421153
2572969
2026-10-23T11:50:25Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572969
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Phân ngành Có xương sống
14
421154
2572970
2026-10-23T11:50:31Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572970
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Ngành Dây sống
14
421155
2572972
2026-10-23T11:50:46Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572972
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Địa chất học
14
421156
2572973
2026-10-23T11:50:50Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572973
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Thành viên nữ trong gia đình
14
421157
2572979
2026-10-23T11:53:18Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572979
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Thành viên gia đình
14
421158
2572980
2026-10-23T11:53:38Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572980
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Bộ Mười chân
14
421159
2572983
2026-10-23T11:54:13Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572983
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Gia đình
14
421160
2572988
2026-10-23T11:55:11Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572988
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Chó
14
421161
2572989
2026-10-23T11:55:13Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572989
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Họ Chó
14
421162
2572990
2026-10-23T11:55:21Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572990
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Hiện tượng khí quyển
14
421163
2572996
2026-10-23T11:58:28Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572996
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Thể loại:ncb:Khí quyển
14
421164
2572998
2026-10-23T11:58:44Z
WhoAlone
40420
Trang mới: “{{auto cat}}”
2572998
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx