ဝိက်ရှေန်နရဳ 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.47.0-wmf.9 case-sensitive မဳဒဳယာ တၟေင် ဓရီုကျာ ညးလွပ် ညးလွပ် ဓရီုကျာ ဝိက်ရှေန်နရဳ ဝိက်ရှေန်နရဳ ဓရီုကျာ ဝှာင် ဝှာင် ဓရီုကျာ မဳဒဳယာဝဳကဳ မဳဒဳယာဝဳကဳ ဓရီုကျာ ထာမ်ပလိက် ထာမ်ပလိက် ဓရီုကျာ ရီု ရီု ဓရီုကျာ ကဏ္ဍ ကဏ္ဍ ဓရီုကျာ အဆက်လက္ကရဴ အဆက်လက္ကရဴ ဓရီုကျာ ကာရန် ကာရန် ဓရီုကျာ အဘိဓာန် အဘိဓာန် ဓရီုကျာ ဗီုပြၚ်သိုၚ်တၟိ ဗီုပြၚ်သိုၚ်တၟိ ဓရီုကျာ TimedText TimedText talk မဝ်ဂျူ မဝ်ဂျူ ဓရီုကျာ Event Event talk မဝ်ဂျူ:etymology languages/data 828 723 397877 397875 2026-07-06T16:25:52Z 咽頭べさ 33 397877 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} ---------------------------------------------------------------------------------------------------------------------- -- Afroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Berber varieties -- -------------------------------------------------------------------------------------- m["shi-med"] = { "Medieval Tashelhit", 34152, "shi", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["thv-ght"] = { "Ghat", 47012900, "thv", } -------------------------------------------------------------------------------------- -- Cushitic varieties -- -------------------------------------------------------------------------------------- -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -------------------------------------------------------------------------------------- -- Egyptian varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Ancient Egyptian varieties -- ----------------------------------------------------- m["egy-old"] = { "အဳဂျေပ်တြေံ", 447117, "egy", } m["egy-mid"] = { "အဳဂျေပ်လဒေါဝ်", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", 123735278, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "အဳဂျေပ်လဇုဲ", 1852329, "egy", } ----------------------------------------------------- -- Coptic varieties -- ----------------------------------------------------- m["cop-akh"] = { "Akhmimic Coptic", 125176464, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", 115518040, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -------------------------------------------------------------------------------------- -- Semitic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akkadian varieties -- ----------------------------------------------------- m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } ----------------------------------------------------- -- Arabic varieties -- ----------------------------------------------------- m["jrb"] = { "Judeo-Arabic", 37733, "ar", pseudo_families = "qfa-jew", } m["apc-leb"] = { "Lebanese North Levantine Arabic", 1516642, "apc", aliases = {"Lebanese Arabic"}, } m["apc-sle"] = { "South Lebanese North Levantine Arabic", 14206590, "apc", aliases = {"South Lebanese Arabic"}, } m["apc-nle"] = { "North Lebanese North Levantine Arabic", nil, "apc", aliases = {"North Lebanese Arabic"}, } m["apc-syr"] = { "Syrian North Levantine Arabic", 2143071, "apc", aliases = {"Syrian Arabic"}, } m["apc-ale"] = { "Aleppine North Levantine Arabic", 7056921, "apc-syr", aliases = {"Aleppo Arabic", "Aleppine Arabic"}, } m["apc-dam"] = { "Damascene North Levantine Arabic", 12237466, "apc-syr", aliases = {"Damascus Arabic", "Damascene Arabic"}, } m["acm-khu"] = { "Khuzestani Arabic", 1040944, "acm", } ----------------------------------------------------- -- Aramaic varieties -- ----------------------------------------------------- m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", pseudo_families = "qfa-jew", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", pseudo_families = "qfa-jew", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Hebrew varieties -- ----------------------------------------------------- m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } ---------------------------------------------------------------------------------------------------------------------- -- Ainu varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ain-hok"] = { "Hokkaido Ainu", 20968488, "ain", aliases = {"Hokkaidō Ainu"}, } m["ain-kur"] = { "Kuril Ainu", 20967012, "ain", } m["ain-sak"] = { "Sakhalin Ainu", 20747371, "ain", } ---------------------------------------------------------------------------------------------------------------------- -- American indigenous varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Inuit varieties -- ----------------------------------------------------- m["esi"] = { "North Alaskan Inupiatun", nil, "ik" } m["esk"] = { "Northwest Alaskan Inupiatun", 25559714, "ik" } ----------------------------------------------------- -- Iroquoian varieties -- ----------------------------------------------------- m["iro-ohu"] = { "Old Wendat", nil, "wdt", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } ----------------------------------------------------- -- Tupi-Guarani varieties -- ----------------------------------------------------- -- Old Tupi varieties m["tpw-lga"] = { "Língua Geral Amazônica", 18275323, "tpw", aliases = {"Língua Geral"}, } m["tpw-lgp"] = { "Língua Geral Paulista", 2669239, "tpw", } ---------------------------------------------------------------------------------------------------------------------- -- Austroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Khmer varieties m["okz-ang"] = { "ခမေန်တြေံ အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-pre"] = { "ခမေန်တြေံ ကၠာ-အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } ---------------------------------------------------------------------------------------------------------------------- -- Austronesian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Malay and related varieties m["ms-old"] = { -- this has the ISO code 'omy' "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", aliases = {"Urban Betawi"}, -- in Jakarta } -- Philippine varieties m["xnn"] = { "Northern Kankanaey", 12953609, "kne", aliases = {"Northern Kankanay", "Northern Kankana-ey"}, } m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } ---------------------------------------------------------------------------------------------------------------------- -- Caucasian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } ---------------------------------------------------------------------------------------------------------------------- -- Dravidian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } ---------------------------------------------------------------------------------------------------------------------- -- Indo-European varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Albanian varieties -- -------------------------------------------------------------------------------------- m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "als", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "als", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -------------------------------------------------------------------------------------- -- Armenian varieties -- -------------------------------------------------------------------------------------- m["hyw"] = { "Western Armenian", 180945, "hy", } m["hye"] = { "Eastern Armenian", 181059, "hy", } -------------------------------------------------------------------------------------- -- Balto-Slavic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Baltic varieties -- ------------------------------------------------------------------------- m["bat-pro"] = { "ဗေါဝ်တေတ်-အခိုက်ကၞာ", 1703347, "ine-bsl-pro", } m["bat-dni"] = { "Dnieper Baltic", 4163178, "bat-pro", family = "bat", aliases = {"Dniepr Baltic", "Dnieper-Oka Baltic", "Dniepr-Oka Baltic"}, } m["bat-gol"] = { "Golyad", 4142855, "bat-dni", aliases = {"Eastern Galindian", "East Galindian"}, } ------------------------------------------------------------------------- -- Slavic varieties -- ------------------------------------------------------------------------- ----------------------------------------------------- -- Bulgarian varieties -- ----------------------------------------------------- m["cu-bgm"] = { "ဗူလ်ဂရဳယာန် လဒေါဝ်", 12294897, "cu", ancestors = "cu" } ----------------------------------------------------- -- Church Slavonic varieties -- ----------------------------------------------------- -- Old Moscow Church Slavonic deleted as it seems not distinct enough from Russian (Synodal) Church Slavonic. m["zls-chs-ru"] = { "Russian Church Slavonic", 21662400, "zls-chs", aliases = {"Synodal Church Slavonic", "New Moscow Church Slavonic", "Novomoskovsk Church Slavonic"}, } m["zls-chs-uk"] = { "Ukrainian Church Slavonic", 12153548, "zls-chs", aliases = {"Rusyn Church Slavonic", "Belarusian Church Slavonic"}, } --[=[ -- Not sure about these yet. m["zls-chs-bg"] = { "Bulgarian Church Slavonic", nil, "zls-chs", } m["zls-chs-cs"] = { "Czech Church Slavonic", nil, "zls-chs", } m["zls-chs-hr"] = { "Croatian Church Slavonic", nil, "zls-chs", } m["zls-chs-mk"] = { "Macedonian Church Slavonic", nil, "zls-chs", } m["zls-chs-ro"] = { "Romanian Church Slavonic", nil, "zls-chs", } m["zls-chs-sr"] = { "Serbian Church Slavonic", nil, "zls-chs", } ]=] ----------------------------------------------------- -- Czech varieties -- ----------------------------------------------------- m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } ----------------------------------------------------- -- East Slavic varieties -- ----------------------------------------------------- m["zle-ops"] = { "Old Pskovian", 4167885, "zle-ono", } m["zle-mru"] = { "ရုသျှာ လဒေါဝ်", 35228, "ru", "Cyrs", ancestors = "orv", translit = "ru-translit", strip_diacritics = { Cyrs = { remove_diacritics = c.grave .. c.acute .. c.diaer, }, }, } m["zle-mbe"] = { "Middle Belarusian", 13211, "zle-ort", ancestors = "zle-ort", } m["zle-muk"] = { "ယူကရိန် လဒေါဝ်", 13211, "zle-ort", ancestors = "zle-ort", } m["uk-CA"] = { "Canadian Ukrainian", 4161010, "uk", } m["crp-cpr-kya"] = { "Kyakhta Chinese Pidgin Russian", 1062960, "crp-cpr", } ----------------------------------------------------- -- Polish varieties -- ----------------------------------------------------- m["zlw-mpl"] = { "ပဝ်လာန် လဒေါဝ်", 402878, "pl", ancestors = "zlw-opl", strip_diacritics = { remove_diacritics = c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ó", "ó", "Ś", "ś", "Ź", "ź"}, }, } m["pl-gre"] = { "Greater Polish", 4106789, "pl", } m["pl-les"] = { "Lesser Polish", 361709, "pl", } m["pl-mas"] = { "Masovian Polish", 4274559, "pl", } m["pl-gor"] = { "Goral", 452889, "pl", } ----------------------------------------------------- -- Serbo-Croatian varieties -- ----------------------------------------------------- m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -------------------------------------------------------------------------------------- -- Celtic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Brythonic varieties -- ----------------------------------------------------- m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } ----------------------------------------------------- -- Gaulish varieties -- ----------------------------------------------------- m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } ----------------------------------------------------- -- Welsh varieties -- ----------------------------------------------------- m["cy-nor"] = { "North Wales Welsh", 13127692, "cy", aliases = {"North Walian Welsh", "Northern Welsh"}, } m["cy-sou"] = { "South Wales Welsh", 13127689, "cy", aliases = {"South Walian Welsh", "Southern Welsh"}, } -------------------------------------------------------------------------------------- -- Germanic varieties -- -------------------------------------------------------------------------------------- -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", family = "gmw-frk", aliases = {"Old Frankish"}, } m["gem-sue"] = { "Suevic", 134600275, "gmw-pro", aliases = {"Suebian"}, } m["gmw-afr-pro"] = { "Proto-Anglo-Frisian", 134603379, "gmw-nsg-pro", family = "gmw-afr", } m["gmw-nsg-pro"] = { "Proto-North Sea Germanic", 134603374, "gmw-pro", family = "gmw-nsg", aliases = {"Proto-Ingvaeonic"}, } ----------------------------------------------------- -- Dutch varieties -- ----------------------------------------------------- m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = {"Flemish", "Flemish Dutch", "Southern Dutch"}, } ----------------------------------------------------- -- English and Scots varieties -- ----------------------------------------------------- -- English varieties m["en-AU"] = { "Australian English", 44679, "en", } m["en-GB"] = { "British English", 7979, "en", } m["en-GB-SCT"] = { "Scottish English", 1553250, "en-GB", } m["en-GB-WLS"] = { "Welsh English", 2363292, "en-GB", } m["en-IM"] = { "Manx English", 6753295, "en-GB", } m["en-aae"] = { "Australian Aboriginal English", 783347, "en-AU", } m["en-ear"] = { "Early Modern English", 1472196, "en", ancestors = "enm", aliases = {"Early New English"}, } m["en-geo"] = { "Geordie", 653421, "en", ancestors = "enm-nor", } m["en-IE"] = { -- FIXME: "IE" doesn't cover Northern Ireland "Irish English", 665624, "en", } m["en-uls"] = { "Ulster English", 6840826, "en-IE", } m["en-GB-NIR"] = { "Northern Irish English", 6840826, -- actually the code for Ulster English "en-uls", } m["en-NNN"] = { -- NA = Namibia; NNN is NATO 3-letter code for North America "North American English", 7053766, "en", ietf_subtag = "en-021" -- 021 = UN M49 code for "Northern America" (i.e. North America wihout Central America or the Caribbean) } m["en-US"] = { "American English", 7976, "en-NNN", } m["en-NZ"] = { "New Zealand English", 44661, "en" } m["en-ZA"] = { "South African English", 1156228, "en" } m["en-US-CA"] = { "California English", 1026812, "en-US", } m["en-CA"] = { "Canadian English", 44676, "en-US", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } m["en-IN"] = { "Indian English", 1348800, "en", } m["pld"] = { "Polari", 1359130, "en", } -- Scots varieties m["sco-ins"] = { "Insular Scots", 16919205, "sco", } m["sco-uls"] = { "Ulster Scots", 201966, "sco", } m["sco-nor"] = { "Northern Scots", 16928150, "sco", } m["sco-sou"] = { "Southern Scots", 7570457, "sco", aliases = {"South Scots", "Borders Scots"}, } -- Middle English varieties m["enm-esc"] = { -- Part of Middle English until it developed into Middle Scots. "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots", "Scottish Middle English"}, } m["enm-emi"] = { "East Midland Middle English", 134238810, "enm", ancestors = "ang-ang", -- Technically ang-mer, but attested Mercian is mostly WM IIRC } m["enm-ken"] = { "Kentish Middle English", 134238532, "enm", ancestors = "ang-ken", } m["enm-nor"] = { "Northern Middle English", 134238541, "enm", ancestors = "ang-nor", } m["enm-sou"] = { "Southern Middle English", 134238528, "enm", ancestors = "ang-wsx", } m["enm-wmi"] = { "West Midland Middle English", 134238824, "enm", ancestors = "ang-mer", } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", 121142917, "ang", } m["ang-ken"] = { "Kentish Old English", 11687485, "ang", } m["ang-mer"] = { "Mercian Old English", 602072, "ang-ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang-ang", } m["ang-wsx"] = { "West Saxon Old English", 2658603, "ang", } ----------------------------------------------------- -- High German varieties -- ----------------------------------------------------- -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", } m["de-CH"] = { "Switzerland German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German", "Swiss High German"}, } m["de-bal"] = { "Baltic German", 15785413, "de", } m["de-ear"] = { "Early New High German", 1472199, "de", ancestors = "gmh", aliases = {"Early Modern High German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian East Central German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon German", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", } -- Alemannic German varieties m["gsw-low"] = { "Low Alemannic German", 503724, "gsw", } m["gsw-FR-als"] = { "Alsatian Alemannic German", 8786, "gsw-low", } m["gsw-hig"] = { "High Alemannic German", 503728, "gsw", } m["gsw-hst"] = { "Highest Alemannic German", 687538, "gsw", } m["wae"] = { "Walser German", 680517, "gsw-hst", } ----------------------------------------------------- -- Low German varieties -- ----------------------------------------------------- m["nds-de"] = { "German Low German", 25433, "nds", ietf_subtag = "nds-DE", -- should we make this the actual code? wikimedia_codes = "nds", } m["nds-nl"] = { "Dutch Low Saxon", 516137, "nds", ietf_subtag = "nds-NL", -- should we make this the actual code? wikimedia_codes = "nds-nl", } m["act"] = { "Achterhoeks", 153627, "nds-nl", aliases = {"Achterhoek", "Achterhooks"}, } m["drt"] = { "Drents", 2736709, "nds-nl", aliases = {"Drèents", "Dreins", "Dreints", "Drints"}, } m["frs"] = { "East Frisian Low German", 149208, "nds-de", aliases = {"East Frisian", "East Frisian Low Saxon"}, } m["gos"] = { "Gronings", 508854, "nds-nl", aliases = {"Grunnegs", "Grönnegs"}, } m["nds-lpr"] = { "Low Prussian", 33982, "nds-de", } m["sdz"] = { "Sallands", 3436668, "nds-nl", aliases = {"Sallaans", "Sallaands"}, } m["stl"] = { "Stellingwerfs", 506010, "nds-nl", aliases = {"Stellingwarfs"}, } m["twd"] = { "Twents", 497363, "nds-nl", aliases = {"Tweants"}, } m["vel"] = { "Veluws", 2484810, "nds-nl", } m["wep"] = { "Westphalian", 505655, "nds-de", aliases = {"Westfalish", "Westphalien"}, } ----------------------------------------------------- -- North Frisian varieties -- ----------------------------------------------------- m["frr-ins"] = { "Insular North Frisian", 110629610, "frr", } m["frr-fam"] = { "Föhr-Amrum North Frisian", 110629601, "frr-ins", } m["frr-foh"] = { "Föhr North Frisian", 28185, "frr-fam", aliases = {"Föhr Frisian", "Fering", "Ferring", -- Glottolog }, varieties = {"Aasdring", "Weesdring"}, } m["frr-amr"] = { "Amrum North Frisian", 28192, "frr-fam", aliases = {"Amrum Frisian", "Amrum", "Öömrang"}, } m["frr-hel"] = { "Heligoland North Frisian", 28086, "frr-ins", aliases = {"Heligoland Frisian", "Halunder", "Heligolandic Frisian", "Heligolandic North Frisian", "Helgoland Frisian", "Helgoland North Frisian", "Helgoland"}, } m["frr-syl"] = { "Sylt North Frisian", 28181, "frr-ins", aliases = {"Sylt Frisian", "Söl'ring", "Sölreng", -- Glottolog }, } m["frr-mai"] = { "Mainland North Frisian", 110629626, "frr", } m["frr-hal"] = { "Halligen North Frisian", 28177, "frr-mai", aliases = {"Halligen Frisian", "Halifreesk", "Hallingen Frisian", "Hallingen North Frisian", "Hallingen", -- Glottolog }, } m["frr-moo"] = { "Mooring North Frisian", 28187, "frr-mai", aliases = {"Bökingharde North Frisian", "Bökingharde Frisian", "Böökinghiirder frasch", "Mooring", "Moring", }, varieties = {{"East Mooring", "Ostermooring"}, {"West Mooring", "Westermooring"}}, } m["frr-kar"] = { "Karrharde North Frisian", 28191, "frr-mai", aliases = {"Karrharde Frisian", "Karrharder", }, } m["frr-goe"] = { -- Technically this refers to three adjacent dialects (Northern, Central and Southern), the latter of which went -- extinct in 1980-1981. As a result, Glottolog speaks of "Norder-Mittelgoesharde", referring to the remaining two. "Goesharde North Frisian", 28183, "frr-mai", aliases = {"Norder-Mittelgoesharde North Frisian", "Norder-Mittelgoesharde Frisian", "Norder-Mittelgoesharde", "Goesharde Frisian", "Goesharde", "Gooshiirder", }, } m["frr-wie"] = { "Wiedingharde North Frisian", 28171, "frr-mai", aliases = {"Wiedingharde Frisian", "Wiedingharde", "Wiringhiirder freesk", }, } ----------------------------------------------------- -- Old Norse varieties -- ----------------------------------------------------- m["non-grn"] = { "Greenlandic Norse", 855236, "non-own", } m["non-oen"] = { "Old East Norse", 10498031, "non", ancestors = "non", } m["non-own"] = { "Old West Norse", 2377483, "non", ancestors = "non", } ----------------------------------------------------- -- Old Swedish varieties -- ----------------------------------------------------- m["gmq-osw-lat"] = { "Late Old Swedish", 10723594, "gmq-osw", ancestors = "gmq-osw", } -------------------------------------------------------------------------------------- -- Greek varieties -- -------------------------------------------------------------------------------------- m["qsb-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-cyp"] = { "Cypriot Ancient Greek", -- to distinguish from Cypriot Greek below nil, "grc-arp", } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epi"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, } m["grc-kre"] = { "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-opl"] = { "Opuntian Locrian", nil, "grc", } m["grc-ozl"] = { "Ozolian Locrian", nil, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, } m["el-cyp"] = { "Cypriot Greek", 245899, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 35961, "el", "Polyt", ancestors = "gkm", aliases = {"Katharevousa Greek"}, -- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["el-kal"] = { "Kaliarda", 12878658, "el", } -------------------------------------------------------------------------------------- -- Indo-Iranian varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Indo-Aryan varieties -- ------------------------------------------------------------------------- -- reconstructed intermediate stages m["pra-pro"] = { "Proto-New Indo-Aryan", nil, "pra", } m["inc-ash-pro"] = { "Proto-Middle Indo-Aryan", nil, "inc-ash", } m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["bra-old"] = { "Old Braj", nil, "bra", } -- Apabhramsas m["inc-aav"] = { "အဝဟတာ", nil, "inc-apa", aliases = {"Abahattha"}, } m["inc-asa"] = { "သဥူရေသဳနဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-agu"] = { "ဂူဂျာရာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-aka"] = { "ခေပ်သမဳရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ama"] = { "မဟာရာတ်သပ်ထရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ata"] = { "တာကာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-avr"] = { "ဝရာခါဒါ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } -- Assamese varieties m["as-bkm"] = { "Barpetia Kamrupi Assamese", 30642960, "as", } m["as-nkm"] = { "Nalbaria Kamrupi Assamese", 85787678, "as", } m["as-pkm"] = { "Palasbaria Kamrupi Assamese", nil, "as", } -- Bengali varieties m["bn-dvn"] = { "Dhakaiya Vaṅga Bengali", 48726851, "bn", -- Eastern Bengali variety } m["bn-nvn"] = { "Noakhailla Vaṅga Bengali", 107548681, "bn", -- Eastern Bengali variety } -- Dhivehi varieties m["dv-old"] = { "Old Dhivehi", 117790875, "dv", } m["dv-mul"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["dv-huv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["dv-add"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Gujarati varieties m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } -- Hindi varieties m["hi-mum"] = { "Bombay Hindi", 3543151, "hi", aliases = {"Mumbai Hindi", "Bambaiyya Hindi"}, } m["hi-mid"] = { "Middle Hindi", nil, "inc-ohi", ancestors = "inc-ohi", } -- Konkani varieties m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Prakrits m["pra-ard"] = { "အာတ်ဓၟဂါတ်ဒဳ ပရာကရေတ်", 35217, "pra", aliases = {"Ardhamagadhi"}, } m["pra-hel"] = { "ဟေဠူ ပရာကရေတ်", 15080869, "pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["pra-kha"] = { "ခါဿာ ပရာကရေတ်", nil, "pra", aliases = {"Khasa"}, } m["pra-mag"] = { "မဂ္ဂဒိ ပရာကရေတ်", -- Not to be confused with Magahi (mag) 2652214, "pra", aliases = {"Magadhi"}, } m["pra-mah"] = { "မဟာရာတ်ထရဳ ပရာကရေတ်", 2586773, "pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["pra-pai"] = { "ပါအေတ်သာသဳ ပရာကရေတ်", 2995607, "pra-sau", aliases = {"Paisaci", "Paisachi"}, ancestors = "pra-sau" } m["pra-sau"] = { "သောရာသေနဳ ပရာကရေတ်", 2452885, "pra", aliases = {"Sauraseni", "Shauraseni"}, } m["pra-ava"] = { "အဗါန်တဳ", nil, "pra", aliases = {"Avanti Prakrit"}, } m["pra-pra"] = { "ပရာသဳယျာ", nil, "pra", aliases = {"Pracya Prakrit"}, } m["pra-bah"] = { "ပါလိကဳ", nil, "pra", aliases = {"Bahliki Prakrit"}, } m["pra-dak"] = { "ထေတ်သဳနတာယျ", nil, "pra", aliases = {"Daksinatya Prakrit"}, } m["pra-sak"] = { "သာကာရဳ", nil, "pra", aliases = {"Sakari Prakrit"}, } m["pra-can"] = { "ခေန်ဒါလဳ", nil, "pra", aliases = {"Candali Prakrit"}, } m["pra-sab"] = { "သာဗါရဳ", nil, "pra", aliases = {"Sabari Prakrit"}, } m["pra-abh"] = { "အဖိရဳ", nil, "pra", aliases = {"Abhiri Prakrit"}, } m["pra-dra"] = { "ဒရာမဳလဳ", nil, "pra", aliases = {"Dramili Prakrit"}, } m["pra-odr"] = { "အဝ်ဒရဳ", nil, "pra", aliases = {"Odri Prakrit"}, } -- Punjabi varieties m["pnb"] = { "Western Punjabi", 58635, "pa", "pa-Arab", } -- Sanskrit varieties m["vsn"] = { "Vedic Sanskrit", 36858, "sa", } m["cls"] = { "Classical Sanskrit", 9333703, "sa", } m["sa-bhs"] = { "Buddhist Hybrid Sanskrit", 248758, "sa", } m["sa-bra"] = { "Brahmanic Sanskrit", 139822891, "vsn", } m["sa-epi"] = { "Epic Sanskrit", 56702805, "cls", } m["sa-neo"] = { "New Sanskrit", nil, "sa", } m["sa-rig"] = { "Rigvedic Sanskrit", 139822680, "vsn", } -- Sinhalese varieties m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } ------------------------------------------------------------------------- -- Iranian varieties -- ------------------------------------------------------------------------- m["qsb-bma"] = { "the BMAC substrate", 133187435, "und", family = "qfa-sub", aliases = {"the Bactria-Margiana substrate", "the Bactria-Margiana Archaeological Complex substrate"}, } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ear"] = { "Early New Persian", 127413796, "fa", ancestors = "pal-lat", translit = "fa-cls-translit", } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "fa-ear", translit = "fa-cls-translit", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, translit = "fa-ira-translit", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, translit = "fa-cls-translit", } m["haz"] = { "Hazaragi", 33398, "prs", translit = "fa-cls-translit", } m["os-dig"] = { "Digor Ossetian", 3027861, "os", aliases = {"Digoron", "Digor"}, } m["os-iro"] = { "Iron Ossetian", nil, "os", aliases = {"Iron"}, } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["ro-MD"] = { "Moldovan", 36392, "ro", aliases = {"Moldavian"}, } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos"] = { "Old Ossetic", 65455882, "xln", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esmaili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali Tati", nil, "tks", aliases = {"Chāli"}, } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } ------------------------------------------------------------------------- -- Nuristani varieties -- ------------------------------------------------------------------------- m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, } m["bsh-mum"] = { "Mumviri", nil, "bsh", aliases = {"Mumvíri"}, } -------------------------------------------------------------------------------------- -- Italic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Latin varieties -- ------------------------------------------------------------------------- -- Latin varieties by period m["itc-ola"] = { "လပ်တေန်တြေံ", 12289, "la", "Latn, Ital", translit = { Ital = "Ital-translit" }, } m["itc-lan"] = { "Lanuvian", 16890829, "itc-ola", aliases = {"Lanuvine"}, } m["itc-pra"] = { "Praenestine", 16889772, "itc-ola", aliases = {"Praenestinian"}, } m["la-cla"] = { "လပ်တေန်ဝၚ်ဂန္ထ", 253854, "la", } m["la-vul"] = { "လပ်တေန်အရိုၚ်", 37560, "la-cla", } m["la-afr"] = { "African Romance", 162064, "roa-pro", } m["la-lat"] = { "လပ်တေန်လဇုဲ", 1503113, "la", ancestors = "la-cla", } m["la-med"] = { "လပ်တေန် ခေတ်လဒေါဝ်", 1163234, "la", ancestors = "la-lat", } m["la-eme"] = { "လပ်တေန်ခေတ်လဒေါဝ်ဗွဲမပြဟ်", nil, "la-med", } m["la-ecc"] = { "သာသနာခရေတ်လပ်တေန်", 1247932, "la", aliases = {"Church Latin", "Liturgical Latin"}, ancestors = "la-lat", } m["la-ren"] = { "လပ်တေန်ခေတ်ကလေၚ်ပလေဝ်ပ္တိုန်တၟိ", 499083, "la", ancestors = "la-med", } m["la-new"] = { "လပ်တေန်တၟိ", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", } m["la-con"] = { "လပ်တေန်ခေတ်ပြိုၚ်ပ္ကာန်", 1246397, "la-new", } ------------------------------------------------------------------------- -- Miscellaneous Italic varieties -- ------------------------------------------------------------------------- m["xfa-cap"] = { "Capenate", 133182969, "xfa", } m["osc-luc"] = { "Lucanian", 3265025, "osc", } m["osc-sam"] = { "Samnite", 133184287, "osc", } ------------------------------------------------------------------------- -- Romance varieties -- ------------------------------------------------------------------------- m["roa-pro"] = { "Proto-Romance", 3408029, "la-lat", ancestors = "la-vul", } ----------------------------------------------------- -- Catalan varieties -- ----------------------------------------------------- m["ca-val"] = { "Valencian", 32641, "ca", } ----------------------------------------------------- -- Franco-Provençal varieties -- ----------------------------------------------------- m["frp-old"] = { "Old Franco-Provençal", nil, "frp", } ----------------------------------------------------- -- French and derived creole varieties -- ----------------------------------------------------- m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro-nor", } m["xno-law"] = { "Law French", 2044323, "xno", } m["zrp"] = { "Zarphatic", 36994, "fro", aliases = {"Judeo-French"}, pseudo_families = "qfa-jew", } m["fr-CA"] = { "Canadian French", 1450506, "fr", } m["fr-CH"] = { "Swiss French", 1480152, "fr", } m["fr-aca"] = { "Acadian French", 415109, "fr", } m["fr-lou"] = { "Louisiana French", 3083213, "fr", } m["fr-mis"] = { "Missouri French", 3083210, "fr", } m["frc"] = { "Cajun French", 880301, "fr-lou", } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, } ----------------------------------------------------- -- Gallo-Italic varieties -- ----------------------------------------------------- m["egl-old"] = { "Old Emilian", nil, "egl", } m["lij-old"] = { "Old Ligurian", nil, "lij", aliases = {"Old Genoese"}, } m["lmo-old"] = { "Old Lombard", 97165320, "lmo", } m["pms-old"] = { "Old Piedmontese", nil, "pms", aliases = {"Old Piemontese"}, } m["vec-old"] = { "Old Venetan", nil, "vec", aliases = {"Old Venetian"}, } m["rgn-old"] = { "Old Romagnol", nil, "rgn", } ----------------------------------------------------- -- Italo-Romance varieties -- ----------------------------------------------------- -- Italian varieties m["roa-oit"] = { "Old Italian", nil, "it", } m["it-CH"] = { "Switzerland Italian", 672147, "it", } -- Other Italo-Romance varieties m["nap-old"] = { "Old Neapolitan", nil, "nap", } m["scn-old"] = { "Old Sicilian", nil, "scn", } ----------------------------------------------------- -- Occitan varieties -- ----------------------------------------------------- m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "ဂေါသ်သကာန်", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "လာမ်ဂဝေအ်ဒံက်ဃှေန်", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "လိမူသေန်", 427614, "oc", } m["oc-pro"] = { "ဖရဝ်ဗေန်သော", 241243, "oc", aliases = {"Provencal"}, } m["oc-pro-old"] = { "ဖရဝ်ဗေန်သောတြေံ", 2779185, "pro", } m["oc-viv"] = { "ဝဳဝါရုဝ်-အောဖှာၚ်", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Portuguese and derived creole varieties -- ----------------------------------------------------- -- Portuguese m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } m["pt-PT"] = { "European Portuguese", 922399, "pt", } -- Kabuverdianu (Cape Verde Creole, Cape Verdean Creole) m["kea-bar"] = { "Barlavento Kabuverdianu", 2217638, "kea", aliases = {"Barlavento", "Barlavento Creole", "Sampadjudu"}, } m["kea-bvi"] = { "Boa Vista Kabuverdianu", 16501837, "kea-bar", aliases = {"Boa Vista Creole"}, } m["kea-sal"] = { "Sal Kabuverdianu", 18707467, "kea-bar", aliases = {"Sal Creole"}, } m["kea-saa"] = { "Santo Antão Kabuverdianu", 18707472, "kea-bar", aliases = {"Santo Antão Creole"}, } m["kea-sni"] = { "São Nicolau Kabuverdianu", 18707549, "kea-bar", aliases = {"São Nicolau Creole"}, } m["kea-svi"] = { "São Vicente Kabuverdianu", 18707550, "kea-bar", aliases = {"São Vicente Creole"}, } m["kea-sot"] = { "Sotavento Kabuverdianu", 10261559, "kea", aliases = {"Sotavento", "Sotavento Creole", "Badiu"}, } m["kea-bra"] = { "Brava Kabuverdianu", 18670181, "kea-sot", aliases = {"Brava Creole"}, } m["kea-fog"] = { "Fogo Kabuverdianu", 18706861, "kea-sot", aliases = {"Fogo Creole"}, } m["kea-mai"] = { "Maio Kabuverdianu", 18707286, "kea-sot", aliases = {"Maio Creole"}, } m["kea-san"] = { "Santiago Kabuverdianu", 35117, "kea-sot", aliases = {"Santiago Creole"}, } m["kea-alu"] = { "ALUPEC Kabuverdianu", 375704, "kea", aliases = {"ALUPEC", "Alfabeto Unificado para a Escrita do Cabo-Verdiano"}, } ----------------------------------------------------- -- Rhaeto-Romance varieties -- ----------------------------------------------------- -- Friulian varieties m["fur-old"] = { "Old Friulian", nil, "fur", } -- Ladin varieties m["lld-amp"] = { "Ampezan Ladin", 25617466, "lld", aliases = {"Anpezan", "Ampezan", "Ampezzan", "Ampezzano"}, } m["lld-bad"] = { "Badiot Ladin", 3706562, "lld", aliases = {"Badiot", "Badioto", "Badiotto"}, } m["lld-cad"] = { "Cadorino Ladin", 3706570, "lld", aliases = {"Cadorino"}, } m["lld-fas"] = { "Fascian Ladin", 742627, "lld", aliases = {"Fascian", "Fassano"}, } m["lld-fod"] = { "Fodom Ladin", 3706605, "lld", aliases = {"Fodom", "Livinallese"}, } m["lld-for"] = { "Fornes Ladin", 5470374, "lld", aliases = {"Fornes"}, } m["lld-ghe"] = { "Gherdëina Ladin", 3706597, "lld", aliases = {"Gherdëina", "Gardenese", "Val Gardena"}, } m["lld-non"] = { "Nones Ladin", 1055027, "lld", aliases = {"Nones", "Noneso"}, } -- Romansh varieties m["rm-old"] = { "Old Romansh", nil, "rm", } m["rm-put"] = { "Puter Romansh", 688309, "rm", aliases = {"Puter", "Putèr", "Upper Engadine", "rm-puter"}, } m["rm-srm"] = { "Surmiran Romansh", 690216, "rm", aliases = {"Surmiran", "rm-surmiran", "Surmiran-Albula", -- Glottolog }, } m["rm-srs"] = { "Sursilvan Romansh", 688348, "rm", aliases = {"Sursilvan", "rm-sursilv"}, } m["rm-sut"] = { "Sutsilvan Romansh", 688272, "rm", aliases = {"Sutsilvan", "rm-sutsilv"}, varieties = {"Scharans Sutsilvan"}, -- per Glottolog } m["rm-val"] = { "Vallader Romansh", 690226, "rm", aliases = {"Vallader", "Putèr", "Lower Engadine", "rm-vallader"}, } m["rm-gri"] = { "Rumantsch Grischun", 688873, "rm", aliases = {"rm-rumgr"}, } ----------------------------------------------------- -- Sardinian varieties -- ----------------------------------------------------- m["sc-old"] = { "Old Sardinian", nil, "sc", } m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } ----------------------------------------------------- -- Spanish varieties -- ----------------------------------------------------- m["es-ear"] = { "Early Modern Spanish", 5364419, "es", } m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-BO"] = { "Bolivian Spanish", 510730, "es", } m["es-CL"] = { "Chilean Spanish", 857295, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-PE"] = { "Peruvian Spanish", 736236, "es", } m["es-PH"] = { "Philippine Spanish", 22091406, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } m["es-VE"] = { "Venezuelan Spanish", 840017, "es", } m["es-lun"] = { "Lunfardo", 1401612, "es", } ---------------------------------------------------------------------------------------------------------------------- -- Japonic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Japanese varieties m["ja-mid"] = { "ဂျပါန် လဒေါဝ်", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "ဂျပါန်တြေံခေတ်လဇုဲ", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } m["ojp-eas"] = { "Eastern Old Japanese", 65247957, "ojp", } m["ja-cla"] = { "Classical Japanese", 1332057, "ja", -- FIXME: This is redundant because Classical Japanese is considered a child of (Modern) Japanese, which has ja-mid-ear -- (as well as ja-mid-lat) as ancestors. However, the intent here is that the *direct* ancestor of ja-cla is ja-mid-ear -- and ja-mid-lat is not an ancestor. Need to rethink ancestor handling. -- ancestors = "ja-mid-ear", } ---------------------------------------------------------------------------------------------------------------------- -- Koreanic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Korean varieties m["oko-lat"] = { "ကိုဝ်ရဳယျာတြေံခေတ်လဇုဲ", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-cen"] = { "Central Korean", nil, "ko", } m["ko-gyg"] = { "Gyeonggi Korean", 485492, "ko-cen", aliases = {"Seoul Korean"}, } m["ko-chu"] = { "Chungcheong Korean", 625800, "ko-cen", aliases = {"Hoseo Korean"}, } m["ko-hwa"] = { "Hwanghae Korean", 16183706, "ko-cen", } m["ko-gan"] = { "Gangwon Korean", 11260444, "ko-cen", aliases = {"Yeongdong Korean"}, } m["ko-gys"] = { "Gyeongsang Korean", 488002, "ko", aliases = {"Southeastern Korean"}, } m["ko-jeo"] = { "Jeolla Korean", 11250166, "ko", aliases = {"Southwestern Korean"}, } m["ko-pyo"] = { "Pyongan Korean", 7263142, "ko", aliases = {"Northwestern Korean"}, } m["ko-ham"] = { "Hamgyong Korean", 860702, "ko", aliases = {"Northeastern Korean"}, } m["ko-yuk"] = { "Yukjin Korean", 16171275, "ko", aliases = {"Yukchin Korean", "Ryukjin Korean", "Ryukchin Korean"}, } ---------------------------------------------------------------------------------------------------------------------- -- Mongolic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } ---------------------------------------------------------------------------------------------------------------------- -- Niger-Congo varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akan varieties -- ----------------------------------------------------- m["tw"] = { "Twi Akan", 36850, "ak", aliases = {"Twi"}, } m["abr"] = { "Abron", 34831, "tw", aliases = {"Brong", "Bono", "Bono Twi"}, } m["tw-asa"] = { "Asante Twi", 19261685, "tw", aliases = {"Asante", "Ashanti", "Ashante"}, } m["tw-aku"] = { "Akuapem Twi", 31150449, "tw", aliases = {"Akuapem", "Akuapim", "Akwapem Twi", "Akwapi"}, } m["fat"] = { "Fante Akan", 35570, "ak", aliases = {"Fante", "Fanti", "Fantse", "Mfantse"}, } m["wss"] = { "Wasa", 36914, "ak", } -- creole m["alv-kro"] = { "Kromanti", 1093206, "crp-mar", } ----------------------------------------------------- -- Bantu varieties -- ----------------------------------------------------- m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } m["xh-bha"] = { "Bhaca", 4900493, "xh", aliases = {"isiBhaca", "IsiBhaca"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } ----------------------------------------------------- -- Fula varieties -- ----------------------------------------------------- m["fuc"] = { "Pulaar", 1420205, "ff", } m["fuf"] = { "Pular", 3915357, "ff", } m["ffm"] = { "Maasina Fulfulde", 3915322, "ff", } m["fue"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Borgu Fulfulde", 12952426, "ff", } m["fuh"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Western Niger Fulfulde", 12952430, "ff", } m["fuq"] = { -- no enwiki entry as of yet but frwiki, hrwiki and pmswiki have one "Central-Eastern Niger Fulfulde", 12628799, "ff", } m["fuv"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki and swwiki have one "Nigerian Fulfulde", 36129, "ff", } m["fub"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki, ptwiki, swwiki and yowiki have one "Adamawa Fulfulde", 34776, "ff", } m["fui"] = { -- no enwiki entry as of yet but pmswiki and swwiki have one "Bagirmi Fulfulde", 11003859, "ff", } ---------------------------------------------------------------------------------------------------------------------- -- Papuan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["kze"] = { "Kosena", 12952663, "auy", } m["ont"] = { "Ontenu", 3352827, "gaj", aliases = {"Ontena"}, } ---------------------------------------------------------------------------------------------------------------------- -- Salishan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["lut-nor"] = { "Northern Lushootseed", nil, "lut", aliases = {"Northern Puget Sound Salish"}, } m["slh"] = { "Southern Lushootseed", 7997684, "lut", aliases = {"Southern Puget Sound Salish", "Twulshootseed", "Whulshootseed"}, } m["ska"] = { "Skagit", 12642471, "lut-nor", } m["sno"] = { "Snohomish", 25559662, "lut-nor", } ---------------------------------------------------------------------------------------------------------------------- -- Sino-Tibetan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["tbq-pro"] = { "ဗၟာ-တိဗဝ်တဝ် အခိုက်ကၞာ", 7251864, "sit-pro", } ----------------------------------------------------- -- Chinese varieties -- ----------------------------------------------------- ------------- Old Chinese, Middle Chinese ------------- m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } ------------- Classical/Literary varieties ------------- -- FIXME: Temporary. m["lzh-shi"] = { "Traditional Chinese poetry", 1759242, "lzh", } -- FIXME: Temporary. m["lzh-cii"] = { "Ci", 1091366, "lzh", } -- FIXME: Temporary. m["lzh-yue"] = { "Classical Cantonese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn"] = { "Classical Mandarin", nil, "lzh", } -- FIXME: Temporary. m["lzh-tai"] = { "Classical Taishanese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn-TW"] = { "Classical Taiwanese Mandarin", nil, "lzh-cmn", } -- FIXME: Temporary. m["lzh-VI"] = { "Vietnamese Classical Chinese", 17034227, "lzh", } -- FIXME: Temporary. m["lzh-KO"] = { "Korean Classical Chinese", 10496257, "lzh", ietf_subtag = "lzh-KR" -- KR = South Korea, as there is no code for Korea as a whole } -- FIXME: Temporary. m["lzh-lit"] = { "Literary Chinese", nil, "lzh", } -- FIXME: Temporary. FIXME: Do we need this? How does it differ from Old Chinese? m["lzh-pre"] = { "Pre-Classical Chinese", nil, "lzh", } ------------- Written Vernacular varieties ------------- -- FIXME: Temporary. m["cmn-wvc"] = { "Written vernacular Mandarin", 783605, "cmn", } -- FIXME: Temporary. FIXME: How does this differ from "Literary Cantonese"? m["yue-wvc"] = { "Written vernacular Cantonese", nil, "yue", } -- FIXME: Temporary. m["zhx-tai-wvc"] = { "Written vernacular Taishanese", nil, "zhx-tai", } ------------- Mandarin varieties ------------- -- FIXME: Temporary. NOTE: The Linguist List assigns the "w:Beijing dialect" (Wikidata 1147606) the code "cmn-bej" and -- the larger "w:Beijing Mandarin (division of Mandarin)" dialect group (Wikidata 2169652; what we call "Beijingic -- Mandarin", after Glottolog) the code "cmn-bei". m["cmn-bei"] = { "Beijing Mandarin", 1147606, "cmn-bec", } -- FIXME: Temporary. m["cmn-bec"] = { "Beijingic Mandarin", 2169652, "cmn", } -- FIXME: Temporary. NOTE: The Linguist List uses the code cmn-zho. m["cmn-cep"] = { "Central Plains Mandarin", 3048775, "cmn", aliases = {"Zhongyuan Mandarin"}, } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", ancestors = "ltc", } -- FIXME: Temporary. m["cmn-gua"] = { "Guanzhong Mandarin", 3431648, "cmn-cep", } -- FIXME: Temporary. Appears to be a subdialect of Guiliu Mandarin, which in turn is a subdialect of Southwestern Mandarin. m["cmn-gui"] = { "Guilin Mandarin", 11111636, "cmn-sow", } m["cmn-jhu"] = { "Jianghuai Mandarin", 2128953, "cmn", aliases = {"Lower Yangtze Mandarin"}, } -- FIXME: Temporary. m["cmn-lan"] = { "Lanyin Mandarin", 662754, "cmn", } -- FIXME: Temporary. m["cmn-MY"] = { "Malaysian Mandarin", 13646143, "cmn", } -- FIXME: Temporary. m["cmn-nan"] = { "Nanjing Mandarin", 2681098, "cmn-jhu", } -- FIXME: Temporary. m["cmn-noe"] = { "Northeastern Mandarin", 1064504, "cmn", } -- FIXME: Temporary. m["cmn-PH"] = { "Philippine Mandarin", 7185155, "cmn", } -- FIXME: Temporary. m["cmn-SG"] = { "Singapore Mandarin", 1048980, "cmn", } -- FIXME: Temporary. m["cmn-sow"] = { "Southwestern Mandarin", 2609239, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Jilu Mandarin. m["cmn-tia"] = { "Tianjin Mandarin", 7800220, "cmn", } -- FIXME: Temporary. NOTE: Wikidata also has Q4380827 "Taiwanese Mandarin", defined as "rare dialect of Standard Chinese -- (Mandarin) used in Taiwan, which is strongly influenced by Taiwanese Hokkien; mostly used by elderlies" and having no -- English Wikipedia article (but see w:zh:臺灣國語). m["cmn-TW"] = { "Taiwanese Mandarin", 262828, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Wu-Tian Mandarin, in turn a subdialect of Southwestern Mandarin. -- Given the code cmn-xwu in the Linguist List. m["cmn-wuh"] = { "Wuhan Mandarin", 11124731, "cmn-sow", aliases = {"Wuhanese"}, } -- FIXME: Temporary. Appears to be a subdialect of Lanyin Mandarin. m["cmn-xin"] = { "Xining Mandarin", nil, "cmn-lan", } -- FIXME: Temporary. m["cmn-yan"] = { "Yangzhou Mandarin", nil, "cmn-jhu", } ------------- Cantonese varieties ------------- -- FIXME: Temporary. m["yue-gua"] = { "Guangzhou Cantonese", nil, "yue", } -- FIXME: Temporary. Given the codes yue-yue or yue-can in the Linguist List. m["yue-HK"] = { "Hong Kong Cantonese", 5894342, "yue", } -- FIXME: Temporary. FIXME: How does this differ from "Written vernacular Cantonese"? m["yue-lit"] = { "Literary Cantonese", 2472605, "yue", } ------------- Wu varieties ------------- m["wuu-han"] = { "Hangzhounese", 5648144, "wuu", } m["wuu-nin"] = { "Ningbonese", 3972199, "wuu", } -- FIXME: Temporary. m["wuu-nor"] = { "Northern Wu", 7675988, "wuu", aliases = {"Taihu Wu"}, } -- FIXME: Temporary? Subvariety of Taihu Wu. NOTE: "chm" stands for Chongming, the main dialect, to avoid a conflict -- with Shanghainese. m["wuu-chm"] = { "Shadi Wu", 6112340, "wuu-nor", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu-nor", } m["wuu-suz"] = { "Suzhounese", 831744, "wuu-nor", } -- FIXME: Temporary. May be converted into a full language and/or split. m["wuu-wen"] = { "Wenzhounese", 710218, "wuu", } ------------- Xiang varieties ------------- m["hsn-lou"] = { "Loudi Xiang", 10943823, "hsn-old", } m["hsn-hya"] = { "Hengyang Xiang", 20689035, "hsn-hzh", } m["hsn-hzh"] = { "Hengzhou Xiang", nil, "hsn", } m["hsn-new"] = { "New Xiang", 7012696, "hsn", aliases = {"Chang-Yi"}, } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } ------------- Hakka varieties ------------- -- FIXME: Temporary. m["hak-dab"] = { "Dabu Hakka", 19855566, "hak", -- formerly hak-TW but seems to be spoken primary in Dabu County in Guangdong } -- FIXME: Temporary. m["hak-eam"] = { "Early Modern Hakka", nil, "hak", } -- FIXME: Temporary. m["hak-hai"] = { "Hailu Hakka", 17038519, "hak", -- often considered a Taiwanese lect but also spoken in [[Shanwei]], [[Guangdong]] } -- FIXME: Temporary. m["hak-HK"] = { "Hong Kong Hakka", 2675834, "hak", } -- FIXME: Temporary. m["hak-hui"] = { "Huiyang Hakka", 16873881, "hak", } -- FIXME: Temporary. m["hak-hui-MY"] = { "Malaysian Huiyang Hakka", nil, "hak-hui", } -- FIXME: Temporary. Similar to and possibly the parent of Sixian Hakka in Taiwan. m["hak-mei"] = { "Meixian Hakka", 839295, "hak", aliases = {"Moiyan Hakka", "Meizhou Hakka"}, } -- FIXME: Temporary. m["hak-six"] = { "Sixian Hakka", 9668261, "hak-TW", } -- FIXME: Temporary. m["hak-TW"] = { "Taiwanese Hakka", 2391532, "hak", } -- FIXME: Temporary. m["hak-zha"] = { "Zhao'an Hakka", 6703311, "hak", aliases = {"Zhangzhou Hakka"}, } -- Southern Min varieties -- m["nan-anx"] = { "Anxi Hokkien", 97064149, "nan-qua", } m["nan-cha"] = { "Changtai Hokkien", nil, "nan-zha", } m["nan-hou"] = { "Houlu Min", 19855492, "nan-dat", } m["nan-hui"] = { "Hui'an Hokkien", 16241797, "nan-qua", } m["nan-jin"] = { "Jinjiang Hokkien", 11089375, "nan-qua", } m["nan-kin"] = { "Kinmenese Hokkien", 56278342, "nan-xia", aliases = {"Kinmen Hokkien"}, } m["nan-med"] = { "Medan Hokkien", 6805114, "nan-zha", } m["nan-pen"] = { "Penang Hokkien", 11120689, "nan-zha", } m["nan-hbl-PH"] = { "Philippine Hokkien", 3236692, "nan-qua", } m["nan-qia"] = { "Qianlu Min", 19842517, "nan-dat", } m["nan-qua"] = { "Quanzhou Hokkien", 2251677, "nan-hbl", aliases = {"Chinchew", "Choanchew"}, } -- FIXME: Temporary? Derived from both Quanzhou and Zhangzhou Hokkien. m["nan-hbl-SG"] = { "Singapore Hokkien", 3846528, "nan-hbl", } m["nan-spm"] = { "Southern Malaysian Hokkien", 7570322, "nan-qua", aliases = {"Southern Malaysia Hokkien", "Southern Peninsular Malaysian Hokkien", "Southern Peninsular Malaysia Hokkien"} } m["nan-hbl-TW"] = { "Taiwanese Hokkien", 36778, "nan-hbl", } m["nan-ton"] = { "Tong'an Hokkien", nil, "nan-xia", } m["nan-xia"] = { "Xiamen Hokkien", 68744, "nan-hbl", aliases = {"Amoy", "Amoyese", "Amoynese", "Xiamenese"}, } m["nan-yon"] = { "Yongchun Hokkien", 65118728, "nan-qua", } m["nan-zha"] = { "Zhangzhou Hokkien", 8070492, "nan-hbl", aliases = {"Changchew", "Chiangchew", "Changchow"}, } m["nan-zho"] = { "Zhao'an Hokkien", 65118728, "nan-zha", aliases = {"Zhao'an", "Chawan", "Chawan Hokkien"}, } m["nan-zhp"] = { "Zhangping Hokkien", 15937822, "nan-zha", } ------------- Other Min varieties ------------- -- FIXME: Temporary. Affiliation within Min uncertain; some combination of Eastern and Southern. m["zhx-zho"] = { "Zhongshan Min", 8070958, "zh", } ------------- Other Chinese varieties ------------- -- FIXME: Temporary. Affiliation within Chinese uncertain; possibly Yue. m["zhx-dan"] = { "Danzhou Chinese", 2578935, "zh", } ------------- Chinese romanization varieties ------------- -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegiles"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } m["zh-postal"] = { "Postal Romanization", 151868, "zh", } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } ----------------------------------------------------- -- Tibetic varieties -- ----------------------------------------------------- m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } ---------------------------------------------------------------------------------------------------------------------- -- Tai-Kadai varieties -- ---------------------------------------------------------------------------------------------------------------------- m["th-old"] = { "သေံတြေံ", nil, "tai-swe-pro", wikipedia_article = "Thai language#Old Thai", } m["th-suk"] = { "သူခိုဝ်ထိုၚ် သေံတြေံ", -- 1238-1438. Cannot use "Sukhothai Thai" as Sukhothai is the current city and "Sukhothai Thai" is a lect. nil, "th-old", aliases = {"Sukhothai Siamese"}, wikipedia_article = "Thai language#Old Thai", } m["th-ayu"] = { "အယုဒ္ဓယ သေံတြေံ", -- 1351-1767. Cannot use "Ayutthaya Thai" as Ayutthaya is the current city. nil, "th-old", aliases = {"Ayutthaya Siamese"}, wikipedia_article = "Thai language#Old Thai", } --[[ m["th-new"] = { "Hacked Thai", -- temporary for testing new translit/display methods nil, "th", translit = "User:Benwing2/th-scraping-translit", display_text = "User:Benwing2/th-scraping-translit", strip_diacritics = "User:Benwing2/th-scraping-translit", preprocess_links = "User:Benwing2/th-scraping-translit", } ]] m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } ---------------------------------------------------------------------------------------------------------------------- -- Turkic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["trk-cmn-pro"] = { "Proto-Common Turkic", 1126028, "trk-pro", } m["trk-ogr-pro"] = { "Proto-Oghur", 1422731, "trk-pro", family = "trk-ogr", } m["trk-bul-pro"] = { "Proto-Bulgar", nil, "trk-ogr-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", family = "trk-ogz", aliases = {"Southwestern Common Turkic"}, } m["crh-dbj"] = { "Dobrujan Tatar", 12811566, "crh", aliases = {"Romanian Tatar"}, } m["cv-ana"] = { "Anatri Chuvash", nil, "cv", aliases = {"Anatri", "Lower Chuvash"}, } m["cv-mid"] = { "Middle Chuvash", nil, "cv", ancestors = "cv-old", } m["cv-old"] = { "Old Chuvash", nil, "cv", ancestors = "xbo-vol", } m["cv-vir"] = { "Viryal Chuvash", 4278332, "cv", aliases = {"Viryal", "Upper Chuvash"}, } m["kjh-fyu"] = { "Fuyu Kyrgyz", 2598963, "kjh", aliases = {"Fuyu Kirgiz", "Fuyu Kirghiz", "Manchurian Kyrgyz", "Manchurian Kirgiz", "Manchurian Kirghiz"}, } m["klj-arg"] = { "Arghu", 33455, "klj", ancestors = "trk-cmn-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", aliases = {"Yenisei Turkic", "Yenisei Kyrgyz"}, } m["otk-ork"] = { "Orkhon Turkic", 31295480, "otk", } m["qwm-cum"] = { "Cuman", 1075050, "qwm", aliases = {"Kuman", "Polovtsian", "Polovcian"}, } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", ancestors = "qwm-cum", aliases = {"Xıpçaχ tili", "Tatarça"}, } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", aliases = {"Mameluk-Kipchak"}, } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } m["tr-CY"] = { "Cypriot Turkish", 7917392, "tr", } m["uz-afg"] = { -- NOTE: has ISO 639-3 code uzs assigned to it. "Afghan Uzbek", 1066787, "uz", aliases = {"Southern Uzbek"}, translit = "uz-afg-translit", } m["xbo-dan"] = { "Danube Bulgar", nil, "xbo", } m["xbo-vol"] = { "Volga Bulgar", nil, "xbo", } ---------------------------------------------------------------------------------------------------------------------- -- Uralic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["fiu-pro"] = { "ဖေန်နဝ်-ဥူဂရေတ်-အခိုက်ကၞာ", 79890, "urj-pro", } m["urj-fpr-pro"] = { "ဖေန်နဝ်-ပဵုမေတ်-အခိုက်ကၞာ", nil, "urj-pro", } m["krl-nor"] = { "North Karelian", 125501196, "krl", } m["krl-sou"] = { "South Karelian", 129812730, "krl", } m["mns-eas"] = { "Eastern Mansi", 30311755, "mns-cen", } m["mns-wes"] = { "Western Mansi", 30311756, "mns-cen", } ---------------------------------------------------------------------------------------------------------------------- -- Yeneseian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["qfa-yke-pro"] = { "Proto-Ketic", nil, "qfa-yen-pro", family = "qfa-yke", } m["qfa-yko-pro"] = { "Proto-Kottic", nil, "qfa-yen-pro", family = "qfa-yko", } m["qfa-yrn-pro"] = { "Proto-Arinic", nil, "qfa-yen-pro", family = "qfa-yrn", } m["qfa-ypm-pro"] = { "Proto-Pumpokolic", nil, "qfa-yen-pro", family = "qfa-ypm", } ---------------------------------------------------------------------------------------------------------------------- -- Miscellaneous varieties -- ---------------------------------------------------------------------------------------------------------------------- m["mul-tax"] = { "taxonomic name", 522190, "mul", } ----------------------------------------------------- -- Elamite varieties -- ----------------------------------------------------- m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } ----------------------------------------------------- -- Substrates -- ----------------------------------------------------- -- Pre-Roman substrates m["qsb-ibe"] = { "Paleo-Hispanic", 246801, "und", family = "qfa-sub", aliases = {"Palaeo-Hispanic", "Paleohispanic", "Palaeohispanic", "Paleo-Iberian", "Palaeo-Iberian"}, } m["qsb-bal"] = { "Paleo-Balkan", 1815070, "und", family = "qfa-sub", aliases = {"Palaeo-Balkan", "Paleobalkan", "Palaeobalkan"}, } m["xaq"] = { "Aquitanian", 500522, "euq-pro", family = "euq", } return require("Module:languages").finalizeData(m, "language", true) 911rvj27koxui24gh2eboucnsbefdnp 397878 397877 2026-07-06T16:34:37Z Intobesa.bot 1035 Bot: ပွမကၠာဲစုတ်ယၟုနူဘာသာအၚ်္ဂလိက် 397878 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} ---------------------------------------------------------------------------------------------------------------------- -- Afroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Berber varieties -- -------------------------------------------------------------------------------------- m["shi-med"] = { "Medieval Tashelhit", 34152, "shi", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["thv-ght"] = { "Ghat", 47012900, "thv", } -------------------------------------------------------------------------------------- -- Cushitic varieties -- -------------------------------------------------------------------------------------- -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -------------------------------------------------------------------------------------- -- Egyptian varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Ancient Egyptian varieties -- ----------------------------------------------------- m["egy-old"] = { "အဳဂျေပ်တြေံ", 447117, "egy", } m["egy-mid"] = { "အဳဂျေပ်လဒေါဝ်", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", 123735278, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "အဳဂျေပ်လဇုဲ", 1852329, "egy", } ----------------------------------------------------- -- Coptic varieties -- ----------------------------------------------------- m["cop-akh"] = { "Akhmimic Coptic", 125176464, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", 115518040, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -------------------------------------------------------------------------------------- -- Semitic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akkadian varieties -- ----------------------------------------------------- m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } ----------------------------------------------------- -- Arabic varieties -- ----------------------------------------------------- m["jrb"] = { "Judeo-Arabic", 37733, "ar", pseudo_families = "qfa-jew", } m["apc-leb"] = { "Lebanese North Levantine Arabic", 1516642, "apc", aliases = {"Lebanese Arabic"}, } m["apc-sle"] = { "South Lebanese North Levantine Arabic", 14206590, "apc", aliases = {"South Lebanese Arabic"}, } m["apc-nle"] = { "North Lebanese North Levantine Arabic", nil, "apc", aliases = {"North Lebanese Arabic"}, } m["apc-syr"] = { "Syrian North Levantine Arabic", 2143071, "apc", aliases = {"Syrian Arabic"}, } m["apc-ale"] = { "Aleppine North Levantine Arabic", 7056921, "apc-syr", aliases = {"Aleppo Arabic", "Aleppine Arabic"}, } m["apc-dam"] = { "Damascene North Levantine Arabic", 12237466, "apc-syr", aliases = {"Damascus Arabic", "Damascene Arabic"}, } m["acm-khu"] = { "Khuzestani Arabic", 1040944, "acm", } ----------------------------------------------------- -- Aramaic varieties -- ----------------------------------------------------- m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", pseudo_families = "qfa-jew", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", pseudo_families = "qfa-jew", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Hebrew varieties -- ----------------------------------------------------- m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } ---------------------------------------------------------------------------------------------------------------------- -- Ainu varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ain-hok"] = { "Hokkaido Ainu", 20968488, "ain", aliases = {"Hokkaidō Ainu"}, } m["ain-kur"] = { "Kuril Ainu", 20967012, "ain", } m["ain-sak"] = { "Sakhalin Ainu", 20747371, "ain", } ---------------------------------------------------------------------------------------------------------------------- -- American indigenous varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Inuit varieties -- ----------------------------------------------------- m["esi"] = { "North Alaskan Inupiatun", nil, "ik" } m["esk"] = { "Northwest Alaskan Inupiatun", 25559714, "ik" } ----------------------------------------------------- -- Iroquoian varieties -- ----------------------------------------------------- m["iro-ohu"] = { "Old Wendat", nil, "wdt", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } ----------------------------------------------------- -- Tupi-Guarani varieties -- ----------------------------------------------------- -- Old Tupi varieties m["tpw-lga"] = { "Língua Geral Amazônica", 18275323, "tpw", aliases = {"Língua Geral"}, } m["tpw-lgp"] = { "Língua Geral Paulista", 2669239, "tpw", } ---------------------------------------------------------------------------------------------------------------------- -- Austroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Khmer varieties m["okz-ang"] = { "ခမေန်တြေံ အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-pre"] = { "ခမေန်တြေံ ကၠာ-အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } ---------------------------------------------------------------------------------------------------------------------- -- Austronesian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Malay and related varieties m["ms-old"] = { -- this has the ISO code 'omy' "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", aliases = {"Urban Betawi"}, -- in Jakarta } -- Philippine varieties m["xnn"] = { "Northern Kankanaey", 12953609, "kne", aliases = {"Northern Kankanay", "Northern Kankana-ey"}, } m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } ---------------------------------------------------------------------------------------------------------------------- -- Caucasian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } ---------------------------------------------------------------------------------------------------------------------- -- Dravidian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } ---------------------------------------------------------------------------------------------------------------------- -- Indo-European varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Albanian varieties -- -------------------------------------------------------------------------------------- m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "als", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "als", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -------------------------------------------------------------------------------------- -- Armenian varieties -- -------------------------------------------------------------------------------------- m["hyw"] = { "Western Armenian", 180945, "hy", } m["hye"] = { "Eastern Armenian", 181059, "hy", } -------------------------------------------------------------------------------------- -- Balto-Slavic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Baltic varieties -- ------------------------------------------------------------------------- m["bat-pro"] = { "ဗေါဝ်တေတ်-အခိုက်ကၞာ", 1703347, "ine-bsl-pro", } m["bat-dni"] = { "Dnieper Baltic", 4163178, "bat-pro", family = "bat", aliases = {"Dniepr Baltic", "Dnieper-Oka Baltic", "Dniepr-Oka Baltic"}, } m["bat-gol"] = { "Golyad", 4142855, "bat-dni", aliases = {"Eastern Galindian", "East Galindian"}, } ------------------------------------------------------------------------- -- Slavic varieties -- ------------------------------------------------------------------------- ----------------------------------------------------- -- Bulgarian varieties -- ----------------------------------------------------- m["cu-bgm"] = { "ဗူလ်ဂရဳယာန် လဒေါဝ်", 12294897, "cu", ancestors = "cu" } ----------------------------------------------------- -- Church Slavonic varieties -- ----------------------------------------------------- -- Old Moscow Church Slavonic deleted as it seems not distinct enough from Russian (Synodal) Church Slavonic. m["zls-chs-ru"] = { "Russian Church Slavonic", 21662400, "zls-chs", aliases = {"Synodal Church Slavonic", "New Moscow Church Slavonic", "Novomoskovsk Church Slavonic"}, } m["zls-chs-uk"] = { "Ukrainian Church Slavonic", 12153548, "zls-chs", aliases = {"Rusyn Church Slavonic", "Belarusian Church Slavonic"}, } --[=[ -- Not sure about these yet. m["zls-chs-bg"] = { "Bulgarian Church Slavonic", nil, "zls-chs", } m["zls-chs-cs"] = { "Czech Church Slavonic", nil, "zls-chs", } m["zls-chs-hr"] = { "Croatian Church Slavonic", nil, "zls-chs", } m["zls-chs-mk"] = { "Macedonian Church Slavonic", nil, "zls-chs", } m["zls-chs-ro"] = { "Romanian Church Slavonic", nil, "zls-chs", } m["zls-chs-sr"] = { "Serbian Church Slavonic", nil, "zls-chs", } ]=] ----------------------------------------------------- -- Czech varieties -- ----------------------------------------------------- m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } ----------------------------------------------------- -- East Slavic varieties -- ----------------------------------------------------- m["zle-ops"] = { "Old Pskovian", 4167885, "zle-ono", } m["zle-mru"] = { "ရုသျှာ လဒေါဝ်", 35228, "ru", "Cyrs", ancestors = "orv", translit = "ru-translit", strip_diacritics = { Cyrs = { remove_diacritics = c.grave .. c.acute .. c.diaer, }, }, } m["zle-mbe"] = { "Middle Belarusian", 13211, "zle-ort", ancestors = "zle-ort", } m["zle-muk"] = { "ယူကရိန် လဒေါဝ်", 13211, "zle-ort", ancestors = "zle-ort", } m["uk-CA"] = { "Canadian Ukrainian", 4161010, "uk", } m["crp-cpr-kya"] = { "Kyakhta Chinese Pidgin Russian", 1062960, "crp-cpr", } ----------------------------------------------------- -- Polish varieties -- ----------------------------------------------------- m["zlw-mpl"] = { "ပဝ်လာန် လဒေါဝ်", 402878, "pl", ancestors = "zlw-opl", strip_diacritics = { remove_diacritics = c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ó", "ó", "Ś", "ś", "Ź", "ź"}, }, } m["pl-gre"] = { "Greater Polish", 4106789, "pl", } m["pl-les"] = { "Lesser Polish", 361709, "pl", } m["pl-mas"] = { "Masovian Polish", 4274559, "pl", } m["pl-gor"] = { "Goral", 452889, "pl", } ----------------------------------------------------- -- Serbo-Croatian varieties -- ----------------------------------------------------- m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -------------------------------------------------------------------------------------- -- Celtic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Brythonic varieties -- ----------------------------------------------------- m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } ----------------------------------------------------- -- Gaulish varieties -- ----------------------------------------------------- m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } ----------------------------------------------------- -- Welsh varieties -- ----------------------------------------------------- m["cy-nor"] = { "North Wales Welsh", 13127692, "cy", aliases = {"North Walian Welsh", "Northern Welsh"}, } m["cy-sou"] = { "South Wales Welsh", 13127689, "cy", aliases = {"South Walian Welsh", "Southern Welsh"}, } -------------------------------------------------------------------------------------- -- Germanic varieties -- -------------------------------------------------------------------------------------- -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", family = "gmw-frk", aliases = {"Old Frankish"}, } m["gem-sue"] = { "Suevic", 134600275, "gmw-pro", aliases = {"Suebian"}, } m["gmw-afr-pro"] = { "Proto-Anglo-Frisian", 134603379, "gmw-nsg-pro", family = "gmw-afr", } m["gmw-nsg-pro"] = { "Proto-North Sea Germanic", 134603374, "gmw-pro", family = "gmw-nsg", aliases = {"Proto-Ingvaeonic"}, } ----------------------------------------------------- -- Dutch varieties -- ----------------------------------------------------- m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = {"Flemish", "Flemish Dutch", "Southern Dutch"}, } ----------------------------------------------------- -- English and Scots varieties -- ----------------------------------------------------- -- English varieties m["en-AU"] = { "Australian English", 44679, "en", } m["en-GB"] = { "British English", 7979, "en", } m["en-GB-SCT"] = { "Scottish English", 1553250, "en-GB", } m["en-GB-WLS"] = { "Welsh English", 2363292, "en-GB", } m["en-IM"] = { "Manx English", 6753295, "en-GB", } m["en-aae"] = { "Australian Aboriginal English", 783347, "en-AU", } m["en-ear"] = { "Early Modern English", 1472196, "en", ancestors = "enm", aliases = {"Early New English"}, } m["en-geo"] = { "Geordie", 653421, "en", ancestors = "enm-nor", } m["en-IE"] = { -- FIXME: "IE" doesn't cover Northern Ireland "Irish English", 665624, "en", } m["en-uls"] = { "Ulster English", 6840826, "en-IE", } m["en-GB-NIR"] = { "Northern Irish English", 6840826, -- actually the code for Ulster English "en-uls", } m["en-NNN"] = { -- NA = Namibia; NNN is NATO 3-letter code for North America "North American English", 7053766, "en", ietf_subtag = "en-021" -- 021 = UN M49 code for "Northern America" (i.e. North America wihout Central America or the Caribbean) } m["en-US"] = { "American English", 7976, "en-NNN", } m["en-NZ"] = { "New Zealand English", 44661, "en" } m["en-ZA"] = { "South African English", 1156228, "en" } m["en-US-CA"] = { "California English", 1026812, "en-US", } m["en-CA"] = { "Canadian English", 44676, "en-US", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } m["en-IN"] = { "Indian English", 1348800, "en", } m["pld"] = { "Polari", 1359130, "en", } -- Scots varieties m["sco-ins"] = { "Insular Scots", 16919205, "sco", } m["sco-uls"] = { "Ulster Scots", 201966, "sco", } m["sco-nor"] = { "Northern Scots", 16928150, "sco", } m["sco-sou"] = { "Southern Scots", 7570457, "sco", aliases = {"South Scots", "Borders Scots"}, } -- Middle English varieties m["enm-esc"] = { -- Part of Middle English until it developed into Middle Scots. "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots", "Scottish Middle English"}, } m["enm-emi"] = { "East Midland Middle English", 134238810, "enm", ancestors = "ang-ang", -- Technically ang-mer, but attested Mercian is mostly WM IIRC } m["enm-ken"] = { "Kentish Middle English", 134238532, "enm", ancestors = "ang-ken", } m["enm-nor"] = { "Northern Middle English", 134238541, "enm", ancestors = "ang-nor", } m["enm-sou"] = { "Southern Middle English", 134238528, "enm", ancestors = "ang-wsx", } m["enm-wmi"] = { "West Midland Middle English", 134238824, "enm", ancestors = "ang-mer", } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", 121142917, "ang", } m["ang-ken"] = { "Kentish Old English", 11687485, "ang", } m["ang-mer"] = { "Mercian Old English", 602072, "ang-ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang-ang", } m["ang-wsx"] = { "West Saxon Old English", 2658603, "ang", } ----------------------------------------------------- -- High German varieties -- ----------------------------------------------------- -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", } m["de-CH"] = { "Switzerland German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German", "Swiss High German"}, } m["de-bal"] = { "Baltic German", 15785413, "de", } m["de-ear"] = { "Early New High German", 1472199, "de", ancestors = "gmh", aliases = {"Early Modern High German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian East Central German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon German", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", } -- Alemannic German varieties m["gsw-low"] = { "Low Alemannic German", 503724, "gsw", } m["gsw-FR-als"] = { "Alsatian Alemannic German", 8786, "gsw-low", } m["gsw-hig"] = { "High Alemannic German", 503728, "gsw", } m["gsw-hst"] = { "Highest Alemannic German", 687538, "gsw", } m["wae"] = { "Walser German", 680517, "gsw-hst", } ----------------------------------------------------- -- Low German varieties -- ----------------------------------------------------- m["nds-de"] = { "German Low German", 25433, "nds", ietf_subtag = "nds-DE", -- should we make this the actual code? wikimedia_codes = "nds", } m["nds-nl"] = { "Dutch Low Saxon", 516137, "nds", ietf_subtag = "nds-NL", -- should we make this the actual code? wikimedia_codes = "nds-nl", } m["act"] = { "Achterhoeks", 153627, "nds-nl", aliases = {"Achterhoek", "Achterhooks"}, } m["drt"] = { "Drents", 2736709, "nds-nl", aliases = {"Drèents", "Dreins", "Dreints", "Drints"}, } m["frs"] = { "East Frisian Low German", 149208, "nds-de", aliases = {"East Frisian", "East Frisian Low Saxon"}, } m["gos"] = { "Gronings", 508854, "nds-nl", aliases = {"Grunnegs", "Grönnegs"}, } m["nds-lpr"] = { "Low Prussian", 33982, "nds-de", } m["sdz"] = { "Sallands", 3436668, "nds-nl", aliases = {"Sallaans", "Sallaands"}, } m["stl"] = { "Stellingwerfs", 506010, "nds-nl", aliases = {"Stellingwarfs"}, } m["twd"] = { "Twents", 497363, "nds-nl", aliases = {"Tweants"}, } m["vel"] = { "Veluws", 2484810, "nds-nl", } m["wep"] = { "Westphalian", 505655, "nds-de", aliases = {"Westfalish", "Westphalien"}, } ----------------------------------------------------- -- North Frisian varieties -- ----------------------------------------------------- m["frr-ins"] = { "Insular North Frisian", 110629610, "frr", } m["frr-fam"] = { "Föhr-Amrum North Frisian", 110629601, "frr-ins", } m["frr-foh"] = { "Föhr North Frisian", 28185, "frr-fam", aliases = {"Föhr Frisian", "Fering", "Ferring", -- Glottolog }, varieties = {"Aasdring", "Weesdring"}, } m["frr-amr"] = { "Amrum North Frisian", 28192, "frr-fam", aliases = {"Amrum Frisian", "Amrum", "Öömrang"}, } m["frr-hel"] = { "Heligoland North Frisian", 28086, "frr-ins", aliases = {"Heligoland Frisian", "Halunder", "Heligolandic Frisian", "Heligolandic North Frisian", "Helgoland Frisian", "Helgoland North Frisian", "Helgoland"}, } m["frr-syl"] = { "Sylt North Frisian", 28181, "frr-ins", aliases = {"Sylt Frisian", "Söl'ring", "Sölreng", -- Glottolog }, } m["frr-mai"] = { "Mainland North Frisian", 110629626, "frr", } m["frr-hal"] = { "Halligen North Frisian", 28177, "frr-mai", aliases = {"Halligen Frisian", "Halifreesk", "Hallingen Frisian", "Hallingen North Frisian", "Hallingen", -- Glottolog }, } m["frr-moo"] = { "Mooring North Frisian", 28187, "frr-mai", aliases = {"Bökingharde North Frisian", "Bökingharde Frisian", "Böökinghiirder frasch", "Mooring", "Moring", }, varieties = {{"East Mooring", "Ostermooring"}, {"West Mooring", "Westermooring"}}, } m["frr-kar"] = { "Karrharde North Frisian", 28191, "frr-mai", aliases = {"Karrharde Frisian", "Karrharder", }, } m["frr-goe"] = { -- Technically this refers to three adjacent dialects (Northern, Central and Southern), the latter of which went -- extinct in 1980-1981. As a result, Glottolog speaks of "Norder-Mittelgoesharde", referring to the remaining two. "Goesharde North Frisian", 28183, "frr-mai", aliases = {"Norder-Mittelgoesharde North Frisian", "Norder-Mittelgoesharde Frisian", "Norder-Mittelgoesharde", "Goesharde Frisian", "Goesharde", "Gooshiirder", }, } m["frr-wie"] = { "Wiedingharde North Frisian", 28171, "frr-mai", aliases = {"Wiedingharde Frisian", "Wiedingharde", "Wiringhiirder freesk", }, } ----------------------------------------------------- -- Old Norse varieties -- ----------------------------------------------------- m["non-grn"] = { "Greenlandic Norse", 855236, "non-own", } m["non-oen"] = { "Old East Norse", 10498031, "non", ancestors = "non", } m["non-own"] = { "Old West Norse", 2377483, "non", ancestors = "non", } ----------------------------------------------------- -- Old Swedish varieties -- ----------------------------------------------------- m["gmq-osw-lat"] = { "Late Old Swedish", 10723594, "gmq-osw", ancestors = "gmq-osw", } -------------------------------------------------------------------------------------- -- Greek varieties -- -------------------------------------------------------------------------------------- m["qsb-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-cyp"] = { "Cypriot Ancient Greek", -- to distinguish from Cypriot Greek below nil, "grc-arp", } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epi"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, } m["grc-kre"] = { "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-opl"] = { "Opuntian Locrian", nil, "grc", } m["grc-ozl"] = { "Ozolian Locrian", nil, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, } m["el-cyp"] = { "Cypriot Greek", 245899, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 35961, "el", "Polyt", ancestors = "gkm", aliases = {"Katharevousa Greek"}, -- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["el-kal"] = { "Kaliarda", 12878658, "el", } -------------------------------------------------------------------------------------- -- Indo-Iranian varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Indo-Aryan varieties -- ------------------------------------------------------------------------- -- reconstructed intermediate stages m["pra-pro"] = { "Proto-New Indo-Aryan", nil, "pra", } m["inc-ash-pro"] = { "Proto-Middle Indo-Aryan", nil, "inc-ash", } m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["bra-old"] = { "Old Braj", nil, "bra", } -- Apabhramsas m["inc-aav"] = { "အဝဟတာ", nil, "inc-apa", aliases = {"Abahattha"}, } m["inc-asa"] = { "သဥူရေသဳနဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-agu"] = { "ဂူဂျာရာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-aka"] = { "ခေပ်သမဳရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ama"] = { "မဟာရာတ်သပ်ထရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ata"] = { "တာကာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-avr"] = { "ဝရာခါဒါ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } -- Assamese varieties m["as-bkm"] = { "Barpetia Kamrupi Assamese", 30642960, "as", } m["as-nkm"] = { "Nalbaria Kamrupi Assamese", 85787678, "as", } m["as-pkm"] = { "Palasbaria Kamrupi Assamese", nil, "as", } -- Bengali varieties m["bn-dvn"] = { "Dhakaiya Vaṅga Bengali", 48726851, "bn", -- Eastern Bengali variety } m["bn-nvn"] = { "Noakhailla Vaṅga Bengali", 107548681, "bn", -- Eastern Bengali variety } -- Dhivehi varieties m["dv-old"] = { "Old Dhivehi", 117790875, "dv", } m["dv-mul"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["dv-huv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["dv-add"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Gujarati varieties m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } -- Hindi varieties m["hi-mum"] = { "Bombay Hindi", 3543151, "hi", aliases = {"Mumbai Hindi", "Bambaiyya Hindi"}, } m["hi-mid"] = { "Middle Hindi", nil, "inc-ohi", ancestors = "inc-ohi", } -- Konkani varieties m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Prakrits m["pra-ard"] = { "အာတ်ဓၟဂါတ်ဒဳ ပရာကရေတ်", 35217, "pra", aliases = {"Ardhamagadhi"}, } m["pra-hel"] = { "ဟေဠူ ပရာကရေတ်", 15080869, "pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["pra-kha"] = { "ခါဿာ ပရာကရေတ်", nil, "pra", aliases = {"Khasa"}, } m["pra-mag"] = { "မဂ္ဂဒိ ပရာကရေတ်", -- Not to be confused with Magahi (mag) 2652214, "pra", aliases = {"Magadhi"}, } m["pra-mah"] = { "မဟာရာတ်ထရဳ ပရာကရေတ်", 2586773, "pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["pra-pai"] = { "ပါအေတ်သာသဳ ပရာကရေတ်", 2995607, "pra-sau", aliases = {"Paisaci", "Paisachi"}, ancestors = "pra-sau" } m["pra-sau"] = { "သောရာသေနဳ ပရာကရေတ်", 2452885, "pra", aliases = {"Sauraseni", "Shauraseni"}, } m["pra-ava"] = { "အဗါန်တဳ", nil, "pra", aliases = {"Avanti Prakrit"}, } m["pra-pra"] = { "ပရာသဳယျာ", nil, "pra", aliases = {"Pracya Prakrit"}, } m["pra-bah"] = { "ပါလိကဳ", nil, "pra", aliases = {"Bahliki Prakrit"}, } m["pra-dak"] = { "ထေတ်သဳနတာယျ", nil, "pra", aliases = {"Daksinatya Prakrit"}, } m["pra-sak"] = { "သာကာရဳ", nil, "pra", aliases = {"Sakari Prakrit"}, } m["pra-can"] = { "ခေန်ဒါလဳ", nil, "pra", aliases = {"Candali Prakrit"}, } m["pra-sab"] = { "သာဗါရဳ", nil, "pra", aliases = {"Sabari Prakrit"}, } m["pra-abh"] = { "အဖိရဳ", nil, "pra", aliases = {"Abhiri Prakrit"}, } m["pra-dra"] = { "ဒရာမဳလဳ", nil, "pra", aliases = {"Dramili Prakrit"}, } m["pra-odr"] = { "အဝ်ဒရဳ", nil, "pra", aliases = {"Odri Prakrit"}, } -- Punjabi varieties m["pnb"] = { "Western Punjabi", 58635, "pa", "pa-Arab", } -- Sanskrit varieties m["vsn"] = { "Vedic Sanskrit", 36858, "sa", } m["cls"] = { "Classical Sanskrit", 9333703, "sa", } m["sa-bhs"] = { "Buddhist Hybrid Sanskrit", 248758, "sa", } m["sa-bra"] = { "Brahmanic Sanskrit", 139822891, "vsn", } m["sa-epi"] = { "Epic Sanskrit", 56702805, "cls", } m["sa-neo"] = { "New Sanskrit", nil, "sa", } m["sa-rig"] = { "Rigvedic Sanskrit", 139822680, "vsn", } -- Sinhalese varieties m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } ------------------------------------------------------------------------- -- Iranian varieties -- ------------------------------------------------------------------------- m["qsb-bma"] = { "the BMAC substrate", 133187435, "und", family = "qfa-sub", aliases = {"the Bactria-Margiana substrate", "the Bactria-Margiana Archaeological Complex substrate"}, } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ear"] = { "Early New Persian", 127413796, "fa", ancestors = "pal-lat", translit = "fa-cls-translit", } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "fa-ear", translit = "fa-cls-translit", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, translit = "fa-ira-translit", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, translit = "fa-cls-translit", } m["haz"] = { "Hazaragi", 33398, "prs", translit = "fa-cls-translit", } m["os-dig"] = { "Digor Ossetian", 3027861, "os", aliases = {"Digoron", "Digor"}, } m["os-iro"] = { "Iron Ossetian", nil, "os", aliases = {"Iron"}, } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["ro-MD"] = { "Moldovan", 36392, "ro", aliases = {"Moldavian"}, } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos"] = { "Old Ossetic", 65455882, "xln", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esmaili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali Tati", nil, "tks", aliases = {"Chāli"}, } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } ------------------------------------------------------------------------- -- Nuristani varieties -- ------------------------------------------------------------------------- m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, } m["bsh-mum"] = { "Mumviri", nil, "bsh", aliases = {"Mumvíri"}, } -------------------------------------------------------------------------------------- -- Italic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Latin varieties -- ------------------------------------------------------------------------- -- Latin varieties by period m["itc-ola"] = { "လပ်တေန်တြေံ", 12289, "la", "Latn, Ital", translit = { Ital = "Ital-translit" }, } m["itc-lan"] = { "Lanuvian", 16890829, "itc-ola", aliases = {"Lanuvine"}, } m["itc-pra"] = { "Praenestine", 16889772, "itc-ola", aliases = {"Praenestinian"}, } m["la-cla"] = { "လပ်တေန်ဝၚ်ဂန္ထ", 253854, "la", } m["la-vul"] = { "လပ်တေန်အရိုၚ်", 37560, "la-cla", } m["la-afr"] = { "African Romance", 162064, "roa-pro", } m["la-lat"] = { "လပ်တေန်လဇုဲ", 1503113, "la", ancestors = "la-cla", } m["la-med"] = { "လပ်တေန် ခေတ်လဒေါဝ်", 1163234, "la", ancestors = "la-lat", } m["la-eme"] = { "လပ်တေန်ခေတ်လဒေါဝ်ဗွဲမပြဟ်", nil, "la-med", } m["la-ecc"] = { "သာသနာခရေတ်လပ်တေန်", 1247932, "la", aliases = {"Church Latin", "Liturgical Latin"}, ancestors = "la-lat", } m["la-ren"] = { "လပ်တေန်ခေတ်ကလေၚ်ပလေဝ်ပ္တိုန်တၟိ", 499083, "la", ancestors = "la-med", } m["la-new"] = { "လပ်တေန်တၟိ", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", } m["la-con"] = { "လပ်တေန်ခေတ်ပြိုၚ်ပ္ကာန်", 1246397, "la-new", } ------------------------------------------------------------------------- -- Miscellaneous Italic varieties -- ------------------------------------------------------------------------- m["xfa-cap"] = { "Capenate", 133182969, "xfa", } m["osc-luc"] = { "Lucanian", 3265025, "osc", } m["osc-sam"] = { "Samnite", 133184287, "osc", } ------------------------------------------------------------------------- -- Romance varieties -- ------------------------------------------------------------------------- m["roa-pro"] = { "Proto-Romance", 3408029, "la-lat", ancestors = "la-vul", } ----------------------------------------------------- -- Catalan varieties -- ----------------------------------------------------- m["ca-val"] = { "Valencian", 32641, "ca", } ----------------------------------------------------- -- Franco-Provençal varieties -- ----------------------------------------------------- m["frp-old"] = { "Old Franco-Provençal", nil, "frp", } ----------------------------------------------------- -- French and derived creole varieties -- ----------------------------------------------------- m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro-nor", } m["xno-law"] = { "Law French", 2044323, "xno", } m["zrp"] = { "Zarphatic", 36994, "fro", aliases = {"Judeo-French"}, pseudo_families = "qfa-jew", } m["fr-CA"] = { "Canadian French", 1450506, "fr", } m["fr-CH"] = { "Swiss French", 1480152, "fr", } m["fr-aca"] = { "Acadian French", 415109, "fr", } m["fr-lou"] = { "Louisiana French", 3083213, "fr", } m["fr-mis"] = { "Missouri French", 3083210, "fr", } m["frc"] = { "Cajun French", 880301, "fr-lou", } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, } ----------------------------------------------------- -- Gallo-Italic varieties -- ----------------------------------------------------- m["egl-old"] = { "Old Emilian", nil, "egl", } m["lij-old"] = { "လဳဂူရဳယာန်တြေံ", nil, "lij", aliases = {"Old Genoese"}, } m["lmo-old"] = { "Old Lombard", 97165320, "lmo", } m["pms-old"] = { "Old Piedmontese", nil, "pms", aliases = {"Old Piemontese"}, } m["vec-old"] = { "Old Venetan", nil, "vec", aliases = {"Old Venetian"}, } m["rgn-old"] = { "Old Romagnol", nil, "rgn", } ----------------------------------------------------- -- Italo-Romance varieties -- ----------------------------------------------------- -- Italian varieties m["roa-oit"] = { "Old Italian", nil, "it", } m["it-CH"] = { "Switzerland Italian", 672147, "it", } -- Other Italo-Romance varieties m["nap-old"] = { "Old Neapolitan", nil, "nap", } m["scn-old"] = { "Old Sicilian", nil, "scn", } ----------------------------------------------------- -- Occitan varieties -- ----------------------------------------------------- m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "ဂေါသ်သကာန်", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "လာမ်ဂဝေအ်ဒံက်ဃှေန်", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "လိမူသေန်", 427614, "oc", } m["oc-pro"] = { "ဖရဝ်ဗေန်သော", 241243, "oc", aliases = {"Provencal"}, } m["oc-pro-old"] = { "ဖရဝ်ဗေန်သောတြေံ", 2779185, "pro", } m["oc-viv"] = { "ဝဳဝါရုဝ်-အောဖှာၚ်", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Portuguese and derived creole varieties -- ----------------------------------------------------- -- Portuguese m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } m["pt-PT"] = { "European Portuguese", 922399, "pt", } -- Kabuverdianu (Cape Verde Creole, Cape Verdean Creole) m["kea-bar"] = { "Barlavento Kabuverdianu", 2217638, "kea", aliases = {"Barlavento", "Barlavento Creole", "Sampadjudu"}, } m["kea-bvi"] = { "Boa Vista Kabuverdianu", 16501837, "kea-bar", aliases = {"Boa Vista Creole"}, } m["kea-sal"] = { "Sal Kabuverdianu", 18707467, "kea-bar", aliases = {"Sal Creole"}, } m["kea-saa"] = { "Santo Antão Kabuverdianu", 18707472, "kea-bar", aliases = {"Santo Antão Creole"}, } m["kea-sni"] = { "São Nicolau Kabuverdianu", 18707549, "kea-bar", aliases = {"São Nicolau Creole"}, } m["kea-svi"] = { "São Vicente Kabuverdianu", 18707550, "kea-bar", aliases = {"São Vicente Creole"}, } m["kea-sot"] = { "Sotavento Kabuverdianu", 10261559, "kea", aliases = {"Sotavento", "Sotavento Creole", "Badiu"}, } m["kea-bra"] = { "Brava Kabuverdianu", 18670181, "kea-sot", aliases = {"Brava Creole"}, } m["kea-fog"] = { "Fogo Kabuverdianu", 18706861, "kea-sot", aliases = {"Fogo Creole"}, } m["kea-mai"] = { "Maio Kabuverdianu", 18707286, "kea-sot", aliases = {"Maio Creole"}, } m["kea-san"] = { "Santiago Kabuverdianu", 35117, "kea-sot", aliases = {"Santiago Creole"}, } m["kea-alu"] = { "ALUPEC Kabuverdianu", 375704, "kea", aliases = {"ALUPEC", "Alfabeto Unificado para a Escrita do Cabo-Verdiano"}, } ----------------------------------------------------- -- Rhaeto-Romance varieties -- ----------------------------------------------------- -- Friulian varieties m["fur-old"] = { "Old Friulian", nil, "fur", } -- Ladin varieties m["lld-amp"] = { "Ampezan Ladin", 25617466, "lld", aliases = {"Anpezan", "Ampezan", "Ampezzan", "Ampezzano"}, } m["lld-bad"] = { "Badiot Ladin", 3706562, "lld", aliases = {"Badiot", "Badioto", "Badiotto"}, } m["lld-cad"] = { "Cadorino Ladin", 3706570, "lld", aliases = {"Cadorino"}, } m["lld-fas"] = { "Fascian Ladin", 742627, "lld", aliases = {"Fascian", "Fassano"}, } m["lld-fod"] = { "Fodom Ladin", 3706605, "lld", aliases = {"Fodom", "Livinallese"}, } m["lld-for"] = { "Fornes Ladin", 5470374, "lld", aliases = {"Fornes"}, } m["lld-ghe"] = { "Gherdëina Ladin", 3706597, "lld", aliases = {"Gherdëina", "Gardenese", "Val Gardena"}, } m["lld-non"] = { "Nones Ladin", 1055027, "lld", aliases = {"Nones", "Noneso"}, } -- Romansh varieties m["rm-old"] = { "Old Romansh", nil, "rm", } m["rm-put"] = { "Puter Romansh", 688309, "rm", aliases = {"Puter", "Putèr", "Upper Engadine", "rm-puter"}, } m["rm-srm"] = { "Surmiran Romansh", 690216, "rm", aliases = {"Surmiran", "rm-surmiran", "Surmiran-Albula", -- Glottolog }, } m["rm-srs"] = { "Sursilvan Romansh", 688348, "rm", aliases = {"Sursilvan", "rm-sursilv"}, } m["rm-sut"] = { "Sutsilvan Romansh", 688272, "rm", aliases = {"Sutsilvan", "rm-sutsilv"}, varieties = {"Scharans Sutsilvan"}, -- per Glottolog } m["rm-val"] = { "Vallader Romansh", 690226, "rm", aliases = {"Vallader", "Putèr", "Lower Engadine", "rm-vallader"}, } m["rm-gri"] = { "Rumantsch Grischun", 688873, "rm", aliases = {"rm-rumgr"}, } ----------------------------------------------------- -- Sardinian varieties -- ----------------------------------------------------- m["sc-old"] = { "Old Sardinian", nil, "sc", } m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } ----------------------------------------------------- -- Spanish varieties -- ----------------------------------------------------- m["es-ear"] = { "Early Modern Spanish", 5364419, "es", } m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-BO"] = { "Bolivian Spanish", 510730, "es", } m["es-CL"] = { "Chilean Spanish", 857295, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-PE"] = { "Peruvian Spanish", 736236, "es", } m["es-PH"] = { "Philippine Spanish", 22091406, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } m["es-VE"] = { "Venezuelan Spanish", 840017, "es", } m["es-lun"] = { "Lunfardo", 1401612, "es", } ---------------------------------------------------------------------------------------------------------------------- -- Japonic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Japanese varieties m["ja-mid"] = { "ဂျပါန် လဒေါဝ်", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "ဂျပါန်တြေံခေတ်လဇုဲ", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } m["ojp-eas"] = { "Eastern Old Japanese", 65247957, "ojp", } m["ja-cla"] = { "Classical Japanese", 1332057, "ja", -- FIXME: This is redundant because Classical Japanese is considered a child of (Modern) Japanese, which has ja-mid-ear -- (as well as ja-mid-lat) as ancestors. However, the intent here is that the *direct* ancestor of ja-cla is ja-mid-ear -- and ja-mid-lat is not an ancestor. Need to rethink ancestor handling. -- ancestors = "ja-mid-ear", } ---------------------------------------------------------------------------------------------------------------------- -- Koreanic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Korean varieties m["oko-lat"] = { "ကိုဝ်ရဳယျာတြေံခေတ်လဇုဲ", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-cen"] = { "Central Korean", nil, "ko", } m["ko-gyg"] = { "Gyeonggi Korean", 485492, "ko-cen", aliases = {"Seoul Korean"}, } m["ko-chu"] = { "Chungcheong Korean", 625800, "ko-cen", aliases = {"Hoseo Korean"}, } m["ko-hwa"] = { "Hwanghae Korean", 16183706, "ko-cen", } m["ko-gan"] = { "Gangwon Korean", 11260444, "ko-cen", aliases = {"Yeongdong Korean"}, } m["ko-gys"] = { "Gyeongsang Korean", 488002, "ko", aliases = {"Southeastern Korean"}, } m["ko-jeo"] = { "Jeolla Korean", 11250166, "ko", aliases = {"Southwestern Korean"}, } m["ko-pyo"] = { "Pyongan Korean", 7263142, "ko", aliases = {"Northwestern Korean"}, } m["ko-ham"] = { "Hamgyong Korean", 860702, "ko", aliases = {"Northeastern Korean"}, } m["ko-yuk"] = { "Yukjin Korean", 16171275, "ko", aliases = {"Yukchin Korean", "Ryukjin Korean", "Ryukchin Korean"}, } ---------------------------------------------------------------------------------------------------------------------- -- Mongolic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } ---------------------------------------------------------------------------------------------------------------------- -- Niger-Congo varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akan varieties -- ----------------------------------------------------- m["tw"] = { "Twi Akan", 36850, "ak", aliases = {"Twi"}, } m["abr"] = { "Abron", 34831, "tw", aliases = {"Brong", "Bono", "Bono Twi"}, } m["tw-asa"] = { "Asante Twi", 19261685, "tw", aliases = {"Asante", "Ashanti", "Ashante"}, } m["tw-aku"] = { "Akuapem Twi", 31150449, "tw", aliases = {"Akuapem", "Akuapim", "Akwapem Twi", "Akwapi"}, } m["fat"] = { "Fante Akan", 35570, "ak", aliases = {"Fante", "Fanti", "Fantse", "Mfantse"}, } m["wss"] = { "Wasa", 36914, "ak", } -- creole m["alv-kro"] = { "Kromanti", 1093206, "crp-mar", } ----------------------------------------------------- -- Bantu varieties -- ----------------------------------------------------- m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } m["xh-bha"] = { "Bhaca", 4900493, "xh", aliases = {"isiBhaca", "IsiBhaca"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } ----------------------------------------------------- -- Fula varieties -- ----------------------------------------------------- m["fuc"] = { "Pulaar", 1420205, "ff", } m["fuf"] = { "Pular", 3915357, "ff", } m["ffm"] = { "Maasina Fulfulde", 3915322, "ff", } m["fue"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Borgu Fulfulde", 12952426, "ff", } m["fuh"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Western Niger Fulfulde", 12952430, "ff", } m["fuq"] = { -- no enwiki entry as of yet but frwiki, hrwiki and pmswiki have one "Central-Eastern Niger Fulfulde", 12628799, "ff", } m["fuv"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki and swwiki have one "Nigerian Fulfulde", 36129, "ff", } m["fub"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki, ptwiki, swwiki and yowiki have one "Adamawa Fulfulde", 34776, "ff", } m["fui"] = { -- no enwiki entry as of yet but pmswiki and swwiki have one "Bagirmi Fulfulde", 11003859, "ff", } ---------------------------------------------------------------------------------------------------------------------- -- Papuan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["kze"] = { "Kosena", 12952663, "auy", } m["ont"] = { "Ontenu", 3352827, "gaj", aliases = {"Ontena"}, } ---------------------------------------------------------------------------------------------------------------------- -- Salishan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["lut-nor"] = { "Northern Lushootseed", nil, "lut", aliases = {"Northern Puget Sound Salish"}, } m["slh"] = { "Southern Lushootseed", 7997684, "lut", aliases = {"Southern Puget Sound Salish", "Twulshootseed", "Whulshootseed"}, } m["ska"] = { "Skagit", 12642471, "lut-nor", } m["sno"] = { "Snohomish", 25559662, "lut-nor", } ---------------------------------------------------------------------------------------------------------------------- -- Sino-Tibetan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["tbq-pro"] = { "ဗၟာ-တိဗဝ်တဝ် အခိုက်ကၞာ", 7251864, "sit-pro", } ----------------------------------------------------- -- Chinese varieties -- ----------------------------------------------------- ------------- Old Chinese, Middle Chinese ------------- m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } ------------- Classical/Literary varieties ------------- -- FIXME: Temporary. m["lzh-shi"] = { "Traditional Chinese poetry", 1759242, "lzh", } -- FIXME: Temporary. m["lzh-cii"] = { "Ci", 1091366, "lzh", } -- FIXME: Temporary. m["lzh-yue"] = { "Classical Cantonese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn"] = { "Classical Mandarin", nil, "lzh", } -- FIXME: Temporary. m["lzh-tai"] = { "Classical Taishanese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn-TW"] = { "Classical Taiwanese Mandarin", nil, "lzh-cmn", } -- FIXME: Temporary. m["lzh-VI"] = { "Vietnamese Classical Chinese", 17034227, "lzh", } -- FIXME: Temporary. m["lzh-KO"] = { "Korean Classical Chinese", 10496257, "lzh", ietf_subtag = "lzh-KR" -- KR = South Korea, as there is no code for Korea as a whole } -- FIXME: Temporary. m["lzh-lit"] = { "Literary Chinese", nil, "lzh", } -- FIXME: Temporary. FIXME: Do we need this? How does it differ from Old Chinese? m["lzh-pre"] = { "Pre-Classical Chinese", nil, "lzh", } ------------- Written Vernacular varieties ------------- -- FIXME: Temporary. m["cmn-wvc"] = { "Written vernacular Mandarin", 783605, "cmn", } -- FIXME: Temporary. FIXME: How does this differ from "Literary Cantonese"? m["yue-wvc"] = { "Written vernacular Cantonese", nil, "yue", } -- FIXME: Temporary. m["zhx-tai-wvc"] = { "Written vernacular Taishanese", nil, "zhx-tai", } ------------- Mandarin varieties ------------- -- FIXME: Temporary. NOTE: The Linguist List assigns the "w:Beijing dialect" (Wikidata 1147606) the code "cmn-bej" and -- the larger "w:Beijing Mandarin (division of Mandarin)" dialect group (Wikidata 2169652; what we call "Beijingic -- Mandarin", after Glottolog) the code "cmn-bei". m["cmn-bei"] = { "Beijing Mandarin", 1147606, "cmn-bec", } -- FIXME: Temporary. m["cmn-bec"] = { "Beijingic Mandarin", 2169652, "cmn", } -- FIXME: Temporary. NOTE: The Linguist List uses the code cmn-zho. m["cmn-cep"] = { "Central Plains Mandarin", 3048775, "cmn", aliases = {"Zhongyuan Mandarin"}, } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", ancestors = "ltc", } -- FIXME: Temporary. m["cmn-gua"] = { "Guanzhong Mandarin", 3431648, "cmn-cep", } -- FIXME: Temporary. Appears to be a subdialect of Guiliu Mandarin, which in turn is a subdialect of Southwestern Mandarin. m["cmn-gui"] = { "Guilin Mandarin", 11111636, "cmn-sow", } m["cmn-jhu"] = { "Jianghuai Mandarin", 2128953, "cmn", aliases = {"Lower Yangtze Mandarin"}, } -- FIXME: Temporary. m["cmn-lan"] = { "Lanyin Mandarin", 662754, "cmn", } -- FIXME: Temporary. m["cmn-MY"] = { "Malaysian Mandarin", 13646143, "cmn", } -- FIXME: Temporary. m["cmn-nan"] = { "Nanjing Mandarin", 2681098, "cmn-jhu", } -- FIXME: Temporary. m["cmn-noe"] = { "Northeastern Mandarin", 1064504, "cmn", } -- FIXME: Temporary. m["cmn-PH"] = { "Philippine Mandarin", 7185155, "cmn", } -- FIXME: Temporary. m["cmn-SG"] = { "Singapore Mandarin", 1048980, "cmn", } -- FIXME: Temporary. m["cmn-sow"] = { "Southwestern Mandarin", 2609239, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Jilu Mandarin. m["cmn-tia"] = { "Tianjin Mandarin", 7800220, "cmn", } -- FIXME: Temporary. NOTE: Wikidata also has Q4380827 "Taiwanese Mandarin", defined as "rare dialect of Standard Chinese -- (Mandarin) used in Taiwan, which is strongly influenced by Taiwanese Hokkien; mostly used by elderlies" and having no -- English Wikipedia article (but see w:zh:臺灣國語). m["cmn-TW"] = { "Taiwanese Mandarin", 262828, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Wu-Tian Mandarin, in turn a subdialect of Southwestern Mandarin. -- Given the code cmn-xwu in the Linguist List. m["cmn-wuh"] = { "Wuhan Mandarin", 11124731, "cmn-sow", aliases = {"Wuhanese"}, } -- FIXME: Temporary. Appears to be a subdialect of Lanyin Mandarin. m["cmn-xin"] = { "Xining Mandarin", nil, "cmn-lan", } -- FIXME: Temporary. m["cmn-yan"] = { "Yangzhou Mandarin", nil, "cmn-jhu", } ------------- Cantonese varieties ------------- -- FIXME: Temporary. m["yue-gua"] = { "Guangzhou Cantonese", nil, "yue", } -- FIXME: Temporary. Given the codes yue-yue or yue-can in the Linguist List. m["yue-HK"] = { "Hong Kong Cantonese", 5894342, "yue", } -- FIXME: Temporary. FIXME: How does this differ from "Written vernacular Cantonese"? m["yue-lit"] = { "Literary Cantonese", 2472605, "yue", } ------------- Wu varieties ------------- m["wuu-han"] = { "Hangzhounese", 5648144, "wuu", } m["wuu-nin"] = { "Ningbonese", 3972199, "wuu", } -- FIXME: Temporary. m["wuu-nor"] = { "Northern Wu", 7675988, "wuu", aliases = {"Taihu Wu"}, } -- FIXME: Temporary? Subvariety of Taihu Wu. NOTE: "chm" stands for Chongming, the main dialect, to avoid a conflict -- with Shanghainese. m["wuu-chm"] = { "Shadi Wu", 6112340, "wuu-nor", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu-nor", } m["wuu-suz"] = { "Suzhounese", 831744, "wuu-nor", } -- FIXME: Temporary. May be converted into a full language and/or split. m["wuu-wen"] = { "Wenzhounese", 710218, "wuu", } ------------- Xiang varieties ------------- m["hsn-lou"] = { "Loudi Xiang", 10943823, "hsn-old", } m["hsn-hya"] = { "Hengyang Xiang", 20689035, "hsn-hzh", } m["hsn-hzh"] = { "Hengzhou Xiang", nil, "hsn", } m["hsn-new"] = { "New Xiang", 7012696, "hsn", aliases = {"Chang-Yi"}, } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } ------------- Hakka varieties ------------- -- FIXME: Temporary. m["hak-dab"] = { "Dabu Hakka", 19855566, "hak", -- formerly hak-TW but seems to be spoken primary in Dabu County in Guangdong } -- FIXME: Temporary. m["hak-eam"] = { "Early Modern Hakka", nil, "hak", } -- FIXME: Temporary. m["hak-hai"] = { "Hailu Hakka", 17038519, "hak", -- often considered a Taiwanese lect but also spoken in [[Shanwei]], [[Guangdong]] } -- FIXME: Temporary. m["hak-HK"] = { "Hong Kong Hakka", 2675834, "hak", } -- FIXME: Temporary. m["hak-hui"] = { "Huiyang Hakka", 16873881, "hak", } -- FIXME: Temporary. m["hak-hui-MY"] = { "Malaysian Huiyang Hakka", nil, "hak-hui", } -- FIXME: Temporary. Similar to and possibly the parent of Sixian Hakka in Taiwan. m["hak-mei"] = { "Meixian Hakka", 839295, "hak", aliases = {"Moiyan Hakka", "Meizhou Hakka"}, } -- FIXME: Temporary. m["hak-six"] = { "Sixian Hakka", 9668261, "hak-TW", } -- FIXME: Temporary. m["hak-TW"] = { "Taiwanese Hakka", 2391532, "hak", } -- FIXME: Temporary. m["hak-zha"] = { "Zhao'an Hakka", 6703311, "hak", aliases = {"Zhangzhou Hakka"}, } -- Southern Min varieties -- m["nan-anx"] = { "Anxi Hokkien", 97064149, "nan-qua", } m["nan-cha"] = { "Changtai Hokkien", nil, "nan-zha", } m["nan-hou"] = { "Houlu Min", 19855492, "nan-dat", } m["nan-hui"] = { "Hui'an Hokkien", 16241797, "nan-qua", } m["nan-jin"] = { "Jinjiang Hokkien", 11089375, "nan-qua", } m["nan-kin"] = { "Kinmenese Hokkien", 56278342, "nan-xia", aliases = {"Kinmen Hokkien"}, } m["nan-med"] = { "Medan Hokkien", 6805114, "nan-zha", } m["nan-pen"] = { "Penang Hokkien", 11120689, "nan-zha", } m["nan-hbl-PH"] = { "Philippine Hokkien", 3236692, "nan-qua", } m["nan-qia"] = { "Qianlu Min", 19842517, "nan-dat", } m["nan-qua"] = { "Quanzhou Hokkien", 2251677, "nan-hbl", aliases = {"Chinchew", "Choanchew"}, } -- FIXME: Temporary? Derived from both Quanzhou and Zhangzhou Hokkien. m["nan-hbl-SG"] = { "Singapore Hokkien", 3846528, "nan-hbl", } m["nan-spm"] = { "Southern Malaysian Hokkien", 7570322, "nan-qua", aliases = {"Southern Malaysia Hokkien", "Southern Peninsular Malaysian Hokkien", "Southern Peninsular Malaysia Hokkien"} } m["nan-hbl-TW"] = { "Taiwanese Hokkien", 36778, "nan-hbl", } m["nan-ton"] = { "Tong'an Hokkien", nil, "nan-xia", } m["nan-xia"] = { "Xiamen Hokkien", 68744, "nan-hbl", aliases = {"Amoy", "Amoyese", "Amoynese", "Xiamenese"}, } m["nan-yon"] = { "Yongchun Hokkien", 65118728, "nan-qua", } m["nan-zha"] = { "Zhangzhou Hokkien", 8070492, "nan-hbl", aliases = {"Changchew", "Chiangchew", "Changchow"}, } m["nan-zho"] = { "Zhao'an Hokkien", 65118728, "nan-zha", aliases = {"Zhao'an", "Chawan", "Chawan Hokkien"}, } m["nan-zhp"] = { "Zhangping Hokkien", 15937822, "nan-zha", } ------------- Other Min varieties ------------- -- FIXME: Temporary. Affiliation within Min uncertain; some combination of Eastern and Southern. m["zhx-zho"] = { "Zhongshan Min", 8070958, "zh", } ------------- Other Chinese varieties ------------- -- FIXME: Temporary. Affiliation within Chinese uncertain; possibly Yue. m["zhx-dan"] = { "Danzhou Chinese", 2578935, "zh", } ------------- Chinese romanization varieties ------------- -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegiles"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } m["zh-postal"] = { "Postal Romanization", 151868, "zh", } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } ----------------------------------------------------- -- Tibetic varieties -- ----------------------------------------------------- m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } ---------------------------------------------------------------------------------------------------------------------- -- Tai-Kadai varieties -- ---------------------------------------------------------------------------------------------------------------------- m["th-old"] = { "သေံတြေံ", nil, "tai-swe-pro", wikipedia_article = "Thai language#Old Thai", } m["th-suk"] = { "သူခိုဝ်ထိုၚ် သေံတြေံ", -- 1238-1438. Cannot use "Sukhothai Thai" as Sukhothai is the current city and "Sukhothai Thai" is a lect. nil, "th-old", aliases = {"Sukhothai Siamese"}, wikipedia_article = "Thai language#Old Thai", } m["th-ayu"] = { "အယုဒ္ဓယ သေံတြေံ", -- 1351-1767. Cannot use "Ayutthaya Thai" as Ayutthaya is the current city. nil, "th-old", aliases = {"Ayutthaya Siamese"}, wikipedia_article = "Thai language#Old Thai", } --[[ m["th-new"] = { "Hacked Thai", -- temporary for testing new translit/display methods nil, "th", translit = "User:Benwing2/th-scraping-translit", display_text = "User:Benwing2/th-scraping-translit", strip_diacritics = "User:Benwing2/th-scraping-translit", preprocess_links = "User:Benwing2/th-scraping-translit", } ]] m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } ---------------------------------------------------------------------------------------------------------------------- -- Turkic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["trk-cmn-pro"] = { "Proto-Common Turkic", 1126028, "trk-pro", } m["trk-ogr-pro"] = { "Proto-Oghur", 1422731, "trk-pro", family = "trk-ogr", } m["trk-bul-pro"] = { "Proto-Bulgar", nil, "trk-ogr-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", family = "trk-ogz", aliases = {"Southwestern Common Turkic"}, } m["crh-dbj"] = { "Dobrujan Tatar", 12811566, "crh", aliases = {"Romanian Tatar"}, } m["cv-ana"] = { "Anatri Chuvash", nil, "cv", aliases = {"Anatri", "Lower Chuvash"}, } m["cv-mid"] = { "Middle Chuvash", nil, "cv", ancestors = "cv-old", } m["cv-old"] = { "Old Chuvash", nil, "cv", ancestors = "xbo-vol", } m["cv-vir"] = { "Viryal Chuvash", 4278332, "cv", aliases = {"Viryal", "Upper Chuvash"}, } m["kjh-fyu"] = { "Fuyu Kyrgyz", 2598963, "kjh", aliases = {"Fuyu Kirgiz", "Fuyu Kirghiz", "Manchurian Kyrgyz", "Manchurian Kirgiz", "Manchurian Kirghiz"}, } m["klj-arg"] = { "Arghu", 33455, "klj", ancestors = "trk-cmn-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", aliases = {"Yenisei Turkic", "Yenisei Kyrgyz"}, } m["otk-ork"] = { "Orkhon Turkic", 31295480, "otk", } m["qwm-cum"] = { "Cuman", 1075050, "qwm", aliases = {"Kuman", "Polovtsian", "Polovcian"}, } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", ancestors = "qwm-cum", aliases = {"Xıpçaχ tili", "Tatarça"}, } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", aliases = {"Mameluk-Kipchak"}, } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } m["tr-CY"] = { "Cypriot Turkish", 7917392, "tr", } m["uz-afg"] = { -- NOTE: has ISO 639-3 code uzs assigned to it. "Afghan Uzbek", 1066787, "uz", aliases = {"Southern Uzbek"}, translit = "uz-afg-translit", } m["xbo-dan"] = { "Danube Bulgar", nil, "xbo", } m["xbo-vol"] = { "Volga Bulgar", nil, "xbo", } ---------------------------------------------------------------------------------------------------------------------- -- Uralic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["fiu-pro"] = { "ဖေန်နဝ်-ဥူဂရေတ်-အခိုက်ကၞာ", 79890, "urj-pro", } m["urj-fpr-pro"] = { "ဖေန်နဝ်-ပဵုမေတ်-အခိုက်ကၞာ", nil, "urj-pro", } m["krl-nor"] = { "North Karelian", 125501196, "krl", } m["krl-sou"] = { "South Karelian", 129812730, "krl", } m["mns-eas"] = { "Eastern Mansi", 30311755, "mns-cen", } m["mns-wes"] = { "Western Mansi", 30311756, "mns-cen", } ---------------------------------------------------------------------------------------------------------------------- -- Yeneseian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["qfa-yke-pro"] = { "Proto-Ketic", nil, "qfa-yen-pro", family = "qfa-yke", } m["qfa-yko-pro"] = { "Proto-Kottic", nil, "qfa-yen-pro", family = "qfa-yko", } m["qfa-yrn-pro"] = { "Proto-Arinic", nil, "qfa-yen-pro", family = "qfa-yrn", } m["qfa-ypm-pro"] = { "Proto-Pumpokolic", nil, "qfa-yen-pro", family = "qfa-ypm", } ---------------------------------------------------------------------------------------------------------------------- -- Miscellaneous varieties -- ---------------------------------------------------------------------------------------------------------------------- m["mul-tax"] = { "taxonomic name", 522190, "mul", } ----------------------------------------------------- -- Elamite varieties -- ----------------------------------------------------- m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } ----------------------------------------------------- -- Substrates -- ----------------------------------------------------- -- Pre-Roman substrates m["qsb-ibe"] = { "Paleo-Hispanic", 246801, "und", family = "qfa-sub", aliases = {"Palaeo-Hispanic", "Paleohispanic", "Palaeohispanic", "Paleo-Iberian", "Palaeo-Iberian"}, } m["qsb-bal"] = { "Paleo-Balkan", 1815070, "und", family = "qfa-sub", aliases = {"Palaeo-Balkan", "Paleobalkan", "Palaeobalkan"}, } m["xaq"] = { "Aquitanian", 500522, "euq-pro", family = "euq", } return require("Module:languages").finalizeData(m, "language", true) drsbs6ab0zwu2rjozssi2usgy8nlmty 397879 397878 2026-07-06T16:36:17Z Intobesa.bot 1035 Bot: ပွမကၠာဲစုတ်ယၟုနူဘာသာအၚ်္ဂလိက် 397879 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} ---------------------------------------------------------------------------------------------------------------------- -- Afroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Berber varieties -- -------------------------------------------------------------------------------------- m["shi-med"] = { "Medieval Tashelhit", 34152, "shi", } -- Tuareg lects m["thv"] = { "Tamahaq", 56703, "tmh", } m["ttq"] = { "Tawellemmet", 56390, "tmh", } m["taq"] = { "Tamasheq", 4670066, "tmh", } m["thz"] = { "Tayert", 56388, "tmh", } m["thv-ght"] = { "Ghat", 47012900, "thv", } -------------------------------------------------------------------------------------- -- Cushitic varieties -- -------------------------------------------------------------------------------------- -- Oromo varieties m["hae"] = { "Harar Oromo", 5330355, "om", aliases = {"Eastern Oromo"}, } m["gax"] = { "Borana", 2910610, "om", aliases = {"Southern Oromo"}, } m["orc"] = { "Orma", 2919128, "om", } m["ssn"] = { "Waata", 3501553, "om", } -------------------------------------------------------------------------------------- -- Egyptian varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Ancient Egyptian varieties -- ----------------------------------------------------- m["egy-old"] = { "အဳဂျေပ်တြေံ", 447117, "egy", } m["egy-mid"] = { "အဳဂျေပ်လဒေါဝ်", 657330, "egy", aliases = {"Classical Egyptian"}, } m["egy-nmi"] = { "Neo-Middle Egyptian", 123735278, "egy", aliases = {"Égyptien de tradition", "Traditional Egyptian"}, } m["egy-lat"] = { "အဳဂျေပ်လဇုဲ", 1852329, "egy", } ----------------------------------------------------- -- Coptic varieties -- ----------------------------------------------------- m["cop-akh"] = { "Akhmimic Coptic", 125176464, "cop", aliases = {"Akhmimic"}, } m["cop-boh"] = { "Bohairic Coptic", 890733, "cop", aliases = {"Bohairic", "Memphitic Coptic", "Memphitic"}, } m["cop-ggg"] = { "Coptic Dialect G", nil, "cop", aliases = {"Dialect G", "Mansuric Coptic", "Mansuric"}, } m["cop-jjj"] = { "Coptic Dialect J", nil, "cop", } m["cop-kkk"] = { "Coptic Dialect K", nil, "cop", } m["cop-ppp"] = { "Coptic Dialect P", nil, "cop", aliases = {"Proto-Theban Coptic", "Palaeo-Theban Coptic"}, } m["cop-fay"] = { "Fayyumic Coptic", 1399115, "cop", aliases = {"Fayyumic", "Faiyumic Coptic", "Faiyumic", "Fayumic Coptic", "Fayumic", "Bashmuric Coptic", "Bashmuric"}, } m["cop-her"] = { "Hermopolitan Coptic", nil, "cop", aliases = {"Hermopolitan", "Coptic Dialect H", "Ashmuninic", "Ashmuninic Coptic"}, } m["cop-lyc"] = { "Lycopolitan Coptic", nil, "cop", aliases = { "Lycopolitan", "Assiutic Coptic", "Asyutic Coptic", "Assiutic", "Asyutic", "Lyco-Diospolitan Coptic", "Lyco-Diospolitan", "Subakhmimic Coptic", "Subakhmimic" }, } m["cop-old"] = { "Old Coptic", 115518040, "cop", } m["cop-oxy"] = { "Oxyrhynchite Coptic", nil, "cop", aliases = {"Oxyrhynchite", "Mesokemic Coptic", "Mesokemic", "Middle Egyptian Coptic"}, } m["cop-ply"] = { "Proto-Lycopolitan Coptic", nil, "cop", aliases = {"Coptic Dialect i", "Proto-Lyco-Diospolitan Coptic"}, } m["cop-sah"] = { "Sahidic Coptic", 2645851, "cop", aliases = {"Sahidic", "Saidic Coptic", "Saidic", "Thebaic Coptic", "Thebaic"}, } -------------------------------------------------------------------------------------- -- Semitic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akkadian varieties -- ----------------------------------------------------- m["akk-old"] = { "Old Akkadian", nil, "akk", } m["akk-obb"] = { "Old Babylonian", nil, "akk", } m["akk-oas"] = { "Old Assyrian", nil, "akk", } m["akk-mbb"] = { "Middle Babylonian", nil, "akk", } m["akk-mas"] = { "Middle Assyrian", nil, "akk", } m["akk-nbb"] = { "Neo-Babylonian", nil, "akk", } m["akk-nas"] = { "Neo-Assyrian", nil, "akk", } m["akk-lbb"] = { "Late Babylonian", nil, "akk", } m["akk-stb"] = { "Standard Babylonian", nil, "akk", } ----------------------------------------------------- -- Arabic varieties -- ----------------------------------------------------- m["jrb"] = { "Judeo-Arabic", 37733, "ar", pseudo_families = "qfa-jew", } m["apc-leb"] = { "Lebanese North Levantine Arabic", 1516642, "apc", aliases = {"Lebanese Arabic"}, } m["apc-sle"] = { "South Lebanese North Levantine Arabic", 14206590, "apc", aliases = {"South Lebanese Arabic"}, } m["apc-nle"] = { "North Lebanese North Levantine Arabic", nil, "apc", aliases = {"North Lebanese Arabic"}, } m["apc-syr"] = { "Syrian North Levantine Arabic", 2143071, "apc", aliases = {"Syrian Arabic"}, } m["apc-ale"] = { "Aleppine North Levantine Arabic", 7056921, "apc-syr", aliases = {"Aleppo Arabic", "Aleppine Arabic"}, } m["apc-dam"] = { "Damascene North Levantine Arabic", 12237466, "apc-syr", aliases = {"Damascus Arabic", "Damascene Arabic"}, } m["acm-khu"] = { "Khuzestani Arabic", 1040944, "acm", } ----------------------------------------------------- -- Aramaic varieties -- ----------------------------------------------------- m["arc-bib"] = { "Biblical Aramaic", 843235, "arc", family = "sem-are", } m["arc-cpa"] = { "Christian Palestinian Aramaic", 60790119, "arc", family = "sem-arw", aliases = {"Melkite Aramaic", "Palestinian Syriac", "Syropalestinian Aramaic"}, } m["arc-imp"] = { "Imperial Aramaic", 7079491, "arc", aliases = {"Official Aramaic"}, } m["arc-hat"] = { "Hatran Aramaic", 3832926, "arc", family = "sem-are", } m["arc-jla"] = { "Jewish Literary Aramaic", 105952842, "arc", pseudo_families = "qfa-jew", } m["arc-nab"] = { "Nabataean Aramaic", 36178, "arc", } m["arc-old"] = { "Old Aramaic", 3398392, "arc", } m["arc-pal"] = { "Palmyrene Aramaic", 1510113, "arc", family = "sem-arw", } m["tmr"] = { "Jewish Babylonian Aramaic", 33407, "arc", family = "sem-ase", pseudo_families = "qfa-jew", } m["jpa"] = { "Jewish Palestinian Aramaic", 948909, "arc", family = "sem-arw", aliases = {"Galilean Aramaic"}, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Hebrew varieties -- ----------------------------------------------------- m["hbo"] = { "Biblical Hebrew", 1982248, "he", aliases = {"Classical Hebrew"}, } m["he-mis"] = { "Mishnaic Hebrew", 1649362, "he", ancestors = "hbo", } m["he-med"] = { "Medieval Hebrew", 2712572, "he", ancestors = "he-mis", } m["he-IL"] = { "Israeli Hebrew", 8141, "he", } ---------------------------------------------------------------------------------------------------------------------- -- Ainu varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ain-hok"] = { "Hokkaido Ainu", 20968488, "ain", aliases = {"Hokkaidō Ainu"}, } m["ain-kur"] = { "Kuril Ainu", 20967012, "ain", } m["ain-sak"] = { "Sakhalin Ainu", 20747371, "ain", } ---------------------------------------------------------------------------------------------------------------------- -- American indigenous varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Inuit varieties -- ----------------------------------------------------- m["esi"] = { "North Alaskan Inupiatun", nil, "ik" } m["esk"] = { "Northwest Alaskan Inupiatun", 25559714, "ik" } ----------------------------------------------------- -- Iroquoian varieties -- ----------------------------------------------------- m["iro-ohu"] = { "Old Wendat", nil, "wdt", } m["iro-omo"] = { "Old Mohawk", nil, "moh", } m["iro-oon"] = { "Old Onondaga", nil, "ono", } ----------------------------------------------------- -- Tupi-Guarani varieties -- ----------------------------------------------------- -- Old Tupi varieties m["tpw-lga"] = { "Língua Geral Amazônica", 18275323, "tpw", aliases = {"Língua Geral"}, } m["tpw-lgp"] = { "Língua Geral Paulista", 2669239, "tpw", } ---------------------------------------------------------------------------------------------------------------------- -- Austroasiatic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Khmer varieties m["okz-ang"] = { "ခမေန်တြေံ အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } m["okz-pre"] = { "ခမေန်တြေံ ကၠာ-အာန်ခေါဝ်ရဳယာန်", nil, "okz", wikipedia_article = "Khmer language#Historical periods", } -- Central Nicobarese varieties m["ncb-cam"] = { "Camorta", 5026908, "ncb", aliases = {"Kamorta"}, } m["ncb-kat"] = { "Katchal", 17064263, "ncb", aliases = {"Tehnu"}, } m["ncb-nan"] = { "Nancowry", 6962504, "ncb", aliases = {"Nankwari"}, } ---------------------------------------------------------------------------------------------------------------------- -- Austronesian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Malay and related varieties m["ms-old"] = { -- this has the ISO code 'omy' "Old Malay", nil, "ms", } m["ms-cla"] = { "Classical Malay", nil, "ms", ancestors = "ms-old", } m["pse-bsm"] = { "Besemah", nil, "pse", } m["bew-kot"] = { "Betawi Kota", nil, "bew", aliases = {"Urban Betawi"}, -- in Jakarta } -- Philippine varieties m["xnn"] = { "Northern Kankanaey", 12953609, "kne", aliases = {"Northern Kankanay", "Northern Kankana-ey"}, } m["tl-old"] = { "Old Tagalog", 12967437, "tl", } m["tl-cls"] = { "Classical Tagalog", nil, "tl", } ---------------------------------------------------------------------------------------------------------------------- -- Caucasian varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Kartvelian varieties m["ka-mid"] = { "Middle Georgian", nil, "ka", ancestors = "oge", } ---------------------------------------------------------------------------------------------------------------------- -- Dravidian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["ta-mid"] = { "Middle Tamil", 20987434, "ta", } m["kn-hav"] = { "Havigannada", 24276369, "kn", } m["kn-kun"] = { "Kundagannada", 6444255, "kn", } ---------------------------------------------------------------------------------------------------------------------- -- Indo-European varieties -- ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------- -- Albanian varieties -- -------------------------------------------------------------------------------------- m["aln"] = { "Gheg Albanian", 181037, "sq", aliases = {"Gheg"}, } m["aae"] = { "Arbëresh Albanian", 1075302, "als", aliases = {"Arbëreshë", "Arbëresh"}, } m["aat"] = { "Arvanitika Albanian", 29347, "als", aliases = {"Arvanitika"}, } m["als"] = { "Tosk Albanian", 180937, "sq", aliases = {"Tosk"}, } -------------------------------------------------------------------------------------- -- Armenian varieties -- -------------------------------------------------------------------------------------- m["hyw"] = { "Western Armenian", 180945, "hy", } m["hye"] = { "Eastern Armenian", 181059, "hy", } -------------------------------------------------------------------------------------- -- Balto-Slavic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Baltic varieties -- ------------------------------------------------------------------------- m["bat-pro"] = { "ဗေါဝ်တေတ်-အခိုက်ကၞာ", 1703347, "ine-bsl-pro", } m["bat-dni"] = { "Dnieper Baltic", 4163178, "bat-pro", family = "bat", aliases = {"Dniepr Baltic", "Dnieper-Oka Baltic", "Dniepr-Oka Baltic"}, } m["bat-gol"] = { "Golyad", 4142855, "bat-dni", aliases = {"Eastern Galindian", "East Galindian"}, } ------------------------------------------------------------------------- -- Slavic varieties -- ------------------------------------------------------------------------- ----------------------------------------------------- -- Bulgarian varieties -- ----------------------------------------------------- m["cu-bgm"] = { "ဗူလ်ဂရဳယာန် လဒေါဝ်", 12294897, "cu", ancestors = "cu" } ----------------------------------------------------- -- Church Slavonic varieties -- ----------------------------------------------------- -- Old Moscow Church Slavonic deleted as it seems not distinct enough from Russian (Synodal) Church Slavonic. m["zls-chs-ru"] = { "Russian Church Slavonic", 21662400, "zls-chs", aliases = {"Synodal Church Slavonic", "New Moscow Church Slavonic", "Novomoskovsk Church Slavonic"}, } m["zls-chs-uk"] = { "Ukrainian Church Slavonic", 12153548, "zls-chs", aliases = {"Rusyn Church Slavonic", "Belarusian Church Slavonic"}, } --[=[ -- Not sure about these yet. m["zls-chs-bg"] = { "Bulgarian Church Slavonic", nil, "zls-chs", } m["zls-chs-cs"] = { "Czech Church Slavonic", nil, "zls-chs", } m["zls-chs-hr"] = { "Croatian Church Slavonic", nil, "zls-chs", } m["zls-chs-mk"] = { "Macedonian Church Slavonic", nil, "zls-chs", } m["zls-chs-ro"] = { "Romanian Church Slavonic", nil, "zls-chs", } m["zls-chs-sr"] = { "Serbian Church Slavonic", nil, "zls-chs", } ]=] ----------------------------------------------------- -- Czech varieties -- ----------------------------------------------------- m["cs-ear"] = { "Early Modern Czech", nil, "cs", ancestors = "zlw-ocs" } ----------------------------------------------------- -- East Slavic varieties -- ----------------------------------------------------- m["zle-ops"] = { "Old Pskovian", 4167885, "zle-ono", } m["zle-mru"] = { "ရုသျှာ လဒေါဝ်", 35228, "ru", "Cyrs", ancestors = "orv", translit = "ru-translit", strip_diacritics = { Cyrs = { remove_diacritics = c.grave .. c.acute .. c.diaer, }, }, } m["zle-mbe"] = { "Middle Belarusian", 13211, "zle-ort", ancestors = "zle-ort", } m["zle-muk"] = { "ယူကရိန် လဒေါဝ်", 13211, "zle-ort", ancestors = "zle-ort", } m["uk-CA"] = { "Canadian Ukrainian", 4161010, "uk", } m["crp-cpr-kya"] = { "Kyakhta Chinese Pidgin Russian", 1062960, "crp-cpr", } ----------------------------------------------------- -- Polish varieties -- ----------------------------------------------------- m["zlw-mpl"] = { "ပဝ်လာန် လဒေါဝ်", 402878, "pl", ancestors = "zlw-opl", strip_diacritics = { remove_diacritics = c.acute, remove_exceptions = {"Ć", "ć", "Ń", "ń", "Ó", "ó", "Ś", "ś", "Ź", "ź"}, }, } m["pl-gre"] = { "Greater Polish", 4106789, "pl", } m["pl-les"] = { "Lesser Polish", 361709, "pl", } m["pl-mas"] = { "Masovian Polish", 4274559, "pl", } m["pl-gor"] = { "Goral", 452889, "pl", } ----------------------------------------------------- -- Serbo-Croatian varieties -- ----------------------------------------------------- m["ckm"] = { "Chakavian Serbo-Croatian", 337565, "sh", aliases = {"Čakavian"}, } m["kjv"] = { "Kajkavian Serbo-Croatian", 838165, "sh", } m["sh-tor"] = { -- Linguist code srp-tor "Torlakian Serbo-Croatian", 1078803, "sh", aliases = {"Torlak"}, } -------------------------------------------------------------------------------------- -- Celtic varieties -- -------------------------------------------------------------------------------------- ----------------------------------------------------- -- Brythonic varieties -- ----------------------------------------------------- m["bry-ear"] = { "Early Brythonic", nil, "cel-bry-pro", } m["bry-lat"] = { "Late Brythonic", nil, "cel-bry-pro", } ----------------------------------------------------- -- Gaulish varieties -- ----------------------------------------------------- m["xcg"] = { "Cisalpine Gaulish", 3832927, "cel-gau", } m["xtg"] = { "Transalpine Gaulish", 29977, "cel-gau", } ----------------------------------------------------- -- Welsh varieties -- ----------------------------------------------------- m["cy-nor"] = { "North Wales Welsh", 13127692, "cy", aliases = {"North Walian Welsh", "Northern Welsh"}, } m["cy-sou"] = { "South Wales Welsh", 13127689, "cy", aliases = {"South Walian Welsh", "Southern Welsh"}, } -------------------------------------------------------------------------------------- -- Germanic varieties -- -------------------------------------------------------------------------------------- -- Proto-West Germanic varieties m["frk"] = { "Frankish", 10860505, "gmw-pro", family = "gmw-frk", aliases = {"Old Frankish"}, } m["gem-sue"] = { "Suevic", 134600275, "gmw-pro", aliases = {"Suebian"}, } m["gmw-afr-pro"] = { "Proto-Anglo-Frisian", 134603379, "gmw-nsg-pro", family = "gmw-afr", } m["gmw-nsg-pro"] = { "Proto-North Sea Germanic", 134603374, "gmw-pro", family = "gmw-nsg", aliases = {"Proto-Ingvaeonic"}, } ----------------------------------------------------- -- Dutch varieties -- ----------------------------------------------------- m["nl-BE"] = { "Belgian Dutch", 34147, "nl", aliases = {"Flemish", "Flemish Dutch", "Southern Dutch"}, } ----------------------------------------------------- -- English and Scots varieties -- ----------------------------------------------------- -- English varieties m["en-AU"] = { "Australian English", 44679, "en", } m["en-GB"] = { "British English", 7979, "en", } m["en-GB-SCT"] = { "Scottish English", 1553250, "en-GB", } m["en-GB-WLS"] = { "Welsh English", 2363292, "en-GB", } m["en-IM"] = { "Manx English", 6753295, "en-GB", } m["en-aae"] = { "Australian Aboriginal English", 783347, "en-AU", } m["en-ear"] = { "Early Modern English", 1472196, "en", ancestors = "enm", aliases = {"Early New English"}, } m["en-geo"] = { "Geordie", 653421, "en", ancestors = "enm-nor", } m["en-IE"] = { -- FIXME: "IE" doesn't cover Northern Ireland "Irish English", 665624, "en", } m["en-uls"] = { "Ulster English", 6840826, "en-IE", } m["en-GB-NIR"] = { "Northern Irish English", 6840826, -- actually the code for Ulster English "en-uls", } m["en-NNN"] = { -- NA = Namibia; NNN is NATO 3-letter code for North America "North American English", 7053766, "en", ietf_subtag = "en-021" -- 021 = UN M49 code for "Northern America" (i.e. North America wihout Central America or the Caribbean) } m["en-US"] = { "American English", 7976, "en-NNN", } m["en-NZ"] = { "New Zealand English", 44661, "en" } m["en-ZA"] = { "South African English", 1156228, "en" } m["en-US-CA"] = { "California English", 1026812, "en-US", } m["en-CA"] = { "Canadian English", 44676, "en-US", } m["en-HK"] = { "Hong Kong English", 1068863, "en", } m["en-IN"] = { "Indian English", 1348800, "en", } m["pld"] = { "Polari", 1359130, "en", } -- Scots varieties m["sco-ins"] = { "Insular Scots", 16919205, "sco", } m["sco-uls"] = { "Ulster Scots", 201966, "sco", } m["sco-nor"] = { "Northern Scots", 16928150, "sco", } m["sco-sou"] = { "Southern Scots", 7570457, "sco", aliases = {"South Scots", "Borders Scots"}, } -- Middle English varieties m["enm-esc"] = { -- Part of Middle English until it developed into Middle Scots. "Early Scots", 5326738, "enm", ancestors = "enm-nor", aliases = {"Old Scots", "Scottish Middle English"}, } m["enm-emi"] = { "East Midland Middle English", 134238810, "enm", ancestors = "ang-ang", -- Technically ang-mer, but attested Mercian is mostly WM IIRC } m["enm-ken"] = { "Kentish Middle English", 134238532, "enm", ancestors = "ang-ken", } m["enm-nor"] = { "Northern Middle English", 134238541, "enm", ancestors = "ang-nor", } m["enm-sou"] = { "Southern Middle English", 134238528, "enm", ancestors = "ang-wsx", } m["enm-wmi"] = { "West Midland Middle English", 134238824, "enm", ancestors = "ang-mer", } -- Old English varieties -- Includes both Mercian and Northumbrian. m["ang-ang"] = { "Anglian Old English", 121142917, "ang", } m["ang-ken"] = { "Kentish Old English", 11687485, "ang", } m["ang-mer"] = { "Mercian Old English", 602072, "ang-ang", } m["ang-nor"] = { "Northumbrian Old English", 1798915, "ang-ang", } m["ang-wsx"] = { "West Saxon Old English", 2658603, "ang", } ----------------------------------------------------- -- High German varieties -- ----------------------------------------------------- -- (modern) German varieties m["de-AT"] = { "Austrian German", 306626, "de", } m["de-AT-vie"] = { "Viennese German", 56474, "de-AT", } m["de-CH"] = { "Switzerland German", 1366643, "de", aliases = {"Schweizer Hochdeutsch", "Swiss Standard German", "Swiss High German"}, } m["de-bal"] = { "Baltic German", 15785413, "de", } m["de-ear"] = { "Early New High German", 1472199, "de", ancestors = "gmh", aliases = {"Early Modern High German"}, } m["ksh"] = { "Kölsch", 4624, "gmw-cfr", } m["pfl"] = { "Palatine German", 23014, "gmw-rfr", aliases = {"Pfälzisch", "Pälzisch", "Palatinate German"}, } m["sli"] = { "Silesian East Central German", 152965, "gmw-ecg", aliases = {"Silesian"}, } m["sxu"] = { "Upper Saxon German", 699284, "gmw-ecg", } -- Old High German varieties m["lng"] = { "Lombardic", 35972, "goh", } -- Alemannic German varieties m["gsw-low"] = { "Low Alemannic German", 503724, "gsw", } m["gsw-FR-als"] = { "Alsatian Alemannic German", 8786, "gsw-low", } m["gsw-hig"] = { "High Alemannic German", 503728, "gsw", } m["gsw-hst"] = { "Highest Alemannic German", 687538, "gsw", } m["wae"] = { "Walser German", 680517, "gsw-hst", } ----------------------------------------------------- -- Low German varieties -- ----------------------------------------------------- m["nds-de"] = { "German Low German", 25433, "nds", ietf_subtag = "nds-DE", -- should we make this the actual code? wikimedia_codes = "nds", } m["nds-nl"] = { "Dutch Low Saxon", 516137, "nds", ietf_subtag = "nds-NL", -- should we make this the actual code? wikimedia_codes = "nds-nl", } m["act"] = { "Achterhoeks", 153627, "nds-nl", aliases = {"Achterhoek", "Achterhooks"}, } m["drt"] = { "Drents", 2736709, "nds-nl", aliases = {"Drèents", "Dreins", "Dreints", "Drints"}, } m["frs"] = { "East Frisian Low German", 149208, "nds-de", aliases = {"East Frisian", "East Frisian Low Saxon"}, } m["gos"] = { "Gronings", 508854, "nds-nl", aliases = {"Grunnegs", "Grönnegs"}, } m["nds-lpr"] = { "Low Prussian", 33982, "nds-de", } m["sdz"] = { "Sallands", 3436668, "nds-nl", aliases = {"Sallaans", "Sallaands"}, } m["stl"] = { "Stellingwerfs", 506010, "nds-nl", aliases = {"Stellingwarfs"}, } m["twd"] = { "Twents", 497363, "nds-nl", aliases = {"Tweants"}, } m["vel"] = { "Veluws", 2484810, "nds-nl", } m["wep"] = { "Westphalian", 505655, "nds-de", aliases = {"Westfalish", "Westphalien"}, } ----------------------------------------------------- -- North Frisian varieties -- ----------------------------------------------------- m["frr-ins"] = { "Insular North Frisian", 110629610, "frr", } m["frr-fam"] = { "Föhr-Amrum North Frisian", 110629601, "frr-ins", } m["frr-foh"] = { "Föhr North Frisian", 28185, "frr-fam", aliases = {"Föhr Frisian", "Fering", "Ferring", -- Glottolog }, varieties = {"Aasdring", "Weesdring"}, } m["frr-amr"] = { "Amrum North Frisian", 28192, "frr-fam", aliases = {"Amrum Frisian", "Amrum", "Öömrang"}, } m["frr-hel"] = { "Heligoland North Frisian", 28086, "frr-ins", aliases = {"Heligoland Frisian", "Halunder", "Heligolandic Frisian", "Heligolandic North Frisian", "Helgoland Frisian", "Helgoland North Frisian", "Helgoland"}, } m["frr-syl"] = { "Sylt North Frisian", 28181, "frr-ins", aliases = {"Sylt Frisian", "Söl'ring", "Sölreng", -- Glottolog }, } m["frr-mai"] = { "Mainland North Frisian", 110629626, "frr", } m["frr-hal"] = { "Halligen North Frisian", 28177, "frr-mai", aliases = {"Halligen Frisian", "Halifreesk", "Hallingen Frisian", "Hallingen North Frisian", "Hallingen", -- Glottolog }, } m["frr-moo"] = { "Mooring North Frisian", 28187, "frr-mai", aliases = {"Bökingharde North Frisian", "Bökingharde Frisian", "Böökinghiirder frasch", "Mooring", "Moring", }, varieties = {{"East Mooring", "Ostermooring"}, {"West Mooring", "Westermooring"}}, } m["frr-kar"] = { "Karrharde North Frisian", 28191, "frr-mai", aliases = {"Karrharde Frisian", "Karrharder", }, } m["frr-goe"] = { -- Technically this refers to three adjacent dialects (Northern, Central and Southern), the latter of which went -- extinct in 1980-1981. As a result, Glottolog speaks of "Norder-Mittelgoesharde", referring to the remaining two. "Goesharde North Frisian", 28183, "frr-mai", aliases = {"Norder-Mittelgoesharde North Frisian", "Norder-Mittelgoesharde Frisian", "Norder-Mittelgoesharde", "Goesharde Frisian", "Goesharde", "Gooshiirder", }, } m["frr-wie"] = { "Wiedingharde North Frisian", 28171, "frr-mai", aliases = {"Wiedingharde Frisian", "Wiedingharde", "Wiringhiirder freesk", }, } ----------------------------------------------------- -- Old Norse varieties -- ----------------------------------------------------- m["non-grn"] = { "Greenlandic Norse", 855236, "non-own", } m["non-oen"] = { "Old East Norse", 10498031, "non", ancestors = "non", } m["non-own"] = { "Old West Norse", 2377483, "non", ancestors = "non", } ----------------------------------------------------- -- Old Swedish varieties -- ----------------------------------------------------- m["gmq-osw-lat"] = { "Late Old Swedish", 10723594, "gmq-osw", ancestors = "gmq-osw", } -------------------------------------------------------------------------------------- -- Greek varieties -- -------------------------------------------------------------------------------------- m["qsb-grc"] = { "Pre-Greek", 965052, "und", family = "qfa-sub", } m["grc-aeo"] = { "Aeolic Greek", 406373, "grc", aliases = {"Lesbic Greek", "Lesbian Greek", "Aeolian Greek"}, } m["grc-arc"] = { "Arcadian Greek", nil, "grc-arp", } m["grc-arp"] = { "Arcadocypriot Greek", 499602, "grc", } m["grc-att"] = { "Attic Greek", 506588, "grc", } m["grc-boi"] = { "Boeotian Greek", 406373, "grc-aeo", } m["grc-cyp"] = { "Cypriot Ancient Greek", -- to distinguish from Cypriot Greek below nil, "grc-arp", } m["grc-dor"] = { "Doric Greek", 285494, "grc", } m["grc-ela"] = { "Elean Greek", nil, "grc", } m["grc-epi"] = { "Epic Greek", 990062, "grc", aliases = {"Homeric Greek"}, } m["grc-ion"] = { "Ionic Greek", 504165, "grc", } m["grc-koi"] = { "Koine Greek", 107358, "grc", ancestors = "grc-att", aliases = {"Hellenistic Greek"}, } m["grc-kre"] = { "Cretan Ancient Greek", -- to distinguish from Cretan Greek below nil, "grc-dor", } m["grc-opl"] = { "Opuntian Locrian", nil, "grc", } m["grc-ozl"] = { "Ozolian Locrian", nil, "grc", } m["grc-pam"] = { "Pamphylian Greek", 2271793, "grc", } m["grc-ths"] = { "Thessalian Greek", 406373, "grc-aeo", } m["gkm"] = { "Byzantine Greek", 36387, "grc", ancestors = "grc-koi", aliases = {"Medieval Greek"}, } m["el-cyp"] = { "Cypriot Greek", 245899, "el", aliases = {"Cypriotic Greek"}, } m["el-pap"] = { "Paphian Greek", nil, "el", } m["el-crt"] = { "Cretan Greek", 588306, "el", } m["el-kth"] = { "Katharevousa", 35961, "el", "Polyt", ancestors = "gkm", aliases = {"Katharevousa Greek"}, -- Polyt display_text, strip_diacritics, sort_key in [[Module:scripts/data]] } m["el-kal"] = { "Kaliarda", 12878658, "el", } -------------------------------------------------------------------------------------- -- Indo-Iranian varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Indo-Aryan varieties -- ------------------------------------------------------------------------- -- reconstructed intermediate stages m["pra-pro"] = { "Proto-New Indo-Aryan", nil, "pra", } m["inc-ash-pro"] = { "Proto-Middle Indo-Aryan", nil, "inc-ash", } m["inc-mit"] = { "Mitanni", 1986700, "inc-pro", } m["bra-old"] = { "Old Braj", nil, "bra", } -- Apabhramsas m["inc-aav"] = { "အဝဟတာ", nil, "inc-apa", aliases = {"Abahattha"}, } m["inc-asa"] = { "သဥူရေသဳနဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-agu"] = { "ဂူဂျာရာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-aka"] = { "ခေပ်သမဳရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ama"] = { "မဟာရာတ်သပ်ထရဳ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-ata"] = { "တာကာ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } m["inc-avr"] = { "ဝရာခါဒါ အာပ်ပါပရာမ်သာ", nil, "inc-apa", } -- Assamese varieties m["as-bkm"] = { "Barpetia Kamrupi Assamese", 30642960, "as", } m["as-nkm"] = { "Nalbaria Kamrupi Assamese", 85787678, "as", } m["as-pkm"] = { "Palasbaria Kamrupi Assamese", nil, "as", } -- Bengali varieties m["bn-dvn"] = { "Dhakaiya Vaṅga Bengali", 48726851, "bn", -- Eastern Bengali variety } m["bn-nvn"] = { "Noakhailla Vaṅga Bengali", 107548681, "bn", -- Eastern Bengali variety } -- Dhivehi varieties m["dv-old"] = { "Old Dhivehi", 117790875, "dv", } m["dv-mul"] = { "Mulaku Dhivehi", nil, "dv", aliases = {"Mulaku Divehi", "Mulaku Bas"}, } m["dv-huv"] = { "Huvadhu Dhivehi", nil, "dv", aliases = {"Huvadhu Divehi", "Huvadhu Bas"}, } m["dv-add"] = { "Addu Dhivehi", nil, "dv", aliases = {"Addu Divehi", "Addu Bas"}, } -- Gujarati varieties m["gu-kat"] = { "Kathiyawadi", nil, "gu", aliases = {"Kathiyawadi Gujarati", "Kathiawadi"}, } m["gu-lda"] = { "Lisan ud-Dawat Gujarati", nil, "gu", aliases = {"Lisan ud-Dawat", "LDA"}, } -- Hindi varieties m["hi-mum"] = { "Bombay Hindi", 3543151, "hi", aliases = {"Mumbai Hindi", "Bambaiyya Hindi"}, } m["hi-mid"] = { "Middle Hindi", nil, "inc-ohi", ancestors = "inc-ohi", } -- Konkani varieties m["kok-mid"] = { "Middle Konkani", nil, "kok", aliases = {"Medieval Konkani"}, } m["kok-old"] = { "Old Konkani", nil, "kok", aliases = {"Early Konkani"}, } -- Prakrits m["pra-ard"] = { "အာတ်ဓၟဂါတ်ဒဳ ပရာကရေတ်", 35217, "pra", aliases = {"Ardhamagadhi"}, } m["pra-hel"] = { "ဟေဠူ ပရာကရေတ်", 15080869, "pra", aliases = {"Elu", "Elu Prakrit", "Helu"}, } m["pra-kha"] = { "ခါဿာ ပရာကရေတ်", nil, "pra", aliases = {"Khasa"}, } m["pra-mag"] = { "မဂ္ဂဒိ ပရာကရေတ်", -- Not to be confused with Magahi (mag) 2652214, "pra", aliases = {"Magadhi"}, } m["pra-mah"] = { "မဟာရာတ်ထရဳ ပရာကရေတ်", 2586773, "pra", aliases = {"Maharashtri Prakrit", "Maharastri", "Maharashtri"}, } m["pra-pai"] = { "ပါအေတ်သာသဳ ပရာကရေတ်", 2995607, "pra-sau", aliases = {"Paisaci", "Paisachi"}, ancestors = "pra-sau" } m["pra-sau"] = { "သောရာသေနဳ ပရာကရေတ်", 2452885, "pra", aliases = {"Sauraseni", "Shauraseni"}, } m["pra-ava"] = { "အဗါန်တဳ", nil, "pra", aliases = {"Avanti Prakrit"}, } m["pra-pra"] = { "ပရာသဳယျာ", nil, "pra", aliases = {"Pracya Prakrit"}, } m["pra-bah"] = { "ပါလိကဳ", nil, "pra", aliases = {"Bahliki Prakrit"}, } m["pra-dak"] = { "ထေတ်သဳနတာယျ", nil, "pra", aliases = {"Daksinatya Prakrit"}, } m["pra-sak"] = { "သာကာရဳ", nil, "pra", aliases = {"Sakari Prakrit"}, } m["pra-can"] = { "ခေန်ဒါလဳ", nil, "pra", aliases = {"Candali Prakrit"}, } m["pra-sab"] = { "သာဗါရဳ", nil, "pra", aliases = {"Sabari Prakrit"}, } m["pra-abh"] = { "အဖိရဳ", nil, "pra", aliases = {"Abhiri Prakrit"}, } m["pra-dra"] = { "ဒရာမဳလဳ", nil, "pra", aliases = {"Dramili Prakrit"}, } m["pra-odr"] = { "အဝ်ဒရဳ", nil, "pra", aliases = {"Odri Prakrit"}, } -- Punjabi varieties m["pnb"] = { "Western Punjabi", 58635, "pa", "pa-Arab", } -- Sanskrit varieties m["vsn"] = { "Vedic Sanskrit", 36858, "sa", } m["cls"] = { "Classical Sanskrit", 9333703, "sa", } m["sa-bhs"] = { "Buddhist Hybrid Sanskrit", 248758, "sa", } m["sa-bra"] = { "Brahmanic Sanskrit", 139822891, "vsn", } m["sa-epi"] = { "Epic Sanskrit", 56702805, "cls", } m["sa-neo"] = { "New Sanskrit", nil, "sa", } m["sa-rig"] = { "Rigvedic Sanskrit", 139822680, "vsn", } -- Sinhalese varieties m["si-med"] = { "Medieval Sinhalese", nil, "si", aliases = {"Medieval Sinhala"}, } ------------------------------------------------------------------------- -- Iranian varieties -- ------------------------------------------------------------------------- m["qsb-bma"] = { "the BMAC substrate", 133187435, "und", family = "qfa-sub", aliases = {"the Bactria-Margiana substrate", "the Bactria-Margiana Archaeological Complex substrate"}, } -- Historical and current Iranian dialects m["ae-old"] = { "Old Avestan", 29572, "ae", aliases = {"Gathic Avestan"}, } m["ae-yng"] = { "Younger Avestan", 29572, "ae-old", aliases = {"Young Avestan"}, } m["bcc"] = { "Southern Balochi", 33049, "bal", aliases = {"Southern Baluchi"}, } m["bgp"] = { "Eastern Balochi", 33049, "bal", aliases = {"Eastern Baluchi"}, } m["bgn"] = { "Western Balochi", 33049, "bal", aliases = {"Western Baluchi"}, } m["bsg-ban"] = { "Bandari", nil, "bsg", } m["bsg-hor"] = { "Hormozi", nil, "bsg", } m["bsg-min"] = { "Minabi", nil, "bsg", } m["kho-old"] = { "Old Khotanese", nil, "kho", } m["kho-lat"] = { "Late Khotanese", nil, "kho-old", } m["peo-ear"] = { "Early Old Persian", nil, "peo", } m["peo-lat"] = { "Late Old Persian", nil, "peo", } m["pal-ear"] = { "Early Middle Persian", nil, "pal", } m["pal-lat"] = { "Late Middle Persian", nil, "pal", ancestors = "pal-ear", } m["ps-nwe"] = { "Northwestern Pashto", nil, "ps", } m["ps-cgi"] = { "Central Ghilzay", nil, "ps-nwe", } m["ps-mah"] = { "Mahsudi", nil, "ps-nwe", } m["ps-nea"] = { "Northeastern Pashto", nil, "ps", } m["ps-afr"] = { "Afridi", nil, "ps-nea", } m["ps-bng"] = { "Bangash", nil, "ps-nea", } m["ps-xat"] = { "Khatak", nil, "ps-nea", } m["ps-pes"] = { "Peshawari", nil, "ps-nea", } m["ps-sea"] = { "Southeastern Pashto", nil, "ps", } m["ps-ban"] = { "Bannu", nil, "ps-sea", } m["ps-kak"] = { "Kakari", nil, "ps-sea", } m["ps-ser"] = { "Sher", nil, "ps-sea", } m["ps-waz"] = { "Waziri", 12274473, "ps-sea", } m["ps-swe"] = { "Southwestern Pashto", nil, "ps", } m["ps-kan"] = { "Kandahari", nil, "ps-swe", } m["ps-jad"] = { "Jadrani", nil, "ps", ancestors = "ira-pat-pro" } m["xme-azr"] = { "Old Azari", nil, "xme-ott", aliases = {"Old Azeri", "Azari", "Azeri", "Āḏarī", "Adari", "Adhari"}, } m["xme-ttc-cen"] = { "Central Tati", nil, "xme-ott", } m["xme-ttc-eas"] = { "Eastern Tati", nil, "xme-ott", } m["xme-ttc-nor"] = { "Northern Tati", nil, "xme-ott", } m["xme-ttc-sou"] = { "Southern Tati", nil, "xme-ott", } m["xme-ttc-wes"] = { "Western Tati", nil, "xme-ott", } m["xmn"] = { "Manichaean Middle Persian", nil, "pal-lat", } m["fa-ear"] = { "Early New Persian", 127413796, "fa", ancestors = "pal-lat", translit = "fa-cls-translit", } m["fa-cls"] = { "Classical Persian", 9168, "fa", ancestors = "fa-ear", translit = "fa-cls-translit", } m["fa-ira"] = { "Iranian Persian", 3513637, "fa", aliases = {"Modern Persian", "Western Persian"}, translit = "fa-ira-translit", } m["prs"] = { "Dari", 178440, "fa", aliases = {"Dari Persian", "Central Persian", "Eastern Persian", "Afghan Persian"}, translit = "fa-cls-translit", } m["haz"] = { "Hazaragi", 33398, "prs", translit = "fa-cls-translit", } m["os-dig"] = { "Digor Ossetian", 3027861, "os", aliases = {"Digoron", "Digor"}, } m["os-iro"] = { "Iron Ossetian", nil, "os", aliases = {"Iron"}, } m["sog-ear"] = { "Early Sogdian", nil, "sog", } m["sog-lat"] = { "Late Sogdian", nil, "sog-ear", } m["ro-MD"] = { "Moldovan", 36392, "ro", aliases = {"Moldavian"}, } m["oru-kan"] = { "Kaniguram", 6363164, "oru", } m["oru-log"] = { "Logar", nil, "oru", } m["oos"] = { "Old Ossetic", 65455882, "xln", } m["oos-ear"] = { "Early Old Ossetic", nil, "oos", } m["oos-lat"] = { "Late Old Ossetic", nil, "oos", } m["rdb-jir"] = { "Jirofti", nil, "rdb", } m["rdb-kah"] = { "Kahnuji", nil, "rdb", } -- Southwestern Fars lects m["fay-bur"] = { "Burenjani", nil, "fay", } m["fay-bsh"] = { "Bushehri", nil, "fay", } m["fay-dsh"] = { "Dashtaki", nil, "fay", } m["fay-dav"] = { "Davani", 5228140, "fay", } m["fay-eze"] = { "Emamzada Esmaili", nil, "fay", } m["fay-gav"] = { "Gavkoshaki", nil, "fay", } m["fay-kho"] = { "Khollari", nil, "fay", } m["fay-kon"] = { "Kondazi", nil, "fay", } m["fay-kzo"] = { "Old Kazeruni", nil, "fay", } m["fay-mas"] = { "Masarami", nil, "fay", } m["fay-pap"] = { "Papuni", nil, "fay", } m["fay-sam"] = { "Samghani", nil, "fay", } m["fay-shr"] = { "Shirazi", nil, "fay", } m["fay-sho"] = { "Old Shirazi", nil, "fay", } m["fay-kar"] = { "Khargi", nil, "fay", } m["fay-sor"] = { "Sorkhi", nil, "fay", } -- Talysh lects m["tly-cen"] = { "Central Talysh", nil, "tly", } m["tly-asa"] = { "Asalemi", nil, "tly-cen", } m["tly-kar"] = { "Karganrudi", nil, "tly-cen", } m["tly-tul"] = { "Tularudi", nil, "tly-cen", } m["tly-tal"] = { "Taleshdulabi", nil, "tly-cen", } m["tly-nor"] = { "Northern Talysh", nil, "tly", } m["tly-aze"] = { "Azerbaijani Talysh", nil, "tly-nor", } m["tly-anb"] = { "Anbarani", nil, "tly-nor", } m["tly-sou"] = { "Southern Talysh", nil, "tly", } m["tly-fum"] = { "Fumani", nil, "tly-sou", } m["tly-msu"] = { "Masulei", nil, "tly-sou", } m["tly-msa"] = { "Masali", nil, "tly-sou", } m["tly-san"] = { "Shandarmani", nil, "tly-sou", } -- Tafreshi lects m["xme-amo"] = { "Amorehi", nil, "xme-taf", } m["atn"] = { "Ashtiani", 3436590, "xme-taf", } m["xme-bor"] = { "Borujerdi", nil, "xme-taf", } m["xme-ham"] = { "Hamadani", 6302426, "xme-taf", } m["xme-kah"] = { "Kahaki", nil, "xme-taf", } m["vaf"] = { "Vafsi", 32611, "xme-taf", } -- Kermanic lects m["kfm"] = { "Khunsari", 6403030, "xme-ker", } m["xme-mah"] = { "Mahallati", nil, "xme-ker", } m["xme-von"] = { "Vonishuni", nil, "xme-ker", } m["xme-bdr"] = { "Badrudi", nil, "xme-ker", } m["xme-del"] = { "Delijani", nil, "xme-ker", } m["xme-kas"] = { "Kashani", nil, "xme-ker", } m["xme-kes"] = { "Kesehi", nil, "xme-ker", } m["xme-mey"] = { "Meymehi", nil, "xme-ker", } m["ntz"] = { "Natanzi", 6968399, "xme-ker", } m["xme-abz"] = { "Abuzeydabadi", nil, "xme-ker", } m["xme-aby"] = { "Abyanehi", nil, "xme-ker", } m["xme-far"] = { "Farizandi", nil, "xme-ker", } m["xme-jow"] = { "Jowshaqani", nil, "xme-ker", } m["xme-nas"] = { "Nashalji", nil, "xme-ker", } m["xme-qoh"] = { "Qohrudi", nil, "xme-ker", } m["xme-yar"] = { "Yarandi", nil, "xme-ker", } m["soj"] = { "Soi", 7930463, "xme-ker", aliases = {"Sohi"}, } m["xme-tar"] = { "Tari", nil, "xme-ker", } m["gzi"] = { "Gazi", 5529130, "xme-ker", } m["xme-sed"] = { "Sedehi", nil, "xme-ker", } m["xme-ard"] = { "Ardestani", nil, "xme-ker", } m["xme-zef"] = { "Zefrehi", nil, "xme-ker", } m["xme-isf"] = { "Isfahani", nil, "xme-ker", } m["xme-kaf"] = { "Kafroni", nil, "xme-ker", } m["xme-vrz"] = { "Varzenehi", nil, "xme-ker", } m["xme-xur"] = { "Khuri", nil, "xme-ker", } m["nyq"] = { "Nayini", 6983146, "xme-ker", } m["xme-ana"] = { "Anaraki", nil, "xme-ker", } m["gbz"] = { "Zoroastrian Dari", 32389, "xme-ker", aliases = {"Behdināni", "Gabri", "Gavrŭni", "Gabrōni"}, } m["xme-krm"] = { "Kermani", nil, "xme-ker", } m["xme-yaz"] = { "Yazdi", nil, "xme-ker", } m["xme-bid"] = { "Bidhandi", nil, "xme-ker", } m["xme-bij"] = { "Bijagani", nil, "xme-ker", } m["xme-cim"] = { "Chimehi", nil, "xme-ker", } m["xme-han"] = { "Hanjani", nil, "xme-ker", } m["xme-kom"] = { "Komjani", nil, "xme-ker", } m["xme-nar"] = { "Naraqi", nil, "xme-ker", } m["xme-nus"] = { "Nushabadi", nil, "xme-ker", } m["xme-qal"] = { "Qalhari", nil, "xme-ker", } m["xme-trh"] = { "Tarehi", nil, "xme-ker", } m["xme-val"] = { "Valujerdi", nil, "xme-ker", } m["xme-var"] = { "Varani", nil, "xme-ker", } m["xme-zor"] = { "Zori", nil, "xme-ker", } -- Ramandi lects m["tks-ebr"] = { "Ebrahimabadi", nil, "tks", } m["tks-sag"] = { "Sagzabadi", nil, "tks", } m["tks-esf"] = { "Esfarvarini", nil, "tks", } m["tks-tak"] = { "Takestani", nil, "tks", } m["tks-cal"] = { "Chali Tati", nil, "tks", aliases = {"Chāli"}, } m["tks-dan"] = { "Danesfani", nil, "tks", } m["tks-xia"] = { "Khiaraji", nil, "tks", } m["tks-xoz"] = { "Khoznini", nil, "tks", } -- Shughni dialects m["sgh-bro"] = { "Bartangi-Oroshori", nil, "sgh", } m["sgh-bar"] = { "Bartangi", nil, "sgh-bro", } m["sgh-oro"] = { "Oroshori", nil, "sgh-bro", aliases = {"Roshorvi"}, } m["sgh-rsx"] = { "Roshani-Khufi", nil, "sgh", } m["sgh-xuf"] = { "Khufi", 2562249, "sgh-rsx", aliases = {"Xufi", "Xūfī"}, } m["sgh-ros"] = { "Roshani", 2597566, "sgh-rsx", aliases = {"Rushani", "Rōšāni"}, } m["sgh-xgb"] = { "Khughni-Bajui", nil, "sgh", } m["sgh-xug"] = { "Khughni", nil, "sgh-xgb", } m["sgh-baj"] = { "Bajui", nil, "sgh-xgb", } ------------------------------------------------------------------------- -- Nuristani varieties -- ------------------------------------------------------------------------- m["bsh-kat"] = { "Kativiri", 2605045, "bsh", aliases = {"Katə́viri"}, } m["xvi"] = { "Kamviri", 1193495, "bsh", aliases = {"Kamvíri"}, } m["bsh-mum"] = { "Mumviri", nil, "bsh", aliases = {"Mumvíri"}, } -------------------------------------------------------------------------------------- -- Italic varieties -- -------------------------------------------------------------------------------------- ------------------------------------------------------------------------- -- Latin varieties -- ------------------------------------------------------------------------- -- Latin varieties by period m["itc-ola"] = { "လပ်တေန်တြေံ", 12289, "la", "Latn, Ital", translit = { Ital = "Ital-translit" }, } m["itc-lan"] = { "Lanuvian", 16890829, "itc-ola", aliases = {"Lanuvine"}, } m["itc-pra"] = { "Praenestine", 16889772, "itc-ola", aliases = {"Praenestinian"}, } m["la-cla"] = { "လပ်တေန်ဝၚ်ဂန္ထ", 253854, "la", } m["la-vul"] = { "လပ်တေန်အရိုၚ်", 37560, "la-cla", } m["la-afr"] = { "African Romance", 162064, "roa-pro", } m["la-lat"] = { "လပ်တေန်လဇုဲ", 1503113, "la", ancestors = "la-cla", } m["la-med"] = { "လပ်တေန် ခေတ်လဒေါဝ်", 1163234, "la", ancestors = "la-lat", } m["la-eme"] = { "လပ်တေန်ခေတ်လဒေါဝ်ဗွဲမပြဟ်", nil, "la-med", } m["la-ecc"] = { "သာသနာခရေတ်လပ်တေန်", 1247932, "la", aliases = {"Church Latin", "Liturgical Latin"}, ancestors = "la-lat", } m["la-ren"] = { "လပ်တေန်ခေတ်ကလေၚ်ပလေဝ်ပ္တိုန်တၟိ", 499083, "la", ancestors = "la-med", } m["la-new"] = { "လပ်တေန်တၟိ", 1248221, "la", aliases = {"Modern Latin"}, ancestors = "la-ren", } m["la-con"] = { "လပ်တေန်ခေတ်ပြိုၚ်ပ္ကာန်", 1246397, "la-new", } ------------------------------------------------------------------------- -- Miscellaneous Italic varieties -- ------------------------------------------------------------------------- m["xfa-cap"] = { "Capenate", 133182969, "xfa", } m["osc-luc"] = { "Lucanian", 3265025, "osc", } m["osc-sam"] = { "Samnite", 133184287, "osc", } ------------------------------------------------------------------------- -- Romance varieties -- ------------------------------------------------------------------------- m["roa-pro"] = { "Proto-Romance", 3408029, "la-lat", ancestors = "la-vul", } ----------------------------------------------------- -- Catalan varieties -- ----------------------------------------------------- m["ca-val"] = { "Valencian", 32641, "ca", } ----------------------------------------------------- -- Franco-Provençal varieties -- ----------------------------------------------------- m["frp-old"] = { "Old Franco-Provençal", nil, "frp", } ----------------------------------------------------- -- French and derived creole varieties -- ----------------------------------------------------- m["fro-nor"] = { "Old Northern French", 2044917, "fro", aliases = {"Old Norman", "Old Norman French"}, } m["fro-pic"] = { "Picard Old French", nil, "fro", } m["xno"] = { "Anglo-Norman", 35214, "fro-nor", } m["xno-law"] = { "Law French", 2044323, "xno", } m["zrp"] = { "Zarphatic", 36994, "fro", aliases = {"Judeo-French"}, pseudo_families = "qfa-jew", } m["fr-CA"] = { "Canadian French", 1450506, "fr", } m["fr-CH"] = { "Swiss French", 1480152, "fr", } m["fr-aca"] = { "Acadian French", 415109, "fr", } m["fr-lou"] = { "Louisiana French", 3083213, "fr", } m["fr-mis"] = { "Missouri French", 3083210, "fr", } m["frc"] = { "Cajun French", 880301, "fr-lou", } m["ht-sdm"] = { "Saint Dominican Creole French", nil, "ht", ancestors = "fr", } -- Norman varieties m["nrf-grn"] = { "Guernsey Norman", 56428, "nrf", aliases = {"Guernsey"}, } m["nrf-jer"] = { "Jersey Norman", 56430, "nrf", aliases = {"Jersey"}, } ----------------------------------------------------- -- Gallo-Italic varieties -- ----------------------------------------------------- m["egl-old"] = { "Old Emilian", nil, "egl", } m["lij-old"] = { "လဳဂူရဳယာန်တြေံ", nil, "lij", aliases = {"Old Genoese"}, } m["lmo-old"] = { "လောန်ဗါတ်တြေံ", 97165320, "lmo", } m["pms-old"] = { "Old Piedmontese", nil, "pms", aliases = {"Old Piemontese"}, } m["vec-old"] = { "Old Venetan", nil, "vec", aliases = {"Old Venetian"}, } m["rgn-old"] = { "Old Romagnol", nil, "rgn", } ----------------------------------------------------- -- Italo-Romance varieties -- ----------------------------------------------------- -- Italian varieties m["roa-oit"] = { "Old Italian", nil, "it", } m["it-CH"] = { "Switzerland Italian", 672147, "it", } -- Other Italo-Romance varieties m["nap-old"] = { "Old Neapolitan", nil, "nap", } m["scn-old"] = { "Old Sicilian", nil, "scn", } ----------------------------------------------------- -- Occitan varieties -- ----------------------------------------------------- m["oc-auv"] = { "Auvergnat", 35359, "oc", aliases = {"Auvernhat", "Auvergnese"}, } m["oc-gas"] = { "ဂေါသ်သကာန်", 35735, "oc", } -- standardized dialect of Gascon m["oc-ara"] = { "Aranese", 10196, "oc-gas", } m["oc-lan"] = { "လာမ်ဂဝေအ်ဒံက်ဃှေန်", 942602, "oc", aliases = {"Lengadocian"}, } m["oc-lim"] = { "လိမူသေန်", 427614, "oc", } m["oc-pro"] = { "ဖရဝ်ဗေန်သော", 241243, "oc", aliases = {"Provencal"}, } m["oc-pro-old"] = { "ဖရဝ်ဗေန်သောတြေံ", 2779185, "pro", } m["oc-viv"] = { "ဝဳဝါရုဝ်-အောဖှာၚ်", 1649613, "oc", } m["oc-jud"] = { "Shuadit", 56472, "oc", aliases = { "Chouhadite", "Chouhadit", "Chouadite", "Chouadit", "Shuhadit", "Judeo-Occitan", "Judæo-Occitan", "Judaeo-Occitan", "Judeo-Provençal", "Judæo-Provençal", "Judaeo-Provençal", "Judeo-Provencal", "Judaeo-Provencal", "Judeo-Comtadin", "Judæo-Comtadin", "Judaeo-Comtadin", }, pseudo_families = "qfa-jew", } ----------------------------------------------------- -- Portuguese and derived creole varieties -- ----------------------------------------------------- -- Portuguese m["pt-BR"] = { "Brazilian Portuguese", 750553, "pt", } m["pt-PT"] = { "European Portuguese", 922399, "pt", } -- Kabuverdianu (Cape Verde Creole, Cape Verdean Creole) m["kea-bar"] = { "Barlavento Kabuverdianu", 2217638, "kea", aliases = {"Barlavento", "Barlavento Creole", "Sampadjudu"}, } m["kea-bvi"] = { "Boa Vista Kabuverdianu", 16501837, "kea-bar", aliases = {"Boa Vista Creole"}, } m["kea-sal"] = { "Sal Kabuverdianu", 18707467, "kea-bar", aliases = {"Sal Creole"}, } m["kea-saa"] = { "Santo Antão Kabuverdianu", 18707472, "kea-bar", aliases = {"Santo Antão Creole"}, } m["kea-sni"] = { "São Nicolau Kabuverdianu", 18707549, "kea-bar", aliases = {"São Nicolau Creole"}, } m["kea-svi"] = { "São Vicente Kabuverdianu", 18707550, "kea-bar", aliases = {"São Vicente Creole"}, } m["kea-sot"] = { "Sotavento Kabuverdianu", 10261559, "kea", aliases = {"Sotavento", "Sotavento Creole", "Badiu"}, } m["kea-bra"] = { "Brava Kabuverdianu", 18670181, "kea-sot", aliases = {"Brava Creole"}, } m["kea-fog"] = { "Fogo Kabuverdianu", 18706861, "kea-sot", aliases = {"Fogo Creole"}, } m["kea-mai"] = { "Maio Kabuverdianu", 18707286, "kea-sot", aliases = {"Maio Creole"}, } m["kea-san"] = { "Santiago Kabuverdianu", 35117, "kea-sot", aliases = {"Santiago Creole"}, } m["kea-alu"] = { "ALUPEC Kabuverdianu", 375704, "kea", aliases = {"ALUPEC", "Alfabeto Unificado para a Escrita do Cabo-Verdiano"}, } ----------------------------------------------------- -- Rhaeto-Romance varieties -- ----------------------------------------------------- -- Friulian varieties m["fur-old"] = { "Old Friulian", nil, "fur", } -- Ladin varieties m["lld-amp"] = { "Ampezan Ladin", 25617466, "lld", aliases = {"Anpezan", "Ampezan", "Ampezzan", "Ampezzano"}, } m["lld-bad"] = { "Badiot Ladin", 3706562, "lld", aliases = {"Badiot", "Badioto", "Badiotto"}, } m["lld-cad"] = { "Cadorino Ladin", 3706570, "lld", aliases = {"Cadorino"}, } m["lld-fas"] = { "Fascian Ladin", 742627, "lld", aliases = {"Fascian", "Fassano"}, } m["lld-fod"] = { "Fodom Ladin", 3706605, "lld", aliases = {"Fodom", "Livinallese"}, } m["lld-for"] = { "Fornes Ladin", 5470374, "lld", aliases = {"Fornes"}, } m["lld-ghe"] = { "Gherdëina Ladin", 3706597, "lld", aliases = {"Gherdëina", "Gardenese", "Val Gardena"}, } m["lld-non"] = { "Nones Ladin", 1055027, "lld", aliases = {"Nones", "Noneso"}, } -- Romansh varieties m["rm-old"] = { "Old Romansh", nil, "rm", } m["rm-put"] = { "Puter Romansh", 688309, "rm", aliases = {"Puter", "Putèr", "Upper Engadine", "rm-puter"}, } m["rm-srm"] = { "Surmiran Romansh", 690216, "rm", aliases = {"Surmiran", "rm-surmiran", "Surmiran-Albula", -- Glottolog }, } m["rm-srs"] = { "Sursilvan Romansh", 688348, "rm", aliases = {"Sursilvan", "rm-sursilv"}, } m["rm-sut"] = { "Sutsilvan Romansh", 688272, "rm", aliases = {"Sutsilvan", "rm-sutsilv"}, varieties = {"Scharans Sutsilvan"}, -- per Glottolog } m["rm-val"] = { "Vallader Romansh", 690226, "rm", aliases = {"Vallader", "Putèr", "Lower Engadine", "rm-vallader"}, } m["rm-gri"] = { "Rumantsch Grischun", 688873, "rm", aliases = {"rm-rumgr"}, } ----------------------------------------------------- -- Sardinian varieties -- ----------------------------------------------------- m["sc-old"] = { "Old Sardinian", nil, "sc", } m["sc-src"] = { "Logudorese", 777974, "sc", aliases = {"Logudorese Sardinian"}, } m["sc-nuo"] = { "Nuorese", nil, "sc-src", aliases = {"Nuorese Sardinian"}, } m["sc-sro"] = { "Campidanese", 35348, "sc", aliases = {"Campidanese Sardinian"}, } ----------------------------------------------------- -- Spanish varieties -- ----------------------------------------------------- m["es-ear"] = { "Early Modern Spanish", 5364419, "es", } m["es-AR"] = { "Rioplatense Spanish", 509780, "es", } m["es-BO"] = { "Bolivian Spanish", 510730, "es", } m["es-CL"] = { "Chilean Spanish", 857295, "es", } m["es-CO"] = { "Colombian Spanish", 1115875, "es", } m["es-CU"] = { "Cuban Spanish", 824909, "es", } m["es-MX"] = { "Mexican Spanish", 616620, "es", } m["es-PE"] = { "Peruvian Spanish", 736236, "es", } m["es-PH"] = { "Philippine Spanish", 22091406, "es", } m["es-US"] = { "United States Spanish", 2301077, "es", aliases = {"US Spanish"}, } --use label "US Spanish" to put Spanish terms in this category m["es-PR"] = { "Puerto Rican Spanish", 7258609, "es", } m["es-VE"] = { "Venezuelan Spanish", 840017, "es", } m["es-lun"] = { "Lunfardo", 1401612, "es", } ---------------------------------------------------------------------------------------------------------------------- -- Japonic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Japanese varieties m["ja-mid"] = { "ဂျပါန် လဒေါဝ်", 6841474, "ojp", ancestors = "ojp", } m["ja-mid-ear"] = { "Early Middle Japanese", 182695, "ja-mid", } m["ja-mid-lat"] = { "ဂျပါန်တြေံခေတ်လဇုဲ", 1816184, "ja-mid", ancestors = "ja-mid-ear", } m["ja-ear"] = { "Early Modern Japanese", 5326692, "ja", ancestors = "ja-mid-lat", } m["ojp-eas"] = { "Eastern Old Japanese", 65247957, "ojp", } m["ja-cla"] = { "Classical Japanese", 1332057, "ja", -- FIXME: This is redundant because Classical Japanese is considered a child of (Modern) Japanese, which has ja-mid-ear -- (as well as ja-mid-lat) as ancestors. However, the intent here is that the *direct* ancestor of ja-cla is ja-mid-ear -- and ja-mid-lat is not an ancestor. Need to rethink ancestor handling. -- ancestors = "ja-mid-ear", } ---------------------------------------------------------------------------------------------------------------------- -- Koreanic varieties -- ---------------------------------------------------------------------------------------------------------------------- -- Korean varieties m["oko-lat"] = { "ကိုဝ်ရဳယျာတြေံခေတ်လဇုဲ", nil, "oko", } m["okm-ear"] = { "Early Middle Korean", nil, "okm", } m["ko-cen"] = { "Central Korean", nil, "ko", } m["ko-gyg"] = { "Gyeonggi Korean", 485492, "ko-cen", aliases = {"Seoul Korean"}, } m["ko-chu"] = { "Chungcheong Korean", 625800, "ko-cen", aliases = {"Hoseo Korean"}, } m["ko-hwa"] = { "Hwanghae Korean", 16183706, "ko-cen", } m["ko-gan"] = { "Gangwon Korean", 11260444, "ko-cen", aliases = {"Yeongdong Korean"}, } m["ko-gys"] = { "Gyeongsang Korean", 488002, "ko", aliases = {"Southeastern Korean"}, } m["ko-jeo"] = { "Jeolla Korean", 11250166, "ko", aliases = {"Southwestern Korean"}, } m["ko-pyo"] = { "Pyongan Korean", 7263142, "ko", aliases = {"Northwestern Korean"}, } m["ko-ham"] = { "Hamgyong Korean", 860702, "ko", aliases = {"Northeastern Korean"}, } m["ko-yuk"] = { "Yukjin Korean", 16171275, "ko", aliases = {"Yukchin Korean", "Ryukjin Korean", "Ryukchin Korean"}, } ---------------------------------------------------------------------------------------------------------------------- -- Mongolic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["xng-ear"] = { "Early Middle Mongol", nil, "xng", } m["xng-lat"] = { "Late Middle Mongol", nil, "xng", ancestors = "xng-ear", } m["mn-kha"] = { "Khalkha Mongolian", 6399808, "mn", aliases = {"Khalkha"}, } m["mn-ord"] = { "Ordos Mongolian", 716904, "mn", aliases = {"Ordos"}, } m["mn-cha"] = { "Chakhar Mongolian", 907425, "mn", aliases = {"Chakhar"}, } m["mn-khr"] = { "Khorchin Mongolian", 3196210, "mn", aliases = {"Khorchin"}, } ---------------------------------------------------------------------------------------------------------------------- -- Niger-Congo varieties -- ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- -- Akan varieties -- ----------------------------------------------------- m["tw"] = { "Twi Akan", 36850, "ak", aliases = {"Twi"}, } m["abr"] = { "Abron", 34831, "tw", aliases = {"Brong", "Bono", "Bono Twi"}, } m["tw-asa"] = { "Asante Twi", 19261685, "tw", aliases = {"Asante", "Ashanti", "Ashante"}, } m["tw-aku"] = { "Akuapem Twi", 31150449, "tw", aliases = {"Akuapem", "Akuapim", "Akwapem Twi", "Akwapi"}, } m["fat"] = { "Fante Akan", 35570, "ak", aliases = {"Fante", "Fanti", "Fantse", "Mfantse"}, } m["wss"] = { "Wasa", 36914, "ak", } -- creole m["alv-kro"] = { "Kromanti", 1093206, "crp-mar", } ----------------------------------------------------- -- Bantu varieties -- ----------------------------------------------------- m["bnt-cmn"] = { "Common Bantu", nil, "bnt-pro", } m["xh-bha"] = { "Bhaca", 4900493, "xh", aliases = {"isiBhaca", "IsiBhaca"}, } -- Rwanda-Rundi varieties m["rw-kin"] = { "Kinyarwanda", 33573, "rw", aliases = {"Rwanda"}, } m["rw-run"] = { "Kirundi", 33583, "rw", aliases = {"Rundi"}, } ----------------------------------------------------- -- Fula varieties -- ----------------------------------------------------- m["fuc"] = { "Pulaar", 1420205, "ff", } m["fuf"] = { "Pular", 3915357, "ff", } m["ffm"] = { "Maasina Fulfulde", 3915322, "ff", } m["fue"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Borgu Fulfulde", 12952426, "ff", } m["fuh"] = { -- no enwiki entry as of yet but frwiki and pmswiki have one "Western Niger Fulfulde", 12952430, "ff", } m["fuq"] = { -- no enwiki entry as of yet but frwiki, hrwiki and pmswiki have one "Central-Eastern Niger Fulfulde", 12628799, "ff", } m["fuv"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki and swwiki have one "Nigerian Fulfulde", 36129, "ff", } m["fub"] = { -- no enwiki entry as of yet but dewiki, frwiki, hrwiki, pmswiki, ptwiki, swwiki and yowiki have one "Adamawa Fulfulde", 34776, "ff", } m["fui"] = { -- no enwiki entry as of yet but pmswiki and swwiki have one "Bagirmi Fulfulde", 11003859, "ff", } ---------------------------------------------------------------------------------------------------------------------- -- Papuan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["kze"] = { "Kosena", 12952663, "auy", } m["ont"] = { "Ontenu", 3352827, "gaj", aliases = {"Ontena"}, } ---------------------------------------------------------------------------------------------------------------------- -- Salishan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["lut-nor"] = { "Northern Lushootseed", nil, "lut", aliases = {"Northern Puget Sound Salish"}, } m["slh"] = { "Southern Lushootseed", 7997684, "lut", aliases = {"Southern Puget Sound Salish", "Twulshootseed", "Whulshootseed"}, } m["ska"] = { "Skagit", 12642471, "lut-nor", } m["sno"] = { "Snohomish", 25559662, "lut-nor", } ---------------------------------------------------------------------------------------------------------------------- -- Sino-Tibetan varieties -- ---------------------------------------------------------------------------------------------------------------------- m["tbq-pro"] = { "ဗၟာ-တိဗဝ်တဝ် အခိုက်ကၞာ", 7251864, "sit-pro", } ----------------------------------------------------- -- Chinese varieties -- ----------------------------------------------------- ------------- Old Chinese, Middle Chinese ------------- m["och-ear"] = { "Early Old Chinese", nil, "och", } m["och-lat"] = { "Late Old Chinese", nil, "och", } m["ltc-ear"] = { "Early Middle Chinese", nil, "ltc", } m["ltc-lat"] = { "Late Middle Chinese", nil, "ltc", } ------------- Classical/Literary varieties ------------- -- FIXME: Temporary. m["lzh-shi"] = { "Traditional Chinese poetry", 1759242, "lzh", } -- FIXME: Temporary. m["lzh-cii"] = { "Ci", 1091366, "lzh", } -- FIXME: Temporary. m["lzh-yue"] = { "Classical Cantonese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn"] = { "Classical Mandarin", nil, "lzh", } -- FIXME: Temporary. m["lzh-tai"] = { "Classical Taishanese", nil, "lzh", } -- FIXME: Temporary. m["lzh-cmn-TW"] = { "Classical Taiwanese Mandarin", nil, "lzh-cmn", } -- FIXME: Temporary. m["lzh-VI"] = { "Vietnamese Classical Chinese", 17034227, "lzh", } -- FIXME: Temporary. m["lzh-KO"] = { "Korean Classical Chinese", 10496257, "lzh", ietf_subtag = "lzh-KR" -- KR = South Korea, as there is no code for Korea as a whole } -- FIXME: Temporary. m["lzh-lit"] = { "Literary Chinese", nil, "lzh", } -- FIXME: Temporary. FIXME: Do we need this? How does it differ from Old Chinese? m["lzh-pre"] = { "Pre-Classical Chinese", nil, "lzh", } ------------- Written Vernacular varieties ------------- -- FIXME: Temporary. m["cmn-wvc"] = { "Written vernacular Mandarin", 783605, "cmn", } -- FIXME: Temporary. FIXME: How does this differ from "Literary Cantonese"? m["yue-wvc"] = { "Written vernacular Cantonese", nil, "yue", } -- FIXME: Temporary. m["zhx-tai-wvc"] = { "Written vernacular Taishanese", nil, "zhx-tai", } ------------- Mandarin varieties ------------- -- FIXME: Temporary. NOTE: The Linguist List assigns the "w:Beijing dialect" (Wikidata 1147606) the code "cmn-bej" and -- the larger "w:Beijing Mandarin (division of Mandarin)" dialect group (Wikidata 2169652; what we call "Beijingic -- Mandarin", after Glottolog) the code "cmn-bei". m["cmn-bei"] = { "Beijing Mandarin", 1147606, "cmn-bec", } -- FIXME: Temporary. m["cmn-bec"] = { "Beijingic Mandarin", 2169652, "cmn", } -- FIXME: Temporary. NOTE: The Linguist List uses the code cmn-zho. m["cmn-cep"] = { "Central Plains Mandarin", 3048775, "cmn", aliases = {"Zhongyuan Mandarin"}, } m["cmn-ear"] = { "Early Mandarin", 837169, "cmn", ancestors = "ltc", } -- FIXME: Temporary. m["cmn-gua"] = { "Guanzhong Mandarin", 3431648, "cmn-cep", } -- FIXME: Temporary. Appears to be a subdialect of Guiliu Mandarin, which in turn is a subdialect of Southwestern Mandarin. m["cmn-gui"] = { "Guilin Mandarin", 11111636, "cmn-sow", } m["cmn-jhu"] = { "Jianghuai Mandarin", 2128953, "cmn", aliases = {"Lower Yangtze Mandarin"}, } -- FIXME: Temporary. m["cmn-lan"] = { "Lanyin Mandarin", 662754, "cmn", } -- FIXME: Temporary. m["cmn-MY"] = { "Malaysian Mandarin", 13646143, "cmn", } -- FIXME: Temporary. m["cmn-nan"] = { "Nanjing Mandarin", 2681098, "cmn-jhu", } -- FIXME: Temporary. m["cmn-noe"] = { "Northeastern Mandarin", 1064504, "cmn", } -- FIXME: Temporary. m["cmn-PH"] = { "Philippine Mandarin", 7185155, "cmn", } -- FIXME: Temporary. m["cmn-SG"] = { "Singapore Mandarin", 1048980, "cmn", } -- FIXME: Temporary. m["cmn-sow"] = { "Southwestern Mandarin", 2609239, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Jilu Mandarin. m["cmn-tia"] = { "Tianjin Mandarin", 7800220, "cmn", } -- FIXME: Temporary. NOTE: Wikidata also has Q4380827 "Taiwanese Mandarin", defined as "rare dialect of Standard Chinese -- (Mandarin) used in Taiwan, which is strongly influenced by Taiwanese Hokkien; mostly used by elderlies" and having no -- English Wikipedia article (but see w:zh:臺灣國語). m["cmn-TW"] = { "Taiwanese Mandarin", 262828, "cmn", } -- FIXME: Temporary. Appears to be a subdialect of Wu-Tian Mandarin, in turn a subdialect of Southwestern Mandarin. -- Given the code cmn-xwu in the Linguist List. m["cmn-wuh"] = { "Wuhan Mandarin", 11124731, "cmn-sow", aliases = {"Wuhanese"}, } -- FIXME: Temporary. Appears to be a subdialect of Lanyin Mandarin. m["cmn-xin"] = { "Xining Mandarin", nil, "cmn-lan", } -- FIXME: Temporary. m["cmn-yan"] = { "Yangzhou Mandarin", nil, "cmn-jhu", } ------------- Cantonese varieties ------------- -- FIXME: Temporary. m["yue-gua"] = { "Guangzhou Cantonese", nil, "yue", } -- FIXME: Temporary. Given the codes yue-yue or yue-can in the Linguist List. m["yue-HK"] = { "Hong Kong Cantonese", 5894342, "yue", } -- FIXME: Temporary. FIXME: How does this differ from "Written vernacular Cantonese"? m["yue-lit"] = { "Literary Cantonese", 2472605, "yue", } ------------- Wu varieties ------------- m["wuu-han"] = { "Hangzhounese", 5648144, "wuu", } m["wuu-nin"] = { "Ningbonese", 3972199, "wuu", } -- FIXME: Temporary. m["wuu-nor"] = { "Northern Wu", 7675988, "wuu", aliases = {"Taihu Wu"}, } -- FIXME: Temporary? Subvariety of Taihu Wu. NOTE: "chm" stands for Chongming, the main dialect, to avoid a conflict -- with Shanghainese. m["wuu-chm"] = { "Shadi Wu", 6112340, "wuu-nor", } m["wuu-sha"] = { "Shanghainese", 36718, "wuu-nor", } m["wuu-suz"] = { "Suzhounese", 831744, "wuu-nor", } -- FIXME: Temporary. May be converted into a full language and/or split. m["wuu-wen"] = { "Wenzhounese", 710218, "wuu", } ------------- Xiang varieties ------------- m["hsn-lou"] = { "Loudi Xiang", 10943823, "hsn-old", } m["hsn-hya"] = { "Hengyang Xiang", 20689035, "hsn-hzh", } m["hsn-hzh"] = { "Hengzhou Xiang", nil, "hsn", } m["hsn-new"] = { "New Xiang", 7012696, "hsn", aliases = {"Chang-Yi"}, } m["hsn-old"] = { "Old Xiang", 7085453, "hsn", aliases = {"Lou-Shao"}, } ------------- Hakka varieties ------------- -- FIXME: Temporary. m["hak-dab"] = { "Dabu Hakka", 19855566, "hak", -- formerly hak-TW but seems to be spoken primary in Dabu County in Guangdong } -- FIXME: Temporary. m["hak-eam"] = { "Early Modern Hakka", nil, "hak", } -- FIXME: Temporary. m["hak-hai"] = { "Hailu Hakka", 17038519, "hak", -- often considered a Taiwanese lect but also spoken in [[Shanwei]], [[Guangdong]] } -- FIXME: Temporary. m["hak-HK"] = { "Hong Kong Hakka", 2675834, "hak", } -- FIXME: Temporary. m["hak-hui"] = { "Huiyang Hakka", 16873881, "hak", } -- FIXME: Temporary. m["hak-hui-MY"] = { "Malaysian Huiyang Hakka", nil, "hak-hui", } -- FIXME: Temporary. Similar to and possibly the parent of Sixian Hakka in Taiwan. m["hak-mei"] = { "Meixian Hakka", 839295, "hak", aliases = {"Moiyan Hakka", "Meizhou Hakka"}, } -- FIXME: Temporary. m["hak-six"] = { "Sixian Hakka", 9668261, "hak-TW", } -- FIXME: Temporary. m["hak-TW"] = { "Taiwanese Hakka", 2391532, "hak", } -- FIXME: Temporary. m["hak-zha"] = { "Zhao'an Hakka", 6703311, "hak", aliases = {"Zhangzhou Hakka"}, } -- Southern Min varieties -- m["nan-anx"] = { "Anxi Hokkien", 97064149, "nan-qua", } m["nan-cha"] = { "Changtai Hokkien", nil, "nan-zha", } m["nan-hou"] = { "Houlu Min", 19855492, "nan-dat", } m["nan-hui"] = { "Hui'an Hokkien", 16241797, "nan-qua", } m["nan-jin"] = { "Jinjiang Hokkien", 11089375, "nan-qua", } m["nan-kin"] = { "Kinmenese Hokkien", 56278342, "nan-xia", aliases = {"Kinmen Hokkien"}, } m["nan-med"] = { "Medan Hokkien", 6805114, "nan-zha", } m["nan-pen"] = { "Penang Hokkien", 11120689, "nan-zha", } m["nan-hbl-PH"] = { "Philippine Hokkien", 3236692, "nan-qua", } m["nan-qia"] = { "Qianlu Min", 19842517, "nan-dat", } m["nan-qua"] = { "Quanzhou Hokkien", 2251677, "nan-hbl", aliases = {"Chinchew", "Choanchew"}, } -- FIXME: Temporary? Derived from both Quanzhou and Zhangzhou Hokkien. m["nan-hbl-SG"] = { "Singapore Hokkien", 3846528, "nan-hbl", } m["nan-spm"] = { "Southern Malaysian Hokkien", 7570322, "nan-qua", aliases = {"Southern Malaysia Hokkien", "Southern Peninsular Malaysian Hokkien", "Southern Peninsular Malaysia Hokkien"} } m["nan-hbl-TW"] = { "Taiwanese Hokkien", 36778, "nan-hbl", } m["nan-ton"] = { "Tong'an Hokkien", nil, "nan-xia", } m["nan-xia"] = { "Xiamen Hokkien", 68744, "nan-hbl", aliases = {"Amoy", "Amoyese", "Amoynese", "Xiamenese"}, } m["nan-yon"] = { "Yongchun Hokkien", 65118728, "nan-qua", } m["nan-zha"] = { "Zhangzhou Hokkien", 8070492, "nan-hbl", aliases = {"Changchew", "Chiangchew", "Changchow"}, } m["nan-zho"] = { "Zhao'an Hokkien", 65118728, "nan-zha", aliases = {"Zhao'an", "Chawan", "Chawan Hokkien"}, } m["nan-zhp"] = { "Zhangping Hokkien", 15937822, "nan-zha", } ------------- Other Min varieties ------------- -- FIXME: Temporary. Affiliation within Min uncertain; some combination of Eastern and Southern. m["zhx-zho"] = { "Zhongshan Min", 8070958, "zh", } ------------- Other Chinese varieties ------------- -- FIXME: Temporary. Affiliation within Chinese uncertain; possibly Yue. m["zhx-dan"] = { "Danzhou Chinese", 2578935, "zh", } ------------- Chinese romanization varieties ------------- -- [[Wiktionary:Information desk/2022/June#Etymology Coding Issue]] -- [[Wiktionary:Grease pit/2022/June#Transliteration Systems in Etymologies 2]] m["cmn-pinyin"] = { "Hanyu Pinyin", 42222, "cmn", aliases = {"Pinyin"}, } m["cmn-tongyong"] = { "Tongyong Pinyin", 700739, "cmn", } m["cmn-wadegiles"] = { "Wade–Giles", 208442, "cmn", aliases = {"Wade-Giles", "Wade Giles"}, } m["zh-postal"] = { "Postal Romanization", 151868, "zh", } -- Chinese cyrillization m["cmn-palladius"] = { "Palladius", 1234239, "cmn", aliases = {"Palladius system"}, } ----------------------------------------------------- -- Tibetic varieties -- ----------------------------------------------------- m["adx"] = { "Amdo Tibetan", 56509, "bo", } m["kbg"] = { "Khamba", 12952626, "bo", } m["khg"] = { "Khams Tibetan", 56601, "bo", } m["tsk"] = { "Tseku", 11159532, "bo", } ---------------------------------------------------------------------------------------------------------------------- -- Tai-Kadai varieties -- ---------------------------------------------------------------------------------------------------------------------- m["th-old"] = { "သေံတြေံ", nil, "tai-swe-pro", wikipedia_article = "Thai language#Old Thai", } m["th-suk"] = { "သူခိုဝ်ထိုၚ် သေံတြေံ", -- 1238-1438. Cannot use "Sukhothai Thai" as Sukhothai is the current city and "Sukhothai Thai" is a lect. nil, "th-old", aliases = {"Sukhothai Siamese"}, wikipedia_article = "Thai language#Old Thai", } m["th-ayu"] = { "အယုဒ္ဓယ သေံတြေံ", -- 1351-1767. Cannot use "Ayutthaya Thai" as Ayutthaya is the current city. nil, "th-old", aliases = {"Ayutthaya Siamese"}, wikipedia_article = "Thai language#Old Thai", } --[[ m["th-new"] = { "Hacked Thai", -- temporary for testing new translit/display methods nil, "th", translit = "User:Benwing2/th-scraping-translit", display_text = "User:Benwing2/th-scraping-translit", strip_diacritics = "User:Benwing2/th-scraping-translit", preprocess_links = "User:Benwing2/th-scraping-translit", } ]] m["tai-shz"] = { "Shangsi Zhuang", 13216, "za", } ---------------------------------------------------------------------------------------------------------------------- -- Turkic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["trk-cmn-pro"] = { "Proto-Common Turkic", 1126028, "trk-pro", } m["trk-ogr-pro"] = { "Proto-Oghur", 1422731, "trk-pro", family = "trk-ogr", } m["trk-bul-pro"] = { "Proto-Bulgar", nil, "trk-ogr-pro", } m["trk-ogz-pro"] = { "Proto-Oghuz", 494600, "trk-pro", family = "trk-ogz", aliases = {"Southwestern Common Turkic"}, } m["crh-dbj"] = { "Dobrujan Tatar", 12811566, "crh", aliases = {"Romanian Tatar"}, } m["cv-ana"] = { "Anatri Chuvash", nil, "cv", aliases = {"Anatri", "Lower Chuvash"}, } m["cv-mid"] = { "Middle Chuvash", nil, "cv", ancestors = "cv-old", } m["cv-old"] = { "Old Chuvash", nil, "cv", ancestors = "xbo-vol", } m["cv-vir"] = { "Viryal Chuvash", 4278332, "cv", aliases = {"Viryal", "Upper Chuvash"}, } m["kjh-fyu"] = { "Fuyu Kyrgyz", 2598963, "kjh", aliases = {"Fuyu Kirgiz", "Fuyu Kirghiz", "Manchurian Kyrgyz", "Manchurian Kirgiz", "Manchurian Kirghiz"}, } m["klj-arg"] = { "Arghu", 33455, "klj", ancestors = "trk-cmn-pro", } m["otk-kir"] = { "Old Kirghiz", 83142, "otk", aliases = {"Yenisei Turkic", "Yenisei Kyrgyz"}, } m["otk-ork"] = { "Orkhon Turkic", 31295480, "otk", } m["qwm-cum"] = { "Cuman", 1075050, "qwm", aliases = {"Kuman", "Polovtsian", "Polovcian"}, } m["qwm-arm"] = { "Armeno-Kipchak", 2027503, "qwm", ancestors = "qwm-cum", aliases = {"Xıpçaχ tili", "Tatarça"}, } m["qwm-mam"] = { "Mamluk-Kipchak", 4279942, "qwm", aliases = {"Mameluk-Kipchak"}, } m["az-cls"] = { "Classical Azerbaijani", nil, "az", aliases = {"Classical Azeri"}, } m["qxq"] = { "Qashqai", 13192, "az", aliases = {"Qaşqay", "Qashqayi", "Kashkai", "Kashkay"}, } m["tr-CY"] = { "Cypriot Turkish", 7917392, "tr", } m["uz-afg"] = { -- NOTE: has ISO 639-3 code uzs assigned to it. "Afghan Uzbek", 1066787, "uz", aliases = {"Southern Uzbek"}, translit = "uz-afg-translit", } m["xbo-dan"] = { "Danube Bulgar", nil, "xbo", } m["xbo-vol"] = { "Volga Bulgar", nil, "xbo", } ---------------------------------------------------------------------------------------------------------------------- -- Uralic varieties -- ---------------------------------------------------------------------------------------------------------------------- m["fiu-pro"] = { "ဖေန်နဝ်-ဥူဂရေတ်-အခိုက်ကၞာ", 79890, "urj-pro", } m["urj-fpr-pro"] = { "ဖေန်နဝ်-ပဵုမေတ်-အခိုက်ကၞာ", nil, "urj-pro", } m["krl-nor"] = { "North Karelian", 125501196, "krl", } m["krl-sou"] = { "South Karelian", 129812730, "krl", } m["mns-eas"] = { "Eastern Mansi", 30311755, "mns-cen", } m["mns-wes"] = { "Western Mansi", 30311756, "mns-cen", } ---------------------------------------------------------------------------------------------------------------------- -- Yeneseian varieties -- ---------------------------------------------------------------------------------------------------------------------- m["qfa-yke-pro"] = { "Proto-Ketic", nil, "qfa-yen-pro", family = "qfa-yke", } m["qfa-yko-pro"] = { "Proto-Kottic", nil, "qfa-yen-pro", family = "qfa-yko", } m["qfa-yrn-pro"] = { "Proto-Arinic", nil, "qfa-yen-pro", family = "qfa-yrn", } m["qfa-ypm-pro"] = { "Proto-Pumpokolic", nil, "qfa-yen-pro", family = "qfa-ypm", } ---------------------------------------------------------------------------------------------------------------------- -- Miscellaneous varieties -- ---------------------------------------------------------------------------------------------------------------------- m["mul-tax"] = { "taxonomic name", 522190, "mul", } ----------------------------------------------------- -- Elamite varieties -- ----------------------------------------------------- m["elx-old"] = { "Old Elamite", nil, "elx", } m["elx-mid"] = { "Middle Elamite", nil, "elx", } m["elx-neo"] = { "Neo-Elamite", nil, "elx", } m["elx-ach"] = { "Achaemenid Elamite", nil, "elx", } ----------------------------------------------------- -- Substrates -- ----------------------------------------------------- -- Pre-Roman substrates m["qsb-ibe"] = { "Paleo-Hispanic", 246801, "und", family = "qfa-sub", aliases = {"Palaeo-Hispanic", "Paleohispanic", "Palaeohispanic", "Paleo-Iberian", "Palaeo-Iberian"}, } m["qsb-bal"] = { "Paleo-Balkan", 1815070, "und", family = "qfa-sub", aliases = {"Palaeo-Balkan", "Paleobalkan", "Palaeobalkan"}, } m["xaq"] = { "Aquitanian", 500522, "euq-pro", family = "euq", } return require("Module:languages").finalizeData(m, "language", true) iyvt9abmwe7zqrqlwk1varxcdr3nl39 မဳဒဳယာဝဳကဳ:Common.js 8 2087 397895 396792 2026-07-07T06:13:46Z 咽頭べさ 33 397895 javascript text/javascript /** * Keep code in MediaWiki:Common.js to a minimum as it is unconditionally * loaded for all users on every wiki page. If possible create a gadget that is * enabled by default instead of adding it here (since gadgets are fully * optimized ResourceLoader modules with possibility to add dependencies etc.) * * Since Common.js isn't a gadget, there is no place to declare its * dependencies, so we have to lazy load them with mw.loader.using on demand and * then execute the rest in the callback. In most cases these dependencies will * be loaded (or loading) already and the callback will not be delayed. In case a * dependency hasn't arrived yet it'll make sure those are loaded before this. */ "use strict"; // [[Category:Wiktionary scripts]] <nowiki> /*jshint shadow:true, undef:true, latedef:true, unused:true, esversion:3 */ /*global window, jQuery, mw, importScript, importStylesheet, $ */ /** [[WT:PREFS]] v2.0 **/ // Note: copied into Mobile.js - please keep in sync try { (function () { var prefs; try { prefs = window.localStorage.getItem("AGprefs"); } catch (e) { prefs = jQuery.cookie("AGprefs"); } prefs = prefs && JSON.parse(prefs); if (mw.config.get("wgUserGroups").indexOf("autoconfirmed") !== -1) return; if (mw.config.get("wgUserGroups").indexOf("user") === -1) { // XXX: [[Wiktionary:Preferences/V2]] is just a temporary page mw.loader.using(["mediawiki.util"], function () { mw.util.addPortletLink( mw.config.get("skin") === "vector-2022" ? "p-vector-user-menu-overflow" : "p-personal", mw.util.getUrl("Wiktionary:Preferences for users without an account"), "Preferences", "pt-agprefs", "Personalise Wiktionary (settings are kept per-browser).", "", document.getElementById("pt-createaccount-2") || document.getElementById("pt-createaccount") ); }); if ( mw.config.get("wgAction") === "view" && mw.config.get("wgPageName") === "Wiktionary:Preferences_for_users_without_an_account" ) { mw.loader.load("ext.gadget.AGprefs"); // [[MediaWiki:Gadget-AGprefs.js]] } } if (!prefs) return; mw.loader.state( "wiktionary_this_gadget_has_been_disabled_by_the_user", "missing" ); for (var key in prefs.modules) { if (prefs.modules[key]) { mw.loader.load([key]); } else { // unavoidable race condition. to prevent it, every enabled-by-default gadget should have "site" as a dependency if (mw.loader.getState(key) !== "ready") { mw.loader.moduleRegistry[key].dependencies.push( "wiktionary_this_gadget_has_been_disabled_by_the_user" ); mw.loader.state(key, "missing"); } else { // XXX mw.log.warn( key + " could not be disabled; make sure it has 'site' declared as a dependency" ); } } } for (var key in prefs.sheets) { importStylesheet("MediaWiki:Gadget-" + key); } for (var key in prefs.scripts) { importScript("MediaWiki:Gadget-" + key); } if (mw.config.get("wgUserGroups").indexOf("user") !== -1) mw.loader.using(["mediawiki.api"], function () { var changes = []; for (var key in prefs.gadgets) changes.push( "gadget-" + key + "=" + (prefs.gadgets[key] ? "1" : "0") ); new mw.Api() .postWithToken("options", { action: "options", change: changes.join("|") }) .then(function () { jQuery.cookie("AGprefs", null); try { window.localStorage.removeItem("AGprefs"); } catch (e) { /* */ } mw.notify( jQuery( '<b>Your <a href="/wiki/Wiktionary:Preferences/V2">per-browser preferences</a> have been migrated</b><br/><br/>' + 'From now on, you should use your <a href="/wiki/Special:Preferences">user preferences page</a>. ' + "Preferences will no longer apply after you log out." ) ); }); }); })(); } catch (e) { mw.log.warn(e); } mw.loader.using("mediawiki.util").done(function () { /** &withmodule= query parameter **/ if (mw.util.getParamValue("withmodule")) mw.loader.load(mw.util.getParamValue("withmodule").split(",")); /** &preloadtext= and &preloadminor= **/ if (mw.config.get("wgAction") === "edit") jQuery(document).ready(function () { var wpTextbox1 = document.getElementById("wpTextbox1"); var wpMinoredit = document.getElementById("wpMinoredit"); if (!wpTextbox1) return; var preloadtext = mw.util.getParamValue("preloadtext"); var preloadminor = mw.util.getParamValue("preloadminor"); if (preloadtext && !wpTextbox1.value) wpTextbox1.value = preloadtext; if (preloadminor !== null && wpMinoredit) wpMinoredit.checked = !/^(0|false|no|)$/i.test(preloadminor); }); }); // == "Did you mean" auto redirect == /** * This will redirect in 3 seconds if a link enclosed in id="did-you-mean" * is found, and add the text "Auto-redirected from X" under the top header * if a rdfrom is passed in the get parameters. * Pages with wynn ([[ƿ]]) will be redirected immediately. **/ $.when(mw.loader.using(["user", "mediawiki.util"]), $.ready).done(function () { if (window.disableAutoRedirect) return; var rdFromValue = mw.util.getParamValue("rdfrom"); if (rdFromValue) { $("#siteSub").after( $("<div>") .attr("id", "contentSub") .append(document.createTextNode("(ပရေၚ်ပြံၚ်လှာဲဂၠံၚ်အဝ်တဝ်နူကဵု ")) .append( $("<a>", { href: mw.util.getUrl(rdFromValue, { redirect: "no" }), addClass: "new" }).text(rdFromValue) ) .append(document.createTextNode(")")) ); } else { // Redirect as quickly as possible from [[ƿ]] title to [[w]] title. var pageTitle = mw.config.get("wgTitle"); var isWynnTitle = /ƿ/i.test(pageTitle); var didYouMean = $("#did-you-mean a").html(); var target = didYouMean ? didYouMean : isWynnTitle ? $("#go-to-search-page a").html() : null; var timeout = isWynnTitle ? 0 : 3000; window.setTimeout(function () { var canRedirect = mw.util.getParamValue("redirect") != "no"; var action = mw.config.get("wgAction"); if ( target && target !== pageTitle && canRedirect && !window.disableAutoRedirect && (action == "view" || (isWynnTitle && action == "edit")) && mw.config.get("wgArticleId") === 0 && mw.config.get("wgNamespaceNumber") === 0 && !/Redirected from/.test(jQuery("#contentSub").html()) ) { window.location = mw.util.getUrl(target, { rdfrom: pageTitle }); } }, timeout); } }); /* == [[WT:FEED]] == */ // used to be [[User:Conrad.Irwin/feedback.js]] $.when(mw.loader.using("mediawiki.util"), $.ready).done(function () { var fb_comment_url = mw.util.getUrl("Wiktionary:Feedback", { action: "edit", section: "new", preload: "Wiktionary:Feedback/preload", editintro: "Wiktionary:Feedback/intro", preloadtitle: "[[:" + mw.config.get("wgPageName") + "]]" }); var fb_comment = "If you have time, leave us a note."; if (mw.config.get("skin") === "vector-2022") { var vectorMenuContent = $("<a>") .attr("href", fb_comment_url) .text(fb_comment) .appendTo($("<li>").addClass("mw-list-item")) .parent() .appendTo($("<ul>").addClass("vector-menu-content-list")) .parent() .appendTo($("<div>").addClass("vector-menu-content")) .parent(); var vectorMenuHeading = $("<div>") .addClass("vector-menu-heading") .text("Feedback"); var vectorMenu = $("<div>") .addClass("vector-menu mw-portlet mw-portlet-navigation") .attr("id", "p-feedback") .append(vectorMenuHeading) .append(vectorMenuContent); vectorMenu.appendTo($("#vector-main-menu")); } else { $("<a>") .attr("href", fb_comment_url) .text(fb_comment) .appendTo($("<p>").css("font-size", "80%")) .parent() .appendTo($("<div>").addClass("body")) .parent() .before($("<h3>Feedback</h3>")) .appendTo($("<div>").addClass("portal expanded").attr("id", "p-feedback")) .parent() .appendTo($("#mw-panel")); } }); // Various fixes for the trees generated by [[Module:family tree]]. $(function () { // Show the top toggle. $(".familytree-toptoggle").css("display", ""); // Initialize the text of the toggles. $(".familytree") .get() .forEach(function (tree) { var isCollapsed = tree.classList.contains("mw-collapsed"); var toggles = $(tree).find(".familytree-toggle"); if (toggles[0]) { var customToggleClass = Array.prototype.filter.call( toggles[0].classList, function (className) { return className.indexOf("mw-customtoggle") === 0; } )[0]; if (customToggleClass) { var toggledElement = $( "#" + customToggleClass.replace( "mw-customtoggle", "mw-customcollapsible" ) ); if (toggledElement) { toggles.text( toggledElement.data(isCollapsed ? "expandtext" : "collapsetext") ); } } } }); // Change the text in the custom toggles generated by [[Module:family tree]] // when they are clicked. $(".mw-collapsible").on( "beforeExpand.mw-collapsible beforeCollapse.mw-collapsible", function (event) { if (this.id.indexOf("mw-customcollapsible") === 0) { var toggle = $( "." + this.id.replace("mw-customcollapsible", "mw-customtoggle") ); if (event.type === "beforeExpand") { toggle.text(this.dataset.collapsetext); } else { // beforeCollapse toggle.text(this.dataset.expandtext); } event.stopPropagation(); } } ); }); // </nowiki> de3nvp3cf2run6slvyvmh7p1ceibrtv 397896 397895 2026-07-07T06:21:19Z 咽頭べさ 33 397896 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // JavaScript font detect code begins /** * JavaScript code to detect available availability of a * particular font in a browser using JavaScript and CSS. * * Author : Lalit Patel * Website: http://www.lalit.org/lab/jsoncookies * License: Creative Commons Attribution-ShareAlike 2.5 * http://creativecommons.org/licenses/by-sa/2.5/ * Version: 0.1 * Updated: Aug 11, 2007 10:09am * */ /** * Actual function that does all the work. Returns an array with all the info. * My Assumption is that most of the browsers will have arial set as their default sans-serif font. */ var Detector = function(){ var h = document.getElementsByTagName("BODY")[0]; var d = document.createElement("DIV"); var s = document.createElement("SPAN"); d.appendChild(s); d.style.fontFamily = "Arial"; //font for the parent element DIV. s.style.fontFamily = "Arial"; //arial font used as a comparator. s.style.fontSize = "72px"; //we test using 72px font size, we may use any size. I guess larger the better. s.innerHTML = "ကကကကကကကကကကၚ"; //we use က for maximum width. And we use a င so that the same matching fonts can get separated h.appendChild(d); var defaultWidth = s.offsetWidth; //now we have the defaultWidth var defaultHeight = s.offsetHeight; //and the defaultHeight, we compare other fonts with these. h.removeChild(d); /* test * params: * font - name of the font you wish to detect * return: * f[0] - Input font name. * f[1] - Computed width. * f[2] - Computed height. * f[3] - Detected? (true/false). */ function test(font) { h.appendChild(d); var f = []; f[0] = s.style.fontFamily = font; // Name of the font s.style.innerHTML = "ကကကကကကကကကကၚ" s.style.fontSize = "72px"; h.appendChild(d); f[1] = s.offsetWidth; // Width f[2] = s.offsetHeight; // Height h.removeChild(d); font = font.toLowerCase(); if (font == "arial" || font == "sans-serif") { f[3] = true; // to set arial and sans-serif true } else { f[3] = (f[1] != defaultWidth && f[2] != defaultHeight); // Detected? } return f; } this.test = test; } // Create new instance of Detector and pass each U51 font. // Update table with result[3] function detectFont(){ d = new Detector; result = d.test("Pyidaungsu"); var p = document.getElementById("Masterpiece Uni Sans"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Yunghkio"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] } $(detectFont); // JavaScript font detect code ends /* Including extra .js pages */ // switches for scripts // var load_extratabs = true; var load_edittools = true; /* Conflicts with ULS - [[User:Nikerabbit]] // extra drop down menu on editing for adding special characters importScript( 'MediaWiki:Edittools.js' ); importScript( 'MediaWiki:keyboard.js' ); */ // == "Did you mean" auto redirect in 3 seconds == /** * doRedirect will redirect if a did you mean box is found, and create a * "redirected from X" if a rdfrom is passed in the get parameters **/ $.when(mw.loader.using("mediawiki.util"), $.ready).done(function(){ var rdFromValue = mw.util.getParamValue("rdfrom"); if (rdFromValue) { rdFromValue = decodeURIComponent(rdFromValue); $('#siteSub').after( $('<div>').attr("id", 'contentSub') .append(document.createTextNode("(Auto-redirected from ")) .append($('<a>', { href: mw.util.getUrl(rdFromValue, {redirect:"no"}), addClass: 'new' }).text(rdFromValue)) .append(document.createTextNode(")"))); } else { window.setTimeout(function () { var target = $('#did-you-mean a').html(); var pagetitle = mw.config.get("wgTitle"); //$('h1').first().text().trim(); var canRedirect = mw.util.getParamValue("redirect") != "no"; if (target && target !== pagetitle && canRedirect && (jQuery.cookie('WiktionaryDisableAutoRedirect') != 'true') && mw.config.get("wgAction") == "view" && mw.config.get('wgArticleId') === 0 && mw.config.get('wgNamespaceNumber') === 0 && !/Redirected from/.test(jQuery('#contentSub').html()) ) { window.location = mw.util.getUrl(target, { rdfrom: pagetitle }); } }, 3000); } }); ovvcchmngm2zup74xeqnyckjuqvmb10 397897 397896 2026-07-07T06:22:15Z 咽頭べさ 33 397897 javascript text/javascript /* Any JavaScript here will be loaded for all users on every page load. */ // JavaScript font detect code begins /** * JavaScript code to detect available availability of a * particular font in a browser using JavaScript and CSS. * * Author : Lalit Patel * Website: http://www.lalit.org/lab/jsoncookies * License: Creative Commons Attribution-ShareAlike 2.5 * http://creativecommons.org/licenses/by-sa/2.5/ * Version: 0.1 * Updated: Aug 11, 2007 10:09am * */ /** * Actual function that does all the work. Returns an array with all the info. * My Assumption is that most of the browsers will have arial set as their default sans-serif font. */ var Detector = function(){ var h = document.getElementsByTagName("BODY")[0]; var d = document.createElement("DIV"); var s = document.createElement("SPAN"); d.appendChild(s); d.style.fontFamily = "Arial"; //font for the parent element DIV. s.style.fontFamily = "Arial"; //arial font used as a comparator. s.style.fontSize = "72px"; //we test using 72px font size, we may use any size. I guess larger the better. s.innerHTML = "ကကကကကကကကကကၚ"; //we use က for maximum width. And we use a င so that the same matching fonts can get separated h.appendChild(d); var defaultWidth = s.offsetWidth; //now we have the defaultWidth var defaultHeight = s.offsetHeight; //and the defaultHeight, we compare other fonts with these. h.removeChild(d); /* test * params: * font - name of the font you wish to detect * return: * f[0] - Input font name. * f[1] - Computed width. * f[2] - Computed height. * f[3] - Detected? (true/false). */ function test(font) { h.appendChild(d); var f = []; f[0] = s.style.fontFamily = font; // Name of the font s.style.innerHTML = "ကကကကကကကကကကၚ" s.style.fontSize = "72px"; h.appendChild(d); f[1] = s.offsetWidth; // Width f[2] = s.offsetHeight; // Height h.removeChild(d); font = font.toLowerCase(); if (font == "arial" || font == "sans-serif") { f[3] = true; // to set arial and sans-serif true } else { f[3] = (f[1] != defaultWidth && f[2] != defaultHeight); // Detected? } return f; } this.test = test; } // Create new instance of Detector and pass each U51 font. // Update table with result[3] function detectFont(){ d = new Detector; result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] result = d.test("Pyidaungsu"); var p = document.getElementById("Pyidaungsu"); if(p) p.innerHTML = result[3] } $(detectFont); // JavaScript font detect code ends /* Including extra .js pages */ // switches for scripts // var load_extratabs = true; var load_edittools = true; /* Conflicts with ULS - [[User:Nikerabbit]] // extra drop down menu on editing for adding special characters importScript( 'MediaWiki:Edittools.js' ); importScript( 'MediaWiki:keyboard.js' ); */ // == "Did you mean" auto redirect in 3 seconds == /** * doRedirect will redirect if a did you mean box is found, and create a * "redirected from X" if a rdfrom is passed in the get parameters **/ $.when(mw.loader.using("mediawiki.util"), $.ready).done(function(){ var rdFromValue = mw.util.getParamValue("rdfrom"); if (rdFromValue) { rdFromValue = decodeURIComponent(rdFromValue); $('#siteSub').after( $('<div>').attr("id", 'contentSub') .append(document.createTextNode("(Auto-redirected from ")) .append($('<a>', { href: mw.util.getUrl(rdFromValue, {redirect:"no"}), addClass: 'new' }).text(rdFromValue)) .append(document.createTextNode(")"))); } else { window.setTimeout(function () { var target = $('#did-you-mean a').html(); var pagetitle = mw.config.get("wgTitle"); //$('h1').first().text().trim(); var canRedirect = mw.util.getParamValue("redirect") != "no"; if (target && target !== pagetitle && canRedirect && (jQuery.cookie('WiktionaryDisableAutoRedirect') != 'true') && mw.config.get("wgAction") == "view" && mw.config.get('wgArticleId') === 0 && mw.config.get('wgNamespaceNumber') === 0 && !/Redirected from/.test(jQuery('#contentSub').html()) ) { window.location = mw.util.getUrl(target, { rdfrom: pagetitle }); } }, 3000); } }); aa85zygw9jdpxzp6vg9z2prokrusysi ကဏ္ဍ:ဝေါဟာအၚ်္ဂလိက်ကၠုၚ်နူဝေါဟာဘာသာဂျာမာန်နေတ် သၟဝ်ကျာဂမၠိုၚ် 14 25584 397921 275912 2026-07-07T09:38:14Z 咽頭べさ 33 咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ကဏ္ဍ:ဝေါဟာအၚ်္ဂလိက်ကၠုၚ်နူဝေါဟာဂျာမာန်နေတ် သၟဝ်ကျာဂမၠိုၚ်]] ဇရေင် [[ကဏ္ဍ:ဝေါဟာအၚ်္ဂလိက်ကၠုၚ်နူဝေါဟာဘာသာဂျာမာန်နေတ် သၟဝ်ကျာဂမၠိုၚ်]] သီုကဵု ဟွံဂွံ ဂိုင်စွံလဝ် မကလေင်ပညုင် 275912 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာအၚ်္ဂလိက်]] cgthbuhht2vx8a42gqbqvafhhdb35kh 𑀅𑀢𑁆𑀣𑀺 0 42565 397900 56492 2026-07-07T06:56:11Z Hiyuune 1535 fix error 397900 wikitext text/x-wiki ==ပါဠိ== ===ပွံင်အက္ခရ်နဲတၞဟ်=== {{pi-alt|Latn=atthi}} ===ကြိယာ=== {{pi-verb}} # {{pi-sc|Brah|atthi}} ==ပရာကရေတ်== ===နိရုတ်=== {{inh+|pra|inc-ash|𑀅𑀲𑁆𑀢𑀺}}၊ နကဵုအဆက်နူ {{inh|pra|sa|अस्ति}} ===ကြိယာ=== {{head|pra|ကြိယာ}} # သကဵုဒှ်။ # သကဵုတန်တဴကၠုၚ်။ ====နာမဝိသေသန==== {{head|pra|နာမဝိသေသန}} # မနွံကဵုပၟိက် ဝါ အၚပ်။ # မသ္ဂေတ်သွဟ်၊ ပိုန်ဒြပ်။ # အာတ်စ၊ ဒုၚ်ဂုဏ်သွက်ဂွံဆာန်ဍူ။ ===နာမ်=== {{head|pra|နာမ်}} # ဗတ်ခရေတ်၊ စောဲဂဗုတ်။ 4xhzh89d8ovv1epxypq1g9z7z2yekef greve 0 296443 397880 2026-07-06T17:04:27Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|grevë|Greve|grevé|grève}} ==ဒိန်နေတ်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|da|grev}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|da|gml|grēve}}၊ နကဵုအဆက်နူ {{der|da|osx|grāvio}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|da|gmw-pro|*grāfijō}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|da|/ɡreːvə/|[ˈɡ..." 397880 wikitext text/x-wiki {{also|grevë|Greve|grevé|grève}} ==ဒိန်နေတ်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|da|grev}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|da|gml|grēve}}၊ နကဵုအဆက်နူ {{der|da|osx|grāvio}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|da|gmw-pro|*grāfijō}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|da|/ɡreːvə/|[ˈɡ̊ʁæːʋə]|[ˈɡ̊ʁæːʊ]}} ===နာမ်=== {{da-noun|n|r}} # တော်ရိုဟ်။ ====လဟုတ်စှ်ေ==== {{da-decl|n|r}} ==အဳတလဳ== ===နိရုတ်=== {{inh+|it|la-eme|grevis|grevem}}၊ နကဵုအဆက်နူ {{inh|it|la|gravis|gravem}} ===ဗွဟ်ရမ္သာၚ်=== {{it-pr|grève}} ====နာမဝိသေသန==== {{it-adj}} # ဇြိုၚ်။ # မရုန်မဵု၊ မရုန်မဵုသဟာသဳ။ ==အၚ်္ဂလိက် အဒေါဝ်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|grefe}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|grǣfa}}, {{m|ang|grǣfe}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|enm|/ˈɡrɛ̝ːv(ə)/}} ===နာမ်=== {{enm-noun}} # ရာပ်၊ ခြုံ၊ အုပ်၊ ကဆဵုဆု၊ တၞံခြုံရာပ်ပံၚ်။ # သပိုဟ်ဂြိုပ်၊ ဂြိုပ်ဆု။ ===မဒုၚ်လွဳစ=== * {{desc|yol|greve}} ==နဝ်ဝေ ဗော်ခ်မဝ်== {{wp|no:}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|gml|grēve}} ကဵု {{inh|nb|non|greifi}} ===နာမ်=== {{nb-noun-m1}} # မတော်ရိုဟ်မွဲသာ် ဝါ မဟိမုအမာတ်။ ==နဝ်ဝေ နဳနိုတ်== {{wp|nn:}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|gml|grēve}} ===နာမ်=== {{nn-noun-m1}} # မတော်ရိုဟ်မွဲသာ် ဝါ မဟိမုအမာတ်။ ==ပဝ်တူဂြဳ== ===ဗွဟ်ရမ္သာၚ်=== {{pt-IPA|gréve}} * {{audio|pt|LL-Q5146 (por)-MedK1-greve.wav|a=<<Brazil>> (<<Caipira>>)}} * {{hyphenation|pt|gre|ve}} ===နာမ်=== {{pt-noun|f}} # ၜုၚ်။ #: {{syn|pt|parede}} ==ရဝ်မေနဳယျာ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ro|[ˈɡreve]}} ===နာမ်=== {{head|ro|noun form|g=f-p}} # {{noun form of|ro|grevă||indef|pl|;|indef|gen//dat|s}} ==သ္ပုၚ်== ===ဗွဟ်ရမ္သာၚ်=== {{es-pr}} ===နာမ်=== {{es-noun|m|-}} # ဍာ်သွခတ်ခတ်။ #: {{syn|es|gravy}} ==သွဳဒေန်== {{wp|sv:}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|sv|grefve||obsolete}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|sv|gml|grēve}}၊ နကဵုအဆက်နူ {{der|sv|osx|grāvio}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|sv|gmw-pro|*garāfijō}} ===ဗွဟ်ရမ္သာၚ်=== * {{audio|sv|Sv-en greve.ogg}} ===နာမ်=== {{head|sv|noun|g=c|feminine|grevinna}} # မတော်ရိုဟ်မွဲသာ်။ # အပ္ဍဲမဟိမုအမာတ်။ ====လဟုတ်စှ်ေ==== {{sv-infl-noun-c-ar|2=grev}} ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|greve}}၊ နကဵုအဆက်နူ {{inh|yol|ang|grǣfa}}, {{m|ang|grǣfe}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|yol|/ɡrɛːv/}} ===နာမ်=== {{head|yol|noun}} # ဂြိုပ်အုပ်သၟတ်၊ ဂြိုၚ်ဆုသၟတ်။ 8rb9dfu7nb7jv4v0j20wpmrageqailx 397891 397880 2026-07-07T05:49:19Z 咽頭べさ 33 397891 wikitext text/x-wiki {{also|grevë|Greve|grevé|grève}} ==ဒိန်နေတ်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|da|grev}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|da|gml|grēve}}၊ နကဵုအဆက်နူ {{der|da|osx|grāvio}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|da|gmw-pro|*grāfijō}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|da|/ɡreːvə/|[ˈɡ̊ʁæːʋə]|[ˈɡ̊ʁæːʊ]}} ===နာမ်=== {{da-noun|n|r}} # တော်ရိုဟ်။ ====လဟုတ်စှ်ေ==== {{da-decl|n|r}} ==အဳတလဳ== ===နိရုတ်=== {{inh+|it|la-eme|grevis|grevem}}၊ နကဵုအဆက်နူ {{inh|it|la|gravis|gravem}} ===ဗွဟ်ရမ္သာၚ်=== {{it-pr|grève}} ====နာမဝိသေသန==== {{it-adj}} # ဇြိုၚ်။ # မရုန်မဵု၊ မရုန်မဵုသဟာသဳ။ ==အၚ်္ဂလိက် အဒေါဝ်== ===ပွံၚ်နဲတၞဟ်=== * {{alter|enm|grefe}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|enm|ang|grǣfa}}, {{m|ang|grǣfe}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|enm|/ˈɡrɛ̝ːv(ə)/}} ===နာမ်=== {{enm-noun}} # ရာပ်၊ ခြုံ၊ အုပ်၊ ကဆဵုဆု၊ တၞံခြုံရာပ်ပံၚ်။ # သပိုဟ်ဂြိုပ်၊ ဂြိုပ်ဆု။ ===မဒုၚ်လွဳစ=== * {{desc|yol|greve}} ==နဝ်ဝေ ဗော်ခ်မဝ်== {{wp|no:}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nb|gml|grēve}} ကဵု {{inh|nb|non|greifi}} ===နာမ်=== {{nb-noun-m1}} # မတော်ရိုဟ်မွဲသာ် ဝါ မဟိမုအမာတ်။ ==နဝ်ဝေ နဳနိုတ်== {{wp|nn:}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|nn|gml|grēve}} ===နာမ်=== {{nn-noun-m1}} # မတော်ရိုဟ်မွဲသာ် ဝါ မဟိမုအမာတ်။ ==ပဝ်တူဂြဳ== ===ဗွဟ်ရမ္သာၚ်=== {{pt-IPA|gréve}} * {{audio|pt|LL-Q5146 (por)-MedK1-greve.wav|a=<<Brazil>> (<<Caipira>>)}} * {{hyphenation|pt|gre|ve}} ===နာမ်=== {{pt-noun|f}} # ၜုၚ်။ #: {{syn|pt|parede}} ==ရဝ်မေနဳယျာ== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|ro|[ˈɡreve]}} ===နာမ်=== {{head|ro|noun form|g=f-p}} # {{noun form of|ro|grevă||indef|pl|;|indef|gen//dat|s}} ==သ္ပုၚ်== ===ဗွဟ်ရမ္သာၚ်=== {{es-pr}} ===နာမ်=== {{es-noun|m|-}} # ဍာ်သွခတ်ခတ်။ #: {{syn|es|gravy}} ==သွဳဒေန်== {{wp|sv:}} ===ပွံၚ်နဲတၞဟ်=== * {{alt|sv|grefve||obsolete}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{der|sv|gml|grēve}}၊ နကဵုအဆက်နူ {{der|sv|osx|grāvio}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|sv|gmw-pro|*garāfijō}} ===ဗွဟ်ရမ္သာၚ်=== * {{audio|sv|Sv-en greve.ogg}} ===နာမ်=== {{head|sv|noun|g=c|ဣတ္တိလိၚ်|grevinna}} # မတော်ရိုဟ်မွဲသာ်။ # အပ္ဍဲမဟိမုအမာတ်။ ====လဟုတ်စှ်ေ==== {{sv-infl-noun-c-ar|2=grev}} ==ယဝ်လာ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|yol|enm|greve}}၊ နကဵုအဆက်နူ {{inh|yol|ang|grǣfa}}, {{m|ang|grǣfe}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|yol|/ɡrɛːv/}} ===နာမ်=== {{head|yol|noun}} # ဂြိုပ်အုပ်သၟတ်၊ ဂြိုၚ်ဆုသၟတ်။ 1ehak267vhqjzebt3s1fcj5tifqokn6 ထာမ်ပလိက်:sv-infl-noun-c-ar 10 296444 397881 2026-07-06T17:07:22Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{sv-decl-noun<!-- -->|base={{{base|{{pagename}}}}}<!-- -->|definitions={{{definitions|}}}<!-- -->|{{{sg-nom-indef|{{{1|{{{base|{{pagename}}}}}}}}}}}<!-- -->|{{{sg-nom-def|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}en}}}<!-- -->|{{{pl-nom-indef|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}ar}}}<!-- -->|{{{pl-nom-def|{{{2|{{{1|{{{base|{{pagename}..." 397881 wikitext text/x-wiki {{#invoke:checkparams|warn}}<!-- Validate template parameters -->{{sv-decl-noun<!-- -->|base={{{base|{{pagename}}}}}<!-- -->|definitions={{{definitions|}}}<!-- -->|{{{sg-nom-indef|{{{1|{{{base|{{pagename}}}}}}}}}}}<!-- -->|{{{sg-nom-def|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}en}}}<!-- -->|{{{pl-nom-indef|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}ar}}}<!-- -->|{{{pl-nom-def|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}arna}}}<!-- -->|{{{sg-gen-indef|{{{1|{{{base|{{pagename}}}}}}}}{{#switch:{{#invoke:string/templates|pos|{{{base|{{pagename}}}}}|-1}}|s=|x=|z=|s}}}}}<!-- -->|{{{sg-gen-def|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}ens}}}<!-- -->|{{{pl-gen-indef|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}ars}}}<!-- -->|{{{pl-gen-def|{{{2|{{{1|{{{base|{{pagename}}}}}}}}}}}{{{fv|}}}arnas}}}<!-- -->}}<!-- --><noinclude>{{documentation}}</noinclude> 2cxcl5kswnhejxq0ulsybiuzrm1sn4w ထာမ်ပလိက်:sv-infl-noun-c-ar/documentation 10 296445 397882 2026-07-06T17:09:03Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} ==Usage== In the most regular case, no arguments are necessary at all: on the page for '''{{l|sv|bil}}''' * <code><nowiki>{{sv-infl-noun-c-ar}}</nowiki></code> * <code><nowiki>{{sv-infl-noun-c-ar|bil|bil}}</nowiki></code> Otherwise, the singular indefinite base and plural base can be given as first and second argument. If the second is missing, the first is taken; if this is also missing,..." 397882 wikitext text/x-wiki {{documentation subpage}} ==Usage== In the most regular case, no arguments are necessary at all: on the page for '''{{l|sv|bil}}''' * <code><nowiki>{{sv-infl-noun-c-ar}}</nowiki></code> * <code><nowiki>{{sv-infl-noun-c-ar|bil|bil}}</nowiki></code> Otherwise, the singular indefinite base and plural base can be given as first and second argument. If the second is missing, the first is taken; if this is also missing, the pagename is used instead: on the page for '''{{l|sv|pojke}}''' * <code><nowiki>{{sv-infl-noun-c-ar|2=pojk}}</nowiki></code> * <code><nowiki>{{sv-infl-noun-c-ar|pojke|pojk}}</nowiki></code> For obsolete spelling, such as '''[[älv|älf]]''' * <code><nowiki>{{sv-infl-noun-c-ar|fv=v}}</nowiki></code> <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်သွဳဒေန်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏနာမ်ဂမၠိုၚ်|c-ar]] </includeonly> 2p1qbpt5cx129h0oqbg2cr7ka0x6z5e ကဏ္ဍ:ကာရန်:သပုၚ်/ebe 14 296446 397883 2026-07-07T05:29:23Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာသပုၚ်|သပုၚ်]] » :ကဏ္ဍ:ကာရန်:..." 397883 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာသပုၚ်|သပုၚ်]] » [[:ကဏ္ဍ:ကာရန်:သပုၚ်|ကာရန်ဂမၠိုၚ်]] » -ebe :စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာသပုၚ်|သပုၚ်]]မနွံကာရန် ebe ဂမၠိုၚ်။ [[ကဏ္ဍ:ကာရန်:သပုၚ်|ebe]] 92l5lml9rfuh379jca52vtz5hk3ymch ကဏ္ဍ:ဝေါဟာနဝ်ဝေ နဳနိုတ်ကၠုၚ်နူဝေါဟာဂျာမာန်အဒေါဝ်မသဝ်ဂမၠိုၚ် 14 296447 397884 2026-07-07T05:33:05Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာနဝ်ဝေ နဳနိုတ်]]" 397884 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာနဝ်ဝေ နဳနိုတ်]] 7zrtfumgtbhrea1h539zukehnpxespe ကဏ္ဍ:ဝေါဟာနဝ်ဝေ ဗော်ခ်မဝ်ကၠုၚ်နူဝေါဟာဂျာမာန်အဒေါဝ်မသဝ်ဂမၠိုၚ် 14 296448 397885 2026-07-07T05:34:18Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာနဝ်ဝေ ဗော်ခ်မဝ်]]" 397885 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာနဝ်ဝေ ဗော်ခ်မဝ်]] tty2vuyyi372v18uy9r8oeo37l9qd6s ကဏ္ဍ:ကာရန်:အဳတခ်လဳ/ɛve 14 296449 397886 2026-07-07T05:37:55Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » :ကဏ္ဍ:ကာ..." 397886 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » [[:ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|ကာရန်ဂမၠိုၚ်]] » -ɛve :စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]]မနွံကာရန် [[ကာရန်:အဳတခ်လဳ/ɛve|-ɛve]] ဂမၠိုၚ်။ [[ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|ɛve]] 7ah9dopmjto34hcy3cdb8h3qrh1jl99 ကာရန်:အဳတခ်လဳ/ɛve 106 296450 397887 2026-07-07T05:42:19Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{rhymes nav|it|ɛ|ve}} ==ဗွဟ်ရမ္သာၚ်== * {{IPA|it|/ˈɛ.ve/|[ˈɛːve]}} * {{hyphenation|it|-è|ve}} ==ကာရန်ဂမၠိုၚ်== ===လိက်သမ္တီ=== * For some, words on this page rhyme with words ending in [[Rhymes:အဳတခ်လဳ/ɛve|-/ɛve/]]. ===ဝဏ္ဏမွဲ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rh..." 397887 wikitext text/x-wiki {{rhymes nav|it|ɛ|ve}} ==ဗွဟ်ရမ္သာၚ်== * {{IPA|it|/ˈɛ.ve/|[ˈɛːve]}} * {{hyphenation|it|-è|ve}} ==ကာရန်ဂမၠိုၚ်== ===လိက်သမ္တီ=== * For some, words on this page rhyme with words ending in [[Rhymes:အဳတခ်လဳ/ɛve|-/ɛve/]]. ===ဝဏ္ဏမွဲ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rhyme-top}} * {{l|it|breve}} * {{l|it|greve}} * {{l|it|leve}} * {{l|it|lieve}} * {{l|it|pieve}} * {{l|it|seve}} * {{l|it|strieve}} * {{l|it|sveve}} {{rhyme-bottom}} ===ဝဏ္ဏၜါ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rhyme-top}} * {{l|it|allieve}} * {{l|it|coeve}} * {{l|it|longeve}} * {{l|it|primeve}} {{rhyme-bottom}} ===ဝဏ္ဏပိ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rhyme-top}} * {{l|it|semibreve}} {{rhyme-bottom}} 1yqeqni2srk0kfg11l80cmmxp4qajpc ကဏ္ဍ:ဝေါဟာအဳတခ်လဳကၠုၚ်နူဝေါဟာလပ်တေန်ခေတ်လဒေါဝ်ဗွဲမပြဟ်ဂမၠိုၚ် 14 296451 397888 2026-07-07T05:44:30Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]]" 397888 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]] gbeqdk32838i2079b24yzbewkbbcs22 ကဏ္ဍ:ဝေါဟာအဳတခ်လဳဂွံလဝ်အာဲကၟာဲနူဝေါဟာလပ်တေန်ခေတ်လဒေါဝ်ဗွဲမပြဟ်ဂမၠိုၚ် 14 296452 397889 2026-07-07T05:45:23Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]]" 397889 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]] gbeqdk32838i2079b24yzbewkbbcs22 ကဏ္ဍ:ဝေါဟာဒိန်နေတ်ကၠုၚ်နူဝေါဟာဂျာမာန်နေတ်လက္ကရဴ-အခိုက်ကၞာဂမၠိုၚ် 14 296453 397890 2026-07-07T05:47:20Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာဒိန်နေတ်]]" 397890 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာဒိန်နေတ်]] 2sn65radkeaqux1jm576cd10nd4dojz မဳဒဳယာဝဳကဳ:UpdateLanguageNameAndCode.js 8 296454 397892 2026-07-07T05:56:40Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "// <nowiki> /* jshint esversion: 8, undef: true */ /* globals $, mw, OO */ mw.loader.using("oojs-ui-core").then(() => { "use strict"; const api = new mw.Api({ timeout: 30 * 1000, // Dirty hack to hopefully get rid of timeout errors. }); const summary = "[[MediaWiki:UpdateLanguageNameAndCode.js|updated]]"; const EXTRA_DATA_SUFFIXES = ["2"]; for (let i = 0; i < 26; i++) { EXTRA_DATA_SUFFIXES.push("3/" + Str..." 397892 javascript text/javascript // <nowiki> /* jshint esversion: 8, undef: true */ /* globals $, mw, OO */ mw.loader.using("oojs-ui-core").then(() => { "use strict"; const api = new mw.Api({ timeout: 30 * 1000, // Dirty hack to hopefully get rid of timeout errors. }); const summary = "[[MediaWiki:UpdateLanguageNameAndCode.js|updated]]"; const EXTRA_DATA_SUFFIXES = ["2"]; for (let i = 0; i < 26; i++) { EXTRA_DATA_SUFFIXES.push("3/" + String.fromCharCode(97 + i)); } EXTRA_DATA_SUFFIXES.push("exceptional"); const updatePageWithTemplateExpansion = async ( title, template, changeTemplateExpansion ) => { await mw.loader.using("mediawiki.api"); try { const data = await api.get({ action: "expandtemplates", title, text: template, prop: "wikitext", }); const expanded = data.expandtemplates.wikitext; const editResponse = await api.edit(title, () => ({ text: changeTemplateExpansion ? changeTemplateExpansion(expanded) : expanded, summary, })); if (editResponse.nochange) { mw.notify(`${title} was up-to-date already.`); } else { mw.notify(`Updated ${title}.`); } } catch (error) { mw.notify("Failed to post!"); console.error(error); } }; const updateLanguageData = async (title, moduleFunction, moduleType) => { await updatePageWithTemplateExpansion( title, `{{#invoke:languages/print|${moduleFunction}|plain|${moduleType}}}` ); return updatePageWithTemplateExpansion( `${title}.json`, `{{#invoke:languages/print|${moduleFunction}|json|${moduleType}}}` ); }; const findBalancedBraceEnd = (content, openBraceIndex) => { let depth = 0; let inString = null; for (let i = openBraceIndex; i < content.length; i++) { const char = content[i]; const prev = i > 0 ? content[i - 1] : ""; if (inString) { if (char === inString && prev !== "\\") { inString = null; } else if (char === "\n" && inString === "-") { inString = null; } continue; } if (char === "-" && content[i + 1] === "-") { inString = "-"; continue; } if (char === '"' || char === "'") { inString = char; continue; } if (char === "{") { depth++; } else if (char === "}") { depth--; if (depth === 0) { return i + 1; } } } return -1; }; const insertExtraStub = (content, code) => { const stub = `\nm["${code}"] = {\n}\n`; const blockPattern = /\nm\["([^"]+)"\]\s*=\s*\{/g; let match; while ((match = blockPattern.exec(content)) !== null) { if (match[1] > code) { return content.slice(0, match.index) + stub + content.slice(match.index); } } const returnMatch = content.match(/\nreturn m\s*$/); if (returnMatch) { return content.slice(0, returnMatch.index) + stub + content.slice(returnMatch.index); } return content.replace(/\s+$/, "") + stub + "\nreturn m\n"; }; const removeExtraEntry = (content, code) => { const escaped = code.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const startPattern = new RegExp(`\\nm\\["${escaped}"\\]\\s*=\\s*\\{`); const match = startPattern.exec(content); if (!match) { return content; } const openBraceIndex = match.index + match[0].length - 1; const endIndex = findBalancedBraceEnd(content, openBraceIndex); if (endIndex < 0) { return content; } let removeEnd = endIndex; if (content[removeEnd] === "\n") { removeEnd++; } return content.slice(0, match.index) + content.slice(removeEnd); }; const syncExtraData = async (suffix) => { const title = `Module:languages/data/${suffix}/extra`; await mw.loader.using("mediawiki.api"); try { const expandData = await api.get({ action: "expandtemplates", title, text: `{{#invoke:languages/print|extra_data_diff|json|${suffix}}}`, prop: "wikitext", }); const diff = JSON.parse(expandData.expandtemplates.wikitext || "{}"); const missing = diff.missing || []; const extraneous = diff.extraneous || []; if (!missing.length && !extraneous.length) { mw.notify(`${title} extra data was up-to-date already.`); return; } const pageData = await api.get({ action: "query", prop: "revisions", rvprop: "content", rvslots: "main", titles: title, }); const page = Object.values(pageData.query.pages)[0]; let text = page.revisions[0].slots.main["*"]; for (const code of extraneous) { text = removeExtraEntry(text, code); } for (const code of missing) { text = insertExtraStub(text, code); } const editResponse = await api.edit(title, () => ({ text, summary, })); if (editResponse.nochange) { mw.notify(`${title} extra data was up-to-date already.`); } else { const parts = []; if (missing.length) { parts.push(`${missing.length} stub(s) added`); } if (extraneous.length) { parts.push(`${extraneous.length} removed`); } mw.notify(`Updated ${title} extra data (${parts.join(", ")}).`); } } catch (error) { mw.notify(`Failed to update ${title} extra data!`); console.error(error); } }; const updateButton = new OO.ui.ButtonWidget({ label: "Update language, etymology language, language family and script modules, language extra data, and Hani-sortkey serialized data module", flags: [ "primary", "progressive", ], }); updateButton.$element.attr("id", "update-module"); updateButton.on("click", async () => { updateButton.setDisabled(true); try { await Promise.all([ updateLanguageData( "Module:languages/code to canonical name", "code_to_name", "language" ), updateLanguageData( "Module:languages/canonical names", "name_to_code", "language" ), updateLanguageData( "Module:etymology languages/code to canonical name", "code_to_name", "etymology" ), updateLanguageData( "Module:etymology languages/canonical names", "name_to_code", "etymology" ), updateLanguageData( "Module:families/code to canonical name", "code_to_name", "family" ), updateLanguageData( "Module:families/canonical names", "name_to_code", "family" ), updateLanguageData( "Module:scripts/code to canonical name", "code_to_name", "script" ), updateLanguageData( "Module:scripts/canonical names", "name_to_code", "script" ), updatePageWithTemplateExpansion( "Module:Hani-sortkey/data/serialized", "{{#invoke:Hani-sortkey/data/serializer|main}}", (expanded) => `return "${expanded}"` ), ]); for (const suffix of EXTRA_DATA_SUFFIXES) { await syncExtraData(suffix); } } catch (error) { console.error(error); } finally { updateButton.setDisabled(false); } }); // Insert the button before the first paragraph in .mw-parser-output. $(".mw-parser-output p:first-of-type").before(updateButton.$element); }); // </nowiki> 2go6zxke9orl8jlah1vh5qnskuy4u7m မဳဒဳယာဝဳကဳ:UpdateLanguageNameAndCode.js/documentation 8 296455 397893 2026-07-07T05:58:31Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} Updates both [[Module:languages/code to canonical name]] and [[Module:languages/canonical names]] when you click a button at the top of one of their documentation pages. It also updates their JSON variants [[Module:languages/code to canonical name.json]] and [[Module:languages/canonical names.json]]. <includeonly> ကဏ္ဍ:အက္ခရ်ဝိတ်ရှေန်နရဳဂမ..." 397893 wikitext text/x-wiki {{documentation subpage}} Updates both [[Module:languages/code to canonical name]] and [[Module:languages/canonical names]] when you click a button at the top of one of their documentation pages. It also updates their JSON variants [[Module:languages/code to canonical name.json]] and [[Module:languages/canonical names.json]]. <includeonly> [[ကဏ္ဍ:အက္ခရ်ဝိတ်ရှေန်နရဳဂမၠိုၚ်|languageNameAndCode]] </includeonly> r6lmcnzwaxy3req4uaicas94mmdd6gz မဳဒဳယာဝဳကဳ:Mobile.js 8 296456 397894 2026-07-07T06:00:16Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "/** As with common.js, any code here should be kept to a minimum. */ 'use strict'; // [[Category:Wiktionary scripts]] <nowiki> /*jshint shadow:true, undef:true, latedef:true, unused:true */ /*global window, jQuery, mw, importScript, importStylesheet, $ */ /********************* Copied from Common.js as of [[Special:Permalink/81324584]] 17:14, 19 August 2024 ***********************/ /** [[WT:PREFS]] v2.0 **/ // Note:..." 397894 javascript text/javascript /** As with common.js, any code here should be kept to a minimum. */ 'use strict'; // [[Category:Wiktionary scripts]] <nowiki> /*jshint shadow:true, undef:true, latedef:true, unused:true */ /*global window, jQuery, mw, importScript, importStylesheet, $ */ /********************* Copied from Common.js as of [[Special:Permalink/81324584]] 17:14, 19 August 2024 ***********************/ /** [[WT:PREFS]] v2.0 **/ // Note: copied from Common.js - please keep in sync try { (function() { var prefs; try { prefs = window.localStorage.getItem('AGprefs'); } catch (e) { prefs = jQuery.cookie('AGprefs'); } prefs = prefs && JSON.parse(prefs); if (mw.config.get('wgUserGroups').indexOf('autoconfirmed') !== -1) return; if (mw.config.get('wgUserGroups').indexOf('user') === -1) { // XXX: [[Wiktionary:Preferences/V2]] is just a temporary page mw.loader.using(['mediawiki.util'], function() { mw.util.addPortletLink('p-personal', mw.util.getUrl('Wiktionary:Preferences for users without an account'), 'Preferences', 'pt-agprefs', 'Personalise Wiktionary (settings are kept per-browser).', '', document.getElementById('pt-createaccount')); }); if ((mw.config.get('wgAction') === 'view') && (mw.config.get('wgPageName') === 'Wiktionary:Preferences_for_users_without_an_account')) { mw.loader.load('ext.gadget.AGprefs'); // [[MediaWiki:Gadget-AGprefs.js]] } } if (!prefs) return; mw.loader.state('wiktionary_this_gadget_has_been_disabled_by_the_user', 'missing'); for (var key in prefs.modules) { if (prefs.modules[key]) { mw.loader.load([key]); } else { // unavoidable race condition. to prevent it, every enabled-by-default gadget should have "site" as a dependency if (mw.loader.getState(key) !== 'ready') { mw.loader.moduleRegistry[key].dependencies.push('wiktionary_this_gadget_has_been_disabled_by_the_user'); mw.loader.state(key, 'missing'); } else { // XXX mw.log.warn(key + " could not be disabled; make sure it has 'site' declared as a dependency"); } } } for (var key in prefs.sheets) { importStylesheet('MediaWiki:Gadget-' + key); } for (var key in prefs.scripts) { importScript('MediaWiki:Gadget-' + key); } if (mw.config.get('wgUserGroups').indexOf('user') !== -1) mw.loader.using([ 'mediawiki.api'], function() { var changes = []; for (var key in prefs.gadgets) changes.push('gadget-' + key + '=' + (prefs.gadgets[key] ? '1' : '0')); new mw.Api().postWithToken('options', { action: 'options', change: changes.join('|') }).then(function() { jQuery.cookie('AGprefs', null); try { window.localStorage.removeItem('AGprefs'); } catch (e) { /* */ } mw.notify( jQuery('<b>Your <a href="/wiki/Wiktionary:Preferences/V2">per-browser preferences</a> have been migrated</b><br/><br/>' + 'From now on, you should use your <a href="/wiki/Special:Preferences">user preferences page</a>. ' + 'Preferences will no longer apply after you log out.') ); }); }); })(); } catch (e) { mw.log.warn(e); } /********************* End copied from Common.js ***********************/ // Make "edit all" the default by stopping `section=0` from getting added to the link. const editButton = document.querySelector("#page-actions-edit > a"); if (editButton) { const mo = new MutationObserver(() => { if (editButton.href.slice(-10) === "&section=0") editButton.href = editButton.href.slice(0, -10); }); mo.observe(editButton, {attributes: true}); } // Auto-expand first section if there is only a single section on the page // Will be superseded by [[phab:T374883]] if that is resolved // See also [[Wiktionary:Beer parlour/2025/January#Automatically expand the first section on mobile]] const headings = document.querySelectorAll(".section-heading.mw-heading2"); if (headings && headings.length === 1 && !headings[0].classList.contains("open-block")) { const containerDiv = document.querySelector("#mw-content-text > div.mw-parser-output"); if (containerDiv) containerDiv.classList.add("collapsible-headings-expanded"); } // </nowiki> 0eea9e7f4zw90p44bsoyuzwoyw79dpx မဳဒဳယာဝဳကဳ:Mobile.js/documentation 8 296457 397898 2026-07-07T06:23:50Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} Any JavaScript here will be loaded for users using the mobile site. It is the equivalent of [[MediaWiki:Common.js]] for the mobile version. <includeonly> [[ကဏ္ဍ:အက္ခရ်ဝိတ်ရှေန်နရဳဂမၠိုၚ်]] </includeonly>" 397898 wikitext text/x-wiki {{documentation subpage}} Any JavaScript here will be loaded for users using the mobile site. It is the equivalent of [[MediaWiki:Common.js]] for the mobile version. <includeonly> [[ကဏ္ဍ:အက္ခရ်ဝိတ်ရှေန်နရဳဂမၠိုၚ်]] </includeonly> 7ero3j16sazooiddqu3plo5f1nc2sia မဳဒဳယာဝဳကဳ:Gadget-BlockInfo.js 8 296458 397899 2026-07-07T06:37:50Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "// {{documentation}} /*jshint undef:true */ /*global jQuery, mw */ (function(){ 'use strict'; var api = new mw.Api(); function el(tag, child, attr, events) { var key, node = document.createElement(tag); if (child) { if (typeof child !== 'object') child = [child]; for (var i = 0; i < child.length; ++i) { var ch = child[i]; if ((ch === void(null)) || (ch === null)) continue; else if (typeof ch..." 397899 javascript text/javascript // {{documentation}} /*jshint undef:true */ /*global jQuery, mw */ (function(){ 'use strict'; var api = new mw.Api(); function el(tag, child, attr, events) { var key, node = document.createElement(tag); if (child) { if (typeof child !== 'object') child = [child]; for (var i = 0; i < child.length; ++i) { var ch = child[i]; if ((ch === void(null)) || (ch === null)) continue; else if (typeof ch !== 'object') ch = document.createTextNode(String(ch)); node.appendChild(ch); } } if (attr) for (key in attr) { node.setAttribute(key, String(attr[key])); } if (events) for (key in events) { node.addEventListener(key, events[key], false); } return node; } function fmtDate(date) { // XXX: uses browser's time zone instead of preferences date = new Date(date); switch (mw.user.options.get('date')) { case 'dmy' : return date.toLocaleTimeString() + ', ' + date.getDate() + ' ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getFullYear(); case 'mdy' : return date.toLocaleTimeString() + ', ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getFullYear() + ', ' + date.getDate(); case 'ymd' : return date.toLocaleTimeString() + ', ' + date.getFullYear() + ' ' + mw.language.months.genitive[date.getMonth()] + ' ' + date.getDate(); case 'default' : return date.toLocaleString(); case 'ISO 8601': return date.toISOString(); } } var wd2iw = { 'metawiki': 'm' }; function buildList(user, callback) { var isAnon = mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user); var rq = api.get({ action: 'query', list: 'blocks' + (isAnon ? '|globalblocks' : '|globalallusers'), // blocks bkip: isAnon ? user : void(window.warranty), bkusers: isAnon ? void(window.warranty) : user, bkprop: 'id|user|range|timestamp|expiry|by|reason|flags', bkdir: 'older', // globalblocks bgip: isAnon ? user : void(window.warranty), bgprop: isAnon ? 'id|address|range|timestamp|expiry|by|reason' : void(window.warranty), bgdir: isAnon ? 'older' : void(window.warranty), // globalallusers agufrom: !isAnon ? user : void(window.warranty), aguto: !isAnon ? user : void(window.warranty), agulimit: !isAnon ? 1 : void(window.warranty), aguprop: !isAnon ? 'lockinfo' : void(window.warranty) }); rq.then(function (result) { var list = el('ul'), item, i; if (result.query.globalallusers && result.query.globalallusers[0] && ('locked' in result.query.globalallusers[0])) { list.appendChild(el('li', [ "This account is globally locked", " (", el('a', "globalauth log", { href: mw.util.getUrl('m:Special:Log/globalauth', { page: 'ညးလွပ်:' + user + '@global' }) }), ")." ])); } for (i = 0; i < result.query.blocks.length; ++i) { item = result.query.blocks[i]; list.appendChild(el('li', [ fmtDate(item.timestamp), ': ', el('a', item.by, { href: mw.util.getUrl('ညးလွပ်:' + item.by) }), " blocked ", el('b', item.user), " (", el('a', 'block log', { href: mw.util.getUrl('Special:Log/block', { page: 'User:' + item.user }) }), "),", ' expiring ', el('b', item.expiry === 'infinity' ? 'never' : fmtDate(item.expiry)), item.reason && " (", item.reason, item.reason && ")", ])); } if (result.query.globalblocks) for (i = 0; i < result.query.globalblocks.length; ++i) { item = result.query.globalblocks[i]; list.appendChild(el('li', [ fmtDate(item.timestamp), ': ', el('a', item.by, { href: mw.util.getUrl(wd2iw[item.bywiki] + ':ညးလွပ်:' + item.by) }), " at ", el('code', item.bywiki), " globally blocked ", el('b', item.address), " (", el('a', "gblblock log", { href: mw.util.getUrl(wd2iw[item.bywiki] + ':Special:Log/gblblock', { page: 'ညးလွပ်:' + item.address }) }), "),", " expiring ", el('b', item.expiry === 'infinity' ? "never" : fmtDate(item.expiry)), item.reason && " (", item.reason, item.reason && ")", ])); } callback(list); }); return rq; } function makeBox(user, relTo) { if (!user) return; relTo = relTo || document.getElementById('mw-content-text'); var afterList, box = el('div', [ el('p', [el('strong', user), ' is currently blocked.']), afterList = el('small', [ el('a', "block log" , { href: mw.util.getUrl('Special:Log/block', { page: 'ညးလွပ်:' + user }) }) ]) ], { 'class': 'mw-warning-with-logexcerpt' }); relTo.rq = buildList(user, function (list) { relTo.rq = null; if (!list.hasChildNodes()) return; box.insertBefore(list, afterList); relTo.parentNode.insertBefore(box, relTo); }); return box; } var user; var wgNamespaceNumber = mw.config.get('wgNamespaceNumber'); var wgNamespaceIds = mw.config.get('wgNamespaceIds'); var wgTitle = mw.config.get('wgTitle'); if ((wgNamespaceNumber & ~1) === wgNamespaceIds.user) { makeBox(wgTitle.replace(/\/.*$/, '')); } else if ((mw.config.get('wgCanonicalSpecialPageName') === 'Contributions') || (mw.config.get('wgCanonicalSpecialPageName') === 'DeletedContributions')) { makeBox(wgTitle.indexOf('/') !== -1 ? wgTitle.replace(/^.*?\//, '') : mw.util.getParamValue('target')); } else if (mw.config.get('wgCanonicalSpecialPageName') === 'Log') { user = mw.util.getParamValue('user'); if (/^[^\/]+\/(block|delete)$/.test(wgTitle)) return; if (wgTitle.indexOf('/') !== -1) user = wgTitle.replace(/^.*\//, ''); makeBox(user); } else if (mw.config.get('wgCanonicalSpecialPageName') === 'Block') { var ipinput = document.getElementById('mw-bi-target'); var relTo = ipinput.form.getElementsByTagName('legend')[0].nextSibling; var warnnode = null; var refresh = function () { if (relTo.rq) relTo.rq.abort(); if (warnnode && warnnode.parentNode) { warnnode.parentNode.removeChild(warnnode); warnnode = null; } if (!ipinput.value) return; warnnode = makeBox(ipinput.value, relTo); }; var tmout; ipinput.addEventListener('input', function () { clearTimeout(tmout); tmout = setTimeout(refresh, 500); }, false); ipinput.addEventListener('change', function () { refresh(); }, false); refresh(); return; } })(); qgioo59n3ypwzff9hjsx2pwxgkm3946 grève 0 296459 397901 2026-07-07T07:00:45Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|Greve|grevë|greve|grevé}} ==ပြၚ်သေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{fr-IPA}} * {{audio|fr|Fr-grève.ogg}} * {{audio|fr|LL-Q150 (fra)-DSwissK-grève.wav|a=<<Switzerland>> (<<Valais>>)}} * {{audio|fr|LL-Q150 (fra)-Poslovitch-grève.wav|a=<<France>> (<<Vosges>>)}} * {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-grève.wav|a=<<France>> (<<Somain>>)}} * {{rhyme|fr|ɛv|s=..." 397901 wikitext text/x-wiki {{also|Greve|grevë|greve|grevé}} ==ပြၚ်သေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{fr-IPA}} * {{audio|fr|Fr-grève.ogg}} * {{audio|fr|LL-Q150 (fra)-DSwissK-grève.wav|a=<<Switzerland>> (<<Valais>>)}} * {{audio|fr|LL-Q150 (fra)-Poslovitch-grève.wav|a=<<France>> (<<Vosges>>)}} * {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-grève.wav|a=<<France>> (<<Somain>>)}} * {{rhyme|fr|ɛv|s=1}} ===နိရုတ်=== {{inh+|fr|la-vul|*grava}}၊ နကဵုအဆက်နူ {{der|fr|cel-gau|*grawa}}၊ နကဵုမဆေၚ်စပ်ကဵုနူ {{der|fr|cel-pro|*grāwā}} ===နာမ်=== {{fr-noun|f}} # ဇဵု (ဆေၚ်စပ်ကဵုၜဳ)၊ သၚ်၊ ပရၚ်ၜဳ။ #: {{syn|fr|rive}} ===နာမ် ၂ === {{fr-noun|f}} # ၜုၚ် (လဟိၚ်ဆေၚ်စပ်ကဵုကမၠောန်)။ ===မဒုၚ်လွဳစ=== * {{desc|ht|grèv}} * {{desc|sq|grevë|bor=1}} * {{desc|eu|greba|bor=1}} * {{desc|lad|grev|bor=1}} * {{desc|pt|greve|bor=1}} * {{desc|ro|grevă|bor=1}} * {{desctree|tr|grev|bor=1}} * {{desc|vi|làm '''reo'''|bor=1}} ===နာမ် ၃ === {{fr-noun|f}} # ဇုတ်မထၟတ်။ ==နဝ်မေံ== ===ပွံၚ်နဲတၞဟ်=== * {{l|nrf|grev}} {{qualifier|Sark}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{inh|nrf|la-vul|-}} {{m|la|*grava}} ===ဗွဟ်ရမ္သာၚ်=== * {{audio|nrf|Jer-Grève.ogg|a=Jersey}} ===နာမ်=== {{nrf-noun|f}} # ပရၚ်ဗ္တဳ။ mr67tad0fs3o978t3hd1rmwgrif8ayp ကဏ္ဍ:ကာရန်:ပြၚ်သေတ်/ɛv 14 296460 397902 2026-07-07T07:03:44Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာပြၚ်သေတ်|ပြၚ်သေတ်]] » :ကဏ္ဍ:..." 397902 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာပြၚ်သေတ်|ပြၚ်သေတ်]] » [[:ကဏ္ဍ:ကာရန်:ပြၚ်သေတ်|ကာရန်ဂမၠိုၚ်]] » -ɛv :စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာပြၚ်သေတ်|ပြၚ်သေတ်]]မနွံကာရန် ɛv ဂမၠိုၚ်။ [[ကဏ္ဍ:ကာရန်:ပြၚ်သေတ်|ɛv]] rlha7wva54feaikzga9nq9c2glbg5rk grevé 0 296461 397903 2026-07-07T07:05:18Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|greve|grevë|Greve|grève}} ==ပြၚ်သေတ်== ===ကြိယာ=== {{fr-past participle}} # {{past participle of|fr|grever}}" 397903 wikitext text/x-wiki {{also|greve|grevë|Greve|grève}} ==ပြၚ်သေတ်== ===ကြိယာ=== {{fr-past participle}} # {{past participle of|fr|grever}} f327pqpypmc6wzck23phksd2jcnygzy grevée 0 296462 397904 2026-07-07T07:05:46Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=f-s}} # {{feminine singular of|fr|grevé}}" 397904 wikitext text/x-wiki ==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=f-s}} # {{feminine singular of|fr|grevé}} m1czp8gk08ts3fbfs61ceit91shjg50 grevés 0 296463 397905 2026-07-07T07:06:25Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|greves|grèves}} ==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=m-p}} # {{masculine plural of|fr|grevé}}" 397905 wikitext text/x-wiki {{also|greves|grèves}} ==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=m-p}} # {{masculine plural of|fr|grevé}} 02gqlmkyg2o7x1uqgry4gvgbnhlydul greves 0 296464 397906 2026-07-07T07:08:43Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|grevés|grèves}} ==ဒိန်နေတ်== ===နာမ်=== {{head|da|noun form|g=c}} # {{inflection of|da|greve||indef|gen|s}} ==ပဝ်တူဂြဳ== ===နာမ်=== {{head|pt|noun form}} # {{plural of|pt|greve}} ==သွဳဒေန်== ===နာမ်=== {{head|sv|noun form}} # {{noun form of|sv|greve||indef|gen|s}}" 397906 wikitext text/x-wiki {{also|grevés|grèves}} ==ဒိန်နေတ်== ===နာမ်=== {{head|da|noun form|g=c}} # {{inflection of|da|greve||indef|gen|s}} ==ပဝ်တူဂြဳ== ===နာမ်=== {{head|pt|noun form}} # {{plural of|pt|greve}} ==သွဳဒေန်== ===နာမ်=== {{head|sv|noun form}} # {{noun form of|sv|greve||indef|gen|s}} 3xvzfw8fhrn6bmqb6pj68du67xnflf0 grèves 0 296465 397907 2026-07-07T07:11:00Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|greves|grevés}} ==ပြၚ်သေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fr|/ɡʁɛːv/}} * {{homophones|fr|grève}} * {{hyphenation|fr|grèves}} ===နာမ်=== {{head|fr|noun form|g=f}} # {{plural of|fr|grève}} ==နဝ်မေံ== ===နာမ်=== {{head|nrf|noun form|g=f-p}} # {{plural of|nrf|grève}}" 397907 wikitext text/x-wiki {{also|greves|grevés}} ==ပြၚ်သေတ်== ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|fr|/ɡʁɛːv/}} * {{homophones|fr|grève}} * {{hyphenation|fr|grèves}} ===နာမ်=== {{head|fr|noun form|g=f}} # {{plural of|fr|grève}} ==နဝ်မေံ== ===နာမ်=== {{head|nrf|noun form|g=f-p}} # {{plural of|nrf|grève}} 2flcdhrguotp9fswr63czkzk61e1m4d grevées 0 296466 397908 2026-07-07T07:12:02Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=f-p}} # {{feminine plural of|fr|grevé}}" 397908 wikitext text/x-wiki ==ပြၚ်သေတ်== ===ကြိယာ=== {{head|fr|past participle form|g=f-p}} # {{feminine plural of|fr|grevé}} 7wjo0lzxtaruzzixbzxulmgao2z2hnd grever 0 296467 397909 2026-07-07T07:44:16Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==ဒိန်နေတ်== ===နာမ်=== {{head|da|noun form|g=c}} # {{infl of|da|greve||indef|p}} ==ပြၚ်သေတ်== ===နိရုတ်=== {{inh+|fr|fro|grever}}၊ နူကဵုဝေါဟာ {{bor|fr|la|gravō|gravāre}} ===ဗွဟ်ရမ္သာၚ်=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-LoquaxFR-grever.wav|a=<<France>> (<<Vosges>>)}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-g..." 397909 wikitext text/x-wiki ==ဒိန်နေတ်== ===နာမ်=== {{head|da|noun form|g=c}} # {{infl of|da|greve||indef|p}} ==ပြၚ်သေတ်== ===နိရုတ်=== {{inh+|fr|fro|grever}}၊ နူကဵုဝေါဟာ {{bor|fr|la|gravō|gravāre}} ===ဗွဟ်ရမ္သာၚ်=== * {{fr-IPA}} * {{audio|fr|LL-Q150 (fra)-LoquaxFR-grever.wav|a=<<France>> (<<Vosges>>)}} * {{audio|fr|LL-Q150 (fra)-WikiLucas00-grever.wav|a=<<France>> (<<Lyon>>)}} * {{audio|fr|LL-Q150 (fra)-Jérémy-Günther-Heinz Jähnick-grever.wav|a=<<France>> (<<Somain>>)}} ===ကြိယာ=== {{fr-verb}} # သကဵုပ္တိုန်ပ္ဍိုက်ကပေါတ်၊ မစွံလ္တူမပ္ဍိုက်ကပေါတ်မွဲသာ်။ # သကဵုစွံလ္တူကေဝ်လျိုၚ် (ဖျုန်ထာၚ်တဲမွဲမွဲသာ်)။ # သကဵုကွက်စွံလ္တူတေံ၊ ကေဝ်လျိုၚ်မသ္ဇိုၚ်လ္တူတေံ။ ====သမ္ဗန္ဓ==== {{fr-conj-auto}} ==နဝ်ဝေ ဗော်ခ်မဝ်== ===နာမ်=== {{head|nb|noun form|g=m}} # {{inflection of|nb|greve||indef|p}} ==ပြၚ်သေတ်တြေံ== ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ {{bor|fro|la|gravō|gravāre}} ===ကြိယာ=== {{head|fro|verb}} # သကဵုကေဝ်ကဝေံစှ်ေ၊ သကဵုမကၠောန်သ္ပဇြိုၚ်ဂၠိုၚ်။ # သကဵုပ္တိုန်ပ္ဍိုက်ကပေါတ်၊ သကဵုဂလီုဍိုက်မၞုံကဵုပ္ဍိုက်ကပေါတ်။ # သကဵုဇွိတ်၊ သကဵုပထုဲမကဵုဒဒိုက်၊ သကဵုပျဲစိုတ်။ ====သမ္ဗန္ဓ==== {{fro-conj-er|press=griev}} ===မဒုၚ်လွဳစ=== * {{desc|en|grieve}} * {{desc|fr|grever}} ir74qdbcwh22u40vtq2ly5rbto2fssv ထာမ်ပလိက်:fro-conj-er 10 296468 397910 2026-07-07T07:45:24Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:fro-verb|show|type=i}}<noinclude>{{documentation}}</noinclude>" 397910 wikitext text/x-wiki {{#invoke:fro-verb|show|type=i}}<noinclude>{{documentation}}</noinclude> le7umwa57cbacaj9193lkgljoi36rxy မဝ်ဂျူ:fro-verb 828 296469 397911 2026-07-07T09:10:58Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "--[[ Author: User:benwing Todo: 1. Possibly, make it possible to specify multiple stems to stem parameters separated by commas. This is easiest for fut= but gets trickier for all the rest because there are multiple parameters per stem. 2. Should write a routine that extracts the present stems (pres, press, ier, plus equivalent for 2 .. 9, and handles the special-casing for 'pres/steme' and 'ier', and ch..." 397911 Scribunto text/plain --[[ Author: User:benwing Todo: 1. Possibly, make it possible to specify multiple stems to stem parameters separated by commas. This is easiest for fut= but gets trickier for all the rest because there are multiple parameters per stem. 2. Should write a routine that extracts the present stems (pres, press, ier, plus equivalent for 2 .. 9, and handles the special-casing for 'pres/steme' and 'ier', and checks to make sure a multipart spec wasn't given, and uses the corresponding prese if so), and uses them in handle_imperfect() and handle_pres_part(). Also need to handle 'prese' in the subjunctive and imperative code, which should probably be rewritten along the lines of handle_imperfect(). 3. Create separate categories for verbs ending in various consonants, e.g. g, c, ch, ill, gn, etc. 4. Figure out how to create a category for verbs that are missing their conjugation (but are still identified as verbs because of {{head|fro|verb}}, which puts them into Category:Old French verbs). Possibly this isn't possible except using a bot. 5. Intro to Old French by Kibler claims that -lm requires a supporting vowel. Possibly -ln as well. What about -lf? Evidently -ld does not require a supporting vowel, due to 'chaud' < 'calidus'. Should we try to handle -lm specially? We might want to also handle -aum, -eum (but not -oum as in 'noumer', where 'ou' represents earlier 'o' rather than an 'l'). These verbs are rare enough, though, and hard enough to handle correctly that perhaps we should just require explicitly specifying supe= (or equivalently, using {{temp|fro-conj-er-e}} etc.). --]] local m_links = require("Module:links") local m_utilities = require("Module:utilities") local lang = require("Module:languages").getByCode("fro") local export = {} -- Functions that do the actual inflecting by creating the forms of a basic term. local inflections = {} local rfind = mw.ustring.find local rsub = mw.ustring.gsub local rmatch = mw.ustring.match local usub = mw.ustring.sub local function ine(x) -- If Not Empty if x == nil then return nil elseif rfind(x, '^".*"$') then local ret = rmatch(x, '^"(.*)"$') return ret elseif rfind(x, "^'.*'$") then local ret = rmatch(x, "^'(.*)'$") return ret elseif x == "" then return nil else return x end end local function contains(tab, item) for _, value in pairs(tab) do if value == item then return true end end return false end local function insert_if_not(tab, item) if not contains(tab, item) then table.insert(tab, item) end end ---------------------------------------------------------------------------- -- Functions for working with stems -- Given the stem as it appears before e/i, generate the corresponding -- stem for a/o. function steme_to_stema(steme) if rfind(steme, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stema = rsub(steme, "c$", "ç") return stema elseif rfind(steme, "g$") then local stema = rsub(steme, "g$", "j") return stema else return steme end end -- Given the stem as it appears before a/o, generate the corresponding -- stem for e/i. function stema_to_steme(stema) if rfind(stema, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local steme = rsub(stema, "c$", "qu") return steme elseif rfind(stema, "g$") then local steme = rsub(stema, "g$", "gu") return steme elseif rfind(stema, "ç$") then local steme = rsub(stema, "ç$", "c") return steme else return stema end end -- Given the stem as it appears before a/o, generates the corresponding -- stem for u. function stema_to_stemu(stema) if rfind(stema, "qu$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stemu = rsub(stema, "qu$", "c") return stemu elseif rfind(stema, "gu$") then local stemu = rsub(stema, "gu$", "g") return stemu else return stema end end -- Given the stem as it appears before e/i, generates the corresponding -- stem for u. function steme_to_stemu(steme) return stema_to_stemu(steme_to_stema(steme)) end -- Get the stem from the infinitive. Return stem and whether stem is -- soft-vowel (true except for -re and -oir verbs). -- -- Currently we rely on the IER argument being set in order to remove -- -ier from an infinitive. An alternative is to always check for -ier -- and assume that cases like 'signifier' which is an '-er' verb with a -- stem 'signifi' are handled by explicitly specifying the stem. (We -- assume this anyway in the case of any '-ir' verb whose stem ends -- in '-o', such as 'oir' "to hear".) local function get_stem_from_inf(inf, ier, ir) local nsub = 0 -- if 'ier' arg given and stem ends in -ier, strip it off. if ier then stem, nsub = rsub(inf, "ier$", "") if nsub > 0 then return stem, "ier", true end end -- Check for -er, -oir, -eir, -ir, -ïr, -re in sequence. -- Must check for -oir, -eir before -ir. stem, nsub = rsub(inf, "er$", "") if nsub > 0 then return stem, "er", true end if not ir then stem, nsub = rsub(inf, "oir$", "") if nsub > 0 then return stem, "oir", false end stem, nsub = rsub(inf, "eir$", "") if nsub > 0 then return stem, "eir", true end end stem, nsub = rsub(inf, "ir$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "ïr$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "re$", "") if nsub > 0 then return stem, "re", false end error("Unrecognized infinitive '" .. inf .. "'") end -- Get the present stem, either explicitly passed in as the first arg or -- implicitly through the page name, assumed to be the same as the -- infinitive. Currently we rely on the 'ier' argument being set in -- order to remove -ier from an infinitive. An alternative is to -- always check for -ier an assume that cases like 'signifier' which -- is an '-er' verb with a stem 'signifi' are handled by explicitly -- specifying the stem. (We assume this anyway in the case of any '-ir' -- verb whose stem ends in '-o', such as 'oir' "to hear".) local function get_stem_from_frame(frame) local stem = ine(frame.args[1]) -- if stem passed in and non-blank, use it. if stem then return stem end local inf = mw.loadData("Module:headword/data").pagename local ier = ine(frame.args["ier"]) local ir = ine(frame.args["ir"]) local stem, ending, is_soft = get_stem_from_inf(inf, ier, ir) return stem end -- External entry point for get_stem_from_frame(). Optional stem is first -- argument, optional 'ier' argument is used for -ier verbs (see -- get_stem_from_frame()). function export.get_stem(frame) return get_stem_from_frame(frame) end -- Joins a stem to an ending, automatically handling the stem changes needed -- before different vowels (steme/stema/stemu), and automatically adding umlauts -- to the stem and/or ending when necessary. The stem form passed in is steme -- (the form before e/i). function join(stem, ending) local firstend = usub(ending, 1, 1) -- change the stem as appropriate if firstend == "a" or firstend == "o" then stem = steme_to_stema(stem) elseif firstend == "u" then stem = steme_to_stemu(stem) end -- add an umlaut to i or u at beginning of ending if there's a vowel -- at the end of the stem, unless it's the same vowel, or a diphthong -- ending in i/u, or gu/qu. if firstend == "i" and (rfind(stem, "[aeoü]$") or rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$")) then ending = rsub(ending, "^i", "ï") elseif firstend == "u" and (rfind(stem, "[aeïo]$") or rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$")) then ending = rsub(ending, "^u", "ü") -- add an umlaut to i or u at end of stem if ending begins with e/é and -- stem doesn't end in diphthong, or gu/qu. elseif firstend == "e" or firstend == "é" then if rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$") then stem = rsub(stem, "i$", "ï") elseif rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$") then stem = rsub(stem, "u$", "ü") end end return stem .. ending end ---------------------------------------------------------------------------- -- Functions for generating arrays of endings -- Generate an ending array (five-element, see below), where a supporting ''e'' -- is needed. local function supporting_e(extra) local text = "In the present tense an extra supporting ''e'' is needed in the first-person singular indicative and throughout the singular subjunctive, and the third-person singular subjunctive ending ''-t'' is lost. " text = text .. extra return {"", "e", "es", "e", text} end -- Generate a general ending array (five-element, see below). local function mod3(ending, zero, s, t) local text = nil if ending == zero then text = string.format("The forms that would normally end in *''-%ss'', *''-%st'' are modified to ''%s'', ''%s''. ", ending, ending, s, t) else text = string.format("The forms that would normally end in *''-%s'', *''-%ss'', *''-%st'' are modified to ''%s'', ''%s'', ''%s''. ", ending, ending, ending, zero, s, t) end return {ending, zero, s, t, text} end -- Return the stem and an array of five elements. In the array, the first -- is the ending to be substitute, the second is the add_zero ending to -- substitute, the third is the add_s ending to substitute, the fourth is -- the add_t ending to substitute and the fifth is the text going into the -- comment at the top of the conj table. IER should be specified for -ier -- verbs, which only occur with palatal(ized) final consonants, and causes -- a different interpretation of certain consonants, esp. final l. -- If SUPE is specified, force a supporting -e to be added (normally this -- is inferred automatically from the stem). If OLD is specified, don't -- convert l before consonant to u. local function get_endings(stem, ier, supe, old) local ret = {"", "", "s", "t", ""} local ending = nil -- canonicalize ngn to gn when after vowel or r, l if rfind(stem, "[aeiouyäëïöüÿrl]ngn$") then ending = "ngn" stem = rsub(stem, "ngn$", "gn") end -- canonicalize double letter to single after vowel, except for l -- we need to treat Cill and Cil differently if rfind(stem, "[aeéiouyäëïöüÿ]([bcdfghjkmnpqrstvwxz])%1$") then ending = rmatch(stem, "(..)$") stem = rsub(stem, "([bcdfghjkmnpqrstvwxz])%1$", "%1") end if supe then ret = supporting_e("") elseif rfind(stem, "mb$") then ret = mod3("mb", "mp", "ns", "nt") elseif rfind(stem, "mp$") then ret = mod3("mp", "mp", "ns", "nt") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])[bpdtḍṭfvczk]$") then local lastchar = rmatch(stem, "(.)$") ending = ending or lastchar if lastchar == "b" or lastchar == "p" then ret = mod3(ending, "p", "s", "t") elseif lastchar == "d" or lastchar == "t" then ret = mod3(ending, "t", "z", "t") elseif lastchar == "ḍ" or lastchar == "ṭ" then ret = mod3(ending, "ṭ", "z", "t") elseif lastchar == "f" or lastchar == "v" then ret = mod3(ending, "f", "s", "t") elseif lastchar == "c" then ret = mod3(ending, "z", "z", "zt") ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " -- at least in bauptizer, 'z' appears to represent /z/, like 's' -- in the same position elseif lastchar == "z" then ret = mod3(ending, "s", "s", "st") elseif lastchar == "k" then ret = mod3(ending, "k", "s", "t") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])c?qu$") then ending = rmatch(stem, "(c?qu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])g?gu$") then ending = rmatch(stem, "(g?gu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])ct$") then -- convicter, paincter. Best guess here ret = mod3("ct", "ct", "cz", "ct") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[bpdtczk]$") then local lastchar = rmatch(stem, "(.)$") ending = "s" .. (ending or lastchar) if lastchar == "b" or lastchar == "p" then -- Best guess here, esp. for 'sb' ret = mod3(ending, "sp", "s", "st") elseif lastchar == "d" or lastchar == "t" then -- croster, etc. -- brosder. Best guess here ret = mod3(ending, "st", "z", "st") elseif lastchar == "c" or lastchar == "z" then -- drescier, laiszier(?). Best guess here ret = mod3(ending, "z", "z", "zt") if lastchar == "c" then ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " end elseif lastchar == "k" then ret = mod3(ending, "sk", "s", "st") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[qg]u$") then -- Best guess here ending = rmatch(stem, "(s[qg]u)$") ret = mod3(ending, "sc", "s", "st") elseif old and (rfind(stem, "([aeéouäëöü])[iy]ll?$") or (rfind(stem, "[aeéouäëöü]ll?$") and ier)) then ending = rmatch(stem, "(.[iy]?ll?)$") local prev = rmatch(stem, "(.[iy]?)ll?$") ret = mod3(ending, prev .. "l", prev .. "lz", prev .. "lt") elseif rfind(stem, "([aeéoäëö])[iy]ll?$") or (rfind(stem, "[aeéoäëö]ll?$") and ier) then ending = rmatch(stem, "(.[iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local prev = rmatch(stem, "(.)[iy]?ll?$") ret = mod3(ending, prev .. i .. "l", prev .. "uz", prev .. "ut") elseif rfind(stem, "[uü][iy]ll?$") or (rfind(stem, "[uü]ll?$") and ier) then ending = rmatch(stem, "([uü][iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local u = rmatch(stem, "([uü])[iy]?ll?$") ret = mod3(ending, u .. i .. "l", u .. "z", u .. "t") elseif rfind(stem, "[iïyÿ]ll$") or (rfind(stem, "[iïyÿ]l$") and ier) then ending = rmatch(stem, "([iïyÿ]ll?)$") local i = rmatch(stem, "([iïyÿ])ll?$") ret = old and mod3(ending, i .. "l", i .. "lz", i .. "lt") or mod3(ending, i .. "l", i .. "z", i .. "t") elseif rfind(stem, "([^iu])[eé]ll?$") or rfind(stem, "ëll?$") then -- first rfind() above should not have ïü or ë in it ending = rmatch(stem, "([eéë]ll?)$") local e = rmatch(stem, "([eéë])ll?$") -- FIXME: Should this be eals, ealt when old? ret = old and mod3(ending, e .. "l", e .. "ls", e .. "lt") or mod3(ending, e .. "l", e .. "aus", e .. "aut") elseif rfind(stem, "([aeéoäö])ll?$") then -- not ë, handled above -- first rmatch below should not have ïü or ë in it ending = rmatch(stem, "([iu][eé]ll?)$") or rmatch(stem, "([aoäö]ll?)$") local prev = rmatch(stem, "([iu][eé])ll?$") or rmatch(stem, "([aoäö])ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "us", prev .. "ut") elseif rfind(stem, "([iuyïüÿ])ll?$") then ending = rmatch(stem, "(.ll?)$") local prev = rmatch(stem, "(.)ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "s", prev .. "t") elseif rfind(stem, "[iyïÿl]gn$") then local prev = rmatch(stem, "([iyïÿl])gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ng", prev .. "nz", prev .. "nt") elseif rfind(stem, "rgn$") then ret = mod3("r" .. (ending or "gn"), "rng", "rz", "rt") elseif rfind(stem, "([aeéouäëöü])gn$") then local prev = rmatch(stem, "(.)gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ing", prev .. "inz", prev .. "int") elseif rfind(stem, "rm$") then ret = mod3("rm", "rm", "rs", "rt") elseif rfind(stem, "rn$") then ret = mod3("rn", "rn", "rz", "rt") elseif rfind(stem, "[aeéiouyäëïöüÿl]m$") then ret = mod3(ending or "m", "m", "ns", "nt") elseif rfind(stem, "s$") then ret = mod3(ending or "s", "s", "s", "st") elseif rfind(stem, "g$") then ret = supporting_e("In addition, ''g'' becomes ''j'' before an ''a'' or an ''o'' to keep the /dʒ/ sound intact. ") elseif rfind(stem, "j$") or rfind(stem, "x$") or rfind(stem, "[^aeéiouyäëïöüÿ][bcdfghjklmnpqrtvwxz]$") then ret = supporting_e("") elseif ending then -- doubled rr, nn, hh local lastchar = rmatch(stem, "(.)$") ret = mod3(ending, lastchar, lastchar .. "s", lastchar .. "t") end return ret end ---------------------------------------------------------------------------- -- Functions for handling particular sorts of endings -- Convert a stressed verb stem to the form used with a zero ending -- (1st sing pres indic, also, 1st sing pres subj of -er verbs). -- See get_endings() for meaning of IER and SUPE. function add_zero(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[2]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -s ending -- (2nd sing pres indic of -ir/-oir/-re verbs, 2nd sing pres subj of -- -er verbs). Same code could be used to add -s to nouns except that -- handling of -c stems needs to be different (need to treat as hard /k/ -- not /ts/). See get_endings() for meaning of IER, SUPE and OLD. function add_s(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[3]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -t ending -- (3rd sing pres indic of -ir/-oir/-re verbs, 3rd sing pres subj of -- -er verbs). See get_endings() for meaning of IER, SUPE and OLD. function add_t(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[4]) assert(nsub == 1) return ret end -- Add -r, for the group-iii future function add_r(stem, old) local ret = stem .. "r" if rfind(stem, "ss$") then ret = rsub(stem, "ss$", "str") elseif rfind(stem, "is$") then ret = rsub(stem, "is$", "ir") elseif rfind(stem, "ïs$") then ret = rsub(stem, "ïs$", "ïr") elseif rfind(stem, "s$") then ret = stem .. "dr" elseif rfind(stem, "g?n$") then ret = rsub(stem, "g?n$", "ndr") elseif rfind(stem, "m$") then ret = stem .. "br" elseif rfind(stem, "i?ll?$") then ret = old and rsub(stem, "ll?$", "ldr") or rsub(stem, "i?ll?$", "udr") elseif rfind(stem, "qu$") then ret = rsub(stem, "qu$", "cr") elseif rfind(stem, "gu$") then ret = rsub(stem, "gu$", "gr") elseif rfind(stem, "[^aeiouäëïöü]r$") then ret = stem .. "er" end return ret end ---------------------------------------------------------------------------- -- Functions for handling comments at the top of conjugation tables -- Return true if this is an irregular verb, due to stems or particular -- forms being explicitly specified function irreg_verb(args, skip) if skip == nil then skip = {} elseif type(skip) == "string" then skip = {skip} end for k,v in pairs(args) do if k == "pres" and rfind(v, "/") or k ~= "pres" and k ~= "prese" and k ~= "presa" and k ~= "ier" and k ~= "supe" and k ~= "aux" and k ~= "refl" and k ~= "repl" and k ~= "prefix" and k ~= "suffix" and k ~= "old" and k ~= "ei" and k ~= "ir" and k ~= "impers" and k ~= "inf" and k ~= "comment" and not contains(skip, k) and v ~= '' then return true end end return false end -- Return comment describing phonetic changes to the verb in the present -- tense. Appears near the top of the conjugation chart. STEM is the stressed -- stem. See get_endings() for meaning of IER, SUPE and OLD. function phonetic_verb_comment(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) return e[5] end -- Return comment describing phonetic and stem changes to the verb in the -- present tense. Appears near the top of the conjugation chart. STEME is -- the unstressed stem before e/i, STEMS the stressed stem. -- See get_endings() for meaning of IER, SUPE and OLD. function verb_comment(args, group, steme, stems, ier, supe, old) if args["comment"] then return args["comment"] .. " " end local com = group == "i" and phonetic_verb_comment(stems, ier, supe, old) or "" local irreg = irreg_verb(args, 'press') if steme ~= stems then if args["repl"] then -- If there's a search/replace, it might change the stressed or -- unstressed stems. FIXME: apply search/replace to the stems -- themselves. com = com .. "This verb has a distinct stressed present stem" else com = com .. "This verb has a stressed present stem ''" .. (args["prefix"] or "") .. stems .. (args["suffix"] or "") .. "'' distinct from the unstressed stem ''" .. (args["prefix"] or "") .. steme .. (args["suffix"] or "") .. "''" end com = com .. (irreg and ", as well as other irregularities. " or ". ") elseif irreg then com = com .. "This verb has irregularities in its conjugation. " end return com end ---------------------------------------------------------------------------- -- Main inflection-handling functions -- Main entry point function export.show(frame) local origargs = frame:getParent().args local args = {} -- Convert empty arguments to nil, and "" or '' arguments to empty for k, v in pairs(origargs) do args[k] = ine(v) end -- Create the forms local data = { forms = {}, categories = {}, group = {}, comment = "", frame = frame, refl = args["refl"], impers = args["impers"], ier = args["ier"] or ine(frame.args["ier"]), supe = args["supe"] or ine(frame.args["supe"]) } data.forms.infinitive = {args["inf"] or mw.loadData("Module:headword/data").pagename} data.inf_from_title = not args["inf"] data.inf_no_affix = data.forms.infinitive[1] if args["prefix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, "^" .. args["prefix"], "") end if args["suffix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, args["suffix"] .. "$", "") end -- Set the soft vowel ('pres') and hard vowel ('presa') present stems. -- They can be explicitly set using 'pres' and 'presa' params. -- If one is set, the other is inferred from it. If neither is set, -- both are inferred from the infinitive. data.prese = args["pres"] and not rfind(args["pres"], "/") and args["pres"] or args["prese"] local inf_stem, inf_ending, inf_is_soft = get_stem_from_inf(data.inf_no_affix, data.ier, args["ir"]) if not data.prese then if inf_is_soft then data.prese = inf_stem else data.prese = stema_to_steme(inf_stem) end end data.old = args["old"] data.ei = args["ei"] or data.old or inf_ending == "eir" data.forms.aux = {data.refl and "estre" or args["aux"] or data.ei and "aveir" or "avoir"} -- Find what type of verb is it (hard-coded in the template). -- Generate standard conjugated forms for each type of verb. local infl_type = ine(frame.args["type"]) if not infl_type then error("Verb type ('type' arg) not specified.") elseif inflections[infl_type] then inflections[infl_type](args, data) else error("Verb type '" .. infl_type .. "' not supported.") end for _, group in ipairs(data.group) do table.insert(data.categories, "Old French " .. group .. " group verbs") end table.insert(data.categories, "Old French verbs ending in -" .. inf_ending) if data.impers then table.insert(data.categories, "Old French impersonal verbs") end -- Get overridden forms process_overrides(args, data) -- Add a prefix if specified if args["prefix"] then add_affix(data, args["prefix"], true) end -- Add a suffix if specified if args["suffix"] then add_affix(data, args["suffix"], false) end -- Apply any replacements local repl = args["repl"] if repl then replace_all(data, repl) end -- Add links add_links(data) -- Add reflexive pronouns if data.refl then add_reflexive_pronouns(args, data) end return make_table(data) .. m_utilities.format_categories(data.categories, lang) end -- Version of main entry point meant for calling from the debug console. function export.show2(args, parargs) local frame = {args = args, getParent = function() return {args = parargs} end} return export.show(frame) end -- If ARGBASE == "foo", return an array of -- {{args["foo"]},{args["foo2"]},...,{args["foo9"]}}. -- If ARGBASE is a sequence of strings, return an array of sequences, e.g. -- if ARGBASE == {"foo", "bar"}, return an array of -- {{{args["foo"]},{args["bar"]}},{{args["foo2"]},{args["bar2"]}},...,{{args["foo9"]},{args["bar9"]}}} -- There is an extra level of {}'s because nil can't be inserted into an array function get_args(args, argbase) if type(argbase) == "string" then local theargs = {{args[argbase]}} for j = 2, 9 do table.insert(theargs, {args[argbase .. j]}) end return theargs else local theargs = {} local onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item]}) end table.insert(theargs, onearg) for j = 2, 9 do onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item .. j]}) end table.insert(theargs, onearg) end return theargs end end -- Replaces terms with overridden ones that are given as additional named parameters. function process_overrides(args, data) -- Each term in current is overridden by one in overN, if it exists. local function override(current, over) current = current or {} local ret = {} local i = 1 local function getover(n) return args[over .. n] end -- Insert an override entry, possibly splitting on commas and -- inserting multiple forms. local function insert_override(entry) if entry ~= "-" then if rfind(entry, ",") then local forms = mw.text.split(entry, ",") for _, form in ipairs(forms) do table.insert(ret, form) end else table.insert(ret, entry) end end end -- Look for overrides at the beginning if getover(0) then insert_override(getover(0)) end -- Look for override of all current forms if getover("") then current = {} insert_override(getover("")) end -- See if any of the existing items in current have an override specified. while current[i] do if getover(i) then -- insert_if_not(data.categories, "Old French verbs with partial overrides") insert_override(getover(i)) else table.insert(ret, current[i]) end i = i + 1 end -- We've reached the end of current. -- Look in the override list to see if there are any extra forms to -- add on to the end. NOTE: We've deprecated this and made it an error. -- Use ...n to insert forms at the end. while i <= 9 do if getover(i) then error("Attempt to partially override a non-existent form: arg " .. over .. i .. "=" .. getover(i) .. ": use " .. over .. "n=" .. getover(i) .. " instead.") -- insert_override(getover(i)) end i = i + 1 end -- Look for overrides at the end if getover("n") then insert_override(getover("n")) end return ret end -- Mark terms with any additional parameters as irregular, except for -- certain ones that we consider normal variants. if irreg_verb(args) then table.insert(data.categories, "Old French irregular verbs") end --[[ This function replaces former code like this: data.forms.pret_indc_1sg = override(data.forms.pret_indc_1sg, "pret1s") data.forms.pret_indc_2sg = override(data.forms.pret_indc_2sg, "pret2s") data.forms.pret_indc_3sg = override(data.forms.pret_indc_3sg, "pret3s") data.forms.pret_indc_1pl = override(data.forms.pret_indc_1pl, "pret1p") data.forms.pret_indc_2pl = override(data.forms.pret_indc_2pl, "pret2p") data.forms.pret_indc_3pl = override(data.forms.pret_indc_3pl, "pret3p") --]] local function handle_tense_override(tense, short) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} local pnums_short = {"1s", "2s", "3s", "1p", "2p", "3p"} for pn = 1, #pnums do local pnum = pnums[pn] local pnum_short = pnums_short[pn] local tensepnum = tense .. "_" .. pnum data.forms[tensepnum] = override(data.forms[tensepnum], short .. pnum_short) end end -- Non-finite forms -- data.forms.infinitive = override(data.forms.infinitive, "inf") data.forms.pres_ptc = override(data.forms.pres_ptc, "presp") data.forms.past_ptc = override(data.forms.past_ptc, "pastp") handle_tense_override("pres_indc", "pres") -- Present handle_tense_override("impf_indc", "imperf") -- Imperfect handle_tense_override("pret_indc", "pret") -- Preterite handle_tense_override("futr_indc", "fut") -- Future handle_tense_override("cond", "cond") -- Conditional handle_tense_override("pres_subj", "sub") -- Present subjunctive handle_tense_override("impf_subj", "impsub") -- Imperfect subjunctive -- Imperative data.forms.impr_2sg = override(data.forms.impr_2sg, "imp2s") data.forms.impr_1pl = override(data.forms.impr_1pl, "imp1p") data.forms.impr_2pl = override(data.forms.impr_2pl, "imp2p") end -- Adds reflexive pronouns to the appropriate forms function add_reflexive_pronouns(args, data) -- Gather pronoun parameters local cprons = {} local vprons = {} cprons["1sg"] = args["me"] or "me " cprons["2sg"] = args["te"] or "te " cprons["3sg"] = args["se"] or "se " cprons["1pl"] = args["nos"] or "nos " cprons["2pl"] = args["vos"] or "vos " cprons["3pl"] = cprons["3sg"] vprons["1sg"] = args["me"] or "m'" vprons["2sg"] = args["te"] or "t'" vprons["3sg"] = args["se"] or "s'" vprons["1pl"] = args["nos"] or "nos " vprons["2pl"] = args["vos"] or "vos " vprons["3pl"] = vprons["3sg"] function add_refl(person, form) -- FIXME! YUCK! This hard-codes knowledge of how the links are formatted. -- Perhaps we should go back to the old way of having the reflexive code -- also insert links. if rfind(form, "^<span.*>[^a-zA-Z]*[aeiouAEIOU]") then return vprons[person] .. form else return cprons[person] .. form end end -- Go over all the forms in the list for key, subforms in pairs(data.forms) do -- Extract the person/number from the last 3 characters of the key local person = key:sub(-3) -- Skip these three, as they already had pronouns added earlier if cprons[person] and key ~= "impr_2sg" and key ~= "impr_1pl" and key ~= "impr_2pl" then -- Go through each of the alternative subforms and add the pronoun for key2, subform in ipairs(subforms) do data.forms[key][key2] = add_refl(person, subform) end end end -- Handle infinitive for key, subform in ipairs(data.forms.infinitive) do data.forms.infinitive[key] = add_refl("3sg", subform) end -- Handle imperatives for key, subform in ipairs(data.forms.impr_2sg) do data.forms.impr_2sg[key] = subform .. (data.ei and "-tei" or "-toi") end for key, subform in ipairs(data.forms.impr_1pl) do data.forms.impr_1pl[key] = subform .. "-nos" end for key, subform in ipairs(data.forms.impr_2pl) do data.forms.impr_2pl[key] = subform .. "-vos" end end -- Add links to all forms function add_links(data) for key, subforms in pairs(data.forms) do for key2, subform in ipairs(subforms) do data.forms[key][key2] = make_link(subform) end end end -- Add a prefix or suffix to all forms. AFFIX is what to add; IS_PREFIX is -- true if it's a prefix, otherwise a suffix. function add_affix(data, affix, is_prefix) for key, subforms in pairs(data.forms) do -- Don't add affix to aux, nor infinitive -- that comes from the page title. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = (is_prefix and affix .. subform or subform .. affix) end end end end -- Apply all replacements function replace_all(data, repl) for splitrepl in mw.text.gsplit(repl, ",") do local fromto = mw.text.split(splitrepl, "/") if #fromto ~= 2 then error("Replace spec '" .. splitrepl .. "' needs exactly one / in it") end local from = fromto[1] local to = fromto[2] for key, subforms in pairs(data.forms) do -- Don't search/replace on aux, nor on infinitive -- that comes from the page title. Don't want e.g. infinitive -- 'offrir' to become 'offffrir'. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = rsub(data.forms[key][key2], from, to) end end end end end -- Inflection functions -- Implementation of inflect_tense(). See that function. Also used directly -- to add the imperative, which has only three forms. function inflect_tense_1(data, tense, stems, endings, pnums) -- First, initialize any nil entries to sequences. for i, pnum in ipairs(pnums) do if data.forms[tense .. "_" .. pnum] == nil then data.forms[tense .. "_" .. pnum] = {} end end -- Now add entries for i = 1, #pnums do -- Extract endings for this person-number combo local ends = endings[i] if type(ends) == "string" then ends = {ends} end -- Extract stem for this person-number combo local stem = stems if type(stem) == "table" then stem = stem[i] end -- Add entries for stem + endings for j, ending in ipairs(ends) do local form = join(stem, ending) if ine(form) and form ~= "-" and (not data.impers or pnums[i] == "3sg") then table.insert(data.forms[tense .. "_" .. pnums[i]], form) end end end end -- Add to DATA the inflections for the tense indicated by TENSE (the prefix -- in the data.forms names, e.g. 'impf_subj'), formed by combining the STEMS -- (either a single string or a sequence of six strings) with the -- ENDINGS (a sequence of six values, each of which is either a string -- or a sequence of one or more possible endings). If existing -- inflections already exist, they will be added to, not overridden. function inflect_tense(data, tense, stems, endings) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} inflect_tense_1(data, tense, stems, endings, pnums) end -- Like inflect_tense() but for the imperative, which has only three forms -- instead of six. function inflect_tense_impr(data, tense, stems, endings) local pnums = {"2sg", "1pl", "2pl"} inflect_tense_1(data, tense, stems, endings, pnums) end function inflect_pres(data, tense, group, steme, stems, ier, supe) local i = ier and "i" or "" if steme ~= stems then insert_if_not(data.categories, "Old French verbs with stem alternations") end local oldt = data.old and "ṭ" or "" if tense == "impr" and group == "i" then inflect_tense_impr(data, tense, {stems, steme, steme}, {"e", "ons", i .. "ez"}) elseif tense == "impr" and group == "ii" then inflect_tense_impr(data, tense, steme, {"is", "issons", "issez"}) elseif tense == "impr" and group == "iii" then inflect_tense_impr(data, tense, {add_zero(stems, ier, supe, data.old), steme, steme}, {"", "ons", i .. "ez"}) elseif tense == "pres_indc" and group == "i" then inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), stems, stems, steme, steme, stems}, {"", "es", "e".. oldt, "ons", i .. "ez", "ent"}) elseif tense == "pres_indc" and group == "ii" then inflect_tense(data, tense, steme, {"is", "is", "ist", "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "ii" then inflect_tense(data, tense, steme, {"isse", "isses", "isse" .. oldt, "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "iii" then inflect_tense(data, tense, {stems, stems, stems, steme, steme, stems}, {"e", "es", "e" .. oldt, ier and {"iens", "ons"} or "ons", i .. "ez", "ent"}) else -- pres_indc group iii or pres_subj group i inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), add_s(stems, ier, supe, data.old), add_t(stems, ier, supe, data.old), steme, steme, stems}, {"", "", "", "ons", i .. "ez", "ent"}) end end -- Split a string into entries separated by slashes, each representing one -- of the possible person/number combinations. Each entry in turn may consist -- of one or more forms, separated by commas. NUMREQ is how many entries need -- to be present, defaulting to 6. function split_multipart(str, numreq) local entries = mw.text.split(str, "/") numreq = numreq or 6 if #entries ~= numreq then error("Expected " .. numreq .. " entries in multipart string '" .. str .. "'") end for i, entry in ipairs(entries) do if rfind(entry, ",") then entries[i] = mw.text.split(entry, ",") else entries[i] = {entry} end end return entries end function handle_pres(args, data, group, steme, stems) local ier = data.ier local supe = data.supe if args["pres"] and rfind(args["pres"], "/") then inflect_tense(data, "pres_indc", "", split_multipart(args["pres"])) else inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- If sub not set, derive from indicative. -- If subs not set, derive from sub if set, else from indicative. local sub_steme = args["sub"] local sub_dash = sub_steme == "-" local sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash then if not sub_specified then sub_steme = steme end local sub_stems = args["subs"] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier"] or (not sub_specified and ier), args["subsupe"] or (not sub_specified and supe)) end -- Repeat exactly for the imperative. local imp_steme = args["imp"] local imp_dash = imp_steme == "-" local imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash then if not imp_specified then imp_steme = steme end local imp_stems = args["imps"] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier"] or (not imp_specified and ier), args["impsupe"] or (not imp_specified and supe)) end -- If indic stem specified, we add indic values, and also corresponding -- subj values if separate subj stem not specified. for i = 2, 9 do steme = args["pres" .. i] local multi_indic = steme and rfind(steme, "/") local indic_specified = not multi_indic and steme if multi_indic then inflect_tense(data, "pres_indc", "", split_multipart(steme)) elseif indic_specified then stems = args["press" .. i] or steme ier = args["ier" .. i] supe = args["supe" .. i] inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- Handle subjunctive as above. sub_steme = args["sub" .. i] sub_dash = sub_steme == "-" sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash and (indic_specified or sub_specified) then if not sub_specified then sub_steme = steme end sub_stems = args["subs" .. i] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier" .. i] or (not sub_specified and ier), args["subsupe" .. i] or (not sub_specified and supe)) end -- Repeat for the imperative. imp_steme = args["imp" .. i] imp_dash = imp_steme == "-" imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash and (indic_specified or imp_specified) then if not imp_specified then imp_steme = steme end imp_stems = args["imps" .. i] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier" .. i] or (not imp_specified and ier), args["impsupe" .. i] or (not imp_specified and supe)) end end end -- Add to DATA the endings for the preterite and imperfect -- subjunctive, with unstressed e/i stem STEME, stressed e/i stem STEMS, -- conjugation type PTY and corresponding value of IMPSUB. function inflect_pret_impf_subj(data, stem, pty, pret, pretu, prets, impsub) local steme = pretu or pret or stem local stems = prets or pretu or pret or stem if pret and rfind(pret, "/") then inflect_tense(data, "pret_indc", "", split_multipart(pret)) inflect_impf_subj(data, impsub, nil, nil, nil) elseif pty then insert_if_not(data.categories, "Old French verbs with " .. pty .. " preterite") -- WARNING: If the second person singular of any of these is not a -- simple string, you will need to modify the handling below of -- the imperfect subjunctive, which relies on this form. local oldt = data.old and "ṭ" or "" local all_endings = pty == "weak-a" and {"ai","as","a" .. oldt,"ames","astes","erent"} or pty == "weak-a2" and {"ai","as","a" .. oldt,"ames","astes","ierent"} or pty == "weak-i" and {"i","is","i" .. oldt,"imes","istes","irent"} or -- FIXME: "Grammatik des Altfranzösischen I-III" (Dr. E. Schwan and -- Dr. D. Behrens), p. 229, claims that the old form of the weak-i2 -- ending is "ieḍrent", e.g. "rendieḍrent" < "rendęderunt", whereas the -- early 12th-century forms of E. Einhorn "Old French: A Concise Handbook" -- p.43 have only "ierent". I trust the latter because Schwan and Behrens -- also have the 3rd-singular as "rendiet" with a hard -t < "rendędit", -- but in reality it should be "rendieṭ" (i.e. "rendiéṭ") with a soft -ṭ, -- as per Einhorn and also William Kibler "An Introduction to Old French". -- Schwan and Behrens' forms would be correct if the underlying Vulgar -- Latin forms are correct, but I think haplology has deleted the second -- -d- so you should really have 3rd-singular "rendęt" > "rendiéṭ" and -- 3rd-plural "rendęrunt" > "rendierent". pty == "weak-i2" and {"i","is","ié" .. oldt,"imes","istes","ierent"} or pty == "strong-i" and {"","is","t","imes","istes","rent"} or pty == "strong-id" and {"","is","t","imes","istes",{"drent","rent"}} or pty == "weak-u" and {"ui","us","u" .. oldt,"umes","ustes","urent"} or pty == "strong-u" and {"ui","eüs","ut","eümes","eüstes","urent"} or pty == "strong-o" and {"oi","eüs","ot","eümes","eüstes","orent"} or pty == "strong-st" and {"s","sis","st","simes","sistes","strent"} or pty == "strong-sd" and {"s","ṣis","st","ṣimes","ṣistes","sdrent"} or error("Unrecognized prettype value '" .. pty .. "'") -- Always use one of the weak stems unless we have strong-stem endings local all_stems = rfind(pty, "^strong-") and {stems, steme, stems, steme, steme, stems} or {steme, steme, steme, steme, steme, steme} inflect_tense(data, "pret_indc", all_stems, all_endings) inflect_impf_subj(data, impsub, steme, join(all_stems[2], all_endings[2]), pty) elseif impsub then inflect_impf_subj(data, impsub, nil, nil, nil) end end function inflect_impf_subj(data, impsub, steme, pret2s, pty) -- Handle imperfect subj, which follows the same types as the preterite -- and is built off of the 2nd person singular form, although we need to -- special-case weak-a and weak-a2 local impsub_endings = {"se","ses","t",{"sons","siens"}, {data.ei and "seiz" or "soiz","sez","siez"},"sent"} if impsub and rfind(impsub, "/") then inflect_tense(data, "impf_subj", "", split_multipart(impsub)) elseif impsub == "-" then return elseif impsub then inflect_tense(data, "impf_subj", impsub, impsub_endings) -- need the % here to escape the dash, which otherwise stands for a -- character range??????? elseif pty and rfind(pty, "^weak%-a") then inflect_tense(data, "impf_subj", steme, {"asse","asses","ast", {"issons","issiens"}, {data.ei and "isseiz" or "issoiz","issez","issiez"},"assent"}) elseif pty then inflect_tense(data, "impf_subj", pret2s, impsub_endings) end end -- Add to DATA the endings for the preterite and imperfect subjunctive, -- based on the strong and weak stems and preterite ending type(s) given in -- ARGS. For each weak preterite ending type 'prettypeN' there should be a -- corresponding stem in 'pretN' (defaulting to STEM) and for each strong -- preterite ending type 'prettypeN' there should be corresponding unstressed -- and stressed stems in 'pretuN' and 'pretsN' (defaulting to 'pretN' or STEM). -- If specifically 'pret' and 'prettype' are unspecified, substitute defaults, -- specifically the fallback preterite type FBPTY and stressed/unstressed -- fallback stem FBSTEM. function handle_pret_impf_subj(args, data, stem, fbstem, fbpty) local all_props = get_args(args, {"prettype", "pret", "pretu", "prets", "impsub"}) for i, props in ipairs(all_props) do local thestem = stem local pty = props[1][1] local pret = props[2][1] local pretu = props[3][1] local prets = props[4][1] local impsub = props[5][1] if i == 1 and not pty and not pret then thestem = fbstem pty = fbpty pret = fbstem pretu = fbstem prets = fbstem end inflect_pret_impf_subj(data, thestem, pty, pret, pretu, prets, impsub) end end -- Add to DATA the forms for up to one paradigm of the future and conditional, -- based on the future stem in STEM (possibly nil). function inflect_future_cond(data, stem) if stem then if rfind(stem, "/") then inflect_tense(data, "futr_indc", "", split_multipart(stem)) else if data.old then inflect_tense(data, "futr_indc", stem, {"ai","as","aṭ","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", "iiens","iiez","eient"}) elseif data.ei then inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", {"iiens","iens"},{"iiez","iez"},"eient"}) else inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"oiz","eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {{"oie","eie"},{"oies","eies"},{"oit","eit"}, {"iiens","iens"},{"iiez","iez"},{"oient","eient"}}) end end end end -- Add to DATA all the forms for the future and conditional based on the -- future stem(s) in ARGS. Use If no future stems given, use STEM. function handle_future_cond(args, data, stem) local fut_args = get_args(args, "fut") -- Just override the value from args["fut"] if necessary if not args["fut"] then fut_args[1][1] = stem end for _, futarg in ipairs(fut_args) do local stem = futarg[1] inflect_future_cond(data, stem) end end -- Add to DATA the forms for up to one imperfect paradigm, corresponding to -- the imperfect stem in IMPERF (possibly nil), the corresponding ier= value -- in IMPERFIER, the corresponding present stem in PRES (possibly nil), and -- its corresponding ier= value in PRESIER. Only do something if either IMPERF -- or PRES is non-nil. function inflect_imperfect(data, group, imperf, imperfier, pres, presier) if imperf and rfind(imperf, "/") then inflect_tense(data, "impf_indc", "", split_multipart(imperf)) else if not imperf and pres and not rfind(pres, "/") then imperf = pres imperfier = presier end if imperf and imperf ~= "-" then local steme = imperf local stema = steme_to_stema(steme) local i = imperfier and "i" or "" if group == "i" and data.old then inflect_tense(data, "impf_indc", steme, {{"eie", "oue", i .. "eve"}, {"eies", "oues", i .. "eves"}, {"eit", "out", i .. "eveṭ"}, {"iiens"}, {"iiez"}, {"eient", "ouent", i .. "event"} }) elseif group == "i" and data.ei then inflect_tense(data, "impf_indc", steme, {{"eie", "oe", i .. "eve"}, {"eies", "oes", i .. "eves"}, {"eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"eient", "oent", i .. "event"} }) elseif group == "i" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie", "oe", i .. "eve"}, {"oies", "eies", "oes", i .. "eves"}, {"oit", "eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient", "oent", i .. "event"} }) elseif group == "ii" and data.old then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "ii" and data.ei then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "ii" then inflect_tense(data, "impf_indc", join(steme, "iss"), {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) elseif group == "iii" and data.old then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "iii" and data.ei then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "iii" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) end end end end -- Add to DATA all the forms for the imperfect based on the -- imperfect stem(s) in ARGS. If no imperfect stems given, use -- corresponding present stems if they exist, but use STEME and IER -- for the first present stem and ier= value, since they're computed -- specially. function handle_imperfect(args, data, group, steme, ier) local imperf_args = get_args(args, {"imperf","imperfier","pres","ier"}) -- Just override the values from args["pres"] and args["ier"] imperf_args[1][3][1] = steme imperf_args[1][4][1] = ier for _, stem in ipairs(imperf_args) do local imperf = stem[1][1] local imperfier = stem[2][1] local pres = stem[3][1] local presier = stem[4][1] inflect_imperfect(data, group, imperf, imperfier, pres, presier) end end -- Add to DATA up to one form of the present participle based on the -- present stem in PRES. Only do anything if PRES is non-nil and not a -- multipart specification. function inflect_pres_part(data, group, pres) if pres and not rfind(pres, "/") then if group == "ii" then table.insert(data.forms.pres_ptc, join(pres, "issant")) else table.insert(data.forms.pres_ptc, join(pres, "ant")) end end end -- Add to DATA the forms of the present participle based on the -- present stem(s) in ARGS. Use STEME for the first present stem, -- since it's computed specially. function handle_pres_part(args, data, group, steme) if data.forms.pres_ptc == nil then data.forms.pres_ptc = {} end local ppart_args = get_args(args, {"pres"}) -- Just override the value from args["pres"] ppart_args[1][1][1] = steme for _, stem in ipairs(ppart_args) do local pres = stem[1][1] inflect_pres_part(data, group, pres) end end -- Add to DATA the endings for an -er or -ier verb, based on the arguments -- in ARGS. inflections["i"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" if data.ier then data.comment = "This verb conjugates as a first-group verb ending in <<-ier>>, with a palatal stem. These verbs are conjugated mostly like verbs in <<-er>>, but there is an extra ''i'' before the ''e'' of some endings. " else data.comment = "This verb conjugates as a first-group verb ending in <<-er>>. " end data.comment = data.comment .. verb_comment(args, "i", prese, press, data.ier, data.supe, data.old) data.group = {"first"} handle_pres_part(args, data, "i", prese) data.forms.past_ptc = {join(prese, i .. "é" .. (data.old and "ṭ" or ""))} handle_pres(args, data, "i", prese, press) handle_imperfect(args, data, "i", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, data.ier and "weak-a2" or "weak-a") handle_future_cond(args, data, join(prese, "er")) end -- Add to DATA the endings for a type 2 verb (-ir, with -iss- infix), -- based on the arguments in ARGS. inflections["ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese data.comment = "This verb conjugates as a second-group verb (ending in <<-ir>>, with an <<-iss->> infix). " data.group = {"second"} handle_pres_part(args, data, "ii", prese) local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Add to DATA the endings for a type 3 verb (-ir without -iss- infix, or -- -re or -oir), based on the arguments in ARGS. inflections["iii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group verb. " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"third"} handle_pres_part(args, data, "iii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" if rfind(infinitive, "[^eo]ir$") then data.forms.past_ptc = {join(prese, "i" .. oldt)} elseif rfind(infinitive, "ïr$") then data.forms.past_ptc = {join(prese, "ï" .. oldt)} else data.forms.past_ptc = {join(prese, "u" .. oldt)} end handle_pres(args, data, "iii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) if rfind(infinitive, "[dt]re$") then handle_pret_impf_subj(args, data, prese, prese, "weak-i2") elseif rfind(infinitive, "re$") then local pretstem = add_s(prese, false, false, data.old) pretstem = rsub(pretstem, "s$", "") handle_pret_impf_subj(args, data, prese, pretstem, "strong-st") elseif rfind(infinitive, "[eo]ir$") then handle_pret_impf_subj(args, data, prese, prese, "weak-u") else handle_pret_impf_subj(args, data, prese, prese, "weak-i") end if rfind(infinitive, "[^eolrs]ir$") then handle_future_cond(args, data, join(prese, "ir")) else -- -re, -oir, -eir, -ïr, -lir, -sir, -rir handle_future_cond(args, data, add_r(prese, data.old)) end end -- Add to DATA the endings for a type 3/2 verb (-ir without or with -- -iss- infix), based on the arguments in ARGS. inflections["iii-ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group or second-group verb (ending in <<-ir>>, without or with an <<-iss->> infix). " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"တတိယ", "ဒုတိယ", "တတိယ-ဒုတိယ"} handle_pres_part(args, data, "iii", prese) handle_pres_part(args, data, "ii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "iii", prese, press) handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Shows the table with the given forms function make_table(data) return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. data.frame:preprocess((data.comment:gsub("<<(.-)>>", "{{m|fro|%1}}"))) .. [=[Old French conjugation varies significantly by date and by region. The following conjugation should be treated as a guide. <div class="NavFrame"> <div class="NavHead">&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ]=] .. m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. [=[ <span style="font-size:90%;"> (ဗဵုရံၚ် [[အဆက်လက္ကရဴ:ကြိယာပြၚ်သေတ်တြေံဂမၠိုၚ်]] တဏအ်ညိကီု)</span></div> <div class="NavContent"> {| class="roa-inflection-table" data-toggle-category="inflection" |- ! colspan="2" class="roa-nonfinite-header" | ! colspan="3" class="roa-nonfinite-header" | ဓမ္မတာ ! colspan="3" class="roa-nonfinite-header" | ဒပ်ပံၚ် |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာဟွံကၠောံ | colspan="3" | ]=] .. show_form(data.forms.infinitive) .. [=[ | colspan="3" | ]=] .. show_form(data.forms.aux) .. " " .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာစၞးနာမ် | colspan="3" | en ]=] .. show_form(data.forms.pres_ptc) .. [=[ | colspan="3" | ကြိယာစၞးနာမ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုပစ္စုပ္ပန် | colspan="3" | ]=] .. show_form(data.forms.pres_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် | colspan="3" | ]=] .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" rowspan="2" class="roa-person-number-header" | ပူဂဵု ! colspan="3" class="roa-person-number-header" | ကိုန်ဨကဝုစ် ! colspan="3" class="roa-person-number-header" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ |- ! class="roa-indicative-left-rail" colspan="2" | မစၞောန်ရန် ! class="roa-indicative-left-rail" | jo ! class="roa-indicative-left-rail" | tu ! class="roa-indicative-left-rail" | il ! class="roa-indicative-left-rail" | nos ! class="roa-indicative-left-rail" | vos ! class="roa-indicative-left-rail" | il |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲမပြဟ် | ]=] .. show_form(data.forms.pret_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ် | ]=] .. show_form(data.forms.futr_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန် | ]=] .. show_form(data.forms.cond_1sg) .. [=[ | ]=] .. show_form(data.forms.cond_2sg) .. [=[ | ]=] .. show_form(data.forms.cond_3sg) .. [=[ | ]=] .. show_form(data.forms.cond_1pl) .. [=[ | ]=] .. show_form(data.forms.cond_2pl) .. [=[ | ]=] .. show_form(data.forms.cond_3pl) .. [=[ |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | ဗီုပြၚ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲကိုပ်ကၠာ ! colspan="6" class="roa-compound-row" | ကာလအတိက်ဗွဲမပြဟ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလအနာဂတ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလတၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" colspan="2" | အရေဝ်နိဒါန် ! class="roa-subjunctive-left-rail" | que jo ! class="roa-subjunctive-left-rail" | que tu ! class="roa-subjunctive-left-rail" | qu’il ! class="roa-subjunctive-left-rail" | que nos ! class="roa-subjunctive-left-rail" | que vos ! class="roa-subjunctive-left-rail" | qu’il |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-subjunctive-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3pl) .. [=[ |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3pl) .. [=[ |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-subjunctive-left-rail" style="height:3em;" | အတိက် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | ပါဲဗလေတ်ဟွံဗၠး ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | tu ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | nos ! class="roa-imperative-left-rail" | vos ! class="roa-imperative-left-rail" | – |- | — | ]=] .. show_form(data.forms.impr_2sg) .. [=[ | — | ]=] .. show_form(data.forms.impr_1pl) .. [=[ | ]=] .. show_form(data.forms.impr_2pl) .. [=[ | — |- |}</div></div>]=] end -- Create a link for a form function make_link(subform) return m_links.full_link({lang = lang, term = subform}) end -- Shows forms, or a dash if empty function show_form(subforms) if not subforms then return "&mdash;" elseif type(subforms) ~= "table" then error("a non-table value was given in the list of inflected forms.") elseif #subforms == 0 then return "&mdash;" end -- Concatenate results, omitting duplicates local ret = {} for key, subform in ipairs(subforms) do insert_if_not(ret, subform) end return table.concat(ret, ", ") end return export 1ydqle6tlcofs2g775ugbirofz12z44 397917 397911 2026-07-07T09:24:08Z 咽頭べさ 33 397917 Scribunto text/plain --[[ Author: User:benwing Todo: 1. Possibly, make it possible to specify multiple stems to stem parameters separated by commas. This is easiest for fut= but gets trickier for all the rest because there are multiple parameters per stem. 2. Should write a routine that extracts the present stems (pres, press, ier, plus equivalent for 2 .. 9, and handles the special-casing for 'pres/steme' and 'ier', and checks to make sure a multipart spec wasn't given, and uses the corresponding prese if so), and uses them in handle_imperfect() and handle_pres_part(). Also need to handle 'prese' in the subjunctive and imperative code, which should probably be rewritten along the lines of handle_imperfect(). 3. Create separate categories for verbs ending in various consonants, e.g. g, c, ch, ill, gn, etc. 4. Figure out how to create a category for verbs that are missing their conjugation (but are still identified as verbs because of {{head|fro|verb}}, which puts them into Category:Old French verbs). Possibly this isn't possible except using a bot. 5. Intro to Old French by Kibler claims that -lm requires a supporting vowel. Possibly -ln as well. What about -lf? Evidently -ld does not require a supporting vowel, due to 'chaud' < 'calidus'. Should we try to handle -lm specially? We might want to also handle -aum, -eum (but not -oum as in 'noumer', where 'ou' represents earlier 'o' rather than an 'l'). These verbs are rare enough, though, and hard enough to handle correctly that perhaps we should just require explicitly specifying supe= (or equivalently, using {{temp|fro-conj-er-e}} etc.). --]] local m_links = require("Module:links") local m_utilities = require("Module:utilities") local lang = require("Module:languages").getByCode("fro") local export = {} -- Functions that do the actual inflecting by creating the forms of a basic term. local inflections = {} local rfind = mw.ustring.find local rsub = mw.ustring.gsub local rmatch = mw.ustring.match local usub = mw.ustring.sub local function ine(x) -- If Not Empty if x == nil then return nil elseif rfind(x, '^".*"$') then local ret = rmatch(x, '^"(.*)"$') return ret elseif rfind(x, "^'.*'$") then local ret = rmatch(x, "^'(.*)'$") return ret elseif x == "" then return nil else return x end end local function contains(tab, item) for _, value in pairs(tab) do if value == item then return true end end return false end local function insert_if_not(tab, item) if not contains(tab, item) then table.insert(tab, item) end end ---------------------------------------------------------------------------- -- Functions for working with stems -- Given the stem as it appears before e/i, generate the corresponding -- stem for a/o. function steme_to_stema(steme) if rfind(steme, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stema = rsub(steme, "c$", "ç") return stema elseif rfind(steme, "g$") then local stema = rsub(steme, "g$", "j") return stema else return steme end end -- Given the stem as it appears before a/o, generate the corresponding -- stem for e/i. function stema_to_steme(stema) if rfind(stema, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local steme = rsub(stema, "c$", "qu") return steme elseif rfind(stema, "g$") then local steme = rsub(stema, "g$", "gu") return steme elseif rfind(stema, "ç$") then local steme = rsub(stema, "ç$", "c") return steme else return stema end end -- Given the stem as it appears before a/o, generates the corresponding -- stem for u. function stema_to_stemu(stema) if rfind(stema, "qu$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stemu = rsub(stema, "qu$", "c") return stemu elseif rfind(stema, "gu$") then local stemu = rsub(stema, "gu$", "g") return stemu else return stema end end -- Given the stem as it appears before e/i, generates the corresponding -- stem for u. function steme_to_stemu(steme) return stema_to_stemu(steme_to_stema(steme)) end -- Get the stem from the infinitive. Return stem and whether stem is -- soft-vowel (true except for -re and -oir verbs). -- -- Currently we rely on the IER argument being set in order to remove -- -ier from an infinitive. An alternative is to always check for -ier -- and assume that cases like 'signifier' which is an '-er' verb with a -- stem 'signifi' are handled by explicitly specifying the stem. (We -- assume this anyway in the case of any '-ir' verb whose stem ends -- in '-o', such as 'oir' "to hear".) local function get_stem_from_inf(inf, ier, ir) local nsub = 0 -- if 'ier' arg given and stem ends in -ier, strip it off. if ier then stem, nsub = rsub(inf, "ier$", "") if nsub > 0 then return stem, "ier", true end end -- Check for -er, -oir, -eir, -ir, -ïr, -re in sequence. -- Must check for -oir, -eir before -ir. stem, nsub = rsub(inf, "er$", "") if nsub > 0 then return stem, "er", true end if not ir then stem, nsub = rsub(inf, "oir$", "") if nsub > 0 then return stem, "oir", false end stem, nsub = rsub(inf, "eir$", "") if nsub > 0 then return stem, "eir", true end end stem, nsub = rsub(inf, "ir$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "ïr$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "re$", "") if nsub > 0 then return stem, "re", false end error("Unrecognized infinitive '" .. inf .. "'") end -- Get the present stem, either explicitly passed in as the first arg or -- implicitly through the page name, assumed to be the same as the -- infinitive. Currently we rely on the 'ier' argument being set in -- order to remove -ier from an infinitive. An alternative is to -- always check for -ier an assume that cases like 'signifier' which -- is an '-er' verb with a stem 'signifi' are handled by explicitly -- specifying the stem. (We assume this anyway in the case of any '-ir' -- verb whose stem ends in '-o', such as 'oir' "to hear".) local function get_stem_from_frame(frame) local stem = ine(frame.args[1]) -- if stem passed in and non-blank, use it. if stem then return stem end local inf = mw.loadData("Module:headword/data").pagename local ier = ine(frame.args["ier"]) local ir = ine(frame.args["ir"]) local stem, ending, is_soft = get_stem_from_inf(inf, ier, ir) return stem end -- External entry point for get_stem_from_frame(). Optional stem is first -- argument, optional 'ier' argument is used for -ier verbs (see -- get_stem_from_frame()). function export.get_stem(frame) return get_stem_from_frame(frame) end -- Joins a stem to an ending, automatically handling the stem changes needed -- before different vowels (steme/stema/stemu), and automatically adding umlauts -- to the stem and/or ending when necessary. The stem form passed in is steme -- (the form before e/i). function join(stem, ending) local firstend = usub(ending, 1, 1) -- change the stem as appropriate if firstend == "a" or firstend == "o" then stem = steme_to_stema(stem) elseif firstend == "u" then stem = steme_to_stemu(stem) end -- add an umlaut to i or u at beginning of ending if there's a vowel -- at the end of the stem, unless it's the same vowel, or a diphthong -- ending in i/u, or gu/qu. if firstend == "i" and (rfind(stem, "[aeoü]$") or rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$")) then ending = rsub(ending, "^i", "ï") elseif firstend == "u" and (rfind(stem, "[aeïo]$") or rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$")) then ending = rsub(ending, "^u", "ü") -- add an umlaut to i or u at end of stem if ending begins with e/é and -- stem doesn't end in diphthong, or gu/qu. elseif firstend == "e" or firstend == "é" then if rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$") then stem = rsub(stem, "i$", "ï") elseif rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$") then stem = rsub(stem, "u$", "ü") end end return stem .. ending end ---------------------------------------------------------------------------- -- Functions for generating arrays of endings -- Generate an ending array (five-element, see below), where a supporting ''e'' -- is needed. local function supporting_e(extra) local text = "In the present tense an extra supporting ''e'' is needed in the first-person singular indicative and throughout the singular subjunctive, and the third-person singular subjunctive ending ''-t'' is lost. " text = text .. extra return {"", "e", "es", "e", text} end -- Generate a general ending array (five-element, see below). local function mod3(ending, zero, s, t) local text = nil if ending == zero then text = string.format("The forms that would normally end in *''-%ss'', *''-%st'' are modified to ''%s'', ''%s''. ", ending, ending, s, t) else text = string.format("The forms that would normally end in *''-%s'', *''-%ss'', *''-%st'' are modified to ''%s'', ''%s'', ''%s''. ", ending, ending, ending, zero, s, t) end return {ending, zero, s, t, text} end -- Return the stem and an array of five elements. In the array, the first -- is the ending to be substitute, the second is the add_zero ending to -- substitute, the third is the add_s ending to substitute, the fourth is -- the add_t ending to substitute and the fifth is the text going into the -- comment at the top of the conj table. IER should be specified for -ier -- verbs, which only occur with palatal(ized) final consonants, and causes -- a different interpretation of certain consonants, esp. final l. -- If SUPE is specified, force a supporting -e to be added (normally this -- is inferred automatically from the stem). If OLD is specified, don't -- convert l before consonant to u. local function get_endings(stem, ier, supe, old) local ret = {"", "", "s", "t", ""} local ending = nil -- canonicalize ngn to gn when after vowel or r, l if rfind(stem, "[aeiouyäëïöüÿrl]ngn$") then ending = "ngn" stem = rsub(stem, "ngn$", "gn") end -- canonicalize double letter to single after vowel, except for l -- we need to treat Cill and Cil differently if rfind(stem, "[aeéiouyäëïöüÿ]([bcdfghjkmnpqrstvwxz])%1$") then ending = rmatch(stem, "(..)$") stem = rsub(stem, "([bcdfghjkmnpqrstvwxz])%1$", "%1") end if supe then ret = supporting_e("") elseif rfind(stem, "mb$") then ret = mod3("mb", "mp", "ns", "nt") elseif rfind(stem, "mp$") then ret = mod3("mp", "mp", "ns", "nt") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])[bpdtḍṭfvczk]$") then local lastchar = rmatch(stem, "(.)$") ending = ending or lastchar if lastchar == "b" or lastchar == "p" then ret = mod3(ending, "p", "s", "t") elseif lastchar == "d" or lastchar == "t" then ret = mod3(ending, "t", "z", "t") elseif lastchar == "ḍ" or lastchar == "ṭ" then ret = mod3(ending, "ṭ", "z", "t") elseif lastchar == "f" or lastchar == "v" then ret = mod3(ending, "f", "s", "t") elseif lastchar == "c" then ret = mod3(ending, "z", "z", "zt") ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " -- at least in bauptizer, 'z' appears to represent /z/, like 's' -- in the same position elseif lastchar == "z" then ret = mod3(ending, "s", "s", "st") elseif lastchar == "k" then ret = mod3(ending, "k", "s", "t") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])c?qu$") then ending = rmatch(stem, "(c?qu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])g?gu$") then ending = rmatch(stem, "(g?gu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])ct$") then -- convicter, paincter. Best guess here ret = mod3("ct", "ct", "cz", "ct") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[bpdtczk]$") then local lastchar = rmatch(stem, "(.)$") ending = "s" .. (ending or lastchar) if lastchar == "b" or lastchar == "p" then -- Best guess here, esp. for 'sb' ret = mod3(ending, "sp", "s", "st") elseif lastchar == "d" or lastchar == "t" then -- croster, etc. -- brosder. Best guess here ret = mod3(ending, "st", "z", "st") elseif lastchar == "c" or lastchar == "z" then -- drescier, laiszier(?). Best guess here ret = mod3(ending, "z", "z", "zt") if lastchar == "c" then ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " end elseif lastchar == "k" then ret = mod3(ending, "sk", "s", "st") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[qg]u$") then -- Best guess here ending = rmatch(stem, "(s[qg]u)$") ret = mod3(ending, "sc", "s", "st") elseif old and (rfind(stem, "([aeéouäëöü])[iy]ll?$") or (rfind(stem, "[aeéouäëöü]ll?$") and ier)) then ending = rmatch(stem, "(.[iy]?ll?)$") local prev = rmatch(stem, "(.[iy]?)ll?$") ret = mod3(ending, prev .. "l", prev .. "lz", prev .. "lt") elseif rfind(stem, "([aeéoäëö])[iy]ll?$") or (rfind(stem, "[aeéoäëö]ll?$") and ier) then ending = rmatch(stem, "(.[iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local prev = rmatch(stem, "(.)[iy]?ll?$") ret = mod3(ending, prev .. i .. "l", prev .. "uz", prev .. "ut") elseif rfind(stem, "[uü][iy]ll?$") or (rfind(stem, "[uü]ll?$") and ier) then ending = rmatch(stem, "([uü][iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local u = rmatch(stem, "([uü])[iy]?ll?$") ret = mod3(ending, u .. i .. "l", u .. "z", u .. "t") elseif rfind(stem, "[iïyÿ]ll$") or (rfind(stem, "[iïyÿ]l$") and ier) then ending = rmatch(stem, "([iïyÿ]ll?)$") local i = rmatch(stem, "([iïyÿ])ll?$") ret = old and mod3(ending, i .. "l", i .. "lz", i .. "lt") or mod3(ending, i .. "l", i .. "z", i .. "t") elseif rfind(stem, "([^iu])[eé]ll?$") or rfind(stem, "ëll?$") then -- first rfind() above should not have ïü or ë in it ending = rmatch(stem, "([eéë]ll?)$") local e = rmatch(stem, "([eéë])ll?$") -- FIXME: Should this be eals, ealt when old? ret = old and mod3(ending, e .. "l", e .. "ls", e .. "lt") or mod3(ending, e .. "l", e .. "aus", e .. "aut") elseif rfind(stem, "([aeéoäö])ll?$") then -- not ë, handled above -- first rmatch below should not have ïü or ë in it ending = rmatch(stem, "([iu][eé]ll?)$") or rmatch(stem, "([aoäö]ll?)$") local prev = rmatch(stem, "([iu][eé])ll?$") or rmatch(stem, "([aoäö])ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "us", prev .. "ut") elseif rfind(stem, "([iuyïüÿ])ll?$") then ending = rmatch(stem, "(.ll?)$") local prev = rmatch(stem, "(.)ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "s", prev .. "t") elseif rfind(stem, "[iyïÿl]gn$") then local prev = rmatch(stem, "([iyïÿl])gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ng", prev .. "nz", prev .. "nt") elseif rfind(stem, "rgn$") then ret = mod3("r" .. (ending or "gn"), "rng", "rz", "rt") elseif rfind(stem, "([aeéouäëöü])gn$") then local prev = rmatch(stem, "(.)gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ing", prev .. "inz", prev .. "int") elseif rfind(stem, "rm$") then ret = mod3("rm", "rm", "rs", "rt") elseif rfind(stem, "rn$") then ret = mod3("rn", "rn", "rz", "rt") elseif rfind(stem, "[aeéiouyäëïöüÿl]m$") then ret = mod3(ending or "m", "m", "ns", "nt") elseif rfind(stem, "s$") then ret = mod3(ending or "s", "s", "s", "st") elseif rfind(stem, "g$") then ret = supporting_e("In addition, ''g'' becomes ''j'' before an ''a'' or an ''o'' to keep the /dʒ/ sound intact. ") elseif rfind(stem, "j$") or rfind(stem, "x$") or rfind(stem, "[^aeéiouyäëïöüÿ][bcdfghjklmnpqrtvwxz]$") then ret = supporting_e("") elseif ending then -- doubled rr, nn, hh local lastchar = rmatch(stem, "(.)$") ret = mod3(ending, lastchar, lastchar .. "s", lastchar .. "t") end return ret end ---------------------------------------------------------------------------- -- Functions for handling particular sorts of endings -- Convert a stressed verb stem to the form used with a zero ending -- (1st sing pres indic, also, 1st sing pres subj of -er verbs). -- See get_endings() for meaning of IER and SUPE. function add_zero(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[2]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -s ending -- (2nd sing pres indic of -ir/-oir/-re verbs, 2nd sing pres subj of -- -er verbs). Same code could be used to add -s to nouns except that -- handling of -c stems needs to be different (need to treat as hard /k/ -- not /ts/). See get_endings() for meaning of IER, SUPE and OLD. function add_s(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[3]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -t ending -- (3rd sing pres indic of -ir/-oir/-re verbs, 3rd sing pres subj of -- -er verbs). See get_endings() for meaning of IER, SUPE and OLD. function add_t(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[4]) assert(nsub == 1) return ret end -- Add -r, for the group-iii future function add_r(stem, old) local ret = stem .. "r" if rfind(stem, "ss$") then ret = rsub(stem, "ss$", "str") elseif rfind(stem, "is$") then ret = rsub(stem, "is$", "ir") elseif rfind(stem, "ïs$") then ret = rsub(stem, "ïs$", "ïr") elseif rfind(stem, "s$") then ret = stem .. "dr" elseif rfind(stem, "g?n$") then ret = rsub(stem, "g?n$", "ndr") elseif rfind(stem, "m$") then ret = stem .. "br" elseif rfind(stem, "i?ll?$") then ret = old and rsub(stem, "ll?$", "ldr") or rsub(stem, "i?ll?$", "udr") elseif rfind(stem, "qu$") then ret = rsub(stem, "qu$", "cr") elseif rfind(stem, "gu$") then ret = rsub(stem, "gu$", "gr") elseif rfind(stem, "[^aeiouäëïöü]r$") then ret = stem .. "er" end return ret end ---------------------------------------------------------------------------- -- Functions for handling comments at the top of conjugation tables -- Return true if this is an irregular verb, due to stems or particular -- forms being explicitly specified function irreg_verb(args, skip) if skip == nil then skip = {} elseif type(skip) == "string" then skip = {skip} end for k,v in pairs(args) do if k == "pres" and rfind(v, "/") or k ~= "pres" and k ~= "prese" and k ~= "presa" and k ~= "ier" and k ~= "supe" and k ~= "aux" and k ~= "refl" and k ~= "repl" and k ~= "prefix" and k ~= "suffix" and k ~= "old" and k ~= "ei" and k ~= "ir" and k ~= "impers" and k ~= "inf" and k ~= "comment" and not contains(skip, k) and v ~= '' then return true end end return false end -- Return comment describing phonetic changes to the verb in the present -- tense. Appears near the top of the conjugation chart. STEM is the stressed -- stem. See get_endings() for meaning of IER, SUPE and OLD. function phonetic_verb_comment(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) return e[5] end -- Return comment describing phonetic and stem changes to the verb in the -- present tense. Appears near the top of the conjugation chart. STEME is -- the unstressed stem before e/i, STEMS the stressed stem. -- See get_endings() for meaning of IER, SUPE and OLD. function verb_comment(args, group, steme, stems, ier, supe, old) if args["comment"] then return args["comment"] .. " " end local com = group == "i" and phonetic_verb_comment(stems, ier, supe, old) or "" local irreg = irreg_verb(args, 'press') if steme ~= stems then if args["repl"] then -- If there's a search/replace, it might change the stressed or -- unstressed stems. FIXME: apply search/replace to the stems -- themselves. com = com .. "This verb has a distinct stressed present stem" else com = com .. "This verb has a stressed present stem ''" .. (args["prefix"] or "") .. stems .. (args["suffix"] or "") .. "'' distinct from the unstressed stem ''" .. (args["prefix"] or "") .. steme .. (args["suffix"] or "") .. "''" end com = com .. (irreg and ", as well as other irregularities. " or ". ") elseif irreg then com = com .. "This verb has irregularities in its conjugation. " end return com end ---------------------------------------------------------------------------- -- Main inflection-handling functions -- Main entry point function export.show(frame) local origargs = frame:getParent().args local args = {} -- Convert empty arguments to nil, and "" or '' arguments to empty for k, v in pairs(origargs) do args[k] = ine(v) end -- Create the forms local data = { forms = {}, categories = {}, group = {}, comment = "", frame = frame, refl = args["refl"], impers = args["impers"], ier = args["ier"] or ine(frame.args["ier"]), supe = args["supe"] or ine(frame.args["supe"]) } data.forms.infinitive = {args["inf"] or mw.loadData("Module:headword/data").pagename} data.inf_from_title = not args["inf"] data.inf_no_affix = data.forms.infinitive[1] if args["prefix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, "^" .. args["prefix"], "") end if args["suffix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, args["suffix"] .. "$", "") end -- Set the soft vowel ('pres') and hard vowel ('presa') present stems. -- They can be explicitly set using 'pres' and 'presa' params. -- If one is set, the other is inferred from it. If neither is set, -- both are inferred from the infinitive. data.prese = args["pres"] and not rfind(args["pres"], "/") and args["pres"] or args["prese"] local inf_stem, inf_ending, inf_is_soft = get_stem_from_inf(data.inf_no_affix, data.ier, args["ir"]) if not data.prese then if inf_is_soft then data.prese = inf_stem else data.prese = stema_to_steme(inf_stem) end end data.old = args["old"] data.ei = args["ei"] or data.old or inf_ending == "eir" data.forms.aux = {data.refl and "estre" or args["aux"] or data.ei and "aveir" or "avoir"} -- Find what type of verb is it (hard-coded in the template). -- Generate standard conjugated forms for each type of verb. local infl_type = ine(frame.args["type"]) if not infl_type then error("Verb type ('type' arg) not specified.") elseif inflections[infl_type] then inflections[infl_type](args, data) else error("Verb type '" .. infl_type .. "' not supported.") end for _, group in ipairs(data.group) do -- table.insert(data.categories, "Old French " .. group .. " group verbs") end -- table.insert(data.categories, "Old French verbs ending in -" .. inf_ending) if data.impers then -- table.insert(data.categories, "Old French impersonal verbs") end -- Get overridden forms process_overrides(args, data) -- Add a prefix if specified if args["prefix"] then add_affix(data, args["prefix"], true) end -- Add a suffix if specified if args["suffix"] then add_affix(data, args["suffix"], false) end -- Apply any replacements local repl = args["repl"] if repl then replace_all(data, repl) end -- Add links add_links(data) -- Add reflexive pronouns if data.refl then add_reflexive_pronouns(args, data) end return make_table(data) .. m_utilities.format_categories(data.categories, lang) end -- Version of main entry point meant for calling from the debug console. function export.show2(args, parargs) local frame = {args = args, getParent = function() return {args = parargs} end} return export.show(frame) end -- If ARGBASE == "foo", return an array of -- {{args["foo"]},{args["foo2"]},...,{args["foo9"]}}. -- If ARGBASE is a sequence of strings, return an array of sequences, e.g. -- if ARGBASE == {"foo", "bar"}, return an array of -- {{{args["foo"]},{args["bar"]}},{{args["foo2"]},{args["bar2"]}},...,{{args["foo9"]},{args["bar9"]}}} -- There is an extra level of {}'s because nil can't be inserted into an array function get_args(args, argbase) if type(argbase) == "string" then local theargs = {{args[argbase]}} for j = 2, 9 do table.insert(theargs, {args[argbase .. j]}) end return theargs else local theargs = {} local onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item]}) end table.insert(theargs, onearg) for j = 2, 9 do onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item .. j]}) end table.insert(theargs, onearg) end return theargs end end -- Replaces terms with overridden ones that are given as additional named parameters. function process_overrides(args, data) -- Each term in current is overridden by one in overN, if it exists. local function override(current, over) current = current or {} local ret = {} local i = 1 local function getover(n) return args[over .. n] end -- Insert an override entry, possibly splitting on commas and -- inserting multiple forms. local function insert_override(entry) if entry ~= "-" then if rfind(entry, ",") then local forms = mw.text.split(entry, ",") for _, form in ipairs(forms) do table.insert(ret, form) end else table.insert(ret, entry) end end end -- Look for overrides at the beginning if getover(0) then insert_override(getover(0)) end -- Look for override of all current forms if getover("") then current = {} insert_override(getover("")) end -- See if any of the existing items in current have an override specified. while current[i] do if getover(i) then -- insert_if_not(data.categories, "Old French verbs with partial overrides") insert_override(getover(i)) else table.insert(ret, current[i]) end i = i + 1 end -- We've reached the end of current. -- Look in the override list to see if there are any extra forms to -- add on to the end. NOTE: We've deprecated this and made it an error. -- Use ...n to insert forms at the end. while i <= 9 do if getover(i) then error("Attempt to partially override a non-existent form: arg " .. over .. i .. "=" .. getover(i) .. ": use " .. over .. "n=" .. getover(i) .. " instead.") -- insert_override(getover(i)) end i = i + 1 end -- Look for overrides at the end if getover("n") then insert_override(getover("n")) end return ret end -- Mark terms with any additional parameters as irregular, except for -- certain ones that we consider normal variants. if irreg_verb(args) then table.insert(data.categories, "Old French irregular verbs") end --[[ This function replaces former code like this: data.forms.pret_indc_1sg = override(data.forms.pret_indc_1sg, "pret1s") data.forms.pret_indc_2sg = override(data.forms.pret_indc_2sg, "pret2s") data.forms.pret_indc_3sg = override(data.forms.pret_indc_3sg, "pret3s") data.forms.pret_indc_1pl = override(data.forms.pret_indc_1pl, "pret1p") data.forms.pret_indc_2pl = override(data.forms.pret_indc_2pl, "pret2p") data.forms.pret_indc_3pl = override(data.forms.pret_indc_3pl, "pret3p") --]] local function handle_tense_override(tense, short) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} local pnums_short = {"1s", "2s", "3s", "1p", "2p", "3p"} for pn = 1, #pnums do local pnum = pnums[pn] local pnum_short = pnums_short[pn] local tensepnum = tense .. "_" .. pnum data.forms[tensepnum] = override(data.forms[tensepnum], short .. pnum_short) end end -- Non-finite forms -- data.forms.infinitive = override(data.forms.infinitive, "inf") data.forms.pres_ptc = override(data.forms.pres_ptc, "presp") data.forms.past_ptc = override(data.forms.past_ptc, "pastp") handle_tense_override("pres_indc", "pres") -- Present handle_tense_override("impf_indc", "imperf") -- Imperfect handle_tense_override("pret_indc", "pret") -- Preterite handle_tense_override("futr_indc", "fut") -- Future handle_tense_override("cond", "cond") -- Conditional handle_tense_override("pres_subj", "sub") -- Present subjunctive handle_tense_override("impf_subj", "impsub") -- Imperfect subjunctive -- Imperative data.forms.impr_2sg = override(data.forms.impr_2sg, "imp2s") data.forms.impr_1pl = override(data.forms.impr_1pl, "imp1p") data.forms.impr_2pl = override(data.forms.impr_2pl, "imp2p") end -- Adds reflexive pronouns to the appropriate forms function add_reflexive_pronouns(args, data) -- Gather pronoun parameters local cprons = {} local vprons = {} cprons["1sg"] = args["me"] or "me " cprons["2sg"] = args["te"] or "te " cprons["3sg"] = args["se"] or "se " cprons["1pl"] = args["nos"] or "nos " cprons["2pl"] = args["vos"] or "vos " cprons["3pl"] = cprons["3sg"] vprons["1sg"] = args["me"] or "m'" vprons["2sg"] = args["te"] or "t'" vprons["3sg"] = args["se"] or "s'" vprons["1pl"] = args["nos"] or "nos " vprons["2pl"] = args["vos"] or "vos " vprons["3pl"] = vprons["3sg"] function add_refl(person, form) -- FIXME! YUCK! This hard-codes knowledge of how the links are formatted. -- Perhaps we should go back to the old way of having the reflexive code -- also insert links. if rfind(form, "^<span.*>[^a-zA-Z]*[aeiouAEIOU]") then return vprons[person] .. form else return cprons[person] .. form end end -- Go over all the forms in the list for key, subforms in pairs(data.forms) do -- Extract the person/number from the last 3 characters of the key local person = key:sub(-3) -- Skip these three, as they already had pronouns added earlier if cprons[person] and key ~= "impr_2sg" and key ~= "impr_1pl" and key ~= "impr_2pl" then -- Go through each of the alternative subforms and add the pronoun for key2, subform in ipairs(subforms) do data.forms[key][key2] = add_refl(person, subform) end end end -- Handle infinitive for key, subform in ipairs(data.forms.infinitive) do data.forms.infinitive[key] = add_refl("3sg", subform) end -- Handle imperatives for key, subform in ipairs(data.forms.impr_2sg) do data.forms.impr_2sg[key] = subform .. (data.ei and "-tei" or "-toi") end for key, subform in ipairs(data.forms.impr_1pl) do data.forms.impr_1pl[key] = subform .. "-nos" end for key, subform in ipairs(data.forms.impr_2pl) do data.forms.impr_2pl[key] = subform .. "-vos" end end -- Add links to all forms function add_links(data) for key, subforms in pairs(data.forms) do for key2, subform in ipairs(subforms) do data.forms[key][key2] = make_link(subform) end end end -- Add a prefix or suffix to all forms. AFFIX is what to add; IS_PREFIX is -- true if it's a prefix, otherwise a suffix. function add_affix(data, affix, is_prefix) for key, subforms in pairs(data.forms) do -- Don't add affix to aux, nor infinitive -- that comes from the page title. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = (is_prefix and affix .. subform or subform .. affix) end end end end -- Apply all replacements function replace_all(data, repl) for splitrepl in mw.text.gsplit(repl, ",") do local fromto = mw.text.split(splitrepl, "/") if #fromto ~= 2 then error("Replace spec '" .. splitrepl .. "' needs exactly one / in it") end local from = fromto[1] local to = fromto[2] for key, subforms in pairs(data.forms) do -- Don't search/replace on aux, nor on infinitive -- that comes from the page title. Don't want e.g. infinitive -- 'offrir' to become 'offffrir'. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = rsub(data.forms[key][key2], from, to) end end end end end -- Inflection functions -- Implementation of inflect_tense(). See that function. Also used directly -- to add the imperative, which has only three forms. function inflect_tense_1(data, tense, stems, endings, pnums) -- First, initialize any nil entries to sequences. for i, pnum in ipairs(pnums) do if data.forms[tense .. "_" .. pnum] == nil then data.forms[tense .. "_" .. pnum] = {} end end -- Now add entries for i = 1, #pnums do -- Extract endings for this person-number combo local ends = endings[i] if type(ends) == "string" then ends = {ends} end -- Extract stem for this person-number combo local stem = stems if type(stem) == "table" then stem = stem[i] end -- Add entries for stem + endings for j, ending in ipairs(ends) do local form = join(stem, ending) if ine(form) and form ~= "-" and (not data.impers or pnums[i] == "3sg") then table.insert(data.forms[tense .. "_" .. pnums[i]], form) end end end end -- Add to DATA the inflections for the tense indicated by TENSE (the prefix -- in the data.forms names, e.g. 'impf_subj'), formed by combining the STEMS -- (either a single string or a sequence of six strings) with the -- ENDINGS (a sequence of six values, each of which is either a string -- or a sequence of one or more possible endings). If existing -- inflections already exist, they will be added to, not overridden. function inflect_tense(data, tense, stems, endings) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} inflect_tense_1(data, tense, stems, endings, pnums) end -- Like inflect_tense() but for the imperative, which has only three forms -- instead of six. function inflect_tense_impr(data, tense, stems, endings) local pnums = {"2sg", "1pl", "2pl"} inflect_tense_1(data, tense, stems, endings, pnums) end function inflect_pres(data, tense, group, steme, stems, ier, supe) local i = ier and "i" or "" if steme ~= stems then -- insert_if_not(data.categories, "Old French verbs with stem alternations") end local oldt = data.old and "ṭ" or "" if tense == "impr" and group == "i" then inflect_tense_impr(data, tense, {stems, steme, steme}, {"e", "ons", i .. "ez"}) elseif tense == "impr" and group == "ii" then inflect_tense_impr(data, tense, steme, {"is", "issons", "issez"}) elseif tense == "impr" and group == "iii" then inflect_tense_impr(data, tense, {add_zero(stems, ier, supe, data.old), steme, steme}, {"", "ons", i .. "ez"}) elseif tense == "pres_indc" and group == "i" then inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), stems, stems, steme, steme, stems}, {"", "es", "e".. oldt, "ons", i .. "ez", "ent"}) elseif tense == "pres_indc" and group == "ii" then inflect_tense(data, tense, steme, {"is", "is", "ist", "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "ii" then inflect_tense(data, tense, steme, {"isse", "isses", "isse" .. oldt, "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "iii" then inflect_tense(data, tense, {stems, stems, stems, steme, steme, stems}, {"e", "es", "e" .. oldt, ier and {"iens", "ons"} or "ons", i .. "ez", "ent"}) else -- pres_indc group iii or pres_subj group i inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), add_s(stems, ier, supe, data.old), add_t(stems, ier, supe, data.old), steme, steme, stems}, {"", "", "", "ons", i .. "ez", "ent"}) end end -- Split a string into entries separated by slashes, each representing one -- of the possible person/number combinations. Each entry in turn may consist -- of one or more forms, separated by commas. NUMREQ is how many entries need -- to be present, defaulting to 6. function split_multipart(str, numreq) local entries = mw.text.split(str, "/") numreq = numreq or 6 if #entries ~= numreq then error("Expected " .. numreq .. " entries in multipart string '" .. str .. "'") end for i, entry in ipairs(entries) do if rfind(entry, ",") then entries[i] = mw.text.split(entry, ",") else entries[i] = {entry} end end return entries end function handle_pres(args, data, group, steme, stems) local ier = data.ier local supe = data.supe if args["pres"] and rfind(args["pres"], "/") then inflect_tense(data, "pres_indc", "", split_multipart(args["pres"])) else inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- If sub not set, derive from indicative. -- If subs not set, derive from sub if set, else from indicative. local sub_steme = args["sub"] local sub_dash = sub_steme == "-" local sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash then if not sub_specified then sub_steme = steme end local sub_stems = args["subs"] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier"] or (not sub_specified and ier), args["subsupe"] or (not sub_specified and supe)) end -- Repeat exactly for the imperative. local imp_steme = args["imp"] local imp_dash = imp_steme == "-" local imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash then if not imp_specified then imp_steme = steme end local imp_stems = args["imps"] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier"] or (not imp_specified and ier), args["impsupe"] or (not imp_specified and supe)) end -- If indic stem specified, we add indic values, and also corresponding -- subj values if separate subj stem not specified. for i = 2, 9 do steme = args["pres" .. i] local multi_indic = steme and rfind(steme, "/") local indic_specified = not multi_indic and steme if multi_indic then inflect_tense(data, "pres_indc", "", split_multipart(steme)) elseif indic_specified then stems = args["press" .. i] or steme ier = args["ier" .. i] supe = args["supe" .. i] inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- Handle subjunctive as above. sub_steme = args["sub" .. i] sub_dash = sub_steme == "-" sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash and (indic_specified or sub_specified) then if not sub_specified then sub_steme = steme end sub_stems = args["subs" .. i] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier" .. i] or (not sub_specified and ier), args["subsupe" .. i] or (not sub_specified and supe)) end -- Repeat for the imperative. imp_steme = args["imp" .. i] imp_dash = imp_steme == "-" imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash and (indic_specified or imp_specified) then if not imp_specified then imp_steme = steme end imp_stems = args["imps" .. i] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier" .. i] or (not imp_specified and ier), args["impsupe" .. i] or (not imp_specified and supe)) end end end -- Add to DATA the endings for the preterite and imperfect -- subjunctive, with unstressed e/i stem STEME, stressed e/i stem STEMS, -- conjugation type PTY and corresponding value of IMPSUB. function inflect_pret_impf_subj(data, stem, pty, pret, pretu, prets, impsub) local steme = pretu or pret or stem local stems = prets or pretu or pret or stem if pret and rfind(pret, "/") then inflect_tense(data, "pret_indc", "", split_multipart(pret)) inflect_impf_subj(data, impsub, nil, nil, nil) elseif pty then -- insert_if_not(data.categories, "Old French verbs with " .. pty .. " preterite") -- WARNING: If the second person singular of any of these is not a -- simple string, you will need to modify the handling below of -- the imperfect subjunctive, which relies on this form. local oldt = data.old and "ṭ" or "" local all_endings = pty == "weak-a" and {"ai","as","a" .. oldt,"ames","astes","erent"} or pty == "weak-a2" and {"ai","as","a" .. oldt,"ames","astes","ierent"} or pty == "weak-i" and {"i","is","i" .. oldt,"imes","istes","irent"} or -- FIXME: "Grammatik des Altfranzösischen I-III" (Dr. E. Schwan and -- Dr. D. Behrens), p. 229, claims that the old form of the weak-i2 -- ending is "ieḍrent", e.g. "rendieḍrent" < "rendęderunt", whereas the -- early 12th-century forms of E. Einhorn "Old French: A Concise Handbook" -- p.43 have only "ierent". I trust the latter because Schwan and Behrens -- also have the 3rd-singular as "rendiet" with a hard -t < "rendędit", -- but in reality it should be "rendieṭ" (i.e. "rendiéṭ") with a soft -ṭ, -- as per Einhorn and also William Kibler "An Introduction to Old French". -- Schwan and Behrens' forms would be correct if the underlying Vulgar -- Latin forms are correct, but I think haplology has deleted the second -- -d- so you should really have 3rd-singular "rendęt" > "rendiéṭ" and -- 3rd-plural "rendęrunt" > "rendierent". pty == "weak-i2" and {"i","is","ié" .. oldt,"imes","istes","ierent"} or pty == "strong-i" and {"","is","t","imes","istes","rent"} or pty == "strong-id" and {"","is","t","imes","istes",{"drent","rent"}} or pty == "weak-u" and {"ui","us","u" .. oldt,"umes","ustes","urent"} or pty == "strong-u" and {"ui","eüs","ut","eümes","eüstes","urent"} or pty == "strong-o" and {"oi","eüs","ot","eümes","eüstes","orent"} or pty == "strong-st" and {"s","sis","st","simes","sistes","strent"} or pty == "strong-sd" and {"s","ṣis","st","ṣimes","ṣistes","sdrent"} or error("Unrecognized prettype value '" .. pty .. "'") -- Always use one of the weak stems unless we have strong-stem endings local all_stems = rfind(pty, "^strong-") and {stems, steme, stems, steme, steme, stems} or {steme, steme, steme, steme, steme, steme} inflect_tense(data, "pret_indc", all_stems, all_endings) inflect_impf_subj(data, impsub, steme, join(all_stems[2], all_endings[2]), pty) elseif impsub then inflect_impf_subj(data, impsub, nil, nil, nil) end end function inflect_impf_subj(data, impsub, steme, pret2s, pty) -- Handle imperfect subj, which follows the same types as the preterite -- and is built off of the 2nd person singular form, although we need to -- special-case weak-a and weak-a2 local impsub_endings = {"se","ses","t",{"sons","siens"}, {data.ei and "seiz" or "soiz","sez","siez"},"sent"} if impsub and rfind(impsub, "/") then inflect_tense(data, "impf_subj", "", split_multipart(impsub)) elseif impsub == "-" then return elseif impsub then inflect_tense(data, "impf_subj", impsub, impsub_endings) -- need the % here to escape the dash, which otherwise stands for a -- character range??????? elseif pty and rfind(pty, "^weak%-a") then inflect_tense(data, "impf_subj", steme, {"asse","asses","ast", {"issons","issiens"}, {data.ei and "isseiz" or "issoiz","issez","issiez"},"assent"}) elseif pty then inflect_tense(data, "impf_subj", pret2s, impsub_endings) end end -- Add to DATA the endings for the preterite and imperfect subjunctive, -- based on the strong and weak stems and preterite ending type(s) given in -- ARGS. For each weak preterite ending type 'prettypeN' there should be a -- corresponding stem in 'pretN' (defaulting to STEM) and for each strong -- preterite ending type 'prettypeN' there should be corresponding unstressed -- and stressed stems in 'pretuN' and 'pretsN' (defaulting to 'pretN' or STEM). -- If specifically 'pret' and 'prettype' are unspecified, substitute defaults, -- specifically the fallback preterite type FBPTY and stressed/unstressed -- fallback stem FBSTEM. function handle_pret_impf_subj(args, data, stem, fbstem, fbpty) local all_props = get_args(args, {"prettype", "pret", "pretu", "prets", "impsub"}) for i, props in ipairs(all_props) do local thestem = stem local pty = props[1][1] local pret = props[2][1] local pretu = props[3][1] local prets = props[4][1] local impsub = props[5][1] if i == 1 and not pty and not pret then thestem = fbstem pty = fbpty pret = fbstem pretu = fbstem prets = fbstem end inflect_pret_impf_subj(data, thestem, pty, pret, pretu, prets, impsub) end end -- Add to DATA the forms for up to one paradigm of the future and conditional, -- based on the future stem in STEM (possibly nil). function inflect_future_cond(data, stem) if stem then if rfind(stem, "/") then inflect_tense(data, "futr_indc", "", split_multipart(stem)) else if data.old then inflect_tense(data, "futr_indc", stem, {"ai","as","aṭ","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", "iiens","iiez","eient"}) elseif data.ei then inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", {"iiens","iens"},{"iiez","iez"},"eient"}) else inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"oiz","eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {{"oie","eie"},{"oies","eies"},{"oit","eit"}, {"iiens","iens"},{"iiez","iez"},{"oient","eient"}}) end end end end -- Add to DATA all the forms for the future and conditional based on the -- future stem(s) in ARGS. Use If no future stems given, use STEM. function handle_future_cond(args, data, stem) local fut_args = get_args(args, "fut") -- Just override the value from args["fut"] if necessary if not args["fut"] then fut_args[1][1] = stem end for _, futarg in ipairs(fut_args) do local stem = futarg[1] inflect_future_cond(data, stem) end end -- Add to DATA the forms for up to one imperfect paradigm, corresponding to -- the imperfect stem in IMPERF (possibly nil), the corresponding ier= value -- in IMPERFIER, the corresponding present stem in PRES (possibly nil), and -- its corresponding ier= value in PRESIER. Only do something if either IMPERF -- or PRES is non-nil. function inflect_imperfect(data, group, imperf, imperfier, pres, presier) if imperf and rfind(imperf, "/") then inflect_tense(data, "impf_indc", "", split_multipart(imperf)) else if not imperf and pres and not rfind(pres, "/") then imperf = pres imperfier = presier end if imperf and imperf ~= "-" then local steme = imperf local stema = steme_to_stema(steme) local i = imperfier and "i" or "" if group == "i" and data.old then inflect_tense(data, "impf_indc", steme, {{"eie", "oue", i .. "eve"}, {"eies", "oues", i .. "eves"}, {"eit", "out", i .. "eveṭ"}, {"iiens"}, {"iiez"}, {"eient", "ouent", i .. "event"} }) elseif group == "i" and data.ei then inflect_tense(data, "impf_indc", steme, {{"eie", "oe", i .. "eve"}, {"eies", "oes", i .. "eves"}, {"eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"eient", "oent", i .. "event"} }) elseif group == "i" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie", "oe", i .. "eve"}, {"oies", "eies", "oes", i .. "eves"}, {"oit", "eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient", "oent", i .. "event"} }) elseif group == "ii" and data.old then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "ii" and data.ei then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "ii" then inflect_tense(data, "impf_indc", join(steme, "iss"), {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) elseif group == "iii" and data.old then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "iii" and data.ei then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "iii" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) end end end end -- Add to DATA all the forms for the imperfect based on the -- imperfect stem(s) in ARGS. If no imperfect stems given, use -- corresponding present stems if they exist, but use STEME and IER -- for the first present stem and ier= value, since they're computed -- specially. function handle_imperfect(args, data, group, steme, ier) local imperf_args = get_args(args, {"imperf","imperfier","pres","ier"}) -- Just override the values from args["pres"] and args["ier"] imperf_args[1][3][1] = steme imperf_args[1][4][1] = ier for _, stem in ipairs(imperf_args) do local imperf = stem[1][1] local imperfier = stem[2][1] local pres = stem[3][1] local presier = stem[4][1] inflect_imperfect(data, group, imperf, imperfier, pres, presier) end end -- Add to DATA up to one form of the present participle based on the -- present stem in PRES. Only do anything if PRES is non-nil and not a -- multipart specification. function inflect_pres_part(data, group, pres) if pres and not rfind(pres, "/") then if group == "ii" then table.insert(data.forms.pres_ptc, join(pres, "issant")) else table.insert(data.forms.pres_ptc, join(pres, "ant")) end end end -- Add to DATA the forms of the present participle based on the -- present stem(s) in ARGS. Use STEME for the first present stem, -- since it's computed specially. function handle_pres_part(args, data, group, steme) if data.forms.pres_ptc == nil then data.forms.pres_ptc = {} end local ppart_args = get_args(args, {"pres"}) -- Just override the value from args["pres"] ppart_args[1][1][1] = steme for _, stem in ipairs(ppart_args) do local pres = stem[1][1] inflect_pres_part(data, group, pres) end end -- Add to DATA the endings for an -er or -ier verb, based on the arguments -- in ARGS. inflections["i"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" if data.ier then data.comment = "This verb conjugates as a first-group verb ending in <<-ier>>, with a palatal stem. These verbs are conjugated mostly like verbs in <<-er>>, but there is an extra ''i'' before the ''e'' of some endings. " else data.comment = "This verb conjugates as a first-group verb ending in <<-er>>. " end data.comment = data.comment .. verb_comment(args, "i", prese, press, data.ier, data.supe, data.old) data.group = {"first"} handle_pres_part(args, data, "i", prese) data.forms.past_ptc = {join(prese, i .. "é" .. (data.old and "ṭ" or ""))} handle_pres(args, data, "i", prese, press) handle_imperfect(args, data, "i", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, data.ier and "weak-a2" or "weak-a") handle_future_cond(args, data, join(prese, "er")) end -- Add to DATA the endings for a type 2 verb (-ir, with -iss- infix), -- based on the arguments in ARGS. inflections["ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese data.comment = "This verb conjugates as a second-group verb (ending in <<-ir>>, with an <<-iss->> infix). " data.group = {"second"} handle_pres_part(args, data, "ii", prese) local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Add to DATA the endings for a type 3 verb (-ir without -iss- infix, or -- -re or -oir), based on the arguments in ARGS. inflections["iii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group verb. " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"third"} handle_pres_part(args, data, "iii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" if rfind(infinitive, "[^eo]ir$") then data.forms.past_ptc = {join(prese, "i" .. oldt)} elseif rfind(infinitive, "ïr$") then data.forms.past_ptc = {join(prese, "ï" .. oldt)} else data.forms.past_ptc = {join(prese, "u" .. oldt)} end handle_pres(args, data, "iii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) if rfind(infinitive, "[dt]re$") then handle_pret_impf_subj(args, data, prese, prese, "weak-i2") elseif rfind(infinitive, "re$") then local pretstem = add_s(prese, false, false, data.old) pretstem = rsub(pretstem, "s$", "") handle_pret_impf_subj(args, data, prese, pretstem, "strong-st") elseif rfind(infinitive, "[eo]ir$") then handle_pret_impf_subj(args, data, prese, prese, "weak-u") else handle_pret_impf_subj(args, data, prese, prese, "weak-i") end if rfind(infinitive, "[^eolrs]ir$") then handle_future_cond(args, data, join(prese, "ir")) else -- -re, -oir, -eir, -ïr, -lir, -sir, -rir handle_future_cond(args, data, add_r(prese, data.old)) end end -- Add to DATA the endings for a type 3/2 verb (-ir without or with -- -iss- infix), based on the arguments in ARGS. inflections["iii-ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group or second-group verb (ending in <<-ir>>, without or with an <<-iss->> infix). " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"တတိယ", "ဒုတိယ", "တတိယ-ဒုတိယ"} handle_pres_part(args, data, "iii", prese) handle_pres_part(args, data, "ii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "iii", prese, press) handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Shows the table with the given forms function make_table(data) return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. data.frame:preprocess((data.comment:gsub("<<(.-)>>", "{{m|fro|%1}}"))) .. [=[Old French conjugation varies significantly by date and by region. The following conjugation should be treated as a guide. <div class="NavFrame"> <div class="NavHead">&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ]=] .. m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. [=[ <span style="font-size:90%;"> (ဗဵုရံၚ် [[အဆက်လက္ကရဴ:ကြိယာပြၚ်သေတ်တြေံဂမၠိုၚ်]] တဏအ်ညိကီု)</span></div> <div class="NavContent"> {| class="roa-inflection-table" data-toggle-category="inflection" |- ! colspan="2" class="roa-nonfinite-header" | ! colspan="3" class="roa-nonfinite-header" | ဓမ္မတာ ! colspan="3" class="roa-nonfinite-header" | ဒပ်ပံၚ် |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာဟွံကၠောံ | colspan="3" | ]=] .. show_form(data.forms.infinitive) .. [=[ | colspan="3" | ]=] .. show_form(data.forms.aux) .. " " .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာစၞးနာမ် | colspan="3" | en ]=] .. show_form(data.forms.pres_ptc) .. [=[ | colspan="3" | ကြိယာစၞးနာမ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုပစ္စုပ္ပန် | colspan="3" | ]=] .. show_form(data.forms.pres_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် | colspan="3" | ]=] .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" rowspan="2" class="roa-person-number-header" | ပူဂဵု ! colspan="3" class="roa-person-number-header" | ကိုန်ဨကဝုစ် ! colspan="3" class="roa-person-number-header" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ |- ! class="roa-indicative-left-rail" colspan="2" | မစၞောန်ရန် ! class="roa-indicative-left-rail" | jo ! class="roa-indicative-left-rail" | tu ! class="roa-indicative-left-rail" | il ! class="roa-indicative-left-rail" | nos ! class="roa-indicative-left-rail" | vos ! class="roa-indicative-left-rail" | il |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲမပြဟ် | ]=] .. show_form(data.forms.pret_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ် | ]=] .. show_form(data.forms.futr_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန် | ]=] .. show_form(data.forms.cond_1sg) .. [=[ | ]=] .. show_form(data.forms.cond_2sg) .. [=[ | ]=] .. show_form(data.forms.cond_3sg) .. [=[ | ]=] .. show_form(data.forms.cond_1pl) .. [=[ | ]=] .. show_form(data.forms.cond_2pl) .. [=[ | ]=] .. show_form(data.forms.cond_3pl) .. [=[ |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | ဗီုပြၚ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲကိုပ်ကၠာ ! colspan="6" class="roa-compound-row" | ကာလအတိက်ဗွဲမပြဟ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလအနာဂတ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလတၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" colspan="2" | အရေဝ်နိဒါန် ! class="roa-subjunctive-left-rail" | que jo ! class="roa-subjunctive-left-rail" | que tu ! class="roa-subjunctive-left-rail" | qu’il ! class="roa-subjunctive-left-rail" | que nos ! class="roa-subjunctive-left-rail" | que vos ! class="roa-subjunctive-left-rail" | qu’il |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-subjunctive-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3pl) .. [=[ |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3pl) .. [=[ |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-subjunctive-left-rail" style="height:3em;" | အတိက် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | ပါဲဗလေတ်ဟွံဗၠး ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | tu ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | nos ! class="roa-imperative-left-rail" | vos ! class="roa-imperative-left-rail" | – |- | — | ]=] .. show_form(data.forms.impr_2sg) .. [=[ | — | ]=] .. show_form(data.forms.impr_1pl) .. [=[ | ]=] .. show_form(data.forms.impr_2pl) .. [=[ | — |- |}</div></div>]=] end -- Create a link for a form function make_link(subform) return m_links.full_link({lang = lang, term = subform}) end -- Shows forms, or a dash if empty function show_form(subforms) if not subforms then return "&mdash;" elseif type(subforms) ~= "table" then error("a non-table value was given in the list of inflected forms.") elseif #subforms == 0 then return "&mdash;" end -- Concatenate results, omitting duplicates local ret = {} for key, subform in ipairs(subforms) do insert_if_not(ret, subform) end return table.concat(ret, ", ") end return export 52cbd77tl189itt8u5szwst8jvpz6fj 397918 397917 2026-07-07T09:34:02Z 咽頭べさ 33 397918 Scribunto text/plain --[[ Author: User:benwing Todo: 1. Possibly, make it possible to specify multiple stems to stem parameters separated by commas. This is easiest for fut= but gets trickier for all the rest because there are multiple parameters per stem. 2. Should write a routine that extracts the present stems (pres, press, ier, plus equivalent for 2 .. 9, and handles the special-casing for 'pres/steme' and 'ier', and checks to make sure a multipart spec wasn't given, and uses the corresponding prese if so), and uses them in handle_imperfect() and handle_pres_part(). Also need to handle 'prese' in the subjunctive and imperative code, which should probably be rewritten along the lines of handle_imperfect(). 3. Create separate categories for verbs ending in various consonants, e.g. g, c, ch, ill, gn, etc. 4. Figure out how to create a category for verbs that are missing their conjugation (but are still identified as verbs because of {{head|fro|verb}}, which puts them into Category:Old French verbs). Possibly this isn't possible except using a bot. 5. Intro to Old French by Kibler claims that -lm requires a supporting vowel. Possibly -ln as well. What about -lf? Evidently -ld does not require a supporting vowel, due to 'chaud' < 'calidus'. Should we try to handle -lm specially? We might want to also handle -aum, -eum (but not -oum as in 'noumer', where 'ou' represents earlier 'o' rather than an 'l'). These verbs are rare enough, though, and hard enough to handle correctly that perhaps we should just require explicitly specifying supe= (or equivalently, using {{temp|fro-conj-er-e}} etc.). --]] local m_links = require("Module:links") local m_utilities = require("Module:utilities") local lang = require("Module:languages").getByCode("fro") local export = {} -- Functions that do the actual inflecting by creating the forms of a basic term. local inflections = {} local rfind = mw.ustring.find local rsub = mw.ustring.gsub local rmatch = mw.ustring.match local usub = mw.ustring.sub local function ine(x) -- If Not Empty if x == nil then return nil elseif rfind(x, '^".*"$') then local ret = rmatch(x, '^"(.*)"$') return ret elseif rfind(x, "^'.*'$") then local ret = rmatch(x, "^'(.*)'$") return ret elseif x == "" then return nil else return x end end local function contains(tab, item) for _, value in pairs(tab) do if value == item then return true end end return false end local function insert_if_not(tab, item) if not contains(tab, item) then table.insert(tab, item) end end ---------------------------------------------------------------------------- -- Functions for working with stems -- Given the stem as it appears before e/i, generate the corresponding -- stem for a/o. function steme_to_stema(steme) if rfind(steme, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stema = rsub(steme, "c$", "ç") return stema elseif rfind(steme, "g$") then local stema = rsub(steme, "g$", "j") return stema else return steme end end -- Given the stem as it appears before a/o, generate the corresponding -- stem for e/i. function stema_to_steme(stema) if rfind(stema, "c$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local steme = rsub(stema, "c$", "qu") return steme elseif rfind(stema, "g$") then local steme = rsub(stema, "g$", "gu") return steme elseif rfind(stema, "ç$") then local steme = rsub(stema, "ç$", "c") return steme else return stema end end -- Given the stem as it appears before a/o, generates the corresponding -- stem for u. function stema_to_stemu(stema) if rfind(stema, "qu$") then -- Need to assign to a var because rsub returns 2 values, and -- assigning to one var fetches only the first one local stemu = rsub(stema, "qu$", "c") return stemu elseif rfind(stema, "gu$") then local stemu = rsub(stema, "gu$", "g") return stemu else return stema end end -- Given the stem as it appears before e/i, generates the corresponding -- stem for u. function steme_to_stemu(steme) return stema_to_stemu(steme_to_stema(steme)) end -- Get the stem from the infinitive. Return stem and whether stem is -- soft-vowel (true except for -re and -oir verbs). -- -- Currently we rely on the IER argument being set in order to remove -- -ier from an infinitive. An alternative is to always check for -ier -- and assume that cases like 'signifier' which is an '-er' verb with a -- stem 'signifi' are handled by explicitly specifying the stem. (We -- assume this anyway in the case of any '-ir' verb whose stem ends -- in '-o', such as 'oir' "to hear".) local function get_stem_from_inf(inf, ier, ir) local nsub = 0 -- if 'ier' arg given and stem ends in -ier, strip it off. if ier then stem, nsub = rsub(inf, "ier$", "") if nsub > 0 then return stem, "ier", true end end -- Check for -er, -oir, -eir, -ir, -ïr, -re in sequence. -- Must check for -oir, -eir before -ir. stem, nsub = rsub(inf, "er$", "") if nsub > 0 then return stem, "er", true end if not ir then stem, nsub = rsub(inf, "oir$", "") if nsub > 0 then return stem, "oir", false end stem, nsub = rsub(inf, "eir$", "") if nsub > 0 then return stem, "eir", true end end stem, nsub = rsub(inf, "ir$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "ïr$", "") if nsub > 0 then return stem, "ir", true end stem, nsub = rsub(inf, "re$", "") if nsub > 0 then return stem, "re", false end error("Unrecognized infinitive '" .. inf .. "'") end -- Get the present stem, either explicitly passed in as the first arg or -- implicitly through the page name, assumed to be the same as the -- infinitive. Currently we rely on the 'ier' argument being set in -- order to remove -ier from an infinitive. An alternative is to -- always check for -ier an assume that cases like 'signifier' which -- is an '-er' verb with a stem 'signifi' are handled by explicitly -- specifying the stem. (We assume this anyway in the case of any '-ir' -- verb whose stem ends in '-o', such as 'oir' "to hear".) local function get_stem_from_frame(frame) local stem = ine(frame.args[1]) -- if stem passed in and non-blank, use it. if stem then return stem end local inf = mw.loadData("Module:headword/data").pagename local ier = ine(frame.args["ier"]) local ir = ine(frame.args["ir"]) local stem, ending, is_soft = get_stem_from_inf(inf, ier, ir) return stem end -- External entry point for get_stem_from_frame(). Optional stem is first -- argument, optional 'ier' argument is used for -ier verbs (see -- get_stem_from_frame()). function export.get_stem(frame) return get_stem_from_frame(frame) end -- Joins a stem to an ending, automatically handling the stem changes needed -- before different vowels (steme/stema/stemu), and automatically adding umlauts -- to the stem and/or ending when necessary. The stem form passed in is steme -- (the form before e/i). function join(stem, ending) local firstend = usub(ending, 1, 1) -- change the stem as appropriate if firstend == "a" or firstend == "o" then stem = steme_to_stema(stem) elseif firstend == "u" then stem = steme_to_stemu(stem) end -- add an umlaut to i or u at beginning of ending if there's a vowel -- at the end of the stem, unless it's the same vowel, or a diphthong -- ending in i/u, or gu/qu. if firstend == "i" and (rfind(stem, "[aeoü]$") or rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$")) then ending = rsub(ending, "^i", "ï") elseif firstend == "u" and (rfind(stem, "[aeïo]$") or rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$")) then ending = rsub(ending, "^u", "ü") -- add an umlaut to i or u at end of stem if ending begins with e/é and -- stem doesn't end in diphthong, or gu/qu. elseif firstend == "e" or firstend == "é" then if rfind(stem, "i$") and not rfind(stem, "[aäeëéoöuü]i$") then stem = rsub(stem, "i$", "ï") elseif rfind(stem, "u$") and not rfind(stem, "[gqaäeëéiïoö]u$") then stem = rsub(stem, "u$", "ü") end end return stem .. ending end ---------------------------------------------------------------------------- -- Functions for generating arrays of endings -- Generate an ending array (five-element, see below), where a supporting ''e'' -- is needed. local function supporting_e(extra) local text = "In the present tense an extra supporting ''e'' is needed in the first-person singular indicative and throughout the singular subjunctive, and the third-person singular subjunctive ending ''-t'' is lost. " text = text .. extra return {"", "e", "es", "e", text} end -- Generate a general ending array (five-element, see below). local function mod3(ending, zero, s, t) local text = nil if ending == zero then text = string.format("The forms that would normally end in *''-%ss'', *''-%st'' are modified to ''%s'', ''%s''. ", ending, ending, s, t) else text = string.format("The forms that would normally end in *''-%s'', *''-%ss'', *''-%st'' are modified to ''%s'', ''%s'', ''%s''. ", ending, ending, ending, zero, s, t) end return {ending, zero, s, t, text} end -- Return the stem and an array of five elements. In the array, the first -- is the ending to be substitute, the second is the add_zero ending to -- substitute, the third is the add_s ending to substitute, the fourth is -- the add_t ending to substitute and the fifth is the text going into the -- comment at the top of the conj table. IER should be specified for -ier -- verbs, which only occur with palatal(ized) final consonants, and causes -- a different interpretation of certain consonants, esp. final l. -- If SUPE is specified, force a supporting -e to be added (normally this -- is inferred automatically from the stem). If OLD is specified, don't -- convert l before consonant to u. local function get_endings(stem, ier, supe, old) local ret = {"", "", "s", "t", ""} local ending = nil -- canonicalize ngn to gn when after vowel or r, l if rfind(stem, "[aeiouyäëïöüÿrl]ngn$") then ending = "ngn" stem = rsub(stem, "ngn$", "gn") end -- canonicalize double letter to single after vowel, except for l -- we need to treat Cill and Cil differently if rfind(stem, "[aeéiouyäëïöüÿ]([bcdfghjkmnpqrstvwxz])%1$") then ending = rmatch(stem, "(..)$") stem = rsub(stem, "([bcdfghjkmnpqrstvwxz])%1$", "%1") end if supe then ret = supporting_e("") elseif rfind(stem, "mb$") then ret = mod3("mb", "mp", "ns", "nt") elseif rfind(stem, "mp$") then ret = mod3("mp", "mp", "ns", "nt") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])[bpdtḍṭfvczk]$") then local lastchar = rmatch(stem, "(.)$") ending = ending or lastchar if lastchar == "b" or lastchar == "p" then ret = mod3(ending, "p", "s", "t") elseif lastchar == "d" or lastchar == "t" then ret = mod3(ending, "t", "z", "t") elseif lastchar == "ḍ" or lastchar == "ṭ" then ret = mod3(ending, "ṭ", "z", "t") elseif lastchar == "f" or lastchar == "v" then ret = mod3(ending, "f", "s", "t") elseif lastchar == "c" then ret = mod3(ending, "z", "z", "zt") ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " -- at least in bauptizer, 'z' appears to represent /z/, like 's' -- in the same position elseif lastchar == "z" then ret = mod3(ending, "s", "s", "st") elseif lastchar == "k" then ret = mod3(ending, "k", "s", "t") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])c?qu$") then ending = rmatch(stem, "(c?qu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])g?gu$") then ending = rmatch(stem, "(g?gu)$") ret = mod3(ending, "c", "s", "t") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])ct$") then -- convicter, paincter. Best guess here ret = mod3("ct", "ct", "cz", "ct") elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[bpdtczk]$") then local lastchar = rmatch(stem, "(.)$") ending = "s" .. (ending or lastchar) if lastchar == "b" or lastchar == "p" then -- Best guess here, esp. for 'sb' ret = mod3(ending, "sp", "s", "st") elseif lastchar == "d" or lastchar == "t" then -- croster, etc. -- brosder. Best guess here ret = mod3(ending, "st", "z", "st") elseif lastchar == "c" or lastchar == "z" then -- drescier, laiszier(?). Best guess here ret = mod3(ending, "z", "z", "zt") if lastchar == "c" then ret[5] = ret[5] .. "In addition, ''c'' becomes ''ç'' before an ''a, o'' or ''u'' to keep the /ts/ sound intact. " end elseif lastchar == "k" then ret = mod3(ending, "sk", "s", "st") else error("Internal error: Unhandled case for character '" .. lastchar .. "'") end elseif rfind(stem, "([aeéiouyäëïöüÿrlmn])s[qg]u$") then -- Best guess here ending = rmatch(stem, "(s[qg]u)$") ret = mod3(ending, "sc", "s", "st") elseif old and (rfind(stem, "([aeéouäëöü])[iy]ll?$") or (rfind(stem, "[aeéouäëöü]ll?$") and ier)) then ending = rmatch(stem, "(.[iy]?ll?)$") local prev = rmatch(stem, "(.[iy]?)ll?$") ret = mod3(ending, prev .. "l", prev .. "lz", prev .. "lt") elseif rfind(stem, "([aeéoäëö])[iy]ll?$") or (rfind(stem, "[aeéoäëö]ll?$") and ier) then ending = rmatch(stem, "(.[iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local prev = rmatch(stem, "(.)[iy]?ll?$") ret = mod3(ending, prev .. i .. "l", prev .. "uz", prev .. "ut") elseif rfind(stem, "[uü][iy]ll?$") or (rfind(stem, "[uü]ll?$") and ier) then ending = rmatch(stem, "([uü][iy]?ll?)$") local i = ine(rmatch(stem, "([iy]?)ll?$")) or "i" local u = rmatch(stem, "([uü])[iy]?ll?$") ret = mod3(ending, u .. i .. "l", u .. "z", u .. "t") elseif rfind(stem, "[iïyÿ]ll$") or (rfind(stem, "[iïyÿ]l$") and ier) then ending = rmatch(stem, "([iïyÿ]ll?)$") local i = rmatch(stem, "([iïyÿ])ll?$") ret = old and mod3(ending, i .. "l", i .. "lz", i .. "lt") or mod3(ending, i .. "l", i .. "z", i .. "t") elseif rfind(stem, "([^iu])[eé]ll?$") or rfind(stem, "ëll?$") then -- first rfind() above should not have ïü or ë in it ending = rmatch(stem, "([eéë]ll?)$") local e = rmatch(stem, "([eéë])ll?$") -- FIXME: Should this be eals, ealt when old? ret = old and mod3(ending, e .. "l", e .. "ls", e .. "lt") or mod3(ending, e .. "l", e .. "aus", e .. "aut") elseif rfind(stem, "([aeéoäö])ll?$") then -- not ë, handled above -- first rmatch below should not have ïü or ë in it ending = rmatch(stem, "([iu][eé]ll?)$") or rmatch(stem, "([aoäö]ll?)$") local prev = rmatch(stem, "([iu][eé])ll?$") or rmatch(stem, "([aoäö])ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "us", prev .. "ut") elseif rfind(stem, "([iuyïüÿ])ll?$") then ending = rmatch(stem, "(.ll?)$") local prev = rmatch(stem, "(.)ll?$") ret = old and mod3(ending, prev .. "l", prev .. "ls", prev .. "lt") or mod3(ending, prev .. "l", prev .. "s", prev .. "t") elseif rfind(stem, "[iyïÿl]gn$") then local prev = rmatch(stem, "([iyïÿl])gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ng", prev .. "nz", prev .. "nt") elseif rfind(stem, "rgn$") then ret = mod3("r" .. (ending or "gn"), "rng", "rz", "rt") elseif rfind(stem, "([aeéouäëöü])gn$") then local prev = rmatch(stem, "(.)gn$") ret = mod3(prev .. (ending or "gn"), prev .. "ing", prev .. "inz", prev .. "int") elseif rfind(stem, "rm$") then ret = mod3("rm", "rm", "rs", "rt") elseif rfind(stem, "rn$") then ret = mod3("rn", "rn", "rz", "rt") elseif rfind(stem, "[aeéiouyäëïöüÿl]m$") then ret = mod3(ending or "m", "m", "ns", "nt") elseif rfind(stem, "s$") then ret = mod3(ending or "s", "s", "s", "st") elseif rfind(stem, "g$") then ret = supporting_e("In addition, ''g'' becomes ''j'' before an ''a'' or an ''o'' to keep the /dʒ/ sound intact. ") elseif rfind(stem, "j$") or rfind(stem, "x$") or rfind(stem, "[^aeéiouyäëïöüÿ][bcdfghjklmnpqrtvwxz]$") then ret = supporting_e("") elseif ending then -- doubled rr, nn, hh local lastchar = rmatch(stem, "(.)$") ret = mod3(ending, lastchar, lastchar .. "s", lastchar .. "t") end return ret end ---------------------------------------------------------------------------- -- Functions for handling particular sorts of endings -- Convert a stressed verb stem to the form used with a zero ending -- (1st sing pres indic, also, 1st sing pres subj of -er verbs). -- See get_endings() for meaning of IER and SUPE. function add_zero(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[2]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -s ending -- (2nd sing pres indic of -ir/-oir/-re verbs, 2nd sing pres subj of -- -er verbs). Same code could be used to add -s to nouns except that -- handling of -c stems needs to be different (need to treat as hard /k/ -- not /ts/). See get_endings() for meaning of IER, SUPE and OLD. function add_s(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[3]) assert(nsub == 1) return ret end -- Convert a stressed verb stem to the form used with a -t ending -- (3rd sing pres indic of -ir/-oir/-re verbs, 3rd sing pres subj of -- -er verbs). See get_endings() for meaning of IER, SUPE and OLD. function add_t(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) -- We need to assign to a variable here because rsub() returns multiple -- values and we want only the first returned. Return rsub() directly -- and all values get returned and appended to the string. local ret, nsub = rsub(stem, e[1] .. "$", e[4]) assert(nsub == 1) return ret end -- Add -r, for the group-iii future function add_r(stem, old) local ret = stem .. "r" if rfind(stem, "ss$") then ret = rsub(stem, "ss$", "str") elseif rfind(stem, "is$") then ret = rsub(stem, "is$", "ir") elseif rfind(stem, "ïs$") then ret = rsub(stem, "ïs$", "ïr") elseif rfind(stem, "s$") then ret = stem .. "dr" elseif rfind(stem, "g?n$") then ret = rsub(stem, "g?n$", "ndr") elseif rfind(stem, "m$") then ret = stem .. "br" elseif rfind(stem, "i?ll?$") then ret = old and rsub(stem, "ll?$", "ldr") or rsub(stem, "i?ll?$", "udr") elseif rfind(stem, "qu$") then ret = rsub(stem, "qu$", "cr") elseif rfind(stem, "gu$") then ret = rsub(stem, "gu$", "gr") elseif rfind(stem, "[^aeiouäëïöü]r$") then ret = stem .. "er" end return ret end ---------------------------------------------------------------------------- -- Functions for handling comments at the top of conjugation tables -- Return true if this is an irregular verb, due to stems or particular -- forms being explicitly specified function irreg_verb(args, skip) if skip == nil then skip = {} elseif type(skip) == "string" then skip = {skip} end for k,v in pairs(args) do if k == "pres" and rfind(v, "/") or k ~= "pres" and k ~= "prese" and k ~= "presa" and k ~= "ier" and k ~= "supe" and k ~= "aux" and k ~= "refl" and k ~= "repl" and k ~= "prefix" and k ~= "suffix" and k ~= "old" and k ~= "ei" and k ~= "ir" and k ~= "impers" and k ~= "inf" and k ~= "comment" and not contains(skip, k) and v ~= '' then return true end end return false end -- Return comment describing phonetic changes to the verb in the present -- tense. Appears near the top of the conjugation chart. STEM is the stressed -- stem. See get_endings() for meaning of IER, SUPE and OLD. function phonetic_verb_comment(stem, ier, supe, old) local e = get_endings(stem, ier, supe, old) return e[5] end -- Return comment describing phonetic and stem changes to the verb in the -- present tense. Appears near the top of the conjugation chart. STEME is -- the unstressed stem before e/i, STEMS the stressed stem. -- See get_endings() for meaning of IER, SUPE and OLD. function verb_comment(args, group, steme, stems, ier, supe, old) if args["comment"] then return args["comment"] .. " " end local com = group == "i" and phonetic_verb_comment(stems, ier, supe, old) or "" local irreg = irreg_verb(args, 'press') if steme ~= stems then if args["repl"] then -- If there's a search/replace, it might change the stressed or -- unstressed stems. FIXME: apply search/replace to the stems -- themselves. com = com .. "This verb has a distinct stressed present stem" else com = com .. "This verb has a stressed present stem ''" .. (args["prefix"] or "") .. stems .. (args["suffix"] or "") .. "'' distinct from the unstressed stem ''" .. (args["prefix"] or "") .. steme .. (args["suffix"] or "") .. "''" end com = com .. (irreg and ", as well as other irregularities. " or ". ") elseif irreg then com = com .. "This verb has irregularities in its conjugation. " end return com end ---------------------------------------------------------------------------- -- Main inflection-handling functions -- Main entry point function export.show(frame) local origargs = frame:getParent().args local args = {} -- Convert empty arguments to nil, and "" or '' arguments to empty for k, v in pairs(origargs) do args[k] = ine(v) end -- Create the forms local data = { forms = {}, categories = {}, group = {}, comment = "", frame = frame, refl = args["refl"], impers = args["impers"], ier = args["ier"] or ine(frame.args["ier"]), supe = args["supe"] or ine(frame.args["supe"]) } data.forms.infinitive = {args["inf"] or mw.loadData("Module:headword/data").pagename} data.inf_from_title = not args["inf"] data.inf_no_affix = data.forms.infinitive[1] if args["prefix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, "^" .. args["prefix"], "") end if args["suffix"] and data.inf_from_title then data.inf_no_affix = rsub(data.inf_no_affix, args["suffix"] .. "$", "") end -- Set the soft vowel ('pres') and hard vowel ('presa') present stems. -- They can be explicitly set using 'pres' and 'presa' params. -- If one is set, the other is inferred from it. If neither is set, -- both are inferred from the infinitive. data.prese = args["pres"] and not rfind(args["pres"], "/") and args["pres"] or args["prese"] local inf_stem, inf_ending, inf_is_soft = get_stem_from_inf(data.inf_no_affix, data.ier, args["ir"]) if not data.prese then if inf_is_soft then data.prese = inf_stem else data.prese = stema_to_steme(inf_stem) end end data.old = args["old"] data.ei = args["ei"] or data.old or inf_ending == "eir" data.forms.aux = {data.refl and "estre" or args["aux"] or data.ei and "aveir" or "avoir"} -- Find what type of verb is it (hard-coded in the template). -- Generate standard conjugated forms for each type of verb. local infl_type = ine(frame.args["type"]) if not infl_type then error("Verb type ('type' arg) not specified.") elseif inflections[infl_type] then inflections[infl_type](args, data) else error("Verb type '" .. infl_type .. "' not supported.") end for _, group in ipairs(data.group) do -- table.insert(data.categories, "Old French " .. group .. " group verbs") end -- table.insert(data.categories, "Old French verbs ending in -" .. inf_ending) if data.impers then -- table.insert(data.categories, "Old French impersonal verbs") end -- Get overridden forms process_overrides(args, data) -- Add a prefix if specified if args["prefix"] then add_affix(data, args["prefix"], true) end -- Add a suffix if specified if args["suffix"] then add_affix(data, args["suffix"], false) end -- Apply any replacements local repl = args["repl"] if repl then replace_all(data, repl) end -- Add links add_links(data) -- Add reflexive pronouns if data.refl then add_reflexive_pronouns(args, data) end return make_table(data) .. m_utilities.format_categories(data.categories, lang) end -- Version of main entry point meant for calling from the debug console. function export.show2(args, parargs) local frame = {args = args, getParent = function() return {args = parargs} end} return export.show(frame) end -- If ARGBASE == "foo", return an array of -- {{args["foo"]},{args["foo2"]},...,{args["foo9"]}}. -- If ARGBASE is a sequence of strings, return an array of sequences, e.g. -- if ARGBASE == {"foo", "bar"}, return an array of -- {{{args["foo"]},{args["bar"]}},{{args["foo2"]},{args["bar2"]}},...,{{args["foo9"]},{args["bar9"]}}} -- There is an extra level of {}'s because nil can't be inserted into an array function get_args(args, argbase) if type(argbase) == "string" then local theargs = {{args[argbase]}} for j = 2, 9 do table.insert(theargs, {args[argbase .. j]}) end return theargs else local theargs = {} local onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item]}) end table.insert(theargs, onearg) for j = 2, 9 do onearg = {} for i, item in ipairs(argbase) do table.insert(onearg, {args[item .. j]}) end table.insert(theargs, onearg) end return theargs end end -- Replaces terms with overridden ones that are given as additional named parameters. function process_overrides(args, data) -- Each term in current is overridden by one in overN, if it exists. local function override(current, over) current = current or {} local ret = {} local i = 1 local function getover(n) return args[over .. n] end -- Insert an override entry, possibly splitting on commas and -- inserting multiple forms. local function insert_override(entry) if entry ~= "-" then if rfind(entry, ",") then local forms = mw.text.split(entry, ",") for _, form in ipairs(forms) do table.insert(ret, form) end else table.insert(ret, entry) end end end -- Look for overrides at the beginning if getover(0) then insert_override(getover(0)) end -- Look for override of all current forms if getover("") then current = {} insert_override(getover("")) end -- See if any of the existing items in current have an override specified. while current[i] do if getover(i) then -- insert_if_not(data.categories, "Old French verbs with partial overrides") insert_override(getover(i)) else table.insert(ret, current[i]) end i = i + 1 end -- We've reached the end of current. -- Look in the override list to see if there are any extra forms to -- add on to the end. NOTE: We've deprecated this and made it an error. -- Use ...n to insert forms at the end. while i <= 9 do if getover(i) then error("Attempt to partially override a non-existent form: arg " .. over .. i .. "=" .. getover(i) .. ": use " .. over .. "n=" .. getover(i) .. " instead.") -- insert_override(getover(i)) end i = i + 1 end -- Look for overrides at the end if getover("n") then insert_override(getover("n")) end return ret end -- Mark terms with any additional parameters as irregular, except for -- certain ones that we consider normal variants. if irreg_verb(args) then table.insert(data.categories, "ကြိယာပြၚ်သေတ်တြေံမဗၠေတ်မံၚ်နကဵုအတိုၚ်ပကတိဂမၠိုၚ်") end --[[ This function replaces former code like this: data.forms.pret_indc_1sg = override(data.forms.pret_indc_1sg, "pret1s") data.forms.pret_indc_2sg = override(data.forms.pret_indc_2sg, "pret2s") data.forms.pret_indc_3sg = override(data.forms.pret_indc_3sg, "pret3s") data.forms.pret_indc_1pl = override(data.forms.pret_indc_1pl, "pret1p") data.forms.pret_indc_2pl = override(data.forms.pret_indc_2pl, "pret2p") data.forms.pret_indc_3pl = override(data.forms.pret_indc_3pl, "pret3p") --]] local function handle_tense_override(tense, short) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} local pnums_short = {"1s", "2s", "3s", "1p", "2p", "3p"} for pn = 1, #pnums do local pnum = pnums[pn] local pnum_short = pnums_short[pn] local tensepnum = tense .. "_" .. pnum data.forms[tensepnum] = override(data.forms[tensepnum], short .. pnum_short) end end -- Non-finite forms -- data.forms.infinitive = override(data.forms.infinitive, "inf") data.forms.pres_ptc = override(data.forms.pres_ptc, "presp") data.forms.past_ptc = override(data.forms.past_ptc, "pastp") handle_tense_override("pres_indc", "pres") -- Present handle_tense_override("impf_indc", "imperf") -- Imperfect handle_tense_override("pret_indc", "pret") -- Preterite handle_tense_override("futr_indc", "fut") -- Future handle_tense_override("cond", "cond") -- Conditional handle_tense_override("pres_subj", "sub") -- Present subjunctive handle_tense_override("impf_subj", "impsub") -- Imperfect subjunctive -- Imperative data.forms.impr_2sg = override(data.forms.impr_2sg, "imp2s") data.forms.impr_1pl = override(data.forms.impr_1pl, "imp1p") data.forms.impr_2pl = override(data.forms.impr_2pl, "imp2p") end -- Adds reflexive pronouns to the appropriate forms function add_reflexive_pronouns(args, data) -- Gather pronoun parameters local cprons = {} local vprons = {} cprons["1sg"] = args["me"] or "me " cprons["2sg"] = args["te"] or "te " cprons["3sg"] = args["se"] or "se " cprons["1pl"] = args["nos"] or "nos " cprons["2pl"] = args["vos"] or "vos " cprons["3pl"] = cprons["3sg"] vprons["1sg"] = args["me"] or "m'" vprons["2sg"] = args["te"] or "t'" vprons["3sg"] = args["se"] or "s'" vprons["1pl"] = args["nos"] or "nos " vprons["2pl"] = args["vos"] or "vos " vprons["3pl"] = vprons["3sg"] function add_refl(person, form) -- FIXME! YUCK! This hard-codes knowledge of how the links are formatted. -- Perhaps we should go back to the old way of having the reflexive code -- also insert links. if rfind(form, "^<span.*>[^a-zA-Z]*[aeiouAEIOU]") then return vprons[person] .. form else return cprons[person] .. form end end -- Go over all the forms in the list for key, subforms in pairs(data.forms) do -- Extract the person/number from the last 3 characters of the key local person = key:sub(-3) -- Skip these three, as they already had pronouns added earlier if cprons[person] and key ~= "impr_2sg" and key ~= "impr_1pl" and key ~= "impr_2pl" then -- Go through each of the alternative subforms and add the pronoun for key2, subform in ipairs(subforms) do data.forms[key][key2] = add_refl(person, subform) end end end -- Handle infinitive for key, subform in ipairs(data.forms.infinitive) do data.forms.infinitive[key] = add_refl("3sg", subform) end -- Handle imperatives for key, subform in ipairs(data.forms.impr_2sg) do data.forms.impr_2sg[key] = subform .. (data.ei and "-tei" or "-toi") end for key, subform in ipairs(data.forms.impr_1pl) do data.forms.impr_1pl[key] = subform .. "-nos" end for key, subform in ipairs(data.forms.impr_2pl) do data.forms.impr_2pl[key] = subform .. "-vos" end end -- Add links to all forms function add_links(data) for key, subforms in pairs(data.forms) do for key2, subform in ipairs(subforms) do data.forms[key][key2] = make_link(subform) end end end -- Add a prefix or suffix to all forms. AFFIX is what to add; IS_PREFIX is -- true if it's a prefix, otherwise a suffix. function add_affix(data, affix, is_prefix) for key, subforms in pairs(data.forms) do -- Don't add affix to aux, nor infinitive -- that comes from the page title. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = (is_prefix and affix .. subform or subform .. affix) end end end end -- Apply all replacements function replace_all(data, repl) for splitrepl in mw.text.gsplit(repl, ",") do local fromto = mw.text.split(splitrepl, "/") if #fromto ~= 2 then error("Replace spec '" .. splitrepl .. "' needs exactly one / in it") end local from = fromto[1] local to = fromto[2] for key, subforms in pairs(data.forms) do -- Don't search/replace on aux, nor on infinitive -- that comes from the page title. Don't want e.g. infinitive -- 'offrir' to become 'offffrir'. if key ~= "aux" and (key ~= "infinitive" or not data.inf_from_title) then for key2, subform in ipairs(subforms) do data.forms[key][key2] = rsub(data.forms[key][key2], from, to) end end end end end -- Inflection functions -- Implementation of inflect_tense(). See that function. Also used directly -- to add the imperative, which has only three forms. function inflect_tense_1(data, tense, stems, endings, pnums) -- First, initialize any nil entries to sequences. for i, pnum in ipairs(pnums) do if data.forms[tense .. "_" .. pnum] == nil then data.forms[tense .. "_" .. pnum] = {} end end -- Now add entries for i = 1, #pnums do -- Extract endings for this person-number combo local ends = endings[i] if type(ends) == "string" then ends = {ends} end -- Extract stem for this person-number combo local stem = stems if type(stem) == "table" then stem = stem[i] end -- Add entries for stem + endings for j, ending in ipairs(ends) do local form = join(stem, ending) if ine(form) and form ~= "-" and (not data.impers or pnums[i] == "3sg") then table.insert(data.forms[tense .. "_" .. pnums[i]], form) end end end end -- Add to DATA the inflections for the tense indicated by TENSE (the prefix -- in the data.forms names, e.g. 'impf_subj'), formed by combining the STEMS -- (either a single string or a sequence of six strings) with the -- ENDINGS (a sequence of six values, each of which is either a string -- or a sequence of one or more possible endings). If existing -- inflections already exist, they will be added to, not overridden. function inflect_tense(data, tense, stems, endings) local pnums = {"1sg", "2sg", "3sg", "1pl", "2pl", "3pl"} inflect_tense_1(data, tense, stems, endings, pnums) end -- Like inflect_tense() but for the imperative, which has only three forms -- instead of six. function inflect_tense_impr(data, tense, stems, endings) local pnums = {"2sg", "1pl", "2pl"} inflect_tense_1(data, tense, stems, endings, pnums) end function inflect_pres(data, tense, group, steme, stems, ier, supe) local i = ier and "i" or "" if steme ~= stems then -- insert_if_not(data.categories, "Old French verbs with stem alternations") end local oldt = data.old and "ṭ" or "" if tense == "impr" and group == "i" then inflect_tense_impr(data, tense, {stems, steme, steme}, {"e", "ons", i .. "ez"}) elseif tense == "impr" and group == "ii" then inflect_tense_impr(data, tense, steme, {"is", "issons", "issez"}) elseif tense == "impr" and group == "iii" then inflect_tense_impr(data, tense, {add_zero(stems, ier, supe, data.old), steme, steme}, {"", "ons", i .. "ez"}) elseif tense == "pres_indc" and group == "i" then inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), stems, stems, steme, steme, stems}, {"", "es", "e".. oldt, "ons", i .. "ez", "ent"}) elseif tense == "pres_indc" and group == "ii" then inflect_tense(data, tense, steme, {"is", "is", "ist", "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "ii" then inflect_tense(data, tense, steme, {"isse", "isses", "isse" .. oldt, "issons", "issez", "issent"}) elseif tense == "pres_subj" and group == "iii" then inflect_tense(data, tense, {stems, stems, stems, steme, steme, stems}, {"e", "es", "e" .. oldt, ier and {"iens", "ons"} or "ons", i .. "ez", "ent"}) else -- pres_indc group iii or pres_subj group i inflect_tense(data, tense, {add_zero(stems, ier, supe, data.old), add_s(stems, ier, supe, data.old), add_t(stems, ier, supe, data.old), steme, steme, stems}, {"", "", "", "ons", i .. "ez", "ent"}) end end -- Split a string into entries separated by slashes, each representing one -- of the possible person/number combinations. Each entry in turn may consist -- of one or more forms, separated by commas. NUMREQ is how many entries need -- to be present, defaulting to 6. function split_multipart(str, numreq) local entries = mw.text.split(str, "/") numreq = numreq or 6 if #entries ~= numreq then error("Expected " .. numreq .. " entries in multipart string '" .. str .. "'") end for i, entry in ipairs(entries) do if rfind(entry, ",") then entries[i] = mw.text.split(entry, ",") else entries[i] = {entry} end end return entries end function handle_pres(args, data, group, steme, stems) local ier = data.ier local supe = data.supe if args["pres"] and rfind(args["pres"], "/") then inflect_tense(data, "pres_indc", "", split_multipart(args["pres"])) else inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- If sub not set, derive from indicative. -- If subs not set, derive from sub if set, else from indicative. local sub_steme = args["sub"] local sub_dash = sub_steme == "-" local sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash then if not sub_specified then sub_steme = steme end local sub_stems = args["subs"] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier"] or (not sub_specified and ier), args["subsupe"] or (not sub_specified and supe)) end -- Repeat exactly for the imperative. local imp_steme = args["imp"] local imp_dash = imp_steme == "-" local imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash then if not imp_specified then imp_steme = steme end local imp_stems = args["imps"] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier"] or (not imp_specified and ier), args["impsupe"] or (not imp_specified and supe)) end -- If indic stem specified, we add indic values, and also corresponding -- subj values if separate subj stem not specified. for i = 2, 9 do steme = args["pres" .. i] local multi_indic = steme and rfind(steme, "/") local indic_specified = not multi_indic and steme if multi_indic then inflect_tense(data, "pres_indc", "", split_multipart(steme)) elseif indic_specified then stems = args["press" .. i] or steme ier = args["ier" .. i] supe = args["supe" .. i] inflect_pres(data, "pres_indc", group, steme, stems, ier, supe) end -- Handle subjunctive as above. sub_steme = args["sub" .. i] sub_dash = sub_steme == "-" sub_specified = sub_steme if sub_steme and rfind(sub_steme, "/") then inflect_tense(data, "pres_subj", "", split_multipart(sub_steme)) elseif not sub_dash and (indic_specified or sub_specified) then if not sub_specified then sub_steme = steme end sub_stems = args["subs" .. i] if not sub_stems then sub_stems = sub_specified and sub_steme or stems end inflect_pres(data, "pres_subj", group, sub_steme, sub_stems, args["subier" .. i] or (not sub_specified and ier), args["subsupe" .. i] or (not sub_specified and supe)) end -- Repeat for the imperative. imp_steme = args["imp" .. i] imp_dash = imp_steme == "-" imp_specified = imp_steme if imp_steme and rfind(imp_steme, "/") then inflect_tense_impr(data, "impr", "", split_multipart(imp_steme, 3)) elseif not imp_dash and (indic_specified or imp_specified) then if not imp_specified then imp_steme = steme end imp_stems = args["imps" .. i] if not imp_stems then imp_stems = imp_specified and imp_steme or stems end inflect_pres(data, "impr", group, imp_steme, imp_stems, args["impier" .. i] or (not imp_specified and ier), args["impsupe" .. i] or (not imp_specified and supe)) end end end -- Add to DATA the endings for the preterite and imperfect -- subjunctive, with unstressed e/i stem STEME, stressed e/i stem STEMS, -- conjugation type PTY and corresponding value of IMPSUB. function inflect_pret_impf_subj(data, stem, pty, pret, pretu, prets, impsub) local steme = pretu or pret or stem local stems = prets or pretu or pret or stem if pret and rfind(pret, "/") then inflect_tense(data, "pret_indc", "", split_multipart(pret)) inflect_impf_subj(data, impsub, nil, nil, nil) elseif pty then -- insert_if_not(data.categories, "Old French verbs with " .. pty .. " preterite") -- WARNING: If the second person singular of any of these is not a -- simple string, you will need to modify the handling below of -- the imperfect subjunctive, which relies on this form. local oldt = data.old and "ṭ" or "" local all_endings = pty == "weak-a" and {"ai","as","a" .. oldt,"ames","astes","erent"} or pty == "weak-a2" and {"ai","as","a" .. oldt,"ames","astes","ierent"} or pty == "weak-i" and {"i","is","i" .. oldt,"imes","istes","irent"} or -- FIXME: "Grammatik des Altfranzösischen I-III" (Dr. E. Schwan and -- Dr. D. Behrens), p. 229, claims that the old form of the weak-i2 -- ending is "ieḍrent", e.g. "rendieḍrent" < "rendęderunt", whereas the -- early 12th-century forms of E. Einhorn "Old French: A Concise Handbook" -- p.43 have only "ierent". I trust the latter because Schwan and Behrens -- also have the 3rd-singular as "rendiet" with a hard -t < "rendędit", -- but in reality it should be "rendieṭ" (i.e. "rendiéṭ") with a soft -ṭ, -- as per Einhorn and also William Kibler "An Introduction to Old French". -- Schwan and Behrens' forms would be correct if the underlying Vulgar -- Latin forms are correct, but I think haplology has deleted the second -- -d- so you should really have 3rd-singular "rendęt" > "rendiéṭ" and -- 3rd-plural "rendęrunt" > "rendierent". pty == "weak-i2" and {"i","is","ié" .. oldt,"imes","istes","ierent"} or pty == "strong-i" and {"","is","t","imes","istes","rent"} or pty == "strong-id" and {"","is","t","imes","istes",{"drent","rent"}} or pty == "weak-u" and {"ui","us","u" .. oldt,"umes","ustes","urent"} or pty == "strong-u" and {"ui","eüs","ut","eümes","eüstes","urent"} or pty == "strong-o" and {"oi","eüs","ot","eümes","eüstes","orent"} or pty == "strong-st" and {"s","sis","st","simes","sistes","strent"} or pty == "strong-sd" and {"s","ṣis","st","ṣimes","ṣistes","sdrent"} or error("Unrecognized prettype value '" .. pty .. "'") -- Always use one of the weak stems unless we have strong-stem endings local all_stems = rfind(pty, "^strong-") and {stems, steme, stems, steme, steme, stems} or {steme, steme, steme, steme, steme, steme} inflect_tense(data, "pret_indc", all_stems, all_endings) inflect_impf_subj(data, impsub, steme, join(all_stems[2], all_endings[2]), pty) elseif impsub then inflect_impf_subj(data, impsub, nil, nil, nil) end end function inflect_impf_subj(data, impsub, steme, pret2s, pty) -- Handle imperfect subj, which follows the same types as the preterite -- and is built off of the 2nd person singular form, although we need to -- special-case weak-a and weak-a2 local impsub_endings = {"se","ses","t",{"sons","siens"}, {data.ei and "seiz" or "soiz","sez","siez"},"sent"} if impsub and rfind(impsub, "/") then inflect_tense(data, "impf_subj", "", split_multipart(impsub)) elseif impsub == "-" then return elseif impsub then inflect_tense(data, "impf_subj", impsub, impsub_endings) -- need the % here to escape the dash, which otherwise stands for a -- character range??????? elseif pty and rfind(pty, "^weak%-a") then inflect_tense(data, "impf_subj", steme, {"asse","asses","ast", {"issons","issiens"}, {data.ei and "isseiz" or "issoiz","issez","issiez"},"assent"}) elseif pty then inflect_tense(data, "impf_subj", pret2s, impsub_endings) end end -- Add to DATA the endings for the preterite and imperfect subjunctive, -- based on the strong and weak stems and preterite ending type(s) given in -- ARGS. For each weak preterite ending type 'prettypeN' there should be a -- corresponding stem in 'pretN' (defaulting to STEM) and for each strong -- preterite ending type 'prettypeN' there should be corresponding unstressed -- and stressed stems in 'pretuN' and 'pretsN' (defaulting to 'pretN' or STEM). -- If specifically 'pret' and 'prettype' are unspecified, substitute defaults, -- specifically the fallback preterite type FBPTY and stressed/unstressed -- fallback stem FBSTEM. function handle_pret_impf_subj(args, data, stem, fbstem, fbpty) local all_props = get_args(args, {"prettype", "pret", "pretu", "prets", "impsub"}) for i, props in ipairs(all_props) do local thestem = stem local pty = props[1][1] local pret = props[2][1] local pretu = props[3][1] local prets = props[4][1] local impsub = props[5][1] if i == 1 and not pty and not pret then thestem = fbstem pty = fbpty pret = fbstem pretu = fbstem prets = fbstem end inflect_pret_impf_subj(data, thestem, pty, pret, pretu, prets, impsub) end end -- Add to DATA the forms for up to one paradigm of the future and conditional, -- based on the future stem in STEM (possibly nil). function inflect_future_cond(data, stem) if stem then if rfind(stem, "/") then inflect_tense(data, "futr_indc", "", split_multipart(stem)) else if data.old then inflect_tense(data, "futr_indc", stem, {"ai","as","aṭ","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", "iiens","iiez","eient"}) elseif data.ei then inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {"eie","eies","eit", {"iiens","iens"},{"iiez","iez"},"eient"}) else inflect_tense(data, "futr_indc", stem, {"ai","as","a","ons",{"oiz","eiz", "ez"},"ont"}) inflect_tense(data, "cond", stem, {{"oie","eie"},{"oies","eies"},{"oit","eit"}, {"iiens","iens"},{"iiez","iez"},{"oient","eient"}}) end end end end -- Add to DATA all the forms for the future and conditional based on the -- future stem(s) in ARGS. Use If no future stems given, use STEM. function handle_future_cond(args, data, stem) local fut_args = get_args(args, "fut") -- Just override the value from args["fut"] if necessary if not args["fut"] then fut_args[1][1] = stem end for _, futarg in ipairs(fut_args) do local stem = futarg[1] inflect_future_cond(data, stem) end end -- Add to DATA the forms for up to one imperfect paradigm, corresponding to -- the imperfect stem in IMPERF (possibly nil), the corresponding ier= value -- in IMPERFIER, the corresponding present stem in PRES (possibly nil), and -- its corresponding ier= value in PRESIER. Only do something if either IMPERF -- or PRES is non-nil. function inflect_imperfect(data, group, imperf, imperfier, pres, presier) if imperf and rfind(imperf, "/") then inflect_tense(data, "impf_indc", "", split_multipart(imperf)) else if not imperf and pres and not rfind(pres, "/") then imperf = pres imperfier = presier end if imperf and imperf ~= "-" then local steme = imperf local stema = steme_to_stema(steme) local i = imperfier and "i" or "" if group == "i" and data.old then inflect_tense(data, "impf_indc", steme, {{"eie", "oue", i .. "eve"}, {"eies", "oues", i .. "eves"}, {"eit", "out", i .. "eveṭ"}, {"iiens"}, {"iiez"}, {"eient", "ouent", i .. "event"} }) elseif group == "i" and data.ei then inflect_tense(data, "impf_indc", steme, {{"eie", "oe", i .. "eve"}, {"eies", "oes", i .. "eves"}, {"eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"eient", "oent", i .. "event"} }) elseif group == "i" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie", "oe", i .. "eve"}, {"oies", "eies", "oes", i .. "eves"}, {"oit", "eit", "ot", i .. "eve"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient", "oent", i .. "event"} }) elseif group == "ii" and data.old then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "ii" and data.ei then inflect_tense(data, "impf_indc", join(steme, "iss"), {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "ii" then inflect_tense(data, "impf_indc", join(steme, "iss"), {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) elseif group == "iii" and data.old then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", "iiens", "iiez", "eient" }) elseif group == "iii" and data.ei then inflect_tense(data, "impf_indc", steme, {"eie", "eies", "eit", {"iiens", "iens"}, {"iiez", "iez"}, "eient" }) elseif group == "iii" then inflect_tense(data, "impf_indc", steme, {{"oie", "eie"}, {"oies", "eies"}, {"oit", "eit"}, {"iiens", "iens"}, {"iiez", "iez"}, {"oient", "eient"} }) end end end end -- Add to DATA all the forms for the imperfect based on the -- imperfect stem(s) in ARGS. If no imperfect stems given, use -- corresponding present stems if they exist, but use STEME and IER -- for the first present stem and ier= value, since they're computed -- specially. function handle_imperfect(args, data, group, steme, ier) local imperf_args = get_args(args, {"imperf","imperfier","pres","ier"}) -- Just override the values from args["pres"] and args["ier"] imperf_args[1][3][1] = steme imperf_args[1][4][1] = ier for _, stem in ipairs(imperf_args) do local imperf = stem[1][1] local imperfier = stem[2][1] local pres = stem[3][1] local presier = stem[4][1] inflect_imperfect(data, group, imperf, imperfier, pres, presier) end end -- Add to DATA up to one form of the present participle based on the -- present stem in PRES. Only do anything if PRES is non-nil and not a -- multipart specification. function inflect_pres_part(data, group, pres) if pres and not rfind(pres, "/") then if group == "ii" then table.insert(data.forms.pres_ptc, join(pres, "issant")) else table.insert(data.forms.pres_ptc, join(pres, "ant")) end end end -- Add to DATA the forms of the present participle based on the -- present stem(s) in ARGS. Use STEME for the first present stem, -- since it's computed specially. function handle_pres_part(args, data, group, steme) if data.forms.pres_ptc == nil then data.forms.pres_ptc = {} end local ppart_args = get_args(args, {"pres"}) -- Just override the value from args["pres"] ppart_args[1][1][1] = steme for _, stem in ipairs(ppart_args) do local pres = stem[1][1] inflect_pres_part(data, group, pres) end end -- Add to DATA the endings for an -er or -ier verb, based on the arguments -- in ARGS. inflections["i"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" if data.ier then data.comment = "This verb conjugates as a first-group verb ending in <<-ier>>, with a palatal stem. These verbs are conjugated mostly like verbs in <<-er>>, but there is an extra ''i'' before the ''e'' of some endings. " else data.comment = "This verb conjugates as a first-group verb ending in <<-er>>. " end data.comment = data.comment .. verb_comment(args, "i", prese, press, data.ier, data.supe, data.old) data.group = {"first"} handle_pres_part(args, data, "i", prese) data.forms.past_ptc = {join(prese, i .. "é" .. (data.old and "ṭ" or ""))} handle_pres(args, data, "i", prese, press) handle_imperfect(args, data, "i", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, data.ier and "weak-a2" or "weak-a") handle_future_cond(args, data, join(prese, "er")) end -- Add to DATA the endings for a type 2 verb (-ir, with -iss- infix), -- based on the arguments in ARGS. inflections["ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese data.comment = "This verb conjugates as a second-group verb (ending in <<-ir>>, with an <<-iss->> infix). " data.group = {"second"} handle_pres_part(args, data, "ii", prese) local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Add to DATA the endings for a type 3 verb (-ir without -iss- infix, or -- -re or -oir), based on the arguments in ARGS. inflections["iii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group verb. " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"third"} handle_pres_part(args, data, "iii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" if rfind(infinitive, "[^eo]ir$") then data.forms.past_ptc = {join(prese, "i" .. oldt)} elseif rfind(infinitive, "ïr$") then data.forms.past_ptc = {join(prese, "ï" .. oldt)} else data.forms.past_ptc = {join(prese, "u" .. oldt)} end handle_pres(args, data, "iii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) if rfind(infinitive, "[dt]re$") then handle_pret_impf_subj(args, data, prese, prese, "weak-i2") elseif rfind(infinitive, "re$") then local pretstem = add_s(prese, false, false, data.old) pretstem = rsub(pretstem, "s$", "") handle_pret_impf_subj(args, data, prese, pretstem, "strong-st") elseif rfind(infinitive, "[eo]ir$") then handle_pret_impf_subj(args, data, prese, prese, "weak-u") else handle_pret_impf_subj(args, data, prese, prese, "weak-i") end if rfind(infinitive, "[^eolrs]ir$") then handle_future_cond(args, data, join(prese, "ir")) else -- -re, -oir, -eir, -ïr, -lir, -sir, -rir handle_future_cond(args, data, add_r(prese, data.old)) end end -- Add to DATA the endings for a type 3/2 verb (-ir without or with -- -iss- infix), based on the arguments in ARGS. inflections["iii-ii"] = function(args, data) local prese = data.prese local press = args["press"] or prese local i = data.ier and "i" or "" data.comment = "This verb conjugates as a third-group or second-group verb (ending in <<-ir>>, without or with an <<-iss->> infix). " if data.ier then data.comment = data.comment .. "This verb ends in a palatal stem, so there is an extra ''i'' before the ''e'' of some endings. " end data.comment = data.comment .. verb_comment(args, "iii", prese, press, data.ier, data.supe, data.old) data.group = {"တတိယ", "ဒုတိယ", "တတိယ-ဒုတိယ"} handle_pres_part(args, data, "iii", prese) handle_pres_part(args, data, "ii", prese) -- retrieve the infinitive without any affix, so that when -- we put the affix back on, we don't get a doubled affix local infinitive = data.inf_no_affix local oldt = data.old and "ṭ" or "" data.forms.past_ptc = {join(prese, "i" .. oldt)} handle_pres(args, data, "iii", prese, press) handle_pres(args, data, "ii", prese, press) handle_imperfect(args, data, "iii", prese, data.ier) handle_imperfect(args, data, "ii", prese, data.ier) handle_pret_impf_subj(args, data, prese, prese, "weak-i") handle_future_cond(args, data, join(prese, "ir")) end -- Shows the table with the given forms function make_table(data) return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. data.frame:preprocess((data.comment:gsub("<<(.-)>>", "{{m|fro|%1}}"))) .. [=[Old French conjugation varies significantly by date and by region. The following conjugation should be treated as a guide. <div class="NavFrame"> <div class="NavHead">&nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ]=] .. m_links.full_link({lang = lang, alt = data.forms.infinitive[1]}, "term") .. [=[ <span style="font-size:90%;"> (ဗဵုရံၚ် [[အဆက်လက္ကရဴ:ကြိယာပြၚ်သေတ်တြေံဂမၠိုၚ်]] တဏအ်ညိကီု)</span></div> <div class="NavContent"> {| class="roa-inflection-table" data-toggle-category="inflection" |- ! colspan="2" class="roa-nonfinite-header" | ! colspan="3" class="roa-nonfinite-header" | ဓမ္မတာ ! colspan="3" class="roa-nonfinite-header" | ဒပ်ပံၚ် |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာဟွံကၠောံ | colspan="3" | ]=] .. show_form(data.forms.infinitive) .. [=[ | colspan="3" | ]=] .. show_form(data.forms.aux) .. " " .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | ကြိယာစၞးနာမ် | colspan="3" | en ]=] .. show_form(data.forms.pres_ptc) .. [=[ | colspan="3" | ကြိယာစၞးနာမ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုပစ္စုပ္ပန် | colspan="3" | ]=] .. show_form(data.forms.pres_ptc) .. [=[ |- ! colspan="2" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် | colspan="3" | ]=] .. show_form(data.forms.past_ptc) .. [=[ |- ! colspan="2" rowspan="2" class="roa-person-number-header" | ပူဂဵု ! colspan="3" class="roa-person-number-header" | ကိုန်ဨကဝုစ် ! colspan="3" class="roa-person-number-header" | ကိုန်ဗဟုဝစ် |- ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ ! class="roa-person-number-header" style="width:12.5%;" | ပထမ ! class="roa-person-number-header" style="width:12.5%;" | ဒုတိယ ! class="roa-person-number-header" style="width:12.5%;" | တတိယ |- ! class="roa-indicative-left-rail" colspan="2" | မစၞောန်ရန် ! class="roa-indicative-left-rail" | jo ! class="roa-indicative-left-rail" | tu ! class="roa-indicative-left-rail" | il ! class="roa-indicative-left-rail" | nos ! class="roa-indicative-left-rail" | vos ! class="roa-indicative-left-rail" | il |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲမပြဟ် | ]=] .. show_form(data.forms.pret_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.pret_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.pret_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ် | ]=] .. show_form(data.forms.futr_indc_1sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3sg) .. [=[ | ]=] .. show_form(data.forms.futr_indc_1pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_2pl) .. [=[ | ]=] .. show_form(data.forms.futr_indc_3pl) .. [=[ |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန် | ]=] .. show_form(data.forms.cond_1sg) .. [=[ | ]=] .. show_form(data.forms.cond_2sg) .. [=[ | ]=] .. show_form(data.forms.cond_3sg) .. [=[ | ]=] .. show_form(data.forms.cond_1pl) .. [=[ | ]=] .. show_form(data.forms.cond_2pl) .. [=[ | ]=] .. show_form(data.forms.cond_3pl) .. [=[ |- ! rowspan="5" class="roa-indicative-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-indicative-left-rail" style="height:3em;" | ပစ္စုပ္ပန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | ဗီုပြၚ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အတိက်ဗွဲကိုပ်ကၠာ ! colspan="6" class="roa-compound-row" | ကာလအတိက်ဗွဲမပြဟ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | အနာဂတ်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလအနာဂတ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-indicative-left-rail" style="height:3em;" | တၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | ကာလတၚ်မကၞာတ်လဝ်စေဝ်ပၞောန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" colspan="2" | အရေဝ်နိဒါန် ! class="roa-subjunctive-left-rail" | que jo ! class="roa-subjunctive-left-rail" | que tu ! class="roa-subjunctive-left-rail" | qu’il ! class="roa-subjunctive-left-rail" | que nos ! class="roa-subjunctive-left-rail" | que vos ! class="roa-subjunctive-left-rail" | qu’il |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဓမ္မတာ ! class="roa-subjunctive-left-rail" style="height:3em;" | ပစ္စုပ္ပန် | ]=] .. show_form(data.forms.pres_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.pres_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.pres_subj_3pl) .. [=[ |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် | ]=] .. show_form(data.forms.impf_subj_1sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3sg) .. [=[ | ]=] .. show_form(data.forms.impf_subj_1pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_2pl) .. [=[ | ]=] .. show_form(data.forms.impf_subj_3pl) .. [=[ |- ! rowspan="2" class="roa-subjunctive-left-rail" | ကာလ<br>ဒပ်ပံၚ် ! class="roa-subjunctive-left-rail" style="height:3em;" | အတိက် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ပစ္စုပ္ပန်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! class="roa-subjunctive-left-rail" style="height:3em;" | ဟွံဍိုက်ပေၚ် ! colspan="6" class="roa-compound-row" | အရေဝ်နိဒါန်ဟွံဍိုက်ပေၚ်မဆေၚ်စပ်ကဵု '']=] .. show_form(data.forms.aux) .. [=['' + လုပ်ကၠောန်စွံလဝ်နကဵုအတိက် |- ! colspan="2" rowspan="2" class="roa-imperative-left-rail" style="height:3em;" | ပါဲဗလေတ်ဟွံဗၠး ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | tu ! class="roa-imperative-left-rail" | – ! class="roa-imperative-left-rail" | nos ! class="roa-imperative-left-rail" | vos ! class="roa-imperative-left-rail" | – |- | — | ]=] .. show_form(data.forms.impr_2sg) .. [=[ | — | ]=] .. show_form(data.forms.impr_1pl) .. [=[ | ]=] .. show_form(data.forms.impr_2pl) .. [=[ | — |- |}</div></div>]=] end -- Create a link for a form function make_link(subform) return m_links.full_link({lang = lang, term = subform}) end -- Shows forms, or a dash if empty function show_form(subforms) if not subforms then return "&mdash;" elseif type(subforms) ~= "table" then error("a non-table value was given in the list of inflected forms.") elseif #subforms == 0 then return "&mdash;" end -- Concatenate results, omitting duplicates local ret = {} for key, subform in ipairs(subforms) do insert_if_not(ret, subform) end return table.concat(ret, ", ") end return export eo8s3e8ogzqscxpk77r2obds44p2q3h မဝ်ဂျူ:fro-verb/doc 828 296470 397912 2026-07-07T09:13:34Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "This module provides helper functions for [[:ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|Old French verb inflection tables]]. The external entry point is <tt>show</tt>, meant for calling from templates, and there is a debugging entry point <tt>show2</tt> meant for calling from..." 397912 wikitext text/x-wiki This module provides helper functions for [[:ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|Old French verb inflection tables]]. The external entry point is <tt>show</tt>, meant for calling from templates, and there is a debugging entry point <tt>show2</tt> meant for calling from the debug console, which takes arguments for the current and parent frame and constructs mock-up frames. Most arguments are meant to be passed in through the parent frame, i.e. arguments specified to the template that invokes this module, rather than to the invocation itself. The invocation arguments are *<tt>type</tt>: The only mandatory argument. Group the verb's conjugation belongs to ("i", "ii" or "iii"). *<tt>ier</tt>: Same as the parent-frame 'ier' argument. Used by {{temp|fro-conj-ier}}. *<tt>supe</tt>: Same as the parent-frame 'supe' argument. Used by {{temp|fro-conj-er-e}} and {{temp|fro-conj-ier-e}}. The parent frame arguments are documented thoroughly in {{temp|fro-conj-iii}}. The following are the primary templates invoking this module. One of them should be used to create the conjugation table of a verb. * {{temp|fro-conj-er}}: For group-I (''-er'') verbs. * {{temp|fro-conj-ier}}: For group-Ia (''-ier'') verbs. * {{temp|fro-conj-ii}}: For group-II (''-ir'' with ''-iss-'' infix) verbs. * {{temp|fro-conj-iii}}: For group-III verbs. These have various infinitive forms, generally either ''-ir'' (without ''-iss-'' infix), ''-oir'', ''-eir'', or ''-re''. * {{temp|fro-conj-iii-ii}}: For group-III-II verbs. These are group-III ''-ir'' verbs that have additional, alternative forms with group II endings. <includeonly> {{module cat|fro}} </includeonly> a1kbs31odvbxkkwytuqkf2zvtcbi6fg ကဏ္ဍ:မဝ်ဂျူပြၚ်သေတ်တြေံဂမၠိုၚ် 14 296471 397913 2026-07-07T09:14:56Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » :ကဏ္ဍ:ဘာသာပြၚ်သေတ်တြေံ|ပြၚ်သေတ်တြေ..." 397913 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာပြၚ်သေတ်တြေံ|ပြၚ်သေတ်တြေံ]] » '''မဝ်ဂျူဂမၠိုၚ်''' :[[:ကဏ္ဍ:မဝ်ဂျူဂမၠိုၚ်|မဝ်ဂျူ]]ဘာသာပြၚ်သေတ်တြေံ၊ မနွံကဵုလုပ်အဝေါၚ်ကုဒ် Lua နကဵုမကၠောန်ဗဒှ် ကဵု မစဳရေၚ်ယဵုဒုၚ်သ္ပမာန်ဂမၠိုၚ်။ [[ကဏ္ဍ:ဘာသာပြၚ်သေတ်တြေံ]][[ကဏ္ဍ:မဝ်ဂျူဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] 6v4jnn8grezd5v5s5pua6e3qfqpxa54 ကဏ္ဍ:မဝ်ဂျူပွမပြံၚ်လှာဲပြၚ်သေတ်တြေံဂမၠိုၚ် 14 296472 397914 2026-07-07T09:16:38Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:မဝ်ဂျူပြၚ်သေတ်တြေံဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]]ကဏ္ဍ:မဝ်ဂျူဗီုအပြံၚ်အလှာဲဝေါဟာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိ..." 397914 wikitext text/x-wiki [[ကဏ္ဍ:မဝ်ဂျူပြၚ်သေတ်တြေံဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:မဝ်ဂျူဗီုအပြံၚ်အလှာဲဝေါဟာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] 0rcxhckasi3zv1lz4i14o8p49fxtf5a ထာမ်ပလိက်:fro-conj-er/documentation 10 296473 397915 2026-07-07T09:18:25Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --> ===Usage=== This template is designed to add fully formatted conjugation tables to Old French first-group verbs ending in {{m|fro|-er}}. It must be used under the level 4 header conjugation (conjugation header is level 5 when there are multiple etymologies for a single word). See below for other related templates. Verbs..." 397915 wikitext text/x-wiki {{documentation subpage}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS AT THE BOTTOM OF THIS PAGE --> ===Usage=== This template is designed to add fully formatted conjugation tables to Old French first-group verbs ending in {{m|fro|-er}}. It must be used under the level 4 header conjugation (conjugation header is level 5 when there are multiple etymologies for a single word). See below for other related templates. Verbs that end in {{m|fro||-ier}} where the {{m|fro||-i-}} is ''not'' part of the stem should use {{temp|fro-conj-ier}}. (For example, in {{m|fro|marier}} and {{m|fro|applier}} the stems are {{m|fro||mari-}} and {{m|fro||appli-}}, respectively, and {{temp|fro-conj-er}} should be used.) All arguments are optional. For most group-I verbs, it's enough to simply use <tt><nowiki>{{fro-conj-er}}</nowiki></tt> (or <tt><nowiki>{{fro-conj-ier}}</nowiki></tt>, see above), and all the details will be taken care of. For most other group-I verbs, specifically those with stem alternations, it is enough to specify only the <tt>press</tt> argument to specify a separate stressed present-tense stem, e.g. <tt><nowiki>{{fro-conj-er|press=aim}}</nowiki></tt> for {{m|fro|amer}} or <tt><nowiki>{{fro-conj-er|press=parol}}</nowiki></tt> for {{m|fro|parler}}. Among the details handled automatically are ''c'' vs. ''ç'' alternations in verbs like {{m|fro|dancier}} and applying the necessary stem modifications in the present subjunctive (e.g. {{m|fro|dancier}} has present singular subjunctive {{m|fro|danz}}, {{m|fro|danz}}, {{m|fro|danzt}} and {{m|fro|amer}} has {{m|fro|aim}}, {{m|fro|ains}}, {{m|fro|aint}}). For complex real-world examples, look at e.g. {{temp|fro-conj-conoistre}}, {{temp|fro-conj-faire}}, {{temp|fro-conj-valoir}}, {{temp|fro-conj-voloir}}, {{temp|fro-conj-doner}}, {{temp|fro-conj-aler}}, {{temp|fro-conj-estre}}, {{temp|fro-conj-avoir}}, {{m|fro|ester}}, etc. ''General comments'': * Setting an argument to a blank value is equivalent to omitting it; if you really want the value to be empty, use e.g. <tt>pret=""</tt> or <tt>pret=<nowiki>''</nowiki></tt>. * More generally, you can enclose any argument value in single or double quotes, which will be stripped off; this can be used to include leading or trailing blanks in an argument's value. * There are three main types of arguments: general arguments, stems, and overrides. * Stem arguments specify the stem used to generate a particular tense, e.g. <tt>pres</tt> for the present indicative, <tt>sub</tt> for the present subjunctive, <tt>fut</tt> for the future. * Overrides specify the value of a particular part, e.g. <tt>pres1s</tt> for the present indicative first-person singular. These apply after stems have been processed and used to generate the paradigm, overriding a specific part (or in some cases, some of the alternative forms of that part, if there is more than one). * If multiple forms end up being specified for a particular part, and some are the same as others, all the duplicates except the first are removed. This happens at the end, after overrides have been applied. ''General arguments'': *<tt>inf</tt>: the infinitive; if omitted, same as the page title. Rarely needs to be specified, except possibly in templates. *<tt>aux</tt>: the auxiliary verb, either {{m|fro|avoir}} or {{m|fro|estre}}. The default is ''avoir''. *<tt>refl</tt>: should be true if the verb is reflexive. "True" here means any non-blank value. *<tt>impers</tt>: should be true (see above) if the verb is impersonal. *<tt>prefix</tt>: add a prefix to all forms. *<tt>suffix</tt>: add a prefix to all forms. *<tt>repl</tt>: do search/replace on all forms. The value should be of the form <tt>FROM/TO,FROM2/TO2,...</tt> where <tt>FROM</tt> will be replaced by <tt>TO</tt>, and then <tt>FROM2</tt> will be replaced by <tt>TO2</tt>, etc. Literal text normally works fine, but properly these are Lua patterns, which are similar to regular expressions but a bit more limited. This is useful in templates to implement conjugations for verbs with non-standard spellings; e.g. {{m|fro|cuvrir}} uses {{temp|fro-conj-covrir|repl=cov/cuv}} to ensure that the ''cuv-'' spelling appears everywhere in place of ''cov-''. *<tt>comment</tt>: override the comment appearing above the conjugation. *<tt>ir</tt>: if true (see above), don't recognize ''-eir'' or ''-oir'' in the infinitive as an ending; instead, consider the ending to be ''-ir'' in such a case. Useful with verbs like {{m|fro|oir}} and {{m|fro|cheir}}, whose stems are {{m|fro||o-}} and {{m|fro||che-}} respectively. *<tt>ei</tt>: if true (see above), use earlier ''-ei-'' rather than later ''-oi-'' (or listing of both) in various endings and other forms. Automatically set if the infinitive ending is ''-eir'' or if <tt>old</tt> is specified. *<tt>old</tt>: if true (see above), treat this as an "old-style" conjugation. Uses earlier ''-ei-'' rather than later ''-oi-'', adds ''-ṭ'' onto third-person singular and past-participle forms where appropriate, doesn't convert ''l'' or ''il'' to ''u'' before a consonant, lists ''-ii-'' endings but not their later simplified ''-i-'' forms. ''Comments about stem arguments'': * The value can either be a single stem, e.g. <tt>pres=conoiss</tt> for the verb {{m|fro|conoistre}}, or a multipart specification, which directly specifies all six parts for the tense in question. * An example of a multipart specification is <tt>pres=vois,vai/vais,vas/vait,va/alons/alez/vont</tt> for the present tense of {{m|fro|aler}}. Slashes separate parts and commas separate alternatives for a given part. In this case, two alternatives are given for each of the singular parts, e.g. both {{m|fro|vois}} and {{m|fro|vai}} for the first-person singular. You can omit some of the parts by leaving them empty or putting a "-" (but keep the slashes). For example, <tt>pres2=///vaillons/vailliez/vaillent</tt> would add extra irregular forms in the plural (in this case for the verb {{m|fro|valoir}}), after the forms generated by the stem specified using <tt>pres</tt> (in this case, it would default to {{m|fro||val-}} if not specified, based on the infinitive). * In some cases, specifying a stem for a tense also causes paradigms for related tenses to be generated. In particular, specifying a <tt>pres</tt> stem also generates corresponding paradigms for the present subjunctive and imperative, specifying a <tt>fut</tt> stem also generates a corresponding conditional paradigm, and specifying a <tt>pret</tt> stem also generates a corresponding imperfect subjunctive. In such a case you can e.g. change the stem used for the present subjunctive using <tt>sub</tt>, or remove the paradigm using <tt>sub=-</tt>. The imperative works the same way with <tt>imp</tt>, and the imperfect subjunctive with <tt>impsub</tt>. However, these related-tense paradigms are ''not'' generated when a multipart specification is given. For example, {{m|fro|estre}} specifies the future tense using <tt>fut=ier,er/iers,ers/iert,ert/iermes,ermes//ierent,erent|fut2=ser|fut3=estr</tt>. This causes three future paradigms to be generated, one directly specified using a multipart specification and the other two generated based on the stems {{m|fro||ser-}} and {{m|fro||estr-}}, with normal endings; but the corresponding conditional paradigms will be generated only based on the stems {{m|fro||ser-}} and {{m|fro||estr-}}. * The value of a stem that is given should be the form as it occurs before ''e'' and ''i'', and the corresponding stems that would appear before ''a'', ''o'' and ''u'' are automatically inferred. For example, specifying a value of <tt>pres=danc</tt> will lead to the stem <tt>danç</tt> being used before ''a'', ''o'' and ''u''. In particular, ''c'' becomes ''ç'' before ''a/o/u'', ''g'' becomes ''j'' before ''a/o/u'', ''qu'' becomes ''c'' before ''u'' and ''gu'' becomes ''g'' before ''u''. * The necessary stem modifications that take place in the present indicative singular, the present subjunctive singular of group-I verbs, and the future are automatically applied, e.g. <tt>pres=danc</tt> will automatically generate first-singular present-indicative {{m|fro|danz}}, and <tt>pres=val</tt> in a group-III verb will automatically second-singular present indicative {{m|fro|vaus}} and future stem {{m|fro||vaudr-}}. ''Present-tense stems'': *<tt>pres</tt>: the unstressed stem of the present tense as it occurs before ''e/i''. You rarely if ever need to specify this for group-I verbs, but sometimes do for group-III verbs, esp. those ending in ''-re''. If omitted, inferred from the infinitive. *<tt>prese</tt>: same as 'pres' except that multipart specifications aren't recognized. Use this if you want to specify a multipart specification for the present indicative and still specify a present stem that controls the default subjunctive/imperative/etc. stems. *<tt>press</tt>: the stressed stem of the present tense; the same as 'pres' if not given. *<tt>ier</tt>: should be true if 'pres' is a stem ending in a palatal consonant (i.e. it requires an ''i'' before ''e'' in endings, e.g. second plural ''-iez''). *<tt>supe</tt>: should be true if the verb requires a supporting ''-e'' in the present singular and this cannot be derived from the stem. Rarely needs to be specified. *<tt>pres2, press2, ier2, supe2; ...; pres9, ...</tt>: additional present-tense conjugations. Used for the indicative and subjunctive unless separate subjunctive stems are given. Giving a multipart specifications for 'pres2, pres3, ...' doesn't trigger creation of corresponding subjunctives or imperatives. *<tt>sub, subs, subier, subsupe; sub2, ...; ...; sub9, ...</tt>: present-subjunctive conjugation(s), if different from the indicative. 'sub' is the form before "e/i". 'subs', 'subier', 'subsupe' are the same as 'press', 'ier', 'supe' but applied to the subjunctive stem. Use a "-" for 'sub', 'sub2', ... to suppress creation of a subjunctive conjugation corresponding to a given indicative conjugation. You can also specify a multipart specification for 'sub, sub2, ...' as for 'pres'. *<tt>imp, imps, impier, impsupe; imp2, ...; ...; imp9, ...</tt>: imperative conjugation(s), if different from the present indicative. Works identically to the 'sub' arguments. ''Stems for other tenses'': *<tt>fut, fut2, ..., fut9</tt>: the future and conditional stem; if omitted, inferred from the present stem. The way the stem is inferred is as follows: for verbs in ''-ir'' other than those in ''-eir/-oir/-lir/-rir/-sir/-ïr'', use the present stem plus ''-ir''; otherwise, use the present stem plus ''-r'', making necessary phonetic changes (e.g. ''voudr-'' from ''vol-'', ''covrer-'' from ''covrir''). You can also specify a multipart specification here, as for 'pres'; this controls the future only. Up to 9 such stems can be given. *<tt>imperf, imperfier; imperf2, ...; ...; imperf9, ...</tt>: the imperfect stem; defaults to the corresponding present stem. 'imperf' is the form before "e/i". 'imperfier' indicates the stem ends in a palatal consonant but currently only has any effect in group-I verbs. You can also specify a multipart specification for 'imperf, imperf2, ...' as for 'pres', or set it to "-" to suppress the creation of a given paradigm when it would normally be created (i.e. when there's a corresponding present stem). Up to 9 such stems can be given. *<tt>prettype, prettype2, ..., prettype9</tt>: the type of the preterite and imperfect subjunctive ('weak-a', 'weak-a2', 'weak-i', 'weak-i2', 'strong-i', 'strong-id', 'weak-u', 'strong-u', 'strong-o', 'strong-st', 'strong-sd'); inferred from 'pres'. For group I verbs, this uses 'weak-a', or 'weak-a2' for ''-ier'' verbs. For group II verbs, this uses 'weak-i'. For group III verbs, this uses 'weak-i2' for verbs in ''-dre/-tre'', 'strong-st' for other ''-re'' verbs, 'weak-u' for ''-eir/-oir'' verbs, and 'weak-i' for ''-ir/-ïr'' verbs. Up to 9 types can be given, each associated with a corresponding stem ('pret', 'pret2', ...) or corresponding separate unstressed/stressed stems ('pretu/prets', 'pretu2/prets2', ...). *<tt>pret, pret2, ..., pret9</tt>: the stem of the preterite and imperfect subjunctive, when there aren't separate stressed/unstressed stems; defaults to 'pres'. You can also specify a multipart specification for 'pret, pret2, ...' as for 'pres'; this controls only the preterite. The stems specified should be in the form that they appear before ''e'' or ''i''; the corresponding stems for appearing before ''a'', ''o'' or ''u'' are automatically inferred. *<tt>pretu, pretu2, ..., pretu9</tt>: the unstressed stem of the preterite and imperfect subjunctive; defaults to 'pret' or else 'pres'. *<tt>prets, prets2, ..., prets9</tt>: the stressed stem of the preterite and imperfect subjunctive; defaults to 'pretu', or else 'pret', or else 'pres'. *<tt>impsub, impsub2, ..., impsub9</tt>: the imperfect subjunctive stem (the part up through the first ''s'', e.g. ''amas'' for {{m|fro|amer}}). Such stems when given override the corresponding default stem derived from the preterite. You can also specify a multipart specification here, or "-" to suppress the creation of a given paradigm when it would normally be created (i.e. when there's a corresponding preterite type). ''Comments about overrides'': * There are four types of overrides: Those that override the entire part (e.g. <tt>pres1s</tt> for the present-indicative first singular), those that insert form(s) at the beginning of the part (e.g. <tt>pres1s0</tt>), those that insert form(s) at the end of the part (e.g. <tt>pres1sn</tt>), and ''partial overrides'' that override a particular form in the part (<tt>pres1s1</tt>, <tt>pres1s2</tt>, ...). There are an indefinite number of these, as many as there are parts to be overridden. * For any of these arguments, multiple forms can be given, separated by a comma, and will be inserted at the appropriate position (e.g. you can use a partial override to replace one form with multiple forms, or insert multiple forms at the beginning or end). * A partial override with a value of "-" deletes the corresponding form. ''Overrides'': *<tt>pres1s, pres2s, pres3s, pres1p, pres2p, pres3p; pres1s0, ...; pres1sn, ...; pres1s1, ...; pres1s2, ...; ...</tt>: overrides for particular present indicative verb parts. *<tt>imperf1s, ...</tt>: overrides for particular imperfect verb parts. *<tt>fut1s, ...</tt>: overrides for particular future verb parts. *<tt>cond1s, ...</tt>: overrides for particular conditional verb parts. *<tt>pret1s, ...</tt>: overrides for particular preterite verb parts. *<tt>sub1s, ...</tt>: overrides for particular present subjunctive verb parts. *<tt>impsub1s, ...</tt>: overrides for particular imperfect subjunctive verb parts. *<tt>imp2s, imp1p, imp2p; ...</tt>: overrides for particular imperative verb parts. The imperative stem defaults to the present stem. *<tt>presp, presp0, prespn, presp1, presp2, ...</tt>: overrides for the present participle. The present participle stem defaults to the present stem, specifically 'presa'. *<tt>pastp, pastp0, pastpn, pastp1, pastp2, ...</tt>: overrides for the past participle. The past participle defaults to the present stem plus appropriate ending: ''-é'' for group I, ''-i'' for group II and group III ''-ir/-ïr'' (but not ''-eir/-oir'') verbs, ''-u'' for other group III verbs. *<tt>inf0, infn, inf1, inf2, ..., inf9</tt>: overrides for the infinitive. (Plain 'inf' is handled specially and needs to be a single form.) Some special cases: * Verbs in {{m|fro||-eier}} with separate stressed stem in {{m|fro||-i-}} can optionally use {{temp|fro-conj-eier}}. '''NOTE: Such verbs are generally a non-standard spelling in Old French and should be linked to verbs ending in ''-oiier''.''' * Verbs in {{m|fro||-oier}} with separate stressed stem in {{m|fro||-i-}} can optionally use {{temp|fro-conj-oier}}. '''NOTE: Such verbs are generally a non-standard spelling in Old French and should be linked to verbs ending in ''-oiier''.''' * Verbs in {{m|fro||-oiier}} with separate stressed stem in {{m|fro||-i-}} can optionally use {{temp|fro-conj-oiier}}. An example is {{m|fro|otroiier}}. * {{temp|fro-conj-er}} and {{temp|fro-conj-ier}} are very good at handling most of the spelling changes needed in the first-person singular present indicative and throughout the singular present subjunctive. However, occasionally some verbs will need to specify these forms themselves. Examples: *# Verbs whose stem ends in {{m|fro||-ill-}} where the {{m|fro||-ll-}} is pronounced as normal /l/ rather than as a palatal sound (because the second-person singular present subjunctive for these verbs ends in {{m|fro||-s}} whereas it is predicted to end in {{m|fro||-z}}). An example is {{m|fro|caviller}}. *# Verbs whose stem ends in {{m|fro||-el-}} and where the third-person singular present subjunctive ends in {{m|fro||-eut}} rather than {{m|fro||-eaut}} (except for verbs in {{m|fro||-iel-}} and {{m|fro||-uel-}}, which are handled correctly). {{m|fro|seeler}} is such an example. Such verbs generally have an {{m|la||-i-}} or {{m|la||-ē-}} in their Latin etymon, rather than {{m|la||-e-}}. ({{m|fro|seeler}} derives from {{m|la|sigillāre}}.) *# {{m|fro|vieler}}, whose stem ends in {{m|fro||-iel-}} and where the third-person singular present subjunctive ends in {{m|fro||-eaut}} rather than {{m|fro||-eut}} (because there is a hiatus between the ''i'' and ''e'', and it was formerly {{m|fro|viḍeler}}). *# Verbs whose second-person singular present subjunctive ends in {{m|fro||-z}} where this is not predictable (generally because the stem ended in {{m|fro||-ḍ-}} in Early Old French, which later dropped out). An example is {{m|fro|loer}} "to praise", with second-person singular present subjunctive {{m|fro|loz}}. * Most verbs requiring a supporting {{m|fro||-e-}} in the first-person singular present indicative and throughout the singular present subjunctive are correctly handled by {{temp|fro-conj-er}} and {{temp|fro-conj-ier}}. However, when the need for the supporting vowel is unpredictable from the stem, the templates {{temp|fro-conj-er-e}} or {{temp|fro-conj-ier-e}} will be needed. The templates {{temp|fro-conj-er-e}} or {{temp|fro-conj-ier-e}} used to be required in all cases where a supporting ''-e'' was needed in the present singular. The vast majority of cases do not require this any more and should be replaced with the use of {{temp|fro-conj-er}} or {{temp|fro-conj-ier}}. ===Example=== For {{m|fro|loer}}, with irregular second-person singular present subjunctive ''loz'': <pre>====Conjugation==== {{fro-conj-er|sub2s=loz}}</pre> ===See also=== * {{temp|fro-conj-ier}} * {{temp|fro-conj-ii}} * {{temp|fro-conj-iii}} * {{temp|fro-conj-iii-ii}} * {{temp|fro-conj-er-e}} * {{temp|fro-conj-ier-e}} * {{temp|fro-conj-eier}} * {{temp|fro-conj-oier}} * {{temp|fro-conj-oiier}} <includeonly> <!-- CATEGORIES AND INTERWIKIS HERE, THANKS --> [[ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|*er]] </includeonly> cd00e04vliiee7sjtcwy6ffhiw3gy0v ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ် 14 296474 397916 2026-07-07T09:19:41Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]]" 397916 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်ပြၚ်သေတ်တြေံအပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|ပ]] kpkcrko7riwe34bfohoh0s9bop1lgmc ကဏ္ဍ:ကြိယာပြၚ်သေတ်တြေံမဗၠေတ်မံၚ်နကဵုအတိုၚ်ပကတိဂမၠိုၚ် 14 296475 397919 2026-07-07T09:34:54Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာပြၚ်သေတ်တြေံ]]" 397919 wikitext text/x-wiki [[ကဏ္ဍ:ဘာသာပြၚ်သေတ်တြေံ]] h913xvr7l05gmqpkpcusodukwnsqhdf Greve 0 296476 397920 2026-07-07T09:37:38Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|grevë|greve|grevé|grève}} =={{=en=}}== {{wikipedia|lang=en}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ{{der|en|nds|-}}, {{der|en|nl|-}} ကဵု {{der|en|gmq|-}} ===နာမ်မကိတ်ညဳ=== {{en-prop}} # {{surname|en}}" 397920 wikitext text/x-wiki {{also|grevë|greve|grevé|grève}} =={{=en=}}== {{wikipedia|lang=en}} ===နိရုတ်=== ဝေါဟာကၠုၚ်နူ{{der|en|nds|-}}, {{der|en|nl|-}} ကဵု {{der|en|gmq|-}} ===နာမ်မကိတ်ညဳ=== {{en-prop}} # {{surname|en}} tvd3wj4vrhawa51m40pcltdq1o297d5 grevë 0 296477 397922 2026-07-07T09:40:18Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|greve|grève|grevé|Greve}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|fr|grève}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|sq|/ˈɡɾevə/}} * {{rhyme|sq|evə|s=2}} ===နာမ်=== {{sq-noun|f|greva|greva|grevat}} # ၜုၚ်။" 397922 wikitext text/x-wiki {{also|greve|grève|grevé|Greve}} ==အလ်ဗနဳယာန်== ===နိရုတ်=== {{bor+|sq|fr|grève}} ===ဗွဟ်ရမ္သာၚ်=== * {{IPA|sq|/ˈɡɾevə/}} * {{rhyme|sq|evə|s=2}} ===နာမ်=== {{sq-noun|f|greva|greva|grevat}} # ၜုၚ်။ mghzhnbf6z4iourvq0x7zk52nz1lpv2 ကဏ္ဍ:ကာရန်:အလ်ဗနဳယာန်/evə 14 296478 397923 2026-07-07T09:41:43Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအလ်ဗနဳယာန်|အလ်ဗနဳယာန်]] » :..." 397923 wikitext text/x-wiki [[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအလ်ဗနဳယာန်|အလ်ဗနဳယာန်]] » [[:ကဏ္ဍ:ကာရန်:အလ်ဗနဳယာန်|ကာရန်ဂမၠိုၚ်]] » -evə :စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာအလ်ဗနဳယာန်|အလ်ဗနဳယာန်]]မနွံကာရန် evə ဂမၠိုၚ်။ [[ကဏ္ဍ:ကာရန်:အလ်ဗနဳယာန်|evə]] gruw17pn7erlpwnfd89t61y61ygn2lb