ဝိက်ရှေန်နရဳ 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.7 case-sensitive မဳဒဳယာ တၟေင် ဓရီုကျာ ညးလွပ် ညးလွပ် ဓရီုကျာ ဝိက်ရှေန်နရဳ ဝိက်ရှေန်နရဳ ဓရီုကျာ ဝှာင် ဝှာင် ဓရီုကျာ မဳဒဳယာဝဳကဳ မဳဒဳယာဝဳကဳ ဓရီုကျာ ထာမ်ပလိက် ထာမ်ပလိက် ဓရီုကျာ ရီု ရီု ဓရီုကျာ ကဏ္ဍ ကဏ္ဍ ဓရီုကျာ အဆက်လက္ကရဴ အဆက်လက္ကရဴ ဓရီုကျာ ကာရန် ကာရန် ဓရီုကျာ အဘိဓာန် အဘိဓာန် ဓရီုကျာ ဗီုပြၚ်သိုၚ်တၟိ ဗီုပြၚ်သိုၚ်တၟိ ဓရီုကျာ TimedText TimedText talk မဝ်ဂျူ မဝ်ဂျူ ဓရီုကျာ Event Event talk မဝ်ဂျူ:category tree 828 1140 397219 385690 2026-06-19T13:54:03Z 咽頭べさ 33 397219 Scribunto text/plain -- Prevent substitution. if mw.isSubsting() then return require("Module:unsubst") end local export = {} local category_tree_submodule_prefix = "Module:category tree/" local category_tree_styles_css = "Module:category tree/styles.css" local m_str_utils = require("Module:string utilities") local m_template_parser = require("Module:template parser") local m_utilities = require("Module:utilities") local ceil = math.ceil local class_else_type = m_template_parser.class_else_type local concat = table.concat local deep_copy = require("Module:table").deepCopy local full_url = mw.uri.fullUrl local insert = table.insert local is_callable = require("Module:fun").is_callable local log10 = math.log10 or require("Module:math").log10 local new_title = mw.title.new local pages_in_category = mw.site.stats.pagesInCategory local parse = m_template_parser.parse local remove_comments = require("Module:string/removeComments") local sort = table.sort local split = m_str_utils.split local string_compare = require("Module:string/compare") local trim = m_str_utils.trim local uupper = m_str_utils.upper local yesno = require("Module:yesno") local current_frame = mw.getCurrentFrame() local current_title = mw.title.getCurrentTitle() local namespace = current_title.namespace local poscatboiler_subsystem = "poscatboiler" local extra_args_error = "Extra arguments to {{((}}auto cat{{))}} are not allowed for this category." -- Mon logic local labelPatterns = { "ဝေါဟာ.-", "ဂၞန်သၚ်္ချာ", "နာမ်ပါ်ကၞာတ်", "ဖျေံလဝ်သန္နိဋ္ဌာန်.-", "အဆက်ဖျပ်စုတ်လက္ကရဴ.-", "ကၞာတ်အမှိက်", "ပစ္စဲ", "သမ္ဗန္ဓ", "အာမေဍိက်.-", "သၚ်္ကေတ.-", "ပွမထညောံ", "တံရိုဟ်", "အက္ခရ်", "ကြိယာ", "နာမ်", "နာမ်မကိတ်ညဳ", "ဝါကျ", "ဟဳရာဂန.-", "ကာတာကာနာ.-", "ဗီုရုပ်", "ပေါရာဏာံပေါရာဒါံ", "ချေန်ယု", "ဖါ်လေန်ဒရုန်", "အရေဝ်ဗေဗာန်.-", "ယၟု.-", "ယၟုဗဳဇဂကူ", "ပမာဏ.-", --မဒှ်မာသီု POS ကဵု topic "ပွမ.-", "အဆက်လက္ကရဴ", "မဝ်ဂျူ.-", "ထာမ်ပလိက်.-", } -- Generates a sortkey for a numeral `n`, adding leading zeroes to avoid the "1, 10, 2, 3" sorting problem. `max_n` is the greatest expected value of `n`, and is used to determine how many leading zeroes are needed. If not supplied, it defaults to the number of languages. function export.numeral_sortkey(n, max_n) max_n = max_n or require("Module:list of languages").count() return ("#%%0%dd"):format(ceil(log10(max_n + 1))):format(n) end function export.split_lang_label(title_text) local getByCanonicalName = require("Module:languages").getByCanonicalName local canonicalName, lang, label, pattern, label0 --[=[ cannot use this logic -- Progressively remove a word from the potential canonical name until it -- matches an actual canonical name. local words = split(title_text, " ", true) for i = #words - 1, 1, -1 do local lang = getByCanonicalName(concat(words, " ", 1, i)) if lang then return lang, concat(words, " ", i + 1) end end return nil, title_text --]=] -- Mon logic if title_text:find("^ဝေါဟာ") then -- ဗက်ကဆံၚ် "ပါ်" တိုန်ကၠာဟိုတ်နူမနွံဒၟံၚ်ကဏ္ဍ "မုက်လိက်ဒၞာဲ" canonicalName, label = mw.ustring.match(title_text, "^ဝေါဟာ(.-)(ပါ်.+)$") if not canonicalName then canonicalName, label = mw.ustring.match(title_text, "^ဝေါဟာ(.-)(ဒၞာဲ.+)$") end if canonicalName then label = "ဝေါဟာ" .. label lang = getByCanonicalName(canonicalName) else label = title_text lang = nil end elseif title_text:find("^စရၚ်") then -- ဗက်ကဆံၚ် "ပါ်" တိုန်ကၠာဟိုတ်နူမနွံဒၟံၚ်ကဏ္ဍ "မုက်လိက်ဒၞာဲ" canonicalName, label = mw.ustring.match(title_text, "^စရၚ်(.-)(ပါ်.+)$") if not canonicalName then canonicalName, label = mw.ustring.match(title_text, "^စရၚ်ဘာသာ(.-)(ဒၞာဲ.+)$") end if canonicalName then lang = getByCanonicalName(canonicalName) label = "စရၚ်" .. label else lang = nil label = title_text end else for _,pattern in ipairs(labelPatterns) do label0, canonicalName, label = mw.ustring.match(title_text, "^(" .. pattern .. ")ဘာသာ(.-)(ပါ်.+)$") if not canonicalName then label0, canonicalName, label = mw.ustring.match(title_text, "^(" .. pattern .. ")ဘာသာ(.-)(ဒၞာဲ.+)$") if not canonicalName then label0, canonicalName = mw.ustring.match(title_text, "^(" .. pattern .. ")ဘာသာ(.+)$") end end if canonicalName then label = (label0 or "") .. (label0 and label and "★" or "") .. (label or "") local canonicalName1, inScript = mw.ustring.match(canonicalName, "^(.+)(အပ္ဍဲအက္ခရ်.+)$") if canonicalName1 and inScript then canonicalName = canonicalName1 label = label .. inScript end lang = getByCanonicalName(canonicalName) break end end end if label and label:find(" $") then label = label:sub(1, -2) end --th; remove an ending space return lang, label end local function show_error(text) return require("Module:message box").maintenance( "red", "[[File:Codex icon Alert red.svg|40px|alt=alert]]", "ကဏ္ဍတဏအ်ဝွံမစၟတ်သမ္တီလဝ်ဟွံသေၚ်အပ္ဍဲကဏ္ဍတၞံဝိက်ရှေန်နရဳဂမၠိုၚ်", text ) end -- Show the text that goes at the very top right of the page. local function show_topright(current) return current.getTopright and current:getTopright() or nil end local function link_box(content) return ("<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base, #aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold;\">%s</div>"):format(content) end local function show_editlink(current) return link_box(("[%s စၟတ်သမ္တီပလေဝ်ဒါန်ကဏ္ဍ]"):format(tostring(full_url(current:getDataModule(), "action=edit")))) end function show_related_changes() local title = current_title.fullText return link_box(("[%s <span title=\"Recent edits and other changes to pages in %s\">အပြံၚ်လှာဲလက္ကရဴအိုတ်</span>]"):format( tostring(full_url("Special:RecentChangesLinked", { target = title, showlinkedto = 0, })), title )) end local function show_pagelist(current) local namespace = "namespace=" local info = current:getInfo() local lang_code = info.code if info.label == "citations" or info.label == "citations of undefined terms" then namespace = namespace .. "Citations" elseif lang_code then local lang = require("Module:languages").getByCode(lang_code, true, true) if lang then -- Proto-Norse (gmq-pro) is probably the only language with a code ending in -pro -- that's intended to have mostly non-reconstructed entries. if (lang_code:find("%-pro$") and lang_code ~= "gmq-pro") or lang:hasType("reconstructed") then namespace = namespace .. "ဗီုပြၚ်သိုၚ်တၟိ" elseif lang:hasType("appendix-constructed") then namespace = namespace .. "အဆက်လက္ကရဴ" end end elseif info.label:match("ထာမ်ပလိက်") then namespace = namespace .. "ထာမ်ပလိက်" elseif info.label:match("မဝ်ဂျူ") then namespace = namespace .. "မဝ်ဂျူ" elseif info.label:match("^ဝိက်ရှေန်နရဳ") or info.label:match("^မုက်လိက်") then namespace = "" end return ([=[ {| id="newest-and-oldest-pages" class="wikitable mw-collapsible" style="float: right; clear: both; margin: 0 0 .5em 1em;" ! Newest and oldest pages&nbsp; |- | id="recent-additions" style="font-size:0.9em;" | '''မုက်လိက်တၟိအိုတ်မပလေဝ်ဒါန်လဝ်နူ [[mw:Manual:Categorylinks table#cl_timestamp|ကဏ္ဍလေန်ပ္တိုန်တၟိ]]:''' %s |- | id="oldest-pages" style="font-size:0.9em;" | '''မုက်လိက်တြေံအိုတ်မပလေဝ်ဒါန်လဝ်လက္ကရဴအိုတ်:''' %s |}]=]):format( current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=categoryadd order=descending]=] ):format(current_title.text, namespace) ), current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=lastedit order=ascending]=] ):format(current_title.text, namespace) ) ) end -- Show navigational "breadcrumbs" at the top of the page. local function show_breadcrumbs(current) local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. while current do local category, display_name, nocap if type(current) == "string" then category = current display_name = current:gsub("^ကဏ္ဍ:", "") else if not current.getCategoryName then error("Internal error: Bad format in breadcrumb chain structure, probably a misformatted value for `parents`: " .. mw.dumpObject(current)) end category = "ကဏ္ဍ:" .. current:getCategoryName() display_name, nocap = current:getBreadcrumbName() end if not nocap then display_name = mw.getContentLanguage():ucfirst(display_name) end insert(steps, 1, ("[[:%s|%s]]"):format(category, display_name)) -- Move up the "chain" by one level. if type(current) == "string" then current = nil else current = current:getParents() end if current then current = current[1].name end end local templateStyles = require("Module:TemplateStyles")(category_tree_styles_css) local ol = mw.html.create("ol") for i, step in ipairs(steps) do local li = mw.html.create("li") if i ~= 1 then local span = mw.html.create("span") :attr("aria-hidden", "true") :addClass("ts-categoryBreadcrumbs-separator") :wikitext(" » ") li:node(span) end li:wikitext(step) ol:node(li) end return templateStyles .. tostring(mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-categoryBreadcrumbs") :node(ol)) end local function show_also(current) local also = current._info.also if also and #also > 0 then return ('<div style="margin-top:-1em;margin-bottom:1.5em">%s</div>'):format(require("Module:also").main(also)) end return nil end -- Show a short description text for the category. local function show_description(current) return current.getDescription and current:getDescription() or nil end local function show_appendix(current) local appendix = current.getAppendix and current:getAppendix() return appendix and ("ယဝ်ရထပ်နွံပၟိက်မိက်ဂွံတီဏီတှ်ေ၊ ဆက်ဗဵုအာ [[%s]]."):format(appendix) or nil end local function sort_children(child1, child2) return string_compare(uupper(child1.sort), uupper(child2.sort)) end -- Show a list of child categories. local function show_children(current) local children = current.getChildren and current:getChildren() or nil if not children then return nil end sort(children, sort_children) local children_list = {} for _, child in ipairs(children) do local child_name, child_pagetitle = child.name if type(child_name) == "string" then child_pagetitle = child_name else child_pagetitle = "ကဏ္ဍ:" .. child_name:getCategoryName() end if new_title(child_pagetitle).exists then insert(children_list, ("* [[:%s]]: %s"):format( child_pagetitle, child.description or type(child_name) == "string" and child_name:gsub("^ကဏ္ဍ:", "") .. "." or child_name:getDescription("child") )) end end return concat(children_list, "\n") end -- Show a table of contents with links to each letter in the language's script. local function show_TOC(current) local titleText = current_title.text local inCategoryPages = pages_in_category(titleText, "pages") local inCategorySubcats = pages_in_category(titleText, "subcats") local TOC_type -- Compute type of table of contents required. if inCategoryPages > 2500 or inCategorySubcats > 2500 then TOC_type = "full" elseif inCategoryPages > 200 or inCategorySubcats > 200 then TOC_type = "normal" else -- No (usual) need for a TOC if all pages or subcategories can fit on one page; -- but allow this to be overridden by a custom TOC handler. TOC_type = "none" end if current.getTOC then local TOC_text = current:getTOC(TOC_type) if TOC_text ~= true then return TOC_text or nil end end if TOC_type ~= "none" then local templatename = current:getTOCTemplateName() local TOC_template if TOC_type == "full" then -- This category is very large, see if there is a "full" version of the TOC. local TOC_template_full = new_title(templatename .. "/full") if TOC_template_full.exists then TOC_template = TOC_template_full end end if not TOC_template then local TOC_template_normal = new_title(templatename) if TOC_template_normal.exists then TOC_template = TOC_template_normal end end if TOC_template then return current_frame:expandTemplate{title = TOC_template.text, args = {}} end end return nil end -- Show the "catfix" that adds language attributes and script classes to the page. local function show_catfix(current) local lang, sc = current:getCatfixInfo() return lang and m_utilities.catfix(lang, sc) or nil end -- Show the parent categories that the current category should be placed in. local function show_categories(current, categories) local parents = current.getParents and current:getParents() or nil if not parents then return nil end for _, parent in ipairs(parents) do local parent_name = parent.name local sortkey = type(parent.sort) == "table" and parent.sort:makeSortKey() or parent.sort if type(parent_name) == "string" then insert(categories, ("[[%s|%s]]"):format(parent_name, sortkey)) else insert(categories, ("[[ကဏ္ဍ:%s|%s]]"):format(parent_name:getCategoryName(), sortkey)) end end -- Also put the category in its corresponding "umbrella" or "by language" category. local umbrella = current:getUmbrella() if umbrella then -- FIXME: use a language-neutral sorting function like the Unicode Collation Algorithm. local sortkey = current._lang and current._lang:getCanonicalName() or current:getCategoryName() sortkey = require("Module:languages").getByCode("en", true):makeSortKey(sortkey) if type(umbrella) == "string" then insert(categories, ("[[%s|%s]]"):format(umbrella, sortkey)) else insert(categories, ("[[ကဏ္ဍ:%s|%s]]"):format(umbrella:getCategoryName(), sortkey)) end end -- Check for various unwanted parser functions, which should be integrated into the category tree data instead. -- Note: HTML comments shouldn't be removed from `content` until after this step, as they can affect the result. local content = current_title:getContent() if not content then -- This happens when using [[Special:ExpandTemplates]] to call {{auto cat}} on a nonexistent category page, -- which is needed by Benwing's create_wanted_categories.py script. return end local defaultsort, displaytitle, page_has_param for node in parse(content):iterate_nodes() do local node_class = class_else_type(node) if node_class == "ထာမ်ပလိက်" then local name = node:get_name() if name == "DEFAULTSORT:" and not defaultsort then insert(categories, "[[ကဏ္ဍ:Pages with DEFAULTSORT conflicts]]") defaultsort = true elseif name == "DISPLAYTITLE:" and not displaytitle then insert(categories,"[[ကဏ္ဍ:Pages with DISPLAYTITLE conflicts]]") displaytitle = true end elseif node_class == "parameter" and not page_has_param then insert(categories,"[[ကဏ္ဍ:Pages with raw triple-brace template parameters]]") page_has_param = true end end -- Check for raw category markup, which should also be integrated into the category tree data. content = remove_comments(content, "BOTH") local head = content:find("[[", 1, true) while head do local close = content:find("]]", head + 2, true) if not close then break end -- Make sure there are no intervening "[[" between head and close. local open = content:find("[[", head + 2, true) while open and open < close do head = open open = content:find("[[", head + 2, true) end local cat = content:sub(head + 2, close - 1) local colon = cat:match("^[ _\128-\244]*[Cc][Aa][Tt][EeGgOoRrYyကဏ္ဍ _\128-\244]*():") if colon then local pipe = cat:find("|", colon + 1, true) if pipe ~= #cat then local title = new_title(pipe and cat:sub(1, pipe - 1) or cat) if title and title.namespace == 14 then insert(categories,"[[ကဏ္ဍ:Categories with categories using raw markup]]") break end end end head = open end end local function generate_output(current) if current then for _, functionName in pairs{ "getBreadcrumbName", "getDataModule", "canBeEmpty", "getDescription", "getParents", "getChildren", "getUmbrella", "getAppendix", "getTOCTemplateName", } do if not is_callable(current[functionName]) then require("Module:debug").track{"category tree/missing function", "category tree/missing function/" .. functionName} end end end local boxes, display, categories = {}, {}, {} -- Categories should never show files as a gallery. insert(categories, "__NOGALLERY__") if current_frame:getParent():getTitle() == "ထာမ်ပလိက်:auto cat" then insert(categories, "[[ကဏ္ဍ:ကဏ္ဍပွမမကော်ခဴ ထာမ်ပလိက်:ဗ္ဂဲအဝ်တဝ်ဂမၠိုၚ်]]") end -- Check if the category is empty local totalPages = pages_in_category(current_title.text, "all") local hugeCategory = totalPages > 1000000 -- 1 million -- Categorize huge categories, as they cause DynamicPageList to time out and make the category inaccessible. if hugeCategory then insert(categories, "[[ကဏ္ဍ:ကဏ္ဍၝောံယာဲဂမၠိုၚ်]]") end -- Are the parameters valid? if not current then insert(categories, "[[ကဏ္ဍ:Categories that are not defined in the category tree]]") insert(categories, totalPages == 0 and "[[ကဏ္ဍ:ကဏ္ဍသၠးဒၟံၚ်ဂမၠိုၚ်]]" or nil) insert(display, show_error( "Double-check the category name for typos. <br>" .. "[[Special:Search/ကဏ္ဍ: " .. current_title.text:gsub("^.+:", ""):gsub(" ", "~2 ") .. '~2|Search existing categories]] to check if this category should be created under a different name (for example, "Fruits" instead of "Fruit"). <br>' .. "To request the definition of a new category in Wiktionary's category tree, please start a new topic at [[Wiktionary:Category and label treatment requests]].")) -- Exit here, as all code beyond here relies on current not being nil return concat(categories, "") .. concat(display, "\n\n"), true end -- Does the category have the correct name? local currentName = current:getCategoryName() local correctName = current_title.text == currentName if not correctName then insert(categories, "[[ကဏ္ဍ:ကဏ္ဍမနွံကဵုယၟုဟွံဒးရးဂမၠိုၚ်]]") insert(display, show_error(("Based on the data in the category tree, this category should be called '''[[:ကဏ္ဍ:%s]]'''။"):format(currentName))) end -- Add cleanup category for empty categories. local canBeEmpty = current:canBeEmpty() if canBeEmpty and correctName then insert(categories, " __EXPECTUNUSEDCATEGORY__") elseif totalPages == 0 then insert(categories, "[[ကဏ္ဍ:ကဏ္ဍသၠးဒၟံၚ်ဂမၠိုၚ်]]") end if current:isHidden() then insert(categories, "__HIDDENCAT__") end -- Put all the float-right stuff into a <div> that does not clear, so that float-left stuff like the breadcrumbs and -- description can go opposite the float-right stuff without vertical space. insert(boxes, "<div style=\"float: right;\">") insert(boxes, show_topright(current)) insert(boxes, show_editlink(current)) insert(boxes, show_related_changes()) -- Show pagelist, unless it's a huge category (since they can't use DynamicPageList - see above). --thwikt doesn't implement DynamicPageList yet --if not hugeCategory then -- insert(boxes, show_pagelist(current)) --end insert(boxes, "</div>") -- Generate the displayed information insert(display, show_breadcrumbs(current)) insert(display, show_also(current)) insert(display, show_description(current)) insert(display, show_appendix(current)) insert(display, show_children(current)) insert(display, show_TOC(current)) insert(display, show_catfix(current)) insert(display, '<br class="clear-both-in-vector-2022-only">') show_categories(current, categories) return concat(boxes, "\n") .. "\n" .. concat(display, "\n\n") .. concat(categories, "") end --[==[ List of handler functions that try to match the page name. A handler should return the name of a submodule to [[Module:category tree]] and an info table which is passed as an argument to the submodule. If a handler does not recognize the page name, it should return nil. Note that the order of handlers matters! ]==] local handlers = {} -- Thesaurus per-language category insert(handlers, function(title) local code, label = title:match("^အဘိဓာန်:(%l[%a-]*%a):(.+)") if code then return poscatboiler_subsystem, {label = title, raw = true} end end) -- Topic per-language category insert(handlers, function(title) local code, label = title:match("^(%l[%a-]*%a):(.+)") if code then return poscatboiler_subsystem, {label = title, raw = true} end end) -- Lect category e.g. for [[:หมวดหมู่:New Zealand English]] or [[:หมวดหมู่:Issime Walser]] insert(handlers, function(title, args) local lect = args.lect or args.dialect if lect ~= "" and yesno(lect, true) then -- Same as boolean in [[Module:parameters]]. return poscatboiler_subsystem, {label = title, args = args, raw = true} end end) -- poscatboiler per-language label, e.g. [Category:English non-lemma forms]] insert(handlers, function(title, args) local lang, label = export.split_lang_label(title) if not lang then return end local baseLabel, script = label:match("(.+)အပ္ဍဲအက္ခရ်(.-)$") if script and baseLabel ~= "ဝေါဟာ" then local scriptObj = require("Module:scripts").getByCanonicalName(script) if scriptObj then return poscatboiler_subsystem, {label = baseLabel, code = lang:getCode(), sc = scriptObj:getCode(), args = args} end end return poscatboiler_subsystem, {label = label, code = lang:getCode(), args = args} end) -- poscatboiler label umbrella category insert(handlers, function(title, args) local label = title:match("(.+)ဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်$") if label then if label:find(" $") then label = label:sub(1, -2) end --th; remove an ending space -- The poscatboiler code will appropriately lowercase if needed. return poscatboiler_subsystem, {label = label, args = args} end end) -- poscatboiler raw handlers insert(handlers, function(title, args) return poscatboiler_subsystem, {label = title, args = args, raw = true} end) -- poscatboiler umbrella handlers without 'by language' insert(handlers, function(title, args) return poscatboiler_subsystem, {label = title, args = args} end) function export.show(frame) local args, other_args = require("Module:parameters").process(frame:getParent().args, { ["also"] = {type = "title", sublist = "comma without whitespace", namespace = 14} }, true) if args.also then for k, arg in next, args.also do args.also[k] = arg.prefixedText end end for k, arg in next, other_args do other_args[k] = trim(arg) end if namespace == 10 then -- Template return "(This template should be used on pages in the [[Help:Namespaces#Category|หมวดหมู่:]] namespace.)" elseif namespace ~= 14 then -- Category error("This template/module can only be used on pages in the [[mw:Help:Namespaces#Category|หมวดหมู่:]] namespace.") end local first_fail_args_handled, first_fail_cattext -- Go through each handler in turn. If a handler doesn't recognize the format of the category, it will return nil, -- and we will consider the next handler. Otherwise, it returns a template name and arguments to call it with, but -- even then, that template might return an error, and we need to consider the next handler. This happens, for -- example, with the category "CAT:Mato Grosso, Brazil", where "Mato" is the name of a language, so the poscatboiler -- per-language label handler fires and tries to find a label "Grosso, Brazil". This throws an error, and -- previously, this blocked fruther handler consideration, but now we check for the error and continue checking -- handlers; eventually, the topic umbrella handler will fire and correctly handle the category. for _, handler in ipairs(handlers) do -- Use a new title object and args table for each handler, to keep them isolated. local submodule, info = handler(current_title.text, deep_copy(other_args)) if submodule then info.also = deep_copy(args.also) require("Module:debug").track("auto cat/" .. submodule) -- `failed` is true if no match was found. submodule = require(category_tree_submodule_prefix .. submodule) local cattext, failed = generate_output(submodule.main(info)) if failed then if not first_fail_cattext then first_fail_cattext = cattext first_fail_args_handled = info.args and true or false end elseif not info.args and next(other_args) then error(extra_args_error) else return cattext end end end -- If there were no matches, throw an error if any arguments were given, or otherwise return the cattext -- from the first fail encountered. The final handlers call the boilers unconditionally, so there should -- always be something to return. if not first_fail_args_handled and next(other_args) then error(extra_args_error) end return first_fail_cattext end -- TODO: new test entrypoint. return export tpev9hl2aaj30q8djbquui4ffwwf4dq မဝ်ဂျူ:la-adj/table 828 6720 397236 300986 2026-06-19T18:51:05Z 咽頭べさ 33 397236 Scribunto text/plain local export = {} local m_table = require("Module:table") local function convert(data, conv) local col = {} local row = {} local marked = {} local slots = {} local function add(i,j) local col = col[i][j] local row = row[i][j] if col==0 or row==0 then return "" end local entry = data.finish_show_form(data, slots[i][j]) if col==1 then if row==1 then return '\n| ' .. entry else return '\n| rowspan=' .. row .. ' | ' .. entry end else if row==1 then return '\n| colspan=' .. col .. ' | ' .. entry else return '\n| colspan=' .. col .. ' rowspan=' .. row .. ' | ' .. entry end end end for i=1,#conv do col[i] = {} row[i] = {} marked[i] = {} slots[i] = {} for j=1,#conv[i] do col[i][j] = 1 row[i][j] = 1 marked[i][j] = false slots[i][j] = {conv[i][j]} end end -- Return true if the contents of the two slots are equal in every -- way. This means the forms are the same, the footnote text is the -- same, and the accelerator lemmas are the same. We need to compare -- the accelerator lemmas because in some cases different slots have -- different lemmas (e.g. when noneut=1 is set, the masculine slots -- will have the masculine lemma but the feminine slots will have the -- feminine lemma). local function slots_equal(slot1, slot2) return m_table.deepEquals(data.forms[slot1], data.forms[slot2]) and m_table.deepEquals(data.notetext[slot1], data.notetext[slot2]) and (data.accel[slot1] and data.accel[slot1].lemma or nil) == (data.accel[slot2] and data.accel[slot2].lemma or nil) end --merge identical cells within a row for i=1,#conv do for j=1,#conv[i] do if col[i][j] ~= 0 then for k=j+1,#conv[i] do local slotij = conv[i][j] local slotik = conv[i][k] if not slots_equal(slotij, slotik) then break end col[i][j] = col[i][j] + 1 col[i][k] = 0 row[i][k] = 0 for _, slot in ipairs(slots[i][k]) do table.insert(slots[i][j], slot) end slots[i][k] = nil end end end end --final for i=1,#conv do for j=1,#conv[i] do conv[i][j] = add(i,j) end conv[i] = table.concat(conv[i]) end return conv end local function make_table_mfn_pl(data, mfonly) local conv = { {"nom_pl_m"}, {"gen_pl_m"}, {"dat_pl_m"}, {"acc_pl_m"}, {"abl_pl_m"}, {"voc_pl_m"}, {"loc_pl_m"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.') output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_mfn_sg(data, mfonly) local conv = { {"nom_sg_m"}, {"gen_sg_m"}, {"dat_sg_m"}, {"acc_sg_m"}, {"abl_sg_m"}, {"voc_sg_m"}, {"loc_sg_m"}, } conv = convert(data, conv) local output = data.title .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | singular' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.') output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_n_pl(data) local conv = { {"nom_pl_n"}, {"gen_pl_n"}, {"dat_pl_n"}, {"acc_pl_n"}, {"abl_pl_n"}, {"voc_pl_n"}, {"loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. 'နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_n_sg(data) local conv = { {"nom_sg_n"}, {"gen_sg_n"}, {"dat_sg_n"}, {"acc_sg_n"}, {"abl_sg_n"}, {"voc_sg_n"}, {"loc_sg_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | ကိုန်ဨကဝုစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. 'နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_mf_and_n_pl(data) local conv = { {"nom_pl_m", "nom_pl_n"}, {"gen_pl_m", "gen_pl_n"}, {"dat_pl_m", "dat_pl_n"}, {"acc_pl_m", "acc_pl_n"}, {"abl_pl_m", "abl_pl_n"}, {"voc_pl_m", "voc_pl_n"}, {"loc_pl_m", "loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! masc./fem.' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_mf_and_n_sg(data) local conv = { {"nom_sg_m", "nom_sg_n"}, {"gen_sg_m", "gen_sg_n"}, {"dat_sg_m", "dat_sg_n"}, {"acc_sg_m", "acc_sg_n"}, {"abl_sg_m", "abl_sg_n"}, {"voc_sg_m", "voc_sg_n"}, {"loc_sg_m", "loc_sg_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဨကဝုစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! masc./fem.' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f_pl(data) local conv = { {"nom_pl_m", "nom_pl_f"}, {"gen_pl_m", "gen_pl_f"}, {"dat_pl_m", "dat_pl_f"}, {"acc_pl_m", "acc_pl_f"}, {"abl_pl_m", "abl_pl_f"}, {"voc_pl_m", "voc_pl_f"}, {"loc_pl_m", "loc_pl_f"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f_sg(data) local conv = { {"nom_sg_m", "nom_sg_f"}, {"gen_sg_m", "gen_sg_f"}, {"dat_sg_m", "dat_sg_f"}, {"acc_sg_m", "acc_sg_f"}, {"abl_sg_m", "abl_sg_f"}, {"voc_sg_m", "voc_sg_f"}, {"loc_sg_m", "loc_sg_f"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဨကဝုစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f_and_n_pl(data) local conv = { {"nom_pl_m", "nom_pl_f", "nom_pl_n"}, {"gen_pl_m", "gen_pl_f", "gen_pl_n"}, {"dat_pl_m", "dat_pl_f", "dat_pl_n"}, {"acc_pl_m", "acc_pl_f", "acc_pl_n"}, {"abl_pl_m", "abl_pl_f", "abl_pl_n"}, {"voc_pl_m", "voc_pl_f", "voc_pl_n"}, {"loc_pl_m", "loc_pl_f", "loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="3" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f_and_n_sg(data) local conv = { {"nom_sg_m", "nom_sg_f", "nom_sg_n"}, {"gen_sg_m", "gen_sg_f", "gen_sg_n"}, {"dat_sg_m", "dat_sg_f", "dat_sg_n"}, {"acc_sg_m", "acc_sg_f", "acc_sg_n"}, {"abl_sg_m", "abl_sg_f", "abl_sg_n"}, {"voc_sg_m", "voc_sg_f", "voc_sg_n"}, {"loc_sg_m", "loc_sg_f", "loc_sg_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="3" | ကိုန်ဨကဝုစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_mfn(data, mfonly) local conv = { {"nom_sg_m"}, {"gen_sg_m"}, {"dat_sg_m"}, {"acc_sg_m"}, {"abl_sg_m"}, {"voc_sg_m"}, {"loc_sg_m"}, {"nom_pl_m"}, {"gen_pl_m"}, {"dat_pl_m"}, {"acc_pl_m"}, {"abl_pl_m"}, {"voc_pl_m"}, {"loc_pl_m"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | ကိုန်ဨကဝုစ်' output = output .. '\n|class="separator" rowspan="999"|' output = output .. '\n!class="outer" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.') output = output .. '\n! ' .. (mfonly and 'masc./fem.' or 'masc./fem./neut.') output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. conv[8] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. conv[9] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. conv[10] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. conv[11] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. conv[12] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] output = output .. conv[13] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] output = output .. conv[14] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_n(data) local conv = { {"nom_sg_n"}, {"gen_sg_n"}, {"dat_sg_n"}, {"acc_sg_n"}, {"abl_sg_n"}, {"voc_sg_n"}, {"loc_sg_n"}, {"nom_pl_n"}, {"gen_pl_n"}, {"dat_pl_n"}, {"acc_pl_n"}, {"abl_pl_n"}, {"voc_pl_n"}, {"loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" | ကိုန်ဨကဝုစ်' output = output .. '\n|class="separator" rowspan="999"|' output = output .. '\n!class="outer" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ' .. 'နပုလ္လိၚ်' output = output .. '\n! ' .. 'နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. conv[8] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. conv[9] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. conv[10] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. conv[11] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. conv[12] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] output = output .. conv[13] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] output = output .. conv[14] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_mf_and_n(data) local conv = { {"nom_sg_m", "nom_sg_n"}, {"gen_sg_m", "gen_sg_n"}, {"dat_sg_m", "dat_sg_n"}, {"acc_sg_m", "acc_sg_n"}, {"abl_sg_m", "abl_sg_n"}, {"voc_sg_m", "voc_sg_n"}, {"loc_sg_m", "loc_sg_n"}, {"nom_pl_m", "nom_pl_n"}, {"gen_pl_m", "gen_pl_n"}, {"dat_pl_m", "dat_pl_n"}, {"acc_pl_m", "acc_pl_n"}, {"abl_pl_m", "abl_pl_n"}, {"voc_pl_m", "voc_pl_n"}, {"loc_pl_m", "loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဨကဝုစ်' output = output .. '\n|class="separator" rowspan="999"|' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! masc./fem.' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n! masc./fem.' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. conv[8] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. conv[9] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. conv[10] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. conv[11] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. conv[12] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] output = output .. conv[13] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] output = output .. conv[14] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f(data) local conv = { {"nom_sg_m", "nom_sg_f"}, {"gen_sg_m", "gen_sg_f"}, {"dat_sg_m", "dat_sg_f"}, {"acc_sg_m", "acc_sg_f"}, {"abl_sg_m", "abl_sg_f"}, {"voc_sg_m", "voc_sg_f"}, {"loc_sg_m", "loc_sg_f"}, {"nom_pl_m", "nom_pl_f"}, {"gen_pl_m", "gen_pl_f"}, {"dat_pl_m", "dat_pl_f"}, {"acc_pl_m", "acc_pl_f"}, {"abl_pl_m", "abl_pl_f"}, {"voc_pl_m", "voc_pl_f"}, {"loc_pl_m", "loc_pl_f"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဨကဝုစ်' output = output .. '\n|class="separator" rowspan="999"|' output = output .. '\n!class="outer" colspan="2" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. conv[8] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. conv[9] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. conv[10] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. conv[11] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. conv[12] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] output = output .. conv[13] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] output = output .. conv[14] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end local function make_table_m_and_f_and_n(data) local conv = { {"nom_sg_m", "nom_sg_f", "nom_sg_n"}, {"gen_sg_m", "gen_sg_f", "gen_sg_n"}, {"dat_sg_m", "dat_sg_f", "dat_sg_n"}, {"acc_sg_m", "acc_sg_f", "acc_sg_n"}, {"abl_sg_m", "abl_sg_f", "abl_sg_n"}, {"voc_sg_m", "voc_sg_f", "voc_sg_n"}, {"loc_sg_m", "loc_sg_f", "loc_sg_n"}, {"nom_pl_m", "nom_pl_f", "nom_pl_n"}, {"gen_pl_m", "gen_pl_f", "gen_pl_n"}, {"dat_pl_m", "dat_pl_f", "dat_pl_n"}, {"acc_pl_m", "acc_pl_f", "acc_pl_n"}, {"abl_pl_m", "abl_pl_f", "abl_pl_n"}, {"voc_pl_m", "voc_pl_f", "voc_pl_n"}, {"loc_pl_m", "loc_pl_f", "loc_pl_n"}, } conv = convert(data, conv) local output = data.title output = output .. '\n\n' output = output .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-top', args = { title = '-', palette = 'cyan', class = 'sticky-left-column', lang = "la", } } output = output .. '\n!class="outer" | ' output = output .. '\n!class="outer" colspan="3" | ကိုန်ဨကဝုစ်' output = output .. '\n|class="separator" rowspan="999"|' output = output .. '\n!class="outer" colspan="3" | ကိုန်ဗဟုဝစ်' output = output .. '\n|-' output = output .. '\n! ' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n! ပုလ္လိၚ်' output = output .. '\n! ဣတ္တိလိၚ်' output = output .. '\n! နပုလ္လိၚ်' output = output .. '\n|-' output = output .. '\n! [[nominative case|မဒုၚ်ယၟု]]' output = output .. conv[1] output = output .. conv[8] output = output .. '\n|-' output = output .. '\n! [[genitive case|ဗဳဇဂကူ]]' output = output .. conv[2] output = output .. conv[9] output = output .. '\n|-' output = output .. '\n! [[dative case|ပြကမ္မကာရက]]' output = output .. conv[3] output = output .. conv[10] output = output .. '\n|-' output = output .. '\n! [[accusative case|ကမ္မကာရက]]' output = output .. conv[4] output = output .. conv[11] output = output .. '\n|-' output = output .. '\n! [[ablative case|ပရေၚ်မလၚ်]]' output = output .. conv[5] output = output .. conv[12] output = output .. '\n|-' output = output .. '\n! [[vocative case|ပရေၚ်ဂယိုၚ်လမျီု]]' output = output .. conv[6] output = output .. conv[13] if data.loc then output = output .. '\n|-' output = output .. '\n! [[locative case|ခၞံဗဒှ်ဌာန်မတန်တဴ]]' output = output .. conv[7] output = output .. conv[14] end output = output .. '\n' .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' } if data.footnotes and data.footnotes ~= '' then output = output .. '\n' .. data.footnotes end return output end function export.make_table(data) local forms, output = data.forms if not forms.nom_sg_n and not forms.nom_pl_n then if forms.nom_sg_f or forms.nom_pl_f then if data.num == "pl" then output = make_table_m_and_f_pl(data) elseif data.num == "sg" then output = make_table_m_and_f_sg(data) else output = make_table_m_and_f(data) end else local mfonly = data.noneut and not data.nomf if data.num == "pl" then output = make_table_mfn_pl(data, mfonly) elseif data.num == "sg" then output = make_table_mfn_sg(data, mfonly) else output = make_table_mfn(data, mfonly) end end elseif data.nomf then if data.num == "pl" then output = make_table_n_pl(data) elseif data.num == "sg" then output = make_table_n_sg(data) else output = make_table_n(data) end elseif not forms.nom_sg_f and not forms.nom_pl_f then if data.num == "pl" then output = make_table_mf_and_n_pl(data) elseif data.num == "sg" then output = make_table_mf_and_n_sg(data) else output = make_table_mf_and_n(data) end else if data.num == "pl" then output = make_table_m_and_f_and_n_pl(data) elseif data.num == "sg" then output = make_table_m_and_f_and_n_sg(data) else output = make_table_m_and_f_and_n(data) end end return output end return export -- For Vim, so we get 4-space tabs -- vim: set ts=4 sw=4 noet: bafh0megul7tjgct47di20h46uwlh71 မဝ်ဂျူ:la-headword 828 24343 397231 300944 2026-06-19T18:06:54Z 咽頭べさ 33 397231 Scribunto text/plain -- TODO: handle "-old" subtypes generally, appending "in Old Latin", where terms have additional OL inflections. local export = {} local pos_functions = {} local string_utilities = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local form_is_empty = require("Module:la-utilities").form_is_empty local insert = table.insert local remove = table.remove local umatch = mw.ustring.match local lang = require("Module:languages").getByCode("la") local NAMESPACE = mw.title.getCurrentTitle().nsText local PAGENAME = mw.loadData("Module:headword/data").pagename local legal_gender = { ["m"] = true, ["f"] = true, ["n"] = true, ["?"] = true, ["?!"] = true, } local declension_to_english = { ["1"] = "ပထမ", ["2"] = "ဒုတိယ", ["3"] = "တတိယ", ["4"] = "စတုတ္ထ", ["5"] = "ပဉ္စမ", } local gender_names = { ["m"] = "ပုလ္လိၚ်", ["f"] = "ဣတ္တိလိၚ်", ["n"] = "နပုလ္လိၚ်", ["?"] = "လိၚ်ဟွံတီကၠး", ["?!"] = "လိၚ်ဟွံပြာကတ်", } local function deep_equals(...) deep_equals = require(table_module).deepEquals return deep_equals(...) end local function get_plaintext(...) get_plaintext = require(utilities_module).get_plaintext return get_plaintext(...) end local function insert_if_not(...) insert_if_not = require(table_module).insertIfNot return insert_if_not(...) end local function invert(...) invert = require(table_module).invert return invert(...) end local function keys_to_list(...) keys_to_list = require(table_module).keysToList return keys_to_list(...) end local function pattern_escape(...) pattern_escape = require(string_utilities).pattern_escape return pattern_escape(...) end local function serial_comma_join(...) serial_comma_join = require(table_module).serialCommaJoin return serial_comma_join(...) end local function split(...) split = require(string_utilities).split return split(...) end local function ulower(...) ulower = require(string_utilities).lower return ulower(...) end local function format(array, concatenater) if #array == 0 then return "" end local concatenated = concat(array, concatenater) if concatenated == "" then return "" elseif concatenated:sub(-1) == "'" then concatenated = concatenated .. " " end return "; ''" .. concatenated .. "''" end local function glossary_link(anchor, text) text = text or anchor return "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#" .. anchor .. "|" .. text .. "]]" end local function make_link(page, display, face, accel) return require("Module:links").full_link({term = page, alt = display, lang = lang, accel = accel}, face) end -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local iargs = require("Module:parameters").process(frame.args, { [1] = {required = true}, ["def"] = true, ["suff_type"] = true, }) local args = frame:getParent().args local poscat = iargs[1] local def = iargs.def local suff_type = iargs.suff_type local postype = nil if suff_type then postype = poscat .. '-' .. suff_type else postype = poscat end local data = {lang = lang, categories = {}, heads = {}, genders = {}, inflections = {}} local infl_classes = {} local title = {} local postscript = {} if poscat == "အဆက်လက္ကရဴ" then -- insert_if_not(data.categories, "Latin " .. suff_type .. "-forming suffixes") end if pos_functions[postype] then local new_poscat = pos_functions[postype](def, args, data, infl_classes, title, postscript) if new_poscat then poscat = new_poscat end end data.pos_category = poscat postscript = concat(postscript, ", ") return require("Module:headword").full_headword(data) .. format(infl_classes, "/") .. format(title, ", ") .. (postscript ~= "" and " (" .. postscript .. ")" or "") end local function process_num_type(numtype, categories) if numtype == "card" then -- insert_if_not(categories, "Latin cardinal numbers") elseif numtype == "ord" then -- insert_if_not(categories, "Latin ordinal numbers") elseif numtype == "frac" then -- insert_if_not(categories, "Latin fractional numbers") elseif numtype == "dist" then -- insert_if_not(categories, "Latin distributive numbers") elseif numtype == "mul" then -- insert_if_not(categories, "Latin multiplicative numbers") elseif numtype == "coll" then -- insert_if_not(categories, "Latin collective numbers") elseif numtype then error("Unrecognized numeral type '" .. numtype .. "'") end end local function normalize_derivation(deriv, anchor, text) if not deriv then return nil end local deriv1 = deriv[1] if not deriv1 or deriv1 == "-" then return deriv1 end deriv.label = glossary_link(anchor, text) return deriv end local function derivation(data, decldata, arg, anchor, text) local der = normalize_derivation(decldata[arg], anchor, text) if der and der ~= "-" then insert(data.inflections, der) end end local function nouns(pos, def, args, data, infl_classes, title) local is_num = pos == "ဂၞန်သၚ်္ချာ" local is_pn = false if pos == "နာမ်မကိတ်ညဳ" then is_pn = true pos = "နာမ်" end local decldata = require("Module:la-nominal").do_generate_noun_forms(args, pos, "headword", def, is_num) local lemma = decldata.overriding_lemma -- TODO: modify the headword line if the slot isn't the expected one. if #lemma == 0 then for slot in require("Module:la-nominal").iter_potential_noun_lemma_slots() do local potential_lemma = decldata.forms["linked_" .. slot] if not form_is_empty(potential_lemma) then if decldata.unattested[slot] then potential_lemma = "*" .. potential_lemma end lemma = potential_lemma break end end end data.heads = lemma -- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't -- really any redundant heads. data.no_redundant_head_cat = true data.id = decldata.id local genders = decldata.overriding_genders if #genders == 0 then if decldata.gender then genders = {ulower(decldata.gender)} elseif not is_num then error("No gender explicitly specified in headword template using g=, and can't infer gender from lemma spec") end end local categories = data.categories if is_num then process_num_type(decldata.num_type, categories) end if decldata.indecl then insert(data.inflections, {label = glossary_link("ခလံက်ခနက်")}) insert_if_not(categories, decldata.pos .. "လပ်တေန်နကဵုပါ်ပါဲထောံဟွံမာန်ဂမၠိုၚ်") for _, g in ipairs(genders) do local gender = g:match("^(.[\128-\191]*)%-[sp]$") if not gender then gender = g end if not legal_gender[gender] then error("Gender “" .. gender .. "” is not a valid Latin gender.") end insert(data.genders, g) insert_if_not(categories, decldata.pos .. gender_names[gender] .. "လပ်တေန်နကဵုပါ်ပါဲထောံဟွံမာန်ဂမၠိုၚ်") end else local is_irreg = false local is_indecl = false local is_decl = false local has_multiple_decls = false local has_multiple_variants = false -- flatten declension specs local decls = {} for _, g in ipairs(genders) do if not legal_gender[g] then error("Gender “" .. g .. "” is not a valid Latin gender.") elseif decldata.num == "pl" then g = g .. "-p" elseif decldata.num == "sg" then g = g .. "-s" end insert(data.genders, g) end local function process_decl(decl_list, props) local headword_decl = props.headword_decl -- skip adjectival declensions if headword_decl:match("+$") then return elseif props.decl == "irreg" then is_irreg = true headword_decl = headword_decl:match("^irreg/(.*)$") or headword_decl local irreg_decls = split(headword_decl, ",") if #irreg_decls > 1 then has_multiple_decls = true end for _, d in ipairs(irreg_decls) do if d == "indecl" or d == "0" then is_indecl = true else is_decl = true end insert_if_not(decl_list, d) end else if headword_decl == "indecl" or headword_decl == "0" then is_indecl = true else is_decl = true end insert_if_not(decl_list, headword_decl) end end for _, props in ipairs(decldata.propses) do if props.headword_decl then process_decl(decls, props) else local alternant_decls = {} for _, alternant in ipairs(props) do for _, single_props in ipairs(alternant) do process_decl(alternant_decls, single_props) end end if #alternant_decls > 1 then has_multiple_decls = true elseif #decls > 1 then has_multiple_variants = true end for _, d in ipairs(alternant_decls) do insert_if_not(decls, d) end end end if is_indecl and is_decl then has_multiple_decls = true end if has_multiple_decls then -- insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple declensions") end if has_multiple_variants then -- insert_if_not(categories, "Latin " .. decldata.pos .. " with multiple variants of a single declension") end if is_irreg then insert(title, glossary_link("ခလံက်ခနက်")) insert_if_not(categories, decldata.pos .. "အတိုၚ်ပကတိဟွံသေၚ်နကဵုဘာသာလပ်တေန်ဂမၠိုၚ်") for _, g in ipairs(genders) do insert_if_not(categories, decldata.pos .. gender_names[g] .. "အတိုၚ်ပကတိဟွံသေၚ်နကဵုဘာသာလပ်တေန်ဂမၠိုၚ်") end end if is_indecl then if is_decl then insert(title, glossary_link("ကၞိက်ဟွံမာန်")) else insert(data.inflections, {label = glossary_link("ကၞိက်ဟွံမာန်")}) end insert_if_not(categories, decldata.pos .. "လပ်တေန်နကဵုပါ်ပါဲထောံဟွံမာန်ဂမၠိုၚ်") for _, g in ipairs(genders) do insert_if_not(categories, decldata.pos .. gender_names[g] .. "လပ်တေန်နကဵုပါ်ပါဲထောံဟွံမာန်ဂမၠိုၚ်") end end if #decls > 1 then insert(title, "variously declined") end for _, decl in ipairs(decls) do if not (decl == "0" or decl == "indecl" or decl == "sgpl" or decl == "irreg") then local decl_class = declension_to_english[decl] if not decl_class then error("Internal error: declension '" .. decl .. "' not recognized") end insert(title, "[[Appendix:လပ်တေန်မလဟုတ်စှ်ေအလန်" .. decl_class .. "|မလဟုတ်စှ်ေအလန်" .. decl_class .. "]]") insert_if_not(categories, decldata.pos .. "လပ်တေန်မလဟုတ်စှ်ေအလန်" .. decl_class) for _, g in ipairs(genders) do insert_if_not(categories, decldata.pos .. gender_names[g] .. "လပ်တေန်ပ္ဍဲဆေၚ်စပ်ကဵုမလဟုတ်စှ်ေအလန်" .. decl_class) end end end local lemma_num = decldata.num == "pl" and "pl" or "sg" if NAMESPACE == "ဗီုပြၚ်သိုၚ်တၟိ" then -- For reconstructed nouns: if data.genders[1] == 'n' and lemma_num == 'sg' then -- singular neuter nouns give a plural local pl = decldata.forms["nom_pl"] if pl and pl ~= "" and #pl > 0 then pl.label = "ကိုန်ဗဟုဝစ်" insert(data.inflections, pl) end else -- all others give an oblique local obl = decldata.forms["acc_" .. lemma_num] if obl and obl ~= "" and #obl > 0 then obl.label = "oblique" insert(data.inflections, obl) end end else local gen = decldata.forms["gen_" .. lemma_num] if (decldata.unattested["gen_" .. lemma_num]) then gen[1] = '*' .. gen[1] data.nolink = true end if gen and gen ~= "" and gen ~= "—" and #gen > 0 then if is_decl then -- Skip displaying the genitive for nouns that are only -- indeclinable. But we do display it for nouns like Abrahām -- and Ādām that can be either indeclinable or declined. gen.label = "ဗဳဇဂကူ" insert(data.inflections, gen) end else insert(data.inflections, {label = "ဗဳဇဂကူဟွံမွဲ"}) insert_if_not(categories, decldata.pos .. "လပ်တေန်မနွံကဵုဂကူဗဳဇကိုန်ဨကဝုစ်ဟွံသေၚ်ဂမၠိုၚ်") end end end derivation(data, decldata, "m", "ပုလ္လိၚ်") derivation(data, decldata, "f", "ဣတ္တိလိၚ်") derivation(data, decldata, "n", "နပုလ္လိၚ်") derivation(data, decldata, "adj", "ဆေၚ်စပ်ကဵုဆက်ဆောံ", "နာမဝိသေသနဆေၚ်စပ်ကဵုဆက်ဆောံ") derivation(data, decldata, "dim", "မလဟုတ်စှ်ေ") derivation(data, decldata, "aug", "မဇၞော်မောဝ်တိုန်") for _, cat in ipairs(decldata.categories) do insert_if_not(categories, cat) end for _, cat in ipairs(decldata.cat) do insert_if_not(categories, cat .. "လပ်တေန်ဂမၠိုၚ်") end return is_pn and decldata.pos == "နာမ်" and "နာမ်မကိတ်ညဳ" or decldata.pos end pos_functions["နာမ်"] = function(def, args, data, infl_classes, title) return nouns("နာမ်", def, args, data, infl_classes, title) end pos_functions["နာမ်မကိတ်ညဳ"] = function(def, args, data, infl_classes, title) return nouns("နာမ်မကိတ်ညဳ", def, args, data, infl_classes, title) end pos_functions["နာမ်အဆက်လက္ကရဴ"] = function(def, args, data, infl_classes, title) return nouns("အဆက်လက္ကရဴ", def, args, data, infl_classes, title) end pos_functions["နာမ်ဂၞန်သၚ်္ချာ"] = function(def, args, data, infl_classes, title) return nouns("ဂၞန်သၚ်္ချာ", def, args, data, infl_classes, title) end function export.verb_title(title, typeinfo, lemma_forms) local conj = typeinfo.conj local irreg_processing = typeinfo.irreg local subtypes = typeinfo.subtypes local first_lemma = "" if #lemma_forms > 0 then first_lemma = require("Module:links").remove_links(lemma_forms[1]) end if conj == "1st" then insert(title, "[[:en:Appendix:Latin first conjugation|ကြိယာအပြံၚ်အလှာဲအလန်ပထမ]]") elseif conj == "2nd" then insert(title, "[[:en:Appendix:Latin second conjugation|ကြိယာအပြံၚ်အလှာဲအလန်ဒုတိယ]]") elseif conj == "3rd" then insert(title, "[[:en:Appendix:Latin third conjugation|ကြိယာအပြံၚ်အလှာဲအလန်တတိယ]]") elseif conj == "3rd-io" then insert(title, ("[[:en:Appendix:Latin third conjugation|ကြိယာအပြံၚ်အလှာဲအလန်တတိယ (အပြံၚ်အလှာဲ%s)]]"):format(make_link(nil, "-iō", "term"))) elseif conj == "3rd/4th" then insert(title, ("[[:en:Appendix:Latin third conjugation|တတိယ (အပြံၚ်အလှာဲ%s)]] / [[:en:Appendix:Latin fourth conjugation|ကြိယာအပြံၚ်အလှာဲအလန်စတုတ္ထ]]"):format(make_link(nil, "-iō", "term"))) elseif conj == "4th" then insert(title, "[[:en:Appendix:Latin fourth conjugation|ကြိယာအပြံၚ်အလှာဲအလန်စတုတ္ထ]]") elseif conj == "irreg" then -- sum insert(title, "[[:en:Appendix:Latin irregular verbs|ကြိယာအပြံၚ်အလှာဲအလန်ခလံက်ခနက်]]") end if subtypes.highlydef then -- āiō, inquam insert(title, "[[defective verb#အၚ်္ဂလိက်|ဟွံစှ်ေကဵုဗီုပြၚ်]]မသၠုၚ်တဴ") end if subtypes.suppl then -- sum, volō insert(title, "[[suppletive#အၚ်္ဂလိက်|သဒ္ဒာ]]") end if subtypes["3only"] then -- decet insert(title, "ပါဲနူ[[third person#အၚ်္ဂလိက်|ပူဂဵုတတိယ]]") elseif subtypes.impers then -- decet, advesperāscit (also nopass) insert(title, "[[impersonal verb#အၚ်္ဂလိက်|ဟၟဲကဵုပစ္စဲ]]") end if subtypes.depon then -- dēmōlior, calvor (also noperf) insert(title, "[[deponent#အၚ်္ဂလိက်|ညးမဒစဵုဒစ]]") end if subtypes.perfaspres then -- meminī, ōdī insert(title, "no [[present tense#အၚ်္ဂလိက်|ပစ္စုပ္ပန်]]ဟွံမွဲ") -- If semidepon is set, only the active forms are affected. local voice = subtypes.semidepon and "[[active voice#အၚ်္ဂလိက်|ပရေက်]]" or "" insert(title, ("[[perfect tense#အၚ်္ဂလိက်|ဗီုပြၚ်မက္ဍိုပ်ပေၚ်]] %sမနွံကဵု [[present tense#အၚ်္ဂလိက်|ပစ္စုပ္ပန်]]အဓိပ္ပာဲ %s"):format(voice, voice)) -- Clarify that deponency can only apply to the perfect. if subtypes.semidepon then -- ōdī insert(title, "[[deponent#အၚ်္ဂလိက်|ညးမဟီုကဵုသ္ကေဝ်က္တောဝ်]]ပ္ဍဲဆေၚ်စပ်ကဵု[[perfect tense#အၚ်္ဂလိက်|ဗီုပြၚ်မက္ဍိုပ်ပေၚ်]]") end if subtypes.optsemidepon then insert(title, "[[deponent#အၚ်္ဂလိက်|ညးမဒစဵုဒစ]]ပ္ဍဲဆေၚ်စပ်ကဵု[[perfect tense#အၚ်္ဂလိက်|မဟွံက္ဍိုက်ပေၚ်]]") end else if subtypes.semidepon then -- fīdō, gaudeō insert(title, "[[semi-deponent#အၚ်္ဂလိက်|သၚ်္ကေတ-မွဲကရေက်]]") end if subtypes.optsemidepon then -- audeō, placeō, soleō, pudeō insert(title, "[[semi-deponent#အၚ်္ဂလိက်|သၚ်္ကေတ-မွဲကရေက်]]တဴရဴအတိုၚ်ပၟိက်") end end if subtypes.imponly then -- cedo, apage insert(title, "ပါဲနူ-[[imperative mood#အၚ်္ဂလိက်|ဟွံက္ဍိုပ်ပေၚ်]]") end if subtypes.nopass then -- coacēscō insert(title, "[[passive voice#အၚ်္ဂလိက်|ဟွံတဝ်စၞေဟ်]]ဟွံသေၚ်") end local stems = {} if subtypes.nopres then -- coepī; perfaspres already handles this above insert(stems, "[[present tense#အၚ်္ဂလိက်|ပစ္စုပ္ပန်]]") end if subtypes.noperf then insert(stems, "[[perfect tense#အၚ်္ဂလိက်|ဟွံက္ဍိုက်ပေၚ်]]") end if subtypes.nosup or subtypes.supfutractvonly then insert(stems, "[[supine#အၚ်္ဂလိက်|ဂၠဝ်]]") end if #stems > 0 then local extra = subtypes.supfutractvonly and "ပါဲကၠေံပ္ဍဲဆေၚ်စပ်ကဵု[[participle#အၚ်္ဂလိက်|မကၠောန်စွံလဝ်]][[active voice#အၚ်္ဂလိက်|မစိုပ်တရဴ]][[future tense#အၚ်္ဂလိက်|အနာဂတ်]]" insert(title, ("no %s stem%s%s"):format(serial_comma_join(stems, {conj = "or"}), #stems > 1 and "s" or "", extra or "")) end if subtypes.nofutr then -- soleō insert(title, "[[future tense#အၚ်္ဂလိက်|အနာဂတ်]]ဟွံသေၚ်") end if subtypes.pass3only then -- praefundō insert(title, "ပါဲနူ-[[third person#အၚ်္ဂလိက်|ပူဂဵုတတိယ]]ပ္ဍဲဆေၚ်စပ်ကဵု[[passive voice#အၚ်္ဂလိက်|ဟွံတဝ်စၞေဟ်]]") elseif subtypes.passimpers then -- abambulō local msg = "[[impersonal verb#အၚ်္ဂလိက်|ဟွဲမွဲကဵုပစ္စဲပူဂဵု]]ပ္ဍဲဆေၚ်စပ်ကဵု[[passive voice#အၚ်္ဂလိက်|ဟွံတဝ်စၞေဟ်]]" if subtypes.passimpersold then -- possum msg = msg .. " ပ္ဍဲ[[Old Latin|လပ်တေန်တြေံ]]" end insert(title, msg) end if subtypes.noimp then -- volō insert(title, "[[imperative mood#အၚ်္ဂလိက်|မက္ဍိုပ်ပေၚ်]]ဟွံသေၚ်") end if irreg_processing and umatch(first_lemma, "d[īū]cō$") then -- dīcō insert(title, "[[:en:Appendix:Latin irregular verbs|ခလံက်ခနက်]]ဂၠေံဂၠေံ[[imperative mood#အၚ်္ဂလိက်|မက္ဍိုပ်ပေၚ်]]") end if subtypes.nofutractvptc and not subtypes.nosup then -- fīō insert(title, "[[participle#အၚ်္ဂလိက်|မကၠောန်စွံလဝ်]][[active voice#အၚ်္ဂလိက်|စိုပ်တရဴ]][[future tense#အၚ်္ဂလိက်|အနာဂတ်]]ဟွံသေၚ်") end if not (subtypes.nopres or subtypes.perfaspres or subtypes.imponly) then if subtypes.noinf then -- inquam insert(title, "[[infinitive#အၚ်္ဂလိက်|မသ္ကာတ်မြဟ်]]ဟွံသေၚ်") end if subtypes.noger then -- libet insert(title, "[[gerund#အၚ်္ဂလိက်|နာမ်လက္ခဏာ]]ဟွံသေၚ်") end end if subtypes.shorta then -- dō insert(title, ("[[:en:Appendix:Latin irregular verbs|ခလံက်ခနက်]]ဂၠေံဂၠေံ %s ပ္ဍဲဗီုပြၚ်မဂၠိုၚ်လတုန်"):format(make_link(nil, "ă", "term"))) end if irreg_processing then if first_lemma:match("edō$") then -- edō insert(title, "ဗီုပြၚ်[[:en:Appendix:Latin irregular verbs|ခလံက်ခနက်]]မရုဲစှ်ေကေတ်") elseif first_lemma:match("fīō$") then -- fīō insert(title, "[[:en:Appendix:Latin irregular verbs|ခလံက်ခနက်]]မဂၠိၚ်" .. make_link(nil, "ī", "term")) end end end pos_functions["ကြိယာ"] = function(def, args, data, infl_classes, title) local m_la_verb = require("Module:la-verb") local def1, def2 if def then def1, def2 = def:match("^(.-):(.*)$") end local conjdata, typeinfo = m_la_verb.make_data(args, true, def1, def2) local lemma_forms = conjdata.overriding_lemma if not lemma_forms or #lemma_forms == 0 then lemma_forms = m_la_verb.get_lemma_forms(conjdata, true) end data.heads = lemma_forms -- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-verb}}, there aren't -- really any redundant heads. data.no_redundant_head_cat = true data.id = conjdata.id local perf_only = false local function insert_inflection(infl, label) infl.label = label insert(data.inflections, infl) end local inf = m_la_verb.get_valid_forms(conjdata.forms["pres_actv_inf"]) if #inf > 0 then insert_inflection(inf, "စၞးကြိယာပစ္စုပ္ပန်") else inf = m_la_verb.get_valid_forms(conjdata.forms["perf_actv_inf"]) if #inf > 0 then perf_only = true insert_inflection(inf, "စၞးကြိယာမဍိုက်ပေၚ်") end end if not perf_only then local perf = m_la_verb.get_valid_forms(conjdata.forms["1s_perf_actv_indc"]) if #perf == 0 then perf = m_la_verb.get_valid_forms(conjdata.forms["3s_perf_actv_indc"]) end if #perf > 0 then insert_inflection(perf, "မဍိုက်ပေၚ်စိုပ်တရဴ") end end local subtypes = typeinfo.subtypes if not (subtypes.depon or subtypes.semidepon) then local sup = m_la_verb.get_valid_forms(conjdata.forms["acc_sup"]) if #sup > 0 then insert_inflection(sup, "ဂၠဝ်") else local fap = m_la_verb.get_valid_forms(conjdata.forms["futr_actv_ptc"]) if #fap > 0 then insert_inflection(fap, "လုပ်ကၠောန်စွံလဝ်အနာဂတ်မစိုပ်တရဴ") end end end export.verb_title(title, typeinfo, lemma_forms) end pos_functions["ကြိယာအဆက်လက္ကရဴ"] = pos_functions["ကြိယာ"] local function attested_form(decldata, index) local form if (decldata.unattested[index]) then form = { { term = '*' .. decldata.forms[index][1], nolink = true } } else form = decldata.forms[index] end return form end local function degree_derivations(comp, sup, data) local inflections = data.inflections if not (comp or sup) then return elseif (not comp or comp == "-") and (not sup or sup == "-") then insert(inflections, {label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#comparative|ပတုပ်ရံၚ်]]ဟွံမာန်"}) insert_if_not(data.categories, "Latin uncomparable adverbs") return elseif comp == "-" then insert(inflections, {label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#comparative|ပတုပ်ရံၚ်]]ဟွံသေၚ်"}) elseif comp then insert(inflections, comp) end if sup == "-" then insert(inflections, {label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#superlative|သဒ္ဒာ]]ဟွံသေၚ်"}) elseif sup then insert(inflections, sup) end end local function adjectives(pos, def, args, data, infl_classes) local is_num = pos == "ဂၞန်သၚ်္ချာ" local decldata = require("Module:la-nominal").do_generate_adj_forms(args, pos, "headword", nil, def) local lemma = decldata.overriding_lemma -- TODO: modify the headword line if the slot isn't the expected one. if #lemma == 0 then for slot in require("Module:la-nominal").iter_potential_adj_lemma_slots() do local potential_lemma = decldata.forms["linked_" .. slot] if not form_is_empty(potential_lemma) then if decldata.unattested[slot] then potential_lemma = "*" .. potential_lemma end lemma = potential_lemma break end end end data.heads = lemma -- Since we always set data.heads to the lemma and specification of the lemma is mandatory in {{la-noun}}, there aren't -- really any redundant heads. data.no_redundant_head_cat = true data.id = decldata.id local categories = data.categories if is_num then process_num_type(decldata.num_type, categories) end if decldata.num == "pl" then insert_if_not(categories, decldata.pos .. "လပ်တေန်ပါဲနူကိုန်ဗဟုဝစ်ဂမၠိုၚ်") end if decldata.indecl then insert(data.inflections, {label = glossary_link("ပြံၚ်လှာဲဟွံမာန်")}) if decldata.pos == "လုပ်ကၠောန်စွံလဝ်" then local lemma1 = lemma[1] if lemma1:sub(-4) == "ndum" then insert_if_not(categories, "လုပ်ကၠောန်စွံလဝ်နကဵုဟွံတဝ်စၞေဟ်အနာဂတ်လပ်တေန်ဂမၠိုၚ်") elseif lemma1:match("um$") then insert_if_not(categories, "လုပ်ကၠောန်စွံလဝ်နကဵုမဍိုက်ပေၚ်လပ်တေန်ဂမၠိုၚ်") end end else local lemma_num = decldata.num == "pl" and "pl" or "sg" local masc = decldata.forms["nom_" .. lemma_num .. "_m"] local fem = attested_form(decldata, "nom_" .. lemma_num .. "_f") local neut = attested_form(decldata, "nom_" .. lemma_num .. "_n") local gen = attested_form(decldata, "gen_" .. lemma_num .. "_m") local acc = attested_form(decldata, "acc_" .. lemma_num .. "_m") if decldata.pos == "လုပ်ကၠောန်စွံလဝ်" then local masc1 = masc[1] if masc1:sub(-5) == "ūrus" then insert_if_not(categories, "လပ်တေန်လုပ်ကၠောန်စွံလဝ်နကဵုအနာဂတ်မစိုပ်တရဴဂမၠိုၚ်") elseif masc1:sub(-4) == "ndus" then -- FIXME, should rename to "Latin gerundives") insert_if_not(categories, "လုပ်ကၠောန်စွံလဝ်နကဵုမဍိုက်ပေၚ်တဴအနာဂတ်လပ်တေန်ဂမၠိုၚ်") else local masc1_final2 = masc1:sub(-2) if masc1_final2 == "us" then insert_if_not(categories, "လုပ်ကၠောန်စွံလဝ်နကဵုမဍိုက်ပေၚ်လပ်တေန်ဂမၠိုၚ်") elseif masc1_final2 == "ns" then insert_if_not(categories, "လုပ်ကၠောန်စွံလဝ်ပစ္စုပ္ပန်လပ်တေန်ဂမၠိုၚ်") else error("Unrecognized participle ending: " .. masc1) end end end -- We display the inflections in three different ways to mimic the -- old way of doing things: -- -- 1. If masc and fem are different, show masc, fem and neut. -- 2. Otherwise, if masc and neut are different, show masc and neut. -- 3. Otherwise, show masc nominative and masc genitive. if not form_is_empty(fem) and not deep_equals(masc, fem) then fem.label = "ဣတ္တိလိၚ်" insert(data.inflections, fem) if not form_is_empty(neut) then neut.label = "နပုလ္လိၚ်" insert(data.inflections, neut) end elseif not form_is_empty(neut) and not deep_equals(masc, neut) then neut.label = "နပုလ္လိၚ်" insert(data.inflections, neut) elseif not form_is_empty(gen) then gen.label = "ဗဳဂဇကူ" insert(data.inflections, gen) elseif not form_is_empty(acc) then acc.label = "ကမ္မကာရက" insert(data.inflections, acc) end insert(infl_classes, decldata.title) end local comp = normalize_derivation(decldata.comp, "ပတုပ်ရံၚ်") local sup = normalize_derivation(decldata.sup, "သဒ္ဒာ") degree_derivations(comp, sup, data) derivation(data, decldata, "adv", "ကြိယာဝိသေသန") for _, cat in ipairs(decldata.categories) do insert_if_not(categories, cat) end for _, cat in ipairs(decldata.cat) do insert_if_not(categories, cat .. "လပ်တေန်ဂမၠိုၚ်") end return decldata.pos end pos_functions["နာမဝိသေသန"] = function(def, args, data, infl_classes, title) return adjectives("နာမဝိသေသန", def, args, data, infl_classes, title) end pos_functions["လုပ်ကၠောန်စွံလဝ်"] = function(def, args, data, infl_classes, title) return adjectives("လုပ်ကၠောန်စွံလဝ်", def, args, data, infl_classes, title) end pos_functions["ဖျေံလဝ်သန္နိဋ္ဌာန်"] = function(def, args, data, infl_classes, title) return adjectives("ဖျေံလဝ်သန္နိဋ္ဌာန်", def, args, data, infl_classes, title) end pos_functions["သဗ္ဗနာမ်"] = function(def, args, data, infl_classes, title) return adjectives("သဗ္ဗနာမ်", def, args, data, infl_classes, title) end pos_functions["နာမဝိသေသနအဆက်လက္ကရဴ"] = function(def, args, data, infl_classes, title) return adjectives("အဆက်လက္ကရဴ", def, args, data, infl_classes, title) end pos_functions["ဂၞန်သၚ်္ချာနာမဝိသေသန"] = function(def, args, data, infl_classes, title) return adjectives("ဂၞန်သၚ်္ချာ", def, args, data, infl_classes, title) end pos_functions["ကြိယာဝိသေသန"] = function(def, args, data) local sublist = {sublist = "/"} args = require("Module:parameters").process(args, { [1] = {alias_of = "head", list = false}, [2] = {alias_of = "တုဲဒှ်"}, [3] = {alias_of = "ညိည"}, ["head"] = {list = true, required = true}, ["တုဲဒှ်"] = sublist, ["ညိည"] = sublist, ["adj"] = sublist, ["id"] = true, }) data.heads = args.head data.no_redundant_head_cat = true -- since head= is required data.id = args.id local comp, sup = args.comp, args.sup local irreg = false if comp then if comp[1] == "-" then comp = "-" elseif comp[1] == nil then comp = nil else comp.label = glossary_link("ပတုပ်ရံၚ်") comp = args.comp irreg = true end end if sup then if sup[1] == "-" then sup = "-" elseif sup[1] == nil then sup = nil else sup.label = glossary_link("သဒ္ဒာ") sup = args.sup irreg = true end end local categories = data.categories if irreg then insert_if_not(categories, "ကြိယာဝိသေသနလပ်တေန်မဗၠေတ်မံၚ်နကဵုအတိုၚ်ပကတိဂမၠိုၚ်") end if not (comp or sup) then local default_comp = {label = glossary_link("ပတုပ်ရံၚ်")} local default_sup = {label = glossary_link("သဒ္ဒာ")} for _, head in ipairs(args.head) do local stem = nil for _, suff in ipairs{"iter", "nter", "ter", "er", "iē", "ē", "rā", "im", "ō"} do stem = head:match("(.*)" .. pattern_escape(suff) .. "$") comp_suff, sup_suff = "ius", "issimē" if stem ~= nil then if suff == "nter" then stem = stem .. "nt" elseif suff == "rā" then comp_suff = "er" .. comp_suff sup_suff = "imē" end insert(default_comp, stem .. comp_suff) insert(default_sup, stem .. sup_suff) break end end if not stem then error("Unrecognized adverb type, recognized types are “-ē”, “-er”, “-ter”, “-iter”, “-im”, or “-ō”, “-ra” or specify irregular forms or “-” if incomparable.") end end comp = comp or default_comp sup = sup or default_sup end degree_derivations(comp, sup, data) derivation(data, args, "adj", "နာမဝိသေသန") end pos_functions["ကြိယာဝိသေသနအဆက်လက္ကရဴ"] = pos_functions["ကြိယာဝိသေသန"] local function get_forms(forms) if #forms == 0 then return nil end local i, attested = 1, false while true do local form = forms[i] if form == nil then return forms, attested elseif form == "-" then remove(forms, i) else if not (attested or get_plaintext(form):sub(1, 1) == "*") then attested = true end i = i + 1 end end end local function degree(pos, deg, pos_func, other_pos, other_pos_label, other_deg, other_deg_label, args, data, infl_classes) local list = {list = true} args = require("Module:parameters").process(args, { [1] = {alias_of = "head", list = false}, ["head"] = list, ["positive"] = list, [other_pos] = {sublist = "/"}, [other_deg] = list, ["id"] = true, }) data.no_redundant_head_cat = #args.head == 0 -- Set default manually so we can tell whether the user specified head=. if #args.head == 0 then args.head = {PAGENAME} end data.heads = args.head data.id = args.id insert(data.inflections, {label = deg}) if pos_func then pos_func(args, data, infl_classes) end local positive, positive_attested = get_forms(args.positive) if positive then if not positive_attested then insert(data.categories, pos .. "လပ်တေန်ပါဲနူ" .. deg .. "ဂမၠိုၚ်") end if #positive > 0 then args.positive.label = "မချိုတ်ပၠိုတ်" insert(data.inflections, args.positive) else insert(data.inflections, {label = "ဗီုပြၚ်မချိုတ်ပၠိုတ်ဟွံသေၚ်"}) end end local other = get_forms(args[other_deg]) if other then if #other > 0 then args[other_deg].label = other_deg_label insert(data.inflections, args[other_deg]) else insert(data.inflections, {label = "ဗီုပြၚ်" .. other_deg_label .. "ဟွံသေၚ်"}) end end derivation(data, args, other_pos, other_pos_label) -- If a lemma, return the primary part of speech ("adjectives" or -- "adverbs"), so that the term is categorized in "Latin adjectives" or -- "Latin adverbs". Otherwise, return nothing, so that the term goes in the -- relevant non-lemma category (e.g. "Latin comparative adjectives"), and -- into "Latin non-lemma forms". if positive and not positive_attested then return pos end end local function comp_adj(args, data, infl_classes) insert(infl_classes, "[[Appendix:လပ်တေန်မလဟုတ်စှ်ေအလန်တတိယ|မလဟုတ်စှ်ေအလန်တတိယ]]") local n = {label = "neuter"} for _, head in ipairs(args.head) do local neuter = head:gsub("or$", "us") insert(n, neuter) end insert(data.inflections, n) end pos_functions["နာမဝိသေသနပတုပ်ရံၚ်"] = function(def, args, data, infl_classes, title) return degree("နာမဝိသေသန", "ပတုပ်ရံၚ်", comp_adj, "adv", "ကြိယာဝိသေသန", "ညိည", "သဒ္ဒာ", args, data, infl_classes) end pos_functions["ကြိယာဝိသေသနပတုပ်ရံၚ်"] = function(def, args, data, infl_classes, title) return degree("ကြိယာဝိသေသန", "ပတုပ်ရံၚ်", nil, "adj", "နာမဝိသေသန", "ညိည", "သဒ္ဒာ", args, data, infl_classes) end local function sup_adj(args, data, infl_classes) insert(infl_classes, "[[Appendix:လပ်တေန်မလဟုတ်စှ်ေအလန်ပဌမ|ပဌမ]]") insert(infl_classes, "[[Appendix:လပ်တေန်မလဟုတ်စှ်ေအလန်ဒုတိယ|မလဟုတ်စှ်ေအလန်ဒုတိယ]]") local f, n = {label = "ဣတ္တိလိၚ်"}, {label = "နပုလ္လိၚ်"} for _, head in ipairs(args.head) do local stem = head:gsub("us$", "") insert(f, stem .. "a") insert(n, stem .. "um") end insert(data.inflections, f) insert(data.inflections, n) end pos_functions["သဒ္ဒာနာမဝိသေသန"] = function(def, args, data, infl_classes, title) return degree("နာမဝိသေသန", "သဒ္ဒာ", sup_adj, "adv", "ကြိယာဝိသေသန", "တုဲဒှ်", "ပတုပ်ရံၚ်", args, data, infl_classes) end pos_functions["သဒ္ဒာကြိယာဝိသေသန"] = function(def, args, data, infl_classes, title) return degree("ကြိယာဝိသေသန", "သဒ္ဒာ", nil, "adj", "နာမဝိသေသန", "တုဲဒှ်", "ပတုပ်ရံၚ်", args, data, infl_classes) end local function adpositions(pos, def, args, data, infl_classes, title, postscript) local cases = invert(require("Module:la-utilities").cases) args = require("Module:parameters").process(args, { [1] = {alias_of = "head", list = false}, [2] = {list = true, set = keys_to_list(cases)}, ["head"] = {list = true, required = true}, ["id"] = true, }) -- Case names are supplied in numbered arguments, optionally preceded by -- headwords. cases = args[2] for i = 1, #cases do for j = i + 1, #cases do if cases[i] == cases[j] then error("Duplicate case") end end local case = cases[i] local appendix_link = glossary_link(case) if i == 1 then appendix_link = "+ " .. appendix_link end insert(postscript, appendix_link) insert_if_not(data.categories, pos .. case .. "လပ်တေန်ဂမၠိုၚ်") end data.heads = args.head data.no_redundant_head_cat = true -- since head= is required data.id = args.id end pos_functions["ဝိဘတ်"] = function(...) return adpositions("ဝိဘတ်", ...) end pos_functions["ကဆံၚ်အကာဲအရာ"] = function(...) return adpositions("ကဆံၚ်အကာဲအရာ", ...) end pos_functions["gerunds"] = function(def, args, data) args = require("Module:parameters").process(args, { [1] = {required = true, default = "labōrandum"}, -- headword [2] = true, -- gerundive }) data.heads = {args[1]} data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads insert(data.inflections, {label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#accusative|ဝေါဟာဂကန်ဖျန်]]"}) local stem = args[1]:match("^(.*)um$") if not stem then error("Unrecognized gerund ending: " .. stem) end if args[2] == "-" then insert(data.inflections, {label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#gerundive|ဟိုၚ်ပိုၚ်ကၠုၚ်နူဂဝ်]]ဟွံမွဲ"}) else insert(data.inflections, {[1] = args[2] or stem .. "ရပ်စပ်", label = "[[အဆက်လက္ကရဴ:မသောၚ်ကၠးဝေါဟာ#gerundive|ဟိုၚ်ပိုၚ်ကၠုၚ်နူဂဝ်]]"}) end end local function non_lemma_forms(def, args, data) args = require("Module:parameters").process(args, { [1] = {required = true, default = def}, -- headword or cases ["head"] = {list = true, require_index = true}, ["g"] = {list = true}, ["id"] = true, }) local heads = {args[1]} for _, head in ipairs(args.head) do insert(heads, head) end data.heads = heads data.no_redundant_head_cat = true -- since 1= is required and goes into data.heads data.genders = args.g data.id = args.id end pos_functions["ဗီုပြၚ်နာမ်"] = non_lemma_forms pos_functions["ဗီုပြၚ်နာမ်မကိတ်ညဳ"] = non_lemma_forms pos_functions["ဗီုပြၚ်သဗ္ဗနာမ်"] = non_lemma_forms pos_functions["ဗီုပြၚ်ကြိယာ"] = non_lemma_forms pos_functions["gerund forms"] = non_lemma_forms pos_functions["ဗီုပြၚ်နာမဝိသေသန"] = non_lemma_forms pos_functions["ဗီုပြၚ်လုပ်ကၠောန်စွံလဝ်"] = non_lemma_forms pos_functions["ဗီုပြၚ်ဖျေံလဝ်သန္နိဋ္ဌာန်"] = non_lemma_forms pos_functions["ဗီုပြၚ်ဂၞန်သၚ်္ချာ"] = non_lemma_forms pos_functions["ဗီုပြၚ်အဆက်လက္ကရဴ"] = non_lemma_forms return export g1n5bnzmdcla06mij0e3gqgfyo1h1fc မဝ်ဂျူ:la-verb 828 27563 397222 146880 2026-06-19T15:57:39Z 咽頭べさ 33 397222 Scribunto text/plain -- TODO: -- 1. (DONE) detect_decl_and_subtypes doesn't do anything with perf_stem or supine_stem. -- 2. (DONE) Should error on bad subtypes. -- 3. Make sure Google Books link still works. -- 4. (DONE) Add 4++ that has alternative perfects -īvī/-iī. -- 5. (DONE) If sup but no perf, allow passive perfect forms. -- 6. (DONE) Remove no-actv-perf. -- 7. (DONE) Support plural prefix/suffix and plural passive prefix/suffix -- 8. Delegate title line generation to [[Module:la-headword]]. -- 9. Automatic forms of slots which depend on the values of other slots should take into account overrides on the other slot: -- futr_actv_ptc: determines futr_actv_inf and perp_actv_inf -- perf_pasv_ptc: determines perf_pasv_indc, plup_pasv_indc, futp_pasv_indc, perf_pasv_inf and futp_pasv_inf (with changes if deponent/semideponent etc) -- acc_sup: determines futr_pasv_inf (and futr_actv_inf if there's no futr_pasv_ptc) -- 10. Handle "revertor"-type: deponent in the present, but not in the perfect. -- If enabled, compare this module with new version of module to make -- sure all conjugations are the same. local export = {} local test_new_la_verb_module = false local m_la_headword = require("Module:la-headword") local m_la_nominal = require("Module:la-nominal") local m_la_utilities = require("Module:la-utilities") local m_links = require("Module:links") local m_table = require("Module:table") local m_utilities = require("Module:utilities") local lang = require("Module:languages").getByCode("la") local sc = require("Module:scripts").getByCode("Latn") local allowed_subtypes = mw.loadData("Module:la-verb/data").allowed_subtypes local PAGENAME = mw.loadData("Module:headword/data").pagename local NAMESPACE = mw.title.getCurrentTitle().nsText if NAMESPACE == "Reconstruction" then PAGENAME = "*" .. PAGENAME end -- Conjugations are the functions that do the actual -- conjugating by creating the forms of a basic verb. -- They are defined further down. local make_conjugation = {} local add_form = m_la_utilities.add_form local concat = table.concat local do_generate_noun_forms = m_la_nominal.do_generate_noun_forms local do_generate_adj_forms = m_la_nominal.do_generate_adj_forms local dump = mw.dumpObject local flatten = m_table.flatten local form_contains = m_la_utilities.form_contains local form_is_empty = m_la_utilities.form_is_empty local forms_equal = m_la_utilities.forms_equal local full_link = m_links.full_link local insert = table.insert local insert_if_not = m_table.insertIfNot local ipairs = ipairs local pairs = pairs local pattern_escape = require("Module:string utilities").pattern_escape local remove = table.remove local remove_forms = m_la_utilities.remove_forms local remove_links = m_links.remove_links local split = mw.text.split local table_len = m_table.length local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local tostring = tostring local type = type local u = mw.ustring.char local ugsub = mw.ustring.gsub local umatch = mw.ustring.match local unpack = unpack or table.unpack -- Lua 5.2 compatibility local usub = mw.ustring.sub local MACRON = u(0x304) local BREVE = u(0x306) local TREMA = u(0x308) local LENGTH = MACRON .. "?" .. BREVE .. "?" .. TREMA .. "?" local vowel = "[aeiouyAEIOUY]" local generic_slots = {} local non_generic_slots = {} local potential_lemma_slots = { "1s_pres_actv_indc", -- regular "3s_pres_actv_indc", -- impersonal "1s_perf_actv_indc", -- "coepī" "3s_perf_actv_indc", -- doesn't occur? "2s_pres_actv_impr", -- "cedo" } local persons = {"1s", "2s", "3s", "1p", "2p", "3p"} local persons_2 = {"2s", "2p"} local persons_23 = {"2s", "3s", "2p", "3p"} local function handle_person(t, v, mood) local non_pers_slot = t .. "_" .. v .. "_" .. mood insert(generic_slots, non_pers_slot) for _, p in ipairs(persons) do insert(non_generic_slots, p .. "_" .. non_pers_slot) end end local voices = {"actv", "pasv"} local indc_tenses = {"pres", "impf", "futr", "perf", "plup", "futp", "sigf"} local subj_tenses = {"pres", "impf", "perf", "plup", "siga"} local impr_tenses = {"pres", "futr"} local nonfin_tenses = {"pres", "futr", "perf", "futp", "perp"} for _, v in ipairs(voices) do for _, t in ipairs(indc_tenses) do handle_person(t, v, "indc") end for _, t in ipairs(subj_tenses) do handle_person(t, v, "subj") end for _, t in ipairs(impr_tenses) do handle_person(t, v, "impr") end for _, f in ipairs{"inf", "ptc"} do for _, t in ipairs(nonfin_tenses) do insert(non_generic_slots, t .. "_" .. v .. "_" .. f) end end end insert(non_generic_slots, "sigm_actv_inf") local ger_cases = {"gen", "dat", "acc", "abl"} for _, c in ipairs(ger_cases) do insert(non_generic_slots, c .. "_ger") end local sup_cases = {"acc", "abl"} for _, c in ipairs(sup_cases) do insert(non_generic_slots, c .. "_sup") end local function track(page) require("Module:debug").track("la-verb/" .. page) end -- Constant version of :find() local function cfind(str, text) return str:find(text, nil, true) end -- Used for testing differences between production and sandbox module; see `test_new_la_verb_module` arm in show(). -- Do not delete! local function concat_vals(val) if type(val) == "table" then return table.concat(val, ",") else return val end end local function make_link(page, display, face, accel) return full_link({term = page, alt = display, lang = lang, sc = sc, accel = accel}, face) end -- Iterate over all the "slots" associated with a verb declension, where a slot -- is e.g. 1s_pres_actv_indc (a non-generic slot), pres_actv_indc (a generic slot), -- or linked_1s_pres_actv_indc (a linked slot). Only include the generic and/or linked -- slots if called for. local function iter_slots(include_generic, include_linked) -- stage == 1: non-generic slots -- stage == 2: generic slots -- stage == 3: linked slots local stage = 1 local slotnum = 0 local max_slotnum = table_len(non_generic_slots) return function() slotnum = slotnum + 1 if slotnum > max_slotnum then slotnum = 1 stage = stage + 1 if stage == 2 then if include_generic then max_slotnum = table_len(generic_slots) else stage = stage + 1 end end if stage == 3 then if include_linked then max_slotnum = table_len(potential_lemma_slots) else stage = stage + 1 end end if stage > 3 then return nil end end if stage == 1 then return non_generic_slots[slotnum] elseif stage == 2 then return generic_slots[slotnum] end return "linked_" .. potential_lemma_slots[slotnum] end end local function ine(val) if val == "" then return nil end return val end -- Construct a simple one- or two-part link, which will be put through full_link later. local function make_raw_link(page, display) if page and display then return "[[" .. page .. "|" .. display .. "]]" elseif page then return "[[" .. page .. "]]" end return display end local function split_prefix_and_base(lemma, main_verbs) lemma = toNFD(lemma) for _, main in ipairs(main_verbs) do local orig_main = main main = toNFD(main) local main_pattern = pattern_escape(main) local prefix = umatch(lemma, "^(.*)" .. main_pattern .. "$") -- If `main` starts with a vowel and there's no macron or trema, try it with a trema iff it's preceded by a vowel. if ( not prefix and main:match("^" .. vowel) and not umatch(main, "^.[" .. MACRON .. TREMA .. "]") ) then main_pattern = pattern_escape((main:gsub("^.", "%0" .. TREMA))) prefix = umatch(lemma, "^(.*" .. vowel .. LENGTH .. ")" .. main_pattern .. "$") end if prefix then return toNFC(prefix), orig_main end end require("Module:collation").sort(main_verbs, lang) error(("Conjugation %s may only be used with %s, or a derived verb that ends with one of them"):format( dump("irreg"), m_table.serialCommaJoin(main_verbs, {conj = "or", dontTag = true, dump = true}) )) end -- Given an ending (or possibly a full regex matching the entire lemma, if -- a regex group is present), return the base minus the ending, or nil if -- the ending doesn't match. local function extract_base(lemma, ending) if cfind(ending, "(") then return umatch(lemma, ending) end return umatch(lemma, "^(.*)" .. ending .. "$") end local function check_spec(lemma, spec, specified_subtypes) local ending, subtypes, incompatible = unpack(spec) if incompatible then for _, subtype in ipairs(incompatible) do if specified_subtypes[subtype] then return end end end for _, subtype in ipairs(subtypes) do -- A cancelled subtype will have the value false. if specified_subtypes[subtype] == false then return end end local base = extract_base(lemma, ending) if base then return base, subtypes end end -- Given ENDINGS_AND_SUBTYPES (a list of pairs of endings with associated -- subtypes, where each pair consists of a single ending spec and a list of -- subtypes), check each ending in turn against LEMMA. If it matches, return -- the pair BASE, SUBTYPES where BASE is the remainder of LEMMA minus the -- ending, and SUBTYPES is the subtypes associated with the ending. If no -- endings match, throw an error if DECLTYPE is non-nil, mentioning the -- DECLTYPE (the user-specified declension); but if DECLTYPE is nil, just -- return the pair nil, nil. -- -- The ending spec in ENDINGS_AND_SUBTYPES is one of the following: -- -- 1. A simple string, e.g. "ātur", specifying an ending. -- 2. A regex that should match the entire lemma (it should be anchored at -- the beginning with ^ and at the end with $), and contains a single -- capturing group to match the base. local function get_subtype_by_ending(lemma, conj, specified_subtypes, specs) for _, spec in ipairs(specs) do local base, subtypes = check_spec(lemma, spec, specified_subtypes) if base then return base, subtypes end end if conj then error("Unrecognized ending for conjugation " .. conj .. " verb: " .. lemma) end return nil, nil end local genders = {"m", "f", "n", "mp", "fp", "np"} local irreg_verbs = { "aiō", "aiiō", "aijō", "ajō", "cedo", -- final "o" not "ō" "dīcō", "dūcō", "edō", -- FIXME: Will praedō cause problems? "ëdō", "dō", -- list after edō "eō", "ëō", "faciō", "ferō", "fīō", "inquam", "mālō", "nōlō", "possum", "sum", "volō", } local irreg_verbs_conj = { ["aiō"] = "3rd-io", ["aiiō"] = "3rd-io", ["aijō"] = "3rd-io", ["ajō"] = "3rd-io", ["cedo"] = "irreg", ["dīcō"] = "3rd", ["dō"] = "1st", ["dūcō"] = "3rd", ["edō"] = "3rd", ["ëdō"] = "3rd", ["eō"] = "irreg", ["ëō"] = "irreg", ["faciō"] = "3rd-io", ["ferō"] = "3rd", ["fīō"] = "3rd", ["inquam"] = "irreg", ["mālō"] = "irreg", ["nōlō"] = "irreg", ["possum"] = "irreg", ["sum"] = "irreg", ["volō"] = "irreg", } local function detect_decl_and_subtypes(args) local subtypes, specs = {}, split(args[1] or "", "%.") local conj_arg = remove(specs, 1) for _, spec in ipairs(specs) do subtypes[spec:gsub("%-", "")] = spec:sub(1, 1) ~= "-" end local orig_lemma = toNFC(args[2] or PAGENAME) local lemma = remove_links(orig_lemma) local base, conj, irreg, detected_subtypes local base_conj_arg, auto_perf_supine = conj_arg:match("^([1-4/]+)(%+%+?)$") if base_conj_arg then if ( (auto_perf_supine == "++" and not (base_conj_arg == "4")) or (auto_perf_supine == "+" and not (base_conj_arg == "1" or base_conj_arg == "2" or base_conj_arg == "4")) ) then error("Conjugation type " .. base_conj_arg .. auto_perf_supine .. " not allowed") end conj_arg = base_conj_arg end if orig_lemma:sub(1, 1) == "-" then subtypes.suffix = true end local auto_perf, auto_supine, auto_sigm if subtypes.sigmpasv then subtypes.sigm = true end if subtypes.sigm then auto_sigm = true end if conj_arg == "1" then conj = "1st" base, detected_subtypes = get_subtype_by_ending(lemma, "1", subtypes, { {"ō", {}}, {"or", {"depon"}}, {"at", {"impers"}}, {"ātur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"ā", {"imponly"}}, {"āre", {"depon", "imponly"}}, }) if auto_perf_supine then if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base else auto_perf = base .. "āv" auto_supine = base .. "āt" end end if auto_sigm then auto_sigm = base .. "āss" end if subtypes.suffix then subtypes.p3inf = true end elseif conj_arg == "2" then conj = "2nd" base, detected_subtypes = get_subtype_by_ending(lemma, "2", subtypes, { {"eō", {}}, {"eor", {"depon"}}, {"et", {"impers"}}, {"ētur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"ē", {"imponly"}}, {"ēre", {"depon", "imponly"}}, }) if auto_perf_supine then if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base else auto_perf = base .. "u" auto_supine = base .. "it" end end if auto_sigm then auto_sigm = base .. "ēss" end elseif conj_arg == "3" or conj_arg == "3/4" then base, detected_subtypes = get_subtype_by_ending(lemma, conj_arg == "3/4" and "3/4" or nil, subtypes, { {"iō", {"i"}}, {"ior", {"depon", "i"}}, }) if base then conj = conj_arg == "3/4" and "3rd/4th" or "3rd-io" else base, detected_subtypes = get_subtype_by_ending(lemma, "3", subtypes, { {"ō", {}}, {"or", {"depon"}}, {"it", {"impers"}, {"nopres"}}, {"itur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"e", {"imponly"}, {"depon"}}, {"ere", {"depon", "imponly"}}, }) if subtypes.i then conj = "3rd-io" else conj = "3rd" end end if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base end if subtypes.suffix then auto_perf = "-" auto_supine = "-" auto_sigm = "-" end elseif conj_arg == "4" then conj = "4th" base, detected_subtypes = get_subtype_by_ending(lemma, "4", subtypes, { {"iō", {}}, {"ior", {"depon"}}, {"it", {"impers"}, {"nopres"}}, {"ītur", {"depon", "impers"}}, {"ī", {"nopres"}, {"imponly"}}, {"it", {"nopres", "impers"}}, {"ī", {"imponly"}}, {"īre", {"depon", "imponly"}}, }) if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base elseif auto_perf_supine == "++" then auto_perf = base .. "īv/" .. base .. "i" auto_supine = base .. "īt" elseif auto_perf_supine == "+" then auto_perf = base .. "īv" auto_supine = base .. "īt" end if auto_sigm then auto_sigm = base .. "īss" end elseif conj_arg == "irreg" then irreg = true local prefix prefix, base = split_prefix_and_base(lemma, irreg_verbs) conj = irreg_verbs_conj[base] args[1] = base args[2] = prefix -- args[3] and args[4] are used by ferō and sum and stay where they are detected_subtypes = {} else error("Unrecognized conjugation: " .. dump(conj_arg)) end for _, detected_subtype in ipairs(detected_subtypes) do if detected_subtype == "impers" and subtypes["3only"] then -- 3only overrides impers elseif detected_subtype == "nopres" and subtypes.perfaspres then -- perfaspres overrides nopres else subtypes[detected_subtype] = true end end -- Get the gender of the verb's complement. local gender for _, g in ipairs(genders) do if subtypes[g] then if gender then error(("Only one of the subtypes %s may be specified"):format( m_table.serialCommaJoin(genders, {conj = "or", dontTag = true, dump = true}) )) end gender = g end end if not gender then gender = (subtypes.impers or subtypes.passimpers or subtypes["3only"] or subtypes["pass3only"]) and "n" or "m" end if subtypes.nopres or subtypes.perfaspres then subtypes.noger = true end if not irreg then args[1] = base local perf_stem, supine_stem if subtypes.depon or subtypes.semidepon or subtypes.nopres or subtypes.perfaspres then supine_stem = args[3] or auto_supine if supine_stem == "-" and not subtypes.suffix then supine_stem = nil end if not supine_stem then if subtypes.depon or subtypes.semidepon then subtypes.noperf = true end subtypes.nosup = true end if subtypes.sigm then local sigm_stem = args[5] or auto_sigm if sigm_stem == "-" and not subtypes.suffix then sigm_stem = nil end args[5] = sigm_stem end args[2] = supine_stem args[3] = nil else perf_stem = args[3] or auto_perf if perf_stem == "-" and not subtypes.suffix then perf_stem = nil end if not perf_stem then subtypes.noperf = true end supine_stem = args[4] or auto_supine if supine_stem == "-" and not subtypes.suffix then supine_stem = nil end if not supine_stem then subtypes.nosup = true end if subtypes.sigm then local sigm_stem = args[5] or auto_sigm if sigm_stem == "-" and not subtypes.suffix then sigm_stem = nil end args[5] = sigm_stem end args[2] = perf_stem args[3] = supine_stem end args[4] = nil end if auto_sigm and subtypes.depon then subtypes.sigmpasv = true end for subtype in pairs(subtypes) do if ( subtype == "i" and not (conj_arg == "3" or conj_arg == "3/4") or not allowed_subtypes[subtype] ) then error(("Unrecognized verb subtype %s for this conjugation"):format(dump(subtype))) end end return conj, irreg, subtypes, orig_lemma, lemma, gender end local function _add_forms(forms, keytype, persons, stem, ...) for i, p in ipairs(persons) do local suf = select(i, ...) if suf ~= nil then add_form(forms, p .. "_" .. keytype, stem, suf) end end end -- Add a value to all persons/numbers of a given tense/voice/mood, e.g. -- "pres_actv_indc" (specified by KEYTYPE). If a value is already present -- in a key, it won't be added again. -- -- The value for a given person/number combination is formed by concatenating -- STEM and the appropriate suffix for that person/number, e.g. SUF1S. The -- suffix can be a list, in which case STEM will be concatenated in turn to -- each value in the list and all the resulting forms added to the key. To -- not add a value for a specific person/number, specify nil or {} for the -- suffix for the person/number. local function add_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons, stem, ...) end -- Add a value to the 2nd person (singular and plural) of a given -- tense/voice/mood. This works like add_forms(). local function add_2_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons_2, stem, ...) end -- Add a value to the 2nd and 3rd persons (singular and plural) of a given -- tense/voice/mood. This works like add_forms(). local function add_23_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons_23, stem, ...) end local function override(args, data) local forms = data.forms for slot in iter_slots(true, false) do if args[slot] then forms[slot] = split(args[slot], "/") end end end local function set_linked_forms(data, typeinfo) -- Generate linked variants of slots that may be the lemma. -- If the form is the same as the lemma (with links removed), -- substitute the original lemma (with links included). local forms = data.forms for _, slot in ipairs(potential_lemma_slots) do local formval = forms[slot] local linked_forms = {} if formval then if type(formval) ~= "table" then formval = {formval} end for _, form in ipairs(formval) do if form == typeinfo.lemma then insert(linked_forms, typeinfo.orig_lemma) else insert(linked_forms, form) end end end forms["linked_" .. slot] = linked_forms end end local function link_words_if_unlinked(affix) return affix:match("%[%[.-]]") and affix or ugsub(affix, "%w+", "[[%0]]") end local function get_affix(data, key) local affix = data[key] or "" return link_words_if_unlinked(affix), remove_links(affix) end -- Add prefixes and suffixes to non-generic slots. The generic slots (e.g. -- perf_pasv_indc, whose text indicates to use the past passive participle + -- the present active indicative of [[sum]]), handle prefixes and suffixes -- themselves in make_perfect_passive(). local function add_prefix_suffix(data) if not data.prefix and not data.suffix then return end local active_prefix, active_prefix_no_links = get_affix(data, "prefix") local passive_prefix, passive_prefix_no_links = get_affix(data, "passive_prefix") local plural_prefix, plural_prefix_no_links = get_affix(data, "plural_prefix") local plural_passive_prefix, plural_passive_prefix_no_links = get_affix(data, "plural_passive_prefix") local active_suffix, active_suffix_no_links = get_affix(data, "suffix") local passive_suffix, passive_suffix_no_links = get_affix(data, "passive_suffix") local plural_suffix, plural_suffix_no_links = get_affix(data, "plural_suffix") local plural_passive_suffix, plural_passive_suffix_no_links = get_affix(data, "plural_passive_suffix") local forms = data.forms for slot in iter_slots(false, true) do local prefix, suffix, prefix_no_links, suffix_no_links if cfind(slot, "pasv") and slot:match("[123]p") then prefix = plural_passive_prefix suffix = plural_passive_suffix prefix_no_links = plural_passive_prefix_no_links suffix_no_links = plural_passive_suffix_no_links elseif cfind(slot, "pasv") and not cfind(slot, "_inf") then prefix = passive_prefix suffix = passive_suffix prefix_no_links = passive_prefix_no_links suffix_no_links = passive_suffix_no_links elseif slot:match("[123]p") then prefix = plural_prefix suffix = plural_suffix prefix_no_links = plural_prefix_no_links suffix_no_links = plural_suffix_no_links else prefix = active_prefix suffix = active_suffix prefix_no_links = active_prefix_no_links suffix_no_links = active_suffix_no_links end local formval = forms[slot] if not form_is_empty(formval) then local affixed_forms = {} if type(formval) ~= "table" then formval = {formval} end for _, form in ipairs(formval) do if form_is_empty(form) then insert(affixed_forms, form) elseif slot:match("^linked") then -- If we're dealing with a linked slot, include the original -- links in the prefix/suffix and also add a link around the -- form itself if links aren't already present. (Note, above -- we early-exited if there was no prefix and no suffix.) if not form:match("%[%[.-]]") then form = "[[" .. form .. "]]" end insert(affixed_forms, prefix .. form .. suffix) elseif form:match("%[%[.-]]") then -- If not dealing with a linked slot, but there are links -- in the slot, include the original, potentially linked -- versions of the prefix and suffix (e.g. in perfect -- passive forms). insert(affixed_forms, prefix .. form .. suffix) else -- Otherwise, use the non-linking versions of the prefix and -- suffix so that the whole term (including prefix/suffix) -- gets linked. insert(affixed_forms, prefix_no_links .. form .. suffix_no_links) end end forms[slot] = affixed_forms end end end local function notes_override(args, data) local notes = {args["note1"], args["note2"], args["note3"]} for n, note in pairs(notes) do if note == "-" then data.footnotes[n] = nil elseif note == "p3inf" then data.footnotes[n] = "The present passive infinitive in ''-ier'' is a rare poetic form which is attested." elseif note == "poetsyncperf" then data.footnotes[n] = "At least one rare poetic syncopated perfect form is attested." elseif note == "sigm" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\")." elseif note == "sigmpasv" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\"). It is also attested as having a rare sigmatic future passive indicative form (\"will have been\"), which is not attested in the plural for any verb." elseif note == "sigmdepon" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" tense is attested, which is used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, and, as the verb is deponent, takes the form of what would otherwise be the rare sigmatic future passive indicative tense (which is not attested in the plural for any verb)." elseif note then data.footnotes[n] = note end end if args["notes"] == "-" then data.footnotes = {} end end -- Space added by default; hyphens unchanged; underscore represents no space. local affix_joining_chars = { [""] = " ", ["-"] = "-", ["_"] = "", } local function normalize_prefix(prefix) return prefix and prefix:gsub("[%-_]?$", affix_joining_chars, 1) end local function normalize_suffix(suffix) return suffix and suffix:gsub("^[%-_]?", affix_joining_chars, 1) end local function handle_subtype_affix(args, affix, subtype_affix, normalize_func) if args[subtype_affix] then if not args[affix] then error(("Can't specify %s= without %s="):format(subtype_affix, affix)) end return normalize_func(args[subtype_affix]) end end local function handle_affix(args, data, affix, normalize_func) data[affix] = normalize_func(args[affix]) for _, subtype in ipairs{"passive", "plural"} do local subtype_affix = subtype .. "_" .. affix data[subtype_affix] = handle_subtype_affix(args, affix, subtype_affix, normalize_func) or data[affix] end -- First fall back to the passive (e.g. "poenās dare", where the plural noun -- is used with both singular and plural verbs, but there's a separate -- passive form ''poenae datur''), then to the plural prefix, then to the -- base prefix. local subtype_affix = "plural_passive_" .. affix data[subtype_affix] = handle_subtype_affix(args, affix, subtype_affix, normalize_func) or data["passive_" .. affix] or data["plural_" .. affix] or data[affix] end function export.make_data(parent_args, from_headword, def1, def2) local params = { [1] = {required = true, default = def1 or "1+"}, [2] = {required = true, default = def2 or "amō"}, [3] = true, [4] = true, [5] = true, prefix = true, passive_prefix = true, plural_prefix = true, plural_passive_prefix = true, suffix = true, passive_suffix = true, plural_suffix = true, plural_passive_suffix = true, label = true, note1= true, note2= true, note3= true, notes= true, -- examined directly in export.show() search = true, json = {type = "boolean"}, } for slot in iter_slots(true, false) do params[slot] = true end if from_headword then local list = {list = true} params.lemma = list params.id = true params.cat = list end local args = require("Module:parameters").process(parent_args, params) local conj, irreg, subtypes, orig_lemma, lemma, gender = detect_decl_and_subtypes(args) -- note: the addition of red superscripted footnotes ('<sup class="roa-red-superscript">' ... </sup>) is only implemented for the three form printing loops in which it is used local data = { forms = {}, title = {}, categories = args.cat and m_table.deepCopy(args.cat) or {}, form_footnote_indices = {}, footnotes = {}, id = args.id, overriding_lemma = args.lemma, gender = gender, } local typeinfo = { lemma = lemma, orig_lemma = orig_lemma, conj = conj, irreg = irreg, subtypes = subtypes, } handle_affix(args, data, "prefix", normalize_prefix) handle_affix(args, data, "suffix", normalize_suffix) -- Generate the verb forms make_conjugation(args, data, typeinfo) -- Generate the title text m_la_headword.verb_title(data.title, typeinfo, export.get_lemma_forms(data)) -- Override with user-set forms override(args, data) -- Set linked_* forms set_linked_forms(data, typeinfo) -- Prepend any prefixes, append any suffixes add_prefix_suffix(data) if args["label"] then insert_if_not(data.title, args["label"]) end notes_override(args, data) -- If json=1 specified, return a JSON string; used by bots if args.json then return require("Module:JSON").toJSON { data = data, typeinfo = typeinfo } end return data, typeinfo end local ptc_lemma_form = { ["m"] = "sg_m", ["f"] = "sg_f", ["n"] = "sg_n", ["mp"] = "pl_m", ["fp"] = "pl_f", ["np"] = "pl_n", } -- Make the gerund and gerundive/future passive participle. For the forms -- labeled "gerund", we generate both gerund and gerundive variants if there's -- a case-specific prefix or suffix for the case in question; otherwise we -- generate only the gerund per se. BASE is the stem (ending in -nd). -- UND_VARIANT, if true, means that a gerundive in -und should be generated -- along with a gerundive in -end. local function make_gerund(data, typeinfo, base, und_variant) local subtypes = typeinfo.subtypes if subtypes.noger then return end local forms, gender = data.forms, data.gender local slot = "nom_" .. ptc_lemma_form[gender] add_form(forms, "futr_pasv_ptc", "", do_generate_adj_forms({base .. "us<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms[slot]) if und_variant and not (subtypes.nound or base:match("[vV]end$") or umatch(base, "[uU]" .. LENGTH .. "end$")) then -- Per Lane's grammar section 899: "Verbs in -ere and -īre often have -- -undus, when not preceded by u or v, especially in formal style" -- There is also an optional exclusion if -undus is not attested add_form(forms, "futr_pasv_ptc", "", do_generate_adj_forms({base:gsub("end$", "und") .. "us<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms[slot]) end local ger_forms = do_generate_noun_forms({base .. "um<2>"}, "နာမ်", "bare").forms for _, case in ipairs(ger_cases) do for _, form in ipairs(ger_forms[case .. "_sg"]) do add_form(forms, case .. "_ger", "", form) end end end -- Conjugation functions local function get_regular_stems(args, typeinfo) local subtypes = typeinfo.subtypes -- Get the parameters if subtypes.nopres or subtypes.perfaspres then typeinfo.pres_stem = nil typeinfo.perf_stem = ine(args[1]) typeinfo.supine_stem = ine(args[2]) elseif subtypes.depon or subtypes.semidepon then -- Deponent and semi-deponent verbs don't have the perfective principal part. -- But optionally semi-deponent verbs do. typeinfo.pres_stem = ine(args[1]) typeinfo.perf_stem = nil typeinfo.supine_stem = ine(args[2]) else typeinfo.pres_stem = ine(args[1]) typeinfo.perf_stem = ine(args[2]) typeinfo.supine_stem = ine(args[3]) end if subtypes.sigm then typeinfo.sigm_stem = ine(args[5]) end -- Prepare stems if not (typeinfo.pres_stem or subtypes.nopres or subtypes.perfaspres) then -- Template: error("Present stem has not been provided") end if typeinfo.perf_stem then typeinfo.perf_stem = split(typeinfo.perf_stem, "/") else typeinfo.perf_stem = {} end if typeinfo.supine_stem then typeinfo.supine_stem = split(typeinfo.supine_stem, "/") else typeinfo.supine_stem = {} end if typeinfo.sigm_stem then typeinfo.sigm_stem = split(typeinfo.sigm_stem, "/") else typeinfo.sigm_stem = {} end end local function set_conj_categories(ord, data, typeinfo) local categories, subtypes = data.categories, typeinfo.subtypes -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs") if subtypes.depon then -- insert_if_not(categories, "Latin " .. ord .. " conjugation deponent verbs") end if subtypes.noperf then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing perfect stem") end if subtypes.nosup then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing supine stem") elseif subtypes.supfutractvonly then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing supine stem except in the future active participle") end local pres_stem = typeinfo.pres_stem if not pres_stem then return end pres_stem = pres_stem and pres_stem:gsub("[Qq]u", "\1") for _, perf_stem in ipairs(typeinfo.perf_stem) do perf_stem = perf_stem:gsub("[Qq]u", "\1") if perf_stem == pres_stem .. "āv" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -āv-") elseif perf_stem == pres_stem .. "ēv" then insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -ēv-") elseif perf_stem == pres_stem .. "īv" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -īv-") elseif perf_stem == pres_stem .. "i" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -i-") elseif perf_stem == pres_stem .. "u" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -u-") elseif perf_stem == pres_stem then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with suffixless perfect") elseif perf_stem:match("[sx]$") then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -s- or -x-") else -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with irregular perfect") end end end -- Form-generating functions local make_pres = {} make_pres["1st"] = function(data, typeinfo, pres_stem) local forms = data.forms local a = typeinfo.subtypes.shorta and "a" or "ā" -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "ō", "ās", "at", a .. "mus", a .. "tis", "ant") add_forms(forms, "impf_actv_indc", pres_stem, a .. "bam", a .. "bās", a .. "bat", a .. "bāmus", a .. "bātis", a .. "bant") add_forms(forms, "futr_actv_indc", pres_stem, a .. "bō", a .. "bis", a .. "bit", a .. "bimus", a .. "bitis", a .. "bunt") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "or", {a .. "ris", a .. "re"}, a .. "tur", a .. "mur", a .. "minī", "antur") add_forms(forms, "impf_pasv_indc", pres_stem, a .. "bar", {a .. "bāris", a .. "bāre"}, a .. "bātur", a .. "bāmur", a .. "bāminī", a .. "bantur") add_forms(forms, "futr_pasv_indc", pres_stem, a .. "bor", {a .. "beris", a .. "bere"}, a .. "bitur", a .. "bimur", a .. "biminī", a .. "buntur") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "em", "ēs", "et", "ēmus", "ētis", "ent") add_forms(forms, "impf_actv_subj", pres_stem, a .. "rem", a .. "rēs", a .. "ret", a .. "rēmus", a .. "rētis", a .. "rent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "er", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") add_forms(forms, "impf_pasv_subj", pres_stem, a .. "rer", {a .. "rēris", a .. "rēre"}, a .. "rētur", a .. "rēmur", a .. "rēminī", a .. "rentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ā", a .. "te") add_23_forms(forms, "futr_actv_impr", pres_stem, a .. "tō", a .. "tō", a .. "tōte", "antō") add_2_forms(forms, "pres_pasv_impr", pres_stem, a .. "re", a .. "minī") add_23_forms(forms, "futr_pasv_impr", pres_stem, a .. "tor", a .. "tor", nil, "antor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, a .. "re") add_form(forms, "pres_pasv_inf", pres_stem, a .. "rī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "āns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "and") end make_pres["2nd"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "eō", "ēs", "et", "ēmus", "ētis", "ent") add_forms(forms, "impf_actv_indc", pres_stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "futr_actv_indc", pres_stem, "ēbō", "ēbis", "ēbit", "ēbimus", "ēbitis", "ēbunt") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "eam", "eās", "eat", "eāmus", "eātis", "eant") add_forms(forms, "impf_actv_subj", pres_stem, "ērem", "ērēs", "ēret", "ērēmus", "ērētis", "ērent") -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ē", "ēte") add_23_forms(forms, "futr_actv_impr", pres_stem, "ētō", "ētō", "ētōte", "entō") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "eor", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") add_forms(forms, "impf_pasv_indc", pres_stem, "ēbar", {"ēbāris", "ēbāre"}, "ēbātur", "ēbāmur", "ēbāminī", "ēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "ēbor", {"ēberis", "ēbere"}, "ēbitur", "ēbimur", "ēbiminī", "ēbuntur") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "ear", {"eāris", "eāre"}, "eātur", "eāmur", "eāminī", "eantur") add_forms(forms, "impf_pasv_subj", pres_stem, "ērer", {"ērēris", "ērēre"}, "ērētur", "ērēmur", "ērēminī", "ērentur") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, "ēre", "ēminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ētor", "ētor", nil, "entor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ēre") add_form(forms, "pres_pasv_inf", pres_stem, "ērī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "ēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "end") end local function handle_old_impf(data, forms, pres_stem, ei, noteindex) add_forms(forms, "impf_actv_indc", pres_stem .. ei, "bam", "bās", "bat", "bāmus", "bātis", "bant") add_forms(forms, "impf_pasv_indc", pres_stem .. ei, "bar", {"bāris", "bāre"}, "bātur", "bāmur", "bāminī", "bantur") for slot in pairs(data.forms) do if cfind(slot, "impf") then data.form_footnote_indices[slot] = noteindex end end data.footnotes[noteindex] = "ကၠာ-ဝၚ်ဂန္ထ" end local function handle_old_futr(data, forms, pres_stem, ei, noteindex) add_forms(forms, "futr_actv_indc", pres_stem .. ei, "bō", "bis", "bit", "bimus", "bitis", "bunt") add_forms(forms, "futr_pasv_indc", pres_stem .. ei, "bor", {"beris", "bere"}, "bitur", "bimur", "biminī", "buntur") for slot in pairs(data.forms) do if cfind(slot, "futr") then data.form_footnote_indices[slot] = noteindex end end data.footnotes[noteindex] = "Pre-Classical." end make_pres["3rd"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "ō", "is", "it", "imus", "itis", "unt") add_forms(forms, "impf_actv_indc", pres_stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "futr_actv_indc", pres_stem, "am", "ēs", "et", "ēmus", "ētis", "ent") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "or", {"eris", "ere"}, "itur", "imur", "iminī", "untur") add_forms(forms, "impf_pasv_indc", pres_stem, "ēbar", {"ēbāris", "ēbāre"}, "ēbātur", "ēbāmur", "ēbāminī", "ēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "ar", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") if typeinfo.subtypes.oldimpffutr then handle_old_futr(data, forms, pres_stem, "ē", table_len(data.footnotes) + 1) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "impf_actv_subj", pres_stem, "erem", "erēs", "eret", "erēmus", "erētis", "erent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "ar", {"āris", "āre"}, "ātur", "āmur", "āminī", "antur") add_forms(forms, "impf_pasv_subj", pres_stem, "erer", {"erēris", "erēre"}, "erētur", "erēmur", "erēminī", "erentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "e", "ite") add_23_forms(forms, "futr_actv_impr", pres_stem, "itō", "itō", "itōte", "untō") add_2_forms(forms, "pres_pasv_impr", pres_stem, "ere", "iminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "itor", "itor", nil, "untor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ere") add_form(forms, "pres_pasv_inf", pres_stem, "ī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "ēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "end", "und-variant") end make_pres["3rd-io"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "is", "it", "imus", "itis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"eris", "ere"}, "itur", "imur", "iminī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, "erem", "erēs", "eret", "erēmus", "erētis", "erent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, "erer", {"erēris", "erēre"}, "erētur", "erēmur", "erēminī", "erentur") -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "e", "ite") add_23_forms(forms, "futr_actv_impr", pres_stem, "itō", "itō", "itōte", "iuntō") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, "ere", "iminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "itor", "itor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ere") add_form(forms, "pres_pasv_inf", pres_stem, "ī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end make_pres["3rd/4th"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "ī̆s", "it", "ī̆mus", "ī̆tis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"eris", "īris", "ere", "īre"}, "ī̆tur", "ī̆mur", "ī̆minī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, {"erem", "īrem"}, {"erēs", "īrēs"}, {"eret", "īret"}, {"erēmus", "īrēmus"}, {"erētis", "īrētis"}, {"erent", "īrent"}) -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, {"erer", "īrer"}, {"erēris", "īrēris", "erēre", "īrēre"}, {"erētur", "īrētur"}, {"erēmur", "īrēmur"}, {"erēminī", "īrēminī"}, {"erentur", "īrentur"}) -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, {"e", "ī"}, "ī̆te") add_23_forms(forms, "futr_actv_impr", pres_stem, "ī̆tō", "ī̆tō", "ī̆tōte", "iuntō") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, {"ere", "īre"}, "ī̆minī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ī̆tor", "ī̆tor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, {"ere", "īre"}) add_form(forms, "pres_pasv_inf", pres_stem, {"ī", "īrī"}) -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end make_pres["4th"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "īs", "it", "īmus", "ītis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"īris", "īre"}, "ītur", "īmur", "īminī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, "īrem", "īrēs", "īret", "īrēmus", "īrētis", "īrent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, "īrer", {"īrēris", "īrēre"}, "īrētur", "īrēmur", "īrēminī", "īrentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ī", "īte") add_23_forms(forms, "futr_actv_impr", pres_stem, "ītō", "ītō", "ītōte", "iuntō") add_2_forms(forms, "pres_pasv_impr", pres_stem, "īre", "īminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ītor", "ītor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "īre") add_form(forms, "pres_pasv_inf", pres_stem, "īrī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end local make_pres_mt = {} function make_pres_mt:__call(data, typeinfo, pres_stem) if not pres_stem then return end return self[typeinfo.conj](data, typeinfo, pres_stem) end setmetatable(make_pres, make_pres_mt) local function make_perf(data, perf_stem, no_inf) if not perf_stem then return end local forms = data.forms if type(perf_stem) ~= "table" then perf_stem = {perf_stem} end for _, stem in ipairs(perf_stem) do -- Perfective indicative add_forms(forms, "perf_actv_indc", stem, "ī", "istī", "it", "imus", "istis", {"ērunt", "ēre"}) add_forms(forms, "plup_actv_indc", stem, "eram", "erās", "erat", "erāmus", "erātis", "erant") add_forms(forms, "futp_actv_indc", stem, "erō", "eris", "erit", "erimus", "eritis", "erint") -- Perfective subjunctive add_forms(forms, "perf_actv_subj", stem, "erim", "erīs", "erit", "erīmus", "erītis", "erint") add_forms(forms, "plup_actv_subj", stem, "issem", "issēs", "isset", "issēmus", "issētis", "issent") -- Perfect infinitive if not no_inf then add_form(forms, "perf_actv_inf", stem, "isse") end end end local function make_true_supine(data, typeinfo, supine_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.supfutractvonly or not supine_stem then return end local forms = data.forms if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end for _, stem in ipairs(supine_stem) do local supine_forms = do_generate_noun_forms({stem .. "us<4>"}, "နာမ်", "bare").forms add_form(forms, "acc_sup", "", supine_forms["acc_sg"]) add_form(forms, "abl_sup", "", supine_forms["abl_sg"]) add_form(forms, "futr_pasv_inf", forms["acc_sup"], " īrī") if subtypes.nofutractvptc then add_form(forms, "futr_actv_inf", forms["acc_sup"], " īre") end end end local function make_perf_pasv_ptc(data, typeinfo, supine_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.supfutractvonly or not supine_stem then return end local forms, gender = data.forms if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then gender = "m" -- perf_pasv_ptc becomes perf_actv_ptc, so the gender of the complement isn't relevant else gender = data.gender end if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end for _, stem in ipairs(supine_stem) do -- Perfect passive participle local perf_pasv_ptc_forms = do_generate_adj_forms({stem .. "us<1&2+>"}, "participles", "bare").forms local form = perf_pasv_ptc_forms["nom_" .. ptc_lemma_form[gender]] add_form(forms, "perf_pasv_ptc", "", form) add_forms(forms, "perf_pasv_indc", form, " sum", " es", " est", nil, nil, nil) add_forms(forms, "plup_pasv_indc", form, " eram", " erās", " erat", nil, nil, nil) add_forms(forms, "futp_pasv_indc", form, " erō", " eris", " erit", nil, nil, nil) add_forms(forms, "perf_pasv_subj", form, " sim", " sīs", " sit", nil, nil, nil) add_forms(forms, "plup_pasv_subj", form, " essem", " essēs", " esset", nil, nil, nil) form = perf_pasv_ptc_forms["nom_" .. ptc_lemma_form[gender]:gsub("sg", "pl")] add_forms(forms, "perf_pasv_indc", form, nil, nil, nil, " sumus", " estis", " sunt") add_forms(forms, "plup_pasv_indc", form, nil, nil, nil, " erāmus", " erātis", " erant") add_forms(forms, "futp_pasv_indc", form, nil, nil, nil, " erimus", " eritis", " erint") add_forms(forms, "perf_pasv_subj", form, nil, nil, nil, " sīmus", " sītis", " sint") add_forms(forms, "plup_pasv_subj", form, nil, nil, nil, " essēmus", " essētis", " essent") form = perf_pasv_ptc_forms["acc_" .. ptc_lemma_form[gender]] add_form(forms, "perf_pasv_inf", form, " esse") add_form(forms, "futp_pasv_inf", form, " fore") end end -- A final "u" on the supine stem is omitted (e.g. "mortu" to "moritūrus"). local function make_futr_actv_ptc_stem(supine_stem) local futr_actv_ptc_stem = {} for _, stem in ipairs(supine_stem) do insert(futr_actv_ptc_stem, (stem:gsub("u?$", ""))) end return futr_actv_ptc_stem end local function make_futr_actv_ptc(data, typeinfo, futr_actv_ptc_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.nofutr or subtypes.nofutractvptc or not futr_actv_ptc_stem then return end local forms = data.forms if type(futr_actv_ptc_stem) ~= "table" then futr_actv_ptc_stem = {futr_actv_ptc_stem} end for _, stem in ipairs(futr_actv_ptc_stem) do local futr_actv_ptc_forms = do_generate_adj_forms({stem .. "ūrus<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms add_form(forms, "futr_actv_ptc", "", futr_actv_ptc_forms["nom_sg_m"]) local form = futr_actv_ptc_forms["acc_sg_m"] add_form(forms, "futr_actv_inf", form, " esse") add_form(forms, "perp_actv_inf", form, " fuisse") end end local function make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) if typeinfo.subtypes.nosup or not supine_stem then return end make_true_supine(data, typeinfo, supine_stem) make_perf_pasv_ptc(data, typeinfo, supine_stem) if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end if futr_actv_ptc_stem == nil then futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) end make_futr_actv_ptc(data, typeinfo, futr_actv_ptc_stem) end local function make_sigm(data, typeinfo, sigm_stem) local subtypes = typeinfo.subtypes if not subtypes.sigm then return end local forms = data.forms if type(sigm_stem) ~= "table" then sigm_stem = {sigm_stem} end local noteindex = table_len(data.footnotes) + 1 -- Deponent verbs use the passive form for _, stem in ipairs(sigm_stem) do -- Sigmatic future active indicative add_forms(forms, "sigf_actv_indc", stem, "ō", "is", "it", "imus", "itis", "int") -- Sigmatic future passive indicative if subtypes.sigmpasv then add_forms(forms, "sigf_pasv_indc", stem, "or", "eris", "itur", nil, nil, nil) -- Plurals not attested. end -- Sigmatic future active subjunctive add_forms(forms, "siga_actv_subj", stem, "im", "īs", "īt", "īmus", "ītis", "int") -- Perfect infinitive if not no_inf then add_form(forms, "sigm_actv_inf", stem, "ere") end end data.form_footnote_indices["sigm"] = noteindex if subtypes.depon then data.footnotes[noteindex] = 'At least one use of the Old Latin \"sigmatic future\" tense is attested, which is used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, and, as the verb is deponent, takes the form of what would otherwise be the rare sigmatic future passive indicative tense (which is not attested in the plural for any verb).' else data.footnotes[noteindex] = 'At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\").' if subtypes.sigmpasv then data.footnotes[noteindex] = data.footnotes[noteindex] .. ' It is also attested as having a rare sigmatic future passive indicative form (\"will have been\"), which is not attested in the plural for any verb.' end end end make_conjugation["1st"] = function(args, data, typeinfo) -- set_conj_categories("first", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. local forms = data.forms if pres_stem == "dīlapid" then add_form(forms, "3p_sigf_actv_indc", "", "dīlapidāssunt", 2) elseif pres_stem == "invol" then add_form(forms, "3s_sigf_actv_indc", "", "involāsit", 2) elseif pres_stem == "viol" then local noteindex = table_len(data.footnotes) + 1 add_form(forms, "3p_futp_actv_indc", "", "violārint", 2) add_form(forms, "3p_perf_actv_subj", "", "violārint", 2) add_form(forms, "3s_sigf_actv_indc", "", "violāsit", 2) data.form_footnote_indices["3p_futp_actv_indc"] = tostring(noteindex) data.form_footnote_indices["3p_perf_actv_subj"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" end end make_conjugation["2nd"] = function(args, data, typeinfo) set_conj_categories("second", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. if pres_stem == "noc" then add_form(data.forms, "3s_siga_actv_subj", "", "noxsīt", 2) end end make_conjugation["3rd"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. if not pres_stem then return elseif toNFD(pres_stem):match(vowel .. MACRON .. "sc$") then -- insert_if_not(data.categories, "Latin inchoative verbs") end if pres_stem:match("nōsc$") then typeinfo.subtypes.poetsyncperf = true elseif pres_stem == "ulcīsc" then local forms = data.forms local formval = forms["1s_sigf_actv_indc"] if type(formval) ~= "table" then formval = {formval} end forms["1s_sigf_actv_indc"] = formval local noteindex = table_len(data.footnotes) + 1 for i, form in ipairs(formval) do if form == "ulsō" then add_form(forms, "1s_sigf_actv_indc", "ull", "ō", i + 1) data.form_footnote_indices["1s_sigf_actv_indc"] = tostring(noteindex) data.footnotes[noteindex] = 'The form \"ullō\" may have resulted from a later, erroneous misreading of \"ulsō\".' break end end end end make_conjugation["3rd-io"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) local supine_stem, futr_actv_ptc_stem = typeinfo.supine_stem if supine_stem then local subtypes = typeinfo.subtypes futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) for i, stem in ipairs(futr_actv_ptc_stem) do -- TODO: generalise this as a subtype which is automatic for 3rd-io verbs with -rt in the supine local unsync_stem = stem:gsub("rt$", "rit") futr_actv_ptc_stem[i] = unsync_stem if unsync_stem ~= stem then subtypes.syncfutractvptc = true end end typeinfo.futr_actv_ptc_stem = futr_actv_ptc_stem end make_pres(data, typeinfo, typeinfo.pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) end make_conjugation["3rd/4th"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) set_conj_categories("fourth", data, typeinfo) local supine_stem, futr_actv_ptc_stem = typeinfo.supine_stem if supine_stem then local subtypes = typeinfo.subtypes futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) for i, stem in ipairs(futr_actv_ptc_stem) do -- TODO: generalise this as a subtype which is automatic for 3rd/4th verbs with -rt in the supine local unsync_stem = stem:gsub("rt$", "rit") futr_actv_ptc_stem[i] = unsync_stem if unsync_stem ~= stem then subtypes.syncfutractvptc = true end end typeinfo.futr_actv_ptc_stem = futr_actv_ptc_stem end make_pres(data, typeinfo, typeinfo.pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) end local function ivi_ive(form) form = form:gsub("īvī", "iī") form = form:gsub("īvi", "ī") form = form:gsub("īve", "ī") form = form:gsub("īvē", "ē") return form end make_conjugation["4th"] = function(args, data, typeinfo) set_conj_categories("fourth", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) local forms = data.forms if form_contains(forms["1s_pres_actv_indc"], "serviō") or form_contains(forms["1s_pres_actv_indc"], "saeviō") then add_forms(forms, "impf_actv_indc", pres_stem, {"iēbam", "ībam"}, {"iēbās", "ībās"}, {"iēbat", "ībat"}, {"iēbāmus", "ībāmus"}, {"iēbātis", "ībātis"}, {"iēbant", "ībant"} ) add_forms(forms, "futr_actv_indc", pres_stem, {"iam", "ībō"}, {"iēs", "ībis"}, {"iet", "ībit"}, {"iēmus", "ībimus"}, {"iētis", "ībitis"}, {"ient", "ībunt"} ) end local subtypes = typeinfo.subtypes if not (subtypes.alwayssyncperf or subtypes.optsyncperf) then return end for key, formval in pairs(forms) do if cfind(key, "perf") or cfind(key, "plup") or cfind(key, "futp") then if type(formval) ~= "table" then formval = {formval} end forms[key] = {} for _, f in ipairs(formval) do if subtypes.optsyncperf then insert_if_not(forms[key], f) end insert_if_not(forms[key], ivi_ive(f)) end end end end -- Irregular conjugations. local irreg_conjugations = {} make_conjugation["irreg"] = function(args, data, typeinfo) local verb = ine(args[1]) local prefix = ine(args[2]) if verb == nil then error("The verb to be conjugated has not been specified.") elseif not irreg_conjugations[verb] then error(("Internal error: the irregular verb %s does not have a conjugation function specified."):format(dump(verb))) end typeinfo.prefix = prefix -- Generate the verb forms irreg_conjugations[verb](args, data, typeinfo) end for _, verb in ipairs{"aiō", "aiiō", "aijō", "ajō"} do local stem = usub(verb, 1, -2) local i_stem = stem:gsub("j$", "i") irreg_conjugations[verb] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin active-only verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.highlydef = true subtypes.nopass = true subtypes.nosup = true stem = (typeinfo.prefix or "") .. stem -- TODO: add period and frequency notes. add_forms(forms, "pres_actv_indc", stem, "ō", "s", "t", nil, "tis", "unt") add_forms(forms, "impf_actv_indc", stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "perf_actv_indc", stem, nil, "stī", "t", nil, nil, {"ērunt", "ēre"}) add_forms(forms, "pres_actv_subj", stem, "am", "ās", "at", nil, nil, "ant") add_form(forms, "3s_impf_actv_subj", stem, "eret") add_form(forms, "2s_pres_actv_impr", stem, "") add_form(forms, "pres_actv_inf", stem, "ere") add_form(forms, "pres_actv_ptc", stem, "ēns") end end irreg_conjugations["cedo"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.imponly = true subtypes.nofutr = true subtypes.nopass = true subtypes.noperf = true subtypes.nosup = true local prefix = typeinfo.prefix or "" forms["2s_pres_actv_impr"] = prefix .. "cedo" forms["2p_pres_actv_impr"] = {prefix .. "cette", prefix .. "cedite"} end irreg_conjugations["dīcō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "dīc") make_perf(data, prefix .. "dīx") make_supine(data, typeinfo, prefix .. "dict") make_sigm(data, typeinfo, prefix .. "dīx") -- Additional regular imperative. local noteindex = table_len(data.footnotes) + 1 add_form(forms, "2s_pres_actv_impr", prefix, "dīc", 1) end irreg_conjugations["dō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin first conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" typeinfo.subtypes.shorta = true make_pres(data, typeinfo, prefix .. "d") make_perf(data, prefix .. "ded") make_supine(data, typeinfo, prefix .. "dat") end irreg_conjugations["dūcō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "dūc") make_perf(data, prefix .. "dūx") make_supine(data, typeinfo, prefix .. "duct") make_sigm(data, typeinfo, prefix .. "dūx") add_form(forms, "2s_pres_actv_impr", prefix, "dūc", 1) end irreg_conjugations["edō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "ed") make_perf(data, prefix .. "ēd") make_supine(data, typeinfo, {prefix .. "ēs", prefix .. "ēss", prefix .. "ēst"}) -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, nil, "ēs", "ēst", nil, "ēstis", nil) -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", prefix, nil, {"ēssis", "ēsse"}, "ēstur", nil, nil, nil) -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix, "edim", "edīs", {"edit", "ēst"}, "edīmus", "edītis", "edint") add_forms(forms, "impf_actv_subj", prefix, "ēssem", "ēssēs", "ēsset", "ēssēmus", "ēssētis", "ēssent") -- Passive imperfective subjunctive add_forms(forms, "impf_pasv_subj", prefix, "ēsser", {"ēssēris", "ēssēre"}, "ēssētur", "ēssēmur", "ēssēminī", "ēssentur") -- Active imperative add_2_forms(forms, "pres_actv_impr", prefix, "ēs", "ēste") add_23_forms(forms, "futr_actv_impr", prefix, "ēstō", "ēstō", "ēstōte", nil) -- Passive imperative add_23_forms(forms, "futr_pasv_impr", prefix, "ēstor", "ēstor", nil, nil) add_form(forms, "2s_pres_pasv_impr", prefix, "ēsse") -- Present infinitives add_form(forms, "pres_actv_inf", prefix, "ēsse") end irreg_conjugations["ëdō"] = irreg_conjugations["edō"] irreg_conjugations["eō"] = function(args, data, typeinfo) local forms = data.forms -- insert_if_not(data.categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_perf(data, {prefix .. "i", prefix .. "īv"}) make_supine(data, typeinfo, prefix .. "it") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, "eō", "īs", "it", "īmus", "ītis", prefix == "prōd" and {"eunt", "īnunt"} or "eunt") add_forms(forms, "impf_actv_indc", prefix, "ībam", "ībās", "ībat", "ībāmus", "ībātis", "ībant") add_forms(forms, "futr_actv_indc", prefix, "ībō", "ībis", "ībit", "ībimus", "ībitis", "ībunt") -- Active perfective indicative add_form(forms, "2s_perf_actv_indc", prefix, "īstī", 1) add_form(forms, "2p_perf_actv_indc", prefix, "īstis", 1) -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", prefix, "eor", {"īris", "īre"}, "ītur", "īmur", "īminī", "euntur") add_forms(forms, "impf_pasv_indc", prefix, "ībar", {"ībāris", "ībāre"}, "ībātur", "ībāmur", "ībāminī", "ībantur") add_forms(forms, "futr_pasv_indc", prefix, "ībor", {"īberis", "ībere"}, "ībitur", "ībimur", "ībiminī", "ībuntur") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix, "eam", "eās", "eat", "eāmus", "eātis", "eant") add_forms(forms, "impf_actv_subj", prefix, "īrem", "īrēs", "īret", "īrēmus", "īrētis", "īrent") -- Active perfective subjunctive add_form(forms, "1s_plup_actv_subj", prefix, "īssem", 1) add_form(forms, "2s_plup_actv_subj", prefix, "īssēs", 1) add_form(forms, "3s_plup_actv_subj", prefix, "īsset", 1) add_form(forms, "1p_plup_actv_subj", prefix, "īssēmus", 1) add_form(forms, "2p_plup_actv_subj", prefix, "īssētis", 1) add_form(forms, "3p_plup_actv_subj", prefix, "īssent", 1) -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", prefix, "ear", {"eāris", "eāre"}, "eātur", "eāmur", "eāminī", "eantur") add_forms(forms, "impf_pasv_subj", prefix, "īrer", {"īrēris", "īrēre"}, "īrētur", "īrēmur", "īrēminī", "īrentur") -- Imperative add_2_forms(forms, "pres_actv_impr", prefix, "ī", "īte") add_23_forms(forms, "futr_actv_impr", prefix, "ītō", "ītō", "ītōte", "euntō") add_2_forms(forms, "pres_pasv_impr", prefix, "īre", "īminī") add_23_forms(forms, "futr_pasv_impr", prefix, "ītor", "ītor", nil, "euntor") -- Present infinitives forms["pres_actv_inf"] = prefix .. "īre" forms["pres_pasv_inf"] = prefix .. "īrī" -- Perfect/future infinitives add_form(forms, "perf_actv_inf", prefix, "īsse", 1) -- Imperfective participles forms["pres_actv_ptc"] = prefix .. "iēns" -- Gerund make_gerund(data, typeinfo, prefix .. "eund") end irreg_conjugations["ëō"] = irreg_conjugations["eō"] local function fio(forms, prefix, voice) -- Active/passive imperfective indicative add_forms(forms, "pres_" .. voice .. "_indc", prefix, "fīō", "fīs", "fit", "fīmus", "fītis", "fīunt") add_forms(forms, "impf_" .. voice .. "_indc", prefix .. "fīēb", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_" .. voice .. "_indc", prefix .. "fī", "am", "ēs", "et", "ēmus", "ētis", "ent") -- Active/passive imperfective subjunctive add_forms(forms, "pres_" .. voice .. "_subj", prefix .. "fī", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "impf_" .. voice .. "_subj", prefix .. "fier", "em", "ēs", "et", "ēmus", "ētis", "ent") -- Active/passive imperative add_2_forms(forms, "pres_" .. voice .. "_impr", prefix .. "fī", "", "te") add_23_forms(forms, "futr_" .. voice .. "_impr", prefix .. "fī", "tō", "tō", "tōte", "untō") -- Active/passive present infinitive add_form(forms, "pres_" .. voice .. "_inf", prefix, "fierī") if voice == "actv" then add_form(forms, "pres_actv_ptc", prefix, "fīēns") end end irreg_conjugations["faciō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "fac") -- Remove passive forms, except the gerund and future passive participle. remove_forms(forms, {"pasv_indc", "pasv_subj", "pasv_impr", "pasv_inf"}) make_perf(data, prefix .. "fēc") make_supine(data, typeinfo, prefix .. "fact") make_sigm(data, typeinfo, prefix .. "fax") if prefix == "" then -- Active imperative add_form(forms, "2s_pres_actv_impr", "", "fac", 1) -- Sigmatic forms add_form(forms, "1s_sigf_actv_indc", "", {"faxsō", "facsō", "faxiō"}) add_form(forms, "2s_sigf_actv_indc", "", {"faxsis", "facsis", "facxis", "facxsis"}) add_form(forms, "3s_sigf_actv_indc", "", "faxsit") add_form(forms, "1p_sigf_actv_indc", "", "faxsimus") add_form(forms, "2p_sigf_actv_indc", "", "faxsitis") add_form(forms, "3p_sigf_actv_indc", "", "faxsint") add_form(forms, "1s_siga_actv_subj", "", {"faxsim", "faxēm"}) add_form(forms, "2s_siga_actv_subj", "", {"faxsīs", "faxseis", "faxeis", "faxēs"}) add_form(forms, "3s_siga_actv_subj", "", {"faxsīt", "faxeit", "faxēt"}) add_form(forms, "1p_siga_actv_subj", "", {"faxsīmus", "faxeimus"}) add_form(forms, "2p_siga_actv_subj", "", {"faxsītis", "faxeitis"}) add_form(forms, "3p_siga_actv_subj", "", {"faxsint", "faxēnt"}) local noteindex = table_len(data.footnotes) + 1 add_form(forms, "pres_actv_inf", "", "fāre") data.form_footnote_indices["pres_actv_inf"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်လဇုဲ။" end fio(forms, prefix, "pasv") end irreg_conjugations["ferō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true local prefix_pres = typeinfo.prefix or "" local prefix_perf = ine(args[3]) local prefix_supine = ine(args[4]) prefix_perf = prefix_perf or prefix_pres prefix_supine = prefix_supine or prefix_pres make_pres(data, typeinfo, prefix_pres .. "fer") if prefix_perf == "" then make_perf(data, {"tul", "tetul"}) else make_perf(data, prefix_perf .. "tul") end make_supine(data, typeinfo, prefix_supine .. "lāt") -- Active imperfective indicative forms["2s_pres_actv_indc"] = prefix_pres .. "fers" forms["3s_pres_actv_indc"] = prefix_pres .. "fert" forms["2p_pres_actv_indc"] = prefix_pres .. "fertis" -- Passive imperfective indicative forms["3s_pres_pasv_indc"] = prefix_pres .. "fertur" -- Active imperfective subjunctive forms["1s_impf_actv_subj"] = prefix_pres .. "ferrem" forms["2s_impf_actv_subj"] = prefix_pres .. "ferrēs" forms["3s_impf_actv_subj"] = prefix_pres .. "ferret" forms["1p_impf_actv_subj"] = prefix_pres .. "ferrēmus" forms["2p_impf_actv_subj"] = prefix_pres .. "ferrētis" forms["3p_impf_actv_subj"] = prefix_pres .. "ferrent" -- Passive present indicative forms["2s_pres_pasv_indc"] = {prefix_pres .. "ferris", prefix_pres .. "ferre"} -- Passive imperfective subjunctive forms["1s_impf_pasv_subj"] = prefix_pres .. "ferrer" forms["2s_impf_pasv_subj"] = {prefix_pres .. "ferrēris", prefix_pres .. "ferrēre"} forms["3s_impf_pasv_subj"] = prefix_pres .. "ferrētur" forms["1p_impf_pasv_subj"] = prefix_pres .. "ferrēmur" forms["2p_impf_pasv_subj"] = prefix_pres .. "ferrēminī" forms["3p_impf_pasv_subj"] = prefix_pres .. "ferrentur" -- Imperative forms["2s_pres_actv_impr"] = prefix_pres .. "fer" forms["2p_pres_actv_impr"] = prefix_pres .. "ferte" forms["2s_futr_actv_impr"] = prefix_pres .. "fertō" forms["3s_futr_actv_impr"] = prefix_pres .. "fertō" forms["2p_futr_actv_impr"] = prefix_pres .. "fertōte" forms["2s_pres_pasv_impr"] = prefix_pres .. "ferre" forms["2s_futr_pasv_impr"] = prefix_pres .. "fertor" forms["3s_futr_pasv_impr"] = prefix_pres .. "fertor" -- Present infinitives forms["pres_actv_inf"] = prefix_pres .. "ferre" forms["pres_pasv_inf"] = prefix_pres .. "ferrī" if prefix_perf == "" then local noteindex = table_len(data.footnotes) + 1 for slot, form in pairs(forms) do if type(form) == "table" then for _, f in ipairs(form) do if f:match("^tetul") then data.form_footnote_indices[slot] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" break end end end end end end irreg_conjugations["fīō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.semidepon = true subtypes.nofutractvptc = true if not subtypes.nosup then subtypes.suppl = true end local prefix = typeinfo.prefix or "" fio(forms, prefix, "actv") make_supine(data, typeinfo, prefix .. "fact") forms["futr_actv_inf"] = forms["futr_pasv_inf"] -- Gerund make_gerund(data, typeinfo, prefix .. "fīend") end irreg_conjugations["inquam"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.highlydef = true forms["1s_pres_actv_indc"] = "inquam" forms["2s_pres_actv_indc"] = "inquis" forms["3s_pres_actv_indc"] = "inquit" forms["1p_pres_actv_indc"] = "inquimus" forms["2p_pres_actv_indc"] = "inquitis" forms["3p_pres_actv_indc"] = "inquiunt" forms["2s_futr_actv_indc"] = "inquiēs" forms["3s_futr_actv_indc"] = "inquiet" forms["3p_futr_actv_indc"] = "inquient" forms["3s_impf_actv_indc"] = "inquiēbat" forms["1s_perf_actv_indc"] = "inquiī" forms["2s_perf_actv_indc"] = "inquistī" forms["3s_perf_actv_indc"] = "inquit" forms["2s_pres_actv_subj"] = "inquiās" forms["3s_pres_actv_subj"] = "inquiat" forms["3p_pres_actv_subj"] = "inquiant" forms["2s_pres_actv_impr"] = "inque" forms["2s_futr_actv_impr"] = "inquitō" forms["3s_futr_actv_impr"] = "inquitō" forms["pres_actv_ptc"] = "inquiēns" local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "Medieval Latin." noteindex = tostring(noteindex) data.form_footnote_indices["3p_futr_actv_indc"] = noteindex data.form_footnote_indices["2s_pres_actv_subj"] = noteindex data.form_footnote_indices["3p_pres_actv_subj"] = noteindex end -- Handle most forms of volō, mālō, nōlō. local function volo_malo_nolo(forms, indc_stem, subj_stem, subtypes) -- Present active indicative needs to be done individually as each -- verb is different. add_forms(forms, "impf_actv_indc", indc_stem .. "ēb", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_actv_indc", indc_stem, "am", "ēs", "et", "ēmus", "ētis", "ent") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", subj_stem, "im", "īs", "it", "īmus", "ītis", "int") add_forms(forms, "impf_actv_subj", subj_stem .. "l", "em", "ēs", "et", "ēmus", "ētis", "ent") -- Present infinitives forms["pres_actv_inf"] = subj_stem .. "le" -- Imperfective participles forms["pres_actv_ptc"] = indc_stem .. "ēns" subtypes.suppl = true end irreg_conjugations["mālō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.nopass = true subtypes.noimp = true make_perf(data, "mālu") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", "", "mālō", "māvīs", "māvult", "mālumus", "māvultis", "mālunt") volo_malo_nolo(forms, "māl", "māl", subtypes) end irreg_conjugations["nōlō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.nopass = true make_perf(data, "nōlu") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", "", "nōlō", "nōn vīs", "nōn vult", "nōlumus", "nōn vultis", "nōlunt") add_forms(forms, "impf_actv_indc", "nōlēb", "am", "ās", "at", "āmus", "ātis", "ant") volo_malo_nolo(forms, "nōl", "nōl", subtypes) -- Imperative add_2_forms(forms, "pres_actv_impr", "nōlī", "", "te") add_23_forms(forms, "futr_actv_impr", "nōl", "itō", "itō", "itōte", "untō") -- Additional Old Latin forms. local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "လပ်တေန်တြေံ။" noteindex = tostring(noteindex) add_forms(forms, "pres_actv_indc", "", nil, "nevīs", {"nōn volt", "nevolt"}, nil, {"nōn voltis", "nōltis"}, nil) data.form_footnote_indices["2s_pres_actv_indc"] = noteindex data.form_footnote_indices["3s_pres_actv_indc"] = noteindex data.form_footnote_indices["2p_pres_actv_indc"] = noteindex end irreg_conjugations["possum"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true subtypes.passimpers = true subtypes.passimpersold = true make_perf(data, "potu") -- Active imperfective indicative, impersonal passive add_forms(forms, "pres_actv_indc", "", "possum", "potes", "potest", "possumus", "potestis", "possunt") add_forms(forms, "impf_actv_indc", "poter", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_actv_indc", "poter", "ō", {"is", "e"}, "it", "imus", "itis", "unt") forms["3s_pres_pasv_indc"] = "potestur" forms["3s_impf_pasv_indc"] = "poterātur" forms["3s_futr_pasv_indc"] = "poteritur" -- Active imperfective subjunctive, impersonal passive add_forms(forms, "pres_actv_subj", "poss", "im", "īs", "it", "īmus", "ītis", "int") add_forms(forms, "impf_actv_subj", "poss", "em", "ēs", "et", "ēmus", "ētis", "ent") forms["3s_pres_pasv_subj"] = "possītur" forms["3s_impf_pasv_subj"] = "possētur" -- Present infinitives forms["pres_actv_inf"] = {"posse", "potesse"} -- Imperfective participles forms["pres_actv_ptc"] = "potēns" local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "Old Latin. The passive forms are only used to govern a passive infinitive; e.g. " .. mw.getCurrentFrame():preprocess("{{uxi|la|nec retrahi '''potestur''' imperiis|t=\"nor '''can it''' be withdrawn by commands\"}}") .. "." noteindex = tostring(noteindex) for slot in pairs(data.forms) do if cfind(slot, "pasv") then data.form_footnote_indices[slot] = noteindex end end data.form_footnote_indices["pres_actv_inf"] = noteindex end -- The vowel of the prefix is lengthened if it ends in -n and the next word begins with f- or s-. local function shorten_prefix(prefix) return toNFC((ugsub(toNFD(prefix), "(" .. vowel .. ")" .. MACRON .. "n$", "%1n"))) end local function lengthen_prefix(prefix) return toNFC((ugsub(toNFD(prefix), "(" .. vowel .. ")" .. LENGTH .. "n$", "%1" .. MACRON .. "n"))) end irreg_conjugations["sum"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") local prefix = typeinfo.prefix or "" local prefix_e = ine(args[3]) or shorten_prefix(prefix) local prefix_f = ine(args[4]) or lengthen_prefix(prefix) local prefix_s = lengthen_prefix(prefix) subtypes.suppl = true subtypes.nopass = true subtypes.supfutractvonly = true make_perf(data, prefix_f .. "fu") make_supine(data, typeinfo, prefix_f .. "fut") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix_s, "sum", nil, nil, "sumus", nil, "sunt") add_forms(forms, "pres_actv_indc", prefix_e, nil, "es", "est", nil, "estis", nil) add_forms(forms, "impf_actv_indc", prefix_e, "eram", "erās", "erat", "erāmus", "erātis", "erant") add_forms(forms, "futr_actv_indc", prefix_e, "erō", {"eris", "ere"}, "erit", "erimus", "eritis", "erunt") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix_s, "sim", "sīs", "sit", "sīmus", "sītis", "sint") add_forms(forms, "pres_actv_subj", prefix_s, "siem", "siēs", "siet", "siēmus", "siētis", "sient") add_forms(forms, "pres_actv_subj", prefix_f, "fuam", "fuās", "fuat", "fuāmus", "fuātis", "fuant") local noteindex = table_len(data.footnotes) + 1 for _, p in ipairs(persons) do data.form_footnote_indices[p .. "_pres_actv_subj"] = tostring(noteindex) end data.footnotes[noteindex] = "လပ်တေန်တြေံ ဝါ အပ္ဍဲကဗျလၚ်္ကာ" if prefix_s == "ad" then local noteindex = table_len(data.footnotes) + 1 add_form(forms, "3p_pres_actv_subj", "", "adessint", 2) data.form_footnote_indices["3p_pres_actv_subj"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" end add_forms(forms, "impf_actv_subj", prefix_e, "essem", "essēs", "esset", "essēmus", "essētis", "essent") add_forms(forms, "impf_actv_subj", prefix_f, "forem", "forēs", "foret", "forēmus", "forētis", "forent") -- Imperative add_2_forms(forms, "pres_actv_impr", prefix_e, "es", "este") add_23_forms(forms, "futr_actv_impr", prefix_e, "estō", "estō", "estōte", nil) add_form(forms, "3p_futr_actv_impr", prefix_s, "suntō") -- Infinitives add_form(forms, "pres_actv_inf", prefix_e, "esse") add_form(forms, "futr_actv_inf", prefix_f, "fore") -- Imperfective participles if prefix == "ab" or prefix == "cōn" or prefix == "prae" or prefix == "præ" then add_form(forms, "pres_actv_ptc", prefix_s, "sēns") -- forms["pres_actv_ptc"] = prefix_s .. "sēns" end end irreg_conjugations["volō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") local prefix = typeinfo.prefix or "" subtypes.nopass = true subtypes.noimp = true subtypes.supfutractvonly = true make_perf(data, prefix .. "volu") make_supine(data, typeinfo, prefix .. "volit") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, "volō", "vīs", "vult", "volumus", "vultis", "volunt") volo_malo_nolo(forms, prefix .. "vol", prefix .. "vel", subtypes) -- Additional Old Latin forms. if prefix == "" then local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "လပ်တေန်တြေံ။" noteindex = tostring(noteindex) add_forms(forms, "pres_actv_indc", prefix, nil, nil, "volt", nil, "voltis", nil) data.form_footnote_indices["3s_pres_actv_indc"] = noteindex data.form_footnote_indices["2p_pres_actv_indc"] = noteindex -- vol- in the present subjunctive. add_forms(forms, "pres_actv_subj", prefix .. "vol", "im", "īs", "it", "īmus", "ītis", "int") for slot in pairs(data.forms) do if cfind(slot, "pres_actv_subj") then data.form_footnote_indices[slot] = noteindex end end end end local function make_perfect_passive(data) local forms = data.forms local ppp = forms["perf_pasv_ptc"] if type(ppp) ~= "table" then ppp = {ppp} end local ppplinks = {} for _, pppform in ipairs(ppp) do insert(ppplinks, make_link(pppform, nil, "term")) end local ppplink = concat(ppplinks, " or ") local sumlink = make_link("sum", nil, "term") local text_for_slot = { perf_pasv_indc = "စၞောန်ထ္ၜးမရပ်စပ်ပစ္စုပ္ပန်", futp_pasv_indc = "စၞောန်ထ္ၜးပရေၚ်ရပ်စပ်အနာဂတ်", plup_pasv_indc = "ကြိယာအတိက်ဗီုပြၚ်ဟွံဍိုက်ပေၚ်", perf_pasv_subj = "ကြိယာစၞောန်ထ္ၜးဗီုပြၚ်ပစ္စုပ္ပန်", plup_pasv_subj = "ကြိယာစၞောန်ထ္ၜးဗီုပြၚ်ဟွံဍိုက်ပေၚ်" } local passive_prefix, passive_suffix = data.passive_prefix, data.passive_suffix local prefix_joiner = passive_prefix and passive_prefix:match(" $") and "+ " or "" local suffix_joiner = passive_suffix and passive_suffix:match("^ ") and " +" or "" for slot, text in pairs(text_for_slot) do forms[slot] = (passive_prefix or "") .. prefix_joiner .. ppplink .. " + " .. text .. " of " .. sumlink .. suffix_joiner .. (passive_suffix or "") end ppp = forms["1s_pres_actv_indc"] if type(ppp) ~= "table" then ppp = {ppp} end end local function handle_deponent(data, subtypes) local forms = data.forms -- Generate a list of form types to remove. local to_remove = {"pres_pasv_ptc", "futr_pasv_inf"} if subtypes.depon then insert(to_remove, "actv") else insert(to_remove, "pres_pasv") insert(to_remove, "impf_pasv") insert(to_remove, "futr_pasv") if subtypes.semidepon then insert(to_remove, "perf_actv") insert(to_remove, "plup_actv") insert(to_remove, "futp_actv") end end -- Remove forms. for slot in pairs(forms) do if not ( slot == "futr_actv_inf" or slot == "perp_actv_inf" or slot == "pres_actv_ptc" or slot == "futr_actv_ptc" or slot == "futr_pasv_ptc" ) then for _, part in ipairs(to_remove) do if cfind(slot, part) then forms[slot] = nil break end end end end -- Change passive to active, except for the future passive participle. local changes = {} for slot in pairs(forms) do if cfind(slot, "pasv") and slot ~= "futr_pasv_ptc" then changes[slot] = slot:gsub("pasv", "actv") end end for old, new in pairs(changes) do add_form(forms, new, "", forms[old]) forms[old] = nil end end local function add_sync_perf(data, form, suf, note, noteindex) local forms = data.forms local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end local i = 0 while true do i = i + 1 local stem = formval[i] if not stem then break end stem = stem:match("^(.*)" .. pattern_escape(suf) .. "$") -- Can only syncopate "vi", "ve", "vē", or any one of them spelled with a "u" after a vowel. -- TODO: Syncopate "si", "xi". if stem then local new_stem = toNFD(stem) local vowel, loc, v, ei, diacritic = umatch(new_stem, "(" .. vowel .. "?)" .. LENGTH .. "()([uv])([ei])(" .. LENGTH .. ")$") if loc and (v == "v" or vowel ~= "") and (ei == "e" or diacritic == "" or cfind(diacritic, BREVE)) then new_stem = usub(new_stem, 1, loc - 1) -- Can't be omitted if it's part of the first syllable. if new_stem:match(vowel) then i = i + 1 add_form(forms, form, new_stem, suf, i) data.form_footnote_indices[form] = tostring(noteindex) data.footnotes[noteindex] = note end end end end end local function has_no_infinitive(forms) for slot in pairs(forms) do if cfind(slot, "inf") and not form_is_empty(forms[slot]) then return false end end return true end local function has_no_gerund(forms) if not form_is_empty(forms["futr_pasv_ptc"]) then return false end for _, case in ipairs(ger_cases) do if not form_is_empty(forms[case .. "_ger"]) then return false end end return true end local make_conjugation_mt = {} function make_conjugation_mt:__call(args, data, typeinfo) if typeinfo.irreg then self.irreg(args, data, typeinfo) else get_regular_stems(args, typeinfo) self[typeinfo.conj](args, data, typeinfo) end local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes if subtypes.nopres or subtypes.perfaspres then -- insert_if_not(categories, "Latin verbs with missing present stem") -- insert_if_not(categories, "Latin defective verbs") end -- Maybe clear out the supine-derived forms (except maybe for the -- future active participle). Do this first because some code below -- looks at the perfect participle to derive other forms. if subtypes.nosup then -- Some verbs have no supine forms or forms derived from the supine -- insert_if_not(categories, "Latin verbs with missing supine stem") -- insert_if_not(categories, "Latin defective verbs") forms["futr_actv_inf"] = nil forms["futr_actv_ptc"] = nil forms["perf_actv_ptc"] = nil forms["futp_actv_inf"] = nil forms["perp_actv_inf"] = nil forms["perf_pasv_inf"] = nil forms["perf_pasv_ptc"] = nil forms["futr_pasv_inf"] = nil forms["futp_pasv_inf"] = nil if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then forms["perf_actv_inf"] = nil end for _, case in ipairs(sup_cases) do forms[case .. "_sup"] = nil end elseif subtypes.nofutractvptc then -- Some verbs have a missing future active participle -- insert_if_not(categories, "Latin verbs with supine stem with missing future active participle") -- insert_if_not(categories, "Latin defective verbs") forms["futr_actv_ptc"] = nil forms["perp_actv_inf"] = nil elseif subtypes.supfutractvonly then -- Some verbs have no supine forms or forms derived from the supine, -- except for the future active infinitive/participle -- insert_if_not(categories, "Latin verbs with missing supine stem except in the future active participle") -- insert_if_not(categories, "Latin defective verbs") forms["perf_actv_ptc"] = nil forms["futp_actv_inf"] = nil forms["perf_pasv_inf"] = nil forms["perf_pasv_ptc"] = nil forms["futr_pasv_inf"] = nil forms["futp_pasv_inf"] = nil if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then forms["perf_actv_inf"] = nil end for _, case in ipairs(sup_cases) do forms[case .. "_sup"] = nil end end -- Add information for the passive perfective forms if not ( form_is_empty(forms["perf_pasv_ptc"]) or subtypes.optsemidepon or subtypes.impers or subtypes.passimpers and not (subtypes.depon or subtypes.semidepon or subtypes.optsemidepon) or subtypes["3only"] or subtypes.pass3only and not (subtypes.depon or subtypes.semidepon or subtypes.optsemidepon) ) then make_perfect_passive(data) end -- Perfect forms as present tense. if subtypes.perfaspres then -- insert_if_not(categories, "Latin verbs with perfect forms used in the present tense") -- Remove present active, imperfect active and future active forms and passive forms. -- Change perfect forms to non-perfect forms. local new_forms = {} forms["futr_pasv_inf"] = nil for slot, form in pairs(forms) do if not ( cfind(slot, "pres") or cfind(slot, "impf") or cfind(slot, "futr") and not (cfind(slot, "inf") or cfind(slot, "ptc")) or slot:match("_ger$") ) then -- If semi-deponent, the perfect passive forms will be converted to perfect active. if not (cfind(slot, "pasv") and (subtypes.semidepon or subtypes.optsemidepon)) then slot = slot:gsub("perf", "pres") :gsub("plup", "impf") :gsub("futp", "futr") end new_forms[slot] = form end end data.forms, forms = new_forms, new_forms -- No present stem. elseif subtypes.nopres then for slot in pairs(forms) do if ( cfind(slot, "pres") or cfind(slot, "impf") or cfind(slot, "futr") and not (cfind(slot, "inf") or cfind(slot, "ptc")) or slot:match("_ger$") ) then forms[slot] = nil end end end -- Types of irregularity related primarily to the active. -- These could in theory be combined with those related to the passive and imperative, -- i.e. there's no reason there couldn't be an impersonal deponent verb with no imperatives. -- Deponent verbs use passive forms with active meaning. if subtypes.depon then -- insert_if_not(categories, "Latin deponent verbs") handle_deponent(data, subtypes) -- Semi-deponent verbs use perfective passive forms with active meaning, -- and have no imperfective passive. elseif subtypes.semidepon then -- insert_if_not(categories, "Latin semi-deponent verbs") handle_deponent(data, subtypes) -- Optional semi-deponent verbs use perfective passive forms with active -- meaning, but also have perfect active forms with the same meaning, -- and have no imperfective passive. elseif subtypes.optsemidepon then -- insert_if_not(categories, "Latin semi-deponent verbs") -- insert_if_not(categories, "Latin optionally semi-deponent verbs") handle_deponent(data, subtypes) elseif subtypes.noperf then -- Some verbs have no perfect stem (e.g. inalbēscō, -ěre) -- insert_if_not(categories, "Latin defective verbs") if not subtypes.depon then -- insert_if_not(categories, "Latin verbs with missing perfect stem") end -- Remove all active perfect forms (passive perfect forms may -- still exist as they are formed with the supine stem) for slot in pairs(forms) do if cfind(slot, "actv") and ( cfind(slot, "perf") or cfind(slot, "plup") or cfind(slot, "futp") ) and slot ~= "futp_actv_inf" then forms[slot] = nil end end end -- Handle the removal of any passive forms, including any impersonal/3rd- -- person-only passives. -- Third-person only. if subtypes["3only"] then -- insert_if_not(categories, "Latin third-person-only verbs") for slot in pairs(forms) do if slot:match("[12][sp]") then forms[slot] = nil end end -- Impersonal, so remove all non-third-person singular forms. elseif subtypes.impers then -- insert_if_not(categories, "Latin impersonal verbs") for slot in pairs(forms) do if slot:match("[12][sp]") or ( -- Keep third-person plural forms if third-person passive is set. cfind(slot, "3p") and not (subtypes.pass3only and cfind(slot, "pasv")) ) then forms[slot] = nil end end end -- No passive forms. if subtypes.nopass then -- insert_if_not(categories, "Latin active-only verbs") for slot in pairs(forms) do if cfind(slot, "pasv") then forms[slot] = nil end end -- Only third person in the passive. For phrasal verbs with a plural -- complement, also need to erase the 3s forms. -- FIXME: handling of mp, fp and np needs to be done separately. elseif subtypes.pass3only then -- insert_if_not(categories, "Latin verbs with third-person passive") local gender = data.gender for slot in pairs(forms) do if cfind(slot, "pasv") and ( slot:match("[12][sp]") or (gender == "mp" or gender == "fp" or gender == "np") and cfind(slot, "3s") ) then forms[slot] = nil end end -- Impersonal in the passive, so remove all passive non-third person forms. elseif subtypes.passimpers then -- insert_if_not(categories, "Latin verbs with impersonal passive") for slot in pairs(forms) do if cfind(slot, "pasv") and ( slot:match("[12][sp]") or cfind(slot, "3p") ) then forms[slot] = nil end end end -- Handle certain irregularities in the imperative if subtypes.noimp then -- Some verbs have no imperatives -- insert_if_not(categories, "Latin verbs with missing imperative") -- insert_if_not(categories, "Latin defective verbs") -- Remove all imperative forms for slot in pairs(forms) do if cfind(slot, "impr") then forms[slot] = nil end end end -- Handle certain irregularities in the future if subtypes.nofutr then -- Some verbs (e.g. soleō) have no future -- insert_if_not(categories, "Latin verbs with missing future") -- insert_if_not(categories, "Latin defective verbs") -- Remove all future forms for slot in pairs(forms) do if cfind(slot, "fut") then -- handles futr = future and futp = future perfect forms[slot] = nil end end end local pres_stem = typeinfo.pres_stem -- Add the ancient future_passive_participle of certain verbs -- if pres_stem == "lāb" then -- forms["futr_pasv_ptc"] = "lābundus" -- elseif pres_stem == "collāb" then -- forms["futr_pasv_ptc"] = "collābundus" -- elseif pres_stem == "illāb" then -- forms["futr_pasv_ptc"] = "illābundus" -- elseif pres_stem == "relāb" then -- forms["futr_pasv_ptc"] = "relābundus" -- end -- Add the poetic present passive infinitive forms of certain verbs if subtypes.p3inf then local form = "pres_" .. (subtypes.depon and "actv" or "pasv") .. "_inf" local noteindex = table_len(data.footnotes) + 1 local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end for i = 1, table_len(formval) do insert(formval, usub(formval[i], 1, -2) .. "ier") end forms[form] = formval data.form_footnote_indices[form] = tostring(noteindex) data.footnotes[noteindex] = "The present passive infinitive in ''-ier'' is a rare poetic form which is attested." end --[==[ if subtypes.old2sgimp then local form = "2s_pres_" .. (subtypes.depon and "actv" or "pasv") .. "_impr" local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end local newvals = mw.clone(formval) end]==] -- Add the syncopated perfect forms, omitting the separately handled fourth conjugation cases. if subtypes.poetsyncperf then local noteindex, note = table_len(data.footnotes) + 1 if pres_stem and pres_stem:match("nōsc$") then note = 'The verb "nōscō" and its compounds frequently drop the syllables "vi" and "ve" from their perfect, pluperfect and future perfect conjugations.' else note = "At least one rare poetic syncopated perfect form is attested." end -- infinitive add_sync_perf(data, "perf_actv_inf", "sse", note, noteindex) -- perfect actives add_sync_perf(data, "2s_perf_actv_indc", "stī", note, noteindex) add_sync_perf(data, "3s_perf_actv_indc", "t", note, noteindex) add_sync_perf(data, "1p_perf_actv_indc", "mus", note, noteindex) add_sync_perf(data, "2p_perf_actv_indc", "stis", note, noteindex) add_sync_perf(data, "3p_perf_actv_indc", "runt", note, noteindex) -- pluperfect actives add_sync_perf(data, "1s_plup_actv_indc", "ram", note, noteindex) add_sync_perf(data, "2s_plup_actv_indc", "rās", note, noteindex) add_sync_perf(data, "3s_plup_actv_indc", "rat", note, noteindex) add_sync_perf(data, "1p_plup_actv_indc", "rāmus", note, noteindex) add_sync_perf(data, "2p_plup_actv_indc", "rātis", note, noteindex) add_sync_perf(data, "3p_plup_actv_indc", "rant", note, noteindex) -- future perfect actives add_sync_perf(data, "1s_futp_actv_indc", "rō", note, noteindex) add_sync_perf(data, "2s_futp_actv_indc", "ris", note, noteindex) add_sync_perf(data, "3s_futp_actv_indc", "rit", note, noteindex) add_sync_perf(data, "1p_futp_actv_indc", "rimus", note, noteindex) add_sync_perf(data, "2p_futp_actv_indc", "ritis", note, noteindex) add_sync_perf(data, "3p_futp_actv_indc", "rint", note, noteindex) -- perfect subjunctives add_sync_perf(data, "1s_perf_actv_subj", "rim", note, noteindex) add_sync_perf(data, "2s_perf_actv_subj", "rīs", note, noteindex) add_sync_perf(data, "3s_perf_actv_subj", "rit", note, noteindex) add_sync_perf(data, "1p_perf_actv_subj", "rīmus", note, noteindex) add_sync_perf(data, "2p_perf_actv_subj", "rītis", note, noteindex) add_sync_perf(data, "3p_perf_actv_subj", "rint", note, noteindex) -- pluperfect subjunctives add_sync_perf(data, "1s_plup_actv_subj", "ssem", note, noteindex) add_sync_perf(data, "2s_plup_actv_subj", "ssēs", note, noteindex) add_sync_perf(data, "3s_plup_actv_subj", "sset", note, noteindex) add_sync_perf(data, "1p_plup_actv_subj", "ssēmus", note, noteindex) add_sync_perf(data, "2p_plup_actv_subj", "ssētis", note, noteindex) add_sync_perf(data, "3p_plup_actv_subj", "ssent", note, noteindex) end if subtypes.syncfutractvptc then -- TODO end -- Add category for sigmatic forms if subtypes.sigm then -- insert_if_not(categories, "Latin verbs with sigmatic forms") -- Add subcategory for (very rare) passive sigmatic forms if subtypes.sigmpasv then -- insert_if_not(categories, "Latin verbs with passive sigmatic forms") end end if subtypes.noinf then -- Some verbs (e.g. inquam) have no infinitives for slot in pairs(forms) do if cfind(slot, "inf") then forms[slot] = nil end end end if has_no_infinitive(forms) then subtypes.noinf = true -- insert_if_not(categories, "Latin verbs with missing infinitive") -- insert_if_not(categories, "Latin defective verbs") end if subtypes.noger then -- Some verbs (e.g. libet) have no gerund forms["futr_pasv_ptc"] = nil for _, case in ipairs(ger_cases) do forms[case .. "_ger"] = nil end end -- Catch verbs which don't have .noger explicitly specified. if has_no_gerund(forms) then subtypes.noger = true -- insert_if_not(categories, "Latin verbs with missing gerund") -- insert_if_not(categories, "Latin defective verbs") end if subtypes.imponly then -- Some verbs only have imperatives -- insert_if_not(categories, "Latin imperative-only verbs") -- insert_if_not(categories, "Latin defective verbs") -- Remove all non-imperative forms for slot in pairs(forms) do if not cfind(slot, "impr") then forms[slot] = nil end end end end setmetatable(make_conjugation, make_conjugation_mt) -- Functions for generating the inflection table -- Convert FORM (one or more forms) to a string of links. If the form is empty -- (see form_is_empty), the return value will be "&mdash;". local function show_form(formval, accel) if not formval then return "&mdash;" elseif type(formval) ~= "table" then formval = {formval} elseif table_len(formval) == 0 then return "&mdash;" end for slot, form in ipairs(formval) do if form_is_empty(form) then form = "&mdash;" elseif form:match("%[%[.-]]") then -- Don't put accelerators on forms already containing links such as -- the perfect passive infinitive and future active infinitive, or -- the participles wrongly get tagged as infinitives as well as -- participles. form = make_link(form) else form = make_link(form, nil, nil, accel) end formval[slot] = form end return concat(formval, ",<br> ") end local parts_to_tags = { ['1s'] = {'1', 's'}, ['2s'] = {'2', 's'}, ['3s'] = {'3', 's'}, ['1p'] = {'1', 'p'}, ['2p'] = {'2', 'p'}, ['3p'] = {'3', 'p'}, ['actv'] = {'act'}, ['pasv'] = {'pass'}, ['pres'] = {'pres'}, ['impf'] = {'impf'}, ['futr'] = {'fut'}, ['perf'] = {'perf'}, ['plup'] = {'plup'}, ['futp'] = {'futp'}, ['perp'] = {'perf', 'potn'}, ['sigm'] = {'sigm'}, ['sigf'] = {'sigm', 'fut'}, ['siga'] = {'sigm', 'aor'}, ['indc'] = {'ind'}, ['subj'] = {'sub'}, ['impr'] = {'imp'}, ['inf'] = {'inf'}, ['ptc'] = {'part'}, ['ger'] = {'ger'}, ['sup'] = {'sup'}, ['nom'] = {'nom'}, ['gen'] = {'gen'}, ['dat'] = {'dat'}, ['acc'] = {'acc'}, ['abl'] = {'abl'}, } -- Call show_form() the forms in each non-generic slot (where a -- generic slot is something like pres_actv_indc that covers a whole -- row of slots), converting the forms to a string consisting of -- comma-separated links with accelerators in them. local function convert_forms_into_links(data) local accel_lemma, forms = data.actual_lemma[1], data.forms for slot in iter_slots(false, false) do local slot_parts = split(slot, "_") local tags = {} for _, part in ipairs(slot_parts) do for _, tag in ipairs(parts_to_tags[part]) do insert(tags, tag) end end -- put the case first for verbal nouns local accel = {form = concat(tags, "|"), lemma = accel_lemma} forms[slot] = show_form(forms[slot], accel) end end function export.get_valid_forms(raw_forms) local valid_forms = {} if raw_forms then if type(raw_forms) ~= "table" then raw_forms = {raw_forms} end for _, subform in ipairs(raw_forms) do if not form_is_empty(subform) then insert(valid_forms, subform) end end end return valid_forms end function export.get_lemma_forms(data, do_linked) local linked_prefix, forms = do_linked and "linked_" or "", data.forms for _, slot in ipairs(potential_lemma_slots) do local lemma_forms = export.get_valid_forms(forms[linked_prefix .. slot]) if table_len(lemma_forms) > 0 then return lemma_forms end end return nil end local function get_displayable_lemma(lemma_forms) if not lemma_forms then return "&mdash;" end local lemma_links = {} for _, subform in ipairs(lemma_forms) do insert(lemma_links, make_link(nil, subform, "term")) end return concat(lemma_links, ", ") end local tenses_display = { ["pres"] = "ပစ္စုပ္ပန်", ["impf"] = "ဟွံဍိုက်ပေၚ်", ["futr"] = "အနာဂတ်", ["perf"] = "မဍိုက်ပေၚ်", ["plup"] = "မဍိုက်ပေၚ်တဴ", ["futp"] = "future&nbsp;perfect", ["perp"] = "perfect&nbsp;potential", ["sigf"] = "sigmatic&nbsp;future", ["siga"] = "sigmatic&nbsp;aorist" } local voices_display = { ["actv"] = "မစိုပ်တရဴ", ["pasv"] = "ဟွံတဝ်စၞေဟ်", } local moods_display = { ["indc"] = "စၞောန်ထ္ၜး", ["subj"] = "အရေဝ်နိဒါန်", ["impr"] = "ပါဲဗလေတ်ဟွံဗၠး", } --[[ local nonfins = { ["inf"] = "ကြိယာဟွံကၠောံ", ["ptc"] = "လုပ်ကၠောန်စွံလဝ်", } --]] --[[ local verbalnouns = { ["ger"] = "ကြိယာစၞးနာမ်", ["sup"] = "ဂၠဝ်", } --]] --[[ local cases = { ["nom"] = "မဒုၚ်ယၟု", ["gen"] = "ဗဳဇဂကူ", ["dat"] = "ပြကမ္မကာရက", ["acc"] = "ကမ္မကာရက", ["abl"] = "ပရေၚ်မလၚ်", } --]] local function make_row(data, prefixes, headspan, cellspan, rowslot, rowname, class, fn) local row = {} if rowname then insert(row, ('\n! class="%s"%s | %s%s'):format(class, headspan == 1 and "" or (' colspan="%d"'):format(headspan), rowname, fn or "")) end local has_row, forms = false, data.forms if not form_is_empty(forms[rowslot]) then if type(forms[rowslot]) == "table" then if table_len(forms[rowslot]) > 1 then error("Row slot " .. rowslot .. " cannot have more than one value.") end forms[rowslot] = forms[rowslot][1] end insert(row, '\n! colspan="12" class="roa-compound-row" |' .. forms[rowslot]) has_row = true else for _, prefix in ipairs(prefixes) do local slot = prefix .. (rowslot and "_" .. rowslot or "") insert(row, ('\n| colspan="%d" | '):format(cellspan) .. forms[slot] .. ( data.form_footnote_indices[slot] == nil and "" or '<sup class="roa-red-superscript">' .. data.form_footnote_indices[slot] .. "</sup>" )) if not form_is_empty(forms[slot]) then has_row = true end end end return has_row and concat(row) or false end local function make_group(data, _tenses, voice, mood, class) local group = {} for _, tense in ipairs(_tenses) do local fn = "" if tense == "sigf" or tense == "siga" then fn = data.form_footnote_indices["sigm"] fn = fn and ('<sup class="roa-red-superscript">' .. fn .. "</sup>") or "" end local row = make_row(data, persons, 1, 2, tense .. "_" .. voice .. "_" .. mood, tenses_display[tense], class, fn) if row then insert(group, row) end end return #group > 0 and ('\n|-\n! rowspan="' .. tostring(#group) .. '" class="' .. class .. '" | ' .. voices_display[voice] .. concat(group, "\n|-")) or false end local function make_section(data, mood, _tenses) local section, name = {}, moods_display[mood] local class = "roa-" .. name .. "-left-rail" for _, voice in ipairs(voices) do local group = make_group(data, _tenses, voice, mood, class) if group then insert(section, group) end end if #section == 0 then return "" end return (([=[ |- ! colspan="2" rowspan="2" class="%CLASS" | %NAME ! colspan="6" class="%CLASS" | ''ကိုန်ဨကဝုစ်'' ! colspan="6" class="%CLASS" | ''ကိုန်ဗဟုဝစ်'' |- ! colspan="2" class="%CLASS" style="width:12.5%;" | [[first person|ပထမ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[second person|ဒုတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[third person|တတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[first person|ပထမ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[second person|ဒုတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[third person|တတိယ]]]=]):gsub("%%%u+", function(m) return m == "%NAME" and name or m == "%CLASS" and class or m end)) .. concat(section) end local function make_indc_rows(data) return make_section(data, "indc", indc_tenses) end local function make_subj_rows(data) return make_section(data, "subj", subj_tenses) end local function make_impr_rows(data) return make_section(data, "impr", impr_tenses) end local function get_nonfin_cells(t) local cells = {} for _, f in ipairs{"inf", "ptc"} do for _, v in ipairs(voices) do insert(cells, t .. "_" .. v .. "_" .. f) end end return cells end local function make_nonfin_rows(data) local nonfin = {} for _, t in ipairs(nonfin_tenses) do local row = make_row(data, get_nonfin_cells(t), 2, 3, nil, tenses_display[t], "roa-nonfinite-header") if row then insert(nonfin, row) end end if #nonfin == 0 then return "" end return [=[ |- ! colspan="2" rowspan="2" class="roa-nonfinite-header" | ဗီုပြၚ်ဟွံတွဵုဒနက် ! colspan="6" class="roa-nonfinite-header" | ကြိယာဟွံကၠောံ ! colspan="6" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ် |- ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | မချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | ဟွံချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | မချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | ဟွံချဳဒရာၚ် |-]=] .. concat(nonfin, "\n|-") end local function make_vn_rows(data) local vn = make_row(data, {"gen_ger", "dat_ger", "acc_ger", "abl_ger", "acc_sup", "abl_sup"}, nil, 2, nil, nil, "roa-nonfinite-header") if not vn then return "" end return [=[ |- ! colspan="2" rowspan="3" class="roa-nonfinite-header" | နာမ်သ္ပအရီုဂမၠိုၚ် ! colspan="8" class="roa-nonfinite-header" | ကြိယာစၞးနမ် ! colspan="4" class="roa-nonfinite-header" | ဂၠဝ် |- ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ဗဳဇဂကူ ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပြကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပရေၚ်မလၚ် ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပရေၚ်မလၚ် |-]=] .. vn end local function make_footnotes(data) local tbl, i = {}, 0 for k, v in pairs(data.footnotes) do i = i + 1 tbl[i] = '<sup class="roa-red-superscript">' .. tostring(k) .. '</sup>' .. v .. '<br>' end return concat(tbl) end -- Make the table local function make_table(data) data.actual_lemma = export.get_lemma_forms(data) convert_forms_into_links(data) local title = data.title return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. [=[ <div class="NavFrame"> <div class="NavHead"> &nbsp;&nbsp;&nbsp;Conjugation of ]=] .. get_displayable_lemma(data.actual_lemma) .. (table_len(title) > 0 and " (" .. concat(title, ", ") .. ")" or "") .. [=[</div> <div class="NavContent"> {| class="roa-inflection-table" data-toggle-category="inflection" ]=] .. make_indc_rows(data) .. make_subj_rows(data) .. make_impr_rows(data) .. make_nonfin_rows(data) .. make_vn_rows(data) .. [=[ |}</div></div>]=].. make_footnotes(data) end local function checkexist(data) if NAMESPACE ~= "" then return end local outerbreak = false local categories = data.categories for _, conjugation in pairs(data.forms) do if conjugation then if type(conjugation) ~= "table" then conjugation = {conjugation} end for _, conj in ipairs(conjugation) do if not cfind(conj, " ") and not cfind(conj, "[") then local physical_page = lang:logicalToPhysical(lang:stripDiacritics(conj)) local t = mw.title.new(physical_page) if t and not t:getContent() then -- insert_if_not(categories, "Latin verbs with red links in their inflection tables") outerbreak = true break end end end end if outerbreak then break end end end -- functions for creating external search hyperlinks local function cleanup(x) x:gsub("[[%]]", "") :gsub(" ", "+") return toNFC((ugsub(toNFD(x), "[^%w]+", ""))) end local function flatten_values(t) t = flatten(t) local i = 1 while true do local v = t[i] if v == nil then return t elseif cfind(v, "<") then remove(t, i) else t[i] = cleanup(v) i = i + 1 end end end local function link_google_books(verb, forms, domain) local function partition_XS_into_N(XS, N) local count = 0 local mensae = {} for _, v in pairs(XS) do if count % N == 0 then mensae[#mensae+1] = {} end count = count + 1 mensae[#mensae][#(mensae[#mensae])+1] = v end return mensae end local function forms_N_to_link(fs, N, args, site) return '[https://www.google.com/search?'..args..'&q='..site..'+%22'.. concat(fs, "%22+OR+%22") ..'%22 '..N..']' end local function make_links_txt(fs, N, site) local args = site == "Books" and "tbm=bks&lr=lang_la" or "" local links = {} for k,v in pairs(partition_XS_into_N(fs, N)) do links[#links+1] = forms_N_to_link(v,k,args,site=="Books" and "" or site) end return concat(links, ' - ') end return "Google "..domain.." forms of "..verb.." : "..make_links_txt(forms, 30, domain) end -- The main new entry point. function export.show(frame) local parent_args = frame:getParent().args local data, typeinfo = export.make_data(parent_args) if type(data) == "string" then -- json=1 specified return data end local domain = frame:getParent().args['search'] -- Test code to compare existing module to new one. if test_new_la_verb_module then local m_new_la_verb = require("Module:User:Benwing2/la-verb") local miscdata = { title = data.title, categories = data.categories, } local new_parent_args = frame:getParent().args local newdata = m_new_la_verb.make_data(new_parent_args) local newmiscdata = { title = newdata.title, categories = newdata.categories, } local all_verb_props = {"forms", "form_footnote_indices", "footnotes", "miscdata"} local difconj = false for _, prop in ipairs(all_verb_props) do local table = prop == "miscdata" and miscdata or data[prop] local newtable = prop == "miscdata" and newmiscdata or newdata[prop] for key, val in pairs(table) do local newval = newtable[key] if not forms_equal(val, newval) then -- Uncomment this to display the particular key and -- differing forms. -- error(key .. " " .. (val and concat_vals(val) or "nil") .. " || " .. (newval and concat_vals(newval) or "nil")) difconj = true break end end if difconj then break end -- Do the comparison the other way as well in case of extra keys -- in the new table. for key, newval in pairs(newtable) do local val = table[key] if not forms_equal(val, newval) then -- Uncomment this to display the particular key and -- differing forms. -- error(key .. " " .. (val and concat_vals(val) or "nil") .. " || " .. (newval and concat_vals(newval) or "nil")) difconj = true break end end if difconj then break end end track(difconj and "different-conj" or "same-conj") end if typeinfo.subtypes.suffix then data.categories = {} end -- Check if the links to the verb forms exist -- Has to happen after other categories are removed for suffixes checkexist(data) if domain == nil then return make_table(data) .. m_utilities.format_categories(data.categories, lang) end local verb = data['forms']['1s_pres_actv_indc'] ~= nil and ('[[' .. toNFC((ugsub(toNFD(data['forms']['1s_pres_actv_indc']), '[^%w]+', ""))) .. '|' .. data['forms']['1s_pres_actv_indc'] .. ']]') or 'verb' return link_google_books(verb, flatten_values(data['forms']), domain) end return export ov8ns9zfjp9l8r9idx28zqyjb2m4q0z 397224 397222 2026-06-19T16:25:25Z 咽頭べさ 33 397224 Scribunto text/plain -- TODO: -- 1. (DONE) detect_decl_and_subtypes doesn't do anything with perf_stem or supine_stem. -- 2. (DONE) Should error on bad subtypes. -- 3. Make sure Google Books link still works. -- 4. (DONE) Add 4++ that has alternative perfects -īvī/-iī. -- 5. (DONE) If sup but no perf, allow passive perfect forms. -- 6. (DONE) Remove no-actv-perf. -- 7. (DONE) Support plural prefix/suffix and plural passive prefix/suffix -- 8. Delegate title line generation to [[Module:la-headword]]. -- 9. Automatic forms of slots which depend on the values of other slots should take into account overrides on the other slot: -- futr_actv_ptc: determines futr_actv_inf and perp_actv_inf -- perf_pasv_ptc: determines perf_pasv_indc, plup_pasv_indc, futp_pasv_indc, perf_pasv_inf and futp_pasv_inf (with changes if deponent/semideponent etc) -- acc_sup: determines futr_pasv_inf (and futr_actv_inf if there's no futr_pasv_ptc) -- 10. Handle "revertor"-type: deponent in the present, but not in the perfect. -- If enabled, compare this module with new version of module to make -- sure all conjugations are the same. local export = {} local test_new_la_verb_module = false local m_la_headword = require("Module:la-headword") local m_la_nominal = require("Module:la-nominal") local m_la_utilities = require("Module:la-utilities") local m_links = require("Module:links") local m_table = require("Module:table") local m_utilities = require("Module:utilities") local lang = require("Module:languages").getByCode("la") local sc = require("Module:scripts").getByCode("Latn") local allowed_subtypes = mw.loadData("Module:la-verb/data").allowed_subtypes local PAGENAME = mw.loadData("Module:headword/data").pagename local NAMESPACE = mw.title.getCurrentTitle().nsText if NAMESPACE == "Reconstruction" then PAGENAME = "*" .. PAGENAME end -- Conjugations are the functions that do the actual -- conjugating by creating the forms of a basic verb. -- They are defined further down. local make_conjugation = {} local add_form = m_la_utilities.add_form local concat = table.concat local do_generate_noun_forms = m_la_nominal.do_generate_noun_forms local do_generate_adj_forms = m_la_nominal.do_generate_adj_forms local dump = mw.dumpObject local flatten = m_table.flatten local form_contains = m_la_utilities.form_contains local form_is_empty = m_la_utilities.form_is_empty local forms_equal = m_la_utilities.forms_equal local full_link = m_links.full_link local insert = table.insert local insert_if_not = m_table.insertIfNot local ipairs = ipairs local pairs = pairs local pattern_escape = require("Module:string utilities").pattern_escape local remove = table.remove local remove_forms = m_la_utilities.remove_forms local remove_links = m_links.remove_links local split = mw.text.split local table_len = m_table.length local toNFC = mw.ustring.toNFC local toNFD = mw.ustring.toNFD local tostring = tostring local type = type local u = mw.ustring.char local ugsub = mw.ustring.gsub local umatch = mw.ustring.match local unpack = unpack or table.unpack -- Lua 5.2 compatibility local usub = mw.ustring.sub local MACRON = u(0x304) local BREVE = u(0x306) local TREMA = u(0x308) local LENGTH = MACRON .. "?" .. BREVE .. "?" .. TREMA .. "?" local vowel = "[aeiouyAEIOUY]" local generic_slots = {} local non_generic_slots = {} local potential_lemma_slots = { "1s_pres_actv_indc", -- regular "3s_pres_actv_indc", -- impersonal "1s_perf_actv_indc", -- "coepī" "3s_perf_actv_indc", -- doesn't occur? "2s_pres_actv_impr", -- "cedo" } local persons = {"1s", "2s", "3s", "1p", "2p", "3p"} local persons_2 = {"2s", "2p"} local persons_23 = {"2s", "3s", "2p", "3p"} local function handle_person(t, v, mood) local non_pers_slot = t .. "_" .. v .. "_" .. mood insert(generic_slots, non_pers_slot) for _, p in ipairs(persons) do insert(non_generic_slots, p .. "_" .. non_pers_slot) end end local voices = {"actv", "pasv"} local indc_tenses = {"pres", "impf", "futr", "perf", "plup", "futp", "sigf"} local subj_tenses = {"pres", "impf", "perf", "plup", "siga"} local impr_tenses = {"pres", "futr"} local nonfin_tenses = {"pres", "futr", "perf", "futp", "perp"} for _, v in ipairs(voices) do for _, t in ipairs(indc_tenses) do handle_person(t, v, "indc") end for _, t in ipairs(subj_tenses) do handle_person(t, v, "subj") end for _, t in ipairs(impr_tenses) do handle_person(t, v, "impr") end for _, f in ipairs{"inf", "ptc"} do for _, t in ipairs(nonfin_tenses) do insert(non_generic_slots, t .. "_" .. v .. "_" .. f) end end end insert(non_generic_slots, "sigm_actv_inf") local ger_cases = {"gen", "dat", "acc", "abl"} for _, c in ipairs(ger_cases) do insert(non_generic_slots, c .. "_ger") end local sup_cases = {"acc", "abl"} for _, c in ipairs(sup_cases) do insert(non_generic_slots, c .. "_sup") end local function track(page) require("Module:debug").track("la-verb/" .. page) end -- Constant version of :find() local function cfind(str, text) return str:find(text, nil, true) end -- Used for testing differences between production and sandbox module; see `test_new_la_verb_module` arm in show(). -- Do not delete! local function concat_vals(val) if type(val) == "table" then return table.concat(val, ",") else return val end end local function make_link(page, display, face, accel) return full_link({term = page, alt = display, lang = lang, sc = sc, accel = accel}, face) end -- Iterate over all the "slots" associated with a verb declension, where a slot -- is e.g. 1s_pres_actv_indc (a non-generic slot), pres_actv_indc (a generic slot), -- or linked_1s_pres_actv_indc (a linked slot). Only include the generic and/or linked -- slots if called for. local function iter_slots(include_generic, include_linked) -- stage == 1: non-generic slots -- stage == 2: generic slots -- stage == 3: linked slots local stage = 1 local slotnum = 0 local max_slotnum = table_len(non_generic_slots) return function() slotnum = slotnum + 1 if slotnum > max_slotnum then slotnum = 1 stage = stage + 1 if stage == 2 then if include_generic then max_slotnum = table_len(generic_slots) else stage = stage + 1 end end if stage == 3 then if include_linked then max_slotnum = table_len(potential_lemma_slots) else stage = stage + 1 end end if stage > 3 then return nil end end if stage == 1 then return non_generic_slots[slotnum] elseif stage == 2 then return generic_slots[slotnum] end return "linked_" .. potential_lemma_slots[slotnum] end end local function ine(val) if val == "" then return nil end return val end -- Construct a simple one- or two-part link, which will be put through full_link later. local function make_raw_link(page, display) if page and display then return "[[" .. page .. "|" .. display .. "]]" elseif page then return "[[" .. page .. "]]" end return display end local function split_prefix_and_base(lemma, main_verbs) lemma = toNFD(lemma) for _, main in ipairs(main_verbs) do local orig_main = main main = toNFD(main) local main_pattern = pattern_escape(main) local prefix = umatch(lemma, "^(.*)" .. main_pattern .. "$") -- If `main` starts with a vowel and there's no macron or trema, try it with a trema iff it's preceded by a vowel. if ( not prefix and main:match("^" .. vowel) and not umatch(main, "^.[" .. MACRON .. TREMA .. "]") ) then main_pattern = pattern_escape((main:gsub("^.", "%0" .. TREMA))) prefix = umatch(lemma, "^(.*" .. vowel .. LENGTH .. ")" .. main_pattern .. "$") end if prefix then return toNFC(prefix), orig_main end end require("Module:collation").sort(main_verbs, lang) error(("Conjugation %s may only be used with %s, or a derived verb that ends with one of them"):format( dump("irreg"), m_table.serialCommaJoin(main_verbs, {conj = "or", dontTag = true, dump = true}) )) end -- Given an ending (or possibly a full regex matching the entire lemma, if -- a regex group is present), return the base minus the ending, or nil if -- the ending doesn't match. local function extract_base(lemma, ending) if cfind(ending, "(") then return umatch(lemma, ending) end return umatch(lemma, "^(.*)" .. ending .. "$") end local function check_spec(lemma, spec, specified_subtypes) local ending, subtypes, incompatible = unpack(spec) if incompatible then for _, subtype in ipairs(incompatible) do if specified_subtypes[subtype] then return end end end for _, subtype in ipairs(subtypes) do -- A cancelled subtype will have the value false. if specified_subtypes[subtype] == false then return end end local base = extract_base(lemma, ending) if base then return base, subtypes end end -- Given ENDINGS_AND_SUBTYPES (a list of pairs of endings with associated -- subtypes, where each pair consists of a single ending spec and a list of -- subtypes), check each ending in turn against LEMMA. If it matches, return -- the pair BASE, SUBTYPES where BASE is the remainder of LEMMA minus the -- ending, and SUBTYPES is the subtypes associated with the ending. If no -- endings match, throw an error if DECLTYPE is non-nil, mentioning the -- DECLTYPE (the user-specified declension); but if DECLTYPE is nil, just -- return the pair nil, nil. -- -- The ending spec in ENDINGS_AND_SUBTYPES is one of the following: -- -- 1. A simple string, e.g. "ātur", specifying an ending. -- 2. A regex that should match the entire lemma (it should be anchored at -- the beginning with ^ and at the end with $), and contains a single -- capturing group to match the base. local function get_subtype_by_ending(lemma, conj, specified_subtypes, specs) for _, spec in ipairs(specs) do local base, subtypes = check_spec(lemma, spec, specified_subtypes) if base then return base, subtypes end end if conj then error("Unrecognized ending for conjugation " .. conj .. " verb: " .. lemma) end return nil, nil end local genders = {"m", "f", "n", "mp", "fp", "np"} local irreg_verbs = { "aiō", "aiiō", "aijō", "ajō", "cedo", -- final "o" not "ō" "dīcō", "dūcō", "edō", -- FIXME: Will praedō cause problems? "ëdō", "dō", -- list after edō "eō", "ëō", "faciō", "ferō", "fīō", "inquam", "mālō", "nōlō", "possum", "sum", "volō", } local irreg_verbs_conj = { ["aiō"] = "3rd-io", ["aiiō"] = "3rd-io", ["aijō"] = "3rd-io", ["ajō"] = "3rd-io", ["cedo"] = "irreg", ["dīcō"] = "3rd", ["dō"] = "1st", ["dūcō"] = "3rd", ["edō"] = "3rd", ["ëdō"] = "3rd", ["eō"] = "irreg", ["ëō"] = "irreg", ["faciō"] = "3rd-io", ["ferō"] = "3rd", ["fīō"] = "3rd", ["inquam"] = "irreg", ["mālō"] = "irreg", ["nōlō"] = "irreg", ["possum"] = "irreg", ["sum"] = "irreg", ["volō"] = "irreg", } local function detect_decl_and_subtypes(args) local subtypes, specs = {}, split(args[1] or "", "%.") local conj_arg = remove(specs, 1) for _, spec in ipairs(specs) do subtypes[spec:gsub("%-", "")] = spec:sub(1, 1) ~= "-" end local orig_lemma = toNFC(args[2] or PAGENAME) local lemma = remove_links(orig_lemma) local base, conj, irreg, detected_subtypes local base_conj_arg, auto_perf_supine = conj_arg:match("^([1-4/]+)(%+%+?)$") if base_conj_arg then if ( (auto_perf_supine == "++" and not (base_conj_arg == "4")) or (auto_perf_supine == "+" and not (base_conj_arg == "1" or base_conj_arg == "2" or base_conj_arg == "4")) ) then error("Conjugation type " .. base_conj_arg .. auto_perf_supine .. " not allowed") end conj_arg = base_conj_arg end if orig_lemma:sub(1, 1) == "-" then subtypes.suffix = true end local auto_perf, auto_supine, auto_sigm if subtypes.sigmpasv then subtypes.sigm = true end if subtypes.sigm then auto_sigm = true end if conj_arg == "1" then conj = "1st" base, detected_subtypes = get_subtype_by_ending(lemma, "1", subtypes, { {"ō", {}}, {"or", {"depon"}}, {"at", {"impers"}}, {"ātur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"ā", {"imponly"}}, {"āre", {"depon", "imponly"}}, }) if auto_perf_supine then if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base else auto_perf = base .. "āv" auto_supine = base .. "āt" end end if auto_sigm then auto_sigm = base .. "āss" end if subtypes.suffix then subtypes.p3inf = true end elseif conj_arg == "2" then conj = "2nd" base, detected_subtypes = get_subtype_by_ending(lemma, "2", subtypes, { {"eō", {}}, {"eor", {"depon"}}, {"et", {"impers"}}, {"ētur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"ē", {"imponly"}}, {"ēre", {"depon", "imponly"}}, }) if auto_perf_supine then if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base else auto_perf = base .. "u" auto_supine = base .. "it" end end if auto_sigm then auto_sigm = base .. "ēss" end elseif conj_arg == "3" or conj_arg == "3/4" then base, detected_subtypes = get_subtype_by_ending(lemma, conj_arg == "3/4" and "3/4" or nil, subtypes, { {"iō", {"i"}}, {"ior", {"depon", "i"}}, }) if base then conj = conj_arg == "3/4" and "3rd/4th" or "3rd-io" else base, detected_subtypes = get_subtype_by_ending(lemma, "3", subtypes, { {"ō", {}}, {"or", {"depon"}}, {"it", {"impers"}, {"nopres"}}, {"itur", {"depon", "impers"}}, {"ī", {"nopres"}}, {"it", {"nopres", "impers"}}, {"e", {"imponly"}, {"depon"}}, {"ere", {"depon", "imponly"}}, }) if subtypes.i then conj = "3rd-io" else conj = "3rd" end end if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base end if subtypes.suffix then auto_perf = "-" auto_supine = "-" auto_sigm = "-" end elseif conj_arg == "4" then conj = "4th" base, detected_subtypes = get_subtype_by_ending(lemma, "4", subtypes, { {"iō", {}}, {"ior", {"depon"}}, {"it", {"impers"}, {"nopres"}}, {"ītur", {"depon", "impers"}}, {"ī", {"nopres"}, {"imponly"}}, {"it", {"nopres", "impers"}}, {"ī", {"imponly"}}, {"īre", {"depon", "imponly"}}, }) if subtypes.nopres or subtypes.perfaspres or detected_subtypes.nopres then auto_perf = base elseif auto_perf_supine == "++" then auto_perf = base .. "īv/" .. base .. "i" auto_supine = base .. "īt" elseif auto_perf_supine == "+" then auto_perf = base .. "īv" auto_supine = base .. "īt" end if auto_sigm then auto_sigm = base .. "īss" end elseif conj_arg == "irreg" then irreg = true local prefix prefix, base = split_prefix_and_base(lemma, irreg_verbs) conj = irreg_verbs_conj[base] args[1] = base args[2] = prefix -- args[3] and args[4] are used by ferō and sum and stay where they are detected_subtypes = {} else error("Unrecognized conjugation: " .. dump(conj_arg)) end for _, detected_subtype in ipairs(detected_subtypes) do if detected_subtype == "impers" and subtypes["3only"] then -- 3only overrides impers elseif detected_subtype == "nopres" and subtypes.perfaspres then -- perfaspres overrides nopres else subtypes[detected_subtype] = true end end -- Get the gender of the verb's complement. local gender for _, g in ipairs(genders) do if subtypes[g] then if gender then error(("Only one of the subtypes %s may be specified"):format( m_table.serialCommaJoin(genders, {conj = "or", dontTag = true, dump = true}) )) end gender = g end end if not gender then gender = (subtypes.impers or subtypes.passimpers or subtypes["3only"] or subtypes["pass3only"]) and "n" or "m" end if subtypes.nopres or subtypes.perfaspres then subtypes.noger = true end if not irreg then args[1] = base local perf_stem, supine_stem if subtypes.depon or subtypes.semidepon or subtypes.nopres or subtypes.perfaspres then supine_stem = args[3] or auto_supine if supine_stem == "-" and not subtypes.suffix then supine_stem = nil end if not supine_stem then if subtypes.depon or subtypes.semidepon then subtypes.noperf = true end subtypes.nosup = true end if subtypes.sigm then local sigm_stem = args[5] or auto_sigm if sigm_stem == "-" and not subtypes.suffix then sigm_stem = nil end args[5] = sigm_stem end args[2] = supine_stem args[3] = nil else perf_stem = args[3] or auto_perf if perf_stem == "-" and not subtypes.suffix then perf_stem = nil end if not perf_stem then subtypes.noperf = true end supine_stem = args[4] or auto_supine if supine_stem == "-" and not subtypes.suffix then supine_stem = nil end if not supine_stem then subtypes.nosup = true end if subtypes.sigm then local sigm_stem = args[5] or auto_sigm if sigm_stem == "-" and not subtypes.suffix then sigm_stem = nil end args[5] = sigm_stem end args[2] = perf_stem args[3] = supine_stem end args[4] = nil end if auto_sigm and subtypes.depon then subtypes.sigmpasv = true end for subtype in pairs(subtypes) do if ( subtype == "i" and not (conj_arg == "3" or conj_arg == "3/4") or not allowed_subtypes[subtype] ) then error(("Unrecognized verb subtype %s for this conjugation"):format(dump(subtype))) end end return conj, irreg, subtypes, orig_lemma, lemma, gender end local function _add_forms(forms, keytype, persons, stem, ...) for i, p in ipairs(persons) do local suf = select(i, ...) if suf ~= nil then add_form(forms, p .. "_" .. keytype, stem, suf) end end end -- Add a value to all persons/numbers of a given tense/voice/mood, e.g. -- "pres_actv_indc" (specified by KEYTYPE). If a value is already present -- in a key, it won't be added again. -- -- The value for a given person/number combination is formed by concatenating -- STEM and the appropriate suffix for that person/number, e.g. SUF1S. The -- suffix can be a list, in which case STEM will be concatenated in turn to -- each value in the list and all the resulting forms added to the key. To -- not add a value for a specific person/number, specify nil or {} for the -- suffix for the person/number. local function add_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons, stem, ...) end -- Add a value to the 2nd person (singular and plural) of a given -- tense/voice/mood. This works like add_forms(). local function add_2_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons_2, stem, ...) end -- Add a value to the 2nd and 3rd persons (singular and plural) of a given -- tense/voice/mood. This works like add_forms(). local function add_23_forms(forms, keytype, stem, ...) return _add_forms(forms, keytype, persons_23, stem, ...) end local function override(args, data) local forms = data.forms for slot in iter_slots(true, false) do if args[slot] then forms[slot] = split(args[slot], "/") end end end local function set_linked_forms(data, typeinfo) -- Generate linked variants of slots that may be the lemma. -- If the form is the same as the lemma (with links removed), -- substitute the original lemma (with links included). local forms = data.forms for _, slot in ipairs(potential_lemma_slots) do local formval = forms[slot] local linked_forms = {} if formval then if type(formval) ~= "table" then formval = {formval} end for _, form in ipairs(formval) do if form == typeinfo.lemma then insert(linked_forms, typeinfo.orig_lemma) else insert(linked_forms, form) end end end forms["linked_" .. slot] = linked_forms end end local function link_words_if_unlinked(affix) return affix:match("%[%[.-]]") and affix or ugsub(affix, "%w+", "[[%0]]") end local function get_affix(data, key) local affix = data[key] or "" return link_words_if_unlinked(affix), remove_links(affix) end -- Add prefixes and suffixes to non-generic slots. The generic slots (e.g. -- perf_pasv_indc, whose text indicates to use the past passive participle + -- the present active indicative of [[sum]]), handle prefixes and suffixes -- themselves in make_perfect_passive(). local function add_prefix_suffix(data) if not data.prefix and not data.suffix then return end local active_prefix, active_prefix_no_links = get_affix(data, "prefix") local passive_prefix, passive_prefix_no_links = get_affix(data, "passive_prefix") local plural_prefix, plural_prefix_no_links = get_affix(data, "plural_prefix") local plural_passive_prefix, plural_passive_prefix_no_links = get_affix(data, "plural_passive_prefix") local active_suffix, active_suffix_no_links = get_affix(data, "suffix") local passive_suffix, passive_suffix_no_links = get_affix(data, "passive_suffix") local plural_suffix, plural_suffix_no_links = get_affix(data, "plural_suffix") local plural_passive_suffix, plural_passive_suffix_no_links = get_affix(data, "plural_passive_suffix") local forms = data.forms for slot in iter_slots(false, true) do local prefix, suffix, prefix_no_links, suffix_no_links if cfind(slot, "pasv") and slot:match("[123]p") then prefix = plural_passive_prefix suffix = plural_passive_suffix prefix_no_links = plural_passive_prefix_no_links suffix_no_links = plural_passive_suffix_no_links elseif cfind(slot, "pasv") and not cfind(slot, "_inf") then prefix = passive_prefix suffix = passive_suffix prefix_no_links = passive_prefix_no_links suffix_no_links = passive_suffix_no_links elseif slot:match("[123]p") then prefix = plural_prefix suffix = plural_suffix prefix_no_links = plural_prefix_no_links suffix_no_links = plural_suffix_no_links else prefix = active_prefix suffix = active_suffix prefix_no_links = active_prefix_no_links suffix_no_links = active_suffix_no_links end local formval = forms[slot] if not form_is_empty(formval) then local affixed_forms = {} if type(formval) ~= "table" then formval = {formval} end for _, form in ipairs(formval) do if form_is_empty(form) then insert(affixed_forms, form) elseif slot:match("^linked") then -- If we're dealing with a linked slot, include the original -- links in the prefix/suffix and also add a link around the -- form itself if links aren't already present. (Note, above -- we early-exited if there was no prefix and no suffix.) if not form:match("%[%[.-]]") then form = "[[" .. form .. "]]" end insert(affixed_forms, prefix .. form .. suffix) elseif form:match("%[%[.-]]") then -- If not dealing with a linked slot, but there are links -- in the slot, include the original, potentially linked -- versions of the prefix and suffix (e.g. in perfect -- passive forms). insert(affixed_forms, prefix .. form .. suffix) else -- Otherwise, use the non-linking versions of the prefix and -- suffix so that the whole term (including prefix/suffix) -- gets linked. insert(affixed_forms, prefix_no_links .. form .. suffix_no_links) end end forms[slot] = affixed_forms end end end local function notes_override(args, data) local notes = {args["note1"], args["note2"], args["note3"]} for n, note in pairs(notes) do if note == "-" then data.footnotes[n] = nil elseif note == "p3inf" then data.footnotes[n] = "The present passive infinitive in ''-ier'' is a rare poetic form which is attested." elseif note == "poetsyncperf" then data.footnotes[n] = "At least one rare poetic syncopated perfect form is attested." elseif note == "sigm" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\")." elseif note == "sigmpasv" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\"). It is also attested as having a rare sigmatic future passive indicative form (\"will have been\"), which is not attested in the plural for any verb." elseif note == "sigmdepon" then data.footnotes[n] = "At least one use of the Old Latin \"sigmatic future\" tense is attested, which is used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, and, as the verb is deponent, takes the form of what would otherwise be the rare sigmatic future passive indicative tense (which is not attested in the plural for any verb)." elseif note then data.footnotes[n] = note end end if args["notes"] == "-" then data.footnotes = {} end end -- Space added by default; hyphens unchanged; underscore represents no space. local affix_joining_chars = { [""] = " ", ["-"] = "-", ["_"] = "", } local function normalize_prefix(prefix) return prefix and prefix:gsub("[%-_]?$", affix_joining_chars, 1) end local function normalize_suffix(suffix) return suffix and suffix:gsub("^[%-_]?", affix_joining_chars, 1) end local function handle_subtype_affix(args, affix, subtype_affix, normalize_func) if args[subtype_affix] then if not args[affix] then error(("Can't specify %s= without %s="):format(subtype_affix, affix)) end return normalize_func(args[subtype_affix]) end end local function handle_affix(args, data, affix, normalize_func) data[affix] = normalize_func(args[affix]) for _, subtype in ipairs{"passive", "plural"} do local subtype_affix = subtype .. "_" .. affix data[subtype_affix] = handle_subtype_affix(args, affix, subtype_affix, normalize_func) or data[affix] end -- First fall back to the passive (e.g. "poenās dare", where the plural noun -- is used with both singular and plural verbs, but there's a separate -- passive form ''poenae datur''), then to the plural prefix, then to the -- base prefix. local subtype_affix = "plural_passive_" .. affix data[subtype_affix] = handle_subtype_affix(args, affix, subtype_affix, normalize_func) or data["passive_" .. affix] or data["plural_" .. affix] or data[affix] end function export.make_data(parent_args, from_headword, def1, def2) local params = { [1] = {required = true, default = def1 or "1+"}, [2] = {required = true, default = def2 or "amō"}, [3] = true, [4] = true, [5] = true, prefix = true, passive_prefix = true, plural_prefix = true, plural_passive_prefix = true, suffix = true, passive_suffix = true, plural_suffix = true, plural_passive_suffix = true, label = true, note1= true, note2= true, note3= true, notes= true, -- examined directly in export.show() search = true, json = {type = "boolean"}, } for slot in iter_slots(true, false) do params[slot] = true end if from_headword then local list = {list = true} params.lemma = list params.id = true params.cat = list end local args = require("Module:parameters").process(parent_args, params) local conj, irreg, subtypes, orig_lemma, lemma, gender = detect_decl_and_subtypes(args) -- note: the addition of red superscripted footnotes ('<sup class="roa-red-superscript">' ... </sup>) is only implemented for the three form printing loops in which it is used local data = { forms = {}, title = {}, categories = args.cat and m_table.deepCopy(args.cat) or {}, form_footnote_indices = {}, footnotes = {}, id = args.id, overriding_lemma = args.lemma, gender = gender, } local typeinfo = { lemma = lemma, orig_lemma = orig_lemma, conj = conj, irreg = irreg, subtypes = subtypes, } handle_affix(args, data, "prefix", normalize_prefix) handle_affix(args, data, "suffix", normalize_suffix) -- Generate the verb forms make_conjugation(args, data, typeinfo) -- Generate the title text m_la_headword.verb_title(data.title, typeinfo, export.get_lemma_forms(data)) -- Override with user-set forms override(args, data) -- Set linked_* forms set_linked_forms(data, typeinfo) -- Prepend any prefixes, append any suffixes add_prefix_suffix(data) if args["label"] then insert_if_not(data.title, args["label"]) end notes_override(args, data) -- If json=1 specified, return a JSON string; used by bots if args.json then return require("Module:JSON").toJSON { data = data, typeinfo = typeinfo } end return data, typeinfo end local ptc_lemma_form = { ["m"] = "sg_m", ["f"] = "sg_f", ["n"] = "sg_n", ["mp"] = "pl_m", ["fp"] = "pl_f", ["np"] = "pl_n", } -- Make the gerund and gerundive/future passive participle. For the forms -- labeled "gerund", we generate both gerund and gerundive variants if there's -- a case-specific prefix or suffix for the case in question; otherwise we -- generate only the gerund per se. BASE is the stem (ending in -nd). -- UND_VARIANT, if true, means that a gerundive in -und should be generated -- along with a gerundive in -end. local function make_gerund(data, typeinfo, base, und_variant) local subtypes = typeinfo.subtypes if subtypes.noger then return end local forms, gender = data.forms, data.gender local slot = "nom_" .. ptc_lemma_form[gender] add_form(forms, "futr_pasv_ptc", "", do_generate_adj_forms({base .. "us<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms[slot]) if und_variant and not (subtypes.nound or base:match("[vV]end$") or umatch(base, "[uU]" .. LENGTH .. "end$")) then -- Per Lane's grammar section 899: "Verbs in -ere and -īre often have -- -undus, when not preceded by u or v, especially in formal style" -- There is also an optional exclusion if -undus is not attested add_form(forms, "futr_pasv_ptc", "", do_generate_adj_forms({base:gsub("end$", "und") .. "us<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms[slot]) end local ger_forms = do_generate_noun_forms({base .. "um<2>"}, "နာမ်", "bare").forms for _, case in ipairs(ger_cases) do for _, form in ipairs(ger_forms[case .. "_sg"]) do add_form(forms, case .. "_ger", "", form) end end end -- Conjugation functions local function get_regular_stems(args, typeinfo) local subtypes = typeinfo.subtypes -- Get the parameters if subtypes.nopres or subtypes.perfaspres then typeinfo.pres_stem = nil typeinfo.perf_stem = ine(args[1]) typeinfo.supine_stem = ine(args[2]) elseif subtypes.depon or subtypes.semidepon then -- Deponent and semi-deponent verbs don't have the perfective principal part. -- But optionally semi-deponent verbs do. typeinfo.pres_stem = ine(args[1]) typeinfo.perf_stem = nil typeinfo.supine_stem = ine(args[2]) else typeinfo.pres_stem = ine(args[1]) typeinfo.perf_stem = ine(args[2]) typeinfo.supine_stem = ine(args[3]) end if subtypes.sigm then typeinfo.sigm_stem = ine(args[5]) end -- Prepare stems if not (typeinfo.pres_stem or subtypes.nopres or subtypes.perfaspres) then -- Template: error("Present stem has not been provided") end if typeinfo.perf_stem then typeinfo.perf_stem = split(typeinfo.perf_stem, "/") else typeinfo.perf_stem = {} end if typeinfo.supine_stem then typeinfo.supine_stem = split(typeinfo.supine_stem, "/") else typeinfo.supine_stem = {} end if typeinfo.sigm_stem then typeinfo.sigm_stem = split(typeinfo.sigm_stem, "/") else typeinfo.sigm_stem = {} end end local function set_conj_categories(ord, data, typeinfo) local categories, subtypes = data.categories, typeinfo.subtypes -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs") if subtypes.depon then -- insert_if_not(categories, "Latin " .. ord .. " conjugation deponent verbs") end if subtypes.noperf then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing perfect stem") end if subtypes.nosup then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing supine stem") elseif subtypes.supfutractvonly then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with missing supine stem except in the future active participle") end local pres_stem = typeinfo.pres_stem if not pres_stem then return end pres_stem = pres_stem and pres_stem:gsub("[Qq]u", "\1") for _, perf_stem in ipairs(typeinfo.perf_stem) do perf_stem = perf_stem:gsub("[Qq]u", "\1") if perf_stem == pres_stem .. "āv" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -āv-") elseif perf_stem == pres_stem .. "ēv" then insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -ēv-") elseif perf_stem == pres_stem .. "īv" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -īv-") elseif perf_stem == pres_stem .. "i" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -i-") elseif perf_stem == pres_stem .. "u" then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -u-") elseif perf_stem == pres_stem then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with suffixless perfect") elseif perf_stem:match("[sx]$") then -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with perfect in -s- or -x-") else -- insert_if_not(categories, "Latin " .. ord .. " conjugation verbs with irregular perfect") end end end -- Form-generating functions local make_pres = {} make_pres["1st"] = function(data, typeinfo, pres_stem) local forms = data.forms local a = typeinfo.subtypes.shorta and "a" or "ā" -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "ō", "ās", "at", a .. "mus", a .. "tis", "ant") add_forms(forms, "impf_actv_indc", pres_stem, a .. "bam", a .. "bās", a .. "bat", a .. "bāmus", a .. "bātis", a .. "bant") add_forms(forms, "futr_actv_indc", pres_stem, a .. "bō", a .. "bis", a .. "bit", a .. "bimus", a .. "bitis", a .. "bunt") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "or", {a .. "ris", a .. "re"}, a .. "tur", a .. "mur", a .. "minī", "antur") add_forms(forms, "impf_pasv_indc", pres_stem, a .. "bar", {a .. "bāris", a .. "bāre"}, a .. "bātur", a .. "bāmur", a .. "bāminī", a .. "bantur") add_forms(forms, "futr_pasv_indc", pres_stem, a .. "bor", {a .. "beris", a .. "bere"}, a .. "bitur", a .. "bimur", a .. "biminī", a .. "buntur") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "em", "ēs", "et", "ēmus", "ētis", "ent") add_forms(forms, "impf_actv_subj", pres_stem, a .. "rem", a .. "rēs", a .. "ret", a .. "rēmus", a .. "rētis", a .. "rent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "er", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") add_forms(forms, "impf_pasv_subj", pres_stem, a .. "rer", {a .. "rēris", a .. "rēre"}, a .. "rētur", a .. "rēmur", a .. "rēminī", a .. "rentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ā", a .. "te") add_23_forms(forms, "futr_actv_impr", pres_stem, a .. "tō", a .. "tō", a .. "tōte", "antō") add_2_forms(forms, "pres_pasv_impr", pres_stem, a .. "re", a .. "minī") add_23_forms(forms, "futr_pasv_impr", pres_stem, a .. "tor", a .. "tor", nil, "antor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, a .. "re") add_form(forms, "pres_pasv_inf", pres_stem, a .. "rī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "āns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "and") end make_pres["2nd"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "eō", "ēs", "et", "ēmus", "ētis", "ent") add_forms(forms, "impf_actv_indc", pres_stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "futr_actv_indc", pres_stem, "ēbō", "ēbis", "ēbit", "ēbimus", "ēbitis", "ēbunt") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "eam", "eās", "eat", "eāmus", "eātis", "eant") add_forms(forms, "impf_actv_subj", pres_stem, "ērem", "ērēs", "ēret", "ērēmus", "ērētis", "ērent") -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ē", "ēte") add_23_forms(forms, "futr_actv_impr", pres_stem, "ētō", "ētō", "ētōte", "entō") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "eor", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") add_forms(forms, "impf_pasv_indc", pres_stem, "ēbar", {"ēbāris", "ēbāre"}, "ēbātur", "ēbāmur", "ēbāminī", "ēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "ēbor", {"ēberis", "ēbere"}, "ēbitur", "ēbimur", "ēbiminī", "ēbuntur") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "ear", {"eāris", "eāre"}, "eātur", "eāmur", "eāminī", "eantur") add_forms(forms, "impf_pasv_subj", pres_stem, "ērer", {"ērēris", "ērēre"}, "ērētur", "ērēmur", "ērēminī", "ērentur") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, "ēre", "ēminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ētor", "ētor", nil, "entor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ēre") add_form(forms, "pres_pasv_inf", pres_stem, "ērī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "ēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "end") end local function handle_old_impf(data, forms, pres_stem, ei, noteindex) add_forms(forms, "impf_actv_indc", pres_stem .. ei, "bam", "bās", "bat", "bāmus", "bātis", "bant") add_forms(forms, "impf_pasv_indc", pres_stem .. ei, "bar", {"bāris", "bāre"}, "bātur", "bāmur", "bāminī", "bantur") for slot in pairs(data.forms) do if cfind(slot, "impf") then data.form_footnote_indices[slot] = noteindex end end data.footnotes[noteindex] = "ကၠာ-ဝၚ်ဂန္ထ" end local function handle_old_futr(data, forms, pres_stem, ei, noteindex) add_forms(forms, "futr_actv_indc", pres_stem .. ei, "bō", "bis", "bit", "bimus", "bitis", "bunt") add_forms(forms, "futr_pasv_indc", pres_stem .. ei, "bor", {"beris", "bere"}, "bitur", "bimur", "biminī", "buntur") for slot in pairs(data.forms) do if cfind(slot, "futr") then data.form_footnote_indices[slot] = noteindex end end data.footnotes[noteindex] = "Pre-Classical." end make_pres["3rd"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "ō", "is", "it", "imus", "itis", "unt") add_forms(forms, "impf_actv_indc", pres_stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "futr_actv_indc", pres_stem, "am", "ēs", "et", "ēmus", "ētis", "ent") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "or", {"eris", "ere"}, "itur", "imur", "iminī", "untur") add_forms(forms, "impf_pasv_indc", pres_stem, "ēbar", {"ēbāris", "ēbāre"}, "ēbātur", "ēbāmur", "ēbāminī", "ēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "ar", {"ēris", "ēre"}, "ētur", "ēmur", "ēminī", "entur") if typeinfo.subtypes.oldimpffutr then handle_old_futr(data, forms, pres_stem, "ē", table_len(data.footnotes) + 1) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "impf_actv_subj", pres_stem, "erem", "erēs", "eret", "erēmus", "erētis", "erent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "ar", {"āris", "āre"}, "ātur", "āmur", "āminī", "antur") add_forms(forms, "impf_pasv_subj", pres_stem, "erer", {"erēris", "erēre"}, "erētur", "erēmur", "erēminī", "erentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "e", "ite") add_23_forms(forms, "futr_actv_impr", pres_stem, "itō", "itō", "itōte", "untō") add_2_forms(forms, "pres_pasv_impr", pres_stem, "ere", "iminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "itor", "itor", nil, "untor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ere") add_form(forms, "pres_pasv_inf", pres_stem, "ī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "ēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "end", "und-variant") end make_pres["3rd-io"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "is", "it", "imus", "itis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"eris", "ere"}, "itur", "imur", "iminī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, "erem", "erēs", "eret", "erēmus", "erētis", "erent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, "erer", {"erēris", "erēre"}, "erētur", "erēmur", "erēminī", "erentur") -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "e", "ite") add_23_forms(forms, "futr_actv_impr", pres_stem, "itō", "itō", "itōte", "iuntō") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, "ere", "iminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "itor", "itor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "ere") add_form(forms, "pres_pasv_inf", pres_stem, "ī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end make_pres["3rd/4th"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "ī̆s", "it", "ī̆mus", "ī̆tis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"eris", "īris", "ere", "īre"}, "ī̆tur", "ī̆mur", "ī̆minī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, {"erem", "īrem"}, {"erēs", "īrēs"}, {"eret", "īret"}, {"erēmus", "īrēmus"}, {"erētis", "īrētis"}, {"erent", "īrent"}) -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, {"erer", "īrer"}, {"erēris", "īrēris", "erēre", "īrēre"}, {"erētur", "īrētur"}, {"erēmur", "īrēmur"}, {"erēminī", "īrēminī"}, {"erentur", "īrentur"}) -- Active imperative add_2_forms(forms, "pres_actv_impr", pres_stem, {"e", "ī"}, "ī̆te") add_23_forms(forms, "futr_actv_impr", pres_stem, "ī̆tō", "ī̆tō", "ī̆tōte", "iuntō") -- Passive imperative add_2_forms(forms, "pres_pasv_impr", pres_stem, {"ere", "īre"}, "ī̆minī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ī̆tor", "ī̆tor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, {"ere", "īre"}) add_form(forms, "pres_pasv_inf", pres_stem, {"ī", "īrī"}) -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end make_pres["4th"] = function(data, typeinfo, pres_stem) local forms = data.forms -- Active imperfective indicative add_forms(forms, "pres_actv_indc", pres_stem, "iō", "īs", "it", "īmus", "ītis", "iunt") add_forms(forms, "impf_actv_indc", pres_stem, "iēbam", "iēbās", "iēbat", "iēbāmus", "iēbātis", "iēbant") add_forms(forms, "futr_actv_indc", pres_stem, "iam", "iēs", "iet", "iēmus", "iētis", "ient") -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", pres_stem, "ior", {"īris", "īre"}, "ītur", "īmur", "īminī", "iuntur") add_forms(forms, "impf_pasv_indc", pres_stem, "iēbar", {"iēbāris", "iēbāre"}, "iēbātur", "iēbāmur", "iēbāminī", "iēbantur") add_forms(forms, "futr_pasv_indc", pres_stem, "iar", {"iēris", "iēre"}, "iētur", "iēmur", "iēminī", "ientur") if typeinfo.subtypes.oldimpffutr then local noteindex = table_len(data.footnotes) + 1 handle_old_impf(data, forms, pres_stem, "ī", noteindex) handle_old_futr(data, forms, pres_stem, "ī", noteindex) end -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", pres_stem, "iam", "iās", "iat", "iāmus", "iātis", "iant") add_forms(forms, "impf_actv_subj", pres_stem, "īrem", "īrēs", "īret", "īrēmus", "īrētis", "īrent") -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", pres_stem, "iar", {"iāris", "iāre"}, "iātur", "iāmur", "iāminī", "iantur") add_forms(forms, "impf_pasv_subj", pres_stem, "īrer", {"īrēris", "īrēre"}, "īrētur", "īrēmur", "īrēminī", "īrentur") -- Imperative add_2_forms(forms, "pres_actv_impr", pres_stem, "ī", "īte") add_23_forms(forms, "futr_actv_impr", pres_stem, "ītō", "ītō", "ītōte", "iuntō") add_2_forms(forms, "pres_pasv_impr", pres_stem, "īre", "īminī") add_23_forms(forms, "futr_pasv_impr", pres_stem, "ītor", "ītor", nil, "iuntor") -- Present infinitives add_form(forms, "pres_actv_inf", pres_stem, "īre") add_form(forms, "pres_pasv_inf", pres_stem, "īrī") -- Imperfective participles add_form(forms, "pres_actv_ptc", pres_stem, "iēns") -- Gerund make_gerund(data, typeinfo, pres_stem .. "iend", "und-variant") end local make_pres_mt = {} function make_pres_mt:__call(data, typeinfo, pres_stem) if not pres_stem then return end return self[typeinfo.conj](data, typeinfo, pres_stem) end setmetatable(make_pres, make_pres_mt) local function make_perf(data, perf_stem, no_inf) if not perf_stem then return end local forms = data.forms if type(perf_stem) ~= "table" then perf_stem = {perf_stem} end for _, stem in ipairs(perf_stem) do -- Perfective indicative add_forms(forms, "perf_actv_indc", stem, "ī", "istī", "it", "imus", "istis", {"ērunt", "ēre"}) add_forms(forms, "plup_actv_indc", stem, "eram", "erās", "erat", "erāmus", "erātis", "erant") add_forms(forms, "futp_actv_indc", stem, "erō", "eris", "erit", "erimus", "eritis", "erint") -- Perfective subjunctive add_forms(forms, "perf_actv_subj", stem, "erim", "erīs", "erit", "erīmus", "erītis", "erint") add_forms(forms, "plup_actv_subj", stem, "issem", "issēs", "isset", "issēmus", "issētis", "issent") -- Perfect infinitive if not no_inf then add_form(forms, "perf_actv_inf", stem, "isse") end end end local function make_true_supine(data, typeinfo, supine_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.supfutractvonly or not supine_stem then return end local forms = data.forms if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end for _, stem in ipairs(supine_stem) do local supine_forms = do_generate_noun_forms({stem .. "us<4>"}, "နာမ်", "bare").forms add_form(forms, "acc_sup", "", supine_forms["acc_sg"]) add_form(forms, "abl_sup", "", supine_forms["abl_sg"]) add_form(forms, "futr_pasv_inf", forms["acc_sup"], " īrī") if subtypes.nofutractvptc then add_form(forms, "futr_actv_inf", forms["acc_sup"], " īre") end end end local function make_perf_pasv_ptc(data, typeinfo, supine_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.supfutractvonly or not supine_stem then return end local forms, gender = data.forms if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then gender = "m" -- perf_pasv_ptc becomes perf_actv_ptc, so the gender of the complement isn't relevant else gender = data.gender end if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end for _, stem in ipairs(supine_stem) do -- Perfect passive participle local perf_pasv_ptc_forms = do_generate_adj_forms({stem .. "us<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms local form = perf_pasv_ptc_forms["nom_" .. ptc_lemma_form[gender]] add_form(forms, "perf_pasv_ptc", "", form) add_forms(forms, "perf_pasv_indc", form, " sum", " es", " est", nil, nil, nil) add_forms(forms, "plup_pasv_indc", form, " eram", " erās", " erat", nil, nil, nil) add_forms(forms, "futp_pasv_indc", form, " erō", " eris", " erit", nil, nil, nil) add_forms(forms, "perf_pasv_subj", form, " sim", " sīs", " sit", nil, nil, nil) add_forms(forms, "plup_pasv_subj", form, " essem", " essēs", " esset", nil, nil, nil) form = perf_pasv_ptc_forms["nom_" .. ptc_lemma_form[gender]:gsub("sg", "pl")] add_forms(forms, "perf_pasv_indc", form, nil, nil, nil, " sumus", " estis", " sunt") add_forms(forms, "plup_pasv_indc", form, nil, nil, nil, " erāmus", " erātis", " erant") add_forms(forms, "futp_pasv_indc", form, nil, nil, nil, " erimus", " eritis", " erint") add_forms(forms, "perf_pasv_subj", form, nil, nil, nil, " sīmus", " sītis", " sint") add_forms(forms, "plup_pasv_subj", form, nil, nil, nil, " essēmus", " essētis", " essent") form = perf_pasv_ptc_forms["acc_" .. ptc_lemma_form[gender]] add_form(forms, "perf_pasv_inf", form, " esse") add_form(forms, "futp_pasv_inf", form, " fore") end end -- A final "u" on the supine stem is omitted (e.g. "mortu" to "moritūrus"). local function make_futr_actv_ptc_stem(supine_stem) local futr_actv_ptc_stem = {} for _, stem in ipairs(supine_stem) do insert(futr_actv_ptc_stem, (stem:gsub("u?$", ""))) end return futr_actv_ptc_stem end local function make_futr_actv_ptc(data, typeinfo, futr_actv_ptc_stem) local subtypes = typeinfo.subtypes if subtypes.nosup or subtypes.nofutr or subtypes.nofutractvptc or not futr_actv_ptc_stem then return end local forms = data.forms if type(futr_actv_ptc_stem) ~= "table" then futr_actv_ptc_stem = {futr_actv_ptc_stem} end for _, stem in ipairs(futr_actv_ptc_stem) do local futr_actv_ptc_forms = do_generate_adj_forms({stem .. "ūrus<1&2+>"}, "လုပ်ကၠောန်စွံလဝ်ဂမၠိုၚ်", "bare").forms add_form(forms, "futr_actv_ptc", "", futr_actv_ptc_forms["nom_sg_m"]) local form = futr_actv_ptc_forms["acc_sg_m"] add_form(forms, "futr_actv_inf", form, " esse") add_form(forms, "perp_actv_inf", form, " fuisse") end end local function make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) if typeinfo.subtypes.nosup or not supine_stem then return end make_true_supine(data, typeinfo, supine_stem) make_perf_pasv_ptc(data, typeinfo, supine_stem) if type(supine_stem) ~= "table" then supine_stem = {supine_stem} end if futr_actv_ptc_stem == nil then futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) end make_futr_actv_ptc(data, typeinfo, futr_actv_ptc_stem) end local function make_sigm(data, typeinfo, sigm_stem) local subtypes = typeinfo.subtypes if not subtypes.sigm then return end local forms = data.forms if type(sigm_stem) ~= "table" then sigm_stem = {sigm_stem} end local noteindex = table_len(data.footnotes) + 1 -- Deponent verbs use the passive form for _, stem in ipairs(sigm_stem) do -- Sigmatic future active indicative add_forms(forms, "sigf_actv_indc", stem, "ō", "is", "it", "imus", "itis", "int") -- Sigmatic future passive indicative if subtypes.sigmpasv then add_forms(forms, "sigf_pasv_indc", stem, "or", "eris", "itur", nil, nil, nil) -- Plurals not attested. end -- Sigmatic future active subjunctive add_forms(forms, "siga_actv_subj", stem, "im", "īs", "īt", "īmus", "ītis", "int") -- Perfect infinitive if not no_inf then add_form(forms, "sigm_actv_inf", stem, "ere") end end data.form_footnote_indices["sigm"] = noteindex if subtypes.depon then data.footnotes[noteindex] = 'At least one use of the Old Latin \"sigmatic future\" tense is attested, which is used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, and, as the verb is deponent, takes the form of what would otherwise be the rare sigmatic future passive indicative tense (which is not attested in the plural for any verb).' else data.footnotes[noteindex] = 'At least one use of the Old Latin \"sigmatic future\" and \"sigmatic aorist\" tenses is attested, which are used by [[Old Latin]] writers; most notably [[w:Plautus|Plautus]] and [[w:Terence|Terence]]. The sigmatic future is generally ascribed a future or future perfect meaning, while the sigmatic aorist expresses a possible desire (\"might want to\").' if subtypes.sigmpasv then data.footnotes[noteindex] = data.footnotes[noteindex] .. ' It is also attested as having a rare sigmatic future passive indicative form (\"will have been\"), which is not attested in the plural for any verb.' end end end make_conjugation["1st"] = function(args, data, typeinfo) -- set_conj_categories("first", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. local forms = data.forms if pres_stem == "dīlapid" then add_form(forms, "3p_sigf_actv_indc", "", "dīlapidāssunt", 2) elseif pres_stem == "invol" then add_form(forms, "3s_sigf_actv_indc", "", "involāsit", 2) elseif pres_stem == "viol" then local noteindex = table_len(data.footnotes) + 1 add_form(forms, "3p_futp_actv_indc", "", "violārint", 2) add_form(forms, "3p_perf_actv_subj", "", "violārint", 2) add_form(forms, "3s_sigf_actv_indc", "", "violāsit", 2) data.form_footnote_indices["3p_futp_actv_indc"] = tostring(noteindex) data.form_footnote_indices["3p_perf_actv_subj"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" end end make_conjugation["2nd"] = function(args, data, typeinfo) set_conj_categories("second", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. if pres_stem == "noc" then add_form(data.forms, "3s_siga_actv_subj", "", "noxsīt", 2) end end make_conjugation["3rd"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) -- Additional forms in specific cases. if not pres_stem then return elseif toNFD(pres_stem):match(vowel .. MACRON .. "sc$") then -- insert_if_not(data.categories, "Latin inchoative verbs") end if pres_stem:match("nōsc$") then typeinfo.subtypes.poetsyncperf = true elseif pres_stem == "ulcīsc" then local forms = data.forms local formval = forms["1s_sigf_actv_indc"] if type(formval) ~= "table" then formval = {formval} end forms["1s_sigf_actv_indc"] = formval local noteindex = table_len(data.footnotes) + 1 for i, form in ipairs(formval) do if form == "ulsō" then add_form(forms, "1s_sigf_actv_indc", "ull", "ō", i + 1) data.form_footnote_indices["1s_sigf_actv_indc"] = tostring(noteindex) data.footnotes[noteindex] = 'The form \"ullō\" may have resulted from a later, erroneous misreading of \"ulsō\".' break end end end end make_conjugation["3rd-io"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) local supine_stem, futr_actv_ptc_stem = typeinfo.supine_stem if supine_stem then local subtypes = typeinfo.subtypes futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) for i, stem in ipairs(futr_actv_ptc_stem) do -- TODO: generalise this as a subtype which is automatic for 3rd-io verbs with -rt in the supine local unsync_stem = stem:gsub("rt$", "rit") futr_actv_ptc_stem[i] = unsync_stem if unsync_stem ~= stem then subtypes.syncfutractvptc = true end end typeinfo.futr_actv_ptc_stem = futr_actv_ptc_stem end make_pres(data, typeinfo, typeinfo.pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) end make_conjugation["3rd/4th"] = function(args, data, typeinfo) set_conj_categories("third", data, typeinfo) set_conj_categories("fourth", data, typeinfo) local supine_stem, futr_actv_ptc_stem = typeinfo.supine_stem if supine_stem then local subtypes = typeinfo.subtypes futr_actv_ptc_stem = make_futr_actv_ptc_stem(supine_stem) for i, stem in ipairs(futr_actv_ptc_stem) do -- TODO: generalise this as a subtype which is automatic for 3rd/4th verbs with -rt in the supine local unsync_stem = stem:gsub("rt$", "rit") futr_actv_ptc_stem[i] = unsync_stem if unsync_stem ~= stem then subtypes.syncfutractvptc = true end end typeinfo.futr_actv_ptc_stem = futr_actv_ptc_stem end make_pres(data, typeinfo, typeinfo.pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, supine_stem, futr_actv_ptc_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) end local function ivi_ive(form) form = form:gsub("īvī", "iī") form = form:gsub("īvi", "ī") form = form:gsub("īve", "ī") form = form:gsub("īvē", "ē") return form end make_conjugation["4th"] = function(args, data, typeinfo) set_conj_categories("fourth", data, typeinfo) local pres_stem = typeinfo.pres_stem make_pres(data, typeinfo, pres_stem) make_perf(data, typeinfo.perf_stem) make_supine(data, typeinfo, typeinfo.supine_stem) make_sigm(data, typeinfo, typeinfo.sigm_stem) local forms = data.forms if form_contains(forms["1s_pres_actv_indc"], "serviō") or form_contains(forms["1s_pres_actv_indc"], "saeviō") then add_forms(forms, "impf_actv_indc", pres_stem, {"iēbam", "ībam"}, {"iēbās", "ībās"}, {"iēbat", "ībat"}, {"iēbāmus", "ībāmus"}, {"iēbātis", "ībātis"}, {"iēbant", "ībant"} ) add_forms(forms, "futr_actv_indc", pres_stem, {"iam", "ībō"}, {"iēs", "ībis"}, {"iet", "ībit"}, {"iēmus", "ībimus"}, {"iētis", "ībitis"}, {"ient", "ībunt"} ) end local subtypes = typeinfo.subtypes if not (subtypes.alwayssyncperf or subtypes.optsyncperf) then return end for key, formval in pairs(forms) do if cfind(key, "perf") or cfind(key, "plup") or cfind(key, "futp") then if type(formval) ~= "table" then formval = {formval} end forms[key] = {} for _, f in ipairs(formval) do if subtypes.optsyncperf then insert_if_not(forms[key], f) end insert_if_not(forms[key], ivi_ive(f)) end end end end -- Irregular conjugations. local irreg_conjugations = {} make_conjugation["irreg"] = function(args, data, typeinfo) local verb = ine(args[1]) local prefix = ine(args[2]) if verb == nil then error("The verb to be conjugated has not been specified.") elseif not irreg_conjugations[verb] then error(("Internal error: the irregular verb %s does not have a conjugation function specified."):format(dump(verb))) end typeinfo.prefix = prefix -- Generate the verb forms irreg_conjugations[verb](args, data, typeinfo) end for _, verb in ipairs{"aiō", "aiiō", "aijō", "ajō"} do local stem = usub(verb, 1, -2) local i_stem = stem:gsub("j$", "i") irreg_conjugations[verb] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin active-only verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.highlydef = true subtypes.nopass = true subtypes.nosup = true stem = (typeinfo.prefix or "") .. stem -- TODO: add period and frequency notes. add_forms(forms, "pres_actv_indc", stem, "ō", "s", "t", nil, "tis", "unt") add_forms(forms, "impf_actv_indc", stem, "ēbam", "ēbās", "ēbat", "ēbāmus", "ēbātis", "ēbant") add_forms(forms, "perf_actv_indc", stem, nil, "stī", "t", nil, nil, {"ērunt", "ēre"}) add_forms(forms, "pres_actv_subj", stem, "am", "ās", "at", nil, nil, "ant") add_form(forms, "3s_impf_actv_subj", stem, "eret") add_form(forms, "2s_pres_actv_impr", stem, "") add_form(forms, "pres_actv_inf", stem, "ere") add_form(forms, "pres_actv_ptc", stem, "ēns") end end irreg_conjugations["cedo"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.imponly = true subtypes.nofutr = true subtypes.nopass = true subtypes.noperf = true subtypes.nosup = true local prefix = typeinfo.prefix or "" forms["2s_pres_actv_impr"] = prefix .. "cedo" forms["2p_pres_actv_impr"] = {prefix .. "cette", prefix .. "cedite"} end irreg_conjugations["dīcō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "dīc") make_perf(data, prefix .. "dīx") make_supine(data, typeinfo, prefix .. "dict") make_sigm(data, typeinfo, prefix .. "dīx") -- Additional regular imperative. local noteindex = table_len(data.footnotes) + 1 add_form(forms, "2s_pres_actv_impr", prefix, "dīc", 1) end irreg_conjugations["dō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin first conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" typeinfo.subtypes.shorta = true make_pres(data, typeinfo, prefix .. "d") make_perf(data, prefix .. "ded") make_supine(data, typeinfo, prefix .. "dat") end irreg_conjugations["dūcō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "dūc") make_perf(data, prefix .. "dūx") make_supine(data, typeinfo, prefix .. "duct") make_sigm(data, typeinfo, prefix .. "dūx") add_form(forms, "2s_pres_actv_impr", prefix, "dūc", 1) end irreg_conjugations["edō"] = function(args, data, typeinfo) local categories, forms = data.categories, data.forms -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "ed") make_perf(data, prefix .. "ēd") make_supine(data, typeinfo, {prefix .. "ēs", prefix .. "ēss", prefix .. "ēst"}) -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, nil, "ēs", "ēst", nil, "ēstis", nil) -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", prefix, nil, {"ēssis", "ēsse"}, "ēstur", nil, nil, nil) -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix, "edim", "edīs", {"edit", "ēst"}, "edīmus", "edītis", "edint") add_forms(forms, "impf_actv_subj", prefix, "ēssem", "ēssēs", "ēsset", "ēssēmus", "ēssētis", "ēssent") -- Passive imperfective subjunctive add_forms(forms, "impf_pasv_subj", prefix, "ēsser", {"ēssēris", "ēssēre"}, "ēssētur", "ēssēmur", "ēssēminī", "ēssentur") -- Active imperative add_2_forms(forms, "pres_actv_impr", prefix, "ēs", "ēste") add_23_forms(forms, "futr_actv_impr", prefix, "ēstō", "ēstō", "ēstōte", nil) -- Passive imperative add_23_forms(forms, "futr_pasv_impr", prefix, "ēstor", "ēstor", nil, nil) add_form(forms, "2s_pres_pasv_impr", prefix, "ēsse") -- Present infinitives add_form(forms, "pres_actv_inf", prefix, "ēsse") end irreg_conjugations["ëdō"] = irreg_conjugations["edō"] irreg_conjugations["eō"] = function(args, data, typeinfo) local forms = data.forms -- insert_if_not(data.categories, "Latin irregular verbs") local prefix = typeinfo.prefix or "" make_perf(data, {prefix .. "i", prefix .. "īv"}) make_supine(data, typeinfo, prefix .. "it") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, "eō", "īs", "it", "īmus", "ītis", prefix == "prōd" and {"eunt", "īnunt"} or "eunt") add_forms(forms, "impf_actv_indc", prefix, "ībam", "ībās", "ībat", "ībāmus", "ībātis", "ībant") add_forms(forms, "futr_actv_indc", prefix, "ībō", "ībis", "ībit", "ībimus", "ībitis", "ībunt") -- Active perfective indicative add_form(forms, "2s_perf_actv_indc", prefix, "īstī", 1) add_form(forms, "2p_perf_actv_indc", prefix, "īstis", 1) -- Passive imperfective indicative add_forms(forms, "pres_pasv_indc", prefix, "eor", {"īris", "īre"}, "ītur", "īmur", "īminī", "euntur") add_forms(forms, "impf_pasv_indc", prefix, "ībar", {"ībāris", "ībāre"}, "ībātur", "ībāmur", "ībāminī", "ībantur") add_forms(forms, "futr_pasv_indc", prefix, "ībor", {"īberis", "ībere"}, "ībitur", "ībimur", "ībiminī", "ībuntur") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix, "eam", "eās", "eat", "eāmus", "eātis", "eant") add_forms(forms, "impf_actv_subj", prefix, "īrem", "īrēs", "īret", "īrēmus", "īrētis", "īrent") -- Active perfective subjunctive add_form(forms, "1s_plup_actv_subj", prefix, "īssem", 1) add_form(forms, "2s_plup_actv_subj", prefix, "īssēs", 1) add_form(forms, "3s_plup_actv_subj", prefix, "īsset", 1) add_form(forms, "1p_plup_actv_subj", prefix, "īssēmus", 1) add_form(forms, "2p_plup_actv_subj", prefix, "īssētis", 1) add_form(forms, "3p_plup_actv_subj", prefix, "īssent", 1) -- Passive imperfective subjunctive add_forms(forms, "pres_pasv_subj", prefix, "ear", {"eāris", "eāre"}, "eātur", "eāmur", "eāminī", "eantur") add_forms(forms, "impf_pasv_subj", prefix, "īrer", {"īrēris", "īrēre"}, "īrētur", "īrēmur", "īrēminī", "īrentur") -- Imperative add_2_forms(forms, "pres_actv_impr", prefix, "ī", "īte") add_23_forms(forms, "futr_actv_impr", prefix, "ītō", "ītō", "ītōte", "euntō") add_2_forms(forms, "pres_pasv_impr", prefix, "īre", "īminī") add_23_forms(forms, "futr_pasv_impr", prefix, "ītor", "ītor", nil, "euntor") -- Present infinitives forms["pres_actv_inf"] = prefix .. "īre" forms["pres_pasv_inf"] = prefix .. "īrī" -- Perfect/future infinitives add_form(forms, "perf_actv_inf", prefix, "īsse", 1) -- Imperfective participles forms["pres_actv_ptc"] = prefix .. "iēns" -- Gerund make_gerund(data, typeinfo, prefix .. "eund") end irreg_conjugations["ëō"] = irreg_conjugations["eō"] local function fio(forms, prefix, voice) -- Active/passive imperfective indicative add_forms(forms, "pres_" .. voice .. "_indc", prefix, "fīō", "fīs", "fit", "fīmus", "fītis", "fīunt") add_forms(forms, "impf_" .. voice .. "_indc", prefix .. "fīēb", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_" .. voice .. "_indc", prefix .. "fī", "am", "ēs", "et", "ēmus", "ētis", "ent") -- Active/passive imperfective subjunctive add_forms(forms, "pres_" .. voice .. "_subj", prefix .. "fī", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "impf_" .. voice .. "_subj", prefix .. "fier", "em", "ēs", "et", "ēmus", "ētis", "ent") -- Active/passive imperative add_2_forms(forms, "pres_" .. voice .. "_impr", prefix .. "fī", "", "te") add_23_forms(forms, "futr_" .. voice .. "_impr", prefix .. "fī", "tō", "tō", "tōte", "untō") -- Active/passive present infinitive add_form(forms, "pres_" .. voice .. "_inf", prefix, "fierī") if voice == "actv" then add_form(forms, "pres_actv_ptc", prefix, "fīēns") end end irreg_conjugations["faciō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true local prefix = typeinfo.prefix or "" make_pres(data, typeinfo, prefix .. "fac") -- Remove passive forms, except the gerund and future passive participle. remove_forms(forms, {"pasv_indc", "pasv_subj", "pasv_impr", "pasv_inf"}) make_perf(data, prefix .. "fēc") make_supine(data, typeinfo, prefix .. "fact") make_sigm(data, typeinfo, prefix .. "fax") if prefix == "" then -- Active imperative add_form(forms, "2s_pres_actv_impr", "", "fac", 1) -- Sigmatic forms add_form(forms, "1s_sigf_actv_indc", "", {"faxsō", "facsō", "faxiō"}) add_form(forms, "2s_sigf_actv_indc", "", {"faxsis", "facsis", "facxis", "facxsis"}) add_form(forms, "3s_sigf_actv_indc", "", "faxsit") add_form(forms, "1p_sigf_actv_indc", "", "faxsimus") add_form(forms, "2p_sigf_actv_indc", "", "faxsitis") add_form(forms, "3p_sigf_actv_indc", "", "faxsint") add_form(forms, "1s_siga_actv_subj", "", {"faxsim", "faxēm"}) add_form(forms, "2s_siga_actv_subj", "", {"faxsīs", "faxseis", "faxeis", "faxēs"}) add_form(forms, "3s_siga_actv_subj", "", {"faxsīt", "faxeit", "faxēt"}) add_form(forms, "1p_siga_actv_subj", "", {"faxsīmus", "faxeimus"}) add_form(forms, "2p_siga_actv_subj", "", {"faxsītis", "faxeitis"}) add_form(forms, "3p_siga_actv_subj", "", {"faxsint", "faxēnt"}) local noteindex = table_len(data.footnotes) + 1 add_form(forms, "pres_actv_inf", "", "fāre") data.form_footnote_indices["pres_actv_inf"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်လဇုဲ။" end fio(forms, prefix, "pasv") end irreg_conjugations["ferō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true local prefix_pres = typeinfo.prefix or "" local prefix_perf = ine(args[3]) local prefix_supine = ine(args[4]) prefix_perf = prefix_perf or prefix_pres prefix_supine = prefix_supine or prefix_pres make_pres(data, typeinfo, prefix_pres .. "fer") if prefix_perf == "" then make_perf(data, {"tul", "tetul"}) else make_perf(data, prefix_perf .. "tul") end make_supine(data, typeinfo, prefix_supine .. "lāt") -- Active imperfective indicative forms["2s_pres_actv_indc"] = prefix_pres .. "fers" forms["3s_pres_actv_indc"] = prefix_pres .. "fert" forms["2p_pres_actv_indc"] = prefix_pres .. "fertis" -- Passive imperfective indicative forms["3s_pres_pasv_indc"] = prefix_pres .. "fertur" -- Active imperfective subjunctive forms["1s_impf_actv_subj"] = prefix_pres .. "ferrem" forms["2s_impf_actv_subj"] = prefix_pres .. "ferrēs" forms["3s_impf_actv_subj"] = prefix_pres .. "ferret" forms["1p_impf_actv_subj"] = prefix_pres .. "ferrēmus" forms["2p_impf_actv_subj"] = prefix_pres .. "ferrētis" forms["3p_impf_actv_subj"] = prefix_pres .. "ferrent" -- Passive present indicative forms["2s_pres_pasv_indc"] = {prefix_pres .. "ferris", prefix_pres .. "ferre"} -- Passive imperfective subjunctive forms["1s_impf_pasv_subj"] = prefix_pres .. "ferrer" forms["2s_impf_pasv_subj"] = {prefix_pres .. "ferrēris", prefix_pres .. "ferrēre"} forms["3s_impf_pasv_subj"] = prefix_pres .. "ferrētur" forms["1p_impf_pasv_subj"] = prefix_pres .. "ferrēmur" forms["2p_impf_pasv_subj"] = prefix_pres .. "ferrēminī" forms["3p_impf_pasv_subj"] = prefix_pres .. "ferrentur" -- Imperative forms["2s_pres_actv_impr"] = prefix_pres .. "fer" forms["2p_pres_actv_impr"] = prefix_pres .. "ferte" forms["2s_futr_actv_impr"] = prefix_pres .. "fertō" forms["3s_futr_actv_impr"] = prefix_pres .. "fertō" forms["2p_futr_actv_impr"] = prefix_pres .. "fertōte" forms["2s_pres_pasv_impr"] = prefix_pres .. "ferre" forms["2s_futr_pasv_impr"] = prefix_pres .. "fertor" forms["3s_futr_pasv_impr"] = prefix_pres .. "fertor" -- Present infinitives forms["pres_actv_inf"] = prefix_pres .. "ferre" forms["pres_pasv_inf"] = prefix_pres .. "ferrī" if prefix_perf == "" then local noteindex = table_len(data.footnotes) + 1 for slot, form in pairs(forms) do if type(form) == "table" then for _, f in ipairs(form) do if f:match("^tetul") then data.form_footnote_indices[slot] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" break end end end end end end irreg_conjugations["fīō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin third conjugation verbs") -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.semidepon = true subtypes.nofutractvptc = true if not subtypes.nosup then subtypes.suppl = true end local prefix = typeinfo.prefix or "" fio(forms, prefix, "actv") make_supine(data, typeinfo, prefix .. "fact") forms["futr_actv_inf"] = forms["futr_pasv_inf"] -- Gerund make_gerund(data, typeinfo, prefix .. "fīend") end irreg_conjugations["inquam"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin defective verbs") subtypes.highlydef = true forms["1s_pres_actv_indc"] = "inquam" forms["2s_pres_actv_indc"] = "inquis" forms["3s_pres_actv_indc"] = "inquit" forms["1p_pres_actv_indc"] = "inquimus" forms["2p_pres_actv_indc"] = "inquitis" forms["3p_pres_actv_indc"] = "inquiunt" forms["2s_futr_actv_indc"] = "inquiēs" forms["3s_futr_actv_indc"] = "inquiet" forms["3p_futr_actv_indc"] = "inquient" forms["3s_impf_actv_indc"] = "inquiēbat" forms["1s_perf_actv_indc"] = "inquiī" forms["2s_perf_actv_indc"] = "inquistī" forms["3s_perf_actv_indc"] = "inquit" forms["2s_pres_actv_subj"] = "inquiās" forms["3s_pres_actv_subj"] = "inquiat" forms["3p_pres_actv_subj"] = "inquiant" forms["2s_pres_actv_impr"] = "inque" forms["2s_futr_actv_impr"] = "inquitō" forms["3s_futr_actv_impr"] = "inquitō" forms["pres_actv_ptc"] = "inquiēns" local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "Medieval Latin." noteindex = tostring(noteindex) data.form_footnote_indices["3p_futr_actv_indc"] = noteindex data.form_footnote_indices["2s_pres_actv_subj"] = noteindex data.form_footnote_indices["3p_pres_actv_subj"] = noteindex end -- Handle most forms of volō, mālō, nōlō. local function volo_malo_nolo(forms, indc_stem, subj_stem, subtypes) -- Present active indicative needs to be done individually as each -- verb is different. add_forms(forms, "impf_actv_indc", indc_stem .. "ēb", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_actv_indc", indc_stem, "am", "ēs", "et", "ēmus", "ētis", "ent") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", subj_stem, "im", "īs", "it", "īmus", "ītis", "int") add_forms(forms, "impf_actv_subj", subj_stem .. "l", "em", "ēs", "et", "ēmus", "ētis", "ent") -- Present infinitives forms["pres_actv_inf"] = subj_stem .. "le" -- Imperfective participles forms["pres_actv_ptc"] = indc_stem .. "ēns" subtypes.suppl = true end irreg_conjugations["mālō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.nopass = true subtypes.noimp = true make_perf(data, "mālu") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", "", "mālō", "māvīs", "māvult", "mālumus", "māvultis", "mālunt") volo_malo_nolo(forms, "māl", "māl", subtypes) end irreg_conjugations["nōlō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.nopass = true make_perf(data, "nōlu") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", "", "nōlō", "nōn vīs", "nōn vult", "nōlumus", "nōn vultis", "nōlunt") add_forms(forms, "impf_actv_indc", "nōlēb", "am", "ās", "at", "āmus", "ātis", "ant") volo_malo_nolo(forms, "nōl", "nōl", subtypes) -- Imperative add_2_forms(forms, "pres_actv_impr", "nōlī", "", "te") add_23_forms(forms, "futr_actv_impr", "nōl", "itō", "itō", "itōte", "untō") -- Additional Old Latin forms. local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "လပ်တေန်တြေံ။" noteindex = tostring(noteindex) add_forms(forms, "pres_actv_indc", "", nil, "nevīs", {"nōn volt", "nevolt"}, nil, {"nōn voltis", "nōltis"}, nil) data.form_footnote_indices["2s_pres_actv_indc"] = noteindex data.form_footnote_indices["3s_pres_actv_indc"] = noteindex data.form_footnote_indices["2p_pres_actv_indc"] = noteindex end irreg_conjugations["possum"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") subtypes.suppl = true subtypes.passimpers = true subtypes.passimpersold = true make_perf(data, "potu") -- Active imperfective indicative, impersonal passive add_forms(forms, "pres_actv_indc", "", "possum", "potes", "potest", "possumus", "potestis", "possunt") add_forms(forms, "impf_actv_indc", "poter", "am", "ās", "at", "āmus", "ātis", "ant") add_forms(forms, "futr_actv_indc", "poter", "ō", {"is", "e"}, "it", "imus", "itis", "unt") forms["3s_pres_pasv_indc"] = "potestur" forms["3s_impf_pasv_indc"] = "poterātur" forms["3s_futr_pasv_indc"] = "poteritur" -- Active imperfective subjunctive, impersonal passive add_forms(forms, "pres_actv_subj", "poss", "im", "īs", "it", "īmus", "ītis", "int") add_forms(forms, "impf_actv_subj", "poss", "em", "ēs", "et", "ēmus", "ētis", "ent") forms["3s_pres_pasv_subj"] = "possītur" forms["3s_impf_pasv_subj"] = "possētur" -- Present infinitives forms["pres_actv_inf"] = {"posse", "potesse"} -- Imperfective participles forms["pres_actv_ptc"] = "potēns" local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "Old Latin. The passive forms are only used to govern a passive infinitive; e.g. " .. mw.getCurrentFrame():preprocess("{{uxi|la|nec retrahi '''potestur''' imperiis|t=\"nor '''can it''' be withdrawn by commands\"}}") .. "." noteindex = tostring(noteindex) for slot in pairs(data.forms) do if cfind(slot, "pasv") then data.form_footnote_indices[slot] = noteindex end end data.form_footnote_indices["pres_actv_inf"] = noteindex end -- The vowel of the prefix is lengthened if it ends in -n and the next word begins with f- or s-. local function shorten_prefix(prefix) return toNFC((ugsub(toNFD(prefix), "(" .. vowel .. ")" .. MACRON .. "n$", "%1n"))) end local function lengthen_prefix(prefix) return toNFC((ugsub(toNFD(prefix), "(" .. vowel .. ")" .. LENGTH .. "n$", "%1" .. MACRON .. "n"))) end irreg_conjugations["sum"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") local prefix = typeinfo.prefix or "" local prefix_e = ine(args[3]) or shorten_prefix(prefix) local prefix_f = ine(args[4]) or lengthen_prefix(prefix) local prefix_s = lengthen_prefix(prefix) subtypes.suppl = true subtypes.nopass = true subtypes.supfutractvonly = true make_perf(data, prefix_f .. "fu") make_supine(data, typeinfo, prefix_f .. "fut") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix_s, "sum", nil, nil, "sumus", nil, "sunt") add_forms(forms, "pres_actv_indc", prefix_e, nil, "es", "est", nil, "estis", nil) add_forms(forms, "impf_actv_indc", prefix_e, "eram", "erās", "erat", "erāmus", "erātis", "erant") add_forms(forms, "futr_actv_indc", prefix_e, "erō", {"eris", "ere"}, "erit", "erimus", "eritis", "erunt") -- Active imperfective subjunctive add_forms(forms, "pres_actv_subj", prefix_s, "sim", "sīs", "sit", "sīmus", "sītis", "sint") add_forms(forms, "pres_actv_subj", prefix_s, "siem", "siēs", "siet", "siēmus", "siētis", "sient") add_forms(forms, "pres_actv_subj", prefix_f, "fuam", "fuās", "fuat", "fuāmus", "fuātis", "fuant") local noteindex = table_len(data.footnotes) + 1 for _, p in ipairs(persons) do data.form_footnote_indices[p .. "_pres_actv_subj"] = tostring(noteindex) end data.footnotes[noteindex] = "လပ်တေန်တြေံ ဝါ အပ္ဍဲကဗျလၚ်္ကာ" if prefix_s == "ad" then local noteindex = table_len(data.footnotes) + 1 add_form(forms, "3p_pres_actv_subj", "", "adessint", 2) data.form_footnote_indices["3p_pres_actv_subj"] = tostring(noteindex) data.footnotes[noteindex] = "လပ်တေန်တြေံ။" end add_forms(forms, "impf_actv_subj", prefix_e, "essem", "essēs", "esset", "essēmus", "essētis", "essent") add_forms(forms, "impf_actv_subj", prefix_f, "forem", "forēs", "foret", "forēmus", "forētis", "forent") -- Imperative add_2_forms(forms, "pres_actv_impr", prefix_e, "es", "este") add_23_forms(forms, "futr_actv_impr", prefix_e, "estō", "estō", "estōte", nil) add_form(forms, "3p_futr_actv_impr", prefix_s, "suntō") -- Infinitives add_form(forms, "pres_actv_inf", prefix_e, "esse") add_form(forms, "futr_actv_inf", prefix_f, "fore") -- Imperfective participles if prefix == "ab" or prefix == "cōn" or prefix == "prae" or prefix == "præ" then add_form(forms, "pres_actv_ptc", prefix_s, "sēns") -- forms["pres_actv_ptc"] = prefix_s .. "sēns" end end irreg_conjugations["volō"] = function(args, data, typeinfo) local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes -- insert_if_not(categories, "Latin irregular verbs") -- insert_if_not(categories, "Latin suppletive verbs") local prefix = typeinfo.prefix or "" subtypes.nopass = true subtypes.noimp = true subtypes.supfutractvonly = true make_perf(data, prefix .. "volu") make_supine(data, typeinfo, prefix .. "volit") -- Active imperfective indicative add_forms(forms, "pres_actv_indc", prefix, "volō", "vīs", "vult", "volumus", "vultis", "volunt") volo_malo_nolo(forms, prefix .. "vol", prefix .. "vel", subtypes) -- Additional Old Latin forms. if prefix == "" then local noteindex = table_len(data.footnotes) + 1 data.footnotes[noteindex] = "လပ်တေန်တြေံ။" noteindex = tostring(noteindex) add_forms(forms, "pres_actv_indc", prefix, nil, nil, "volt", nil, "voltis", nil) data.form_footnote_indices["3s_pres_actv_indc"] = noteindex data.form_footnote_indices["2p_pres_actv_indc"] = noteindex -- vol- in the present subjunctive. add_forms(forms, "pres_actv_subj", prefix .. "vol", "im", "īs", "it", "īmus", "ītis", "int") for slot in pairs(data.forms) do if cfind(slot, "pres_actv_subj") then data.form_footnote_indices[slot] = noteindex end end end end local function make_perfect_passive(data) local forms = data.forms local ppp = forms["perf_pasv_ptc"] if type(ppp) ~= "table" then ppp = {ppp} end local ppplinks = {} for _, pppform in ipairs(ppp) do insert(ppplinks, make_link(pppform, nil, "term")) end local ppplink = concat(ppplinks, " or ") local sumlink = make_link("sum", nil, "term") local text_for_slot = { perf_pasv_indc = "စၞောန်ထ္ၜးမရပ်စပ်ပစ္စုပ္ပန်", futp_pasv_indc = "စၞောန်ထ္ၜးပရေၚ်ရပ်စပ်အနာဂတ်", plup_pasv_indc = "ကြိယာအတိက်ဗီုပြၚ်ဟွံဍိုက်ပေၚ်", perf_pasv_subj = "ကြိယာစၞောန်ထ္ၜးဗီုပြၚ်ပစ္စုပ္ပန်", plup_pasv_subj = "ကြိယာစၞောန်ထ္ၜးဗီုပြၚ်ဟွံဍိုက်ပေၚ်" } local passive_prefix, passive_suffix = data.passive_prefix, data.passive_suffix local prefix_joiner = passive_prefix and passive_prefix:match(" $") and "+ " or "" local suffix_joiner = passive_suffix and passive_suffix:match("^ ") and " +" or "" for slot, text in pairs(text_for_slot) do forms[slot] = (passive_prefix or "") .. prefix_joiner .. ppplink .. " + " .. text .. "နကဵု " .. sumlink .. suffix_joiner .. (passive_suffix or "") end ppp = forms["1s_pres_actv_indc"] if type(ppp) ~= "table" then ppp = {ppp} end end local function handle_deponent(data, subtypes) local forms = data.forms -- Generate a list of form types to remove. local to_remove = {"pres_pasv_ptc", "futr_pasv_inf"} if subtypes.depon then insert(to_remove, "actv") else insert(to_remove, "pres_pasv") insert(to_remove, "impf_pasv") insert(to_remove, "futr_pasv") if subtypes.semidepon then insert(to_remove, "perf_actv") insert(to_remove, "plup_actv") insert(to_remove, "futp_actv") end end -- Remove forms. for slot in pairs(forms) do if not ( slot == "futr_actv_inf" or slot == "perp_actv_inf" or slot == "pres_actv_ptc" or slot == "futr_actv_ptc" or slot == "futr_pasv_ptc" ) then for _, part in ipairs(to_remove) do if cfind(slot, part) then forms[slot] = nil break end end end end -- Change passive to active, except for the future passive participle. local changes = {} for slot in pairs(forms) do if cfind(slot, "pasv") and slot ~= "futr_pasv_ptc" then changes[slot] = slot:gsub("pasv", "actv") end end for old, new in pairs(changes) do add_form(forms, new, "", forms[old]) forms[old] = nil end end local function add_sync_perf(data, form, suf, note, noteindex) local forms = data.forms local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end local i = 0 while true do i = i + 1 local stem = formval[i] if not stem then break end stem = stem:match("^(.*)" .. pattern_escape(suf) .. "$") -- Can only syncopate "vi", "ve", "vē", or any one of them spelled with a "u" after a vowel. -- TODO: Syncopate "si", "xi". if stem then local new_stem = toNFD(stem) local vowel, loc, v, ei, diacritic = umatch(new_stem, "(" .. vowel .. "?)" .. LENGTH .. "()([uv])([ei])(" .. LENGTH .. ")$") if loc and (v == "v" or vowel ~= "") and (ei == "e" or diacritic == "" or cfind(diacritic, BREVE)) then new_stem = usub(new_stem, 1, loc - 1) -- Can't be omitted if it's part of the first syllable. if new_stem:match(vowel) then i = i + 1 add_form(forms, form, new_stem, suf, i) data.form_footnote_indices[form] = tostring(noteindex) data.footnotes[noteindex] = note end end end end end local function has_no_infinitive(forms) for slot in pairs(forms) do if cfind(slot, "inf") and not form_is_empty(forms[slot]) then return false end end return true end local function has_no_gerund(forms) if not form_is_empty(forms["futr_pasv_ptc"]) then return false end for _, case in ipairs(ger_cases) do if not form_is_empty(forms[case .. "_ger"]) then return false end end return true end local make_conjugation_mt = {} function make_conjugation_mt:__call(args, data, typeinfo) if typeinfo.irreg then self.irreg(args, data, typeinfo) else get_regular_stems(args, typeinfo) self[typeinfo.conj](args, data, typeinfo) end local categories, forms, subtypes = data.categories, data.forms, typeinfo.subtypes if subtypes.nopres or subtypes.perfaspres then -- insert_if_not(categories, "Latin verbs with missing present stem") -- insert_if_not(categories, "Latin defective verbs") end -- Maybe clear out the supine-derived forms (except maybe for the -- future active participle). Do this first because some code below -- looks at the perfect participle to derive other forms. if subtypes.nosup then -- Some verbs have no supine forms or forms derived from the supine -- insert_if_not(categories, "Latin verbs with missing supine stem") -- insert_if_not(categories, "Latin defective verbs") forms["futr_actv_inf"] = nil forms["futr_actv_ptc"] = nil forms["perf_actv_ptc"] = nil forms["futp_actv_inf"] = nil forms["perp_actv_inf"] = nil forms["perf_pasv_inf"] = nil forms["perf_pasv_ptc"] = nil forms["futr_pasv_inf"] = nil forms["futp_pasv_inf"] = nil if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then forms["perf_actv_inf"] = nil end for _, case in ipairs(sup_cases) do forms[case .. "_sup"] = nil end elseif subtypes.nofutractvptc then -- Some verbs have a missing future active participle -- insert_if_not(categories, "Latin verbs with supine stem with missing future active participle") -- insert_if_not(categories, "Latin defective verbs") forms["futr_actv_ptc"] = nil forms["perp_actv_inf"] = nil elseif subtypes.supfutractvonly then -- Some verbs have no supine forms or forms derived from the supine, -- except for the future active infinitive/participle -- insert_if_not(categories, "Latin verbs with missing supine stem except in the future active participle") -- insert_if_not(categories, "Latin defective verbs") forms["perf_actv_ptc"] = nil forms["futp_actv_inf"] = nil forms["perf_pasv_inf"] = nil forms["perf_pasv_ptc"] = nil forms["futr_pasv_inf"] = nil forms["futp_pasv_inf"] = nil if subtypes.depon or subtypes.semidepon or subtypes.optsemidepon then forms["perf_actv_inf"] = nil end for _, case in ipairs(sup_cases) do forms[case .. "_sup"] = nil end end -- Add information for the passive perfective forms if not ( form_is_empty(forms["perf_pasv_ptc"]) or subtypes.optsemidepon or subtypes.impers or subtypes.passimpers and not (subtypes.depon or subtypes.semidepon or subtypes.optsemidepon) or subtypes["3only"] or subtypes.pass3only and not (subtypes.depon or subtypes.semidepon or subtypes.optsemidepon) ) then make_perfect_passive(data) end -- Perfect forms as present tense. if subtypes.perfaspres then -- insert_if_not(categories, "Latin verbs with perfect forms used in the present tense") -- Remove present active, imperfect active and future active forms and passive forms. -- Change perfect forms to non-perfect forms. local new_forms = {} forms["futr_pasv_inf"] = nil for slot, form in pairs(forms) do if not ( cfind(slot, "pres") or cfind(slot, "impf") or cfind(slot, "futr") and not (cfind(slot, "inf") or cfind(slot, "ptc")) or slot:match("_ger$") ) then -- If semi-deponent, the perfect passive forms will be converted to perfect active. if not (cfind(slot, "pasv") and (subtypes.semidepon or subtypes.optsemidepon)) then slot = slot:gsub("perf", "pres") :gsub("plup", "impf") :gsub("futp", "futr") end new_forms[slot] = form end end data.forms, forms = new_forms, new_forms -- No present stem. elseif subtypes.nopres then for slot in pairs(forms) do if ( cfind(slot, "pres") or cfind(slot, "impf") or cfind(slot, "futr") and not (cfind(slot, "inf") or cfind(slot, "ptc")) or slot:match("_ger$") ) then forms[slot] = nil end end end -- Types of irregularity related primarily to the active. -- These could in theory be combined with those related to the passive and imperative, -- i.e. there's no reason there couldn't be an impersonal deponent verb with no imperatives. -- Deponent verbs use passive forms with active meaning. if subtypes.depon then -- insert_if_not(categories, "Latin deponent verbs") handle_deponent(data, subtypes) -- Semi-deponent verbs use perfective passive forms with active meaning, -- and have no imperfective passive. elseif subtypes.semidepon then -- insert_if_not(categories, "Latin semi-deponent verbs") handle_deponent(data, subtypes) -- Optional semi-deponent verbs use perfective passive forms with active -- meaning, but also have perfect active forms with the same meaning, -- and have no imperfective passive. elseif subtypes.optsemidepon then -- insert_if_not(categories, "Latin semi-deponent verbs") -- insert_if_not(categories, "Latin optionally semi-deponent verbs") handle_deponent(data, subtypes) elseif subtypes.noperf then -- Some verbs have no perfect stem (e.g. inalbēscō, -ěre) -- insert_if_not(categories, "Latin defective verbs") if not subtypes.depon then -- insert_if_not(categories, "Latin verbs with missing perfect stem") end -- Remove all active perfect forms (passive perfect forms may -- still exist as they are formed with the supine stem) for slot in pairs(forms) do if cfind(slot, "actv") and ( cfind(slot, "perf") or cfind(slot, "plup") or cfind(slot, "futp") ) and slot ~= "futp_actv_inf" then forms[slot] = nil end end end -- Handle the removal of any passive forms, including any impersonal/3rd- -- person-only passives. -- Third-person only. if subtypes["3only"] then -- insert_if_not(categories, "Latin third-person-only verbs") for slot in pairs(forms) do if slot:match("[12][sp]") then forms[slot] = nil end end -- Impersonal, so remove all non-third-person singular forms. elseif subtypes.impers then -- insert_if_not(categories, "Latin impersonal verbs") for slot in pairs(forms) do if slot:match("[12][sp]") or ( -- Keep third-person plural forms if third-person passive is set. cfind(slot, "3p") and not (subtypes.pass3only and cfind(slot, "pasv")) ) then forms[slot] = nil end end end -- No passive forms. if subtypes.nopass then -- insert_if_not(categories, "Latin active-only verbs") for slot in pairs(forms) do if cfind(slot, "pasv") then forms[slot] = nil end end -- Only third person in the passive. For phrasal verbs with a plural -- complement, also need to erase the 3s forms. -- FIXME: handling of mp, fp and np needs to be done separately. elseif subtypes.pass3only then -- insert_if_not(categories, "Latin verbs with third-person passive") local gender = data.gender for slot in pairs(forms) do if cfind(slot, "pasv") and ( slot:match("[12][sp]") or (gender == "mp" or gender == "fp" or gender == "np") and cfind(slot, "3s") ) then forms[slot] = nil end end -- Impersonal in the passive, so remove all passive non-third person forms. elseif subtypes.passimpers then -- insert_if_not(categories, "Latin verbs with impersonal passive") for slot in pairs(forms) do if cfind(slot, "pasv") and ( slot:match("[12][sp]") or cfind(slot, "3p") ) then forms[slot] = nil end end end -- Handle certain irregularities in the imperative if subtypes.noimp then -- Some verbs have no imperatives -- insert_if_not(categories, "Latin verbs with missing imperative") -- insert_if_not(categories, "Latin defective verbs") -- Remove all imperative forms for slot in pairs(forms) do if cfind(slot, "impr") then forms[slot] = nil end end end -- Handle certain irregularities in the future if subtypes.nofutr then -- Some verbs (e.g. soleō) have no future -- insert_if_not(categories, "Latin verbs with missing future") -- insert_if_not(categories, "Latin defective verbs") -- Remove all future forms for slot in pairs(forms) do if cfind(slot, "fut") then -- handles futr = future and futp = future perfect forms[slot] = nil end end end local pres_stem = typeinfo.pres_stem -- Add the ancient future_passive_participle of certain verbs -- if pres_stem == "lāb" then -- forms["futr_pasv_ptc"] = "lābundus" -- elseif pres_stem == "collāb" then -- forms["futr_pasv_ptc"] = "collābundus" -- elseif pres_stem == "illāb" then -- forms["futr_pasv_ptc"] = "illābundus" -- elseif pres_stem == "relāb" then -- forms["futr_pasv_ptc"] = "relābundus" -- end -- Add the poetic present passive infinitive forms of certain verbs if subtypes.p3inf then local form = "pres_" .. (subtypes.depon and "actv" or "pasv") .. "_inf" local noteindex = table_len(data.footnotes) + 1 local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end for i = 1, table_len(formval) do insert(formval, usub(formval[i], 1, -2) .. "ier") end forms[form] = formval data.form_footnote_indices[form] = tostring(noteindex) data.footnotes[noteindex] = "The present passive infinitive in ''-ier'' is a rare poetic form which is attested." end --[==[ if subtypes.old2sgimp then local form = "2s_pres_" .. (subtypes.depon and "actv" or "pasv") .. "_impr" local formval = forms[form] if type(formval) ~= "table" then formval = {formval} end local newvals = mw.clone(formval) end]==] -- Add the syncopated perfect forms, omitting the separately handled fourth conjugation cases. if subtypes.poetsyncperf then local noteindex, note = table_len(data.footnotes) + 1 if pres_stem and pres_stem:match("nōsc$") then note = 'The verb "nōscō" and its compounds frequently drop the syllables "vi" and "ve" from their perfect, pluperfect and future perfect conjugations.' else note = "At least one rare poetic syncopated perfect form is attested." end -- infinitive add_sync_perf(data, "perf_actv_inf", "sse", note, noteindex) -- perfect actives add_sync_perf(data, "2s_perf_actv_indc", "stī", note, noteindex) add_sync_perf(data, "3s_perf_actv_indc", "t", note, noteindex) add_sync_perf(data, "1p_perf_actv_indc", "mus", note, noteindex) add_sync_perf(data, "2p_perf_actv_indc", "stis", note, noteindex) add_sync_perf(data, "3p_perf_actv_indc", "runt", note, noteindex) -- pluperfect actives add_sync_perf(data, "1s_plup_actv_indc", "ram", note, noteindex) add_sync_perf(data, "2s_plup_actv_indc", "rās", note, noteindex) add_sync_perf(data, "3s_plup_actv_indc", "rat", note, noteindex) add_sync_perf(data, "1p_plup_actv_indc", "rāmus", note, noteindex) add_sync_perf(data, "2p_plup_actv_indc", "rātis", note, noteindex) add_sync_perf(data, "3p_plup_actv_indc", "rant", note, noteindex) -- future perfect actives add_sync_perf(data, "1s_futp_actv_indc", "rō", note, noteindex) add_sync_perf(data, "2s_futp_actv_indc", "ris", note, noteindex) add_sync_perf(data, "3s_futp_actv_indc", "rit", note, noteindex) add_sync_perf(data, "1p_futp_actv_indc", "rimus", note, noteindex) add_sync_perf(data, "2p_futp_actv_indc", "ritis", note, noteindex) add_sync_perf(data, "3p_futp_actv_indc", "rint", note, noteindex) -- perfect subjunctives add_sync_perf(data, "1s_perf_actv_subj", "rim", note, noteindex) add_sync_perf(data, "2s_perf_actv_subj", "rīs", note, noteindex) add_sync_perf(data, "3s_perf_actv_subj", "rit", note, noteindex) add_sync_perf(data, "1p_perf_actv_subj", "rīmus", note, noteindex) add_sync_perf(data, "2p_perf_actv_subj", "rītis", note, noteindex) add_sync_perf(data, "3p_perf_actv_subj", "rint", note, noteindex) -- pluperfect subjunctives add_sync_perf(data, "1s_plup_actv_subj", "ssem", note, noteindex) add_sync_perf(data, "2s_plup_actv_subj", "ssēs", note, noteindex) add_sync_perf(data, "3s_plup_actv_subj", "sset", note, noteindex) add_sync_perf(data, "1p_plup_actv_subj", "ssēmus", note, noteindex) add_sync_perf(data, "2p_plup_actv_subj", "ssētis", note, noteindex) add_sync_perf(data, "3p_plup_actv_subj", "ssent", note, noteindex) end if subtypes.syncfutractvptc then -- TODO end -- Add category for sigmatic forms if subtypes.sigm then -- insert_if_not(categories, "Latin verbs with sigmatic forms") -- Add subcategory for (very rare) passive sigmatic forms if subtypes.sigmpasv then -- insert_if_not(categories, "Latin verbs with passive sigmatic forms") end end if subtypes.noinf then -- Some verbs (e.g. inquam) have no infinitives for slot in pairs(forms) do if cfind(slot, "inf") then forms[slot] = nil end end end if has_no_infinitive(forms) then subtypes.noinf = true -- insert_if_not(categories, "Latin verbs with missing infinitive") -- insert_if_not(categories, "Latin defective verbs") end if subtypes.noger then -- Some verbs (e.g. libet) have no gerund forms["futr_pasv_ptc"] = nil for _, case in ipairs(ger_cases) do forms[case .. "_ger"] = nil end end -- Catch verbs which don't have .noger explicitly specified. if has_no_gerund(forms) then subtypes.noger = true -- insert_if_not(categories, "Latin verbs with missing gerund") -- insert_if_not(categories, "Latin defective verbs") end if subtypes.imponly then -- Some verbs only have imperatives -- insert_if_not(categories, "Latin imperative-only verbs") -- insert_if_not(categories, "Latin defective verbs") -- Remove all non-imperative forms for slot in pairs(forms) do if not cfind(slot, "impr") then forms[slot] = nil end end end end setmetatable(make_conjugation, make_conjugation_mt) -- Functions for generating the inflection table -- Convert FORM (one or more forms) to a string of links. If the form is empty -- (see form_is_empty), the return value will be "&mdash;". local function show_form(formval, accel) if not formval then return "&mdash;" elseif type(formval) ~= "table" then formval = {formval} elseif table_len(formval) == 0 then return "&mdash;" end for slot, form in ipairs(formval) do if form_is_empty(form) then form = "&mdash;" elseif form:match("%[%[.-]]") then -- Don't put accelerators on forms already containing links such as -- the perfect passive infinitive and future active infinitive, or -- the participles wrongly get tagged as infinitives as well as -- participles. form = make_link(form) else form = make_link(form, nil, nil, accel) end formval[slot] = form end return concat(formval, ",<br> ") end local parts_to_tags = { ['1s'] = {'1', 's'}, ['2s'] = {'2', 's'}, ['3s'] = {'3', 's'}, ['1p'] = {'1', 'p'}, ['2p'] = {'2', 'p'}, ['3p'] = {'3', 'p'}, ['actv'] = {'act'}, ['pasv'] = {'pass'}, ['pres'] = {'pres'}, ['impf'] = {'impf'}, ['futr'] = {'fut'}, ['perf'] = {'perf'}, ['plup'] = {'plup'}, ['futp'] = {'futp'}, ['perp'] = {'perf', 'potn'}, ['sigm'] = {'sigm'}, ['sigf'] = {'sigm', 'fut'}, ['siga'] = {'sigm', 'aor'}, ['indc'] = {'ind'}, ['subj'] = {'sub'}, ['impr'] = {'imp'}, ['inf'] = {'inf'}, ['ptc'] = {'part'}, ['ger'] = {'ger'}, ['sup'] = {'sup'}, ['nom'] = {'nom'}, ['gen'] = {'gen'}, ['dat'] = {'dat'}, ['acc'] = {'acc'}, ['abl'] = {'abl'}, } -- Call show_form() the forms in each non-generic slot (where a -- generic slot is something like pres_actv_indc that covers a whole -- row of slots), converting the forms to a string consisting of -- comma-separated links with accelerators in them. local function convert_forms_into_links(data) local accel_lemma, forms = data.actual_lemma[1], data.forms for slot in iter_slots(false, false) do local slot_parts = split(slot, "_") local tags = {} for _, part in ipairs(slot_parts) do for _, tag in ipairs(parts_to_tags[part]) do insert(tags, tag) end end -- put the case first for verbal nouns local accel = {form = concat(tags, "|"), lemma = accel_lemma} forms[slot] = show_form(forms[slot], accel) end end function export.get_valid_forms(raw_forms) local valid_forms = {} if raw_forms then if type(raw_forms) ~= "table" then raw_forms = {raw_forms} end for _, subform in ipairs(raw_forms) do if not form_is_empty(subform) then insert(valid_forms, subform) end end end return valid_forms end function export.get_lemma_forms(data, do_linked) local linked_prefix, forms = do_linked and "linked_" or "", data.forms for _, slot in ipairs(potential_lemma_slots) do local lemma_forms = export.get_valid_forms(forms[linked_prefix .. slot]) if table_len(lemma_forms) > 0 then return lemma_forms end end return nil end local function get_displayable_lemma(lemma_forms) if not lemma_forms then return "&mdash;" end local lemma_links = {} for _, subform in ipairs(lemma_forms) do insert(lemma_links, make_link(nil, subform, "term")) end return concat(lemma_links, ", ") end local tenses_display = { ["pres"] = "ပစ္စုပ္ပန်", ["impf"] = "ဟွံဍိုက်ပေၚ်", ["futr"] = "အနာဂတ်", ["perf"] = "မဍိုက်ပေၚ်", ["plup"] = "မဍိုက်ပေၚ်တဴ", ["futp"] = "အနာဂတ်&nbsp;ဗီုပြၚ်မဍိုက်ပေၚ်", ["perp"] = "မဍိုက်ပေၚ်တဴ&nbsp;ကၠုၚ်", ["sigf"] = "အနာဂတ်&nbsp;သေတ်ဂမေတ်တေတ်", ["siga"] = "အဝ်ရေတ်သတေတ်&nbsp;သေတ်ဂ်မေတ်တေတ်" } local voices_display = { ["actv"] = "မစိုပ်တရဴ", ["pasv"] = "ဟွံတဝ်စၞေဟ်", } local moods_display = { ["indc"] = "စၞောန်ထ္ၜး", ["subj"] = "အရေဝ်နိဒါန်", ["impr"] = "ပါဲဗလေတ်ဟွံဗၠး", } --[[ local nonfins = { ["inf"] = "ကြိယာဟွံကၠောံ", ["ptc"] = "လုပ်ကၠောန်စွံလဝ်", } --]] --[[ local verbalnouns = { ["ger"] = "ကြိယာစၞးနာမ်", ["sup"] = "ဂၠဝ်", } --]] --[[ local cases = { ["nom"] = "မဒုၚ်ယၟု", ["gen"] = "ဗဳဇဂကူ", ["dat"] = "ပြကမ္မကာရက", ["acc"] = "ကမ္မကာရက", ["abl"] = "ပရေၚ်မလၚ်", } --]] local function make_row(data, prefixes, headspan, cellspan, rowslot, rowname, class, fn) local row = {} if rowname then insert(row, ('\n! class="%s"%s | %s%s'):format(class, headspan == 1 and "" or (' colspan="%d"'):format(headspan), rowname, fn or "")) end local has_row, forms = false, data.forms if not form_is_empty(forms[rowslot]) then if type(forms[rowslot]) == "table" then if table_len(forms[rowslot]) > 1 then error("Row slot " .. rowslot .. " cannot have more than one value.") end forms[rowslot] = forms[rowslot][1] end insert(row, '\n! colspan="12" class="roa-compound-row" |' .. forms[rowslot]) has_row = true else for _, prefix in ipairs(prefixes) do local slot = prefix .. (rowslot and "_" .. rowslot or "") insert(row, ('\n| colspan="%d" | '):format(cellspan) .. forms[slot] .. ( data.form_footnote_indices[slot] == nil and "" or '<sup class="roa-red-superscript">' .. data.form_footnote_indices[slot] .. "</sup>" )) if not form_is_empty(forms[slot]) then has_row = true end end end return has_row and concat(row) or false end local function make_group(data, _tenses, voice, mood, class) local group = {} for _, tense in ipairs(_tenses) do local fn = "" if tense == "sigf" or tense == "siga" then fn = data.form_footnote_indices["sigm"] fn = fn and ('<sup class="roa-red-superscript">' .. fn .. "</sup>") or "" end local row = make_row(data, persons, 1, 2, tense .. "_" .. voice .. "_" .. mood, tenses_display[tense], class, fn) if row then insert(group, row) end end return #group > 0 and ('\n|-\n! rowspan="' .. tostring(#group) .. '" class="' .. class .. '" | ' .. voices_display[voice] .. concat(group, "\n|-")) or false end local function make_section(data, mood, _tenses) local section, name = {}, moods_display[mood] local class = "roa-" .. name .. "-left-rail" for _, voice in ipairs(voices) do local group = make_group(data, _tenses, voice, mood, class) if group then insert(section, group) end end if #section == 0 then return "" end return (([=[ |- ! colspan="2" rowspan="2" class="%CLASS" | %NAME ! colspan="6" class="%CLASS" | ''ကိုန်ဨကဝုစ်'' ! colspan="6" class="%CLASS" | ''ကိုန်ဗဟုဝစ်'' |- ! colspan="2" class="%CLASS" style="width:12.5%;" | [[first person|ပထမ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[second person|ဒုတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[third person|တတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[first person|ပထမ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[second person|ဒုတိယ]] ! colspan="2" class="%CLASS" style="width:12.5%;" | [[third person|တတိယ]]]=]):gsub("%%%u+", function(m) return m == "%NAME" and name or m == "%CLASS" and class or m end)) .. concat(section) end local function make_indc_rows(data) return make_section(data, "indc", indc_tenses) end local function make_subj_rows(data) return make_section(data, "subj", subj_tenses) end local function make_impr_rows(data) return make_section(data, "impr", impr_tenses) end local function get_nonfin_cells(t) local cells = {} for _, f in ipairs{"inf", "ptc"} do for _, v in ipairs(voices) do insert(cells, t .. "_" .. v .. "_" .. f) end end return cells end local function make_nonfin_rows(data) local nonfin = {} for _, t in ipairs(nonfin_tenses) do local row = make_row(data, get_nonfin_cells(t), 2, 3, nil, tenses_display[t], "roa-nonfinite-header") if row then insert(nonfin, row) end end if #nonfin == 0 then return "" end return [=[ |- ! colspan="2" rowspan="2" class="roa-nonfinite-header" | ဗီုပြၚ်ဟွံတွဵုဒနက် ! colspan="6" class="roa-nonfinite-header" | ကြိယာဟွံကၠောံ ! colspan="6" class="roa-nonfinite-header" | လုပ်ကၠောန်စွံလဝ် |- ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | မချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | ဟွံချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | မချဳဒရာၚ် ! colspan="3" class="roa-nonfinite-header" style="width:18.75%;" | ဟွံချဳဒရာၚ် |-]=] .. concat(nonfin, "\n|-") end local function make_vn_rows(data) local vn = make_row(data, {"gen_ger", "dat_ger", "acc_ger", "abl_ger", "acc_sup", "abl_sup"}, nil, 2, nil, nil, "roa-nonfinite-header") if not vn then return "" end return [=[ |- ! colspan="2" rowspan="3" class="roa-nonfinite-header" | နာမ်သ္ပအရီုဂမၠိုၚ် ! colspan="8" class="roa-nonfinite-header" | ကြိယာစၞးနမ် ! colspan="4" class="roa-nonfinite-header" | ဂၠဝ် |- ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ဗဳဇဂကူ ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပြကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပရေၚ်မလၚ် ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ကမ္မကာရက ! colspan="2" class="roa-nonfinite-header" style="width:12.5%;" | ပရေၚ်မလၚ် |-]=] .. vn end local function make_footnotes(data) local tbl, i = {}, 0 for k, v in pairs(data.footnotes) do i = i + 1 tbl[i] = '<sup class="roa-red-superscript">' .. tostring(k) .. '</sup>' .. v .. '<br>' end return concat(tbl) end -- Make the table local function make_table(data) data.actual_lemma = export.get_lemma_forms(data) convert_forms_into_links(data) local title = data.title return require("Module:TemplateStyles")("Module:roa-verb/style.css") .. [=[ <div class="NavFrame"> <div class="NavHead"> &nbsp;&nbsp;&nbsp;Conjugation of ]=] .. get_displayable_lemma(data.actual_lemma) .. (table_len(title) > 0 and " (" .. concat(title, ", ") .. ")" or "") .. [=[</div> <div class="NavContent"> {| class="roa-inflection-table" data-toggle-category="inflection" ]=] .. make_indc_rows(data) .. make_subj_rows(data) .. make_impr_rows(data) .. make_nonfin_rows(data) .. make_vn_rows(data) .. [=[ |}</div></div>]=].. make_footnotes(data) end local function checkexist(data) if NAMESPACE ~= "" then return end local outerbreak = false local categories = data.categories for _, conjugation in pairs(data.forms) do if conjugation then if type(conjugation) ~= "table" then conjugation = {conjugation} end for _, conj in ipairs(conjugation) do if not cfind(conj, " ") and not cfind(conj, "[") then local physical_page = lang:logicalToPhysical(lang:stripDiacritics(conj)) local t = mw.title.new(physical_page) if t and not t:getContent() then -- insert_if_not(categories, "Latin verbs with red links in their inflection tables") outerbreak = true break end end end end if outerbreak then break end end end -- functions for creating external search hyperlinks local function cleanup(x) x:gsub("[[%]]", "") :gsub(" ", "+") return toNFC((ugsub(toNFD(x), "[^%w]+", ""))) end local function flatten_values(t) t = flatten(t) local i = 1 while true do local v = t[i] if v == nil then return t elseif cfind(v, "<") then remove(t, i) else t[i] = cleanup(v) i = i + 1 end end end local function link_google_books(verb, forms, domain) local function partition_XS_into_N(XS, N) local count = 0 local mensae = {} for _, v in pairs(XS) do if count % N == 0 then mensae[#mensae+1] = {} end count = count + 1 mensae[#mensae][#(mensae[#mensae])+1] = v end return mensae end local function forms_N_to_link(fs, N, args, site) return '[https://www.google.com/search?'..args..'&q='..site..'+%22'.. concat(fs, "%22+OR+%22") ..'%22 '..N..']' end local function make_links_txt(fs, N, site) local args = site == "Books" and "tbm=bks&lr=lang_la" or "" local links = {} for k,v in pairs(partition_XS_into_N(fs, N)) do links[#links+1] = forms_N_to_link(v,k,args,site=="Books" and "" or site) end return concat(links, ' - ') end return "Google "..domain.." forms of "..verb.." : "..make_links_txt(forms, 30, domain) end -- The main new entry point. function export.show(frame) local parent_args = frame:getParent().args local data, typeinfo = export.make_data(parent_args) if type(data) == "string" then -- json=1 specified return data end local domain = frame:getParent().args['search'] -- Test code to compare existing module to new one. if test_new_la_verb_module then local m_new_la_verb = require("Module:User:Benwing2/la-verb") local miscdata = { title = data.title, categories = data.categories, } local new_parent_args = frame:getParent().args local newdata = m_new_la_verb.make_data(new_parent_args) local newmiscdata = { title = newdata.title, categories = newdata.categories, } local all_verb_props = {"forms", "form_footnote_indices", "footnotes", "miscdata"} local difconj = false for _, prop in ipairs(all_verb_props) do local table = prop == "miscdata" and miscdata or data[prop] local newtable = prop == "miscdata" and newmiscdata or newdata[prop] for key, val in pairs(table) do local newval = newtable[key] if not forms_equal(val, newval) then -- Uncomment this to display the particular key and -- differing forms. -- error(key .. " " .. (val and concat_vals(val) or "nil") .. " || " .. (newval and concat_vals(newval) or "nil")) difconj = true break end end if difconj then break end -- Do the comparison the other way as well in case of extra keys -- in the new table. for key, newval in pairs(newtable) do local val = table[key] if not forms_equal(val, newval) then -- Uncomment this to display the particular key and -- differing forms. -- error(key .. " " .. (val and concat_vals(val) or "nil") .. " || " .. (newval and concat_vals(newval) or "nil")) difconj = true break end end if difconj then break end end track(difconj and "different-conj" or "same-conj") end if typeinfo.subtypes.suffix then data.categories = {} end -- Check if the links to the verb forms exist -- Has to happen after other categories are removed for suffixes checkexist(data) if domain == nil then return make_table(data) .. m_utilities.format_categories(data.categories, lang) end local verb = data['forms']['1s_pres_actv_indc'] ~= nil and ('[[' .. toNFC((ugsub(toNFD(data['forms']['1s_pres_actv_indc']), '[^%w]+', ""))) .. '|' .. data['forms']['1s_pres_actv_indc'] .. ']]') or 'verb' return link_google_books(verb, flatten_values(data['forms']), domain) end return export gtgin6dvil9ezb8iwojk4g7wv62nkd9 မဝ်ဂျူ:la-verb/data 828 114324 397227 146879 2026-06-19T16:32:40Z 咽頭べさ 33 397227 Scribunto text/plain local data = {} data.allowed_subtypes = require("Module:table").listToSet{ "3only", "i", "alwayssyncperf", "depon", "f", "fp", "highlydef", -- can be specified manually in the headword to display "highly defective" "impers", "imponly", "m", "mp", "n", "nofutr", "nofutractvptc", "noger", "noimp", "noinf", "nopass", "noperf", "nopres", "nosup", "nound", "np", "old2sgimp", "oldimpffutr", "optsemidepon", "optsyncperf", "p3inf", "pass3only", "passimpers", "perfaspres", "poetsyncperf", "semidepon", "sigm", "sigmpasv", "suffix", "supfutractvonly", } return data 0mpgxjz3jszv9oe1206y9wa4fg9geex ထာမ်ပလိက်:aa-conj-table 10 296074 397215 2026-06-19T12:39:10Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{| class="vsSwitcher inflection-table" data-toggle-category="သမ္ဗန္ဓ" style="text-align:center; border: 0.5px solid var(--wikt-palette-lightgrey,#CCC);" |- ! class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); text-align:left; width:40em" colspan="9" | &nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}'' {{#if:{{{type|}}}|(type {{{type}}} verb)|..." 397215 wikitext text/x-wiki {| class="vsSwitcher inflection-table" data-toggle-category="သမ္ဗန္ဓ" style="text-align:center; border: 0.5px solid var(--wikt-palette-lightgrey,#CCC);" |- ! class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); text-align:left; width:40em" colspan="9" | &nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}'' {{#if:{{{type|}}}|(type {{{type}}} verb)|(irregular)}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF);" rowspan=2 colspan=2 | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" colspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၃ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၃ |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|m}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|f}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{1}}}}} || {{l-self|aa|{{{2}}}}} || {{l-self|aa|{{{3}}}}} || {{l-self|aa|{{{4}}}}} || {{l-self|aa|{{{5}}}}} || {{l-self|aa|{{{6}}}}} || {{l-self|aa|{{{7}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{8}}}}} || {{l-self|aa|{{{9}}}}} || {{l-self|aa|{{{10}}}}} || {{l-self|aa|{{{11}}}}} || {{l-self|aa|{{{12}}}}} || {{l-self|aa|{{{13}}}}} || {{l-self|aa|{{{14}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{15}}}}} || {{l-self|aa|{{{16}}}}} || {{l-self|aa|{{{17}}}}} || {{l-self|aa|{{{18}}}}} || {{l-self|aa|{{{19}}}}} || {{l-self|aa|{{{20}}}}} || {{l-self|aa|{{{21}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{22}}}}} || {{l-self|aa|{{{23}}}}} || {{l-self|aa|{{{24}}}}} || {{l-self|aa|{{{25}}}}} || {{l-self|aa|{{{26}}}}} || {{l-self|aa|{{{27}}}}} || {{l-self|aa|{{{28}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{29}}}}} || {{l-self|aa|{{{30}}}}} || {{l-self|aa|{{{31}}}}} || {{l-self|aa|{{{32}}}}} || {{l-self|aa|{{{33}}}}} || {{l-self|aa|{{{34}}}}} || {{l-self|aa|{{{35}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{36}}}}} || {{l-self|aa|{{{37}}}}} || {{l-self|aa|{{{38}}}}} || {{l-self|aa|{{{39}}}}} || {{l-self|aa|{{{40}}}}} || {{l-self|aa|{{{41}}}}} || {{l-self|aa|{{{42}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်မၞုံကၠုၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{43}}}}} || {{l-self|aa|{{{44}}}}} || {{l-self|aa|{{{45}}}}} || {{l-self|aa|{{{46}}}}} || {{l-self|aa|{{{47}}}}} || {{l-self|aa|{{{48}}}}} || {{l-self|aa|{{{49}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{50}}}}} || {{l-self|aa|{{{51}}}}} || {{l-self|aa|{{{52}}}}} || {{l-self|aa|{{{53}}}}} || {{l-self|aa|{{{54}}}}} || {{l-self|aa|{{{55}}}}} || {{l-self|aa|{{{56}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်မပံၚ်စပ် I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{57}}}}} || {{l-self|aa|{{{58}}}}} || {{l-self|aa|{{{59}}}}} || {{l-self|aa|{{{60}}}}} || {{l-self|aa|{{{61}}}}} || {{l-self|aa|{{{62}}}}} || {{l-self|aa|{{{63}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{64}}}}} || {{l-self|aa|{{{65}}}}} || {{l-self|aa|{{{66}}}}} || {{l-self|aa|{{{67}}}}} || {{l-self|aa|{{{68}}}}} || {{l-self|aa|{{{69}}}}} || {{l-self|aa|{{{70}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{71}}}}} || {{l-self|aa|{{{72}}}}} || {{l-self|aa|{{{73}}}}} || {{l-self|aa|{{{74}}}}} || {{l-self|aa|{{{75}}}}} || {{l-self|aa|{{{76}}}}} || {{l-self|aa|{{{77}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်ပံၚ်စပ် II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{78}}}}} || {{l-self|aa|{{{79}}}}} || {{l-self|aa|{{{80}}}}} || {{l-self|aa|{{{81}}}}} || {{l-self|aa|{{{82}}}}} || {{l-self|aa|{{{83}}}}} || {{l-self|aa|{{{84}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{85}}}}} || {{l-self|aa|{{{86}}}}} || {{l-self|aa|{{{87}}}}} || {{l-self|aa|{{{88}}}}} || {{l-self|aa|{{{89}}}}} || {{l-self|aa|{{{90}}}}} || {{l-self|aa|{{{91}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{92}}}}} || {{l-self|aa|{{{93}}}}} || {{l-self|aa|{{{94}}}}} || {{l-self|aa|{{{95}}}}} || {{l-self|aa|{{{96}}}}} || {{l-self|aa|{{{97}}}}} || {{l-self|aa|{{{98}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်ပတ်ထၟိက် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{99}}}}} || {{l-self|aa|{{{100}}}}} || {{l-self|aa|{{{101}}}}} || {{l-self|aa|{{{102}}}}} || {{l-self|aa|{{{103}}}}} || {{l-self|aa|{{{104}}}}} || {{l-self|aa|{{{105}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{106}}}}} || {{l-self|aa|{{{107}}}}} || {{l-self|aa|{{{108}}}}} || {{l-self|aa|{{{109}}}}} || {{l-self|aa|{{{110}}}}} || {{l-self|aa|{{{111}}}}} || {{l-self|aa|{{{112}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အတိက်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{113}}}}} || {{l-self|aa|{{{114}}}}} || {{l-self|aa|{{{115}}}}} || {{l-self|aa|{{{116}}}}} || {{l-self|aa|{{{117}}}}} || {{l-self|aa|{{{118}}}}} || {{l-self|aa|{{{119}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{120}}}}} || {{l-self|aa|{{{121}}}}} || {{l-self|aa|{{{122}}}}} || {{l-self|aa|{{{123}}}}} || {{l-self|aa|{{{124}}}}} || {{l-self|aa|{{{125}}}}} || {{l-self|aa|{{{126}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{127}}}}} || {{l-self|aa|{{{128}}}}} || {{l-self|aa|{{{129}}}}} || {{l-self|aa|{{{130}}}}} || {{l-self|aa|{{{131}}}}} || {{l-self|aa|{{{132}}}}} || {{l-self|aa|{{{133}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{134}}}}} || {{l-self|aa|{{{135}}}}} || {{l-self|aa|{{{136}}}}} || {{l-self|aa|{{{137}}}}} || {{l-self|aa|{{{138}}}}} || {{l-self|aa|{{{139}}}}} || {{l-self|aa|{{{140}}}}} |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! rowspan=6 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်သ္ဂောံချပ်ဂၞန်စ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{141}}}}} || {{l-self|aa|{{{142}}}}} ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပါဲဗလေတ်ဟွံဗၠး ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{145}}}}} || {{l-self|aa|{{{146}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{143}}}}} || {{l-self|aa|{{{144}}}}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{147}}}}} || {{l-self|aa|{{{148}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-ဟ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်-ဣ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-က ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်(န)-ှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်နှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟၟဲတွဵုဒနက် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | လုပ်ကၠောန်စွံလဝ်ဟၟဲတွဵုဒနက် |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်သ္ပအရီု-">ဝ</abbr> ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="မဒုၚ်လဝ်ယၟုသ္ပအရီု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနသ္ပအရီု-">န</abbr> |- class="vsHide" | {{l-self|aa|{{{149}}}}} || {{l-self|aa|{{{150}}}}} || {{l-self|aa|{{{151}}}}} || {{l-self|aa|{{{152}}}}} || {{l-self|aa|{{{153}}}}} || {{l-self|aa|{{{154}}}}} || {{l-self|aa|{{{155}}}}} || {{l-self|aa|{{{156}}}}} |- | colspan=9 class="vsHide" | {| class="vsSwitcher inflection-table" data-toggle-category="ကာလမပံၚ်စပ်ဂမၠိုၚ်" border="1px solid #aaaaaa" style="border-collapse:collapse; background:var(--wikt-palette-indigo-1,rgb(95%,95%,100%)); text-align:center; width:100%" ! colspan=9 class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); font-weight: bold;" | ကာလမပံၚ်စပ်လဝ်ဂမၠိုၚ် |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကြိယာသမ္ပယုတ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဆေၚ်စပ်ကဵုဇွောံအဆက်လက္ကရဴ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မွဲဂရိုက်ဓဝ်ဂမၠိုၚ် | colspan=7 | ''မပါဲဗလေတ်ဟွံဗၠး'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | past perfect | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴပစ္စုပ္ပန် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴအနာဂတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အတိက် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်ပစ္စုပ္ပန် | colspan=7 | ''တၚ်ဂလာန်ဗိုန်ဗတ်ဟွံက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အနာဂတ် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အနာဂတ်လွာဲဂှ် | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်ဆေၚ်စပ်ကဵုမထတ်မ္ၚိုဟ် I | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|sugé}}''''' + '''''{{m|aa|-k}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|sugé}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' '''''{{m|aa|-k}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံဒး | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|xaaxé}}''' ဝါ '''{{m|aa|raaré}}''''' |} |}<noinclude>{{tcat|conj:-}}</noinclude> lnwkdc9oihck7kaeuw85kzqofcxpy4t 397216 397215 2026-06-19T12:41:40Z 咽頭べさ 33 397216 wikitext text/x-wiki {| class="vsSwitcher inflection-table" data-toggle-category="သမ္ဗန္ဓ" style="text-align:center; border: 0.5px solid var(--wikt-palette-lightgrey,#CCC);" |- ! class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); text-align:left; width:40em" colspan="9" | &nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}'' {{#if:{{{type|}}}|(type {{{type}}} ကြိယာ)|(ခလံက်ခနက်)}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF);" rowspan=2 colspan=2 | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" colspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၃ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၃ |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|m}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|f}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{1}}}}} || {{l-self|aa|{{{2}}}}} || {{l-self|aa|{{{3}}}}} || {{l-self|aa|{{{4}}}}} || {{l-self|aa|{{{5}}}}} || {{l-self|aa|{{{6}}}}} || {{l-self|aa|{{{7}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{8}}}}} || {{l-self|aa|{{{9}}}}} || {{l-self|aa|{{{10}}}}} || {{l-self|aa|{{{11}}}}} || {{l-self|aa|{{{12}}}}} || {{l-self|aa|{{{13}}}}} || {{l-self|aa|{{{14}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{15}}}}} || {{l-self|aa|{{{16}}}}} || {{l-self|aa|{{{17}}}}} || {{l-self|aa|{{{18}}}}} || {{l-self|aa|{{{19}}}}} || {{l-self|aa|{{{20}}}}} || {{l-self|aa|{{{21}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{22}}}}} || {{l-self|aa|{{{23}}}}} || {{l-self|aa|{{{24}}}}} || {{l-self|aa|{{{25}}}}} || {{l-self|aa|{{{26}}}}} || {{l-self|aa|{{{27}}}}} || {{l-self|aa|{{{28}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{29}}}}} || {{l-self|aa|{{{30}}}}} || {{l-self|aa|{{{31}}}}} || {{l-self|aa|{{{32}}}}} || {{l-self|aa|{{{33}}}}} || {{l-self|aa|{{{34}}}}} || {{l-self|aa|{{{35}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{36}}}}} || {{l-self|aa|{{{37}}}}} || {{l-self|aa|{{{38}}}}} || {{l-self|aa|{{{39}}}}} || {{l-self|aa|{{{40}}}}} || {{l-self|aa|{{{41}}}}} || {{l-self|aa|{{{42}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်မၞုံကၠုၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{43}}}}} || {{l-self|aa|{{{44}}}}} || {{l-self|aa|{{{45}}}}} || {{l-self|aa|{{{46}}}}} || {{l-self|aa|{{{47}}}}} || {{l-self|aa|{{{48}}}}} || {{l-self|aa|{{{49}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{50}}}}} || {{l-self|aa|{{{51}}}}} || {{l-self|aa|{{{52}}}}} || {{l-self|aa|{{{53}}}}} || {{l-self|aa|{{{54}}}}} || {{l-self|aa|{{{55}}}}} || {{l-self|aa|{{{56}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်မပံၚ်စပ် I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{57}}}}} || {{l-self|aa|{{{58}}}}} || {{l-self|aa|{{{59}}}}} || {{l-self|aa|{{{60}}}}} || {{l-self|aa|{{{61}}}}} || {{l-self|aa|{{{62}}}}} || {{l-self|aa|{{{63}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{64}}}}} || {{l-self|aa|{{{65}}}}} || {{l-self|aa|{{{66}}}}} || {{l-self|aa|{{{67}}}}} || {{l-self|aa|{{{68}}}}} || {{l-self|aa|{{{69}}}}} || {{l-self|aa|{{{70}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{71}}}}} || {{l-self|aa|{{{72}}}}} || {{l-self|aa|{{{73}}}}} || {{l-self|aa|{{{74}}}}} || {{l-self|aa|{{{75}}}}} || {{l-self|aa|{{{76}}}}} || {{l-self|aa|{{{77}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်ပံၚ်စပ် II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{78}}}}} || {{l-self|aa|{{{79}}}}} || {{l-self|aa|{{{80}}}}} || {{l-self|aa|{{{81}}}}} || {{l-self|aa|{{{82}}}}} || {{l-self|aa|{{{83}}}}} || {{l-self|aa|{{{84}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{85}}}}} || {{l-self|aa|{{{86}}}}} || {{l-self|aa|{{{87}}}}} || {{l-self|aa|{{{88}}}}} || {{l-self|aa|{{{89}}}}} || {{l-self|aa|{{{90}}}}} || {{l-self|aa|{{{91}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{92}}}}} || {{l-self|aa|{{{93}}}}} || {{l-self|aa|{{{94}}}}} || {{l-self|aa|{{{95}}}}} || {{l-self|aa|{{{96}}}}} || {{l-self|aa|{{{97}}}}} || {{l-self|aa|{{{98}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်ပတ်ထၟိက် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{99}}}}} || {{l-self|aa|{{{100}}}}} || {{l-self|aa|{{{101}}}}} || {{l-self|aa|{{{102}}}}} || {{l-self|aa|{{{103}}}}} || {{l-self|aa|{{{104}}}}} || {{l-self|aa|{{{105}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{106}}}}} || {{l-self|aa|{{{107}}}}} || {{l-self|aa|{{{108}}}}} || {{l-self|aa|{{{109}}}}} || {{l-self|aa|{{{110}}}}} || {{l-self|aa|{{{111}}}}} || {{l-self|aa|{{{112}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အတိက်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{113}}}}} || {{l-self|aa|{{{114}}}}} || {{l-self|aa|{{{115}}}}} || {{l-self|aa|{{{116}}}}} || {{l-self|aa|{{{117}}}}} || {{l-self|aa|{{{118}}}}} || {{l-self|aa|{{{119}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{120}}}}} || {{l-self|aa|{{{121}}}}} || {{l-self|aa|{{{122}}}}} || {{l-self|aa|{{{123}}}}} || {{l-self|aa|{{{124}}}}} || {{l-self|aa|{{{125}}}}} || {{l-self|aa|{{{126}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{127}}}}} || {{l-self|aa|{{{128}}}}} || {{l-self|aa|{{{129}}}}} || {{l-self|aa|{{{130}}}}} || {{l-self|aa|{{{131}}}}} || {{l-self|aa|{{{132}}}}} || {{l-self|aa|{{{133}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{134}}}}} || {{l-self|aa|{{{135}}}}} || {{l-self|aa|{{{136}}}}} || {{l-self|aa|{{{137}}}}} || {{l-self|aa|{{{138}}}}} || {{l-self|aa|{{{139}}}}} || {{l-self|aa|{{{140}}}}} |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! rowspan=6 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်သ္ဂောံချပ်ဂၞန်စ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{141}}}}} || {{l-self|aa|{{{142}}}}} ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပါဲဗလေတ်ဟွံဗၠး ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{145}}}}} || {{l-self|aa|{{{146}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{143}}}}} || {{l-self|aa|{{{144}}}}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{147}}}}} || {{l-self|aa|{{{148}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-ဟ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်-ဣ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-က ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်(န)-ှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်နှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟၟဲတွဵုဒနက် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | လုပ်ကၠောန်စွံလဝ်ဟၟဲတွဵုဒနက် |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်သ္ပအရီု-">ဝ</abbr> ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="မဒုၚ်လဝ်ယၟုသ္ပအရီု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနသ္ပအရီု-">န</abbr> |- class="vsHide" | {{l-self|aa|{{{149}}}}} || {{l-self|aa|{{{150}}}}} || {{l-self|aa|{{{151}}}}} || {{l-self|aa|{{{152}}}}} || {{l-self|aa|{{{153}}}}} || {{l-self|aa|{{{154}}}}} || {{l-self|aa|{{{155}}}}} || {{l-self|aa|{{{156}}}}} |- | colspan=9 class="vsHide" | {| class="vsSwitcher inflection-table" data-toggle-category="ကာလမပံၚ်စပ်ဂမၠိုၚ်" border="1px solid #aaaaaa" style="border-collapse:collapse; background:var(--wikt-palette-indigo-1,rgb(95%,95%,100%)); text-align:center; width:100%" ! colspan=9 class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); font-weight: bold;" | ကာလမပံၚ်စပ်လဝ်ဂမၠိုၚ် |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကြိယာသမ္ပယုတ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဆေၚ်စပ်ကဵုဇွောံအဆက်လက္ကရဴ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မွဲဂရိုက်ဓဝ်ဂမၠိုၚ် | colspan=7 | ''မပါဲဗလေတ်ဟွံဗၠး'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | past perfect | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴပစ္စုပ္ပန် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴအနာဂတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အတိက် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်ပစ္စုပ္ပန် | colspan=7 | ''တၚ်ဂလာန်ဗိုန်ဗတ်ဟွံက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အနာဂတ် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အနာဂတ်လွာဲဂှ် | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်ဆေၚ်စပ်ကဵုမထတ်မ္ၚိုဟ် I | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|sugé}}''''' + '''''{{m|aa|-k}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|sugé}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' '''''{{m|aa|-k}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံဒး | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|xaaxé}}''' ဝါ '''{{m|aa|raaré}}''''' |} |}<noinclude>{{tcat|conj:-}}</noinclude> 157zn37n2wyg2p6kndlj68b2mz83dli 397217 397216 2026-06-19T12:50:47Z 咽頭べさ 33 397217 wikitext text/x-wiki {| class="vsSwitcher inflection-table" data-toggle-category="သမ္ဗန္ဓ" style="text-align:center; border: 0.5px solid var(--wikt-palette-lightgrey,#CCC);" |- ! class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); text-align:left; width:40em" colspan="9" | &nbsp; &nbsp; သမ္ဗန္ဓဆေၚ်စပ်ကဵု ''{{pagename}}'' {{#if:{{{type|}}}|(type {{{type}}} ကြိယာ)|(ခလံက်ခနက်)}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF);" rowspan=2 colspan=2 | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" colspan=2 | ကိုန်ဨကဝုစ်မရနုက်ကဵု၃ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၁ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၂ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" rowspan=2 | ကိုန်ဗဟုဝစ်မရနုက်ကဵု၃ |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|m}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | {{g|f}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{1}}}}} || {{l-self|aa|{{{2}}}}} || {{l-self|aa|{{{3}}}}} || {{l-self|aa|{{{4}}}}} || {{l-self|aa|{{{5}}}}} || {{l-self|aa|{{{6}}}}} || {{l-self|aa|{{{7}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{8}}}}} || {{l-self|aa|{{{9}}}}} || {{l-self|aa|{{{10}}}}} || {{l-self|aa|{{{11}}}}} || {{l-self|aa|{{{12}}}}} || {{l-self|aa|{{{13}}}}} || {{l-self|aa|{{{14}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{15}}}}} || {{l-self|aa|{{{16}}}}} || {{l-self|aa|{{{17}}}}} || {{l-self|aa|{{{18}}}}} || {{l-self|aa|{{{19}}}}} || {{l-self|aa|{{{20}}}}} || {{l-self|aa|{{{21}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{22}}}}} || {{l-self|aa|{{{23}}}}} || {{l-self|aa|{{{24}}}}} || {{l-self|aa|{{{25}}}}} || {{l-self|aa|{{{26}}}}} || {{l-self|aa|{{{27}}}}} || {{l-self|aa|{{{28}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{29}}}}} || {{l-self|aa|{{{30}}}}} || {{l-self|aa|{{{31}}}}} || {{l-self|aa|{{{32}}}}} || {{l-self|aa|{{{33}}}}} || {{l-self|aa|{{{34}}}}} || {{l-self|aa|{{{35}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{36}}}}} || {{l-self|aa|{{{37}}}}} || {{l-self|aa|{{{38}}}}} || {{l-self|aa|{{{39}}}}} || {{l-self|aa|{{{40}}}}} || {{l-self|aa|{{{41}}}}} || {{l-self|aa|{{{42}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်မၞုံကၠုၚ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{43}}}}} || {{l-self|aa|{{{44}}}}} || {{l-self|aa|{{{45}}}}} || {{l-self|aa|{{{46}}}}} || {{l-self|aa|{{{47}}}}} || {{l-self|aa|{{{48}}}}} || {{l-self|aa|{{{49}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{50}}}}} || {{l-self|aa|{{{51}}}}} || {{l-self|aa|{{{52}}}}} || {{l-self|aa|{{{53}}}}} || {{l-self|aa|{{{54}}}}} || {{l-self|aa|{{{55}}}}} || {{l-self|aa|{{{56}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်မပံၚ်စပ် I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{57}}}}} || {{l-self|aa|{{{58}}}}} || {{l-self|aa|{{{59}}}}} || {{l-self|aa|{{{60}}}}} || {{l-self|aa|{{{61}}}}} || {{l-self|aa|{{{62}}}}} || {{l-self|aa|{{{63}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{64}}}}} || {{l-self|aa|{{{65}}}}} || {{l-self|aa|{{{66}}}}} || {{l-self|aa|{{{67}}}}} || {{l-self|aa|{{{68}}}}} || {{l-self|aa|{{{69}}}}} || {{l-self|aa|{{{70}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{71}}}}} || {{l-self|aa|{{{72}}}}} || {{l-self|aa|{{{73}}}}} || {{l-self|aa|{{{74}}}}} || {{l-self|aa|{{{75}}}}} || {{l-self|aa|{{{76}}}}} || {{l-self|aa|{{{77}}}}} |- class="vsHide" ! rowspan=3 style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | ပရေၚ်ပံၚ်စပ် II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF); width:11%;" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်ဂးသ္ပဒတန်-">ဝ</abbr> | {{l-self|aa|{{{78}}}}} || {{l-self|aa|{{{79}}}}} || {{l-self|aa|{{{80}}}}} || {{l-self|aa|{{{81}}}}} || {{l-self|aa|{{{82}}}}} || {{l-self|aa|{{{83}}}}} || {{l-self|aa|{{{84}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုမဒုၚ်လဝ်ယၟု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနဂးသ္ပဒတန်-">န</abbr> | {{l-self|aa|{{{85}}}}} || {{l-self|aa|{{{86}}}}} || {{l-self|aa|{{{87}}}}} || {{l-self|aa|{{{88}}}}} || {{l-self|aa|{{{89}}}}} || {{l-self|aa|{{{90}}}}} || {{l-self|aa|{{{91}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{92}}}}} || {{l-self|aa|{{{93}}}}} || {{l-self|aa|{{{94}}}}} || {{l-self|aa|{{{95}}}}} || {{l-self|aa|{{{96}}}}} || {{l-self|aa|{{{97}}}}} || {{l-self|aa|{{{98}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်ပတ်ထၟိက် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{99}}}}} || {{l-self|aa|{{{100}}}}} || {{l-self|aa|{{{101}}}}} || {{l-self|aa|{{{102}}}}} || {{l-self|aa|{{{103}}}}} || {{l-self|aa|{{{104}}}}} || {{l-self|aa|{{{105}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{106}}}}} || {{l-self|aa|{{{107}}}}} || {{l-self|aa|{{{108}}}}} || {{l-self|aa|{{{109}}}}} || {{l-self|aa|{{{110}}}}} || {{l-self|aa|{{{111}}}}} || {{l-self|aa|{{{112}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အတိက်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{113}}}}} || {{l-self|aa|{{{114}}}}} || {{l-self|aa|{{{115}}}}} || {{l-self|aa|{{{116}}}}} || {{l-self|aa|{{{117}}}}} || {{l-self|aa|{{{118}}}}} || {{l-self|aa|{{{119}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{120}}}}} || {{l-self|aa|{{{121}}}}} || {{l-self|aa|{{{122}}}}} || {{l-self|aa|{{{123}}}}} || {{l-self|aa|{{{124}}}}} || {{l-self|aa|{{{125}}}}} || {{l-self|aa|{{{126}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ I ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{127}}}}} || {{l-self|aa|{{{128}}}}} || {{l-self|aa|{{{129}}}}} || {{l-self|aa|{{{130}}}}} || {{l-self|aa|{{{131}}}}} || {{l-self|aa|{{{132}}}}} || {{l-self|aa|{{{133}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{134}}}}} || {{l-self|aa|{{{135}}}}} || {{l-self|aa|{{{136}}}}} || {{l-self|aa|{{{137}}}}} || {{l-self|aa|{{{138}}}}} || {{l-self|aa|{{{139}}}}} || {{l-self|aa|{{{140}}}}} |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဨကဝုစ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကိုန်ဗဟုဝစ် ! rowspan=6 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်သ္ဂောံချပ်ဂၞန်စ ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{141}}}}} || {{l-self|aa|{{{142}}}}} ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပါဲဗလေတ်ဟွံဗၠး ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | {{l-self|aa|{{{145}}}}} || {{l-self|aa|{{{146}}}}} |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{143}}}}} || {{l-self|aa|{{{144}}}}} ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | {{l-self|aa|{{{147}}}}} || {{l-self|aa|{{{148}}}}} |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-ဟ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်-ဣ ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-က ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်(န)-ှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မပြံၚ်လှာဲကြိယာ-အိန်နှ် ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟၟဲတွဵုဒနက် ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | လုပ်ကၠောန်စွံလဝ်ဟၟဲတွဵုဒနက် |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="သ္ပအရီုအတိုၚ်အရေဝ် / သ္ပအရီုဟွံသေၚ်သ္ပအရီု-">ဝ</abbr> ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | <abbr title="မဒုၚ်လဝ်ယၟုသ္ပအရီု / သ္ပအရီုဆေၚ်စပ်ကဵုကြိယာဝိသေသနသ္ပအရီု-">န</abbr> |- class="vsHide" | {{l-self|aa|{{{149}}}}} || {{l-self|aa|{{{150}}}}} || {{l-self|aa|{{{151}}}}} || {{l-self|aa|{{{152}}}}} || {{l-self|aa|{{{153}}}}} || {{l-self|aa|{{{154}}}}} || {{l-self|aa|{{{155}}}}} || {{l-self|aa|{{{156}}}}} |- | colspan=9 class="vsHide" | {| class="vsSwitcher inflection-table" data-toggle-category="ကာလမပံၚ်စပ်ဂမၠိုၚ်" border="1px solid #aaaaaa" style="border-collapse:collapse; background:var(--wikt-palette-indigo-1,rgb(95%,95%,100%)); text-align:center; width:100%" ! colspan=9 class="vsToggleElement" style="background: var(--wikt-palette-indigo-4,#CCCCFF); font-weight: bold;" | ကာလမပံၚ်စပ်လဝ်ဂမၠိုၚ် |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကြိယာသမ္ပယုတ် ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဆေၚ်စပ်ကဵုဇွောံအဆက်လက္ကရဴ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | မွဲဂရိုက်ဓဝ်ဂမၠိုၚ် | colspan=7 | ''မပါဲဗလေတ်ဟွံဗၠး'' + '''''{{m|aa|-m}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | past perfect | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴပစ္စုပ္ပန် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴအနာဂတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴတၚ်ဂလာန်ဗိုန်ဗတ်'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အတိက် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''' ဝါ '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်ပစ္စုပ္ပန် | colspan=7 | ''တၚ်ဂလာန်ဗိုန်ဗတ်ဟွံက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|én}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပရေၚ်တောတက်တိုန်အနာဂတ် | colspan=7 | ''မပြံၚ်လှာဲကြိယာ-က'' + ''ပရေၚ်မၞုံကၠုၚ်နကဵု '''{{m|aa|sugé}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | အနာဂတ်လွာဲဂှ် | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်ဆေၚ်စပ်ကဵုမထတ်မ္ၚိုဟ် I | colspan=7 | ''သမ္ဗန္ဓတၚ်ဂလာန်ဗိုန်ဗတ် I'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဗီုပြၚ်မက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + '''''{{m|aa|-m}}''''' + '''''{{m|aa|takké}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ပစ္စုပ္ပန်<br />ဆေၚ်စပ်ကဵုအကာဲအရာ II ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဟွံက္ဍိုပ်ပေၚ်'' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|wée}}''''' + ''တၚ်ရန်တၟံသဗ္ဗနာမ်'' + '''''{{m|aa|tekkék}}''''' |- class="vsHide" ! rowspan=2 style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံက္ဍိုပ်ပေၚ်တဴ<br />ဆေၚ်စပ်ကဵုအကာဲအရာ ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | တၚ်ဂလာန်ဗိုန်ဗတ် | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|sugé}}''''' + '''''{{m|aa|-k}}''''' |- class="vsHide" ! style="width:11%; background: var(--wikt-palette-indigo-4,#CCCCFF)" | ကယျာန်ပါဲ | colspan=7 | ''ဗီုပြၚ်မက္ဍိုပ်ပေၚ်'' + '''''{{m|aa|sugé}}''''' + ''မပါဲဗလေတ်ဟွံဗၠးနကဵု '''{{m|aa|wée}}''''' '''''{{m|aa|-k}}''''' |- class="vsHide" ! colspan=2 style="background: var(--wikt-palette-indigo-4,#CCCCFF)" | ဟွံဒး | colspan=7 | '''''{{l-self|aa|{{{conn}}}}}''''' + ''ဟွံက္ဍိုပ်ပေၚ်တဴဖအိုတ်နကဵု '''{{m|aa|xaaxé}}''' ဝါ '''{{m|aa|raaré}}''''' |} |}<noinclude>{{tcat|conj:-}}[[ကဏ္ဍ:ထာမ်ပလိက်မသ္ပထၜာတ်လဝ်-အဝ်တဝ်နူကဵု SurjectionBot]]</noinclude> o6stwewwlcwj2kicedaz3r9t11gz728 ကဏ္ဍ:ထာမ်ပလိက်မသ္ပထၜာတ်လဝ်-အဝ်တဝ်နူကဵု SurjectionBot 14 296075 397218 2026-06-19T12:54:12Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထိၚ်ဒက်မၚ်မွဲလဝ်ဝိက်ရှေန်နရဳဂမၠိုၚ်]]" 397218 wikitext text/x-wiki [[ကဏ္ဍ:ထိၚ်ဒက်မၚ်မွဲလဝ်ဝိက်ရှေန်နရဳဂမၠိုၚ်]] 2jdivu52z04aidb3yi696nc41wed5f1 abicio 0 296076 397220 2026-06-19T15:09:48Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|la|abiiciō|abjiciō}} ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA|abiciō|eccl=0}} * {{la-IPA|abjiciō}} ===ကြိယာ=== {{la-verb|3|abiciō|abiēc|abiect}} # သကဵုကၠဟ် ဝါ ထဝေၚ်ကၠဟ်ဖျေံထောံ ဝါ ဒၞာဲဇမ္ၚောဲတေံ၊ ထဝေၚ် ဝါ ကၠဟ..." 397220 wikitext text/x-wiki ==လပ်တေန်== ===ပွံၚ်နဲတၞဟ်=== * {{alt|la|abiiciō|abjiciō}} ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA|abiciō|eccl=0}} * {{la-IPA|abjiciō}} ===ကြိယာ=== {{la-verb|3|abiciō|abiēc|abiect}} # သကဵုကၠဟ် ဝါ ထဝေၚ်ကၠဟ်ဖျေံထောံ ဝါ ဒၞာဲဇမ္ၚောဲတေံ၊ ထဝေၚ် ဝါ ကၠဟ်ထောံဇမ္ၚောဲမ္ၚောဲ ဝါ လ္ပာ်သ္ကဲ။ # သကဵုကေတ်တိုန်၊ ဗိုတ်ကၠဟ်ထောံ၊ ဗလးထောံဇကုသၟး၊ ထဝေၚ်ထောံ။ # သကဵုပ္ဍဵုဒလိုက်ထောံ၊ ဖျေံထောံကဆံၚ်၊ တရဳကၠေံ၊ ဖျဝ်ဖျေံ၊ ဒဗိုတ်ဖျေံထောံ။ # သကဵုထပိုတ်ထောံ၊ ဇၞးကေတ်။ # သကဵုသွံၚုဟ်မးတန်တန်၊ မဖျေံထောံၚုဟ်ဂၠိုၚ်လောန်အာ၊ ပၠေၚ်ထောံ၊ ဖျဝ်ဖျေံထောံကဆံၚ်၊ အထေၚ်ဍောတ်သွတ်။ # သကဵုဇကုမကၠဟ်ထောံလ္တူဆေၚ်စပ်ကဵုဖျေံသ္ဇိုၚ်၊ ဇကုမကၠဟ်ထောံဇမ္ၚောဲမ္ၚောဲ၊ မဖျေံထောံကဆံၚ်ဇကု၊ မကေတ်တိုန်အပ္ဍဲဗလးကၠဟ်ထောံပရေၚ်တၚ်ရန်တၟံ။ # သကဵုဗလးတၟာတ်ထောံအမှု၊ ထပိုတ်၊ လှောဝ်ဒဗိုတ်၊ လဗိုတ်၊ ကၠဟ်။ ====သမ္ဗန္ဓ==== {{la-conj|3|abiciō|abiēc|abiect}} ===မဒုၚ်လွဳစ=== * {{desc|en|abject}} * {{desc|it|abiettare}} * {{desc|pt|abjetar}} * {{desc|es|abyectar}} 4hznokjzyhbaj1u39rtsgpupdl34icr ထာမ်ပလိက်:la-conj 10 296077 397221 2026-06-19T15:10:47Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{#invoke:la-verb|show}}<!-- --><noinclude>{{documentation}}</noinclude>" 397221 wikitext text/x-wiki {{#invoke:la-verb|show}}<!-- --><noinclude>{{documentation}}</noinclude> fv1bm4jpuanm3k9d4bvmkmrn2m26ebl မဝ်ဂျူ:la-verb/doc 828 296078 397223 2026-06-19T16:00:22Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "This module is used for the various [[:ကဏ္ဍ:ထာမ်ပလိက်လပ်တေန်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|Latin verb inflection tables]]. <includeonly> {{module cat|la}} </includeonly>" 397223 wikitext text/x-wiki This module is used for the various [[:ကဏ္ဍ:ထာမ်ပလိက်လပ်တေန်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|Latin verb inflection tables]]. <includeonly> {{module cat|la}} </includeonly> lkfq9uyorn0d5vxhfmsyepi143opb3c ထာမ်ပလိက်:la-conj/documentation 10 296079 397225 2026-06-19T16:28:03Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}}{{uses lua|Module:la-verb}} This template creates a conjugation table for all types of Latin verbs. It replaces the several {{temp|la-conj-*}} templates that used to exist. ==Basic usage== For basic verbs of conjugation classes 1, 2 and 4, specify them as follows: * {{m|la|amō||to love}}: {{temp|la-conj|1+|amō}} * {{m|la|habeō||to have}}: {{temp|la-conj|2+|habeō}} * {{m|la|custōdiō||t..." 397225 wikitext text/x-wiki {{documentation subpage}}{{uses lua|Module:la-verb}} This template creates a conjugation table for all types of Latin verbs. It replaces the several {{temp|la-conj-*}} templates that used to exist. ==Basic usage== For basic verbs of conjugation classes 1, 2 and 4, specify them as follows: * {{m|la|amō||to love}}: {{temp|la-conj|1+|amō}} * {{m|la|habeō||to have}}: {{temp|la-conj|2+|habeō}} * {{m|la|custōdiō||to guard}}: {{temp|la-conj|4+|custōdiō}} * {{m|la|audiō||to hear}}: {{temp|la-conj|4++|audiō}} Here, the <code>+</code> and <code>++</code> signs means to use the default principal parts: * ''amō, amāre, amāvī, amātum'' * ''habeō, habēre, habuī, habitum'' * ''custōdiō, custōdīre, custōdīvī, custōdītum'' * ''audiō, audīre, audīvī/audiī, audītum'' Note the difference between <code>4+</code>, which generates a single perfect stem in ''-īv'', and <code>4++</code>, which generates two perfect stems in ''-īv'' and ''-i''. For verbs of conjugation classes 3, and more complex verbs of other conjugation classes, you will need to specify the verb class along with the lemma, perfect stem and supine stem, as follows: * {{m|la|capiō||to take}}: {{temp|la-conj|3|capiō|cēp|capt}} * {{m|la|videō||to see}}: {{temp|la-conj|2|videō|vīd|vīs}} For deponent verbs and semi-deponent verbs, only the supine stem is given: * {{m|la|sequor||to follow}}: {{temp|la-conj|3|sequor|secūt}} * {{m|la|gaudeō||to rejoice}}: {{temp|la-conj|2.semi-depon|gaudeō|gāvīs}} The conjugation class can optionally be followed by one or more subtypes (as in the above example {{m|la|gaudeō}}): * {{m|la|pausō||to pause}}: {{temp|la-conj|1+.nopass|pausō}} (no passives exist) * {{m|la|veniō||to come}}: {{temp|la-conj|4.pass-impers|veniō|vēn|vent}} (only impersonal passives exist) * {{m|la|placeō||to please}}: {{temp|la-conj|2+.opt-semi-depon.noimp|placeō}} (the verb is optionally semi-deponent, i.e. the perfect is either ''placuī'' or ''placitus sum'', and there is no imperative) If there is no perfect, or no supine, just leave the form out: * {{m|la|nō||to swim}}: {{temp|la-conj|1.nopass|nō|nāv}} (or equivalently {{temp|la-conj|1+.nopass|nō||-}}) As shown in the previous example, when you use one of the <code>+</code> variants, which automatically generate default perfect and supine stems, you can cancel any of the stems using <code>-</code>. Impersonal and third-person-only verbs should use the third-person singular as the lemma, except for highly irregular verbs that use the conjugation type <code>irreg</code> (see below): * {{m|la|grandinat||to hail}}: {{temp|la-conj|1.nopass|grandinat}} * {{m|la|pertaedet||to disgust, to bore}}: {{temp|la-conj|2.semi-depon|pertaedet|pertaes}} * {{m|la|decet||to suit}}: {{temp|la-conj|2.3only.nopass|decet|decu}} If the third-person singular is provided as the lemma, it is assumed to be impersonal. If the verb is third-person-only (i.e. it has both third-person singular and plural, but no other forms), use the subtype <code>.3only</code>. ==Parameters== The following parameters are allowed: * {{para|1}}: Conjugation type, along with any subtypes. * {{para|2}}: Lemma with macrons; may include links. * {{para|3}}: Perfect stem (or supine stem if the verb is deponent or semi-deponent). Separate multiple stems with a slash. * {{para|4}}: Supine stem, for verbs that aren't deponent or semi-deponent. Separate multiple stems with a slash. * {{para|prefix}}: Prefix to add to all forms (or to non-passive forms if {{para|passive_prefix}} is given); may include links. * {{para|passive_prefix}}: Prefix to add to passive forms; may include links. * {{para|suffix}}: Suffix to add to all forms (or to non-passive forms if {{para|passive_suffix}} is given); may include links. * {{para|passive_suffix}}: Suffix to add to passive forms; may include links. Examples of using the prefix and suffix parameters: * {{m|la|acū pingō||to [[tattoo]]}}: <code><nowiki>{{la-conj|prefix=[[acus|acū]]|3|pingō|pīnx|pict}}</nowiki></code> * {{m|la|dūcō uxōrem||to [[marry]]}}: <code><nowiki>{{la-conj|irreg|dūcō|suffix=[[uxor|uxōrem]]|passive_suffix=[[uxor]]}}</nowiki></code> In addition, any individual form can be overridden, e.g. using {{para|1s_pres_actv_indc}} to override the first-singular present active indicative. See [[#Overriding individual forms]]. ===Subtypes=== Here is a complete list of available subtypes: * Not detected automatically: ** <code>.3only</code>: Third-person singular and plural forms only. Places the entry into [[:Category:Latin third-person-only verbs]]. ** <code>.always-sync-perf</code>: ????? Currently used for {{m|la|saeviō}} only. ** <code>.no-fut</code>: No future tenses. Places the entry into [[:Category:Latin verbs with missing future]]. ** <code>.no-imp</code>: No imperative. Places the entry into [[:Category:Latin verbs with missing imperative]]. ** <code>.no-pass</code>: No passive forms. Places the entry into [[:Category:Latin active-only verbs]]. ** <code>.no-sup</code>: No supine stem. Places the entry into [[:Category:Latin verbs with missing supine stem]]. ** <code>.opt-semi-depon</code>: Optional semi-deponent verbs use perfective passive forms with active meaning, but also have perfect active forms with the same meaning, and have no imperfective passive. Places the entry into [[:Category:Latin semi-deponent verbs]] and [[:Category:Latin optionally semi-deponent verbs]]. ** <code>.opt-sync-perf</code>: ????? Currently used for {{m|la|serviō}} only. ** <code>.p3-inf</code>: The poetic present passive infinitive form in ''-ier'' is attested. ** <code>.pass-3only</code>: The passive voice has third-person singular and plural forms only. Places the entry into [[:Category:Latin verbs with third-person passive]]. ** <code>.pass-impers</code>: Impersonal in the passive voice (third-person singular passive forms only). Places the entry into [[:Category:Latin verbs with impersonal passive]]. ** <code>.perf-as-pres</code>: Perfect forms have present meaning. Places the entry into [[:Category:Latin verbs with missing present stem]] and [[:Category:Latin verbs with perfect forms used in the present tense]]. ** <code>.poet-sync-perf</code>: The poetic syncopated perfect forms lacking ''-vi-'' or ''-ui-'' are attested. ** <code>.semi-depon</code>: Semi-deponent verbs use perfective passive forms with active meaning, and have no imperfective passive. Places the entry into [[:Category:Latin semi-deponent verbs]]. ** <code>.sigm</code>: At least one sigmatic form is attested. Places the entry into [[:Category:Latin verbs with sigmatic forms]]. ** <code>.sigm-pasv</code>: At least one passive sigmatic form is attested. Places the entry into [[:Category:Latin verbs with passive sigmatic forms]]. ** <code>.suffix</code>: Used for suffix entries such as {{m|la|-ō}}. Prevents categorisation as a verb. ** <code>.sup-futr-actv-only</code>: No supine stem except in the future active participle. Places the entry into [[:Category:Latin verbs with missing supine stem except in the future active participle]]. * Normally detected automatically; only specified manually for certain verbs: ** <code>.i</code>: Treat the verb as a mixed-conjugation verb like {{m|la|capiō}}. ** <code>.-i</code>: Do not treat the verb as a mixed-conjugation verb like {{m|la|capiō}}. ** <code>.impers</code>: Impersonal (third-person singular forms only). Only specified manually for compounds of highly irregular verbs. Places the entry into [[:Category:Latin impersonal verbs]]. ** <code>.no-perf</code>: No perfect forms. Only specified manually for compounds of highly irregular verbs. Places the entry into [[:Category:Latin verbs with missing perfect stem]]. ** <code>.no-pres</code>: No present forms. Places the entry into [[:Category:Latin verbs with missing present stem]]. ** <code>.no-und</code>: Do not show gerund forms in ''-und-''. Automatically enabled for verbs where the gerund stem is ''-uend-'' or ''-vend-''. * Detected automatically; should never need to be specified manually: ** <code>.depon</code>: Deponent verb. Places the entry into [[:Category:Latin deponent verbs]]. ===Irregular verbs=== Certain irregular verbs are handled specially, and should use the conjugation type <code>irreg</code>, e.g.: * {{m|la|faciō}}: {{temp|la-conj|irreg|faciō}} * {{m|la|pereō}}: {{temp|la-conj|irreg|pereō}} * {{m|la|libet}}: {{temp|la-conj|irreg|libet}} * {{m|la|subsum}}: {{temp|la-conj|irreg|subsum}} * {{m|la|prōferō}}: {{temp|la-conj|irreg|prōferō}} As shown above, compounds of irregular verbs are handled properly. Some compounds of {{m|la|sum}} and {{m|la|ferō}} are more complex because the various forms of the base verb begin with different letters, and the prefix assumes different forms before those different letters. These are handled through extra parameters: * {{m|la|prōsum}}: {{temp|la-conj|irreg|prōsum|prōd|prō}} * {{m|la|assum}}: {{temp|la-conj|irreg|assum|ad|af}} * {{m|la|afferō}}: {{temp|la-conj|irreg|afferō|at|al}} * {{m|la|cōnferō}}: {{temp|la-conj|irreg|cōnferō|con|col}} For {{m|la|sum}}, the third parameter is the prefix to use before forms beginning with ''e-'', and the fourth parameter is the prefix to use before forms beginning with ''f-''. For {{m|la|ferō}}, the third parameter is the prefix to use before forms beginning with ''t-'' (the perfect), and the fourth parameter is the prefix to use before forms beginning with ''l-'' (the supine). In all cases, an omitted parameter defaults to the prefix found in the lemma. In the event a compound of an irregular verb is used impersonally, use the conjugation type <code>irreg.impers</code>. The following is the current list of recognized irregular verbs: * {{m|la|āiō}}, {{m|la|aiiō}} * {{m|la|dīcō}} * {{m|la|dūcō}} * {{m|la|faciō}} * {{m|la|fīō}} * {{m|la|ferō}} * {{m|la|inquam}} * {{m|la|libet}} * {{m|la|lubet}} * {{m|la|licet}} * {{m|la|volō}} * {{m|la|mālō}} * {{m|la|nōlō}} * {{m|la|possum}} * {{m|la|piget}} * {{m|la|coepī}} * {{m|la|sum}} * {{m|la|edō}} * {{m|la|dō}} * {{m|la|eō}} ===Overriding individual forms=== In very rare cases it may be necessary to override individual forms of verbs. This is done using individual parameters for each form. See the following examples: * For finite forms, {{para|1s_pres_actv_indc}} – person (1/2/3), number (s/p), tense (pres/impf/futr/perf/plup/futp/sigf/siga), voice (actv/pasv), mood (indc/subj/impr) * For participles and infinitives, {{para|perf_actv_ptc}} – tense, voice, form (ptc/inf) * For gerunds and supines, {{para|ger_gen}} – form (ger/sup), case (gen/dat/acc/abl) If multiple forms are possible, separate the forms by a forward slash: {{para|3s_impf_actv_subj|coesset/cōnforet}} <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်လပ်တေန်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ်|conj]] </includeonly> 9fejf49hdnms8prju43mnbrwq3attw8 ကဏ္ဍ:ထာမ်ပလိက်လပ်တေန်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဂမၠိုၚ် 14 296080 397226 2026-06-19T16:29:43Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏလပ်တေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|လ]]" 397226 wikitext text/x-wiki [[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏလပ်တေန်ဂမၠိုၚ်]][[ကဏ္ဍ:ထာမ်ပလိက်အပြံၚ်အလှာဲပ္တဝ်ထ္ၜးပမာဏကြိယာဗက်အလိုက်အရေဝ်ဘာသာဂမၠိုၚ်|လ]] 6iv96nn1o58u95jcjalbk4s9v69z39x မဝ်ဂျူ:la-verb/data/doc 828 296081 397228 2026-06-19T16:33:29Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> {{module cat|la}} </includeonly>" 397228 wikitext text/x-wiki {{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. --> <includeonly> {{module cat|la}} </includeonly> ro7u6xar9i42oz02o2ip9xxvp4zljg4 abjicio 0 296082 397229 2026-06-19T16:36:48Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA|abjiciō}} ===ကြိယာ=== {{la-verb|3|abjiciō|abjēc|abject}} # {{alternative form of|la|abiciō}} ====သမ္ဗန္ဓ==== {{la-conj|3|abjiciō|abjēc|abject}}" 397229 wikitext text/x-wiki ==လပ်တေန်== ===ဗွဟ်ရမ္သာၚ်=== * {{la-IPA|abjiciō}} ===ကြိယာ=== {{la-verb|3|abjiciō|abjēc|abject}} # {{alternative form of|la|abiciō}} ====သမ္ဗန္ဓ==== {{la-conj|3|abjiciō|abjēc|abject}} axvyvrpguuwcq28xws2x0y8omyokwsu ထာမ်ပလိက်:la-verb/documentation 10 296083 397230 2026-06-19T16:39:31Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}}{{uses lua|Module:la-headword}} This template creates a headword line for all types of Latin verbs. ==Basic usage== The parameters are identical to {{temp|la-conj}} except that the following additional parameters exist: * {{para|id}}: ID (document me). * {{para|lemma}}, {{para|lemma2}}, ...: Override the lemma(s); include links. For basic verbs of conjugation classes 1, 2 and 4, specify th..." 397230 wikitext text/x-wiki {{documentation subpage}}{{uses lua|Module:la-headword}} This template creates a headword line for all types of Latin verbs. ==Basic usage== The parameters are identical to {{temp|la-conj}} except that the following additional parameters exist: * {{para|id}}: ID (document me). * {{para|lemma}}, {{para|lemma2}}, ...: Override the lemma(s); include links. For basic verbs of conjugation classes 1, 2 and 4, specify them as follows: * {{m|la|amō||to love}}: {{temp|la-verb|1+|amō}} * {{m|la|habeō||to have}}: {{temp|la-verb|2+|habeō}} * {{m|la|custōdiō||to guard}}: {{temp|la-verb|4+|custōdiō}} * {{m|la|audiō||to hear}}: {{temp|la-verb|4++|audiō}} Here, the <code>+</code> and <code>++</code> signs means to use the default principal parts: * ''amō, amāre, amāvī, amātum'' * ''habeō, habēre, habuī, habitum'' * ''custōdiō, custōdīre, custōdīvī, custōdītum'' * ''audiō, audīre, audīvī/audiī, audītum'' Note the difference between <code>4+</code>, which generates a single perfect stem in ''-īv'', and <code>4++</code>, which generates two perfect stems in ''-īv'' and ''-i''. For verbs of conjugation classes 3, and more complex verbs of other conjugation classes, you will need to specify the verb class along with the lemma, perfect stem and supine stem, as follows: * {{m|la|capiō||to take}}: {{temp|la-verb|3|capiō|cēp|capt}} * {{m|la|videō||to see}}: {{temp|la-verb|2|videō|vīd|vīs}} For deponent verbs and semi-deponent verbs, only the supine stem is given: * {{m|la|sequor||to follow}}: {{temp|la-verb|3|sequor|secūt}} * {{m|la|gaudeō||to rejoice}}: {{temp|la-verb|2.semi-depon|gaudeō|gāvīs}} The conjugation class can optionally be followed by one or more subtypes (as in the above example {{m|la|gaudeō}}): * {{m|la|pausō||to pause}}: {{temp|la-verb|1+.nopass|pausō}} (no passives exist) * {{m|la|veniō||to come}}: {{temp|la-verb|4.pass-impers|veniō|vēn|vent}} (only impersonal passives exist) * {{m|la|placeō||to please}}: {{temp|la-verb|2+.opt-semi-depon.noimp|placeō}} (the verb is optionally semi-deponent, i.e. the perfect is either ''placuī'' or ''placitus sum'', and there is no imperative) If there is no perfect, or no supine, just leave the form out: * {{m|la|nō||to swim}}: {{temp|la-verb|1.nopass|nō|nāv}} (or equivalently {{temp|la-verb|1+.nopass|nō||-}}) As shown in the previous example, when you use one of the <code>+</code> variants, which automatically generate default perfect and supine stems, you can cancel any of the stems using <code>-</code>. Impersonal and third-person-only verbs should use the third-person singular as the lemma: * {{m|la|grandinat||to hail}}: {{temp|la-verb|1.nopass|grandinat}} * {{m|la|pertaedet||to disgust, to bore}}: {{temp|la-verb|2.semi-depon|pertaedet|pertaes}} * {{m|la|decet||to suit}}: {{temp|la-verb|2.3only.nopass|decet|decu}} If the third-person singular is provided as the lemma, it is assumed to be impersonal. If the verb is third-person-only (i.e. it has both third-person singular and plural, but no other forms), use the subtype <code>.3only</code>. ==Parameters== See {{temp|la-conj}} for more information. {{hwcat}} 5wjutwf6rsnfw8jky92v7c5uvflc3t8 abjicere 0 296084 397232 2026-06-19T18:08:40Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ကြိယာ=== {{head|la|verb form}} # {{inflection of|la|abjiciō||pres|actv|inf|;|2|s|pres|pasv|imp//ind}}" 397232 wikitext text/x-wiki ==လပ်တေန်== ===ကြိယာ=== {{head|la|verb form}} # {{inflection of|la|abjiciō||pres|actv|inf|;|2|s|pres|pasv|imp//ind}} 4w835k839acbt1ro89poklt02gepglo abjeci 0 296085 397233 2026-06-19T18:09:19Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ကြိယာ=== {{head|la|verb form|head=abjēcī}} # {{inflection of|la|abjiciō||1|s|perf|actv|indc}}" 397233 wikitext text/x-wiki ==လပ်တေန်== ===ကြိယာ=== {{head|la|verb form|head=abjēcī}} # {{inflection of|la|abjiciō||1|s|perf|actv|indc}} 8tu9jjjo249q93qp9x6hq741zva1j12 abjectum 0 296086 397234 2026-06-19T18:10:10Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ကြိယာ=== {{head|la|participle form}} # {{inflection of|la|abjectus||nom//acc//voc|n|s|;|acc|m|s}}" 397234 wikitext text/x-wiki ==လပ်တေန်== ===ကြိယာ=== {{head|la|participle form}} # {{inflection of|la|abjectus||nom//acc//voc|n|s|;|acc|m|s}} 6ao7obiteijqn9xncjfcjkzonppoe89 abjectus 0 296087 397235 2026-06-19T18:11:16Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ကြိယာ=== {{la-part|abjectus}} # {{alternative form of|la|abiectus}} ====လဟုတ်စှ်ေ==== {{la-adecl|abjectus}}" 397235 wikitext text/x-wiki ==လပ်တေန်== ===ကြိယာ=== {{la-part|abjectus}} # {{alternative form of|la|abiectus}} ====လဟုတ်စှ်ေ==== {{la-adecl|abjectus}} chon5io26atgx73xocrgya5is3btmw9 abjecta 0 296088 397237 2026-06-19T18:52:38Z 咽頭べさ 33 ခၞံကၠောန်လဝ် မုက်လိက် နကု "==လပ်တေန်== ===ကြိယာ=== {{head|la|participle form}} # {{inflection of|la|abjectus||nom//voc|f|s|;|nom//acc//voc|n|p}} ===ကြိယာ=== {{head|la|participle form|head=abjectā}} # {{inflection of|la|abjectus||abl|f|s}}" 397237 wikitext text/x-wiki ==လပ်တေန်== ===ကြိယာ=== {{head|la|participle form}} # {{inflection of|la|abjectus||nom//voc|f|s|;|nom//acc//voc|n|p}} ===ကြိယာ=== {{head|la|participle form|head=abjectā}} # {{inflection of|la|abjectus||abl|f|s}} l3smbavqcllguk1po9fj0kadjbw3d0m