ဝိက်ရှေန်နရဳ
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
ထာမ်ပလိက်:deprecated lang param usage
10
763
397433
3286
2026-06-22T17:36:13Z
咽頭べさ
33
咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:check deprecated lang param usage]] ဇရေင် [[ထာမ်ပလိက်:deprecated lang param usage]]
3286
wikitext
text/x-wiki
{{deprecated code|active={{#if:{{{lang|}}}|yes|no}}|text=deprecated use of {{para|lang}} parameter|tooltip=This template call uses the deprecated 'lang' parameter. Use '1' instead.|{{{1}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
nsym6z8ah5z53122s7pzrubji9ljwx8
မဝ်ဂျူ:category tree
828
1140
397439
397219
2026-06-22T17:58:06Z
Intobesa.bot
1035
Bot: ဒၞာဲမလိက်သေံမသှ်ေဒၟံၚ်ကလေၚ်ဖပေၚ်စုတ်လိက်မန်
397439
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
|-
| 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
odxz4cb7wi0srbuy3s3i9hx9isck2fx
မဝ်ဂျူ:category tree/poscatboiler
828
1144
397437
396080
2026-06-22T17:57:11Z
Intobesa.bot
1035
Bot: ဒၞာဲမလိက်သေံမသှ်ေဒၟံၚ်ကလေၚ်ဖပေၚ်စုတ်လိက်မန်
397437
Scribunto
text/plain
local lang_independent_data = require("Module:category tree/data")
local lang_specific_module = "Module:category tree/lang"
local lang_specific_module_prefix = lang_specific_module .. "/"
local family_specific_module = "Module:category tree/fam"
local family_specific_module_prefix = family_specific_module .. "/"
local labels_utilities_module = "Module:labels/utilities"
local template_parser_module = "Module:template parser"
local concat = table.concat
local dump = mw.dumpObject
local expand_template = require("Module:frame").expandTemplate
local insert = table.insert
local is_callable = require("Module:fun").is_callable
local lcfirst = require("Module:string utilities").lcfirst
local list_to_set = require("Module:table").listToSet
local make_title = mw.title.makeTitle
local new_title = mw.title.new
local parse = require(template_parser_module).parse
local sparse_concat = require("Module:table").sparseConcat
local tostring = tostring
local type = type
local ucfirst = require("Module:string utilities").ucfirst
local uupper = require("Module:string utilities").upper
local function internal_error(msg)
error("Internal error: " .. msg)
end
local function get_lang(...)
local _get_lang = require("Module:languages").getByCode
function get_lang(...)
return _get_lang(...) or require("Module:languages/errorGetBy").code(...)
end
return get_lang(...)
end
local function get_script(...)
local _get_script = require("Module:scripts").getByCode
function get_script(code)
return _get_script(code) or require("Module:languages/error")(code, true, "script code")
end
return get_script(...)
end
-- Category object
local Category = {}
Category.__index = Category
function Category:get_originating_info()
local originating_info = ""
if self._info.originating_label then
originating_info = " (originating from label \"" .. self._info.originating_label .. "\" in module [[" .. self._info.originating_module .. "]])"
end
return originating_info
end
local valid_keys = list_to_set{"code", "label", "sc", "raw", "args", "also", "called_from_inside", "originating_label", "originating_module"}
function Category.new(info)
for key in pairs(info) do
if not valid_keys[key] then
internal_error("The parameter \"" .. key .. "\" was not recognized.")
end
end
local self = setmetatable({}, Category)
self._info = info
if not self._info.label then
internal_error("No label was specified.")
end
self:initCommon()
if not self._data then
internal_error("The " .. (self._info.raw and "raw " or "") .. "label \"" .. self._info.label .. "\" does not exist" .. self:get_originating_info() .. ".")
end
return self
end
function Category:initCommon()
local function patch_args(args)
-- This fixes the issue with Scribunto automatically converting keys
-- in a table as numbers to strings, which in turn causes a circular
-- error for having argument parameter names as numbers as strings.
if type(args) ~= "table" then
return args
end
local new_args = {}
for k, v in pairs(args) do
if type(k) == "string" and string.len(k) < 10 and not string.match(k, "^0") and string.match(k, "^%d+$") then
new_args[tonumber(k)] = patch_args(v)
else
new_args[k] = patch_args(v)
end
end
return new_args
end
local args_handled = false
if self._info.raw then
-- Check if the category exists
local raw_categories = lang_independent_data["RAW_CATEGORIES"]
self._data = raw_categories[self._info.label]
if self._data then
if self._data.lang then
self._lang = get_lang(self._data.lang, nil, true)
self._info.code = self._lang:getCode()
end
if self._data.sc then
self._sc = get_script(self._data.sc)
self._info.sc = self._sc:getCode()
end
else
-- Go through raw handlers
local data = {
category = self._info.label,
args = patch_args(self._info.args) or {},
called_from_inside = self._info.called_from_inside,
}
for _, handler in ipairs(lang_independent_data["RAW_HANDLERS"]) do
self._data, args_handled = handler.handler(data)
if self._data then
self._data.module = self._data.module or handler.module
break
end
end
if self._data then
-- Update the label if the handler specified a canonical name for it.
if self._data.canonical_name then
self._info.canonical_name = self._data.canonical_name
end
if self._data.lang then
if type(self._data.lang) ~= "string" then
internal_error("Received non-string value " .. dump(self._data.lang) .. " for self._data.lang, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".")
end
self._lang = get_lang(self._data.lang, nil, true)
self._info.code = self._lang:getCode()
end
if self._data.sc then
if type(self._data.sc) ~= "string" then
internal_error("Received non-string value " .. dump(self._data.sc) .. " for self._data.sc, label \"" .. self._info.label .. "\"" .. self:get_originating_info() .. ".")
end
self._sc = get_script(self._data.sc)
self._info.sc = self._sc:getCode()
end
end
end
else
-- Already parsed into language + label
if self._info.code then
self._lang = get_lang(self._info.code, nil, true)
else
self._lang = nil
end
if self._info.sc then
self._sc = get_script(self._info.sc)
else
self._sc = nil
end
self._info.orig_label = self._info.label
if not self._lang then
-- Umbrella categories without a preceding language always begin with a capital letter, but the actual label may be
-- lowercase (cf. [[:Category:Nouns by language]] with label 'nouns' with per-language [[:Category:English nouns]];
-- but [[:Category:Reddit slang by language]] with label 'Reddit slang' with per-language
-- [[:Category:English Reddit slang]]). Since the label is almost always lowercase, we lowercase it for umbrella
-- categories, storing the original into `orig_label`, and correct it later if needed.
self._info.label = lcfirst(self._info.label)
end
-- First, check lang-specific labels and handlers if this is not an umbrella category.
if self._lang then
local objects_with_modules = require(lang_specific_module)
local obj, seen = self._lang, {}
local object_specific_module_prefix = lang_specific_module_prefix
local is_family = false
repeat
if objects_with_modules[obj:getCode()] then
local module = object_specific_module_prefix .. obj:getCode()
local labels_and_handlers = require(module)
if labels_and_handlers.LABELS then
self._data = labels_and_handlers.LABELS[self._info.label]
if self._data then
if not is_family and self._data.umbrella == nil and self._data.umbrella_parents == nil then
self._data.umbrella = false
end
self._data.module = self._data.module or module
end
end
if not self._data and labels_and_handlers.HANDLERS then
for _, handler in ipairs(labels_and_handlers.HANDLERS) do
local data = {
label = self._info.label,
lang = self._lang,
sc = self._sc,
args = patch_args(self._info.args) or {},
called_from_inside = self._info.called_from_inside,
}
self._data, args_handled = handler(data)
if self._data then
if not is_family and self._data.umbrella == nil and
self._data.umbrella_parents == nil then
self._data.umbrella = false
end
self._data.module = self._data.module or module
break
end
end
end
if self._data then
break
end
end
seen[obj:getCode()] = true
obj = obj:getFamily()
if not is_family then
is_family = true
object_specific_module_prefix = family_specific_module_prefix
objects_with_modules = require(family_specific_module)
end
until not obj or seen[obj:getCode()]
end
local function fetch_label_data(labels)
self._data = labels[self._info.label]
-- See comment above about uppercase- vs. lowercase-initial labels, which are indistinguishable
-- in umbrella categories.
if not self._data then
self._data = labels[self._info.orig_label]
if self._data then
self._info.label = self._info.orig_label
end
end
end
-- Then check lang-independent labels.
if not self._data then
-- lang_independent_data.LABELS should always exist.
fetch_label_data(lang_independent_data.LABELS)
if not self._data and not self._lang then
-- Check family-specific labels for umbrella label.
local families_with_modules = require(family_specific_module)
for famcode, _ in pairs(families_with_modules) do
local module = family_specific_module_prefix .. famcode
local labels_and_handlers = require(module)
if labels_and_handlers.LABELS then
fetch_label_data(labels_and_handlers.LABELS)
if self._data then
self._data.module = self._data.module or module
break
end
end
end
end
end
-- Then check lang-independent handlers.
if not self._data then
local data = {
label = self._info.label,
lang = self._lang,
sc = self._sc,
args = patch_args(self._info.args) or {},
called_from_inside = self._info.called_from_inside,
}
for _, handler in ipairs(lang_independent_data["HANDLERS"]) do
self._data, args_handled = handler.handler(data)
if self._data then
self._data.module = self._data.module or handler.module
break
end
end
if not self._data and not self._lang then
-- Check family-specific labels for umbrella handler.
local families_with_modules = require(family_specific_module)
for famcode, _ in pairs(families_with_modules) do
local module = family_specific_module_prefix .. famcode
local labels_and_handlers = require(module)
if labels_and_handlers.HANDLERS then
for _, handler in ipairs(labels_and_handlers.HANDLERS) do
local data = {
label = self._info.label,
sc = self._sc,
args = patch_args(self._info.args) or {},
called_from_inside = self._info.called_from_inside,
}
self._data, args_handled = handler(data)
if self._data then
self._data.module = self._data.module or module
break
end
end
end
if self._data then
break
end
end
end
end
end
if not args_handled and self._data and self._info.args and next(self._info.args) then
local module_text = " (handled in [[" .. (self._data.module or "UNKNOWN").. "]])"
local args_text = {}
for k, v in pairs(self._info.args) do
insert(args_text, k .. "=" .. ((type(v) == "string" or type(v) == "number") and v or dump(v)))
end
error("poscatboiler label '" .. self._info.label .. "' " .. module_text .. " doesn't accept extra args " ..
concat(args_text, ", "))
end
if self._sc and not self._lang then
internal_error("Umbrella categories cannot have a script specified.")
end
end
function Category:convert_spec_to_string(desc)
if not desc then
return desc
end
local desc_type = type(desc)
if desc_type == "string" then
return desc
elseif desc_type == "number" then
return tostring(desc)
elseif not is_callable(desc) then
internal_error("`desc` must be a string, number, function, callable table or nil; received " .. dump(desc))
end
desc = desc {
lang = self._lang,
sc = self._sc,
label = self._info.label,
raw = self._info.raw,
}
if not desc then
return desc
end
desc_type = type(desc)
if desc_type == "string" then
return desc
end
internal_error("The value returned by `desc` must be a string or nil; received " .. dump(desc))
end
local function add_obj_args(args, obj, obj_type)
if obj then
args[obj_type .. "code"] = obj:getCode()
args[obj_type .. "name"] = obj:getCanonicalName()
args[obj_type .. "disp"] = obj:getDisplayForm()
args[obj_type .. "cat"] = obj:getCategoryName()
args[obj_type .. "link"] = obj:makeCategoryLink()
end
end
-- Expands `desc` like a template, passing values for specs like {{{langname}}}.
function Category:substitute_template_specs(desc)
-- This may end up happening twice but that's OK as the function is (usually) idempotent.
-- FIXME: Not idempotent if a preprocessed template returns wikicode.
desc = self:convert_spec_to_string(desc)
if not desc then
return nil
end
-- Populate the substitution arguments.
local args = {}
args.umbrella_msg = "This is an umbrella category. It contains no dictionary entries, but only other, language-specific categories, which in turn contain relevant terms in a given language."
args.umbrella_meta_msg = "This is an umbrella metacategory, covering a general area such as \"lemmas\", \"names\" or \"terms by etymology\". It contains no dictionary entries, but holds only umbrella (\"by language\") categories covering specific subtopics, which in turn contain language-specific categories holding terms in a given language for that same topic."
add_obj_args(args, self._lang, "lang")
add_obj_args(args, self._sc, "sc")
return parse(desc, true):expand(args)
end
function Category:substitute_template_specs_in_args(args)
if not args then
return args
end
local pinfo = {}
for k, v in pairs(args) do
pinfo[self:substitute_template_specs(k)] = self:substitute_template_specs(v)
end
return pinfo
end
function Category:make_new(info)
info.originating_label = self._info.label
info.originating_module = self._data.module
info.called_from_inside = true
return Category.new(info)
end
function Category:getBreadcrumbName()
local ret
if self._lang or self._info.raw then
ret = self._data.breadcrumb or self._data.breadcrumb_and_first_sort_key or
self._data.breadcrumb_and_first_sort_base or nil
else
ret = self._data.umbrella and (self._data.umbrella.breadcrumb or
self._data.umbrella.breadcrumb_and_first_sort_key or self._data.umbrella.breadcrumb_and_first_sort_base) or
nil
end
if not ret then
ret = self._info.label
end
if type(ret) ~= "table" then
ret = {name = ret}
end
local name = self:substitute_template_specs(ret.name)
local nocap = ret.nocap
if self._sc then
name = name .. "ပ္ဍဲ" .. self._sc:getCategoryName() --mnw
end
return name, nocap
end
local function expand_toc_template_if(template)
local template_obj = new_title(template, 10)
if template_obj.exists then
return expand_template{title = template_obj.text}
end
return nil
end
-- Return the textual expansion of the first existing template among the given templates, first performing
-- substitutions on the template name such as replacing {{{langcode}}} with the current language's code (if any).
-- If no templates exist after expansion, or if nil is passed in, return nil. If a single string is passed in,
-- treat it like a one-element list consisting of that string.
function Category:get_template_text(templates)
if templates == nil then
return nil
elseif type(templates) ~= "table" then
templates = {templates}
end
for _, template in ipairs(templates) do
if template == false then
return false
end
template = self:substitute_template_specs(template)
return expand_toc_template_if(template)
end
return nil
end
function Category:getTOC(toc_type)
-- Type "none" means everything fits on a single page; in that case, display nothing.
if toc_type == "none" then
return nil
end
local templates, fallback_templates
-- If TOC type is "full" (more than 2500 entries), do the following, in order:
-- 1. look up and expand the `toc_template_full` templates (normal or umbrella, depending on whether there is
-- a current language);
-- 2. look up and expand the `toc_template` templates (normal or umbrella, as above);
-- 3. do the default behavior, which is as follows:
-- 3a. look up a language-specific "full" template according to the current language (using English if there
-- is no current language);
-- 3b. look up a script-specific "full" template according to the first script of current language (using English
-- if there is no current language);
-- 3c. look up a language-specific "normal" template according to the current language (using English if there
-- is no current language);
-- 3d. look up a script-specific "normal" template according to the first script of the current language (using
-- English if there is no current language);
-- 3e. display nothing.
--
-- If TOC type is "normal" (between 200 and 2500 entries), do the following, in order:
-- 1. look up and expand the `toc_template` templates (normal or umbrella, depending on whether there is
-- a current language);
-- 2. do the default behavior, which is as follows:
-- 2a. look up a language-specific "normal" template according to the current language (using English if there
-- is no current language);
-- 2b. look up a script-specific "normal" template according to the first script of the current language (using
-- English if there is no current language);
-- 2c. display nothing.
local data_source
if self._lang or self._info.raw then
data_source = self._data
else
data_source = self._data.umbrella
end
if data_source then
if toc_type == "full" then
templates = data_source.toc_template_full
fallback_templates = data_source.toc_template
else
templates = data_source.toc_template
end
end
local text = self:get_template_text(templates)
if text then
return text
elseif text == false then
return nil
end
text = self:get_template_text(fallback_templates)
if text then
return text
elseif text == false then
return nil
end
local default_toc_templates_to_check = {}
local lang, sc = self:getCatfixInfo()
local langcode = lang and lang:getCode() or "mnw"
local sccode = sc and sc:getCode() or lang and lang:getScriptCodes()[1] or "Latn"
-- FIXME: What is toctemplateprefix used for?
local tocname = (self._data.toctemplateprefix or "") .. "categoryTOC"
if toc_type == "full" then
insert(default_toc_templates_to_check, ("%s-%s/full"):format(langcode, tocname))
insert(default_toc_templates_to_check, ("%s-%s/full"):format(sccode, tocname))
end
insert(default_toc_templates_to_check, ("%s-%s"):format(langcode, tocname))
insert(default_toc_templates_to_check, ("%s-%s"):format(sccode, tocname))
for _, toc_template in ipairs(default_toc_templates_to_check) do
local toc_template_text = expand_toc_template_if(toc_template)
if toc_template_text then
return toc_template_text
end
end
return nil
end
function Category:getInfo()
return self._info
end
function Category:getDataModule()
return self._data.module
end
function Category:canBeEmpty()
if self._lang or self._info.raw then
return self._data.can_be_empty
end
return self._data.umbrella and self._data.umbrella.can_be_empty
end
function Category:isHidden()
if self._lang or self._info.raw then
return self._data.hidden
end
return self._data.umbrella and self._data.umbrella.hidden
end
function Category:getCategoryName()
if self._info.raw then
return self._info.canonical_name or self._info.label
elseif self._lang then
--local ret = self._lang:getCanonicalName() .. " " .. self._info.label
local ret = self._info.label .. self._lang:getCanonicalName() .. "ဂမၠိုၚ်"
if self._sc then
ret = ret .. "ပ္ဍဲ" .. self._sc:getCategoryName() --mnw
end
return ucfirst(ret)
end
local ret = ucfirst(self._info.label)
if not (self._data.no_by_language or self._data.umbrella and self._data.umbrella.no_by_language) then
ret = ret:gsub("★", "") .. --mnw; remove star
((ret:find("ที่สะกดด้วย .+") or mw.ustring.find(ret, "[^က-ခ]$")) and " " or "") ..
"ဗက်အလိုက်ဘာသာ" --mnw
end
return ret
end
function Category:getTopright()
if self._lang or self._info.raw then
return self:substitute_template_specs(self._data.topright)
end
return self._data.umbrella and self:substitute_template_specs(self._data.umbrella.topright)
end
function Category:display_title(displaytitle, lang)
if type(displaytitle) == "string" then
displaytitle = self:substitute_template_specs(displaytitle)
else
displaytitle = displaytitle(self:getCategoryName(), lang)
end
mw.getCurrentFrame():callParserFunction("DISPLAYTITLE", "ကဏ္ဍ:" .. displaytitle)
end
function Category:get_labels_categorizing()
local m_labels_utilities = require(labels_utilities_module)
local pos_cat_labels, sense_cat_labels, use_tlb
pos_cat_labels = m_labels_utilities.find_labels_for_category(self._info.label, "pos", self._lang)
local sense_label = self._info.label:match("^(.*) terms$")
if sense_label then
use_tlb = true
else
sense_label = self._info.label:match("^terms with (.*) senses$")
end
if not sense_label then
return nil
end
sense_cat_labels = m_labels_utilities.find_labels_for_category(sense_label, "sense", self._lang)
if use_tlb then
return m_labels_utilities.format_labels_categorizing(pos_cat_labels, sense_cat_labels, self._lang)
end
local all_labels = pos_cat_labels
for k, v in pairs(sense_cat_labels) do
all_labels[k] = v
end
return m_labels_utilities.format_labels_categorizing(all_labels, nil, self._lang)
end
-- FIXME: this is clunky.
local function remove_lang_params(desc)
-- Simply remove a language name/code/category from the beginning of the string, but replace the language name
-- in the middle of the string with either "specific languages" or "specific-language" depending on whether the
-- language name appears to be an attributive qualifier of another noun or to stand by itself. This may be wrong,
-- in which case the category in question should supply its own umbrella description.
desc = desc:gsub("^{{{langname}}}", "")
:gsub("{{{langname}}} %(", "ဘာသာသမ္တီဟိုတ် (")
:gsub("{{{langname}}}([.,])", "ဘာသာသမ္တီဟိုတ် ")
:gsub("{{{langname}}}", "ဘာသာသမ္တီဟိုတ်")
:gsub("{{{langdisp}}}", "ဘာသာသမ္တီဟိုတ်")
:gsub("{{{langlink}}}", "ဘာသာသမ္တီဟိုတ်")
return desc
end
function Category:getDescription(isChild)
-- Allows different text in the list of a category's children
local isChild = isChild == "child"
if self._lang or self._info.raw then
if not isChild and self._data.displaytitle then
self:display_title(self._data.displaytitle, self._lang)
end
if self._sc then
return self:getCategoryName() .. "."
end
local desc = self:substitute_template_specs(self._data.description)
if not desc then
return nil
elseif isChild then
return desc
end
return sparse_concat({
self:substitute_template_specs(self._data.preceding),
desc,
self:substitute_template_specs(self._data.additional),
self:substitute_template_specs(self:get_labels_categorizing()),
}, "\n\n")
end
local umbrella = self._data.umbrella
if not isChild and umbrella and umbrella.displaytitle then
self:display_title(umbrella.displaytitle)
end
local desc = self:substitute_template_specs(umbrella and umbrella.description)
local has_umbrella_desc = not not desc
if not desc then
desc = self:convert_spec_to_string(self._data.description)
if desc then
desc = remove_lang_params(desc)
desc = lcfirst(desc)
desc = desc:gsub("%.$", "")
desc = "Categories with " .. desc .. "."
else
desc = "Categories with " .. self._info.label .. " in various specific languages."
end
desc = self:substitute_template_specs(desc)
end
if isChild then
return desc
end
return sparse_concat({
self:substitute_template_specs(umbrella and umbrella.preceding or not has_umbrella_desc and self._data.preceding),
desc,
self:substitute_template_specs(umbrella and umbrella.additional or not has_umbrella_desc and self._data.additional),
self:substitute_template_specs("{{{umbrella_msg}}}"),
self:substitute_template_specs(self:get_labels_categorizing()),
}, "\n\n")
end
function Category:new_sortkey(sortkey)
local sortkey_type = type(sortkey)
if sortkey_type == "string" then
sortkey = uupper(sortkey)
elseif sortkey_type == "table" then
function sortkey:makeSortKey()
local sort_func = self.sort_func
if sort_func ~= nil then
return sort_func(self.sort_base)
end
local lang = self.lang
if lang == nil then
return self.sort_base
end
lang = get_lang(lang, nil, true)
if lang == nil then
return self.sort_base
end
local sc = self.sc
if sc ~= nil then
sc = get_script(sc)
end
return lang:makeSortKey(self.sort_base, sc)
end
end
return sortkey
end
function Category:inherit_spec(spec, parent_spec, substitute_result)
if spec == false then
return nil
end
local retval = spec or parent_spec
if substitute_result then
retval = self:substitute_template_specs(retval)
end
return retval
end
function Category:canonicalize_parents_children(cats, is_children, fallback_sort_key, fallback_sort_base)
if not cats then
return nil
elseif type(cats) == "table" then
if cats.name or cats.module then
cats = {cats}
elseif #cats == 0 then
return nil
end
else
cats = {cats}
end
local ret = {}
for _, cat in ipairs(cats) do
if type(cat) ~= "table" or not cat.name and not cat.module then
cat = {name = cat}
end
insert(ret, cat)
end
local is_umbrella = not self._lang and not self._info.raw
local table_type = is_children and "extra_children" or "parents"
for i, cat in ipairs(ret) do
local raw
if self._info.raw or is_umbrella then
raw = not cat.is_label
else
raw = cat.raw
end
local lang = self:inherit_spec(cat.lang, not raw and self._info.code or nil, "substitute")
local sc = self:inherit_spec(cat.sc, not raw and self._info.sc or nil, "substitute")
-- Get the sortkey.
local sortkey = self:inherit_spec(cat.sort, i == 1 and (fallback_sort_key or fallback_sort_base and {sort_base = fallback_sort_base}) or nil)
if type(sortkey) == "table" then
sortkey.sort_base = self:substitute_template_specs(sortkey.sort_base) or
internal_error("Missing .sort_base in '" .. table_type .. "' .sort table for '" ..
self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'")
if sortkey.sort_func then
-- Not allowed to give a lang and/or script if sort_func is given.
local bad_spec = sortkey.lang and "lang" or sortkey.sc and "sc" or nil
if bad_spec then
internal_error("Cannot specify both ." .. bad_spec .. " and .sort_func in '" .. table_type ..
"' .sort table for '" .. self._info.label .. "' category entry in module '" ..
(self._data.module or "unknown") .. "'")
end
else
sortkey.lang = self:inherit_spec(sortkey.lang, lang, "substitute")
sortkey.sc = self:inherit_spec(sortkey.sc, sc, "substitute")
end
else
sortkey = self:substitute_template_specs(sortkey)
end
local name
if cat.module then
-- A reference to a category using another category tree module.
if not cat.args then
internal_error("Missing .args in '" .. table_type .. "' table with module=\"" .. cat.module .. "\" for '" ..
self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'")
end
name = require("Module:category tree/" .. cat.module).new(self:substitute_template_specs_in_args(cat.args))
else
name = cat.name
if not name then
internal_error("Missing .name in " .. (is_umbrella and "umbrella " or "") .. "'" .. table_type .. "' table for '" ..
self._info.label .. "' category entry in module '" .. (self._data.module or "unknown") .. "'")
elseif type(name) == "string" then -- otherwise, assume it's a category object and use it directly
name = self:substitute_template_specs(name)
if name:find("^ကဏ္ဍ:") then
-- It's a non-poscatboiler category name.
sortkey = sortkey or is_children and name:gsub("^ကဏ္ဍ:", "") or self:getCategoryName()
else
-- It's a label.
sortkey = sortkey or is_children and name or self._info.label
name = self:make_new{
label = name, code = lang, sc = sc,
raw = raw, args = self:substitute_template_specs_in_args(cat.args)
}
end
end
end
sortkey = sortkey or is_children and " " or self._info.label
ret[i] = {
name = name,
description = is_children and self:substitute_template_specs(cat.description) or nil,
sort = self:new_sortkey(sortkey)
}
end
return ret
end
function Category:getParents()
local is_umbrella, ret = not self._lang and not self._info.raw
if self._sc then
local parent1 = self:make_new{code = self._info.code, label = "ဝေါဟာ" .. self._sc:getCanonicalName() .. "အပ္ဍဲအက္ခရ်ဂမၠိုၚ်"}
local parent2 = self:make_new{code = self._info.code, label = self._info.label, raw = self._info.raw, args = self._info.args}
ret = {
{name = parent1, sort = self._sc:getCanonicalName()},
{name = parent2, sort = self._sc:getCanonicalName()},
}
else
local parents, fallback_sort_key, fallback_sort_base
if is_umbrella then
parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents
fallback_sort_key = self._data.umbrella and self._data.umbrella.breadcrumb_and_first_sort_key or nil
fallback_sort_base = self._data.umbrella and self._data.umbrella.breadcrumb_and_first_sort_base or nil
else
parents = self._data.parents
fallback_sort_key = self._data.breadcrumb_and_first_sort_key
fallback_sort_base = self._data.breadcrumb_and_first_sort_base
end
ret = self:canonicalize_parents_children(parents, nil, fallback_sort_key, fallback_sort_base)
if not ret then
return nil
end
end
local self_cat = self:getCategoryName()
for _, parent in ipairs(ret) do
local parent_cat = parent.name.getCategoryName and parent.name:getCategoryName()
if self_cat == parent_cat then
internal_error(("Infinite loop would occur, as parent category '%s' is the same as the child category"):format(self_cat))
end
end
return ret
end
function Category:getChildren()
local is_umbrella = not self._lang and not self._info.raw
local children = self._data.children
local ret = {}
if not is_umbrella and children then
for _, child in ipairs(children) do
child = mw.clone(child)
if type(child) ~= "table" then
child = {name = child}
end
if not child.sort then
child.sort = child.name
end
-- FIXME, is preserving the script correct?
child.name = self:make_new{code = self._info.code, label = child.name, raw = child.raw, sc = self._info.sc}
insert(ret, child)
end
end
local extra_children
if is_umbrella then
extra_children = self._data.umbrella and self._data.umbrella.extra_children
else
extra_children = self._data.extra_children
end
extra_children = self:canonicalize_parents_children(extra_children, "children")
if extra_children then
for _, child in ipairs(extra_children) do
insert(ret, child)
end
end
return #ret > 0 and ret or nil
end
function Category:getUmbrella()
local umbrella = self._data.umbrella
if umbrella == false or self._info.raw or not self._lang or self._sc then
return nil
end
-- If `umbrella` is a string, use that; otherwise, use the label.
return self:make_new({label = type(umbrella) == "string" and umbrella or self._info.label})
end
function Category:getAppendix()
-- FIXME, this should be customizable.
local lang, label = self._lang, self._info.label
if self._info.raw or not (lang and label) then
return nil
end
local appendix = make_title(100, label .. lang:getCategoryName() .. "ဂမၠိုၚ်")
return appendix.exists and appendix.fullText or nil
end
function Category:getCatfixInfo()
if self._lang or self._sc or self._info.raw then
local langcode, sccode = self._data.catfix, self._data.catfix_sc
local lang, sc
if langcode then
langcode = self:substitute_template_specs(langcode)
lang = get_lang(langcode, nil, true)
elseif langcode == nil then -- not false
lang = self._lang
end
if sccode then
sccode = self:substitute_template_specs(sccode)
sc = get_script(sccode)
elseif sccode == nil then -- not false
sc = self._sc
end
if lang then
lang = lang:getFull()
end
return lang, sc
elseif not self._data.umbrella then
return
end
-- umbrella
local langcode, sccode = self._data.umbrella.catfix, self._data.umbrella.catfix_sc
local lang, sc
if langcode then
langcode = self:substitute_template_specs(langcode)
lang = get_lang(langcode, nil, true)
end
if sccode then
sccode = self:substitute_template_specs(sccode)
sc = get_script(sccode)
end
if lang then
lang = lang:getFull()
end
return lang, sc
end
function Category:getTOCTemplateName()
-- This should only be invoked if getTOC() returns true, meaning to do the default algorithm, but getTOC()
-- implements its own default algorithm.
internal_error("This should never get called")
end
local export = {}
function export.main(info)
local self = setmetatable({_info = info}, Category)
self:initCommon()
return self._data and self or nil
end
export.new = Category.new
return export
31iowjv00mp7ptytupxzea9kvja5kod
မဝ်ဂျူ:category tree/အရေဝ်ဘာသာ
828
1747
397438
396766
2026-06-22T17:57:38Z
Intobesa.bot
1035
Bot: ဒၞာဲမလိက်သေံမသှ်ေဒၟံၚ်ကလေၚ်ဖပေၚ်စုတ်လိက်မန်
397438
Scribunto
text/plain
local new_title = mw.title.new
local ucfirst = require("Module:string utilities").ucfirst
local split = require("Module:string utilities").split
local raw_categories = {}
local raw_handlers = {}
local m_languages = require("Module:languages")
local m_sc_getByCode = require("Module:scripts").getByCode
local m_table = require("Module:table")
local parse_utilities_module = "Module:parse utilities"
local concat = table.concat
local insert = table.insert
local reverse_ipairs = m_table.reverseIpairs
local serial_comma_join = m_table.serialCommaJoin
local size = m_table.size
local sorted_pairs = m_table.sortedPairs
local to_json = require("Module:JSON").toJSON
local Hang = m_sc_getByCode("Hang")
local Hani = m_sc_getByCode("Hani")
local Hira = m_sc_getByCode("Hira")
local Hrkt = m_sc_getByCode("Hrkt")
local Kana = m_sc_getByCode("Kana")
local function track(page)
-- [[Special:WhatLinksHere/Wiktionary:Tracking/category tree/ภาษา/PAGE]]
return require("Module:debug/track")("category tree/အရေဝ်ဘာသာ/" .. page)
end
-- This handles language categories of the form e.g. [[:ကဏ္ဍ:French language]] and
-- [[:ကဏ္ဍ:British Sign Language]]; categories like [[:ကဏ္ဍ:Languages of Indonesia]]; categories like
-- [[:ကဏ္ဍ:English-based creole or pidgin languages]]; and categories like
-- [[:ကဏ္ဍ:English-based constructed languages]].
-----------------------------------------------------------------------------
-- --
-- RAW CATEGORIES --
-- --
-----------------------------------------------------------------------------
raw_categories["အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်"] = {
topright = "{{commonscat|အရေဝ်ဘာသာ}}\n[[File:Languages world map-transparent background.svg|thumb|right|250px|Rough world map of language families]]",
description = "This category contains the categories for every language on Wiktionary.",
additional = "Not all languages that Wiktionary recognises may have a category here yet. There are many that have " ..
"not yet received any attention from editors, mainly because not all Wiktionary users know about every single " ..
"language. See [[Wiktionary:List of languages]] for a full list.",
parents = {
"ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်",
},
}
raw_categories["အရေဝ်ဘာသာမကၠေံဗ္ဒန်သီုဖအိုတ်ဂမၠိုၚ်"] = {
description = "This category contains the categories for every [[extinct language]] on Wiktionary.",
additional = "Do not confuse this category with [[:ကဏ္ဍ:Extinct languages]], which is an umbrella category for the names of extinct languages in specific other languages (e.g. {{m+|de|Langobardisch}} for the ancient [[Lombardic]] language).",
parents = {
"အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်",
},
}
raw_categories["အရေဝ်ဘာသာဗက်အလိုက်ဍုၚ်ရးဂမၠိုၚ်"] = {
topright = "{{commonscat|အရေဝ်ဘာသာဗက်အလိုက်တိုက်ဂမၠိုၚ်}}",
description = "ကဏ္ဍတဏအ်ဝွံဂကောံအရေဝ်ဘာသာမဗက်အလိုက်ဍုၚ်ရးဂမၠိုၚ်",
additional = "{{{umbrella_meta_msg}}}",
parents = {
"အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်",
},
}
raw_categories["Languages not sorted into a location category"] = {
description = "Languages which do not specify (in their {{tl|auto cat}} call) the location(s) where they are spoken.",
additional = "This excludes constructed and reconstructed languages; as a result, all languages in this category explicitly specify their location as {{cd|UNKNOWN}}.",
parents = {
{name = "အာတ်မိက်ဂမၠိုၚ်"},
},
hidden = true,
}
-----------------------------------------------------------------------------
-- --
-- RAW HANDLERS --
-- --
-----------------------------------------------------------------------------
-- Given a category (without the "ကဏ္ဍ:" prefix), look up the page defining the category, find the call to
-- {{auto cat}} (if any), and return a table of its arguments. If the category page doesn't exist or doesn't have
-- an {{auto cat}} invocation, return nil.
--
-- FIXME: Duplicated in [[Module:category tree/ภาษณ์]].
local function scrape_category_for_auto_cat_args(cat)
local cat_page = mw.title.new("ကဏ္ဍ:" .. cat)
if cat_page then
local contents = cat_page:getContent()
if contents then
local frame = mw.getCurrentFrame()
for template in require("Module:template parser").find_templates(contents) do
-- The template parser automatically handles redirects and canonicalizes them, so uses of {{autocat}}
-- will also be found.
if template:get_name() == "auto cat" then
return template:get_arguments()
end
end
end
end
return nil
end
local function link_location(location)
local location_no_the = location:match("^the (.*)$")
local bare_location = location_no_the or location
local location_link
local bare_location_parts = split(bare_location, ", ")
for i, part in ipairs(bare_location_parts) do
bare_location_parts[i] = ("[[%s]]"):format(part)
end
location_link = concat(bare_location_parts, ", ")
if location_no_the then
location_link = "the " .. location_link
end
return location_link
end
local function linkbox(lang, setwiki, setwikt, setsister, entryname)
local wiktionarylinks = {}
local canonicalName = lang:getCanonicalName()
local wikimediaLanguages = lang:getWikimediaLanguages()
local wikipediaArticle = setwiki or lang:getWikipediaArticle()
setsister = setsister and ucfirst(setsister) or nil
if setwikt then
track("setwikt")
if setwikt == "-" then
track("setwikt/hyphen")
end
end
if setwikt ~= "-" and wikimediaLanguages and wikimediaLanguages[1] then
for _, wikimedialang in ipairs(wikimediaLanguages) do
local check = new_title(wikimedialang:getCode() .. ":")
if check and check.isExternal then
insert(wiktionarylinks,
(wikimedialang:getCanonicalName() ~= canonicalName and "(''" .. wikimedialang:getCanonicalName() .. "'') " or "") ..
"'''[[:" .. wikimedialang:getCode() .. ":|" .. wikimedialang:getCode() .. ".wiktionary.org]]'''")
end
end
wiktionarylinks = concat(wiktionarylinks, "<br/>")
end
local wikt_plural = --[[wikimediaLanguages[2] and "s" or ""]] ""
if #wiktionarylinks == 0 then
wiktionarylinks = "''ဟၟဲ''"
end
-- Don't even show Wiktionary links section for reconstructed languages,
-- as they are ineligible for Wiktionary editions
local wiktionarylinks_chunk = concat{
[=[|-
| style="vertical-align: top; height: 35px; width: 40px; border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | [[File:Wiktionary-logo-v2.svg|35px|none|Wiktionary]]
|style="border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | '''ဝိက်ရှေန်နရဳပရေၚ်မပလေဝ်ဒါန်''']=], wikt_plural, [=[ မချူလဝ်အပ္ဍဲ ]=], canonicalName, [=[:
<div style="padding: 5px 10px">]=], wiktionarylinks, [=[</div>
]=]}
if lang:hasType('reconstructed') then
wiktionarylinks_chunk = ''
end
if setsister then
track("setsister")
if setsister == "-" then
track("setsister/hyphen")
else
setsister = "ကဏ္ဍ:" .. setsister
end
else
setsister = lang:getCommonsCategory() or "-"
end
return concat{
[=[<div class="wikitable" style="float: right; clear: right; margin: 0 0 0.5em 1em; width: 300px; padding: 5px;">
<div style="text-align: center; margin-bottom: 10px; margin-top: 5px">လေန်အရေဝ်ဘာသာ''']=], canonicalName, [=[ဂမၠိုၚ်'''</div>
{| style="font-size: 90%"
|-
| style="vertical-align: top; height: 35px; border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | [[File:Wikipedia-logo.png|35px|none|ဝဳကဳပဳဒဳယာ]]
| style="border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | '''ဝဳကဳပဳဒဳယာဘာသာမန်'''မနွံဒၟံၚ်လိက်ပရေၚ်လ္တူ:
<div style="padding: 5px 10px">]=], (setwiki == "-" and "''ဟၟဲ''" or "'''[[w:" .. wikipediaArticle .. "|" .. wikipediaArticle .. "]]'''"), [=[</div>
|-
| style="vertical-align: top; height: 35px; border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | [[File:Wikimedia-logo.svg|35px|none|ဝဳကဳမဳဒဳယာ ခမ်မောန်]]
| style="border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | ဝဳကဳမဳဒဳယာ ခမ်မောန်'''မနွံဒၟံၚ်လေန်နကဵုမဆက်စပ်လဝ်ပရောပရာ]=], canonicalName, [=[-ပ္ဍဲပရဝ်ဂျေတ်ၝုဲဒေံဂမၠိုၚ်:
<div style="padding: 5px 10px">]=], (setsister == "-" and "''ဟၟဲ''" or "'''[[commons:" .. setsister .. "|" .. setsister .. "]]'''"), [=[</div>
]=], wiktionarylinks_chunk, [=[
|-
| style="vertical-align: top; height: 35px; border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | [[File:Open book nae 02.svg|35px|none|ဝိက်ရှေန်နရဳ]]
| style="border-bottom: 1px solid var(--wikt-palette-grey-4,lightgray);" | '''ဝိက်ရှေန်နရဳပရေၚ်ပၠောပ်စုတ်'''သွက်ဆေၚ်စပ်ကဵုယၟုဘာသာမန်ဂမၠိုၚ်:
<div style="padding: 5px 10px">''']=], require("Module:links").full_link({lang = m_languages.getByCode("mnw"), term = entryname or canonicalName}), [=['''</div>
|-
| style="vertical-align: top; height: 35px;" | [[File:Crystal kfind.png|35px|none|ပရေၚ်ပၠောပ်စုတ်]]
|| '''ဝိက်ရှေန်နရဳသောၚ်တလး'''သွက်ဂွံပွမဗိုၚ်ချူပလေဝ်ဒါန်နကဵုပရေၚ်ပၠောပ်စုတ်]=], canonicalName, [=[ဂမၠိုၚ်:
<div style="padding: 5px 0">
* '''[[ဝိက်ရှေန်နရဳ:ထ္ၜးဂၠံၚ်ပရေၚ်ပၠောပ်စုတ်]=], canonicalName, [=[ဂမၠိုၚ်]]'''
* '''[[:ကဏ္ဍ:ထာမ်ပလိက်နိဿဲ]=], canonicalName, [=[ဂမၠိုၚ်|ထာမ်ပလိက်နိဿဲ]] ({{PAGESINCAT:ထာမ်ပလိက်နိဿဲ]=], canonicalName, [=[ဂမၠိုၚ်}})'''
* '''[[အဆက်လက္ကရဴ:စရၚ်ပြကိုဟ်နိဿဲ]=], canonicalName, [=[ |စရၚ်ပြကိုဟ်နိဿဲ]]'''
</div>
|}
</div>]=]
}
end
local function edit_link(title, text)
return '<span class="plainlinks">['
.. tostring(mw.uri.fullUrl(title, { action = "ပလေဝ်ဒါန်" }))
.. ' ' .. text .. ']</span>'
end
-- Should perhaps use wiki syntax.
local function infobox(lang)
local ret = {}
insert(ret, '<table class="wikitable language-category-info"')
local raw_data = lang:getData("extra")
if raw_data then
local replacements = {
[1] = "canonical-name",
[2] = "wikidata-item",
[3] = "family",
[4] = "scripts",
}
local function replacer(letter1, letter2)
return letter1:lower() .. "-" .. letter2:lower()
end
-- For each key in the language data modules, returns a descriptive
-- kebab-case version (containing ASCII lowercase words separated
-- by hyphens).
local function kebab_case(key)
key = replacements[key] or key
key = key:gsub("(%l)(%u)", replacer):gsub("(%l)_(%l)", replacer)
return key
end
local compress = {compress = true}
local function html_attribute_encode(str)
str = to_json(str, compress)
:gsub('"', """)
-- & in attributes is automatically escaped.
-- :gsub("&", "&")
:gsub("<", "<")
:gsub(">", ">")
return str
end
insert(ret, ' data-code="' .. lang:getCode() .. '"')
for k, v in sorted_pairs(raw_data) do
insert(ret, " data-" .. kebab_case(k)
.. '="'
.. html_attribute_encode(v)
.. '"')
end
end
insert(ret, '>\n')
insert(ret, '<tr class="language-category-data">\n<th colspan="2">'
.. edit_link(lang:getDataModuleName(), "ဒေတာပလေဝ်ဒါန်အရေဝ်ဘာသာ")
.. "</th>\n</tr>\n")
insert(ret, "<tr>\n<th>ယၟုတိုၚ်ခဳ</th><td>" .. lang:getCanonicalName() .. "</td>\n</tr>\n")
local otherNames = lang:getOtherNames()
if otherNames then
local names = {}
for _, name in ipairs(otherNames) do
insert(names, "<li>" .. name .. "</li>")
end
if #names > 0 then
insert(ret, "<tr>\n<th>ယၟုတၞဟ်</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n")
end
end
local aliases = lang:getAliases()
if aliases then
local names = {}
for _, name in ipairs(aliases) do
insert(names, "<li>" .. name .. "</li>")
end
if #names > 0 then
insert(ret, "<tr>\n<th>ယၟုတၞဟ်</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n")
end
end
local varieties = lang:getVarieties()
if varieties then
local names = {}
for _, name in ipairs(varieties) do
if type(name) == "string" then
insert(names, "<li>" .. name .. "</li>")
else
assert(type(name) == "table")
local first_var
local subvars = {}
for i, var in ipairs(name) do
if i == 1 then
first_var = var
else
insert(subvars, "<li>" .. var .. "</li>")
end
end
if #subvars > 0 then
insert(names, "<li><dl><dt>" .. first_var .. "</dt>\n<dd><ul>" .. concat(subvars, "\n") .. "</ul></dd></dl></li>")
elseif first_var then
insert(names, "<li>" .. first_var .. "</li>")
end
end
end
if #names > 0 then
insert(ret, "<tr>\n<th>ယၟုမထပ်ကော်သာ်တၞဟ်</th><td><ul>" .. concat(names, "\n") .. "</ul></td>\n</tr>\n")
end
end
insert(ret, "<tr>\n<th>[[ဝိက်ရှေန်နရဳ:အရေဝ်ဘာသာဂမၠိုၚ်|ကုဒ်အရေဝ်ဘာသာ]]</th><td><code>" .. lang:getCode() .. "</code></td>\n</tr>\n")
insert(ret, "<tr>\n<th>[[ဝိက်ရှေန်နရဳ:အရေဝ်ဘာသာဝေါၚ်သဂမၠိုၚ်|အရေဝ်ဘာသာဝေါၚ်သ]]</th>\n")
local fam = lang:getFamily()
local famCode = fam and fam:getCode()
if not fam then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာဟွံဂွံစၟတ်သမ္တီလဝ်ဂမၠိုၚ်|ဟွံဂွံစၟတ်သမ္တီလဝ်]]</td>")
elseif famCode == "qfa-dis" then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာဆေၚ်စပ်ကဵုကယျာန်စာန်စးပရေၚ်ဝေါၚ်သဂမၠိုၚ်|ကယျာန်စာန်စးပရေၚ်ဝေါၚ်သ]]</td>")
elseif famCode == "qfa-iso" then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာမပါ်ပ္တိတ်လဝ်ဂမၠိုၚ်|အရေဝ်ဘာသာမပါ်ပ္တိတ်လဝ်]]</td>")
elseif famCode == "qfa-mix" then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာမပံၚ်ဖနှဴလဝ်ဂမၠိုၚ်|အရေဝ်ဘာသာမပံၚ်ဖနှဴလဝ်]]</td>")
elseif famCode == "qfa-unc" then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာမပါ်ခြာဂကူဟွံမာန်ဂမၠိုၚ်|အရေဝ်ဘာသာမပါ်ခြာဂကူဟွံမာန်ဂမၠိုၚ်]]</td>")
elseif famCode == "sgn" then
insert(ret, "<td>[[:ကဏ္ဍ:အရေဝ်ဘာသာလက္ခဏာသမ္တီဂမၠိုၚ်|အရေဝ်ဘာသာလက္ခဏာသမ္တီ]]</td>")
elseif famCode == "crp" then
insert(ret, "<td>[[:ကဏ္ဍ:ဘာသာခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်ဂမၠိုၚ်|ခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်]]</td>")
elseif famCode == "art" then
insert(ret, "<td>[[:ကဏ္ဍ:ဂကောံဘာသာခၞံဗဒှ်လဝ်ဂမၠိုၚ်|ဂကောံဘာသာခၞံဗဒှ်လဝ်]]</td>")
else
insert(ret, "<td>" .. fam:makeCategoryLink() .. "</td>")
end
insert(ret, "\n</tr>\n<tr>\n<th>ဇုဇဗဴလဂမၠိုၚ်</th>\n<td>")
local ancestors = lang:getAncestors()
if ancestors[2] then
local ancestorList = {}
for i, anc in ipairs(ancestors) do
ancestorList[i] = "<li>" .. anc:makeCategoryLink() .. "</li>"
end
insert(ret, "<ul>\n" .. concat(ancestorList, "\n") .. "</ul>")
else
local ancestorChain = lang:getAncestorChainOld()
if ancestorChain[1] then
local chain = {}
for _, anc in reverse_ipairs(ancestorChain) do
insert(chain, "<li>" .. anc:makeCategoryLink() .. "</li>")
end
insert(ret, "<ul>\n" .. concat(chain, "\n<ul>\n") .. ("</ul>"):rep(#chain))
else
insert(ret, "ဟွံတီကၠး")
end
end
insert(ret, "</td>\n</tr>\n")
local scripts = lang:getScripts()
if scripts[1] then
local script_text = {}
local function makeScriptLine(sc)
local code = sc:getCode()
local url = tostring(mw.uri.fullUrl('Special:Search', {
search = 'contentmodel:css insource:"' .. code
.. '" insource:/\\.' .. code .. '/',
ns8 = '1'
}))
return sc:makeCategoryLink()
.. ' (<span class="plainlinks" title="Search for stylesheets referencing this script">[' .. url .. ' <code>' .. code .. '</code>]</span>)'
end
local function add_Hrkt(text)
insert(text, "<li>" .. makeScriptLine(Hrkt))
insert(text, "<ul>")
insert(text, "<li>" .. makeScriptLine(Hira) .. "</li>")
insert(text, "<li>" .. makeScriptLine(Kana) .. "</li>")
insert(text, "</ul>")
insert(text, "</li>")
end
for _, sc in ipairs(scripts) do
local text = {}
local code = sc:getCode()
if code == "Hrkt" then
add_Hrkt(text)
else
insert(text, "<li>" .. makeScriptLine(sc))
if code == "Jpan" then
insert(text, "<ul>")
insert(text, "<li>" .. makeScriptLine(Hani) .. "</li>")
add_Hrkt(text)
insert(text, "</ul>")
elseif code == "Kore" then
insert(text, "<ul>")
insert(text, "<li>" .. makeScriptLine(Hang) .. "</li>")
insert(text, "<li>" .. makeScriptLine(Hani) .. "</li>")
insert(text, "</ul>")
end
insert(text, "</li>")
end
insert(script_text, concat(text, "\n"))
end
insert(ret, "<tr>\n<th>[[ဝိက်ရှေန်နရဳ:အက္ခရ်ဂမၠိုၚ်|အက္ခရ်ဂမၠိုၚ်]]</th>\n<td><ul>\n" .. concat(script_text, "\n") .. "</ul></td>\n</tr>\n")
else
insert(ret, "<tr>\n<th>[[ဝိက်ရှေန်နရဳ:အက္ခရ်ဂမၠိုၚ်|အက္ခရ်ဂမၠိုၚ်]]</th>\n<td>ไม่ระบุ</td>\n</tr>\n")
end
local function add_module_info(raw_data, heading)
if raw_data then
local scripts = lang:getScriptCodes()
local module_info, add = {}, false
if type(raw_data) == "string" then
insert(module_info,
("[[Module:%s]]"):format(raw_data))
add = true
else
local raw_data_type = type(raw_data)
if raw_data_type == "table" and size(scripts) == 1 and type(raw_data[scripts[1]]) == "string" then
insert(module_info,
("[[Module:%s]]"):format(raw_data[scripts[1]]))
add = true
elseif raw_data_type == "table" then
insert(module_info, "<ul>")
for script, data in sorted_pairs(raw_data) do
if type(data) == "string" and m_sc_getByCode(script) then
insert(module_info, ("<li><code>%s</code>: [[Module:%s]]</li>"):format(script, data))
end
end
insert(module_info, "</ul>")
add = size(module_info) > 2
end
end
if add then
insert(ret, [=[
<tr>
<th>]=] .. heading .. [=[</th>
<td>]=] .. concat(module_info) .. [=[</td>
</tr>
]=])
end
end
end
add_module_info(raw_data.generate_forms, "မဝ်ဂျူ<br>ဗီုပြၚ်ပွမခၞံဗဒှ်")
add_module_info(raw_data.translit, "[[ဝိက်ရှေန်နရဳ:ကၠာဲပ္တိတ်မအခဝ် ကဵု ပြၚ်လှာဲအက္ခရ်ရဝ်မာန်|မဝ်ဂျူ<br>ကၠာဲပ္တိတ်မအခဝ်]]")
add_module_info(raw_data.display_text, "မဝ်ဂျူ<br>ထ္ၜးမလိက်")
add_module_info(raw_data.entry_name, "မဝ်ဂျူ<br>ယၟုစရၚ်")
add_module_info(raw_data.sort_key, "[[sortkey|မဝ်ဂျူ]]<br>ကဳပါ်အဇာ")
local wikidataItem = lang:getWikidataItem()
if lang:getWikidataItem() and mw.wikibase then
local URL = mw.wikibase.getEntityUrl(wikidataItem)
local link
if URL then
link = '[[d:' .. wikidataItem .. '|' .. wikidataItem .. ']]'
else
link = '<span class="error">Invalid Wikidata item: <code>' .. wikidataItem .. '</code></span>'
end
insert(ret, "<tr><th>ဝဳကဳဒေတာ</th><td>" .. link .. "</td></tr>")
end
insert(ret, "</table>")
return concat(ret)
end
local function NavFrame_for_family_tree(content, title)
return '<div class="NavFrame"><div class="NavHead">'
.. (title or '{{{title}}}') .. '</div>'
.. '<div class="NavContent" style="text-align: left; font-size: calc(1em / 0.95); padding: 0.3em">'
.. content
.. '</div></div>'
end
local function get_description_topright_additional(lang, locations, extinct, setwiki, setwikt, setsister, entryname)
local nameWithLanguage = lang:getCategoryName("nocap")
if lang:getCode() == "und" then
local description =
"ဣတဏအ်ဂှ်ဝွံဆေၚ်စပ်ကဵုကဏ္ဍအဓိက'''" .. nameWithLanguage .. "'''၊ မအာတ်မိက်ထ္ၜးလဝ်ပ္ဍဲဝိက်ရှေန်နရဳသီုကဵု[[ဝိက်ရှေန်နရဳ:အရေဝ်ဘာသာဂမၠိုၚ်|ကုဒ်]] '''" .. lang:getCode() .. "'''ရအဴ။ " ..
"မအရေဝ်ဘာသာလုပ်အဝေါၚ်တဏအ်ဝွံပ္ဍဲပွမချူဆေၚ်စပ်ကဵုဝၚ်၊ သီုကဵုမအရေဝ်အဓိပ္ပာဲကီုလေဝ်မက္တဵုဒှ်လဝ်ဂလာန်သတ်ဒတ်နူကဵုတၠပညာဟၟဲမွဲဏီ။"
return description, nil, nil
end
local canonicalName = lang:getCanonicalName()
local categoryName = lang:getCategoryName() --mnw
local topright = linkbox(lang, setwiki, setwikt, setsister, entryname)
--[=[
local the_prefix
if canonicalName:find(" Language$") then
the_prefix = ""
else
the_prefix = "the "
end
--]=]
local the_prefix = ""
local description = "ဣတဏအ်ဂှ်ဝွံဆေၚ်စပ်ကဵုကဏ္ဍအဓိက" .. the_prefix .. "'''" .. nameWithLanguage .. "'''ရအဴ။"
local location_links = {}
local prep
local saw_embedded_comma = false
for _, location in ipairs(locations) do
local this_prep
if location == "မဆေၚ်စပ်ကဵုဂၠးတိ" then
this_prep = "လက်လၞၚ်"
insert(location_links, location)
elseif location ~= "UNKNOWN" then
this_prep = "ပ္ဍဲ"
if location:find(",") then
saw_embedded_comma = true
end
insert(location_links, link_location(location))
end
if this_prep then
if prep and this_prep ~= prep then
error("Can't handle location 'the world' along with another location (clashing prepositions)")
end
prep = this_prep
end
end
local location_desc
if #location_links > 0 then
local location_link_text
if saw_embedded_comma and #location_links >= 3 then
location_link_text = mw.text.listToText(location_links, "; ", "; ကဵု ")
else
location_link_text = serial_comma_join(location_links)
end
location_desc = ("ဘာသာတဏအ်ဝွံ%s%s%s\n\n"):format(
extinct and "မဒှ်အရေဝ်ဘာသာကၠေံဗ္ဒန်အာတုဲရ နကဵုမကေၚ်ဟီုဂးလဝ်ကီုလေဝ်" or "မဟီုဂး", prep, location_link_text)
elseif extinct then
location_desc = "အရေဝ်ဘာသာတဏအ်ဝွံမဒှ်အရေဝ်ဘာသာကၠေံဗ္ဒန်အာတုဲရ\n\n"
else
location_desc = ""
end
local add = location_desc .. "စရၚ်ပရောပရာမဆေၚ်စပ်ကဵု" .. nameWithLanguage .. ":\n\n" .. infobox(lang)
if lang:hasType("reconstructed") then
add = add .. "\n\n" ..
ucfirst(canonicalName) .. " is a reconstructed language. Its words and roots are not directly attested in any written works, but have been reconstructed through the ''comparative method'', " ..
"which finds regular similarities between languages that cannot be explained by coincidence or word-borrowing, and extrapolates ancient forms from these similarities.\n\n" ..
"According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in " .. canonicalName ..
" should '''not''' be present in entries in the main namespace, but may be added to the Reconstruction: namespace."
elseif lang:hasType("appendix-constructed") then
add = add .. "\n\n" ..
ucfirst(canonicalName) .. " is a constructed language that is only in sporadic use. " ..
"According to our [[Wiktionary:Criteria for inclusion|criteria for inclusion]], terms in " .. canonicalName ..
" should '''not''' be present in entries in the main namespace, but may be added to the Appendix: namespace. " ..
"All terms in this language may be available at [[Appendix:" .. ucfirst(canonicalName) .. "]]."
end
local entry_guidelines_page = "ဝိက်ရှေန်နရဳ:ပရူ" .. categoryName
local entry_guidelines = new_title(entry_guidelines_page)
if entry_guidelines.exists then
add = add .. "\n\n" ..
"Please see '''[[" .. entry_guidelines_page .. "]]''' for information and special considerations for creating " .. nameWithLanguage .. " entries."
end
local ok, tree_of_descendants = pcall(
require("Module:family tree").print_children,
lang:getCode(), {
protolanguage_under_family = true,
must_have_descendants = true
})
if ok then
if tree_of_descendants then
add = add .. NavFrame_for_family_tree(
tree_of_descendants,
"Family tree")
else
add = add .. "\n\n" .. ucfirst(lang:getCategoryName())
.. " has no descendants or varieties listed in Wiktionary's language data modules."
end
else
mw.log("error while generating tree: " .. tostring(tree_of_descendants))
end
return description, topright, add
end
local function get_parents(lang, locations, extinct)
local canonicalName = lang:getCanonicalName()
local sortkey = {sort_base = canonicalName, lang = "mnw"}
local ret = {{name = "အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်", sort = sortkey}}
local fam = lang:getFamily()
local famCode = fam and fam:getCode()
-- FIXME: Some of the following categories should be added to this module.
if not fam then
insert(ret, {name = "ကဏ္ဍ::အရေဝ်ဘာသာဟွံဂွံစၟတ်သမ္တီလဝ်ဂမၠိုၚ်", sort = sortkey})
elseif famCode == "qfa-dis" then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာဆေၚ်စပ်ကဵုကယျာန်စာန်စးပရေၚ်ဝေါၚ်သဂမၠိုၚ်", sort = sortkey})
elseif famCode == "qfa-iso" then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာမပါ်ပ္တိတ်လဝ်ဂမၠိုၚ်", sort = sortkey})
elseif famCode == "qfa-mix" then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာမပံၚ်ဖနှဴလဝ်ဂမၠိုၚ်", sort = sortkey})
elseif famCode == "qfa-unc" then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာမပါ်ခြာဂကူဟွံမာန်ဂမၠိုၚ်", sort = sortkey})
elseif famCode == "sgn" then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာလက္ခဏာသမ္တီသီုဖ္အိုတ်ဂမၠိုၚ်", sort = sortkey})
elseif famCode == "crp" then
insert(ret, {name = "ကဏ္ဍ:ဘာသာခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်ဂမၠိုၚ်", sort = sortkey})
for _, anc in ipairs(lang:getAncestors()) do
-- Avoid Haitian Creole being categorised in [[:ကဏ္ဍ:Haitian Creole-based creole or pidgin languages]], as one of its ancestors is an etymology-only variety of it.
-- Use that ancestor's ancestors instead.
if anc:getFullCode() == lang:getCode() then
for _, anc_extra in ipairs(anc:getAncestors()) do
insert(ret, {name = "ကဏ္ဍ:ဘာသာခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်မရပ်စပ်လဝ်ဘာသာ" .. ucfirst(anc_extra:getFullName()) .. "နကဵုတံသ္ဇိုၚ်ဂမၠိုၚ်", sort = sortkey})
end
else
insert(ret, {name = "ကဏ္ဍ:ဘာသာခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်မရပ်စပ်လဝ်ဘာသာ" .. ucfirst(anc:getFullName()) .. "နကဵုတံသ္ဇိုၚ်ဂမၠိုၚ်", sort = sortkey})
end
end
elseif famCode == "art" then
if lang:hasType("appendix-constructed") then
insert(ret, {name = "ကဏ္ဍ:ဂကောံဘာသာခၞံဗဒှ်လဝ်ပါဲနူအဆက်လက္ကရဴဂမၠိုၚ်", sort = sortkey})
else
insert(ret, {name = "ကဏ္ဍ:ဂကောံဘာသာခၞံဗဒှ်လဝ်ဂမၠိုၚ်", sort = sortkey})
end
for _, anc in ipairs(lang:getAncestors()) do
if anc:getFullCode() == lang:getCode() then
for _, anc_extra in ipairs(anc:getAncestors()) do
insert(ret, {name = "ကဏ္ဍ:ဂကောံဘာသာခၞံဗဒှ်လဝ်မရပ်စပ်လဝ်ဘာသာ" .. ucfirst(anc_extra:getFullName()) .. "နကဵုတံသ္ဇိုၚ်ဂမၠိုၚ်", sort = sortkey})
end
else
insert(ret, {name = "ကဏ္ဍ:ဂကောံဘာသာခၞံဗဒှ်လဝ်မရပ်စပ်လဝ်ဘာသာ" .. ucfirst(anc:getFullName()) .. "နကဵုတံသ္ဇိုၚ်ဂမၠိုၚ်", sort = sortkey})
end
end
else
insert(ret, {name = "ကဏ္ဍ:" .. fam:getCategoryName(), sort = sortkey})
if lang:hasType("reconstructed") then
insert(ret, {
name = "ကဏ္ဍ:အရေဝ်ဘာသာဗီုပြၚ်သိုၚ်တၟိဂမၠိုၚ်",
sort = {sort_base = canonicalName, lang = "mnw"} -- ဘာသာအခိုက်ကၞာ-မန်-ခမေန်
})
end
end
local function add_sc_cat(sc) -- ဘာသာ(ဒၞာဲစွံ)အက္ခရ်...
insert(ret, {name = "ကဏ္ဍ:ဘာသာ" .. sc:getCategoryName(), sort = sortkey})
end
local function add_Hrkt()
add_sc_cat(Hrkt)
add_sc_cat(Hira)
add_sc_cat(Kana)
end
for _, sc in ipairs(lang:getScripts()) do
if sc:getCode() == "Hrkt" then
add_Hrkt()
else
add_sc_cat(sc)
if sc:getCode() == "Jpan" then
add_sc_cat(Hani)
add_Hrkt()
elseif sc:getCode() == "Kore" then
add_sc_cat(Hang)
add_sc_cat(Hani)
end
end
end
if lang:hasTranslit() then
insert(ret, {name = "ကဏ္ဍ:ဘာသာမနွံကဵုပြၚ်လှာဲကၠာဲမအခဝ်အဝ်တဝ်", sort = sortkey})
end
local function insert_location_language_cat(location)
local cat = "အရေဝ်ဘာသာမဆေၚ်စပ်ကဵု" .. location .. "ဂမၠိုၚ်"
insert(ret, {name = "ကဏ္ဍ:" .. cat, sort = sortkey})
local auto_cat_args = scrape_category_for_auto_cat_args(cat)
local location_parent = auto_cat_args and auto_cat_args.parent
if location_parent then
local split_parents = require(parse_utilities_module).split_on_comma(location_parent)
for _, parent in ipairs(split_parents) do
parent = parent:match("^(.-):.*$") or parent
insert_location_language_cat(parent)
end
end
end
local saw_location = false
for _, location in ipairs(locations) do
if location ~= "UNKNOWN" then
saw_location = true
insert_location_language_cat(location)
end
end
if extinct then
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာမကၠေံဗ္ဒန်အာသီုဖ္အိုတ်ဂမၠိုၚ်", sort = sortkey})
end
if not saw_location and not (lang:hasType("reconstructed") or (fam and fam:getCode() == "art")) then
-- Constructed and reconstructed languages don't need a location specified and often won't have one,
-- so don't put them in this maintenance category.
insert(ret, {name = "ကဏ္ဍ:အရေဝ်ဘာသာဟွံဂွံစုတ်အဇာအပ္ဍဲကဏ္ဍဍုၚ်အတေံဏီ", sort = sortkey})
end
return ret
end
local function get_children()
local ret = {}
-- FIXME: We should work on the children mechanism so it isn't necessary to manually specify these.
--for _, label in ipairs({"appendices", "entry maintenance", "lemmas", "names", "phrases", "rhymes", "symbols", "templates", "terms by etymology", "terms by usage"}) do
for _, label in ipairs({"အဆက်လက္ကရဴ", "ပရေၚ်မၚ်မွဲထိၚ်ဒက်", "ဝေါဟာအဓိက", "ယၟု", "ဝါကျ", "ကာရန်", "သၚ်္ကေတ", "ထာမ်ပလိက်", "မအရေဝ်ဗက်အလိုက်နိရုတ်", "မအရေဝ်ဗက်အလိုက်ပရေၚ်ရပ်စပ်"}) do
insert(ret, {name = label, is_label = true})
end
insert(ret, {name = "ဝေါဟာကၠုၚ်နူ{{{langcat}}}ဂမၠိုၚ်", is_label = true, lang = false})
insert(ret, {name = "{{{langcode}}}:က္ဍိုပ်လိက်ဖ္အိုတ်", sort = "က္ဍိုပ်လိက်ဖ္အိုတ်"})
insert(ret, {name = "လ္ပာ်ဘာသာ{{{langcat}}}"})
insert(ret, {name = "မအာတ်မိက်ဆေၚ်စပ်ကဵုဘာသာ{{{langcat}}}"})
insert(ret, {name = "ကာရန်:{{{langcat}}}", description = "စရၚ်ဆေၚ်စပ်ကဵုမအရေဝ်{{{langname}}}ဗက်အလိုက်ကာရန်တံဂမၠိုၚ်"})
insert(ret, {name = "ညးလွပ်{{{langcode}}}", description = "Wiktionary users categorized by fluency levels in {{{langdisp}}}."})
return ret
end
-- Handle language categories of the form e.g. [[:ကဏ္ဍ:French language]] and
-- [[:ကဏ္ဍ:British Sign Language]].
insert(raw_handlers, function(data)
local category = data.category
if not (category:find("^ဘာသာ") or category:find("^လောၚ်တရး")) then
return nil
elseif category:find("^ဘာသာ") then --mnw
category = mw.ustring.sub(category, 5)
elseif category:find("^လောၚ်တရး") then --mnw
category = mw.ustring.sub(category, 6)
end
local lang = m_languages.getByCanonicalName(category)
if not lang then
local langname = category:match("^ဂကောံဘာသာ(.*)$")
if langname then
lang = m_languages.getByCanonicalName(langname)
end
if not lang then
return nil
end
end
local args = require("Module:parameters").process(data.args, {
[1] = {list = true},
["setwiki"] = true,
["setwikt"] = true,
["setsister"] = true,
["entryname"] = true,
["extinct"] = {type = "boolean"},
})
-- If called from inside, don't require any arguments, as they can't be known
-- in general and aren't needed just to generate the first parent (used for
-- breadcrumbs).
if #args[1] == 0 and not data.called_from_inside then
-- At least one location must be specified unless the language is constructed (e.g. Esperanto) or reconstructed (e.g. Proto-Indo-European).
local fam = lang:getFamily()
if not (lang:hasType("reconstructed") or (fam and fam:getCode() == "art")) then
error("At least one location (param 1=) must be specified for language '" .. lang:getCanonicalName() .. "' (code '" .. lang:getCode() .. "'). " ..
"Use the value UNKNOWN if the language's location is truly unknown.")
end
end
local description, topright, additional = "", "", ""
-- If called from inside the category tree system, it's called when generating
-- parents or children, and we don't need to generate the description or additional
-- text (which is very expensive in terms of memory because it calls [[Module:family tree]],
-- which calls [[Module:languages/data/all]]).
if not data.called_from_inside then
description, topright, additional = get_description_topright_additional(
lang, args[1], args.extinct, args.setwiki, args.setwikt, args.setsister, args.entryname
)
end
return {
canonical_name = lang:getCategoryName(),
description = description,
lang = lang:getCode(),
topright = topright,
additional = additional,
breadcrumb = lang:getCanonicalName(),
parents = get_parents(lang, args[1], args.extinct),
extra_children = get_children(lang),
umbrella = false,
can_be_empty = true,
}, true
end)
-- Handle categories such as [[:ကဏ္ဍ:Languages of Indonesia]].
insert(raw_handlers, function(data)
local location = data.category:match("^ဘာသာဆေၚ်စပ်ကဵု(.+)$")
if location then
local args = require("Module:parameters").process(data.args, {
["flagfile"] = true,
["commonscat"] = true,
["wp"] = true,
["basename"] = true,
["parent"] = true,
["locationcat"] = true,
["locationlink"] = true,
})
local topright
local basename = args.basename or location:gsub(", .*", "")
if args.flagfile ~= "-" then
local flagfile_arg = args.flagfile or ("Flag of %s.svg"):format(basename)
local files = require(parse_utilities_module).split_on_comma(flagfile_arg)
local topright_parts = {}
for _, file in ipairs(files) do
local flagfile = "File:" .. file
local flagfile_page = new_title(flagfile)
if flagfile_page and flagfile_page.file.exists then
insert(topright_parts, ("[[%s|right|100px|border]]"):format(flagfile))
elseif args.flagfile then
error(("Explicit flagfile '%s' doesn't exist"):format(flagfile))
end
end
topright = concat(topright_parts)
end
if args.wp then
local wp = require("Module:yesno")(args.wp, "+")
if wp == "+" or wp == true then
wp = data.category
end
if wp then
local wp_topright = ("{{wikipedia|%s}}"):format(wp)
if topright then
topright = topright .. wp_topright
else
topright = wp_topright
end
end
end
if args.commonscat then
local commonscat = require("Module:yesno")(args.commonscat, "+")
if commonscat == "+" or commonscat == true then
commonscat = data.category
end
if commonscat then
local commons_topright = ("{{commonscat|%s}}"):format(commonscat)
if topright then
topright = topright .. commons_topright
else
topright = commons_topright
end
end
end
local bare_location = location:match("^the (.*)$") or location
local location_link = args.locationlink or link_location(location)
local bare_basename = basename:match("^the (.*)$") or basename
local parents = {}
if args.parent then
local explicit_parents = require(parse_utilities_module).split_on_comma(args.parent)
for i, parent in ipairs(explicit_parents) do
local actual_parent, sort_key = parent:match("^(.-):(.*)$")
if actual_parent then
parent = actual_parent
sort_key = sort_key:gsub("%+", bare_location)
else
sort_key = " " .. bare_location
end
insert(parents, {name = "အရေဝ်ဘာသာဆေၚ်စပ်ကဵု" .. parent, sort = sort_key})
end
else
insert(parents, {name = "အရေဝ်ဘာသာဗက်အလိုက်ဍုၚ်ရး", sort = {sort_base = bare_location, lang = "mnw"}})
end
if args.locationcat then
local explicit_location_cats = require(parse_utilities_module).split_on_comma(args.locationcat)
for i, locationcat in ipairs(explicit_location_cats) do
insert(parents, {name = "ကဏ္ဍ:" .. locationcat, sort = " ဘာသာ"})
end
else
local location_cat = ("ကဏ္ဍ:%s"):format(bare_location)
local location_page = new_title(location_cat)
if location_page and location_page.exists then
insert(parents, {name = location_cat, sort = "ဘာသာ"})
end
end
local description = ("Categories for languages of %s (including sublects)."):format(location_link)
return {
topright = topright,
description = description,
parents = parents,
breadcrumb = bare_basename,
additional = "{{{umbrella_msg}}}",
}, true
end
end)
-- Handle categories such as [[:ကဏ္ဍ:English-based creole or pidgin languages]].
insert(raw_handlers, function(data)
local langname = data.category:match("(.*)%-based creole or pidgin languages$")
if langname then
local lang = m_languages.getByCanonicalName(langname)
if lang then
return {
lang = lang:getCode(),
description = "Languages which developed as a [[creole]] or [[pidgin]] from " .. lang:makeCategoryLink() .. ".",
parents = {{name = "ဘာသာခရေဝ်အဝ် ဝါ ဖှေတ်ကျေန်ဂမၠိုၚ်", sort = {sort_base = "*" .. langname, lang = "mnw"}}},
breadcrumb = lang:getCanonicalName() .. "-based",
}
end
end
end)
-- Handle categories such as [[:ကဏ္ဍ:English-based constructed languages]].
insert(raw_handlers, function(data)
local langname = data.category:match("(.*)%-based constructed languages$")
if langname then
local lang = m_languages.getByCanonicalName(langname)
if lang then
return {
lang = lang:getCode(),
description = "Constructed languages which are based on " .. lang:makeCategoryLink() .. ".",
parents = {{name = "အရေဝ်ဘာသာခၞံဗဒှ်လဝ်ဂမၠိုၚ်", sort = {sort_base = "*" .. langname, lang = "mnw"}}},
breadcrumb = lang:getCanonicalName() .. "-based",
}
end
end
end)
return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}
p26gl9vyyi48iajzxxl4nt3z22qhxty
ထာမ်ပလိက်:rhyme-top
10
43837
397429
144724
2026-06-22T17:28:41Z
咽頭べさ
33
397429
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
--><div class="rhymes-list-begin ul-column-count" data-column-count="{{{1|3}}}"><noinclude></div>{{documentation}}</noinclude>
pidhn5yufu3vmb4xad3bf4dcdotxm2z
ကဏ္ဍ:ထာမ်ပလိက်မေတဂမၠိုၚ်
14
66390
397431
162944
2026-06-22T17:34:40Z
咽頭べさ
33
397431
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
မဝ်ဂျူ:rhymes/styles.css
828
114296
397435
146840
2026-06-22T17:41:25Z
咽頭べさ
33
397435
sanitized-css
text/css
.ts-rhymesBreadcrumbs {
display: table;
margin-bottom: 0.5em;
padding-bottom: 0.2em;
border-bottom: 1px solid var(--wikt-palette-lightgrey,#c8ccd1);
font-size: 0.92857143em; /* 13 / 14 */
}
.ts-rhymesBreadcrumbs ol {
margin: 0;
padding-left: 0;
list-style: none;
}
.ts-rhymesBreadcrumbs li {
display: inline-flex;
align-items: baseline;
margin: 0;
}
.ts-rhymesBreadcrumbs li + li::before {
content: "»";
color: var(--wikt-palette-darkgrey,#54595d);
margin: 0 0.38461538em; /* 5 / 13 */
}
.ts-rhymesBreadcrumbs a {
white-space: nowrap;
}
4vzo5hxhknnd3wapl8jk8ovnrjo0pq6
𮜍
0
210355
397443
288944
2026-06-23T07:48:19Z
Hiyuune
1535
397443
wikitext
text/x-wiki
{{character info}}
==မအရေဝ်ပံၚ်ကောံ==
===အက္ခရ်ကြုက်===
{{Han char|rn=157|rad=足|as=11|sn=|four=|canj=|ids=⿰𧾷⿱罒羽}}
====နိဿဲ====
* {{Han ref|kx=|dkj=|dj=|hdz=|uh=2E70D}}
s9rxho39hrwatsug26uhvgp1dqjteuy
grafon
0
296224
397420
2026-06-22T17:06:46Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အေက်သပရေန်တဝ်== ===နာမ်=== {{eo-head}} # {{eo-form of|graf|on}}"
397420
wikitext
text/x-wiki
==အေက်သပရေန်တဝ်==
===နာမ်===
{{eo-head}}
# {{eo-form of|graf|on}}
5kgm7tm7ef3tixozmeeyepvvnhq8mbe
grafoj
0
296225
397421
2026-06-22T17:07:32Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အေက်သပရေန်တဝ်== ===နာမ်=== {{eo-head}} # {{eo-form of|graf|oj}}"
397421
wikitext
text/x-wiki
==အေက်သပရေန်တဝ်==
===နာမ်===
{{eo-head}}
# {{eo-form of|graf|oj}}
6l0itu3qq6w2de5pdsqa3lrg97if24c
grafojn
0
296226
397422
2026-06-22T17:08:08Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အေက်သပရေန်တဝ်== ===နာမ်=== {{eo-head}} # {{eo-form of|graf|ojn}}"
397422
wikitext
text/x-wiki
==အေက်သပရေန်တဝ်==
===နာမ်===
{{eo-head}}
# {{eo-form of|graf|ojn}}
frpr113oty5mprix9bh887taj2tla4s
grafi
0
296227
397423
2026-06-22T17:09:44Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{also|grāfi|-grafi}} ==အဳတလဳ== ===ဗွဟ်ရမ္သာၚ်=== {{it-pr|gràfi}} ===နာမ်=== {{head|it|noun form|g=m}} # {{plural of|it|grafo}} ===နာမ်=== {{head|it|noun form|g=m}} # {{plural of|it|grafio}}"
397423
wikitext
text/x-wiki
{{also|grāfi|-grafi}}
==အဳတလဳ==
===ဗွဟ်ရမ္သာၚ်===
{{it-pr|gràfi}}
===နာမ်===
{{head|it|noun form|g=m}}
# {{plural of|it|grafo}}
===နာမ်===
{{head|it|noun form|g=m}}
# {{plural of|it|grafio}}
p38cmdf45bgyfjk0hpy37artr2q2rq1
ကဏ္ဍ:ကာရန်:အဳတခ်လဳ/afi
14
296228
397424
2026-06-22T17:11:25Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » :ကဏ္ဍ:ကာ..."
397424
wikitext
text/x-wiki
[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » [[:ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|ကာရန်ဂမၠိုၚ်]] » -afi
:စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]]မနွံကာရန် [[ကာရန်:အဳတခ်လဳ/afi|-afi]] ဂမၠိုၚ်။
[[ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|afi]]
hui2uqef9bcivd5u6knhkfmofcf8rlw
ကာရန်:အဳတခ်လဳ/afi
106
296229
397425
2026-06-22T17:13:01Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{rhymes nav|it|a|fi}} ==ဗွဟ်ရမ္သာၚ်== * {{IPA|it|/ˈa.fi/}} * {{hyphenation|it|-à|fi}} ==ကာရန်ဂမၠိုၚ်== ===ဝဏ္ဏမွဲ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rhyme-top}} * {{l|en|grafi}} * {{l|en|pafi}} * {{l|en|sbafi}} * {{l|en|scafi}} {{rhyme-bottom}} ===ဝဏ္ဏၜါ=== <!--Note: words in this section m..."
397425
wikitext
text/x-wiki
{{rhymes nav|it|a|fi}}
==ဗွဟ်ရမ္သာၚ်==
* {{IPA|it|/ˈa.fi/}}
* {{hyphenation|it|-à|fi}}
==ကာရန်ဂမၠိုၚ်==
===ဝဏ္ဏမွဲ===
<!--Note: words in this section must be stressed on the PENULTIMATE syllable.-->
{{rhyme-top}}
* {{l|en|grafi}}
* {{l|en|pafi}}
* {{l|en|sbafi}}
* {{l|en|scafi}}
{{rhyme-bottom}}
===ဝဏ္ဏၜါ===
<!--Note: words in this section must be stressed on the PENULTIMATE syllable.-->
{{rhyme-top}}
* {{l|en|aliscafi}}
* {{l|en|batiscafi}}
* {{l|en|cenotafi}}
* {{l|en|motoscafi}}
{{rhyme-bottom}}
0muc70isdochzsgxll4k4bilv2k50w2
grafio
0
296230
397426
2026-06-22T17:19:21Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အဳတလဳ== ===နိရုတ်=== {{bor+|it|la|graphium}}၊ နူကဵုဝေါဟာ {{der|it|grc|γραφίον}} ===ဗွဟ်ရမ္သာၚ်=== {{it-pr|gràfio}} ===နာမ်=== {{it-noun|m}} # {{lb|it|literary}} တၞိၚ်ပေါဲစက်။ ==ဂျာမာန်သၠုၚ်တြေံ== ===ပွံၚ်နဲတၞဟ်=== * {{alter|goh|grāfo|grāvo|grāvio|..."
397426
wikitext
text/x-wiki
==အဳတလဳ==
===နိရုတ်===
{{bor+|it|la|graphium}}၊ နူကဵုဝေါဟာ {{der|it|grc|γραφίον}}
===ဗွဟ်ရမ္သာၚ်===
{{it-pr|gràfio}}
===နာမ်===
{{it-noun|m}}
# {{lb|it|literary}} တၞိၚ်ပေါဲစက်။
==ဂျာမာန်သၠုၚ်တြေံ==
===ပွံၚ်နဲတၞဟ်===
* {{alter|goh|grāfo|grāvo|grāvio|grāphio|krāvio|grābo|crābo}}
===နိရုတ်===
ဝေါဟာကၠုၚ်နူ {{inh|goh|gmw-pro|*garāfijō}}
===နာမ်===
{{goh-noun|m|head=grāfio}}
# တၠအဝဵု။
===မဒုၚ်လွဳစ===
* {{desc|gmh|grâve}}
** {{desc|de|Graf}}
==သ္ပုၚ်==
===ကြိယာ===
{{head|es|verb form}}
# {{es-verb form of|grafiar}}
gudlsf4vf2x9857zzva0c3nkkq6afg8
397442
397426
2026-06-23T07:47:50Z
Hiyuune
1535
397442
wikitext
text/x-wiki
==အဳတလဳ==
===နိရုတ်===
{{bor+|it|la|graphium}}၊ နူကဵုဝေါဟာ {{der|it|grc|γραφίον}}
===ဗွဟ်ရမ္သာၚ်===
{{it-pr|gràfio}}
===နာမ်===
{{it-noun|m}}
# {{lb|it|literary}} တၞိၚ်ပေါဲစက်။
==ဂျာမာန်သၠုၚ်တြေံ==
===ပွံၚ်နဲတၞဟ်===
* {{alter|goh|grāfo|grāvo|grāvio|grāphio|krāvio|grābo|crābo}}
===နိရုတ်===
ဝေါဟာကၠုၚ်နူ {{inh|goh|gmw-pro|*garāfijō}}
===နာမ်===
{{goh-noun|m|head=grāfio}}
# တၠအဝဵု။
===မဒုၚ်လွဳစ===
* {{desc|gmh|grâve}}
** {{desc|de|Graf}}
==သ္ပုၚ်==
===ကြိယာ===
{{head|es|verb form}}
# {{es-verb form of|grafiar}}
s7i5oqivoni6mnb1lwx57ym8mux5b51
ကဏ္ဍ:ကာရန်:အဳတခ်လဳ/afjo
14
296231
397427
2026-06-22T17:20:58Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » :ကဏ္ဍ:ကာ..."
397427
wikitext
text/x-wiki
[[:ကဏ္ဍ:ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်|ဒၞာဲလုပ်အဝေါၚ်ကဵုပၟိက်]] » [[:ကဏ္ဍ:အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်|အရေဝ်ဘာသာအိုတ်သီုဂမၠိုၚ်]] » [[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]] » [[:ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|ကာရန်ဂမၠိုၚ်]] » -afjo
:စရၚ်မဆေၚ်စပ်ကဵုဝေါဟာ[[:ကဏ္ဍ:ဘာသာအဳတခ်လဳ|အဳတခ်လဳ]]မနွံကာရန် [[ကာရန်:အဳတခ်လဳ/afjo|-afjo]] ဂမၠိုၚ်။
[[ကဏ္ဍ:ကာရန်:အဳတခ်လဳ|afjo]]
kjubtz3kwmtbntwtg0k8454q7ov6ik3
ကာရန်:အဳတခ်လဳ/afjo
106
296232
397428
2026-06-22T17:23:58Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{rhymes nav|it|a|fjo}} ==ဗွဟ်ရမ္သာၚ်== * {{IPA|it|/ˈa.fjo/}} * {{hyphenation|it|-à|fio}} ==ကာရန်ဂမၠိုၚ်== ===ဝဏ္ဏမွဲ=== <!--Note: words in this section must be stressed on the PENULTIMATE syllable.--> {{rhyme-top}} * {{l|en|grafio}} * {{l|en|pafio}} * {{l|en|scafio}} {{rhyme-bottom}} ===ဝဏ္ဏၜါ=== <!--Note: words in this section must be stre..."
397428
wikitext
text/x-wiki
{{rhymes nav|it|a|fjo}}
==ဗွဟ်ရမ္သာၚ်==
* {{IPA|it|/ˈa.fjo/}}
* {{hyphenation|it|-à|fio}}
==ကာရန်ဂမၠိုၚ်==
===ဝဏ္ဏမွဲ===
<!--Note: words in this section must be stressed on the PENULTIMATE syllable.-->
{{rhyme-top}}
* {{l|en|grafio}}
* {{l|en|pafio}}
* {{l|en|scafio}}
{{rhyme-bottom}}
===ဝဏ္ဏၜါ===
<!--Note: words in this section must be stressed on the PENULTIMATE syllable.-->
{{rhyme-top}}
* {{l|en|cenotafio}}
{{rhyme-bottom}}
eorw9shu2tkhe2wqgddrhrino2kl5ra
ထာမ်ပလိက်:rhyme-top/documentation
10
296233
397430
2026-06-22T17:30:04Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} ==See also== * {{temp|rhyme-bottom}} <includeonly> [[ကဏ္ဍ:ထာမ်ပလိက်မုက်လိက်တိုၚ်ကရေက်ဂမၠိုၚ်]] [[ကဏ္ဍ:ထာမ်ပလိက်ကာရန်ဂမၠိုၚ်]] </includeonly>"
397430
wikitext
text/x-wiki
{{documentation subpage}}
==See also==
* {{temp|rhyme-bottom}}
<includeonly>
[[ကဏ္ဍ:ထာမ်ပလိက်မုက်လိက်တိုၚ်ကရေက်ဂမၠိုၚ်]]
[[ကဏ္ဍ:ထာမ်ပလိက်ကာရန်ဂမၠိုၚ်]]
</includeonly>
4k88ienhv3f50plidxfshe718ku0kb1
ထာမ်ပလိက်:no deprecated lang param usage/documentation
10
296234
397432
2026-06-22T17:35:18Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "{{documentation subpage}} This template should be used in conjunction with templates that accept the {{para|lang}} parameter as a deprecated alternative to {{para|1}} and have [[:Category:Successfully deprecated templates|successfully eliminated]] all such usages. Use is as follows: <pre>{{ {{#if:{{{lang|}}}|deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<TEMPLATE-CALL>}}</pre> If the..."
397432
wikitext
text/x-wiki
{{documentation subpage}}
This template should be used in conjunction with templates that accept the {{para|lang}} parameter as a deprecated alternative to {{para|1}} and have [[:Category:Successfully deprecated templates|successfully eliminated]] all such usages. Use is as follows:
<pre>{{ {{#if:{{{lang|}}}|deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<TEMPLATE-CALL>}}</pre>
If the <code>lang</code> parameter is in usage, this formats the output of the template call with the <code>.deprecated</code> CSS class (which by default displays the output in olive green), precedes it with the text "deprecated use of {{para|lang}} parameter", adds a tooltip "This template call uses the deprecated 'lang' parameter. Use '1' instead." and categorizes the page in [[:Category:Pages using deprecated templates]]. Otherwise, the output is simply returned as normal.
''Note: the space between the two sets of <code><nowiki>{{</nowiki></code> at the beginning is mandatory, or else the parser will interpret it as <code><nowiki>{ {{{</nowiki></code>, which will not work.''
==Parameters==
* {{para|1}}: The template call.
* {{para|lang}}: Pass-through of the {{para|lang}} parameter.
==See also==
* {{tl|deprecated code}}
* {{tl|deprecated lang param usage}}
<includeonly>
[[ကဏ္ဍ:ထာမ်ပလိက်မထိၚ်ဒက်လဝ်ဂမၠိုၚ်]]
[[ကဏ္ဍ:ထာမ်ပလိက်မေတဂမၠိုၚ်]]
</includeonly>
bp26csgqn7slsghy8cwuc1vn65zar62
ထာမ်ပလိက်:check deprecated lang param usage
10
296235
397434
2026-06-22T17:36:13Z
咽頭べさ
33
咽頭べさ ပြံင်ပဆုဲလဝ် မုက်လိက် [[ထာမ်ပလိက်:check deprecated lang param usage]] ဇရေင် [[ထာမ်ပလိက်:deprecated lang param usage]]
397434
wikitext
text/x-wiki
#REDIRECT [[ထာမ်ပလိက်:deprecated lang param usage]]
ao8xgddq0ir4tza5qiq7up5vzzg0asc
ကဏ္ဍ:မအရေဝ်လိက်ပတ်အဳတခ်လဳဂမၠိုၚ်
14
296236
397436
2026-06-22T17:44:31Z
咽頭べさ
33
ခၞံကၠောန်လဝ် မုက်လိက် နကု "[[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]]"
397436
wikitext
text/x-wiki
[[ကဏ္ဍ:ဘာသာအဳတခ်လဳ]]
gbeqdk32838i2079b24yzbewkbbcs22
ညးလွပ်:配合比全额更好(说说而已)
2
296237
397440
2026-06-23T04:30:56Z
配合比全额更好(说说而已)
2376
ခၞံကၠောန်လဝ် မုက်လိက် နကု "မင်္ဂလာပါ!ငါ 配合比全额更好(说说而已)။"
397440
wikitext
text/x-wiki
မင်္ဂလာပါ!ငါ 配合比全额更好(说说而已)။
n1hszpkf0q58qa392zjg2mu7ww1uuwr
cassavi
0
296238
397441
2026-06-23T07:46:56Z
Hiyuune
1535
ခၞံကၠောန်လဝ် မုက်လိက် နကု "==အဳတလဳ== ===ကြိယာ=== {{head|it|verb form}} # {{inflection of|it|cassare||2|s|impf|indc}} ===ဝေါဟာလွာ=== * {{anagrams|it|a=aacissv|cavassi|vacassi}} ==လပ်တေန်== ===ကြိယာ=== {{head|la|verb form|head=cassāvī}} # {{inflection of|la|cassō||1|s|perf|act|ind}}"
397441
wikitext
text/x-wiki
==အဳတလဳ==
===ကြိယာ===
{{head|it|verb form}}
# {{inflection of|it|cassare||2|s|impf|indc}}
===ဝေါဟာလွာ===
* {{anagrams|it|a=aacissv|cavassi|vacassi}}
==လပ်တေန်==
===ကြိယာ===
{{head|la|verb form|head=cassāvī}}
# {{inflection of|la|cassō||1|s|perf|act|ind}}
kisy3p8ympxid3zmtj7neck1dseuv3i