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 &mdash; 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ộ}}&nbsp;- bộ; {{taxfmt|Eusuchia|phân bộ}}&nbsp;- phân bộ; {{taxfmt|Alligatoridae|họ}}&nbsp;- họ; {{taxfmt|Caimaninae|phân họ}}&nbsp;- 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ộ}}&nbsp;- bộ; {{taxfmt|Eusuchia|phân bộ}}&nbsp;- phân bộ; {{taxfmt|Alligatoridae|họ}}&nbsp;- họ; {{taxfmt|Caimaninae|phân họ}}&nbsp;- phân họ; {{taxfmt|Caiman|chi}}&nbsp;- 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}}&nbsp;<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}}&nbsp;<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>&nbsp;<!-- 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