ဝိက်ရှေန်နရဳ mnwwiktionary https://mnw.wiktionary.org/wiki/%E1%80%9D%E1%80%AD%E1%80%80%E1%80%BA%E1%80%9B%E1%80%BE%E1%80%B1%E1%80%94%E1%80%BA%E1%80%94%E1%80%9B%E1%80%B3:%E1%80%99%E1%80%AF%E1%80%80%E1%80%BA%E1%80%9C%E1%80%AD%E1%80%80%E1%80%BA%E1%80%90%E1%80%99%E1%80%BA MediaWiki 1.46.0-wmf.26 case-sensitive မဳဒဳယာ တၟေင် ဓရီုကျာ ညးလွပ် ညးလွပ် ဓရီုကျာ ဝိက်ရှေန်နရဳ ဝိက်ရှေန်နရဳ ဓရီုကျာ ဝှာင် ဝှာင် ဓရီုကျာ မဳဒဳယာဝဳကဳ မဳဒဳယာဝဳကဳ ဓရီုကျာ ထာမ်ပလိက် ထာမ်ပလိက် ဓရီုကျာ ရီု ရီု ဓရီုကျာ ကဏ္ဍ ကဏ္ဍ ဓရီုကျာ အဆက်လက္ကရဴ အဆက်လက္ကရဴ ဓရီုကျာ ကာရန် ကာရန် ဓရီုကျာ အဘိဓာန် အဘိဓာန် ဓရီုကျာ ဗီုပြၚ်သိုၚ်တၟိ ဗီုပြၚ်သိုၚ်တၟိ ဓရီုကျာ TimedText TimedText talk မဝ်ဂျူ မဝ်ဂျူ ဓရီုကျာ Event Event talk မဝ်ဂျူ:languages/data/2 828 653 393773 393667 2026-05-01T18:40:13Z 咽頭べさ 33 Bot: ပလေဝ်ဒါန် 393773 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 -- Ideally, we want to move these into [[Module:languages/data]], but because (a) it's necessary to use require on that module, and (b) they're only used in this data module, it's less memory-efficient to do that at the moment. If it becomes possible to use mw.loadData, then these should be moved there. s["de-Latn-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove, from = {"æ", "œ", "ß"}, to = {"ae", "oe", "ss"} } s["de-Latn-standardchars"] = "AaÄäBbCcDdEeFfGgHhIiJjKkLlMmNnOoÖöPpQqRrSsẞßTtUuÜüVvWwXxYyZz" s["ka-stripdiacritics"] = {remove_diacritics = c.circ} s["no-sortkey"] = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } s["no-standardchars"] = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc s["tg-stripdiacritics"] = {remove_diacritics = c.grave .. c.acute} s["tk-stripdiacritics"] = {remove_diacritics = c.macron} local m = {} m["aa"] = { "အဖှာၚ်", 27811, "cus-eas", "Latn, Ethi", strip_diacritics = { Latn = {remove_diacritics = c.acute}, }, } m["ab"] = { "အာပ်ဟန်", 5111, "cau-abz", "Cyrl, Geor, Latn", translit = { Cyrl = "ab-translit", -- Geor translit in [[Module:scripts/data]] }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"] }, strip_diacritics = { Cyrl = { remove_diacritics = c.acute, from = {"^а%-"}, to = {"а"}, }, Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = { "х'ә", -- 3 chars "гь", "гә", "ӷь", "ҕь", "ӷә", "ҕә", "дә", "ё", "жь", "жә", "ҙә", "ӡә", "ӡ'", "кь", "кә", "қь", "қә", "ҟь", "ҟә", "ҫә", "тә", "ҭә", "ф'", "хь", "хә", "х'", "ҳә", "ць", "цә", "ц'", "ҵә", "ҵ'", "шь", "шә", "џь", -- 2 chars "ӷ", "ҕ", "ҙ", "ӡ", "қ", "ҟ", "ԥ", "ҧ", "ҫ", "ҭ", "ҳ", "ҵ", "ҷ", "ҽ", "ҿ", "ҩ", "џ", "ә", -- 1 char "^а", }, to = { "х" .. p[4], "г" .. p[1], "г" .. p[2], "г" .. p[5], "г" .. p[6], "г" .. p[7], "г" .. p[8], "д" .. p[1], "е" .. p[1], "ж" .. p[1], "ж" .. p[2], "з" .. p[2], "з" .. p[4], "з" .. p[5], "к" .. p[1], "к" .. p[2], "к" .. p[4], "к" .. p[5], "к" .. p[7], "к" .. p[8], "с" .. p[2], "т" .. p[1], "т" .. p[3], "ф" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[6], "ц" .. p[1], "ц" .. p[2], "ц" .. p[3], "ц" .. p[5], "ц" .. p[6], "ш" .. p[1], "ш" .. p[2], "ы" .. p[3], "г" .. p[3], "г" .. p[4], "з" .. p[1], "з" .. p[3], "к" .. p[3], "к" .. p[6], "п" .. p[1], "п" .. p[2], "с" .. p[1], "т" .. p[2], "х" .. p[5], "ц" .. p[4], "ч" .. p[1], "ч" .. p[2], "ч" .. p[3], "ы" .. p[1], "ы" .. p[2], "ь" .. p[1], "", } }, }, } m["ae"] = { "အဗါတ်သတေန်", 29572, "ira-cen", "Avst, Gujr", translit = { Avst = "Avst-translit" }, } m["af"] = { "အေက်ဖရိကာန်", 14196, "gmw-frk", "Latn, Arab", ancestors = "nl", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'", from = {"['ʼ]n"}, to = {"n" .. p[1]} } }, } m["ak"] = { "အကာန်", 28026, "alv-ctn", "Latn", } m["am"] = { "အာန်ဟာရိစ်", 28244, "sem-eth", "Ethi", translit = "Ethi-translit", } m["an"] = { "အာဒါဂေန်", 8765, "roa-nar", "Latn", } m["ar"] = { "အာရဗဳ", 13955, "sem-arb", "Arab, Hebr, Syrc, Brai, Nbat", translit = { Arab = "ar-translit" }, strip_diacritics = { Arab = "ar-stripdiacritics", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["as"] = { "အိသ်ဇြာံမဳ", 29401, "inc-bas", "as-Beng", ancestors = "inc-mas", translit = "as-translit", } m["av"] = { "အာဗာ", 29561, "cau-ava", "Cyrl, Latn, Arab", ancestors = "oav", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"], }, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = {"гъ", "гь", "гӏ", "ё", "кк", "къ", "кь", "кӏ", "лъ", "лӏ", "тӏ", "хх", "хъ", "хь", "хӏ", "цӏ", "чӏ"}, to = {"г" .. p[1], "г" .. p[2], "г" .. p[3], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "к" .. p[4], "л" .. p[1], "л" .. p[2], "т" .. p[1], "х" .. p[1], "х" .. p[2], "х" .. p[3], "х" .. p[4], "ц" .. p[1], "ч" .. p[1]} }, }, } m["ay"] = { "အာဲမာရာ", 4627, "sai-aym", "Latn", } m["az"] = { "အာက်သေတ်ဗါဲဇြေနဳ", 9292, "trk-ogz", "Latn, Cyrl, fa-Arab", ancestors = "trk-oat", dotted_dotless_i = true, strip_diacritics = { Latn = { from = {"ʼ"}, to = {"'"}, }, ["fa-Arab"] = { module = "ar-stripdiacritics", ["from"] = { "ۆ", "ۇ", "وْ", "ڲ", "ؽ", }, ["to"] = { "و", "و", "و", "گ", "ی", }, }, }, display_text = { Latn = { from = {"'"}, to = {"ʼ"} } }, sort_key = { Latn = { from = { "i", -- Ensure "i" comes after "ı". "ç", "ə", "ğ", "x", "ı", "q", "ö", "ş", "ü", "w" }, to = { "i" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "h" .. p[1], "i", "k" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1] } }, Cyrl = { from = {"ғ", "ә", "ы", "ј", "ҝ", "ө", "ү", "һ", "ҹ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "и" .. p[2], "к" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["ba"] = { "ဗေတ်ခဳ", 13389, "trk-kbu", "Cyrl", translit = "ba-translit", override_translit = true, sort_key = { from = {"ғ", "ҙ", "ё", "ҡ", "ң", "ө", "ҫ", "ү", "һ", "ә"}, to = {"г" .. p[1], "д" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "с" .. p[1], "у" .. p[1], "х" .. p[1], "э" .. p[1]} }, } m["be"] = { "ဗါလာရုဇ်", 9091, "zle", "Cyrl, Latn", ancestors = "zle-mbe", translit = { Cyrl = "be-translit", }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute, }, Latn = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"}, }, }, sort_key = { Cyrl = { remove_diacritics = c.grave .. c.acute, from = {"ґ", "ё", "і", "ў"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "у" .. p[1]} }, Latn = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ś", "ś", "Ź", "ź"}, from = {"ć", "č", "dz", "dź", "dž", "ch", "ł", "ń", "ś", "š", "ŭ", "ź", "ž"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "d" .. p[3], "h" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]} }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзІіЙйКкЛлМмНнОоПпРрСсТтУуЎўФфХхЦцЧчШшЫыЬьЭэЮюЯя", Latn = "AaBbCcĆćČčDdEeFfGgHhIiJjKkLlŁłMmNnŃńOoPpRrSsŚśŠšTtUuŬŭVvYyZzŹźŽž", (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["bg"] = { "ဗူလ်ဂရဳယာန်", 7918, "zls", "Cyrl", ancestors = "cu-bgm", translit = "bg-translit", strip_diacritics = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, sort_key = { remove_diacritics = c.grave .. c.acute, remove_exceptions = {"%f[^%z%s]ѝ%f[%z%s]"}, }, standard_chars = "АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЬьЮюЯя" .. c.punc, } m["bh"] = { "ဗဳဟာရဳ", 135305, "inc-eas", "Deva", } m["bi"] = { "ဗဳသလာမာ", 35452, "crp", "Latn", ancestors = "en", } m["bm"] = { "ဗီုဗရာ", 33243, "dmn-emn", "Latn, Nkoo", sort_key = { Latn = { from = {"ɛ", "ɲ", "ŋ", "ɔ"}, to = {"e" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1]} }, }, } m["bn"] = { "ဘၚ်္ဂါလဳ", 9610, "inc-bas", "Beng, Newa", ancestors = "inc-mbn", translit = { Beng = "bn-translit" }, } m["bo"] = { "တိဗိတ်", 34271, "sit-tib", "Tibt", -- sometimes Deva? ancestors = "xct", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["br"] = { "ဗရဳတေန်", 12107, "cel-brs", "Latn", ancestors = "xbm", sort_key = { from = {"ch", "c['ʼ’]h"}, to = {"c" .. p[1], "c" .. p[2]} }, } m["ca"] = { "ကာတ်တလာန်", 7026, "roa-ocr", "Latn", ancestors = "roa-oca", sort_key = {remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla .. "·"}, standard_chars = "AaÀàBbCcÇçDdEeÉéÈèFfGgHhIiÍíÏïJjLlMmNnOoÓóÒòPpQqRrSsTtUuÚúÜüVvXxYyZz·" .. c.punc, } m["ce"] = { "ချက်ခ်ချေၚ်", 33350, "cau-vay", "Cyrl, Latn, Arab", translit = { Cyrl = "cau-nec-translit", Arab = "ar-translit", }, override_translit = true, display_text = { Cyrl = s["cau-Cyrl-displaytext"] }, strip_diacritics = { Cyrl = s["cau-Cyrl-stripdiacritics"], Latn = s["cau-Latn-stripdiacritics"], }, sort_key = { Cyrl = { from = {"аь", "гӏ", "ё", "кх", "къ", "кӏ", "оь", "пӏ", "тӏ", "уь", "хь", "хӏ", "цӏ", "чӏ", "юь", "яь"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "к" .. p[2], "к" .. p[3], "о" .. p[1], "п" .. p[1], "т" .. p[1], "у" .. p[1], "х" .. p[1], "х" .. p[2], "ц" .. p[1], "ч" .. p[1], "ю" .. p[1], "я" .. p[1]} }, }, } m["ch"] = { "ချာမဝ်ရဝ်", 33262, "poz", "Latn", sort_key = { remove_diacritics = "'", from = {"å", "ch", "ñ", "ng"}, to = {"a" .. p[1], "c" .. p[1], "n" .. p[1], "n" .. p[2]} }, } m["co"] = { "ခဝ်သဳကာန်", 33111, "roa-itr", "Latn", sort_key = { from = {"chj", "ghj", "sc", "sg"}, to = {"c" .. p[1], "g" .. p[1], "s" .. p[1], "s" .. p[2]} }, standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìÏïJjLlMmNnOoÒòPpQqRrSsTtUuÙùÜüVvZz" .. c.punc, } m["cr"] = { "ခရေဝ်", 33390, "alg", "Latn, Cans", translit = { Cans = "cr-translit" }, } m["cs"] = { "ချက်ခ်", 9056, "zlw", "Latn", ancestors = "cs-ear", sort_key = { from = {"á", "č", "ď", "é", "ě", "ch", "í", "ň", "ó", "ř", "š", "ť", "ú", "ů", "ý", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "h" .. p[1], "i" .. p[1], "n" .. p[1], "o" .. p[1], "r" .. p[1], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "y" .. p[1], "z" .. p[1]} }, standard_chars = "AaÁáBbCcČčDdĎďEeÉéĚěFfGgHhIiÍíJjKkLlMmNnŇňOoÓóPpRrŘřSsŠšTtŤťUuÚúŮůVvYyÝýZzŽž" .. c.punc, } m["cu"] = { "ခရေတ်သလာဗဝ်နေတ်တြေံ", 35499, "zls", "Cyrs, Glag, Zname", translit = { Cyrs = "Cyrs-translit", Glag = "Glag-translit" }, -- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]] } m["cv"] = { "ချူဝါတ်", 33348, "trk-ogr", "Cyrl", ancestors = "cv-mid", translit = "cv-translit", override_translit = true, sort_key = { from = {"ӑ", "ё", "ӗ", "ҫ", "ӳ"}, to = {"а" .. p[1], "е" .. p[1], "е" .. p[2], "с" .. p[1], "у" .. p[1]} }, } m["cy"] = { "ဝေလ", 9309, "cel-brw", "Latn", ancestors = "wlm", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. "'", from = {"ch", "dd", "ff", "ng", "ll", "ph", "rh", "th"}, to = {"c" .. p[1], "d" .. p[1], "f" .. p[1], "g" .. p[1], "l" .. p[1], "p" .. p[1], "r" .. p[1], "t" .. p[1]} }, standard_chars = "ÂâAaBbCcDdEeÊêFfGgHhIiÎîLlMmNnOoÔôPpRrSsTtUuÛûWwŴŵYyŶŷ" .. c.punc, } m["da"] = { "ဒိန်နေတ်", 9035, "gmq-eas", "Latn", ancestors = "gmq-oda", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla, remove_exceptions = {"å"}, from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÆæØøÅå" .. c.punc, } m["de"] = { "ဂျာမာန်", 188, "gmw-hgm", "Latn, Latf, Brai", ancestors = "de-ear", sort_key = { Latn = s["de-Latn-sortkey"], Latf = s["de-Latn-sortkey"], }, standard_chars = { Latn = s["de-Latn-standardchars"], Latf = s["de-Latn-standardchars"], Brai = c.braille, c.punc } } m["dv"] = { "ဒိဝေဟဳ", 32656, "inc-ins", "Thaa, Diak", translit = { Thaa = "dv-translit", Diak = "Diak-translit", }, override_translit = true, } m["dz"] = { "သောၚ်ခါ", 33081, "sit-tib", "Tibt", ancestors = "xct", override_translit = true, -- Tibt translit, display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["ee"] = { "အဳဝါ", 30005, "alv-gbe", "Latn", sort_key = { remove_diacritics = c.tilde, from = {"ɖ", "dz", "ɛ", "ƒ", "gb", "ɣ", "kp", "ny", "ŋ", "ɔ", "ts", "ʋ"}, to = {"d" .. p[1], "d" .. p[2], "e" .. p[1], "f" .. p[1], "g" .. p[1], "g" .. p[2], "k" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "t" .. p[1], "v" .. p[1]} }, } m["el"] = { "ဂရေတ်", 9129, "grk", "Grek, Polyt, Brai", ancestors = "el-kth", translit = "el-translit", override_translit = true, -- Grek and Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { Grek = "΅·ͺ΄ΑαΆάΒβΓγΔδΕεέΈΖζΗηΉήΘθΙιΊίΪϊΐΚκΛλΜμΝνΞξΟοΌόΠπΡρΣσςΤτΥυΎύΫϋΰΦφΧχΨψΩωΏώ", Brai = c.braille, c.punc }, } m["en"] = { "အၚ်္ဂလိက်", 1860, "gmw-ang", "Latn, Brai, Shaw, Dsrt", -- entries in Shaw or Dsrt might require prior discussion wikimedia_codes = "en, simple", ancestors = "en-ear", sort_key = { Latn = { -- Many of these are needed for sorting language names. remove_diacritics = "'\"%-%.,%s·ʻʼ" .. c.diacritics, -- These are found in pagenames. from = {"[ɒæ🅱¢©ᴄðđəǝɜɡħʜıɨłŋɲøɔœꝑꝓꝕßʋ]"}, to = {{ ["ɒ"] = "a", ["æ"] = "ae", ["🅱"] = "b", ["¢"] = "c", ["©"] = "c", ["ᴄ"] = "c", ["ð"] = "d", ["đ"] = "d", ["ə"] = "e", ["ǝ"] = "e", ["ɜ"] = "e", ["ɡ"] = "g", ["ħ"] = "h", ["ʜ"] = "h", ["ı"] = "i", ["ɨ"] = "i", ["ł"] = "l", ["ŋ"] = "n", ["ɲ"] = "n", ["ø"] = "o", ["ɔ"] = "o", ["œ"] = "oe", ["ꝑ"] = "p", ["ꝓ"] = "p", ["ꝕ"] = "p", ["ß"] = "ss", ["ʋ"] = "v", }}, }, }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", Brai = c.braille, c.punc }, } m["eo"] = { "အေက်သပရေန်တဝ်", 143, "art", "Latn", sort_key = { remove_diacritics = c.grave .. c.acute, from = {"ĉ", "ĝ", "ĥ", "ĵ", "ŝ", "ŭ"}, to = {"c" .. p[1], "g" .. p[1], "h" .. p[1], "j" .. p[1], "s" .. p[1], "u" .. p[1]} }, standard_chars = "AaBbCcĈĉDdEeFfGgĜĝHhĤĥIiJjĴĵKkLlMmNnOoPpRrSsŜŝTtUuŬŭVvZz" .. c.punc, } m["es"] = { "သပုၚ်", 1321, "roa-cas", "Latn, Brai", ancestors = "es-ear", sort_key = { Latn = { remove_exceptions = {"ñ"}, remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla, from = {"ª", "æ", "ñ", "º", "œ"}, to = {"a", "ae", "n" .. p[1], "o", "oe"} }, }, standard_chars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["et"] = { "အေက်သတဝ်နဳယာန်", 9072, "urj-fin", "Latn", sort_key = { from = { "š", "ž", "õ", "ä", "ö", "ü", -- 2 chars "z" -- 1 char }, to = { "s" .. p[1], "s" .. p[3], "w" .. p[1], "w" .. p[2], "w" .. p[3], "w" .. p[4], "s" .. p[2] } }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvÕõÄäÖöÜü" .. c.punc, } m["eu"] = { "ဗက်ခ်", 8752, "euq", "Latn", sort_key = { from = {"ç", "ñ"}, to = {"c" .. p[1], "n" .. p[1]} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnÑñOoPpRrSsTtUuXxZz" .. c.punc, } m["fa"] = { "ပါရှေန်", 9168, "ira-swi", "fa-Arab, Hebr", ancestors = "fa-cls", strip_diacritics = { ["fa-Arab"] = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ٱ"}, -- character "ۂ" code U+06C2 to "ه"; hamzatu l-waṣli to a regular alif to = {"ه", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["ff"] = { "ဖှောတ်လာ", 33454, "alv-fwo", "Latn, Adlm", } m["fi"] = { "ဖေန်လာန်", 1412, "urj-fin", "Latn", display_text = { from = {"'"}, to = {"’"} }, strip_diacritics = { -- used to indicate gemination of the next consonant remove_diacritics = "ˣ", from = {"’"}, to = {"'"}, }, sort_key = { -- [[Appendix:Finnish alphabet#Collation]] + "aͤ" and "oͤ" as historical variants of "ä" and "ö". remove_diacritics = "'’:" .. c.diacritics, remove_exceptions = { "a[" .. c.ringabove .. c.diaer .. c.small_e .. "]", -- åäaͤ "o[" .. c.diaer .. c.tilde .. c.dacute .. c.small_e .. "]", -- öõőoͤ "u[" .. c.diaer .. c.dacute .. "]" -- üű }, from = {"æ", "[ðđ]", "ł", "ŋ", "œ", "ß", "þ", "u[" .. c.diaer .. c.dacute .. "]", "å", "aͤ", "o[" .. c.tilde .. c.dacute .. c.small_e .. "]", "ø", "(.)['%-]"}, to = {"ae", "d", "l", "n", "oe", "ss", "th", "y", "z" .. p[1], "ä", "ö", "ö", "%1"} }, standard_chars = "AaBbDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvYyÄäÖö" .. c.punc, } m["fj"] = { "ဖရဳဂျိ", 33295, "poz-pcc", "Latn", } m["fo"] = { "ဖာရဝ်သဳ", 25258, "gmq-ins", "Latn", sort_key = { from = {"á", "ð", "í", "ó", "ú", "ý", "æ", "ø"}, to = {"a" .. p[1], "d" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2]} }, standard_chars = "AaÁáBbDdÐðEeFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvYyÝýÆæØø" .. c.punc, } m["fr"] = { "ပြၚ်သေတ်", 150, "roa-oil", "Latn, Brai", ancestors = "frm", sort_key = { Latn = s["roa-oil-sortkey"] }, standard_chars = { Latn = "AaÀàÂâBbCcÇçDdEeÉéÈèÊêËëFfGgHhIiÎîÏïJjLlMmNnOoÔôŒœPpQqRrSsTtUuÙùÛûÜüVvXxYyZz", Brai = c.braille, c.punc }, } m["fy"] = { "ဖရေဝ်သဳယာန်လက္ကရဴ", 27175, "gmw-fri", "Latn", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer, from = {"y"}, to = {"i"} }, standard_chars = "AaâäàÆæBbCcDdEeéêëèFfGgHhIiïìYyỳJjKkLlMmNnOoôöòPpRrSsTtUuúûüùVvWwZz" .. c.punc, } m["ga"] = { "အာဲယျာလာန်", 9142, "cel-gae", "Latn, Latg", ancestors = "mga", sort_key = { remove_diacritics = c.acute, from = {"ḃ", "ċ", "ḋ", "ḟ", "ġ", "ṁ", "ṗ", "ṡ", "ṫ"}, to = {"bh", "ch", "dh", "fh", "gh", "mh", "ph", "sh", "th"} }, standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚúVv" .. c.punc, } m["gd"] = { "သကတ်ဂဴလိစ်", 9314, "cel-gae", "Latn, Latg", ancestors = "mga", sort_key = {remove_diacritics = c.grave .. c.acute}, standard_chars = "AaÀàBbCcDdEeÈèFfGgHhIiÌìLlMmNnOoÒòPpRrSsTtUuÙù" .. c.punc, } m["gl"] = { "ဂလဳသဳယာန်", 9307, "roa-gap", "Latn", sort_key = { remove_diacritics = c.acute, from = {"ñ"}, to = {"n" .. p[1]} }, standard_chars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíÏïLlMmNnÑñOoÓóPpQqRrSsTtUuÚúÜüVvXxZz" .. c.punc, } m["gu"] = { "ဂုဂျာရတဳ", 5137, "inc-wes", "Arab, Gujr", ancestors = "inc-mgu", translit = { Gujr = "gu-translit", }, strip_diacritics = { Arab = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.kasra .. c.shadda .. c.sukun}, Gujr = {remove_diacritics = "઼"}, }, } m["gv"] = { "မာက်", 12175, "cel-gae", "Latn", ancestors = "mga", sort_key = {remove_diacritics = c.cedilla .. "-"}, standard_chars = "AaBbCcÇçDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwYy" .. c.punc, } m["ha"] = { "ဟဴသာ", 56475, "cdc-wst", "Latn, Arab", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron} }, sort_key = { Latn = { from = {"ɓ", "b'", "ɗ", "d'", "ƙ", "k'", "sh", "ƴ", "'y"}, to = {"b" .. p[1], "b" .. p[2], "d" .. p[1], "d" .. p[2], "k" .. p[1], "k" .. p[2], "s" .. p[1], "y" .. p[1], "y" .. p[2]} }, }, } m["he"] = { "ဟဳဗရဝ်", 9288, "sem-can", "Hebr, Phnx, Brai, Samr", ancestors = "he-med", -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] -- Samr strip_diacritics, sort_key in [[Module:scripts/data]] -- Phnx translit in [[Module:scripts/data]] (NOTE: not present before, presumably an accidental omission) } m["hi"] = { "ဟိန္ဒဳ", 1568, "inc-hnd", "Deva, Kthi, Newa", translit = { Deva = "hi-translit" }, standard_chars = { Deva = "अआइईउऊएऐओऔकखगघङचछजझञटठडढणतथदधनपफबभमयरलवशषसहत्रज्ञक्षक़ख़ग़ज़झ़ड़ढ़फ़काखागाघाङाचाछाजाझाञाटाठाडाढाणाताथादाधानापाफाबाभामायारालावाशाषासाहात्राज्ञाक्षाक़ाख़ाग़ाज़ाझ़ाड़ाढ़ाफ़ाकिखिगिघिङिचिछिजिझिञिटिठिडिढिणितिथिदिधिनिपिफिबिभिमियिरिलिविशिषिसिहित्रिज्ञिक्षिक़िख़िग़िज़िझ़िड़िढ़िफ़िकीखीगीघीङीचीछीजीझीञीटीठीडीढीणीतीथीदीधीनीपीफीबीभीमीयीरीलीवीशीषीसीहीत्रीज्ञीक्षीक़ीख़ीग़ीज़ीझ़ीड़ीढ़ीफ़ीकुखुगुघुङुचुछुजुझुञुटुठुडुढुणुतुथुदुधुनुपुफुबुभुमुयुरुलुवुशुषुसुहुत्रुज्ञुक्षुक़ुख़ुग़ुज़ुझ़ुड़ुढ़ुफ़ुकूखूगूघूङूचूछूजूझूञूटूठूडूढूणूतूथूदूधूनूपूफूबूभूमूयूरूलूवूशूषूसूहूत्रूज्ञूक्षूक़ूख़ूग़ूज़ूझ़ूड़ूढ़ूफ़ूकेखेगेघेङेचेछेजेझेञेटेठेडेढेणेतेथेदेधेनेपेफेबेभेमेयेरेलेवेशेषेसेहेत्रेज्ञेक्षेक़ेख़ेग़ेज़ेझ़ेड़ेढ़ेफ़ेकैखैगैघैङैचैछैजैझैञैटैठैडैढैणैतैथैदैधैनैपैफैबैभैमैयैरैलैवैशैषैसैहैत्रैज्ञैक्षैक़ैख़ैग़ैज़ैझ़ैड़ैढ़ैफ़ैकोखोगोघोङोचोछोजोझोञोटोठोडोढोणोतोथोदोधोनोपोफोबोभोमोयोरोलोवोशोषोसोहोत्रोज्ञोक्षोक़ोख़ोग़ोज़ोझ़ोड़ोढ़ोफ़ोकौखौगौघौङौचौछौजौझौञौटौठौडौढौणौतौथौदौधौनौपौफौबौभौमौयौरौलौवौशौषौसौहौत्रौज्ञौक्षौक़ौख़ौग़ौज़ौझ़ौड़ौढ़ौफ़ौक्ख्ग्घ्ङ्च्छ्ज्झ्ञ्ट्ठ्ड्ढ्ण्त्थ्द्ध्न्प्फ्ब्भ्म्य्र्ल्व्श्ष्स्ह्त्र्ज्ञ्क्ष्क़्ख़्ग़्ज़्झ़्ड़्ढ़्फ़्।॥०१२३४५६७८९॰", c.punc }, } m["ho"] = { "ဟဳရဳမိုတု", 33617, "crp", "Latn", ancestors = "meu", } m["ht"] = { "ဟေဲယှေန် ခရေဝ်အဝ်လ်", 33491, "crp", "Latn", ancestors = "ht-sdm", sort_key = { from = { "oun", -- 3 chars "an", "ch", "è", "en", "ng", "ò", "on", "ou", "ui" -- 2 chars }, to = { "o" .. p[4], "a" .. p[1], "c" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "u" .. p[1] } }, } m["hu"] = { "ဟာန်ဂါရေဝ်", 9067, "urj-ugr", "Latn, Hung", ancestors = "ohu", sort_key = { Latn = { from = { "dzs", -- 3 chars "á", "cs", "dz", "é", "gy", "í", "ly", "ny", "ó", "ö", "ő", "sz", "ty", "ú", "ü", "ű", "zs", -- 2 chars }, to = { "d" .. p[2], "a" .. p[1], "c" .. p[1], "d" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "o" .. p[2], "o" .. p[3], "s" .. p[1], "t" .. p[1], "u" .. p[1], "u" .. p[2], "u" .. p[3], "z" .. p[1], } }, }, standard_chars = { Latn = "AaÁáBbCcDdEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóÖöŐőPpQqRrSsTtUuÚúÜüŰűVvWwXxYyZz", c.punc }, } m["hy"] = { "အာမေနဳယျာ", 8785, "hyx", "Armn, Brai", ancestors = "axm", -- Armn translit in [[Module:scripts/data]] override_translit = true, strip_diacritics = { Armn = { remove_diacritics = "՛՜՞՟", from = {"եւ", "<sup>յ</sup>", "<sup>ի</sup>", "<sup>է</sup>", "յ̵", "ՙ", "՚"}, to = {"և", "յ", "ի", "է", "ֈ", "ʻ", "’"} }, }, sort_key = { Armn = { from = { "ու", "եւ", -- 2 chars "և" -- 1 char }, to = { "ւ", "եվ", "եվ" } }, }, } m["hz"] = { "ဟေရေရုဝ်", 33315, "bnt-swb", "Latn", } m["ia"] = { "အေန်တာလိၚ်္ဂဝ်", 35934, "art", "Latn", } m["id"] = { "အိန်ဒဝ်နဳသဳယျာ", 9240, "poz-mly", "Latn", ancestors = "ms", standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz" .. c.punc, } m["ie"] = { "အေန်တာလိၚ်္ဂဝေ", 35850, "art", "Latn", type = "appendix-constructed", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ}, } m["ig"] = { "အေတ်ဗါဝ်", 33578, "alv-igb", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.macron}, sort_key = { from = {"gb", "gh", "gw", "ị", "kp", "kw", "ṅ", "nw", "ny", "ọ", "sh", "ụ"}, to = {"g" .. p[1], "g" .. p[2], "g" .. p[3], "i" .. p[1], "k" .. p[1], "k" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "o" .. p[1], "s" .. p[1], "u" .. p[1]} }, } m["ii"] = { "သေဲဆိုန်ယဳ", 34235, "tbq-nlo", "Yiii", translit = "ii-translit", } m["ik"] = { "အဳနုဗဳယာတ်", 27183, "esx-inu", "Latn", sort_key = { from = { "ch", "ġ", "dj", "ḷ", "ł̣", "ñ", "ng", "r̂", "sr", "zr", -- 2 chars "ł", "ŋ", "ʼ" -- 1 char }, to = { "c" .. p[1], "g" .. p[1], "h" .. p[1], "l" .. p[1], "l" .. p[3], "n" .. p[1], "n" .. p[2], "r" .. p[1], "s" .. p[1], "z" .. p[1], "l" .. p[2], "n" .. p[2], "z" .. p[2] } }, } m["io"] = { "ဣဒဝ်", 35224, "art", "Latn", } m["is"] = { "အာက်သလာန်", 294, "gmq-ins", "Latn", sort_key = { from = {"á", "ð", "é", "í", "ó", "ú", "ý", "þ", "æ", "ö"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "i" .. p[1], "o" .. p[1], "u" .. p[1], "y" .. p[1], "z" .. p[1], "z" .. p[2], "z" .. p[3]} }, standard_chars = "AaÁáBbDdÐðEeÉéFfGgHhIiÍíJjKkLlMmNnOoÓóPpRrSsTtUuÚúVvXxYyÝýÞþÆæÖö" .. c.punc, } m["it"] = { "အဳတခ်လဳ", 652, "roa-itr", "Latn", ancestors = "roa-oit", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.ringabove}, standard_chars = "AaÀàBbCcDdEeÈèÉéFfGgHhIiÌìLlMmNnOoÒòPpQqRrSsTtUuÙùVvZz" .. c.punc, } m["iu"] = { "အေၚ်နုကတဳတောတ်", 29921, "esx-inu", "Cans, Latn", translit = { Cans = "cr-translit" }, override_translit = true, } m["ja"] = { "ဂျပါန်", 5287, "jpx", "Jpan, Latn, Brai", ancestors = "ja-ear", translit = s["jpx-translit"], link_tr = true, display_text = s["jpx-displaytext"], strip_diacritics = s["jpx-stripdiacritics"], sort_key = s["jpx-sortkey"], } m["jv"] = { "ဂျာဗာ", 33549, "poz", "Latn, Java, Arab", ancestors = "kaw", translit = { Java = "jv-translit" }, link_tr = true, strip_diacritics = { Latn = {remove_diacritics = c.circ} -- Modern jv don't use ê }, sort_key = { Latn = { from = {"å", "dh", "é", "è", "ng", "ny", "th"}, to = {"a" .. p[1], "d" .. p[1], "e" .. p[1], "e" .. p[2], "n" .. p[1], "n" .. p[2], "t" .. p[1]} }, }, } m["ka"] = { "ဂျဝ်ဂျဳယျာ", 8108, "ccs-gzn", "Geor, Geok, Hebr", -- Hebr is used to write Judeo-Georgian ancestors = "ka-mid", -- Geor, Geok translit in [[Module:scripts/data]] override_translit = true, strip_diacritics = { Geor = s["ka-stripdiacritics"], Geok = s["ka-stripdiacritics"], }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["kg"] = { "ခါမ်ဂဝ်", 33702, "bnt-kng", "Latn", } m["ki"] = { "ခဳခူယူ", 33587, "bnt-kka", "Latn", } m["kj"] = { "ကောန်ယာမာ", 1405077, "bnt-ova", "Latn", } m["kk"] = { "ကဇက်", 9252, "trk-kno", "Cyrl, Latn, kk-Arab", translit = { Cyrl = { from = { "Ё", "ё", "Й", "й", "Нг", "нг", "Ӯ", "ӯ", -- 2 chars; are "Ӯ" and "ӯ" actually used? "А", "а", "Ә", "ә", "Б", "б", "В", "в", "Г", "г", "Ғ", "ғ", "Д", "д", "Е", "е", "Ж", "ж", "З", "з", "И", "и", "К", "к", "Қ", "қ", "Л", "л", "М", "м", "Н", "н", "Ң", "ң", "О", "о", "Ө", "ө", "П", "п", "Р", "р", "С", "с", "Т", "т", "У", "у", "Ұ", "ұ", "Ү", "ү", "Ф", "ф", "Х", "х", "Һ", "һ", "Ц", "ц", "Ч", "ч", "Ш", "ш", "Щ", "щ", "Ъ", "ъ", "Ы", "ы", "І", "і", "Ь", "ь", "Э", "э", "Ю", "ю", "Я", "я", -- 1 char }, to = { "E", "e", "İ", "i", "Ñ", "ñ", "U", "u", "A", "a", "Ä", "ä", "B", "b", "V", "v", "G", "g", "Ğ", "ğ", "D", "d", "E", "e", "J", "j", "Z", "z", "İ", "i", "K", "k", "Q", "q", "L", "l", "M", "m", "N", "n", "Ñ", "ñ", "O", "o", "Ö", "ö", "P", "p", "R", "r", "S", "s", "T", "t", "U", "u", "Ū", "ū", "Ü", "ü", "F", "f", "X", "x", "H", "h", "S", "s", "Ç", "ç", "Ş", "ş", "Ş", "ş", "", "", "Y", "y", "I", "ı", "", "", "É", "é", "Ü", "ü", "Ä", "ä", } } }, -- override_translit = true, sort_key = { Cyrl = { from = {"ә", "ғ", "ё", "қ", "ң", "ө", "ұ", "ү", "һ", "і"}, to = {"а" .. p[1], "г" .. p[1], "е" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "у" .. p[2], "х" .. p[1], "ы" .. p[1]} }, }, standard_chars = { Cyrl = "АаӘәБбВвГгҒғДдЕеЁёЖжЗзИиЙйКкҚқЛлМмНнҢңОоӨөПпРрСсТтУуҰұҮүФфХхҺһЦцЧчШшЩщЪъЫыІіЬьЭэЮюЯя", c.punc }, } m["kl"] = { "ဂရိန်လာန်", 25355, "esx-inu", "Latn", sort_key = { from = {"æ", "ø", "å"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} } } m["km"] = { "ခမေန်", 9205, "mkh-kmr", "Khmr", ancestors = "xhm", translit = "km-translit", } m["kn"] = { "ကာန်နဒါ", 33673, "dra-kan", "Knda, Tutg", ancestors = "dra-mkn", -- Knda translit in [[Module:scripts/data]] } m["ko"] = { "ကိုဝ်ရဳယျာ", 9176, "qfa-kor", "Kore, Brai", ancestors = "ko-ear", translit = { Kore = "ko-translit", }, -- Kore strip_diacritics in [[Module:scripts/data]] } m["kr"] = { "ကနူရဳ", 36094, "ssa-sah", "Latn, Arab", -- the sortkey and strip_diacritics are only for standard Kanuri; when dialectal entries get added, someone will have to work out how the dialects should be represented orthographically strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.breve} }, sort_key = { Latn = { from = {"ǝ", "ny", "ɍ", "sh"}, to = {"e" .. p[1], "n" .. p[1], "r" .. p[1], "s" .. p[1]} }, }, } m["ks"] = { "ကာဒ်ရှ်မဳယျာ", 33552, "inc-kas", "ks-Arab, Deva, Shrd, Latn", translit = { ["ks-Arab"] = "ks-Arab-translit", Deva = "ks-Deva-translit", -- Shrd translit in [[Module:scripts/data]] }, } -- "kv" is treated as "koi", "kpv", see [[WT:LT]] m["kw"] = { "ခမ်နေတ်", 25289, "cel-brs", "Latn", ancestors = "cnx", sort_key = { from = {"ch"}, to = {"c" .. p[1]} }, } m["ky"] = { "ကာဇေတ်", 9255, "trk-kkp", "Cyrl, Latn, Arab", translit = { Cyrl = "ky-translit" }, override_translit = true, sort_key = { Cyrl = { from = {"ё", "ң", "ө", "ү"}, to = {"е" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, } m["la"] = { "လပ်တေန်", 397, "itc-laf", "Latn, Ital", ancestors = "itc-ola", -- Ital translit in [[Module:scripts/data]] (NOTE: formerly not present, probably an accidental omission) display_text = { Latn = s["itc-Latn-displaytext"] }, strip_diacritics = { Latn = s["itc-Latn-stripdiacritics"] }, sort_key = { Latn = s["itc-Latn-sortkey"] }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiLlMmNnOoPpQqRrSsTtUuVvXx", c.punc }, } m["lb"] = { "လူဇေန်ဘာဂျ်", 9051, "gmw-hgm", "Latn, Brai", ancestors = "gmw-cfr", sort_key = { Latn = { from = {"ä", "ë", "é"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3]} }, }, } m["lg"] = { "လုဂန်ဒါ", 33368, "bnt-nyg", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ŋ"}, to = {"n" .. p[1]} }, } m["li"] = { "လိမ်ဗူရ်ဂိသ်", 102172, "gmw-frk", "Latn", ancestors = "dum", } m["ln"] = { "လေန်ဂါလာ", 36217, "bnt-bmo", "Latn", sort_key = { remove_diacritics = c.acute .. c.circ .. c.caron, from = {"ɛ", "gb", "mb", "mp", "nd", "ng", "nk", "ns", "nt", "ny", "nz", "ɔ"}, to = {"e" .. p[1], "g" .. p[1], "m" .. p[1], "m" .. p[2], "n" .. p[1], "n" .. p[2], "n" .. p[3], "n" .. p[4], "n" .. p[5], "n" .. p[6], "n" .. p[7], "o" .. p[1]} }, } m["lo"] = { "သေံလဴ", 9211, "tai-swe", "Laoo", translit = "lo-translit", sort_key = "Laoo-sortkey", standard_chars = "0-9ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯ-ໝ" .. c.punc, } m["lt"] = { "လေတ်တူယဵုနဳယျာ", 9083, "bat-eas", "Latn", ancestors = "olt", display_text = "lt-common", strip_diacritics = "lt-common", sort_key = "lt-common", standard_chars = "AaĄąBbCcČčDdEeĘęĖėFfGgHhIiĮįYyJjKkLlMmNnOoPpRrSsŠšTtUuŲųŪūVvZzŽž" .. c.punc, } m["lu"] = { "ဠူဘ-ကာတေန်ဂါ", 36157, "bnt-lub", "Latn", } m["lv"] = { "လပ်ဗဳယာ", 9078, "bat-eas", "Latn", strip_diacritics = { -- This attempts to convert vowels with tone marks to vowels either with or without macrons. Specifically, there should be no macrons if the vowel is part of a diphthong (including resonant diphthongs such pìrksts -> pirksts not #pīrksts). What we do is first convert the vowel + tone mark to a vowel + tilde in a decomposed fashion, then remove the tilde in diphthongs, then convert the remaining vowel + tilde sequences to macroned vowels, then delete any other tilde. We leave already-macroned vowels alone: Both e.g. ar and ār occur before consonants. FIXME: This still might not be sufficient. from = {"([Ee])" .. c.cedilla, "[" .. c.grave .. c.circ .. c.tilde .."]", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .. "?([^aAeEiIoOuU])", "([aAeEiIoOuU])" .. c.tilde .."?([lrnmuiLRNMUI])" .. c.tilde .."?$", "([iI])" .. c.tilde .. "?([eE])" .. c.tilde .. "?", "([aAeEiIuU])" .. c.tilde, c.tilde}, to = {"%1", c.tilde, "%1%2%3", "%1%2", "%1%2", "%1" .. c.macron} }, sort_key = { from = {"ā", "č", "ē", "ģ", "ī", "ķ", "ļ", "ņ", "š", "ū", "ž"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "l" .. p[1], "n" .. p[1], "s" .. p[1], "u" .. p[1], "z" .. p[1]} }, standard_chars = "AaĀāBbCcČčDdEeĒēFfGgĢģHhIiĪīJjKkĶķLlĻļMmNnŅņOoPpRrSsŠšTtUuŪūVvZzŽž" .. c.punc, } m["mg"] = { "မာလာဂါသဳ", 7930, "poz-bre", "Latn, Arab", } m["mh"] = { "မာချဲလဳ", 36280, "poz-mic", "Latn", sort_key = { from = {"ā", "ļ", "m̧", "ņ", "n̄", "o̧", "ō", "ū"}, to = {"a" .. p[1], "l" .. p[1], "m" .. p[1], "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "u" .. p[1]} }, } m["mi"] = { "မဝ်ရဳ", 36451, "poz-pep", "Latn", sort_key = { remove_diacritics = c.macron, from = {"ng", "wh"}, to = {"n" .. p[1], "w" .. p[1]} }, } m["mk"] = { "မက်သဳဒဝ်နဳယျာ", 9296, "zls", "Cyrl, Polyt", ancestors = "cu", translit = { Cyrl = "mk-translit", -- FIXME: formerly no translit specified for Polyt; unclear if the default [[Module:grc-translit]] is -- acceptable, so we disable it for now Polyt = false, }, strip_diacritics = { Cyrl = { remove_diacritics = c.acute, remove_exceptions = {"Ѓ", "ѓ", "Ќ", "ќ"} }, }, sort_key = { Cyrl = { remove_diacritics = c.grave, remove_exceptions = {"ѓ", "ќ"}, from = {"ѓ", "ѕ", "ј", "љ", "њ", "ќ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "т" .. p[1], "ч" .. p[1]} }, }, -- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { Cyrl = "АаБбВвГгДдЃѓЕеЖжЗзЅѕИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЌќУуФфХхЦцЧчЏџШш", c.punc }, } m["ml"] = { "မလေဝ်ယျလာမ်", 36236, "dra-mal", "Mlym", override_translit = true, -- Mlym translit in [[Module:scripts/data]] } m["mn"] = { "မန်ဂဝ်လဳယျာ", 9246, "xgn-cen", "Cyrl, Mong, Latn, Brai", ancestors = "cmg", translit = { Cyrl = "mn-translit", -- Mong translit in [[Module:scripts/data]] }, override_translit = true, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] strip_diacritics = { Cyrl = {remove_diacritics = c.grave .. c.acute}, }, sort_key = { Cyrl = { remove_diacritics = c.grave, from = {"ё", "ө", "ү"}, to = {"е" .. p[1], "о" .. p[1], "у" .. p[1]} }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйЛлМмНнОоӨөРрСсТтУуҮүХхЦцЧчШшЫыЬьЭэЮюЯя—", Brai = c.braille, c.punc }, } -- "mo" is treated as "ro", see [[WT:LT]] m["mr"] = { "မာရဒဳ", 1571, "inc-sou", "Deva, Modi", ancestors = "omr", translit = { Deva = "mr-translit", Modi = "mr-Modi-translit", }, strip_diacritics = { Deva = { from = {"च़", "ज़", "झ़"}, to = {"च", "ज", "झ"} }, }, } m["ms"] = { "မလေဝ်", 9237, "poz-mly", "Latn, ms-Arab", ancestors = "ms-cla", standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz", c.punc }, } m["mt"] = { "မာလ်တဳ", 9166, "sem-arb", "Latn", display_text = { from = {"'"}, to = {"’"} }, strip_diacritics = { from = {"’"}, to = {"'"}, }, ancestors = "sqr", sort_key = { from = { "ċ", "ġ", "ż", -- Convert into PUA so that decomposed form does not get caught by the next step. "([cgz])", -- Ensure "c" comes after "ċ", "g" comes after "ġ" and "z" comes after "ż". "g" .. p[1] .. "ħ", -- "għ" after initial conversion of "g". p[3], p[4], "ħ", "ie", p[5] -- Convert "ċ", "ġ", "ħ", "ie", "ż" into final output. }, to = { p[3], p[4], p[5], "%1" .. p[1], "g" .. p[2], "c", "g", "h" .. p[1], "i" .. p[1], "z" } }, } m["my"] = { "ဗၟာ", 9228, "tbq-brm", "Mymr", ancestors = "obr", translit = "my-translit", override_translit = true, sort_key = { from = {"ျ", "ြ", "ွ", "ှ", "ဿ"}, to = {"္ယ", "္ရ", "္ဝ", "္ဟ", "သ္သ"} }, } m["na"] = { "နာဥူရူ", 13307, "poz-mic", "Latn", } m["nb"] = { "နဝ်ဝေ ဗော်ခ်မဝ်", 25167, "gmq", "Latn", wikimedia_codes = "no", ancestors = "gmq-mno, da", -- da as an (but not the) ancestor of nb was agreed on - do not change without discussion sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["nd"] = { "နဒေဗဝ်လေဝ် လ္ပာ်သၟဝ်ကျာ", 35613, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["ne"] = { "နဳပဝ်", 33823, "inc-pah", "Deva, Newa", translit = { Deva = "ne-translit" }, } m["ng"] = { "အွန်ဒွန်ဂါ", 33900, "bnt-ova", "Latn", } m["nl"] = { "ဒါတ်", 7411, "gmw-frk", "Latn, Brai", ancestors = "dum", sort_key = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.diaer .. c.ringabove .. c.cedilla .. "'"}, }, standard_chars = { Latn = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÄäËëÏïÖöÜü", Brai = c.braille, c.punc }, } m["nn"] = { "နဝ်ဝေ နဳနိုတ်", 25164, "gmq-wes", "Latn", ancestors = "gmq-mno", strip_diacritics = { remove_diacritics = c.grave .. c.acute, }, sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["no"] = { "နဝ်ဝေ", 9043, "gmq-wes", "Latn", ancestors = "gmq-mno", sort_key = s["no-sortkey"], standard_chars = s["no-standardchars"], } m["nr"] = { "အာန်ဒေဗေလေဝ် လ္ပာ်ဒိုဟ်သမၠုၚ်ကျာ", 36785, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["nv"] = { "နာဝါဟဝ်", 13310, "apa", "Latn, Brai", sort_key = { remove_diacritics = c.acute .. c.ogonek, from = { "chʼ", "tłʼ", "tsʼ", -- 3 chars "ch", "dl", "dz", "gh", "hw", "kʼ", "kw", "sh", "tł", "ts", "zh", -- 2 chars "ł", "ʼ" -- 1 char }, to = { "c" .. p[2], "t" .. p[2], "t" .. p[4], "c" .. p[1], "d" .. p[1], "d" .. p[2], "g" .. p[1], "h" .. p[1], "k" .. p[1], "k" .. p[2], "s" .. p[1], "t" .. p[1], "t" .. p[3], "z" .. p[1], "l" .. p[1], "z" .. p[2] } }, } m["ny"] = { "ချဳချေန်ဝါ", 33273, "bnt-nys", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ}, sort_key = { from = {"ng'"}, to = {"ng"} }, } m["oc"] = { "အောက်စဳတာန်", 14185, "roa-ocr", "Latn, Hebr", ancestors = "pro", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.diaer .. c.cedilla, from = {"([lns])·h"}, to = {"%1h"} }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["oj"] = { "အဝ်ဂျဳဗဝေ", 33875, "alg", "Cans, Latn", sort_key = { Latn = { from = {"aa", "ʼ", "ii", "oo", "sh", "zh"}, to = {"a" .. p[1], "h" .. p[1], "i" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1]} }, }, } m["om"] = { "အဝ်ရဝ်မဝ်", 33864, "cus-eas", "Latn, Ethi", } m["or"] = { "အဝ်ရေဝ်ယာ", 33810, "inc-eas", "Orya", ancestors = "inc-mor", translit = "or-translit", } m["os"] = { "အဝ်ဇြဳယာန်", 33968, "xsc-sar", "Cyrl, Geor, Latn", ancestors = "oos", translit = { Cyrl = "os-translit", -- Geor translit in [[Module:scripts/data]] }, override_translit = true, display_text = { Cyrl = { from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute, from = {"æ"}, to = {"ӕ"} }, Latn = { from = {"ӕ"}, to = {"æ"} }, }, sort_key = { Cyrl = { from = {"ӕ", "гъ", "дж", "дз", "ё", "къ", "пъ", "тъ", "хъ", "цъ", "чъ"}, to = {"а" .. p[1], "г" .. p[1], "д" .. p[1], "д" .. p[2], "е" .. p[1], "к" .. p[1], "п" .. p[1], "т" .. p[1], "х" .. p[1], "ц" .. p[1], "ч" .. p[1]} }, }, } m["pa"] = { "ပါန်ချာပဳ", 58635, "inc-pan", "Guru, pa-Arab", ancestors = "inc-opa", translit = { Guru = "Guru-translit", ["pa-Arab"] = "pa-Arab-translit", }, strip_diacritics = { ["pa-Arab"] = { remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna, from = {"ݨ", "ࣇ"}, to = {"ن", "ل"} }, }, } m["pi"] = { "ပါဠိ", 36727, "inc-mid", "Latn, Brah, Deva, Beng, Sinh, Mymr, Thai, Lana, Laoo, Khmr, Cakm", --and also Khom ancestors = "sa", translit = { -- Brah translit in [[Module:scripts/data]] Deva = "sa-translit", Beng = "pi-translit", Sinh = "si-translit", Mymr = "pi-translit", Thai = "pi-translit", Lana = "pi-translit", Laoo = "pi-translit", Khmr = "pi-translit", Cakm = "Cakm-translit", }, strip_diacritics = { Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, Mymr = { remove_diacritics = c.VS01, }, }, sort_key = { -- FIXME: This needs to be converted into the current standardized format. from = {"ā", "ī", "ū", "ḍ", "ḷ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṭ", "([เโ])([ก-ฮ])", "([ເໂ])([ກ-ຮ])", "ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ", u(0xFE00), u(0x200D)}, to = {"a~", "i~", "u~", "d~", "l~", "m~", "n~", "n~~", "n~~~", "t~", "%2%1", "%2%1", "ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"} }, } m["pl"] = { "ပဝ်လာန်", 809, "zlw-lch", "Latn", ancestors = "zlw-mpl", sort_key = { from = {"ą", "ć", "ę", "ł", "ń", "ó", "ś", "ź", "ż"}, to = {"a" .. p[1], "c" .. p[1], "e" .. p[1], "l" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "z" .. p[1], "z" .. p[2]} }, standard_chars = "AaĄąBbCcĆćDdEeĘęFfGgHhIiJjKkLlŁłMmNnŃńOoÓóPpRrSsŚśTtUuWwYyZzŹźŻż" .. c.punc, } m["ps"] = { "ပါသတုန်", 58680, "ira-pat", "ps-Arab", strip_diacritics = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.zwarakay .. c.superalef}, } m["pt"] = { "ပဝ်တူဂြဳ", 5146, "roa-gap", "Latn, Brai", sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.diaer .. c.cedilla, from = {"ª", "æ", "º", "œ"}, to = {"a", "ae", "o", "oe"} }, }, standard_chars = { Latn = "AaÁáÂâÃãBbCcÇçDdEeÉéÊêFfGgHhIiÍíJjLlMmNnOoÓóÔôÕõPpQqRrSsTtUuÚúVvXxZz", Brai = c.braille, c.punc }, } m["qu"] = { "ခေန်ချူဝါ", 5218, "qwe", "Latn", } m["rm"] = { "ရဝ်မာန်", 13199, "roa-rhe", ancestors = "rm-old", "Latn", sort_key = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.diaer .. c.small_e}, } m["ro"] = { "ရဝ်မေနဳယျာ", 7913, "roa-eas", "Latn, Cyrl, Cyrs", translit = { Cyrl = "ro-translit" }, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute, from = {"ă", "â", "î", "ș", "ț"}, to = {"a" .. p[1], "a" .. p[2], "i" .. p[1], "s" .. p[1], "t" .. p[1]} }, Cyrl = { from = {"ӂ"}, to = {"ж" .. p[1]} }, }, -- Cyrs strip_diacritics, sort_key in [[Module:scripts/data]]; presumably not present standard_chars = { Latn = "AaĂăÂâBbCcDdEeFfGgHhIiÎîJjLlMmNnOoPpRrSsȘșTtȚțUuVvXxZz", Cyrl = "АаБбВвГгДдЕеЖжӁӂЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЫыЬьЭэЮюЯя", c.punc }, } m["ru"] = { "ရုဿျှာ", 7737, "zle", "Cyrl, Brai", ancestors = "zle-mru", translit = { Cyrl = "ru-translit" }, display_text = { Cyrl = { from = {"'"}, to = {"’"} }, }, strip_diacritics = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, remove_exceptions = {"Ё", "ё", "Ѣ̈", "ѣ̈", "Я̈", "я̈"}, from = {"’"}, to = {"'"}, }, }, sort_key = { Cyrl = { remove_diacritics = c.grave .. c.acute .. c.diaer, from = { "і", "ѣ", "ѳ", "ѵ" }, to = { "и" .. p[1], "ь" .. p[1], "я" .. p[2], "я" .. p[3] } }, }, standard_chars = { Cyrl = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя—", Brai = c.braille, (c.punc:gsub("'", "")) -- Exclude apostrophe. }, } m["rw"] = { "ရဝါန်ဒါ ရုန်ဒဳ", 3217514, "bnt-glb", "Latn", strip_diacritics = {remove_diacritics = c.acute .. c.circ .. c.macron .. c.caron}, } m["sa"] = { "သံသကြိုတ်", 11059, "inc", "as-Beng, Bali, Beng, Bhks, Brah, Mymr, xwo-Mong, Deva, Gujr, Guru, Gran, Hani, Java, Kthi, Knda, Kawi, Khar, Khmr, Laoo, Mlym, mnc-Mong, Marc, Modi, Mong, Nand, Newa, Orya, Phag, Ranj, Saur, Shrd, Sidd, Sinh, Soyo, Lana, Takr, Taml, Tang, Telu, Thai, Tibt, Tutg, Tirh, Zanb", --and also Khom; script codes sorted by canonical name rather than code for [[MOD:sa-convert]] translit = { Beng = "sa-Beng-translit", ["as-Beng"] = "sa-Beng-translit", -- Brah translit in [[Module:scripts/data]] Deva = "sa-translit", Gujr = "sa-Gujr-translit", Guru = "sa-Guru-translit", Java = "sa-Java-translit", Kthi = "sa-Kthi-translit", Khmr = "pi-translit", Knda = "sa-Knda-translit", Lana = "pi-translit", Laoo = "pi-translit", Mlym = "sa-Mlym-translit", Modi = "sa-Modi-translit", -- Mong, mnc-Mong, xwo-Mong translit in [[Module:scripts/data]] -- NOTE: Formerly used xal-translit for transliterating xwo-Mong but that only handles Cyrillic; it has -- code to transliterate xwo-Mong but it's broken so I've replaced it with the default xwo-translit. Mymr = "pi-translit", Orya = "sa-Orya-translit", -- Shrd translit in [[Module:scripts/data]] -- Sidd translit in [[Module:scripts/data]] Sinh = "si-translit", Taml = "sa-Taml-translit", Telu = "sa-Telu-translit", Thai = "pi-translit", -- Tibt translit in [[Module:scripts/data]] }, -- Mong display_text and strip_diacritics in [[Module:scripts/data]] -- Tibt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] strip_diacritics = { Thai = { from = {"ึ", u(0xF700), u(0xF70F)}, -- FIXME: Not clear what's going on with the PUA characters here. to = {"ิํ", "ฐ", "ญ"} }, Mymr = { remove_diacritics = c.VS01, }, Deva = { -- Don't use remove_diacritics for accent marks, as १ and ३ should also be removed if (and only if) they carry any. from = {"[१३]?[" .. c.anudatta .. c.udatta .. c.dsvarita .. c.tsvarita .. "]+"}, to = {""}, }, }, sort_key = { Latn = { from = {"ā", "ī", "ū", "ḍ", "ḷ", "ḹ", "m[" .. c.dotabove .. c.dotbelow .. "]", "ṅ", "ñ", "ṇ", "ṛ", "ṝ", "ś", "ṣ", "ṭ"}, to = {"a~", "i~", "u~", "d~", "l~", "l~~", "m~", "n~", "n~~", "n~~~", "r~", "r~~", "s~", "s~~", "t~"}, }, Thai = "Thai-sortkey", Laoo = "Laoo-sortkey", Lana = { -- Tai Tham from = {"ᩔ", "ᩕ", "ᩖ", "ᩘ", "([ᨭ-ᨱ])ᩛ", "([ᨷ-ᨾ])ᩛ", "ᩤ"}, to = {"ᩈ᩠ᩈ", "᩠ᩁ", "᩠ᩃ", "ᨦ᩠", "%1᩠ᨮ", "%1᩠ᨻ", "ᩣ"}, }, Mymr = { remove_diacritics = c.VS01, }, -- FIXME: The previous sort key which mixed all scripts removed ZWJ; I don't know which script(s) this was -- intended for and there are no other languages which remove it in the sort key AFAIK. If it needs to be -- removed, specify the script(s) it needs to be removed under or add handling for the "all" script that applies -- regardless of script. --all = { -- remove_diacritics = c.ZWJ, --}, }, } m["sc"] = { "သာဒဳနဳယာန်", 33976, "roa-sou", "Latn", } m["sd"] = { "သိန္ဓိ", 33997, "inc-snd", "sd-Arab, Deva, Sind, Khoj", translit = { Sind = "Sind-translit", ["sd-Arab"] = "sd-Arab-translit" }, strip_diacritics = { ["sd-Arab"] = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {"ٱ"}, to = {"ا"} }, }, } m["se"] = { "သာမိ သၟဝ်ကျာ", 33947, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, strip_diacritics = {remove_diacritics = c.macron .. c.dotbelow .. "'ˈ"}, sort_key = { from = {"á", "č", "đ", "ŋ", "š", "ŧ", "ž"}, to = {"a" .. p[1], "c" .. p[1], "d" .. p[1], "n" .. p[1], "s" .. p[1], "t" .. p[1], "z" .. p[1]} }, standard_chars = "AaÁáBbCcČčDdĐđEeFfGgHhIiJjKkLlMmNnŊŋOoPpRrSsŠšTtŦŧUuVvZzŽž" .. c.punc, } m["sg"] = { "သၚ်ဂဝ်", 33954, "crp", "Latn", ancestors = "ngb", } m["sh"] = { "သာဗ်ခြဝ်ဨရှဳယာန်", 9301, "zls", "Latn, Cyrl, Glag, Arab", ietf_subtag = "hbs", -- ISO 639-3 code, since "sh" is deprecated from ISO 639-1 wikimedia_codes = "sh, bs, hr, sr", strip_diacritics = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"Ć", "ć", "Ś", "ś", "Ź", "ź"} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"З́", "з́", "С́", "с́"} }, }, sort_key = { Latn = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"ć", "ś", "ź"}, from = {"č", "ć", "dž", "đ", "lj", "nj", "š", "ś", "ž", "ź"}, to = {"c" .. p[1], "c" .. p[2], "d" .. p[1], "d" .. p[2], "l" .. p[1], "n" .. p[1], "s" .. p[1], "s" .. p[2], "z" .. p[1], "z" .. p[2]} }, Cyrl = { remove_diacritics = c.grave .. c.acute .. c.tilde .. c.macron .. c.dgrave .. c.invbreve, remove_exceptions = {"з́", "с́"}, from = {"ђ", "з́", "ј", "љ", "њ", "с́", "ћ", "џ"}, to = {"д" .. p[1], "з" .. p[1], "и" .. p[1], "л" .. p[1], "н" .. p[1], "с" .. p[1], "т" .. p[1], "ч" .. p[1]} }, }, standard_chars = { Latn = "AaBbCcČčĆćDdĐđEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž", Cyrl = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш", c.punc }, } m["si"] = { "သိၚ်္ဃဵုရ်", 13267, "inc-ins", "Sinh", translit = "si-translit", override_translit = true, } m["sk"] = { "သလဝ်ဝေန်နဳယျာ", 9058, "zlw", "Latn", ancestors = "zlw-osk", sort_key = {remove_diacritics = c.acute .. c.circ .. c.diaer .. c.caron}, standard_chars = "AaÁáÄäBbCcČčDdĎďEeÉéFfGgHhIiÍíJjKkLlĹ弾MmNnŇňOoÓóÔôPpRrŔŕSsŠšTtŤťUuÚúVvYyÝýZzŽž" .. c.punc, } m["sl"] = { "သၠဝ်ဝေနဳ", 9063, "zls", "Latn", strip_diacritics = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.dgrave .. c.invbreve .. c.dotbelow, remove_exceptions = {"Ć", "ć", "Ǵ", "ǵ", "Ś", "ś", "Ź", "ź"}, from = {"Ə", "ə", "Ł", "ł"}, to = {"E", "e", "L", "l"}, }, sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dotabove .. c.ringabove .. c.dgrave .. c.invbreve .. c.dotbelow .. c.ringbelow .. c.ogonek, remove_exceptions = {"ć", "ǵ", "ś", "ź"}, from = {"ä", "č", "ć", "đ", "ə", "ë", "ǧ", "ǵ", "ï", "ł", "ö", "š", "ś", "ü", "ž", "ź"}, to = {"a" .. p[1], "c" .. p[1], "c" .. p[2], "d" .. p[1], "e", "e" .. p[1], "g" .. p[1], "g" .. p[2], "i" .. p[1], "l", "o" .. p[1], "s" .. p[1], "s" .. p[2], "u" .. p[1], "z" .. p[1], "z" .. p[2]}, }, standard_chars = "AaBbCcČčDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsŠšTtUuVvZzŽž" .. c.punc, } m["sm"] = { "သမဝ်အာန်", 34011, "poz-pnp", "Latn", } m["sn"] = { "သျှိနာ", 34004, "bnt-sho", "Latn", strip_diacritics = {remove_diacritics = c.acute}, } m["so"] = { "သဝ်မာလဳ", 13275, "cus-som", "Latn, Arab, Osma", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, } m["sq"] = { "အလ်ဗနဳယာန်", 8748, "sqj", "Latn, Grek, ota-Arab, Elba, Todr, Vith", translit = { Elba = "Elba-translit", Vith = "Vith-translit", }, -- Grek display_text, sort_key in [[Module:scripts/data]] strip_diacritics = { Latn = { remove_diacritics = c.acute .. c.circ, from = {'^[ie] (%w)', '^të (%w)'}, to = {'%1', '%1'}, }, Grek = { -- Diacritic removal from Grek-stripdiacritics excluded. from = m_langdata.chars_substitutions["Grek-stripdiacritics"].from, to = m_langdata.chars_substitutions["Grek-stripdiacritics"].to, }, }, sort_key = { Latn = { remove_diacritics = c.acute .. c.circ .. c.tilde .. c.breve .. c.caron, from = {'^[ie] (%w)', '^të (%w)', 'ç', 'dh', 'ë', 'gj', 'll', 'nj', 'rr', 'sh', 'th', 'xh', 'zh'}, to = {'%1', '%1', 'c'..p[1], 'd'..p[1], 'e'..p[1], 'g'..p[1], 'l'..p[1], 'n'..p[1], 'r'..p[1], 's'..p[1], 't'..p[1], 'x'..p[1], 'z'..p[1]}, } -- TODO: Grek if the default sort key is unsuitable }, standard_chars = { Latn = "AaBbCcÇçDdEeËëFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvXxYyZz", c.punc }, } m["ss"] = { "သဝါဇြဳ", 34014, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["st"] = { "သူထူ", 34340, "bnt-sts", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["su"] = { "သာန်ဓနဳ", 34002, "poz-msa", "Latn, Sund, Arab", ancestors = "osn", translit = { Sund = "Sund-translit" }, } m["sv"] = { "သွဳဒေန်", 9027, "gmq-eas", "Latn", ancestors = "gmq-osw-lat", sort_key = { remove_diacritics = c.grave .. c.acute .. c.circ .. c.tilde .. c.macron .. c.dacute .. c.caron .. c.cedilla .. "':", remove_exceptions = {"å"}, from = {"ø", "æ", "œ", "ß", "å", "aͤ", "oͤ"}, to = {"o", "ae", "oe", "ss", "z" .. p[1], "ä", "ö"} }, standard_chars = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpRrSsTtUuVvXxYyÅåÄäÖö" .. c.punc, } m["sw"] = { "သဝါတ်ဟဳလဳ", 7838, "bnt-swh", "Latn, Arab", sort_key = { Latn = { from = {"ng'"}, to = {"ng" .. p[1]} }, }, } m["ta"] = { "တမဳလ်", 5885, "dra-tam", "Taml", ancestors = "ta-mid", translit = "ta-translit", override_translit = true, } m["te"] = { "တေလုဂု", 8097, "dra-tel", "Telu", translit = "te-translit", override_translit = true, } m["tg"] = { "တာဇိက်", 9260, "ira-swi", "Cyrl, fa-Arab, Latn", ancestors = "fa-cls", translit = { Cyrl = "tg-translit" }, override_translit = true, strip_diacritics = { Cyrl = s["tg-stripdiacritics"], Latn = s["tg-stripdiacritics"], }, sort_key = { Cyrl = { from = {"ғ", "ё", "ӣ", "қ", "ӯ", "ҳ", "ҷ"}, to = {"г" .. p[1], "е" .. p[1], "и" .. p[1], "к" .. p[1], "у" .. p[1], "х" .. p[1], "ч" .. p[1]} }, }, } m["th"] = { "သေံ", 9217, "tai-swe", "Thai, Khomt, Brai", translit = { Thai = "th-translit" }, sort_key = { Thai = "Thai-sortkey" }, } m["ti"] = { "တဳဂျရေဝ်ယျာ", 34124, "sem-eth", "Ethi", translit = "Ethi-translit", } m["tk"] = { "တာခ်မေန်", 9267, "trk-ogz", "Latn, Cyrl, Arab", strip_diacritics = { Latn = s["tk-stripdiacritics"], Cyrl = s["tk-stripdiacritics"], }, sort_key = { Latn = { from = {"ç", "ä", "ž", "ň", "ö", "ş", "ü", "ý"}, to = {"c" .. p[1], "e" .. p[1], "j" .. p[1], "n" .. p[1], "o" .. p[1], "s" .. p[1], "u" .. p[1], "y" .. p[1]} }, Cyrl = { from = {"ё", "җ", "ң", "ө", "ү", "ә"}, to = {"е" .. p[1], "ж" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "э" .. p[1]} }, }, ancestors = "trk-eog", } m["tl"] = { "တာဂါလံက်", 34057, "phi", "Latn, Tglg", translit = { Tglg = "tl-translit" }, override_translit = true, strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.circ} }, standard_chars = { Latn = "AaBbKkDdEeGgHhIiLlMmNnOoPpRrSsTtUuWwYy", c.punc }, sort_key = { Latn = "tl-sortkey", }, } m["tn"] = { "သွာနာ", 34137, "bnt-sts", "Latn", } m["to"] = { "ထံၚ်ဂံၚ်", 34094, "poz-ton", "Latn", strip_diacritics = {remove_diacritics = c.acute}, sort_key = {remove_diacritics = c.macron}, } m["tr"] = { "တူရကဳ", 256, "trk-ogz", "Latn", ancestors = "ota", dotted_dotless_i = true, sort_key = { from = { -- Ignore circumflex, but account for capital Î wrongly becoming ı + circ due to dotted dotless I logic. "ı" .. c.circ, c.circ, "i", -- Ensure "i" comes after "ı". "ç", "ğ", "ı", "ö", "ş", "ü" }, to = { "i", "", "i" .. p[1], "c" .. p[1], "g" .. p[1], "i", "o" .. p[1], "s" .. p[1], "u" .. p[1] } }, standard_chars = "AaÂâBbCcÇçDdEeFfGgĞğHhIıİiÎîJjKkLlMmNnOoÖöPpRrSsŞşTtUuÛûÜüVvYyZz" .. c.punc, } m["ts"] = { "သွေန်ဂါ", 34327, "bnt-tsr", "Latn", } m["tt"] = { "တာတာ", 25285, "trk-kbu", "Cyrl, Latn, tt-Arab", translit = { Cyrl = "tt-translit", ["tt-Arab"] = "tt-translit" }, --override_translit = true, -- enable override until Module code can detect Russian loans such as [[аэропорт]] dotted_dotless_i = true, sort_key = { Cyrl = { from = {"ә", "ў", "ғ", "ё", "җ", "қ", "ң", "ө", "ү", "һ"}, to = {"а" .. p[1], "в" .. p[1], "г" .. p[1], "е" .. p[1], "ж" .. p[1], "к" .. p[1], "н" .. p[1], "о" .. p[1], "у" .. p[1], "х" .. p[1]} }, Latn = { from = { "i", -- Ensure "i" comes after "ı". "ä", "ə", "ç", "ğ", "ı", "ñ", "ŋ", "ö", "ɵ", "ş", "ü" }, to = { "i" .. p[1], "a" .. p[1], "a" .. p[2], "c" .. p[1], "g" .. p[1], "i", "n" .. p[1], "n" .. p[2], "o" .. p[1], "o" .. p[2], "s" .. p[1], "u" .. p[1] } }, }, } -- "tw" is treated as "ak", see [[WT:LT]] m["ty"] = { "တဟဳတဳဃှေန်", 34128, "poz-pep", "Latn", } m["ug"] = { "ဥူဃူရ်", 13263, "trk-kar", "ug-Arab, Latn, Cyrl", ancestors = "chg", translit = { ["ug-Arab"] = "ug-translit", Cyrl = "ug-translit", }, override_translit = true, } m["uk"] = { "ယူကရိန်", 8798, "zle", "Cyrl", ancestors = "zle-muk", translit = "uk-translit", strip_diacritics = {remove_diacritics = c.grave .. c.acute}, sort_key = { remove_diacritics = c.grave .. c.acute, from = { "ї", -- 2 chars "ґ", "є", "і" -- 1 char }, to = { "и" .. p[2], "г" .. p[1], "е" .. p[1], "и" .. p[1] } }, standard_chars = "АаБбВвГгДдЕеЄєЖжЗзИиІіЇїЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЮюЯя" .. c.punc:gsub("'", ""), -- Exclude apostrophe. } m["ur"] = { "အူရဒူ", 1617, "inc-hnd", "ur-Arab, Hebr", translit = { ["ur-Arab"] = "ur-translit" }, strip_diacritics = { ["ur-Arab"] = { -- character "ۂ" code U+06C2 to "ه" and "هٔ" (U+0647 + U+0654) to "ه"; hamzatu l-waṣli to a regular alif from = {"هٔ", "ۂ", "ٱ"}, to = {"ہ", "ہ", "ا"}, remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna .. c.superalef }, }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] standard_chars = { ["ur-Arab"] = "ایببپتثجچحخدذرزژسشصضطظعغفقکگلࣇڷمنݨوؤہھئٹڈڑآے", c.punc, }, } m["uz"] = { "ဥုသဗဝ်", 9264, "trk-kar", "Latn, Cyrl, fa-Arab", ancestors = "chg", translit = { Cyrl = "uz-translit" }, sort_key = { Latn = { from = {"oʻ", "gʻ", "sh", "ch", "ng"}, to = {"z" .. p[1], "z" .. p[2], "z" .. p[3], "z" .. p[4], "z" .. p[5]} }, Cyrl = { from = {"ё", "ў", "қ", "ғ", "ҳ"}, to = {"е" .. p[1], "я" .. p[1], "я" .. p[2], "я" .. p[3], "я" .. p[4]} }, }, strip_diacritics = { ["fa-Arab"] = "ar-stripdiacritics", }, } m["ve"] = { "ဗါန်ဒါ", 32704, "bnt-bso", "Latn", } m["vi"] = { "ဗဳယေတ်နာမ်", 9199, "mkh-vie", "Latn, Hani", ancestors = "mkh-mvi", sort_key = { Latn = "vi-sortkey", Hani = "Hani-sortkey", }, } m["vo"] = { "ဝဝ်လပုက်", 36986, "art", "Latn", } m["wa"] = { "ဝါဠူ", 34219, "roa-oil", "Latn", sort_key = s["roa-oil-sortkey"], } m["wo"] = { "ဝဝ်လံက်", 34257, "alv-fwo", "Latn, Arab, Gara", } m["xh"] = { "ခါဝ်သာ", 13218, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } m["yi"] = { "ယိဒ်ဒိသ်", 8641, "gmw-hgm", "Hebr, Latn", ancestors = "gmh", translit = { Hebr = "yi-translit", }, -- Hebr display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["yo"] = { "ရိုရုဗာ", 34311, "alv-yor", "Latn, Arab", strip_diacritics = { Latn = {remove_diacritics = c.grave .. c.acute .. c.macron} }, sort_key = { Latn = { from = {"ẹ", "ɛ", "gb", "ị", "kp", "ọ", "ɔ", "ṣ", "sh", "ụ"}, to = {"e" .. p[1], "e" .. p[1], "g" .. p[1], "i" .. p[1], "k" .. p[1], "o" .. p[1], "o" .. p[1], "s" .. p[1], "s" .. p[1], "u" .. p[1]} }, }, } m["za"] = { "ဇြုန်", 13216, "tai", "Latn, Hani", sort_key = { Latn = "za-sortkey", Hani = "Hani-sortkey", }, } m["zh"] = { "ကြုက်", 7850, "zhx", "Hants, Latn, Bopo, Nshu, Brai", ancestors = "ltc", generate_forms = "zh-generateforms", translit = { Hani = "zh-translit", Bopo = "zh-translit", }, sort_key = { Hani = "Hani-sortkey" }, } m["zu"] = { "သြူဠူ", 10179, "bnt-ngu", "Latn", strip_diacritics = {remove_diacritics = c.grave .. c.acute .. c.circ .. c.macron .. c.caron}, } return require("Module:languages").finalizeData(m, "language") 0nk3ztb38n7vex943q4w3md9ckz7fw6 မဝ်ဂျူ:headword/data 828 735 393768 385581 2026-05-01T18:18:19Z 咽頭べさ 33 393768 Scribunto text/plain local headword_page_module = "Module:headword/page" local list_to_set = require("Module:table").listToSet local data = {} ------ 1. Lists which are converted into sets. ------ --[==[ var: Large pages where we disable label tracking, red link checking and similar. ]==] data.large_pages = list_to_set { -- pages that consistently hit timeouts "a", -- pages that sometimes hit timeouts "A", "baba", "de", "e", "i", "lima", "o", "u", "и", "山", "子", "月", "一", "人", } --[==[ var: Map from singular to plural, and from plural to itself, for recognized parts of speech with irregular plurals. Most of these are invariable plurals, e.g. `kanji` is its own plural; but we also have `mora` plural `morae`. ]==] data.irregular_plurals = list_to_set({ "cmavo", "cmene", "fu'ivla", "gismu", "Han tu", "hanja", "hanzi", "jyutping", "kana", "kanji", "lujvo", "phrasebook", "pinyin", "rafsi", }, function(_, item) return item end) local irregular_plurals = data.irregular_plurals -- Irregular non-zero plurals AND any regular plurals where the singular ends in "s", -- because the module assumes that inputs ending in "s" are plurals. The singular and -- plural both need to be added, as the module will generate a default plural if -- the input doesn't match a key in this table. for sg, pl in next, { mora = "morae" } do irregular_plurals[sg], irregular_plurals[pl] = pl, pl end --[==[ var: Recognized lemmas. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG lemmas' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories: * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANG]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS/LANG]] ]==] data.lemmas = list_to_set{ "အက္ခရ်ဂၠေံ", "ဝေါဟာဂၠေံ", "နာမဝိသေသန", "အာက်နဝ်မာဲနဝ်", "adpositions", "ဝါကျ", "အဳမိုဂျဳ", "ကြိယာဝိသေသန", "အဆက်စုတ်လက္ကရဴ", "ambipositions", "လိက်ပရေၚ်", "circumfixes", "ကြိယာဗီုပြၚ်သိုၚ်တၟိ", "circumpositions", "နာမ်ပါ်ကၞာတ်", "cmavo", "cmavo clusters", "cmene", "combining forms", "သမ္ဗန္ဓ", "counters", "ဖျေံလဝ်သန္နိဋ္ဌာန်", "ခရက်သမ္တီလဝ်ဓမံက်ထ္ၜးရမျာၚ်", "digraphs", "equative adjectives", "fu'ivla", "gismu", "Han characters", "Han tu", "ဟာန်ဂျာ", "ဟာန်သဳ", "ideophones", "idioms", "စန်", "initialisms", "iteration marks", "interfixes", "အာမေဍိက်", "kana", "kanji", "အက္ခရ်", "ligatures", "logograms", "lujvo", "morae", "morphemes", "non-constituents", "နာမ်", "ဂၞန်သၚ်္ချာ", "သၚ်္ကေတဂၞန်သၚ်္ချာ", "ဂၞန်သၚ်္ချာ", "ပစ္စဲ", "မအရေဝ်", "ကဆံၚ်အကာဲအရာ", "postpositional phrases", "predicatives", "အဆက်ဂတ", "prepositional phrases", "ဝိဘတ်", "ပေါရာဏာံပေါရာဒါံ", "pronominal adverbs", "သဗ္ဗနာမ်", "နာမ်မကိတ်ညဳ", "punctuation marks", "relatives", "တံရိုဟ်", "တံမအရေဝ်", "အဆက်လက္ကရဴ", "ဝဏ္ဏ", "သၚ်္ကေတ", "ကြိယာ", "ကၞာတ်အမှိက်", } --[==[ var: Recognized non-lemma forms. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG non-lemma forms' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories; see the documentation of `data.lemmas`. ]==] data.nonlemmas = list_to_set{ "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုမစိုပ်တရဴ", "လုပ်ကၠောန်စွံလဝ်နကဵုမစိုပ်တရဴ", "ခ္ဍံက်လိက်ဗၠေတ်", "နာမ်ဗီုပြၚ်သိုၚ်တၟိ", "adjectival participles", "ဗီုပြၚ်နာမဝိသေသန", "နာမဝိသေသနဗီုပြၚ်ဣတ္တိလိၚ်", "နာမဝိသေသနဗီုပြၚ်ကိုန်ဗဟုဝစ်", "ဗီုပြၚ်ကြိယာဝိသေသန", "adverbial participles", "agent participles", "article forms", "circumfix forms", "combined forms", "ဗီုပြၚ်ပတုပ်ရံၚ်နာမဝိသေသန", "နာမဝိသေသနပတုပ်ရံၚ်", "ဗီုပြၚ်ပတုပ်ရံၚ်ကြိယာဝိသေသန", "ကြိယာဝိသေသနပတုပ်ရံၚ်", "ပွမထညောံ", "contractions", "converbs", "determiner comparative forms", "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", "determiner superlative forms", "နာမ်မလဟုတ်စှ်ေ", "elative adjectives", "equative adjective forms", "equative adjectives", "future participles", "gerunds", "infinitive forms", "infinitives", "interjection forms", "ယျဝဳဖေန်", "kanji readings", "negative participles", "nominal participles", "သဗ္ဗနာမ်ဝိဘတ်", "ဗီုပြၚ်ရုပ်နာမ်", "နာမ်ဗီုပြၚ်ၜါလ္ပာ်", "ဗီုပြၚ်နာမ်", "ဗီုပြၚ်နာမ်ပဝ်ကာယ်လ်", "နာမ်ဗီုပြၚ်ကိုန်ဗဟုဝစ်", "နာမ်ဗီုပြၚ်ပိုၚ်ပြဳ", "နာမ်ဗီုပြၚ်ကိုန်ဨကဝုစ်", "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", "လုပ်ကၠောန်စွံလဝ်", "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်", "ဗီုပြၚ်ကၞာတ်အမှိက်", "လုပ်ကၠောန်စွံလဝ်ဟွံတဝ်စၞေဟ်", "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်နူအတိက်", "လုပ်ကၠောန်စွံလဝ်မက္ဍိုပ်ပေၚ်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်မက္ဍိုပ်ပေၚ်", "လုပ်ကၠောန်စွံလဝ်မက္ဍိုပ်ပေၚ်ဟွံတဝ်စၞေဟ်", "ဖေန်အိန်", "ကိုန်ဗဟုဝစ်", "ဗီုပြၚ်ပသ္ၚောဲထောံ", "ဗီုပြၚ်မုက်နာမ်", "ဝိဘတ်ပသ္ၚောဲထောံလဝ်", "ဗီုပြၚ်ဝိဘတ်", "ဝိဘတ်ဗီုပြၚ်သဗ္ဗနာမ်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "ဗီုပြၚ်သဗ္ဗနာမ်", "သဗ္ဗနာမ်ဗီုပြၚ်ပိုၚ်ပြဳ", "ဗီုပြၚ်နာမ်မကိတ်ညဳ", "နာမ်မကိတ်ညဳဗီုပြၚ်ကိုန်ဗဟုဝစ်", "rafsi", "ဗီုအက္ခရ်ရောမ", "ဗီုပြၚ်တံရိုဟ်", "ကိုန်ဨကဝုစ်", "ဗီုပြၚ်အဆက်လက္ကရဴ", "ဗီုပြၚ်သဒ္ဒာနာမဝိသေသန", "သဒ္ဒာနာမဝိသေသန", "ဗီုပြၚ်သဒ္ဒာကြိယာဝိသေသန", "သဒ္ဒာကြိယာဝိသေသန", "ဗီုပြၚ်ကြိယာ", "နာမ်ဝါစာ", "နာမ်အပြံၚ်အသၠာဲ", "ကြိယာအပြံၚ်အသၠာဲ", } --[==[ var: List of languages that will not have links to separate parts of the headword. ]==] data.no_multiword_links = list_to_set{ "zh", } --[==[ var: List of languages that will not have `LANG multiword terms` categories added. There are various reasons why languages are in this list: (a) words are written without spaces between them; (b) syllables are written with spaces between them; (c) variant reconstructions are notated with a tilde surrounded by spaces; (d) the language is a sign language, where pagenames are multiword descriptions of the gesture(s) required to make an individual sign; (e) some other weirdnesses. ]==] data.no_multiword_cat = list_to_set{ -------- Languages without spaces between words (sometimes spaces between phrases) -------- "blt", -- Tai Dam "ja", -- Japanese "khb", -- Lü "km", -- Khmer "lo", -- Lao "mnw", -- Mon "my", -- Burmese "nan", -- Min Nan (some words in Latin script; hyphens between syllables) "nan-hbl", -- Hokkien (some words in Latin script; hyphens between syllables) "nod", -- Northern Thai "ojp", -- Old Japanese "shn", -- Shan "sou", -- Southern Thai "tdd", -- Tai Nüa "th", -- Thai "tts", -- Isan "twh", -- Tai Dón "txg", -- Tangut "zh", -- Chinese (all varieties with Chinese characters) "zkt", -- Khitan -------- Languages with spaces between syllables -------- "ahk", -- Akha "aou", -- A'ou "atb", -- Zaiwa "byk", -- Biao "cdy", -- Chadong --"duu", -- Drung; not sure --"hmx-pro", -- Proto-Hmong-Mien --"hnj", -- Green Hmong; not sure "huq", -- Tsat "ium", -- Iu Mien --"lis", -- Lisu; not sure "mtq", -- Muong --"mww", -- White Hmong; not sure "onb", -- Lingao --"sit-gkh", -- Gokhy; not sure --"swi", -- Sui; not sure "tbq-lol-pro", -- Proto-Loloish "tdh", -- Thulung "ukk", -- Muak Sa-aak "vi", -- Vietnamese "yig", -- Wusa Nasu "zng", -- Mang -------- Languages with ~ with surrounding spaces used to separate variants -------- "mkh-ban-pro", -- Proto-Bahnaric "sit-pro", -- Proto-Sino-Tibetan; listed above -------- Other weirdnesses -------- "mul", -- Translingual; gestures, Morse code, etc. "aot", -- Atong (India); bullet is a letter -------- All sign languages -------- "ads", "aed", "aen", "afg", "ase", "asf", "asp", "asq", "asw", "bfi", "bfk", "bog", "bqn", "bqy", "bvl", "bzs", "cds", "csc", "csd", "cse", "csf", "csg", "csl", "csn", "csq", "csr", "doq", "dse", "dsl", "ecs", "esl", "esn", "eso", "eth", "fcs", "fse", "fsl", "fss", "gds", "gse", "gsg", "gsm", "gss", "gus", "hab", "haf", "hds", "hks", "hos", "hps", "hsh", "hsl", "icl", "iks", "ils", "inl", "ins", "ise", "isg", "isr", "jcs", "jhs", "jls", "jos", "jsl", "jus", "kgi", "kvk", "lbs", "lls", "lsl", "lso", "lsp", "lst", "lsy", "lws", "mdl", "mfs", "mre", "msd", "msr", "mzc", "mzg", "mzy", "nbs", "ncs", "nsi", "nsl", "nsp", "nsr", "nzs", "okl", "pgz", "pks", "prl", "prz", "psc", "psd", "psg", "psl", "pso", "psp", "psr", "pys", "rms", "rsl", "rsm", "sdl", "sfb", "sfs", "sgg", "sgx", "slf", "sls", "sqk", "sqs", "ssp", "ssr", "svk", "swl", "syy", "tse", "tsm", "tsq", "tss", "tsy", "tza", "ugn", "ugy", "ukl", "uks", "vgt", "vsi", "vsl", "vsv", "xki", "xml", "xms", "ygs", "ysl", "zib", "zsl", } --[==[ var: List of languages where a hyphen is not considered a word separator for the `LANG multiword terms` category. There are numerous reasons why languages are in this list; by each language should be listed the reason for inclusion. ]==] data.hyphen_not_multiword_sep = list_to_set{ "akk", -- Akkadian; hyphens between syllables "akl", -- Aklanon; hyphens for mid-word glottal stops "ber-pro", -- Proto-Berber; morphemes separated by hyphens "ceb", -- Cebuano; hyphens for mid-word glottal stops "cnk", -- Khumi Chin; hyphens used in single words "cpi", -- Chinese Pidgin English; Chinese-derived words with hyphens between syllables "de", -- German; too many false positives "esx-esk-pro", -- hyphen used to separate morphemes "fi", -- Finnish; hyphen used to separate components in compound words if the final and initial vowels match, respectively "gd", -- Scottish Gaelic; too many false positives like [[a-chianaibh]], [[a-nìos]], [[an-dè]] and other adverbs in a- and an- "hil", -- Hiligaynon; hyphens for mid-word glottal stops "hnn", -- Hanunoo; too many false positives "ilo", -- Ilocano; hyphens for mid-word glottal stops "kne", -- Kankanaey; hyphens for mid-word glottal stops "lcp", -- Western Lawa; dash as syllable joiner "lwl", -- Eastern Lawa; dash as syllable joiner "mfa", -- Pattani Malay in Thai script; dash as syllable joiner "mkh-vie-pro", -- Proto-Vietic; morphemes separated by hyphens "msb", -- Masbatenyo; too many false positives "tl", -- Tagalog; too many false positives "war", -- Waray-Waray; too many false positives "yo", -- Yoruba; hyphens used to show lengthened nasal vowels } --[==[ var: List of languages that will not have `LANG masculine nouns` and similar categories added. Generally, these languages are lacking gender but use the gender field for other purposes. (This is a massive hack and should be changed.) ]==] data.no_gender_cat = list_to_set{ -- Languages without gender but which use the gender field for other purposes "ja", "th", } --[==[ var: List of languages where [[Module:headword]] should not attempt to generate a transliteration even if the term is written in a non-Latin script. FIXME: Notate reasons why each language is in this list. ]==] data.notranslit = list_to_set{ "ams", "az", "bbc", "bug", "cdo", "cia", "cjm", "cjy", "cmn", "cnp", "cpi", "cpx", "csp", "czh", "czo", "gan", "hak", "hnm", "hsn", "ja", "kzg", "lad", "ltc", "luh", "lzh", "mnp", "ms", "mul", "mvi", "nan", "nan-dat", "nan-hbl", "nan-hlh", "nan-lnx", "nan-tws", "nan-zhe", "nan-zsh", "och", "oj", "okn", "ryn", "rys", "ryu", "sh", "sjc", "tgt", "th", "tkn", "tly", "txg", "und", "vi", "wuu", "xug", "yoi", "yox", "yue", "za", "zh", "zhx-sic", "zhx-tai", } --[==[ var: List of languages that will default to `sccat` being true, i.e. categories like `LANG POS in SCRIPT script` will automatically be generated. This can be overridden using {{para|sccat|0}} in {{tl|head}} or setting `sccat` to `false` in Lua. ]==] data.default_sccat = list_to_set{ "inc-apa", "inc-ash", "kfr", "ks", "mr", "mwr", "inc-oaw", "inc-ohi", "omr", "inc-opa", "phr", "pi", "pra", "sa", "skr", "sd", } --[==[ var: List of script codes for which a script-tagged display title will be added. ]==] data.toBeTagged = list_to_set{ "Ahom", "Arab", "fa-Arab", "glk-Arab", "kk-Arab", "ks-Arab", "ku-Arab", "mzn-Arab", "ms-Arab", "ota-Arab", "pa-Arab", "ps-Arab", "sd-Arab", "tt-Arab", "ug-Arab", "ur-Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Batk", "Beng", "as-Beng", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans", "Cari", "Cham", "Cher", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva", "Dsrt", "Egyd", "Egyp", "Ethi", "Geok", "Geor", "Glag", "Goth", "Grek", "Polyt", "polytonic", "Gujr", "Guru", "Hang", "Hani", "Hano", "Hebr", "Hira", "Hluw", "Ital", "Java", "Kali", "Kana", "Khar", "Khmr", "Knda", "Kthi", "Lana", "Laoo", "Latn", "Latf", "Latg", "Latnx", "Latinx", "pjt-Latn", "Lepc", "Limb", "Linb", "Lisu", "Lyci", "Lydi", "Mand", "Mani", "Marc", "Merc", "Mero", "Mlym", "Mong", "mnc-Mong", "sjo-Mong", "xwo-Mong", "Mtei", "Mymr", "Narb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Ougr", "Palm", "Phag", "Phli", "Phlv", "Phnx", "Plrd", "Prti", "Rjng", "Runr", "Samr", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Tagb", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Ugar", "Vaii", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Ipach", "Music", "Rumin", } --[==[ var: Parts of speech which will not be categorised in categories like `English terms spelled with É` if the term is the character in question (e.g. the letter entry for English [[é]]). This contrasts with entries like the French adjective [[m̂]], which is a one-letter word spelled with the letter. ]==] data.pos_not_spelled_with_self = list_to_set{ "diacritical marks", "Han characters", "Han tu", "hanja", "hanzi", "iteration marks", "kana", "kanji", "letters", "ligatures", "logograms", "morae", "numeral symbols", "numerals", "punctuation marks", "syllables", "symbols", } ------ 2. Lists not converted into sets. ------ --[==[ var: Recognized aliases for parts of speech (param 2=). Key is the short form and value is the canonical singular (not pluralized) form. It is singular so the same table can be used in [[Module:form of]] for the {{para|p}}/{{para|POS}} param and [[Module:links]] for the pos= param. Note that any part of speech, abbreviated or not, can be suffixed with `f` to generate the corresponding non-lemma form part of speech, such as `adjf`, `af` or `adjectivef` for `adjective form`, and `nounf` or `nf` for `noun form`. This expansion happens even when it does not make sense for the given part of speech (e.g. `pclf` expands to `particle form` and `symf` expands to `symbol form`), and currently also, at least in [[Module:headword]] (but not [[Module:links]]), even if the part before the `f` is not a recognized part of speech or abbreviation (hence `nerf` expands to `ner form`). ]==] data.pos_aliases = { a = "နာမဝိသေသန", adj = "နာမဝိသေသန", adv = "ကြိယာဝိသေသန", art = "ပစ္စဲ", det = "determiner", cnum = "cardinal number", conj = "သမ္ဗန္ဓ", conv = "converb", int = "အာမေဍိက်", interj = "အာမေဍိက်", intj = "အာမေဍိက်", n = "နာမ်", nounf = "ဗီုပြၚ်နာမ်", num = "ဂၞန်သၚ်္ချာ", part = "လုပ်ကၠောန်စွံလဝ်", pcl = "လုပ်ကၠောန်စွံလဝ်", phr = "ဝါကျ", pn = "နာမ်မကိတ်ညဳ", postp = "ကဆံၚ်အကာဲအရာ", pre = "ဝိဘတ်", prep = "ဝိဘတ်", pro = "သဗ္ဗနာမ်", pron = "သဗ္ဗနာမ်", prop = "နာမ်မကိတ်ညဳ", proper = "နာမ်မကိတ်ညဳ", onum = "ordinal number", rom = "ဗီုအက္ခရ်ရောမ", romanization = "ဗီုအက္ခရ်ရောမ", romanizations = "ဗီုအက္ခရ်ရောမ", v = "ကြိယာ", vb = "ကြိယာ", vi = "intransitive verb", vt = "transitive verb", vti = "transitive and intransitive verb", ["diminutive noun"] = "နာမ်မလဟုတ်စှ်ေ", ["diminutive nouns"] = "နာမ်မလဟုတ်စှ်ေ", noun = "နာမ်", nouns = "နာမ်", ["noun form"] = "ဗီုပြၚ်နာမ်", ["noun forms"] = "ဗီုပြၚ်နာမ်", verb = "ကြိယာ", verbs = "ကြိယာ", ["verb form"] = "ဗီုပြၚ်ကြိယာ", ["verb forms"] = "ဗီုပြၚ်ကြိယာ", verbf = "ဗီုပြၚ်ကြိယာ", adjective = "နာမဝိသေသန", adjectives = "နာမဝိသေသန", adjf = "ဗီုပြၚ်နာမဝိသေသန", adjectivef = "ဗီုပြၚ်နာမဝိသေသန", ["adjective form"] = "ဗီုပြၚ်နာမဝိသေသန", ["adjective forms"] = "ဗီုပြၚ်နာမဝိသေသန", adverb = "ကြိယာဝိသေသန", adverbs = "ကြိယာဝိသေသန", ["adverb form"] = "ဗီုပြၚ်ကြိယာဝိသေသန", ["adverb forms"] = "ဗီုပြၚ်ကြိယာဝိသေသန", interjection = "အာမေဍိက်", ["interjection form"] = "ဗီုပြၚ်အာမေဍိက်", ["interjection forms"] = "ဗီုပြၚ်အာမေဍိက်", pronoun = "သဗ္ဗနာမ်", pronouns = "သဗ္ဗနာမ်", ["pronoun form"] = "ဗီုပြၚ်သဗ္ဗနာမ်", ["pronoun forms"] = "ဗီုပြၚ်သဗ္ဗနာမ်", preposition = "ဝိဘတ်", ["preposition form"] = "ဗီုပြၚ်ဝိဘတ်", ["preposition forms"] = "ဗီုပြၚ်ဝိဘတ်", suffix = "အဆက်လက္ကရဴ", ["suffix form"] = "ဗီုပြၚ်အဆက်လက္ကရဴ", ["suffix forms"] = "ဗီုပြၚ်အဆက်လက္ကရဴ", phrase = "ဝါကျ", ["phrase form"] = "ဗီုပြၚ်ဝါကျ", ["phrase forms"] = "ဗီုပြၚ်ဝါကျ", numeral = "ဂၞန်သၚ်္ချာ", numerals = "ဂၞန်သၚ်္ချာ", ["numeral form"] = "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", ["numeral forms"] = "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", proverb = "ပေါရာဏာံပေါရာဒါံ", conjunction = "သမ္ဗန္ဓ", conjunctions = "သမ္ဗန္ဓ", ["conjunction form"] = "ဗီုပြၚ်သမ္ဗန္ဓ", ["conjunction forms"] = "ဗီုပြၚ်သမ္ဗန္ဓ", contraction = "ပွမထညောံ", ["contraction form"] = "ဗီုပြၚ်ပွမထညောံ", ["contraction forms"] = "ဗီုပြၚ်ပွမထညောံ", article = "ပစ္စဲ", ["article form"] = "ဗီုပြၚ်ပစ္စဲ", ["article forms"] = "ဗီုပြၚ်ပစ္စဲ", root = "တံရိုဟ်", ["root form"] = "ဗီုပြၚ်တံရိုဟ်", ["root forms"] = "ဗီုပြၚ်တံရိုဟ်", prefix = "အဆက်ဂတ", ["prefix form"] = "ဗီုပြၚ်အဆက်ဂတ", ["prefix forms"] = "ဗီုပြၚ်အဆက်ဂတ", particle = "ကၞာတ်အမှိက်", classifier = "နာမ်ပါ်ကၞာတ်", determiner = "ဖျေံလဝ်သန္နိဋ္ဌာန်", determiners = "ဖျေံလဝ်သန္နိဋ္ဌာန်", ["mutated noun"] = "နာမ်အပြံၚ်အသၠာဲ", ["mutated verb"] = "ကြိယာအပြံၚ်အသၠာဲ", ["determiner form"] = "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", ["determiner forms"] = "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", ["reconstructed determiner"] = "ဖျေံလဝ်သန္နိဋ္ဌာန်နကဵုဗီုပြၚ်သိုၚ်တၟိ", ["reconstructed verb"] = "ကြိယာဗီုပြၚ်သိုၚ်တၟိ", ["reconstructed noun"] = "နာမ်ဗီုပြၚ်သိုၚ်တၟိ", counter = "ရိုဟ်သၠုဲ", postposition = "ကဆံၚ်", misspelling = "ခ္ဍံက်လိက်ဗၠေတ်", final = "အဆံၚ်လက္ကရဴ", ["verb finals"] = "ကြိယာအဆံၚ်လက္ကရဴ", ["transitive inanimate verb finals"] = "ကြိယာအပြံၚ်အလှာဲအဆံၚ်လက္ကရဴမသ္ကုဟၟဲကဵုလမျီုနကဵုဘာသာ", affix = "အဆက်စုတ်လက္ကရဴ", ["affix form"] = "ဗီုပြၚ်အဆက်စုတ်လက္ကရဴ", ["affix forms"] = "ဗီုပြၚ်အဆက်စုတ်လက္ကရဴ", ["diacritical mark"] = "ခရက်သမ္တီလဝ်ဓမံက်ထ္ၜးရမျာၚ်", postposition = "ကဆံၚ်အကာဲအရာ", ["postposition form"] = "ဗီုပြၚ်ကဆံၚ်အကာဲအရာ", infix = "စန်", letter = "အက္ခရ်", hanzi = "ဟာန်သဳ", ["prepositional phrase"] = "ဝါကျဝိဘတ်", ["prepositional pronoun"] = "သဗ္ဗနာမ်ဝိဘတ်", stem = "တံမအရေဝ်", participle = "လုပ်ကၠောန်စွံလဝ်", participles = "လုပ်ကၠောန်စွံလဝ်", ["past participle"] = "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", ["past participle form"] = "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", ["proper noun"] = "နာမ်မကိတ်ညဳ", ["proper noun form"] = "ဗီုပြၚ်နာမ်မကိတ်ညဳ", ["participle form"] = "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်", ["comparative adjective"] = "နာမဝိသေသနပတုပ်ရံၚ်", ["superlative adjective"] = "သဒ္ဒာနာမဝိသေသန", ["numeral symbol"] = "သၚ်္ကေတဂၞန်သၚ်္ချာ", ["particle forms"] = "ဗီုပြၚ်ကၞာတ်အမှိက်", ["particle form"] = "ဗီုပြၚ်ကၞာတ်အမှိက်", ["present participles"] = "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", ["present participle"] = "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", ["alternative form"] = "ဗီုပြၚ်တၞဟ်ခြာ", singulative = "ကိုန်ဨကဝုစ်", singulatives = "ကိုန်ဨကဝုစ်", } --[==[ var: Map of parts of speech for which categories like `German masculine nouns` or `Russian imperfective verbs` will be generated if the headword is of the appropriate gender/number. The map is used to canonicalize parts of speech for categorization purposes; specifically, proper nouns categorizes like nouns. ]==] data.pos_for_gender_number_cat = { ["နာမ်"] = "နာမ်", ["နာမ်မကိတ်ညဳ"] = "နာမ်", ["အဆက်လက္ကရဴ"] = "အဆက်လက္ကရဴ", -- We include verbs because impf and pf are valid "genders". ["ကြိယာ"] = "ကြိယာ", } --[==[ var: Lower limit for a "long" word in a particular language. Used to categorize terms into e.g. [[:Category:Long English words]] automatically. Languages with no mapping here do not get categorized. ]==] data.long_word_thresholds = { ["af"] = 20, ["bg"] = 20, ["cy"] = 25, ["de"] = 20, ["en"] = 25, ["es"] = 20, ["fr"] = 20, ["ka"] = 20, ["sv"] = 20, ["tl"] = 25, } ------ 3. Page-wide processing (so that it only needs to be done once per page). ------ data.page = require(headword_page_module).process_page() -- Set some page properties directly on `data` for ease of use. data.pagename = data.page.pagename data.encoded_pagename = data.page.encoded_pagename return data dkiqbb67kury8k7xs0muc65l7eqn8wi 393834 393768 2026-05-02T09:11:09Z 咽頭べさ 33 393834 Scribunto text/plain local headword_page_module = "Module:headword/page" local list_to_set = require("Module:table").listToSet local data = {} ------ 1. Lists which are converted into sets. ------ --[==[ var: Large pages where we disable label tracking, red link checking and similar. ]==] data.large_pages = list_to_set { -- pages that consistently hit timeouts "a", -- pages that sometimes hit timeouts "A", "baba", "de", "e", "i", "lima", "o", "u", "и", "山", "子", "月", "一", "人", } --[==[ var: Map from singular to plural, and from plural to itself, for recognized parts of speech with irregular plurals. Most of these are invariable plurals, e.g. `kanji` is its own plural; but we also have `mora` plural `morae`. ]==] data.irregular_plurals = list_to_set({ "cmavo", "cmene", "fu'ivla", "gismu", "Han tu", "hanja", "hanzi", "jyutping", "kana", "kanji", "lujvo", "phrasebook", "pinyin", "rafsi", }, function(_, item) return item end) local irregular_plurals = data.irregular_plurals -- Irregular non-zero plurals AND any regular plurals where the singular ends in "s", -- because the module assumes that inputs ending in "s" are plurals. The singular and -- plural both need to be added, as the module will generate a default plural if -- the input doesn't match a key in this table. for sg, pl in next, { mora = "morae" } do irregular_plurals[sg], irregular_plurals[pl] = pl, pl end --[==[ var: Recognized lemmas. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG lemmas' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories: * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/LANG]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS]] * [[Special:WhatLinksHere/Wiktionary:Tracking/headword/unrecognized pos/pos/POS/LANG]] ]==] data.lemmas = list_to_set{ "အက္ခရ်ဂၠေံ", "ဝေါဟာဂၠေံ", "နာမဝိသေသန", "အာက်နဝ်မာဲနဝ်", "adpositions", "ဝါကျ", "အဳမိုဂျဳ", "ကြိယာဝိသေသန", "အဆက်စုတ်လက္ကရဴ", "ambipositions", "လိက်ပရေၚ်", "circumfixes", "ကြိယာဗီုပြၚ်သိုၚ်တၟိ", "circumpositions", "နာမ်ပါ်ကၞာတ်", "cmavo", "cmavo clusters", "cmene", "combining forms", "သမ္ဗန္ဓ", "counters", "ဖျေံလဝ်သန္နိဋ္ဌာန်", "ခရက်သမ္တီလဝ်ဓမံက်ထ္ၜးရမျာၚ်", "digraphs", "equative adjectives", "fu'ivla", "gismu", "Han characters", "Han tu", "ဟာန်ဂျာ", "ဟာန်သဳ", "ideophones", "idioms", "စန်", "initialisms", "iteration marks", "interfixes", "အာမေဍိက်", "kana", "kanji", "အက္ခရ်", "ligatures", "logograms", "lujvo", "morae", "morphemes", "non-constituents", "နာမ်", "ဂၞန်သၚ်္ချာ", "သၚ်္ကေတဂၞန်သၚ်္ချာ", "ဂၞန်သၚ်္ချာ", "ပစ္စဲ", "မအရေဝ်", "ကဆံၚ်အကာဲအရာ", "ဝါကျကဆံၚ်အကာဲအရာ", "predicatives", "အဆက်ဂတ", "ဝါကျဝိဘတ်", "ဝိဘတ်", "ပေါရာဏာံပေါရာဒါံ", "pronominal adverbs", "သဗ္ဗနာမ်", "နာမ်မကိတ်ညဳ", "punctuation marks", "relatives", "တံရိုဟ်", "တံမအရေဝ်", "အဆက်လက္ကရဴ", "ဝဏ္ဏ", "သၚ်္ကေတ", "ကြိယာ", "ကၞာတ်အမှိက်", } --[==[ var: Recognized non-lemma forms. If the part of speech in {{tl|head}} is set to one of these or its singular equivalent, the category 'LANG non-lemma forms' will automatically be added. If the part of speech is not a singular or plural lemma or non-lemma form and is not an abbreviation that expands to a recognized lemma or non-lemma form, the page will be added to various tracking categories; see the documentation of `data.lemmas`. ]==] data.nonlemmas = list_to_set{ "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုမစိုပ်တရဴ", "လုပ်ကၠောန်စွံလဝ်နကဵုမစိုပ်တရဴ", "ခ္ဍံက်လိက်ဗၠေတ်", "နာမ်ဗီုပြၚ်သိုၚ်တၟိ", "adjectival participles", "ဗီုပြၚ်နာမဝိသေသန", "နာမဝိသေသနဗီုပြၚ်ဣတ္တိလိၚ်", "နာမဝိသေသနဗီုပြၚ်ကိုန်ဗဟုဝစ်", "ဗီုပြၚ်ကြိယာဝိသေသန", "adverbial participles", "agent participles", "article forms", "circumfix forms", "combined forms", "ဗီုပြၚ်ပတုပ်ရံၚ်နာမဝိသေသန", "နာမဝိသေသနပတုပ်ရံၚ်", "ဗီုပြၚ်ပတုပ်ရံၚ်ကြိယာဝိသေသန", "ကြိယာဝိသေသနပတုပ်ရံၚ်", "ပွမထညောံ", "contractions", "converbs", "determiner comparative forms", "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", "determiner superlative forms", "နာမ်မလဟုတ်စှ်ေ", "elative adjectives", "equative adjective forms", "equative adjectives", "future participles", "gerunds", "infinitive forms", "infinitives", "interjection forms", "ယျဝဳဖေန်", "kanji readings", "negative participles", "nominal participles", "သဗ္ဗနာမ်ဝိဘတ်", "ဗီုပြၚ်ရုပ်နာမ်", "နာမ်ဗီုပြၚ်ၜါလ္ပာ်", "ဗီုပြၚ်နာမ်", "ဗီုပြၚ်နာမ်ပဝ်ကာယ်လ်", "နာမ်ဗီုပြၚ်ကိုန်ဗဟုဝစ်", "နာမ်ဗီုပြၚ်ပိုၚ်ပြဳ", "နာမ်ဗီုပြၚ်ကိုန်ဨကဝုစ်", "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", "လုပ်ကၠောန်စွံလဝ်", "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်", "ဗီုပြၚ်ကၞာတ်အမှိက်", "လုပ်ကၠောန်စွံလဝ်ဟွံတဝ်စၞေဟ်", "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်နူအတိက်", "လုပ်ကၠောန်စွံလဝ်မက္ဍိုပ်ပေၚ်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်မက္ဍိုပ်ပေၚ်", "လုပ်ကၠောန်စွံလဝ်မက္ဍိုပ်ပေၚ်ဟွံတဝ်စၞေဟ်", "ဖေန်အိန်", "ကိုန်ဗဟုဝစ်", "ဗီုပြၚ်ပသ္ၚောဲထောံ", "ဗီုပြၚ်မုက်နာမ်", "ဝိဘတ်ပသ္ၚောဲထောံလဝ်", "ဗီုပြၚ်ဝိဘတ်", "ဝိဘတ်ဗီုပြၚ်သဗ္ဗနာမ်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်ပြဟ်ပြေဟ်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "ဗီုပြၚ်သဗ္ဗနာမ်", "သဗ္ဗနာမ်ဗီုပြၚ်ပိုၚ်ပြဳ", "ဗီုပြၚ်နာမ်မကိတ်ညဳ", "နာမ်မကိတ်ညဳဗီုပြၚ်ကိုန်ဗဟုဝစ်", "rafsi", "ဗီုအက္ခရ်ရောမ", "ဗီုပြၚ်တံရိုဟ်", "ကိုန်ဨကဝုစ်", "ဗီုပြၚ်အဆက်လက္ကရဴ", "ဗီုပြၚ်သဒ္ဒာနာမဝိသေသန", "သဒ္ဒာနာမဝိသေသန", "ဗီုပြၚ်သဒ္ဒာကြိယာဝိသေသန", "သဒ္ဒာကြိယာဝိသေသန", "ဗီုပြၚ်ကြိယာ", "နာမ်ဝါစာ", "နာမ်အပြံၚ်အသၠာဲ", "ကြိယာအပြံၚ်အသၠာဲ", } --[==[ var: List of languages that will not have links to separate parts of the headword. ]==] data.no_multiword_links = list_to_set{ "zh", } --[==[ var: List of languages that will not have `LANG multiword terms` categories added. There are various reasons why languages are in this list: (a) words are written without spaces between them; (b) syllables are written with spaces between them; (c) variant reconstructions are notated with a tilde surrounded by spaces; (d) the language is a sign language, where pagenames are multiword descriptions of the gesture(s) required to make an individual sign; (e) some other weirdnesses. ]==] data.no_multiword_cat = list_to_set{ -------- Languages without spaces between words (sometimes spaces between phrases) -------- "blt", -- Tai Dam "ja", -- Japanese "khb", -- Lü "km", -- Khmer "lo", -- Lao "mnw", -- Mon "my", -- Burmese "nan", -- Min Nan (some words in Latin script; hyphens between syllables) "nan-hbl", -- Hokkien (some words in Latin script; hyphens between syllables) "nod", -- Northern Thai "ojp", -- Old Japanese "shn", -- Shan "sou", -- Southern Thai "tdd", -- Tai Nüa "th", -- Thai "tts", -- Isan "twh", -- Tai Dón "txg", -- Tangut "zh", -- Chinese (all varieties with Chinese characters) "zkt", -- Khitan -------- Languages with spaces between syllables -------- "ahk", -- Akha "aou", -- A'ou "atb", -- Zaiwa "byk", -- Biao "cdy", -- Chadong --"duu", -- Drung; not sure --"hmx-pro", -- Proto-Hmong-Mien --"hnj", -- Green Hmong; not sure "huq", -- Tsat "ium", -- Iu Mien --"lis", -- Lisu; not sure "mtq", -- Muong --"mww", -- White Hmong; not sure "onb", -- Lingao --"sit-gkh", -- Gokhy; not sure --"swi", -- Sui; not sure "tbq-lol-pro", -- Proto-Loloish "tdh", -- Thulung "ukk", -- Muak Sa-aak "vi", -- Vietnamese "yig", -- Wusa Nasu "zng", -- Mang -------- Languages with ~ with surrounding spaces used to separate variants -------- "mkh-ban-pro", -- Proto-Bahnaric "sit-pro", -- Proto-Sino-Tibetan; listed above -------- Other weirdnesses -------- "mul", -- Translingual; gestures, Morse code, etc. "aot", -- Atong (India); bullet is a letter -------- All sign languages -------- "ads", "aed", "aen", "afg", "ase", "asf", "asp", "asq", "asw", "bfi", "bfk", "bog", "bqn", "bqy", "bvl", "bzs", "cds", "csc", "csd", "cse", "csf", "csg", "csl", "csn", "csq", "csr", "doq", "dse", "dsl", "ecs", "esl", "esn", "eso", "eth", "fcs", "fse", "fsl", "fss", "gds", "gse", "gsg", "gsm", "gss", "gus", "hab", "haf", "hds", "hks", "hos", "hps", "hsh", "hsl", "icl", "iks", "ils", "inl", "ins", "ise", "isg", "isr", "jcs", "jhs", "jls", "jos", "jsl", "jus", "kgi", "kvk", "lbs", "lls", "lsl", "lso", "lsp", "lst", "lsy", "lws", "mdl", "mfs", "mre", "msd", "msr", "mzc", "mzg", "mzy", "nbs", "ncs", "nsi", "nsl", "nsp", "nsr", "nzs", "okl", "pgz", "pks", "prl", "prz", "psc", "psd", "psg", "psl", "pso", "psp", "psr", "pys", "rms", "rsl", "rsm", "sdl", "sfb", "sfs", "sgg", "sgx", "slf", "sls", "sqk", "sqs", "ssp", "ssr", "svk", "swl", "syy", "tse", "tsm", "tsq", "tss", "tsy", "tza", "ugn", "ugy", "ukl", "uks", "vgt", "vsi", "vsl", "vsv", "xki", "xml", "xms", "ygs", "ysl", "zib", "zsl", } --[==[ var: List of languages where a hyphen is not considered a word separator for the `LANG multiword terms` category. There are numerous reasons why languages are in this list; by each language should be listed the reason for inclusion. ]==] data.hyphen_not_multiword_sep = list_to_set{ "akk", -- Akkadian; hyphens between syllables "akl", -- Aklanon; hyphens for mid-word glottal stops "ber-pro", -- Proto-Berber; morphemes separated by hyphens "ceb", -- Cebuano; hyphens for mid-word glottal stops "cnk", -- Khumi Chin; hyphens used in single words "cpi", -- Chinese Pidgin English; Chinese-derived words with hyphens between syllables "de", -- German; too many false positives "esx-esk-pro", -- hyphen used to separate morphemes "fi", -- Finnish; hyphen used to separate components in compound words if the final and initial vowels match, respectively "gd", -- Scottish Gaelic; too many false positives like [[a-chianaibh]], [[a-nìos]], [[an-dè]] and other adverbs in a- and an- "hil", -- Hiligaynon; hyphens for mid-word glottal stops "hnn", -- Hanunoo; too many false positives "ilo", -- Ilocano; hyphens for mid-word glottal stops "kne", -- Kankanaey; hyphens for mid-word glottal stops "lcp", -- Western Lawa; dash as syllable joiner "lwl", -- Eastern Lawa; dash as syllable joiner "mfa", -- Pattani Malay in Thai script; dash as syllable joiner "mkh-vie-pro", -- Proto-Vietic; morphemes separated by hyphens "msb", -- Masbatenyo; too many false positives "tl", -- Tagalog; too many false positives "war", -- Waray-Waray; too many false positives "yo", -- Yoruba; hyphens used to show lengthened nasal vowels } --[==[ var: List of languages that will not have `LANG masculine nouns` and similar categories added. Generally, these languages are lacking gender but use the gender field for other purposes. (This is a massive hack and should be changed.) ]==] data.no_gender_cat = list_to_set{ -- Languages without gender but which use the gender field for other purposes "ja", "th", } --[==[ var: List of languages where [[Module:headword]] should not attempt to generate a transliteration even if the term is written in a non-Latin script. FIXME: Notate reasons why each language is in this list. ]==] data.notranslit = list_to_set{ "ams", "az", "bbc", "bug", "cdo", "cia", "cjm", "cjy", "cmn", "cnp", "cpi", "cpx", "csp", "czh", "czo", "gan", "hak", "hnm", "hsn", "ja", "kzg", "lad", "ltc", "luh", "lzh", "mnp", "ms", "mul", "mvi", "nan", "nan-dat", "nan-hbl", "nan-hlh", "nan-lnx", "nan-tws", "nan-zhe", "nan-zsh", "och", "oj", "okn", "ryn", "rys", "ryu", "sh", "sjc", "tgt", "th", "tkn", "tly", "txg", "und", "vi", "wuu", "xug", "yoi", "yox", "yue", "za", "zh", "zhx-sic", "zhx-tai", } --[==[ var: List of languages that will default to `sccat` being true, i.e. categories like `LANG POS in SCRIPT script` will automatically be generated. This can be overridden using {{para|sccat|0}} in {{tl|head}} or setting `sccat` to `false` in Lua. ]==] data.default_sccat = list_to_set{ "inc-apa", "inc-ash", "kfr", "ks", "mr", "mwr", "inc-oaw", "inc-ohi", "omr", "inc-opa", "phr", "pi", "pra", "sa", "skr", "sd", } --[==[ var: List of script codes for which a script-tagged display title will be added. ]==] data.toBeTagged = list_to_set{ "Ahom", "Arab", "fa-Arab", "glk-Arab", "kk-Arab", "ks-Arab", "ku-Arab", "mzn-Arab", "ms-Arab", "ota-Arab", "pa-Arab", "ps-Arab", "sd-Arab", "tt-Arab", "ug-Arab", "ur-Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Batk", "Beng", "as-Beng", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans", "Cari", "Cham", "Cher", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva", "Dsrt", "Egyd", "Egyp", "Ethi", "Geok", "Geor", "Glag", "Goth", "Grek", "Polyt", "polytonic", "Gujr", "Guru", "Hang", "Hani", "Hano", "Hebr", "Hira", "Hluw", "Ital", "Java", "Kali", "Kana", "Khar", "Khmr", "Knda", "Kthi", "Lana", "Laoo", "Latn", "Latf", "Latg", "Latnx", "Latinx", "pjt-Latn", "Lepc", "Limb", "Linb", "Lisu", "Lyci", "Lydi", "Mand", "Mani", "Marc", "Merc", "Mero", "Mlym", "Mong", "mnc-Mong", "sjo-Mong", "xwo-Mong", "Mtei", "Mymr", "Narb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Ougr", "Palm", "Phag", "Phli", "Phlv", "Phnx", "Plrd", "Prti", "Rjng", "Runr", "Samr", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Tagb", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Ugar", "Vaii", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Ipach", "Music", "Rumin", } --[==[ var: Parts of speech which will not be categorised in categories like `English terms spelled with É` if the term is the character in question (e.g. the letter entry for English [[é]]). This contrasts with entries like the French adjective [[m̂]], which is a one-letter word spelled with the letter. ]==] data.pos_not_spelled_with_self = list_to_set{ "diacritical marks", "Han characters", "Han tu", "hanja", "hanzi", "iteration marks", "kana", "kanji", "letters", "ligatures", "logograms", "morae", "numeral symbols", "numerals", "punctuation marks", "syllables", "symbols", } ------ 2. Lists not converted into sets. ------ --[==[ var: Recognized aliases for parts of speech (param 2=). Key is the short form and value is the canonical singular (not pluralized) form. It is singular so the same table can be used in [[Module:form of]] for the {{para|p}}/{{para|POS}} param and [[Module:links]] for the pos= param. Note that any part of speech, abbreviated or not, can be suffixed with `f` to generate the corresponding non-lemma form part of speech, such as `adjf`, `af` or `adjectivef` for `adjective form`, and `nounf` or `nf` for `noun form`. This expansion happens even when it does not make sense for the given part of speech (e.g. `pclf` expands to `particle form` and `symf` expands to `symbol form`), and currently also, at least in [[Module:headword]] (but not [[Module:links]]), even if the part before the `f` is not a recognized part of speech or abbreviation (hence `nerf` expands to `ner form`). ]==] data.pos_aliases = { a = "နာမဝိသေသန", adj = "နာမဝိသေသန", adv = "ကြိယာဝိသေသန", art = "ပစ္စဲ", det = "determiner", cnum = "cardinal number", conj = "သမ္ဗန္ဓ", conv = "converb", int = "အာမေဍိက်", interj = "အာမေဍိက်", intj = "အာမေဍိက်", n = "နာမ်", nounf = "ဗီုပြၚ်နာမ်", num = "ဂၞန်သၚ်္ချာ", part = "လုပ်ကၠောန်စွံလဝ်", pcl = "လုပ်ကၠောန်စွံလဝ်", phr = "ဝါကျ", pn = "နာမ်မကိတ်ညဳ", postp = "ကဆံၚ်အကာဲအရာ", pre = "ဝိဘတ်", prep = "ဝိဘတ်", pro = "သဗ္ဗနာမ်", pron = "သဗ္ဗနာမ်", prop = "နာမ်မကိတ်ညဳ", proper = "နာမ်မကိတ်ညဳ", onum = "ordinal number", rom = "ဗီုအက္ခရ်ရောမ", romanization = "ဗီုအက္ခရ်ရောမ", romanizations = "ဗီုအက္ခရ်ရောမ", v = "ကြိယာ", vb = "ကြိယာ", vi = "intransitive verb", vt = "transitive verb", vti = "transitive and intransitive verb", ["diminutive noun"] = "နာမ်မလဟုတ်စှ်ေ", ["diminutive nouns"] = "နာမ်မလဟုတ်စှ်ေ", noun = "နာမ်", nouns = "နာမ်", ["noun form"] = "ဗီုပြၚ်နာမ်", ["noun forms"] = "ဗီုပြၚ်နာမ်", verb = "ကြိယာ", verbs = "ကြိယာ", ["verb form"] = "ဗီုပြၚ်ကြိယာ", ["verb forms"] = "ဗီုပြၚ်ကြိယာ", verbf = "ဗီုပြၚ်ကြိယာ", adjective = "နာမဝိသေသန", adjectives = "နာမဝိသေသန", adjf = "ဗီုပြၚ်နာမဝိသေသန", adjectivef = "ဗီုပြၚ်နာမဝိသေသန", ["adjective form"] = "ဗီုပြၚ်နာမဝိသေသန", ["adjective forms"] = "ဗီုပြၚ်နာမဝိသေသန", adverb = "ကြိယာဝိသေသန", adverbs = "ကြိယာဝိသေသန", ["adverb form"] = "ဗီုပြၚ်ကြိယာဝိသေသန", ["adverb forms"] = "ဗီုပြၚ်ကြိယာဝိသေသန", interjection = "အာမေဍိက်", ["interjection form"] = "ဗီုပြၚ်အာမေဍိက်", ["interjection forms"] = "ဗီုပြၚ်အာမေဍိက်", pronoun = "သဗ္ဗနာမ်", pronouns = "သဗ္ဗနာမ်", ["pronoun form"] = "ဗီုပြၚ်သဗ္ဗနာမ်", ["pronoun forms"] = "ဗီုပြၚ်သဗ္ဗနာမ်", preposition = "ဝိဘတ်", ["preposition form"] = "ဗီုပြၚ်ဝိဘတ်", ["preposition forms"] = "ဗီုပြၚ်ဝိဘတ်", suffix = "အဆက်လက္ကရဴ", ["suffix form"] = "ဗီုပြၚ်အဆက်လက္ကရဴ", ["suffix forms"] = "ဗီုပြၚ်အဆက်လက္ကရဴ", phrase = "ဝါကျ", ["phrase form"] = "ဗီုပြၚ်ဝါကျ", ["phrase forms"] = "ဗီုပြၚ်ဝါကျ", numeral = "ဂၞန်သၚ်္ချာ", numerals = "ဂၞန်သၚ်္ချာ", ["numeral form"] = "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", ["numeral forms"] = "ဗီုပြၚ်ဂၞန်သၚ်္ချာ", proverb = "ပေါရာဏာံပေါရာဒါံ", conjunction = "သမ္ဗန္ဓ", conjunctions = "သမ္ဗန္ဓ", ["conjunction form"] = "ဗီုပြၚ်သမ္ဗန္ဓ", ["conjunction forms"] = "ဗီုပြၚ်သမ္ဗန္ဓ", contraction = "ပွမထညောံ", ["contraction form"] = "ဗီုပြၚ်ပွမထညောံ", ["contraction forms"] = "ဗီုပြၚ်ပွမထညောံ", article = "ပစ္စဲ", ["article form"] = "ဗီုပြၚ်ပစ္စဲ", ["article forms"] = "ဗီုပြၚ်ပစ္စဲ", root = "တံရိုဟ်", ["root form"] = "ဗီုပြၚ်တံရိုဟ်", ["root forms"] = "ဗီုပြၚ်တံရိုဟ်", prefix = "အဆက်ဂတ", ["prefix form"] = "ဗီုပြၚ်အဆက်ဂတ", ["prefix forms"] = "ဗီုပြၚ်အဆက်ဂတ", particle = "ကၞာတ်အမှိက်", classifier = "နာမ်ပါ်ကၞာတ်", determiner = "ဖျေံလဝ်သန္နိဋ္ဌာန်", determiners = "ဖျေံလဝ်သန္နိဋ္ဌာန်", ["mutated noun"] = "နာမ်အပြံၚ်အသၠာဲ", ["mutated verb"] = "ကြိယာအပြံၚ်အသၠာဲ", ["determiner form"] = "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", ["determiner forms"] = "ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်", ["reconstructed determiner"] = "ဖျေံလဝ်သန္နိဋ္ဌာန်နကဵုဗီုပြၚ်သိုၚ်တၟိ", ["reconstructed verb"] = "ကြိယာဗီုပြၚ်သိုၚ်တၟိ", ["reconstructed noun"] = "နာမ်ဗီုပြၚ်သိုၚ်တၟိ", counter = "ရိုဟ်သၠုဲ", postposition = "ကဆံၚ်", misspelling = "ခ္ဍံက်လိက်ဗၠေတ်", final = "အဆံၚ်လက္ကရဴ", ["verb finals"] = "ကြိယာအဆံၚ်လက္ကရဴ", ["transitive inanimate verb finals"] = "ကြိယာအပြံၚ်အလှာဲအဆံၚ်လက္ကရဴမသ္ကုဟၟဲကဵုလမျီုနကဵုဘာသာ", affix = "အဆက်စုတ်လက္ကရဴ", ["affix form"] = "ဗီုပြၚ်အဆက်စုတ်လက္ကရဴ", ["affix forms"] = "ဗီုပြၚ်အဆက်စုတ်လက္ကရဴ", ["diacritical mark"] = "ခရက်သမ္တီလဝ်ဓမံက်ထ္ၜးရမျာၚ်", postposition = "ကဆံၚ်အကာဲအရာ", ["postposition form"] = "ဗီုပြၚ်ကဆံၚ်အကာဲအရာ", infix = "စန်", letter = "အက္ခရ်", hanzi = "ဟာန်သဳ", ["prepositional phrase"] = "ဝါကျဝိဘတ်", ["prepositional pronoun"] = "သဗ္ဗနာမ်ဝိဘတ်", stem = "တံမအရေဝ်", participle = "လုပ်ကၠောန်စွံလဝ်", participles = "လုပ်ကၠောန်စွံလဝ်", ["past participle"] = "လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", ["past participle form"] = "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်", ["proper noun"] = "နာမ်မကိတ်ညဳ", ["proper noun form"] = "ဗီုပြၚ်နာမ်မကိတ်ညဳ", ["participle form"] = "ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်", ["comparative adjective"] = "နာမဝိသေသနပတုပ်ရံၚ်", ["superlative adjective"] = "သဒ္ဒာနာမဝိသေသန", ["numeral symbol"] = "သၚ်္ကေတဂၞန်သၚ်္ချာ", ["particle forms"] = "ဗီုပြၚ်ကၞာတ်အမှိက်", ["particle form"] = "ဗီုပြၚ်ကၞာတ်အမှိက်", ["present participles"] = "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", ["present participle"] = "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်", ["alternative form"] = "ဗီုပြၚ်တၞဟ်ခြာ", singulative = "ကိုန်ဨကဝုစ်", singulatives = "ကိုန်ဨကဝုစ်", } --[==[ var: Map of parts of speech for which categories like `German masculine nouns` or `Russian imperfective verbs` will be generated if the headword is of the appropriate gender/number. The map is used to canonicalize parts of speech for categorization purposes; specifically, proper nouns categorizes like nouns. ]==] data.pos_for_gender_number_cat = { ["နာမ်"] = "နာမ်", ["နာမ်မကိတ်ညဳ"] = "နာမ်", ["အဆက်လက္ကရဴ"] = "အဆက်လက္ကရဴ", -- We include verbs because impf and pf are valid "genders". ["ကြိယာ"] = "ကြိယာ", } --[==[ var: Lower limit for a "long" word in a particular language. Used to categorize terms into e.g. [[:Category:Long English words]] automatically. Languages with no mapping here do not get categorized. ]==] data.long_word_thresholds = { ["af"] = 20, ["bg"] = 20, ["cy"] = 25, ["de"] = 20, ["en"] = 25, ["es"] = 20, ["fr"] = 20, ["ka"] = 20, ["sv"] = 20, ["tl"] = 25, } ------ 3. Page-wide processing (so that it only needs to be done once per page). ------ data.page = require(headword_page_module).process_page() -- Set some page properties directly on `data` for ease of use. data.pagename = data.page.pagename data.encoded_pagename = data.page.encoded_pagename return data 0gwb9uycahgctlbu2uw70ydiopx6gpn ထာမ်ပလိက်:egy-alt tr 10 1311 393747 158656 2026-05-01T17:13:09Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:egy-alt]] ဇရေင် [[ထာမ်ပလိက်:egy-alt tr]] 158656 wikitext text/x-wiki {{#invoke:form of/templates|form_of_t|lang=egy|sc=Latn|ignore=type|{{#if:{{{type|}}}|[[:en:w:Transliteration of Ancient Egyptian|ကၠာဲကဵုအက္ခဝ်ရုဲစှ်လဝ်ဝေါဟာမဆေၚ်စပ်ကဵု]] |[[:en:w:Transliteration of Ancient Egyptian|{{#if:{{{nocap|}}}|a|A}}lternative transliteration]] of}}|cat=|withcap=1|withdot=1}}<noinclude>{{documentation}}</noinclude> 2d328j96vxycdq3goksr0536muxmjes 393795 393747 2026-05-02T06:44:04Z 咽頭べさ 33 393795 wikitext text/x-wiki {{#invoke:form of/templates|form_of_t|lang=egy|sc=Latn|ignore=type|{{#if:{{{type|}}}|[[:en:w:Transliteration of Ancient Egyptian|ကၠာဲကဵုအက္ခဝ်ရုဲစှ်လဝ်ဝေါဟာမဆေၚ်စပ်ကဵု]] |[[:en:w:Transliteration of Ancient Egyptian|မကၠာဲအက္ခရ်ဗီုပြၚ်တၞဟ်ခြာ]] နူဝေါဟာ}}|cat=|withcap=1|withdot=1}}<noinclude>{{documentation}}</noinclude> tm7kelfczcoiezwhxqkj61szxyx86he မဝ်ဂျူ:he-headword 828 24888 393805 158132 2026-05-02T07:23:29Z 咽頭べさ 33 393805 Scribunto text/plain local m_headword = require("Module:headword") local com = require("Module:he-common") local export = {} local pos_functions = {} local lang = require("Module:languages").getByCode("he") local function get_params_list(args, argprefix) local export = {} i = 1 term = argprefix while args[term] ~= nil and args[term] ~= "" do table.insert(export, term) i = i + 1 term = argprefix .. i end return export end local function make_params_array(args, params) local export = {} for _, param in ipairs(params) do table.insert(export, args[param]) end return export end local function maybe_get_inflection(args, name, params, list, accel, is_construct) if list then params = get_params_list(args, params) end local tbl = {} if type(params) ~= "table" then params = {params} end for _, param in ipairs(params) do local paramwv = param .. "wv" local paramdwv = param .. "dwv" if args[param] or args[paramwv] or args[paramdwv] then tbl.label = name tbl.accel = accel if is_construct == true then table.insert(tbl, com.gen_link_ending_with_makaf(args[param], args[paramwv], args[paramdwv])) else table.insert(tbl, com.gen_link(args[param], args[paramwv], args[paramdwv])) end end if args[param] == "" or args[paramwv] == "" or args[paramdwv] == "" then require('Module:debug').track("he-noun/empty-form-param") elseif args[param] ~= nil and args[paramwv] ~= nil then require('Module:debug').track("he-noun/param-and-paramwv") end end return next(tbl) and tbl end -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= "" then args[k] = v end end local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") if frame.args["auto"] and (args["auto"] == "" or not args["auto"]) then args["auto"] = frame.args["auto"] end local data = {lang = lang, pos_category = poscat, categories = {}, heads = make_params_array(args, get_params_list(args, "head")), translits = make_params_array(args, get_params_list(args, "tr")), genders = {}, inflections = {}} local head = args["head"]; if head == "" then head = nil end; data.heads[1] = head data.sort_key = args["sort"]; if data.sort_key == "" then data.sort_key = nil end if data.sort_key then data.sort_key = data.sort_key .. "a" .. mw.title.getCurrentTitle().subpageText end local wv = args["wv"] or mw.title.getCurrentTitle().subpageText local dwv = args["dwv"] if not data.heads[1] then if dwv then data.heads[1] = wv .. " \\ " .. '<span class="inflection-table">' .. "[[" .. dwv .. "]]" .. "</span>" -- not really an inflection table but for the black links else data.heads[1] = wv end end if dwv and mw.ustring.match(dwv, "%[%[") then require('Module:debug').track("he-noun/link-in-dwv") end if not (args["wv"] or args["dwv"] or args["head"]) then require('Module:debug').track("he-noun/no-nikud") end if mw.ustring.match(wv, "׳") then end if mw.ustring.match(wv, "״") then end local begedkefet = "בגדכפת" local vowels = "ְֱֲֳִֵֶַָֹֻ" local dagesh = "ּֿ" local begedkefet_regex = "[" .. begedkefet .. "]" local vowels_with_mater_lectionis_regex = "[" .. vowels .. "וא" .. "]" local dagesh_regex = "[" .. dagesh .. "]" local fixed_nikud = com.fix_nikud(args["dwv"] or args["wv"] or "") if args["unchangeablebegedkefet"] == "1" or mw.ustring.match(fixed_nikud, "^" .. begedkefet_regex .. vowels_with_mater_lectionis_regex) then elseif mw.ustring.match(fixed_nikud, "^" .. begedkefet_regex .. dagesh_regex) then end local pattern_link = "" if args["pat"] and args["pat"] ~= "" and poscat ~= "verbs" then local patfmt = require("Module:links").full_link({lang = lang, alt = args["pat"], tr = "-"}) pattern_link = " <small>[[အဆက်လက္ကရဴ:ဗီုပြၚ်ဟဳဘရဝ်ဂမၠိုၚ်/" .. args["pat"] .. "|[ဗီုပြၚ်: " .. patfmt .. "] ]]</small>" end if pos_functions[poscat] then pos_functions[poscat](args, data, wv) end table.insert(data.inflections, maybe_get_inflection(args, "[[:en:w:Pausa|ဗီုပြၚ်မွဲချိန်ခဏ]]မဆေၚ်စပ်ကဵုလိက်သၠပတ်ဟဳဘရဝ်", "pausal", false)) return (m_headword.full_headword(data)) .. pattern_link end local final_to_nonfinal = { ["ך"]="כ", ["ם"]="מ", ["ן"]="נ", ["ף"]="פ", ["ץ"]="צ", } local function stemify_helper(letter, rest) return (final_to_nonfinal[letter] or letter) .. rest end local function stemify(x) if x then x = mw.ustring.gsub(x, "ְ([^א-תﭏ]*)$", "%1") x = mw.ustring.gsub(x, "([ךםןףץ])([^א-תﭏ]*)$", stemify_helper) end return x end local function gen_fem_t(stemwv) local stub, vowel, final, dagesh = mw.ustring.match(com.fix_nikud(stemwv), "^(.*)([ְֲִָ])([א-ת][ׁׂ]?)(ּ?)$") if not stub then error("Error attaching feminine ת suffix, please check vocalization.") end if final == "י" then if vowel ~= "ִ" or dagesh ~= "ּ" then error("Error attaching feminine ת suffix, please check vocalization.") end return stub .. vowel .. final .. "ת" end if vowel == "ִ" or dagesh ~= "" then error("Error attaching feminine ת suffix, please check vocalization.") end if final == "א" then return stub .. "ֵ" .. final .. "ת" end if final == "ה" or final == "ח" or final == "ע" then return stub .. "ַ" .. final .. "ַ" .. "ת" end return stub .. "ֶ" .. final .. "ֶ" .. "ת" end pos_functions["နာမဝိသေသန"] = function(args, data) -- table.insert(genders, "m") if args["auto"] == nil or args["auto"] == "" then -- Use only provided inflections table.insert(data.inflections, maybe_get_inflection(args, "feminine", {"f", "f2"}, false)) table.insert(data.inflections, maybe_get_inflection(args, "masculine plural", {"mp", "mp2"}, false)) table.insert(data.inflections, maybe_get_inflection(args, "feminine plural", "fp", true)) else require("Module:debug").track("he-adj/auto") -- Automatically generate inflections local stem = args["stem"] local stemwv = args["stemwv"] local stemdwv = args["stemdwv"] local e = false if not stem then if stemwv then stem = com.remove_nikud(stemwv) else stem = stemify(mw.title.getCurrentTitle().subpageText) if not stemdwv then stemwv = stemify(args["wv"]) stemdwv = stemify(args["dwv"]) end local fstemwv = stemwv and com.fix_nikud(stemwv) local fstemdwv = stemdwv and com.fix_nikud(stemdwv) if (fstemwv or fstemdwv) and (stem ~= nil or stem:match("ה$")) and (fstemwv == nil or fstemwv:match("ֶה$")) and (fstemdwv == nil or fstemdwv:match("ֶה$")) then e = true stem = stem and stem:gsub("ה$", "") stemwv = fstemwv and fstemwv:gsub("ֶה$", "") stemdwv = fstemdwv and fstemdwv:gsub("ֶה$", "") end end end stem, stemwv, stemdwv = com.process_wv_triad(stem, stemwv, stemdwv) local f, fwv, fdwv = com.process_wv_triad(args["f"], args["fwv"], args["fdwv"]) local f2, f2wv, f2dwv = com.process_wv_triad(args["f2"], args["f2wv"], args["f2dwv"]) local mp, mpwv, mpdwv = com.process_wv_triad(args["mp"], args["mpwv"], args["mpdwv"]) local mp2, mp2wv, mp2dwv = com.process_wv_triad(args["mp2"], args["mp2wv"], args["mp2dwv"]) local fp, fpwv, fpdwv = com.process_wv_triad(args["fp"], args["fpwv"], args["fpdwv"]) if f ~= "-" then if not (f or fwv or fdwv) then f = stem and (stem .. "ה") fwv = stemwv and (stemwv .. "ָה") fdwv = stemdwv and (stemdwv .. "ָה") elseif f == "ת" and not (fwv or fdwv) then f = stem and (stem .. (e and "ית" or "ת")) fwv = stemwv and (e and (stemwv .. "ֵית") or gen_fem_t(stemwv)) fdwv = stemdwv and (e and (stemdwv .. "ֵית") or gen_fem_t(stemdwv)) end if f2 == "ת" and not (f2wv or f2dwv) then f2 = stem and (stem .. (e and "ית" or "ת")) f2wv = stemwv and (e and (stemwv .. "ֵית") or gen_fem_t(stemwv)) f2dwv = stemdwv and (e and (stemdwv .. "ֵית") or gen_fem_t(stemdwv)) end tbl = {label = "ဣတ္တိလိၚ်", com.gen_link(f, fwv, fdwv)} if f2 or f2wv or f2dwv then table.insert(tbl, com.gen_link(f2, f2wv, f2dwv)) end table.insert(data.inflections, tbl) end if mp ~= "-" then if not (mp or mpwv or mpdwv) then mp = stem and (stem .. "ים") mpwv = stemwv and (stemwv .. "ִים") mpdwv = stemdwv and (stemdwv .. "ִים") end tbl = {label = "ကိုန်ဗဟုဝစ်ပုလ္လိၚ်", com.gen_link(mp, mpwv, mpdwv)} if mp2 or mp2wv or mp2dwv then table.insert(tbl, com.gen_link(mp2, mp2wv, mp2dwv)) end table.insert(data.inflections, tbl) end if fp ~= "-" then if not (fp or fpwv or fpdwv) then fp = stem and (stem .. "ות") fpwv = stemwv and (stemwv .. "וֹת") fpdwv = stemdwv and (stemdwv .. "וֹת") end tbl = {label = "ကိုန်ဗဟုဝစ်ဣတ္တိလိၚ်", com.gen_link(fp, fpwv, fpdwv)} table.insert(data.inflections, tbl) end end end pos_functions["determiners"] = function(args, data, wv) if args["g"] == "m" or args["g"] == "m-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.inflections, maybe_get_inflection(args, "feminine counterpart", "f", true)) elseif args["g"] == "f" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.inflections, maybe_get_inflection(args, "masculine counterpart", "m", false)) end end local function validate_gender(gender, param) if not ( gender == "" or gender == nil or gender == "m" or gender == "f" or gender == "m-d" or gender == "f-d" or gender == "m-p" or gender == "f-p" or gender == "-" -- for אַל "naught" ) then if gender:find "m" and gender:find "f" then error("To indicate two genders, use |g2=; for instance, for masculine or feminine, |g=m|g2=f") else error("Gender in |" .. param .. "=" .. gender .. " is invalid; choose from m, f, m-d, f-d, m-p, f-p") end end end pos_functions["နာမ်"] = function(args, data, wv) validate_gender(args["g"], "g") validate_gender(args["g2"], "g2") if args["g2"] ~= nil and args["g2"] ~= "" and not (args["g"] ~= nil and args["g"] ~= "") then error("|g= parameter required if |g2= is present") end if args["g"] == "m" or args["g"] == "f" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) if args["sg"] ~= nil then require('Module:debug').track("he-noun/sg-for-head") end elseif args["g"] == "m-d" or args["g"] == "f-d" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.categories, "Hebrew dualia tantum") table.insert(data.inflections, maybe_get_inflection(args, "singular indefinite", "sg", false)) elseif args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.categories, "Hebrew pluralia tantum") table.insert(data.inflections, maybe_get_inflection(args, "singular indefinite", "sg", false)) elseif args["g"] == "" or args["g"] == nil then table.insert(data.genders, "?") end -- Dual forms rare enough that there's no need for without/missing categoristion table.insert(data.inflections, maybe_get_inflection(args, "dual indefinite", "dual", true)) if args["pl"] == "-" then table.insert(data.inflections, {label = "ဗီုပြၚ်ကိုန်ဗဟုဝစ်ဟွံမွဲ"}) elseif args["pl"] == "" or args["pl"] == nil then else table.insert(data.inflections, maybe_get_inflection(args, "ကိုန်ဗဟုဝစ်ဟွံချိုတ်ပၠိုတ်", "pl", true, {form = "p", lemma = wv})) if args["g"] == "m" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ות" then elseif args["g"] == "f" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ים" then end if mw.ustring.sub(com.remove_nikud(args["pl"]), -3, -1) == "יים" and mw.ustring.sub(mw.ustring.gsub(com.remove_nikud(wv), "[%[%]]", ""), -1, -1) ~= "י" then end end if args["cons"] == "-" then table.insert(data.inflections, {label = "ဟွံမွဲဗီုပြၚ်ခၞံဗဒှ်လဝ်"}) else if args["cons"] == "" or args["cons"] == nil then else table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ကိုန်ဨကဝုစ်", "cons", true, {form = "s|cons", lemma = wv}, true)) end table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ၜါလ္ပာ်", "dualcons", true , nil, true)) if (args["plcons"] == "" or args["plcons"] == nil) and args["pl"] ~= "-" then else table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ကိုန်ဗဟုဝစ်", "plcons", true, {form = "p|cons", lemma = wv}, true)) end end table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ပုလ္လိၚ်", "m", true)) table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ဣတ္တိလိၚ်", "f", true)) if args["g"] == "m" and mw.ustring.sub((com.remove_nikud(args["wv"] or args["dwv"] or mw.title.getCurrentTitle().subpageText)), -1) == "ת" then elseif args["g"] == "m" and mw.ustring.sub((com.remove_nikud(args["wv"] or args["dwv"] or mw.title.getCurrentTitle().subpageText)), -1) == "ה" then elseif args["g"] == "m" then elseif args["g"] == "f" then end end pos_functions["ဂၞန်သၚ်္ချာ"] = function(args, data) table.insert(data.inflections, maybe_get_inflection(args, "construct", "cons", true, nil, true)) table.insert(data.inflections, maybe_get_inflection(args, "dual", "dual", true)) table.insert(data.inflections, maybe_get_inflection(args, "plural", "pl", true)) local f = maybe_get_inflection(args, "ဣတ္တိလိၚ်", "f", true) table.insert(data.inflections, f) table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ဣတ္တိလိၚ်", "fcons", true, nil, true)) table.insert(data.genders, "m") if not f then table.insert(data.genders, "f") end end pos_functions["သဗ္ဗနာမ်"] = function(args, data) if args["g"] == "m" or args["g"] == "f" or args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["n"] then require('Module:debug').track("he-pron/param-n") end end pos_functions["နာမ်မကိတ်ညဳ"] = function(args, data, wv) if args["pl"] and args["pl"] ~= "-" and args["pl"] ~= "" then table.insert(data.inflections, maybe_get_inflection(args, "ကိုန်ဗဟုဝစ်ဟွံချိုတ်ပၠိုတ်", "pl", true, {form = "p", lemma = wv})) if args["g"] == "m" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ות" then elseif args["g"] == "f" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ים" then end if mw.ustring.sub(com.remove_nikud(args["pl"]), -3, -1) == "יים" and mw.ustring.sub(mw.ustring.gsub(com.remove_nikud(wv), "[%[%]]", ""), -1, -1) ~= "י" then end end if args["g"] == "m" or args["g"] == "f" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "m-d" or args["g"] == "f-d" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "" or args["g"] == nil then elseif args["g"] == "-" then --surnames don't really have gender else table.insert(data.genders, "?") end end local binyanim = { ["pa"] = "pa'al", ["pi"] = "pi'el", ["hif"] = "hif'il", ["hit"] = "hitpa'el", ["huf"] = "huf'al", ["pu"] = "pu'al", ["nif"] = "nif'al", ["hitpu'al"] = "hitpu'al", -- should this be included? } local weakroots = { ["פ"] = { ["א"] = true, ["ה"] = true, ["ח"] = true, ["י"] = true, ["ל"] = true, ["נ"] = true, ["ע"] = true, }, ["ע"] = { ["א"] = true, ["ה"] = true, ["ו"] = true, ["ח"] = true, ["י"] = true, ["ע"] = true, ["ר"] = true, }, ["ל"] = { ["א"] = true, ["ה"] = true, ["ח"] = true, ["נ"] = true, ["ע"] = true, }, } local function maybe_get_weakcat(args, pos, binyan) if weakroots[pos][args[pos]] then if binyan then return "ကြိယာ" .. args[pos] .. "ဟဳဗရဝ်ဝေါဟာ (״" .. pos .. binyan .. ") ဂမၠိုၚ်" else return "ကြိယာ" .. args[pos] .. "ဟဳဗရဝ်ဝေါဟာ (״" .. pos .. ") ဂမၠိုၚ်" end else return nil -- perhaps track error if args[pos] ~= "" end end pos_functions["ကြိယာ"] = function(args, data) local binyan = binyanim[args[1]] if binyan then table.insert(data.inflections, { label="[[:en:Appendix:Hebrew verbs|" .. binyan .. " ဗီုပြၚ်ခၞံပ္တန်ဗဒှ်လဝ်]]" }) elseif args[1] ~= "-" then end table.insert(data.categories, maybe_get_weakcat(args, "פ", binyan)) table.insert(data.categories, maybe_get_weakcat(args, "ע", binyan)) table.insert(data.categories, maybe_get_weakcat(args, "ל", binyan)) table.insert(data.inflections, maybe_get_inflection(args, "ဟၟဲတွဵုဒနက်", "inf", true)) table.insert(data.inflections, maybe_get_inflection(args, "ပစ္စုပ္ပန်", "pres", true)) table.insert(data.inflections, maybe_get_inflection(args, "အနာဂတ်", "fut", true)) table.insert(data.inflections, maybe_get_inflection(args, "ပါဲဗလေတ်ဟွံမာန်", "imp", true)) table.insert(data.inflections, maybe_get_inflection(args, "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "passp", true)) table.insert(data.inflections, maybe_get_inflection(args, "တၞးချာဲဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "pass", true)) table.insert(data.inflections, maybe_get_inflection(args, "တၞးချာဲဗီုပြၚ်ကြိယာမစၞောန်ထ္ၜး", "act", true)) end return export 3ud4405lho9xxdvc4y3uxb5nxzhk02z 393806 393805 2026-05-02T07:30:03Z 咽頭べさ 33 393806 Scribunto text/plain local m_headword = require("Module:headword") local com = require("Module:he-common") local export = {} local pos_functions = {} local lang = require("Module:languages").getByCode("he") local function get_params_list(args, argprefix) local export = {} i = 1 term = argprefix while args[term] ~= nil and args[term] ~= "" do table.insert(export, term) i = i + 1 term = argprefix .. i end return export end local function make_params_array(args, params) local export = {} for _, param in ipairs(params) do table.insert(export, args[param]) end return export end local function maybe_get_inflection(args, name, params, list, accel, is_construct) if list then params = get_params_list(args, params) end local tbl = {} if type(params) ~= "table" then params = {params} end for _, param in ipairs(params) do local paramwv = param .. "wv" local paramdwv = param .. "dwv" if args[param] or args[paramwv] or args[paramdwv] then tbl.label = name tbl.accel = accel if is_construct == true then table.insert(tbl, com.gen_link_ending_with_makaf(args[param], args[paramwv], args[paramdwv])) else table.insert(tbl, com.gen_link(args[param], args[paramwv], args[paramdwv])) end end if args[param] == "" or args[paramwv] == "" or args[paramdwv] == "" then require('Module:debug').track("he-noun/empty-form-param") elseif args[param] ~= nil and args[paramwv] ~= nil then require('Module:debug').track("he-noun/param-and-paramwv") end end return next(tbl) and tbl end -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local args = {} for k, v in pairs(frame:getParent().args) do if v ~= "" then args[k] = v end end local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") if frame.args["auto"] and (args["auto"] == "" or not args["auto"]) then args["auto"] = frame.args["auto"] end local data = {lang = lang, pos_category = poscat, categories = {}, heads = make_params_array(args, get_params_list(args, "head")), translits = make_params_array(args, get_params_list(args, "tr")), genders = {}, inflections = {}} local head = args["head"]; if head == "" then head = nil end; data.heads[1] = head data.sort_key = args["sort"]; if data.sort_key == "" then data.sort_key = nil end if data.sort_key then data.sort_key = data.sort_key .. "a" .. mw.title.getCurrentTitle().subpageText end local wv = args["wv"] or mw.title.getCurrentTitle().subpageText local dwv = args["dwv"] if not data.heads[1] then if dwv then data.heads[1] = wv .. " \\ " .. '<span class="inflection-table">' .. "[[" .. dwv .. "]]" .. "</span>" -- not really an inflection table but for the black links else data.heads[1] = wv end end if dwv and mw.ustring.match(dwv, "%[%[") then require('Module:debug').track("he-noun/link-in-dwv") end if not (args["wv"] or args["dwv"] or args["head"]) then require('Module:debug').track("he-noun/no-nikud") end if mw.ustring.match(wv, "׳") then end if mw.ustring.match(wv, "״") then end local begedkefet = "בגדכפת" local vowels = "ְֱֲֳִֵֶַָֹֻ" local dagesh = "ּֿ" local begedkefet_regex = "[" .. begedkefet .. "]" local vowels_with_mater_lectionis_regex = "[" .. vowels .. "וא" .. "]" local dagesh_regex = "[" .. dagesh .. "]" local fixed_nikud = com.fix_nikud(args["dwv"] or args["wv"] or "") if args["unchangeablebegedkefet"] == "1" or mw.ustring.match(fixed_nikud, "^" .. begedkefet_regex .. vowels_with_mater_lectionis_regex) then elseif mw.ustring.match(fixed_nikud, "^" .. begedkefet_regex .. dagesh_regex) then end local pattern_link = "" if args["pat"] and args["pat"] ~= "" and poscat ~= "verbs" then local patfmt = require("Module:links").full_link({lang = lang, alt = args["pat"], tr = "-"}) pattern_link = " <small>[[အဆက်လက္ကရဴ:ဗီုပြၚ်ဟဳဘရဝ်ဂမၠိုၚ်/" .. args["pat"] .. "|[ဗီုပြၚ်: " .. patfmt .. "] ]]</small>" end if pos_functions[poscat] then pos_functions[poscat](args, data, wv) end table.insert(data.inflections, maybe_get_inflection(args, "[[:en:w:Pausa|ဗီုပြၚ်မွဲချိန်ခဏ]]မဆေၚ်စပ်ကဵုလိက်သၠပတ်ဟဳဘရဝ်", "pausal", false)) return (m_headword.full_headword(data)) .. pattern_link end local final_to_nonfinal = { ["ך"]="כ", ["ם"]="מ", ["ן"]="נ", ["ף"]="פ", ["ץ"]="צ", } local function stemify_helper(letter, rest) return (final_to_nonfinal[letter] or letter) .. rest end local function stemify(x) if x then x = mw.ustring.gsub(x, "ְ([^א-תﭏ]*)$", "%1") x = mw.ustring.gsub(x, "([ךםןףץ])([^א-תﭏ]*)$", stemify_helper) end return x end local function gen_fem_t(stemwv) local stub, vowel, final, dagesh = mw.ustring.match(com.fix_nikud(stemwv), "^(.*)([ְֲִָ])([א-ת][ׁׂ]?)(ּ?)$") if not stub then error("Error attaching feminine ת suffix, please check vocalization.") end if final == "י" then if vowel ~= "ִ" or dagesh ~= "ּ" then error("Error attaching feminine ת suffix, please check vocalization.") end return stub .. vowel .. final .. "ת" end if vowel == "ִ" or dagesh ~= "" then error("Error attaching feminine ת suffix, please check vocalization.") end if final == "א" then return stub .. "ֵ" .. final .. "ת" end if final == "ה" or final == "ח" or final == "ע" then return stub .. "ַ" .. final .. "ַ" .. "ת" end return stub .. "ֶ" .. final .. "ֶ" .. "ת" end pos_functions["နာမဝိသေသန"] = function(args, data) -- table.insert(genders, "m") if args["auto"] == nil or args["auto"] == "" then -- Use only provided inflections table.insert(data.inflections, maybe_get_inflection(args, "feminine", {"f", "f2"}, false)) table.insert(data.inflections, maybe_get_inflection(args, "masculine plural", {"mp", "mp2"}, false)) table.insert(data.inflections, maybe_get_inflection(args, "feminine plural", "fp", true)) else require("Module:debug").track("he-adj/auto") -- Automatically generate inflections local stem = args["stem"] local stemwv = args["stemwv"] local stemdwv = args["stemdwv"] local e = false if not stem then if stemwv then stem = com.remove_nikud(stemwv) else stem = stemify(mw.title.getCurrentTitle().subpageText) if not stemdwv then stemwv = stemify(args["wv"]) stemdwv = stemify(args["dwv"]) end local fstemwv = stemwv and com.fix_nikud(stemwv) local fstemdwv = stemdwv and com.fix_nikud(stemdwv) if (fstemwv or fstemdwv) and (stem ~= nil or stem:match("ה$")) and (fstemwv == nil or fstemwv:match("ֶה$")) and (fstemdwv == nil or fstemdwv:match("ֶה$")) then e = true stem = stem and stem:gsub("ה$", "") stemwv = fstemwv and fstemwv:gsub("ֶה$", "") stemdwv = fstemdwv and fstemdwv:gsub("ֶה$", "") end end end stem, stemwv, stemdwv = com.process_wv_triad(stem, stemwv, stemdwv) local f, fwv, fdwv = com.process_wv_triad(args["f"], args["fwv"], args["fdwv"]) local f2, f2wv, f2dwv = com.process_wv_triad(args["f2"], args["f2wv"], args["f2dwv"]) local mp, mpwv, mpdwv = com.process_wv_triad(args["mp"], args["mpwv"], args["mpdwv"]) local mp2, mp2wv, mp2dwv = com.process_wv_triad(args["mp2"], args["mp2wv"], args["mp2dwv"]) local fp, fpwv, fpdwv = com.process_wv_triad(args["fp"], args["fpwv"], args["fpdwv"]) if f ~= "-" then if not (f or fwv or fdwv) then f = stem and (stem .. "ה") fwv = stemwv and (stemwv .. "ָה") fdwv = stemdwv and (stemdwv .. "ָה") elseif f == "ת" and not (fwv or fdwv) then f = stem and (stem .. (e and "ית" or "ת")) fwv = stemwv and (e and (stemwv .. "ֵית") or gen_fem_t(stemwv)) fdwv = stemdwv and (e and (stemdwv .. "ֵית") or gen_fem_t(stemdwv)) end if f2 == "ת" and not (f2wv or f2dwv) then f2 = stem and (stem .. (e and "ית" or "ת")) f2wv = stemwv and (e and (stemwv .. "ֵית") or gen_fem_t(stemwv)) f2dwv = stemdwv and (e and (stemdwv .. "ֵית") or gen_fem_t(stemdwv)) end tbl = {label = "ဣတ္တိလိၚ်", com.gen_link(f, fwv, fdwv)} if f2 or f2wv or f2dwv then table.insert(tbl, com.gen_link(f2, f2wv, f2dwv)) end table.insert(data.inflections, tbl) end if mp ~= "-" then if not (mp or mpwv or mpdwv) then mp = stem and (stem .. "ים") mpwv = stemwv and (stemwv .. "ִים") mpdwv = stemdwv and (stemdwv .. "ִים") end tbl = {label = "ကိုန်ဗဟုဝစ်ပုလ္လိၚ်", com.gen_link(mp, mpwv, mpdwv)} if mp2 or mp2wv or mp2dwv then table.insert(tbl, com.gen_link(mp2, mp2wv, mp2dwv)) end table.insert(data.inflections, tbl) end if fp ~= "-" then if not (fp or fpwv or fpdwv) then fp = stem and (stem .. "ות") fpwv = stemwv and (stemwv .. "וֹת") fpdwv = stemdwv and (stemdwv .. "וֹת") end tbl = {label = "ကိုန်ဗဟုဝစ်ဣတ္တိလိၚ်", com.gen_link(fp, fpwv, fpdwv)} table.insert(data.inflections, tbl) end end end pos_functions["determiners"] = function(args, data, wv) if args["g"] == "m" or args["g"] == "m-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.inflections, maybe_get_inflection(args, "feminine counterpart", "f", true)) elseif args["g"] == "f" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.inflections, maybe_get_inflection(args, "masculine counterpart", "m", false)) end end local function validate_gender(gender, param) if not ( gender == "" or gender == nil or gender == "m" or gender == "f" or gender == "m-d" or gender == "f-d" or gender == "m-p" or gender == "f-p" or gender == "-" -- for אַל "naught" ) then if gender:find "m" and gender:find "f" then error("To indicate two genders, use |g2=; for instance, for masculine or feminine, |g=m|g2=f") else error("Gender in |" .. param .. "=" .. gender .. " is invalid; choose from m, f, m-d, f-d, m-p, f-p") end end end pos_functions["နာမ်"] = function(args, data, wv) validate_gender(args["g"], "g") validate_gender(args["g2"], "g2") if args["g2"] ~= nil and args["g2"] ~= "" and not (args["g"] ~= nil and args["g"] ~= "") then error("|g= parameter required if |g2= is present") end if args["g"] == "m" or args["g"] == "f" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) if args["sg"] ~= nil then require('Module:debug').track("he-noun/sg-for-head") end elseif args["g"] == "m-d" or args["g"] == "f-d" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.categories, "Hebrew dualia tantum") table.insert(data.inflections, maybe_get_inflection(args, "singular indefinite", "sg", false)) elseif args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) table.insert(data.categories, "Hebrew pluralia tantum") table.insert(data.inflections, maybe_get_inflection(args, "singular indefinite", "sg", false)) elseif args["g"] == "" or args["g"] == nil then table.insert(data.genders, "?") end -- Dual forms rare enough that there's no need for without/missing categoristion table.insert(data.inflections, maybe_get_inflection(args, "dual indefinite", "dual", true)) if args["pl"] == "-" then table.insert(data.inflections, {label = "ဗီုပြၚ်ကိုန်ဗဟုဝစ်ဟွံမွဲ"}) elseif args["pl"] == "" or args["pl"] == nil then else table.insert(data.inflections, maybe_get_inflection(args, "ကိုန်ဗဟုဝစ်ဟွံချိုတ်ပၠိုတ်", "pl", true, {form = "p", lemma = wv})) if args["g"] == "m" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ות" then elseif args["g"] == "f" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ים" then end if mw.ustring.sub(com.remove_nikud(args["pl"]), -3, -1) == "יים" and mw.ustring.sub(mw.ustring.gsub(com.remove_nikud(wv), "[%[%]]", ""), -1, -1) ~= "י" then end end if args["cons"] == "-" then table.insert(data.inflections, {label = "ဟွံမွဲဗီုပြၚ်ခၞံဗဒှ်လဝ်"}) else if args["cons"] == "" or args["cons"] == nil then else table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ကိုန်ဨကဝုစ်", "cons", true, {form = "s|cons", lemma = wv}, true)) end table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ၜါလ္ပာ်", "dualcons", true , nil, true)) if (args["plcons"] == "" or args["plcons"] == nil) and args["pl"] ~= "-" then else table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ကိုန်ဗဟုဝစ်", "plcons", true, {form = "p|cons", lemma = wv}, true)) end end table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ပုလ္လိၚ်", "m", true)) table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ဣတ္တိလိၚ်", "f", true)) if args["g"] == "m" and mw.ustring.sub((com.remove_nikud(args["wv"] or args["dwv"] or mw.title.getCurrentTitle().subpageText)), -1) == "ת" then elseif args["g"] == "m" and mw.ustring.sub((com.remove_nikud(args["wv"] or args["dwv"] or mw.title.getCurrentTitle().subpageText)), -1) == "ה" then elseif args["g"] == "m" then elseif args["g"] == "f" then end end pos_functions["ဂၞန်သၚ်္ချာ"] = function(args, data) table.insert(data.inflections, maybe_get_inflection(args, "construct", "cons", true, nil, true)) table.insert(data.inflections, maybe_get_inflection(args, "dual", "dual", true)) table.insert(data.inflections, maybe_get_inflection(args, "plural", "pl", true)) local f = maybe_get_inflection(args, "ဣတ္တိလိၚ်", "f", true) table.insert(data.inflections, f) table.insert(data.inflections, maybe_get_inflection(args, "ခၞံဗဒှ်လဝ်ဣတ္တိလိၚ်", "fcons", true, nil, true)) table.insert(data.genders, "m") if not f then table.insert(data.genders, "f") end end pos_functions["သဗ္ဗနာမ်"] = function(args, data) if args["g"] == "m" or args["g"] == "f" or args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["n"] then require('Module:debug').track("he-pron/param-n") end end pos_functions["နာမ်မကိတ်ညဳ"] = function(args, data, wv) if args["pl"] and args["pl"] ~= "-" and args["pl"] ~= "" then table.insert(data.inflections, maybe_get_inflection(args, "ကိုန်ဗဟုဝစ်ဟွံချိုတ်ပၠိုတ်", "pl", true, {form = "p", lemma = wv})) if args["g"] == "m" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ות" then elseif args["g"] == "f" and mw.ustring.sub(com.remove_nikud(args["pl"]), -2, -1) == "ים" then end if mw.ustring.sub(com.remove_nikud(args["pl"]), -3, -1) == "יים" and mw.ustring.sub(mw.ustring.gsub(com.remove_nikud(wv), "[%[%]]", ""), -1, -1) ~= "י" then end end if args["g"] == "m" or args["g"] == "f" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "m-d" or args["g"] == "f-d" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "m-p" or args["g"] == "f-p" then table.insert(data.genders, args["g"]) table.insert(data.genders, args["g2"]) elseif args["g"] == "" or args["g"] == nil then elseif args["g"] == "-" then --surnames don't really have gender else table.insert(data.genders, "?") end end local binyanim = { ["pa"] = "pa'al", ["pi"] = "pi'el", ["hif"] = "hif'il", ["hit"] = "hitpa'el", ["huf"] = "huf'al", ["pu"] = "pu'al", ["nif"] = "nif'al", ["hitpu'al"] = "hitpu'al", -- should this be included? } local weakroots = { ["פ"] = { ["א"] = true, ["ה"] = true, ["ח"] = true, ["י"] = true, ["ל"] = true, ["נ"] = true, ["ע"] = true, }, ["ע"] = { ["א"] = true, ["ה"] = true, ["ו"] = true, ["ח"] = true, ["י"] = true, ["ע"] = true, ["ר"] = true, }, ["ל"] = { ["א"] = true, ["ה"] = true, ["ח"] = true, ["נ"] = true, ["ע"] = true, }, } local function maybe_get_weakcat(args, pos, binyan) if weakroots[pos][args[pos]] then if binyan then return "ကြိယာဟဳဗရဝ်ဝေါဟာ (" .. args[pos] .. "״" .. pos .. binyan .. ") ဂမၠိုၚ်" else return "ကြိယာဟဳဗရဝ်ဝေါဟာ (" .. args[pos] .. "״" .. pos .. ") ဂမၠိုၚ်" end else return nil -- perhaps track error if args[pos] ~= "" end end pos_functions["ကြိယာ"] = function(args, data) local binyan = binyanim[args[1]] if binyan then table.insert(data.inflections, { label="[[:en:Appendix:Hebrew verbs|" .. binyan .. " ဗီုပြၚ်ခၞံပ္တန်ဗဒှ်လဝ်]]" }) elseif args[1] ~= "-" then end table.insert(data.categories, maybe_get_weakcat(args, "פ", binyan)) table.insert(data.categories, maybe_get_weakcat(args, "ע", binyan)) table.insert(data.categories, maybe_get_weakcat(args, "ל", binyan)) table.insert(data.inflections, maybe_get_inflection(args, "ဟၟဲတွဵုဒနက်", "inf", true)) table.insert(data.inflections, maybe_get_inflection(args, "ပစ္စုပ္ပန်", "pres", true)) table.insert(data.inflections, maybe_get_inflection(args, "အနာဂတ်", "fut", true)) table.insert(data.inflections, maybe_get_inflection(args, "ပါဲဗလေတ်ဟွံမာန်", "imp", true)) table.insert(data.inflections, maybe_get_inflection(args, "လုပ်ကၠောန်စွံလဝ်ဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "passp", true)) table.insert(data.inflections, maybe_get_inflection(args, "တၞးချာဲဗီုပြၚ်ဟွံတဝ်စၞေဟ်", "pass", true)) table.insert(data.inflections, maybe_get_inflection(args, "တၞးချာဲဗီုပြၚ်ကြိယာမစၞောန်ထ္ၜး", "act", true)) end return export 5gm05ofjg473wzq1gkth4ln86wot2fi ထာမ်ပလိက်:en-prepphr 10 28533 393829 46053 2026-05-02T09:00:35Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:en-PP]] ဇရေင် [[ထာမ်ပလိက်:en-prepphr]] 39963 wikitext text/x-wiki {{head|en|ဂလာန်မအရေဝ် ဝိဘတ်|head={{{1|{{{head|}}}}}}}}<!-- --><noinclude>{{documentation}}</noinclude> 0cc26b67vc1e1kp9k1upka90icx4tfx 393831 393829 2026-05-02T09:01:56Z 咽頭べさ 33 393831 wikitext text/x-wiki {{#invoke:en-headword|show|ဝါကျဝိဘတ်}}<!-- --><noinclude>{{documentation}}</noinclude> 4a7n4zgn52roivdk0x44ygtfcurg1a6 ကဏ္ဍ:ဝါကျဝိဘတ်အၚ်္ဂလိက်ဂမၠိုၚ် 14 28535 393833 165169 2026-05-02T09:06:43Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဂလာန်မအရေဝ် ဝိဘတ်အၚ်္ဂလိက်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝါကျဝိဘတ်အၚ်္ဂလိက်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 162500 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာအၚ်္ဂလိက်]] cgthbuhht2vx8a42gqbqvafhhdb35kh ထာမ်ပလိက်:mh-ipa-rows/display 10 29603 393822 41306 2026-05-02T08:48:51Z 咽頭べさ 33 393822 wikitext text/x-wiki <includeonly><!-- -->{{#ifeq:{{{Rālik}}}|{{{Ratak}}}|<!-- -->{{mh-ipa-rows/display-phonetic|phonetic|{{{Rālik}}}|{{{RālikEnunciated}}}}} <!-- -->|<!-- -->{{mh-ipa-rows/display-phonetic|Rālik|{{{Rālik}}}|{{{RālikEnunciated}}}}} <!-- -->{{mh-ipa-rows/display-phonetic|Ratak|{{{Ratak}}}|{{{RatakEnunciated}}}}} <!-- -->}} <!-- -->* {{IPA|mh|/{{{phonemic}}}/|a=phonemic}} <!-- -->* [[w:en:Marshallese language#Bender's orthography|ဘေန်ဒဵု]] ရမျာၚ်ယူနေတ်: {{lang|mh|&#123;{{{Bender}}}&#125;}}<!-- --></includeonly> qt2lf62vjyuz34jhqab4gxquu6c9xql ထာမ်ပလိက်:mh-ipa-rows/display-phonetic 10 29604 393823 41307 2026-05-02T08:49:43Z 咽頭べさ 33 393823 wikitext text/x-wiki <includeonly><!-- -->{{#ifeq:{{{2}}}|{{{3}}}|<!-- -->* {{IPA|mh|[{{{2}}}]|a={{{1}}}}}<!-- -->|<!-- -->* {{IPA|mh|[{{{2}}}]|q2=enunciated|[{{{3}}}]|a={{{1}}}}}<!-- -->}}<!-- --></includeonly> 5r78bur1da75jnhpe2gbdhv2ffp9cy6 ကဏ္ဍ:သမ္ဗန္ဓမာချဲလဳဂမၠိုၚ် 14 29605 393817 41310 2026-05-02T08:28:53Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:သမ္ဗန္ဓ မာချဲလဳ]] ဇရေင် [[ကဏ္ဍ:သမ္ဗန္ဓမာချဲလဳဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 41310 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာမာချဲလဳ]] gnx3dhnqq9dhxvqkji55wf69b9y25jr ကဏ္ဍ:ဝေါဟာအဓိကမာချဲလဳဂမၠိုၚ် 14 29607 393816 173118 2026-05-02T08:28:21Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာမာချဲလဳနွံပ္ဍဲအဘိဓာန်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာအဓိကမာချဲလဳဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 41312 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာမာချဲလဳ]] gnx3dhnqq9dhxvqkji55wf69b9y25jr ကဏ္ဍ:နာမ်မာချဲလဳဂမၠိုၚ် 14 39300 393818 52517 2026-05-02T08:29:18Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:နာမ် မာချဲလဳ]] ဇရေင် [[ကဏ္ဍ:နာမ်မာချဲလဳဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 52517 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာမာချဲလဳ]] gnx3dhnqq9dhxvqkji55wf69b9y25jr ကာရန်:ဝေလ 106 48400 393841 63582 2026-05-02T09:25:51Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393841 wikitext text/x-wiki {{rhymes nav|cy}} ==A== *{{IPAfont|[[Rhymes:ဝေလ/a-‎|a-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/a-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ai̯‎-‎|ai̯‎-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ai̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aɨ̯‎-‎|aɨ̯‎-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/aɨ̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/au̯-|au̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/au̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aː-‎|aː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/aː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aːɨ̯‎-|aːɨ̯‎-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/aːɨ̯‎-‎}} entries) ==E== *{{IPAfont|[[Rhymes:ဝေလ/ei̯‎-|ei̯‎-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ei̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/eɨ̯-|eɨ̯-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/eɨ̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/eː-‎|eː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/eː-‎}} entries) ==I== *{{IPAfont|[[Rhymes:ဝေလ/iː-‎|iː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/iː-‎}} entries) ==O== *{{IPAfont|[[Rhymes:ဝေလ/oː-‎|oː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/oː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/oːɨ̯-|oːɨ̯-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/oːɨ̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ou̯-‎|ou̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ou̯-‎}} entries) ==U== *{{IPAfont|[[Rhymes:ဝေလ/uː-‎|uː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/uː-‎}} entries) ==Ɔ== *{{IPAfont|[[Rhymes:ဝေလ/ɔ-‎|ɔ-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɔ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɔi̯-‎|ɔi̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɔi̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɔɨ̯-‎|ɔɨ̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɔɨ̯-‎}} entries) ==Ə== *{{IPAfont|[[Rhymes:ဝေလ/ə-‎|ə-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ə-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/əu̯-‎|əu̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/əu̯-‎}} entries) ==Ɛ== *{{IPAfont|[[Rhymes:ဝေလ/ɛ-‎|ɛ-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɛ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɛu̯-‎|ɛu̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɛu̯-‎}} entries) ==Ɨ== *{{IPAfont|[[Rhymes:ဝေလ/ɨː-‎|ɨː-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɨː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɨ̞-‎|ɨ̞-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɨ̞-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɨ̞u̯-‎|ɨ̞u̯-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɨ̞u̯-‎}} entries) ==Ʊ== *{{IPAfont|[[Rhymes:ဝေလ/ʊ-‎|ʊ-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ʊ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ʊɨ̯‎-‎|ʊɨ̯‎-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ʊɨ̯‎-‎}} entries) ==ɪ== *{{IPAfont|[[Rhymes:ဝေလ/ɪ-‎|ɪ-‎]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɪ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɪu̯‎-|ɪu̯‎-]]}} ({{PAGESINCATEGORY:ဝေလ rhymes/ɪu̯‎-‎}} entries) oigbbv0ovek1vlh0ckb7yf38xrmxl0r 393842 393841 2026-05-02T09:28:09Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393842 wikitext text/x-wiki {{rhymes nav|cy}} ==A== *{{IPAfont|[[Rhymes:ဝေလ/a-‎|a-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/a-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ai̯‎-‎|ai̯‎-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ai̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aɨ̯‎-‎|aɨ̯‎-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/aɨ̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/au̯-|au̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/au̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aː-‎|aː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/aː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/aːɨ̯‎-|aːɨ̯‎-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/aːɨ̯‎-‎}} entries) ==E== *{{IPAfont|[[Rhymes:ဝေလ/ei̯‎-|ei̯‎-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ei̯‎-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/eɨ̯-|eɨ̯-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/eɨ̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/eː-‎|eː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/eː-‎}} entries) ==I== *{{IPAfont|[[Rhymes:ဝေလ/iː-‎|iː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/iː-‎}} entries) ==O== *{{IPAfont|[[Rhymes:ဝေလ/oː-‎|oː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/oː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/oːɨ̯-|oːɨ̯-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/oːɨ̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ou̯-‎|ou̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ou̯-‎}} entries) ==U== *{{IPAfont|[[Rhymes:ဝေလ/uː-‎|uː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/uː-‎}} entries) ==Ɔ== *{{IPAfont|[[Rhymes:ဝေလ/ɔ-‎|ɔ-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɔ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɔi̯-‎|ɔi̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɔi̯-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɔɨ̯-‎|ɔɨ̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɔɨ̯-‎}} entries) ==Ə== *{{IPAfont|[[Rhymes:ဝေလ/ə-‎|ə-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ə-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/əu̯-‎|əu̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/əu̯-‎}} entries) ==Ɛ== *{{IPAfont|[[Rhymes:ဝေလ/ɛ-‎|ɛ-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɛ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɛu̯-‎|ɛu̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɛu̯-‎}} entries) ==Ɨ== *{{IPAfont|[[Rhymes:ဝေလ/ɨː-‎|ɨː-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɨː-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɨ̞-‎|ɨ̞-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɨ̞-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɨ̞u̯-‎|ɨ̞u̯-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɨ̞u̯-‎}} entries) ==Ʊ== *{{IPAfont|[[Rhymes:ဝေလ/ʊ-‎|ʊ-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ʊ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ʊɨ̯‎-‎|ʊɨ̯‎-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ʊɨ̯‎-‎}} entries) ==ɪ== *{{IPAfont|[[Rhymes:ဝေလ/ɪ-‎|ɪ-‎]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɪ-‎}} entries) *{{IPAfont|[[Rhymes:ဝေလ/ɪu̯‎-|ɪu̯‎-]]}} ({{PAGESINCATEGORY:ကာရန်ဝေလဂမၠိုၚ်/ɪu̯‎-‎}} entries) 62ldiv70blm2adg11lidduqei4oy7uf ကဏ္ဍ:ကြိယာဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ် 14 54731 393798 71350 2026-05-02T06:55:24Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ကြိယာ ဃှသ်နေဝ် ဂျာတ်ကေါမ်]] ဇရေင် [[ကဏ္ဍ:ကြိယာဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 71350 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်]] atck2s44r2gribbw7pys2o0159rqccf ကဏ္ဍ:ဝေါဟာအဓိကဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ် 14 54733 393796 170821 2026-05-02T06:54:20Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာဃှသ်နေဝ် ဂျာတ်ကေါမ်နွံပ္ဍဲအဘိဓာန်ဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာအဓိကဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 71352 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်]] atck2s44r2gribbw7pys2o0159rqccf ကဏ္ဍ:အက္ခရ်ဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ် 14 54745 393797 71367 2026-05-02T06:54:52Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:အက္ခရ် ဃှသ်နေဝ် ဂျာတ်ကေါမ်]] ဇရေင် [[ကဏ္ဍ:အက္ခရ်ဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 71367 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်]] atck2s44r2gribbw7pys2o0159rqccf ထာမ်ပလိက်:tr-IPA 10 76396 393757 100022 2026-05-01T17:45:06Z 咽頭べさ 33 393757 wikitext text/x-wiki <includeonly>{{#invoke:tr-IPA|main}}</includeonly><noinclude>{{tr-IPA|eğlenceli}}{{documentation}}</noinclude> dceoitgbgm5zlrvsb6hss9iti3hjn74 မဝ်ဂျူ:tr-IPA 828 76397 393758 100024 2026-05-01T17:46:22Z 咽頭べさ 33 393758 Scribunto text/plain local export = {} local modIPA = require("Module:IPA") local lang = require("Module:languages").getByCode("tr") local phonemes = { ["c"] = "d͡ʒ", ["ç"] = "t͡ʃ", ["g"] = "ɡ", ["G"] = "ɟ", ["ğ"] = "", ["Ğ"] = "(j)", ["ı"] = "ɯ", ["j"] = "ʒ", ["K"] = "c", ["l"] = "ɫ", ["L"] = "l", ["ö"] = "ø", ["q"] = "(ʔ)", ["r"] = "ɾ", ["ş"] = "ʃ", ["ü"] = "y", ["y"] = "j", ["â"] = "a", ["î"] = "i", ["û"] = "u", ["'"] = "ˈ", [":"] = "ː" } local voiced = { ["ç"] = "c", ["k"] = "ğ", ["p"] = "b", ["t"] = "d" } function export.main(frame) local args = require("Module:parameters").process(frame:getParent().args, { [1] = {list = true, allow_holes = true}, ["qual"] = {list = true, allow_holes = true, allow_empty = false}, ["q"] = {list = true, allow_holes = true, allow_empty = false, alias_of = "qual"}, ["nostress"] = {list = true, allow_holes = true, allow_empty = false}, ["ns"] = {list = true, allow_holes = true, allow_empty = false, alias_of = "nostress"} }) local words = args[1] if #words == 0 or words[1] == "" then words[1] = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) end local IPA = {} local function transcribe(value, isUnstressed) local C = "bcçdfgGğhjkKlLmnpqrsştvyz" --consonants local V = "aeıioöuüâîû" --vowels value = mw.ustring.gsub(mw.ustring.gsub(value, "çç", "tç"), "cc", "dc") .. "/" --deal with double affricates value = mw.ustring.gsub(value, "([gkl])%*", function(x) return mw.ustring.upper(x) end) --deal with unpredictable palatalization value = mw.ustring.gsub(value, "([" .. V .. "]%(?:?%)?[".. C .. "]-)([" .. C .. "]?%f[" .. V .. "])", "%1.%2") --add syllable divisors value = mw.ustring.gsub(value, "([" .. V .. "])([" .. V .. "])", "%1.%2") --add syllable divisors between consecutive vowels value = mw.ustring.gsub(value, "[^'%. ]*[eiöüâîû][^'. ]*", function(x) return mw.ustring.gsub(x, "[gğkl]", function(y) return mw.ustring.upper(y) end) end) --deal with predictable palatalization value = mw.ustring.gsub(value, "([âîû])(['./ ])", "%1:%2") --deal with circumflexed vowels' length value = mw.ustring.gsub(value, "[ğĞ](['./ ])", ":%1") --yumuşak ge lengthening value = mw.ustring.gsub(value, "[gG](['.])([gG])", "%2%1%2") --dorsal assimilation of g value = mw.ustring.gsub(value, "[kK](['.])([kK])", "%2%1%2") --dorsal assimilation of k value = mw.ustring.gsub(value, "l(['.])L", "L%1L") --palatal assimilation of l value = mw.ustring.gsub(value, "L(['.])l", "L%1L") if not mw.ustring.find(value, "'") and not isUnstressed then --add final stress if not otherwise specified if not mw.ustring.find(value, "%s") or mw.ustring.find(mw.ustring.match(value, "%s(.+)"), "%.") then value = mw.ustring.gsub(value, "%.?([^.]+)$", "'%1") else value = mw.ustring.gsub(value, "%s(.+)$", " '%1") end end value = "/" .. mw.ustring.gsub(value, ".", phonemes) --IPA transcription return value end for i, word in ipairs(words) do local quals = args.qual[i] local stress = args.nostress[i] if mw.ustring.find(word, "[%[/]") then IPA[#IPA+1] = {pron = word, q = {quals}} else local term, isAcc, accVowel = mw.ustring.match(word, "^(.-)([%+%-]?)([ıiuü]?)$") if term == "" then term = mw.loadData("Module:headword/data").pagename end term = mw.ustring.gsub(mw.ustring.lower(mw.ustring.gsub(term, "I", "ı")), "i̇", "i") if mw.ustring.match(isAcc, "[%+%-]") then local acc IPA[#IPA+1] = {pron = transcribe(term, stress), q = {quals}} if mw.ustring.match(isAcc, "%+") then --accusative form acc = mw.ustring.sub(term, 1, -2) .. ":" .. mw.ustring.sub(term, -1) .. accVowel elseif mw.ustring.match(isAcc, "%-") then acc = mw.ustring.sub(term, 1, -2) .. ":" .. voiced[mw.ustring.sub(term, -1)] .. accVowel end if quals then IPA[#IPA+1] = {pron = transcribe(acc, stress), q = {quals, "definite accusative"}} else IPA[#IPA+1] = {pron = transcribe(acc, stress), q = {"definite accusative"}} end else IPA[#IPA+1] = {pron = transcribe(term .. accVowel, stress), q = {quals}} end end end return modIPA.format_IPA_full{lang = lang, items = IPA} end return export 7dcrinnwdjdgjynkv7svfcvo0ogty68 ထာမ်ပလိက်:par 10 113706 393743 375113 2026-05-01T17:12:13Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:near-syn]] ဇရေင် [[ထာမ်ပလိက်:par]] 145767 wikitext text/x-wiki {{#invoke:nyms|nyms|အဓိပ္ပါဲဝေါဟာကြပ်တုပ်နူကဵု}}<noinclude>{{documentation}}</noinclude> 8rfb6ncwg5klvzrfngwngo82viqx1lf မဝ်ဂျူ:is-adjective 828 119763 393771 154704 2026-05-01T18:32:51Z 咽頭べさ 33 393771 Scribunto text/plain local export = {} --[=[ Authorship: Ben Wing <benwing2> ]=] --[=[ TERMINOLOGY: -- "slot" = A particular combination of case/gender/number. Example slot names for adjectives are "str_gen_f" (strong genitive feminine singular), "comp_wk_n" (comparative weak neuter singular, all cases) and "sup_str_nom_np" (superlative strong nominative/accusative neuter plural). Each slot is filled with zero or more forms. -- "form" = The declined Icelandic form representing the value of a given slot. -- "lemma" = The dictionary form of a given Icelandic term. Generally taken from the strong nominative masculine singular positive-degree, but may occasionally be from another form if the specified slot is missing. ]=] local lang = require("Module:languages").getByCode("is") local m_table = require("Module:table") local m_links = require("Module:links") local m_string_utilities = require("Module:string utilities") local iut = require("Module:inflection utilities") local put = require("Module:parse utilities") local m_para = require("Module:parameters") local com = require("Module:is-common") local en_utilities_module = "Module:en-utilities" local u = mw.ustring.char local rsplit = mw.text.split local rfind = mw.ustring.find local rmatch = mw.ustring.match local rgmatch = mw.ustring.gmatch local rsubn = mw.ustring.gsub local ulen = mw.ustring.len local ulower = mw.ustring.lower local unpack = unpack or table.unpack -- Lua 5.2 compatibility local dump = mw.dumpObject local force_cat = false -- set to true to make categories appear in non-mainspace pages, for testing local SUB_ESCAPED_PERIOD = u(0xFFF0) local SUB_ESCAPED_COMMA = u(0xFFF1) -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- version of rsubn() that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end local function track(track_id) require("Module:debug/track")("is-adjective/" .. track_id) return true end local function make_quoted_list(list) local quoted_list = {} for _, item in ipairs(list) do table.insert(quoted_list, "'" .. item .. "'") end return mw.text.listToText(quoted_list) end local function make_quoted_keys(dict) local quoted_list = {} for key, _ in pairs(dict) do table.insert(quoted_list, "'" .. key .. "'") end table.sort(quoted_list) return mw.text.listToText(quoted_list) end local function make_quoted_slot_list(slot_list) local quoted_list = {} for _, slot_accel in ipairs(slot_list) do local slot, accel = unpack(slot_accel) table.insert(quoted_list, "'" .. slot .. "'") end return mw.text.listToText(quoted_list) end local potential_lemma_slots = { "str_nom_m", "str_nom_mp", -- for plural-only numerals and such "wk_nom_m", -- for weak-only adjectives "comp_wk_nom_m", -- for adjectives existing only in comparative and superlative forms "sup_str_nom_m", -- for adjectives existing only in superlative forms "sup_wk_nom_m", -- for adjectives existing only in superlative weak forms (e.g. [[einasti]]) } local compsup_degrees = { {"pos", "Positive"}, {"comp", "Comparative"}, {"sup", "Superlative"}, } -- Export some of these below for use by [[Module:is-noun]]. export.overridable_stems = { "stem", "vstem", -- "imutval", FIXME: do we need this? } export.overridable_stem_set = m_table.listToSet(export.overridable_stems) export.control_specs = { "umut", "con", "j", "v", "pp", "ppdent", } export.control_spec_set = m_table.listToSet(export.control_specs) export.boolean_property_set = m_table.listToSet { "builtin", "irreg", "archaic", "article", "indecl", "decl?", "pred", "comp?" } local function slot_to_degfield(slot) local degfield = slot:match("^(comp)_") if not degfield then degfield = slot:match("^(sup)_") end return degfield or "pos" end local function degfield_to_slot_prefix(degfield) if degfield == "pos" then return "" else return degfield .. "_" end end local strong_adjective_slots = { {"str_nom_m", "str|nom|m|s"}, {"str_nom_f", "str|nom|f|s"}, {"str_nom_n", "str|nom//acc|n|s"}, {"str_acc_m", "str|acc|m|s"}, {"str_acc_f", "str|acc|f|s"}, {"str_dat_m", "str|dat|m|s"}, {"str_dat_f", "str|dat|f|s"}, {"str_dat_n", "str|dat|n|s"}, {"str_gen_m", "str|gen|m|s"}, {"str_gen_f", "str|gen|f|s"}, {"str_gen_n", "str|gen|n|s"}, {"str_nom_mp", "str|nom|m|p"}, {"str_nom_fp", "str|nom//acc|f|p"}, {"str_nom_np", "str|nom//acc|n|p"}, {"str_acc_mp", "str|acc|m|p"}, {"str_gen_p", "str|gen|p"}, {"str_dat_p", "str|dat|p"}, } local weak_adjective_slots = { {"wk_nom_m", "wk|nom|m|s"}, {"wk_nom_f", "wk|nom|f|s"}, {"wk_n", "wk|n|s"}, {"wk_obl_m", "wk|acc//dat//gen|m|s"}, {"wk_obl_f", "wk|acc//dat//gen|f|s"}, {"wk_p", "wk|p"}, } -- Abbreviations for use in addnote specs and overrides. Key is the abbreviation, value is a Lua pattern matching the -- slots to select, or a list of such patterns. Patterns are anchored at both ends. local adjective_slot_abbrs = { wk_m = "wk_.*m", wk_f = "wk_.*f", comp_wk_m = "comp_wk_.*m", comp_wk_f = "comp_.*f", sup_wk_m = "sup_wk_.*m", sup_wk_f = "sup_.*_f", str_s = "str_.*[mfn]", wk_s = "wk_.*[mfn]", str_p = "str_.*p", comp_wk_s = "comp_wk_.*[mfn]", sup_str_s = "sup_str_.*[mfn]", sup_wk_s = "sup_wk_.*[mfn]", sup_str_p = "sup_str_.*p", wk = "wk_.*", str = "str_.*", sup_wk = "sup_wk_.*", sup_str = "sup_str_.*", } local adjective_slot_set = {} local adjective_slot_list = {} local adjective_slot_list_by_degree = {} local adjective_slot_list_linked_slots = {} local function add_list_slots(degfield, slot_list) local prefix = degfield_to_slot_prefix(degfield) -- Initialize by-degree list, but don't overwrite. adjective_slot_list_by_degree[degfield] = adjective_slot_list_by_degree[degfield] or {} for _, slot_accel in ipairs(slot_list) do local slot, accel = unpack(slot_accel) local accel_suffix = "" if prefix == "comp_" then accel_suffix = "|comd" elseif prefix == "sup_" then accel_suffix = "|supd" end slot = prefix .. slot accel = accel .. accel_suffix slot_accel = {slot, accel} table.insert(adjective_slot_list, slot_accel) table.insert(adjective_slot_list_by_degree[degfield], slot_accel) adjective_slot_set[slot] = true end end local function add_slots(prefix, do_strong, do_weak) if do_strong then add_list_slots(prefix, strong_adjective_slots) end if do_weak then add_list_slots(prefix, weak_adjective_slots) end end add_slots("pos", true, true) add_slots("comp", false, true) -- comparatives are weak-only add_slots("sup", true, true) for _, potential_lemma_slot in ipairs(potential_lemma_slots) do local slot_accel = {potential_lemma_slot .. "_linked", "-"} table.insert(adjective_slot_list, slot_accel) table.insert(adjective_slot_list_linked_slots, slot_accel) end -- Get the appropriate slot list for the given degree, removing the state and/or number from the -- accelerator form if the state or number are restricted to a single value. local function get_slot_list(alternant_multiword_spec, degfield) local source_list = adjective_slot_list_by_degree[degfield] local number = alternant_multiword_spec.number[degfield] local state = alternant_multiword_spec.state[degfield] if number == "both" and state == "bothstates" then return source_list end local dest_list = {} for _, slot_accel in ipairs(source_list) do local slot, accel = unpack(slot_accel) if state ~= "bothstates" then accel = accel:gsub("str|", ""):gsub("wk|", "") end if number ~= "both" then accel = accel:gsub("|s$", ""):gsub("|p$", "") end table.insert(dest_list, {slot, accel}) end return dest_list end local function skip_slot(number, state, slot) return number == "sg" and slot:find("p$") or number == "pl" and not slot:find("p$") or state == "strong" and slot:find("wk_") or state == "weak" and slot:find("str_") end --[=[ Create an empty `base` object for holding the result of parsing and later the generated forms. The object (including fields later filled out by other functions) is of the form { -- The original lemma as specified by the user in the declension spec, or taken from the pagename. May have -- double-bracket links in it. orig_lemma = "ORIGINAL_LEMMA", -- Same as `orig_lemma` but with double-bracket links removed and two-part links resolved to the right side. orig_lemma_no_links = "ORIGINAL_LEMMA_NO_LINKS", -- Per-degree structures (`pos` = positive, `comp` = comparative, `sup` = superlative). Each slot (`pos`, `comp` or -- `sup`) maps to a list of degree objects, one for each per-degree lemma. There will only be one positive degree -- object (different positive lemmas will be handled as alternants at a higher level), but there may be multiple -- comparative and/or superlative degree objects. (Conversely, there may be multiple property sets per positive-degree -- object, e.g. if the user specifies 'con,-con', but only one property set per comparative and superlative degree -- object.) Multiple degree objects generally happen because the user specifies multiple comparatives or superlatives -- (e.g. for [[fagur]], using the spec '#.comp:^ri:^!i.sup:^stur', which specifies comparative lemmas [[fegurri]] and -- [[fagri]] and superlative [[fegurstur]]), but occasionally the default superlative operation generates more than -- one superlative; e.g. for [[förull]] the spec is 'con,-con.comp:+:~~ari' which explicitly mentions two -- comparatives, and '+' itself generates two superlatives because of the 'con,-con' portion of the spec. There will -- always be a `pos` slot filled, but if the user didn't explicitly either specify that a comparative is present or -- specify no comparative using '-comp', there will be no `comp` slot (likewise for `sup`). If the user specified -- '-comp', there will be a `comp` slot mapping to an empty list. degrees = { pos = { { -- The actual lemma, without any links. For the positive degree, same as `base.orig_lemma_no_links`. For the -- comparative and superlative degrees, as specified by the user or defaulted. actual_lemma = "ACTUAL_LEMMA", -- The lemma to use for declension. Will differ from `actual_lemma` if `decllemma:...` is given, in which case -- the value of `decllemma` will be here. lemma = "LEMMA", number = "NUMBER", -- "sg", "pl" or "both"; may be missing and if so is defaulted state = "STATE", -- "strong", "weak" or "bothstates"; may be missing and if so is defaulted -- computed stem; after parse_indicator_spec(), either nil or a user-specified stem override, which may have -- # (= lemma) or ## (= lemma minus -ur or -r) as the value; after determine_positive_declension(), filled in -- with the actual stem stem = "STEM", -- override the stem used before vowel-initial endings; after parse_indicator_spec(), either nil or a -- user-specified stem override in the same format as `stem` vstem = nil or "STEM", -- degree-level footnotes, specified using `LEMMA[footnote]`, where `LEMMA` is the comparative or superlative -- lemma, + for the default, or a shortened version using ~, ^ or the like footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- CONTROL_GROUP is one of "umut", "con", "pp", "ppdent", "j" or "v", and CONTROL_SPEC is {form = "FORM", -- footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, defaulted = BOOLEAN}, where FORM is as specified by the -- user (e.g. "uUmut", "-pp") or set as a default by the code (in which case `defaulted` will be set to true for -- control group "umut"); the control groups are as follows: -- * umut (u-mutation); -- * con (stem contraction before vowel-initial endings); -- * j (j-infix before vowel-initial endings not beginning with an i); -- * v (v-infix before vowel-initial endings); -- * pp (past-participle-like inflection, with -ð in the nominative/accusative neuter singular instead of -t); -- * ppdent (dental infix in past participles before vowel-initial endings); CONTROL_GROUP = { CONTROL_SPEC, CONTROL_SPEC, ... }, prop_sets = { PROPSET, -- see below ..., }, }, ... }, comp = { { ... }, { ... }, ... }, sup = { { ... }, { ... }, ... }, }, -- forms for a single spec alternant forms = { SLOT = { { form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, }, ... }, ... }, -- SLOT is the actual name of the slot, such as "str_nom_n", and OVERRIDE is a list of form objects, where a -- form object is {form = FORM, footnotes = FOOTNOTES} as in the `forms` table ("-" means to suppress the slot -- entirely) overrides = { SLOT = OVERRIDE, SLOT = OVERRIDE, ... }, -- Used to track duplicate slot overrides. override_slots_seen = { SLOT = true, SLOT = true, ... }, -- Positive specs as given by the user, currently only if the user specifies '-pos'. posspec = nil or { {form = "-"} }, -- Comparative specs as given by the user, consisting of a list of form objects. compspec = nil or { {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}}, ...}, -- Superlative specs as given by the user, consisting of a list of form objects. supspec = nil or { {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}}, ...}, -- misc Boolean properties: -- * "builtin" (a built-in term such as a number or determiner); -- * "decl?" (unknown declension); -- * "comp?" (unknown if comparative exists); -- * "indecl" (indeclinable); -- * "pred" (predicate-only); -- * "article" (requests the article variant of [[hinn]]); -- * "archaic" (requests the archaic variant of [[enginn]]); props = { PROP = true, PROP = true, ... }, decllemma = nil or "DECLLEMMA", -- decline like the specified lemma -- alternant-level footnotes, specified using `.[footnote]`, i.e. a footnote by itself; apply to all degrees footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- ADDNOTE_SPEC is {slot_specs = {"SPEC", "SPEC", ...}, footnotes = {"FOOTNOTE", "FOOTNOTE", ...}}; SPEC is a Lua -- pattern matching slots (anchored on both sides) and FOOTNOTE is a footnote to add to those slots addnote_specs = { ADDNOTE_SPEC, ADDNOTE_SPEC, ... }, } There is one PROPSET (property set) for each combination of control specs; in the lower limit, there is a single property set. There may be more than one property set e.g. if the user specified 'umut,uUmut' or '-j,j' or some combination of these. The properties in a given property set specify the values themselves of each control group, as well as stems (derived from the control specs) that are used to construct the various forms and populate the slots in `forms` with these values. The information found in the property sets cannot be stored in `base` because it depends on a particular combination of control specs, of which there may be more than one (see above). The decline_adjective() function iterates over all property sets and calls the appropriate declension function on each one in turn, which adds forms to each slot in `base.forms`, automatically deduplicating. The properties in each property set are: * Mutation specs: These are copied from the control specs at the degree object level. The key is one of the possible control groups ("umut", "con", etc.), but the value is a single form object {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}}. These are set by expand_property_sets() for the positive degree, and by process_comp_sup_spec() or derive_sup_from_comp() for the comparative and superlative degrees. * Stems (each stem is either a string or a form object; stems in general may be missing, i.e. nil, unless otherwise specified, and default to more general variants): ** `stem`: The basic stem. Always set. May be overridden by more specific variants. ** `nonvstem`: The stem used when the ending is null or starts with a consonant, unless overridden by a more specific variant. Defaults to `stem`. Not currently used, but could be if e.g. a user stem override `nonvstem:...` were supported. ** `umut_nonvstem`: The stem used when the ending is null or starts with a consonant and u-mutation is in effect, unless overridden by a more specific variant. Defaults to `nonvstem`. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `nonvstem` is missing, because there is no generic `umut_stem`.) ** `vstem`: The stem used when the ending starts with a vowel, unless overridden by a more specific variant. Defaults to `stem`. Will be specified when contraction is in effect or the user specified `vstem:...`. ** `umut_vstem`: The stem(s) used when the ending starts with a vowel and u-mutation is in effect. Defaults to `vstem`. Note that u-mutation applies to the contracted stem if both u-mutation and contraction are in effect. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `vstem` is missing, because there is no generic `umut_stem`.) * Other properties: ** `jinfix`: If present, either "" or "j". Inserted between the stem and ending when the ending begins with a vowel other than "i". Note that j-infixes don't apply to ending overrides. ** `jinfix_footnotes`: Footnotes to attach to forms where j-infixing is possible (even if it's not present). ** `vinfix`: If present, either "" or "v". Inserted between the stem and ending when the ending begins with a vowel. Note that v-infixes don't apply to ending overrides. `jinfix` and `vinfix` cannot both be specified. ** `vinfix_footnotes`: Footnotes to attach to forms where v-infixing is possible (even if it's not present). ** `pp`: If present, either `true` or `false`. Indicates how to assimilate neuter ending -t to a previous final -ð after a vowel. If true, the result is -ð, as in past participles; otherwise, the result is -tt. ** `pp_footnotes`: Footnotes to attach to forms where `pp`-influenced assimilation happens. } ]=] local function create_base() return { forms = {}, overrides = {}, override_slots_seen = {}, props = {}, addnote_specs = {}, degrees = {}, } end -- Basic function to combine stem(s) and other properties with ending(s) and insert the result into the appropriate -- slot. `base` is the object describing all the properties of the word being inflected for a single alternant (in case -- there are multiple alternants specified using `((...))`). `slot` is the slot to add the form(s) to, without the -- degree prefix ("", "comp_" or "sup_"). (The degree prefix is separated out because the code below sometimes needs to -- conditionalize on the value of `slot` and should not have to worry about the degree variants.) `degree` is an object -- describing the particular degree (positive, comparative or superlative) and associated base lemma. `props` is an -- object containing computed stems and other information (such as what type of u-mutation is active). The information -- found in `props` cannot be stored in `degree` because there may be more than one set of such properties per `degree` -- (e.g. if the user specified 'umut,uUmut' or '-j,j' or some combination of these; in such a case, the caller will -- iterate over all possible combinations, and ultimately invoke add() multiple times, one per combination). `endings` -- is the ending or endings added to the appropriate stem (after any j or v infix) to get the form(s) to add to the -- slot. Its value can be a single string, a list of strings, or a list of form objects (i.e. in general list form). local function add(base, slot, degree, props, endings) if not endings then return end -- Call skip_slot() based on the declined number and state. if skip_slot(degree.number, degree.state, slot) then return end if type(endings) == "string" then endings = {endings} end local slot_prefix = degree.slot_prefix -- Loop over each ending. for _, endingobj in ipairs(endings) do local ending, ending_footnotes if type(endingobj) == "string" then ending = endingobj else ending = endingobj.form ending_footnotes = endingobj.footnotes end -- Ending of "-" means the user used - to indicate there should be no form here. if ending == "-" then return end local function interr(msg) error(("Internal error: For lemma '%s', slot '%s%s', ending '%s', %s: %s"):format(degree.lemma, slot_prefix, slot, ending, msg, dump(base))) end -- Compute whether i-mutation or u-mutation is in effect, and compute the "mutation footnotes", which are -- footnotes attached to a mutation-related indicator and which may need to be added even if no mutation is -- in effect (specifically when dealing with an ending that would trigger a mutation if in effect). AFAIK -- you cannot have both mutations in effect at once, and i-mutation overrides u-mutation if both would be in -- effect. -- Double ^^ at the beginning indicates that the u-mutated version should apply. (Single ^ would indicate that -- i-mutation should apply, but it doesn't seem relevant to adjectives.) local explicit_umut ending, explicit_umut = rsubb(ending, "^%^%^", "") local is_vowel_ending = rfind(ending, "^" .. com.vowel_c) local mut_in_effect, mut_not_in_effect, mut_footnotes local ending_in_i = not not ending:find("^i") local ending_in_u = not not ending:find("^u") if explicit_umut then mut_in_effect = "u" else if ending_in_u and not mut_in_effect then mut_in_effect = "u" -- umut and uUmut footnotes are incorporated into the appropriate umut_* stems end end local ending_was_asterisk = ending == "*" -- Now compute the appropriate stem to which the ending is added. local stem_in_effect -- Careful with the following logic; it is written carefully and should not be changed without a thorough -- understanding of its functioning. local has_umut = mut_in_effect == "u" -- If the stem is still unset, then use the vowel or non-vowel stem if available. When u-mutation is active, we -- first check for the u-mutated version of the vowel or non-vowel stem before falling back to the regular vowel -- or non-vowel stem. Note that an expression like `has_umut and props.umut_vstem or props.vstem` here is NOT -- equivalent to an if-else or ternary operator expression because if `has_umut` is true and `umut_vstem` is -- missing, it will still fall back to `vstem` (which is what we want). if not stem_in_effect then if is_vowel_ending then stem_in_effect = has_umut and props.umut_vstem or props.vstem else stem_in_effect = has_umut and props.umut_nonvstem or props.nonvstem end end -- Finally, fall back to the basic stem, which is always defined. stem_in_effect = stem_in_effect or props.stem -- If the ending is "*", it means to use the lemma as the form directly rather than try to construct the form -- from a stem and ending. We need to do this for the lemma slot and especially for the nominative singular, -- because we don't have the nominative singular ending available and it may vary (e.g. it may be -ur, -l, -n, -- etc. especially in the masculine). Not trying to construct the form from stem + ending also avoids -- complications from the nominative singular in -ur, which exceptionally does not trigger u-mutation. -- Finally, if there is a footnote associated with the computed stem in effect, we need to preserve it. if ending == "*" then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes end stem_in_effect = iut.combine_form_and_footnotes(degree.actual_lemma, stem_in_effect_footnotes) ending = "" end local infix, infix_footnotes -- Compute the infix (j, v or nothing) that goes between the stem and ending. if is_vowel_ending then if props.vinfix and props.jinfix then interr("Can't have specifications for both '.vinfix' and '.jinfix'; should have been caught above") end if props.vinfix then infix = props.vinfix infix_footnotes = props.vinfix_footnotes elseif props.jinfix and not ending_in_i then infix = props.jinfix infix_footnotes = props.jinfix_footnotes end end -- If base-level footnotes or degree-level footnotes specified, they go before any stem footnotes, so we -- need to extract any footnotes from the stem in effect and insert the base-level footnotes before. In -- general, we want the footnotes to be in the order [base.footnotes, degree.footnotes, stem.footnotes, -- mut_footnotes, infix_footnotes, ending.footnotes]. if base.footnotes or degree.footnotes then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes stem_in_effect = stem_in_effect.form end stem_in_effect = iut.combine_form_and_footnotes(stem_in_effect, iut.combine_footnotes(base.footnotes, iut.combine_footnotes(degree.footnotes, stem_in_effect_footnotes))) end local ending_is_full ending, ending_is_full = rsubb(ending, "^!", "") local function combine_stem_ending(stem, ending) if stem == "?" then return "?" end local stem_with_infix = ending_is_full and "" or stem .. (infix or "") -- An initial s- of the ending drops after a cluster of cons + s (including written <x>). if ending:find("^s") and (stem_with_infix:find("x$") or rfind(stem_with_infix, com.cons_c .. "s$")) then ending = ending:sub(2) elseif ending:find("^r") then if degree.assimilate_r then local stem_butlast, stem_last = stem_with_infix:match("^(.*)([ln])$") if stem_last then ending = stem_last .. ending:sub(2) end elseif degree.double_r_and_t then ending = "r" .. ending elseif rfind(stem_with_infix, com.cons_c .. "r$") then ending = ending:sub(2) end elseif ending == "t" then if degree.double_r_and_t then ending = "tt" elseif stem_with_infix:find("dd$") then stem_with_infix = stem_with_infix:gsub("dd$", "t") else local stem_butlast, stem_last = rmatch(stem_with_infix, "^(.*" .. com.cons_c .. ")([dðt])$") if stem_butlast then stem_with_infix = stem_butlast else stem_butlast = stem_with_infix:match("^(.*)ð$") if stem_butlast then if props.pp then stem_with_infix = stem_butlast ending = "ð" else stem_with_infix = stem_butlast .. "t" end elseif degree.inn then stem_butlast = stem_with_infix:match("^(.*)n$") if stem_butlast then stem_with_infix = stem_butlast ending = "ð" end end end end end return stem_with_infix .. ending end local combined_footnotes = iut.combine_footnotes(iut.combine_footnotes(mut_footnotes, infix_footnotes), ending_footnotes) local ending_with_notes = iut.combine_form_and_footnotes(ending, combined_footnotes) if not stem_in_effect then interr("stem_in_effect is nil") end iut.add_forms(base.forms, slot_prefix .. slot, stem_in_effect, ending_with_notes, combine_stem_ending) end end local function do_slot_abbreviation(base, abbr, fn) local patterns = adjective_slot_abbrs[abbr] if not patterns then error(("Internal error: Invalid abbreviation '%s' passed into do_slot_abbreviation()"):format(abbr)) end if type(patterns) ~= "table" then patterns = {patterns} end for _, pattern in ipairs(patterns) do pattern = "^" .. pattern .. "$" for single_slot, forms in pairs(base.forms) do if rfind(single_slot, pattern) then fn(single_slot) end end end end local function process_slot_overrides(base) -- Set a single slot. Check to make sure we're not hitting a degree, number or state restriction. local function do_slot(slot, spec) local degfield = slot_to_degfield(slot) if not base.degrees[degfield] or not base.degrees[degfield][1] then error(("Override specified for invalid slot '%s' because degree '%s' doesn't exist"):format(slot, degfield)) end for _, degree in ipairs(base.degrees[degfield]) do if skip_slot(degree.number, degree.state, slot) then error(("Override specified for invalid slot '%s' due to '%s' number restriction and/or '%s' state " .. "restriction of degree '%s'"):format(slot, degree.number, degree.state, degfield)) end end if spec[1].form ~= "-" then -- Make sure distinct slots don't share forms. base.forms[slot] = m_table.deepCopy(spec) else base.forms[slot] = nil end end for slot, spec in pairs(base.overrides) do if adjective_slot_abbrs[slot] then do_slot_abbreviation(base, slot, function(slot) do_slot(slot, spec) end) else do_slot(slot, spec) end end end -- Add all strong state forms. Normally, use add_strong_decl(), which defaults the nom_s, instead of this. Only 17 of -- the 24 possible endings are given because some are always the same as others. Currently we handle this syncretism in -- the table itself, meaning it's not possible to override the missing endings separately. (FIXME: Is there ever a -- situation where we need to separately control such endings? If so, we probably want to distinguish between "regular" -- overrides, which happen before the copying of some endings to others, and "late" overrides, which happen after. A -- similar distinction occurs the Italian verb module.) Specifically: -- * The neuter singular and plural accusative, and the feminine plural accusative, are taken from the nominative. -- * There is only one dative and genitive plural ending, which applies to all genders. -- In addition, if `gen_n` is nil, it is copied from `gen_m`. local function add_strong_decl_with_nom_sg(base, degree, props, nom_m, nom_f, nom_n, acc_m, acc_f, dat_m, dat_f, dat_n, gen_m, gen_f, gen_n, nom_mp, nom_fp, nom_np, acc_mp, dat_p, gen_p ) add(base, "str_nom_m", degree, props, nom_m) add(base, "str_nom_f", degree, props, nom_f) add(base, "str_nom_n", degree, props, nom_n) add(base, "str_acc_m", degree, props, acc_m) add(base, "str_acc_f", degree, props, acc_f) add(base, "str_dat_m", degree, props, dat_m) add(base, "str_dat_f", degree, props, dat_f) add(base, "str_dat_n", degree, props, dat_n) add(base, "str_gen_m", degree, props, gen_m) add(base, "str_gen_f", degree, props, gen_f) if gen_n == nil then -- not 'false'; use to specify no value for gen_n gen_n = gen_m end add(base, "str_gen_n", degree, props, gen_n) add(base, "str_nom_mp", degree, props, nom_mp) add(base, "str_nom_fp", degree, props, nom_fp) add(base, "str_nom_np", degree, props, nom_np) add(base, "str_acc_mp", degree, props, acc_mp) add(base, "str_dat_p", degree, props, dat_p) add(base, "str_gen_p", degree, props, gen_p) end -- Add all strong state forms other than the nominative singular. This should normally be used in preference to -- add_strong_decl_with_nom_sg(), because the nominative singular should usually be specified as "*" so that it is -- taken directly from the lemma. local function add_strong_decl(base, degree, props, nom_f, nom_n, acc_m, acc_f, dat_m, dat_f, dat_n, gen_m, gen_f, gen_n, nom_mp, nom_fp, nom_np, acc_mp, dat_p, gen_p ) add_strong_decl_with_nom_sg(base, degree, props, "*", nom_f, nom_n, acc_m, acc_f, dat_m, dat_f, dat_n, gen_m, gen_f, gen_n, nom_mp, nom_fp, nom_np, acc_mp, dat_p, gen_p ) end -- Add all plural strong state forms other than the nominative plural. local function add_strong_decl_pl_only(base, degree, props, nom_fp, nom_np, acc_mp, dat_p, gen_p ) add_strong_decl_with_nom_sg(base, degree, props, false, false, false, false, false, false, false, false, false, false, false, "*", nom_fp, nom_np, acc_mp, dat_p, gen_p ) end -- Add all weak state forms. Only 6 of the 24 possible endings are given because some are always the same as others. local function add_weak_decl(base, degree, props, wk_nom_m, wk_nom_f, wk_n, wk_obl_m, wk_obl_f, wk_p ) add(base, "wk_nom_m", degree, props, wk_nom_m) add(base, "wk_nom_f", degree, props, wk_nom_f) add(base, "wk_n", degree, props, wk_n) add(base, "wk_obl_m", degree, props, wk_obl_m) add(base, "wk_obl_f", degree, props, wk_obl_f) add(base, "wk_p", degree, props, wk_p) end -- Add all plural weak state forms. local function add_weak_decl_pl_only(base, degree, props, wk_p) add_weak_decl(base, degree, props, false, false, false, false, false, wk_p ) end local decls = {} decls["indecl"] = function(base, degree, props) add_strong_decl(base, degree, props, "", "", "", "", "", "", "", "", "", nil, "", "", "", "", "", "" ) add_weak_decl(base, degree, props, "", "", "", "", "", "" ) end decls["decl?"] = function(base, degree, props) add_strong_decl(base, degree, props, "?", "?", "?", "?", "?", "?", "?", "?", "?", nil, "?", "?", "?", "?", "?", "?" ) add_weak_decl(base, degree, props, "?", "?", "?", "?", "?", "?" ) end decls["normal"] = function(base, degree, props) add_strong_decl(base, degree, props, "^^", "t", degree.inn and "*" or "an", "a", "um", "ri", "u", "s", "rar", nil, "ir", "ar", "^^", "a", "um", "ra" ) add_weak_decl(base, degree, props, "i", "a", "a", "a", "u", "u" ) end decls["comp"] = function(base, degree, props) add_weak_decl(base, degree, props, "i", "i", "a", "i", "i", "i" ) end local function set_builtin_defaults(base) local number, state local basedeg = base.base_degree local lemma = basedeg.lemma if lemma == "tveir" or lemma == "þrír" or lemma == "fjórir" or lemma == "báðir" or lemma == "fáeinir" then number = "pl" end basedeg.number = number or "both" basedeg.state = state or "strong" end decls["builtin"] = function(base, degree, props) if degree.lemma == "sá" then add_strong_decl(base, degree, props, "sú", "það", "þann", "þá", "þeim", "þeirri", "því", "þess", "þeirrar", nil, "þeir", "þær", "þau", "þá", "þeim", "þeirra" ) return end if degree.lemma == "hann" then add_strong_decl(base, degree, props, "hún", "það", "hann", "hana", "honum", "henni", "því", "hans", "hennar", "þess", "þeir", "þær", "þau", "þá", "þeim", "þeirra" ) return end if degree.lemma == "þessi" then add_strong_decl(base, degree, props, "þessi", {"þetta", {form = "þettað", footnotes = {"[uncommon]"}}}, {"þennan", {form = "þenna", footnotes = {"[archaic]"}}}, "þessa", "þessum", "þessari", "þessu", "þessa", "þessarar", nil, "þessir", "þessar", {"þessi", {form = "þaug", footnotes = {"[uncommon]"}}}, "þessa", "þessum", "þessara" ) return end if degree.lemma == "hinn" then add_strong_decl(base, degree, props, "hin", base.props.article and "hið" or "hitt", "hinn", "hina", "hinum", "hinni", "hinu", "hins", "hinnar", nil, "hinir", "hinar", "hin", "hina", "hinum", "hinna" ) return end local stem = rmatch(degree.lemma, "^([mþs])inn$") if stem then add_strong_decl(base, degree, props, stem .. "ín", stem .. "itt", stem .. "inn", stem .. "ína", stem .. "ínum", stem .. "inni", stem .. "ínu", stem .. "íns", stem .. "innar", nil, stem .. "ínir", stem .. "ínar", stem .. "ín", stem .. "ína", stem .. "ínum", stem .. "inna" ) return end if degree.lemma == "vor" or degree.lemma == "hvor" then stem = degree.lemma add_strong_decl(base, degree, props, stem, stem .. "t", stem .. "n", stem .. "a", stem .. "um", stem .. "ri", stem .. "u", stem .. "s", stem .. "rar", nil, stem .. "ir", stem .. "ar", stem, stem .. "a", stem .. "um", stem .. "ra" ) return end local neutstem if degree.lemma == "hver" or degree.lemma == "sérhver" or degree.lemma == "einhver" then stem = degree.lemma -- Neuter stem is eitt- for [[einhver]], otherwise chop off -hver neutstem = degree.lemma == "einhver" and "eitt" or degree.lemma:sub(1, -5) end if stem then add_strong_decl(base, degree, props, stem, { {form = neutstem .. "hvert", footnotes = {"[used with a noun]"}}, {form = neutstem .. "hvað", footnotes = {"[used alone]"}}, }, stem .. "n", stem .. "ja", stem .. "jum", stem .. "ri", stem .. "ju", stem .. "s", stem .. "rar", nil, stem .. "jir", stem .. "jar", stem, stem .. "ja", stem .. "jum", stem .. "ra" ) return end if degree.lemma == "nokkur" or degree.lemma == "allnokkur" or degree.lemma == "þónokkur" then -- remove -ur suffix stem = degree.lemma:sub(1, -3) add_strong_decl(base, degree, props, stem .. "ur", { {form = stem .. "urt", footnotes = {"[used with a noun]"}}, {form = stem .. "uð", footnotes = {"[used alone]"}}, }, stem .. "urn", stem .. "ra", stem .. "rum", stem .. "urri", stem .. "ru", stem .. "urs", stem .. "urrar", nil, stem .. "rir", stem .. "rar", stem .. "ur", stem .. "ra", stem .. "rum", stem .. "urra" ) return end if degree.lemma == "enginn" then if base.props.archaic then add_strong_decl(base, degree, props, "engin", "ekkert", "öngvan", "öngva", "öngvum", "öngri", "öngvu", "einskis", "öngrar", nil, "öngvir", "öngvar", "engin", "öngva", "öngvum", "öngra" ) else local engi = {form = "engi", footnotes = {"[poetic]"}} add_strong_decl_with_nom_sg(base, degree, props, {"*", engi}, {"engin", engi}, {"ekkert", {form = "ekki", footnotes = {"[in some fixed expressions]"}}}, "engan", "enga", "engum", "engri", {"engu", {form = "einugi", footnotes = {"[in some fixed expressions]"}}}, {"einskis", {form = "einkis", footnotes = {"[occasionally]"}}}, "engrar", nil, "engir", "engar", "engin", "enga", "engum", "engra" ) end return end if degree.lemma == "fáeinir" then stem = "fáein" add_strong_decl_pl_only(base, degree, props, stem .. "ar", stem, stem .. "a", stem .. "um", stem .. "na" ) add_weak_decl_pl_only(base, degree, props, stem .. "u" ) return end if degree.lemma == "tveir" then add_strong_decl_pl_only(base, degree, props, "tvær", "tvö", "tvo", {"tveimur", "tveim"}, "tveggja" ) return end if degree.lemma == "þrír" then add_strong_decl_pl_only(base, degree, props, "þrjár", "þrjú", "þrjá", {"þremur", "þrem"}, "þriggja" ) return end if degree.lemma == "fjórir" then add_strong_decl_pl_only(base, degree, props, "fjórar", "fjögur", "fjóra", "fjórum", {"fjögurra", {form = "fjögra", footnotes = {"[rare in writing]"}}} ) return end if degree.lemma == "báðir" then add_strong_decl_pl_only(base, degree, props, "báðar", "bæði", "báða", "báðum", "beggja" ) return end if degree.lemma == "annar" then add_strong_decl(base, degree, props, "önnur", "annað", "annan", "aðra", "öðrum", "annarri", "öðru", "annars", "annarrar", "annars", "aðrir", "aðrar", "önnur", "aðra", "öðrum", "annarra" ) return end error("Unrecognized built-in lemma '" .. degree.lemma .. "'") end -- Return the lemmas for this term. The return value is a list of {form = FORM, footnotes = FOOTNOTES}. -- If `linked_variant` is given, return the linked variants (with embedded links if specified that way by the user), -- otherwies return variants with any embedded links removed. If `remove_footnotes` is given, remove any -- footnotes attached to the lemmas. function export.get_lemmas(alternant_multiword_spec, linked_variant, remove_footnotes) local slots_to_fetch = potential_lemma_slots local linked_suf = linked_variant and "_linked" or "" for _, slot in ipairs(slots_to_fetch) do if alternant_multiword_spec.forms[slot .. linked_suf] then local lemmas = alternant_multiword_spec.forms[slot .. linked_suf] if remove_footnotes then local lemmas_no_footnotes = {} for _, lemma in ipairs(lemmas) do table.insert(lemmas_no_footnotes, {form = lemma.form}) end return lemmas_no_footnotes else return lemmas end end end return {} end local function handle_derived_slots_and_overrides(base) -- Process slot overrides: First slots specified after the gender, then individual slot overrides specified as -- separate indicators. process_slot_overrides(base) -- Compute linked versions of potential lemma slots, for use in {{is-noun}}. We substitute the original lemma -- (before removing links) for forms that are the same as the lemma, if the original lemma has links. for _, slot in ipairs(potential_lemma_slots) do iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.orig_lemma_no_links and base.orig_lemma:find("%[%[") then return base.orig_lemma else return form end end)) end end -- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'. local function process_addnote_specs(base) for _, spec in ipairs(base.addnote_specs) do local function do_one(slot_spec) slot_spec = "^" .. slot_spec .. "$" for slot, forms in pairs(base.forms) do if rfind(slot, slot_spec) then -- To save on memory, side-effect the existing forms. for _, form in ipairs(forms) do form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes) end end end end for _, slot_spec in ipairs(spec.slot_specs) do slot_spec = adjective_slot_abbrs[slot_spec] or slot_spec if type(slot_spec) == "table" then for _, ss in ipairs(slot_spec) do do_one(ss) end else do_one(slot_spec) end end end end -- Map `fn` over all override specs in `override_list`. `fn` is passed two items (the slot and form object of the -- override), which it can mutate if needed. If it ever returns non-nil, mapping stops and that value is returned -- as the return value of `map_override`; otherwise mapping runs to completion and nil is returned. local function map_override(slot, override_list, fn) for _, formobj in ipairs(override_list) do local retval = fn(slot, formobj) if retval ~= nil then return retval end end return nil end -- Map `fn` over all override specs in `base.overrides` and the positive/comparative/superlative specs. `fn` is passed -- two items (the slot and form object of the override), which it can mutate if needed. If it ever returns non-nil, -- mapping stops and that value is returned as the return value of `map_all_overrides`; otherwise mapping runs to -- completion and nil is returned. local function map_all_overrides(base, fn) for slot, override in pairs(base.overrides) do local retval = map_override(slot, override, fn) if retval ~= nil then return retval end end for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) local field = degfield .. "spec" if base[field] then local retval = map_override(field, base[field], fn) if retval ~= nil then return retval end end end return nil end -- Like put.split_alternating_runs_and_strip_spaces(), but ensure that backslash-escaped commas and periods are not -- treated as separators. local function split_alternating_runs_with_escapes(segments, splitchar) for i, segment in ipairs(segments) do segment = rsub(segment, "\\,", SUB_ESCAPED_COMMA) segments[i] = rsub(segment, "\\%.", SUB_ESCAPED_PERIOD) end local separated_groups = put.split_alternating_runs_and_strip_spaces(segments, splitchar) for _, separated_group in ipairs(separated_groups) do for i, segment in ipairs(separated_group) do segment = rsub(segment, SUB_ESCAPED_COMMA, ",") separated_group[i] = rsub(segment, SUB_ESCAPED_PERIOD, ".") end end return separated_groups end local function fetch_footnotes(separated_group, parse_err) local footnotes for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end -- Return true if the given spec of one of the degrees (pos/comp/sup) explicitly disabled through -pos, -comp or -sup. -- Also return true if `also_if_unspecified` given and the spec was left unspecified (this doesn't make sense for 'pos'). local function degree_disabled(spec, also_if_unspecified) if not spec then return also_if_unspecified end for _, formval in ipairs(spec) do if formval.form == "-" then return true end end return false end local function parse_slot_override_or_comp_sup_spec(colon_separated_group, segments, specs, spectype, parse_err) local form = colon_separated_group[1] if form == "" then parse_err(("Empty overrides not allowed for %s: '%s'"):format(spectype, table.concat(segments))) end local new_spec = {form = form, footnotes = fetch_footnotes(colon_separated_group, parse_err)} for _, existing_spec in ipairs(specs) do if existing_spec.form == new_spec.form then parse_err("Duplicate " .. spectype .. " spec '" .. table.concat(colon_separated_group) .. "'") end end table.insert(specs, new_spec) end --[=[ Parse a comparative/superlative spec (e.g. 'comp:^ri:+') and return the list of lemmas. Each lemma is a form object, i.e. an object containing 'form' and 'footnotes' fields. ]=] local function parse_comp_sup_spec(segments, parse_err) local specs = {} local colon_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, ":") for i, colon_separated_group in ipairs(colon_separated_groups) do if i == 1 then if colon_separated_group[2] then parse_err(("Footnotes not allowed directly on comparative/superlative spec '%s'; put them on the " .. "value following the colon"):format(colon_separated_group[1])) end else parse_slot_override_or_comp_sup_spec(colon_separated_group, segments, specs, "comparative/superlative spec", parse_err) end end return specs end --[=[ Parse a single override spec (e.g. 'str_nom_n:gott') and return two values: the slot(s) the override applies to, and a list of override values. Each override value is a form object, i.e. an object containing 'form' and 'footnotes' fields. ]=] local function parse_override(segments, parse_err) local slots = {} local specs = {} local colon_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, ":") for i, colon_separated_group in ipairs(colon_separated_groups) do if i == 1 then if colon_separated_group[2] then parse_err(("Footnotes not allowed directly on slot override '%s'; put them on the value following " .. "the colon"):format(colon_separated_group[1])) end slots = rsplit(colon_separated_group[1], "%+") for _, slot in ipairs(slots) do if not adjective_slot_set[slot] and not adjective_slot_abbrs[slot] then parse_err(("Unrecognized slot '%s' in override; expected strong slot %s; weak slot %s; " .. "comparative slot preceded by 'comp_'; superlative slot preceded by 'sup_'; " .. "abbreviation %s; or stem %s: %s"):format(slot, make_quoted_slot_list(strong_adjective_slots), make_quoted_slot_list(weak_adjective_slots), make_quoted_keys(adjective_slot_abbrs), make_quoted_list(export.overridable_stems), put.escape_wikicode(table.concat(segments)))) end end else parse_slot_override_or_comp_sup_spec(colon_separated_group, segments, specs, "slot override", parse_err) end end return slots, specs end -- Export for use by [[Module:is-noun]]. function export.parse_for_control_specs(part, parse_control_spec) if part:find("^[Uu]+_?mut") then parse_control_spec("umut", com.umut_types) elseif part:find("^%-?con") then parse_control_spec("con", {"con", "-con"}) elseif part:find("^%-?ppdent") then parse_control_spec("ppdent", {"ppdent", "-ppdent"}) elseif part:find("^%-?pp") then parse_control_spec("pp", {"pp", "-pp"}) elseif part:find("^%-?j") then parse_control_spec("j", {"j", "-j"}) elseif not part:find("^vstem") and part:find("^%-?v") then parse_control_spec("v", {"v", "-v"}) else return false end return true end local function parse_inside(base, inside, is_scraped_noun) local function parse_err(msg) error((is_scraped_noun and "Error processing scraped noun spec: " or "") .. msg .. ": <" .. inside .. ">") end local base_degree = {} local segments = put.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = split_alternating_runs_with_escapes(segments, "%.") for i, dot_separated_group in ipairs(dot_separated_groups) do -- Parse a control spec such as "umut,uUmut[rare]". This assumes the control spec is contained in -- `dot_separated_group` (already split on brackets) and the result of parsing should go in `base[dest]`. -- `allowed_specs` is a list of the allowed control specs in this group, such as -- {"umut", "Umut", "uumut", "uUmut", "uUUmut", "u_mut"} or {"pp", "-pp"}. The result of parsing is a list of -- structures of the form { -- form = "FORM", -- footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- }. local function parse_control_spec(dest, allowed_specs) if base_degree[dest] then parse_err(("Can't specify '%s'-type control spec twice; second such spec is '%s'"):format( dest, table.concat(dot_separated_group))) end base_degree[dest] = {} local comma_separated_groups = split_alternating_runs_with_escapes(dot_separated_group, ",") for _, comma_separated_group in ipairs(comma_separated_groups) do local specobj = {} local spec = comma_separated_group[1] if not m_table.contains(allowed_specs, spec) then parse_err(("For '%s'-type control spec, saw unrecognized spec '%s'; valid values are %s"): format(dest, spec, generate_list_of_possibilities_for_err(allowed_specs))) else specobj.form = spec end specobj.footnotes = fetch_footnotes(comma_separated_group, parse_err) table.insert(base_degree[dest], specobj) end end local part = dot_separated_group[1] if part == "" then if not dot_separated_group[2] then parse_err("Blank indicator; not allowed without attached footnotes") end base.footnotes = fetch_footnotes(dot_separated_group, parse_err) elseif part == "addnote" then local spec_and_footnotes = fetch_footnotes(dot_separated_group, parse_err) if #spec_and_footnotes < 2 then parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'") end local slot_spec = table.remove(spec_and_footnotes, 1) local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$") if not slot_spec_inside then parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets") end local slot_specs = rsplit(slot_spec_inside, ",") -- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we? table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes}) elseif export.parse_for_control_specs(part, parse_control_spec) then -- nothing more to do elseif part:find("^decllemma%s*:") then -- or part:find("^declstate%s*:") or part:find("^declnumber%s*:") then local field, value = part:match("^(decl[a-z]+)%s*:%s*(.+)$") if not value then parse_err(("Syntax error in decllemma indicator: '%s'"):format(part)) end if #dot_separated_group > 1 then parse_err( ("Footnotes not allowed with '%s:' specs: '%s'"):format(field, table.concat(dot_separated_group))) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value elseif part:find("^q%s*:") or part:find("header%s*:") then local field, value = part:match("^(q)%s*:%s*(.+)$") if not value then field, value = part:match("^(header)%s*:%s*(.+)$") end if not value then parse_err(("Syntax error in q/header indicator: '%s'"):format(part)) end if #dot_separated_group > 1 then parse_err( ("Footnotes not allowed with '%s:' specs: '%s'"):format(field, table.concat(dot_separated_group))) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value elseif part:find("^@") then if #dot_separated_group > 1 then parse_err( ("Footnotes not allowed with scrape specs: '%s'"):format(table.concat(dot_separated_group))) end if base.scrape_spec then parse_err("Can't specify scrape directive '@...' twice") end if part:find(":") then base.scrape_is_suffix, base.scrape_spec, base.scrape_id = part:match("^@(%-?)(.-)%s*:%s*(.+)$") else base.scrape_is_suffix, base.scrape_spec = part:match("^@(%-?)(.-)$") end -- If we saw a hyphen, set `scrape_is_suffix` to true, otherwise false base.scrape_is_suffix = base.scrape_is_suffix == "-" if not base.scrape_spec or base.scrape_spec == "" then parse_err(("Syntax error in scrape directive '%s"):format(part)) end local scrape_init, scrape_rest = rmatch(base.scrape_spec, "^(.)(.*)$") local lower_scrape_init = ulower(scrape_init) if ulower(scrape_init) ~= scrape_init then base.scrape_is_uppercase = true base.scrape_spec = lower_scrape_init .. scrape_rest end elseif part == "-pos" then if base.posspec then parse_err("Can't specify '-pos' twice") end base.posspec = {{form = "-"}} elseif part == "comp" or part == "sup" or part == "-comp" or part == "-sup" then if dot_separated_group[2] then parse_err(("Footnotes not allowed directly on '%s'; put them on the value following the colon"):format( part)) end local compsup_val if part:find("^%-") then part = part:sub(2) compsup_val = {{form = "-"}} else compsup_val = {{form = "+"}} end base[part .. "spec"] = compsup_val elseif part:find(":") then local spec, value = part:match("^([a-z_+]+)%s*:%s*(.+)$") if not spec then parse_err(("Syntax error in indicator with value, expecting alphabetic slot, stem/lemma override " .. "or comparative/superlative override indicator: '%s'"):format(part)) end if export.overridable_stem_set[spec] then if base_degree[spec] then if spec == "stem" then parse_err("Can't specify spec for 'stem:' twice (including using 'stem:' along with # or ##)") else parse_err(("Can't specify '%s:' twice"):format(spec)) end end base_degree[spec] = value elseif spec == "comp" or spec == "sup" then if base[spec .. "spec"] then parse_err(("Two spec sets specified for '%s'"):format(spec)) else base[spec .. "spec"] = parse_comp_sup_spec(dot_separated_group, parse_err) end else local slots, override = parse_override(dot_separated_group, parse_err) local function check_duplication(slot) if base.override_slots_seen[slot] then parse_err(("Two overrides specified for slot '%s'"):format(slot)) else base.override_slots_seen[slot] = true end end for _, slot in ipairs(slots) do if adjective_slot_abbrs[slot] then do_slot_abbreviation(base, slot, check_duplication) else check_duplication(slot) end base.overrides[slot] = override end end elseif #dot_separated_group > 1 then parse_err( ("Footnotes only allowed with slot overrides, negatable indicators and by themselves: '%s'"): format(table.concat(dot_separated_group))) elseif part == "sg" or part == "pl" or part == "both" then if base.number then if base.number ~= part then parse_err("Can't specify '" .. part .. "' along with '" .. base.number .. "'") else parse_err("Can't specify '" .. part .. "' twice") end end base.number = part elseif part == "strong" or part == "weak" or part == "bothstates" then if base.state then if base.state ~= part then parse_err("Can't specify '" .. part .. "' along with '" .. base.state .. "'") else parse_err("Can't specify '" .. part .. "' twice") end end base.state = part elseif part == "#" or part == "##" then if base_degree.stem then parse_err("Can't specify a stem spec ('stem:', # or ##) twice") end base_degree.stem = part elseif export.boolean_property_set[part] then if part == "irreg" then -- FIXME, remove this part = "builtin" end if base.props[part] then parse_err("Can't specify '" .. part .. "' twice") end base.props[part] = true else parse_err("Unrecognized indicator '" .. part .. "'") end end local base_degfield if not degree_disabled(base.posspec) then base_degfield = "pos" base_degree.slot_prefix = "" elseif not degree_disabled(base.compspec) then base_degfield = "comp" base_degree.slot_prefix = "comp_" elseif not degree_disabled(base.supspec) then base_degfield = "sup" base_degree.slot_prefix = "sup_" else parse_err("Cannot disable all three degrees (positive/comparative/superlative)") end base.base_degfield = base_degfield base.base_degree = base_degree base.degrees[base_degfield] = {base_degree} if base_degfield ~= "pos" then -- Indicate that the positive degree is explicitly disabled. base.degrees.pos = {} else if degree_disabled(base.compspec) and not base.supspec then -- If we're in the positive degree and the comparative was explicitly disabled, the superlative should be -- explicitly disable if unspecified. base.supspec = {{form = "-"}} end if not base.compspec and not base.supspec and not base.props["comp?"] and not base.props.indecl and not base.props["decl?"] and not base.props.builtin and not base.scrape_spec then parse_err("Must either specify a comparative, specify '-comp' to indicate no comparative, or " .. "specify 'comp?' to indicate that the comparative status is unknown") end end return base end -- Set some defaults (e.g. number and state) now, because they (esp. the number) may be needed below when determining -- how to merge scraped and user-specified properies. local function set_early_base_defaults(base) if not base.props.builtin then local basedeg = base.base_degree basedeg.number = base.number or "both" basedeg.state = base.state or base.base_degfield == "comp" and "weak" or "bothstates" end end local function parse_inside_and_merge(inside, lemma, scrape_chain) local function parse_err(msg) error(msg .. ": <" .. inside .. ">") end if #scrape_chain >= 10 then local linked_scrape_chain = {} for _, element in ipairs(scrape_chain) do table.insert(linked_scrape_chain, "[[" .. element .. "]]") end parse_err(("Probable infinite loop in scraping; scrape chain is [[%s]] -> %s"):format(lemma, table.concat(linked_scrape_chain, " -> "))) end local base = create_base() base.scrape_chain = scrape_chain parse_inside(base, inside, #scrape_chain > 0) local basedeg = base.base_degree basedeg.lemma = lemma if not base.scrape_spec then -- If we're not scraping the declension from another noun, just return the parsed `base`. -- But don't set early defaults if we're being scraped because it interferes with overriding the number -- and/or state by the noun that is scraping us. if #scrape_chain == 0 then set_early_base_defaults(base) end return base else local prefix, base_adj, declspec prefix, base_adj, declspec = com.find_scraped_infl { lemma = lemma, scrape_spec = base.scrape_spec, scrape_is_suffix = base.scrape_is_suffix, scrape_is_uppercase = base.scrape_is_uppercase, infltemp = "is-adecl", allow_empty_infl = false, inflid = base.scrape_id, parse_off_ending = com.parse_off_final_nom_ending, } if type(declspec) == "string" then base.prefix = prefix base.base_adj = base_adj base.scrape_error = declspec return base end -- Parse the inside spec from the scraped noun (merging any sub-scraping specs), and copy over the -- user-specified properties on top of it. table.insert(scrape_chain, base_adj) local inner_base = parse_inside_and_merge(declspec.infl, base_adj, scrape_chain) local inner_basedeg = inner_base.base_degree inner_basedeg.lemma = lemma inner_base.prefix = prefix inner_base.base_adj = base_adj -- Add `prefix` to a full variant of the base noun (e.g. a stem spec or override). We may need -- to adjust the variant to take into account the base noun being a suffix and/or uppercase (e.g. when -- we use [[-dómur]] to generate the inflection of [[vísdómur]] or [[Björn]] to generate the inflection -- of [[Ásbjörn]]). local function add_prefix(form) if base.scrape_is_suffix then form = form:gsub("^%-", "") end if base.scrape_is_uppercase then local first, rest = rmatch(form, "^(.)(.*)$") if first then form = ulower(first) .. rest end end return prefix .. form end -- If there's a prefix, add it now to all the overrides in the scraped noun, as well as 'decllemma' -- and all stem overrides. if prefix ~= "" then map_all_overrides(inner_base, function(slot, formobj) local formval = formobj.form -- Not if the override contains # or ##, which expand to the full lemma (possibly minus -r -- or -ur); or if the override begins with ~ or ^, indicating the stem or its i-mutated variant; -- or if the override is + or - (as may happen with positive/comparative/superlative specs). if not formval:find("#") and not formval:find("^[~^]") and formval ~= "+" and formval ~= "-" then formobj.form = add_prefix(formval) end end) if inner_base.decllemma then inner_base.decllemma = add_prefix(inner_base.decllemma) end for _, stem in ipairs(export.overridable_stems) do -- Only actual stems, not imutval; and not if the stem contains # or ##, which -- expand to the full lemma (possibly minus -r or -ur). if inner_basedeg[stem] and stem:find("stem$") and not inner_basedeg[stem]:find("#") then inner_basedeg[stem] = add_prefix(inner_basedeg[stem]) end end end local function copy_base_properties(plist) for _, prop in ipairs(plist) do if base[prop] ~= nil then inner_base[prop] = base[prop] end end end local function copy_basedeg_properties(plist) for _, prop in ipairs(plist) do if basedeg[prop] ~= nil then inner_basedeg[prop] = basedeg[prop] end end end copy_basedeg_properties(export.control_specs) copy_basedeg_properties(export.overridable_stems) copy_basedeg_properties { "number", "state" } copy_base_properties { "decllemma", "q", "header" } for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) copy_base_properties { degfield .. "spec" } end inner_base.footnotes = iut.combine_footnotes(inner_base.footnotes, base.footnotes) -- Copy addnote specs. for _, prop_list in ipairs { "addnote_specs" } do for _, prop in ipairs(base[prop_list]) do m_table.insertIfNot(inner_base[prop_list], prop) end end -- Now copy remaining user-specified specs into the scraped noun `base`. for _, prop_table in ipairs { "overrides", "props" } do for slot, prop in pairs(base[prop_table]) do inner_base[prop_table][slot] = prop end end -- Now determine the defaulted number and definiteness (after copying relevant settings -- but before the check just below that relies on `inner_base.number` being set). set_early_base_defaults(inner_base) -- If user specified 'sg', cancel out any pl overrides, otherwise we'll get an error. if inner_basedeg.number == "sg" then for slot, _ in pairs(inner_base.overrides) do if slot:find("p$") then inner_base.overrides[slot] = nil end end end -- If user specified '-comp' or '-sup', cancel out any comparative/superlative overrides, -- otherwise we'll get an error. for _, degfield in ipairs { "comp", "sup" } do if degree_disabled(base[degfield .. "spec"]) then for slot, _ in pairs(inner_base.overrides) do if slot:find("^" .. degfield) then inner_base.overrides[slot] = nil end end end end return inner_base end end --[=[ Parse an indicator spec (text consisting of angle brackets and zero or more dot-separated indicators within them). Return value is an object of the form indicated in the comment above create_base(). ]=] local function parse_indicator_spec(angle_bracket_spec, lemma, pagename) if lemma == "" then lemma = pagename end local inside = rmatch(angle_bracket_spec, "^<(.*)>$") assert(inside) local orig_lemma = lemma local orig_lemma_no_links = m_links.remove_links(lemma) lemma = orig_lemma_no_links local base = parse_inside_and_merge(inside, lemma, {}) base.orig_lemma = orig_lemma base.orig_lemma_no_links = orig_lemma_no_links return base end local function set_defaults_and_check_bad_indicators(base) local function check_err(msg) error(("Lemma '%s': %s"):format(base.base_degree.lemma, msg)) end -- Set default values. if base.props.builtin then set_builtin_defaults(base) for _, control_spec in ipairs(export.control_specs) do if base[control_spec] then check_err(("'%s' cannot be specified with built-in terms"):format(control_spec)) end end if base.compspec or base.supspec or base.posspec then check_err("Comparative/superlative indicators cannot be specified with built-in terms") end end end local function set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) local is_multiword = #alternant_multiword_spec.alternant_or_word_specs > 1 iut.map_word_specs(alternant_multiword_spec, function(base) set_defaults_and_check_bad_indicators(base) for _, global_prop in ipairs { "q", "header" } do if base[global_prop] then if alternant_multiword_spec[global_prop] == nil then alternant_multiword_spec[global_prop] = base[global_prop] elseif alternant_multiword_spec[global_prop] ~= base[global_prop] then error(("With multiple words or alternants, set '%s' on only one of them or make them all agree"): format(global_prop)) end end end if base.props.pred then alternant_multiword_spec.saw_pred = true else alternant_multiword_spec.saw_non_pred = true end if base.props.indecl then alternant_multiword_spec.saw_indecl = true else alternant_multiword_spec.saw_non_indecl = true end if base.props["decl?"] then alternant_multiword_spec.saw_unknown_decl = true else alternant_multiword_spec.saw_non_unknown_decl = true end if base.props["comp?"] then alternant_multiword_spec.saw_unknown_comp = true else alternant_multiword_spec.saw_non_unknown_comp = true end end) end local function expand_property_sets(degree) degree.prop_sets = {{}} -- Construct the prop sets from all combinations of control specs, in case any given spec has more than one -- possibility. for _, control_spec in ipairs(export.control_specs) do local specvals = degree[control_spec] -- Handle unspecified control specs. if not specvals then specvals = {false} end if #specvals == 1 then for _, prop_set in ipairs(degree.prop_sets) do -- Convert 'false' back to nil prop_set[control_spec] = specvals[1] or nil end else local new_prop_sets = {} for _, prop_set in ipairs(degree.prop_sets) do for _, specval in ipairs(specvals) do local new_prop_set = m_table.shallowCopy(prop_set) new_prop_set[control_spec] = specval table.insert(new_prop_sets, new_prop_set) end end degree.prop_sets = new_prop_sets end end end local function normalize_all_lemmas(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) local lemma = base.orig_lemma_no_links local basedeg = base.base_degree basedeg.actual_lemma = lemma basedeg.lemma = base.decllemma or lemma base.source_template = alternant_multiword_spec.source_template end) end -- Determine the declension of the positive degree based on the lemma. The declension is set in pos.decl and the stem in -- pos.stem (which will come from the user if explicitly set, otherwise computed from the lemma). local function determine_positive_declension(base) local stem local pos = base.degrees.pos[1] if not pos then error("Internal error: Positive degree doesn't exist") end local default_props = {} local defcomp, defsup -- Determine declension if base.props.builtin then error("Internal error: This function should not be called with built-in terms") elseif base.props.indecl then pos.decl = "indecl" stem = pos.lemma elseif base.props["decl?"] then pos.decl = "decl?" stem = pos.lemma elseif not stem then -- There must be at least one vowel; lemmas like [[bur]] don't count. stem = rmatch(pos.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*)ur$") if stem then if pos.stem == pos.lemma then -- [[dapur]] "sad" etc. where the stem includes the final -r; default vowel stem has contraction and -- so do the default comparatives and superlatives, but many of these have alternative comparatives -- and/or superlatives that need to be given explicitly stem = pos.stem default_props.con = "con" -- defcomp, defsup computed later elseif not pos.stem and (stem:find("leg$") or stem:find("ug$")) then -- [[fallegur]] "beautiful" and others in -legur; [[auðugur]] "rich" and others in -ugur; note that -- this includes words like [[lóugur]] and [[snjóugur]] with a vowel preeding the -ugur (there are no -- adjectives in -augur). defcomp = stem .. "ri" -- defsup computed later elseif rfind(stem, com.vowel_or_hyphen_c .. ".*að$") then -- [[gáfaður]] "gifted", [[saltaður]] "salty", etc.; but beware of compounds of [[glaður]] such as -- [[fjörglaður]] "cheerful" default_props.pp = "pp" default_props.umut = function(base, props) -- PP-type adjectives like [[gáfaður]] and [[saltaður]] and have uUmut, leading to feminine singular -- 'gáfuð' and 'söltuð', but non-PP-type adjectives like [[fjörglaður]] have feminine singular -- 'fjörglöð' with regular umut. local umut_val if props.pp and props.pp.form == "-pp" then umut_val = "umut" else umut_val = "uUmut" end return {form = umut_val, defaulted = true} end defcomp = function(base, props) if props.pp and props.pp.form == "-pp" then -- compounds of [[glaður]] etc.; see above return stem .. "ari" else return stem .. "ri" end end -- defsup computed later else -- [[gulur]] "yellow" and lots of others -- defcomp, defsup computed later end end end if not stem then stem = rmatch(pos.lemma, "^(.*" .. com.vowel_c .. ")r$") if stem then -- The default for these lemmas is to include the -r in the stem, except for lemmas ending in -ár and -ær. -- If the user doesn't want the -r in the stem they need to explicitly specify this using e.g. '##' (or -- conversely, for -ár/-ær lemmas, use '#' to include the -r in the stem). if pos.stem == stem or (not pos.stem and rfind(stem, "[ÁáÆæ]$")) then pos.double_r_and_t = true defcomp = stem .. "rri" if rfind(stem, "[ÆæÝý]$") then -- Lemmas like [[nýr]] "new", [[hlýr]] "warm", [[langær]] "long-lasting" default_props.j = "j" defsup = stem .. "jastur" else -- defsup computed later end else -- Process later on in the null-ending arm. stem = nil end end end if not stem and not pos.stem then -- Beware of [[snjall]] "masterly, excellent, clever", where both l's are part of the stem. stem = rmatch(pos.lemma, "^(.*l)l$") if stem then -- [[heill]] "whole; healthy", [[fúll]] "foul", [[þögull]] "taciturn" (with or without contraction), etc. pos.assimilate_r = true defcomp = stem .. "li" -- defsup computed later, depending on the value of 'con' end end if not stem and not pos.stem then stem = rmatch(pos.lemma, "^(.*n)n$") if stem then pos.assimilate_r = true if stem:find("[^e]in$") then -- [[boginn]] "curved, crooked"; [[heiðinn]] "heathen"; [[fyndinn]] "witty"; also [[náinn]] "near" and -- others in -Vinn other than -einn; also [[söngvinn]] "fond of singing, musical" and [[höggvinn]] -- "chopped" where the -v- disappears before contracted -n-. These adjectives have contraction before -- vowel endings where stem -in becomes -n (except in past participles with the 'ppdent' property, -- where the -n is replaced with a dental, either -d- (after l/m/n), -t- (after a voiceless consonant) -- or -ð- (otherwise). They also have a couple of special endings: acc masc sg is in -inn not expected -- #-nan, and nom/acc neut sg is in -ið. We signal this by setting `pos.inn`. In addition, if 'ppdent' -- applies and there is a comparative and superlative, the dental stem applies, as in [[vantalinn]] -- "not included, omitted, understated (of assets/money)" with comparative [[vantaldari]] and -- superlative [[vantaldastur]]. pos.inn = true local function compute_vowel_stem(props) local vowel_stem = stem:sub(1, -3) -- chop off final -in -- [[söngvinn]] -> 'söngn-', [[höggvinn]] -> 'höggn-' vowel_stem = vowel_stem:gsub("gv$", "g") if props.ppdent and props.ppdent.form == "ppdent" then vowel_stem = com.add_dental_ending(vowel_stem) else if not rfind(vowel_stem, com.cons_c .. "n$") then vowel_stem = vowel_stem .. "n" end end return vowel_stem end defcomp = function(base, props) -- Save for later stem computation. props.vowel_stem = compute_vowel_stem(props) return props.vowel_stem .. "ari" end defsup = function(base, props) -- props.vowel_stem stored in defcomp return compute_vowel_stem(props) .. "astur" end else defcomp = stem .. "ni" -- defsup computed later end end end if not stem then stem = rmatch(pos.lemma, "^(.*)i$") if stem then -- weak-only, e.g. [[þriðji]] "third" default_props.state = "weak" -- defcomp and defsup computed later (although there may be no such adjectives with comparatives) end end if not stem then -- Miscellaneous terms without ending stem = pos.lemma -- defcomp and defsup computed later (although there may be no such adjectives with comparatives) end -- Set the stem to the computed stem if not explicitly set by the user. pos.stem = pos.stem or stem -- Set the default props in `pos` unless explicitly set by the user; but some default props are specific to each -- property set and need to be set on each one. for k, v in pairs(default_props) do if not pos[k] then if export.control_spec_set[k] then for _, props in ipairs(pos.prop_sets) do if type(v) == "function" then props[k] = v(base, props) else props[k] = {form = v, defaulted = true} end end else pos[k] = v end end end -- Set the default comparative and superlative, which are specific to each property set. Do this after processing -- the other default properties because the default comparative/superlative functions frequently depend on other -- properties (e.g. 'con'). local function compute_comp_sup_stem(props) local comp_sup_stem = stem if props.con and props.con.form == "con" then comp_sup_stem = com.apply_contraction(stem) end return comp_sup_stem end defcomp = defcomp or function(base, props) return compute_comp_sup_stem(props) .. "ari" end defsup = defsup or function(base, props) return compute_comp_sup_stem(props) .. "astur" end for k, v in pairs { defcomp = defcomp, defsup = defsup } do for _, props in ipairs(pos.prop_sets) do if type(v) == "function" then props[k] = v(base, props) else props[k] = v end end end pos.decl = pos.decl or "normal" track("decl/" .. pos.decl) end -- Initialize the stem and declension of a comparative or superlative degree object given various properties. This is -- broken out of insert_forms() for use in initializing the base degree object of comparative/superlative-only lemmas, -- which are otherwise already initialized. local function initialize_degree_object_stem_and_decl(degree, degfield, lemma) local stem if degfield == "sup" then local ending = degree.state == "weak" and "i" or "ur" stem = lemma:match("^(.*)" .. ending .. "$") if not stem then error(("Superlative lemma '%s' doesn't end in -%s, as expected"):format(lemma, ending)) end elseif degfield == "comp" then stem = lemma:match("^(.*)i$") if not stem then error(("Comparative lemma '%s' doesn't end in -i, as expected"):format(lemma)) end else error(("Internal error: Unrecognized degree field value %s"):format(dump(degfield))) end degree.stem = degree.stem or stem degree.decl = degfield == "sup" and "normal" or "comp" end -- Get the default superlative u-mutation. If the superlative ends in -astur, it should be "one up" from the positive -- u-mutation value (umut -> uUmut, uUmut -> uUUmut); else (superlative ends in -stur) it should be the same. local function default_superlative_umut(lemma, pos_umut) pos_umut = pos_umut or "umut" if lemma:find("astur$") or lemma:find("asti$") then pos_umut = pos_umut:gsub("mut$", "Umut") end return pos_umut end -- Insert a comparative/superlative degree object, typically based on a user-specified or defaulted spec. local function insert_degree_object(base, degfield, lemma, footnotes, umut) local degree = { lemma = lemma, actual_lemma = lemma, slot_prefix = degfield .. "_", footnotes = footnotes, state = degfield == "sup" and "bothstates" or "weak", number = "both", prop_sets = {{ umut = umut or {form = degfield == "sup" and default_superlative_umut(lemma) or "umut", defaulted = true} }}, } initialize_degree_object_stem_and_decl(degree, degfield, lemma) table.insert(base.degrees[degfield], degree) end -- Construct appropriate comparative/superlative property sets based on the default comparative/superlative, and insert -- into the appropriated degrees structure. `degfield` is "comp" or "sup" and `spec_footnotes` gives the footnotes -- specified along with the "+" spec that triggered this function. local function insert_default_comp_sup_specs(base, degfield, spec_footnotes) for _, props in ipairs(base.base_degree.prop_sets) do -- This fetches the "defcomp" or "defsup" field. local default = props["def" .. degfield] local umut = m_table.shallowCopy(props.umut) or {form = "umut", defaulted = true} if degfield == "sup" then umut.form = default_superlative_umut(default, umut.form) end insert_degree_object(base, degfield, default, spec_footnotes, umut) end end local function generate_umlauted_comp_sup(stem, spec) if spec == "^" then stem = com.apply_i_mutation(stem) elseif spec == "^!" then stem = com.apply_i_mutation(com.apply_contraction(stem)) end local gencomp, gensup if rfind(stem, com.vowel_c .. "$") then gencomp = stem .. "rri" elseif rfind(stem, com.vowel_c .. "[ln]$") then gencomp = stem .. usub(stem, -1) .. "i" elseif rfind(stem, com.cons_c .. "r$") then gencomp = stem .. "i" else gencomp = stem .. "ri" end gensup = stem .. "stur" return gencomp, gensup end -- Process the `comp:...` or `sup:...` spec given by the user and construct the appropriate property sets, one per stem. -- `degfield` is either "comp" or "sup", and `specs` gives the user-specified specs. Note that the default u-mutation -- for superlatives in -astur is uUmut, but if the spec was given (implicity or explicitly) as "+", we use the default -- comparative or superlative, and in that case the u-mutation for superlatives in -astur is constructed from the -- corresponding positive-degree u-mutation by adding U to the end, so that umut -> uUmut but uUmut -> uUUmut (cf. -- [[saltaður]] "salty" with u-mutation uUmut and feminine singular/neuter plural [[söltuð]], and superlative -- [[saltaðastur]] with u-mutation uUUmut and feminine singular/neuter plural [[söltuðust]]). local function process_comp_sup_spec(base, degfield, specs) local basedeg = base.base_degree specs = specs or {{form = "+"}} if base.degrees[degfield] then error(("Internal error: Attempt to create `degrees` list for field `%s` when it already exists: %s"):format( degfield, dump(base.degrees))) end base.degrees[degfield] = {} for _, spec in ipairs(specs) do local forms if spec.form == "-" then -- Skip "-"; effectively, no forms get inserted. elseif spec.form == "+" then insert_default_comp_sup_specs(base, degfield, spec.footnotes) else local formval if spec.form:find("^~!") then formval = com.apply_contraction(basedeg.stem) .. spec.form:sub(3) elseif spec.form:find("^~") then formval = basedeg.stem .. spec.form:sub(2) elseif spec.form == "^" or spec.form == "^!" then local gencomp, gensup = generate_umlauted_comp_sup(basedeg.stem, spec.form) if degfield == "comp" then formval = gencomp spec.gensup = gensup else formval = gensup end else formval = spec.form end spec.resolved_form = formval insert_degree_object(base, degfield, formval, spec.footnotes) end end end local function derive_sup_lemma_from_comp_lemma(comp_lemma) local sup_lemma = comp_lemma:gsub("[rln]i$", "stur") if not sup_lemma:find("stur$") then error(("Don't know how to derive superlative lemma from comparative lemma '%s'; specify " .. "superlative lemma explicitly"):format(comp_lemma)) end return sup_lemma end -- If the `comp:...` spec is given but not the `sup:...` spec, derive the superlative from the comparative. local function derive_sup_from_comp(base, compspecs) if base.degrees.sup then error(("Internal error: Attempt to create `degrees` list for field `sup` when it already exists: %s"):format( degfield, dump(base.degrees))) end base.degrees.sup = {} for _, spec in ipairs(compspecs) do local forms if spec.form == "-" then -- Skip "-"; effectively, no forms get inserted. elseif spec.form == "+" then insert_default_comp_sup_specs(base, "sup", spec.footnotes) elseif spec.form == "^" or spec.form == "^!" then insert_degree_object(base, "sup", spec.gensup, spec.footnotes) else insert_degree_object(base, "sup", derive_sup_lemma_from_comp_lemma(spec.resolved_form), spec.footnotes) end end end -- Determine the stems and other properties to use for each property set for each `degree` structure. The list of such -- properties is given in the comment above create_base(), along with the explanation of what a degree structure and -- property set is and why we have multiple such degree structures (generally, one per base lemma, where there may be -- multiple such comparative and/or superlative base lemmas) and property sets (generally, one per combination of -- control specs such as 'con,-con' and 'umut,uUmut'). local function determine_props(base, degree) -- Now determine all the props for each prop set. for _, props in ipairs(degree.prop_sets) do -- All adjectives have u-mutation in the feminine singular and neuter plural (among others), which triggers -- u-mutation, so we need to compute the u-mutation stem using "umut" if not specifically given. Set `defaulted` -- so an error isn't triggered if there's no special u-mutated form. local props_umut = props.umut if not props_umut then props_umut = {form = "umut", defaulted = true} end -- First do all the stems. local stem, nonvstem, umut_nonvstem, vstem, umut_vstem stem = degree.stem nonvstem = stem umut_nonvstem = com.apply_u_mutation(nonvstem, props_umut.form, not props_umut.defaulted) -- For -inn adjectives, we already computed the correct vowel stem, so just use it. vstem = props.vowel_stem or degree.vstem or degree.stem local is_contracted = props.con and props.con.form == "con" if is_contracted then if degree.inn then error("Internal error: 'con' cannot be specified for adjectives ending in -inn; it's handled automatically internally and should have been caught earlier") end vstem = com.apply_contraction(vstem) end -- Contracted stems should use regular u-mutation even if the uncontracted stem uses uUmut. Otherwise we either -- get an error because uUmut can't be applied to a single-syllable word (e.g. in [[gamall]]) or we get the -- wrong result (e.g. in [[einsamall]] with strong dative plural #einsumlum). In those same circumstances, we -- should allow the u-mutation to have no effect, necessary e.g. for [[yðar]] with uUmut producing feminine -- 'yður' but contracted stem 'yðr-' not undergoing u-mutation. umut_vstem = com.apply_u_mutation(vstem, is_contracted and "umut" or props_umut.form, not is_contracted and not props_umut.defaulted) props.stem = stem if nonvstem ~= stem then props.nonvstem = nonvstem end if umut_nonvstem ~= nonvstem then -- For 'con' and 'ppdent' below, footnotes can be placed on -con or -ppdent so we have to check for those -- footnotes as well as checking for the vstem and such being different, so the -con and -ppdent footnotes -- are still active. However, there's no such thing as -umut, and any time that there's an explicit umut -- variant given, umut_nonvstem will be different from nonvstem (otherwise an error will occur in -- apply_u_mutation), so we don't need this extra check here. if props_umut then umut_nonvstem = iut.combine_form_and_footnotes(umut_nonvstem, props_umut.footnotes) end props.umut_nonvstem = umut_nonvstem end if vstem ~= stem or props.con and props.con.footnotes or props.ppdent and props.ppdent.footnotes then -- See comment above for why we need to check for props.con.footnotes and props.ppdent.footnotes (basically, -- to handle footnotes on -con and -ppdent). local footnotes = iut.combine_footnotes(props.con and props.con.footnotes or nil, props.ppdent and props.ppdent.footnotes or nil) vstem = iut.combine_form_and_footnotes(vstem, footnotes) props.vstem = vstem end if umut_vstem ~= vstem or props.con and props.con.footnotes or props.ppdent and props.ppdent.footnotes then -- See comment above under `umut_nonvstem ~= nonvstem`. There's no -umut so whenever there's a specific -- umut variant with footnote, umut_vstem will be different from vstem so we don't need to check for -- `or props_umut and props_umut.footnotes` above. local footnotes = iut.combine_footnotes(iut.combine_footnotes(props.con and props.con.footnotes or nil, props_umut and props_umut.footnotes or nil), props.ppdent and props.ppdent.footnotes or nil) umut_vstem = iut.combine_form_and_footnotes(umut_vstem, footnotes) props.umut_vstem = umut_vstem end -- Do the j-infix, v-infix and pp properties. if props.j then props.jinfix = props.j.form == "j" and "j" or "" props.jinfix_footnotes = props.j.footnotes props.j = nil end if props.v then props.vinfix = props.v.form == "v" and "v" or "" props.vinfix_footnotes = props.v.footnotes props.v = nil end if props.pp then props.pp_footnotes = props.pp.footnotes props.pp = props.pp.form == "pp" and true or false end end end local function merge_multiword_degree_state(a, b) if not a or a == false then return b end if not b or b == false then return a end if a == b then return a end if a == "bothstates" or b == "bothstates" then return "bothstates" end if (a == "strong" and b == "weak") or (a == "weak" and b == "strong") then return "bothstates" end error(("Internal error: cannot merge multiword degree states %s and %s"):format(tostring(a), tostring(b))) end local function merge_multiword_degree_number(a, b) if not a or a == false then return b end if not b or b == false then return a end if a == b then return a end if a == "both" or b == "both" then return "both" end error(("Words in a multiword expression disagree on number ('%s' vs '%s')"):format(tostring(a), tostring(b))) end local function merge_has_deg_level(prev, new, desc) if prev == new then return prev end if prev == "unspec" then return new end if new == "unspec" then return prev end error(("All alternants must agree in whether they have a %s, but saw one alternant with value '%s' " .. "and another with value '%s'"):format(desc, prev, new)) end local function detect_indicator_spec(alternant_multiword_spec, base) local basedeg = base.base_degree -- Replace # and ## in all overridable stems as well as all overrides. for _, stemkey in ipairs(export.overridable_stems) do basedeg[stemkey] = com.replace_hashvals(basedeg[stemkey], basedeg.lemma) end map_all_overrides(base, function(slot, formobj) formobj.form = com.replace_hashvals(formobj.form, basedeg.lemma) end) if base.props.builtin then expand_property_sets(basedeg) basedeg.stem = "" basedeg.decl = "builtin" else if base.base_degfield == "sup" then -- Superlative-only lemmas (like other superlatives) default to uUmut unless explicitly specified otherwise. basedeg.umut = basedeg.umut or {{form = default_superlative_umut(basedeg.lemma), defaulted = true}} end expand_property_sets(basedeg) if base.base_degfield == "pos" then determine_positive_declension(base) -- Next process the superative, if specified. We do this first so that if there is a superative and no -- comparative specified, we add a comparative; but if sup:- is given, we don't add a comparative. if base.supspec then process_comp_sup_spec(base, "sup", base.supspec) if not base.compspec then base.compspec = base.degrees.sup[1] and {{form = "+"}} or {{form = "-"}} end end -- Next process the comparative, if specified (or defaulted because a superlative was specified). if base.compspec then process_comp_sup_spec(base, "comp", base.compspec) end -- Next, if comparative specified but not superlative, derive the superlative(s) from the comparative(s). if base.compspec and not base.supspec then derive_sup_from_comp(base, base.compspec) end else initialize_degree_object_stem_and_decl(basedeg, base.base_degfield, basedeg.lemma) if base.base_degfield == "comp" then for _, prop_set in ipairs(basedeg.prop_sets) do prop_set.defsup = derive_sup_lemma_from_comp_lemma(basedeg.lemma) end process_comp_sup_spec(base, "sup", base.supspec or {{form = "+"}}) end end end for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) if base.degrees[degfield] then for _, degree in ipairs(base.degrees[degfield]) do determine_props(base, degree) end end end -- Make sure all alternants agree in having a positive, comparative and/or superlative. for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) local hasprop = "has" .. degfield local has_deg = base.degrees[degfield] and (base.degrees[degfield][1] and "has" or "hasnot") or "unspec" if alternant_multiword_spec[hasprop] == nil then alternant_multiword_spec[hasprop] = has_deg elseif alternant_multiword_spec[hasprop] ~= has_deg then alternant_multiword_spec[hasprop] = merge_has_deg_level(alternant_multiword_spec[hasprop], has_deg, desc) end end -- Make sure all alternants agree in 'number' and 'state' for each degree if specified. local multiword = #alternant_multiword_spec.alternant_or_word_specs > 1 for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) if base.degrees[degfield] then for _, degree in ipairs(base.degrees[degfield]) do for _, prop in ipairs { "number", "state" } do local val = degree[prop] or false if alternant_multiword_spec[prop][degfield] == nil then alternant_multiword_spec[prop][degfield] = val elseif alternant_multiword_spec[prop][degfield] ~= val then if multiword then if prop == "state" then alternant_multiword_spec[prop][degfield] = merge_multiword_degree_state( alternant_multiword_spec[prop][degfield], val) else alternant_multiword_spec[prop][degfield] = merge_multiword_degree_number( alternant_multiword_spec[prop][degfield], val) end else error(("All %s alternants must agree in the value of '%s', if specified"):format( desc, prop)) end end end end end end -- Make sure all alternants agree in various properties. for _, prop in ipairs { "decl?", "indecl", "builtin" } do local val = not not base.props[prop] if prop == "builtin" and multiword then elseif alternant_multiword_spec[prop] == nil then alternant_multiword_spec[prop] = val elseif alternant_multiword_spec[prop] ~= val then error(("If one alternant specifies '%s', all must"):format(prop)) end end end local function detect_all_indicator_specs(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) detect_indicator_spec(alternant_multiword_spec, base) end) if #alternant_multiword_spec.alternant_or_word_specs > 1 then local all_builtin = true iut.map_word_specs(alternant_multiword_spec, function(b) if not b.props.builtin then all_builtin = false end end) alternant_multiword_spec.builtin = all_builtin end end local function decline_adjective(base) for degfield, degree_list in pairs(base.degrees) do for _, degree in ipairs(degree_list) do for _, props in ipairs(degree.prop_sets) do if not decls[degree.decl] then error(("Internal error: Unrecognized declension type '%s': %s"):format(degree.decl or "(nil)", dump(degree))) end decls[degree.decl](base, degree, props) end end end handle_derived_slots_and_overrides(base) process_addnote_specs(base) end -- Compute the categories to add the noun to, as well as the annotation to display in the declension title bar. We -- combine the code to do these functions as both categories and title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec) local all_cats = {} local function inscat(cattype) -- Don't insert categories with built-in determiners/pronouns; all are irregular in various ways. if not alternant_multiword_spec.builtin then m_table.insertIfNot(all_cats, "Icelandic " .. cattype) end end -- local plpos = require(en_utilities_module).pluralize(alternant_multiword_spec.pos or "adjective") if alternant_multiword_spec.saw_indecl and not alternant_multiword_spec.saw_non_indecl then -- inscat("indeclinable " .. plpos) end if alternant_multiword_spec.saw_unknown_decl and not alternant_multiword_spec.saw_non_unknown_decl then -- inscat(plpos .. " with unknown declension") end local annotation local annparts = {} local irregs = {} local stemspecs = {} local scrape_chains = {} local umlauted_comparison = false local function insann(txt, joiner) if joiner and annparts[1] then table.insert(annparts, joiner) end table.insert(annparts, txt) end local function do_word_spec(base) -- User-specified 'decllemma:' indicates irregular stem. if base.decllemma then m_table.insertIfNot(irregs, "irreg-stem") if plpos == "နာမဝိသေသန" then -- inscat("adjectives with irregular stem") end end for _, props in ipairs(base.base_degree.prop_sets) do m_table.insertIfNot(stemspecs, props.stem) end end iut.map_word_specs(alternant_multiword_spec, function(base) do_word_spec(base) if base.scrape_chain[1] then local linked_scrape_chain = {} for _, element in ipairs(base.scrape_chain) do table.insert(linked_scrape_chain, ("[[%s]]"):format(element)) end m_table.insertIfNot(scrape_chains, table.concat(linked_scrape_chain, " -> ")) end local function check_umlauted(spec) if spec then for _, formobj in ipairs(spec) do if formobj.form:find("^%^") then umlauted_comparison = true return end end end end if alternant_multiword_spec.haspos == "has" then check_umlauted(base.compspec) check_umlauted(base.supspec) elseif alternant_multiword_spec.hascomp == "has" then check_umlauted(base.supspec) end end) -- NOTE: Fields `haspos`, `hascomp` and `hassup` are set by generic code that iterates over degree fields; look -- for `"has" .. degfield`. if alternant_multiword_spec.haspos == "has" then if alternant_multiword_spec.number.pos == "sg" or alternant_multiword_spec.number.pos == "pl" then -- not "both" or "none" insann(alternant_multiword_spec.number.pos .. "-only", " ") end if alternant_multiword_spec.state.pos == "strong" or alternant_multiword_spec.state.pos == "weak" then -- not "both" or "none" insann(alternant_multiword_spec.state.pos .. "-only", " ") end if plpos == "နာမဝိသေသန" then if alternant_multiword_spec.hascomp == "has" and alternant_multiword_spec.hassup == "has" then -- inscat("comparable adjectives") elseif alternant_multiword_spec.hascomp == "hasnot" and alternant_multiword_spec.hassup == "hasnot" then -- inscat("uncomparable adjectives") end end if alternant_multiword_spec.numcomp > 1 then inscat(plpos .. " with multiple comparatives") end if alternant_multiword_spec.numsup > 1 then -- inscat(plpos .. " with multiple superlatives") end elseif alternant_multiword_spec.hascomp == "has" then insann("comparative-only", " ") if plpos == "နာမဝိသေသန" then -- inscat("comparative-only adjectives") end if alternant_multiword_spec.numsup > 1 then -- inscat(plpos .. " with multiple superlatives") end else insann("superlative-only", " ") if plpos == "နာမဝိသေသန" then -- inscat("superlative-only adjectives") end end if #irregs > 0 then insann(table.concat(irregs, " // "), " ") end if umlauted_comparison then insann("umlauted-comp", " ") -- inscat(plpos .. " with umlauted comparative or superlative") end if #scrape_chains > 0 then insann(("based on %s"):format(m_table.serialCommaJoin(scrape_chains)), ", ") -- inscat(plpos .. " declined using scraped base declensions") end alternant_multiword_spec.annotation = table.concat(annparts) if #stemspecs > 1 then -- inscat(plpos .. " with multiple stems") end if alternant_multiword_spec.saw_unknown_comp then -- inscat(plpos .. " with unknown comparative status") end alternant_multiword_spec.categories = all_cats end local function show_forms(alternant_multiword_spec) local lemmas = {} for _, slot in ipairs(potential_lemma_slots) do if alternant_multiword_spec.forms[slot] then for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do table.insert(lemmas, formobj) end break end end -- Make sure it's OK to use the compressed comparative singular table; this won't be OK for e.g. [[innri]], which has -- an alternative oblique masculine singular [[innra]]. This must be done before calling `iut.show_forms()` because -- that code encodes accelerator information about the slot in question into the string, which makes comparisons fail. alternant_multiword_spec.use_compressed_comp_table = m_table.deepEquals(alternant_multiword_spec.forms.comp_wk_nom_m, alternant_multiword_spec.forms.comp_wk_obl_m) and m_table.deepEquals(alternant_multiword_spec.forms.comp_wk_nom_f, alternant_multiword_spec.forms.comp_wk_obl_f) local props = { lemmas = lemmas, lang = lang, } for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) if alternant_multiword_spec["has" .. degfield] == "has" then props.slot_list = get_slot_list(alternant_multiword_spec, degfield) iut.show_forms(alternant_multiword_spec.forms, props) alternant_multiword_spec["footnote_" .. degfield] = alternant_multiword_spec.forms.footnote end end -- This isn't strictly necessary but ensures that all slots including the *_linked ones get converted to strings. props.slot_list = adjective_slot_list_linked_slots iut.show_forms(alternant_multiword_spec.forms, props) end local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms local function template_prelude() return mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '{title}{annotation}', palette = 'blue', tall = 'yes', } } end local function template_postlude() return mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom', args = { notes = '{footnote}' } } end local table_spec_left_rail = [=[ ! class="is-left-rail" rowspan=TOTALROWS | STATE declension <br /> (DEFINITENESS) ]=] local table_spec_parts = { strong_sg = [=[ ! class="outer" | singular ! masculine ! feminine ! neuter |- ! nominative | {COMPSUPstr_nom_m} | {COMPSUPstr_nom_f} | rowspan=2 | {COMPSUPstr_nom_n} |- ! accusative | {COMPSUPstr_acc_m} | {COMPSUPstr_acc_f} |- ! dative | {COMPSUPstr_dat_m} | {COMPSUPstr_dat_f} | {COMPSUPstr_dat_n} |- ! genitive | {COMPSUPstr_gen_m} | {COMPSUPstr_gen_f} | {COMPSUPstr_gen_n} ]=], strong_pl = [=[ ! class="outer" | plural ! masculine ! feminine ! neuter |- ! nominative | {COMPSUPstr_nom_mp} | rowspan=2 | {COMPSUPstr_nom_fp} | rowspan=2 | {COMPSUPstr_nom_np} |- ! accusative | {COMPSUPstr_acc_mp} |- ! dative | colspan=3 | {COMPSUPstr_dat_p} |- ! genitive | colspan=3 | {COMPSUPstr_gen_p} ]=], comp_weak_sg = [=[ ! class="outer" | ! masculine ! feminine ! neuter |- ! class="outer" | singular (all-case) | {COMPSUPwk_nom_m} | {COMPSUPwk_nom_f} | {COMPSUPwk_n} ]=], weak_sg = [=[ ! class="outer" | singular ! masculine ! feminine ! neuter |- ! nominative | {COMPSUPwk_nom_m} | {COMPSUPwk_nom_f} | rowspan=2 | {COMPSUPwk_n} |- ! acc/dat/gen | {COMPSUPwk_obl_m} | {COMPSUPwk_obl_f} ]=], weak_pl = [=[ ! class="outer" | plural (all-case) | rowspan=4 colspan=3 | {COMPSUPwk_p} ]=] } local function format_left_rail(state, totalrows) return (table_spec_left_rail:gsub("TOTALROWS", tostring(totalrows)) :gsub("STATE", state) :gsub("DEFINITENESS", state == "weak" and "definite" or "indefinite")) end local function get_table_spec(slot_prefix, number, state) return slot_prefix == "comp_" and number == "sg" and state == "weak" and alternant_multiword_spec.use_compressed_comp_table and table_spec_parts.comp_weak_sg or table_spec_parts[state .. "_" .. number] end local function construct_table(slot_prefix, inside) local parts = {} local function ins(txt) table.insert(parts, txt) end ins(template_prelude()) inside(ins) ins(template_postlude()) return (table.concat(parts):gsub("COMPSUP", slot_prefix)) end local function get_table_spec_one_number_one_state(slot_prefix, number, state, omit_state) return construct_table(slot_prefix, function(ins) if not omit_state then ins(format_left_rail(state, 5)) end ins(get_table_spec(slot_prefix, number, state)) end) end local function get_table_spec_all_number_one_state(slot_prefix, state, omit_state) return construct_table(slot_prefix, function(ins) if not omit_state then ins(format_left_rail(state, 10)) end ins(get_table_spec(slot_prefix, "sg", state)) ins('|-\n') ins(get_table_spec(slot_prefix, "pl", state)) end) end local function get_table_spec_one_number_all_state(slot_prefix, number) return construct_table(slot_prefix, function(ins) ins(format_left_rail("strong", 5)) ins(get_table_spec(slot_prefix, number, "strong")) ins('|-\n') ins(format_left_rail("weak", 5)) ins(get_table_spec(slot_prefix, number, "weak")) end) end local function get_table_spec_all_number_all_state(slot_prefix) return construct_table(slot_prefix, function(ins) ins(format_left_rail("strong", 11)) ins(get_table_spec(slot_prefix, "sg", "strong")) ins('|-\n| class="separator" colspan="999" |\n|-\n') ins(get_table_spec(slot_prefix, "pl", "strong")) ins('|-\n| class="separator" colspan="999" |\n|-\n') ins(format_left_rail("weak", 10)) ins(get_table_spec(slot_prefix, "sg", "weak")) ins("|-\n") ins(get_table_spec(slot_prefix, "pl", "weak")) end) end local notes_template = [=[ <div class="is-footnote-outer-div" style="width:100%;"> <div class="is-footnote-inner-div"> {footnote} </div></div> ]=] local ital_lemma = '<i lang="is" class="Latn">' .. forms.lemma .. "</i>" local annotation = alternant_multiword_spec.annotation if annotation == "" then forms.annotation = "" else forms.annotation = " (<span style=\"font-size: smaller;\">" .. annotation .. "</span>)" end -- Format the per-degree tables. local computed_tables = {} for _, degspec in ipairs(compsup_degrees) do local degfield, desc = unpack(degspec) local hasprop = "has" .. degfield local computed_table = "" local slot_prefix = degfield_to_slot_prefix(degfield) if alternant_multiword_spec[hasprop] == "has" then local table_spec = alternant_multiword_spec.state[degfield] == "bothstates" and alternant_multiword_spec.number[degfield] == "both" and get_table_spec_all_number_all_state(slot_prefix) or alternant_multiword_spec.number[degfield] == "both" and get_table_spec_all_number_one_state(slot_prefix, alternant_multiword_spec.state[degfield], alternant_multiword_spec.builtin) or alternant_multiword_spec.state[degfield] == "bothstates" and get_table_spec_one_number_all_state(slot_prefix, alternant_multiword_spec.number[degfield]) or get_table_spec_one_number_one_state(slot_prefix, alternant_multiword_spec.number[degfield], alternant_multiword_spec.state[degfield], alternant_multiword_spec.builtin) forms.title = ("%s forms of %s"):format(desc, ital_lemma) forms.footnote = alternant_multiword_spec["footnote_" .. degfield] computed_table = m_string_utilities.format(table_spec, forms) end table.insert(computed_tables, computed_table) end -- Paste them together. return require("Module:TemplateStyles")("Module:is-adjective/style.css") .. table.concat(computed_tables) end -- Externally callable function to parse and decline an adjective given user-specified arguments and the argument spec -- `argspec` (specified because the user may give multiple such specs). Return value is ALTERNANT_MULTIWORD_SPEC, an -- object where the declined forms are in `ALTERNANT_MULTIWORD_SPEC.forms` for each slot. If there are no values for a -- slot, the slot key will be missing. The value for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(args, argspec, source_template) local from_headword = source_template == "is-adj" local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local parse_props = { parse_indicator_spec = function(angle_bracket_spec, lemma) return parse_indicator_spec(angle_bracket_spec, lemma, pagename) end, angle_brackets_omittable = true, allow_blank_lemma = true, } local alternant_multiword_spec = iut.parse_inflected_text(argspec, parse_props) alternant_multiword_spec.title = args.title alternant_multiword_spec.pos = args.pos alternant_multiword_spec.source_template = source_template alternant_multiword_spec.number = {} alternant_multiword_spec.state = {} local scrape_errors = {} iut.map_word_specs(alternant_multiword_spec, function(base) if base.scrape_error then table.insert(scrape_errors, base.scrape_error) end end) if scrape_errors[1] then alternant_multiword_spec.scrape_errors = scrape_errors else normalize_all_lemmas(alternant_multiword_spec) set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) detect_all_indicator_specs(alternant_multiword_spec) local inflect_props = { skip_slot = function(slot) local degfield = slot_to_degfield(slot) return skip_slot(alternant_multiword_spec.number[degfield], alternant_multiword_spec.state[degfield], slot) end, slot_list = adjective_slot_list, inflect_word_spec = decline_adjective, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) local forms = alternant_multiword_spec.forms alternant_multiword_spec.numcomp = forms.comp_wk_nom_m and #forms.comp_wk_nom_m or 0 local supforms = forms.sup_str_nom_m or forms.sup_wk_nom_m alternant_multiword_spec.numsup = supforms and #supforms or 0 compute_categories_and_annotation(alternant_multiword_spec) end if args.json then return require("Module:JSON").toJSON(alternant_multiword_spec) end return alternant_multiword_spec end -- Entry point for {{is-adecl}}. Template-callable function to parse and decline an adjective given -- user-specified arguments and generate a displayable table of the declined forms. function export.show(frame) local parent_args = frame:getParent().args local params = { [1] = {required = true, list = true, default = "glaður<comp>"}, deriv = {list = true}, id = {}, pos = {}, title = {}, pagename = {}, json = {type = "boolean"}, } local args = m_para.process(parent_args, params) local alternant_multiword_specs = {} for i, argspec in ipairs(args[1]) do alternant_multiword_specs[i] = export.do_generate_forms(args, argspec, "is-adecl") end if args.json then -- JSON return value if #args[1] == 1 then return alternant_multiword_specs[1] else return alternant_multiword_specs end end local parts = {} local function ins(txt) table.insert(parts, txt) end for _, alternant_multiword_spec in ipairs(alternant_multiword_specs) do if not alternant_multiword_spec.scrape_errors then show_forms(alternant_multiword_spec) end if alternant_multiword_spec.header then ins(("'''%s:'''\n"):format(alternant_multiword_spec.header)) end if alternant_multiword_spec.q then ins(("''%s''\n"):format(alternant_multiword_spec.q)) end local categories if alternant_multiword_spec.scrape_errors then local errmsgs = {} for _, scrape_error in ipairs(alternant_multiword_spec.scrape_errors) do table.insert(errmsgs, '<span style="font-weight: bold; color: var(--wikt-palette-red,#CC2200);">' .. scrape_error .. "</span>") end -- Surround the messages with a <div> because the table normally does that, and we want to ensure -- similar formatting with respect to newlines. ins("<div>" .. table.concat(errmsgs, "<br />") .. "</div>") categories = {"Icelandic scraping errors in Template:is-adecl"} else ins(make_table(alternant_multiword_spec)) categories = alternant_multiword_spec.categories end ins(require("Module:utilities").format_categories(categories, lang, nil, nil, force_cat)) end return table.concat(parts) end return export szfldehhczxjvh5etc0wx5y3qjs8b9f မဝ်ဂျူ:is-common 828 119765 393767 293892 2026-05-01T18:15:25Z 咽頭べさ 33 393767 Scribunto text/plain local export = {} local pages_module = "Module:pages" local string_char_module = "Module:string/char" local string_pattern_escape_module = "Module:string/patternEscape" local string_replacement_escape_module = "Module:string/replacementEscape" local table_module = "Module:table" local template_parser_module = "Module:template parser" local dump = mw.dumpObject local new_title = mw.title.new local rmatch = mw.ustring.match local rsubn = mw.ustring.gsub local usub = mw.ustring.sub local uupper = mw.ustring.upper local function find_templates(...) find_templates = require(template_parser_module).find_templates return find_templates(...) end local function get_section(...) get_section = require(pages_module).get_section return get_section(...) end local function insert_if_not(...) insert_if_not = require(table_module).insertIfNot return insert_if_not(...) end local function pattern_escape(...) pattern_escape = require(string_pattern_escape_module) return pattern_escape(...) end local function replacement_escape(...) replacement_escape = require(string_replacement_escape_module) return replacement_escape(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function u(...) u = require(string_char_module) return u(...) end -- Capitalize the first letter. local function ucap(str) local first, rest = rmatch(str, "^(.)(.*)$") if first then return uupper(first) .. rest end return str end -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- version of rsubn() that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end local AU_SUB = u(0xFFF0) -- temporary substitution for 'au' local CAP_AU_SUB = u(0xFFF1) -- temporary substitution for 'Au' local ALL_CAP_AU_SUB = u(0xFFF2) -- temporary substitution for 'AU' local UR_SUB = u(0xFFF3) -- temporary substitution for final 'ur'; should be treated as consonant local lc_vowel = "aeiouyáéíóúýöæ" local uc_vowel = uupper(lc_vowel) export.vowel = lc_vowel .. uc_vowel .. AU_SUB .. CAP_AU_SUB .. ALL_CAP_AU_SUB export.vowel_c = "[" .. export.vowel .. "]" export.vowel_or_hyphen = export.vowel .. "%-" export.vowel_or_hyphen_c = "[" .. export.vowel_or_hyphen .. "]" export.non_vowel_c = "[^" .. export.vowel .. "]" export.cons_c = "[^" .. export.vowel .. "]" local V = export.vowel_c local C = export.cons_c export.umut_types = {"umut", "Umut", "uumut", "uUmut", "uUUmut", "u_mut"} export.unumut_types = {} for _, umut_type in ipairs(export.umut_types) do table.insert(export.unumut_types, "un" .. umut_type) end local function apply_au_ur_sub(stem, ur_only) if not ur_only then -- au doesn't u-mutate; easiest way to handle this is to temporarily convert au and variants to single -- characters stem = stem:gsub("au", AU_SUB) :gsub("Au", CAP_AU_SUB) :gsub("AU", ALL_CAP_AU_SUB) end -- There must be at least one vowel to treat -ur as a suffix; lemmas like [[bur]] don't count. return (rsub(stem, "^(.*" ..export.vowel_or_hyphen_c .. ".*)ur$", "%1" .. UR_SUB)) end local function undo_au_ur_sub(stem) return (stem:gsub(UR_SUB, "ur") :gsub(AU_SUB, "au") :gsub(CAP_AU_SUB, "Au") :gsub(ALL_CAP_AU_SUB, "AU") ) end local lc_i_mutation = { ["a"] = "e", -- [[dagur]] "dat" -> dat sg [[degi]]; [[faðir]] "father" -> nom pl [[feður]]; [[maður]] "man" -> nom -- pl [[menn]]; [[taka]] "to take" -> 1sg pres ind [[tek]]; [[langur]] "long" -> [[lengd]] "length" ["á"] = "æ", -- [[háttur]] "way, manner" -> nom pl [[hættir]]; [[hár]] "high" -> comp [[hærri]] ["e"] = "i", -- this may mostly occur in reverse ["o"] = "e", -- [[hnot]] "nut; small ball of yarn" -> nom pl [[hnetur]]; [[koma]] "to come" -> 1sg pres ind [[kem]] -- ["o"] = "y", -- [[sonur]] "son" -> nom pl [[synir]]; needs explicit vowel ["ö"] = "e", -- [[mölur]] "clothes moth" -> nom pl [[melir]]; [[köttur]] "cat" -> nom pl [[kettir]]; [[slökkva]] -- "to extinguish" -> 1sg pres ind [[slekk]]; [[dökkur]] "dark" -> comp [[dekkri]] ["ó"] = "æ", -- [[bók]] "book" -> nom pl [[bækur]]; [[stór]] "big" -> comp [[stærri]]; [[dómur]] "judgement" -> -- [[dæmdur]] "judged" ["u"] = "y", -- [[fullur]] "full" -> comp [[fyllri]]; [[þungur]] "heavy/weighty" -> [[þyngd]] "weight" ["ú"] = "ý", -- [[mús]] "mouse" -> nom pl [[mýs]]; [[brú]] "bridge" -> nom pl [[brýr]]; [[búa]] "to reside" -> -- 1sg pres ind [[bý]]; [[hús]] "house" -> [[hýsa]] "to house" ["ja"] = "i", -- un-u-mutated version of jö ["jö"] = "i", -- [[fjörður]] "fjord" -> dat sg [[firði]], nom pl [[firðir]] -- ["jö"] = "é", -- [[stjölur]] "?" -> dat sg [[stéli]], nom pl [[stélir]]; needs explicit vowel ["jó"] = "ý", -- [[bjóða]] "to offer" -> 1sg pres ind [[býð]]; [[ljós]] "light" -> [[lýsa]] "to illuminate" ["ju"] = "y", -- [[við]] [[bjuggum]] "we lived" -> subjunctive [[við]] [[byggjum]] ["jú"] = "ý", -- [[ljúga]] "to lie" -> 1sg pres ind [[lýg]] ["au"] = "ey", -- [[ausa]] "to dip, to scoop" -> 1sg pres ind [[eys]]; [[aumur]] "wretched" -> [[eymd]] -- "wretchedness" } local i_mutation = {} for k, v in pairs(lc_i_mutation) do i_mutation[k] = v i_mutation[ucap(k)] = ucap(v) end local lc_reverse_i_mutation = { ["æ"] = "á", -- [[hættur]] nom pl "bedtime, quitting time" dat pl [[háttum]]; [[ær]] "ewe" acc/dat sg [[á]] ["e"] = "a", -- [[ketill]] "kettle" dat sg [[katli]]; [[Egill]] (male given name) dat sg [[Agli]]; -- [[telja]] "to count" past ind [[taldi]] ["i"] = "e", -- [[sitja]] "to sit" past part [[setinn]] ["ý"] = "ú", -- [[kýr]] "cow" acc/dat sg [[kú]] ["y"] = "u", -- FIXME: examples? ["ey"] = "au", -- FIXME: examples? } local reverse_i_mutation = {} for k, v in pairs(lc_reverse_i_mutation) do reverse_i_mutation[k] = v reverse_i_mutation[ucap(k)] = ucap(v) end -- Apply i-mutation to the last vowel of `stem`, excluding suffixal -ur. If `newv` is given, use that vowel (for cases -- like [[sonur]] "son" nom pl [[synir]] but [[hnot]] "nut; small ball of yarn" nom pl [[hnetur]]); otherwise use the -- appropriate default vowel. function export.apply_i_mutation(stem, newv) local modstem, subbed local function subfunc(origv, post) return (newv or i_mutation[origv]) .. post end stem = apply_au_ur_sub(stem, "ur only") modstem, subbed = rsubb(stem, "([Aa]u)(" .. C .. "*)$", subfunc) if subbed then return undo_au_ur_sub(modstem) end modstem, subbed = rsubb(stem, "([Jj][aöóúu])(" .. C .. "*)$", subfunc) if subbed then return undo_au_ur_sub(modstem) end modstem, subbed = rsubb(stem, "([aáeoöóúuAÁEOÖÓÚU])(" .. C .. "*)$", subfunc) if subbed then return undo_au_ur_sub(modstem) end error(("Stem '%s' does not contain an i-mutable vowel as its last vowel"):format(undo_au_ur_sub(stem))) end -- Apply reverse i-mutation to the last vowel of `stem`, excluding suffixal -ur. If `newv` is given, use that vowel; -- otherwise use the appropriate default vowel. function export.apply_reverse_i_mutation(stem, newv) local modstem, subbed local function subfunc(origv, post) return (newv or reverse_i_mutation[origv]) .. post end stem = apply_au_ur_sub(stem, "ur only") modstem, subbed = rsubb(stem, "([Ee]y)(" .. C .. "*)$", subfunc) if subbed then return undo_au_ur_sub(modstem) end modstem, subbed = rsubb(stem, "([æeiýyÆEIÝY])(" .. C .. "*)$", subfunc) if subbed then return undo_au_ur_sub(modstem) end error(("Stem '%s' does not contain a reversible i-mutated vowel as its last vowel"):format(undo_au_ur_sub(stem))) end local lesser_u_mutation = { ["a"] = "ö", ["A"] = "Ö", } local lesser_reverse_u_mutation = { ["ö"] = "a", ["Ö"] = "A", } local greater_u_mutation = { ["a"] = "u", ["A"] = "U", -- FIXME, may not occur } local greater_reverse_u_mutation = { ["u"] = "a", ["U"] = "A", -- FIXME, may not occur } -- Apply u-mutation to `stem`, excluding suffixal -ur. `typ` is the type of u-mutation: -- * "umut" (mutate the last vowel if possible, with a -> ö); -- * "Umut" (mutate the last vowel if possible, with a -> u); -- * "uumut" (mutate the last two vowels if possible, with a -> ö in the second-to-last and a -> ö in the last); -- * "uUmut" (mutate the last two vowels if possible, with a -> ö in the second-to-last and a -> u in the last); -- * "uUUmut" (mutate the last three vowels if possible, with a -> ö in the third-to-last and a -> u in the last and -- second-to-last; needed in superlatives of past-participle-derived adjectives like [[saltaður]] "salty" -- with superlative [[saltaðastur]] whose nominative feminine singular is [[söltuðust]]); -- * "u_mut" (mutate the second-to-last vowel if possible, with a -> ö, leaving alone the last vowel). function export.apply_u_mutation(stem, typ, error_if_unmatchable) local origstem = stem stem = apply_au_ur_sub(stem) if typ == "uUUmut" then local first, v1, mid1, v2, mid2, v3, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if first then v1 = lesser_u_mutation[v1] or v1 elseif stem:sub(1, 1) ~= "-" then if error_if_unmatchable then error(("Can't apply u-mutation of type '%s' because stem '%s' doesn't have three syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) else first, v2, mid2, v3, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply u-mutation of type '%s' because suffix stem '%s' doesn't have two syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) end v1 = "" mid1 = "" end v2 = greater_u_mutation[v2] or v2 v3 = greater_u_mutation[v3] or v3 local retval = undo_au_ur_sub(first .. v1 .. mid1 .. v2 .. mid2 .. v3 .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end if typ == "uUmut" or typ == "uumut" or typ == "u_mut" then local first, v1, middle, v2, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if first then v1 = lesser_u_mutation[v1] or v1 elseif stem:sub(1, 1) ~= "-" then if error_if_unmatchable then error(("Can't apply u-mutation of type '%s' because stem '%s' doesn't have two syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) else first, v2, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply u-mutation of type '%s' because suffix stem '%s' doesn't have even one syllable"): format(typ, origstem)) end return undo_au_ur_sub(stem) end v1 = "" middle = "" end v2 = typ == "u_mut" and v2 or (typ == "uUmut" and greater_u_mutation or lesser_u_mutation)[v2] or v2 local retval = undo_au_ur_sub(first .. v1 .. middle .. v2 .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end if typ ~= "umut" and typ ~= "Umut" then error(("Internal error: For stem '%s', saw unrecognized u-mutation type '%s'"):format(origstem, typ)) end local first, v, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply u-mutation of type '%s' because stem '%s' doesn't have a vowel"):format(typ, origstem)) end return undo_au_ur_sub(stem) end v = (typ == "Umut" and greater_u_mutation or lesser_u_mutation)[v] or v local retval = undo_au_ur_sub(first .. v .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end -- Apply reverse u-mutation to `stem`, excluding suffixal -ur. `typ` is the type of u-mutation: -- * "unumut" (unmutate the last vowel if possible, with ö -> a); -- * "unUmut" (unmutate the last vowel if possible, with u -> a); -- * "unuumut" (unmutate the last two vowels if possible, with ö -> a in the second-to-last and ö -> a in the last); -- * "unuUmut" (unmutate the last two vowels if possible, with ö -> a in the second-to-last and u -> a in the last); -- * "unuUUmut" (unmutate the last three vowels if possible, with ö -> a in the third-to-last and u -> a in the last and -- second-to-last; needed, at least theoretically, in declining adjective-noun multiword terms where the -- adjective is an inflected-form superlative of a past-participle-derived adjective such as [[söltuðust]] -- "saltiest", nominative feminine singular of [[saltaðastur]]); -- * "unu_mut" (unmutate the second-to-last vowel if possible, with ö -> a, leaving alone the last vowel). function export.apply_reverse_u_mutation(stem, typ, error_if_unmatchable) local origstem = stem stem = apply_au_ur_sub(stem) if typ == "uUUmut" then local first, v1, mid1, v2, mid2, v3, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if first then v1 = lesser_reverse_u_mutation[v1] or v1 elseif stem:sub(1, 1) ~= "-" then if error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' because stem '%s' doesn't have three syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) else first, v2, mid2, v3, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' because suffix stem '%s' doesn't have two syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) end v1 = "" mid1 = "" end v2 = greater_reverse_u_mutation[v2] or v2 v3 = greater_reverse_u_mutation[v3] or v3 local retval = undo_au_ur_sub(first .. v1 .. mid1 .. v2 .. mid2 .. v3 .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end if typ == "unuumut" or typ == "unuUmut" or typ == "unu_mut" then local first, v1, middle, v2, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' because stem '%s' doesn't have two syllables"): format(typ, origstem)) end return undo_au_ur_sub(stem) end v1 = lesser_reverse_u_mutation[v1] or v1 v2 = typ == "unu_mut" and v2 or (typ == "unuUmut" and greater_reverse_u_mutation or lesser_reverse_u_mutation)[v2] or v2 local retval = undo_au_ur_sub(first .. v1 .. middle .. v2 .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end if typ ~= "unumut" and typ ~= "unUmut" then error(("Internal error: For stem '%s', saw unrecognized reverse u-mutation type '%s'"):format(origstem, typ)) end local first, v, last = rmatch(stem, "^(.*)(" .. V .. ")(" .. C .. "*)$") if not first then if error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' because stem '%s' doesn't have a vowel"): format(typ, origstem)) end return undo_au_ur_sub(stem) end v = (typ == "unUmut" and greater_reverse_u_mutation or lesser_reverse_u_mutation)[v] or v local retval = undo_au_ur_sub(first .. v .. last) if retval == origstem and error_if_unmatchable then error(("Can't apply reverse u-mutation of type '%s' to stem '%s'; result would be the same as the original"): format(typ, origstem)) end return retval end -- Apply contraction to `stem`. Throw an error if the stem can't be contracted. function export.apply_contraction(stem) -- Contraction only applies when the last vowel is a/i/u and followed by a single consonant. There are restrictions -- on what the consonant can be but I'm not sure exactly what they are; r/l/n/ð are all possible (cf. [[hamar]], -- [[megin]], [[höfuð]], [[þumall]], where in the last case the final -l is the nominative singular ending). local butlast, last = rmatch(stem, "^(.*" .. C .. ")[aiu](" .. C .. ")$") if not butlast then error(("Contraction cannot be applied to stem '%s' because it doesn't end in a/i/u preceded by a consonant and followed by a single consonant" ):format(stem)) end return butlast .. last end -- Add a dental ending (d/t/ð) to `stem`. function export.add_dental_ending(stem) if stem:match("[lmn]$") then -- [[talinn]] "counted" -> tald-; [[framinn]] "performed" -> framd-; [[hruninn]] "fallen down/in" -> hrund- return stem .. "d" elseif stem:match("ð$") then -- I dunno if this ever happens. return usub(stem, 1, -2) .. "dd" elseif stem:match("[pkt]$") then -- [[glapinn]] "confused" -> glapt-; [[lukinn]] "(en)closed" -> lukt-; no examples with -t- return stem .. "t" end -- [[vafinn]] "wrapped" -> vafð-; [[varinn]] "defended" -> varð-; [[tugginn]] "chewed" -> tuggð- (or tuggn-); -- [[spúinn]] "vomited" -> spúð- return stem .. "ð" end -- Parse off and return a final -ur or -r nominative ending. Return the portion before the ending as well as the ending -- itself. If the lemma ends in -aur, only the -r is stripped off. This is used by ## and by the `@l` scraping -- indicator (so that e.g. `@r` when applied to a compound of [[réttur]] "law; court; course (of a meal)" won't get -- confused by the final -r). function export.parse_off_final_nom_ending(lemma) local lemma_minus_r, final_nom_ending if lemma:match("[^Aa]ur$") then lemma_minus_r, final_nom_ending = lemma:match("^(.*)(ur)$") elseif lemma:sub(-1) == "r" then lemma_minus_r, final_nom_ending = lemma:match("^(.*)(r)$") else lemma_minus_r, final_nom_ending = lemma, "" end return lemma_minus_r, final_nom_ending end -- Replace # and ## with `val`, substituting `lemma` as necessary (possibly without final -r or -ur). function export.replace_hashvals(val, lemma) if not val then return val elseif val:find("##", nil, true) then local lemma_minus_r = export.parse_off_final_nom_ending(lemma) val = val:gsub("##", replacement_escape(lemma_minus_r)) end return (val:gsub("#", replacement_escape(lemma))) end -- Find the inflection spec by scraping the contents of the Icelandic section of `lemma`, looking for `infltemp` calls -- (where template is e.g. "is-ndecl", "is-adecl" or "is-conj") If `inflid` is given, it must match the value of the -- |id= param specified to the inflection template; otherwise, any inflection template call will work. If anything goes -- wrong in the process, a string is returned describing the error message; otherwise a table of inflections is -- returned, each containing a field `infl` with the inflection spec. The inflection spec comes from the |deriv=, -- |deriv2=, etc. params in the inflection template if specified and `is_deriv` is given; otherwise from 1=, 2=, etc. -- If `allow_empty_infl` is given, a missing inflection spec in 1= is allowed and converted to an empty string; -- otherwise, an error is signaled. function export.find_inflection(lemma, infltemp, allow_empty_infl, is_deriv, inflid) local title = new_title(lemma) if title then local content = title:getContent() if content then local icelandic = get_section(content, "အာက်သလာန်") if icelandic then local infl_sets_by_id = {} local infl_sets_without_id = {} local ordered_seen_ids = {} for template in find_templates(icelandic) do if template:get_name() == infltemp then local args = template:get_arguments() local infls = {} if is_deriv and args.deriv then local i = 1 while true do local deriv_param = "deriv" .. (i == 1 and "" or tostring(i)) if args[deriv_param] then table.insert(infls, {infl = args[deriv_param]}) i = i + 1 else break end end elseif not args[1] and not allow_empty_infl then return ("For Icelandic base lemma '[[%s]]', saw no inflection spec in 1="):format(lemma) else local i = 1 while true do if args[i] or (i == 1 and allow_empty_infl) then table.insert(infls, {infl = args[i] or ""}) i = i + 1 else break end end end local infl_set = {infls = infls, pos = args.pos} if args.id then if infl_sets_by_id[args.id] then return ("For Icelandic base lemma '[[%s]]', saw id='%s' twice"):format(args.id) end infl_sets_by_id[args.id] = infl_set insert_if_not(ordered_seen_ids, args.id) else table.insert(infl_sets_without_id, infl_set) end end end local function concat_ordered_seen_ids() local quoted_seen_ids = {} for _, seen_id in ipairs(ordered_seen_ids) do table.insert(quoted_seen_ids, "'" .. seen_id .. "'") end return serial_comma_join(quoted_seen_ids, {dontTag = true}) end if ordered_seen_ids[1] and infl_sets_without_id[1] then return ("For Icelandic base lemma '[[%s]]', saw %s [[Template:%s]]%s with id=%s " .. "as well as %s [[Template:%s]]%s without ID; this is not allowed; with multiple " .. "[[Template:%s]] calls, all must have id= params"):format(lemma, #ordered_seen_ids, infltemp, ordered_seen_ids[2] and "'s" or "",concat_ordered_seen_ids(), #infl_sets_without_id, infltemp, infl_sets_without_id[2] and "'s" or "", infltemp) elseif not ordered_seen_ids[1] and not infl_sets_without_id[1] then return ("For Icelandic base lemma '[[%s]]', found Icelandic section but couldn't find " .. "any calls to [[Template:%s]]"):format(lemma, infltemp) elseif #infl_sets_without_id > 1 then return ("For Icelandic base lemma '[[%s]]', found %s [[Template:%s]]'s without " .. "ID's; this is not allowed; with multiple [[Template:%s]] calls, all must have id= params"): format(lemma, #infl_sets_without_id, infltemp, infltemp) elseif inflid then if infl_sets_by_id[inflid] then return infl_sets_by_id[inflid] elseif ordered_seen_ids[1] then return ("For Icelandic base lemma '[[%s]]', found Icelandic section but couldn't find " .. "any inflections matching ID '%s'; instead found ID's %s; you may have misspelled " .. "the ID"):format(lemma, inflid, concat_ordered_seen_ids()) else return ("For Icelandic base lemma '[[%s]]', found Icelandic section with a single " .. "[[Template:%s]] without ID, but ID requirement '%s' specified; consider " .. "removing the ID requirement"):format(lemma, infltemp, inflid) end elseif infl_sets_without_id[1] then -- only one {{is-ninfl}}, and it doesn't have an id=; return it return infl_sets_without_id[1] elseif ordered_seen_ids[2] then return ("For Icelandic base lemma '[[%s]]', saw %s [[Template:%s]]'s with id=%s " .. "but with a request to return the inflection without ID; consider adding an ID " .. "restriction to the scrape request, e.g. '@@:%s' for self-scraping or '@%s:%s' for " .. "scraping from another page"):format(lemma, #ordered_seen_ids, infltemp, concat_ordered_seen_ids(), ordered_seen_ids[1], usub(lemma, 1, 1), ordered_seen_ids[1]) else return ("For Icelandic base lemma '[[%s]]', found Icelandic section with a single " .. "[[Template:%s]] with id=%s, but the scrape request didn't specify an ID; " .. "consider removing the id= param from the [[Template:%s]] call unless you " .. "expect to add more such calls to the page in the future (in which case add the ID " .. "to the scrape request, e.g. '@@:%s' for self-scraping or '@%s:%s' for scraping from " .. "another page"):format(lemma, infltemp, concat_ordered_seen_ids(), infltemp, ordered_seen_ids[1], usub(lemma, 1, 1), ordered_seen_ids[1]) end else return ("For Icelandic base lemma '[[%s]]', page exists but has no Icelandic section"):format(lemma) end else return ("For Icelandic base lemma '[[%s]]', couldn't fetch contents for page; page may not exist"): format(lemma) end else return ("Bad Icelandic base lemma '[[%s]]'; couldn't create title object"):format(lemma) end end -- Find and return the prefix, base lemma and inflection spec for a scraped lemma given `lemma` (the lemma with an `@l` -- or similar indicator spec), the scraping spec (e.g. "l", i.e. the portion after the @ sign), and optionally an -- `inflid` restriction. The base lemma is the lemma whose inflection was scraped, and `prefix` is the portion of the -- lemma before the base lemma (which must be a suffix of the lemma). For example, if `lemma` is [[ljósabekkur]] -- "sunbed, tanning bed" and `scrape_spec` is "@b", the base lemma will be [[bekkur]] "bench" and the prefix will be -- "ljósa". The inflection spec returned will be either an object containing a field `infl` containing the scraped -- inflection spec, or a string indicating an error to display. function export.find_scraped_infl(data) local lemma, scrape_spec, scrape_is_suffix, scrape_is_uppercase, infltemp, allow_empty_infl, inflid = data.lemma, data.scrape_spec, data.scrape_is_suffix, data.scrape_is_uppercase, data.infltemp, data.allow_empty_infl, data.inflid local prefix, base_lemma if scrape_spec == "@" then -- @@ specified base_lemma = lemma prefix = "" else local lemma_minus_ending, final_ending = data.parse_off_ending(lemma) prefix, base_lemma = rmatch(lemma_minus_ending, "^(.*)(" .. pattern_escape(scrape_spec) .. ".-)$") if not prefix then error(("Can't determine base lemma to scrape given lemma '%s' and scraping spec '@%s'; scraping spec not " .. "found in lemma"):format(lemma, scrape_spec)) end base_lemma = base_lemma .. final_ending end if scrape_is_uppercase then local base_first, base_rest = rmatch(base_lemma, "^(.)(.*)$") if not base_first then error(("Internal error: Something wrong, couldn't match a single character in %s"):format(dump(base_lemma))) end base_lemma = uupper(base_first) .. base_rest end if scrape_is_suffix then base_lemma = "-" .. base_lemma end local infl = export.find_inflection(base_lemma, infltemp, allow_empty_infl, "is deriv", inflid) local errmsg = nil if type(infl) == "table" then infl = infl.infls if infl[2] then errmsg = ("For Icelandic base lemma '[[%s]]', saw %s inflection specs; currently, can only handle one"): format(base_lemma, #infl) else infl = infl[1] local argspec = infl.infl if argspec:find("<", nil, true) then errmsg = ("For Icelandic base lemma '[[%s]]', saw explicit angle bracket spec in inflection, likely " .. "indicating a multiword inflection; can't handle yet: %s"):format(lemma, argspec) elseif argspec:find("((", nil, true) then errmsg = ("For Icelandic base lemma '[[%s]]', saw alternant specs; can't handle yet: %s"): format(lemma, argspec) end end if errmsg then infl = errmsg end end return prefix, base_lemma, infl end return export owsoirzargtka368bseagcyxe4pdrpp မဝ်ဂျူ:is-noun 828 119774 393753 380853 2026-05-01T17:28:28Z 咽頭べさ 33 393753 Scribunto text/plain local export = {} --[=[ Authorship: Ben Wing <benwing2> ]=] --[=[ TERMINOLOGY: -- "slot" = A particular combination of case/number. Example slot names for nouns are "acc_s" (accusative singular) and "gen_p" (genitive plural). Each slot is filled with zero or more forms. -- "form" = The declined Icelandic form representing the value of a given slot. -- "lemma" = The dictionary form of a given Icelandic term. Generally the nominative singular, or nominative plural of plural-only nouns, but may occasionally be another form if the nominative is missing. ]=] --[=[ FIXME: 1. Support 'plstem' overrides. [DONE] 2. Support definite lemmas such as [[Bandaríkin]] "the United States". [DONE] 3. Support adjectivally-declined terms. [DONE PARTIALLY] 4. Support @ for built-in irregular lemmas. [DONE; SINCE REPLACED WITH SCRAPING SPECS] 5. Somehow if the user specifies v-infix, it should prevent default unumut from happening in strong feminines. [DONE] 6. Def acc pl should ignore -u ending in indef acc pl. [DONE] 7. Footnotes on omitted forms should be possible. 8. Remove setting of override on pl when processing plural-only terms in synthesize_singular_lemma(); interferes with decllemma in [[dyr]]. But then need to fix handling of masculine accusative plural. [DONE] 9. Rationalize conventions used in u-mutation types. [DONE] 10. Compute defaulted number and definiteness early so it's usable when merging built-in and user-specified specs. [DONE] 11. Support multiple declension specs. [DONE] 12. Support dark mode. [DONE] 13. Support scraping declension specs. [DONE] 14. Support @-d etc. for suffix scraping. [DONE] 15. Include scraped base nouns in title annotation. [DONE] 16. Support @@ for self-scraping. [DONE IN [[Module:gmq-headword]]] 17. Support scraping multiple declension specs; e.g. [[fræði]] is declared with 'n.pl|f.sg' and [[hljómfræði]] would like to use '@f' but you get an error. ]=] local lang = require("Module:languages").getByCode("is") local require_when_needed = require("Module:require when needed") local m_table = require("Module:table") local m_links = require("Module:links") local m_string_utilities = require("Module:string utilities") local iut = require("Module:inflection utilities") local put = require("Module:parse utilities") local m_para = require("Module:parameters") local com = require("Module:is-common") local m_is_adjective = require_when_needed("Module:is-adjective") local en_utilities_module = "Module:en-utilities" local u = mw.ustring.char local rsplit = mw.text.split local rfind = mw.ustring.find local rmatch = mw.ustring.match local rsubn = mw.ustring.gsub local ulen = mw.ustring.len local usub = mw.ustring.sub local uupper = mw.ustring.upper local ulower = mw.ustring.lower local dump = mw.dumpObject local force_cat = false -- set to true to make categories appear in non-mainspace pages, for testing local SUB_ESCAPED_PERIOD = u(0xFFF0) local SUB_ESCAPED_COMMA = u(0xFFF1) -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- version of rsubn() that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end local function track(track_id) require("Module:debug/track")("is-noun/" .. track_id) return true end local potential_lemma_slots = { "ind_nom_s", "ind_nom_p", "def_nom_s", "def_nom_p", "ind_acc_s", -- for [[sig]] } local cases = { "nom", "acc", "dat", "gen", } local case_set = m_table.listToSet(cases) local overridable_stems = { "stem", "vstem", "plstem", "plvstem", "imutval", } local overridable_stem_set = m_table.listToSet(overridable_stems) local control_specs = { "umut", "imut", "unumut", "unimut", "con", "defcon", "j", "v", } local control_spec_set = m_table.listToSet(control_specs) local clitic_articles = { m = { nom_s = "inn", acc_s = "inn", dat_s = "num", gen_s = "ins", nom_p = "nir", acc_p = "na", dat_p = "num", gen_p = "nna", }, f = { nom_s = "in", acc_s = "ina", dat_s = "inni", gen_s = "innar", nom_p = "nar", acc_p = "nar", dat_p = "num", gen_p = "nna", }, n = { nom_s = "ið", acc_s = "ið", dat_s = "nu", gen_s = "ins", nom_p = "in", acc_p = "in", dat_p = "num", gen_p = "nna", }, } local gender_code_to_desc = { m = "masculine", f = "feminine", n = "neuter", none = nil, } local number_code_to_desc = { sg = "singular", pl = "plural", both = "both numbers", none = nil, } local definiteness_code_to_desc = { indef = "indefinite-only", def = "definite-only", bothdef = "indefinite and definite", none = nil, } local function get_noun_slots(alternant_multiword_spec) local noun_slots_list = {} for _, case in ipairs(cases) do for _, num in ipairs { "s", "p" } do for _, def in ipairs { "ind", "def" } do local slot = ("%s_%s_%s"):format(def, case, num) local accel = ("%s|%s"):format(def == "ind" and "indef" or def, case) if alternant_multiword_spec.actual_number == "both" then accel = accel .. "|" .. num end table.insert(noun_slots_list, { slot, accel }) end end end for _, potential_lemma_slot in ipairs(potential_lemma_slots) do table.insert(noun_slots_list, { potential_lemma_slot .. "_linked", "-" }) end return noun_slots_list end local function generate_list_of_possibilities_for_err(list) local quoted_list = {} for _, item in pairs(list) do if item == "" then item = "<nowiki />" end table.insert(quoted_list, "'" .. item .. "'") end table.sort(quoted_list) return mw.text.listToText(quoted_list) end local function skip_slot(number, definiteness, slot) return number == "sg" and slot:find("_p$") or number == "pl" and slot:find("_s$") or definiteness == "def" and slot:find("^ind_") or (definiteness == "indef" or definiteness == "none") and slot:find("^def_") end --[=[ Create an empty `base` object for holding the result of parsing and later the generated forms. The object is of the form { -- Original lemma as directly given by the user or taken from the pagename. orig_lemma = "ORIGINAL-LEMMA", -- Same as `orig_lemma` but with links removed. orig_lemma_no_links = "ORIGINAL-LEMMA-NO-LINKS", -- Originally the same as `orig_lemma_no_links`, but if the term is a plural-only noun, this will be the corresponding -- singular lemma, and if the term is an adjective form, this will be the corresponding lemma (strong nominative -- masculine singular form). lemma = "LEMMA", -- Generated per-slot forms. After calling `inflect_multiword_or_alternant_multiword_spec`, the forms will be filled -- in with the format as given below, where the value of each slot is a form object. After calling `show_forms`, the -- value of each slot will be a formatted string listing all of the forms of that slot, or "—" if there are none. forms = { SLOT = { { form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, }, ... }, ... }, -- Specs for control groups as specified by the user. CONTROL_GROUP is as below and CONTROL_SPEC is -- {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, defaulted = BOOLEAN}, where FORM is as specified -- by the user (e.g. "uUmut", "-unumut") or set as a default by the code (in which case `defaulted` will be set to -- true for control groups "umut" and "unumut"). The control groups are as follows: -- * umut (u-mutation); -- * imut (i-mutation); -- * unumut (reverse u-mutation); -- * unimut (reverse i-mutation); -- * con (stem contraction before vowel-initial endings); -- * defcon (stem contraction before vowel-initial definite clitics when the ending itself is null); -- * j (j-infix before vowel-initial endings not beginning with an i); -- * v (v-infix before vowel-initial endings). CONTROL_GROUP = { CONTROL_SPEC, CONTROL_SPEC, ... }, -- Property sets containing computed stems, one per each combination of control group values. Described in more detail -- below. prop_sets = { PROPSET, -- see below ..., }, -- Per-slot overrides, which override forms generated by the auto-determined or specified declension pattern. SLOT is -- the actual name of the slot, normally without the definiteness prefix, such as "dat_s" (NOT the slot name as -- specified by the user, which would be just "dat" for "dat_s") and OVERRIDE is of the form -- {indef = {FORMOBJ, FORMOBJ, ...}, def = nil or false or {FORMOBJ, FORMOBJ, ...}}, where FORMOBJ is of the form -- {form = FORM, footnotes = FOOTNOTES} as in the `forms` table ("-" means to suppress the slot entirely and is -- signaled by "--" as the user-specified form value; normally FORM values are endings, but a value preceded by ! -- means it's a full form rather than an ending; in such forms you can use # to indicate the lemma and ## to indicate -- the lemma minus -ur or -r, as with stems); `indef` means the override(s) of the indefinite variant of the slot and -- is specified by the user before a slash; `def` means the override(s) of the definite variant of the slot and come -- after a slash, and `false` for either means that the user left the value before or after the slash completely -- blank, meaning not to override the indefinite or definite forms. Sometimes the slot itself has def_ in it; this -- happens when the user preceded the slot spec by 'def', e.g. 'defdat' or 'defgenpl'. overrides = { SLOT = OVERRIDE, SLOT = OVERRIDE, ... }, -- Overrides for the genitive singular, specified after a comma after the gender. OVERRIDE is in the same format as -- above. gens = nil or OVERRIDE, -- Overrides for the nominative and accusative plural, specified after a comma after the gender. OVERRIDE is in the -- same format as above. The actual values given are for the nominative plural, and the accusative plural is derived -- automatically from these values. pls = nil or OVERRIDE, -- "sg", "pl", "both" or "none" (for certain pronouns); may be missing and if so is defaulted number = "NUMBER", -- "m", "f", "n" or "none" (for certain pronouns); always specified by the user gender = "GENDER", -- "def", "indef", "bothdef" or "none" (for pronouns); may be missing and if so is defaulted definiteness = "DEFINITENESS", -- decline like the specified lemma decllemma = nil or "DECLLEMMA", -- decline like the specified gender declgender = nil or "DECLGENDER", -- decline like the specified number declnumber = nil or "DECLNUMBER", -- override the stem; may have # (= lemma) or ## (= lemma minus -ur or -r) stem = nil or "STEM", -- override the stem used before vowel-initial endings; same format as `stem` vstem = nil or "STEM", -- override the plural stem; same format as `stem` plstem = nil or "STEM", -- override the plural stem used before vowel-initial endings; same format as `stem` plvstem = nil or "STEM", -- decline like an adjective; will be present if the user gave a spec starting with 'adj' adjspec = { -- User explicitly specified the lemma using a colon + lemma. lemma = nil or LEMMA -- User gave a one-part or two-part substitution spec such as 'tvöfalt<adj/dur>' or 'ryðfrítt<adj/tt/r>'. subspec = nil or { from = nil or FROM, to = TO, }, }, -- misc Boolean properties: -- * "proper" (a lowercase noun that behaves like a proper noun, i.e. defaults to no plural or definite forms); -- * "common" (a capitalized noun that behaves like a common noun, i.e. defaults to plural and definite forms); -- * "dem" (a demonym, i.e. a capitalized noun such as [[Svisslendingur]] "Swiss person" that behaves like a common -- noun; currently behaves like "common"); -- * "builtin" (for built-in terms such as pronouns); -- * "indecl" (noun is indeclinable); -- * "decl?" (declension is unknown); -- * "iending" (a definite-only noun whose lemma ends in -i, which is elided before a definite clitic beginning with -- i-); -- * "rstem" (an r-stem like [[bróðir]] "brother" or [[dóttir]] "daughter"); -- * "já" (a neuter in -é whose stem alternates with -já, such as [[tré]] "tree" and [[hné]]/[[kné]] "knee"); -- * "weak" (the noun should decline like an ordinary weak noun; used in the declension of [[fjandi]] to disable the -- special -ndi declension); -- * "linkasis" (when linking definite-only and plural-only lemmas in the headword, link as-is instead of -- linking the singular indefinite version); props = { PROP = true, PROP = true, ... }, -- Alternant-level footnotes, specified using `.[footnote]`, i.e. a footnote by itself. footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- ADDNOTE_SPEC is {slot_specs = {"SPEC", "SPEC", ...}, footnotes = {"FOOTNOTE", "FOOTNOTE", ...}}; SPEC is a Lua -- pattern matching slots (anchored on both sides) and FOOTNOTE is a footnote to add to those slots. addnote_specs = { ADDNOTE_SPEC, ADDNOTE_SPEC, ... }, } There is one PROPSET (property set) for each combination of control specs; in the lower limit, there is a single property set. There may be more than one property set e.g. if the user specified 'umut,uUmut' or '-j,j' or '-imut,imut' or some combination of these. The properties in a given property set specify the values themselves of each control group, as well as stems (derived from the control specs) that are used to construct the various forms and populate the slots in `forms` with these values. The information found in the property sets cannot be stored in `base` because it depends on a particular combination of control specs, of which there may be more than one (see above). The decline_noun() function iterates over all property sets and calls the appropriate declension function on each one in turn, which adds forms to each slot in `base.forms`, automatically deduplicating. The properties in each property set are: * Control specs: These are copied from the control specs at the base level. The key is one of the possible control groups ("umut", "imut", "con", etc.), but the value is a single form object {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}}. These are set by expand_property_sets(). * Stems (each stem is either a string or a form object; stems in general may be missing, i.e. nil, unless otherwise specified, and default to more general variants): ** `stem`: The basic stem. Always set. May be overridden by more specific variants. ** `nonvstem`: The stem used when the ending is null or starts with a consonant, unless overridden by a more specific variant. Defaults to `stem`. Not currently used, but could be if e.g. a user stem override `nonvstem:...` were supported. ** `umut_nonvstem`: The stem used when the ending is null or starts with a consonant and u-mutation is in effect, unless overridden by a more specific variant. Defaults to `nonvstem`. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `nonvstem` is missing, because there is no generic `umut_stem`.) ** `imut_nonvstem`: The stem used when the ending is null or starts with a consonant and i-mutation is in effect. If i-mutation is in effect, this should always be specified (otherwise an internal error will occur); hence it has no default. Note that i-mutation is only in effect when either (a) `imut` or `unimut` was specified; (b) a user-specified override is given that begins with a single ^ (indicating i-mutation); or (c) a declension type is in effect that contains default endings beginning with a single ^ (examples are `f-long-vowel` for lemmas in -ó and `f-long-umlaut-vowel-r`). Note also that this will be present even if `nonvstem` is missing, because there is no generic `imut_stem`. ** `vstem`: The stem used when the ending starts with a vowel, unless overridden by a more specific variant. Defaults to `stem`. Will be specified when contraction is in effect or the user specified `vstem:...`. ** `umut_vstem`: The stem(s) used when the ending starts with a vowel and u-mutation is in effect. Defaults to `vstem`. Note that u-mutation applies to the contracted stem if both u-mutation and contraction are in effect. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `vstem` is missing, because there is no generic `umut_stem`.) ** `imut_vstem`: The stem(s) used when the ending starts with a vowel and i-mutation is in effect. If i-mutation is in effect, this should always be specified (otherwise an internal error will occur); hence it has no default. Note that i-mutation applies to the contracted stem if both i-mutation and contraction are in effect. See `imut_nonvstem` for comments on when this stem will be present. ** `null_defvstem`: The stem(s) used when the ending is null and is followed by a definite ending that begins with a vowel, unless overridden by a more specific variant. Defaults to `nonvstem`. This is normally set when `defcon` is specified. ** `umut_null_defvstem`: The stem(s) used when the ending is null and is followed by a definite ending that begins with a vowel, and u-mutation is in effect. Defaults to `null_defvstem`. This is normally set when `defcon` is specified and u-mutation is needed, as in the nom/acc pl of neuter [[mastur]] "mast". Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. ** `pl_stem`: The basic stem used for plural inflections. Only set when `plstem:...` is specified by the user. If this is set, the alternative plural-specific stem variants are used, where each of the above stems has a plural-specific counterpart, and the identical algorithms and fallbacks are used to determine the correct stem. ** `pl_nonvstem`, `pl_umut_nonvstem`, `pl_imut_nonvstem`, `pl_vstem`, `pl_umut_vstem`, `pl_imut_vstem`, `pl_null_defvstem`, `pl_umut_null_defvstem`: Plural-specific counterparts of the above stems. See the comment under `pl_stem` for when these are used. * Other properties: ** `jinfix`: If present, either "" or "j". Inserted between the stem and ending when the ending begins with a vowel other than "i". Note that j-infixes don't apply to ending overrides. ** `jinfix_footnotes`: Footnotes to attach to forms where j-infixing is possible (even if it's not present). ** `vinfix`: If present, either "" or "v". Inserted between the stem and ending when the ending begins with a vowel. Note that v-infixes don't apply to ending overrides. `jinfix` and `vinfix` cannot both be specified. ** `vinfix_footnotes`: Footnotes to attach to forms where v-infixing is possible (even if it's not present). ** `imut`: If specified (i.e. not nil), either true or false. If specified, there may be associated footnotes in `imut_footnotes`. If true, i-mutation and associated footnotes are in effect before endings starting with "i". If false, associated footnotes still apply before endings starting with "i". Note that i-mutation is also in effect if the ending has ^ prepended, but the associated footnotes don't apply here. ** `imut_footnotes`: See `imut`. ** `unumut`: If specified (i.e. not nil), the type of un-u-mutation requested (either "unumut" or a variant, or the negation of the same using "-unumut" or a variant for no un-u-mutation; "unumut" and variants differ in which slots any associated footnote are placed). If specified, there may be associated footnotes in `unumut_footnotes`. If "unumut" itself, u-mutation is in effect *except* before an ending that starts with an "a" or "i" (unless i-mutation is in effect, which takes precedence). If any other variant, the rules are different: when masculine, u-mutation is in effect *except* in the gen sg and pl (examples are [[söfnuður]] "congregation" and [[mánuður]] "month"); when feminine, u-mutation is in effect except in the nom/acc/gen pl (examples are [[verslun]] "trade, business; store, shop" and [[kvörtun]] "complaint"). When u-mutation is *not* in effect, and i-mutation is also not in effect, the associated footnotes in `unumut_footnotes` apply. If `unumut` is "-unumut" or a variant, there is no un-u-mutation (i.e. there are no special u-mutated stems, and the basic stems, which typically have u-mutation built into them, apply throughout), but the associated footnotes in `unumut_footnotes` still apply in the same circumstances where they would apply if `unumut` were the non-negated counterpart. ** `unumut_footnotes`: See `unumut`. ** `unimut`: If specified (i.e. not nil), either true or false. If specified, there may be associated footnotes in `unimut_footnotes`. If true, i-mutation is in effect *except* in certain case/num combinations that depend on the gender. Specifically: (1) for masculine nouns e.g. [[ketill]] "kettle" and proper names [[Egill]] and [[Ketill]], i-mutation does not apply in the dat sg and throughout the plural; (2) for feminine nouns e.g. [[kýr]] "cow", [[sýr]] "sow (archaic)" and [[ær]] "ewe", i-mutation does not apply in the acc and dat sg and in the dat and gen pl. Cf. also feminine pl-only [[hættur]] "bedtime, quitting time" and [[mætur]] "appreciation, liking", which use 'unimut' to get e.g. dat pl [[háttum]] and gen pl [[hátta]]; but these are handled by synthesizing a singular without i-mutation in the lemma. Very similar are neuter pl [[læti]] "behavior, demeanor" and [[ólæti]] "noise, racket", with e.g. dat pl [[látum]] and gen pl [[láta]], which are handled in the same way. When i-mutation is *not* in effect, the associated footnotes in `unimut_footnotes` apply. If false, the associated footnotes in `unimut_footnotes` still apply in the same circumstances where they would apply if `unimut` where true. ** `unimut_footnotes`: See `unimut`. ]=] local function create_base() return { forms = {}, overrides = {}, props = {}, addnote_specs = {}, } end -- Return true if `stem` refers to a proper noun (first character is uppercase, second character is lowercase). local function is_proper_noun(base, stem) if base.props.common or base.props.dem then return false end if base.props.proper then return true end if base.source_template == "is-noun" then return false end if base.source_template == "is-proper noun" then return true end local first_letter = usub(stem, 1, 1) local second_letter = usub(stem, 2, 2) return ulower(first_letter) ~= first_letter and ((not second_letter or second_letter == "") or uupper(second_letter) ~= second_letter) end --[=[ Basic function to combine stem(s) and other properties with ending(s) and insert the result into the appropriate slot. `base` is the object describing all the properties of the word being inflected for a single alternant (in case there are multiple alternants specified using `((...))`). `slot_prefix` is either "ind_" or "def_" and is prefixed to the slot value in `slot` to get the actual slot to add the resulting forms to. (`slot_prefix` is separated out because the code below frequently needs to conditionalize on the value of `slot` and should not have to worry about the definite and indefinite slot variants). `props` is a property set object containing computed stems and other information (such as whether i-mutation is active) about a particular combination of control specs. See the comment above create_base() for more information. The information found in `props` cannot be stored in `base` because there may be more than one set of such properties per `base` (e.g. if the user specified 'umut,uUmut' or '-j,j' or '-imut,imut' or some combination of these; in such a case, the caller will iterate over all possible combinations, and ultimately invoke add() multiple times, one per combination). `endings` is the ending or endings added to the appropriate stem (after any j or v infix) to get the form(s) to add to the slot. Its value can be a single string, a list of strings, or a list of form objects (i.e. in general list form). `clitics` is the clitic or clitics to add after the endings to form the actual form value inserted into definite slots; it should be nil for indefinite slots. Its format is the same as for `endings`. `ending_override`, if true, indicates that the ending(s) supplied in `endings` come from a user-specified override, and hence j and v infixes should not be added as they are already included in the override if needed. `endings_are_full`, if true, indicates that the supplied ending(s) are actually full words and a null stem should be used. ]=] local function add_slotval(base, slot_prefix, slot, props, endings, clitics, ending_override, endings_are_full) if not endings then return end -- Call skip_slot() based on the declined number and definiteness; if the actual number is different, we correct -- this in decline_noun() at the end. if skip_slot(base.number, base.definiteness, slot) then return end if not clitics then clitics = { "" } elseif type(clitics) == "string" then clitics = { clitics } end if type(endings) == "string" then endings = { endings } end -- Loop over each ending and clitic. for _, endingobj in ipairs(endings) do for _, cliticobj in ipairs(clitics) do -- Do the following inside of the innermost loop even though it does not depend on the value of `cliticobj`, -- because that way we are free to mutate `ending` below. local ending, ending_footnotes if type(endingobj) == "string" then ending = endingobj else ending = endingobj.form ending_footnotes = endingobj.footnotes end -- Ending of "-" means the user used -- to indicate there should be no form here. if ending == "-" then return end local function interr(msg) error(("Internal error: For lemma '%s', slot '%s%s', ending '%s', %s: %s"):format(base.lemma, slot_prefix, slot, ending, msg, dump(props))) end local clitic, clitic_footnotes if type(cliticobj) == "string" then clitic = cliticobj else clitic = cliticobj.form clitic_footnotes = cliticobj.footnotes end -- Compute whether i-mutation or u-mutation is in effect, and compute the "mutation footnotes", which are -- footnotes attached to a mutation-related indicator and which may need to be added even if no mutation is -- in effect (specifically when dealing with an ending that would trigger a mutation if in effect). AFAIK -- you cannot have both mutations in effect at once, and i-mutation overrides u-mutation if both would be in -- effect. -- Single ^ at the beginning of an ending indicates that the i-mutated version of the stem should apply, and -- double ^^ at the beginning indicates that the u-mutated version should apply. local explicit_imut, explicit_umut -- % at the end of a definite ending indicates that the following i- of the clitic should drop, as with -- neuter [[tré]], [[kné]], [[fé]]. There's no counterpart to force irregular inclusion of an i- that would -- normally drop; just include it in the ending (as with acc/dat sg of [[eygló]] "eyeball???" and [[sígó]] -- "cig"). local clitic_i_drops ending, explicit_umut = rsubb(ending, "^%^%^", "") if not explicit_umut then ending, explicit_imut = rsubb(ending, "^%^", "") end ending, clitic_i_drops = rsubb(ending, "%%$", "") local is_vowel_ending = rfind(ending, "^" .. com.vowel_c) local is_vowel_clitic = rfind(clitic, "^" .. com.vowel_c) local mut_in_effect, mut_not_in_effect, mut_footnotes local ending_in_a = not not ending:find("^a") local ending_in_i = not not ending:find("^i") local ending_in_u = not not ending:find("^u") if props.unimut ~= nil and props.unumut ~= nil then interr("Cannot have both 'unimut' and 'unumut' in effect at the same time") end if props.unimut ~= nil and props.imut ~= nil then interr("Cannot have both 'unimut' and 'imut' in effect at the same time") end if props.unumut ~= nil and props.umut ~= nil then interr("Cannot have both 'unumut' and 'umut' in effect at the same time") end if explicit_imut then mut_in_effect = "i" elseif explicit_umut then mut_in_effect = "u" else if props.unimut ~= nil then local is_unimut_slot if base.gender == "m" then is_unimut_slot = slot == "dat_s" or slot:find("_p") elseif base.gender == "f" then is_unimut_slot = slot == "acc_s" or slot == "dat_s" or slot == "dat_p" or slot == "gen_p" else interr( "'unimut' shouldn't be specified with neuter nouns; don't know what slots would be affected; neuter pluralia tantum nouns using 'unimut' should have synthesized a singular without i-mutation") end if is_unimut_slot then mut_not_in_effect = "i" mut_footnotes = props.unimut_footnotes elseif props.unimut then mut_in_effect = "i" end elseif props.imut ~= nil then if ending_in_i then if props.imut then mut_in_effect = "i" mut_footnotes = props.imut_footnotes elseif props.imut == false then mut_not_in_effect = "i" mut_footnotes = props.imut_footnotes end end end if props.unumut ~= nil then local is_unumut_slot if props.unumut == "unumut" or props.unumut == "-unumut" then is_unumut_slot = ending_in_a or ending_in_i elseif base.gender == "m" then is_unumut_slot = slot == "gen_s" or slot == "gen_p" elseif base.gender == "f" then is_unumut_slot = slot == "nom_p" or slot == "acc_p" or slot == "gen_p" else interr( "'unumut' and variants shouldn't be specified with neuter nouns; don't know what slots would be affected; neuter pluralia tantum nouns using 'unumut'and variants should have synthesized a singular without u-mutation") end if not mut_in_effect and not mut_not_in_effect then -- Do nothing if mut_in_effect or mut_not_in_effect because i-mut takes precedence over u-mut; -- FIXME: I hope this is correct in all cases. if is_unumut_slot then mut_not_in_effect = "u" mut_footnotes = props.unumut_footnotes elseif props.unumut then mut_in_effect = "u" end end end if ending_in_u and not mut_in_effect then mut_in_effect = "u" -- umut and uUmut footnotes are incorporated into the appropriate umut_* stems end end local ending_was_asterisk = ending == "*" -- Now compute the appropriate stem to which the ending and clitic are added. `prefix` is either an empty -- string or "pl_" and selects the set of stems to consider when computing the stem in effect. See the -- comment above for `pl_stem`. local function compute_stem_in_effect(prefix) local stem_in_effect if mut_in_effect == "i" then -- NOTE: It appears that imut and defcon never co-occur; otherwise we'd need to flesh out the set of -- stems to include i-mutation versions of defcon stems, similar to what we do for u-mutation. if is_vowel_ending then if not props[prefix .. "imut_vstem"] then interr(("i-mutation in effect and ending begins with a vowel but '.%simut_vstem' not defined") : format(prefix)) end stem_in_effect = props[prefix .. "imut_vstem"] else if not props[prefix .. "imut_nonvstem"] then interr(("i-mutation in effect and ending does not begin with a vowel but '.%simut_nonvstem' not defined") : format(prefix)) end stem_in_effect = props[prefix .. "imut_nonvstem"] end else -- Careful with the following logic; it is written carefully and should not be changed without a -- thorough understanding of its functioning. local has_umut = mut_in_effect == "u" -- First, if the ending is null (or "*", which eventually turns into a null ending; see below), and -- we have a vowel-initial definite-article clitic, use the special 'defcon' stem if available. if (ending == "" or ending == "*") and is_vowel_clitic then stem_in_effect = has_umut and props[prefix .. "umut_null_defvstem"] or props[prefix .. "null_defvstem"] end -- If the stem is still unset, then use the vowel or non-vowel stem if available. When u-mutation is -- active, we first check for the u-mutated version of the vowel or non-vowel stem before falling -- back to the regular vowel or non-vowel stem. Note that an expression like `has_umut and -- props[prefix .. "umut_vstem"] or props[prefix .. "vstem"]` here is NOT equivalent to an if-else -- or ternary operator expression because if `has_umut` is true and `umut_vstem` is missing, it will -- still fall back to `vstem` (which is what we want). if not stem_in_effect then if is_vowel_ending then stem_in_effect = has_umut and props[prefix .. "umut_vstem"] or props[prefix .. "vstem"] else stem_in_effect = has_umut and props[prefix .. "umut_nonvstem"] or props[prefix .. "nonvstem"] end end -- Finally, fall back to the basic stem, which is always defined. stem_in_effect = stem_in_effect or props[prefix .. "stem"] end -- If the ending is "*", it means to use the lemma as the form directly (before adding any definite -- clitic) rather than try to construct the form from a stem and ending. We need to do this for the -- lemma slot and especially for the nominative singular, because we don't have the nominative singular -- ending available and it may vary (e.g. it may be -ur, -l, -n, -a, etc. especially in the masculine). -- Not trying to construct the form from stem + ending also avoids complications from the nominative -- singular in -ur, which exceptionally does not trigger u-mutation. However, when 'defcon' is active -- and we're processing a definite form beginning with a vowel (i.e. is_vowel_clitic is set), we can't -- do this, because the form to which the clitic is added is not the lemma but the contracted version. -- As it happens, this works out because in all situations where 'defcon' is active, the nominative -- singular has a null ending. (If this weren't the case, we'd have to change all the declension -- functions to pass in the nominative singular ending in addition to other endings.) An example where -- 'defcon' is active is neuter [[mastur]] "mast" with definite nominative singular [[mastrið]]; here, -- using the lemma would incorrectly produce #[[masturið]]. -- Finally, however, if there is a footnote associated with the computed stem in effect, we need to -- preserve it. if ending == "*" then if not is_vowel_clitic or not props.defcon or props.defcon.form ~= "defcon" then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes end stem_in_effect = iut.combine_form_and_footnotes(base.actual_lemma, stem_in_effect_footnotes) end -- See comment above. When 'defcon' is not in effect, we changed the stem to be the lemma and -- want to use a null ending; otherwise, the ending is always null anyway, so it's safe to set -- it thus. ending = "" end return stem_in_effect end local stem_in_effect = props.pl_stem and slot:find("_p$") and compute_stem_in_effect("pl_") or compute_stem_in_effect("") local infix, infix_footnotes -- Compute the infix (j, v or nothing) that goes between the stem and ending. if not ending_override and is_vowel_ending then if props.vinfix and props.jinfix then interr("Can't have specifications for both '.vinfix' and '.jinfix'; should have been caught above") end if props.vinfix then infix = props.vinfix infix_footnotes = props.vinfix_footnotes elseif props.jinfix and not ending_in_i then infix = props.jinfix infix_footnotes = props.jinfix_footnotes end end -- If base-level footnotes specified, they go before any stem footnotes, so we need to extract any footnotes -- from the stem in effect and insert the base-level footnotes before. In general, we want the footnotes to -- be in the order [base.footnotes, stem.footnotes, mut_footnotes, infix_footnotes, ending.footnotes, -- clitic.footnotes]. if base.footnotes then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes stem_in_effect = stem_in_effect.form end stem_in_effect = iut.combine_form_and_footnotes(stem_in_effect, iut.combine_footnotes(base.footnotes, stem_in_effect_footnotes)) end local ending_is_full ending, ending_is_full = rsubb(ending, "^!", "") local function combine_stem_ending(stem, clitic) if stem == "?" then return "?" end local function drop_clitic_i() clitic = clitic:gsub("^i", "") end -- If we're definite-only and using the actual lemma as the stem, the clitic is already incorporated -- into the stem. if base.definiteness == "def" and ending_was_asterisk then return stem end -- % at the end of a definite ending indicates that the following i- of the clitic should drop; see -- above. if clitic_i_drops then drop_clitic_i() end local stem_with_infix = ending_is_full and "" or stem .. (infix or "") -- Drop final -j- of stem before an ending beginning with a consonant. This happens e.g. in [[kirkja]] -- "church" with genitive plural -na, producing [[kirkna]]. It does not happen with a null ending; cf. -- neuter [[emj]] "cries, shouting" and [[gremj]] "anger, irritation" (the latter not in BÍN). if stem_with_infix:find("j$") and rfind(ending, "^" .. com.cons_c) then stem_with_infix = stem_with_infix:gsub("j$", "") end local stem_with_ending -- An initial s- of the ending drops after a cluster of cons + s (including written <x>). if ending:find("^s") and (stem_with_infix:find("x$") or rfind(stem_with_infix, com.cons_c .. "s$")) then stem_with_ending = stem_with_infix .. ending:gsub("^s", "") else stem_with_ending = stem_with_infix .. ending end if clitic == "" then return stem_with_ending end if slot == "dat_p" then stem_with_ending = stem_with_ending:gsub("m$", "") end if clitic:find("^i.*[aiu]") then -- disyllabic clitics in i- -- in practice, fem acc_s -ina, dat_s -inni, gen_s -innar if rfind(stem_with_ending, com.vowel_c .. "$") then drop_clitic_i() end elseif clitic:find("^i") then -- monosyllabic clitics in i- local ending_for_clitic_dropping = ending_was_asterisk and base.lemma_ending or ending if ending_for_clitic_dropping:find("[aiu]$") then drop_clitic_i() end end return stem_with_ending .. clitic end local combined_footnotes = iut.combine_footnotes( iut.combine_footnotes(mut_footnotes, infix_footnotes), iut.combine_footnotes(ending_footnotes, clitic_footnotes) ) local clitic_with_notes = iut.combine_form_and_footnotes(clitic, combined_footnotes) if not stem_in_effect then interr("stem_in_effect is nil") end iut.add_forms(base.forms, slot_prefix .. slot, stem_in_effect, clitic_with_notes, combine_stem_ending) end end end -- Add the definite and indefinite variants of a slot by combining the appropriate stem in `props` with (optionally) an -- infix in `props` and the endings in `endings`, tacking on the definite article clitic in the definite slot variant. -- This calls the underlying function add_slotval() twice, once for indefinite forms and once for definite forms, and is -- normally called by add_decl() or similar function to add an entire declension. `endings` can be nil (no endings are -- added), a single string, a list of strings, a list of form objects (i.e. in general list form), or a table containing -- fields `indef` and `def` (each of which can be any of the previous formats) to add separate sets of endings for the -- indefinite and definite slot variants. If any of the formats for `endings` is supplied other than the separate -- indefinite/definite table, the supplied set of endings is used for both indefinite and definite slot variants. -- `ending_override` and `endings_are_full` are as in add_slotval(). local function add(base, slot, props, endings, ending_override, endings_are_full) if not endings then return end local indef_endings, def_endings if type(endings) == "table" and (endings.indef or endings.def) then indef_endings = endings.indef def_endings = endings.def else indef_endings = endings def_endings = endings end if indef_endings and base.definiteness ~= "def" then add_slotval(base, "ind_", slot, props, indef_endings, nil, ending_override, endings_are_full) end if def_endings and (base.definiteness ~= "indef" and base.definiteness ~= "none") then local clitic = clitic_articles[base.gender] if not clitic then error(("Internal error: Unrecognized value for base.gender: %s"):format(dump(base.gender))) end clitic = clitic[slot] if not clitic then error(("Internal error: Unrecognized value for `slot` in add(): %s"):format(dump(slot))) end add_slotval(base, "def_", slot, props, def_endings, clitic, ending_override, endings_are_full) end end -- Generate the accusative plural ending from the nominative plural. For feminines and neuters, both are the same. -- For masculines, drop the -r except in -ur. local function acc_p_from_nom_p(base, nom_p) if base.gender == "f" or base.gender == "n" then return nom_p end if not nom_p then return nom_p -- this is correct as `nom_p` could be nil or false and we want to return the same thing end local function form_masc_acc_p(ending) -- Form the masculine accusative by dropping -r unless the form ends in -ur, which is kept. If the ending is *, -- we substitute the entire actual lemma. In that case, if the lemma is definite-only, we have to strip off -- the nominative plural clitic -nir before generating the accusative. We don't add the clitic -na because it -- will be added in add_slotval(). if ending == "*" then ending = "!" .. base.actual_lemma end if base.definiteness == "def" and ending:find("^!") then ending = ending:match("^(.*)nir$") if not ending then error(("Masculine plural definite-only lemma '%s' does not end in expected clitic '-nir'; " .. "don't know how to compute the corresponding accusative plural"):format(base.actual_lemma)) end end -- If the ending is full (begins with !), check the whole thing for -ur at the end. if ending:find("^%^*ur$") or ending:find("^!.*[^Aa]ur$") then -- as-is else ending = ending:gsub("r$", "") end return ending end if type(nom_p) == "string" then return form_masc_acc_p(nom_p) end local acc_p = {} for _, ending in ipairs(nom_p) do if type(ending) == "string" then table.insert(acc_p, form_masc_acc_p(ending)) else table.insert(acc_p, { form = form_masc_acc_p(ending.form), footnotes = ending.footnotes }) end end return acc_p end local function process_one_slot_override(base, slot, spec) -- Call skip_slot() based on the declined number and definiteness; if the actual number is different, we correct -- this in decline_noun() at the end. if skip_slot(base.number, base.definiteness, slot) then error(("Override specified for invalid slot '%s' due to '%s' number restriction and/or '%s' definiteness restriction") :format( slot, base.number, base.definiteness)) end local defslot = slot:find("^def_") if defslot then base.forms[slot] = nil else if spec.indef ~= false then base.forms["ind_" .. slot] = nil end if spec.def ~= false then base.forms["def_" .. slot] = nil end end if defslot then local slot_prefix -- Don't call add(), like below, because it adds both indefinite and definite variants, including definite -- clitics in the latter. Instead, directly call add_slotval(). But we need to separate the slot into slot -- prefix "def_" and the remainder because add_slotval() expects slots to be missing the prefix when -- checking which stem to use (which may depend on the slot). slot_prefix, slot = slot:match("^(def_)(.*)$") for _, props in ipairs(base.prop_sets) do add_slotval(base, slot_prefix, slot, props, spec.def, nil, "ending override") end else local endings if spec.indef ~= nil and spec.def ~= nil then -- This could include `false` as the value of either `spec.indef` or `spec.def` to not touch those slots. -- Note that specifying something like 'dat/i' is allowed and will only override the definite slot, but -- is different from a definite-slot override 'defdatinum' because the latter includes the clitic in it. endings = { indef = spec.indef, def = spec.def, } elseif not spec.indef then error(("Internal error: Unless both `spec.indef` and `spec.def` have non-nil values (i.e. the user included a slash in the override, `spec.indef` must be defined: %s") :dump(spec)) elseif slot == "acc_p" then -- As a special case, don't carry over literary acc_p ending -u to the definite. local def_endings = {} for _, ending in ipairs(spec.indef) do -- If the ending is full (begins with !), check the whole thing for -u at the end. if not ending.form:find("^%^*u$") and not ending.form:find("^!.*[^Aa]u$") then table.insert(def_endings, ending) end end endings = { indef = spec.indef, def = def_endings, } else endings = spec.indef end for _, props in ipairs(base.prop_sets) do add(base, slot, props, endings, "ending override") end end end local function process_slot_overrides(base) if base.gens then process_one_slot_override(base, "gen_s", base.gens) end if base.pls then local spec = base.pls process_one_slot_override(base, "nom_p", spec) local acc_p_spec = { indef = acc_p_from_nom_p(base, spec.indef), def = acc_p_from_nom_p(base, spec.def), } process_one_slot_override(base, "acc_p", acc_p_spec) end for slot, spec in pairs(base.overrides) do process_one_slot_override(base, slot, spec) end end -- Generate the full declension for the term given the endings for each slot. acc_p, dat_p and gen_p can be omitted and -- will be defaulted: dat_p defaults to "um", gen_p defaults to "a", and acc_p defaults to the nom_p except for masculines -- not in -ur, where the -r is dropped. Use `false` as the value of an ending to disable generating any value for that -- slot. local function add_decl_with_nom_sg(base, props, nom_s, acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) add(base, "nom_s", props, nom_s) add(base, "acc_s", props, acc_s) add(base, "dat_s", props, dat_s) add(base, "gen_s", props, gen_s) if base.number == "pl" then -- If this is a plurale tantum noun and we're processing the nominative plural, use the user-specified lemma -- rather than generating the plural from the synthesized singular, which may not match the specified lemma. -- This is both because we don't set a plural override to specify what the plural should look like and because -- of exceptional cases like [[dyr]], which is plural-only and uses 'decllemma:dyrir'. nom_p = "*" end add(base, "nom_p", props, nom_p) -- Generate defaults for acc_p, dat_p, gen_p if nil was specified; but be careful not to do so for false, which -- means to generate no form. if acc_p == nil then acc_p = acc_p_from_nom_p(base, nom_p) end if dat_p == nil then dat_p = "um" end if gen_p == nil then gen_p = "a" end add(base, "acc_p", props, acc_p) add(base, "dat_p", props, dat_p) add(base, "gen_p", props, gen_p) end -- Generate the full declension for the term given the endings for each slot except the nom_s. This is like -- add_decl_with_nom_sg() but takes the nom sg directly from the lemma instead of trying to reconstruct it from a stem, -- which is more correct in the vast majority of circumstances. The * below is a signal to the underlying add() function -- to use the actual lemma (not any stem, and not the value of 'decllemma:' if given) for the nom sg. Note that add() is -- smart enough to ignore this for the definite nom sg when the 'defcon' indicator is given, because in that case the stem -- for the def nom sg is contracted compared with the lemma. (Specifically, it uses the correct contracted stem and a null -- ending; AFAIK all cases of 'defcon' occur with lemmas with a null ending in the nom sg.) local function add_decl(base, props, acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) add_decl_with_nom_sg(base, props, "*", acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) end local function add_sg_decl(base, props, acc_s, dat_s, gen_s) add_decl(base, props, acc_s, dat_s, gen_s, false, false, false, false) end local function add_pl_only_decl(base, props, acc_p, dat_p, gen_p) add_decl(base, props, false, false, false, "*", acc_p, dat_p, gen_p) end -- Table mapping declension types to functions to decline the noun. The function takes two arguments, `base` and -- `props`; the latter specifies the computed stems (vowel vs. non-vowel, singular vs. plural) and whether the noun -- is reducible and/or has vowel alternations in the stem. Most of the specifics of determining which stem to use -- and how to modify it for the given ending are handled in add_decl(); the declension functions just need to generate -- the appropriate endings. local decls = {} decls["indecl"] = function(base, props) add_decl(base, props, "", "", "", "", "", "", "") end decls["decl?"] = function(base, props) add_decl(base, props, "?", "?", "?", "?", "?", "?", "?") end decls["m"] = function(base, props) -- The default dative singular is computed below in determine_default_masc_dat_sg(). local dat = props.default_dat_sg add_decl(base, props, "", dat, "s", "ar") end decls["m-ir"] = function(base, props) add_decl(base, props, "i", "i", "is", "ar") end decls["m-skapur"] = function(base, props) -- Nouns in -skapur; default gen is -ar, default dat is -/-, default num is sg. add_decl(base, props, "", "", "ar", "ar") end decls["m-naður"] = function(base, props) -- Nouns in -naður; default gen is -ar, default dat is dati/i:-, default nom pl is -ir, default num is sg, -- default u-mutation is uUmut. add_decl(base, props, "", { indef = "i", def = { "i", "" } }, "ar", "ir") end decls["m-kell"] = function(base, props) -- Proper nouns in -kell; [[Þorkell]], [[Grímkell]], etc. local alt_dat_s = base.stem:gsub("kel$", "katli") add_decl(base, props, "", { "i", { form = "!" .. alt_dat_s, footnotes = { "[archaic]" } } }, "s", false, false, false, false) end decls["m-ó"] = function(base, props) -- abbreviations of school names generally have null genitive: [[Kennó]] from [[Kennaraskóla]] "Teachers' College"), -- [[Astró]], [[Borgó]] (from [[Borgarholtsskóli]]), [[Bríó]], [[Foldó]] (from [[Foldaskóli]]), [[Hafró]] (from -- [[Hafrannsóknastofnun]] "Marine Research Institute" (of Norway), [[Hagó]] (from [[Hagaskóli]]), [[Húsó]], -- [[Kvennó]] (from [[Kvennaskóli]]), [[Meló]] (from [[Melaskóli]]), [[Menntó]] (from [[Menntaskóli]]), [[Tónó]] -- (from [[Tónlistarskóli]]), [[Való]] (from [[Valhúsaskóli]]), [[Versló]]/[[Verzló]] (from -- [[Verslunarskóli Íslands|Iceland Business School]]); but these are completely outweighed by male given names, -- nicknames and historical names of men in -ó (e.g. [[Bó]], [[Bóbó]], [[Brúnó]], [[Dittó]], [[Filpó]], [[Galíleó]], -- [[Jagó]], [[Kató]], [[Kristó]], [[Leó]], [[Leónardó]], [[Markó]], etc.) as well as common nouns in -ó (e.g. -- [[bóleró]] "bolero", [[evró]] "Euro (dated)", [[faraó]] "pharaoh", [[kanó]] "canoe", [[kímonó]] "kimono", -- [[mambó]] "mambo", [[pesó]] "peso", [[pikkóló]] "piccolo", [[róló]] "playground", [[sleikjó]] "lollipop", -- etc.) add_decl(base, props, "", "", "s", "ar") end decls["m-rstem"] = function(base, props) local imut = "^" add_decl(base, props, "ur", "ur", { "ur", { form = "urs", footnotes = { "[proscribed]" } } }, imut .. "ur", nil, imut .. "rum", imut .. "ra") end decls["m-ndi"] = function(base, props) -- Words in -ndi, mostly derived from present participles and mostly in [[andi]]; but cf. [[bóndi]], [[frændi]], -- and [[fjandi]] with two plurals with different meanings. local imut if props.stem:find("ænd$") then imut = "" else imut = "^" end add_decl(base, props, "a", "a", "a", imut .. "ur", nil, { imut .. "um", { form = "um", footnotes = "[rare/obsolete]" } }, { imut .. "a", { form = "a", footnotes = "[rare/obsolete]" } }) end decls["m-weak"] = function(base, props) -- Words in -i like [[tími]] "time, hour"; also words in -a e.g. [[herra]] "gentleman; sir, Mr. (term of address)", -- [[séra]]/[[síra]] "reverend" add_decl(base, props, "a", "a", "a", "ar") end decls["f"] = function(base, props) -- Normal strong feminine nouns; default to genitive -ar, plural -ir. add_decl(base, props, "", "", "ar", "ir") end decls["f-ung"] = function(base, props) -- Strong feminine nouns in -ung, e.g. [[nýjung]] "newness, novelty; piece of news", [[nauðung]] -- "constraint, compulsion". Most such nouns are singular-only, e.g. [[djörfung]] "boldness, daring", [[launung]] -- "secrecy". Occasional nouns need overrides, e.g. [[sundrung]] "scattering; dissension, division, disunity" with -- acc/dat sg either - or -u (but only - in the definite acc/dat sg). add_decl(base, props, "", "", "ar", "ar") end decls["f-ing"] = function(base, props) -- Strong feminine nouns in -ing, e.g. [[kerling]] "old woman", [[eining]] "unity; unit". Singular-only: e.g. -- [[málning] "paint", [[menning]] "culture", [[örvænting]] "despair". add_decl(base, props, "u", "u", "ar", "ar") end decls["f-ur"] = function(base, props) add_decl(base, props, "i", "i", "ar", "ir") end decls["f-i"] = function(base, props) add_decl(base, props, "i", "i", "i", "ir") end decls["f-long-vowel"] = function(base, props) -- nouns in -á, e.g. [[á]] "river", [[gjá]] "gorge, canyon", [[skuggská]] "mirror", [[slá]] "door bolt"; -- nouns in -ó, e.g. [[fló]] "flea", [[kónguló]] "spider", [[kló]] "claw"; -- nouns in -ú, e.g. [[frú]] "married woman", [[trú]] "faith, belief". -- Each is slightly different. local gen, nompl if props.stem:find("á$") then gen = "r" nompl = "r" elseif props.stem:find("ó$") then gen = "ar" nompl = "^r" elseif props.stem:find("ú$") then gen = "ar" nompl = "r" else error(("Unrecognized stem '%s' for long-vowel feminine; should end in -á, -ó or -ú")) end add_decl(base, props, "", "", gen, nompl, nompl, "m", { indef = "a", def = "" }) end decls["f-long-umlaut-vowel-r"] = function(base, props) -- nouns in long umlauted vowel + -r: [[kýr]] "cow", [[sýr]] "sow (archaic)", [[ær]] and compounds. add_decl(base, props, "", "", "^r", "^r", "^r", "m", { indef = "a", def = "" }) end decls["f-acc-dat-i"] = function(base, props) -- Some proper female names with -i in the acc and dat sg add_decl(base, props, "i", "i", "ar", "ar") end decls["f-rstem"] = function(base, props) local imut if props.stem:find("syst$") then imut = "" else imut = "^" end local sg_ending = { "ur", { form = "ir", footnotes = { "[proscribed]" } } } add_decl(base, props, sg_ending, sg_ending, sg_ending, imut .. "ur", nil, imut .. "rum", imut .. "ra") end decls["f-weak"] = function(base, props) add_decl(base, props, "u", "u", "u", "ur") end decls["n"] = function(base, props) -- Normal (strong) neuter nouns. add_decl(base, props, "", "i", "s", "^^") end decls["n-já"] = function(base, props) -- [[tré]] "tree; wood"; [[hné]]/[[kné]] "knee"; [[fé]] "sheep; cattle; money"; the stem has previously been set -- to not include final -é; fé has genitive fjár while the others have genitive in -és. local gen = props.stem:find("f$") and "jár" or "és" add_decl_with_nom_sg(base, props, "é%", "é%", "é", gen, "é%", "é%", "jám", { indef = "jáa", def = "já" }) end decls["n-i"] = function(base, props) -- Neuter nouns in -i, e.g. [[kvæði]] "poem, song". Nouns in -ki and -gi e.g. [[ríki]] "state, kingdom" and [[engi]] -- "meadow" have j-insertion by default, which is set elsewhere. add_decl(base, props, "i", "i", "is", "i") end decls["n-weak"] = function(base, props) -- "Weak" neuter nouns in -a, e.g. [[auga]] "eye", [[hjarta]] "heart". U-mutation occurs in the nom/acc/dat pl but -- doesn't need to be indicated explicitly because the ending begins with u-. add_decl(base, props, "a", "a", "a", "u") end local function reconstruct_control_spec(control_specs) local parts = {} local function ins(txt) table.insert(parts, txt) end for i, spec in ipairs(control_specs) do if i > 1 then ins(",") end ins(spec.form) if spec.footnotes then for _, footnote in ipairs(spec.footnotes) do ins(footnote) -- already has brackets around it end end end return table.concat(parts) end decls["adj"] = function(base, props) -- This maps from a slot name constructed from the individual state, case, gender and number properties to the -- actual syncretic slot name used in [[Module:is-adjective]]. local slot_to_syncretic_slot_mapping = { str_nom_m_s = "str_nom_m", str_nom_f_s = "str_nom_f", str_nom_n_s = "str_nom_n", str_acc_m_s = "str_acc_m", str_acc_f_s = "str_acc_f", str_acc_n_s = "str_nom_n", str_dat_m_s = "str_dat_m", str_dat_f_s = "str_dat_f", str_dat_n_s = "str_dat_n", str_gen_m_s = "str_gen_m", str_gen_f_s = "str_gen_f", str_gen_n_s = "str_gen_n", str_nom_m_p = "str_nom_mp", str_nom_f_p = "str_nom_fp", str_nom_n_p = "str_nom_np", str_acc_m_p = "str_acc_mp", str_acc_f_p = "str_nom_fp", str_acc_n_p = "str_nom_np", str_gen_m_p = "str_gen_p", str_gen_f_p = "str_gen_p", str_gen_n_p = "str_gen_p", str_dat_m_p = "str_dat_p", str_dat_f_p = "str_dat_p", str_dat_n_p = "str_dat_p", wk_nom_m_s = "wk_nom_m", wk_nom_f_s = "wk_nom_f", wk_nom_n_s = "wk_n", wk_acc_m_s = "wk_obl_m", wk_acc_f_s = "wk_obl_f", wk_acc_n_s = "wk_n", wk_dat_m_s = "wk_obl_m", wk_dat_f_s = "wk_obl_f", wk_dat_n_s = "wk_n", wk_gen_m_s = "wk_obl_m", wk_gen_f_s = "wk_obl_f", wk_gen_n_s = "wk_n", wk_nom_m_p = "wk_p", wk_nom_f_p = "wk_p", wk_nom_n_p = "wk_p", wk_acc_m_p = "wk_p", wk_acc_f_p = "wk_p", wk_acc_n_p = "wk_p", wk_gen_m_p = "wk_p", wk_gen_f_p = "wk_p", wk_gen_n_p = "wk_p", wk_dat_m_p = "wk_p", wk_dat_f_p = "wk_p", wk_dat_n_p = "wk_p", } local props = {} local function ins(prop) table.insert(props, prop) end for _, spectype in ipairs(m_is_adjective.control_specs) do if base[spectype] then ins(reconstruct_control_spec(base[spectype])) end end -- If a specific reverse u-mutation type was specified and no u-mutation was given, convert the reverse -- u-mutation into a regular u-mutation by chopping off the "un" at the beginning. if base.adj_unumut and not base.umut then ins(base.adj_unumut:sub(3)) end for k, _ in pairs(base.props) do if m_is_adjective.boolean_property_set[k] then ins(k) end end if not base.props.builtin then ins(base.props.iscomp and "-pos" or "-comp") end if base.stem == "#" or base.stem == "##" then ins(base.stem) elseif base.stem then ins("stem:" .. base.stem) end for _, stem in ipairs(m_is_adjective.overridable_stems) do if stem ~= "stem" and base[stem] then ins(("%s:%s"):format(stem, base.stem)) end end local propspec = table.concat(props, ".") if propspec ~= "" then propspec = "<" .. propspec .. ">" end local argspec = base.lemma .. propspec local adj_alternant_multiword_spec = m_is_adjective.do_generate_forms({ argspec }, argspec, "is-ndecl") local function copy(from_slot, to_slot, do_clone) -- We want to avoid sharing form objects (although sharing footnotes is OK, but we don't avoid cloning them -- here) so we can later side-effect form objects as needed. `do_clone` is set to avoid such sharing, -- specifically when the weak form of the adjective is used for both definite and indefinite slots. local source = adj_alternant_multiword_spec.forms[from_slot] if do_clone then source = m_table.deepCopy(source) end base.forms[to_slot] = source end local function copy_gender_number_forms(gender, number) local state = base.adj_is_weak and "wk" or "str" local degree_pref = base.props.iscomp and "comp_" or "" for _, case in ipairs(cases) do local individual_slot = state .. "_" .. case .. "_" .. gender .. "_" .. number local wk_individual_slot = "wk_" .. case .. "_" .. gender .. "_" .. number local syncretic_slot = slot_to_syncretic_slot_mapping[individual_slot] local wk_syncretic_slot = slot_to_syncretic_slot_mapping[wk_individual_slot] if not syncretic_slot then error(("Internal error: Constructed bad individual slot '%s' with no entry in syncretic slot mapping"): format(individual_slot)) end syncretic_slot = degree_pref .. syncretic_slot if not wk_syncretic_slot then error(("Internal error: Constructed bad weak individual slot '%s' with no entry in syncretic slot mapping") : format(wk_individual_slot)) end wk_syncretic_slot = degree_pref .. wk_syncretic_slot copy(syncretic_slot, "ind_" .. case .. "_" .. number) copy(wk_syncretic_slot, "def_" .. case .. "_" .. number, syncretic_slot == wk_syncretic_slot) end end if base.number ~= "pl" then copy_gender_number_forms(base.gender, "s", state) end if base.number ~= "sg" then copy_gender_number_forms(base.gender, "p", state) end end local function set_builtin_defaults(base) if base.gender or base.number or base.definiteness then error("Can't specify gender, number or definiteness for built-in terms") end local function builtin_props() -- Return values are GENDER, NUMBER if base.lemma == "ég" or base.lemma == "þú" then return "none", "sg" elseif base.lemma == "við" or base.lemma == "þið" then return "none", "pl" elseif base.lemma == "hann" then return "m", "sg" elseif base.lemma == "hún" then return "f", "sg" elseif base.lemma == "það" then return "n", "sg" elseif base.lemma == "þeir" then return "m", "pl" elseif base.lemma == "þær" then return "f", "pl" elseif base.lemma == "þau" then return "n", "pl" elseif base.lemma == "sig" then return "none", "none" else error(("Unrecognized pronoun '%s'"):format(base.lemma)) end end local gender, number = builtin_props() base.gender = gender base.actual_gender = gender base.number = number base.actual_number = number base.definiteness = "none" end local function determine_builtin_props(base) base.prop_sets[1].stem = { form = "" } base.decl = "builtin" end decls["builtin"] = function(base, props) if base.lemma == "ég" then add_sg_decl(base, props, "mig", "mér", "mín") elseif base.lemma == "þú" then add_sg_decl(base, props, "þig", "þér", "þín") elseif base.lemma == "hann" then add_sg_decl(base, props, "hann", "honum", "hans") elseif base.lemma == "hún" then add_sg_decl(base, props, "hana", "henni", "hennar") elseif base.lemma == "það" then add_sg_decl(base, props, "það", "því", "þess") elseif base.lemma == "við" then add_pl_only_decl(base, props, "okkur", "okkur", "okkar") elseif base.lemma == "þið" then add_pl_only_decl(base, props, "ykkur", "ykkur", "ykkar") elseif base.lemma == "þeir" then add_pl_only_decl(base, props, "þá", "þeim", "þeirra") elseif base.lemma == "þær" then add_pl_only_decl(base, props, "þær", "þeim", "þeirra") elseif base.lemma == "þau" then add_pl_only_decl(base, props, "þau", "þeim", "þeirra") elseif base.lemma == "sig" then -- Underlyingly we handle [[sig]]'s slots as singular. add_decl_with_nom_sg(base, props, false, "*", "sér", "sín", false, false, false, false) else error(("Internal error: Unrecognized pronoun lemma '%s'"):format(base.lemma)) end end -- Return the lemmas for this term. The return value is a list of {form = FORM, footnotes = FOOTNOTES}. -- If `linked_variant` is given, return the linked variants (with embedded links if specified that way by the user), -- otherwies return variants with any embedded links removed. If `remove_footnotes` is given, remove any -- footnotes attached to the lemmas. function export.get_lemmas(alternant_multiword_spec, linked_variant, remove_footnotes) local slots_to_fetch = potential_lemma_slots local linked_suf = linked_variant and "_linked" or "" for _, slot in ipairs(slots_to_fetch) do if alternant_multiword_spec.forms[slot .. linked_suf] then local lemmas = alternant_multiword_spec.forms[slot .. linked_suf] if remove_footnotes then local lemmas_no_footnotes = {} for _, lemma in ipairs(lemmas) do table.insert(lemmas_no_footnotes, { form = lemma.form }) end return lemmas_no_footnotes else return lemmas end end end return {} end local function handle_derived_slots_and_overrides(base) -- Process slot overrides: First slots specified after the gender, then individual slot overrides specified as -- separate indicators. process_slot_overrides(base) -- Compute linked versions of potential lemma slots, for use in {{is-noun}}. We substitute the original lemma -- (before removing links) for forms that are the same as the lemma, if the original lemma has links. for _, slot in ipairs(potential_lemma_slots) do iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.orig_lemma_no_links then if base.orig_lemma:find("%[%[") then return base.orig_lemma elseif not base.is_multiword then return form elseif not base.props.linkasis and (base.lemma ~= base.orig_lemma_no_links or base.link_lowercase) then local lemma_for_linking = base.lemma if base.link_lowercase then local init, rest = rmatch(lemma_for_linking, "^(.)(.*)$") lemma_for_linking = ulower(init) .. rest end return ("[[%s|%s]]"):format(lemma_for_linking, base.orig_lemma_no_links) else return ("[[%s]]"):format(form) end else return form end end)) end end -- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'. local function process_addnote_specs(base) for _, spec in ipairs(base.addnote_specs) do for _, slot_spec in ipairs(spec.slot_specs) do slot_spec = "^" .. slot_spec .. "$" for slot, forms in pairs(base.forms) do if rfind(slot, slot_spec) then -- To save on memory, side-effect the existing forms. for _, form in ipairs(forms) do form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes) end end end end end end local function is_regular_noun(base) return not base.adjspec and not base.props.builtin end local function process_declnumber(base) base.actual_number = base.number if base.declnumber then if base.declnumber == "sg" or base.declnumber == "pl" then base.number = base.declnumber else error(("Unrecognized value '%s' for 'declnumber', should be 'sg' or 'pl'"):format(base.declnumber)) end end end -- Map `fn` over an override spec (either `gens`, `pls` or one of the overrides in `overrides`). `fn` is passed one -- item (the form object of the override), which it can mutate if needed. If it ever returns non-nil, mapping stops -- and that value is returned as the return value of `map_override`; otherwise mapping runs to completion and nil is -- returned. local function map_override(override, fn) if not override then return nil end local function map_one_list(list) if not list then return nil end for _, formobj in ipairs(list) do local retval = fn(formobj) if retval ~= nil then return retval end end return nil end local retval = map_one_list(override.indef) if retval ~= nil then return retval end return map_one_list(override.def) end -- Map `fn` over all override specs in `base` (`gens`, `pls` and the overrides in `overrides`). `fn` is passed one -- item (the form object of the override), which it can mutate if needed. If it ever returns non-nil, mapping stops -- and that value is returned as the return value of `map_override`; otherwise mapping runs to completion and nil is -- returned. local function map_all_overrides(base, fn) for slot, override in pairs(base.overrides) do local retval = map_override(override, fn) if retval ~= nil then return retval end end local retval = map_override(base.gens, fn) if retval ~= nil then return retval end return map_override(base.pls, fn) end -- Like put.split_alternating_runs_and_strip_spaces(), but ensure that backslash-escaped commas and periods are not -- treated as separators. local function split_alternating_runs_with_escapes(segments, splitchar) for i, segment in ipairs(segments) do segment = rsub(segment, "\\,", SUB_ESCAPED_COMMA) segments[i] = rsub(segment, "\\%.", SUB_ESCAPED_PERIOD) end local separated_groups = put.split_alternating_runs_and_strip_spaces(segments, splitchar) for _, separated_group in ipairs(separated_groups) do for i, segment in ipairs(separated_group) do segment = rsub(segment, SUB_ESCAPED_COMMA, ",") separated_group[i] = rsub(segment, SUB_ESCAPED_PERIOD, ".") end end return separated_groups end local function fetch_footnotes(separated_group, parse_err) local footnotes for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end -- Fetch and parse a slot override, e.g. "ar:s" or "um:m[archaic]/um" or "i:!Þorkatli[archaic]" (where ! indicates that -- the override is the full form including the stem); that is, everything after the slot name(s). `segments` is the -- input in the form of a list where the footnotes have been separated out (see `parse_override` below); `spectype` is -- used in error messages and specifies e.g. "genitive" or "dat+gen slot override"; `allow_blank` indicates that a -- completely blank override spec is allowed (in that case, nil will be returned); `defslot`, if true, indicates that -- we're processing a definite slot override, i.e. two slash-separated specs (indefinite and definite) are not allowed -- and the return overrides will be stored into `def`; and `parse_err` is a function of one argument to throw a parse -- error. The return value is an object containing fields `indef` and/or `def`, of the format described below in the -- comment above `parse_override`. local function fetch_slot_override(segments, spectype, allow_blank, defslot, parse_err) if allow_blank and #segments == 1 and segments[1] == "" then return nil end local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "/") if #slash_separated_groups > 2 then parse_err(("Can specify at most two slash-separated override groups for %s, but saw %s"):format( spectype, #slash_separated_groups)) end if slash_separated_groups[2] and defslot then parse_err(("Can't specify two slash-separated override groups for %s; the second override group is for the definite slot variant, but the slot is already definite") :format( spectype)) end local ret = {} for i, slash_separated_group in ipairs(slash_separated_groups) do local retfield = defslot and "def" or i == 1 and "indef" or "def" if #slash_separated_group == 1 and slash_separated_group[1] == "" then ret[retfield] = false else local colon_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, ":") local specs = {} for _, colon_separated_group in ipairs(colon_separated_groups) do local form = colon_separated_group[1] if form == "" then parse_err(("Use - to indicate an empty ending for %s: '%s'"):format(spectype, table.concat(segments))) elseif form == "-" then form = "" elseif form == "--" then -- missing form = "-" end local new_spec = { form = form, footnotes = fetch_footnotes(colon_separated_group, parse_err) } for _, existing_spec in ipairs(specs) do if existing_spec.form == new_spec.form then parse_err("Duplicate " .. spectype .. " spec '" .. table.concat(colon_separated_group) .. "'") end end table.insert(specs, new_spec) end ret[retfield] = specs end end return ret end --[=[ Parse a single override spec (e.g. 'dat-:i/-' or 'nompl+accpl^/' or 'defnompl+defaccpl!sumrin[when referring to summers in general]:!sumurin[when referring to a specific number of summers]') and return two values: the slot(s) the override applies to, and an object describing the override spec. The input is actually a list where the footnotes have been separated out; for example, given the third example spec above, the input will be a list {"defnompl+defaccpl!sumrin", "[when referring to summers in general]", ":!sumurin", "[when referring to a specific number of summers]", ""}. The object returned for 'dat-:i[mostly in the context of violent actions]/-' looks like this: { indef = { { form = "" }, { form = "i", footnotes = {"[mostly in the context of violent actions]"} } }, def = { { form = "" } } } The object returned for '!nompl+accpl^/' looks like this: { indef = { { form = "^" }, }, def = false } The object returned for 'defnompl+defaccpl!sumrin[when referring to summers in general]:!sumurin[when referring to a specific number of summers]' looks like this: { def = { { form = "!sumrin", footnotes = {"[when referring to summers in general]"} }, { form = "!sumurin", footnotes = {"[when referring to a specific number of summers]"} } } } ]=] local function parse_override(segments, parse_err) local part = segments[1] local slots = {} local defslot while true do local this_defslot if part:find("^def") then this_defslot = true part = usub(part, 4) else this_defslot = false end if defslot == nil then defslot = this_defslot elseif defslot ~= this_defslot then parse_err(("When multiple slot overrides are combined with +, all must be definite or indefinite: '%s'"): format(table.concat(segments))) end local case = usub(part, 1, 3) if case_set[case] then -- ok else parse_err(("Unrecognized case '%s' in override: '%s'"):format(case, table.concat(segments))) end part = usub(part, 4) local slot = defslot and "def_" or "" if part:find("^pl") then part = usub(part, 3) slot = slot .. case .. "_p" else slot = slot .. case .. "_s" end table.insert(slots, slot) if part:find("^%+") then part = usub(part, 2) else break end end segments[1] = part local retval = fetch_slot_override(segments, ("%s slot override"):format(table.concat(slots, "+")), false, defslot, parse_err) return slots, retval end local function parse_adjspec(base, spec, parse_err) local ret = {} local origspec = spec if spec:find("^:") then ret.lemma = spec:sub(2) elseif spec:find("^/") then local from, to = spec:match("^/([^/]*)/([^/]*)$") if from then ret.subspec = { from = from, to = to } else to = spec:match("^/([^/]*)$") if to then ret.subspec = { to = to } else parse_err(("Syntax error in adjective spec 'adj%s': too many slashes"):format(origspec)) end end elseif spec ~= "" then parse_err(("Syntax error in adjective spec 'adj%s'; should be followed only by a colon + lemma or slash " .. "substitution spec, possibly preceded by ^ to indicate lowercasing"):format(origspec)) end return ret end local function parse_inside(base, inside, is_scraped_noun) local function parse_err(msg) error((is_scraped_noun and "Error processing scraped noun spec: " or "") .. msg .. ": <" .. inside .. ">") end local segments = put.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = split_alternating_runs_with_escapes(segments, "%.") local isadj = false for i, dot_separated_group in ipairs(dot_separated_groups) do -- Parse a control spec such as "umut,uUmut[rare]" or "-unuUmut,unuUmut" or "imut". This assumes the control -- spec is contained in `dot_separated_group` (already split on brackets) and the result of parsing should go in -- `base[dest]`. `allowed_specs` is a list of the allowed control specs in this group, such as -- {"umut", "Umut", "uumut", "uUmut", "uUUmut", "u_mut"} or {"con", "-con"}. The result of parsing is a list of -- structures of the form { -- form = "FORM", -- footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- }. local function parse_control_spec(dest, allowed_specs) if base[dest] then parse_err(("Can't specify '%s'-type control spec twice; second such spec is '%s'"):format( dest, table.concat(dot_separated_group))) end base[dest] = {} local comma_separated_groups = split_alternating_runs_with_escapes(dot_separated_group, ",") for _, comma_separated_group in ipairs(comma_separated_groups) do local specobj = {} local spec = comma_separated_group[1] if not m_table.contains(allowed_specs, spec) then parse_err(("For '%s'-type control spec, saw unrecognized spec '%s'; valid values are %s"): format(dest, spec, generate_list_of_possibilities_for_err(allowed_specs))) else specobj.form = spec end specobj.footnotes = fetch_footnotes(comma_separated_group, parse_err) table.insert(base[dest], specobj) end end local part = dot_separated_group[1] while true do if i == 1 and not part:find("^adj") and not part:find("^@") and part ~= "builtin" then local comma_separated_groups = split_alternating_runs_with_escapes(dot_separated_group, ",") if #comma_separated_groups > 3 then parse_err(("At most three comma-separated specs are allowed but saw %s"):format( #comma_separated_groups)) end if comma_separated_groups[1][2] then parse_err("Footnotes not allowed on gender indicator") end base.gender = comma_separated_groups[1][1] if not base.gender:find("^[mfn]$") then parse_err(("Unrecognized gender '%s', should be 'm', 'f' or 'n'"):format(base.gender)) end if comma_separated_groups[2] then base.gens = fetch_slot_override(comma_separated_groups[2], "genitive", true, false, parse_err) end if comma_separated_groups[3] then base.pls = fetch_slot_override(comma_separated_groups[3], "nominative plural", true, false, parse_err) end break elseif part == "" then if not dot_separated_group[2] then parse_err("Blank indicator; not allowed without attached footnotes") end base.footnotes = fetch_footnotes(dot_separated_group, parse_err) break elseif part == "addnote" then local spec_and_footnotes = fetch_footnotes(dot_separated_group, parse_err) if #spec_and_footnotes < 2 then parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'") end local slot_spec = table.remove(spec_and_footnotes, 1) local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$") if not slot_spec_inside then parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets") end local slot_specs = rsplit(slot_spec_inside, ",") -- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we? table.insert(base.addnote_specs, { slot_specs = slot_specs, footnotes = spec_and_footnotes }) break elseif ulen(part) > 3 and case_set[usub(part, 1, 3)] or ( ulen(part) > 6 and usub(part, 1, 3) == "def" and case_set[usub(part, 4, 6)]) then local slots, override = parse_override(dot_separated_group, parse_err) for _, slot in ipairs(slots) do if base.overrides[slot] then error(("Two overrides specified for slot '%s'"):format(slot)) else base.overrides[slot] = override end end break end if isadj then if m_is_adjective.parse_for_control_specs(part, parse_control_spec) then break end else if part:find("^[Uu]+_?mut") then parse_control_spec("umut", com.umut_types) break elseif not part:find("^imutval") and part:find("^%-?imut") then parse_control_spec("imut", { "imut", "-imut" }) break elseif part:find("^%-?un[uU]+_?mut") then local unumut_types_and_negated = {} for _, typ in ipairs(com.unumut_types) do table.insert(unumut_types_and_negated, typ) table.insert(unumut_types_and_negated, "-" .. typ) end parse_control_spec("unumut", unumut_types_and_negated) break elseif part:find("^%-?unimut") then parse_control_spec("unimut", { "unimut", "-unimut" }) break elseif part:find("^%-?con") then parse_control_spec("con", { "con", "-con" }) break elseif part:find("^%-?defcon") then parse_control_spec("defcon", { "defcon", "-defcon" }) break elseif not part:find("^já") and part:find("^%-?j") then -- don't trip over .já indicator parse_control_spec("j", { "j", "-j" }) break elseif not part:find("^vstem") and part:find("^%-?v") then parse_control_spec("v", { "v", "-v" }) break end end if #dot_separated_group > 1 then parse_err( ("Footnotes only allowed with slot overrides, negatable indicators and by themselves: '%s'"): format(table.concat(dot_separated_group))) elseif part:find("^adj") then if i > 1 then parse_err("Adjective spec must be the first indicator") end if base.adjspec then parse_err("Can't specify two adjective specs") end isadj = true base.adjspec = parse_adjspec(base, part:sub(4), parse_err) break elseif part:find("^[mfn]$") then if base.gender then parse_err("Can't specify gender twice") end base.gender = part break elseif not isadj and (part:find("^decllemma%s*:") or part:find("^declgender%s*:") or part:find("^declnumber%s*:")) then local field, value = part:match("^(decl[a-z]+)%s*:%s*(.+)$") if not value then parse_err(("Syntax error in decllemma/declgender/declnumber indicator: '%s'"):format(part)) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value break elseif part:find("^q%s*:") or part:find("header%s*:") then local field, value = part:match("^(q)%s*:%s*(.+)$") if not value then field, value = part:match("^(header)%s*:%s*(.+)$") end if not value then parse_err(("Syntax error in q/header indicator: '%s'"):format(part)) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value break elseif not isadj and part:find("^@") then -- FIXME: Implement adjective scraping if base.scrape_spec then parse_err("Can't specify scrape directive '@...' twice") end if part:find(":") then base.scrape_is_suffix, base.scrape_spec, base.scrape_id = part:match("^@(%-?)(.-)%s*:%s*(.+)$") else base.scrape_is_suffix, base.scrape_spec = part:match("^@(%-?)(.-)$") end -- If we saw a hyphen, set `scrape_is_suffix` to true, otherwise false base.scrape_is_suffix = base.scrape_is_suffix == "-" if not base.scrape_spec or base.scrape_spec == "" then parse_err(("Syntax error in scrape directive '%s"):format(part)) end local scrape_init, scrape_rest = rmatch(base.scrape_spec, "^(.)(.*)$") local lower_scrape_init = ulower(scrape_init) if ulower(scrape_init) ~= scrape_init then base.scrape_is_uppercase = true base.scrape_spec = lower_scrape_init .. scrape_rest end break elseif part:find(":") then local spec, value = part:match("^([a-z]+)%s*:%s*(.+)$") if not spec then parse_err(("Syntax error in indicator with value, expecting alphabetic slot or stem/lemma " .. "override indicator: '%s'"):format(part)) end local stem_set = isadj and m_is_adjective.overridable_stem_set or overridable_stem_set if not stem_set[spec] then parse_err(("Unrecognized stem override indicator '%s', should be %s"):format( part, generate_list_of_possibilities_for_err( isadj and m_is_adjective.overridable_stems or overridable_stems))) end if base[spec] then if spec == "stem" then parse_err("Can't specify spec for 'stem:' twice (including using 'stem:' along with # or ##)") else parse_err(("Can't specify '%s:' twice"):format(spec)) end end base[spec] = value break elseif part == "#" or part == "##" then if base.stem then parse_err("Can't specify a stem spec ('stem:', # or ##) twice") end base.stem = part break elseif part == "sg" or part == "pl" or part == "both" then if base.number then if base.number ~= part then parse_err("Can't specify '" .. part .. "' along with '" .. base.number .. "'") else parse_err("Can't specify '" .. part .. "' twice") end end base.number = part break elseif part == "indef" or part == "def" or part == "bothdef" then if base.definiteness then if base.definiteness ~= part then parse_err(("Can't specify two conflicting definiteness values; saw '%s' (%s) when existing " .. "definiteness is %s"):format(part, definiteness_code_to_desc[part], definiteness_code_to_desc[base.definiteness])) else parse_err("Can't specify '" .. part .. "' twice") end end base.definiteness = part break elseif not isadj and (part == "weak" or part == "iending" or part == "rstem" or part == "já" or part == "linkasis") or isadj and (m_is_adjective.boolean_property_set[part] or part == "iscomp") or part == "proper" or part == "common" or part == "dem" or part == "builtin" or part == "indecl" or part == "decl?" then if base.props[part] then parse_err("Can't specify '" .. part .. "' twice") end base.props[part] = true break elseif part == "~" then if base.link_lowercase then parse_err("Can't specify '~' twice") end base.link_lowercase = true break elseif isadj and m_table.contains(com.unumut_types, part) then if base.adj_unumut then parse_err("Can't specify two values for reverse u-mutation spec with adjectives") end base.adj_unumut = part break end parse_err("Unrecognized indicator '" .. part .. "'") end end return base end -- Set some defaults (e.g. number and definiteness) now, because they (esp. the number) may be needed -- below when determining how to merge scraped and user-specified properies. local function set_early_base_defaults(base) if is_regular_noun(base) then local function check_err(msg) error(("Lemma '%s': %s"):format(base.lemma, msg)) end if not base.gender then check_err("Internal error: For nouns, gender must be specified") end base.number = base.number or is_proper_noun(base, base.lemma) and "sg" or base.gender == "m" and (base.lemma:find("skapur$") or base.lemma:find("naður$")) and not base.stem and "sg" or "both" base.definiteness = base.definiteness or is_proper_noun(base, base.lemma) and "indef" or "bothdef" process_declnumber(base) base.actual_gender = base.gender if base.declgender then if not base.declgender:find("^[mfn]$") then check_err(("Unrecognized gender '%s' for 'declgender:', should be 'm', 'f' or 'n'"):format( base.declgender)) end base.gender = base.declgender end end end local function parse_inside_and_merge(inside, lemma, scrape_chain) local function parse_err(msg) error(msg .. ": <" .. inside .. ">") end if #scrape_chain >= 10 then local linked_scrape_chain = {} for _, element in ipairs(scrape_chain) do table.insert(linked_scrape_chain, "[[" .. element .. "]]") end parse_err(("Probable infinite loop in scraping; scrape chain is [[%s]] -> %s"):format(lemma, table.concat(linked_scrape_chain, " -> "))) end local base = create_base() base.lemma = lemma base.scrape_chain = scrape_chain parse_inside(base, inside, #scrape_chain > 0) if not base.scrape_spec then -- If we're not scraping the declension from another noun, just return the parsed `base`. -- But don't set early defaults if we're being scraped because it interferes with overriding the number -- and/or definiteness by the noun that is scraping us. if #scrape_chain == 0 then set_early_base_defaults(base) end return base else local prefix, base_noun, declspec prefix, base_noun, declspec = com.find_scraped_infl { lemma = lemma, scrape_spec = base.scrape_spec, scrape_is_suffix = base.scrape_is_suffix, scrape_is_uppercase = base.scrape_is_uppercase, infltemp = "is-ndecl", allow_empty_infl = false, inflid = base.scrape_id, parse_off_ending = com.parse_off_final_nom_ending, } if type(declspec) == "string" then base.prefix = prefix base.base_noun = base_noun base.scrape_error = declspec return base end -- Parse the inside spec from the scraped noun (merging any sub-scraping specs), and copy over the -- user-specified properties on top of it. table.insert(scrape_chain, base_noun) local inner_base = parse_inside_and_merge(declspec.infl, base_noun, scrape_chain) inner_base.lemma = lemma inner_base.prefix = prefix inner_base.base_noun = base_noun -- Add `prefix` to a full variant of the base noun (e.g. a stem spec or full override). We may need -- to adjust the variant to take into account the base noun being a suffix and/or uppercase (e.g. when -- we use [[-dómur]] to generate the inflection of [[vísdómur]] or [[Björn]] to generate the inflection -- of [[Ásbjörn]]). local function add_prefix(form) if base.scrape_is_suffix then form = form:gsub("^%-", "") end if base.scrape_is_uppercase then local first, rest = rmatch(form, "^(.)(.*)$") if first then form = ulower(first) .. rest end end return prefix .. form end -- If there's a prefix, add it now to all the full overrides in the scraped noun, as well as 'decllemma' -- and all stem overrides. if prefix ~= "" then map_all_overrides(inner_base, function(formobj) -- Not if the override contains # or ##, which expand to the full lemma (possibly minus -r -- or -ur). if formobj.form:find("^!") and not formobj.form:find("#") then formobj.form = "!" .. add_prefix(usub(formobj.form, 2)) end end) if inner_base.decllemma then inner_base.decllemma = add_prefix(inner_base.decllemma) end for _, stem in ipairs(overridable_stems) do -- Only actual stems, not imutval; and not if the stem contains # or ##, which -- expand to the full lemma (possibly minus -r or -ur). if inner_base[stem] and stem:find("stem$") and not inner_base[stem]:find("#") then inner_base[stem] = add_prefix(inner_base[stem]) end end end local function copy_properties(plist) -- Copy various properties. for _, prop in ipairs(plist) do if base[prop] ~= nil then inner_base[prop] = base[prop] end end end copy_properties(control_specs) copy_properties(overridable_stems) copy_properties { "gens", "pls", "gender", "number", "definiteness", "decllemma", "declgender", "declnumber", "q", "header", "link_lowercase" } inner_base.footnotes = iut.combine_footnotes(inner_base.footnotes, base.footnotes) -- Copy addnote specs. for _, prop_list in ipairs { "addnote_specs" } do for _, prop in ipairs(base[prop_list]) do m_table.insertIfNot(inner_base[prop_list], prop) end end -- Now copy remaining user-specified specs into the scraped noun `base`. for _, prop_table in ipairs { "overrides", "props" } do for slot, prop in pairs(base[prop_table]) do inner_base[prop_table][slot] = prop end end -- Now determine the defaulted number and definiteness (after copying relevant settings -- but before the check just below that relies on `inner_base.number` being set). set_early_base_defaults(inner_base) -- If user specified 'sg', cancel out any pl overrides, otherwise we'll get an error. if inner_base.number == "sg" then inner_base.pls = nil for slot, _ in pairs(inner_base.overrides) do if slot:find("_p$") then inner_base.overrides[slot] = nil end end end return inner_base end end --[=[ Parse an indicator spec (text consisting of angle brackets and zero or more dot-separated indicators within them). Return value is an object of the form indicated in the comment above create_base(). ]=] local function parse_indicator_spec(angle_bracket_spec, lemma, pagename) if lemma == "" then lemma = pagename end local inside = rmatch(angle_bracket_spec, "^<(.*)>$") assert(inside) local orig_lemma = lemma local orig_lemma_no_links = m_links.remove_links(lemma) lemma = orig_lemma_no_links local base = parse_inside_and_merge(inside, lemma, {}) base.orig_lemma = orig_lemma base.orig_lemma_no_links = orig_lemma_no_links return base end -- Determine if the term has more than one word in it. Normally we just look at the number of words -- at top level. However, it's possible to have a single alternant at top level with multiple words -- in one of the arms, e.g. the equivalent of ((rēspūblica<>,rēs<>pūblica<>)). So if there's only one -- top-level "word" and it's an alternant, check the length of each arm. We also need to check for -- before-text and post-text if there's only one inflected term. local function compute_is_multiword(alternant_multiword_spec) if #alternant_multiword_spec.alternant_or_word_specs > 1 or alternant_multiword_spec.post_text ~= "" then return true end local alternant_or_word_spec = alternant_multiword_spec.alternant_or_word_specs[1] if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do if #multiword_spec > 1 or multiword_spec.post_text ~= "" or multiword_spec[1] and multiword_spec[1].before_text ~= "" then return true end end end if alternant_or_word_spec.before_text ~= "" then return true end return false end local function set_defaults_and_check_bad_indicators(base) local function check_err(msg) error(("Lemma '%s': %s"):format(base.lemma, msg)) end -- Set default values. local regular_noun = is_regular_noun(base) if not base.adjspec and base.props.builtin then set_builtin_defaults(base) end if not regular_noun and not base.adjspec then for _, control_spec in ipairs(control_specs) do if base[control_spec] then check_err(("'%s' cannot be specified with pronouns"):format(control_spec)) end end end if not regular_noun then if base.declgender then check_err("'declgender' can only be specified with regular nouns") end return end -- Check for bad indicator combinations. if base.imut and base.unimut then check_err("'imut' and 'unimut' specs cannot be specified together") end if base.umut and base.unumut then check_err("'umut' and 'unumut' specs cannot be specified together") end if base.unimut and base.unumut then check_err("'unimut' and 'unumut' specs cannot be specified together") end if base.declnumber == "pl" and (base.gens or base.pls) then check_err("Cannot set genitive or plural specs after the gender in plural-only lemmas") end if base.plvstem and not base.plstem then check_err("When 'plvstem:' given, 'plstem:' must also be given") end -- Compute whether i-mutation stems are needed. -- First check for 'imut' set by user. if not base.need_imut then -- might be set by the detected declension if base.imut then for _, formobj in ipairs(base.imut) do if formobj.form == "imut" then base.need_imut = true break end end end end -- Then check for 'unimut' set by user. if not base.need_imut then if base.unimut then for _, formobj in ipairs(base.unimut) do if formobj.form == "unimut" then base.need_imut = true break end end end end -- Then check all overrides for any beginning with a single ^. if not base.need_imut then map_all_overrides(base, function(formobj) if formobj.form:find("^%^") and not formobj.form:find("^%^%^") then base.need_imut = true return true end end) end if base.imutval and not base.need_imut then check_err("'imutval:...' specified but 'imut' and 'unimut' not specified and no forms need i-mutation") end end local function set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) -- Used when determining how to link definite-only and plural-only nouns. alternant_multiword_spec.is_multiword = compute_is_multiword(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) base.is_multiword = alternant_multiword_spec.is_multiword set_defaults_and_check_bad_indicators(base) for _, global_prop in ipairs { "q", "header" } do if base[global_prop] then if alternant_multiword_spec[global_prop] == nil then alternant_multiword_spec[global_prop] = base[global_prop] elseif alternant_multiword_spec[global_prop] ~= base[global_prop] then error(("With multiple words or alternants, set '%s' on only one of them or make them all agree"): format(global_prop)) end end end if base.props.builtin then alternant_multiword_spec.saw_builtin = true else alternant_multiword_spec.saw_non_builtin = true end if base.props.indecl then alternant_multiword_spec.saw_indecl = true else alternant_multiword_spec.saw_non_indecl = true end if base.props["decl?"] then alternant_multiword_spec.saw_unknown_decl = true else alternant_multiword_spec.saw_non_unknown_decl = true end end) end local function expand_property_sets(base) base.prop_sets = { {} } -- Construct the prop sets from all combinations of control specs, in case any given spec has more than one -- possibility. for _, control_spec in ipairs(control_specs) do local specvals = base[control_spec] -- Handle unspecified control specs. if not specvals then specvals = { false } end if #specvals == 1 then for _, prop_set in ipairs(base.prop_sets) do -- Convert 'false' back to nil prop_set[control_spec] = specvals[1] or nil end else local new_prop_sets = {} for _, prop_set in ipairs(base.prop_sets) do for _, specval in ipairs(specvals) do local new_prop_set = m_table.shallowCopy(prop_set) new_prop_set[control_spec] = specval table.insert(new_prop_sets, new_prop_set) end end base.prop_sets = new_prop_sets end end end -- Return the most likely ending to add to a stem form (e.g. from the feminine singular or the plural) to -- to get the lemma form (masculine singular). -- We use the following rules: -- 1. Stems in -nn or -ll take -ur. -- 2. Stems in -Vn or -Vl double the last letter, but not if this will result in contraction (the default -- for nouns in -[aiu]nn and -[aiu]ll, but for adjectives only in -inn), in which case -ur is added. -- 3. Stems in -Cn, -Cl, -r or -s remain unchanged. -- 4. Stems in a vowel add -r. -- 5. Remaining stems add -ur. -- Exceptional lemma forms for adjectives will need to be handled through a slash substitution spec or by -- directly specifying the lemma after a colon. local function stem_to_masc_sg_lemma_ending(stem, isadj) if stem:find("nn$") or stem:find("ll$") then return "ur" elseif not isadj and (stem:find("a[nl]$") or stem:find("[^eE]i[nl]$") or stem:find("[^aA]u[nl]$")) or isadj and stem:find("[^eE]in$") then return "ur" elseif stem:find(com.vowel_c .. "[nl]$") then return stem:sub(-1) elseif stem:find("[nlrs]$") then return "" elseif rfind(stem, com.vowel_c .. "$") then return "r" else return "ur" end end -- For a plural-only lemma, synthesize a likely singular lemma. It doesn't have to be theoretically correct as long as -- it generates all the correct plural forms. local function synthesize_singular_lemma(base) local lemma_determined -- Loop over all property sets in case the user specified multiple ones (e.g. using different control specs). If -- we try to reconstruct different lemmas for different property sets, we'll throw an error below. for _, props in ipairs(base.prop_sets) do local function interr(msg) error(("Internal error: For lemma '%s', %s: %s"):format(base.lemma, msg, dump(props))) end -- `ending` refers to the plural ending but is not currently used much. Instead, in add_decl(), when we process -- pl-only terms, we set the nom_pl to "*" so that the lemma is used directly. local stem, lemma, ending, sg_ending, default_unumut if base.gender == "m" or base.gender == "f" then stem, ending = rmatch(base.lemma, "^(.*)([aiu]r)$") if stem then -- masc: -- -- [[tónleikar]] "concert"; [[feðgar]] "father and son"; [[hafrar]] "oats" (dat pl höfrum); -- [[fjármunir]] "goods, property"; [[Fljótsdælir]] "inhabitants of Fljótsdalur (a valley)" -- (occurs definite, needs 'dem', no unimut); [[Ásmegir]] "sons of the Gods" (occurs definite, dat -- pl Ásmögum, gen pl Ásmaga, i.e. needs 'def' and 'unimut'); similarly [[ljóðmegir]]; -- [[buskuleggir]] "?" (has 'j' in dat pl [[buskuleggjum]], gen pl [[buskuleggja]]; [[Bekkir]] -- (place name; has 'j' in dat pl [[Bekkjum]], gen pl [[Bekkja]]) -- -- fem: -- [[frönskur]] "French fries" (with unumut); [[hjólbörur]] "wheelbarrow" (with unumut); [[buxur]] -- "trousers, pants", [[hættur]] "bedtime; quitting time" (with unimut); [[herðar]] "shoulders"; -- [[limar]] "branches"; [[öfgar]] "exaggeration, extreme" (no unumut); [[drefjar]] -- "stains, traces"; [[viðjar]] "chains, fetters"; many others in -jar, but the -j- is throughout -- the plural; [[svalir]] "balcony; porch"; [[dyr]] "doorway" (uses decllemma:dyrir) if ending == "ur" then -- FIXME: Does -ur as masculine plural ending occur? What should the singular be? sg_ending = base.gender == "f" and "a" or nil default_unumut = "unumut" else sg_ending = base.gender == "f" and "" or nil end if not sg_ending then sg_ending = stem_to_masc_sg_lemma_ending(stem) end elseif base.lemma:find("ær$") then -- [[barnatær]], [[fultær]], proper name [[Tær]] stem = base.lemma sg_ending = "" else error(("Masculine or feminine plural-only lemma '%s' should end in -ar, -ir or -ur"):format(base.lemma)) end elseif base.gender == "n" then -- Neuters in -i. Examples: [[fræði]] "branch of knowledge", [[jafndægri]] "equinox", [[meðmæli]] -- "recommendation", [[sannindi]] "truth", [[skæri]] "pair of scissors", [[vísindi]] "knowedge, learning". -- unimut is possible and occurs in [[læti]] "behavior, demeanor", [[ólæti]] "noise, racket". stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then sg_ending = "i" end if not stem then -- Weak neuters in -u like [[gleraugu]] "glasses/spectacles". stem, ending = rmatch(base.lemma, "^(.*[^aA])(u)$") if stem then sg_ending = "a" default_unumut = "unumut" end end if not stem then -- Generally, plural will look like singular, with no ending in the plural (but there will be umut -- if possible). Examples: [[feðgin]] "father and daughter", [[hjón]] "married couple", [[jól]] -- "Christmas", [[lok]] "end"; [[jarðgöng]] "tunnel" needing 'unumut'. stem = base.lemma sg_ending = "" default_unumut = "unumut" end else interr(("unrecognized gender '%s'"):format(base.gender)) end if default_unumut and not props.unumut and not props.umut and not props.unimut then props.unumut = { form = default_unumut, defaulted = true } end if props.unumut and props.unimut then interr("shouldn't see both 'unumut' and 'unimut' set in plural-only lemma") end if props.unumut and props.unumut.form:find("^un") then stem = com.apply_reverse_u_mutation(stem, props.unumut.form, not props.unumut.defaulted) if props.umut then interr("shouldn't see both 'unumut' and 'umut' set in plural-only lemma") end props.umut = { form = rsub(props.unumut.form, "^un", ""), footnotes = props.unumut.footnotes, defaulted = props.unumut.defaulted } props.unumut = nil end if props.unimut and props.unimut.form:find("^un") then stem = com.apply_reverse_i_mutation(stem, base.imutval) if props.imut then interr("shouldn't see both 'unimut' and 'imut' set in plural-only lemma") end props.imut = { form = rsub(props.unimut.form, "^un", ""), footnotes = props.unimut.footnotes } props.unimut = nil end lemma = stem .. sg_ending if lemma_determined and lemma_determined ~= lemma then error(("Attempt to set two different singular lemmas '%s' and '%s'"):format(lemma_determined, lemma)) end lemma_determined = lemma end base.lemma = lemma_determined base.lemma_ending = ending or "" end -- For a nominative definite lemma, synthesize the corresponding indefinite lemma. Note that a plural definite lemma may -- need to be processed twice, first to convert to plural indefinite and then to convert to singular indefinite using -- synthesize_singular_lemma(). local function synthesize_indefinite_lemma(base) local lemma_determined -- Loop over all property sets in case the user specified multiple ones (e.g. using different control specs). If -- we try to reconstruct different lemmas for different property sets, we'll throw an error below. for _, props in ipairs(base.prop_sets) do local function interr(msg) error(("Internal error: For lemma '%s', %s: %s"):format(base.lemma, msg, dump(props))) end -- There are only 6 clitic articles, depending on the combination of gender and number: -- singular: m = -inn, f = -in, n = -ið; plural: m = -nir, f = -nar, n = -in. The two beginning in n- aren't -- problematic because in all cases they simply append to the actual form. The remaining four, however, drop -- the i- before an ending [aiu]. This means we can uniquely reconstruct the dropped vowel if we see e.g. -- -að or -uð in place of -ið. But if we see -ið, we don't know whether the lemma ended in -i or a consonant. -- And in general it's important to know because it affects some forms; e.g. compare definite neuter 'knippið' -- from [[knippi]] "bundle, bunch" with 'klappið' from [[klapp]] "applause; pat, stroke". The former has -- definite genitive 'knippisins' and the latter 'klappsins'. And in fact, all three genders commonly have -- both consonant-ending and i-ending nouns in the singular. This means we need an indicator to distinguish -- them. Probably easiest is 'iending'; reusing 'weak' won't work so well because neuters in -i, and sometimes -- feminines in -i, are considered strong. local function process_n_clitic(clitic) local lemma = base.lemma:match("^(.*)" .. clitic .. "$") if not lemma then error(("Lemma '%s' declared as %s %s should end in clitic '-%s'"):format(base.lemma, gender_code_to_desc[base.gender] or "NONE", number_code_to_desc[base.number] or "NONE", clitic)) end return lemma end local function process_i_clitic(clitic) local clitic_cons_end = clitic:match("^i(.*)$") if not clitic_cons_end then interr(("clitic '%s' should begin with 'i'"):format(clitic)) end local lemma_begin, ending = base.lemma:match("^(.*)([aiu])" .. clitic_cons_end .. "$") if not lemma_begin then error(("Lemma '%s' declared as %s %s should end in clitic '-%s' or in '-a%s' or '-u%s'"):format( base.lemma, gender_code_to_desc[base.gender] or "NONE", number_code_to_desc[base.number] or "NONE", clitic, clitic_cons_end, clitic_cons_end)) end if ending == "a" or ending == "u" then if base.props.iending then error(("Property 'iending' cannot be specified because definite lemma '%s' does not end in '-%s'"): format(base.lemma, clitic)) end return lemma_begin .. ending end if base.props.iending then return lemma_begin .. "i" else return lemma_begin end end local clitic = clitic_articles[base.gender]["nom_" .. (base.number == "pl" and "p" or "s")] local lemma if clitic:find("^n") then lemma = process_n_clitic(clitic) else lemma = process_i_clitic(clitic) end if lemma_determined and lemma_determined ~= lemma then error(("Attempt to set two different indefinite lemmas '%s' and '%s'"):format(lemma_determined, lemma)) end lemma_determined = lemma end base.lemma = lemma_determined base.lemma_ending = "" end -- For an adjectival lemma, synthesize the masc singular form. local function synthesize_adj_lemma(base) local stem, ending if base.props.indecl then base.decl = "indecl" return elseif base.props["decl?"] then base.decl = "decl?" return else base.decl = "adj" local adjspec = base.adjspec if not adjspec then error("Internal error: synthesize_adj_lemma() called without a parsed adjective spec in `base.adjspec`") end if adjspec.lemma then base.lemma = adjspec.lemma elseif adjspec.subspec then local from, to = adjspec.subspec.from, adjspec.subspec.to if from then local beginpart = base.lemma:match("^(.*)" .. m_string_utilities.pattern_escape(from) .. "$") if not beginpart then error(("Adjective slash substitution spec '/%s/%s' didn't match form '%s'"):format( from, to, base.lemma)) end base.lemma = beginpart .. to else local num_to_remove if base.number == "pl" then num_to_remove = (base.gender == "m" or base.gender == "f") and 2 or 0 elseif base.gender == "m" then error(("Single-part adjective slash substitution spec '/%s' not allowed with masculine-singular " .. "adjective form '%s'; if necessary, use a two-part spec or specify the lemma directly after " .. " a colon"):format(from, base.lemma)) else num_to_remove = base.gender == "f" and 0 or 1 end base.lemma = usub(base.lemma, 1, -num_to_remove - 1) .. to end else local stem, stem_is_lemma if base.props.iscomp then base.adj_is_weak = true if base.number ~= "pl" and base.gender == "n" then stem = base.lemma:match("^(.*)a$") if not stem then error(("Neuter singular weak comparative adjective form should end in -a: %s" ):format(base.lemma)) end stem = stem .. "i" else if not base.lemma:find("i$") then error(("Plural or masculine/feminine singular weak comparative adjective form should " .. "end in -i: %s"):format(base.lemma)) end stem = base.lemma end stem_is_lemma = true elseif base.number == "pl" then stem = base.lemma:match("^(.*[^Aa])u$") if stem then base.adj_is_weak = true end if not stem then if base.gender == "m" then stem = base.lemma:match("^(.*)ir$") if not stem then error(("Masculine plural strong adjective form should end in -ir: %s"):format(base.lemma)) end elseif base.gender == "f" then stem = base.lemma:match("^(.*)ar$") if not stem then error(("Feminine plural strong adjective form should end in -ar: %s"):format(base.lemma)) end else stem = base.lemma end end else if base.gender == "m" then stem = base.lemma:match("^(.*[^Ee])i$") if stem then base.adj_is_weak = true else -- Otherwise the form is strong and should remain as is. stem = base.lemma stem_is_lemma = true end elseif base.gender == "f" or base.gender == "n" then stem = base.lemma:match("^(.*)a$") if stem then base.adj_is_weak = true end if not stem then if base.gender == "n" then error(("No automatic rules for inferring the adjective lemma from strong neuter form " .. "'%s'; you must use a slash substitution spec such as 'tvöfalt<adj/dur>' (which " .. "chops off the last letter and replaces it with 'dur') or 'ryðfrítt<adj/tt/r>' " .. "(which chops off 'tt' and replaces it with 'r'), or directly specify the lemma " .. "using e.g. 'tvö<adj:tveir>'" ):format(base.lemma)) else stem = base.lemma end end end end if not stem_is_lemma then if base.adj_unumut then stem = com.apply_reverse_u_mutation(stem, base.adj_unumut, "error if unmatchable") end base.lemma = stem .. stem_to_masc_sg_lemma_ending(stem) else base.lemma = stem end end end end -- Determine the declension and stem based on the lemma and gender. The declension is set in base.decl and the stem in -- base.stem if not already set by the user. local function determine_declension(base) local stem, ending local default_props = {} -- Determine declension if base.props.indecl then base.decl = "indecl" stem = base.lemma elseif base.props["decl?"] then base.decl = "decl?" stem = base.lemma elseif base.gender == "m" then if not stem then stem, ending = rmatch(base.lemma, "^(.*[ÁáÆæ])(r)$") if stem then -- in -ár: -- [[nár]] "corpse", [[sár]] "tub (archaic)", [[hár]] "thole, oarlock (archaic)", [[hár]] -- "spiny dogfish (archaic)" (with v-infix), [[kljár]] "weaving stone (archaic)", [[ljár]] "scythe", -- [[skjár]] "video screen, display", [[már]] "seagull", [[sjár]] "sea", [[snjár]] "snow" (with -- v-infix); vs. stems ending in -r: [[ár]] "? (archaic)", [[lár]] "wooden box for wool", [[klár]] -- "inferior horse, nag", [[pílár]] "slat, fence post; spoke (dated)", [[kentár]] "centaur" -- -- in -ær: -- [[glær]] "sea", [[skær]] "? (obsolete)", [[blær]] "gentle breeze", [[bær]] "farm; town", [[óbær]] -- "?", [[sær]] "sea", [[snær]] "snow" -- -- We used to also drop -r by default from the stem in -ýr words, but this doesn't make sense for -- adjectives and only half makes sense for nouns, so we don't do it any more. We have stems without -r: -- [[ýr]] "yew", [[býr]] "town, farm", [[gnýr]] "clash, rumble; blue wildebeest", [[týr]] "hero; god", -- also many proper names; vs. stems ending in -r: [[fýr]] "dude, guy", [[lýr]] "pollock", [[sýr]] -- "? (poetic)", [[ýr]] "? (obsolete)", [[hlýr]] "? (obsolete)", [[glýr]] "? (obsolete)" base.decl = "m" end end if not stem then stem = rmatch(base.lemma, "^(.*[Aa]ur)$") if stem then -- [[maur]] "ant", [[aur]] "loam, mud", [[gaur]] "ruffian", [[paur]] "devil; enmity", -- [[saur]] "dirt; excrement", [[staur]] "post", [[ljósastaur]] "lamp post" base.decl = "m" end end if not stem then -- There must be at least one vowel; lemmas like [[bur]] don't count. stem, ending = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*)(ur)$") if stem then if stem:find("skap$") and not base.stem then -- tons of words in -skapur base.decl = "m-skapur" elseif stem:find("nað$") and not base.stem then -- lots of words in -naður base.decl = "m-naður" default_props.umut = "uUmut" else if base.stem == base.lemma then -- [[akur]] "field" etc. where the stem includes the final -r stem = base.stem ending = "" -- not actually used default_props.con = "con" end -- [[hestur]] "horse" and lots of others base.decl = "m" end end end if not stem then stem = rmatch(base.lemma, "^(.*[Ee][iy]r)$") if stem then -- in -eir (all include -r in the stem): -- [[geir]] "?", [[eir]] "copper", [[leir]] "clay", [[Geir]] (male given name) -- -- in -eyr, including -r in the stem: -- [[reyr]] "reed", [[Reyr]] (male given name) -- in -eyr, not including -r in the stem: -- [[þeyr]] "thaw, thawing wind", [[Þeyr]] (male given name), [[Freyr]] (male given name) base.decl = "m" end end if not stem then -- There must be at least one vowel (although there don't appear to be any single-syllable -- lemmas ending in -ir other than in -eir). stem, ending = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*)(ir)$") if stem then -- [[læknir]] "physician" and many others -- [[bróðir]], [[faðir]] are r-stems if base.props.rstem then base.decl = "m-rstem" base.need_imut = true else base.decl = "m-ir" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*l)(l)$") if stem then if is_proper_noun(base, stem) and stem:find("kel$") then base.decl = "m-kell" else if not base.stem and (rfind(stem, com.cons_c .. "[aiu]l$") or stem:find("^[aiuAIU]l$")) then -- [[gaffall]] "fork" (dat pl [[göfflum]]), [[þumall]] "thumb"; [[ekkill]] "widower"; -- [[spegill]] "mirror"; [[segull]] "magnet"; [[öxull]] "axis; axle"; etc. Note that the check -- for a consonant preceding the a/i/u is important as there are words like [[manúall]] -- "manual", [[ritúall]] "ritual", [[kokteill]] "cocktail", [[feill]] "flaw, error", [[deill]] -- "dispute???" (rare, regional), [[haull]] "hernia", [[straull]] "? (rare, regional)" that -- don't have contraction. Beware of the rare word [[síill]] "sieve? strainer?" that per BÍN -- does contract to síl- before vowels. Currently the code to handle contraction will throw an -- error if you attempt to contract that word, but you can use 'vstem:...'. -- -- There are also lots of words in a vowel other than a/i/u followed by -ll, such as [[bíll]] -- "car", [[áll]] "eel", [[konsúll]] "consul", [[þræll]] "slave", [[hvoll]] "hill", [[stóll]] -- "chair", etc. In these, the final -l is the nominative singular ending, as above. -- -- Note that if the user overrode the stem (e.g. using '#' as with [[Ármann]]), we don't -- default to contraction as it may cause an error to be thrown. default_props.con = "con" end base.decl = "m" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*n)(n)$") if stem then if not base.stem and (rfind(stem, com.cons_c .. "[aiu]n$") or stem:find("^[aiuAIU]n$")) then -- As with -all/-ill/-ull although there are fewer such words in -nn. Examples: [[aftann]] "evening" -- (dat pl öftnum), [[arinn]] "hearth, fireplace" (dat pl örnum), [[drottinn]] "lord", [[himinn]] -- "sky, heaven", [[morgunn]] "morning", [[jötunn]] "giant", etc. -- -- There are also lots of words in a vowel other than a/i/u followed by -nn, such as [[fleinn]] -- "spear", [[steinn]] "rock", [[prjónn]] "knitting needle", [[daunn]] "stink", [[húnn]] "knob". -- In these, the final -n is the nominative singular ending, as above. -- -- Note that if the user overrode the stem (e.g. using '#' as with [[Ármann]]), we don't default -- to contraction as it may cause an error to be thrown. default_props.con = "con" end base.decl = "m" end end if not stem and not base.props.weak then stem, ending = rmatch(base.lemma, "^(.*[aóæ]nd)(i)$") if stem then -- [[nemandi]] "student" and many others; terms in -jandi like [[byrjandi]] -- "beginner", [[seljandi]] "seller" umlaut to -jend- in the plural instead of -ind- -- also terms in -óndi (probably all compounds of [[bóndi]] "farmer") and in -ændi -- (probably all compounds of [[frændi]]). Terms like [[andi]] "breath, spirit" and -- [[heiðasandi]] "heath sand?" need '.weak' to disable this, as does [[fjandi]] in -- the meaning "devil, demon" (vs. "enemy", which has plural [[fjendur]]). Terms like -- [[vandi]] "trouble; responsibility; custom, habit" and compounds are singular-only. base.decl = "m-ndi" if not stem:find("ænd$") then base.need_imut = true end if stem:find("jand$") then default_props.imutval = "je" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*)([ia])$") if stem then -- [[tími]] "time, hour" and many others; [[herra]] "gentleman" ([[sendiherra]] "ambassador"), -- [[séra]]/[[síra]] "reverend" base.decl = "m-weak" -- Recognize -ingi and make automatically j-infixing, but only when a vowel precedes -- (not [[ingi]], [[Ingi]], [[stingi]], [[þvingi]]). Use `-j` to turn this off. if ending == "i" and rfind(stem, com.vowel_or_hyphen_c .. ".*ing$") then default_props.j = "j" elseif ending == "i" and rfind(stem, com.vowel_or_hyphen_c .. ".*ar$") then default_props.umut = "uUmut" end end end if not stem then stem = rmatch(base.lemma, "^(.*ó)$") if stem then -- [[kanó]] "canoe", [[pesó]] "peso", [[Plútó]] "Pluto", [[Markó]] (male given name), etc. base.decl = "m-ó" end end if not stem then -- Miscellaneous masculine terms without ending stem = base.lemma base.decl = "m" end elseif base.gender == "f" then if not stem then stem, ending = rmatch(base.lemma, "^(.*)(a)$") if stem then base.decl = "f-weak" end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then base.decl = "f-i" end end if not stem and not base.stem then -- Don't match when base.stem is set, e.g. [[gimbur]] "female lamb", where the -ur is part of the stem stem, ending = rmatch(base.lemma, "^(.*[^aA])(ur)$") if stem and rfind(stem, com.vowel_or_hyphen_c) then if is_proper_noun(base, stem) then -- [[Auður]], [[Heiður]], [[Ingveldur]], [[Móeiður]], [[Þórelfur]], [[-frídur]] ([[Gunnfríður]], -- [[Hólmfríður]], [[Málfríður]], [[Sigfríður]]), [[Gerður]] ([[Hallgerður]], [[Ingigerður]], -- [[Þorgerður]]), [[Gunnur]] ([[Arngunnur]], [[Hildigunnur]]), [[Heiður]] ([[Aðalheiður]], -- [[Arnheiður]], [[Brynheiður]], [[Ragnheiður]]), [[Hildur]] ([[Ásthildur]], [[Berghildur]], -- [[Brynhildur]], [[Geirhildur]], [[Gunnhildur]], [[Ragnhildur]], [[Þórhildur]]), [[Ástríður]] -- (related names [[Guðríður]], [[Sigríður]], [[Þuríður]]), [[Þrúður]] [also a man's name] -- ([[Jarþrúður]], [[Jarðþrúður]], [[Sigþrúður]]) -- -- also with company/organization names like [[Berghildur]], [[Gunnhildur]]; likewise place names -- like [[Þuríður]] base.decl = "f-acc-dat-i" else base.decl = "f-ur" end end end if not stem and base.props.rstem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(ir)$") if stem and base.props.rstem then -- [[dóttir]], [[móðir]], [[systir]] base.decl = "f-rstem" if not stem:find("syst$") then base.need_imut = true end end end if not stem then stem = rmatch(base.lemma, "^(.*ung)$") if stem then base.decl = "f-ung" end end if not stem then stem = rmatch(base.lemma, "^(.*ing)$") if stem then base.decl = "f-ing" end end if not stem then stem = rmatch(base.lemma, "^(.*[áóúÁÓÚ])$") if stem then base.decl = "f-long-vowel" if rfind(stem, "[óÓ]$") then base.need_imut = true end end end if not stem and not base.stem then -- Not when base.stem is set, which includes [[Ýr]], following the regular endingless f declension where -- -r is part of the stem. stem, ending = rmatch(base.lemma, "^(.*[ýÝæÆ])(r)$") if stem then -- [[kýr]] "cow", [[sýr]] "sow (archaic)", [[ær]] "ewe" and compounds base.decl = "f-long-umlaut-vowel-r" default_props.unimut = "unimut" end end if not stem then stem = rmatch(base.lemma, "^(.*[^aA]un)$") if stem and rfind(stem, com.vowel_or_hyphen_c) then -- [[pöntun]] "order (in commerce)"; [[verslun]] "trade, business; store, shop"; [[efun]] "doubt"; -- [[bötun]] "improvement"; [[örvun]] "encouragement; stimulation" (pl. örvanir); etc. -- Exclude words in -aun like [[baun]] "bean", [[laun]] "secret", [[raun]] "experience". -- Some words need a different indicator, e.g. [[örvun]] "encouragement; stimulation" (pl. örvanir), -- [[fjölgun]] "increase, proliferation" (pl. fjölganir), which need "unUmut". base.decl = "f" default_props.unumut = "unuUmut" end end if not stem then -- Miscellaneous feminine terms without ending stem = base.lemma base.decl = "f" -- A function here means we resolve it to its actual value later. We don't want to trigger -- unumut if the user specified v-infix or any type of u-mutation (e.g. 'uUmut' in [[ætlan]]), -- or if the last vowel of the term is 'a' ([[dragt]], [[aukavakt]]). default_props.unumut = function(base, props) if base.vstem or props.v and props.v.form == "v" or props.umut or rfind(stem, "[Aa]" .. com.cons_c .. "*$") then return nil else return { form = "unumut", defaulted = true } end end end elseif base.gender == "n" then if not stem then stem, ending = rmatch(base.lemma, "^(.*)(a)$") if stem then base.decl = "n-weak" end end if not stem then -- stem actually includes -é but due to the change to já we include it in the ending stem, ending = rmatch(base.lemma, "^(.*)(é)$") if stem then if base.props["já"] then -- Indicator 'já' for [[tré]], [[hné]]/[[kné]], etc. base.decl = "n-já" else -- [[té]] (letter T), etc. stem = stem .. "é" base.decl = "n" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[kKgG])(i)$") if stem then base.decl = "n-i" default_props.j = "j" end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then base.decl = "n-i" end end if not stem then -- -ur preceded by a consonant and at least one vowel. stem = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*" .. com.cons_c .. "ur)$") if stem then base.decl = "n" default_props.con = "con" default_props.defcon = "defcon" end end if not stem then -- Miscellaneous neuter terms without ending stem = base.lemma base.decl = "n" end else error(("Internal error: `base.gender` is '%s' but should be 'm', 'f' or 'n'"):dump(base.gender)) end if base.stem then -- This isn't necessarily accurate but doesn't really matter. We only record the lemma ending to help with -- contraction of definite clitics in the nominative singular, and in the cases where the user gives an explicit -- stem, it's usually with # (meaning the ending is null) or ## (meaning the ending ends in -r), and in both -- cases there's no contraction of initial vowels in definite clitics in any case. base.lemma_ending = "" else base.stem = stem base.lemma_ending = ending or "" end for k, v in pairs(default_props) do if not base[k] then if control_spec_set[k] then for _, props in ipairs(base.prop_sets) do if type(v) == "function" then props[k] = v(base, props) else props[k] = { form = v, defaulted = true } end end else base[k] = v end end end track("decl/" .. base.decl) end local function determine_default_masc_dat_sg(base, props) -- We only need to compute the default dative singular for regular masculines (not masculines in -ir, -ó, -i, etc.). -- These other types have specific defaults for the entire type. if base.decl ~= "m" or base.number == "pl" then return end local default_dat_sg if base.overrides.dat_s then -- Track explicit override. track("masc-dat-sg-override") end local stem = base.stem if props.j and props.j.form == "j" then -- Stems with j-infix normally have null dative even if they end in two consonants, e.g. -- [[belgur]] "bellows; skin", [[fengur]] "profit", [[flekkur]] "spot, fleck", [[serkur]] -- "shirt", [[stingur]] "sting" default_dat_sg = "" elseif stem:find(com.vowel_or_hyphen_c .. ".*[iu]ng$") then -- Stems in suffix -ing or -ung normally have indef dat -i, def dat null default_dat_sg = { indef = "i", def = "" } elseif stem:find("x$") or (rfind(stem, com.cons_c .. com.cons_c .. "$") and not stem:find("kk$") and not stem:find("pp$")) then -- Other stems in two consonants normally have dat -i, but those in -kk or -pp normally -- don't, so exclude them and require explicit specification default_dat_sg = "i" elseif not rfind(stem, com.vowel_c .. "$") and is_proper_noun(base, stem) then -- proper noun whose stem does not end in a vowel default_dat_sg = "i" elseif props.con and props.con.form == "con" then default_dat_sg = "i" elseif rfind(stem, com.vowel_c .. "r?$") then default_dat_sg = "" elseif base.lemma:find("ll$") then -- nouns in -ll without contraction, which generally includes those not in -all/-ill/-ull plus a few in these -- endings such as [[panill]] "paneling" (rare variant of [[panell]]), [[kórall]] "coral", [[kristall]] -- "crystal", [[kanill]] "cinnamon" (also [[kanell]]); only a few exceptions, such as [[rafall]] "generator", -- which optionally contracts and has with dati/-:i without contraction; [[hvoll]] "hill", [[kokkáll]] -- "cuckold", [[páll]] "spade, pointed shovel", [[þræll]] "slave" with dat-:i/-; [[hóll]] "hill", [[hæll]] -- "heel", [[stóll]] "chair", which are dat-:i[footnote]/- with a footnote variously indicating that the -- dative in -i occurs only in fixed expressions, compounds, place names, etc. default_dat_sg = "" elseif base.lemma:find("nn$") then -- nouns in -nn without contraction, which generally includes those not in -ann/-inn/-unn; there are fewer of -- these than the corresponding nouns in -ll and they have default dative i/i; only exceptions I can find are -- [[húnn]] "knob", [[tónn]] "tone (music)", [[dúnn]] "down (feathers)"", which have dati:-/i. default_dat_sg = "i" elseif base.overrides.def_dat_s and base.definiteness == "def" then -- OK; user supplied def_dat_s override for a definite-only lemma elseif base.overrides.dat_s and base.overrides.dat_s.indef and base.definiteness == "indef" then -- OK; user supplied dat_s override with indefinite setting, for an indefinite-only lemma elseif base.overrides.dat_s and base.overrides.dat_s.indef and base.overrides.def_dat_s then -- OK; user supplied dat_s override with indefinite setting and def_dat_s override, which -- together provide both indefinite and definite values elseif base.overrides.dat_s and not base.overrides.dat_s.def then error(("Saw masculine stem '%s' and dative singular override of just the indefinite ending, but " .. "requires both the indefinite and definite endings of the dative singular in the form 'datINDEF/DEF'"): format(stem)) elseif not base.overrides.dat_s then local exceptions = "exceptions are nouns in -ir, -ó or -i; proper nouns; plural-only nouns; nouns with " .. "stem contraction or j-infix; nouns whose stem ends in two or more consonants, except for -kk and " .. "-pp; and nouns whose stem ends in a vowel or vowel + r" if base.definiteness == "indef" then error(("Saw masculine stem '%s' and no dative override: Most indefinite-only masculine nouns must " .. "explicitly specify the indefinite ending of the dative singular using an override of the form " .. "'datINDEF'; %s"):format(stem, exceptions)) else error(("Saw masculine stem '%s' and no dative override: Most masculine nouns must explicitly specify " .. "the indefinite and definite endings of the dative singular using an override of the form " .. "'datINDEF/DEF'; %s"):format(stem, exceptions)) end end props.default_dat_sg = default_dat_sg end -- Determine the stems and other properties to use for each property set. The list of such properties is given in the -- comment above create_base(), along with the explanation of what a property set is and why we have multiple such -- property sets (generally, one per combination of control specs such as 'con,-con' and 'umut,uUmut'). There are -- currently 9 singular stems and a corresponding 9 plural stems. local function determine_props(base) -- Now determine all the props for each prop set. for _, props in ipairs(base.prop_sets) do -- Determine the default dative singular for masculine nouns using declension "m". determine_default_masc_dat_sg(base, props) -- Almost all nouns have dative plural -um, which triggers u-mutation, so we need to compute the u-mutation -- stem using "umut" if not specifically given. Set `defaulted` so an error isn't triggered if there's no -- special u-mutated form. local props_umut = props.umut if not props_umut and (not props.unumut or props.unumut.form:find("^%-")) then props_umut = { form = "umut", defaulted = true } end -- First do all the stems, handling overall and plural-specific stems separately. for _, prefix in ipairs { "", "pl_" } do local base_stem, base_vstem if prefix == "" then base_stem = base.stem base_vstem = base.vstem else base_stem = base.plstem base_vstem = base.plvstem end -- The plstem is almost never set, so don't do a lot of unnecessary computation. if prefix == "pl_" and not base_stem then break end local stem, nonvstem, umut_nonvstem, imut_nonvstem, vstem, umut_vstem, imut_vstem, null_defvstem, umut_null_defvstem if props.unumut and not props.unumut.form:find("^%-") then umut_nonvstem = base_stem nonvstem = com.apply_reverse_u_mutation(umut_nonvstem, props.unumut.form, not props.unumut.defaulted) stem = nonvstem if base.need_imut then imut_nonvstem = com.apply_i_mutation(nonvstem, base.imutval) end if base_vstem then error(("Don't currently know how to combine '%svstem:' with 'unumut' specs"):format( prefix == "pl_" and "pl" or "")) end if props.con and props.con.form == "con" then umut_vstem = com.apply_contraction(base_stem) else umut_vstem = base_stem end vstem = com.apply_reverse_u_mutation(umut_vstem, props.unumut.form, not props.unumut.defaulted) if base.need_imut then imut_vstem = com.apply_i_mutation(vstem, base.imutval) end local props_unumut_form = props.unumut.form if props.defcon and props.defcon.form == "defcon" then umut_null_defvstem = com.apply_contraction(base_stem) else umut_null_defvstem = base_stem end null_defvstem = com.apply_reverse_u_mutation(umut_null_defvstem, props_unumut_form, not props.unumut.defaulted) elseif props.unimut and not props.unimut.form:find("^%-") then imut_nonvstem = base_stem nonvstem = com.apply_reverse_i_mutation(imut_nonvstem, base.imutval) stem = nonvstem if props_umut then umut_nonvstem = com.apply_u_mutation(nonvstem, props_umut.form, not props_umut.defaulted) end if base_vstem then error(("Don't currently know how to combine '%svstem:' with 'unimut' specs"):format( prefix == "pl_" and "pl" or "")) end if props.con and props.con.form == "con" then imut_vstem = com.apply_contraction(base_stem) else imut_vstem = base_stem end vstem = com.apply_reverse_i_mutation(imut_vstem, base.imutval) if props_umut then umut_vstem = com.apply_u_mutation(vstem, props_umut.form, not props_umut.defaulted) end if props.defcon and props.defcon.form == "defcon" then error("Don't currently know how to combine 'defcon' with 'unimut' specs") end base.need_imut = true elseif props_umut then stem = base_stem nonvstem = stem umut_nonvstem = com.apply_u_mutation(nonvstem, props_umut.form, not props_umut.defaulted) if base.need_imut then imut_nonvstem = com.apply_i_mutation(nonvstem, base.imutval) end vstem = base_vstem or base_stem if props.con and props.con.form == "con" then vstem = com.apply_contraction(vstem) end umut_vstem = com.apply_u_mutation(vstem, props_umut.form, not props_umut.defaulted) if base.need_imut then imut_vstem = com.apply_i_mutation(vstem, base.imutval) end if props.defcon and props.defcon.form == "defcon" then null_defvstem = com.apply_contraction(base_stem) else null_defvstem = base_stem end umut_null_defvstem = com.apply_u_mutation(null_defvstem, props_umut.form, not props_umut.defaulted) else -- Normally u-mutated forms should always be available, unless 'unumut' is in effect. error(("Internal error: Neither 'unumut' or 'umut' specified: %s"):format(dump(props))) end props[prefix .. "stem"] = stem if nonvstem ~= stem then props[prefix .. "nonvstem"] = nonvstem end if umut_nonvstem ~= nonvstem then -- For 'con' and 'defcon' below, footnotes can be placed on -con or -defcon so we have to check for -- those footnotes as well as checking for the vstem and such being different, so the -con and -defcon -- footnotes are still active. However, there's no such thing as -umut, and any time that there's an -- explicit umut variant given, umut_nonvstem will be different from nonvstem (otherwise an error will -- occur in apply_u_mutation), so we don't need this extra check here. if props_umut then umut_nonvstem = iut.combine_form_and_footnotes(umut_nonvstem, props_umut.footnotes) end props[prefix .. "umut_nonvstem"] = umut_nonvstem end if base.need_imut then -- imut footnotes handled specially below props[prefix .. "imut_nonvstem"] = imut_nonvstem end if vstem ~= stem or props.con and props.con.footnotes then -- See comment above for why we need to check for props.con.footnotes (basically, to handle footnotes on -- -con). if props.con then vstem = iut.combine_form_and_footnotes(vstem, props.con.footnotes) end props[prefix .. "vstem"] = vstem end if umut_vstem ~= vstem or props.con and props.con.footnotes then -- See comment above under `umut_nonvstem ~= nonvstem`. There's no -umut so whenever there's a specific -- umut variant with footnote, umut_vstem will be different from vstem so we don't need to check for -- `or props_umut and props_umut.footnotes` above. local footnotes = iut.combine_footnotes(props.con and props.con.footnotes or nil, props_umut and props_umut.footnotes or nil) umut_vstem = iut.combine_form_and_footnotes(umut_vstem, footnotes) props[prefix .. "umut_vstem"] = umut_vstem end if base.need_imut then -- imut footnotes handled specially below props[prefix .. "imut_vstem"] = imut_vstem end if null_defvstem ~= nonvstem or props.defcon and props.defcon.footnotes then -- See comment above for why we need to check for props.defcon.footnotes (basically, to handle footnotes -- on -defcon). if props.defcon then null_defvstem = iut.combine_form_and_footnotes(null_defvstem, props.defcon.footnotes) end props[prefix .. "null_defvstem"] = null_defvstem end if umut_null_defvstem ~= null_defvstem or props.defcon and props.defcon.footnotes then -- Analogous situation to the clause above that checks for `umut_vstem ~= vstem`. local footnotes = iut.combine_footnotes(props.defcon and props.defcon.footnotes or nil, props_umut and props_umut.footnotes or nil) umut_null_defvstem = iut.combine_form_and_footnotes(umut_null_defvstem, footnotes) props[prefix .. "umut_null_defvstem"] = umut_null_defvstem end end -- Do the j-infix, v-infix, imut, unimut and unumut properties. if props.j then props.jinfix = props.j.form == "j" and "j" or "" props.jinfix_footnotes = props.j.footnotes props.j = nil end if props.v then props.vinfix = props.v.form == "v" and "v" or "" props.vinfix_footnotes = props.v.footnotes props.v = nil end if props.imut then props.imut_footnotes = props.imut.footnotes props.imut = props.imut.form == "imut" and true or false end if props.unimut then props.unimut_footnotes = props.unimut.footnotes props.unimut = props.unimut.form == "unimut" and true or false end if props.unumut then props.unumut_footnotes = props.unumut.footnotes props.unumut = props.unumut.form end end end local function detect_indicator_spec(base) base.prop_sets = { {} } if base.adjspec then process_declnumber(base) synthesize_adj_lemma(base) elseif base.props.builtin then determine_builtin_props(base) else -- Replace # and ## in all overridable stems as well as all overrides. for _, stemkey in ipairs(overridable_stems) do base[stemkey] = com.replace_hashvals(base[stemkey], base.lemma) end map_all_overrides(base, function(formobj) formobj.form = com.replace_hashvals(formobj.form, base.lemma) end) expand_property_sets(base) if base.definiteness == "def" then synthesize_indefinite_lemma(base) end if base.number == "pl" then synthesize_singular_lemma(base) end determine_declension(base) determine_props(base) end end local function detect_all_indicator_specs(alternant_multiword_spec) -- Keep track of all genders seen in the singular and plural so we can determine whether to add the term to -- [[:Category:Icelandic nouns that change gender in the plural]]. FIXME: Is this needed for Icelandic? It's copied -- from Czech. alternant_multiword_spec.sg_genders = {} alternant_multiword_spec.pl_genders = {} iut.map_word_specs(alternant_multiword_spec, function(base) detect_indicator_spec(base) if base.number ~= "pl" then alternant_multiword_spec.sg_genders[base.actual_gender] = true end if base.number ~= "sg" then alternant_multiword_spec.pl_genders[base.actual_gender] = true end end) end local propagate_multiword_properties local function propagate_alternant_properties(alternant_spec, property, mixed_value, nouns_only) local seen_property for _, multiword_spec in ipairs(alternant_spec.alternants) do propagate_multiword_properties(multiword_spec, property, mixed_value, nouns_only) if seen_property == nil then seen_property = multiword_spec[property] elseif multiword_spec[property] and seen_property ~= multiword_spec[property] then seen_property = mixed_value end end alternant_spec[property] = seen_property end propagate_multiword_properties = function(multiword_spec, property, mixed_value, nouns_only) local seen_property = nil local last_seen_nounal_pos = 0 local word_specs = multiword_spec.alternant_or_word_specs or multiword_spec.word_specs for i = 1, #word_specs do local is_nounal if word_specs[i].alternants then propagate_alternant_properties(word_specs[i], property, mixed_value) is_nounal = not not word_specs[i][property] elseif nouns_only then is_nounal = is_regular_noun(word_specs[i]) else is_nounal = not not word_specs[i][property] end if is_nounal then if not word_specs[i][property] then error("Internal error: noun-type word spec without " .. property .. " set") end for j = last_seen_nounal_pos + 1, i - 1 do word_specs[j][property] = word_specs[j][property] or word_specs[i][property] end last_seen_nounal_pos = i if seen_property == nil then seen_property = word_specs[i][property] elseif seen_property ~= word_specs[i][property] then seen_property = mixed_value end end end if last_seen_nounal_pos > 0 then for i = last_seen_nounal_pos + 1, #word_specs do word_specs[i][property] = word_specs[i][property] or word_specs[last_seen_nounal_pos][property] end end multiword_spec[property] = seen_property end local function propagate_properties_downward(alternant_multiword_spec, property, default_propval) local function set_and_fetch(obj, default) local retval if obj[property] then retval = obj[property] else obj[property] = default retval = default end if not obj["actual_" .. property] then obj["actual_" .. property] = retval end return retval end local propval1 = set_and_fetch(alternant_multiword_spec, default_propval) for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do local propval2 = set_and_fetch(alternant_or_word_spec, propval1) if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do local propval3 = set_and_fetch(multiword_spec, propval2) for _, word_spec in ipairs(multiword_spec.word_specs) do local propval4 = set_and_fetch(word_spec, propval3) if propval4 == "mixed" then -- FIXME, use clearer error message. error("Attempt to assign mixed " .. property .. " to word") end set_and_fetch(word_spec, propval4) end end else if propval2 == "mixed" then -- FIXME, use clearer error message. error("Attempt to assign mixed " .. property .. " to word") end set_and_fetch(alternant_or_word_spec, propval2) end end end --[=[ Propagate `property` (one of "gender", "number" or "definiteness") from nouns to adjacent adjectives. We proceed as follows: 1. We assume the properties in question are already set on all nouns. This should happen in set_defaults_and_check_bad_indicators(). 2. We first propagate properties upwards and sideways. We recurse downwards from the top. When we encounter a multiword spec, we proceed left to right looking for a noun. When we find a noun, we fetch its property (recursing if the noun is an alternant), and propagate it to any adjectives to its left, up to the next noun to the left. When we have processed the last noun, we also propagate its property value to any adjectives to the right (to handle e.g. [[svefninn langi]] "the long sleep", where the adjective [[langi]] should inherit the 'masculine', 'singular' and 'definite' properties of [[svefninn]]). Finally, we set the property value for the multiword spec itself by combining all the non-nil properties of the individual elements. If all non-nil properties have the same value, the result is that value, otherwise it is `mixed_value` (which is "mixed" for gender, but "both" for number and "bothdef" for definiteness). 3. When we encounter an alternant spec in this process, we recursively process each alternant (which is a multiword spec) using the previous step, and combine any non-nil properties we encounter the same way as for multiword specs. 4. The effect of steps 2 and 3 is to set the property of each alternant and multiword spec based on its children or its neighbors. ]=] local function propagate_properties(alternant_multiword_spec, property, default_propval, mixed_value) propagate_multiword_properties(alternant_multiword_spec, property, mixed_value, "nouns only") propagate_multiword_properties(alternant_multiword_spec, property, mixed_value, false) propagate_properties_downward(alternant_multiword_spec, property, default_propval) end local function determine_noun_status(alternant_multiword_spec) for i, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do if alternant_or_word_spec.alternants then local is_noun = false for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do for j, word_spec in ipairs(multiword_spec.word_specs) do if is_regular_noun(word_spec) then multiword_spec.first_noun = j is_noun = true break end end end if is_noun then alternant_multiword_spec.first_noun = i end elseif is_regular_noun(alternant_or_word_spec) then alternant_multiword_spec.first_noun = i return end end end -- Set the part of speech based on properties of the individual words. local function set_pos(alternant_multiword_spec) if not alternant_multiword_spec.pos then if alternant_multiword_spec.saw_builtin and not alternant_multiword_spec.saw_non_builtin then alternant_multiword_spec.pos = "သဗ္ဗနာမ်" else alternant_multiword_spec.pos = "နာမ်" end end end local function normalize_all_lemmas(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) local lemma = base.orig_lemma_no_links base.actual_lemma = lemma base.lemma = base.decllemma or lemma base.source_template = alternant_multiword_spec.source_template end) end local function decline_noun(base) for _, props in ipairs(base.prop_sets) do if not decls[base.decl] then error("Internal error: Unrecognized declension type '" .. base.decl .. "'") end decls[base.decl](base, props) end handle_derived_slots_and_overrides(base) local function copy(from_slot, to_slot) base.forms["ind_" .. to_slot] = base.forms["ind_" .. from_slot] base.forms["def_" .. to_slot] = base.forms["def_" .. from_slot] end if base.actual_number ~= base.number then local source_num = base.number == "sg" and "_s" or "_p" local dest_num = base.number == "sg" and "_p" or "_s" for _, case in ipairs(cases) do copy(case .. source_num, case .. dest_num) copy("nom" .. source_num .. "_linked", "nom" .. dest_num .. "_linked") end if base.actual_number ~= "both" then local erase_num = base.actual_number == "sg" and "_p" or "_s" for _, case in ipairs(cases) do base.forms["ind_" .. case .. erase_num] = nil base.forms["def_" .. case .. erase_num] = nil end base.forms["ind_nom" .. erase_num .. "_linked"] = nil base.forms["def_nom" .. erase_num .. "_linked"] = nil end end process_addnote_specs(base) end -- Compute the categories to add the noun to, as well as the annotation to display in the -- declension title bar. We combine the code to do these functions as both categories and -- title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec) local all_cats = {} local plpos = require(en_utilities_module).pluralize(alternant_multiword_spec.pos) local function inscat(cattype) m_table.insertIfNot(all_cats, "Icelandic " .. cattype) end local function inscat_noun(cattype) if plpos == "နာမ်" then inscat(cattype) end end if alternant_multiword_spec.saw_indecl and not alternant_multiword_spec.saw_non_indecl then -- inscat("indeclinable " .. plpos) end if alternant_multiword_spec.saw_unknown_decl and not alternant_multiword_spec.saw_non_unknown_decl then -- inscat(plpos .. " with unknown declension") end if alternant_multiword_spec.actual_number == "sg" then -- inscat_noun("uncountable nouns") elseif alternant_multiword_spec.actual_number == "pl" then -- inscat_noun("pluralia tantum") end local annotation local annparts = {} local irregs = {} local genderspecs = {} local stemspecs = {} local scrape_chains = {} local function insann(txt, joiner) if joiner and annparts[1] then table.insert(annparts, joiner) end table.insert(annparts, txt) end local function do_word_spec(base) local actual_gender = gender_code_to_desc[base.actual_gender] local declined_gender = gender_code_to_desc[base.gender] local gender if actual_gender ~= declined_gender then gender = ("%s (declined as %s)"):format(actual_gender, declined_gender) inscat_noun("nouns with actual gender different from declined gender") else gender = actual_gender end if gender then m_table.insertIfNot(genderspecs, gender) end for _, props in ipairs(base.prop_sets) do -- User-specified 'decllemma:' indicates irregular stem. if base.decllemma then m_table.insertIfNot(irregs, "irreg-stem") -- inscat_noun("nouns with irregular stem") end m_table.insertIfNot(stemspecs, props.stem) end end local key_entry = alternant_multiword_spec.first_noun or 1 if #alternant_multiword_spec.alternant_or_word_specs >= key_entry then local alternant_or_word_spec = alternant_multiword_spec.alternant_or_word_specs[key_entry] if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do key_entry = multiword_spec.first_noun or 1 if #multiword_spec.word_specs >= key_entry then do_word_spec(multiword_spec.word_specs[key_entry]) end end else do_word_spec(alternant_or_word_spec) end end iut.map_word_specs(alternant_multiword_spec, function(base) if base.scrape_chain[1] then local linked_scrape_chain = {} for _, element in ipairs(base.scrape_chain) do table.insert(linked_scrape_chain, ("[[%s]]"):format(element)) end m_table.insertIfNot(scrape_chains, table.concat(linked_scrape_chain, " -> ")) end end) if alternant_multiword_spec.actual_number == "sg" or alternant_multiword_spec.actual_number == "pl" then -- not "both" or "none" (for [[sebe]]) insann(alternant_multiword_spec.actual_number .. "-only", " ") end if #genderspecs > 0 then insann(table.concat(genderspecs, " // "), " ") end if #irregs > 0 then insann(table.concat(irregs, " // "), " ") end if #scrape_chains > 0 then insann(("based on %s"):format(m_table.serialCommaJoin(scrape_chains)), ", ") -- inscat(plpos .. " declined using scraped base declensions") end alternant_multiword_spec.annotation = table.concat(annparts) if #stemspecs > 1 then -- inscat_noun("nouns with multiple stems") end if alternant_multiword_spec.actual_number == "both" and not m_table.deepEquals(alternant_multiword_spec.sg_genders, alternant_multiword_spec.pl_genders) then -- inscat_noun("nouns that change gender in the plural") end alternant_multiword_spec.categories = all_cats end local function show_forms(alternant_multiword_spec) local lemmas = {} local max_num_words = 1 for _, slot in ipairs(potential_lemma_slots) do if alternant_multiword_spec.forms[slot] then for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do table.insert(lemmas, formobj) local no_affix_form = formobj.form:gsub("^%-", ""):gsub("%-$", "") local num_words = #(rsplit(no_affix_form, "[ -]+")) max_num_words = math.max(max_num_words, num_words) end break end end alternant_multiword_spec.max_num_words = max_num_words local props = { lemmas = lemmas, slot_list = alternant_multiword_spec.noun_slots, lang = lang, } iut.show_forms(alternant_multiword_spec.forms, props) end local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms local frame = mw.getCurrentFrame() local function template_prelude() return frame:expandTemplate { title = 'inflection-table-top', args = { title = '{title}{annotation}', palette = 'blue', tall = 'yes', } } end local function template_postlude() return frame:expandTemplate { title = 'inflection-table-bottom', args = { notes = '{footnote}', } } end local table_spec_both = template_prelude() .. [=[ ! rowspan="2" | ! colspan="2" | singular ! colspan="2" | plural |- ! class="secondary" | indefinite ! class="secondary" | definite ! class="secondary" | indefinite ! class="secondary" | definite |- ! nominative | {ind_nom_s} | {def_nom_s} | {ind_nom_p} | {def_nom_p} |- ! accusative | {ind_acc_s} | {def_acc_s} | {ind_acc_p} | {def_acc_p} |- ! dative | {ind_dat_s} | {def_dat_s} | {ind_dat_p} | {def_dat_p} |- ! genitive | {ind_gen_s} | {def_gen_s} | {ind_gen_p} | {def_gen_p} ]=] .. template_postlude() local function get_table_spec_one_number(number, numcode) local table_spec_one_number = [=[ ! rowspan="2" | ! colspan="2" | NUMBER |- ! class="secondary" | indefinite ! class="secondary" | definite |- ! nominative | {ind_nom_NUM} | {def_nom_NUM} |- ! accusative | {ind_acc_NUM} | {def_acc_NUM} |- ! dative | {ind_dat_NUM} | {def_dat_NUM} |- ! genitive | {ind_gen_NUM} | {def_gen_NUM} ]=] return template_prelude() .. table_spec_one_number:gsub("NUMBER", number):gsub("NUM", numcode) .. template_postlude() end local function get_table_spec_one_number_one_def(number, numcode, definiteness, defcode) local table_spec_one_number_one_def = [=[ ! colspan="2" | DEFINITENESS NUMBER |- ! nominative | {DEF_nom_NUM} |- ! accusative | {DEF_acc_NUM} |- ! dative | {DEF_dat_NUM} |- ! genitive | {DEF_gen_NUM} ]=] return template_prelude() .. (table_spec_one_number_one_def:gsub("NUMBER", number):gsub("NUM", numcode) :gsub("DEFINITENESS", definiteness):gsub("DEF", defcode)) .. template_postlude() end if alternant_multiword_spec.title then forms.title = alternant_multiword_spec.title else forms.title = 'Declension of <i lang="is">' .. forms.lemma .. '</i>' end local annotation = alternant_multiword_spec.annotation if annotation == "" then forms.annotation = "" else forms.annotation = " (<span style=\"font-size: smaller;\">" .. annotation .. "</span>)" end local number, numcode if alternant_multiword_spec.actual_number == "sg" then number, numcode = "singular", "s" elseif alternant_multiword_spec.actual_number == "pl" then number, numcode = "plural", "p" elseif alternant_multiword_spec.actual_number == "none" then -- used for [[sebe]] -- FIXME: Update for Icelandic number, numcode = "", "s" end local definiteness, defcode if alternant_multiword_spec.definiteness == "indef" then definiteness, defcode = "indefinite", "ind" elseif alternant_multiword_spec.definiteness == "def" then definiteness, defcode = "definite", "def" elseif alternant_multiword_spec.definiteness == "none" then definiteness, defcode = "", "ind" end local table_spec = alternant_multiword_spec.actual_number ~= "both" and alternant_multiword_spec.definiteness ~= "bothdef" and get_table_spec_one_number_one_def(number, numcode, definiteness, defcode) or alternant_multiword_spec.actual_number == "both" and table_spec_both or get_table_spec_one_number(number, numcode) return m_string_utilities.format(table_spec, forms) end local function compute_headword_genders(alternant_multiword_spec) local genders = {} local number if alternant_multiword_spec.actual_number == "pl" then number = "-p" else number = "" end iut.map_word_specs(alternant_multiword_spec, function(base) if base.actual_gender ~= "none" then m_table.insertIfNot(genders, base.actual_gender .. number) end end) return genders end -- Externally callable function to parse and decline a noun given user-specified arguments and the argument spec -- `argspec` (specified because the user may give multiple such specs). Return value is ALTERNANT_MULTIWORD_SPEC, an -- object where the declined forms are in `ALTERNANT_MULTIWORD_SPEC.forms` for each slot. If there are no values for a -- slot, the slot key will be missing. The value for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(args, argspec, source_template) local from_headword = source_template == "is-noun" or source_template == "is-proper noun" local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local parse_props = { parse_indicator_spec = function(angle_bracket_spec, lemma) return parse_indicator_spec(angle_bracket_spec, lemma, pagename) end, angle_brackets_omittable = true, allow_blank_lemma = true, } local alternant_multiword_spec = iut.parse_inflected_text(argspec, parse_props) alternant_multiword_spec.title = args.title alternant_multiword_spec.pos = args.pos alternant_multiword_spec.args = args alternant_multiword_spec.source_template = source_template local scrape_errors = {} iut.map_word_specs(alternant_multiword_spec, function(base) if base.scrape_error then table.insert(scrape_errors, base.scrape_error) end end) if scrape_errors[1] then alternant_multiword_spec.scrape_errors = scrape_errors else normalize_all_lemmas(alternant_multiword_spec) set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) -- These need to happen before detect_all_indicator_specs() so that adjectives get their genders and number -- set appropriately, which are needed to correctly synthesize the adjective lemma. propagate_properties(alternant_multiword_spec, "number", "both", "both") -- FIXME, the default value (third param) used to be 'm' with a comment indicating that this applied only to -- plural adjectives, where it didn't matter; but in Icelandic, plural adjectives are distinguished for gender. -- Make sure 'mixed' works. propagate_properties(alternant_multiword_spec, "gender", "mixed", "mixed") propagate_properties(alternant_multiword_spec, "definiteness", "bothdef", "bothdef") detect_all_indicator_specs(alternant_multiword_spec) -- Propagate 'actual_number' after calling detect_all_indicator_specs(), which sets 'actual_number' for -- adjectives. propagate_properties(alternant_multiword_spec, "actual_number", "both", "both") determine_noun_status(alternant_multiword_spec) set_pos(alternant_multiword_spec) alternant_multiword_spec.noun_slots = get_noun_slots(alternant_multiword_spec) local inflect_props = { skip_slot = function(slot) return skip_slot(alternant_multiword_spec.actual_number, alternant_multiword_spec.definiteness, slot) end, slot_list = alternant_multiword_spec.noun_slots, inflect_word_spec = decline_noun, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) compute_categories_and_annotation(alternant_multiword_spec) alternant_multiword_spec.genders = compute_headword_genders(alternant_multiword_spec) end if args.json then alternant_multiword_spec.args = nil return require("Module:JSON").toJSON(alternant_multiword_spec) end return alternant_multiword_spec end -- Entry point for {{is-ndecl}}. Template-callable function to parse and decline a noun given -- user-specified arguments and generate a displayable table of the declined forms. function export.show(frame) local parent_args = frame:getParent().args local params = { [1] = { required = true, list = true, default = "akur<m.#>" }, deriv = { list = true }, id = {}, pos = {}, title = {}, pagename = {}, json = { type = "boolean" }, } local args = m_para.process(parent_args, params) local alternant_multiword_specs = {} for i, argspec in ipairs(args[1]) do alternant_multiword_specs[i] = export.do_generate_forms(args, argspec, "is-ndecl") end if args.json then -- JSON return value if #args[1] == 1 then return alternant_multiword_specs[1] else return alternant_multiword_specs end end local parts = {} local function ins(txt) table.insert(parts, txt) end for _, alternant_multiword_spec in ipairs(alternant_multiword_specs) do if not alternant_multiword_spec.scrape_errors then show_forms(alternant_multiword_spec) end if alternant_multiword_spec.header then ins(("'''%s:'''\n"):format(alternant_multiword_spec.header)) end if alternant_multiword_spec.q then ins(("''%s''\n"):format(alternant_multiword_spec.q)) end local categories if alternant_multiword_spec.scrape_errors then local errmsgs = {} for _, scrape_error in ipairs(alternant_multiword_spec.scrape_errors) do table.insert(errmsgs, '<span style="font-weight: bold; color: var(--wikt-palette-red,#CC2200);">' .. scrape_error .. "</span>") end -- Surround the messages with a <div> because the table normally does that, and we want to ensure -- similar formatting with respect to newlines. ins("<div>" .. table.concat(errmsgs, "<br />") .. "</div>") categories = { "Icelandic scraping errors in Template:is-ndecl" } else ins(make_table(alternant_multiword_spec)) categories = alternant_multiword_spec.categories end ins(require("Module:utilities").format_categories(categories, lang, nil, nil, force_cat)) end return table.concat(parts) end return export ronyhf5nndaetugwqg8mr1fhheuh9el 393766 393753 2026-05-01T18:11:26Z 咽頭べさ 33 393766 Scribunto text/plain local export = {} --[=[ Authorship: Ben Wing <benwing2> ]=] --[=[ TERMINOLOGY: -- "slot" = A particular combination of case/number. Example slot names for nouns are "acc_s" (accusative singular) and "gen_p" (genitive plural). Each slot is filled with zero or more forms. -- "form" = The declined Icelandic form representing the value of a given slot. -- "lemma" = The dictionary form of a given Icelandic term. Generally the nominative singular, or nominative plural of plural-only nouns, but may occasionally be another form if the nominative is missing. ]=] --[=[ FIXME: 1. Support 'plstem' overrides. [DONE] 2. Support definite lemmas such as [[Bandaríkin]] "the United States". [DONE] 3. Support adjectivally-declined terms. [DONE PARTIALLY] 4. Support @ for built-in irregular lemmas. [DONE; SINCE REPLACED WITH SCRAPING SPECS] 5. Somehow if the user specifies v-infix, it should prevent default unumut from happening in strong feminines. [DONE] 6. Def acc pl should ignore -u ending in indef acc pl. [DONE] 7. Footnotes on omitted forms should be possible. 8. Remove setting of override on pl when processing plural-only terms in synthesize_singular_lemma(); interferes with decllemma in [[dyr]]. But then need to fix handling of masculine accusative plural. [DONE] 9. Rationalize conventions used in u-mutation types. [DONE] 10. Compute defaulted number and definiteness early so it's usable when merging built-in and user-specified specs. [DONE] 11. Support multiple declension specs. [DONE] 12. Support dark mode. [DONE] 13. Support scraping declension specs. [DONE] 14. Support @-d etc. for suffix scraping. [DONE] 15. Include scraped base nouns in title annotation. [DONE] 16. Support @@ for self-scraping. [DONE IN [[Module:gmq-headword]]] 17. Support scraping multiple declension specs; e.g. [[fræði]] is declared with 'n.pl|f.sg' and [[hljómfræði]] would like to use '@f' but you get an error. ]=] local lang = require("Module:languages").getByCode("is") local require_when_needed = require("Module:require when needed") local m_table = require("Module:table") local m_links = require("Module:links") local m_string_utilities = require("Module:string utilities") local iut = require("Module:inflection utilities") local put = require("Module:parse utilities") local m_para = require("Module:parameters") local com = require("Module:is-common") local m_is_adjective = require_when_needed("Module:is-adjective") local en_utilities_module = "Module:en-utilities" local u = mw.ustring.char local rsplit = mw.text.split local rfind = mw.ustring.find local rmatch = mw.ustring.match local rsubn = mw.ustring.gsub local ulen = mw.ustring.len local usub = mw.ustring.sub local uupper = mw.ustring.upper local ulower = mw.ustring.lower local dump = mw.dumpObject local force_cat = false -- set to true to make categories appear in non-mainspace pages, for testing local SUB_ESCAPED_PERIOD = u(0xFFF0) local SUB_ESCAPED_COMMA = u(0xFFF1) -- version of rsubn() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end -- version of rsubn() that returns a 2nd argument boolean indicating whether -- a substitution was made. local function rsubb(term, foo, bar) local retval, nsubs = rsubn(term, foo, bar) return retval, nsubs > 0 end local function track(track_id) require("Module:debug/track")("is-noun/" .. track_id) return true end local potential_lemma_slots = { "ind_nom_s", "ind_nom_p", "def_nom_s", "def_nom_p", "ind_acc_s", -- for [[sig]] } local cases = { "nom", "acc", "dat", "gen", } local case_set = m_table.listToSet(cases) local overridable_stems = { "stem", "vstem", "plstem", "plvstem", "imutval", } local overridable_stem_set = m_table.listToSet(overridable_stems) local control_specs = { "umut", "imut", "unumut", "unimut", "con", "defcon", "j", "v", } local control_spec_set = m_table.listToSet(control_specs) local clitic_articles = { m = { nom_s = "inn", acc_s = "inn", dat_s = "num", gen_s = "ins", nom_p = "nir", acc_p = "na", dat_p = "num", gen_p = "nna", }, f = { nom_s = "in", acc_s = "ina", dat_s = "inni", gen_s = "innar", nom_p = "nar", acc_p = "nar", dat_p = "num", gen_p = "nna", }, n = { nom_s = "ið", acc_s = "ið", dat_s = "nu", gen_s = "ins", nom_p = "in", acc_p = "in", dat_p = "num", gen_p = "nna", }, } local gender_code_to_desc = { m = "masculine", f = "feminine", n = "neuter", none = nil, } local number_code_to_desc = { sg = "singular", pl = "plural", both = "both numbers", none = nil, } local definiteness_code_to_desc = { indef = "indefinite-only", def = "definite-only", bothdef = "indefinite and definite", none = nil, } local function get_noun_slots(alternant_multiword_spec) local noun_slots_list = {} for _, case in ipairs(cases) do for _, num in ipairs { "s", "p" } do for _, def in ipairs { "ind", "def" } do local slot = ("%s_%s_%s"):format(def, case, num) local accel = ("%s|%s"):format(def == "ind" and "indef" or def, case) if alternant_multiword_spec.actual_number == "both" then accel = accel .. "|" .. num end table.insert(noun_slots_list, { slot, accel }) end end end for _, potential_lemma_slot in ipairs(potential_lemma_slots) do table.insert(noun_slots_list, { potential_lemma_slot .. "_linked", "-" }) end return noun_slots_list end local function generate_list_of_possibilities_for_err(list) local quoted_list = {} for _, item in pairs(list) do if item == "" then item = "<nowiki />" end table.insert(quoted_list, "'" .. item .. "'") end table.sort(quoted_list) return mw.text.listToText(quoted_list) end local function skip_slot(number, definiteness, slot) return number == "sg" and slot:find("_p$") or number == "pl" and slot:find("_s$") or definiteness == "def" and slot:find("^ind_") or (definiteness == "indef" or definiteness == "none") and slot:find("^def_") end --[=[ Create an empty `base` object for holding the result of parsing and later the generated forms. The object is of the form { -- Original lemma as directly given by the user or taken from the pagename. orig_lemma = "ORIGINAL-LEMMA", -- Same as `orig_lemma` but with links removed. orig_lemma_no_links = "ORIGINAL-LEMMA-NO-LINKS", -- Originally the same as `orig_lemma_no_links`, but if the term is a plural-only noun, this will be the corresponding -- singular lemma, and if the term is an adjective form, this will be the corresponding lemma (strong nominative -- masculine singular form). lemma = "LEMMA", -- Generated per-slot forms. After calling `inflect_multiword_or_alternant_multiword_spec`, the forms will be filled -- in with the format as given below, where the value of each slot is a form object. After calling `show_forms`, the -- value of each slot will be a formatted string listing all of the forms of that slot, or "—" if there are none. forms = { SLOT = { { form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, }, ... }, ... }, -- Specs for control groups as specified by the user. CONTROL_GROUP is as below and CONTROL_SPEC is -- {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, defaulted = BOOLEAN}, where FORM is as specified -- by the user (e.g. "uUmut", "-unumut") or set as a default by the code (in which case `defaulted` will be set to -- true for control groups "umut" and "unumut"). The control groups are as follows: -- * umut (u-mutation); -- * imut (i-mutation); -- * unumut (reverse u-mutation); -- * unimut (reverse i-mutation); -- * con (stem contraction before vowel-initial endings); -- * defcon (stem contraction before vowel-initial definite clitics when the ending itself is null); -- * j (j-infix before vowel-initial endings not beginning with an i); -- * v (v-infix before vowel-initial endings). CONTROL_GROUP = { CONTROL_SPEC, CONTROL_SPEC, ... }, -- Property sets containing computed stems, one per each combination of control group values. Described in more detail -- below. prop_sets = { PROPSET, -- see below ..., }, -- Per-slot overrides, which override forms generated by the auto-determined or specified declension pattern. SLOT is -- the actual name of the slot, normally without the definiteness prefix, such as "dat_s" (NOT the slot name as -- specified by the user, which would be just "dat" for "dat_s") and OVERRIDE is of the form -- {indef = {FORMOBJ, FORMOBJ, ...}, def = nil or false or {FORMOBJ, FORMOBJ, ...}}, where FORMOBJ is of the form -- {form = FORM, footnotes = FOOTNOTES} as in the `forms` table ("-" means to suppress the slot entirely and is -- signaled by "--" as the user-specified form value; normally FORM values are endings, but a value preceded by ! -- means it's a full form rather than an ending; in such forms you can use # to indicate the lemma and ## to indicate -- the lemma minus -ur or -r, as with stems); `indef` means the override(s) of the indefinite variant of the slot and -- is specified by the user before a slash; `def` means the override(s) of the definite variant of the slot and come -- after a slash, and `false` for either means that the user left the value before or after the slash completely -- blank, meaning not to override the indefinite or definite forms. Sometimes the slot itself has def_ in it; this -- happens when the user preceded the slot spec by 'def', e.g. 'defdat' or 'defgenpl'. overrides = { SLOT = OVERRIDE, SLOT = OVERRIDE, ... }, -- Overrides for the genitive singular, specified after a comma after the gender. OVERRIDE is in the same format as -- above. gens = nil or OVERRIDE, -- Overrides for the nominative and accusative plural, specified after a comma after the gender. OVERRIDE is in the -- same format as above. The actual values given are for the nominative plural, and the accusative plural is derived -- automatically from these values. pls = nil or OVERRIDE, -- "sg", "pl", "both" or "none" (for certain pronouns); may be missing and if so is defaulted number = "NUMBER", -- "m", "f", "n" or "none" (for certain pronouns); always specified by the user gender = "GENDER", -- "def", "indef", "bothdef" or "none" (for pronouns); may be missing and if so is defaulted definiteness = "DEFINITENESS", -- decline like the specified lemma decllemma = nil or "DECLLEMMA", -- decline like the specified gender declgender = nil or "DECLGENDER", -- decline like the specified number declnumber = nil or "DECLNUMBER", -- override the stem; may have # (= lemma) or ## (= lemma minus -ur or -r) stem = nil or "STEM", -- override the stem used before vowel-initial endings; same format as `stem` vstem = nil or "STEM", -- override the plural stem; same format as `stem` plstem = nil or "STEM", -- override the plural stem used before vowel-initial endings; same format as `stem` plvstem = nil or "STEM", -- decline like an adjective; will be present if the user gave a spec starting with 'adj' adjspec = { -- User explicitly specified the lemma using a colon + lemma. lemma = nil or LEMMA -- User gave a one-part or two-part substitution spec such as 'tvöfalt<adj/dur>' or 'ryðfrítt<adj/tt/r>'. subspec = nil or { from = nil or FROM, to = TO, }, }, -- misc Boolean properties: -- * "proper" (a lowercase noun that behaves like a proper noun, i.e. defaults to no plural or definite forms); -- * "common" (a capitalized noun that behaves like a common noun, i.e. defaults to plural and definite forms); -- * "dem" (a demonym, i.e. a capitalized noun such as [[Svisslendingur]] "Swiss person" that behaves like a common -- noun; currently behaves like "common"); -- * "builtin" (for built-in terms such as pronouns); -- * "indecl" (noun is indeclinable); -- * "decl?" (declension is unknown); -- * "iending" (a definite-only noun whose lemma ends in -i, which is elided before a definite clitic beginning with -- i-); -- * "rstem" (an r-stem like [[bróðir]] "brother" or [[dóttir]] "daughter"); -- * "já" (a neuter in -é whose stem alternates with -já, such as [[tré]] "tree" and [[hné]]/[[kné]] "knee"); -- * "weak" (the noun should decline like an ordinary weak noun; used in the declension of [[fjandi]] to disable the -- special -ndi declension); -- * "linkasis" (when linking definite-only and plural-only lemmas in the headword, link as-is instead of -- linking the singular indefinite version); props = { PROP = true, PROP = true, ... }, -- Alternant-level footnotes, specified using `.[footnote]`, i.e. a footnote by itself. footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- ADDNOTE_SPEC is {slot_specs = {"SPEC", "SPEC", ...}, footnotes = {"FOOTNOTE", "FOOTNOTE", ...}}; SPEC is a Lua -- pattern matching slots (anchored on both sides) and FOOTNOTE is a footnote to add to those slots. addnote_specs = { ADDNOTE_SPEC, ADDNOTE_SPEC, ... }, } There is one PROPSET (property set) for each combination of control specs; in the lower limit, there is a single property set. There may be more than one property set e.g. if the user specified 'umut,uUmut' or '-j,j' or '-imut,imut' or some combination of these. The properties in a given property set specify the values themselves of each control group, as well as stems (derived from the control specs) that are used to construct the various forms and populate the slots in `forms` with these values. The information found in the property sets cannot be stored in `base` because it depends on a particular combination of control specs, of which there may be more than one (see above). The decline_noun() function iterates over all property sets and calls the appropriate declension function on each one in turn, which adds forms to each slot in `base.forms`, automatically deduplicating. The properties in each property set are: * Control specs: These are copied from the control specs at the base level. The key is one of the possible control groups ("umut", "imut", "con", etc.), but the value is a single form object {form = "FORM", footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}}. These are set by expand_property_sets(). * Stems (each stem is either a string or a form object; stems in general may be missing, i.e. nil, unless otherwise specified, and default to more general variants): ** `stem`: The basic stem. Always set. May be overridden by more specific variants. ** `nonvstem`: The stem used when the ending is null or starts with a consonant, unless overridden by a more specific variant. Defaults to `stem`. Not currently used, but could be if e.g. a user stem override `nonvstem:...` were supported. ** `umut_nonvstem`: The stem used when the ending is null or starts with a consonant and u-mutation is in effect, unless overridden by a more specific variant. Defaults to `nonvstem`. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `nonvstem` is missing, because there is no generic `umut_stem`.) ** `imut_nonvstem`: The stem used when the ending is null or starts with a consonant and i-mutation is in effect. If i-mutation is in effect, this should always be specified (otherwise an internal error will occur); hence it has no default. Note that i-mutation is only in effect when either (a) `imut` or `unimut` was specified; (b) a user-specified override is given that begins with a single ^ (indicating i-mutation); or (c) a declension type is in effect that contains default endings beginning with a single ^ (examples are `f-long-vowel` for lemmas in -ó and `f-long-umlaut-vowel-r`). Note also that this will be present even if `nonvstem` is missing, because there is no generic `imut_stem`. ** `vstem`: The stem used when the ending starts with a vowel, unless overridden by a more specific variant. Defaults to `stem`. Will be specified when contraction is in effect or the user specified `vstem:...`. ** `umut_vstem`: The stem(s) used when the ending starts with a vowel and u-mutation is in effect. Defaults to `vstem`. Note that u-mutation applies to the contracted stem if both u-mutation and contraction are in effect. Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. (In this case, it will be present even if `vstem` is missing, because there is no generic `umut_stem`.) ** `imut_vstem`: The stem(s) used when the ending starts with a vowel and i-mutation is in effect. If i-mutation is in effect, this should always be specified (otherwise an internal error will occur); hence it has no default. Note that i-mutation applies to the contracted stem if both i-mutation and contraction are in effect. See `imut_nonvstem` for comments on when this stem will be present. ** `null_defvstem`: The stem(s) used when the ending is null and is followed by a definite ending that begins with a vowel, unless overridden by a more specific variant. Defaults to `nonvstem`. This is normally set when `defcon` is specified. ** `umut_null_defvstem`: The stem(s) used when the ending is null and is followed by a definite ending that begins with a vowel, and u-mutation is in effect. Defaults to `null_defvstem`. This is normally set when `defcon` is specified and u-mutation is needed, as in the nom/acc pl of neuter [[mastur]] "mast". Will only be present when the result of u-mutation is different from the stem to which u-mutation is applied. ** `pl_stem`: The basic stem used for plural inflections. Only set when `plstem:...` is specified by the user. If this is set, the alternative plural-specific stem variants are used, where each of the above stems has a plural-specific counterpart, and the identical algorithms and fallbacks are used to determine the correct stem. ** `pl_nonvstem`, `pl_umut_nonvstem`, `pl_imut_nonvstem`, `pl_vstem`, `pl_umut_vstem`, `pl_imut_vstem`, `pl_null_defvstem`, `pl_umut_null_defvstem`: Plural-specific counterparts of the above stems. See the comment under `pl_stem` for when these are used. * Other properties: ** `jinfix`: If present, either "" or "j". Inserted between the stem and ending when the ending begins with a vowel other than "i". Note that j-infixes don't apply to ending overrides. ** `jinfix_footnotes`: Footnotes to attach to forms where j-infixing is possible (even if it's not present). ** `vinfix`: If present, either "" or "v". Inserted between the stem and ending when the ending begins with a vowel. Note that v-infixes don't apply to ending overrides. `jinfix` and `vinfix` cannot both be specified. ** `vinfix_footnotes`: Footnotes to attach to forms where v-infixing is possible (even if it's not present). ** `imut`: If specified (i.e. not nil), either true or false. If specified, there may be associated footnotes in `imut_footnotes`. If true, i-mutation and associated footnotes are in effect before endings starting with "i". If false, associated footnotes still apply before endings starting with "i". Note that i-mutation is also in effect if the ending has ^ prepended, but the associated footnotes don't apply here. ** `imut_footnotes`: See `imut`. ** `unumut`: If specified (i.e. not nil), the type of un-u-mutation requested (either "unumut" or a variant, or the negation of the same using "-unumut" or a variant for no un-u-mutation; "unumut" and variants differ in which slots any associated footnote are placed). If specified, there may be associated footnotes in `unumut_footnotes`. If "unumut" itself, u-mutation is in effect *except* before an ending that starts with an "a" or "i" (unless i-mutation is in effect, which takes precedence). If any other variant, the rules are different: when masculine, u-mutation is in effect *except* in the gen sg and pl (examples are [[söfnuður]] "congregation" and [[mánuður]] "month"); when feminine, u-mutation is in effect except in the nom/acc/gen pl (examples are [[verslun]] "trade, business; store, shop" and [[kvörtun]] "complaint"). When u-mutation is *not* in effect, and i-mutation is also not in effect, the associated footnotes in `unumut_footnotes` apply. If `unumut` is "-unumut" or a variant, there is no un-u-mutation (i.e. there are no special u-mutated stems, and the basic stems, which typically have u-mutation built into them, apply throughout), but the associated footnotes in `unumut_footnotes` still apply in the same circumstances where they would apply if `unumut` were the non-negated counterpart. ** `unumut_footnotes`: See `unumut`. ** `unimut`: If specified (i.e. not nil), either true or false. If specified, there may be associated footnotes in `unimut_footnotes`. If true, i-mutation is in effect *except* in certain case/num combinations that depend on the gender. Specifically: (1) for masculine nouns e.g. [[ketill]] "kettle" and proper names [[Egill]] and [[Ketill]], i-mutation does not apply in the dat sg and throughout the plural; (2) for feminine nouns e.g. [[kýr]] "cow", [[sýr]] "sow (archaic)" and [[ær]] "ewe", i-mutation does not apply in the acc and dat sg and in the dat and gen pl. Cf. also feminine pl-only [[hættur]] "bedtime, quitting time" and [[mætur]] "appreciation, liking", which use 'unimut' to get e.g. dat pl [[háttum]] and gen pl [[hátta]]; but these are handled by synthesizing a singular without i-mutation in the lemma. Very similar are neuter pl [[læti]] "behavior, demeanor" and [[ólæti]] "noise, racket", with e.g. dat pl [[látum]] and gen pl [[láta]], which are handled in the same way. When i-mutation is *not* in effect, the associated footnotes in `unimut_footnotes` apply. If false, the associated footnotes in `unimut_footnotes` still apply in the same circumstances where they would apply if `unimut` where true. ** `unimut_footnotes`: See `unimut`. ]=] local function create_base() return { forms = {}, overrides = {}, props = {}, addnote_specs = {}, } end -- Return true if `stem` refers to a proper noun (first character is uppercase, second character is lowercase). local function is_proper_noun(base, stem) if base.props.common or base.props.dem then return false end if base.props.proper then return true end if base.source_template == "is-noun" then return false end if base.source_template == "is-proper noun" then return true end local first_letter = usub(stem, 1, 1) local second_letter = usub(stem, 2, 2) return ulower(first_letter) ~= first_letter and ((not second_letter or second_letter == "") or uupper(second_letter) ~= second_letter) end --[=[ Basic function to combine stem(s) and other properties with ending(s) and insert the result into the appropriate slot. `base` is the object describing all the properties of the word being inflected for a single alternant (in case there are multiple alternants specified using `((...))`). `slot_prefix` is either "ind_" or "def_" and is prefixed to the slot value in `slot` to get the actual slot to add the resulting forms to. (`slot_prefix` is separated out because the code below frequently needs to conditionalize on the value of `slot` and should not have to worry about the definite and indefinite slot variants). `props` is a property set object containing computed stems and other information (such as whether i-mutation is active) about a particular combination of control specs. See the comment above create_base() for more information. The information found in `props` cannot be stored in `base` because there may be more than one set of such properties per `base` (e.g. if the user specified 'umut,uUmut' or '-j,j' or '-imut,imut' or some combination of these; in such a case, the caller will iterate over all possible combinations, and ultimately invoke add() multiple times, one per combination). `endings` is the ending or endings added to the appropriate stem (after any j or v infix) to get the form(s) to add to the slot. Its value can be a single string, a list of strings, or a list of form objects (i.e. in general list form). `clitics` is the clitic or clitics to add after the endings to form the actual form value inserted into definite slots; it should be nil for indefinite slots. Its format is the same as for `endings`. `ending_override`, if true, indicates that the ending(s) supplied in `endings` come from a user-specified override, and hence j and v infixes should not be added as they are already included in the override if needed. `endings_are_full`, if true, indicates that the supplied ending(s) are actually full words and a null stem should be used. ]=] local function add_slotval(base, slot_prefix, slot, props, endings, clitics, ending_override, endings_are_full) if not endings then return end -- Call skip_slot() based on the declined number and definiteness; if the actual number is different, we correct -- this in decline_noun() at the end. if skip_slot(base.number, base.definiteness, slot) then return end if not clitics then clitics = { "" } elseif type(clitics) == "string" then clitics = { clitics } end if type(endings) == "string" then endings = { endings } end -- Loop over each ending and clitic. for _, endingobj in ipairs(endings) do for _, cliticobj in ipairs(clitics) do -- Do the following inside of the innermost loop even though it does not depend on the value of `cliticobj`, -- because that way we are free to mutate `ending` below. local ending, ending_footnotes if type(endingobj) == "string" then ending = endingobj else ending = endingobj.form ending_footnotes = endingobj.footnotes end -- Ending of "-" means the user used -- to indicate there should be no form here. if ending == "-" then return end local function interr(msg) error(("Internal error: For lemma '%s', slot '%s%s', ending '%s', %s: %s"):format(base.lemma, slot_prefix, slot, ending, msg, dump(props))) end local clitic, clitic_footnotes if type(cliticobj) == "string" then clitic = cliticobj else clitic = cliticobj.form clitic_footnotes = cliticobj.footnotes end -- Compute whether i-mutation or u-mutation is in effect, and compute the "mutation footnotes", which are -- footnotes attached to a mutation-related indicator and which may need to be added even if no mutation is -- in effect (specifically when dealing with an ending that would trigger a mutation if in effect). AFAIK -- you cannot have both mutations in effect at once, and i-mutation overrides u-mutation if both would be in -- effect. -- Single ^ at the beginning of an ending indicates that the i-mutated version of the stem should apply, and -- double ^^ at the beginning indicates that the u-mutated version should apply. local explicit_imut, explicit_umut -- % at the end of a definite ending indicates that the following i- of the clitic should drop, as with -- neuter [[tré]], [[kné]], [[fé]]. There's no counterpart to force irregular inclusion of an i- that would -- normally drop; just include it in the ending (as with acc/dat sg of [[eygló]] "eyeball???" and [[sígó]] -- "cig"). local clitic_i_drops ending, explicit_umut = rsubb(ending, "^%^%^", "") if not explicit_umut then ending, explicit_imut = rsubb(ending, "^%^", "") end ending, clitic_i_drops = rsubb(ending, "%%$", "") local is_vowel_ending = rfind(ending, "^" .. com.vowel_c) local is_vowel_clitic = rfind(clitic, "^" .. com.vowel_c) local mut_in_effect, mut_not_in_effect, mut_footnotes local ending_in_a = not not ending:find("^a") local ending_in_i = not not ending:find("^i") local ending_in_u = not not ending:find("^u") if props.unimut ~= nil and props.unumut ~= nil then interr("Cannot have both 'unimut' and 'unumut' in effect at the same time") end if props.unimut ~= nil and props.imut ~= nil then interr("Cannot have both 'unimut' and 'imut' in effect at the same time") end if props.unumut ~= nil and props.umut ~= nil then interr("Cannot have both 'unumut' and 'umut' in effect at the same time") end if explicit_imut then mut_in_effect = "i" elseif explicit_umut then mut_in_effect = "u" else if props.unimut ~= nil then local is_unimut_slot if base.gender == "m" then is_unimut_slot = slot == "dat_s" or slot:find("_p") elseif base.gender == "f" then is_unimut_slot = slot == "acc_s" or slot == "dat_s" or slot == "dat_p" or slot == "gen_p" else interr( "'unimut' shouldn't be specified with neuter nouns; don't know what slots would be affected; neuter pluralia tantum nouns using 'unimut' should have synthesized a singular without i-mutation") end if is_unimut_slot then mut_not_in_effect = "i" mut_footnotes = props.unimut_footnotes elseif props.unimut then mut_in_effect = "i" end elseif props.imut ~= nil then if ending_in_i then if props.imut then mut_in_effect = "i" mut_footnotes = props.imut_footnotes elseif props.imut == false then mut_not_in_effect = "i" mut_footnotes = props.imut_footnotes end end end if props.unumut ~= nil then local is_unumut_slot if props.unumut == "unumut" or props.unumut == "-unumut" then is_unumut_slot = ending_in_a or ending_in_i elseif base.gender == "m" then is_unumut_slot = slot == "gen_s" or slot == "gen_p" elseif base.gender == "f" then is_unumut_slot = slot == "nom_p" or slot == "acc_p" or slot == "gen_p" else interr( "'unumut' and variants shouldn't be specified with neuter nouns; don't know what slots would be affected; neuter pluralia tantum nouns using 'unumut'and variants should have synthesized a singular without u-mutation") end if not mut_in_effect and not mut_not_in_effect then -- Do nothing if mut_in_effect or mut_not_in_effect because i-mut takes precedence over u-mut; -- FIXME: I hope this is correct in all cases. if is_unumut_slot then mut_not_in_effect = "u" mut_footnotes = props.unumut_footnotes elseif props.unumut then mut_in_effect = "u" end end end if ending_in_u and not mut_in_effect then mut_in_effect = "u" -- umut and uUmut footnotes are incorporated into the appropriate umut_* stems end end local ending_was_asterisk = ending == "*" -- Now compute the appropriate stem to which the ending and clitic are added. `prefix` is either an empty -- string or "pl_" and selects the set of stems to consider when computing the stem in effect. See the -- comment above for `pl_stem`. local function compute_stem_in_effect(prefix) local stem_in_effect if mut_in_effect == "i" then -- NOTE: It appears that imut and defcon never co-occur; otherwise we'd need to flesh out the set of -- stems to include i-mutation versions of defcon stems, similar to what we do for u-mutation. if is_vowel_ending then if not props[prefix .. "imut_vstem"] then interr(("i-mutation in effect and ending begins with a vowel but '.%simut_vstem' not defined") : format(prefix)) end stem_in_effect = props[prefix .. "imut_vstem"] else if not props[prefix .. "imut_nonvstem"] then interr(("i-mutation in effect and ending does not begin with a vowel but '.%simut_nonvstem' not defined") : format(prefix)) end stem_in_effect = props[prefix .. "imut_nonvstem"] end else -- Careful with the following logic; it is written carefully and should not be changed without a -- thorough understanding of its functioning. local has_umut = mut_in_effect == "u" -- First, if the ending is null (or "*", which eventually turns into a null ending; see below), and -- we have a vowel-initial definite-article clitic, use the special 'defcon' stem if available. if (ending == "" or ending == "*") and is_vowel_clitic then stem_in_effect = has_umut and props[prefix .. "umut_null_defvstem"] or props[prefix .. "null_defvstem"] end -- If the stem is still unset, then use the vowel or non-vowel stem if available. When u-mutation is -- active, we first check for the u-mutated version of the vowel or non-vowel stem before falling -- back to the regular vowel or non-vowel stem. Note that an expression like `has_umut and -- props[prefix .. "umut_vstem"] or props[prefix .. "vstem"]` here is NOT equivalent to an if-else -- or ternary operator expression because if `has_umut` is true and `umut_vstem` is missing, it will -- still fall back to `vstem` (which is what we want). if not stem_in_effect then if is_vowel_ending then stem_in_effect = has_umut and props[prefix .. "umut_vstem"] or props[prefix .. "vstem"] else stem_in_effect = has_umut and props[prefix .. "umut_nonvstem"] or props[prefix .. "nonvstem"] end end -- Finally, fall back to the basic stem, which is always defined. stem_in_effect = stem_in_effect or props[prefix .. "stem"] end -- If the ending is "*", it means to use the lemma as the form directly (before adding any definite -- clitic) rather than try to construct the form from a stem and ending. We need to do this for the -- lemma slot and especially for the nominative singular, because we don't have the nominative singular -- ending available and it may vary (e.g. it may be -ur, -l, -n, -a, etc. especially in the masculine). -- Not trying to construct the form from stem + ending also avoids complications from the nominative -- singular in -ur, which exceptionally does not trigger u-mutation. However, when 'defcon' is active -- and we're processing a definite form beginning with a vowel (i.e. is_vowel_clitic is set), we can't -- do this, because the form to which the clitic is added is not the lemma but the contracted version. -- As it happens, this works out because in all situations where 'defcon' is active, the nominative -- singular has a null ending. (If this weren't the case, we'd have to change all the declension -- functions to pass in the nominative singular ending in addition to other endings.) An example where -- 'defcon' is active is neuter [[mastur]] "mast" with definite nominative singular [[mastrið]]; here, -- using the lemma would incorrectly produce #[[masturið]]. -- Finally, however, if there is a footnote associated with the computed stem in effect, we need to -- preserve it. if ending == "*" then if not is_vowel_clitic or not props.defcon or props.defcon.form ~= "defcon" then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes end stem_in_effect = iut.combine_form_and_footnotes(base.actual_lemma, stem_in_effect_footnotes) end -- See comment above. When 'defcon' is not in effect, we changed the stem to be the lemma and -- want to use a null ending; otherwise, the ending is always null anyway, so it's safe to set -- it thus. ending = "" end return stem_in_effect end local stem_in_effect = props.pl_stem and slot:find("_p$") and compute_stem_in_effect("pl_") or compute_stem_in_effect("") local infix, infix_footnotes -- Compute the infix (j, v or nothing) that goes between the stem and ending. if not ending_override and is_vowel_ending then if props.vinfix and props.jinfix then interr("Can't have specifications for both '.vinfix' and '.jinfix'; should have been caught above") end if props.vinfix then infix = props.vinfix infix_footnotes = props.vinfix_footnotes elseif props.jinfix and not ending_in_i then infix = props.jinfix infix_footnotes = props.jinfix_footnotes end end -- If base-level footnotes specified, they go before any stem footnotes, so we need to extract any footnotes -- from the stem in effect and insert the base-level footnotes before. In general, we want the footnotes to -- be in the order [base.footnotes, stem.footnotes, mut_footnotes, infix_footnotes, ending.footnotes, -- clitic.footnotes]. if base.footnotes then local stem_in_effect_footnotes if type(stem_in_effect) == "table" then stem_in_effect_footnotes = stem_in_effect.footnotes stem_in_effect = stem_in_effect.form end stem_in_effect = iut.combine_form_and_footnotes(stem_in_effect, iut.combine_footnotes(base.footnotes, stem_in_effect_footnotes)) end local ending_is_full ending, ending_is_full = rsubb(ending, "^!", "") local function combine_stem_ending(stem, clitic) if stem == "?" then return "?" end local function drop_clitic_i() clitic = clitic:gsub("^i", "") end -- If we're definite-only and using the actual lemma as the stem, the clitic is already incorporated -- into the stem. if base.definiteness == "def" and ending_was_asterisk then return stem end -- % at the end of a definite ending indicates that the following i- of the clitic should drop; see -- above. if clitic_i_drops then drop_clitic_i() end local stem_with_infix = ending_is_full and "" or stem .. (infix or "") -- Drop final -j- of stem before an ending beginning with a consonant. This happens e.g. in [[kirkja]] -- "church" with genitive plural -na, producing [[kirkna]]. It does not happen with a null ending; cf. -- neuter [[emj]] "cries, shouting" and [[gremj]] "anger, irritation" (the latter not in BÍN). if stem_with_infix:find("j$") and rfind(ending, "^" .. com.cons_c) then stem_with_infix = stem_with_infix:gsub("j$", "") end local stem_with_ending -- An initial s- of the ending drops after a cluster of cons + s (including written <x>). if ending:find("^s") and (stem_with_infix:find("x$") or rfind(stem_with_infix, com.cons_c .. "s$")) then stem_with_ending = stem_with_infix .. ending:gsub("^s", "") else stem_with_ending = stem_with_infix .. ending end if clitic == "" then return stem_with_ending end if slot == "dat_p" then stem_with_ending = stem_with_ending:gsub("m$", "") end if clitic:find("^i.*[aiu]") then -- disyllabic clitics in i- -- in practice, fem acc_s -ina, dat_s -inni, gen_s -innar if rfind(stem_with_ending, com.vowel_c .. "$") then drop_clitic_i() end elseif clitic:find("^i") then -- monosyllabic clitics in i- local ending_for_clitic_dropping = ending_was_asterisk and base.lemma_ending or ending if ending_for_clitic_dropping:find("[aiu]$") then drop_clitic_i() end end return stem_with_ending .. clitic end local combined_footnotes = iut.combine_footnotes( iut.combine_footnotes(mut_footnotes, infix_footnotes), iut.combine_footnotes(ending_footnotes, clitic_footnotes) ) local clitic_with_notes = iut.combine_form_and_footnotes(clitic, combined_footnotes) if not stem_in_effect then interr("stem_in_effect is nil") end iut.add_forms(base.forms, slot_prefix .. slot, stem_in_effect, clitic_with_notes, combine_stem_ending) end end end -- Add the definite and indefinite variants of a slot by combining the appropriate stem in `props` with (optionally) an -- infix in `props` and the endings in `endings`, tacking on the definite article clitic in the definite slot variant. -- This calls the underlying function add_slotval() twice, once for indefinite forms and once for definite forms, and is -- normally called by add_decl() or similar function to add an entire declension. `endings` can be nil (no endings are -- added), a single string, a list of strings, a list of form objects (i.e. in general list form), or a table containing -- fields `indef` and `def` (each of which can be any of the previous formats) to add separate sets of endings for the -- indefinite and definite slot variants. If any of the formats for `endings` is supplied other than the separate -- indefinite/definite table, the supplied set of endings is used for both indefinite and definite slot variants. -- `ending_override` and `endings_are_full` are as in add_slotval(). local function add(base, slot, props, endings, ending_override, endings_are_full) if not endings then return end local indef_endings, def_endings if type(endings) == "table" and (endings.indef or endings.def) then indef_endings = endings.indef def_endings = endings.def else indef_endings = endings def_endings = endings end if indef_endings and base.definiteness ~= "def" then add_slotval(base, "ind_", slot, props, indef_endings, nil, ending_override, endings_are_full) end if def_endings and (base.definiteness ~= "indef" and base.definiteness ~= "none") then local clitic = clitic_articles[base.gender] if not clitic then error(("Internal error: Unrecognized value for base.gender: %s"):format(dump(base.gender))) end clitic = clitic[slot] if not clitic then error(("Internal error: Unrecognized value for `slot` in add(): %s"):format(dump(slot))) end add_slotval(base, "def_", slot, props, def_endings, clitic, ending_override, endings_are_full) end end -- Generate the accusative plural ending from the nominative plural. For feminines and neuters, both are the same. -- For masculines, drop the -r except in -ur. local function acc_p_from_nom_p(base, nom_p) if base.gender == "f" or base.gender == "n" then return nom_p end if not nom_p then return nom_p -- this is correct as `nom_p` could be nil or false and we want to return the same thing end local function form_masc_acc_p(ending) -- Form the masculine accusative by dropping -r unless the form ends in -ur, which is kept. If the ending is *, -- we substitute the entire actual lemma. In that case, if the lemma is definite-only, we have to strip off -- the nominative plural clitic -nir before generating the accusative. We don't add the clitic -na because it -- will be added in add_slotval(). if ending == "*" then ending = "!" .. base.actual_lemma end if base.definiteness == "def" and ending:find("^!") then ending = ending:match("^(.*)nir$") if not ending then error(("Masculine plural definite-only lemma '%s' does not end in expected clitic '-nir'; " .. "don't know how to compute the corresponding accusative plural"):format(base.actual_lemma)) end end -- If the ending is full (begins with !), check the whole thing for -ur at the end. if ending:find("^%^*ur$") or ending:find("^!.*[^Aa]ur$") then -- as-is else ending = ending:gsub("r$", "") end return ending end if type(nom_p) == "string" then return form_masc_acc_p(nom_p) end local acc_p = {} for _, ending in ipairs(nom_p) do if type(ending) == "string" then table.insert(acc_p, form_masc_acc_p(ending)) else table.insert(acc_p, { form = form_masc_acc_p(ending.form), footnotes = ending.footnotes }) end end return acc_p end local function process_one_slot_override(base, slot, spec) -- Call skip_slot() based on the declined number and definiteness; if the actual number is different, we correct -- this in decline_noun() at the end. if skip_slot(base.number, base.definiteness, slot) then error(("Override specified for invalid slot '%s' due to '%s' number restriction and/or '%s' definiteness restriction") :format( slot, base.number, base.definiteness)) end local defslot = slot:find("^def_") if defslot then base.forms[slot] = nil else if spec.indef ~= false then base.forms["ind_" .. slot] = nil end if spec.def ~= false then base.forms["def_" .. slot] = nil end end if defslot then local slot_prefix -- Don't call add(), like below, because it adds both indefinite and definite variants, including definite -- clitics in the latter. Instead, directly call add_slotval(). But we need to separate the slot into slot -- prefix "def_" and the remainder because add_slotval() expects slots to be missing the prefix when -- checking which stem to use (which may depend on the slot). slot_prefix, slot = slot:match("^(def_)(.*)$") for _, props in ipairs(base.prop_sets) do add_slotval(base, slot_prefix, slot, props, spec.def, nil, "ending override") end else local endings if spec.indef ~= nil and spec.def ~= nil then -- This could include `false` as the value of either `spec.indef` or `spec.def` to not touch those slots. -- Note that specifying something like 'dat/i' is allowed and will only override the definite slot, but -- is different from a definite-slot override 'defdatinum' because the latter includes the clitic in it. endings = { indef = spec.indef, def = spec.def, } elseif not spec.indef then error(("Internal error: Unless both `spec.indef` and `spec.def` have non-nil values (i.e. the user included a slash in the override, `spec.indef` must be defined: %s") :dump(spec)) elseif slot == "acc_p" then -- As a special case, don't carry over literary acc_p ending -u to the definite. local def_endings = {} for _, ending in ipairs(spec.indef) do -- If the ending is full (begins with !), check the whole thing for -u at the end. if not ending.form:find("^%^*u$") and not ending.form:find("^!.*[^Aa]u$") then table.insert(def_endings, ending) end end endings = { indef = spec.indef, def = def_endings, } else endings = spec.indef end for _, props in ipairs(base.prop_sets) do add(base, slot, props, endings, "ending override") end end end local function process_slot_overrides(base) if base.gens then process_one_slot_override(base, "gen_s", base.gens) end if base.pls then local spec = base.pls process_one_slot_override(base, "nom_p", spec) local acc_p_spec = { indef = acc_p_from_nom_p(base, spec.indef), def = acc_p_from_nom_p(base, spec.def), } process_one_slot_override(base, "acc_p", acc_p_spec) end for slot, spec in pairs(base.overrides) do process_one_slot_override(base, slot, spec) end end -- Generate the full declension for the term given the endings for each slot. acc_p, dat_p and gen_p can be omitted and -- will be defaulted: dat_p defaults to "um", gen_p defaults to "a", and acc_p defaults to the nom_p except for masculines -- not in -ur, where the -r is dropped. Use `false` as the value of an ending to disable generating any value for that -- slot. local function add_decl_with_nom_sg(base, props, nom_s, acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) add(base, "nom_s", props, nom_s) add(base, "acc_s", props, acc_s) add(base, "dat_s", props, dat_s) add(base, "gen_s", props, gen_s) if base.number == "pl" then -- If this is a plurale tantum noun and we're processing the nominative plural, use the user-specified lemma -- rather than generating the plural from the synthesized singular, which may not match the specified lemma. -- This is both because we don't set a plural override to specify what the plural should look like and because -- of exceptional cases like [[dyr]], which is plural-only and uses 'decllemma:dyrir'. nom_p = "*" end add(base, "nom_p", props, nom_p) -- Generate defaults for acc_p, dat_p, gen_p if nil was specified; but be careful not to do so for false, which -- means to generate no form. if acc_p == nil then acc_p = acc_p_from_nom_p(base, nom_p) end if dat_p == nil then dat_p = "um" end if gen_p == nil then gen_p = "a" end add(base, "acc_p", props, acc_p) add(base, "dat_p", props, dat_p) add(base, "gen_p", props, gen_p) end -- Generate the full declension for the term given the endings for each slot except the nom_s. This is like -- add_decl_with_nom_sg() but takes the nom sg directly from the lemma instead of trying to reconstruct it from a stem, -- which is more correct in the vast majority of circumstances. The * below is a signal to the underlying add() function -- to use the actual lemma (not any stem, and not the value of 'decllemma:' if given) for the nom sg. Note that add() is -- smart enough to ignore this for the definite nom sg when the 'defcon' indicator is given, because in that case the stem -- for the def nom sg is contracted compared with the lemma. (Specifically, it uses the correct contracted stem and a null -- ending; AFAIK all cases of 'defcon' occur with lemmas with a null ending in the nom sg.) local function add_decl(base, props, acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) add_decl_with_nom_sg(base, props, "*", acc_s, dat_s, gen_s, nom_p, acc_p, dat_p, gen_p) end local function add_sg_decl(base, props, acc_s, dat_s, gen_s) add_decl(base, props, acc_s, dat_s, gen_s, false, false, false, false) end local function add_pl_only_decl(base, props, acc_p, dat_p, gen_p) add_decl(base, props, false, false, false, "*", acc_p, dat_p, gen_p) end -- Table mapping declension types to functions to decline the noun. The function takes two arguments, `base` and -- `props`; the latter specifies the computed stems (vowel vs. non-vowel, singular vs. plural) and whether the noun -- is reducible and/or has vowel alternations in the stem. Most of the specifics of determining which stem to use -- and how to modify it for the given ending are handled in add_decl(); the declension functions just need to generate -- the appropriate endings. local decls = {} decls["indecl"] = function(base, props) add_decl(base, props, "", "", "", "", "", "", "") end decls["decl?"] = function(base, props) add_decl(base, props, "?", "?", "?", "?", "?", "?", "?") end decls["m"] = function(base, props) -- The default dative singular is computed below in determine_default_masc_dat_sg(). local dat = props.default_dat_sg add_decl(base, props, "", dat, "s", "ar") end decls["m-ir"] = function(base, props) add_decl(base, props, "i", "i", "is", "ar") end decls["m-skapur"] = function(base, props) -- Nouns in -skapur; default gen is -ar, default dat is -/-, default num is sg. add_decl(base, props, "", "", "ar", "ar") end decls["m-naður"] = function(base, props) -- Nouns in -naður; default gen is -ar, default dat is dati/i:-, default nom pl is -ir, default num is sg, -- default u-mutation is uUmut. add_decl(base, props, "", { indef = "i", def = { "i", "" } }, "ar", "ir") end decls["m-kell"] = function(base, props) -- Proper nouns in -kell; [[Þorkell]], [[Grímkell]], etc. local alt_dat_s = base.stem:gsub("kel$", "katli") add_decl(base, props, "", { "i", { form = "!" .. alt_dat_s, footnotes = { "[archaic]" } } }, "s", false, false, false, false) end decls["m-ó"] = function(base, props) -- abbreviations of school names generally have null genitive: [[Kennó]] from [[Kennaraskóla]] "Teachers' College"), -- [[Astró]], [[Borgó]] (from [[Borgarholtsskóli]]), [[Bríó]], [[Foldó]] (from [[Foldaskóli]]), [[Hafró]] (from -- [[Hafrannsóknastofnun]] "Marine Research Institute" (of Norway), [[Hagó]] (from [[Hagaskóli]]), [[Húsó]], -- [[Kvennó]] (from [[Kvennaskóli]]), [[Meló]] (from [[Melaskóli]]), [[Menntó]] (from [[Menntaskóli]]), [[Tónó]] -- (from [[Tónlistarskóli]]), [[Való]] (from [[Valhúsaskóli]]), [[Versló]]/[[Verzló]] (from -- [[Verslunarskóli Íslands|Iceland Business School]]); but these are completely outweighed by male given names, -- nicknames and historical names of men in -ó (e.g. [[Bó]], [[Bóbó]], [[Brúnó]], [[Dittó]], [[Filpó]], [[Galíleó]], -- [[Jagó]], [[Kató]], [[Kristó]], [[Leó]], [[Leónardó]], [[Markó]], etc.) as well as common nouns in -ó (e.g. -- [[bóleró]] "bolero", [[evró]] "Euro (dated)", [[faraó]] "pharaoh", [[kanó]] "canoe", [[kímonó]] "kimono", -- [[mambó]] "mambo", [[pesó]] "peso", [[pikkóló]] "piccolo", [[róló]] "playground", [[sleikjó]] "lollipop", -- etc.) add_decl(base, props, "", "", "s", "ar") end decls["m-rstem"] = function(base, props) local imut = "^" add_decl(base, props, "ur", "ur", { "ur", { form = "urs", footnotes = { "[proscribed]" } } }, imut .. "ur", nil, imut .. "rum", imut .. "ra") end decls["m-ndi"] = function(base, props) -- Words in -ndi, mostly derived from present participles and mostly in [[andi]]; but cf. [[bóndi]], [[frændi]], -- and [[fjandi]] with two plurals with different meanings. local imut if props.stem:find("ænd$") then imut = "" else imut = "^" end add_decl(base, props, "a", "a", "a", imut .. "ur", nil, { imut .. "um", { form = "um", footnotes = "[rare/obsolete]" } }, { imut .. "a", { form = "a", footnotes = "[rare/obsolete]" } }) end decls["m-weak"] = function(base, props) -- Words in -i like [[tími]] "time, hour"; also words in -a e.g. [[herra]] "gentleman; sir, Mr. (term of address)", -- [[séra]]/[[síra]] "reverend" add_decl(base, props, "a", "a", "a", "ar") end decls["f"] = function(base, props) -- Normal strong feminine nouns; default to genitive -ar, plural -ir. add_decl(base, props, "", "", "ar", "ir") end decls["f-ung"] = function(base, props) -- Strong feminine nouns in -ung, e.g. [[nýjung]] "newness, novelty; piece of news", [[nauðung]] -- "constraint, compulsion". Most such nouns are singular-only, e.g. [[djörfung]] "boldness, daring", [[launung]] -- "secrecy". Occasional nouns need overrides, e.g. [[sundrung]] "scattering; dissension, division, disunity" with -- acc/dat sg either - or -u (but only - in the definite acc/dat sg). add_decl(base, props, "", "", "ar", "ar") end decls["f-ing"] = function(base, props) -- Strong feminine nouns in -ing, e.g. [[kerling]] "old woman", [[eining]] "unity; unit". Singular-only: e.g. -- [[málning] "paint", [[menning]] "culture", [[örvænting]] "despair". add_decl(base, props, "u", "u", "ar", "ar") end decls["f-ur"] = function(base, props) add_decl(base, props, "i", "i", "ar", "ir") end decls["f-i"] = function(base, props) add_decl(base, props, "i", "i", "i", "ir") end decls["f-long-vowel"] = function(base, props) -- nouns in -á, e.g. [[á]] "river", [[gjá]] "gorge, canyon", [[skuggská]] "mirror", [[slá]] "door bolt"; -- nouns in -ó, e.g. [[fló]] "flea", [[kónguló]] "spider", [[kló]] "claw"; -- nouns in -ú, e.g. [[frú]] "married woman", [[trú]] "faith, belief". -- Each is slightly different. local gen, nompl if props.stem:find("á$") then gen = "r" nompl = "r" elseif props.stem:find("ó$") then gen = "ar" nompl = "^r" elseif props.stem:find("ú$") then gen = "ar" nompl = "r" else error(("Unrecognized stem '%s' for long-vowel feminine; should end in -á, -ó or -ú")) end add_decl(base, props, "", "", gen, nompl, nompl, "m", { indef = "a", def = "" }) end decls["f-long-umlaut-vowel-r"] = function(base, props) -- nouns in long umlauted vowel + -r: [[kýr]] "cow", [[sýr]] "sow (archaic)", [[ær]] and compounds. add_decl(base, props, "", "", "^r", "^r", "^r", "m", { indef = "a", def = "" }) end decls["f-acc-dat-i"] = function(base, props) -- Some proper female names with -i in the acc and dat sg add_decl(base, props, "i", "i", "ar", "ar") end decls["f-rstem"] = function(base, props) local imut if props.stem:find("syst$") then imut = "" else imut = "^" end local sg_ending = { "ur", { form = "ir", footnotes = { "[proscribed]" } } } add_decl(base, props, sg_ending, sg_ending, sg_ending, imut .. "ur", nil, imut .. "rum", imut .. "ra") end decls["f-weak"] = function(base, props) add_decl(base, props, "u", "u", "u", "ur") end decls["n"] = function(base, props) -- Normal (strong) neuter nouns. add_decl(base, props, "", "i", "s", "^^") end decls["n-já"] = function(base, props) -- [[tré]] "tree; wood"; [[hné]]/[[kné]] "knee"; [[fé]] "sheep; cattle; money"; the stem has previously been set -- to not include final -é; fé has genitive fjár while the others have genitive in -és. local gen = props.stem:find("f$") and "jár" or "és" add_decl_with_nom_sg(base, props, "é%", "é%", "é", gen, "é%", "é%", "jám", { indef = "jáa", def = "já" }) end decls["n-i"] = function(base, props) -- Neuter nouns in -i, e.g. [[kvæði]] "poem, song". Nouns in -ki and -gi e.g. [[ríki]] "state, kingdom" and [[engi]] -- "meadow" have j-insertion by default, which is set elsewhere. add_decl(base, props, "i", "i", "is", "i") end decls["n-weak"] = function(base, props) -- "Weak" neuter nouns in -a, e.g. [[auga]] "eye", [[hjarta]] "heart". U-mutation occurs in the nom/acc/dat pl but -- doesn't need to be indicated explicitly because the ending begins with u-. add_decl(base, props, "a", "a", "a", "u") end local function reconstruct_control_spec(control_specs) local parts = {} local function ins(txt) table.insert(parts, txt) end for i, spec in ipairs(control_specs) do if i > 1 then ins(",") end ins(spec.form) if spec.footnotes then for _, footnote in ipairs(spec.footnotes) do ins(footnote) -- already has brackets around it end end end return table.concat(parts) end decls["adj"] = function(base, props) -- This maps from a slot name constructed from the individual state, case, gender and number properties to the -- actual syncretic slot name used in [[Module:is-adjective]]. local slot_to_syncretic_slot_mapping = { str_nom_m_s = "str_nom_m", str_nom_f_s = "str_nom_f", str_nom_n_s = "str_nom_n", str_acc_m_s = "str_acc_m", str_acc_f_s = "str_acc_f", str_acc_n_s = "str_nom_n", str_dat_m_s = "str_dat_m", str_dat_f_s = "str_dat_f", str_dat_n_s = "str_dat_n", str_gen_m_s = "str_gen_m", str_gen_f_s = "str_gen_f", str_gen_n_s = "str_gen_n", str_nom_m_p = "str_nom_mp", str_nom_f_p = "str_nom_fp", str_nom_n_p = "str_nom_np", str_acc_m_p = "str_acc_mp", str_acc_f_p = "str_nom_fp", str_acc_n_p = "str_nom_np", str_gen_m_p = "str_gen_p", str_gen_f_p = "str_gen_p", str_gen_n_p = "str_gen_p", str_dat_m_p = "str_dat_p", str_dat_f_p = "str_dat_p", str_dat_n_p = "str_dat_p", wk_nom_m_s = "wk_nom_m", wk_nom_f_s = "wk_nom_f", wk_nom_n_s = "wk_n", wk_acc_m_s = "wk_obl_m", wk_acc_f_s = "wk_obl_f", wk_acc_n_s = "wk_n", wk_dat_m_s = "wk_obl_m", wk_dat_f_s = "wk_obl_f", wk_dat_n_s = "wk_n", wk_gen_m_s = "wk_obl_m", wk_gen_f_s = "wk_obl_f", wk_gen_n_s = "wk_n", wk_nom_m_p = "wk_p", wk_nom_f_p = "wk_p", wk_nom_n_p = "wk_p", wk_acc_m_p = "wk_p", wk_acc_f_p = "wk_p", wk_acc_n_p = "wk_p", wk_gen_m_p = "wk_p", wk_gen_f_p = "wk_p", wk_gen_n_p = "wk_p", wk_dat_m_p = "wk_p", wk_dat_f_p = "wk_p", wk_dat_n_p = "wk_p", } local props = {} local function ins(prop) table.insert(props, prop) end for _, spectype in ipairs(m_is_adjective.control_specs) do if base[spectype] then ins(reconstruct_control_spec(base[spectype])) end end -- If a specific reverse u-mutation type was specified and no u-mutation was given, convert the reverse -- u-mutation into a regular u-mutation by chopping off the "un" at the beginning. if base.adj_unumut and not base.umut then ins(base.adj_unumut:sub(3)) end for k, _ in pairs(base.props) do if m_is_adjective.boolean_property_set[k] then ins(k) end end if not base.props.builtin then ins(base.props.iscomp and "-pos" or "-comp") end if base.stem == "#" or base.stem == "##" then ins(base.stem) elseif base.stem then ins("stem:" .. base.stem) end for _, stem in ipairs(m_is_adjective.overridable_stems) do if stem ~= "stem" and base[stem] then ins(("%s:%s"):format(stem, base.stem)) end end local propspec = table.concat(props, ".") if propspec ~= "" then propspec = "<" .. propspec .. ">" end local argspec = base.lemma .. propspec local adj_alternant_multiword_spec = m_is_adjective.do_generate_forms({ argspec }, argspec, "is-ndecl") local function copy(from_slot, to_slot, do_clone) -- We want to avoid sharing form objects (although sharing footnotes is OK, but we don't avoid cloning them -- here) so we can later side-effect form objects as needed. `do_clone` is set to avoid such sharing, -- specifically when the weak form of the adjective is used for both definite and indefinite slots. local source = adj_alternant_multiword_spec.forms[from_slot] if do_clone then source = m_table.deepCopy(source) end base.forms[to_slot] = source end local function copy_gender_number_forms(gender, number) local state = base.adj_is_weak and "wk" or "str" local degree_pref = base.props.iscomp and "comp_" or "" for _, case in ipairs(cases) do local individual_slot = state .. "_" .. case .. "_" .. gender .. "_" .. number local wk_individual_slot = "wk_" .. case .. "_" .. gender .. "_" .. number local syncretic_slot = slot_to_syncretic_slot_mapping[individual_slot] local wk_syncretic_slot = slot_to_syncretic_slot_mapping[wk_individual_slot] if not syncretic_slot then error(("Internal error: Constructed bad individual slot '%s' with no entry in syncretic slot mapping"): format(individual_slot)) end syncretic_slot = degree_pref .. syncretic_slot if not wk_syncretic_slot then error(("Internal error: Constructed bad weak individual slot '%s' with no entry in syncretic slot mapping") : format(wk_individual_slot)) end wk_syncretic_slot = degree_pref .. wk_syncretic_slot copy(syncretic_slot, "ind_" .. case .. "_" .. number) copy(wk_syncretic_slot, "def_" .. case .. "_" .. number, syncretic_slot == wk_syncretic_slot) end end if base.number ~= "pl" then copy_gender_number_forms(base.gender, "s", state) end if base.number ~= "sg" then copy_gender_number_forms(base.gender, "p", state) end end local function set_builtin_defaults(base) if base.gender or base.number or base.definiteness then error("Can't specify gender, number or definiteness for built-in terms") end local function builtin_props() -- Return values are GENDER, NUMBER if base.lemma == "ég" or base.lemma == "þú" then return "none", "sg" elseif base.lemma == "við" or base.lemma == "þið" then return "none", "pl" elseif base.lemma == "hann" then return "m", "sg" elseif base.lemma == "hún" then return "f", "sg" elseif base.lemma == "það" then return "n", "sg" elseif base.lemma == "þeir" then return "m", "pl" elseif base.lemma == "þær" then return "f", "pl" elseif base.lemma == "þau" then return "n", "pl" elseif base.lemma == "sig" then return "none", "none" else error(("Unrecognized pronoun '%s'"):format(base.lemma)) end end local gender, number = builtin_props() base.gender = gender base.actual_gender = gender base.number = number base.actual_number = number base.definiteness = "none" end local function determine_builtin_props(base) base.prop_sets[1].stem = { form = "" } base.decl = "builtin" end decls["builtin"] = function(base, props) if base.lemma == "ég" then add_sg_decl(base, props, "mig", "mér", "mín") elseif base.lemma == "þú" then add_sg_decl(base, props, "þig", "þér", "þín") elseif base.lemma == "hann" then add_sg_decl(base, props, "hann", "honum", "hans") elseif base.lemma == "hún" then add_sg_decl(base, props, "hana", "henni", "hennar") elseif base.lemma == "það" then add_sg_decl(base, props, "það", "því", "þess") elseif base.lemma == "við" then add_pl_only_decl(base, props, "okkur", "okkur", "okkar") elseif base.lemma == "þið" then add_pl_only_decl(base, props, "ykkur", "ykkur", "ykkar") elseif base.lemma == "þeir" then add_pl_only_decl(base, props, "þá", "þeim", "þeirra") elseif base.lemma == "þær" then add_pl_only_decl(base, props, "þær", "þeim", "þeirra") elseif base.lemma == "þau" then add_pl_only_decl(base, props, "þau", "þeim", "þeirra") elseif base.lemma == "sig" then -- Underlyingly we handle [[sig]]'s slots as singular. add_decl_with_nom_sg(base, props, false, "*", "sér", "sín", false, false, false, false) else error(("Internal error: Unrecognized pronoun lemma '%s'"):format(base.lemma)) end end -- Return the lemmas for this term. The return value is a list of {form = FORM, footnotes = FOOTNOTES}. -- If `linked_variant` is given, return the linked variants (with embedded links if specified that way by the user), -- otherwies return variants with any embedded links removed. If `remove_footnotes` is given, remove any -- footnotes attached to the lemmas. function export.get_lemmas(alternant_multiword_spec, linked_variant, remove_footnotes) local slots_to_fetch = potential_lemma_slots local linked_suf = linked_variant and "_linked" or "" for _, slot in ipairs(slots_to_fetch) do if alternant_multiword_spec.forms[slot .. linked_suf] then local lemmas = alternant_multiword_spec.forms[slot .. linked_suf] if remove_footnotes then local lemmas_no_footnotes = {} for _, lemma in ipairs(lemmas) do table.insert(lemmas_no_footnotes, { form = lemma.form }) end return lemmas_no_footnotes else return lemmas end end end return {} end local function handle_derived_slots_and_overrides(base) -- Process slot overrides: First slots specified after the gender, then individual slot overrides specified as -- separate indicators. process_slot_overrides(base) -- Compute linked versions of potential lemma slots, for use in {{is-noun}}. We substitute the original lemma -- (before removing links) for forms that are the same as the lemma, if the original lemma has links. for _, slot in ipairs(potential_lemma_slots) do iut.insert_forms(base.forms, slot .. "_linked", iut.map_forms(base.forms[slot], function(form) if form == base.orig_lemma_no_links then if base.orig_lemma:find("%[%[") then return base.orig_lemma elseif not base.is_multiword then return form elseif not base.props.linkasis and (base.lemma ~= base.orig_lemma_no_links or base.link_lowercase) then local lemma_for_linking = base.lemma if base.link_lowercase then local init, rest = rmatch(lemma_for_linking, "^(.)(.*)$") lemma_for_linking = ulower(init) .. rest end return ("[[%s|%s]]"):format(lemma_for_linking, base.orig_lemma_no_links) else return ("[[%s]]"):format(form) end else return form end end)) end end -- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'. local function process_addnote_specs(base) for _, spec in ipairs(base.addnote_specs) do for _, slot_spec in ipairs(spec.slot_specs) do slot_spec = "^" .. slot_spec .. "$" for slot, forms in pairs(base.forms) do if rfind(slot, slot_spec) then -- To save on memory, side-effect the existing forms. for _, form in ipairs(forms) do form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes) end end end end end end local function is_regular_noun(base) return not base.adjspec and not base.props.builtin end local function process_declnumber(base) base.actual_number = base.number if base.declnumber then if base.declnumber == "sg" or base.declnumber == "pl" then base.number = base.declnumber else error(("Unrecognized value '%s' for 'declnumber', should be 'sg' or 'pl'"):format(base.declnumber)) end end end -- Map `fn` over an override spec (either `gens`, `pls` or one of the overrides in `overrides`). `fn` is passed one -- item (the form object of the override), which it can mutate if needed. If it ever returns non-nil, mapping stops -- and that value is returned as the return value of `map_override`; otherwise mapping runs to completion and nil is -- returned. local function map_override(override, fn) if not override then return nil end local function map_one_list(list) if not list then return nil end for _, formobj in ipairs(list) do local retval = fn(formobj) if retval ~= nil then return retval end end return nil end local retval = map_one_list(override.indef) if retval ~= nil then return retval end return map_one_list(override.def) end -- Map `fn` over all override specs in `base` (`gens`, `pls` and the overrides in `overrides`). `fn` is passed one -- item (the form object of the override), which it can mutate if needed. If it ever returns non-nil, mapping stops -- and that value is returned as the return value of `map_override`; otherwise mapping runs to completion and nil is -- returned. local function map_all_overrides(base, fn) for slot, override in pairs(base.overrides) do local retval = map_override(override, fn) if retval ~= nil then return retval end end local retval = map_override(base.gens, fn) if retval ~= nil then return retval end return map_override(base.pls, fn) end -- Like put.split_alternating_runs_and_strip_spaces(), but ensure that backslash-escaped commas and periods are not -- treated as separators. local function split_alternating_runs_with_escapes(segments, splitchar) for i, segment in ipairs(segments) do segment = rsub(segment, "\\,", SUB_ESCAPED_COMMA) segments[i] = rsub(segment, "\\%.", SUB_ESCAPED_PERIOD) end local separated_groups = put.split_alternating_runs_and_strip_spaces(segments, splitchar) for _, separated_group in ipairs(separated_groups) do for i, segment in ipairs(separated_group) do segment = rsub(segment, SUB_ESCAPED_COMMA, ",") separated_group[i] = rsub(segment, SUB_ESCAPED_PERIOD, ".") end end return separated_groups end local function fetch_footnotes(separated_group, parse_err) local footnotes for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'") end if not footnotes then footnotes = {} end table.insert(footnotes, separated_group[j]) end return footnotes end -- Fetch and parse a slot override, e.g. "ar:s" or "um:m[archaic]/um" or "i:!Þorkatli[archaic]" (where ! indicates that -- the override is the full form including the stem); that is, everything after the slot name(s). `segments` is the -- input in the form of a list where the footnotes have been separated out (see `parse_override` below); `spectype` is -- used in error messages and specifies e.g. "genitive" or "dat+gen slot override"; `allow_blank` indicates that a -- completely blank override spec is allowed (in that case, nil will be returned); `defslot`, if true, indicates that -- we're processing a definite slot override, i.e. two slash-separated specs (indefinite and definite) are not allowed -- and the return overrides will be stored into `def`; and `parse_err` is a function of one argument to throw a parse -- error. The return value is an object containing fields `indef` and/or `def`, of the format described below in the -- comment above `parse_override`. local function fetch_slot_override(segments, spectype, allow_blank, defslot, parse_err) if allow_blank and #segments == 1 and segments[1] == "" then return nil end local slash_separated_groups = put.split_alternating_runs_and_strip_spaces(segments, "/") if #slash_separated_groups > 2 then parse_err(("Can specify at most two slash-separated override groups for %s, but saw %s"):format( spectype, #slash_separated_groups)) end if slash_separated_groups[2] and defslot then parse_err(("Can't specify two slash-separated override groups for %s; the second override group is for the definite slot variant, but the slot is already definite") :format( spectype)) end local ret = {} for i, slash_separated_group in ipairs(slash_separated_groups) do local retfield = defslot and "def" or i == 1 and "indef" or "def" if #slash_separated_group == 1 and slash_separated_group[1] == "" then ret[retfield] = false else local colon_separated_groups = put.split_alternating_runs_and_strip_spaces(slash_separated_group, ":") local specs = {} for _, colon_separated_group in ipairs(colon_separated_groups) do local form = colon_separated_group[1] if form == "" then parse_err(("Use - to indicate an empty ending for %s: '%s'"):format(spectype, table.concat(segments))) elseif form == "-" then form = "" elseif form == "--" then -- missing form = "-" end local new_spec = { form = form, footnotes = fetch_footnotes(colon_separated_group, parse_err) } for _, existing_spec in ipairs(specs) do if existing_spec.form == new_spec.form then parse_err("Duplicate " .. spectype .. " spec '" .. table.concat(colon_separated_group) .. "'") end end table.insert(specs, new_spec) end ret[retfield] = specs end end return ret end --[=[ Parse a single override spec (e.g. 'dat-:i/-' or 'nompl+accpl^/' or 'defnompl+defaccpl!sumrin[when referring to summers in general]:!sumurin[when referring to a specific number of summers]') and return two values: the slot(s) the override applies to, and an object describing the override spec. The input is actually a list where the footnotes have been separated out; for example, given the third example spec above, the input will be a list {"defnompl+defaccpl!sumrin", "[when referring to summers in general]", ":!sumurin", "[when referring to a specific number of summers]", ""}. The object returned for 'dat-:i[mostly in the context of violent actions]/-' looks like this: { indef = { { form = "" }, { form = "i", footnotes = {"[mostly in the context of violent actions]"} } }, def = { { form = "" } } } The object returned for '!nompl+accpl^/' looks like this: { indef = { { form = "^" }, }, def = false } The object returned for 'defnompl+defaccpl!sumrin[when referring to summers in general]:!sumurin[when referring to a specific number of summers]' looks like this: { def = { { form = "!sumrin", footnotes = {"[when referring to summers in general]"} }, { form = "!sumurin", footnotes = {"[when referring to a specific number of summers]"} } } } ]=] local function parse_override(segments, parse_err) local part = segments[1] local slots = {} local defslot while true do local this_defslot if part:find("^def") then this_defslot = true part = usub(part, 4) else this_defslot = false end if defslot == nil then defslot = this_defslot elseif defslot ~= this_defslot then parse_err(("When multiple slot overrides are combined with +, all must be definite or indefinite: '%s'"): format(table.concat(segments))) end local case = usub(part, 1, 3) if case_set[case] then -- ok else parse_err(("Unrecognized case '%s' in override: '%s'"):format(case, table.concat(segments))) end part = usub(part, 4) local slot = defslot and "def_" or "" if part:find("^pl") then part = usub(part, 3) slot = slot .. case .. "_p" else slot = slot .. case .. "_s" end table.insert(slots, slot) if part:find("^%+") then part = usub(part, 2) else break end end segments[1] = part local retval = fetch_slot_override(segments, ("%s slot override"):format(table.concat(slots, "+")), false, defslot, parse_err) return slots, retval end local function parse_adjspec(base, spec, parse_err) local ret = {} local origspec = spec if spec:find("^:") then ret.lemma = spec:sub(2) elseif spec:find("^/") then local from, to = spec:match("^/([^/]*)/([^/]*)$") if from then ret.subspec = { from = from, to = to } else to = spec:match("^/([^/]*)$") if to then ret.subspec = { to = to } else parse_err(("Syntax error in adjective spec 'adj%s': too many slashes"):format(origspec)) end end elseif spec ~= "" then parse_err(("Syntax error in adjective spec 'adj%s'; should be followed only by a colon + lemma or slash " .. "substitution spec, possibly preceded by ^ to indicate lowercasing"):format(origspec)) end return ret end local function parse_inside(base, inside, is_scraped_noun) local function parse_err(msg) error((is_scraped_noun and "Error processing scraped noun spec: " or "") .. msg .. ": <" .. inside .. ">") end local segments = put.parse_balanced_segment_run(inside, "[", "]") local dot_separated_groups = split_alternating_runs_with_escapes(segments, "%.") local isadj = false for i, dot_separated_group in ipairs(dot_separated_groups) do -- Parse a control spec such as "umut,uUmut[rare]" or "-unuUmut,unuUmut" or "imut". This assumes the control -- spec is contained in `dot_separated_group` (already split on brackets) and the result of parsing should go in -- `base[dest]`. `allowed_specs` is a list of the allowed control specs in this group, such as -- {"umut", "Umut", "uumut", "uUmut", "uUUmut", "u_mut"} or {"con", "-con"}. The result of parsing is a list of -- structures of the form { -- form = "FORM", -- footnotes = nil or {"FOOTNOTE", "FOOTNOTE", ...}, -- }. local function parse_control_spec(dest, allowed_specs) if base[dest] then parse_err(("Can't specify '%s'-type control spec twice; second such spec is '%s'"):format( dest, table.concat(dot_separated_group))) end base[dest] = {} local comma_separated_groups = split_alternating_runs_with_escapes(dot_separated_group, ",") for _, comma_separated_group in ipairs(comma_separated_groups) do local specobj = {} local spec = comma_separated_group[1] if not m_table.contains(allowed_specs, spec) then parse_err(("For '%s'-type control spec, saw unrecognized spec '%s'; valid values are %s"): format(dest, spec, generate_list_of_possibilities_for_err(allowed_specs))) else specobj.form = spec end specobj.footnotes = fetch_footnotes(comma_separated_group, parse_err) table.insert(base[dest], specobj) end end local part = dot_separated_group[1] while true do if i == 1 and not part:find("^adj") and not part:find("^@") and part ~= "builtin" then local comma_separated_groups = split_alternating_runs_with_escapes(dot_separated_group, ",") if #comma_separated_groups > 3 then parse_err(("At most three comma-separated specs are allowed but saw %s"):format( #comma_separated_groups)) end if comma_separated_groups[1][2] then parse_err("Footnotes not allowed on gender indicator") end base.gender = comma_separated_groups[1][1] if not base.gender:find("^[mfn]$") then parse_err(("Unrecognized gender '%s', should be 'm', 'f' or 'n'"):format(base.gender)) end if comma_separated_groups[2] then base.gens = fetch_slot_override(comma_separated_groups[2], "genitive", true, false, parse_err) end if comma_separated_groups[3] then base.pls = fetch_slot_override(comma_separated_groups[3], "nominative plural", true, false, parse_err) end break elseif part == "" then if not dot_separated_group[2] then parse_err("Blank indicator; not allowed without attached footnotes") end base.footnotes = fetch_footnotes(dot_separated_group, parse_err) break elseif part == "addnote" then local spec_and_footnotes = fetch_footnotes(dot_separated_group, parse_err) if #spec_and_footnotes < 2 then parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'") end local slot_spec = table.remove(spec_and_footnotes, 1) local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$") if not slot_spec_inside then parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets") end local slot_specs = rsplit(slot_spec_inside, ",") -- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we? table.insert(base.addnote_specs, { slot_specs = slot_specs, footnotes = spec_and_footnotes }) break elseif ulen(part) > 3 and case_set[usub(part, 1, 3)] or ( ulen(part) > 6 and usub(part, 1, 3) == "def" and case_set[usub(part, 4, 6)]) then local slots, override = parse_override(dot_separated_group, parse_err) for _, slot in ipairs(slots) do if base.overrides[slot] then error(("Two overrides specified for slot '%s'"):format(slot)) else base.overrides[slot] = override end end break end if isadj then if m_is_adjective.parse_for_control_specs(part, parse_control_spec) then break end else if part:find("^[Uu]+_?mut") then parse_control_spec("umut", com.umut_types) break elseif not part:find("^imutval") and part:find("^%-?imut") then parse_control_spec("imut", { "imut", "-imut" }) break elseif part:find("^%-?un[uU]+_?mut") then local unumut_types_and_negated = {} for _, typ in ipairs(com.unumut_types) do table.insert(unumut_types_and_negated, typ) table.insert(unumut_types_and_negated, "-" .. typ) end parse_control_spec("unumut", unumut_types_and_negated) break elseif part:find("^%-?unimut") then parse_control_spec("unimut", { "unimut", "-unimut" }) break elseif part:find("^%-?con") then parse_control_spec("con", { "con", "-con" }) break elseif part:find("^%-?defcon") then parse_control_spec("defcon", { "defcon", "-defcon" }) break elseif not part:find("^já") and part:find("^%-?j") then -- don't trip over .já indicator parse_control_spec("j", { "j", "-j" }) break elseif not part:find("^vstem") and part:find("^%-?v") then parse_control_spec("v", { "v", "-v" }) break end end if #dot_separated_group > 1 then parse_err( ("Footnotes only allowed with slot overrides, negatable indicators and by themselves: '%s'"): format(table.concat(dot_separated_group))) elseif part:find("^adj") then if i > 1 then parse_err("Adjective spec must be the first indicator") end if base.adjspec then parse_err("Can't specify two adjective specs") end isadj = true base.adjspec = parse_adjspec(base, part:sub(4), parse_err) break elseif part:find("^[mfn]$") then if base.gender then parse_err("Can't specify gender twice") end base.gender = part break elseif not isadj and (part:find("^decllemma%s*:") or part:find("^declgender%s*:") or part:find("^declnumber%s*:")) then local field, value = part:match("^(decl[a-z]+)%s*:%s*(.+)$") if not value then parse_err(("Syntax error in decllemma/declgender/declnumber indicator: '%s'"):format(part)) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value break elseif part:find("^q%s*:") or part:find("header%s*:") then local field, value = part:match("^(q)%s*:%s*(.+)$") if not value then field, value = part:match("^(header)%s*:%s*(.+)$") end if not value then parse_err(("Syntax error in q/header indicator: '%s'"):format(part)) end if base[field] then parse_err(("Can't specify '%s:' twice"):format(field)) end base[field] = value break elseif not isadj and part:find("^@") then -- FIXME: Implement adjective scraping if base.scrape_spec then parse_err("Can't specify scrape directive '@...' twice") end if part:find(":") then base.scrape_is_suffix, base.scrape_spec, base.scrape_id = part:match("^@(%-?)(.-)%s*:%s*(.+)$") else base.scrape_is_suffix, base.scrape_spec = part:match("^@(%-?)(.-)$") end -- If we saw a hyphen, set `scrape_is_suffix` to true, otherwise false base.scrape_is_suffix = base.scrape_is_suffix == "-" if not base.scrape_spec or base.scrape_spec == "" then parse_err(("Syntax error in scrape directive '%s"):format(part)) end local scrape_init, scrape_rest = rmatch(base.scrape_spec, "^(.)(.*)$") local lower_scrape_init = ulower(scrape_init) if ulower(scrape_init) ~= scrape_init then base.scrape_is_uppercase = true base.scrape_spec = lower_scrape_init .. scrape_rest end break elseif part:find(":") then local spec, value = part:match("^([a-z]+)%s*:%s*(.+)$") if not spec then parse_err(("Syntax error in indicator with value, expecting alphabetic slot or stem/lemma " .. "override indicator: '%s'"):format(part)) end local stem_set = isadj and m_is_adjective.overridable_stem_set or overridable_stem_set if not stem_set[spec] then parse_err(("Unrecognized stem override indicator '%s', should be %s"):format( part, generate_list_of_possibilities_for_err( isadj and m_is_adjective.overridable_stems or overridable_stems))) end if base[spec] then if spec == "stem" then parse_err("Can't specify spec for 'stem:' twice (including using 'stem:' along with # or ##)") else parse_err(("Can't specify '%s:' twice"):format(spec)) end end base[spec] = value break elseif part == "#" or part == "##" then if base.stem then parse_err("Can't specify a stem spec ('stem:', # or ##) twice") end base.stem = part break elseif part == "sg" or part == "pl" or part == "both" then if base.number then if base.number ~= part then parse_err("Can't specify '" .. part .. "' along with '" .. base.number .. "'") else parse_err("Can't specify '" .. part .. "' twice") end end base.number = part break elseif part == "indef" or part == "def" or part == "bothdef" then if base.definiteness then if base.definiteness ~= part then parse_err(("Can't specify two conflicting definiteness values; saw '%s' (%s) when existing " .. "definiteness is %s"):format(part, definiteness_code_to_desc[part], definiteness_code_to_desc[base.definiteness])) else parse_err("Can't specify '" .. part .. "' twice") end end base.definiteness = part break elseif not isadj and (part == "weak" or part == "iending" or part == "rstem" or part == "já" or part == "linkasis") or isadj and (m_is_adjective.boolean_property_set[part] or part == "iscomp") or part == "proper" or part == "common" or part == "dem" or part == "builtin" or part == "indecl" or part == "decl?" then if base.props[part] then parse_err("Can't specify '" .. part .. "' twice") end base.props[part] = true break elseif part == "~" then if base.link_lowercase then parse_err("Can't specify '~' twice") end base.link_lowercase = true break elseif isadj and m_table.contains(com.unumut_types, part) then if base.adj_unumut then parse_err("Can't specify two values for reverse u-mutation spec with adjectives") end base.adj_unumut = part break end parse_err("Unrecognized indicator '" .. part .. "'") end end return base end -- Set some defaults (e.g. number and definiteness) now, because they (esp. the number) may be needed -- below when determining how to merge scraped and user-specified properies. local function set_early_base_defaults(base) if is_regular_noun(base) then local function check_err(msg) error(("Lemma '%s': %s"):format(base.lemma, msg)) end if not base.gender then check_err("Internal error: For nouns, gender must be specified") end base.number = base.number or is_proper_noun(base, base.lemma) and "sg" or base.gender == "m" and (base.lemma:find("skapur$") or base.lemma:find("naður$")) and not base.stem and "sg" or "both" base.definiteness = base.definiteness or is_proper_noun(base, base.lemma) and "indef" or "bothdef" process_declnumber(base) base.actual_gender = base.gender if base.declgender then if not base.declgender:find("^[mfn]$") then check_err(("Unrecognized gender '%s' for 'declgender:', should be 'm', 'f' or 'n'"):format( base.declgender)) end base.gender = base.declgender end end end local function parse_inside_and_merge(inside, lemma, scrape_chain) local function parse_err(msg) error(msg .. ": <" .. inside .. ">") end if #scrape_chain >= 10 then local linked_scrape_chain = {} for _, element in ipairs(scrape_chain) do table.insert(linked_scrape_chain, "[[" .. element .. "]]") end parse_err(("Probable infinite loop in scraping; scrape chain is [[%s]] -> %s"):format(lemma, table.concat(linked_scrape_chain, " -> "))) end local base = create_base() base.lemma = lemma base.scrape_chain = scrape_chain parse_inside(base, inside, #scrape_chain > 0) if not base.scrape_spec then -- If we're not scraping the declension from another noun, just return the parsed `base`. -- But don't set early defaults if we're being scraped because it interferes with overriding the number -- and/or definiteness by the noun that is scraping us. if #scrape_chain == 0 then set_early_base_defaults(base) end return base else local prefix, base_noun, declspec prefix, base_noun, declspec = com.find_scraped_infl { lemma = lemma, scrape_spec = base.scrape_spec, scrape_is_suffix = base.scrape_is_suffix, scrape_is_uppercase = base.scrape_is_uppercase, infltemp = "is-ndecl", allow_empty_infl = false, inflid = base.scrape_id, parse_off_ending = com.parse_off_final_nom_ending, } if type(declspec) == "string" then base.prefix = prefix base.base_noun = base_noun base.scrape_error = declspec return base end -- Parse the inside spec from the scraped noun (merging any sub-scraping specs), and copy over the -- user-specified properties on top of it. table.insert(scrape_chain, base_noun) local inner_base = parse_inside_and_merge(declspec.infl, base_noun, scrape_chain) inner_base.lemma = lemma inner_base.prefix = prefix inner_base.base_noun = base_noun -- Add `prefix` to a full variant of the base noun (e.g. a stem spec or full override). We may need -- to adjust the variant to take into account the base noun being a suffix and/or uppercase (e.g. when -- we use [[-dómur]] to generate the inflection of [[vísdómur]] or [[Björn]] to generate the inflection -- of [[Ásbjörn]]). local function add_prefix(form) if base.scrape_is_suffix then form = form:gsub("^%-", "") end if base.scrape_is_uppercase then local first, rest = rmatch(form, "^(.)(.*)$") if first then form = ulower(first) .. rest end end return prefix .. form end -- If there's a prefix, add it now to all the full overrides in the scraped noun, as well as 'decllemma' -- and all stem overrides. if prefix ~= "" then map_all_overrides(inner_base, function(formobj) -- Not if the override contains # or ##, which expand to the full lemma (possibly minus -r -- or -ur). if formobj.form:find("^!") and not formobj.form:find("#") then formobj.form = "!" .. add_prefix(usub(formobj.form, 2)) end end) if inner_base.decllemma then inner_base.decllemma = add_prefix(inner_base.decllemma) end for _, stem in ipairs(overridable_stems) do -- Only actual stems, not imutval; and not if the stem contains # or ##, which -- expand to the full lemma (possibly minus -r or -ur). if inner_base[stem] and stem:find("stem$") and not inner_base[stem]:find("#") then inner_base[stem] = add_prefix(inner_base[stem]) end end end local function copy_properties(plist) -- Copy various properties. for _, prop in ipairs(plist) do if base[prop] ~= nil then inner_base[prop] = base[prop] end end end copy_properties(control_specs) copy_properties(overridable_stems) copy_properties { "gens", "pls", "gender", "number", "definiteness", "decllemma", "declgender", "declnumber", "q", "header", "link_lowercase" } inner_base.footnotes = iut.combine_footnotes(inner_base.footnotes, base.footnotes) -- Copy addnote specs. for _, prop_list in ipairs { "addnote_specs" } do for _, prop in ipairs(base[prop_list]) do m_table.insertIfNot(inner_base[prop_list], prop) end end -- Now copy remaining user-specified specs into the scraped noun `base`. for _, prop_table in ipairs { "overrides", "props" } do for slot, prop in pairs(base[prop_table]) do inner_base[prop_table][slot] = prop end end -- Now determine the defaulted number and definiteness (after copying relevant settings -- but before the check just below that relies on `inner_base.number` being set). set_early_base_defaults(inner_base) -- If user specified 'sg', cancel out any pl overrides, otherwise we'll get an error. if inner_base.number == "sg" then inner_base.pls = nil for slot, _ in pairs(inner_base.overrides) do if slot:find("_p$") then inner_base.overrides[slot] = nil end end end return inner_base end end --[=[ Parse an indicator spec (text consisting of angle brackets and zero or more dot-separated indicators within them). Return value is an object of the form indicated in the comment above create_base(). ]=] local function parse_indicator_spec(angle_bracket_spec, lemma, pagename) if lemma == "" then lemma = pagename end local inside = rmatch(angle_bracket_spec, "^<(.*)>$") assert(inside) local orig_lemma = lemma local orig_lemma_no_links = m_links.remove_links(lemma) lemma = orig_lemma_no_links local base = parse_inside_and_merge(inside, lemma, {}) base.orig_lemma = orig_lemma base.orig_lemma_no_links = orig_lemma_no_links return base end -- Determine if the term has more than one word in it. Normally we just look at the number of words -- at top level. However, it's possible to have a single alternant at top level with multiple words -- in one of the arms, e.g. the equivalent of ((rēspūblica<>,rēs<>pūblica<>)). So if there's only one -- top-level "word" and it's an alternant, check the length of each arm. We also need to check for -- before-text and post-text if there's only one inflected term. local function compute_is_multiword(alternant_multiword_spec) if #alternant_multiword_spec.alternant_or_word_specs > 1 or alternant_multiword_spec.post_text ~= "" then return true end local alternant_or_word_spec = alternant_multiword_spec.alternant_or_word_specs[1] if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do if #multiword_spec > 1 or multiword_spec.post_text ~= "" or multiword_spec[1] and multiword_spec[1].before_text ~= "" then return true end end end if alternant_or_word_spec.before_text ~= "" then return true end return false end local function set_defaults_and_check_bad_indicators(base) local function check_err(msg) error(("Lemma '%s': %s"):format(base.lemma, msg)) end -- Set default values. local regular_noun = is_regular_noun(base) if not base.adjspec and base.props.builtin then set_builtin_defaults(base) end if not regular_noun and not base.adjspec then for _, control_spec in ipairs(control_specs) do if base[control_spec] then check_err(("'%s' cannot be specified with pronouns"):format(control_spec)) end end end if not regular_noun then if base.declgender then check_err("'declgender' can only be specified with regular nouns") end return end -- Check for bad indicator combinations. if base.imut and base.unimut then check_err("'imut' and 'unimut' specs cannot be specified together") end if base.umut and base.unumut then check_err("'umut' and 'unumut' specs cannot be specified together") end if base.unimut and base.unumut then check_err("'unimut' and 'unumut' specs cannot be specified together") end if base.declnumber == "pl" and (base.gens or base.pls) then check_err("Cannot set genitive or plural specs after the gender in plural-only lemmas") end if base.plvstem and not base.plstem then check_err("When 'plvstem:' given, 'plstem:' must also be given") end -- Compute whether i-mutation stems are needed. -- First check for 'imut' set by user. if not base.need_imut then -- might be set by the detected declension if base.imut then for _, formobj in ipairs(base.imut) do if formobj.form == "imut" then base.need_imut = true break end end end end -- Then check for 'unimut' set by user. if not base.need_imut then if base.unimut then for _, formobj in ipairs(base.unimut) do if formobj.form == "unimut" then base.need_imut = true break end end end end -- Then check all overrides for any beginning with a single ^. if not base.need_imut then map_all_overrides(base, function(formobj) if formobj.form:find("^%^") and not formobj.form:find("^%^%^") then base.need_imut = true return true end end) end if base.imutval and not base.need_imut then check_err("'imutval:...' specified but 'imut' and 'unimut' not specified and no forms need i-mutation") end end local function set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) -- Used when determining how to link definite-only and plural-only nouns. alternant_multiword_spec.is_multiword = compute_is_multiword(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) base.is_multiword = alternant_multiword_spec.is_multiword set_defaults_and_check_bad_indicators(base) for _, global_prop in ipairs { "q", "header" } do if base[global_prop] then if alternant_multiword_spec[global_prop] == nil then alternant_multiword_spec[global_prop] = base[global_prop] elseif alternant_multiword_spec[global_prop] ~= base[global_prop] then error(("With multiple words or alternants, set '%s' on only one of them or make them all agree"): format(global_prop)) end end end if base.props.builtin then alternant_multiword_spec.saw_builtin = true else alternant_multiword_spec.saw_non_builtin = true end if base.props.indecl then alternant_multiword_spec.saw_indecl = true else alternant_multiword_spec.saw_non_indecl = true end if base.props["decl?"] then alternant_multiword_spec.saw_unknown_decl = true else alternant_multiword_spec.saw_non_unknown_decl = true end end) end local function expand_property_sets(base) base.prop_sets = { {} } -- Construct the prop sets from all combinations of control specs, in case any given spec has more than one -- possibility. for _, control_spec in ipairs(control_specs) do local specvals = base[control_spec] -- Handle unspecified control specs. if not specvals then specvals = { false } end if #specvals == 1 then for _, prop_set in ipairs(base.prop_sets) do -- Convert 'false' back to nil prop_set[control_spec] = specvals[1] or nil end else local new_prop_sets = {} for _, prop_set in ipairs(base.prop_sets) do for _, specval in ipairs(specvals) do local new_prop_set = m_table.shallowCopy(prop_set) new_prop_set[control_spec] = specval table.insert(new_prop_sets, new_prop_set) end end base.prop_sets = new_prop_sets end end end -- Return the most likely ending to add to a stem form (e.g. from the feminine singular or the plural) to -- to get the lemma form (masculine singular). -- We use the following rules: -- 1. Stems in -nn or -ll take -ur. -- 2. Stems in -Vn or -Vl double the last letter, but not if this will result in contraction (the default -- for nouns in -[aiu]nn and -[aiu]ll, but for adjectives only in -inn), in which case -ur is added. -- 3. Stems in -Cn, -Cl, -r or -s remain unchanged. -- 4. Stems in a vowel add -r. -- 5. Remaining stems add -ur. -- Exceptional lemma forms for adjectives will need to be handled through a slash substitution spec or by -- directly specifying the lemma after a colon. local function stem_to_masc_sg_lemma_ending(stem, isadj) if stem:find("nn$") or stem:find("ll$") then return "ur" elseif not isadj and (stem:find("a[nl]$") or stem:find("[^eE]i[nl]$") or stem:find("[^aA]u[nl]$")) or isadj and stem:find("[^eE]in$") then return "ur" elseif stem:find(com.vowel_c .. "[nl]$") then return stem:sub(-1) elseif stem:find("[nlrs]$") then return "" elseif rfind(stem, com.vowel_c .. "$") then return "r" else return "ur" end end -- For a plural-only lemma, synthesize a likely singular lemma. It doesn't have to be theoretically correct as long as -- it generates all the correct plural forms. local function synthesize_singular_lemma(base) local lemma_determined -- Loop over all property sets in case the user specified multiple ones (e.g. using different control specs). If -- we try to reconstruct different lemmas for different property sets, we'll throw an error below. for _, props in ipairs(base.prop_sets) do local function interr(msg) error(("Internal error: For lemma '%s', %s: %s"):format(base.lemma, msg, dump(props))) end -- `ending` refers to the plural ending but is not currently used much. Instead, in add_decl(), when we process -- pl-only terms, we set the nom_pl to "*" so that the lemma is used directly. local stem, lemma, ending, sg_ending, default_unumut if base.gender == "m" or base.gender == "f" then stem, ending = rmatch(base.lemma, "^(.*)([aiu]r)$") if stem then -- masc: -- -- [[tónleikar]] "concert"; [[feðgar]] "father and son"; [[hafrar]] "oats" (dat pl höfrum); -- [[fjármunir]] "goods, property"; [[Fljótsdælir]] "inhabitants of Fljótsdalur (a valley)" -- (occurs definite, needs 'dem', no unimut); [[Ásmegir]] "sons of the Gods" (occurs definite, dat -- pl Ásmögum, gen pl Ásmaga, i.e. needs 'def' and 'unimut'); similarly [[ljóðmegir]]; -- [[buskuleggir]] "?" (has 'j' in dat pl [[buskuleggjum]], gen pl [[buskuleggja]]; [[Bekkir]] -- (place name; has 'j' in dat pl [[Bekkjum]], gen pl [[Bekkja]]) -- -- fem: -- [[frönskur]] "French fries" (with unumut); [[hjólbörur]] "wheelbarrow" (with unumut); [[buxur]] -- "trousers, pants", [[hættur]] "bedtime; quitting time" (with unimut); [[herðar]] "shoulders"; -- [[limar]] "branches"; [[öfgar]] "exaggeration, extreme" (no unumut); [[drefjar]] -- "stains, traces"; [[viðjar]] "chains, fetters"; many others in -jar, but the -j- is throughout -- the plural; [[svalir]] "balcony; porch"; [[dyr]] "doorway" (uses decllemma:dyrir) if ending == "ur" then -- FIXME: Does -ur as masculine plural ending occur? What should the singular be? sg_ending = base.gender == "f" and "a" or nil default_unumut = "unumut" else sg_ending = base.gender == "f" and "" or nil end if not sg_ending then sg_ending = stem_to_masc_sg_lemma_ending(stem) end elseif base.lemma:find("ær$") then -- [[barnatær]], [[fultær]], proper name [[Tær]] stem = base.lemma sg_ending = "" else error(("Masculine or feminine plural-only lemma '%s' should end in -ar, -ir or -ur"):format(base.lemma)) end elseif base.gender == "n" then -- Neuters in -i. Examples: [[fræði]] "branch of knowledge", [[jafndægri]] "equinox", [[meðmæli]] -- "recommendation", [[sannindi]] "truth", [[skæri]] "pair of scissors", [[vísindi]] "knowedge, learning". -- unimut is possible and occurs in [[læti]] "behavior, demeanor", [[ólæti]] "noise, racket". stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then sg_ending = "i" end if not stem then -- Weak neuters in -u like [[gleraugu]] "glasses/spectacles". stem, ending = rmatch(base.lemma, "^(.*[^aA])(u)$") if stem then sg_ending = "a" default_unumut = "unumut" end end if not stem then -- Generally, plural will look like singular, with no ending in the plural (but there will be umut -- if possible). Examples: [[feðgin]] "father and daughter", [[hjón]] "married couple", [[jól]] -- "Christmas", [[lok]] "end"; [[jarðgöng]] "tunnel" needing 'unumut'. stem = base.lemma sg_ending = "" default_unumut = "unumut" end else interr(("unrecognized gender '%s'"):format(base.gender)) end if default_unumut and not props.unumut and not props.umut and not props.unimut then props.unumut = { form = default_unumut, defaulted = true } end if props.unumut and props.unimut then interr("shouldn't see both 'unumut' and 'unimut' set in plural-only lemma") end if props.unumut and props.unumut.form:find("^un") then stem = com.apply_reverse_u_mutation(stem, props.unumut.form, not props.unumut.defaulted) if props.umut then interr("shouldn't see both 'unumut' and 'umut' set in plural-only lemma") end props.umut = { form = rsub(props.unumut.form, "^un", ""), footnotes = props.unumut.footnotes, defaulted = props.unumut.defaulted } props.unumut = nil end if props.unimut and props.unimut.form:find("^un") then stem = com.apply_reverse_i_mutation(stem, base.imutval) if props.imut then interr("shouldn't see both 'unimut' and 'imut' set in plural-only lemma") end props.imut = { form = rsub(props.unimut.form, "^un", ""), footnotes = props.unimut.footnotes } props.unimut = nil end lemma = stem .. sg_ending if lemma_determined and lemma_determined ~= lemma then error(("Attempt to set two different singular lemmas '%s' and '%s'"):format(lemma_determined, lemma)) end lemma_determined = lemma end base.lemma = lemma_determined base.lemma_ending = ending or "" end -- For a nominative definite lemma, synthesize the corresponding indefinite lemma. Note that a plural definite lemma may -- need to be processed twice, first to convert to plural indefinite and then to convert to singular indefinite using -- synthesize_singular_lemma(). local function synthesize_indefinite_lemma(base) local lemma_determined -- Loop over all property sets in case the user specified multiple ones (e.g. using different control specs). If -- we try to reconstruct different lemmas for different property sets, we'll throw an error below. for _, props in ipairs(base.prop_sets) do local function interr(msg) error(("Internal error: For lemma '%s', %s: %s"):format(base.lemma, msg, dump(props))) end -- There are only 6 clitic articles, depending on the combination of gender and number: -- singular: m = -inn, f = -in, n = -ið; plural: m = -nir, f = -nar, n = -in. The two beginning in n- aren't -- problematic because in all cases they simply append to the actual form. The remaining four, however, drop -- the i- before an ending [aiu]. This means we can uniquely reconstruct the dropped vowel if we see e.g. -- -að or -uð in place of -ið. But if we see -ið, we don't know whether the lemma ended in -i or a consonant. -- And in general it's important to know because it affects some forms; e.g. compare definite neuter 'knippið' -- from [[knippi]] "bundle, bunch" with 'klappið' from [[klapp]] "applause; pat, stroke". The former has -- definite genitive 'knippisins' and the latter 'klappsins'. And in fact, all three genders commonly have -- both consonant-ending and i-ending nouns in the singular. This means we need an indicator to distinguish -- them. Probably easiest is 'iending'; reusing 'weak' won't work so well because neuters in -i, and sometimes -- feminines in -i, are considered strong. local function process_n_clitic(clitic) local lemma = base.lemma:match("^(.*)" .. clitic .. "$") if not lemma then error(("Lemma '%s' declared as %s %s should end in clitic '-%s'"):format(base.lemma, gender_code_to_desc[base.gender] or "NONE", number_code_to_desc[base.number] or "NONE", clitic)) end return lemma end local function process_i_clitic(clitic) local clitic_cons_end = clitic:match("^i(.*)$") if not clitic_cons_end then interr(("clitic '%s' should begin with 'i'"):format(clitic)) end local lemma_begin, ending = base.lemma:match("^(.*)([aiu])" .. clitic_cons_end .. "$") if not lemma_begin then error(("Lemma '%s' declared as %s %s should end in clitic '-%s' or in '-a%s' or '-u%s'"):format( base.lemma, gender_code_to_desc[base.gender] or "NONE", number_code_to_desc[base.number] or "NONE", clitic, clitic_cons_end, clitic_cons_end)) end if ending == "a" or ending == "u" then if base.props.iending then error(("Property 'iending' cannot be specified because definite lemma '%s' does not end in '-%s'"): format(base.lemma, clitic)) end return lemma_begin .. ending end if base.props.iending then return lemma_begin .. "i" else return lemma_begin end end local clitic = clitic_articles[base.gender]["nom_" .. (base.number == "pl" and "p" or "s")] local lemma if clitic:find("^n") then lemma = process_n_clitic(clitic) else lemma = process_i_clitic(clitic) end if lemma_determined and lemma_determined ~= lemma then error(("Attempt to set two different indefinite lemmas '%s' and '%s'"):format(lemma_determined, lemma)) end lemma_determined = lemma end base.lemma = lemma_determined base.lemma_ending = "" end -- For an adjectival lemma, synthesize the masc singular form. local function synthesize_adj_lemma(base) local stem, ending if base.props.indecl then base.decl = "indecl" return elseif base.props["decl?"] then base.decl = "decl?" return else base.decl = "adj" local adjspec = base.adjspec if not adjspec then error("Internal error: synthesize_adj_lemma() called without a parsed adjective spec in `base.adjspec`") end if adjspec.lemma then base.lemma = adjspec.lemma elseif adjspec.subspec then local from, to = adjspec.subspec.from, adjspec.subspec.to if from then local beginpart = base.lemma:match("^(.*)" .. m_string_utilities.pattern_escape(from) .. "$") if not beginpart then error(("Adjective slash substitution spec '/%s/%s' didn't match form '%s'"):format( from, to, base.lemma)) end base.lemma = beginpart .. to else local num_to_remove if base.number == "pl" then num_to_remove = (base.gender == "m" or base.gender == "f") and 2 or 0 elseif base.gender == "m" then error(("Single-part adjective slash substitution spec '/%s' not allowed with masculine-singular " .. "adjective form '%s'; if necessary, use a two-part spec or specify the lemma directly after " .. " a colon"):format(from, base.lemma)) else num_to_remove = base.gender == "f" and 0 or 1 end base.lemma = usub(base.lemma, 1, -num_to_remove - 1) .. to end else local stem, stem_is_lemma if base.props.iscomp then base.adj_is_weak = true if base.number ~= "pl" and base.gender == "n" then stem = base.lemma:match("^(.*)a$") if not stem then error(("Neuter singular weak comparative adjective form should end in -a: %s" ):format(base.lemma)) end stem = stem .. "i" else if not base.lemma:find("i$") then error(("Plural or masculine/feminine singular weak comparative adjective form should " .. "end in -i: %s"):format(base.lemma)) end stem = base.lemma end stem_is_lemma = true elseif base.number == "pl" then stem = base.lemma:match("^(.*[^Aa])u$") if stem then base.adj_is_weak = true end if not stem then if base.gender == "m" then stem = base.lemma:match("^(.*)ir$") if not stem then error(("Masculine plural strong adjective form should end in -ir: %s"):format(base.lemma)) end elseif base.gender == "f" then stem = base.lemma:match("^(.*)ar$") if not stem then error(("Feminine plural strong adjective form should end in -ar: %s"):format(base.lemma)) end else stem = base.lemma end end else if base.gender == "m" then stem = base.lemma:match("^(.*[^Ee])i$") if stem then base.adj_is_weak = true else -- Otherwise the form is strong and should remain as is. stem = base.lemma stem_is_lemma = true end elseif base.gender == "f" or base.gender == "n" then stem = base.lemma:match("^(.*)a$") if stem then base.adj_is_weak = true end if not stem then if base.gender == "n" then error(("No automatic rules for inferring the adjective lemma from strong neuter form " .. "'%s'; you must use a slash substitution spec such as 'tvöfalt<adj/dur>' (which " .. "chops off the last letter and replaces it with 'dur') or 'ryðfrítt<adj/tt/r>' " .. "(which chops off 'tt' and replaces it with 'r'), or directly specify the lemma " .. "using e.g. 'tvö<adj:tveir>'" ):format(base.lemma)) else stem = base.lemma end end end end if not stem_is_lemma then if base.adj_unumut then stem = com.apply_reverse_u_mutation(stem, base.adj_unumut, "error if unmatchable") end base.lemma = stem .. stem_to_masc_sg_lemma_ending(stem) else base.lemma = stem end end end end -- Determine the declension and stem based on the lemma and gender. The declension is set in base.decl and the stem in -- base.stem if not already set by the user. local function determine_declension(base) local stem, ending local default_props = {} -- Determine declension if base.props.indecl then base.decl = "indecl" stem = base.lemma elseif base.props["decl?"] then base.decl = "decl?" stem = base.lemma elseif base.gender == "m" then if not stem then stem, ending = rmatch(base.lemma, "^(.*[ÁáÆæ])(r)$") if stem then -- in -ár: -- [[nár]] "corpse", [[sár]] "tub (archaic)", [[hár]] "thole, oarlock (archaic)", [[hár]] -- "spiny dogfish (archaic)" (with v-infix), [[kljár]] "weaving stone (archaic)", [[ljár]] "scythe", -- [[skjár]] "video screen, display", [[már]] "seagull", [[sjár]] "sea", [[snjár]] "snow" (with -- v-infix); vs. stems ending in -r: [[ár]] "? (archaic)", [[lár]] "wooden box for wool", [[klár]] -- "inferior horse, nag", [[pílár]] "slat, fence post; spoke (dated)", [[kentár]] "centaur" -- -- in -ær: -- [[glær]] "sea", [[skær]] "? (obsolete)", [[blær]] "gentle breeze", [[bær]] "farm; town", [[óbær]] -- "?", [[sær]] "sea", [[snær]] "snow" -- -- We used to also drop -r by default from the stem in -ýr words, but this doesn't make sense for -- adjectives and only half makes sense for nouns, so we don't do it any more. We have stems without -r: -- [[ýr]] "yew", [[býr]] "town, farm", [[gnýr]] "clash, rumble; blue wildebeest", [[týr]] "hero; god", -- also many proper names; vs. stems ending in -r: [[fýr]] "dude, guy", [[lýr]] "pollock", [[sýr]] -- "? (poetic)", [[ýr]] "? (obsolete)", [[hlýr]] "? (obsolete)", [[glýr]] "? (obsolete)" base.decl = "m" end end if not stem then stem = rmatch(base.lemma, "^(.*[Aa]ur)$") if stem then -- [[maur]] "ant", [[aur]] "loam, mud", [[gaur]] "ruffian", [[paur]] "devil; enmity", -- [[saur]] "dirt; excrement", [[staur]] "post", [[ljósastaur]] "lamp post" base.decl = "m" end end if not stem then -- There must be at least one vowel; lemmas like [[bur]] don't count. stem, ending = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*)(ur)$") if stem then if stem:find("skap$") and not base.stem then -- tons of words in -skapur base.decl = "m-skapur" elseif stem:find("nað$") and not base.stem then -- lots of words in -naður base.decl = "m-naður" default_props.umut = "uUmut" else if base.stem == base.lemma then -- [[akur]] "field" etc. where the stem includes the final -r stem = base.stem ending = "" -- not actually used default_props.con = "con" end -- [[hestur]] "horse" and lots of others base.decl = "m" end end end if not stem then stem = rmatch(base.lemma, "^(.*[Ee][iy]r)$") if stem then -- in -eir (all include -r in the stem): -- [[geir]] "?", [[eir]] "copper", [[leir]] "clay", [[Geir]] (male given name) -- -- in -eyr, including -r in the stem: -- [[reyr]] "reed", [[Reyr]] (male given name) -- in -eyr, not including -r in the stem: -- [[þeyr]] "thaw, thawing wind", [[Þeyr]] (male given name), [[Freyr]] (male given name) base.decl = "m" end end if not stem then -- There must be at least one vowel (although there don't appear to be any single-syllable -- lemmas ending in -ir other than in -eir). stem, ending = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*)(ir)$") if stem then -- [[læknir]] "physician" and many others -- [[bróðir]], [[faðir]] are r-stems if base.props.rstem then base.decl = "m-rstem" base.need_imut = true else base.decl = "m-ir" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*l)(l)$") if stem then if is_proper_noun(base, stem) and stem:find("kel$") then base.decl = "m-kell" else if not base.stem and (rfind(stem, com.cons_c .. "[aiu]l$") or stem:find("^[aiuAIU]l$")) then -- [[gaffall]] "fork" (dat pl [[göfflum]]), [[þumall]] "thumb"; [[ekkill]] "widower"; -- [[spegill]] "mirror"; [[segull]] "magnet"; [[öxull]] "axis; axle"; etc. Note that the check -- for a consonant preceding the a/i/u is important as there are words like [[manúall]] -- "manual", [[ritúall]] "ritual", [[kokteill]] "cocktail", [[feill]] "flaw, error", [[deill]] -- "dispute???" (rare, regional), [[haull]] "hernia", [[straull]] "? (rare, regional)" that -- don't have contraction. Beware of the rare word [[síill]] "sieve? strainer?" that per BÍN -- does contract to síl- before vowels. Currently the code to handle contraction will throw an -- error if you attempt to contract that word, but you can use 'vstem:...'. -- -- There are also lots of words in a vowel other than a/i/u followed by -ll, such as [[bíll]] -- "car", [[áll]] "eel", [[konsúll]] "consul", [[þræll]] "slave", [[hvoll]] "hill", [[stóll]] -- "chair", etc. In these, the final -l is the nominative singular ending, as above. -- -- Note that if the user overrode the stem (e.g. using '#' as with [[Ármann]]), we don't -- default to contraction as it may cause an error to be thrown. default_props.con = "con" end base.decl = "m" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*n)(n)$") if stem then if not base.stem and (rfind(stem, com.cons_c .. "[aiu]n$") or stem:find("^[aiuAIU]n$")) then -- As with -all/-ill/-ull although there are fewer such words in -nn. Examples: [[aftann]] "evening" -- (dat pl öftnum), [[arinn]] "hearth, fireplace" (dat pl örnum), [[drottinn]] "lord", [[himinn]] -- "sky, heaven", [[morgunn]] "morning", [[jötunn]] "giant", etc. -- -- There are also lots of words in a vowel other than a/i/u followed by -nn, such as [[fleinn]] -- "spear", [[steinn]] "rock", [[prjónn]] "knitting needle", [[daunn]] "stink", [[húnn]] "knob". -- In these, the final -n is the nominative singular ending, as above. -- -- Note that if the user overrode the stem (e.g. using '#' as with [[Ármann]]), we don't default -- to contraction as it may cause an error to be thrown. default_props.con = "con" end base.decl = "m" end end if not stem and not base.props.weak then stem, ending = rmatch(base.lemma, "^(.*[aóæ]nd)(i)$") if stem then -- [[nemandi]] "student" and many others; terms in -jandi like [[byrjandi]] -- "beginner", [[seljandi]] "seller" umlaut to -jend- in the plural instead of -ind- -- also terms in -óndi (probably all compounds of [[bóndi]] "farmer") and in -ændi -- (probably all compounds of [[frændi]]). Terms like [[andi]] "breath, spirit" and -- [[heiðasandi]] "heath sand?" need '.weak' to disable this, as does [[fjandi]] in -- the meaning "devil, demon" (vs. "enemy", which has plural [[fjendur]]). Terms like -- [[vandi]] "trouble; responsibility; custom, habit" and compounds are singular-only. base.decl = "m-ndi" if not stem:find("ænd$") then base.need_imut = true end if stem:find("jand$") then default_props.imutval = "je" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*)([ia])$") if stem then -- [[tími]] "time, hour" and many others; [[herra]] "gentleman" ([[sendiherra]] "ambassador"), -- [[séra]]/[[síra]] "reverend" base.decl = "m-weak" -- Recognize -ingi and make automatically j-infixing, but only when a vowel precedes -- (not [[ingi]], [[Ingi]], [[stingi]], [[þvingi]]). Use `-j` to turn this off. if ending == "i" and rfind(stem, com.vowel_or_hyphen_c .. ".*ing$") then default_props.j = "j" elseif ending == "i" and rfind(stem, com.vowel_or_hyphen_c .. ".*ar$") then default_props.umut = "uUmut" end end end if not stem then stem = rmatch(base.lemma, "^(.*ó)$") if stem then -- [[kanó]] "canoe", [[pesó]] "peso", [[Plútó]] "Pluto", [[Markó]] (male given name), etc. base.decl = "m-ó" end end if not stem then -- Miscellaneous masculine terms without ending stem = base.lemma base.decl = "m" end elseif base.gender == "f" then if not stem then stem, ending = rmatch(base.lemma, "^(.*)(a)$") if stem then base.decl = "f-weak" end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then base.decl = "f-i" end end if not stem and not base.stem then -- Don't match when base.stem is set, e.g. [[gimbur]] "female lamb", where the -ur is part of the stem stem, ending = rmatch(base.lemma, "^(.*[^aA])(ur)$") if stem and rfind(stem, com.vowel_or_hyphen_c) then if is_proper_noun(base, stem) then -- [[Auður]], [[Heiður]], [[Ingveldur]], [[Móeiður]], [[Þórelfur]], [[-frídur]] ([[Gunnfríður]], -- [[Hólmfríður]], [[Málfríður]], [[Sigfríður]]), [[Gerður]] ([[Hallgerður]], [[Ingigerður]], -- [[Þorgerður]]), [[Gunnur]] ([[Arngunnur]], [[Hildigunnur]]), [[Heiður]] ([[Aðalheiður]], -- [[Arnheiður]], [[Brynheiður]], [[Ragnheiður]]), [[Hildur]] ([[Ásthildur]], [[Berghildur]], -- [[Brynhildur]], [[Geirhildur]], [[Gunnhildur]], [[Ragnhildur]], [[Þórhildur]]), [[Ástríður]] -- (related names [[Guðríður]], [[Sigríður]], [[Þuríður]]), [[Þrúður]] [also a man's name] -- ([[Jarþrúður]], [[Jarðþrúður]], [[Sigþrúður]]) -- -- also with company/organization names like [[Berghildur]], [[Gunnhildur]]; likewise place names -- like [[Þuríður]] base.decl = "f-acc-dat-i" else base.decl = "f-ur" end end end if not stem and base.props.rstem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(ir)$") if stem and base.props.rstem then -- [[dóttir]], [[móðir]], [[systir]] base.decl = "f-rstem" if not stem:find("syst$") then base.need_imut = true end end end if not stem then stem = rmatch(base.lemma, "^(.*ung)$") if stem then base.decl = "f-ung" end end if not stem then stem = rmatch(base.lemma, "^(.*ing)$") if stem then base.decl = "f-ing" end end if not stem then stem = rmatch(base.lemma, "^(.*[áóúÁÓÚ])$") if stem then base.decl = "f-long-vowel" if rfind(stem, "[óÓ]$") then base.need_imut = true end end end if not stem and not base.stem then -- Not when base.stem is set, which includes [[Ýr]], following the regular endingless f declension where -- -r is part of the stem. stem, ending = rmatch(base.lemma, "^(.*[ýÝæÆ])(r)$") if stem then -- [[kýr]] "cow", [[sýr]] "sow (archaic)", [[ær]] "ewe" and compounds base.decl = "f-long-umlaut-vowel-r" default_props.unimut = "unimut" end end if not stem then stem = rmatch(base.lemma, "^(.*[^aA]un)$") if stem and rfind(stem, com.vowel_or_hyphen_c) then -- [[pöntun]] "order (in commerce)"; [[verslun]] "trade, business; store, shop"; [[efun]] "doubt"; -- [[bötun]] "improvement"; [[örvun]] "encouragement; stimulation" (pl. örvanir); etc. -- Exclude words in -aun like [[baun]] "bean", [[laun]] "secret", [[raun]] "experience". -- Some words need a different indicator, e.g. [[örvun]] "encouragement; stimulation" (pl. örvanir), -- [[fjölgun]] "increase, proliferation" (pl. fjölganir), which need "unUmut". base.decl = "f" default_props.unumut = "unuUmut" end end if not stem then -- Miscellaneous feminine terms without ending stem = base.lemma base.decl = "f" -- A function here means we resolve it to its actual value later. We don't want to trigger -- unumut if the user specified v-infix or any type of u-mutation (e.g. 'uUmut' in [[ætlan]]), -- or if the last vowel of the term is 'a' ([[dragt]], [[aukavakt]]). default_props.unumut = function(base, props) if base.vstem or props.v and props.v.form == "v" or props.umut or rfind(stem, "[Aa]" .. com.cons_c .. "*$") then return nil else return { form = "unumut", defaulted = true } end end end elseif base.gender == "n" then if not stem then stem, ending = rmatch(base.lemma, "^(.*)(a)$") if stem then base.decl = "n-weak" end end if not stem then -- stem actually includes -é but due to the change to já we include it in the ending stem, ending = rmatch(base.lemma, "^(.*)(é)$") if stem then if base.props["já"] then -- Indicator 'já' for [[tré]], [[hné]]/[[kné]], etc. base.decl = "n-já" else -- [[té]] (letter T), etc. stem = stem .. "é" base.decl = "n" end end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[kKgG])(i)$") if stem then base.decl = "n-i" default_props.j = "j" end end if not stem then stem, ending = rmatch(base.lemma, "^(.*[^eE])(i)$") if stem then base.decl = "n-i" end end if not stem then -- -ur preceded by a consonant and at least one vowel. stem = rmatch(base.lemma, "^(.*" .. com.vowel_or_hyphen_c .. ".*" .. com.cons_c .. "ur)$") if stem then base.decl = "n" default_props.con = "con" default_props.defcon = "defcon" end end if not stem then -- Miscellaneous neuter terms without ending stem = base.lemma base.decl = "n" end else error(("Internal error: `base.gender` is '%s' but should be 'm', 'f' or 'n'"):dump(base.gender)) end if base.stem then -- This isn't necessarily accurate but doesn't really matter. We only record the lemma ending to help with -- contraction of definite clitics in the nominative singular, and in the cases where the user gives an explicit -- stem, it's usually with # (meaning the ending is null) or ## (meaning the ending ends in -r), and in both -- cases there's no contraction of initial vowels in definite clitics in any case. base.lemma_ending = "" else base.stem = stem base.lemma_ending = ending or "" end for k, v in pairs(default_props) do if not base[k] then if control_spec_set[k] then for _, props in ipairs(base.prop_sets) do if type(v) == "function" then props[k] = v(base, props) else props[k] = { form = v, defaulted = true } end end else base[k] = v end end end track("decl/" .. base.decl) end local function determine_default_masc_dat_sg(base, props) -- We only need to compute the default dative singular for regular masculines (not masculines in -ir, -ó, -i, etc.). -- These other types have specific defaults for the entire type. if base.decl ~= "m" or base.number == "pl" then return end local default_dat_sg if base.overrides.dat_s then -- Track explicit override. track("masc-dat-sg-override") end local stem = base.stem if props.j and props.j.form == "j" then -- Stems with j-infix normally have null dative even if they end in two consonants, e.g. -- [[belgur]] "bellows; skin", [[fengur]] "profit", [[flekkur]] "spot, fleck", [[serkur]] -- "shirt", [[stingur]] "sting" default_dat_sg = "" elseif stem:find(com.vowel_or_hyphen_c .. ".*[iu]ng$") then -- Stems in suffix -ing or -ung normally have indef dat -i, def dat null default_dat_sg = { indef = "i", def = "" } elseif stem:find("x$") or (rfind(stem, com.cons_c .. com.cons_c .. "$") and not stem:find("kk$") and not stem:find("pp$")) then -- Other stems in two consonants normally have dat -i, but those in -kk or -pp normally -- don't, so exclude them and require explicit specification default_dat_sg = "i" elseif not rfind(stem, com.vowel_c .. "$") and is_proper_noun(base, stem) then -- proper noun whose stem does not end in a vowel default_dat_sg = "i" elseif props.con and props.con.form == "con" then default_dat_sg = "i" elseif rfind(stem, com.vowel_c .. "r?$") then default_dat_sg = "" elseif base.lemma:find("ll$") then -- nouns in -ll without contraction, which generally includes those not in -all/-ill/-ull plus a few in these -- endings such as [[panill]] "paneling" (rare variant of [[panell]]), [[kórall]] "coral", [[kristall]] -- "crystal", [[kanill]] "cinnamon" (also [[kanell]]); only a few exceptions, such as [[rafall]] "generator", -- which optionally contracts and has with dati/-:i without contraction; [[hvoll]] "hill", [[kokkáll]] -- "cuckold", [[páll]] "spade, pointed shovel", [[þræll]] "slave" with dat-:i/-; [[hóll]] "hill", [[hæll]] -- "heel", [[stóll]] "chair", which are dat-:i[footnote]/- with a footnote variously indicating that the -- dative in -i occurs only in fixed expressions, compounds, place names, etc. default_dat_sg = "" elseif base.lemma:find("nn$") then -- nouns in -nn without contraction, which generally includes those not in -ann/-inn/-unn; there are fewer of -- these than the corresponding nouns in -ll and they have default dative i/i; only exceptions I can find are -- [[húnn]] "knob", [[tónn]] "tone (music)", [[dúnn]] "down (feathers)"", which have dati:-/i. default_dat_sg = "i" elseif base.overrides.def_dat_s and base.definiteness == "def" then -- OK; user supplied def_dat_s override for a definite-only lemma elseif base.overrides.dat_s and base.overrides.dat_s.indef and base.definiteness == "indef" then -- OK; user supplied dat_s override with indefinite setting, for an indefinite-only lemma elseif base.overrides.dat_s and base.overrides.dat_s.indef and base.overrides.def_dat_s then -- OK; user supplied dat_s override with indefinite setting and def_dat_s override, which -- together provide both indefinite and definite values elseif base.overrides.dat_s and not base.overrides.dat_s.def then error(("Saw masculine stem '%s' and dative singular override of just the indefinite ending, but " .. "requires both the indefinite and definite endings of the dative singular in the form 'datINDEF/DEF'"): format(stem)) elseif not base.overrides.dat_s then local exceptions = "exceptions are nouns in -ir, -ó or -i; proper nouns; plural-only nouns; nouns with " .. "stem contraction or j-infix; nouns whose stem ends in two or more consonants, except for -kk and " .. "-pp; and nouns whose stem ends in a vowel or vowel + r" if base.definiteness == "indef" then error(("Saw masculine stem '%s' and no dative override: Most indefinite-only masculine nouns must " .. "explicitly specify the indefinite ending of the dative singular using an override of the form " .. "'datINDEF'; %s"):format(stem, exceptions)) else error(("Saw masculine stem '%s' and no dative override: Most masculine nouns must explicitly specify " .. "the indefinite and definite endings of the dative singular using an override of the form " .. "'datINDEF/DEF'; %s"):format(stem, exceptions)) end end props.default_dat_sg = default_dat_sg end -- Determine the stems and other properties to use for each property set. The list of such properties is given in the -- comment above create_base(), along with the explanation of what a property set is and why we have multiple such -- property sets (generally, one per combination of control specs such as 'con,-con' and 'umut,uUmut'). There are -- currently 9 singular stems and a corresponding 9 plural stems. local function determine_props(base) -- Now determine all the props for each prop set. for _, props in ipairs(base.prop_sets) do -- Determine the default dative singular for masculine nouns using declension "m". determine_default_masc_dat_sg(base, props) -- Almost all nouns have dative plural -um, which triggers u-mutation, so we need to compute the u-mutation -- stem using "umut" if not specifically given. Set `defaulted` so an error isn't triggered if there's no -- special u-mutated form. local props_umut = props.umut if not props_umut and (not props.unumut or props.unumut.form:find("^%-")) then props_umut = { form = "umut", defaulted = true } end -- First do all the stems, handling overall and plural-specific stems separately. for _, prefix in ipairs { "", "pl_" } do local base_stem, base_vstem if prefix == "" then base_stem = base.stem base_vstem = base.vstem else base_stem = base.plstem base_vstem = base.plvstem end -- The plstem is almost never set, so don't do a lot of unnecessary computation. if prefix == "pl_" and not base_stem then break end local stem, nonvstem, umut_nonvstem, imut_nonvstem, vstem, umut_vstem, imut_vstem, null_defvstem, umut_null_defvstem if props.unumut and not props.unumut.form:find("^%-") then umut_nonvstem = base_stem nonvstem = com.apply_reverse_u_mutation(umut_nonvstem, props.unumut.form, not props.unumut.defaulted) stem = nonvstem if base.need_imut then imut_nonvstem = com.apply_i_mutation(nonvstem, base.imutval) end if base_vstem then error(("Don't currently know how to combine '%svstem:' with 'unumut' specs"):format( prefix == "pl_" and "pl" or "")) end if props.con and props.con.form == "con" then umut_vstem = com.apply_contraction(base_stem) else umut_vstem = base_stem end vstem = com.apply_reverse_u_mutation(umut_vstem, props.unumut.form, not props.unumut.defaulted) if base.need_imut then imut_vstem = com.apply_i_mutation(vstem, base.imutval) end local props_unumut_form = props.unumut.form if props.defcon and props.defcon.form == "defcon" then umut_null_defvstem = com.apply_contraction(base_stem) else umut_null_defvstem = base_stem end null_defvstem = com.apply_reverse_u_mutation(umut_null_defvstem, props_unumut_form, not props.unumut.defaulted) elseif props.unimut and not props.unimut.form:find("^%-") then imut_nonvstem = base_stem nonvstem = com.apply_reverse_i_mutation(imut_nonvstem, base.imutval) stem = nonvstem if props_umut then umut_nonvstem = com.apply_u_mutation(nonvstem, props_umut.form, not props_umut.defaulted) end if base_vstem then error(("Don't currently know how to combine '%svstem:' with 'unimut' specs"):format( prefix == "pl_" and "pl" or "")) end if props.con and props.con.form == "con" then imut_vstem = com.apply_contraction(base_stem) else imut_vstem = base_stem end vstem = com.apply_reverse_i_mutation(imut_vstem, base.imutval) if props_umut then umut_vstem = com.apply_u_mutation(vstem, props_umut.form, not props_umut.defaulted) end if props.defcon and props.defcon.form == "defcon" then error("Don't currently know how to combine 'defcon' with 'unimut' specs") end base.need_imut = true elseif props_umut then stem = base_stem nonvstem = stem umut_nonvstem = com.apply_u_mutation(nonvstem, props_umut.form, not props_umut.defaulted) if base.need_imut then imut_nonvstem = com.apply_i_mutation(nonvstem, base.imutval) end vstem = base_vstem or base_stem if props.con and props.con.form == "con" then vstem = com.apply_contraction(vstem) end umut_vstem = com.apply_u_mutation(vstem, props_umut.form, not props_umut.defaulted) if base.need_imut then imut_vstem = com.apply_i_mutation(vstem, base.imutval) end if props.defcon and props.defcon.form == "defcon" then null_defvstem = com.apply_contraction(base_stem) else null_defvstem = base_stem end umut_null_defvstem = com.apply_u_mutation(null_defvstem, props_umut.form, not props_umut.defaulted) else -- Normally u-mutated forms should always be available, unless 'unumut' is in effect. error(("Internal error: Neither 'unumut' or 'umut' specified: %s"):format(dump(props))) end props[prefix .. "stem"] = stem if nonvstem ~= stem then props[prefix .. "nonvstem"] = nonvstem end if umut_nonvstem ~= nonvstem then -- For 'con' and 'defcon' below, footnotes can be placed on -con or -defcon so we have to check for -- those footnotes as well as checking for the vstem and such being different, so the -con and -defcon -- footnotes are still active. However, there's no such thing as -umut, and any time that there's an -- explicit umut variant given, umut_nonvstem will be different from nonvstem (otherwise an error will -- occur in apply_u_mutation), so we don't need this extra check here. if props_umut then umut_nonvstem = iut.combine_form_and_footnotes(umut_nonvstem, props_umut.footnotes) end props[prefix .. "umut_nonvstem"] = umut_nonvstem end if base.need_imut then -- imut footnotes handled specially below props[prefix .. "imut_nonvstem"] = imut_nonvstem end if vstem ~= stem or props.con and props.con.footnotes then -- See comment above for why we need to check for props.con.footnotes (basically, to handle footnotes on -- -con). if props.con then vstem = iut.combine_form_and_footnotes(vstem, props.con.footnotes) end props[prefix .. "vstem"] = vstem end if umut_vstem ~= vstem or props.con and props.con.footnotes then -- See comment above under `umut_nonvstem ~= nonvstem`. There's no -umut so whenever there's a specific -- umut variant with footnote, umut_vstem will be different from vstem so we don't need to check for -- `or props_umut and props_umut.footnotes` above. local footnotes = iut.combine_footnotes(props.con and props.con.footnotes or nil, props_umut and props_umut.footnotes or nil) umut_vstem = iut.combine_form_and_footnotes(umut_vstem, footnotes) props[prefix .. "umut_vstem"] = umut_vstem end if base.need_imut then -- imut footnotes handled specially below props[prefix .. "imut_vstem"] = imut_vstem end if null_defvstem ~= nonvstem or props.defcon and props.defcon.footnotes then -- See comment above for why we need to check for props.defcon.footnotes (basically, to handle footnotes -- on -defcon). if props.defcon then null_defvstem = iut.combine_form_and_footnotes(null_defvstem, props.defcon.footnotes) end props[prefix .. "null_defvstem"] = null_defvstem end if umut_null_defvstem ~= null_defvstem or props.defcon and props.defcon.footnotes then -- Analogous situation to the clause above that checks for `umut_vstem ~= vstem`. local footnotes = iut.combine_footnotes(props.defcon and props.defcon.footnotes or nil, props_umut and props_umut.footnotes or nil) umut_null_defvstem = iut.combine_form_and_footnotes(umut_null_defvstem, footnotes) props[prefix .. "umut_null_defvstem"] = umut_null_defvstem end end -- Do the j-infix, v-infix, imut, unimut and unumut properties. if props.j then props.jinfix = props.j.form == "j" and "j" or "" props.jinfix_footnotes = props.j.footnotes props.j = nil end if props.v then props.vinfix = props.v.form == "v" and "v" or "" props.vinfix_footnotes = props.v.footnotes props.v = nil end if props.imut then props.imut_footnotes = props.imut.footnotes props.imut = props.imut.form == "imut" and true or false end if props.unimut then props.unimut_footnotes = props.unimut.footnotes props.unimut = props.unimut.form == "unimut" and true or false end if props.unumut then props.unumut_footnotes = props.unumut.footnotes props.unumut = props.unumut.form end end end local function detect_indicator_spec(base) base.prop_sets = { {} } if base.adjspec then process_declnumber(base) synthesize_adj_lemma(base) elseif base.props.builtin then determine_builtin_props(base) else -- Replace # and ## in all overridable stems as well as all overrides. for _, stemkey in ipairs(overridable_stems) do base[stemkey] = com.replace_hashvals(base[stemkey], base.lemma) end map_all_overrides(base, function(formobj) formobj.form = com.replace_hashvals(formobj.form, base.lemma) end) expand_property_sets(base) if base.definiteness == "def" then synthesize_indefinite_lemma(base) end if base.number == "pl" then synthesize_singular_lemma(base) end determine_declension(base) determine_props(base) end end local function detect_all_indicator_specs(alternant_multiword_spec) -- Keep track of all genders seen in the singular and plural so we can determine whether to add the term to -- [[:Category:Icelandic nouns that change gender in the plural]]. FIXME: Is this needed for Icelandic? It's copied -- from Czech. alternant_multiword_spec.sg_genders = {} alternant_multiword_spec.pl_genders = {} iut.map_word_specs(alternant_multiword_spec, function(base) detect_indicator_spec(base) if base.number ~= "pl" then alternant_multiword_spec.sg_genders[base.actual_gender] = true end if base.number ~= "sg" then alternant_multiword_spec.pl_genders[base.actual_gender] = true end end) end local propagate_multiword_properties local function propagate_alternant_properties(alternant_spec, property, mixed_value, nouns_only) local seen_property for _, multiword_spec in ipairs(alternant_spec.alternants) do propagate_multiword_properties(multiword_spec, property, mixed_value, nouns_only) if seen_property == nil then seen_property = multiword_spec[property] elseif multiword_spec[property] and seen_property ~= multiword_spec[property] then seen_property = mixed_value end end alternant_spec[property] = seen_property end propagate_multiword_properties = function(multiword_spec, property, mixed_value, nouns_only) local seen_property = nil local last_seen_nounal_pos = 0 local word_specs = multiword_spec.alternant_or_word_specs or multiword_spec.word_specs for i = 1, #word_specs do local is_nounal if word_specs[i].alternants then propagate_alternant_properties(word_specs[i], property, mixed_value) is_nounal = not not word_specs[i][property] elseif nouns_only then is_nounal = is_regular_noun(word_specs[i]) else is_nounal = not not word_specs[i][property] end if is_nounal then if not word_specs[i][property] then error("Internal error: noun-type word spec without " .. property .. " set") end for j = last_seen_nounal_pos + 1, i - 1 do word_specs[j][property] = word_specs[j][property] or word_specs[i][property] end last_seen_nounal_pos = i if seen_property == nil then seen_property = word_specs[i][property] elseif seen_property ~= word_specs[i][property] then seen_property = mixed_value end end end if last_seen_nounal_pos > 0 then for i = last_seen_nounal_pos + 1, #word_specs do word_specs[i][property] = word_specs[i][property] or word_specs[last_seen_nounal_pos][property] end end multiword_spec[property] = seen_property end local function propagate_properties_downward(alternant_multiword_spec, property, default_propval) local function set_and_fetch(obj, default) local retval if obj[property] then retval = obj[property] else obj[property] = default retval = default end if not obj["actual_" .. property] then obj["actual_" .. property] = retval end return retval end local propval1 = set_and_fetch(alternant_multiword_spec, default_propval) for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do local propval2 = set_and_fetch(alternant_or_word_spec, propval1) if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do local propval3 = set_and_fetch(multiword_spec, propval2) for _, word_spec in ipairs(multiword_spec.word_specs) do local propval4 = set_and_fetch(word_spec, propval3) if propval4 == "mixed" then -- FIXME, use clearer error message. error("Attempt to assign mixed " .. property .. " to word") end set_and_fetch(word_spec, propval4) end end else if propval2 == "mixed" then -- FIXME, use clearer error message. error("Attempt to assign mixed " .. property .. " to word") end set_and_fetch(alternant_or_word_spec, propval2) end end end --[=[ Propagate `property` (one of "gender", "number" or "definiteness") from nouns to adjacent adjectives. We proceed as follows: 1. We assume the properties in question are already set on all nouns. This should happen in set_defaults_and_check_bad_indicators(). 2. We first propagate properties upwards and sideways. We recurse downwards from the top. When we encounter a multiword spec, we proceed left to right looking for a noun. When we find a noun, we fetch its property (recursing if the noun is an alternant), and propagate it to any adjectives to its left, up to the next noun to the left. When we have processed the last noun, we also propagate its property value to any adjectives to the right (to handle e.g. [[svefninn langi]] "the long sleep", where the adjective [[langi]] should inherit the 'masculine', 'singular' and 'definite' properties of [[svefninn]]). Finally, we set the property value for the multiword spec itself by combining all the non-nil properties of the individual elements. If all non-nil properties have the same value, the result is that value, otherwise it is `mixed_value` (which is "mixed" for gender, but "both" for number and "bothdef" for definiteness). 3. When we encounter an alternant spec in this process, we recursively process each alternant (which is a multiword spec) using the previous step, and combine any non-nil properties we encounter the same way as for multiword specs. 4. The effect of steps 2 and 3 is to set the property of each alternant and multiword spec based on its children or its neighbors. ]=] local function propagate_properties(alternant_multiword_spec, property, default_propval, mixed_value) propagate_multiword_properties(alternant_multiword_spec, property, mixed_value, "nouns only") propagate_multiword_properties(alternant_multiword_spec, property, mixed_value, false) propagate_properties_downward(alternant_multiword_spec, property, default_propval) end local function determine_noun_status(alternant_multiword_spec) for i, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do if alternant_or_word_spec.alternants then local is_noun = false for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do for j, word_spec in ipairs(multiword_spec.word_specs) do if is_regular_noun(word_spec) then multiword_spec.first_noun = j is_noun = true break end end end if is_noun then alternant_multiword_spec.first_noun = i end elseif is_regular_noun(alternant_or_word_spec) then alternant_multiword_spec.first_noun = i return end end end -- Set the part of speech based on properties of the individual words. local function set_pos(alternant_multiword_spec) if not alternant_multiword_spec.pos then if alternant_multiword_spec.saw_builtin and not alternant_multiword_spec.saw_non_builtin then alternant_multiword_spec.pos = "သဗ္ဗနာမ်" else alternant_multiword_spec.pos = "နာမ်" end end end local function normalize_all_lemmas(alternant_multiword_spec) iut.map_word_specs(alternant_multiword_spec, function(base) local lemma = base.orig_lemma_no_links base.actual_lemma = lemma base.lemma = base.decllemma or lemma base.source_template = alternant_multiword_spec.source_template end) end local function decline_noun(base) for _, props in ipairs(base.prop_sets) do if not decls[base.decl] then error("Internal error: Unrecognized declension type '" .. base.decl .. "'") end decls[base.decl](base, props) end handle_derived_slots_and_overrides(base) local function copy(from_slot, to_slot) base.forms["ind_" .. to_slot] = base.forms["ind_" .. from_slot] base.forms["def_" .. to_slot] = base.forms["def_" .. from_slot] end if base.actual_number ~= base.number then local source_num = base.number == "sg" and "_s" or "_p" local dest_num = base.number == "sg" and "_p" or "_s" for _, case in ipairs(cases) do copy(case .. source_num, case .. dest_num) copy("nom" .. source_num .. "_linked", "nom" .. dest_num .. "_linked") end if base.actual_number ~= "both" then local erase_num = base.actual_number == "sg" and "_p" or "_s" for _, case in ipairs(cases) do base.forms["ind_" .. case .. erase_num] = nil base.forms["def_" .. case .. erase_num] = nil end base.forms["ind_nom" .. erase_num .. "_linked"] = nil base.forms["def_nom" .. erase_num .. "_linked"] = nil end end process_addnote_specs(base) end -- Compute the categories to add the noun to, as well as the annotation to display in the -- declension title bar. We combine the code to do these functions as both categories and -- title bar contain similar information. local function compute_categories_and_annotation(alternant_multiword_spec) local all_cats = {} --local plpos = require(en_utilities_module).pluralize(alternant_multiword_spec.pos) local function inscat(cattype) m_table.insertIfNot(all_cats, "Icelandic " .. cattype) end local function inscat_noun(cattype) if plpos == "နာမ်" then inscat(cattype) end end if alternant_multiword_spec.saw_indecl and not alternant_multiword_spec.saw_non_indecl then --inscat("indeclinable " .. plpos) end if alternant_multiword_spec.saw_unknown_decl and not alternant_multiword_spec.saw_non_unknown_decl then --inscat(plpos .. " with unknown declension") end if alternant_multiword_spec.actual_number == "sg" then --inscat_noun("uncountable nouns") elseif alternant_multiword_spec.actual_number == "pl" then --inscat_noun("pluralia tantum") end local annotation local annparts = {} local irregs = {} local genderspecs = {} local stemspecs = {} local scrape_chains = {} local function insann(txt, joiner) if joiner and annparts[1] then table.insert(annparts, joiner) end table.insert(annparts, txt) end local function do_word_spec(base) local actual_gender = gender_code_to_desc[base.actual_gender] local declined_gender = gender_code_to_desc[base.gender] local gender if actual_gender ~= declined_gender then gender = ("%s (declined as %s)"):format(actual_gender, declined_gender) --inscat_noun("nouns with actual gender different from declined gender") else gender = actual_gender end if gender then m_table.insertIfNot(genderspecs, gender) end for _, props in ipairs(base.prop_sets) do -- User-specified 'decllemma:' indicates irregular stem. if base.decllemma then m_table.insertIfNot(irregs, "irreg-stem") --inscat_noun("nouns with irregular stem") end m_table.insertIfNot(stemspecs, props.stem) end end local key_entry = alternant_multiword_spec.first_noun or 1 if #alternant_multiword_spec.alternant_or_word_specs >= key_entry then local alternant_or_word_spec = alternant_multiword_spec.alternant_or_word_specs[key_entry] if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do key_entry = multiword_spec.first_noun or 1 if #multiword_spec.word_specs >= key_entry then do_word_spec(multiword_spec.word_specs[key_entry]) end end else do_word_spec(alternant_or_word_spec) end end iut.map_word_specs(alternant_multiword_spec, function(base) if base.scrape_chain[1] then local linked_scrape_chain = {} for _, element in ipairs(base.scrape_chain) do table.insert(linked_scrape_chain, ("[[%s]]"):format(element)) end m_table.insertIfNot(scrape_chains, table.concat(linked_scrape_chain, " -> ")) end end) if alternant_multiword_spec.actual_number == "sg" or alternant_multiword_spec.actual_number == "pl" then -- not "both" or "none" (for [[sebe]]) insann(alternant_multiword_spec.actual_number .. "-only", " ") end if #genderspecs > 0 then insann(table.concat(genderspecs, " // "), " ") end if #irregs > 0 then insann(table.concat(irregs, " // "), " ") end if #scrape_chains > 0 then insann(("based on %s"):format(m_table.serialCommaJoin(scrape_chains)), ", ") --inscat(plpos .. " declined using scraped base declensions") end alternant_multiword_spec.annotation = table.concat(annparts) if #stemspecs > 1 then --inscat_noun("nouns with multiple stems") end if alternant_multiword_spec.actual_number == "both" and not m_table.deepEquals(alternant_multiword_spec.sg_genders, alternant_multiword_spec.pl_genders) then --inscat_noun("nouns that change gender in the plural") end alternant_multiword_spec.categories = all_cats end local function show_forms(alternant_multiword_spec) local lemmas = {} local max_num_words = 1 for _, slot in ipairs(potential_lemma_slots) do if alternant_multiword_spec.forms[slot] then for _, formobj in ipairs(alternant_multiword_spec.forms[slot]) do table.insert(lemmas, formobj) local no_affix_form = formobj.form:gsub("^%-", ""):gsub("%-$", "") local num_words = #(rsplit(no_affix_form, "[ -]+")) max_num_words = math.max(max_num_words, num_words) end break end end alternant_multiword_spec.max_num_words = max_num_words local props = { lemmas = lemmas, slot_list = alternant_multiword_spec.noun_slots, lang = lang, } iut.show_forms(alternant_multiword_spec.forms, props) end local function make_table(alternant_multiword_spec) local forms = alternant_multiword_spec.forms local frame = mw.getCurrentFrame() local function template_prelude() return frame:expandTemplate { title = 'inflection-table-top', args = { title = '{title}{annotation}', palette = 'blue', tall = 'yes', } } end local function template_postlude() return frame:expandTemplate { title = 'inflection-table-bottom', args = { notes = '{footnote}', } } end local table_spec_both = template_prelude() .. [=[ ! rowspan="2" | ! colspan="2" | singular ! colspan="2" | plural |- ! class="secondary" | indefinite ! class="secondary" | definite ! class="secondary" | indefinite ! class="secondary" | definite |- ! nominative | {ind_nom_s} | {def_nom_s} | {ind_nom_p} | {def_nom_p} |- ! accusative | {ind_acc_s} | {def_acc_s} | {ind_acc_p} | {def_acc_p} |- ! dative | {ind_dat_s} | {def_dat_s} | {ind_dat_p} | {def_dat_p} |- ! genitive | {ind_gen_s} | {def_gen_s} | {ind_gen_p} | {def_gen_p} ]=] .. template_postlude() local function get_table_spec_one_number(number, numcode) local table_spec_one_number = [=[ ! rowspan="2" | ! colspan="2" | NUMBER |- ! class="secondary" | indefinite ! class="secondary" | definite |- ! nominative | {ind_nom_NUM} | {def_nom_NUM} |- ! accusative | {ind_acc_NUM} | {def_acc_NUM} |- ! dative | {ind_dat_NUM} | {def_dat_NUM} |- ! genitive | {ind_gen_NUM} | {def_gen_NUM} ]=] return template_prelude() .. table_spec_one_number:gsub("NUMBER", number):gsub("NUM", numcode) .. template_postlude() end local function get_table_spec_one_number_one_def(number, numcode, definiteness, defcode) local table_spec_one_number_one_def = [=[ ! colspan="2" | DEFINITENESS NUMBER |- ! nominative | {DEF_nom_NUM} |- ! accusative | {DEF_acc_NUM} |- ! dative | {DEF_dat_NUM} |- ! genitive | {DEF_gen_NUM} ]=] return template_prelude() .. (table_spec_one_number_one_def:gsub("NUMBER", number):gsub("NUM", numcode) :gsub("DEFINITENESS", definiteness):gsub("DEF", defcode)) .. template_postlude() end if alternant_multiword_spec.title then forms.title = alternant_multiword_spec.title else forms.title = 'Declension of <i lang="is">' .. forms.lemma .. '</i>' end local annotation = alternant_multiword_spec.annotation if annotation == "" then forms.annotation = "" else forms.annotation = " (<span style=\"font-size: smaller;\">" .. annotation .. "</span>)" end local number, numcode if alternant_multiword_spec.actual_number == "sg" then number, numcode = "singular", "s" elseif alternant_multiword_spec.actual_number == "pl" then number, numcode = "plural", "p" elseif alternant_multiword_spec.actual_number == "none" then -- used for [[sebe]] -- FIXME: Update for Icelandic number, numcode = "", "s" end local definiteness, defcode if alternant_multiword_spec.definiteness == "indef" then definiteness, defcode = "indefinite", "ind" elseif alternant_multiword_spec.definiteness == "def" then definiteness, defcode = "definite", "def" elseif alternant_multiword_spec.definiteness == "none" then definiteness, defcode = "", "ind" end local table_spec = alternant_multiword_spec.actual_number ~= "both" and alternant_multiword_spec.definiteness ~= "bothdef" and get_table_spec_one_number_one_def(number, numcode, definiteness, defcode) or alternant_multiword_spec.actual_number == "both" and table_spec_both or get_table_spec_one_number(number, numcode) return m_string_utilities.format(table_spec, forms) end local function compute_headword_genders(alternant_multiword_spec) local genders = {} local number if alternant_multiword_spec.actual_number == "pl" then number = "-p" else number = "" end iut.map_word_specs(alternant_multiword_spec, function(base) if base.actual_gender ~= "none" then m_table.insertIfNot(genders, base.actual_gender .. number) end end) return genders end -- Externally callable function to parse and decline a noun given user-specified arguments and the argument spec -- `argspec` (specified because the user may give multiple such specs). Return value is ALTERNANT_MULTIWORD_SPEC, an -- object where the declined forms are in `ALTERNANT_MULTIWORD_SPEC.forms` for each slot. If there are no values for a -- slot, the slot key will be missing. The value for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}. function export.do_generate_forms(args, argspec, source_template) local from_headword = source_template == "is-noun" or source_template == "is-proper noun" local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local parse_props = { parse_indicator_spec = function(angle_bracket_spec, lemma) return parse_indicator_spec(angle_bracket_spec, lemma, pagename) end, angle_brackets_omittable = true, allow_blank_lemma = true, } local alternant_multiword_spec = iut.parse_inflected_text(argspec, parse_props) alternant_multiword_spec.title = args.title alternant_multiword_spec.pos = args.pos alternant_multiword_spec.args = args alternant_multiword_spec.source_template = source_template local scrape_errors = {} iut.map_word_specs(alternant_multiword_spec, function(base) if base.scrape_error then table.insert(scrape_errors, base.scrape_error) end end) if scrape_errors[1] then alternant_multiword_spec.scrape_errors = scrape_errors else normalize_all_lemmas(alternant_multiword_spec) set_all_defaults_and_check_bad_indicators(alternant_multiword_spec) -- These need to happen before detect_all_indicator_specs() so that adjectives get their genders and number -- set appropriately, which are needed to correctly synthesize the adjective lemma. propagate_properties(alternant_multiword_spec, "number", "both", "both") -- FIXME, the default value (third param) used to be 'm' with a comment indicating that this applied only to -- plural adjectives, where it didn't matter; but in Icelandic, plural adjectives are distinguished for gender. -- Make sure 'mixed' works. propagate_properties(alternant_multiword_spec, "gender", "mixed", "mixed") propagate_properties(alternant_multiword_spec, "definiteness", "bothdef", "bothdef") detect_all_indicator_specs(alternant_multiword_spec) -- Propagate 'actual_number' after calling detect_all_indicator_specs(), which sets 'actual_number' for -- adjectives. propagate_properties(alternant_multiword_spec, "actual_number", "both", "both") determine_noun_status(alternant_multiword_spec) set_pos(alternant_multiword_spec) alternant_multiword_spec.noun_slots = get_noun_slots(alternant_multiword_spec) local inflect_props = { skip_slot = function(slot) return skip_slot(alternant_multiword_spec.actual_number, alternant_multiword_spec.definiteness, slot) end, slot_list = alternant_multiword_spec.noun_slots, inflect_word_spec = decline_noun, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) compute_categories_and_annotation(alternant_multiword_spec) alternant_multiword_spec.genders = compute_headword_genders(alternant_multiword_spec) end if args.json then alternant_multiword_spec.args = nil return require("Module:JSON").toJSON(alternant_multiword_spec) end return alternant_multiword_spec end -- Entry point for {{is-ndecl}}. Template-callable function to parse and decline a noun given -- user-specified arguments and generate a displayable table of the declined forms. function export.show(frame) local parent_args = frame:getParent().args local params = { [1] = { required = true, list = true, default = "akur<m.#>" }, deriv = { list = true }, id = {}, pos = {}, title = {}, pagename = {}, json = { type = "boolean" }, } local args = m_para.process(parent_args, params) local alternant_multiword_specs = {} for i, argspec in ipairs(args[1]) do alternant_multiword_specs[i] = export.do_generate_forms(args, argspec, "is-ndecl") end if args.json then -- JSON return value if #args[1] == 1 then return alternant_multiword_specs[1] else return alternant_multiword_specs end end local parts = {} local function ins(txt) table.insert(parts, txt) end for _, alternant_multiword_spec in ipairs(alternant_multiword_specs) do if not alternant_multiword_spec.scrape_errors then show_forms(alternant_multiword_spec) end if alternant_multiword_spec.header then ins(("'''%s:'''\n"):format(alternant_multiword_spec.header)) end if alternant_multiword_spec.q then ins(("''%s''\n"):format(alternant_multiword_spec.q)) end local categories if alternant_multiword_spec.scrape_errors then local errmsgs = {} for _, scrape_error in ipairs(alternant_multiword_spec.scrape_errors) do table.insert(errmsgs, '<span style="font-weight: bold; color: var(--wikt-palette-red,#CC2200);">' .. scrape_error .. "</span>") end -- Surround the messages with a <div> because the table normally does that, and we want to ensure -- similar formatting with respect to newlines. ins("<div>" .. table.concat(errmsgs, "<br />") .. "</div>") categories = { "Icelandic scraping errors in Template:is-ndecl" } else ins(make_table(alternant_multiword_spec)) categories = alternant_multiword_spec.categories end ins(require("Module:utilities").format_categories(categories, lang, nil, nil, force_cat)) end return table.concat(parts) end return export bbjm60wxlec8sdj3oei6xqv89dzj6eq ညးလွပ်:咽頭べさ/ချူခရက် 2 207743 393739 393737 2026-05-01T16:54:40Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393739 wikitext text/x-wiki {{also|Appendix:Variations of "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|conjunction|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|conjunction}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|conjunction}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{is-noun|@@}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|conjunction}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|conjunctions}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====Article==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|conjunction}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|conjunction}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|conjunction}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * Norwegian: ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|conjunction|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===Adverb=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===Determiner=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition|triggers soft mutation}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|conjunction}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} rscj4jv1z93vx1k3iq9cxrbvyx37o87 393741 393739 2026-05-01T17:05:25Z 咽頭べさ 33 393741 wikitext text/x-wiki ==၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁}} ==၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂}} ==၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃}} ==၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၄}} ==၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၅}} ==၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၆}} ==၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၇}} ==၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၈}} ==၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၉}} ==၁၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၀}} ==၁၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၁}} ==၁၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၂}} ==၁၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၃}} ==၁၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၄}} ==၁၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၅}} ==၁၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၆}} ==၁၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၇}} ==၁၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၈}} ==၁၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၉}} ==၂၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၀}} ==၂၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ၂၁}} ==၂၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၂}} ==၂၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၃}} ==၂၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၄}} ==၂၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၅}} ==၂၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၆}} ==၂၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၇}} ==၂၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၈}} ==၂၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၉}} ==၃၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃၀}} ==၃၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃၁}} l5yov3sn959fu4bf23y922k64ghfm72 ထာမ်ပလိက်:par/documentation 10 282327 393745 375128 2026-05-01T17:12:13Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:near-syn/documentation]] ဇရေင် [[ထာမ်ပလိက်:par/documentation]] 375128 wikitext text/x-wiki {{documentation subpage}} {{shortcut|par|parasyn|nearsyn|near-syn}} {{uses lua|nyms}} This template generates a semantic relation line with [[:en:Wiktionary:Semantic relations|near-synonyms (parasynonyms)]]. For more information, see the documentation at {{temp|synonyms}}. <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်ပရေၚ်ဆက်စပ်အဓိပ္ပာဲတံမအရေဝ်ဂမၠိုၚ်]] </includeonly> laqanx5w026fx3med6n0hrix521upsp at 0 293641 393740 2026-05-01T17:03:35Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟ..." 393740 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|conjunction|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|conjunction}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|conjunction}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{is-noun|@@}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|conjunction}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|conjunctions}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====ပစ္စဲ==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|conjunction}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|conjunction}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|conjunction}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|conjunction|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကြိယာဝိသေသန=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== {{was wotd|၂၀၂၆|မေ|၁}} ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===ဖျေံလဝ်သန္နိဋ္ဌာန်=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|conjunction}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} juz5jbduha9ir5n68cnje2p86uf5ynl 393769 393740 2026-05-01T18:23:17Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393769 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|conjunction|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|conjunction}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|conjunction}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{is-noun|@@}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|conjunction}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|သမ္ဗန္ဓ}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====ပစ္စဲ==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|conjunction}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|conjunction}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|conjunction}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|conjunction|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကြိယာဝိသေသန=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== {{was wotd|၂၀၂၆|မေ|၁}} ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===ဖျေံလဝ်သန္နိဋ္ဌာန်=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|conjunction}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} 7vj96ydx7dkv2perw4do2mm4qyyep15 393770 393769 2026-05-01T18:24:17Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393770 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|သမ္ဗန္ဓ}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|သမ္ဗန္ဓ}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{is-noun|@@}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|သမ္ဗန္ဓ}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|သမ္ဗန္ဓ}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====ပစ္စဲ==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|သမ္ဗန္ဓ}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|သမ္ဗန္ဓ}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|သမ္ဗန္ဓ}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကြိယာဝိသေသန=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== {{was wotd|၂၀၂၆|မေ|၁}} ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===ဖျေံလဝ်သန္နိဋ္ဌာန်=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|သမ္ဗန္ဓ}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} pj4xsekzutlb1ymswurrhq73ell7m3d 393793 393770 2026-05-02T06:37:24Z 咽頭べさ 33 393793 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|သမ္ဗန္ဓ}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|သမ္ဗန္ဓ}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{head|is|နာမ်}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|သမ္ဗန္ဓ}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|သမ္ဗန္ဓ}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====ပစ္စဲ==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|သမ္ဗန္ဓ}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|သမ္ဗန္ဓ}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|သမ္ဗန္ဓ}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကြိယာဝိသေသန=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== {{was wotd|၂၀၂၆|မေ|၁}} ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===ဖျေံလဝ်သန္နိဋ္ဌာန်=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|သမ္ဗန္ဓ}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} ecwkc1mnyysluzcmmyiq8k1a7ltxy73 393794 393793 2026-05-02T06:38:28Z 咽頭べさ 33 "[[at]]" ကို ကာကွယ်ခဲ့သည် ([ပလေဝ်ဒါန်=မကဵုအခေါၚ်ဆၜိုတ်ပါဲနူညးလွပ်မဒုၚ်တဲလဝ်အဝ်တဝ်ဂမၠိုၚ်] (အနန္တ) [ပြံင်ပဆုဲ=မကဵုအခေါၚ်ဆၜိုတ်ပါဲနူညးလွပ်မဒုၚ်တဲလဝ်အဝ်တဝ်ဂမၠိုၚ်] (အနန္တ)) 393793 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"}} =={{=en=}}== {{wp|AT|lang=en}} ===ဗွဟ်ရမ္သာၚ်=== * {{a|en|strong form}}: ** {{IPA|en|/æt/}} ** {{audio|en|en-us-at.ogg|a=US}} ** {{rhymes|en|æt|s=1}} * {{a|en|weak form}}: ** {{IPA|en|/ət/}} ** {{hmp|en|it<q:some accents>}} * {{hyph|en|at}} * {{hmp|en|@}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|en|enm|at}}၊ နကဵုအဆက်နူ {{inh|en|ang|æt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|en|gmw-pro|*at}}၊ နူအဆက်နကဵု {{inh|en|gem-pro|*at}}၊ မဆက်ဆေန်နူ {{inh|en|ine-pro|*h₂éd}} ====ဝိဘတ်==== {{en-head|prep}} # ပ္ဍဲ၊ အပ္ဍဲ၊ ပ္ဍဲကဵု။ ====နာမ်==== {{en-noun}} # မဆေၚ်စပ်မအရေဝ်လက္ခဏာသမ္တီ ([[@]])။ ====ကြိယာ==== {{en-verb}} # {{rare form of|en|@}} ====သဗ္ဗနာမ်==== {{en-pron}} # {{alt form|en|'at}} ====နာမ်==== {{en-noun|s|*}} # {{alt form|en|att}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|ota|آت}} ===နာမ်=== {{sq-noun|m|head=át|atllárë|áti}} # ဖုန်ချေံ၊ ဒၞာဲဂ္ဇံလ္တူချေံ။ #: {{par|sq|kálë|hamshór}} # တြုံပွမကၠောန်သ္ပစိုတ်ဓဇန်။ #: {{syn|sq|farán}} ==အာက်သေတ်ဗါဲဇြေနဳ== {{az-variant|ат|آت}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|az|/ɑt/}} * {{audio|az|LL-Q9292 (aze)-Zardabi Bakuvi-at.wav|a=Baku}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|az|trk-pro|*at}} ====နာမ်==== {{az-noun}} # ချေံ။ # သ္ဂံၚ်။ ====ကြိယာ==== {{head|az|verb form}} # {{inflection of|az|atmaq||2|s|imp}} ==ၜေဲလ်ဂဝ်လဝ်အဒေါဝ်== ===နိရုတ်=== {{bor+|bcl|tl|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{bcl-IPA}} ===သမ္ဗန္ဓ=== {{bcl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|bcl|asin|saka|buda|sagkod|nan|tapos}} ==ပွယ်ဗလာ နာဟွာတာယ်လ် ဗဟဵု== ===နာမ်=== {{head|ncx|noun}} # ဍာ်။ ==ချေူခဳ== ===နာမ်=== {{head|chk|noun}} # ကောန်ၚာ်တြုံ။ ==ခရိုၚ်မာၚ်တတာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|crh|trk-pro|*at}} ===နာမ်=== {{head|crh|noun}} # ချေံ။ ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|/ad/|[æ(d̥)]|[æ(t)]}} ====သမ္ဗန္ဓ==== {{head|da|သမ္ဗန္ဓ}} # ဂှ်။ #: {{synonyms|da|for at}} # ဣဂှ်။ #: {{synonyms|da|så at|således at}} # ၝဂှ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|da|non|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|da|[ʌ]|[ɒ̽]}} * {{q|at the beginning of a sentence}} {{IPA|da|[ʌ]|[ɒ̽]|/ad/|[æt]}} * {{homophones|da|og}} ====ကၞာတ်အမှိက်==== {{head|da|particle}} # သီု။ ==ဒါတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nl|/ɑt/}} * {{audio|nl|Nl-at.ogg}} * {{rhymes|nl|ɑt|s=1}} ===ကြိယာ=== {{head|nl|verb form}} # {{infl of|nl|eten||s|past|ind}} # {{infl of|nl|atten||bare-ten-verb}} ==ဒူရာန်ဂဝ် နာဟွာတာယ်လ်လ္ပာ်ဖာဗၟံက်== ===နာမ်=== {{head|azd|noun}} # ဍာ်။ ==အဳဂျေပ်== ===ဗီုအက္ခရ်ရောမ=== {{head|egy|romanization}} # {{egy-alt tr|ꜥt}} ==ဖာရဝ်သဳ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fo|/ɛaːʰt/}} * {{rhymes|fo|ɛaːʰt}} * {{homophones|fo|æt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}} ====ဝိဘတ်==== {{head|fo|preposition}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|fo|သမ္ဗန္ဓ}} # ဂှ်။ ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{der|fo|non|at}}၊ နူကဵုဝေါဟာ {{der|fo|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|fo|particle}} # သီု။ ==ပရိဥူလဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|fur|la|actus}} ===နာမ်=== {{fur-noun|m}} # ပရေၚ်ယဵုဒုၚ်၊ ပွမယဵုဒုၚ်၊ ပရေၚ်ဟွံရပ်စပ်။ ==ဂျာမာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|de|en|at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|de|/ɛt/}} ====နာမ်==== {{de-noun|n,-,s}} # လက်သဏအေက်။ #: {{syn|de|at-Zeichen|Klammeraffe}} ====သၚ်္ကေတ==== {{head|de|သၚ်္ကေတ}} # သၚ်္ကေတသွက်ဝေါဟာ {{m|de|technisch|technische}} {{m|de|Atmosphäre}} ==ကာဒ်တေတ်== ===ဗီုအက္ခရ်ရောမ=== {{got-rom}} # {{romanization of|got|𐌰𐍄}} ==ဟောတ်ကဳယာန်== {{zh-see|遏|poj}} ==အာက်သလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|is|/aːt/}} * {{rhymes|is|aːt|s=1}} ===နာမ်=== {{head|is|နာမ်}} # ပေါဲဗ္တိုက်။ ==အာဲယျာလာန်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ga|a=Munster,Aran|/ɑt̪ˠ/|ref={{R:ga:Finck|II|11}}}} * {{IPA|ga|a=CF|/at̪ˠ/|[aːt̪ˠ]|ref2={{R:ga:ICF|128|page=26}}}} * {{IPA|ga|a=Mayo,Ulster|/at̪ˠ/|ref={{R:ga:Quiggin|117|339}}}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|att}} ====နာမ်==== {{ga-noun|m|ait|vngen=ata|atanna}} # ယဲဂုဟ်။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ga|sga|attaid}} ====ကြိယာ==== {{head|ga|verbs|ပစ္စုပ္ပန်|atann|အနာဂတ်|atfaidh|နာမ်ပါၚ်တိုက်|at|လုပ်ကၠောန်စွံလဝ်နကဵုအတိက်|ata}} # ဂုဟ်။ #: {{syn|ga|borr}} # ဂုဟ်ဖ္ဍံၚ်ဒၟံၚ်။ # ပေၚ်တၟိုဟ်။ ===နိဿဲ=== <references/> ==ခါပ်ပုံဖေါန်ဂါမ်== ===ဗွဟ်ရမ္သာၚ်=== * {{pam-IPA}} ===သမ္ဗန္ဓ=== {{head|pam|သမ္ဗန္ဓ}} # ကဵု။ #: {{syn|pam|saka|ampo|atsaka|pati|mo|man}} ===ဝိဘတ်=== {{head|pam|preposition}} # မၞုံ။ ==လာဒေန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|lld|la|actus}} ===နာမ်=== {{lld-noun|m|ac}} # ပရေၚ်ယဵုဒုၚ်။ # ပွမ။ # မသ္ပ။ ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|la|itc-pro|*ati}}၊ နကဵုအဆက်ဝေါဟာ {{inh|la|ine-pro|*h₂et-|*h₂éti}} ====သမ္ဗန္ဓ==== {{head|la|သမ္ဗန္ဓ}} # ဆ္ဂး၊ ဏီ။ # ပ္ဍဲမွဲလ္ပာ်တေံပၠန်။ ====ဝိဘတ်==== {{la-prep|at|accusative}} # {{alternative spelling of|la|ad}} ==လဳၜိုနဳယာန်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|liv|attõ|āt|ātõ}} ===ကြိယာ=== {{head|liv|verb form}} # {{verb form of|liv|vȱlda||3|p|pres|ind}} ==အၚ်္ဂလိက် အဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|æt}}၊ နူကဵုဝေါဟာ {{inh|enm|gem-pro|*at}}၊ နကဵုအဆက်ဝေါဟာ {{inh|enm|ine-pro|*h₂éd}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|et|ed}} ====ဝိဘတ်==== {{head|enm|preposition}} # အပ္ဍဲ။ =====မဒုၚ်လွဳစ===== * {{desc|en|at}} * {{desc|sco|at}} * {{desc|yol|adh|alts=1}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{bor|enm|non|at}} ====ကၞာတ်အမှိက်==== {{head|enm|particle}} # သီု။ ==ဝေလအဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|wlm|owl|ad}}၊ နူကဵုဝေါဟာ {{der|wlm|cel-pro|*ad-|*ad}}၊ နကဵုအဆက်ဝေါဟာ {{der|wlm|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/at/}} ===ဝိဘတ်=== {{h|wlm|prep}} # ကဵု၊ အတေံ။ ==ဖရဳယှေန် သၟဝ်ကျာ== ====ပစ္စဲ==== {{head|frr|article}} # မဆေၚ်စပ်။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|e|et||Mooring}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # {{form of|frr|Reduced form|hat|pos=subject}} # {{form of|frr|Reduced form|ham|pos=object}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|'t||enclitic}} * {{alt|frr|et||Mooring|Sylt}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|frr|ofs|*jit}}၊ နူကဵုဝေါဟာ {{inh|frr|gmw-pro|*jit}} ====သဗ္ဗနာမ်==== {{head|frr|pronoun}} # ဗှ်ေၜါ၊ မဆေၚ်စပ်ကဵုၜါနကဵုဗှ်ေ။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|frr|jat||Föhr-Amrum|Mooring|both [[obsolete]]}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nb|/at/|[ɑt]}} ===သမ္ဗန္ဓ=== {{head|nb|သမ္ဗန္ဓ}} # ဂှ်။ ==နဝ်ဝေ နဳနိုတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|non|at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|nn|/ɑtː/}} * {{homophones|nn|att}} ===သမ္ဗန္ဓ=== {{head|nn|သမ္ဗန္ဓ}} # ဂှ်။ ==ဒါတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|odt|gmw-pro|*āt}}၊ နူကဵုဝေါဟာ {{inh|odt|gem-pro|*ētą}} ===နာမ်=== {{odt-noun|head=āt|n}} # စၞစ။ ====မဒုၚ်လွဳစ==== * {{desc|dum|âet}} ** {{desc|nl|aat}} ==အာဲယျာလာန်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|sga|it||second-person singular}} * {{alter|sga|ata||third-person plural relative}} ===ဗွဟ်ရမ္သာၚ်=== * {{sense|second-person singular}} {{sga-IPA|att.}} * {{sense|third-person plural relative}} {{sga-IPA|at.}} ===ကြိယာ=== {{head|sga|verb form}} # {{inflection of|sga|is||2|s|pres|indc|;|3|p|pres|indc|relative}} ==နဳနိုတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*atą}} ====နာမ်==== {{non-noun|n|ats|ǫt}} # ပြိုၚ်ပ္ကာန်ဗ္တိုက်၊ ဗ္တိုက်၊ ပေါဲဗ္တိုက်။ =====မဒုၚ်လွဳစ===== * {{desc|is|at}} ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*þat}} ====သမ္ဗန္ဓ==== {{head|non|သမ္ဗန္ဓ}} # ဂှ်။ # တုဲပၠန်၊ ဟိုတ်နူ၊ ညံၚ်ရဴ။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|no|at}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ===နိရုတ် ၃ === ဝေါဟာကၠုၚ်နူ {{inh|non|gem-pro|*at}} ====ကၞာတ်အမှိက်==== {{head|non|particle}} # သီု။ =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} ** {{desc|nb|å}} ** {{desc|nn|å}} * {{desc|sv|att}} * {{desc|da|at}} {{bottom}} ====ဝိဘတ်==== {{head|non|preposition}} # အပ္ဍဲ၊ ကဵု။ # ပွမအပ်ပြာပ်ကဵု {{+obj|non|dat}} # နူ၊ အရာပွမကလိဂွံမွဲမွဲသာ် {{+obj|non|dat}} =====မဒုၚ်လွဳစ===== {{top2}} * {{desc|is|að}} * {{desc|fo|at}} * {{desc|nn|åt}} * {{desc|gmq-osw|at|āt}} ** {{desc|sv|åt}} * {{desc|gmq-oda|at}} ** {{desc|da|ad}} *** {{desc|nb|ad}} {{bottom}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|non|gmq-pro|ᚨᚠᛏᛖᚱ}}, {{m|gmq-pro|ᛡᚠᚨᛏᛉ|ts=afᵃtr}} ====ဝိဘတ်==== {{head|non|preposition}} # ကြဴ၊ ပွမဗက်ကြဴ၊ ပ္ဍဲညာန်သမ္တီမဆေၚ်စပ်ကဵု {{+obj|non|acc}} ==ပဳပဳလ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|ppl|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|ppl|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ppl|/at/}} ===နာမ်=== {{ppl-noun|pl=ahat}} # ဍာ်။ # ဗြဲ။ # ကြုၚ်။ ==ဖဳနာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|pbv|aav-khs-pro|*ʔa:t}}၊ နူကဵုဝေါဟာ {{der|pbv|mkh-pro|*as|*as ~ ʔəs}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|pbv|/at/}} ===ကြိယာ=== {{head|pbv|verb}} # သကဵုဂုဟ်။ ==ပဝ်ချူတေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|xpo|azc-nah-pro|*aa-|*aa-tl}}၊ နူကဵုဝေါဟာ {{der|xpo|azc-pro|*pa|*pa-ta}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|xpo|/ˈat/}} ===နာမ်=== {{head|xpo|noun}} # ဍာ်။ ==သလာ== ===နိရုတ်=== {{inh+|slr|trk-pro|*at}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|slr|[ˀɑ̥tʰ]|a=Xunhua,Hualong,Qinghai|ref=Lianyun (1985): p. 5 !!! Dywer (2007): pp. 188, 191-192 !!! Kunlun (2015): p. 44, 292}} * {{IPA|slr|/ɑtʰ/|a=Ili,Xinjiang|ref=Yakup (2002): p. 42}} ===နာမ်=== {{slr-noun|ı|lar}} # ချေံ။ ===နိဿဲ=== <references/> ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|sco|enm|at}} ====ဝိဘတ်==== {{h|sco|prep}} # အပ္ဍဲ။ ====သဗ္ဗနာမ်==== {{head|sco|pronoun}} # လဵု။ # ဂှ်။ ==သကတ်ဂဴလိစ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|att}} ====နာမ်==== {{gd-noun|g=m}} # ယဲဂုဟ်၊ ယဲဖ္ဍံ။ # ပရေၚ်မပီုဂုဟ်ဒၟံၚ်၊ ပရေၚ်မစောန်ထ္ပက်တိတ်ဒၟံၚ်။ ===နိရုတ် ၂ === ဝေါဟာကၠုၚ်နူ {{inh|gd|sga|attaid}} ====ကြိယာ==== {{head|gd|verb|အတိက်|dh'at|ပစ္စုပ္ပန်|ataidh|နာမ်ပါၚ်တိုက်|at|ဝါ|atadh|လုပ်ကၠောန်စွံနကဵုအတိက်|athte}} # ဂုဟ်။ ==ကသဳလာရူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|slu|poz-cet-pro|*əpat}}၊ နူကဵုဝေါဟာ{{der|slu|poz-pro|*əpat}}၊ နကဵုအဆက်ဝေါဟာ {{der|slu|map-pro|*Səpat}}. ===ဂၞန်သၚ်္ချာ=== {{head|slu|numeral}} # ပန်။ ==သာဗ်ခြဝ်ဨရှဳယာန်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|sh|ota|آت|tr=at}} ===နာမ်=== {{sh-noun||m-an}} # ဒၞာဲဂ္ဇံလ္တူချေံ။ # သ္ဂံၚ်ချေံအာရာပ်။ ==သိမူဠူ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|smr|poz-pro|*əpat}}၊ နူကဵုဝေါဟာ {{der|smr|map-pro|*Səpat}} ===ဂၞန်သၚ်္ချာ=== {{head|smr|numeral}} # ပန်။ ==သောတ်ဂ်== ===ကြိယာ=== {{head|mnx|verb}} # တက်။ ==တာဂါလံက်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|tl|'t}} ===ဗွဟ်ရမ္သာၚ်=== {{tl-pr}} ===သမ္ဗန္ဓ=== {{tl-head|သမ္ဗန္ဓ|b=+}} # ကဵု။ #: {{syn|tl|saka|pati}} # ညံၚ်ရဴ၊ သွက်၊ ဟိုတ်နူ။ #: {{syn|tl|dahil|kasi}} ==ထလေန်ကေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|tli|[ʔʌ̀tʰ]}} ===သဗ္ဗနာမ်=== {{head|tli|pronoun}} # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ရုပ်ကပေါတ်မွဲမွဲဂမၠိုၚ်။ # ပူဂဵုစတုတ္ထမၞိဟ်ဟွံသေၚ်သဗ္ဗနာမ်ပၟိက်သၟိက်မိက်ဂွံပိုၚ်ပြဳဂမၠိုၚ်။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကြိယာဝိသေသန=== {{head|txb|adverb}} # ဒၞာဲဇမ္ၚောဲတေံ။ ==အဝ်လ် ကလိုဟ်ၜဳ တုဝ်ရေက်သ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|tcs|en|heart}} ===နာမ်=== {{head|tcs|noun}} # ကၟံ။ ==တူရကဳ== {{was wotd|၂၀၂၆|မေ|၁}} ===ဗွဟ်ရမ္သာၚ်=== * {{tr-IPA||[ˈɑt]}} * {{audio|tr|Tur-at.ogg}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|tr|ota|آت||tr=at}}၊ နူကဵုဝေါဟာ {{inh|tr|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====နာမ်==== {{tr-noun|ı|lar}} # ချေံ။ #: {{syn|tr|beygir|düldül}} # သ္ဂံၚ်။ ====ကြိယာ==== {{head|tr|verb form}} # {{tr-verb form of|atmak}} ==တာခ်မေန်== ===နိရုတ်=== {{tk-variant|c=ат|l=at|a=آت}} ဝေါဟာကၠုၚ်နူ{{inh|tk|trk-pro|*at}}, {{m|trk-pro|*ăt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑt/}} ====နာမ်==== {{tk-noun|aty|lar}} # ချေံ။ # သ္ဂံၚ်။ ===နိရုတ် ၂ === {{tk-variant|c=ат|l=at|a=آد}} ဝေါဟာကၠုၚ်နူ {{inh|tk|trk-pro|*āt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|tk|/ɑːt/}} ====နာမ်==== {{tk-noun|head=āt|ādy|lar}} # ယၟု။ # ယၟုဂကူ။ # နာမ်။ ==ဝဝ်လပုက်== ===ဖျေံလဝ်သန္နိဋ္ဌာန်=== {{head|vo|determiner}} # ဂှ်။ ==ဝါကဳ== ===ဂၞန်သၚ်္ချာ=== {{head|wbl|numeral}} # ဒ္စာံ။ ==ဝေလ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|cy|wlm|at}}၊ နကဵုအဆက်နူ {{inh|cy|cel-pro|*ad-|*ad}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|cy|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/at/}} * {{rhymes|cy|at|s=1}} ===ဝိဘတ်=== {{head|cy|preposition}} # ကဵု၊ အတေံ။ # သွက်။ # အပ္ဍဲ။ # နူ။ ==ဖရေဝ်သဳယာန်လက္ကရဴ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fy|/ɔt/}} ===သမ္ဗန္ဓ=== {{head|fy|သမ္ဗန္ဓ}} # ယဝ်။ #: {{syn|fy|as}} ==မခဳယာန် လ္ပာ်ပလိုတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|mqs|/at̪/}} ===နာမ်=== {{head|mqs|noun}} # တြုံ။ # မၞိဟ်တြုံ။ # တၠသ္ၚိ။ ==ဝဝ်လံက်== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|wo|Wo-at.ogg}} ===နာမ်=== {{wo-noun|mi}} # သၞာံ။ ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|that}}၊ နကဵုအဆက်နူ {{inh|yol|ang|þæt}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|yol|gem-pro|*þat}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|yol|et|thet|that|th'|y'at}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/|/ɛt/|/ðɛt/|/ðat/|/ð/}} ====သဗ္ဗနာမ်==== {{head|yol|pronoun}} # ဂှ်၊ မၞုံ။ ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|at|āt}}၊ နကဵုအဆက်နူ {{inh|yol|ang|ǣt}} ====ဗွဟ်ရမ္သာၚ်==== * {{IPA|yol|/at/}} ====ကြိယာ==== {{head|yol|verb form}} # {{inflection of|yol|ayth||အတိက်}} ecwkc1mnyysluzcmmyiq8k1a7ltxy73 ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ 4 293642 393742 2026-05-01T17:06:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁}} ==၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂}} ==၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃}} ==၄== {{ဝိက်ရှေန်နရ..." 393742 wikitext text/x-wiki ==၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁}} ==၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂}} ==၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃}} ==၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၄}} ==၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၅}} ==၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၆}} ==၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၇}} ==၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၈}} ==၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၉}} ==၁၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၀}} ==၁၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၁}} ==၁၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၂}} ==၁၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၃}} ==၁၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၄}} ==၁၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၅}} ==၁၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၆}} ==၁၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၇}} ==၁၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၈}} ==၁၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၁၉}} ==၂၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၀}} ==၂၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ၂၁}} ==၂၂== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၂}} ==၂၃== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၃}} ==၂၄== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၄}} ==၂၅== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၅}} ==၂၆== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၆}} ==၂၇== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၇}} ==၂၈== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၈}} ==၂၉== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၂၉}} ==၃၀== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃၀}} ==၃၁== {{ဝိက်ရှေန်နရဳ:မအရေဝ်သွက်တ္ၚဲဏအ်/၂၀၂၆/မေ ၃၁}} l5yov3sn959fu4bf23y922k64ghfm72 ထာမ်ပလိက်:near-syn 10 293643 393744 2026-05-01T17:12:13Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:near-syn]] ဇရေင် [[ထာမ်ပလိက်:par]] 393744 wikitext text/x-wiki #REDIRECT [[ထာမ်ပလိက်:par]] 2b9waxvcg529y6zbruiulqib3y46l3x ထာမ်ပလိက်:near-syn/documentation 10 293644 393746 2026-05-01T17:12:13Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:near-syn/documentation]] ဇရေင် [[ထာမ်ပလိက်:par/documentation]] 393746 wikitext text/x-wiki #REDIRECT [[ထာမ်ပလိက်:par/documentation]] 9br645wv828p39dttb56sus33ige507 ထာမ်ပလိက်:egy-alt 10 293645 393748 2026-05-01T17:13:09Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:egy-alt]] ဇရေင် [[ထာမ်ပလိက်:egy-alt tr]] 393748 wikitext text/x-wiki #REDIRECT [[ထာမ်ပလိက်:egy-alt tr]] 3h3yltr014u0ymku121djbw23w7yjny ထာမ်ပလိက်:egy-alt tr/documentation 10 293646 393749 2026-05-01T17:16:55Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} {{shortcut|Template:egy-alt tr}} ==Usage== Use like {{temp|alternative spelling of}}, except that in place of the <code>form=</code>, <code>form2=</code>, etc. parameters, there is an additional <code>type=</code> parameter, in which you can specify the transliteration system being used. <includeonly> ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဗီုပြၚ်မဆ..." 393749 wikitext text/x-wiki {{documentation subpage}} {{shortcut|Template:egy-alt tr}} ==Usage== Use like {{temp|alternative spelling of}}, except that in place of the <code>form=</code>, <code>form2=</code>, etc. parameters, there is an additional <code>type=</code> parameter, in which you can specify the transliteration system being used. <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဗီုပြၚ်မဆေၚ်စပ်ဂမၠိုၚ်]] </includeonly> f76440wqykke3nn1fbjj8e3pgq3l5dd ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဗီုပြၚ်မဆေၚ်စပ်ဂမၠိုၚ် 14 293647 393750 2026-05-01T17:18:27Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗီုပြၚ်မဆေၚ်စပ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393750 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗီုပြၚ်မဆေၚ်စပ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] lpg7pdoybo22508f551whgwb4oqqoeb ကဏ္ဍ:ထာမ်ပလိက်လေန်အဳဂျေပ်ဂမၠိုၚ် 14 293648 393751 2026-05-01T17:20:49Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393751 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] pr9mozj2hzbtio3gt9ntaantm66n3q2 ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ် 14 293649 393752 2026-05-01T17:22:45Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်တၚ်ကၞာတ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393752 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အဳဂျေပ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်တၚ်ကၞာတ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] s5gd2rb7t83bwoyyiond424skw9by8b ထာမ်ပလိက်:ppl-noun 10 293650 393754 2026-05-01T17:40:34Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|ppl|နာမ်|sort={{{sort|}}}|head={{{head|}}}}}<!-- -->{{#if:{{{p|{{{pl|}}}}}}|<!-- -->{{#ifeq: {{{p|{{{pl|}}}}}} | - <!-- -->| &#32;(''ပါဲနူကိုန်ဨကဝုစ်'')<!-- -->| &#32;(''ကိုန်ဗဟုဝစ်'' '''{{l|ppl|{{{pl|{{{p}}}}}}}}'''{{#if:{{{p2|}}}|&nbsp;''ဝါ'' '''{{l|ppl|{{{p2}}}}}''')|}}..." 393754 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{head|ppl|နာမ်|sort={{{sort|}}}|head={{{head|}}}}}<!-- -->{{#if:{{{p|{{{pl|}}}}}}|<!-- -->{{#ifeq: {{{p|{{{pl|}}}}}} | - <!-- -->| &#32;(''ပါဲနူကိုန်ဨကဝုစ်'')<!-- -->| &#32;(''ကိုန်ဗဟုဝစ်'' '''{{l|ppl|{{{pl|{{{p}}}}}}}}'''{{#if:{{{p2|}}}|&nbsp;''ဝါ'' '''{{l|ppl|{{{p2}}}}}''')|}}{{#if:{{{p2|}}}||)}}<!-- -->}}<!-- -->}}<!-- --><noinclude>{{tcat|hw}}{{documentation}}</noinclude> rxbxcxvq9p73lv7ws1eu7xnfljx1u0h ကဏ္ဍ:ထာမ်ပလိက်လာၚ်က္ဍိုပ်မအရေဝ်ပဳပဳလ်ဂမၠိုၚ် 14 293651 393755 2026-05-01T17:41:40Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်ပဳပဳလ်ဂမၠိုၚ်]][[ကဏ္ဍ:လာၚ်က္ဍိုပ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 393755 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်ပဳပဳလ်ဂမၠိုၚ်]][[ကဏ္ဍ:လာၚ်က္ဍိုပ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] t6jfts7d94twnfs3ou7x9a02638jbi2 ကဏ္ဍ:ထာမ်ပလိက်ပဳပဳလ်ဂမၠိုၚ် 14 293652 393756 2026-05-01T17:42:52Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာပဳပဳလ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 393756 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာပဳပဳလ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] jet5fmx381e6e9q8u2xijw83bxdvrs0 ထာမ်ပလိက်:tr-IPA/documentation 10 293653 393759 2026-05-01T17:48:11Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==Introduction== This template is powered by [[Module:tr-IPA]] and is used to display the phonemic (and optionally phonetic) transcription(s) of a Turkish word. ==Usage== ===Phonemic transcriptions=== This template normally takes one parameter, which is a phonemic respelling of the word, using circumflexed vowels (<code>â î û</code>) to mark the palatalization of a neighbouring <code>k</code>, <code>g</code> or <c..." 393759 wikitext text/x-wiki ==Introduction== This template is powered by [[Module:tr-IPA]] and is used to display the phonemic (and optionally phonetic) transcription(s) of a Turkish word. ==Usage== ===Phonemic transcriptions=== This template normally takes one parameter, which is a phonemic respelling of the word, using circumflexed vowels (<code>â î û</code>) to mark the palatalization of a neighbouring <code>k</code>, <code>g</code> or <code>l</code>, and/or vowel length in open syllables. Non-final stress must be marked with an apostrophe (<code>'</code>) before the stressed syllable. For example, for {{m|tr|hayal|tr=dream}}, {{m|tr|zaten|t=already}} and {{m|tr|lazım|t=necessary}} one must use: : {{tl|tr-IPA|hayâl}} : {{tl|tr-IPA|'zâten}} : {{tl|tr-IPA|lâzım}} which produce: * {{tr-IPA|hayâl}} * {{tr-IPA|'zâten}} * {{tr-IPA|lâzım}} If palatalization occurs in an open syllable without lengthening the vowel, or a long vowel occurs next to a velar <code>k</code>, <code>g</code> or <code>l</code>, then they need to be marked respectively with an asterisk (<code>*</code>) following the consonant, or a colon (<code>:</code>) following the vowel. Colons are also used to force long vowels in closed syllables. Asterisks are also used to mark palatalization next to the vowel <code>o</code>, and the palatalization of only one consonant of a given syllable. For example, for {{m|tr|katil|t=killer}}, {{m|tr|kâğıt|t=paper}}, {{m|tr|rol|t=role}} and {{m|tr|kalp|t=heart}} one must use: : {{tl|tr-IPA|ka:til}} : {{tl|tr-IPA|k*ağıt|kâ:t|q2=colloquial}} (see below for the usage of {{para|q}}) : {{tl|tr-IPA|rol*}} : {{tl|tr-IPA|kal*p}} which produce: * {{tr-IPA|ka:til}} * {{tr-IPA|k*ağıt|kâ:t|q2=colloquial}} * {{tr-IPA|rol*}} * {{tr-IPA|kal*p}} If the respelling is the same as the page title, then no parameters are needed. For example, for {{m|tr|kural|t=rule}}, {{m|tr|Hakkâri}} and {{m|tr|zekâlı|t=witted}}, whose phonemic respellings would be <code>kural</code>, <code>Hakkâri</code> and <code>zekâlı</code>, one must use: : {{tl|tr-IPA}} which produces: * {{tr-IPA|kural}} * {{tr-IPA|Hakkâri}} * {{tr-IPA|zekâlı}} If a term has multiple possible pronunciations, these must be given as separate parameters, the first of which can be left empty if it is the same as the page title. To assign qualifiers to a pronunciation, one can provide them with the parameters {{para|qual}} or {{para|q}}. For example, for {{m|tr|kahve|t=coffee}} one must use: : {{tl|tr-IPA||ka:ve|q2=colloquial}} which produces: * {{tr-IPA|kahve|ka:ve|q2=colloquial}} If a word does not have phonemic stress (e.g. in the case of a postposition), this must be marked with the parameter {{para|nostress}} or {{para|ns}}. For example, for {{m|tr|mi|pos=interrogative particle}} one must use: : {{tl|tr-IPA|ns=1}} which produces: * {{tr-IPA|mi|ns=1}} If the last vowel of a term lengthens before a vowel-initial suffix (e.g. the definite accusative ending), this should be marked by following the respelling with a plus sign (<code>+</code>), followed by the accusative vowel. If the respelling is the same as the page title, it should be omitted. Any qualifiers assigned to a pronunciation will also be assigned to its accusative form's transcription. For example, for {{m|tr|ikametgâh|t=residence}} and {{m|tr|hâl|t=state}} on must use: : {{tl|tr-IPA|ika:metgâh+ı|ikâmetgâh+ı|q2=mispronunciation}} : {{tl|tr-IPA|+i}} which produce: * {{tr-IPA|ika:metgâh+ı|ikâmetgâh+ı|q2=mispronunciation}} * {{tr-IPA|hâl+i}} If such lengthening is also accompanied by the lenition of the final consonant (i.e. a final <code>p</code>, <code>t</code> or <code>k</code> respectively turning into <code>b</code>, <code>d</code> or <code>ğ</code>), the plus sign should be replaced with a hyphen (<code>-</code>), without changing anything else. For example, for {{m|tr|imdat|t=help}}, one must use: : {{tl|tr-IPA|-ı}} which produces: * {{tr-IPA|imdat-ı}} If a word contains an optional glottal stop, this should be transcribed as <code>q</code>. For example, for {{m|tr|Kur'an-ı Kerim|t=Qur'an}}, one must use: : {{tl|tr-IPA|'Kurqânı Kerim+i}} which produces: * {{tr-IPA|'Kurqânı Kerim+i}} ===Manual transcriptions=== Phonetic transcriptions can optionally be given manually by providing a parameter enclosed in square brackets (<code>[...]</code>). For example, for {{m|tr|şeker|t=sugar}}, one may use: : {{tl|tr-IPA||[ʃe̞cʰǽɾ̝̊]}} which produces: * {{tr-IPA|şeker|[ʃe̞cʰǽɾ̝̊]}} The same can be done for phonemic transcriptions. For example for {{m|tr|g}}, one must use: : {{tl|tr-IPA|/ɡ/|/ɟ/|ge|q=near back vowels|q2=near front vowels|q3=letter name}} which produces: * {{tr-IPA|/ɡ/|/ɟ/|ge|q1=near back vowels|q2=near front vowels|q3=letter name}} <includeonly> {{tcat}} </includeonly> 4zw0kobsid42bhdqoq7xysh8413n0d6 ကဏ္ဍ:ထာမ်ပလိက်မပ္တိတ်ရမျာၚ်တူရကဳဂမၠိုၚ် 14 293654 393760 2026-05-01T17:49:26Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်တူရကဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပ္တိတ်ရမျာၚ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]]" 393760 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်တူရကဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပ္တိတ်ရမျာၚ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]] 30fss7fq2pwmv3hfa4jfgl64uszpizc ထာမ်ပလိက်:R:ga:ICF 10 293655 393761 2026-05-01T17:51:36Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:quote|call_template |template=cite-book |first=Tomás |last=de Bhaldraithe |authorlink=Tomás de Bhaldraithe |year=1975 |edition=revised |title=The Irish of Cois Fhairrge, Co. Galway: A Phonetic Study |publisher=Dublin Institute for Advanced Studies |section={{#if:{{{1|{{{section|}}}}}}|§&nbsp;{{{1|{{{section}}}}}}|}} |pageparam=page |propagateparams=line |allowparams=1,section }}<noinclude> {{documentation..." 393761 wikitext text/x-wiki {{#invoke:quote|call_template |template=cite-book |first=Tomás |last=de Bhaldraithe |authorlink=Tomás de Bhaldraithe |year=1975 |edition=revised |title=The Irish of Cois Fhairrge, Co. Galway: A Phonetic Study |publisher=Dublin Institute for Advanced Studies |section={{#if:{{{1|{{{section|}}}}}}|§&nbsp;{{{1|{{{section}}}}}}|}} |pageparam=page |propagateparams=line |allowparams=1,section }}<noinclude> {{documentation}}</noinclude> h5vz0waldo9d80anrfx005kd2ieaeqr ထာမ်ပလိက်:R:ga:ICF/documentation 10 293656 393762 2026-05-01T17:53:04Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --> ===Usage=== This template creates a reference to de Bhaldraithe’s ''The Irish of Cois Fharraige'' (1975 edition). It takes one positional parameter for the section number and one named parameter {{para|page}} for the page number. Both are optional. For chapter XV, Texts (pages 72–83), it is also possible to use {{par..." 393762 wikitext text/x-wiki {{documentation subpage}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --> ===Usage=== This template creates a reference to de Bhaldraithe’s ''The Irish of Cois Fharraige'' (1975 edition). It takes one positional parameter for the section number and one named parameter {{para|page}} for the page number. Both are optional. For chapter XV, Texts (pages 72–83), it is also possible to use {{para|line}} to specify the line number. <pre> * {{R:ga:ICF|203}} * {{R:ga:ICF|203|page=38}} * {{R:ga:ICF|page=38}} * {{R:ga:ICF|358|page=74|line=58}} </pre> * {{R:ga:ICF|203}} * {{R:ga:ICF|203|page=38}} * {{R:ga:ICF|page=38}} * {{R:ga:ICF|358|page=74|line=58}}<includeonly> <!-- CATEGORIES AND INTERWIKIS HERE, THANKS --> {{refcat}} </includeonly> quxkh1gstzj6lniiti8xtxu1j0l1djj ထာမ်ပလိက်:tk-variant 10 293657 393763 2026-05-01T17:56:46Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{| class="floatright wikitable" style="text-align:center;" |- ! colspan="2" | [[w:en:Turkmen alphabet|မလိက်တၞဟ်]] |- ! လပ်တေန် | {{#if:{{{l|}}}|{{l-self|tk|{{{l}}}}}}}‍ |- ! သဳရဳလိ | {{#if:{{{c|}}}|{{l-self|tk|{{{c}}}|tr=-}}}}‍ |- ! အာရဗဳ | {{#if:{{{a|}}}|{{l-self|tk|{{{a}}}|tr=-}}}} |- |}<noinclude>{{tcat}}</noinclude>" 393763 wikitext text/x-wiki {| class="floatright wikitable" style="text-align:center;" |- ! colspan="2" | [[w:en:Turkmen alphabet|မလိက်တၞဟ်]] |- ! လပ်တေန် | {{#if:{{{l|}}}|{{l-self|tk|{{{l}}}}}}}‍ |- ! သဳရဳလိ | {{#if:{{{c|}}}|{{l-self|tk|{{{c}}}|tr=-}}}}‍ |- ! အာရဗဳ | {{#if:{{{a|}}}|{{l-self|tk|{{{a}}}|tr=-}}}} |- |}<noinclude>{{tcat}}</noinclude> i5bhegu2zw1oph48ffmsc2324lp3q0p ကဏ္ဍ:ထာမ်ပလိက်ပွမပ္ညုၚ်ထ္ၜးဝေါဟာတာခ်မေန်ဂမၠိုၚ် 14 293658 393764 2026-05-01T17:58:39Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်လေန်တာခ်မေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပွမပ္ညုၚ်ထ္ၜးဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]]" 393764 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်လေန်တာခ်မေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပွမပ္ညုၚ်ထ္ၜးဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]] jrg5u3b1vkbnus148fukdzevl6jzlxc ကဏ္ဍ:ထာမ်ပလိက်လေန်တာခ်မေန်ဂမၠိုၚ် 14 293659 393765 2026-05-01T18:00:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်တာခ်မေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]]" 393765 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်တာခ်မေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|တ]] 0z81vtp2i5rbnzp3m19vaafofi2q1ub aagga 0 293660 393772 2026-05-01T18:38:45Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အေၚ်နုကတဳတောတ်== ===အာမေဍိက်=== {{head|iu|interjection}} # {{iu-spel}}" 393772 wikitext text/x-wiki ==အေၚ်နုကတဳတောတ်== ===အာမေဍိက်=== {{head|iu|interjection}} # {{iu-spel}} 7jt3qh84dma9r21fmb09tow3bjvqfn1 ထာမ်ပလိက်:iu-spel 10 293661 393774 2026-05-01T18:40:56Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "<includeonly>{{#invoke:iu-spel|spelling|{{{1}}}}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude>" 393774 wikitext text/x-wiki <includeonly>{{#invoke:iu-spel|spelling|{{{1}}}}}</includeonly><!-- --><noinclude>{{documentation}}</noinclude> gzhtv46rpvucf47yr7mkeeltlfnwjid မဝ်ဂျူ:iu-spel 828 293662 393775 2026-05-01T18:44:43Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "local export = {} local lang = require("Module:languages").getByCode("iu") function export.spelling(s_input) if not s_input:getParent().args[1] then local word = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) local output = "" local i = 1 while i <= string.len(word) do first1 = string.sub(word, i, i) first2 = string.sub(word, i, i + 1) first3 = string.sub(word, i, i + 2) first4 =..." 393775 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("iu") function export.spelling(s_input) if not s_input:getParent().args[1] then local word = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) local output = "" local i = 1 while i <= string.len(word) do first1 = string.sub(word, i, i) first2 = string.sub(word, i, i + 1) first3 = string.sub(word, i, i + 2) first4 = string.sub(word, i, i + 3) first5 = string.sub(word, i, i + 4) if first2 == "aa" then output = output .. "ᐋ" i = i + 2 elseif first2 == "ai" then output = output .. "ᐁ" i = i + 2 elseif first1 == "a" then output = output .. "ᐊ" i = i + 1 elseif first2 == "ii" then output = output .. "ᐄ" i = i + 2 elseif first1 == "i" then output = output .. "ᐃ" i = i + 1 elseif first2 == "uu" then output = output .. "ᐆ" i = i + 2 elseif first1 == "u" then output = output .. "ᐅ" i = i + 1 elseif first3 == "paa" then output = output .. "ᐹ" i = i + 3 elseif first3 == "pai" then output = output .. "ᐯ" i = i + 3 elseif first2 == "pa" then output = output .. "ᐸ" i = i + 2 elseif first3 == "pii" then output = output .. "ᐲ" i = i + 3 elseif first2 == "pi" then output = output .. "ᐱ" i = i + 2 elseif first3 == "puu" then output = output .. "ᐴ" i = i + 3 elseif first2 == "pu" then output = output .. "ᐳ" i = i + 2 elseif first3 == "taa" then output = output .. "ᑖ" i = i + 3 elseif first3 == "tai" then output = output .. "ᑌ" i = i + 3 elseif first2 == "ta" then output = output .. "ᑕ" i = i + 2 elseif first3 == "tii" then output = output .. "ᑏ" i = i + 3 elseif first2 == "ti" then output = output .. "ᑎ" i = i + 2 elseif first3 == "tuu" then output = output .. "ᑑ" i = i + 3 elseif first2 == "tu" then output = output .. "ᑐ" i = i + 2 elseif first3 == "kaa" then output = output .. "ᑳ" i = i + 3 elseif first3 == "kai" then output = output .. "ᑫ" i = i + 3 elseif first2 == "ka" then output = output .. "ᑲ" i = i + 2 elseif first3 == "kii" then output = output .. "ᑮ" i = i + 3 elseif first2 == "ki" then output = output .. "ᑭ" i = i + 2 elseif first3 == "kuu" then output = output .. "ᑰ" i = i + 3 elseif first2 == "ku" then output = output .. "ᑯ" i = i + 2 elseif first4 == "ngaa" then output = output .. "ᖔ" i = i + 4 elseif first4 == "ngai" then output = output .. "ᙰ" i = i + 4 elseif first3 == "nga" then output = output .. "ᖓ" i = i + 3 elseif first4 == "ngii" then output = output .. "ᖐ" i = i + 4 elseif first3 == "ngi" then output = output .. "ᖏ" i = i + 3 elseif first4 == "nguu" then output = output .. "ᖒ" i = i + 4 elseif first3 == "ngu" then output = output .. "ᖑ" i = i + 3 elseif first5 == "nngaa" then output = output .. "ᙶ" i = i + 5 elseif first4 == "nnga" then output = output .. "ᙵ" i = i + 4 elseif first5 == "nngii" then output = output .. "ᙲ" i = i + 5 elseif first4 == "nngi" then output = output .. "ᙱ" i = i + 4 elseif first5 == "nnguu" then output = output .. "ᙴ" i = i + 5 elseif first4 == "nngu" then output = output .. "ᙳ" i = i + 4 elseif first3 == "gaa" then output = output .. "ᒑ" i = i + 3 elseif first3 == "gai" then output = output .. "ᒉ" i = i + 3 elseif first2 == "ga" then output = output .. "ᒐ" i = i + 2 elseif first3 == "gii" then output = output .. "ᒌ" i = i + 3 elseif first2 == "gi" then output = output .. "ᒋ" i = i + 2 elseif first3 == "guu" then output = output .. "ᒎ" i = i + 3 elseif first2 == "gu" then output = output .. "ᒍ" i = i + 2 elseif first3 == "maa" then output = output .. "ᒫ" i = i + 3 elseif first3 == "mai" then output = output .. "ᒣ" i = i + 3 elseif first2 == "ma" then output = output .. "ᒪ" i = i + 2 elseif first3 == "mii" then output = output .. "ᒦ" i = i + 3 elseif first2 == "mi" then output = output .. "ᒥ" i = i + 2 elseif first3 == "muu" then output = output .. "ᒨ" i = i + 3 elseif first2 == "mu" then output = output .. "ᒧ" i = i + 2 elseif first3 == "naa" then output = output .. "ᓈ" i = i + 3 elseif first3 == "nai" then output = output .. "ᓀ" i = i + 3 elseif first2 == "na" then output = output .. "ᓇ" i = i + 2 elseif first3 == "nii" then output = output .. "ᓃ" i = i + 3 elseif first2 == "ni" then output = output .. "ᓂ" i = i + 2 elseif first3 == "nuu" then output = output .. "ᓅ" i = i + 3 elseif first2 == "nu" then output = output .. "ᓄ" i = i + 2 elseif first3 == "saa" then output = output .. "ᓵ" i = i + 3 elseif first3 == "sai" then output = output .. "ᓭ" i = i + 3 elseif first2 == "sa" then output = output .. "ᓴ" i = i + 2 elseif first3 == "sii" then output = output .. "ᓰ" i = i + 3 elseif first2 == "si" then output = output .. "ᓯ" i = i + 2 elseif first3 == "suu" then output = output .. "ᓲ" i = i + 3 elseif first2 == "su" then output = output .. "ᓱ" i = i + 2 elseif first3 == "laa" then output = output .. "ᓛ" i = i + 3 elseif first3 == "lai" then output = output .. "ᓓ" i = i + 3 elseif first2 == "la" then output = output .. "ᓚ" i = i + 2 elseif first3 == "lii" then output = output .. "ᓖ" i = i + 3 elseif first2 == "li" then output = output .. "ᓕ" i = i + 2 elseif first3 == "luu" then output = output .. "ᓘ" i = i + 3 elseif first2 == "lu" then output = output .. "ᓗ" i = i + 2 elseif first3 == "jaa" then output = output .. "ᔮ" i = i + 3 elseif first3 == "jai" then output = output .. "ᔦ" i = i + 3 elseif first2 == "ja" then output = output .. "ᔭ" i = i + 2 elseif first3 == "jii" then output = output .. "ᔩ" i = i + 3 elseif first2 == "ji" then output = output .. "ᔨ" i = i + 2 elseif first3 == "juu" then output = output .. "ᔫ" i = i + 3 elseif first2 == "ju" then output = output .. "ᔪ" i = i + 2 elseif first3 == "vaa" then output = output .. "ᕚ" i = i + 3 elseif first3 == "vai" then output = output .. "ᕓ" i = i + 3 elseif first2 == "va" then output = output .. "ᕙ" i = i + 2 elseif first3 == "vii" then output = output .. "ᕖ" i = i + 3 elseif first2 == "vi" then output = output .. "ᕕ" i = i + 2 elseif first3 == "vuu" then output = output .. "ᕘ" i = i + 3 elseif first2 == "vu" then output = output .. "ᕗ" i = i + 2 elseif first3 == "raa" then output = output .. "ᕌ" i = i + 3 elseif first3 == "rai" then output = output .. "ᕃ" i = i + 3 elseif first2 == "ra" then output = output .. "ᕋ" i = i + 2 elseif first3 == "rii" then output = output .. "ᕇ" i = i + 3 elseif first2 == "ri" then output = output .. "ᕆ" i = i + 2 elseif first3 == "ruu" then output = output .. "ᕉ" i = i + 3 elseif first2 == "ru" then output = output .. "ᕈ" i = i + 2 elseif first3 == "qaa" then output = output .. "ᖄ" i = i + 3 elseif first3 == "qai" then output = output .. "ᙯ" i = i + 3 elseif first2 == "qa" then output = output .. "ᖃ" i = i + 2 elseif first3 == "qii" then output = output .. "ᖀ" i = i + 3 elseif first2 == "qi" then output = output .. "ᕿ" i = i + 2 elseif first3 == "quu" then output = output .. "ᖂ" i = i + 3 elseif first2 == "qu" then output = output .. "ᖁ" i = i + 2 elseif first3 == "łaa" then output = output .. "ᖥ" i = i + 3 elseif first2 == "ła" then output = output .. "ᖤ" i = i + 2 elseif first3 == "łii" then output = output .. "ᖡ" i = i + 3 elseif first2 == "łi" then output = output .. "ᖠ" i = i + 2 elseif first3 == "łuu" then output = output .. "ᖣ" i = i + 3 elseif first2 == "łu" then output = output .. "ᖢ" i = i + 2 elseif first1 == "h" then output = output .. "ᐦ" i = i + 1 elseif first1 == "p" then output = output .. "ᑉ" i = i + 1 elseif first1 == "t" then output = output .. "ᑦ" i = i + 1 elseif first1 == "k" then output = output .. "ᒃ" i = i + 1 elseif first2 == "ng" then output = output .. "ᖕ" i = i + 2 elseif first3 == "nng" then output = output .. "ᖖ" i = i + 3 elseif first1 == "g" then output = output .. "ᒡ" i = i + 1 elseif first1 == "m" then output = output .. "ᒻ" i = i + 1 elseif first1 == "n" then output = output .. "ᓐ" i = i + 1 elseif first1 == "s" then output = output .. "ᔅ" i = i + 1 elseif first1 == "l" then output = output .. "ᓪ" i = i + 1 elseif first1 == "j" then output = output .. "ᔾ" i = i + 1 elseif first1 == "v" then output = output .. "ᕝ" i = i + 1 elseif first1 == "r" then output = output .. "ᕐ" i = i + 1 elseif first1 == "q" then output = output .. "ᖅ" i = i + 1 elseif first1 == "ł" then output = output .. "ᖦ" i = i + 1 else output = output .. first1 i = i + 1 end end return s_input:expandTemplate{ title = "ခ္ဍံက်လိက်နူဝေါဟာ", args = {[1] = "iu", [2] = "Latin", [3] = output}} else return s_input:expandTemplate{ title = "ခ္ဍံက်လိက်နူဝေါဟာ", args = {[1] = "iu", [2] = "Latin", [3] = s_input:getParent().args[1]}} end end return export gix7g3zbg0xkceav2bciu6metz71ft1 393784 393775 2026-05-01T19:04:06Z 咽頭べさ 33 393784 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("iu") function export.spelling(s_input) if not s_input:getParent().args[1] then local word = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) local output = "" local i = 1 while i <= string.len(word) do first1 = string.sub(word, i, i) first2 = string.sub(word, i, i + 1) first3 = string.sub(word, i, i + 2) first4 = string.sub(word, i, i + 3) first5 = string.sub(word, i, i + 4) if first2 == "aa" then output = output .. "ᐋ" i = i + 2 elseif first2 == "ai" then output = output .. "ᐁ" i = i + 2 elseif first1 == "a" then output = output .. "ᐊ" i = i + 1 elseif first2 == "ii" then output = output .. "ᐄ" i = i + 2 elseif first1 == "i" then output = output .. "ᐃ" i = i + 1 elseif first2 == "uu" then output = output .. "ᐆ" i = i + 2 elseif first1 == "u" then output = output .. "ᐅ" i = i + 1 elseif first3 == "paa" then output = output .. "ᐹ" i = i + 3 elseif first3 == "pai" then output = output .. "ᐯ" i = i + 3 elseif first2 == "pa" then output = output .. "ᐸ" i = i + 2 elseif first3 == "pii" then output = output .. "ᐲ" i = i + 3 elseif first2 == "pi" then output = output .. "ᐱ" i = i + 2 elseif first3 == "puu" then output = output .. "ᐴ" i = i + 3 elseif first2 == "pu" then output = output .. "ᐳ" i = i + 2 elseif first3 == "taa" then output = output .. "ᑖ" i = i + 3 elseif first3 == "tai" then output = output .. "ᑌ" i = i + 3 elseif first2 == "ta" then output = output .. "ᑕ" i = i + 2 elseif first3 == "tii" then output = output .. "ᑏ" i = i + 3 elseif first2 == "ti" then output = output .. "ᑎ" i = i + 2 elseif first3 == "tuu" then output = output .. "ᑑ" i = i + 3 elseif first2 == "tu" then output = output .. "ᑐ" i = i + 2 elseif first3 == "kaa" then output = output .. "ᑳ" i = i + 3 elseif first3 == "kai" then output = output .. "ᑫ" i = i + 3 elseif first2 == "ka" then output = output .. "ᑲ" i = i + 2 elseif first3 == "kii" then output = output .. "ᑮ" i = i + 3 elseif first2 == "ki" then output = output .. "ᑭ" i = i + 2 elseif first3 == "kuu" then output = output .. "ᑰ" i = i + 3 elseif first2 == "ku" then output = output .. "ᑯ" i = i + 2 elseif first4 == "ngaa" then output = output .. "ᖔ" i = i + 4 elseif first4 == "ngai" then output = output .. "ᙰ" i = i + 4 elseif first3 == "nga" then output = output .. "ᖓ" i = i + 3 elseif first4 == "ngii" then output = output .. "ᖐ" i = i + 4 elseif first3 == "ngi" then output = output .. "ᖏ" i = i + 3 elseif first4 == "nguu" then output = output .. "ᖒ" i = i + 4 elseif first3 == "ngu" then output = output .. "ᖑ" i = i + 3 elseif first5 == "nngaa" then output = output .. "ᙶ" i = i + 5 elseif first4 == "nnga" then output = output .. "ᙵ" i = i + 4 elseif first5 == "nngii" then output = output .. "ᙲ" i = i + 5 elseif first4 == "nngi" then output = output .. "ᙱ" i = i + 4 elseif first5 == "nnguu" then output = output .. "ᙴ" i = i + 5 elseif first4 == "nngu" then output = output .. "ᙳ" i = i + 4 elseif first3 == "gaa" then output = output .. "ᒑ" i = i + 3 elseif first3 == "gai" then output = output .. "ᒉ" i = i + 3 elseif first2 == "ga" then output = output .. "ᒐ" i = i + 2 elseif first3 == "gii" then output = output .. "ᒌ" i = i + 3 elseif first2 == "gi" then output = output .. "ᒋ" i = i + 2 elseif first3 == "guu" then output = output .. "ᒎ" i = i + 3 elseif first2 == "gu" then output = output .. "ᒍ" i = i + 2 elseif first3 == "maa" then output = output .. "ᒫ" i = i + 3 elseif first3 == "mai" then output = output .. "ᒣ" i = i + 3 elseif first2 == "ma" then output = output .. "ᒪ" i = i + 2 elseif first3 == "mii" then output = output .. "ᒦ" i = i + 3 elseif first2 == "mi" then output = output .. "ᒥ" i = i + 2 elseif first3 == "muu" then output = output .. "ᒨ" i = i + 3 elseif first2 == "mu" then output = output .. "ᒧ" i = i + 2 elseif first3 == "naa" then output = output .. "ᓈ" i = i + 3 elseif first3 == "nai" then output = output .. "ᓀ" i = i + 3 elseif first2 == "na" then output = output .. "ᓇ" i = i + 2 elseif first3 == "nii" then output = output .. "ᓃ" i = i + 3 elseif first2 == "ni" then output = output .. "ᓂ" i = i + 2 elseif first3 == "nuu" then output = output .. "ᓅ" i = i + 3 elseif first2 == "nu" then output = output .. "ᓄ" i = i + 2 elseif first3 == "saa" then output = output .. "ᓵ" i = i + 3 elseif first3 == "sai" then output = output .. "ᓭ" i = i + 3 elseif first2 == "sa" then output = output .. "ᓴ" i = i + 2 elseif first3 == "sii" then output = output .. "ᓰ" i = i + 3 elseif first2 == "si" then output = output .. "ᓯ" i = i + 2 elseif first3 == "suu" then output = output .. "ᓲ" i = i + 3 elseif first2 == "su" then output = output .. "ᓱ" i = i + 2 elseif first3 == "laa" then output = output .. "ᓛ" i = i + 3 elseif first3 == "lai" then output = output .. "ᓓ" i = i + 3 elseif first2 == "la" then output = output .. "ᓚ" i = i + 2 elseif first3 == "lii" then output = output .. "ᓖ" i = i + 3 elseif first2 == "li" then output = output .. "ᓕ" i = i + 2 elseif first3 == "luu" then output = output .. "ᓘ" i = i + 3 elseif first2 == "lu" then output = output .. "ᓗ" i = i + 2 elseif first3 == "jaa" then output = output .. "ᔮ" i = i + 3 elseif first3 == "jai" then output = output .. "ᔦ" i = i + 3 elseif first2 == "ja" then output = output .. "ᔭ" i = i + 2 elseif first3 == "jii" then output = output .. "ᔩ" i = i + 3 elseif first2 == "ji" then output = output .. "ᔨ" i = i + 2 elseif first3 == "juu" then output = output .. "ᔫ" i = i + 3 elseif first2 == "ju" then output = output .. "ᔪ" i = i + 2 elseif first3 == "vaa" then output = output .. "ᕚ" i = i + 3 elseif first3 == "vai" then output = output .. "ᕓ" i = i + 3 elseif first2 == "va" then output = output .. "ᕙ" i = i + 2 elseif first3 == "vii" then output = output .. "ᕖ" i = i + 3 elseif first2 == "vi" then output = output .. "ᕕ" i = i + 2 elseif first3 == "vuu" then output = output .. "ᕘ" i = i + 3 elseif first2 == "vu" then output = output .. "ᕗ" i = i + 2 elseif first3 == "raa" then output = output .. "ᕌ" i = i + 3 elseif first3 == "rai" then output = output .. "ᕃ" i = i + 3 elseif first2 == "ra" then output = output .. "ᕋ" i = i + 2 elseif first3 == "rii" then output = output .. "ᕇ" i = i + 3 elseif first2 == "ri" then output = output .. "ᕆ" i = i + 2 elseif first3 == "ruu" then output = output .. "ᕉ" i = i + 3 elseif first2 == "ru" then output = output .. "ᕈ" i = i + 2 elseif first3 == "qaa" then output = output .. "ᖄ" i = i + 3 elseif first3 == "qai" then output = output .. "ᙯ" i = i + 3 elseif first2 == "qa" then output = output .. "ᖃ" i = i + 2 elseif first3 == "qii" then output = output .. "ᖀ" i = i + 3 elseif first2 == "qi" then output = output .. "ᕿ" i = i + 2 elseif first3 == "quu" then output = output .. "ᖂ" i = i + 3 elseif first2 == "qu" then output = output .. "ᖁ" i = i + 2 elseif first3 == "łaa" then output = output .. "ᖥ" i = i + 3 elseif first2 == "ła" then output = output .. "ᖤ" i = i + 2 elseif first3 == "łii" then output = output .. "ᖡ" i = i + 3 elseif first2 == "łi" then output = output .. "ᖠ" i = i + 2 elseif first3 == "łuu" then output = output .. "ᖣ" i = i + 3 elseif first2 == "łu" then output = output .. "ᖢ" i = i + 2 elseif first1 == "h" then output = output .. "ᐦ" i = i + 1 elseif first1 == "p" then output = output .. "ᑉ" i = i + 1 elseif first1 == "t" then output = output .. "ᑦ" i = i + 1 elseif first1 == "k" then output = output .. "ᒃ" i = i + 1 elseif first2 == "ng" then output = output .. "ᖕ" i = i + 2 elseif first3 == "nng" then output = output .. "ᖖ" i = i + 3 elseif first1 == "g" then output = output .. "ᒡ" i = i + 1 elseif first1 == "m" then output = output .. "ᒻ" i = i + 1 elseif first1 == "n" then output = output .. "ᓐ" i = i + 1 elseif first1 == "s" then output = output .. "ᔅ" i = i + 1 elseif first1 == "l" then output = output .. "ᓪ" i = i + 1 elseif first1 == "j" then output = output .. "ᔾ" i = i + 1 elseif first1 == "v" then output = output .. "ᕝ" i = i + 1 elseif first1 == "r" then output = output .. "ᕐ" i = i + 1 elseif first1 == "q" then output = output .. "ᖅ" i = i + 1 elseif first1 == "ł" then output = output .. "ᖦ" i = i + 1 else output = output .. first1 i = i + 1 end end return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "ခ္ဍံက်လိက်လေပန်တေန်နူဝေါဟာ", [3] = output}} else return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "ခ္ဍံက်လိက်လေပန်တေန်နူဝေါဟာ", [3] = s_input:getParent().args[1]}} end end return export oskwhm9umznocq3b9825wnopjndijti 393785 393784 2026-05-01T19:06:30Z 咽頭べさ 33 393785 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("iu") function export.spelling(s_input) if not s_input:getParent().args[1] then local word = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) local output = "" local i = 1 while i <= string.len(word) do first1 = string.sub(word, i, i) first2 = string.sub(word, i, i + 1) first3 = string.sub(word, i, i + 2) first4 = string.sub(word, i, i + 3) first5 = string.sub(word, i, i + 4) if first2 == "aa" then output = output .. "ᐋ" i = i + 2 elseif first2 == "ai" then output = output .. "ᐁ" i = i + 2 elseif first1 == "a" then output = output .. "ᐊ" i = i + 1 elseif first2 == "ii" then output = output .. "ᐄ" i = i + 2 elseif first1 == "i" then output = output .. "ᐃ" i = i + 1 elseif first2 == "uu" then output = output .. "ᐆ" i = i + 2 elseif first1 == "u" then output = output .. "ᐅ" i = i + 1 elseif first3 == "paa" then output = output .. "ᐹ" i = i + 3 elseif first3 == "pai" then output = output .. "ᐯ" i = i + 3 elseif first2 == "pa" then output = output .. "ᐸ" i = i + 2 elseif first3 == "pii" then output = output .. "ᐲ" i = i + 3 elseif first2 == "pi" then output = output .. "ᐱ" i = i + 2 elseif first3 == "puu" then output = output .. "ᐴ" i = i + 3 elseif first2 == "pu" then output = output .. "ᐳ" i = i + 2 elseif first3 == "taa" then output = output .. "ᑖ" i = i + 3 elseif first3 == "tai" then output = output .. "ᑌ" i = i + 3 elseif first2 == "ta" then output = output .. "ᑕ" i = i + 2 elseif first3 == "tii" then output = output .. "ᑏ" i = i + 3 elseif first2 == "ti" then output = output .. "ᑎ" i = i + 2 elseif first3 == "tuu" then output = output .. "ᑑ" i = i + 3 elseif first2 == "tu" then output = output .. "ᑐ" i = i + 2 elseif first3 == "kaa" then output = output .. "ᑳ" i = i + 3 elseif first3 == "kai" then output = output .. "ᑫ" i = i + 3 elseif first2 == "ka" then output = output .. "ᑲ" i = i + 2 elseif first3 == "kii" then output = output .. "ᑮ" i = i + 3 elseif first2 == "ki" then output = output .. "ᑭ" i = i + 2 elseif first3 == "kuu" then output = output .. "ᑰ" i = i + 3 elseif first2 == "ku" then output = output .. "ᑯ" i = i + 2 elseif first4 == "ngaa" then output = output .. "ᖔ" i = i + 4 elseif first4 == "ngai" then output = output .. "ᙰ" i = i + 4 elseif first3 == "nga" then output = output .. "ᖓ" i = i + 3 elseif first4 == "ngii" then output = output .. "ᖐ" i = i + 4 elseif first3 == "ngi" then output = output .. "ᖏ" i = i + 3 elseif first4 == "nguu" then output = output .. "ᖒ" i = i + 4 elseif first3 == "ngu" then output = output .. "ᖑ" i = i + 3 elseif first5 == "nngaa" then output = output .. "ᙶ" i = i + 5 elseif first4 == "nnga" then output = output .. "ᙵ" i = i + 4 elseif first5 == "nngii" then output = output .. "ᙲ" i = i + 5 elseif first4 == "nngi" then output = output .. "ᙱ" i = i + 4 elseif first5 == "nnguu" then output = output .. "ᙴ" i = i + 5 elseif first4 == "nngu" then output = output .. "ᙳ" i = i + 4 elseif first3 == "gaa" then output = output .. "ᒑ" i = i + 3 elseif first3 == "gai" then output = output .. "ᒉ" i = i + 3 elseif first2 == "ga" then output = output .. "ᒐ" i = i + 2 elseif first3 == "gii" then output = output .. "ᒌ" i = i + 3 elseif first2 == "gi" then output = output .. "ᒋ" i = i + 2 elseif first3 == "guu" then output = output .. "ᒎ" i = i + 3 elseif first2 == "gu" then output = output .. "ᒍ" i = i + 2 elseif first3 == "maa" then output = output .. "ᒫ" i = i + 3 elseif first3 == "mai" then output = output .. "ᒣ" i = i + 3 elseif first2 == "ma" then output = output .. "ᒪ" i = i + 2 elseif first3 == "mii" then output = output .. "ᒦ" i = i + 3 elseif first2 == "mi" then output = output .. "ᒥ" i = i + 2 elseif first3 == "muu" then output = output .. "ᒨ" i = i + 3 elseif first2 == "mu" then output = output .. "ᒧ" i = i + 2 elseif first3 == "naa" then output = output .. "ᓈ" i = i + 3 elseif first3 == "nai" then output = output .. "ᓀ" i = i + 3 elseif first2 == "na" then output = output .. "ᓇ" i = i + 2 elseif first3 == "nii" then output = output .. "ᓃ" i = i + 3 elseif first2 == "ni" then output = output .. "ᓂ" i = i + 2 elseif first3 == "nuu" then output = output .. "ᓅ" i = i + 3 elseif first2 == "nu" then output = output .. "ᓄ" i = i + 2 elseif first3 == "saa" then output = output .. "ᓵ" i = i + 3 elseif first3 == "sai" then output = output .. "ᓭ" i = i + 3 elseif first2 == "sa" then output = output .. "ᓴ" i = i + 2 elseif first3 == "sii" then output = output .. "ᓰ" i = i + 3 elseif first2 == "si" then output = output .. "ᓯ" i = i + 2 elseif first3 == "suu" then output = output .. "ᓲ" i = i + 3 elseif first2 == "su" then output = output .. "ᓱ" i = i + 2 elseif first3 == "laa" then output = output .. "ᓛ" i = i + 3 elseif first3 == "lai" then output = output .. "ᓓ" i = i + 3 elseif first2 == "la" then output = output .. "ᓚ" i = i + 2 elseif first3 == "lii" then output = output .. "ᓖ" i = i + 3 elseif first2 == "li" then output = output .. "ᓕ" i = i + 2 elseif first3 == "luu" then output = output .. "ᓘ" i = i + 3 elseif first2 == "lu" then output = output .. "ᓗ" i = i + 2 elseif first3 == "jaa" then output = output .. "ᔮ" i = i + 3 elseif first3 == "jai" then output = output .. "ᔦ" i = i + 3 elseif first2 == "ja" then output = output .. "ᔭ" i = i + 2 elseif first3 == "jii" then output = output .. "ᔩ" i = i + 3 elseif first2 == "ji" then output = output .. "ᔨ" i = i + 2 elseif first3 == "juu" then output = output .. "ᔫ" i = i + 3 elseif first2 == "ju" then output = output .. "ᔪ" i = i + 2 elseif first3 == "vaa" then output = output .. "ᕚ" i = i + 3 elseif first3 == "vai" then output = output .. "ᕓ" i = i + 3 elseif first2 == "va" then output = output .. "ᕙ" i = i + 2 elseif first3 == "vii" then output = output .. "ᕖ" i = i + 3 elseif first2 == "vi" then output = output .. "ᕕ" i = i + 2 elseif first3 == "vuu" then output = output .. "ᕘ" i = i + 3 elseif first2 == "vu" then output = output .. "ᕗ" i = i + 2 elseif first3 == "raa" then output = output .. "ᕌ" i = i + 3 elseif first3 == "rai" then output = output .. "ᕃ" i = i + 3 elseif first2 == "ra" then output = output .. "ᕋ" i = i + 2 elseif first3 == "rii" then output = output .. "ᕇ" i = i + 3 elseif first2 == "ri" then output = output .. "ᕆ" i = i + 2 elseif first3 == "ruu" then output = output .. "ᕉ" i = i + 3 elseif first2 == "ru" then output = output .. "ᕈ" i = i + 2 elseif first3 == "qaa" then output = output .. "ᖄ" i = i + 3 elseif first3 == "qai" then output = output .. "ᙯ" i = i + 3 elseif first2 == "qa" then output = output .. "ᖃ" i = i + 2 elseif first3 == "qii" then output = output .. "ᖀ" i = i + 3 elseif first2 == "qi" then output = output .. "ᕿ" i = i + 2 elseif first3 == "quu" then output = output .. "ᖂ" i = i + 3 elseif first2 == "qu" then output = output .. "ᖁ" i = i + 2 elseif first3 == "łaa" then output = output .. "ᖥ" i = i + 3 elseif first2 == "ła" then output = output .. "ᖤ" i = i + 2 elseif first3 == "łii" then output = output .. "ᖡ" i = i + 3 elseif first2 == "łi" then output = output .. "ᖠ" i = i + 2 elseif first3 == "łuu" then output = output .. "ᖣ" i = i + 3 elseif first2 == "łu" then output = output .. "ᖢ" i = i + 2 elseif first1 == "h" then output = output .. "ᐦ" i = i + 1 elseif first1 == "p" then output = output .. "ᑉ" i = i + 1 elseif first1 == "t" then output = output .. "ᑦ" i = i + 1 elseif first1 == "k" then output = output .. "ᒃ" i = i + 1 elseif first2 == "ng" then output = output .. "ᖕ" i = i + 2 elseif first3 == "nng" then output = output .. "ᖖ" i = i + 3 elseif first1 == "g" then output = output .. "ᒡ" i = i + 1 elseif first1 == "m" then output = output .. "ᒻ" i = i + 1 elseif first1 == "n" then output = output .. "ᓐ" i = i + 1 elseif first1 == "s" then output = output .. "ᔅ" i = i + 1 elseif first1 == "l" then output = output .. "ᓪ" i = i + 1 elseif first1 == "j" then output = output .. "ᔾ" i = i + 1 elseif first1 == "v" then output = output .. "ᕝ" i = i + 1 elseif first1 == "r" then output = output .. "ᕐ" i = i + 1 elseif first1 == "q" then output = output .. "ᖅ" i = i + 1 elseif first1 == "ł" then output = output .. "ᖦ" i = i + 1 else output = output .. first1 i = i + 1 end end return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "ခ္ဍံက်လိက်လပ်တေန်နူဝေါဟာ", [3] = output}} else return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "ခ္ဍံက်လိက်လပ်တေန်နူဝေါဟာ", [3] = s_input:getParent().args[1]}} end end return export 1sdq6bo94f2ons63mdewxm2meuwz5go 393786 393785 2026-05-01T19:08:54Z 咽頭べさ 33 393786 Scribunto text/plain local export = {} local lang = require("Module:languages").getByCode("iu") function export.spelling(s_input) if not s_input:getParent().args[1] then local word = mw.ustring.lower(mw.loadData("Module:headword/data").pagename) local output = "" local i = 1 while i <= string.len(word) do first1 = string.sub(word, i, i) first2 = string.sub(word, i, i + 1) first3 = string.sub(word, i, i + 2) first4 = string.sub(word, i, i + 3) first5 = string.sub(word, i, i + 4) if first2 == "aa" then output = output .. "ᐋ" i = i + 2 elseif first2 == "ai" then output = output .. "ᐁ" i = i + 2 elseif first1 == "a" then output = output .. "ᐊ" i = i + 1 elseif first2 == "ii" then output = output .. "ᐄ" i = i + 2 elseif first1 == "i" then output = output .. "ᐃ" i = i + 1 elseif first2 == "uu" then output = output .. "ᐆ" i = i + 2 elseif first1 == "u" then output = output .. "ᐅ" i = i + 1 elseif first3 == "paa" then output = output .. "ᐹ" i = i + 3 elseif first3 == "pai" then output = output .. "ᐯ" i = i + 3 elseif first2 == "pa" then output = output .. "ᐸ" i = i + 2 elseif first3 == "pii" then output = output .. "ᐲ" i = i + 3 elseif first2 == "pi" then output = output .. "ᐱ" i = i + 2 elseif first3 == "puu" then output = output .. "ᐴ" i = i + 3 elseif first2 == "pu" then output = output .. "ᐳ" i = i + 2 elseif first3 == "taa" then output = output .. "ᑖ" i = i + 3 elseif first3 == "tai" then output = output .. "ᑌ" i = i + 3 elseif first2 == "ta" then output = output .. "ᑕ" i = i + 2 elseif first3 == "tii" then output = output .. "ᑏ" i = i + 3 elseif first2 == "ti" then output = output .. "ᑎ" i = i + 2 elseif first3 == "tuu" then output = output .. "ᑑ" i = i + 3 elseif first2 == "tu" then output = output .. "ᑐ" i = i + 2 elseif first3 == "kaa" then output = output .. "ᑳ" i = i + 3 elseif first3 == "kai" then output = output .. "ᑫ" i = i + 3 elseif first2 == "ka" then output = output .. "ᑲ" i = i + 2 elseif first3 == "kii" then output = output .. "ᑮ" i = i + 3 elseif first2 == "ki" then output = output .. "ᑭ" i = i + 2 elseif first3 == "kuu" then output = output .. "ᑰ" i = i + 3 elseif first2 == "ku" then output = output .. "ᑯ" i = i + 2 elseif first4 == "ngaa" then output = output .. "ᖔ" i = i + 4 elseif first4 == "ngai" then output = output .. "ᙰ" i = i + 4 elseif first3 == "nga" then output = output .. "ᖓ" i = i + 3 elseif first4 == "ngii" then output = output .. "ᖐ" i = i + 4 elseif first3 == "ngi" then output = output .. "ᖏ" i = i + 3 elseif first4 == "nguu" then output = output .. "ᖒ" i = i + 4 elseif first3 == "ngu" then output = output .. "ᖑ" i = i + 3 elseif first5 == "nngaa" then output = output .. "ᙶ" i = i + 5 elseif first4 == "nnga" then output = output .. "ᙵ" i = i + 4 elseif first5 == "nngii" then output = output .. "ᙲ" i = i + 5 elseif first4 == "nngi" then output = output .. "ᙱ" i = i + 4 elseif first5 == "nnguu" then output = output .. "ᙴ" i = i + 5 elseif first4 == "nngu" then output = output .. "ᙳ" i = i + 4 elseif first3 == "gaa" then output = output .. "ᒑ" i = i + 3 elseif first3 == "gai" then output = output .. "ᒉ" i = i + 3 elseif first2 == "ga" then output = output .. "ᒐ" i = i + 2 elseif first3 == "gii" then output = output .. "ᒌ" i = i + 3 elseif first2 == "gi" then output = output .. "ᒋ" i = i + 2 elseif first3 == "guu" then output = output .. "ᒎ" i = i + 3 elseif first2 == "gu" then output = output .. "ᒍ" i = i + 2 elseif first3 == "maa" then output = output .. "ᒫ" i = i + 3 elseif first3 == "mai" then output = output .. "ᒣ" i = i + 3 elseif first2 == "ma" then output = output .. "ᒪ" i = i + 2 elseif first3 == "mii" then output = output .. "ᒦ" i = i + 3 elseif first2 == "mi" then output = output .. "ᒥ" i = i + 2 elseif first3 == "muu" then output = output .. "ᒨ" i = i + 3 elseif first2 == "mu" then output = output .. "ᒧ" i = i + 2 elseif first3 == "naa" then output = output .. "ᓈ" i = i + 3 elseif first3 == "nai" then output = output .. "ᓀ" i = i + 3 elseif first2 == "na" then output = output .. "ᓇ" i = i + 2 elseif first3 == "nii" then output = output .. "ᓃ" i = i + 3 elseif first2 == "ni" then output = output .. "ᓂ" i = i + 2 elseif first3 == "nuu" then output = output .. "ᓅ" i = i + 3 elseif first2 == "nu" then output = output .. "ᓄ" i = i + 2 elseif first3 == "saa" then output = output .. "ᓵ" i = i + 3 elseif first3 == "sai" then output = output .. "ᓭ" i = i + 3 elseif first2 == "sa" then output = output .. "ᓴ" i = i + 2 elseif first3 == "sii" then output = output .. "ᓰ" i = i + 3 elseif first2 == "si" then output = output .. "ᓯ" i = i + 2 elseif first3 == "suu" then output = output .. "ᓲ" i = i + 3 elseif first2 == "su" then output = output .. "ᓱ" i = i + 2 elseif first3 == "laa" then output = output .. "ᓛ" i = i + 3 elseif first3 == "lai" then output = output .. "ᓓ" i = i + 3 elseif first2 == "la" then output = output .. "ᓚ" i = i + 2 elseif first3 == "lii" then output = output .. "ᓖ" i = i + 3 elseif first2 == "li" then output = output .. "ᓕ" i = i + 2 elseif first3 == "luu" then output = output .. "ᓘ" i = i + 3 elseif first2 == "lu" then output = output .. "ᓗ" i = i + 2 elseif first3 == "jaa" then output = output .. "ᔮ" i = i + 3 elseif first3 == "jai" then output = output .. "ᔦ" i = i + 3 elseif first2 == "ja" then output = output .. "ᔭ" i = i + 2 elseif first3 == "jii" then output = output .. "ᔩ" i = i + 3 elseif first2 == "ji" then output = output .. "ᔨ" i = i + 2 elseif first3 == "juu" then output = output .. "ᔫ" i = i + 3 elseif first2 == "ju" then output = output .. "ᔪ" i = i + 2 elseif first3 == "vaa" then output = output .. "ᕚ" i = i + 3 elseif first3 == "vai" then output = output .. "ᕓ" i = i + 3 elseif first2 == "va" then output = output .. "ᕙ" i = i + 2 elseif first3 == "vii" then output = output .. "ᕖ" i = i + 3 elseif first2 == "vi" then output = output .. "ᕕ" i = i + 2 elseif first3 == "vuu" then output = output .. "ᕘ" i = i + 3 elseif first2 == "vu" then output = output .. "ᕗ" i = i + 2 elseif first3 == "raa" then output = output .. "ᕌ" i = i + 3 elseif first3 == "rai" then output = output .. "ᕃ" i = i + 3 elseif first2 == "ra" then output = output .. "ᕋ" i = i + 2 elseif first3 == "rii" then output = output .. "ᕇ" i = i + 3 elseif first2 == "ri" then output = output .. "ᕆ" i = i + 2 elseif first3 == "ruu" then output = output .. "ᕉ" i = i + 3 elseif first2 == "ru" then output = output .. "ᕈ" i = i + 2 elseif first3 == "qaa" then output = output .. "ᖄ" i = i + 3 elseif first3 == "qai" then output = output .. "ᙯ" i = i + 3 elseif first2 == "qa" then output = output .. "ᖃ" i = i + 2 elseif first3 == "qii" then output = output .. "ᖀ" i = i + 3 elseif first2 == "qi" then output = output .. "ᕿ" i = i + 2 elseif first3 == "quu" then output = output .. "ᖂ" i = i + 3 elseif first2 == "qu" then output = output .. "ᖁ" i = i + 2 elseif first3 == "łaa" then output = output .. "ᖥ" i = i + 3 elseif first2 == "ła" then output = output .. "ᖤ" i = i + 2 elseif first3 == "łii" then output = output .. "ᖡ" i = i + 3 elseif first2 == "łi" then output = output .. "ᖠ" i = i + 2 elseif first3 == "łuu" then output = output .. "ᖣ" i = i + 3 elseif first2 == "łu" then output = output .. "ᖢ" i = i + 2 elseif first1 == "h" then output = output .. "ᐦ" i = i + 1 elseif first1 == "p" then output = output .. "ᑉ" i = i + 1 elseif first1 == "t" then output = output .. "ᑦ" i = i + 1 elseif first1 == "k" then output = output .. "ᒃ" i = i + 1 elseif first2 == "ng" then output = output .. "ᖕ" i = i + 2 elseif first3 == "nng" then output = output .. "ᖖ" i = i + 3 elseif first1 == "g" then output = output .. "ᒡ" i = i + 1 elseif first1 == "m" then output = output .. "ᒻ" i = i + 1 elseif first1 == "n" then output = output .. "ᓐ" i = i + 1 elseif first1 == "s" then output = output .. "ᔅ" i = i + 1 elseif first1 == "l" then output = output .. "ᓪ" i = i + 1 elseif first1 == "j" then output = output .. "ᔾ" i = i + 1 elseif first1 == "v" then output = output .. "ᕝ" i = i + 1 elseif first1 == "r" then output = output .. "ᕐ" i = i + 1 elseif first1 == "q" then output = output .. "ᖅ" i = i + 1 elseif first1 == "ł" then output = output .. "ᖦ" i = i + 1 else output = output .. first1 i = i + 1 end end return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "အက္ခရ်လပ်တေန်", [3] = output}} else return s_input:expandTemplate{ title = "spelling of", args = {[1] = "iu", [2] = "အက္ခရ်လပ်တေန်", [3] = s_input:getParent().args[1]}} end end return export btyme35fw41er6wrcqbwj48uis8lgky မဝ်ဂျူ:iu-spel/doc 828 293663 393776 2026-05-01T18:47:06Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> [[ကဏ္ဍ:မဝ်ဂျူအေၚ်နုကတဳတောတ်ဂမၠိုၚ်]] </includeonly>" 393776 wikitext text/x-wiki {{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> [[ကဏ္ဍ:မဝ်ဂျူအေၚ်နုကတဳတောတ်ဂမၠိုၚ်]] </includeonly> 3ukssgsztpm7834f6i49hzvnvrrqc3j ကဏ္ဍ:မဝ်ဂျူအေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293664 393777 2026-05-01T18:48:41Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » :ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳ..." 393777 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳတောတ်]] » '''မဝ်ဂျူဂမၠိုၚ်''' :[[:ကဏ္ဍ:မဝ်ဂျူဂမၠိုၚ်|မဝ်ဂျူ]]ဘာသာအေၚ်နုကတဳတောတ်၊ မနွံကဵုလုပ်အဝေါၚ်ကုဒ် Lua နကဵုမကၠောန်ဗဒှ် ကဵု မစဳရေၚ်ယဵုဒုၚ်သ္ပမာန်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်]][[ကဏ္ဍ:မဝ်ဂျူဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] 5t5kvkonxcaxnplblomekbt74hk6am1 ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ် 14 293665 393778 2026-05-01T18:49:59Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:အရေဝ်ဘာသာ|အ]][[ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အ]]" 393778 wikitext text/x-wiki [[ကဏ္ဍ:အရေဝ်ဘာသာ|အ]][[ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အ]] sz2twsl0oy4c22ynqtyz2948a9dbmpr ထာမ်ပလိက်:iu-spel/documentation 10 293666 393779 2026-05-01T18:52:41Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဗီုပြၚ်မဆေၚ်စပ်ဂမၠိုၚ်]] </includeonly>" 393779 wikitext text/x-wiki {{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဗီုပြၚ်မဆေၚ်စပ်ဂမၠိုၚ်]] </includeonly> lsy5fhticbnczrtgqla7pozziqdgrip ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဗီုပြၚ်မဆေၚ်စပ်ဂမၠိုၚ် 14 293667 393780 2026-05-01T18:54:06Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]]ကဏ္ဍ:ထာမ်ပလိက်ဗီုပြၚ်မဆေၚ်စပ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိ..." 393780 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗီုပြၚ်မဆေၚ်စပ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] 9p9chaa0nccemmrr20dil5smd2u0dzt ကဏ္ဍ:ထာမ်ပလိက်လေန်အေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293668 393781 2026-05-01T18:55:47Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393781 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်လေန်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] kp228g7d22axcvckx5rs8xdvu51y0uz ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293669 393782 2026-05-01T18:57:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393782 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] cn7eya7v9uo6w72xjmbf724c7p3ww2c ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်တၚ်ကၞာတ်မအရေဝ်ဂမၠိုၚ် 14 293670 393783 2026-05-01T18:59:15Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်တၚ်ကၞာတ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393783 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်တၚ်ကၞာတ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] nkslep6jgncq7gpn63m6ttlxwd5jw1u ကဏ္ဍ:ဝေါဟာအဓိကအေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293671 393787 2026-05-01T19:10:50Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » :ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳ..." 393787 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳတောတ်]] » '''ဝေါဟာတံသ္ဇိုၚ်ဂမၠိုၚ်''' :ဝေါဟာတံသ္ဇိုၚ်ဘာသာအေၚ်နုကတဳတောတ်၊ ကဏ္ဍနူကဵုမပါ်ပရံဒကုတ်မဆေၚ်စပ်ကဵုမအရေဝ်ဝေါဟာ။ [[ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်]][[ကဏ္ဍ:ဝေါဟာအဓိကဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] jlra8b0yc7uyowfsre2gf5whzqpwqf1 ကဏ္ဍ:အာမေဍိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293672 393788 2026-05-01T19:13:31Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » :ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳ..." 393788 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်|အေၚ်နုကတဳတောတ်]] » [[:ကဏ္ဍ:ဝေါဟာအဓိကအေၚ်နုကတဳတောတ်ဂမၠိုၚ်|ဝေါဟာတံသ္ဇိုၚ်]] » '''အာမေဍိက်ဂမၠိုၚ်''' :ဝေါဟာအေၚ်နုကတဳတောတ်ဓမံက်ထ္ၜးပရေၚ်သ္ဒးဒုၚ်စသိုၚ်ဂမၠိုၚ်၊ ရမျာၚ်ဂမၠိုၚ်၊ ဥပမာ ညံၚ်ကရေဲကညာၚ်တိုန်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာအေၚ်နုကတဳတောတ်]][[ကဏ္ဍ:အာမေဍိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] 6uyvmwz3vy5gz7q2kr2mwk56ihceaxp ᐋᒡᒐ 0 293673 393789 2026-05-01T19:15:27Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အေၚ်နုကတဳတောတ်== ====အာမေဍိက်==== {{iu-pos|အာမေဍိက်|l|aagga}} # ခအှ်ေ။" 393789 wikitext text/x-wiki ==အေၚ်နုကတဳတောတ်== ====အာမေဍိက်==== {{iu-pos|အာမေဍိက်|l|aagga}} # ခအှ်ေ။ mo6uuvnbvyvxtqrn4su4v9l8qlvz5va ထာမ်ပလိက်:iu-pos 10 293674 393790 2026-05-01T19:19:24Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|iu|{{{1<noinclude>|noun</noinclude>}}}|head={{{head|}}}|sort={{{sort|}}}|sc={{#switch:{{{2}}}|l|L|r|R|Latn|Latin=Latn|c|C|Cans=Cans}}|tr=-}}<!-- -->&#32;(<!-- -->{{#if:{{{2|}}}<!-- -->|<!-- -->{{#if:{{{3|}}}<!-- -->|<!-- -->{{#switch:{{{2}}}<!-- -->|l|L|r|R|Latn|Latin=''ဝဏ္ဏဂမၠိုၚ်'' '''{{l|iu|{{{3}}}|sc=Cans|t..." 393790 wikitext text/x-wiki {{#invoke:checkparams|error}}<!-- Validate template parameters -->{{head|iu|{{{1<noinclude>|noun</noinclude>}}}|head={{{head|}}}|sort={{{sort|}}}|sc={{#switch:{{{2}}}|l|L|r|R|Latn|Latin=Latn|c|C|Cans=Cans}}|tr=-}}<!-- -->&#32;(<!-- -->{{#if:{{{2|}}}<!-- -->|<!-- -->{{#if:{{{3|}}}<!-- -->|<!-- -->{{#switch:{{{2}}}<!-- -->|l|L|r|R|Latn|Latin=''ဝဏ္ဏဂမၠိုၚ်'' '''{{l|iu|{{{3}}}|sc=Cans|tr=-}}'''<!-- -->|c|C|Cans=''လပ်တေန်'' '''{{l|iu|{{{3}}}|sc=Latn|tr=-}}'''<!-- -->}}<!-- -->|<!-- --><small><sup>???</sup> please provide <!-- -->{{#switch:{{{1}}}<!-- -->|l|L|r|R|Latn|Latin=လပ်တေန်<!-- -->|c|C|Cans=ဝဏ္ဏဂမၠိုၚ်<!-- -->}}<!-- --> ခ္ဍံက်လိက်!</small><!-- --><!-- -->}}<!-- -->|<!-- --><small><sup>???</sup> please provide the script!</small><!-- --><!-- -->}}<!-- -->)<!-- -->{{#if:{{{1|}}}|| }}<!-- --><noinclude>{{documentation}}</noinclude> fvva2ramtkaazi2h3t3icgi33s26p6b ထာမ်ပလိက်:iu-pos/documentation 10 293675 393791 2026-05-01T19:20:25Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} This template is for all Inuktitut entries, though {{temp|iu-noun}} may be used for nouns. ==Parameters== ; <code>1=</code> : The part of speech for categorization, for example noun, verb, adverb, adjective (etc.). ; <code>2=</code> : The script, c for Canadian syllabics, l or r for Latin. Mandatory. ; <code>3=</code> : The other script form. Mandatory. ===See also=== * {{temp|iu-noun}} {{h..." 393791 wikitext text/x-wiki {{documentation subpage}} This template is for all Inuktitut entries, though {{temp|iu-noun}} may be used for nouns. ==Parameters== ; <code>1=</code> : The part of speech for categorization, for example noun, verb, adverb, adjective (etc.). ; <code>2=</code> : The script, c for Canadian syllabics, l or r for Latin. Mandatory. ; <code>3=</code> : The other script form. Mandatory. ===See also=== * {{temp|iu-noun}} {{hwcat}} jc6lufxfc0r7gt6sngbjmpz1k1tn00v ကဏ္ဍ:ထာမ်ပလိက်လာၚ်က္ဍိုပ်မအရေဝ်အေၚ်နုကတဳတောတ်ဂမၠိုၚ် 14 293676 393792 2026-05-01T19:21:57Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:လာၚ်က္ဍိုပ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]]" 393792 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အေၚ်နုကတဳတောတ်ဂမၠိုၚ်]][[ကဏ္ဍ:လာၚ်က္ဍိုပ်မအရေဝ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|အ]] pj47pcq87q9fwzfvgzopv3luu27zvg7 ats 0 293677 393799 2026-05-02T06:57:06Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "ats"}} ==မအရေဝ်ပံၚ်ကောံ== ===သၚ်္ကေတ=== {{mul-symbol}} # {{ISO 639|3}} =={{=en=}}== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|en|LL-Q1860 (eng)-Wodencafe-ats.wav|a=US}} ===နာမ်=== {{head|en|noun form}} # {{plural of|en|at}} ===ကြိယာ=== {{head|en|verb fo..." 393799 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "ats"}} ==မအရေဝ်ပံၚ်ကောံ== ===သၚ်္ကေတ=== {{mul-symbol}} # {{ISO 639|3}} =={{=en=}}== ===ဗွဟ်ရမ္သာၚ်=== * {{audio|en|LL-Q1860 (eng)-Wodencafe-ats.wav|a=US}} ===နာမ်=== {{head|en|noun form}} # {{plural of|en|at}} ===ကြိယာ=== {{head|en|verb form}} # {{infl of|en|at||s-verb-form}} ===မဒုၚ်လွဳစ=== * {{anagrams|en|a=ast|S.A.T.|Sta.|ast|TAs|Sat.|Sta|sta|S. A. T.|AST|sat|Ast|tas|sat.|Tas.|Sat|TSA|SAT|T(S/A)|as't|TAS|T.A.s|Tas|-ast|TA's|STA}} ==ဃှသ်နေဝ် ဂျာတ်ကေါမ်== ===နာမ်=== {{head|chn|noun}} # ဒေံဗြဴဍောတ်။ ==တဝ်ချာရေဝ်ယာန် ဨ== ===ကၞာတ်အမှိက်=== {{head|xto|particle}} # သၟဳသၟပ်၊ သ္ပံ။ ==တဝ်ချာရေဝ်ယာန် ဗဳ== ===ကၞာတ်အမှိက်=== {{head|txb|particle}} # သၟဳသၟပ်၊ သ္ပံ။ lotse3s4hfm40mjozkt1hvlssohdzo0 ကဏ္ဍ:ကၞာတ်အမှိက်တဝ်ချာရေဝ်ယာန် ဗဳဂမၠိုၚ် 14 293678 393800 2026-05-02T06:58:11Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာတဝ်ချာရေဝ်ယာန် ဗဳ]]" 393800 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာတဝ်ချာရေဝ်ယာန် ဗဳ]] l8y57avf79tzzhc89fmzrxb40ev3vf5 ကဏ္ဍ:ကၞာတ်အမှိက်တဝ်ချာရေဝ်ယာန် ဨဂမၠိုၚ် 14 293679 393801 2026-05-02T06:59:14Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာတဝ်ချာရေဝ်ယာန် ဨ]]" 393801 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာတဝ်ချာရေဝ်ယာန် ဨ]] qe5t93oybux7y0ee68ytwu7bk3lvqtw ကဏ္ဍ:နာမ်ဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ် 14 293680 393802 2026-05-02T07:00:53Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » :ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်|ဃှသ်န..." 393802 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်|ဃှသ်နေဝ် ဂျာတ်ကေါမ်]] » [[:ကဏ္ဍ:ဝေါဟာအဓိကဃှသ်နေဝ် ဂျာတ်ကေါမ်ဂမၠိုၚ်|ဝေါဟာတံသ္ဇိုၚ်]] » '''နာမ်ဂမၠိုၚ်''' :ဝေါဟာဃှသ်နေဝ် ဂျာတ်ကေါမ်ပွမစၞောန်ထ္ၜးပူဂဵုအတေံ၊ မက္တဵုဒှ်ဂမၠိုၚ်၊ ဌာန်ဒတန်ဂမၠိုၚ်၊ ဥပပါတ်ဂမၠိုၚ်၊ ကဆံၚ်ဂုန်သတ္တိ ဝါ ကိုန်စဳရေၚ်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာဃှသ်နေဝ် ဂျာတ်ကေါမ်]][[ကဏ္ဍ:နာမ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ဃ]] gr06235h6lx83wivmzo3j3zrj4vyw2f အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "ats" 100 293681 393803 2026-05-02T07:07:23Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{wp|ATS|lang=en}} ဝေါဟာ “ats” ဝွံ မပြာကတ်ကၠုၚ်ပ္ဍဲအရေဝ်ဘာသာဗွဲမဂၠိုၚ်၊ မနွံမဂၠိုၚ်ကဵုဗီုပြၚ်နာနာသာ်နကဵုမရပ်စပ်သုၚ်စောဲမဆေၚ်စပ်ကဵု ပွမသုၚ်စောဲမအခဝ်ဇၞော်၊ သၚ်္က..." 393803 wikitext text/x-wiki {{wp|ATS|lang=en}} ဝေါဟာ “ats” ဝွံ မပြာကတ်ကၠုၚ်ပ္ဍဲအရေဝ်ဘာသာဗွဲမဂၠိုၚ်၊ မနွံမဂၠိုၚ်ကဵုဗီုပြၚ်နာနာသာ်နကဵုမရပ်စပ်သုၚ်စောဲမဆေၚ်စပ်ကဵု ပွမသုၚ်စောဲမအခဝ်ဇၞော်၊ သၚ်္ကေတမထပိုတ်ကုတ်ဝါကျ ကဵု မတပ်ဗၠိုဟ်ဂမၠိုၚ်။ ==ပွမသုၚ်စောဲမလိက်ဇၞော်ဍောတ်ကဵုလက္ခဏပ္တိတ်ရမျာၚ်== {{top2}} * [[ats]] * [[Ats]] * [[ATs]] * [[ATS]] * [[at's]] {{bottom}} ==လက္ခဏပတပ်ဗၠိုဟ်ရမျာၚ်ကဵုမလိက်ဂစာန်== {{top2}} * [[áts]] * [[äts]] * [[åts]] {{bottom}} ==မအခဝ်တၞဟ်== {{top2}} * [[אץ]] {{bottom}} ==ဗဵုရံၚ်ဏအ်ကီု== * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "a"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "t"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "s"]] [[ကဏ္ဍ:ပွမပံၚ်စပ်ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵုမလိက်-ပိမ|ats]] 5znpdh8c2lpx15yxzlsnjpupzg3ox2t אץ 0 293682 393804 2026-05-02T07:10:31Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ဟဳဗရဝ်== {{he-rootbox|א־ו־ץ}} ===ကြိယာ=== {{he-verb|pa|ע=ו|wv=אָץ|tr='áts|sort=אוץ}} # သကဵုဂရက်။" 393804 wikitext text/x-wiki ==ဟဳဗရဝ်== {{he-rootbox|א־ו־ץ}} ===ကြိယာ=== {{he-verb|pa|ע=ו|wv=אָץ|tr='áts|sort=אוץ}} # သကဵုဂရက်။ 6dhfsykda8vg8v4mb4one77cp1gk2sl ကဏ္ဍ:ကြိယာဟဳဗရဝ်ဝေါဟာ (ו״עpa'al) ဂမၠိုၚ် 14 293683 393807 2026-05-02T07:31:17Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာဟဳဗရဝ်]]" 393807 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဟဳဗရဝ်]] 9ghif9lto77i0l3onex4ferh4ntzf7v ကဏ္ဍ:ဝေါဟာဟဳဗရဝ်မဆေၚ်စပ်ကဵုတံရိုဟ်နကဵုဝေါဟာ א־ו־ץ 14 293684 393808 2026-05-02T07:32:30Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာဟဳဗရဝ်]]" 393808 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဟဳဗရဝ်]] 9ghif9lto77i0l3onex4ferh4ntzf7v atting 0 293685 393809 2026-05-02T07:35:23Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "=={{=en=}}== ===ကြိယာ=== {{head|en|verb form}} # {{infl of|en|at||ing-form}}" 393809 wikitext text/x-wiki =={{=en=}}== ===ကြိယာ=== {{head|en|verb form}} # {{infl of|en|at||ing-form}} bjczey8c1qoqq5hvow3m6362vl5ngte atted 0 293686 393810 2026-05-02T07:36:25Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "=={{=en=}}== ===ကြိယာ=== {{head|en|verb form}} # {{infl of|en|at||ed-form}}" 393810 wikitext text/x-wiki =={{=en=}}== ===ကြိယာ=== {{head|en|verb form}} # {{infl of|en|at||ed-form}} 9owrxhn68i88lzj6qs17kl32ssxek8r ဗီုပြၚ်သိုၚ်တၟိ:ဂျာမာန်နေတ်လက္ကရဴ-အခိုက်ကၞာ/at 118 293687 393811 2026-05-02T07:39:15Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{reconstructed}} ==ဂျာမာန်နေတ်လက္ကရဴ-အခိုက်ကၞာ== ===ဝိဘတ်=== {{head|gmw-pro|ဝိဘတ်}} # အပ္ဍဲ။" 393811 wikitext text/x-wiki {{reconstructed}} ==ဂျာမာန်နေတ်လက္ကရဴ-အခိုက်ကၞာ== ===ဝိဘတ်=== {{head|gmw-pro|ဝိဘတ်}} # အပ္ဍဲ။ kmyg4qekstfdm6irq2cpgt0sc3ck8wu ဗီုပြၚ်သိုၚ်တၟိ:ဂျာမာန်-အခိုက်ကၞာ/at 118 293688 393812 2026-05-02T07:42:27Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{reconstructed}} ==ဂျာမာန်-အခိုက်ကၞာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gem-pro|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|gem-pro|/ɑt/}} ===ဝိဘတ်=== {{gem-prep}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===မဒုၚ်လွဳစ=== * {{desc|gmw-pro|*at}} ** {{desc|ang|æt}} *** {{desctree|enm|at}}..." 393812 wikitext text/x-wiki {{reconstructed}} ==ဂျာမာန်-အခိုက်ကၞာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gem-pro|ine-pro|*h₂éd}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|gem-pro|/ɑt/}} ===ဝိဘတ်=== {{gem-prep}} # အပ္ဍဲ၊ အတေံ၊ ကဵု။ ===မဒုၚ်လွဳစ=== * {{desc|gmw-pro|*at}} ** {{desc|ang|æt}} *** {{desctree|enm|at}} ** {{desc|ofs|et|it}} *** {{desc|frr|et|it|äät|äit}} ** {{desc|osx|at}} ** {{desc|odt|at}} ** {{desc|goh|az|ez}} * {{desc|non|at}} ** {{desc|da|at|ad}} ** {{desc|ovd|að}} ** {{desc|fo|at}} ** {{desc|is|að}} ** {{desc|nn|åt|at|å}} ** {{desc|gmq-osw|at|at|alt2=āt}} *** {{desc|sv|att|åt}} <!-- ** {{desc|gmq-bot|ad|at|ått|å}}--> * {{desc|got|𐌰𐍄}} 6ix45ygau5mrsi1oe9htghktdsbyzpn ဗီုပြၚ်သိုၚ်တၟိ:အိန်ဒဝ်-ယူရဝ်ပဳယာန်-အခိုက်ကၞာ/h₂éd 118 293689 393813 2026-05-02T07:46:09Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{reconstructed}} ==အိန်ဒဝ်-ယူရဝ်ပဳယာန်-အခိုက်ကၞာ== ===ကြိယာဝိသေသန=== {{ine-adv}} # အပ္ဍဲ၊ ကဵု။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|ine-pro|*h₂ed-}} * {{alt|ine-pro|*h₂éh₁}} * {{alt|ine-pro|*ád}} ===မဒုၚ်လွဳစ=== * {{desc|cel-pro|*ad-}} * {{desc|gem-pro|*at|*at-}} * {{desc|iir-pro|..." 393813 wikitext text/x-wiki {{reconstructed}} ==အိန်ဒဝ်-ယူရဝ်ပဳယာန်-အခိုက်ကၞာ== ===ကြိယာဝိသေသန=== {{ine-adv}} # အပ္ဍဲ၊ ကဵု။ ===ပွံၚ်နဲတၞဟ်=== * {{alt|ine-pro|*h₂ed-}} * {{alt|ine-pro|*h₂éh₁}} * {{alt|ine-pro|*ád}} ===မဒုၚ်လွဳစ=== * {{desc|cel-pro|*ad-}} * {{desc|gem-pro|*at|*at-}} * {{desc|iir-pro|*HáH|*HaH-}} ** {{desc|inc-pro|*HáH|*HaH-}} *** {{desc|sa|आ|tr=ā́}} ** {{desc|ira-pro|*HáH|*HaH-}} > {{l|ira-pro||*ā}}, {{l|ira-pro||*ā-}} *** {{desc|ae|𐬁}} * {{desc|itc-pro|*ad|*ad-}} * {{desc|xpg|αδ|αδ-}} ez6bo840q61bf913a1wbwun5m0okaq2 æt 0 293690 393814 2026-05-02T08:10:17Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "aet"|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "et"}} ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|ætt}}, {{m|non|átt}}၊ နကဵ..." 393814 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "aet"|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "at"|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "et"}} ==ဒိန်နေတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|da|non|ætt}}, {{m|non|átt}}၊ နကဵုအဆက်နူ {{inh|da|gem-pro|*aihtiz}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|da|gem-pro|*aiganą}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|da|[ˈɛˀd̥]}} ===နာမ်=== {{da-noun|stem=ætt|en|er}} # ဝေါၚ်သံ၊ ဒုၚ်စအာဲကၟာဲ။ # ဂကူ။ #: {{syn|da|slægt}} ==ဖာရဝ်သဳ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|fo|hæt||Suðuroy}} ===ကြိယာ=== {{head|fo|verb form}} # {{inflection of|fo|eita||1//2//3|s|past}} ==အာက်သလာန်== ====နာမဝိသေသန==== {{head|is|adjective form}} # {{inflection of|is|ætur||f|s|indef|nom}} # {{inflection of|is|ætur||n|p|indef|nom//acc}} ===ကြိယာ=== {{head|is|verb form}} # {{verb form of|is|æta||2s|act|imp}} ==အၚ်္ဂလိက်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ang|gmw-pro|*āt}}၊ နကဵုအဆက်နူ {{inh|ang|gem-pro|*ētą}} ===ဗွဟ်ရမ္သာၚ်=== * {{ang-IPA|ǣt}} * {{rhymes|ang|æːt|s=1}} ===နာမ်=== {{ang-noun|m|head=ǣt}} # ပရိဘောဂ။ ===မဒုၚ်လွဳစ=== * {{desctree|enm|ete}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|ang|gem-pro|*at}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|ang|et}} * {{alter|ang|at|ot}} ===ဗွဟ်ရမ္သာၚ်=== * {{ang-IPA|æt}} * {{rhymes|ang|æt|s=1}} ====ဝိဘတ်==== {{ang-prep}} # အပ္ဍဲဌာန်ဒၞာဲမဍာံပြ။ # အပ္ဍဲအခိၚ်မဍာံပြ။ # ကဵု၊ ညံၚ်ဂွံက္တိုၚ်တိုန်ကဵု၊ ညံၚ်မသ္ၚောဲသာ်ဂှ်။ # နူ၊ နူကဵု။ # မၞုံ၊ သွက်၊ အပ္ဍဲ၊ ကဵု၊ အတေံ။ ===မဒုၚ်လွဳစ=== * {{desctree|enm|at}} ==သွဳဒေန်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|gmq-osw|non|ætt}}၊ နကဵုအဆက်နူ {{inh|gmq-osw|gem-pro|*aihtiz}} ===နာမ်=== {{head|gmq-osw|noun|g=f}} # ဝေါၚ်သံ၊ မသတၞောဝ်ဒတောဝ်။ ===မဒုၚ်လွဳစ=== * {{desc|sv|ätt}} 97uuu5nqy4cptk3ti66raeoto0gkyyo အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "aet" 100 293691 393815 2026-05-02T08:22:12Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{wp|AET|lang=en}} ဝေါဟာ “aet” ဝွံ မပြာကတ်ကၠုၚ်ပ္ဍဲအရေဝ်ဘာသာဗွဲမဂၠိုၚ်၊ မနွံမဂၠိုၚ်ကဵုဗီုပြၚ်နာနာသာ်နကဵုမရပ်စပ်သုၚ်စောဲမဆေၚ်စပ်ကဵု ပွမသုၚ်စောဲမအခဝ်ဇၞော်၊ သၚ်္က..." 393815 wikitext text/x-wiki {{wp|AET|lang=en}} ဝေါဟာ “aet” ဝွံ မပြာကတ်ကၠုၚ်ပ္ဍဲအရေဝ်ဘာသာဗွဲမဂၠိုၚ်၊ မနွံမဂၠိုၚ်ကဵုဗီုပြၚ်နာနာသာ်နကဵုမရပ်စပ်သုၚ်စောဲမဆေၚ်စပ်ကဵု ပွမသုၚ်စောဲမအခဝ်ဇၞော်၊ သၚ်္ကေတမထပိုတ်ကုတ်ဝါကျ ကဵု သုၚ်စောဲအက္ခရ်တၞဟ်ဂမၠိုၚ်။ ==ပွမသုၚ်စောဲမလိက်ဇၞော်ဍောတ်ကဵုလက္ခဏပ္တိတ်ရမျာၚ်== {{top2}} * [[aet]] * [[Aet]] * [[AET]] * [[a.e.t.]] * [[a'et]] * [[A'et]] {{bottom}} ==မစန်ဒက်လဝ်ကပေါတ် ကဵု ဗီုပြၚ်ပတိတ်ရမျာၚ်ဂမၠိုၚ်== {{top2}} * [[æt]] * [[æt.]] * [[æt-]] * [[-æt]] * [[ǽt]] {{bottom}} ==မအခဝ်တၞဟ်== {{top2}} ; သဳရဳလိ * [[ает]] * [[-ает]] {{bottom}} ==ဗဵုရံၚ်ဏအ်ကီု== * [[ät]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "a"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "e"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "t"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "ae"]] * [[အဆက်လက္ကရဴ:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "et"]] ===ဗီုပ္တိတ်ရမျာၚ်တၞဟ်ခြာ=== * [[aaet]] * [[aett]] * [[aete]] * [[aeth]] ===ပွမထပ်သ္ပ=== * [[aetaete]] [[ကဏ္ဍ:ပွမပံၚ်စပ်ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵုမလိက်-ပိမ|aet]] kjbqowi13xjd3k7sby86440zv4k5jla aet 0 293692 393819 2026-05-02T08:37:19Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "aet"}} =={{=en=}}== ===ဝါကျဝိဘတ်=== {{en-prepphr}} # {{alternative form of|en|a.e.t.}} ===ဝေါဟာလွာ=== * {{anagrams|en|a=aet|-ate|Até|Atë|ETA|TEA|Tea|ate|eat|eta|tea}} ==ဒိန်နေတ်== ===ကြိယာ=== {{head|da|past participle}} # {{past participle of|da|ae|nocat=1}}..." 393819 wikitext text/x-wiki {{also|Appendix:ဗီုပြၚ်နာနာသာ်မဆေၚ်စပ်ကဵု "aet"}} =={{=en=}}== ===ဝါကျဝိဘတ်=== {{en-prepphr}} # {{alternative form of|en|a.e.t.}} ===ဝေါဟာလွာ=== * {{anagrams|en|a=aet|-ate|Até|Atë|ETA|TEA|Tea|ate|eat|eta|tea}} ==ဒိန်နေတ်== ===ကြိယာ=== {{head|da|past participle}} # {{past participle of|da|ae|nocat=1}} ==မာချဲလဳ== ===ဗွဟ်ရမ္သာၚ်=== {{mh-ipa-rows|hhay&t}} ====အာမေဍိက်==== {{mh-head|interjection}} # {{alt form|mh|aaet}} ==ဝေလလဒေါဝ်== ===ပွံၚ်နဲတၞဟ်=== * {{l|wlm|elid}}, {{l|wlm|elhid}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/ˈa.ed/|/aɨ̯d/}} ===ကြိယာ=== {{head|wlm|verb form}} # {{inflection of|wlm|mynet||3|s|impr}} ==သကတ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|sco|non|etja}} ===ပွံၚ်နဲတၞဟ်=== * {{alter|sco|et}} ===နာမ်=== {{sco-noun}} # ပွမဓရိုက်၊ စိုတ်မချဳဒရာၚ်၊ စိုတ်မထတ်စောံ။ ===နာမ် ၂ === {{sco-noun}} # {{alt form|sco|ait||oat}} ==ဝေလ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|cy|/aːɨ̯t/|a=cy-N}} * {{IPA|cy|/ai̯t/|a=cy-S}} * {{rhymes|cy|aːɨ̯t|s=1}} ===ကြိယာ=== {{cy-verb form}} # {{infl of|cy|mynd||2s|cond|colloq}} okyzq8cvyvw12xe3tzryyseaahyoonn မဝ်ဂျူ:mh-pronunc/doc 828 293693 393820 2026-05-02T08:41:49Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:mh-pronunc/testcases|print_phonemic_and_phonetic|source=User:Erutuon/mh-ipa-rows}} <includeonly> {{module cat|mh}} </includeonly>" 393820 wikitext text/x-wiki {{#invoke:mh-pronunc/testcases|print_phonemic_and_phonetic|source=User:Erutuon/mh-ipa-rows}} <includeonly> {{module cat|mh}} </includeonly> 49m45jc7e404xukqyjyz577imbbt9jp ကဏ္ဍ:မဝ်ဂျူမာချဲလဳဂမၠိုၚ် 14 293694 393821 2026-05-02T08:46:36Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|မာချဲလဳ]] » '''မဝ်ဂျူ..." 393821 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|မာချဲလဳ]] » '''မဝ်ဂျူဂမၠိုၚ်''' :[[:ကဏ္ဍ:မဝ်ဂျူဂမၠိုၚ်|မဝ်ဂျူ]]ဘာသာမာချဲလဳ၊ မနွံကဵုလုပ်အဝေါၚ်ကုဒ် Lua နကဵုမကၠောန်ဗဒှ် ကဵု မစဳရေၚ်ယဵုဒုၚ်သ္ပမာန်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာမာချဲလဳ]][[ကဏ္ဍ:မဝ်ဂျူဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]] e3ne337oobkx202rbro50ntsumwtqy3 ထာမ်ပလိက်:mh-ipa-rows/documentation 10 293695 393824 2026-05-02T08:51:38Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} Displays [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|Marshallese]] transcriptions that are generated by [[Module:mh-pronunc]]. <includeonly> {{tcat}} </includeonly>" 393824 wikitext text/x-wiki {{documentation subpage}} Displays [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|Marshallese]] transcriptions that are generated by [[Module:mh-pronunc]]. <includeonly> {{tcat}} </includeonly> mmrvjh9tqq7jc3voo1dhynocv9kqlpe 393825 393824 2026-05-02T08:53:25Z 咽頭べさ 33 393825 wikitext text/x-wiki {{documentation subpage}} Displays [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|Marshallese]] transcriptions that are generated by [[Module:mh-pronunc]]. <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်မပ္တိတ်ရမျာၚ်မာချဲလဳဂမၠိုၚ်]] </includeonly> 7cunkqvrtgiiikwgptoucv5wkjr9d5h ကဏ္ဍ:ထာမ်ပလိက်မပ္တိတ်ရမျာၚ်မာချဲလဳဂမၠိုၚ် 14 293696 393826 2026-05-02T08:55:18Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်မာချဲလဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပ္တိတ်ရမျာၚ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]]" 393826 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်မာချဲလဳဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပ္တိတ်ရမျာၚ်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]] hz4mze2i9d3qqcazcmv5m8bl6cq52oe ကဏ္ဍ:ထာမ်ပလိက်မာချဲလဳဂမၠိုၚ် 14 293697 393827 2026-05-02T08:56:45Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာမာချဲလဳ]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]]" 393827 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာမာချဲလဳ]][[ကဏ္ဍ:ထာမ်ပလိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]] ljz3h6wod5dn9q8klc4wuogbmuf8hkl ထာမ်ပလိက်:en-PP 10 293699 393830 2026-05-02T09:00:36Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:en-PP]] ဇရေင် [[ထာမ်ပလိက်:en-prepphr]] 393830 wikitext text/x-wiki #REDIRECT [[ထာမ်ပလိက်:en-prepphr]] nozsbx9t30423mcv22qm7hik08qrofs ထာမ်ပလိက်:en-prepphr/documentation 10 293700 393832 2026-05-02T09:02:35Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} {{uses lua|en-headword}} {{names|en-prep phrase|en-prepositional phrase}} This template should be used to generate the headword line for English prepositional phrases. It supports all the features of [[Module:en-headword]]; see there for more information. ==Most important parameters== ; {{para|head}} : Override the default linking algorithm for multiword expressions. Multiple comma separated..." 393832 wikitext text/x-wiki {{documentation subpage}} {{uses lua|en-headword}} {{names|en-prep phrase|en-prepositional phrase}} This template should be used to generate the headword line for English prepositional phrases. It supports all the features of [[Module:en-headword]]; see there for more information. ==Most important parameters== ; {{para|head}} : Override the default linking algorithm for multiword expressions. Multiple comma separated items are allowed, each with their own inline modifiers. See [[Module:en-headword]] for more. ; {{para|nolink|1}} : Disable linking of individual words in multiword expressions, for foreign-origin terms where the individual words are not English, e.g. {{m|en|e pluribus unum}}. See [[Module:en-headword]] for the full list of parameters as well as a description of the default linking algorithm and default suffix handling. ==Examples== {|class="wikitable" ! Term !! Wikicode !! Output |- | {{m|en|as you like}} || {{demo2c|<nowiki>{{en-prepphr|pagename=as you like}}</nowiki>}} |- | {{m|en|btw}} || {{demo2c|<nowiki>{{en-prepphr|pagename=btw}}</nowiki>}} |- | {{m|en|per annum}} || {{demo2c|<nowiki>{{en-prepphr|nolink=1|pagename=per annum}}</nowiki>}} |- | {{m|en|in two shakes of a lamb's tail}} || {{demo2c|<nowiki>{{en-prepphr|head=~shake[s:]|pagename=in two shakes of a lamb's tail}}</nowiki>}} |- | {{m|en|on the back burner}} || {{demo2c|<nowiki>{{en-prepphr|head=~back burner:~|pagename=on the back burner}}</nowiki>}} |- | {{m|en|up the Oxo Tower}} || {{demo2c|<nowiki>{{en-prepphr|head=~Oxo Tower:w:~|pagename=up the Oxo Tower}}</nowiki>}} |- | {{m|en|like Blackpool Illuminations}} || {{demo2c|<nowiki>{{en-prepphr|head=~[I:i]llumination[s:]|pagename=like Blackpool Illuminations}}</nowiki>}} |- | {{m|en|on opposite sides of the barricades}} || {{demo2c|<nowiki>{{en-prepphr|head=~side[s:]; barricade[s:]|pagename=on opposite sides of the barricades}}</nowiki>}} |- | {{m|en|like throwing a hot dog down a hallway}} || {{demo2c|<nowiki>{{en-prepphr|head=~throw[ing:]; hot dog:~|pagename=like throwing a hot dog down a hallway}}</nowiki>}} |- | {{m|en|within ames ace}} || {{demo2c|<nowiki>{{en-prepphr|head=[[within]] ames ace|pagename=within ames ace}}</nowiki>}} |} {{hwcat}} r80lot6nyhkdi5c7lapyuknmktdutou ကဏ္ဍ:ကာရန်:ဝေလ/aːɨ̯t 14 293701 393835 2026-05-02T09:13:26Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလ|ဝေလ]] » :ကဏ္ဍ:ကာရန်:ဝေလ|က..." 393835 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလ|ဝေလ]] » [[:ကဏ္ဍ:ကာရန်:ဝေလ|ကာရန်ဂမၠိုၚ်]] » -aːɨ̯t :စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာဝေလ|ဝေလ]]မနွံကာရန် [[ကာရန်:ဝေလ/aːɨ̯t|-aːɨ̯t]] ဂမၠိုၚ်။ [[ကဏ္ဍ:ကာရန်:ဝေလ|aːɨ̯t]] 5xdsjczstdztpoefghjg2xwhrh2utw2 ကဏ္ဍ:ကာရန်:ဝေလ 14 293702 393836 2026-05-02T09:15:02Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာဝေလ]][[ကဏ္ဍ:ကာရန်ဂမၠိုၚ်|ဝ]]" 393836 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဝေလ]][[ကဏ္ဍ:ကာရန်ဂမၠိုၚ်|ဝ]] 6hp1o6tuns3oglevcv8pd9deraed7gy ကာရန်:ဝေလ/aːɨ̯t 106 293703 393837 2026-05-02T09:17:37Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{rhymes nav|cy|aːɨ̯|t}} ==ဗွဟ်ရမ္သာၚ်== * {{a|cy|cy-N}} {{IPAchar|/-aːɨ̯t/}} * {{a|cy|cy-S}} {{IPAchar|/-ai̯t/}} ===လိက်သမ္တီ=== #In Southern Welsh, words ending in {{IPAfont|[[Rhymes:ဝေလ/ai̯t|/-ai̯t/]]}} and {{IPAfont|[[Rhymes:ဝေလ/aɨ̯t|/-aɨ̯t/]]}} are rhymes for words on this page. ==ကာရန်ဂမၠိုၚ်== ===ဝဏ္ဏမွဲ==..." 393837 wikitext text/x-wiki {{rhymes nav|cy|aːɨ̯|t}} ==ဗွဟ်ရမ္သာၚ်== * {{a|cy|cy-N}} {{IPAchar|/-aːɨ̯t/}} * {{a|cy|cy-S}} {{IPAchar|/-ai̯t/}} ===လိက်သမ္တီ=== #In Southern Welsh, words ending in {{IPAfont|[[Rhymes:ဝေလ/ai̯t|/-ai̯t/]]}} and {{IPAfont|[[Rhymes:ဝေလ/aɨ̯t|/-aɨ̯t/]]}} are rhymes for words on this page. ==ကာရန်ဂမၠိုၚ်== ===ဝဏ္ဏမွဲ=== {{rhyme-top|1}} * {{l|cy|aet}} * {{l|cy|naet}} {{rhyme-bottom}} iesqy4mvo2fhwid8cfp6bl5bgtj1clz ကဏ္ဍ:ကာရန်ဝေလဂမၠိုၚ်/aːɨ̯- 14 293704 393838 2026-05-02T09:18:38Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ကာရန်ဝေလဂမၠိုၚ်|aːɨ̯-]]" 393838 wikitext text/x-wiki [[ကဏ္ဍ:ကာရန်ဝေလဂမၠိုၚ်|aːɨ̯-]] 6r1ey1u89g54u8gmpvwpbo30dy5lxt6 ကာရန်:ဝေလ/aːɨ̯- 106 293705 393839 2026-05-02T09:21:11Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{rhymes nav|cy|aːɨ̯}} ==Rhymes stressed on {{IPAchar|/aːɨ̯/}}== {| class="wikitable" style="margin-left:auto; margin-right:auto; width:auto;" ! မလေဝ်ပလေတ်လဝ်ကာရန်ပ္ဍဲ ! နမူနာ ! မလေဝ်ပလေတ်လဝ်ဗီုပြၚ်ဂၠိၚ်ၚ် |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯|{{IPAchar|/aːɨ̯/}}]] | align="center" | {{l|cy||'''cae'..." 393839 wikitext text/x-wiki {{rhymes nav|cy|aːɨ̯}} ==Rhymes stressed on {{IPAchar|/aːɨ̯/}}== {| class="wikitable" style="margin-left:auto; margin-right:auto; width:auto;" ! မလေဝ်ပလေတ်လဝ်ကာရန်ပ္ဍဲ ! နမူနာ ! မလေဝ်ပလေတ်လဝ်ဗီုပြၚ်ဂၠိၚ်ၚ် |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯|{{IPAchar|/aːɨ̯/}}]] | align="center" | {{l|cy||'''cae'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯...|{{IPAchar|/aːɨ̯.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯b|{{IPAchar|/aːɨ̯b/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯b...|{{IPAchar|/aːɨ̯b.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯d|{{IPAchar|/aːɨ̯d/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯d...|{{IPAchar|/aːɨ̯d.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯dʒ|{{IPAchar|/aːɨ̯dʒ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯dʒ...|{{IPAchar|/aːɨ̯dʒ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯ð|{{IPAchar|/aːɨ̯ð/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯ð...|{{IPAchar|/aːɨ̯ð.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯f|{{IPAchar|/aːɨ̯f/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯f...|{{IPAchar|/aːɨ̯f.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯ɡ|{{IPAchar|/aːɨ̯ɡ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯ɡ...|{{IPAchar|/aːɨ̯ɡ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯k|{{IPAchar|/aːɨ̯k/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯k...|{{IPAchar|/aːɨ̯k.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯l|{{IPAchar|/aːɨ̯l/}}]] | align="center" | {{l|cy||'''cael'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯l...|{{IPAchar|/aːɨ̯l.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯ɬ|{{IPAchar|/aːɨ̯ɬ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯ɬ...|{{IPAchar|/aːɨ̯ɬ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯m|{{IPAchar|/aːɨ̯m/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯m...|{{IPAchar|/aːɨ̯m.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯n|{{IPAchar|/aːɨ̯n/}}]] | align="center" | {{l|cy||'''Sbaen'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯n...|{{IPAchar|/aːɨ̯n.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯nt|{{IPAchar|/aːɨ̯nt/}}]] | align="center" | {{l|cy||'''paent'''}} | |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯ŋ|{{IPAchar|/aːɨ̯ŋ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯ŋ...|{{IPAchar|/aːɨ̯ŋ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯p|{{IPAchar|/aːɨ̯p/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯p...|{{IPAchar|/aːɨ̯p.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯r|{{IPAchar|/aːɨ̯r/}}]] | align="center" | {{l|cy||'''chwaer'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯r...|{{IPAchar|/aːɨ̯r.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯s|{{IPAchar|/aːɨ̯s/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯s...|{{IPAchar|/aːɨ̯s.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯ʃ|{{IPAchar|/aːɨ̯ʃ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯ʃ...|{{IPAchar|/aːɨ̯ʃ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯t|{{IPAchar|/aːɨ̯t/}}]] | align="center" | {{l|cy||'''aet'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯t...|{{IPAchar|/aːɨ̯t.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯tʃ|{{IPAchar|/aːɨ̯tʃ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯tʃ...|{{IPAchar|/aːɨ̯tʃ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯θ|{{IPAchar|/aːɨ̯θ/}}]] | align="center" | {{l|cy||'''traeth'''}} | class="IPA" | [[Rhymes:Welsh/aːɨ̯θ...|{{IPAchar|/aːɨ̯θ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯v|{{IPAchar|/aːɨ̯v/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯v...|{{IPAchar|/aːɨ̯v.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯χ|{{IPAchar|/aːɨ̯χ/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯χ...|{{IPAchar|/aːɨ̯χ.../}}]] |- | class="IPA" | [[Rhymes:Welsh/aːɨ̯z|{{IPAchar|/aːɨ̯z/}}]] | align="center" | | class="IPA" | [[Rhymes:Welsh/aːɨ̯z...|{{IPAchar|/aːɨ̯z.../}}]] |} rg67suoafm0yx5zrylpnogfc9vz7x27 393840 393839 2026-05-02T09:22:42Z Intobesa.bot 1035 Bot: ပလေဝ်ဒါန် 393840 wikitext text/x-wiki {{rhymes nav|cy|aːɨ̯}} ==Rhymes stressed on {{IPAchar|/aːɨ̯/}}== {| class="wikitable" style="margin-left:auto; margin-right:auto; width:auto;" ! မလေဝ်ပလေတ်လဝ်ကာရန်ပ္ဍဲ ! နမူနာ ! မလေဝ်ပလေတ်လဝ်ဗီုပြၚ်ဂၠိၚ်ၚ် |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯|{{IPAchar|/aːɨ̯/}}]] | align="center" | {{l|cy||'''cae'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯...|{{IPAchar|/aːɨ̯.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯b|{{IPAchar|/aːɨ̯b/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯b...|{{IPAchar|/aːɨ̯b.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯d|{{IPAchar|/aːɨ̯d/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯d...|{{IPAchar|/aːɨ̯d.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯dʒ|{{IPAchar|/aːɨ̯dʒ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯dʒ...|{{IPAchar|/aːɨ̯dʒ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ð|{{IPAchar|/aːɨ̯ð/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ð...|{{IPAchar|/aːɨ̯ð.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯f|{{IPAchar|/aːɨ̯f/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯f...|{{IPAchar|/aːɨ̯f.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ɡ|{{IPAchar|/aːɨ̯ɡ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ɡ...|{{IPAchar|/aːɨ̯ɡ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯k|{{IPAchar|/aːɨ̯k/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯k...|{{IPAchar|/aːɨ̯k.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯l|{{IPAchar|/aːɨ̯l/}}]] | align="center" | {{l|cy||'''cael'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯l...|{{IPAchar|/aːɨ̯l.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ɬ|{{IPAchar|/aːɨ̯ɬ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ɬ...|{{IPAchar|/aːɨ̯ɬ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯m|{{IPAchar|/aːɨ̯m/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯m...|{{IPAchar|/aːɨ̯m.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯n|{{IPAchar|/aːɨ̯n/}}]] | align="center" | {{l|cy||'''Sbaen'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯n...|{{IPAchar|/aːɨ̯n.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯nt|{{IPAchar|/aːɨ̯nt/}}]] | align="center" | {{l|cy||'''paent'''}} | |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ŋ|{{IPAchar|/aːɨ̯ŋ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ŋ...|{{IPAchar|/aːɨ̯ŋ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯p|{{IPAchar|/aːɨ̯p/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯p...|{{IPAchar|/aːɨ̯p.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯r|{{IPAchar|/aːɨ̯r/}}]] | align="center" | {{l|cy||'''chwaer'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯r...|{{IPAchar|/aːɨ̯r.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯s|{{IPAchar|/aːɨ̯s/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯s...|{{IPAchar|/aːɨ̯s.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ʃ|{{IPAchar|/aːɨ̯ʃ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯ʃ...|{{IPAchar|/aːɨ̯ʃ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯t|{{IPAchar|/aːɨ̯t/}}]] | align="center" | {{l|cy||'''aet'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯t...|{{IPAchar|/aːɨ̯t.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯tʃ|{{IPAchar|/aːɨ̯tʃ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯tʃ...|{{IPAchar|/aːɨ̯tʃ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯θ|{{IPAchar|/aːɨ̯θ/}}]] | align="center" | {{l|cy||'''traeth'''}} | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯θ...|{{IPAchar|/aːɨ̯θ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯v|{{IPAchar|/aːɨ̯v/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯v...|{{IPAchar|/aːɨ̯v.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯χ|{{IPAchar|/aːɨ̯χ/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯χ...|{{IPAchar|/aːɨ̯χ.../}}]] |- | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯z|{{IPAchar|/aːɨ̯z/}}]] | align="center" | | class="IPA" | [[Rhymes:ဝေလ/aːɨ̯z...|{{IPAchar|/aːɨ̯z.../}}]] |} ezqkatfjl8c7ldc10dvkab0qgl2wq3w ကဏ္ဍ:ဝေါဟာသကတ်ကၠုၚ်နူဝေါဟာနဳနိုတ်တြေံဂမၠိုၚ် 14 293706 393843 2026-05-02T09:30:26Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာသကတ်]]" 393843 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာသကတ်]] 42xarq0di42seg3eps871w7n0xv0vl2 ကဏ္ဍ:ဗီုပြၚ်ကြိယာဝေလအဒေါဝ်ဂမၠိုၚ် 14 293707 393844 2026-05-02T09:32:36Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » :ကဏ..." 393844 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » [[:ကဏ္ဍ:ဗီုပြၚ်အပြံၚ်အလှာဲဝေလအဒေါဝ်ဂမၠိုၚ်|ဗီုပြၚ်ဝေါဟာတံသ္ဇိုၚ်]] » '''ဗီုပြၚ်ကြိယာဂမၠိုၚ်''' :ကြိယာဝေလအဒေါဝ်မပြံၚ်လှာဲနကဵုအဆက်အဆေန်မဆေၚ်စပ်ကဵုမဓမံက်ထ္ၜးသဒ္ဒာဗီုပြၚ်အဓိကတၞဟ်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်]][[ကဏ္ဍ:ကြိယာဝေလအဒေါဝ်ဂမၠိုၚ်]][[ကဏ္ဍ:ဗီုပြၚ်ကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ဝ]] nokaswlfwr76nmecwov6eyp3vprz8p9 ကဏ္ဍ:ဘာသာဝေလအဒေါဝ် 14 293708 393845 2026-05-02T09:36:39Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:အရေဝ်ဘာသာ|ဝ]][[ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|ဝ]]" 393845 wikitext text/x-wiki [[ကဏ္ဍ:အရေဝ်ဘာသာ|ဝ]][[ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|ဝ]] qoyxib68prddxegeqmb0hba6qpru3k7 ကဏ္ဍ:ဗီုပြၚ်အပြံၚ်အလှာဲဝေလအဒေါဝ်ဂမၠိုၚ် 14 293709 393846 2026-05-02T09:38:49Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » '''ဗီ..." 393846 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » '''ဗီုပြၚ်ဝေါဟာတံသ္ဇိုၚ်ဂမၠိုၚ်''' :ဗီုပြၚ်အပြံၚ်လှာဲဝေါဟာတံသ္ဇိုၚ်နဲတၞဟ်နကဵုဘာသာဝေလအဒေါဝ်၊ ကဏ္ဍနူကဵုမပါ်ပရံဒကုတ်မဆေၚ်စပ်ကဵုမအရေဝ်ဝေါဟာ။ [[ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်]][[ကဏ္ဍ:ဗီုပြၚ်အပြံၚ်အလှာဲဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ဝ]] dsqejceb84t7ny23zz7v2dys99zdwof ကဏ္ဍ:ဝေါဟာဝေလအဒေါဝ်ပ္တိတ်ရမျာၚ် IPA ဂမၠိုၚ် 14 293710 393847 2026-05-02T09:41:06Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » '''{{PAGE..." 393847 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်|ဝေလအဒေါဝ်]] » '''{{PAGENAME}}''' :ဝေါဟာဝေလအဒေါဝ်လုပ်အဝေါၚ်မဆေၚ်စပ်မပ္တိတ်ရမျာၚ်ပ္ဍဲနကဵုဗီုပြၚ် IPA။ သွက်မအာတ်မိက်ဆေၚ်စပ်ကဵုကဏ္ဍတဏအ်၊ ဗဵုရံၚ် ကဏ္ဍ:မအာတ်မိက်သွက်ရမျာၚ်ပ္ဍဲစရၚ်ဝေလအဒေါဝ်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာဝေလအဒေါဝ်]][[ကဏ္ဍ:ဝေါဟာမနွံကဵုမပတိတ်ရမျာၚ် IPA ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ဝ]] j8ye0qt6sbufas3h353jqtealq55vj2 ကဏ္ဍ:အာမေဍိက်မာချဲလဳဂမၠိုၚ် 14 293711 393848 2026-05-02T09:42:45Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|မာချဲလဳ]] » :ကဏ္ဍ:ဝေ..." 393848 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာမာချဲလဳ|မာချဲလဳ]] » [[:ကဏ္ဍ:ဝေါဟာအဓိကမာချဲလဳဂမၠိုၚ်|ဝေါဟာတံသ္ဇိုၚ်]] » '''အာမေဍိက်ဂမၠိုၚ်''' :ဝေါဟာမာချဲလဳဓမံက်ထ္ၜးပရေၚ်သ္ဒးဒုၚ်စသိုၚ်ဂမၠိုၚ်၊ ရမျာၚ်ဂမၠိုၚ်၊ ဥပမာ ညံၚ်ကရေဲကညာၚ်တိုန်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာမာချဲလဳ]][[ကဏ္ဍ:အာမေဍိက်ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|မ]] 4lfqgrjalfqzq973udchfqj9c213gqb mynet 0 293712 393849 2026-05-02T09:51:27Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အၚ်္ဂလိက် အဒေါဝ်== ===နာမ်=== {{head|enm|noun|altform=1}} # {{alt form|enm|mynute}} ==ဝေလလဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|wlm|cel-bry-pro|*moned}}၊ နကဵုအဆက်နူ {{inh|wlm|cel-pro|*monītor}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|wlm|ine-pro|*menH-}}၊ နူအဆက်..." 393849 wikitext text/x-wiki ==အၚ်္ဂလိက် အဒေါဝ်== ===နာမ်=== {{head|enm|noun|altform=1}} # {{alt form|enm|mynute}} ==ဝေလလဒေါဝ်== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|wlm|cel-bry-pro|*moned}}၊ နကဵုအဆက်နူ {{inh|wlm|cel-pro|*monītor}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{inh|wlm|ine-pro|*menH-}}၊ နူအဆက်နကဵု {{inh|wlm|cel-pro|*ageti}}၊ မဆက်ဆေန်နူ {{inh|wlm|ine-pro|*h₂eǵ-}}၊ နူအဆက် {{inh|wlm|cel-pro|*ɸel-}}၊ နူအဆက်ဝေါဟာ {{inh|wlm|ine-pro|*pelh₂-}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|wlm|/ˈməned/}} ===ကြိယာ=== {{head|wlm|verb}} # သကဵုအာ။ ===မဒုၚ်လွဳစ=== * {{desc|cy|myned|mynd}} ==အၚ်္ဂလိက်တြေံ== ===နိရုတ်=== {{dercat|ang|la}} ဝေါဟာကၠုၚ်နူ {{inh|ang|gmw-pro|*munit}} ===ဗွဟ်ရမ္သာၚ်=== * {{ang-IPA|mynet}} ===နာမ်=== {{ang-noun|n|head=mynet}} # တၚ်္ကာ။ ===မဒုၚ်လွဳစ=== * {{desc|enm|mynt|munet}} ** {{desc|en|mint}} * {{desc|non|mynt|bor=1}} ** {{desc|gmq-oda|mynt}} *** {{desc|da|mønt}} ** {{desc|is|mynt}} ** {{desc|no|-}} *** {{desc|nb|mynt}} *** {{desc|nn|mynt}} ** {{desc|gmq-osw|mynt}} *** {{desc|sv|mynt}} **** {{desc|fi|myntti|bor=1}} o6ll3xqz7b1gapbdk1edkj0n5kw4n03