ویکیفەرھەنگ ckbwiktionary https://ckb.wiktionary.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C%D9%81%DB%95%D8%B1%DA%BE%DB%95%D9%86%DA%AF:%D8%AF%DB%95%D8%B3%D8%AA%D9%BE%DB%8E%DA%A9 MediaWiki 1.47.0-wmf.15 case-sensitive میدیا تایبەت وتووێژ بەکارھێنەر لێدوانی بەکارھێنەر ویکیفەرھەنگ لێدوانی ویکیفەرھەنگ پەڕگە وتووێژی پەڕگە میدیاویکی وتووێژی میدیاویکی داڕێژە وتووێژی داڕێژە یارمەتی وتووێژی یارمەتی پۆل وتووێژی پۆل TimedText TimedText talk مۆدیوول لێدوانی مۆدیوول Event Event talk مۆدیوول:category tree 828 19 36741 35048 2026-08-12T13:45:06Z Ghybu 12 Extraction of category titles adapted for Sorani names 36741 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." -- 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 -- 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 end local function show_error(text) return require("Module:message box").maintenance( "red", "[[File:Ambox warning pn.svg|50px]]", "ئەم پۆلە لە داری پۆلی ویکیفەرھەنگدا پێناسە نەکراوە.", 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: left; clear: both; margin: 0 1em .5em 0; 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=\"دوایین دەستکاری و گۆڕانکارییەکانی تری پەڕەکانی نێو «%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) if lang then -- Proto-Norse (gmq-pro) is the probably 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 .. "Reconstruction" elseif lang:hasType("appendix-constructed") then namespace = namespace .. "Appendix" end end elseif info.label:match("templates") then namespace = namespace .. "داڕێژە" elseif info.label:match("modules") then namespace = namespace .. "مۆدیوول" elseif info.label:match("^Wiktionary") or info.label:match("^Pages") then namespace = "" end return ([=[ {| id="newest-and-oldest-pages" class="wikitable mw-collapsible mw-collapsed" style="float: left; clear: both; margin: 0 1em .5em 0;" ! نوێترین و کۆنترین پەڕەکان&nbsp; |- | id="recent-additions" style="font-size:0.9em;" | '''نوێترین پەڕەکان بەپێی کۆتا [[mw:Manual:Categorylinks table#cl_timestamp|نوێکردنەوەی بەستەری پۆلەکە]] ڕیز کراون:''' %s |- | id="oldest-pages" style="font-size:0.9em;" | '''کۆنترین پەڕەکان بەپێی کۆتا دەستکاری ڕیز کراون:''' %s |}]=]):format( current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=categoryadd order=descending]=] ):format(current_title.text, namespace) ), current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=lastedit order=ascending]=] ):format(current_title.text, namespace) ) ) end -- Show navigational "breadcrumbs" at the top of the page. local function show_breadcrumbs(current) local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. while current do local category, display_name, nocap if type(current) == "string" then category = current display_name = current:gsub("^پۆل:", "") else if not current.getCategoryName then error("Internal error: Bad format in breadcrumb chain structure, probably a misformatted value for `parents`: " .. mw.dumpObject(current)) end category = "پۆل:" .. current:getCategoryName() display_name, nocap = current:getBreadcrumbName() end if not nocap then display_name = mw.getContentLanguage():ucfirst(display_name) end insert(steps, 1, ("[[:%s|%s]]"):format(category, display_name)) -- Move up the "chain" by one level. if type(current) == "string" then current = nil else current = current:getParents() end if current then current = current[1].name end end local templateStyles = require("Module:TemplateStyles")(category_tree_styles_css) local ol = mw.html.create("ol") for i, step in ipairs(steps) do local li = mw.html.create("li") if i ~= 1 then local span = mw.html.create("span") :attr("aria-hidden", "true") :addClass("ts-categoryBreadcrumbs-separator") :wikitext(" » ") li:node(span) end li:wikitext(step) ol:node(li) end return templateStyles .. tostring(mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-categoryBreadcrumbs") :node(ol)) end local function show_also(current) local also = current._info.also if also and #also > 0 then return ('<div style="margin-top:-1em;margin-bottom:1.5em">%s</div>'):format(require("Module:also").main(also)) end return nil end -- Show a short description text for the category. local function show_description(current) return current.getDescription and current:getDescription() or nil end local function show_appendix(current) local appendix = current.getAppendix and current:getAppendix() return appendix and ("For more information, see [[%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 == "template" 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, "[[پۆل:Categories calling Template:auto cat]]") 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, "[[پۆل:Huge categories]]") end -- Are the parameters valid? if not current then insert(categories, "[[پۆل:ئەو پۆلانەی کە لە داری پۆلەکەدا پێناسە نەکراون]]") insert(categories, totalPages == 0 and "[[پۆل:پۆلە واڵاکان]]" or nil) insert(display, show_error( "Double-check the category name for typos. <br>" .. "[[Special:Search/Category: " .. 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 add a new category to Wiktionary's category tree, please consult " .. current_frame:expandTemplate{title = "section link", args = { "Help:Category#How_to_create_a_category", }} .. ".")) -- 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, "[[پۆل:Categories with incorrect names]]") 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: left;\">") 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). 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("^Thesaurus:(%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 [[:Category:New Zealand English]] or [[:Category: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 label, langname = title:match("^(.-) بە (.+)$") if not (label and langname) then return end local lang = require("Module:languages").getByCanonicalName(langname) if not lang then return end --local lang, label = export.split_lang_label(title) --if not lang then -- return --end local baseLabel, script = label:match("(.+) in (.-) script$") if script and baseLabel ~= "terms" 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("(.+) by language$") if label then -- 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 "(ئەم داڕێژە پێویستە لەسەر پەڕەکانی بۆشاییناوی [[:en:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.)" elseif namespace ~= 14 then -- Category error("ئەم داڕێژە/مۆدیوولە دەکرێ تەنیا لەسەر پەڕەکانی بۆشاییناوی [[mw:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.") 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 du1gorua0pozjtrvjhdwcor9nn5b3hh 36743 36741 2026-08-12T17:19:00Z Ghybu 12 36743 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." -- 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 -- 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 local label, langname = title_text:match("^(.-) بە (.+)$") local lang = getByCanonicalName(langname) if lang then return lang, label end return nil, title_text end local function show_error(text) return require("Module:message box").maintenance( "red", "[[File:Ambox warning pn.svg|50px]]", "ئەم پۆلە لە داری پۆلی ویکیفەرھەنگدا پێناسە نەکراوە.", 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: left; clear: both; margin: 0 1em .5em 0; 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=\"دوایین دەستکاری و گۆڕانکارییەکانی تری پەڕەکانی نێو «%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) if lang then -- Proto-Norse (gmq-pro) is the probably 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 .. "Reconstruction" elseif lang:hasType("appendix-constructed") then namespace = namespace .. "Appendix" end end elseif info.label:match("templates") then namespace = namespace .. "داڕێژە" elseif info.label:match("modules") then namespace = namespace .. "مۆدیوول" elseif info.label:match("^Wiktionary") or info.label:match("^Pages") then namespace = "" end return ([=[ {| id="newest-and-oldest-pages" class="wikitable mw-collapsible mw-collapsed" style="float: left; clear: both; margin: 0 1em .5em 0;" ! نوێترین و کۆنترین پەڕەکان&nbsp; |- | id="recent-additions" style="font-size:0.9em;" | '''نوێترین پەڕەکان بەپێی کۆتا [[mw:Manual:Categorylinks table#cl_timestamp|نوێکردنەوەی بەستەری پۆلەکە]] ڕیز کراون:''' %s |- | id="oldest-pages" style="font-size:0.9em;" | '''کۆنترین پەڕەکان بەپێی کۆتا دەستکاری ڕیز کراون:''' %s |}]=]):format( current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=categoryadd order=descending]=] ):format(current_title.text, namespace) ), current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=lastedit order=ascending]=] ):format(current_title.text, namespace) ) ) end -- Show navigational "breadcrumbs" at the top of the page. local function show_breadcrumbs(current) local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. while current do local category, display_name, nocap if type(current) == "string" then category = current display_name = current:gsub("^پۆل:", "") else if not current.getCategoryName then error("Internal error: Bad format in breadcrumb chain structure, probably a misformatted value for `parents`: " .. mw.dumpObject(current)) end category = "پۆل:" .. current:getCategoryName() display_name, nocap = current:getBreadcrumbName() end if not nocap then display_name = mw.getContentLanguage():ucfirst(display_name) end insert(steps, 1, ("[[:%s|%s]]"):format(category, display_name)) -- Move up the "chain" by one level. if type(current) == "string" then current = nil else current = current:getParents() end if current then current = current[1].name end end local templateStyles = require("Module:TemplateStyles")(category_tree_styles_css) local ol = mw.html.create("ol") for i, step in ipairs(steps) do local li = mw.html.create("li") if i ~= 1 then local span = mw.html.create("span") :attr("aria-hidden", "true") :addClass("ts-categoryBreadcrumbs-separator") :wikitext(" » ") li:node(span) end li:wikitext(step) ol:node(li) end return templateStyles .. tostring(mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-categoryBreadcrumbs") :node(ol)) end local function show_also(current) local also = current._info.also if also and #also > 0 then return ('<div style="margin-top:-1em;margin-bottom:1.5em">%s</div>'):format(require("Module:also").main(also)) end return nil end -- Show a short description text for the category. local function show_description(current) return current.getDescription and current:getDescription() or nil end local function show_appendix(current) local appendix = current.getAppendix and current:getAppendix() return appendix and ("For more information, see [[%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 == "template" 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, "[[پۆل:Categories calling Template:auto cat]]") 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, "[[پۆل:Huge categories]]") end -- Are the parameters valid? if not current then insert(categories, "[[پۆل:ئەو پۆلانەی کە لە داری پۆلەکەدا پێناسە نەکراون]]") insert(categories, totalPages == 0 and "[[پۆل:پۆلە واڵاکان]]" or nil) insert(display, show_error( "Double-check the category name for typos. <br>" .. "[[Special:Search/Category: " .. 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 add a new category to Wiktionary's category tree, please consult " .. current_frame:expandTemplate{title = "section link", args = { "Help:Category#How_to_create_a_category", }} .. ".")) -- 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, "[[پۆل:Categories with incorrect names]]") 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: left;\">") 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). 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("^Thesaurus:(%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 [[:Category:New Zealand English]] or [[:Category: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("(.+) in (.-) script$") if script and baseLabel ~= "terms" 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("(.+) by language$") if label then -- 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 "(ئەم داڕێژە پێویستە لەسەر پەڕەکانی بۆشاییناوی [[:en:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.)" elseif namespace ~= 14 then -- Category error("ئەم داڕێژە/مۆدیوولە دەکرێ تەنیا لەسەر پەڕەکانی بۆشاییناوی [[mw:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.") 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 7itjbcb9xfzv0abwbqehgdph5ovc2rn 36784 36743 2026-08-13T00:09:27Z Ghybu 12 It doesn't work. 36784 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." -- 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 -- 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 local label, langname = title_text:match("^(.-) بە (.+)$") local lang = getByCanonicalName(langname) if lang then return lang, label end return nil, title_text end local function show_error(text) return require("Module:message box").maintenance( "red", "[[File:Ambox warning pn.svg|50px]]", "ئەم پۆلە لە داری پۆلی ویکیفەرھەنگدا پێناسە نەکراوە.", 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: left; clear: both; margin: 0 1em .5em 0; 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=\"دوایین دەستکاری و گۆڕانکارییەکانی تری پەڕەکانی نێو «%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) if lang then -- Proto-Norse (gmq-pro) is the probably 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 .. "Reconstruction" elseif lang:hasType("appendix-constructed") then namespace = namespace .. "Appendix" end end elseif info.label:match("templates") then namespace = namespace .. "داڕێژە" elseif info.label:match("modules") then namespace = namespace .. "مۆدیوول" elseif info.label:match("^Wiktionary") or info.label:match("^Pages") then namespace = "" end return ([=[ {| id="newest-and-oldest-pages" class="wikitable mw-collapsible mw-collapsed" style="float: left; clear: both; margin: 0 1em .5em 0;" ! نوێترین و کۆنترین پەڕەکان&nbsp; |- | id="recent-additions" style="font-size:0.9em;" | '''نوێترین پەڕەکان بەپێی کۆتا [[mw:Manual:Categorylinks table#cl_timestamp|نوێکردنەوەی بەستەری پۆلەکە]] ڕیز کراون:''' %s |- | id="oldest-pages" style="font-size:0.9em;" | '''کۆنترین پەڕەکان بەپێی کۆتا دەستکاری ڕیز کراون:''' %s |}]=]):format( current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=categoryadd order=descending]=] ):format(current_title.text, namespace) ), current_frame:extensionTag( "DynamicPageList", ([=[ category=%s %s count=10 mode=ordered ordermethod=lastedit order=ascending]=] ):format(current_title.text, namespace) ) ) end -- Show navigational "breadcrumbs" at the top of the page. local function show_breadcrumbs(current) local steps = {} -- Start at the current label and move our way up the "chain" from child to parent, until we can't go further. while current do local category, display_name, nocap if type(current) == "string" then category = current display_name = current:gsub("^پۆل:", "") else if not current.getCategoryName then error("Internal error: Bad format in breadcrumb chain structure, probably a misformatted value for `parents`: " .. mw.dumpObject(current)) end category = "پۆل:" .. current:getCategoryName() display_name, nocap = current:getBreadcrumbName() end if not nocap then display_name = mw.getContentLanguage():ucfirst(display_name) end insert(steps, 1, ("[[:%s|%s]]"):format(category, display_name)) -- Move up the "chain" by one level. if type(current) == "string" then current = nil else current = current:getParents() end if current then current = current[1].name end end local templateStyles = require("Module:TemplateStyles")(category_tree_styles_css) local ol = mw.html.create("ol") for i, step in ipairs(steps) do local li = mw.html.create("li") if i ~= 1 then local span = mw.html.create("span") :attr("aria-hidden", "true") :addClass("ts-categoryBreadcrumbs-separator") :wikitext(" » ") li:node(span) end li:wikitext(step) ol:node(li) end return templateStyles .. tostring(mw.html.create("div") :attr("role", "navigation") :attr("aria-label", "Breadcrumb") :addClass("ts-categoryBreadcrumbs") :node(ol)) end local function show_also(current) local also = current._info.also if also and #also > 0 then return ('<div style="margin-top:-1em;margin-bottom:1.5em">%s</div>'):format(require("Module:also").main(also)) end return nil end -- Show a short description text for the category. local function show_description(current) return current.getDescription and current:getDescription() or nil end local function show_appendix(current) local appendix = current.getAppendix and current:getAppendix() return appendix and ("For more information, see [[%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 == "template" 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, "[[پۆل:Categories calling Template:auto cat]]") 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, "[[پۆل:Huge categories]]") end -- Are the parameters valid? if not current then insert(categories, "[[پۆل:ئەو پۆلانەی کە لە داری پۆلەکەدا پێناسە نەکراون]]") insert(categories, totalPages == 0 and "[[پۆل:پۆلە واڵاکان]]" or nil) insert(display, show_error( "Double-check the category name for typos. <br>" .. "[[Special:Search/Category: " .. 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 add a new category to Wiktionary's category tree, please consult " .. current_frame:expandTemplate{title = "section link", args = { "Help:Category#How_to_create_a_category", }} .. ".")) -- 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, "[[پۆل:Categories with incorrect names]]") 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: left;\">") 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). --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("^Thesaurus:(%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 [[:Category:New Zealand English]] or [[:Category: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("(.+) in (.-) script$") if script and baseLabel ~= "terms" 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("(.+) by language$") if label then -- 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 "(ئەم داڕێژە پێویستە لەسەر پەڕەکانی بۆشاییناوی [[:en:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.)" elseif namespace ~= 14 then -- Category error("ئەم داڕێژە/مۆدیوولە دەکرێ تەنیا لەسەر پەڕەکانی بۆشاییناوی [[mw:Help:Namespaces#Category|پۆل:]] بەکاربھێنرێت.") 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 0lncvn4qup3fuhj4huf9jspmvfh9hj8 مۆدیوول:category tree/poscatboiler 828 21 36744 35481 2026-08-12T20:19:00Z Ghybu 12 Extraction of category titles adapted for Sorani names 36744 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) 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) 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) 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 = "ئەمە پۆلێکی گشتگیرە. ھیچ سەروشەیەکی فەرھەنگی تێدا نییە، بەڵکوو تەنیا پۆلەکانی تری تایبەت بە زمانی تێدایە، کە ئەوانیش چەمکە پەیوەندیدارەکان بەو زمانەیان تێدایە." 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_base else ret = self._data.umbrella and (self._data.umbrella.breadcrumb or self._data.umbrella.breadcrumb_and_first_sort_base) 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 .. " in " .. self._sc:getDisplayForm() 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 "en" 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._info.label .. " بە " .. self._lang:getCanonicalName() if self._sc then ret = ret .. " in " .. self._sc:getDisplayForm() 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 .. " by language" 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", "Category:" .. 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}}} %(", "specific languages (") :gsub("{{{langname}}}([.,])", "specific languages%1") :gsub("{{{langname}}} ", "specific-language ") :gsub("{{{langdisp}}}", "specific languages") :gsub("{{{langlink}}}", "specific languages") 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_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_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("^Category:") then -- It's a non-poscatboiler category name. sortkey = sortkey or is_children and name:gsub("^Category:", "") 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 = "terms in " .. self._sc:getCanonicalName() .. " script"} 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_base if is_umbrella then parents = self._data.umbrella and self._data.umbrella.parents or self._data.umbrella_parents fallback_sort_base = self._data.umbrella and self._data.umbrella.breadcrumb_and_first_sort_base or nil else parents = self._data.parents fallback_sort_base = self._data.breadcrumb_and_first_sort_base end ret = self:canonicalize_parents_children(parents, nil, 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, lang:getCanonicalName() .. " " .. label) 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, lang, sc = self._data.catfix, self._data.catfix_sc if langcode then langcode = self:substitute_template_specs(langcode) lang = get_lang(langcode) 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 return lang, sc elseif not self._data.umbrella then return end -- umbrella local langcode, sccode, lang, sc = self._data.umbrella.catfix, self._data.umbrella.catfix_sc if langcode then langcode = self:substitute_template_specs(langcode) lang = get_lang(langcode) end if sccode then sccode = self:substitute_template_specs(sccode) sc = get_script(sccode) 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 2en0fruvknv7e2aj4r2968jkh2854zh مۆدیوول:en-headword 828 29 36793 34159 2026-08-13T01:20:42Z Ghybu 12 soranî 36793 Scribunto text/plain local export = {} local pos_functions = {} local force_cat = false -- for testing; if true, categories appear in non-mainspace pages local require = require local require_when_needed = require("Module:require when needed") local en_utilities_module = "Module:en-utilities" local headword_utilities_module = "Module:headword utilities" local headword_module = "Module:headword" local inflection_utilities_module = "Module:inflection utilities" local parse_utilities_module = "Module:parse utilities" local JSON_module = "Module:JSON" local links_module = "Module:links" local parameters_module = "Module:parameters" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local iut = require_when_needed(inflection_utilities_module) local put = require_when_needed(parse_utilities_module) local add_links_to_multiword_term = require_when_needed(headword_utilities_module, "add_links_to_multiword_term") local add_suffix = require_when_needed(en_utilities_module, "add_suffix") local apply_link_modifiers = require_when_needed(headword_utilities_module, "apply_link_modifiers") local concat = table.concat local format_categories = require_when_needed(utilities_module, "format_categories") local full_headword = require_when_needed(headword_module, "full_headword") local get_link_page = require_when_needed(links_module, "get_link_page") local insert = table.insert local is_regular_plural = require_when_needed(en_utilities_module, "is_regular_plural") local list_to_set = require_when_needed(table_module, "listToSet") local remove = table.remove local remove_links = require_when_needed(links_module, "remove_links") local process_params = require_when_needed(parameters_module, "process") local singularize = require_when_needed(en_utilities_module, "singularize") local split = require_when_needed(string_utilities_module, "split") local toJSON = require_when_needed(JSON_module, "toJSON") local toNFD = mw.ustring.toNFD local ulen = require_when_needed(string_utilities_module, "len") local ulower = require_when_needed(string_utilities_module, "lower") local umatch = require_when_needed(string_utilities_module, "match") local lang = require("Module:languages").getByCode("en") local langname = lang:getCanonicalName() local function glossary_link(entry, text) text = text or entry return "[[Appendix:Glossary#" .. entry .. "|" .. text .. "]]" end local function track(page) require("Module:debug/track")("en-headword/" .. page) return true end ------------------------------------------- UTILITY FUNCTIONS ------------------------------------------ -- These functions are used directly in the <> format as well as in the utility functions #2 below. local function compute_double_last_cons_stem(term) local last_cons = term:match("([bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ])$") if not last_cons then error("Verb stem '" .. term .. "' must end in a consonant to use ++") end return term .. last_cons end local function compute_plusplus_s_form(term, default_s_form) if term:find("[sz]$") then -- regas -> regasses, derez -> derezzes return compute_double_last_cons_stem(term) .. "es" else return default_s_form end end -- The main entry point. -- This is the only function that can be invoked from a template. function export.show(frame) local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") local boolean = {type = "boolean"} local params = { ["head"] = {list = true}, ["id"] = true, ["json"] = boolean, ["sort"] = true, ["splithyph"] = boolean, ["nosplithyph"] = boolean, ["hyphspace"] = boolean, ["nolink"] = boolean, ["nolinkhead"] = {type = "boolean", alias_of = "nolink"}, ["nosuffix"] = boolean, ["nomultiwordcat"] = boolean, ["pagename"] = true, -- for testing } local pos_data = pos_functions[poscat] if pos_data then for key, val in pairs(pos_data.params) do params[key] = val end end local args = process_params(frame:getParent().args, params, nil, "en-headword", "show") local pagename = args.pagename or mw.loadData("Module:headword/data").pagename -- Accounts for unsupported titles. local user_specified_heads = args.head local heads = user_specified_heads local autohead if args.nolink or not pagename:find("[ '%-]") then autohead = pagename else local en_no_split_apostrophe_words = list_to_set{ "one's", "someone's", "he's", "she's", "it's", } local en_include_hyphen_prefixes = list_to_set{ -- We don't include things that are also words even though they are often (perhaps mostly) prefixes, e.g. -- "be", "counter", "cross", "extra", "half", "mid", "over", "pan", "under". "acro", "acousto", "Afro", "agro", "anarcho", "angio", "Anglo", "ante", "anti", "arch", "auto", "bi", "bio", "cis", "co", "cryo", "crypto", "de", "demi", "eco", "electro", "Euro", "ex", "Greco", "hemi", "hydro", "hyper", "hypo", "infra", "Indo", "inter", "intra", "Judeo", "macro", "meta", "micro", "mini", "multi", "neo", "neuro", "non", "para", "peri", "post", "pre", "pro", "proto", "pseudo", "re", "semi", "sub", "super", "trans", "un", "vice", } local function is_english(term) local title = mw.title.new(term) if title and title.exists then local content = title:getContent() if content and content:find("==English==\n") then return true end end return false end local function en_split_hyphen_when_space(word) if not word:find("-", nil, true) then return nil end if args.hyphspace then return "[[" .. word:gsub("%-+", " ") .. "|" .. word .. "]]" end if args.nosplithyph then return "[[" .. word .. "]]" end if not args.splithyph then local space_word = word:gsub("%-+", " ") if is_english(space_word) then return "[[" .. space_word .. "|" .. word .. "]]" end if is_english(word) then return "[[" .. word .. "]]" end end return nil end local function en_split_apostrophe(word) local base = word:match("^(.*)'s$") if base then return "[[" .. base .. "]][[-'s|'s]]" end base = word:match("^(.*)'$") if base then if base:find("s$") then local sg = singularize(base) if is_english(sg) then return "[[" .. sg .. "|" .. base .. "]][[-'|']]" end end return "[[" .. base .. "]][[-'|']]" end return "[[" .. word .. "]]" end autohead = add_links_to_multiword_term(pagename, { split_hyphen_when_space = en_split_hyphen_when_space, split_apostrophe = en_split_apostrophe, no_split_apostrophe_words = en_no_split_apostrophe_words, include_hyphen_prefixes = en_include_hyphen_prefixes, }) end if #heads == 0 then heads = {autohead} else for i, head in ipairs(heads) do if head:find("^~") then head = apply_link_modifiers(autohead, head:sub(2)) heads[i] = head end if head == autohead then track("redundant-head") end end end local data = { lang = lang, pos_category = poscat, categories = {}, heads = heads, user_specified_heads = user_specified_heads, no_redundant_head_cat = #user_specified_heads == 0, inflections = {}, nomultiwordcat = args.nomultiwordcat, sort_key = args.sort, pagename = args.pagename, -- This is always set, and in the case of unsupported titles, it's the displayed version (e.g. 'C|N>K' instead of -- 'Unsupported titles/C through N to K'). displayed_pagename = pagename, id = args.id, force_cat_output = force_cat, } local is_suffix = false if not args.nosuffix and pagename:find("^%-") and not pagename:find("^%-%-") and poscat ~= "suffix forms" then is_suffix = true data.pos_category = "suffixes" local singular_poscat = singularize(poscat) insert(data.categories, langname .. " " .. singular_poscat .. "-forming suffixes") insert(data.inflections, {label = singular_poscat .. "-forming suffix"}) end if pos_data then pos_data.func(args, data, is_suffix) end local extra_categories = {} if pagename:find("[Qq][^Uu]") or pagename:find("[Qq]$") then insert(data.categories, langname .. " words containing Q not followed by U") end -- toNFD performs decomposition, so letters that decompose to an ASCII -- vowel and a diacritic, such as é, are counted as vowels anddo not do not -- need to be included in the pattern. if not umatch(ulower(toNFD(pagename)), "[aeiouyæœøəªºαεηιουω]") then insert(data.categories, langname .. " words without vowels") end if pagename:find("yre$") then insert(data.categories, langname .. ' words ending in "-yre"') end if not pagename:find(" ") and ulen(pagename) >= 25 then insert(extra_categories, "Long " .. langname .. ' words') end if pagename:find("^[^aeiou ]*a[^aeiou ]*e[^aeiou ]*i[^aeiou ]*o[^aeiou ]*u[^aeiou ]*$") then insert(data.categories, langname .. ' words that use all vowels in alphabetical order') end if args.json then return toJSON(data) end return full_headword(data) .. (#extra_categories > 0 and format_categories(extra_categories, lang, args.sort) or "") end -- This function does the common work between adjectives and adverbs local function make_comparatives(params, data) local comp_parts = {label = glossary_link("comparative"), accel = {form = "comparative"}} local sup_parts = {label = glossary_link("superlative"), accel = {form = "superlative"}} local pagename = data.displayed_pagename if #params == 0 then insert(params, {"more"}) end -- Go over each parameter given and create a comparative and superlative -- form. for i, val in ipairs(params) do local comp = val[1] local comp_qual = val[2] local sup = val[3] local sup_qual = val[4] local comp_part, sup_part if comp == "more" and pagename ~= "many" and pagename ~= "much" then comp_part = "more [[" .. pagename .. "]]" sup_part = sup or "most [[" .. pagename .. "]]" elseif comp == "further" and pagename ~= "far" then comp_part = "further [[" .. pagename .. "]]" sup_part = sup or "furthest [[" .. pagename .. "]]" elseif comp == "er" then -- Add the "-er" and "-est" suffixes. comp_part = add_suffix(pagename, "r") sup_part = sup or add_suffix(pagename, "st.superlative") elseif comp == "ier" then if pagename:sub(-1) ~= "y" then error("Can't specify 'ier' comparative unless the term ends with 'y'.") end comp_part = pagename:gsub("e?y$", "ier") sup_part = sup or pagename:gsub("e?y$", "iest") elseif comp == "-" or sup == "-" then -- Allowing '-' makes it more flexible to not have some forms if comp ~= "-" then comp_part = comp end if sup ~= "-" then sup_part = sup end else -- If the full comparative was given, but no superlative, then -- create it by replacing the ending -er with -est. if not sup then if comp:sub(-2) == "er" then sup = comp:sub(1, -3) .. "est" else error("The superlative of \"" .. comp .. "\" cannot be generated automatically. Please provide it with the \"sup" .. (i == 1 and "" or i) .. "=\" parameter.") end end comp_part = comp sup_part = sup end if comp_part then insert(comp_parts, {term = comp_part, q = {comp_qual}}) end if sup_part then insert(sup_parts, {term = sup_part, q = {sup_qual}}) end end insert(data.inflections, comp_parts) insert(data.inflections, sup_parts) end local function make_heads_definite(args, data) if args.def == "~" then local newheads = {} for _, head in ipairs(data.heads) do insert(newheads, head) insert(newheads, "the " .. head) end data.heads = newheads else for i, head in ipairs(data.heads) do data.heads[i] = "the " .. head end end end local function non_op() end pos_functions["ھاوەڵناو"] = { params = { [1] = {list = true, allow_holes = true}, ["def"] = true, ["the"] = {alias_of = "def"}, ["comp_qual"] = {list = "comp\1_qual", allow_holes = true}, ["sup"] = {list = true, allow_holes = true}, ["sup_qual"] = {list = "sup\1_qual", allow_holes = true}, }, func = function(args, data) local shift = 0 local is_not_comparable = false local is_comparative_only = false if args.def then make_heads_definite(args, data) end -- If the first parameter is ?, then don't show anything, just return. if args[1][1] == "?" then return -- If the first parameter is -, then move all parameters up one position. elseif args[1][1] == "-" then shift = 1 is_not_comparable = true -- If the only argument is +, then remember this and clear parameters elseif args[1][1] == "+" and args[1].maxindex == 1 then shift = 1 is_comparative_only = true end -- Gather all the comparative and superlative parameters. local params = {} for i = 1, args[1].maxindex - shift do local comp = args[1][i + shift] local comp_qual = args["comp_qual"][i + shift] local sup = args["sup"][i] local sup_qual = args["sup_qual"][i + shift] if comp or sup then insert(params, {comp, comp_qual, sup, sup_qual}) end end if shift == 1 then -- If the first parameter is "-" but there are no parameters, -- then show "not comparable" only and return. -- If there are parameters, then show "not generally comparable" -- before the forms. if #params == 0 then if is_not_comparable then insert(data.inflections, {label = "not " .. glossary_link("comparable")}) insert(data.categories, langname .. " uncomparable adjectives") return end if is_comparative_only then insert(data.inflections, {label = glossary_link("comparative") .. " form only"}) insert(data.categories, langname .. " comparative-only adjectives") return end else insert(data.inflections, {label = "not generally " .. glossary_link("comparable")}) end end -- Process the parameters make_comparatives(params, data) end } pos_functions["adverbs"] = { params = { [1] = {list = true, allow_holes = true}, ["comp_qual"] = {list = "comp\1_qual", allow_holes = true}, ["sup"] = {list = true, allow_holes = true}, ["sup_qual"] = {list = "sup\1_qual", allow_holes = true}, }, func = function(args, data) local shift = 0 -- If the first parameter is ?, then don't show anything, just return. if args[1][1] == "?" then return -- If the first parameter is -, then move all parameters up one position. elseif args[1][1] == "-" then shift = 1 end -- Gather all the comparative and superlative parameters. local params = {} for i = 1, args[1].maxindex - shift do local comp = args[1][i + shift] local comp_qual = args["comp_qual"][i + shift] local sup = args["sup"][i] local sup_qual = args["sup_qual"][i + shift] if comp or sup then insert(params, {comp, comp_qual, sup, sup_qual}) end end if shift == 1 then -- If the first parameter is "-" but there are no parameters, -- then show "not comparable" only and return. If there are parameters, -- then show "not generally comparable" before the forms. if #params == 0 then insert(data.inflections, {label = "not " .. glossary_link("comparable")}) insert(data.categories, langname .. " uncomparable adverbs") return else insert(data.inflections, {label = "not generally " .. glossary_link("comparable")}) end end -- Process the parameters make_comparatives(params, data) end } pos_functions["conjunctions"] = { params = { [1] = { alias_of = "head" }, }, func = non_op, } pos_functions["interjections"] = { params = { [1] = { alias_of = "head" }, }, func = non_op, } local function escape(str) return (str:gsub("\\([:#])", "\\\\%1") :gsub("[:#]", "\\%0")) end local function canonicalize_plural(pl, pagename, pos) if pl == "+" then return escape(add_suffix(pagename, "s.plural", pos)) elseif pl == "++" then return escape(compute_plusplus_s_form(pagename, add_suffix(pagename, "s.plural", pos))) elseif pl == "*" then return escape(pagename) elseif pl == "ies" then if pagename:sub(-1) == "y" then return escape(pagename:gsub("e?y$", pl)) end error("Can't specify 'ies' plural unless the term ends with 'y'.") elseif pl == "s" or pl == "es" or pl == "'s" then return escape(pagename .. pl) end end local function do_nouns(args, data, pos) local pagename = data.displayed_pagename pos = pos or "noun" local function gather_inflections_with_quals(infl_field, qual_field, label) -- Gather all the plural parameters from the numbered parameters. local infls = {} if label then infls.label = label end for i, infl in ipairs(args[infl_field]) do local qual = args[qual_field][i] if qual then insert(infls, {term = infl, q = {qual}}) else insert(infls, infl) end end return infls end if args.def then make_heads_definite(args, data) end local plurals = gather_inflections_with_quals(1, "plqual") if plurals[1] == "p" then -- plurale tantum if #plurals > 1 then error("With plurale tantum noun, can't specify more than one plural") end data.genders = {"p"} -- this should auto-insert the correct 'pluralia tantum' category if #args.sg > 0 then insert(data.inflections, {label = "normally plural"}) insert(data.inflections, gather_inflections_with_quals("sg", "sgqual", "singular")) else insert(data.inflections, {label = "plural only"}) end if #args.attr > 0 then insert(data.inflections, gather_inflections_with_quals("attr", "attrqual", "attributive")) end return end local need_default_plural = pos == "noun" if plurals[1] == "-" then -- Uncountable noun; may occasionally have a plural remove(plurals, 1) -- Remove the "-" insert(data.categories, "ناوە نەژماردەنییە " .. langname .. "یەکان") -- If plural forms were given explicitly, then show "usually" if #plurals > 0 then insert(data.inflections, {label = "بەگشتی " .. glossary_link("نەژماردەنی")}) insert(data.categories, "ناوە ژماردەنییە " .. langname .. "یەکان") else insert(data.inflections, {label = glossary_link("نەژماردەنی")}) end need_default_plural = false elseif plurals[1] == "~" then -- Mixed countable/uncountable noun, always has a plural remove(plurals, 1) -- Remove the "~" insert(data.inflections, {label = glossary_link("ژماردەنی") .. " و " .. glossary_link("نەژماردەنی")}) insert(data.categories, "ناوە نەژماردەنییە " .. langname .. "یەکان") insert(data.categories, "ناوە ژماردەنییە " .. langname .. "یەکان") -- If no plural was given, add a default one now if #plurals == 0 then plurals[1] = escape(add_suffix(pagename, "s.plural", pos)) end elseif pos == "proper noun" then -- For proper nouns, the default is uncountable insert(data.categories, "ناوە نەژماردەنییە " .. langname .. "یەکان") else -- For common nouns, the default is countable, has a plural insert(data.categories, "ناوە ژماردەنییە " .. langname .. "یەکان") end -- Plural is unknown if plurals[1] == "?" then remove(plurals, 1) -- Remove the "?" -- Not desired; see [[Wiktionary:Tea_room/2021/August#"Plural unknown or uncertain"]] -- insert(data.inflections, {label = "plural unknown or uncertain"}) insert(data.categories, langname .. " nouns with unknown or uncertain plurals") if #plurals > 0 then error("Can't specify explicit plurals along with '?' for unknown/uncertain plural") end return end -- Plural is not attested if plurals[1] == "!" then remove(plurals, 1) -- Remove the "!" insert(data.inflections, {label = "plural not attested"}) insert(data.categories, langname .. " nouns with unattested plurals") if #plurals > 0 then error("Can't specify explicit plurals along with '!' for unattested plural") end return end -- If no plural was given, maybe add a default one, otherwise (when "-" was given) return. if #plurals == 0 then if not need_default_plural then return end plurals[1] = escape(add_suffix(pagename, "s.plural", pos)) end -- There are plural forms to show, so show them. plurals.label = "کۆ:" plurals.accel = {form = "p"} local irregular, indeclinable for i, pl in ipairs(plurals) do local pl_type = type(pl) local pl_term = pl_type == "table" and pl.term or pl local canon_pl = canonicalize_plural(pl_term, pagename, pos) if canon_pl then pl_term = canon_pl if pl_type == "table" then pl.term = pl_term else plurals[i] = pl_term end end pl_term = get_link_page(pl_term, lang) if not (pagename:find(" ") or is_regular_plural(pl_term, pagename)) then irregular = true if pl_term == pagename then indeclinable = true end end end if irregular then insert(data.categories, langname .. " nouns with irregular plurals") end if indeclinable then insert(data.categories, langname .. " indeclinable nouns") end insert(data.inflections, plurals) end -- Return the parameters to be used for nouns and proper nouns. Currently the same. local function get_noun_params(is_proper) return { [1] = {list = true, disallow_holes = true}, ["def"] = true, ["the"] = {alias_of = "def"}, ["pl\1qual"] = {list = true, allow_holes = true}, -- The following four only used for pluralia tantum (1=p) ["sg"] = {list = true, disallow_holes = true}, ["sg\1qual"] = {list = true, allow_holes = true}, ["attr"] = {list = true, disallow_holes = true}, ["attr\1qual"] = {list = true, allow_holes = true}, } end pos_functions["ناو"] = { params = get_noun_params(false), func = do_nouns, } pos_functions["proper nouns"] = { params = get_noun_params("is proper"), func = function(args, data) return do_nouns(args, data, "proper noun") end, } local function base_default_verb_forms(verb) return escape(add_suffix(verb, "s.verb")), escape(add_suffix(verb, "ing")), escape(add_suffix(verb, "d")) end local function default_verb_forms(verb) local full_s_form, full_ing_form, full_ed_form = base_default_verb_forms(verb) if verb:find(" ") then local first, rest = verb:match("^(.-)( .*)$") local first_s_form, first_ing_form, first_ed_form = base_default_verb_forms(first) return full_s_form, full_ing_form, full_ed_form, first_s_form .. rest, first_ing_form .. rest, first_ed_form .. rest else return full_s_form, full_ing_form, full_ed_form, nil, nil, nil end end pos_functions["verbs"] = { params = { [1] = {list = "pres_3sg", allow_holes = true}, ["pres_3sg_qual"] = {list = "pres_3sg\1_qual", allow_holes = true}, [2] = {list = "pres_ptc", allow_holes = true}, ["pres_ptc_qual"] = {list = "pres_ptc\1_qual", allow_holes = true}, [3] = {list = "past", allow_holes = true}, ["past_qual"] = {list = "past\1_qual", allow_holes = true}, [4] = {list = "past_ptc", allow_holes = true}, ["past_ptc_qual"] = {list = "past_ptc\1_qual", allow_holes = true}, ["noautolinkverb"] = {type = "boolean"}, }, func = function(args, data) -- Get parameters local par1 = args[1][1] local par2 = args[2][1] local par3 = args[3][1] local par4 = args[4][1] local pres_3sgs, pres_ptcs, pasts, past_ptcs local pagename = data.displayed_pagename ------------------------------------------- UTILITY FUNCTIONS #2 ------------------------------------------ -- These functions are used in both in the separate-parameter format and in the override params such as past_ptc2=. local new_default_s, new_default_ing, new_default_ed, split_default_s, split_default_ing, split_default_ed = default_verb_forms(pagename) local function compute_double_last_cons_stem_of_split_verb(verb, ending) local first, rest = verb:match("^(.-)( .*)$") if not first then error("Verb '" .. verb .. "' must have a space in it to use ++*") end local last_cons = first:match("([bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ])$") if not last_cons then error("First word '" .. first .. "' must end in a consonant to use ++*") end return first .. last_cons .. ending .. rest end local function check_non_nil_star_form(form) if form == nil then error("Verb '" .. pagename .. "' must have a space in it to use * or ++*") end return form end local function sub_tilde(form) if not form then return nil end local retval = form:gsub("~", pagename) -- discard second return value return retval end local function canonicalize_s_form(form) if form == "+" then return new_default_s elseif form == "*" then return check_non_nil_star_form(split_default_s) elseif form == "++" then return compute_plusplus_s_form(pagename, new_default_s) elseif form == "++*" then if pagename:find("^[^ ]*[sz] ") then return compute_double_last_cons_stem_of_split_verb(pagename, "es") else return check_non_nil_star_form(split_default_s) end else return sub_tilde(form) end end local function canonicalize_ing_form(form) if form == "+" then return new_default_ing elseif form == "*" then return check_non_nil_star_form(split_default_ing) elseif form == "++" then return compute_double_last_cons_stem(pagename) .. "ing" elseif form == "++*" then return compute_double_last_cons_stem_of_split_verb(pagename, "ing") else return sub_tilde(form) end end local function canonicalize_ed_form(form) if form == "+" then return new_default_ed elseif form == "*" then return check_non_nil_star_form(split_default_ed) elseif form == "++" then return compute_double_last_cons_stem(pagename) .. "ed" elseif form == "++*" then return compute_double_last_cons_stem_of_split_verb(pagename, "ed") else return sub_tilde(form) end end local function canonicalize_en_form(form) if form == "n" then return add_suffix(pagename, "n") end return canonicalize_ed_form(form) end --------------------------------- MAIN PARSING/CONJUGATING CODE -------------------------------- local past_ptcs_given if par1 and par1:find("<") then -------------------------- ANGLE-BRACKET FORMAT -------------------------- if par2 or par3 or par4 then error("Can't specify 2=, 3= or 4= when 1= contains angle brackets: " .. par1) end -- In the angle bracket format, we always copy the full past tense specs to the past participle -- specs if none of the latter are given, so act as if the past participle is always given. -- There is a separate check to see if the past tense and past participle are identical, in any case. past_ptcs_given = true -- (1) Parse the indicator specs inside of angle brackets. local function parse_indicator_spec(angle_bracket_spec) local inside = angle_bracket_spec:match("^<(.*)>$") assert(inside) local segments = put.parse_balanced_segment_run(inside, "[", "]") local comma_separated_groups = put.split_alternating_runs(segments, ",") if #comma_separated_groups > 4 then error("Too many comma-separated parts in indicator spec: " .. angle_bracket_spec) end local function fetch_qualifiers(separated_group) local qualifiers for j = 2, #separated_group - 1, 2 do if separated_group[j + 1] ~= "" then error("Extraneous text after bracketed qualifiers: '" .. concat(separated_group) .. "'") end if not qualifiers then qualifiers = {} end insert(qualifiers, separated_group[j]) end return qualifiers end local function fetch_specs(comma_separated_group) if not comma_separated_group then return {{}} end local specs = {} local colon_separated_groups = put.split_alternating_runs(comma_separated_group, ":") for _, colon_separated_group in ipairs(colon_separated_groups) do local form = colon_separated_group[1] if form == "*" or form == "++*" then error("* and ++* not allowed inside of indicator specs: " .. angle_bracket_spec) end if form == "" then form = nil end insert(specs, {form = form, q = fetch_qualifiers(colon_separated_group)}) end return specs end local s_specs = fetch_specs(comma_separated_groups[1]) local ing_specs = fetch_specs(comma_separated_groups[2]) local ed_specs = fetch_specs(comma_separated_groups[3]) local en_specs = fetch_specs(comma_separated_groups[4]) for _, spec in ipairs(s_specs) do if spec.form == "++" and #ing_specs == 1 and not ing_specs[1].form and not ing_specs[1].q and #ed_specs == 1 and not ed_specs[1].form and not ed_specs[1].q then ing_specs[1].form = "++" ed_specs[1].form = "++" break end end return { forms = {}, s_specs = s_specs, ing_specs = ing_specs, ed_specs = ed_specs, en_specs = en_specs, } end local parse_props = { parse_indicator_spec = parse_indicator_spec, } local alternant_multiword_spec = iut.parse_inflected_text(par1, parse_props) -- (2) Check for user-specified brackets; remove any links from the lemma, but remember the original -- form so we can use it below in the 'lemma_linked' form. -- Check to see if there are brackets in the pre-text or post-text. If so, use the linked lemma (with the -- verb autolinked unless noautolinkverb is given). Otherwise, use the default headword algorithm. local function check_bracket(val) if val:find("%[%[") then alternant_multiword_spec.saw_bracket = true end end for _, alternant_or_word_spec in ipairs(alternant_multiword_spec.alternant_or_word_specs) do check_bracket(alternant_or_word_spec.before_text) if alternant_or_word_spec.alternants then for _, multiword_spec in ipairs(alternant_or_word_spec.alternants) do for _, word_spec in ipairs(multiword_spec.word_specs) do check_bracket(word_spec.before_text) end check_bracket(multiword_spec.post_text) end end end check_bracket(alternant_multiword_spec.post_text) iut.map_word_specs(alternant_multiword_spec, function(base) if base.lemma == "" then base.lemma = pagename end base.orig_lemma = base.lemma base.lemma = remove_links(base.lemma) if args.noautolinkverb or base.orig_lemma:find("%[%[") then base.linked_lemma = base.orig_lemma else base.linked_lemma = "[[" .. base.orig_lemma .. "]]" end end) -- (3) Conjugate the verbs according to the indicator specs parsed above. local all_verb_slots = { lemma = "infinitive", lemma_linked = "infinitive", s_form = "3|s|pres", ing_form = "pres|ptcp", ed_form = "past", en_form = "past|ptcp", } local function conjugate_verb(base) local def_s_form, def_ing_form, def_ed_form = base_default_verb_forms(base.lemma) local function process_specs(slot, specs, default_form, canonicalize_plusplus) for _, spec in ipairs(specs) do local form = spec.form if not form or form == "+" then form = default_form elseif form == "++" then form = canonicalize_plusplus() end -- If there's a ~ in the form, substitute it with the lemma, -- but make sure to first replace % in the lemma with %% so that -- it doesn't get interpreted as a capture replace expression. if form:find("~") then -- Assign to a var because gsub returns multiple values. local subbed_lemma = base.lemma:gsub("%%", "%%%%") form = form:gsub("~", subbed_lemma) end -- If the form is -, don't insert any forms, which will result -- in there being no overall forms (in fact it will be nil). -- We check for that down below and substitute a single "-" as -- the form, which in turn gets turned into special labels like -- "no present participle". if form ~= "-" then iut.insert_form(base.forms, slot, {form = form, footnotes = spec.q}) end end end process_specs("s_form", base.s_specs, def_s_form, function() return compute_plusplus_s_form(base.lemma, def_s_form) end) process_specs("ing_form", base.ing_specs, def_ing_form, function() return compute_double_last_cons_stem(base.lemma) .. "ing" end) process_specs("ed_form", base.ed_specs, def_ed_form, function() return compute_double_last_cons_stem(base.lemma) .. "ed" end) -- If the -en spec is completely missing, substitute the -ed spec in its entirely. -- Otherwise, if individual -en forms are missing or use +, we will substitute the -- default -ed form, as with the -ed spec. local en_specs = base.en_specs if #en_specs == 1 and not en_specs[1].form and not en_specs[1].q then en_specs = base.ed_specs end process_specs("en_form", en_specs, def_ed_form, function() return compute_double_last_cons_stem(base.lemma) .. "ed" end) iut.insert_form(base.forms, "lemma", {form = base.lemma}) -- Add linked version of lemma for use in head=. We write this in a general fashion in case -- there are multiple lemma forms (which isn't possible currently at this level, although it's -- possible overall using the ((...,...)) notation). iut.insert_forms(base.forms, "lemma_linked", iut.map_forms(base.forms.lemma, function(form) if form == base.lemma and base.linked_lemma:find("%[%[") then return base.linked_lemma else return form end end)) end local inflect_props = { slot_table = all_verb_slots, inflect_word_spec = conjugate_verb, } iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props) -- (4) Fetch the forms and put the conjugated lemmas in data.heads if not explicitly given. local function fetch_forms(slot) local forms = alternant_multiword_spec.forms[slot] -- See above. This should only occur if the user explicitly used - -- for a spec. if not forms or #forms == 0 then forms = {{form = "-"}} end return forms end pres_3sgs = fetch_forms("s_form") pres_ptcs = fetch_forms("ing_form") pasts = fetch_forms("ed_form") past_ptcs = fetch_forms("en_form") -- Use the "linked" form of the lemma as the head if no head= explicitly given and the user specified brackets -- in one of the lemmas. Otherwise we use the default headword-linking algorithm. if #data.user_specified_heads == 0 and alternant_multiword_spec.saw_bracket then data.heads = {} for _, lemma_obj in ipairs(alternant_multiword_spec.forms.lemma_linked) do local quals, refs = iut.convert_footnotes_to_qualifiers_and_references(lemma_obj.footnotes) insert(data.heads, {term = lemma_obj.form, q = quals, refs = refs}) end end else -------------------------- SEPARATE-PARAM FORMAT -------------------------- local pres_3sg, pres_ptc, past if par1 and not (par2 or par3) then -- Use of a single parameter other than "++", "*" or "++*" is now the "legacy" format, -- and no longer supported. if par1 == "es" or par1 == "ies" or par1 == "d" then error("Legacy parameter 1=es/ies/d no longer supported, just use 'en-verb' without params") elseif par1 == "++" or par1 == "*" or par1 == "++*" then pres_3sg = canonicalize_s_form(par1) pres_ptc = canonicalize_ing_form(par1) past = canonicalize_ed_form(par1) else error("Legacy parameter 1=STEM no longer supported, just use 'en-verb' without params") end else if par2 then track("xxx2") end if par3 then track("xxx3") end end if not pres_3sg or not pres_ptc or not past then -- Either all three should be set above, or none of them. assert(not pres_3sg and not pres_ptc and not past) if par1 then pres_3sg = canonicalize_s_form(par1) else pres_3sg = new_default_s end if par2 then pres_ptc = canonicalize_ing_form(par2) else pres_ptc = new_default_ing end if par3 then past = canonicalize_ed_form(par3) else past = new_default_ed end end local past_ptc if par4 then past_ptcs_given = true past_ptc = canonicalize_en_form(par4) track("xxx4") else past_ptc = past end pres_3sgs = {{form = pres_3sg}} pres_ptcs = {{form = pres_ptc}} pasts = {{form = past}} past_ptcs = {{form = past_ptc}} end ------------------------------------------- HANDLE OVERRIDES ------------------------------------------ local function strip_brackets(qualifiers) if not qualifiers then return nil end local stripped_qualifiers = {} for _, qualifier in ipairs(qualifiers) do local stripped_qualifier = qualifier:match("^%[(.*)%]$") if not stripped_qualifier then error("Internal error: Qualifier should be surrounded by brackets at this stage: " .. qualifier) end insert(stripped_qualifiers, stripped_qualifier) end return stripped_qualifiers end local function collect_forms(label, accel_form, defaults, overrides, override_qualifiers, canonicalize) if defaults[1].form == "-" then return {label = "no " .. label} else local into_table = {label = label, accel = {form = accel_form}} local maxindex = math.max(#defaults, overrides.maxindex) local qualifiers = override_qualifiers[1] and {override_qualifiers[1]} or strip_brackets(defaults[1].footnotes) insert(into_table, {term = defaults[1].form, q = qualifiers}) -- Present 3rd singular for i = 2, maxindex do local override_form = canonicalize(overrides[i]) if override_form then -- If there is an override such as past_ptc2=..., only use the qualifier specified -- using an override (past_ptc2_qual=...), if any; it doesn't make sense to combine -- an override form with a qualifier specified inside of angle brackets. insert(into_table, {term = override_form, q = {override_qualifiers[i]}}) elseif defaults[i] then -- If the form comes from inside angle brackets, allow any override qualifier -- (past_ptc2_qual=...) to override any qualifier specified inside of angle brackets. -- FIXME: Maybe we should throw an error here if both exist. local qualifiers = override_qualifiers[i] and {override_qualifiers[i]} or strip_brackets(defaults[i].footnotes) insert(into_table, {term = defaults[i].form, q = qualifiers}) end end return into_table end end local pres_3sg_infls = collect_forms("third-person singular simple present", "s-verb-form", pres_3sgs, args[1], args.pres_3sg_qual, canonicalize_s_form) local pres_ptc_infls = collect_forms("present participle", "ing-form", pres_ptcs, args[2], args.pres_ptc_qual, canonicalize_ing_form) local past_infls = collect_forms("simple past", "spast", pasts, args[3], args.past_qual, canonicalize_ed_form) local past_ptc_infls = collect_forms("past participle", "past|part", past_ptcs, args[4], args.past_ptc_qual, canonicalize_en_form) -- Are the past forms identical to the past participle forms? If so, we use a single -- combined "simple past and past participle" label on the past tense forms. -- We check for two conditions: Either no past participle forms were given at all, or -- they were given but are identical in every way (all forms and qualifiers) to the past -- tense forms. The former "no explicit past participle forms" check is important in the -- "separate-parameter" format; if past tense overrides are given and no past participle -- forms given, the past tense overrides should apply to the past participle as well. -- In the angle-bracket format, it's expected that all forms and qualifiers are specified -- using that format, and we explicitly copy past tense forms and qualifiers to past -- participle ones if the latter are omitted, so we disable to "no explicit past participle -- forms" check. if args[4].maxindex > 0 or args.past_ptc_qual.maxindex > 0 then past_ptcs_given = true end local identical = true -- For the past and past participle to be identical, there must be -- the same number of inflections, and each inflection must match -- in term and qualifiers. if #past_infls ~= #past_ptc_infls then identical = false else for key, val in ipairs(past_infls) do if past_ptc_infls[key].term ~= val.term then identical = false break else local quals1 = past_ptc_infls[key].q local quals2 = val.q if (not not quals1) ~= (not not quals2) then -- one is nil, the other is not identical = false elseif quals1 and quals2 then -- qualifiers present in both; each qualifier must match if #quals1 ~= #quals2 then identical = false else for k, v in ipairs(quals1) do if v ~= quals2[k] then identical = false break end end end end if not identical then break end end end end -- Insert the forms insert(data.inflections, pres_3sg_infls) insert(data.inflections, pres_ptc_infls) if not past_ptcs_given or identical then if past_ptcs[1].form == "-" then past_infls.label = "no simple past or past participle" else past_infls.label = "simple past and past participle" past_infls.accel = {form = "ed-form"} end insert(data.inflections, past_infls) else insert(data.inflections, past_infls) insert(data.inflections, past_ptc_infls) end if pagename:find(" ") then -- Check for placeholder "it" local words = split(pagename, " ") for _, word in ipairs(words) do if word == "it" or word == "its" or word == "it's" then insert(data.categories, langname .. ' terms with placeholder "it"') break end end -- Check for phrasal verbs local phrasal_adverbs = list_to_set{ -- NOTE: This should only contain common phrasal adverbs, not random words like [[low]], -- [[adrift]], etc. "aback", "about", "above", "across", "after", "against", "ahead", "along", "apart", "around", "as", "aside", "at", "away", "back", "before", "behind", "below", "between", "beyond", "by", "down", "for", "forth", "from", "in", "into", "of", "off", "on", "onto", "out", "over", "past", "round", "through", "to", "together", "towards", "under", "up", "upon", "with", "without", } local allowed_non_adverb_words = list_to_set{ "it", "one", "oneself", "someone", } local base = pagename local seen_adverbs = {} -- Only consider a verb to be phrasal if it consists of a single base verb followed exclusively by either -- adverbs from `phrasal_adverbs` or placeholder words from `allowed_non_adverb_words`, where at -- least one following word is from `phrasal_adverbs` (hence [[can it]] is not a phrasal verb). while true do local prev, word = base:match("^(.+) (.-)$") if not prev then break end if phrasal_adverbs[word] then insert(seen_adverbs, word) elseif allowed_non_adverb_words[word] then -- do nothing else break end base = prev end if not base:find(" ") and #seen_adverbs > 0 then insert(data.categories, langname .. " phrasal verbs") for i = #seen_adverbs, 1, -1 do insert(data.categories, langname .. ' phrasal verbs formed with "' .. seen_adverbs[i] .. '"') end end end end } return export 1z9oeyysvy912uekmtn3usb78jdnjrn مۆدیوول:gender and number 828 34 36803 34104 2026-08-13T11:39:43Z Ghybu 12 update 36803 Scribunto text/plain local export = {} local debug_track_module = "Module:debug/track" local load_module = "Module:load" local pron_qualifier_module = "Module:pron qualifier" local parameters_module = "Module:parameters" local string_utilities_module = "Module:string utilities" local table_module = "Module:table" local utilities_module = "Module:utilities" local concat = table.concat local insert = table.insert local function debug_track(...) debug_track = require(debug_track_module) return debug_track(...) end local function deep_copy(...) deep_copy = require(table_module).deepCopy return deep_copy(...) end local function format_categories(...) format_categories = require(utilities_module).format_categories return format_categories(...) end local function format_pron_qualifiers(...) format_pron_qualifiers = require(pron_qualifier_module).format_qualifiers return format_pron_qualifiers(...) end local function load_data(...) load_data = require(load_module).load_data return load_data(...) end local function process_params(...) process_params = require(parameters_module).process return process_params(...) end local function split(...) split = require(string_utilities_module).split return split(...) end local gender_and_number_data local function get_gender_and_number_data() gender_and_number_data, get_gender_and_number_data = load_data("Module:gender and number/data"), nil return gender_and_number_data end --[==[ intro: This module creates standardised displays for gender and number. It converts a gender specification into Wiki/HTML format. A gender/number specification consists of one or more gender/number elements, separated by hyphens. Examples are: {"n"} (neuter gender), {"f-p"} (feminine plural), {"m-an-p"} (masculine animate plural), {"pf"} (perfective aspect). Each gender/number element has the following properties: # A code, as used in the spec, e.g. {"f"} for feminine, {"p"} for plural. # A type, e.g. `gender`, `number` or `animacy`. Each element in a given spec must be of a different type. # A display form, which in turn consists of a display code and a tooltip gloss. The display code may not be the same as the spec code, e.g. the spec code {"an"} has display code {"anim"} and tooltip gloss ''animate''. # A category into which lemmas of the right part of speech are placed if they have a gender/number spec containing the given element. For example, a noun with gender/number spec {"m-an-p"} is placed into the categories `<var>lang</var> masculine nouns`, `<var>lang</var> animate nouns` and `<var>lang</var> pluralia tantum`. ]==] --[==[ Version of format_list that can be invoked from a template. ]==] function export.show_list(frame) local params = { [1] = {list = true}, ["lang"] = {type = "language"}, } local iargs = process_params(frame.args, params) return export.format_list(iargs[1], iargs.lang) end --[==[ Older entry point; equivalent to format_genders() except that it formats the categories and returns them appended to the formatted gender text rather than returning the formatted text and categories separately. ]==] function export.format_list(specs, lang, pos_for_cat, sort_key) debug_track("gender and number/old-format-list") local text, cats = export.format_genders(specs, lang, pos_for_cat) if not cats then return text end return text .. format_categories(cats, lang, sort_key) end local function autoadd_abbr(display) if not display then error("Internal error: '.display' for gender/number code is missing") end if display:find("<abbr", nil, true) then return display end return ('%s'):format(display, display) end -- Add qualifiers, labels and references to a formatted gender/number spec. `spec` is the object describing the -- gender/number spec, which should optionally contain: -- * left qualifiers in `q` or (for compatibility) `qualifiers`, an array of strings; -- * right qualifiers in `qq`, an array of strings; -- * left labels in `l`, an array of strings; -- * right labels in `ll`, an array of strings; -- * references in `refs`, an array either of strings (formatted reference text) or objects containing fields `text` -- (formatted reference text) and optionally `name` and/or `group`; -- `formatted` is the formatted version of the term itself, and `lang` is the optional language object passed into -- format_genders(). local function add_qualifiers_and_refs(formatted, spec, lang) local function field_non_empty(field) local list = spec[field] if not list then return nil end if type(list) ~= "table" then error(("Internal error: Wrong type for `spec.%s`=%s, should be \"table\""):format( field, mw.dumpObject(list))) end return list[1] end if field_non_empty("q") or field_non_empty("qq") or field_non_empty("l") or field_non_empty("ll") or field_non_empty("qualifiers") or field_non_empty("refs") then formatted = format_pron_qualifiers{ lang = lang, text = formatted, q = spec.q, qq = spec.qq, qualifiers = spec.qualifiers, l = spec.l, ll = spec.ll, refs = spec.refs, } end return formatted end --[==[ Format one or more gender/number specifications. Each spec is either a string, e.g. {"f-p"}, or a table of the form { {spec = "SPEC", qualifiers = {"QUALIFIER", "QUALIFIER", ...}}} where `.spec` is a gender/number spec such as {"f-p"} and `.qualifiers` is a list of qualifiers to display before the formatted gender/number spec. `.spec` must be present but `.qualifiers` may be omitted. The function returns two values: # the formatted text; # a list of the categories to add. If `lang` (which should be a language object) and `pos_for_cat` (which should be a plural part of speech) are given, gender categories such as `German masculine nouns` or `Russian imperfective verbs` are added to the categories, and request categories such as `Requests for gender in <var>lang</var> entries` or `Requests for animacy in <var>lang</var> entries` may also be added. Otherwise, if only `lang` is given, only request categories may be returned. If both are omitted, the returned list is empty. ]==] function export.format_genders(specs, lang, pos_for_cat) local formatted_specs, categories, seen_types = {} local all_is_nounclass = nil local full_langname = lang and lang:getFullName() or nil local function do_gender_spec(spec, parts) local types = {} local codes = (gender_and_number_data or get_gender_and_number_data()).codes for key, code in ipairs(parts) do -- Is this code valid? if not codes[code] then error('The tag "' .. code .. '" in the gender specification "' .. spec.spec .. '" is not valid. See [[Module:gender and number]] for a list of valid tags.') end -- Check for multiple genders/numbers/animacies in a single spec. local typ = codes[code].type if typ ~= "other" and types[typ] then error('The gender specification "' .. spec.spec .. '" contains multiple tags of type "' .. typ .. '".') end types[typ] = true parts[key] = autoadd_abbr(codes[code].display) -- Generate categories if called for. if lang and pos_for_cat then local cat = codes[code].cat if cat then if not categories then categories = {} end insert(categories, full_langname .. " " .. cat) end if not seen_types then seen_types = {} elseif seen_types[typ] and seen_types[typ] ~= code then cat = (gender_and_number_data or get_gender_and_number_data()).multicode_cats[typ] if cat then if not categories then categories = {} end insert(categories, full_langname .. " " .. cat) end end seen_types[typ] = code end if lang and codes[code].req then local type_for_req = typ if code == "?" then -- Keep in mind `pos_for_cat` may be nil here. type_for_req = pos_for_cat == "verbs" and "aspect" or "gender" end if not categories then categories = {} end insert(categories, "Requests for " .. type_for_req .. " in " .. full_langname .. " entries") end end -- Add the processed codes together with non-breaking spaces if not parts[2] and parts[1] then return parts[1] else return concat(parts, "&nbsp;") end end for _, spec in ipairs(specs) do if type(spec) ~= "table" then spec = {spec = spec} end local spec_spec, is_nounclass = spec.spec -- If the specification starts with cX, then it is a noun class specification. if spec_spec:match("^%d") or spec_spec:match("^c[^-]") then is_nounclass = true local code = spec_spec:gsub("^c", "") local text if code == "?" then text = '<abbr class="noun-class" title="noun class missing">?</abbr>' if lang then if not categories then categories = {} end insert(categories, "Requests for noun class in " .. full_langname .. " entries") end else text = '<abbr class="noun-class" title="noun class ' .. code .. '">' .. code .. "</abbr>" if lang and pos_for_cat then if not categories then categories = {} end insert(categories, full_langname .. " class " .. code .. " POS") end end local text_with_qual = add_qualifiers_and_refs(text, spec, lang) insert(formatted_specs, text_with_qual) else -- Split the parts and iterate over each part, converting it into its display form local parts = split(spec.spec, "-", true, true) local combined_codes = (gender_and_number_data or get_gender_and_number_data()).combinations if lang then -- Check if the specification is valid --elseif langinfo.genders then -- local valid_genders = {} -- for _, g in ipairs(langinfo.genders) do valid_genders[g] = true end -- -- if not valid_genders[spec.spec] then -- local valid_string = {} -- for i, g in ipairs(langinfo.genders) do valid_string[i] = g end -- error('The gender specification "' .. spec.spec .. '" is not valid for ' .. langinfo.names[1] .. ". Valid are: " .. concat(valid_string, ", ")) -- end --end end local has_combined = false for _, code in ipairs(parts) do if combined_codes[code] then has_combined = true break end end if not has_combined then if formatted_specs[1] then insert(formatted_specs, "or") end insert(formatted_specs, add_qualifiers_and_refs(do_gender_spec(spec, parts), spec, lang)) else -- This logic is to handle combined gender specs like 'mf' and 'mfbysense'. local all_parts = {{}} local extra_displays local this_formatted_specs = {} for _, code in ipairs(parts) do if combined_codes[code] then local new_all_parts = {} for _, one_parts in ipairs(all_parts) do for _, one_code in ipairs(combined_codes[code].codes) do local new_combined_parts = deep_copy(one_parts) insert(new_combined_parts, one_code) insert(new_all_parts, new_combined_parts) end end all_parts = new_all_parts if lang and pos_for_cat then local extra_cat = combined_codes[code].cat if extra_cat then if not categories then categories = {} end insert(categories, full_langname .. " " .. extra_cat) end end local extra_display = combined_codes[code].display if extra_display then if not extra_displays then extra_displays = {} end insert(extra_displays, autoadd_abbr(extra_display)) end else for _, one_parts in ipairs(all_parts) do insert(one_parts, code) end end end for _, parts in ipairs(all_parts) do if this_formatted_specs[1] then insert(this_formatted_specs, "or") end insert(this_formatted_specs, do_gender_spec(spec, parts)) end if extra_displays then for _, display in ipairs(extra_displays) do insert(this_formatted_specs, display) end end insert(formatted_specs, add_qualifiers_and_refs( concat(this_formatted_specs, " "), spec, lang)) end is_nounclass = false end -- Ensure that the specifications are either all noun classes, or none are. if all_is_nounclass == nil then all_is_nounclass = is_nounclass elseif all_is_nounclass ~= is_nounclass then error("Noun classes and genders cannot be mixed. Please use either one or the other.") end end if categories and lang and pos_for_cat then for i, cat in ipairs(categories) do categories[i] = cat:gsub("POS", pos_for_cat) end end if all_is_nounclass then -- Add the processed codes together with slashes return '<span class="gender">class ' .. concat(formatted_specs, "/") .. "</span>", categories else -- Add the processed codes together with spaces return '<span class="gender">' .. concat(formatted_specs, " ") .. "</span>", categories end end return export 2m0recg6bd63ggydwpzsqejrsntefgo مۆدیوول:headword/templates 828 37 36802 36503 2026-08-13T11:34:14Z Ghybu 12 + pagename 36802 Scribunto text/plain insert = table.insert local process_params = require("Module:parameters").process local export = {} local function get_args(frame) local boolean = {type = "boolean"} local boolean_list_allow_holes = {type = "boolean", list = true, allow_holes = true} local list_allow_holes = {list = true, allow_holes = true} return process_params(frame:getParent().args, { [1] = {required = true, type = "language", default = "und"}, ["sc"] = {type = "script"}, ["sort"] = true, [2] = {required = true, default = "nouns"}, ["sccat"] = boolean, ["noposcat"] = boolean, ["nomultiwordcat"] = boolean, ["nogendercat"] = boolean, ["nopalindromecat"] = boolean, ["nolinkhead"] = boolean, ["autotrinfl"] = boolean, ["altform"] = boolean, -- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] ["cat2"] = true, ["cat3"] = true, ["cat4"] = true, pagename = true, ["head"] = list_allow_holes, ["id"] = true, ["tr"] = list_allow_holes, ["ts"] = list_allow_holes, ["gloss"] = true, ["g"] = {list = true}, ["g\1qual"] = list_allow_holes, [3] = list_allow_holes, ["f\1accel-form"] = list_allow_holes, ["f\1accel-translit"] = list_allow_holes, ["f\1accel-lemma"] = list_allow_holes, ["f\1accel-lemma-translit"] = list_allow_holes, ["f\1accel-gender"] = list_allow_holes, ["f\1accel-nostore"] = boolean_list_allow_holes, ["f\1request"] = list_allow_holes, ["f\1alt"] = list_allow_holes, ["f\1lang"] = {list = true, allow_holes = true, type = "language"}, ["f\1sc"] = {list = true, allow_holes = true, type = "script"}, ["f\1id"] = list_allow_holes, ["f\1tr"] = list_allow_holes, ["f\1ts"] = list_allow_holes, ["f\1g"] = list_allow_holes, ["f\1qual"] = list_allow_holes, ["f\1autotr"] = boolean_list_allow_holes, ["f\1nolink"] = boolean_list_allow_holes, }) end function export.head_t(frame) local m_headword = require("Module:headword") local function track(page) require("Module:debug/track")("headword/templates/" .. page) return true end local args = get_args(frame) -- Get language and script information local data = {} data.lang = args[1] data.sc = args["sc"] data.sccat = args["sccat"] data.sort_key = args["sort"] data.heads = args["head"] data.id = args["id"] data.translits = args["tr"] data.transcriptions = args["ts"] data.gloss = args["gloss"] data.genders = args["g"] data.pagename = args.pagename data.pagename = args.pagename -- This shouldn't really happen. for i = 1,args["head"].maxindex do if not args["head"][i] then track("head-with-holes") end end for k, v in pairs(args["gqual"]) do if k ~= "maxindex" then if data.genders[k] then data.genders[k] = {spec = data.genders[k], qualifiers = {v}} else k = k == 1 and "" or tostring(k) error(("g%squal= specified without g%s="):format(k, k)) end end end -- EXPERIMENTAL: see [[Wiktionary:Beer parlour/2024/June#Decluttering the altform mess]] data.altform = args["altform"] -- Part-of-speech category local pos_category = args[2] data.noposcat = args["noposcat"] -- Check for headword aliases and then pluralize if the POS term does not have an invariable plural. data.pos_category = m_headword.canonicalize_pos(pos_category) -- Additional categories. data.categories = {} data.whole_page_categories = {} data.nomultiwordcat = args["nomultiwordcat"] data.nogendercat = args["nogendercat"] data.nopalindromecat = args["nopalindromecat"] if args["cat2"] then insert(data.categories, data.lang:getFullName() .. " " .. args["cat2"]) end if args["cat3"] then insert(data.categories, data.lang:getFullName() .. " " .. args["cat3"]) end if args["cat4"] then insert(data.categories, data.lang:getFullName() .. " " .. args["cat4"]) end -- Headword linking data.nolinkhead = args["nolinkhead"] -- Inflected forms data.inflections = {enable_auto_translit = args["autotrinfl"]} for i = 1, math.ceil(args[3].maxindex / 2) do local infl_part = { label = args[3][i * 2 - 1], accel = args["faccel-form"][i] and { form = args["faccel-form"][i], translit = args["faccel-translit"][i], lemma = args["faccel-lemma"][i], lemma_translit = args["faccel-lemma-translit"][i], gender = args["faccel-gender"][i], nostore = args["faccel-nostore"][i], } or nil, request = args["frequest"][i], enable_auto_translit = args["fautotr"][i], } local form = { term = args[3][i * 2], alt = args["falt"][i], genders = args["fg"][i] and mw.text.split(args["fg"][i], ",") or {}, id = args["fid"][i], lang = args["flang"][i], nolinkinfl = args["fnolink"][i], q = {args["fqual"][i]}, sc = args["fsc"][i], translit = args["ftr"][i], transcription = args["fts"][i], } -- If no term or alt is given, then the label is shown alone. if form.term or form.alt then insert(infl_part, form) end if infl_part.label == "or" then -- Append to the previous inflection part, if one exists if #infl_part > 0 and data.inflections[1] then insert(data.inflections[#data.inflections], form) end elseif infl_part.label then -- Add a new inflection part insert(data.inflections, infl_part) end end return m_headword.full_headword(data) end return export 7q8bwcmtluydlh9q2u3or79w9lje4pi apple 0 620 36760 36579 2026-08-12T22:33:08Z Ghybu 12 /* ئینگلیزی */ 36760 wikitext text/x-wiki == ئینگلیزی == [[پەڕگە:Red Apple.jpg|thumb|A red '''apple''']] [[پەڕگە:Granny Smith Apples.jpg|thumb|A green '''apple''']] === گۆکردن === * {{IPA|en|/ˈæp.əl/|[ˈæp.ɫ̩]}} * {{دەنگ|en|en-us-apple.ogg}} === ناو === {{en-noun}} # [[سێو]] # [[دارسێو]] d3vqv78g78ld34gbjefayoj5wypw332 blue 0 840 36804 36578 2026-08-13T11:47:48Z Ghybu 12 /* ھاوەڵناو */ {{en-adj}} not work 36804 wikitext text/x-wiki == ئینگلیزی == [[پەڕگە:Blue wall.jpg|thumb]] === گۆکردن === * {{دەنگ|en|En-us-blue.ogg|ئەمریکی}} * {{دەنگ|en|En-uk-blue.ogg|بەریتانی}} * {{دەنگ|en|EN-AU ck1 blue.ogg|ئوسترالی}} === ھاوەڵناو === {{head|en|ھاوەڵناو}} # [[شین]] === ناو === {{en-noun|~}} # ڕەنگی [[شین]] == سەرچاوەکان == * فەرھەنگی ڤەژین * [https://dictionary.cambridge.org/ زانکۆی کامبرێج] [[پۆل:ئینگلیزی]] f9vvar4j2zkpnttmbe1z0hhqub9nsm9 görünüş 0 1614 36755 22830 2026-08-12T21:18:21Z Ghybu 12 36755 wikitext text/x-wiki == تورکی == === وشەڕەتناسی === {{واڵا}} ===ناو === {{head|tr|ناو{{ # بینی (رابردوو) ef0z594oy9s2wkusgofwzc8tpu6rsjs 36756 36755 2026-08-12T21:18:57Z Ghybu 12 /* تورکی */ 36756 wikitext text/x-wiki == تورکی == === وشەڕەتناسی === {{واڵا}} ===ناو === {{head|tr|ناو}} # بینی (رابردوو) mmflp73pmkry4nc9d8jkkqtz0fff69j revision 0 2586 36795 22944 2026-08-13T01:22:52Z Ghybu 12 36795 wikitext text/x-wiki == ئینگلیزی == === وشەڕەتناسی === {{واڵا}} === ناو === {{en-noun|~}} #پێداچوونەوە، پێداچوونەوە بۆ شتێک === سەرچاوەکان === * فەرھەنگی ڤەژین * [https://dictionary.cambridge.org/ زانکۆی کامبرێج] elykrxpq3qkei8dvgsu7l0glo9825zo пожарный 0 3711 36789 28727 2026-08-13T01:02:41Z Ghybu 12 /* ڕووسی */ 36789 wikitext text/x-wiki == ڕووسی == === وشەڕەتناسی === {{واڵا}} === ناو === {{head|ru|ناو}} # ئۆتۆمبێلی ئاگر کوژێنەوە [[پۆل:زمانی ڕووسی]] 5weii6kt10dugm82orbggu5376ethre 36790 36789 2026-08-13T01:02:54Z Ghybu 12 36790 wikitext text/x-wiki == ڕووسی == === وشەڕەتناسی === {{واڵا}} === ناو === {{head|ru|ناو}} # ئۆتۆمبێلی ئاگر کوژێنەوە eesabob3c8c5t4ja9rvzfwkf5r35nos باوک 0 4741 36781 33743 2026-08-12T23:20:55Z Ghybu 12 /* کوردیی ناوەندی */ 36781 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی=== {{واڵا}} ==== ناو ==== {{ckb-noun}} # یەکێک لە [[باوان]] کە [[نێر]] بێت. #: '''''باوکم''' ناوی ئیبراھیمە، منیش ناوم کەریمە.'' {{C|ckb|خێزان}} [[پۆل:وشە چوار پیتییە کوردییەکان]] nu77rtoj6td7frshqegfwt9eks4xeg7 خۆڵەڕێژ 0 5035 36786 31211 2026-08-13T00:26:06Z Ghybu 12 /* کوردیی ناوەندی */ 36786 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} ====ناو==== {{ckb-noun}} # پارچە تەنەکە یان پلاستیکێکە کە بە [[گسک]] خۆڵوخشاکی تێ دەکرێت. ====ھاوماناکان==== {{واڵا}} ====وەرگێڕانەکان==== {{وەرگێڕان-سەر|ناو}} * عەرەبی: {{t|ar|لقاطة}} * فارسی: {{t|fa|خاک‌انداز}} {{trans-mid}} * ئینگلیزی: {{t+|en|dustpan}} * ئیسپانی: {{t|es|recogedor}} {{وەرگێڕان-بن}} ====سەرچاوەکان==== <references /> [[پۆل:وشە حەوت پیتییە کوردییەکان]] g0w49b7hqom2o1azwm2ilqj1av6y3lj مانگ 0 6047 36782 30333 2026-08-12T23:23:41Z Ghybu 12 /* کوردیی ناوەندی */ 36782 wikitext text/x-wiki == کوردیی ناوەندی == [[file:FullMoon2010.jpg|thumb|مانگ]] === ناو === {{ckb-noun}} # مانگی دەستکردی [[زەوی]]. ئەستێرەژمێریدا ھێمای [[☽︎]] و[[☾]]ی بۆ دانراوە. ==== وەرگێڕانەکان ==== {{وەرگێڕان-سەر|میوەیە}} * ئینگلیزی: {{t+|en|moon}} * فەڕەنسی: {{t+|fr|lune|f}} * عەرەبی: {{t+|ar|قمر}} {{وەرگێڕان-بن}} s7zyo6fxa4cs9whzv5lgl0ix7plici9 چاوشارکێ 0 6664 36778 32191 2026-08-12T23:01:33Z Ghybu 12 /* کوردیی ناوەندی */ 36778 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} ====ناو==== {{ckb-noun}} یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت، تێیدا یەکێک لە یاریکەرەکان چاوی دادەخات و لەو کاتەدا یاریکەرەکانی دیکە خۆیان دەشارنەوە.<ref>فەرهەنگی خاڵ</ref> یارییەکە کەلتوورێکی جیهانییە. ====ھاوماناکان==== * قەرەقەرە<ref>قەرەقەرە، هەنبانە بەرۆینە.</ref> * خۆشاردنەوانێ ====وەرگێڕانەکان==== {{وەرگێڕان-سەر|یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت. یارییەکە کەلتوورێکی جیهانییە}} * عەرەبی: {{t|ar|غميضة}} * فارسی: {{t+|fa|قایم‌موشک}} {{trans-mid}} * ئینگلیزی: {{t+|en|Hide-and-seek}} {{وەرگێڕان-بن}} == سەرچاوەکان == <references /> h9az3bdqok2dd5a6hoavrdlvt75swh8 36779 36778 2026-08-12T23:01:49Z Ghybu 12 /* سەرچاوەکان */ 36779 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} ====ناو==== {{ckb-noun}} یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت، تێیدا یەکێک لە یاریکەرەکان چاوی دادەخات و لەو کاتەدا یاریکەرەکانی دیکە خۆیان دەشارنەوە.<ref>فەرهەنگی خاڵ</ref> یارییەکە کەلتوورێکی جیهانییە. ====ھاوماناکان==== * قەرەقەرە<ref>قەرەقەرە، هەنبانە بەرۆینە.</ref> * خۆشاردنەوانێ ====وەرگێڕانەکان==== {{وەرگێڕان-سەر|یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت. یارییەکە کەلتوورێکی جیهانییە}} * عەرەبی: {{t|ar|غميضة}} * فارسی: {{t+|fa|قایم‌موشک}} {{trans-mid}} * ئینگلیزی: {{t+|en|Hide-and-seek}} {{وەرگێڕان-بن}} === سەرچاوەکان === <references /> retgf802jp4q2jsou87k7xdzvh3at4t 36780 36779 2026-08-12T23:02:50Z Ghybu 12 /* ناو */ 36780 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} ====ناو==== {{ckb-noun}} # یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت، تێیدا یەکێک لە یاریکەرەکان چاوی دادەخات و لەو کاتەدا یاریکەرەکانی دیکە خۆیان دەشارنەوە.<ref>فەرهەنگی خاڵ</ref> یارییەکە کەلتوورێکی جیهانییە. ====ھاوماناکان==== * قەرەقەرە<ref>قەرەقەرە، هەنبانە بەرۆینە.</ref> * خۆشاردنەوانێ ====وەرگێڕانەکان==== {{وەرگێڕان-سەر|یارییەکی منداڵانە کە لانی کەم دوو، سێ یان زیاتر ئەنجام دەدرێت. یارییەکە کەلتوورێکی جیهانییە}} * عەرەبی: {{t|ar|غميضة}} * فارسی: {{t+|fa|قایم‌موشک}} {{trans-mid}} * ئینگلیزی: {{t+|en|Hide-and-seek}} {{وەرگێڕان-بن}} === سەرچاوەکان === <references /> 0mjf7pu4h0rlc1b4ubr78x4cduvh6h7 ڕه‌مه‌زان 0 6728 36783 30331 2026-08-12T23:26:59Z Ghybu 12 /* کوردیی ناوەندی */ 36783 wikitext text/x-wiki == کوردیی ناوەندی == === وشەڕەتناسی === {{واڵا}} === گۆکردن === * {{ckb-IPA}} === ناو === {{ckb-noun}} # ? ==== وەرگێڕانەکان ==== {{وەرگێڕان-سەر|میوەیە}} * عەرەبی: {{t+|ar|رمضان}} {{وەرگێڕان-بن}} phss2luc2tbbm0cyad2db0j9v9gv57e ڕەمەزان 0 6794 36807 32304 2026-08-13T11:58:49Z Ghybu 12 /* کوردیی ناوەندی */ 36807 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} ====ناو==== {{ckb-noun}} # نۆیەم مانگی [[ڕۆژژمێری کۆچی]]یە کە [[موسڵمانان]] تێیدا بە[[ڕۆژوو]] دەبن. # [[جەژن]]ی ڕەمەزان، کە لە شەوی ٣٠ یان ٣١ی مانگی ڕەمەزان دەست پێ دەکات و سێ ڕۆژ دەخایەنێت. # ناوێکی عەرەبیی کوڕانەیە. ====وەرگێڕانەکان==== {{وەرگێڕان-سەر|نۆیەم مانگی ڕۆژژمێری کۆچی}} * عەرەبی: {{t|ar|رمضان}} * فارسی: {{t+|fa|رمضان}} {{trans-mid}} * ئینگلیزی: {{t+|en|Ramadan}} {{وەرگێڕان-بن}} [[پۆل:وشە حەوت پیتییە کوردییەکان]] p9th8piu8fe74laeg01w25nxt3v6yhq پۆل:ئینگلیزی 14 7280 36788 29981 2026-08-13T00:51:21Z Ghybu 12 ڕەوانەکەرەکەی بۆ [[پۆل:زمانی ئینگلیزی]] داندرا بوو لابرد 36788 wikitext text/x-wiki {{ڕەوانەکەری پۆل|زمانی ئینگلیزی}} [[پۆل:ھەموو زمانەکان]] dy9xi9twi6jt49iqjup8uyr40egzzmw gund 0 7518 36785 36695 2026-08-13T00:11:08Z Ghybu 12 /* کرمانجی */ 36785 wikitext text/x-wiki == کرمانجی == === ناو === {{kmr-noun|m}} # [[دێ]] p7poceeqpe0c79a3nxjup9xdof3pj0l clothes 0 7593 36805 32653 2026-08-13T11:51:54Z Ghybu 12 36805 wikitext text/x-wiki == کوردیی ناوەندی == === ناو === {{en-noun|p}} # [[جلوبەرگ]] 5hwvuah85eivl4k81gdn4iedlkw4d3x لالیگا 0 8261 36754 32918 2026-08-12T21:17:37Z Ghybu 12 36754 wikitext text/x-wiki == کوردیی ناوەندی == ===وشەڕەتناسی === {{واڵا}} === ناو === {{ckb-noun}} # خولی تۆپی پێی ئیسپانیایە ناسراو بە لا لیگا ebiwsacr8fvqk7c3u2ad9t412bxpnhq مۆدیوول:category tree/languages 828 9310 36758 35044 2026-08-12T22:27:12Z Ghybu 12 lemmas => لەما 36758 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 location_categories = {} 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" -- Load the location translation module local location_translation = require("Module:category tree/location translation") 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/languages/PAGE]] return require("Module:debug/track")("category tree/languages/" .. page) end -- This handles language categories of the form e.g. [[:Category:French language]] and -- [[:Category:British Sign Language]]; categories like [[:Category:Languages of Indonesia]]; categories like -- [[:Category:English-based creole or pidgin languages]]; and categories like -- [[:Category:English-based constructed languages]]. ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["ھەموو زمانەکان"] = { topright = "{{commonscat|Languages}}\n[[File:Languages world map-transparent background.svg|thumb|left|250px|نەخشەی جیھانیی سەرەتاییی بنەماڵەی زمانەکان]]", description = "ئەم پۆلە سەرجەم پۆلی زمانەکانی سەر ویکیفەرھەنگی تێدایە.", additional = "بەڵام مەرج نییە سەرجەم ئەو زمانانەی کە ویکیفەرھەنگ دەیانناسێت لێرەدا پۆلێکیان ھەبێت. پۆلگەلێک ھەن کە ھێشتا سەرنجی دەستکاریکەرانیان بەلادا نەچووە، " .. "کە ھۆکارە سەرەکییەکەشی ئەوەیە سەرجەم بەکارھێنەرانی ویکیفەرھەنگ سەرجەم زمانەکانی ویکیفەرھەنگ نازانن. " .. "بۆ تەواوی پێڕستەکە بڕوانە [[:en:Wiktionary:List of languages|ویکیفەرھەنگ:پێڕستی زمانەکان]].", parents = { "Fundamental", }, } raw_categories["ھەموو زمانە لەناوچووەکان"] = { description = "ئەم پۆلە پۆلەکانی ھەموو [[زمانی لەناوچوو|زمانە لەناوچووەکانی]] سەر ویکیفەرھەنگ دەگرێتە خۆ", additional = "ئەم پۆلەت لەگەڵ [[:پۆل:زمانە لەناوچووەکان]] لێ تێک نەچێ، کە پۆلێکی گشتگیرە بۆ ناوەکانی زمانە لەناوچووەکان بە زمانە دیاریکراوەکانی ترەوە (بۆ نموونە {{m+|de|Langobardisch}} بۆ زمانی کۆنی [[Lombardic]]).", parents = { "ھەموو زمانەکان", }, } raw_categories["زمانەکان بەپێی وڵات"] = { topright = "{{commonscat|Languages by continent}}", description = "ئەو پۆلانەی کە زمانەکان بەپێی وڵات دەکەنە گرووپ.", additional = "{{{umbrella_meta_msg}}}", parents = { "ھەموو زمانەکان", }, } raw_categories["Language isolates"] = { topright = "{{wikipedia|Language isolate}}\n{{commonscat|Language isolates}}", description = "Languages with no known relatives.", parents = { {name = "Languages by family", sort = "*Isolates"}, {name = "All language families", sort = "Isolates"}, }, } 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 = "Requests"}, }, hidden = true, } ----------------------------------------------------------------------------- -- -- -- RAW HANDLERS -- -- -- ----------------------------------------------------------------------------- -- Given a category (without the "Category:" 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/lects]]. local function scrape_category_for_auto_cat_args(cat) local cat_page = mw.title.new("Category:" .. 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 "گەل" or "" if #wiktionarylinks == 0 then wiktionarylinks = "''نییە.''" end if setsister then track("setsister") if setsister == "-" then track("setsister/hyphen") else setsister = "Category:" .. setsister end else setsister = lang:getCommonsCategory() or "-" end return concat{ [=[<div class="wikitable" style="float: left; clear: right; margin: 0 1em 0.5em 0; 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 lightgray;" | [[File:Wikipedia-logo-v2.svg|35px|none|ویکیپیدیا]] | style="border-bottom: 1px solid lightgray;" | '''ویکیپیدیای کوردیی ناوەندی''' وتارێکی ھەیە لەسەر: <div style="padding: 5px 10px">]=], (setwiki == "-" and "''نییە.''" or "'''[[w:" .. wikipediaArticle .. "|" .. wikipediaArticle .. "]]'''"), [=[</div> |- | style="vertical-align: top; height: 35px; border-bottom: 1px solid lightgray;" | [[File:Wikimedia-logo.svg|35px|none|ویکیمیدیا کامنز]] | style="border-bottom: 1px solid lightgray;" | '''ویکیمیدیا کامنز''' بەستەری پەیوەندیداری بە ناوەڕۆکی ]=], canonicalName, [=[ لە پڕۆژە خوشکەکان ھەیە: <div style="padding: 5px 10px">]=], (setsister == "-" and "''نییە.''" or "'''[[commons:" .. setsister .. "|" .. setsister .. "]]'''"), [=[</div> |- | style="vertical-align: top; height: 35px; width: 40px; border-bottom: 1px solid lightgray;" | [[File:Wiktionary-logo-v2.svg|35px|none|ویکیفەرھەنگ]] |style="border-bottom: 1px solid lightgray;" | '''چاپی ویکیفەرھەنگ''']=], wikt_plural, [=[ نووسراو بە ]=], canonicalName, [=[: <div style="padding: 5px 10px">]=], wiktionarylinks, [=[</div> |- | style="vertical-align: top; height: 35px; border-bottom: 1px solid lightgray;" | [[File:Open book nae 02.svg|35px|none|سەروشە]] | style="border-bottom: 1px solid lightgray;" | '''سەروشەی ویکیفەرھەنگ''' بۆ ناوی کوردیی زمانەکە: <div style="padding: 5px 10px">''']=], require("Module:links").full_link({lang = m_languages.getByCode("ckb"), term = entryname or canonicalName}), [=['''</div> |- | style="vertical-align: top; height: 35px;" | [[File:Crystal kfind.png|35px|none|گرنگییەکان]] || '''سەرچاوەکانی ویکیفەرھەنگ''' بۆ ئەو دەستکاریکەرانەی بەشداری لە سەروشەکانی ]=], canonicalName, [=[ دەکەن: <div style="padding: 5px 0"> * '''[[Wiktionary:]=], canonicalName, [=[ entry guidelines]]''' * '''[[:Category:]=], canonicalName, [=[ reference templates|Reference templates]] ({{PAGESINCAT:]=], canonicalName, [=[ reference templates}})''' * '''[[Appendix:]=], canonicalName, [=[ bibliography|Bibliography]]''' |} </div>]=] } end local function edit_link(title, text) return '<span class="plainlinks">[' .. tostring(mw.uri.fullUrl(title, { action = "edit" })) .. ' ' .. 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('"', "&quot;") -- & in attributes is automatically escaped. -- :gsub("&", "&amp;") :gsub("<", "&lt;") :gsub(">", "&gt;") 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 mw.log(lang:getDataModuleName()); 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>Varieties</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>unclassified</td>") elseif famCode == "qfa-iso" then insert(ret, "<td>[[:Category:Language isolates|language isolate]]</td>") elseif famCode == "qfa-mix" then insert(ret, "<td>[[:Category:Mixed languages|mixed language]]</td>") elseif famCode == "sgn" then insert(ret, "<td>[[:Category:Sign languages|sign language]]</td>") elseif famCode == "crp" then insert(ret, "<td>[[:Category:Creole or pidgin languages|creole or pidgin]]</td>") elseif famCode == "art" then insert(ret, "<td>[[:Category:Constructed languages|constructed language]]</td>") else insert(ret, "<td>" .. fam:makeCategoryLink() .. "</td>") end insert(ret, "\n</tr>\n<tr>\n<th>باووباپیران</th>\n") 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, "unknown") 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, "[[:en:Wiktionary:Transliteration and romanization|مۆدیوولی<br>پیتنووسی]]") add_module_info(raw_data.display_text, "مۆدیوولی<br>دەقی پیشاندان") add_module_info(raw_data.entry_name, "مۆدیوولی<br>ناوی سەروشە") add_module_info(raw_data.sort_key, "مۆدیوولی<br>[[sortkey|ڕیزکردن]]") local wikidataItem = lang:getWikidataItem() if lang:getWikidataItem() and mw.wikibase then local URL = mw.wikibase.getEntityUrl(wikidataItem) local link if URL then link = '[' .. URL .. ' ' .. wikidataItem .. ']' else link = '<span class="error">بەندی ویکیدراوەی نادروست: <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(content, title) return '<div class="NavFrame"><div class="NavHead">' .. (title or '{{{title}}}') .. '</div>' .. '<div class="NavContent" style="text-align: right;">' .. 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 = "This is the main category of the '''" .. nameWithLanguage .. "''', represented in Wiktionary by the [[Wiktionary:Languages|code]] '''" .. lang:getCode() .. "'''. " .. "This language contains terms in historical writing, whose meaning has not yet been determined by scholars." return description, nil, nil end local canonicalName = lang:getCanonicalName() local topright = linkbox(lang, setwiki, setwikt, setsister, entryname) local the_prefix if canonicalName:find("^زمانی ") then the_prefix = "" else the_prefix = "the " end local description = "ئەمە پۆلی سەرەکیی " .. "'''" .. nameWithLanguage .. "یە'''." local location_links = {} local prep local saw_embedded_comma = false for _, location in ipairs(locations) do local this_prep if location == "the world" then this_prep = "across" insert(location_links, location) elseif location ~= "UNKNOWN" then this_prep = "" -- Removed "لە" > Test page: [[پۆل:زمانی بوریاتی]] 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, "; ", "; and ") else location_link_text = serial_comma_join(location_links) end location_desc = ("لە %s %s %s.\n\n"):format( location_link_text, prep, extinct and "an [[extinct language]] that was formerly spoken" or "قسەی پێ دەکرێت") elseif extinct then location_desc = "[[زمانی لەناوچوو|زمانێکی لەناوچووە]].\n\n" else location_desc = "" end local add = location_desc .. "زانیاری لەسەر " .. canonicalName .. ":\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 about = new_title("Wiktionary:About " .. canonicalName) if about.exists then add = add .. "\n\n" .. "Please see '''[[Wiktionary:About " .. canonicalName .. "]]''' 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( tree_of_descendants, "Family tree") else add = add .. "\n\n" .. ucfirst(lang:getCanonicalName()) .. " 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 = "en"} 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 = "Category:Unclassified languages", sort = sortkey}) elseif famCode == "qfa-iso" then insert(ret, {name = "Category:Language isolates", sort = sortkey}) elseif famCode == "qfa-mix" then insert(ret, {name = "Category:Mixed languages", sort = sortkey}) elseif famCode == "sgn" then insert(ret, {name = "Category:All sign languages", sort = sortkey}) elseif famCode == "crp" then insert(ret, {name = "Category:Creole or pidgin languages", sort = sortkey}) for _, anc in ipairs(lang:getAncestors()) do -- Avoid Haitian Creole being categorised in [[:Category: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 = "Category:" .. ucfirst(anc_extra:getFullName()) .. "-based creole or pidgin languages", sort = sortkey}) end else insert(ret, {name = "Category:" .. ucfirst(anc:getFullName()) .. "-based creole or pidgin languages", sort = sortkey}) end end elseif famCode == "art" then if lang:hasType("appendix-constructed") then insert(ret, {name = "Category:Appendix-only constructed languages", sort = sortkey}) else insert(ret, {name = "Category:Constructed languages", 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 = "Category:" .. ucfirst(anc_extra:getFullName()) .. "-based constructed languages", sort = sortkey}) end else insert(ret, {name = "Category:" .. ucfirst(anc:getFullName()) .. "-based constructed languages", sort = sortkey}) end end else insert(ret, {name = "Category:" .. fam:getCategoryName(), sort = sortkey}) if lang:hasType("reconstructed") then insert(ret, { name = "Category:Reconstructed languages", sort = {sort_base = canonicalName:gsub("^Proto%-", ""), lang = "en"} }) end end local function add_sc_cat(sc) insert(ret, {name = "Category:زمانەکانی " .. 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 = "Category:Languages with automatic transliteration", sort = sortkey}) end local function insert_location_language_cat(location) local cat = "زمانەکانی " .. location insert(ret, {name = "Category:" .. 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 = "Category:ھەموو زمانە لەناوچووەکان", 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 = "Category:Languages not sorted into a location category", 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", "ڕاگرتنی سەروشە", "لەما", "names", "phrases", "rhymes", "symbols", "templates", "terms by etymology", "terms by usage"}) do insert(ret, {name = label, is_label = true}) end insert(ret, {name = "terms derived from {{{langname}}}", is_label = true, lang = false}) insert(ret, {name = "{{{langcode}}}:ھەموو بابەتەکان", sort = "ھەموو بابەتەکان"}) insert(ret, {name = "Varieties of {{{langname}}}"}) insert(ret, {name = "Requests concerning {{{langname}}}"}) insert(ret, {name = "Rhymes:{{{langname}}}", description = "Lists of {{{langname}}} words by their rhymes."}) insert(ret, {name = "User {{{langcode}}}", description = "Wiktionary users categorized by fluency levels in {{{langdisp}}}."}) return ret end -- Handle language categories of the form e.g. [[:Category:French language]] and -- [[:Category:British Sign Language]]. insert(raw_handlers, function(data) local category = data.category if not (category:match("^زمانی ") or category:match("[Ll]ect$")) then return nil 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 [[:Category: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(", .*", "") -- Attempt to get translated name; fallback to original if missing. -- This ensures flags use translated names when available. local translated_basename = location_translation[basename] or basename -- If translation is missing, log and categorize for tracking. if translated_basename == basename then table.insert(location_categories, "[[Category:Categories where the location translation is not recorded]]") mw.log("Translation not found for location basename: " .. basename) end if args.flagfile ~= "-" then local flagfile_arg = args.flagfile or ("Flag of %s.svg"):format(translated_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|left|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 = "en"}}) 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 = "Category:" .. locationcat, sort = " Languages"}) end else local location_cat = ("Category:%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 = ("پۆلەکانی زمانەکانی %s (بە زار و بنزار و کەمینەکانیشەوە)."):format(location_link) return { topright = topright, description = description, parents = parents, breadcrumb = bare_basename, additional = "{{{umbrella_msg}}}", }, true end end) -- Handle categories such as [[:Category: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 = "Creole or pidgin languages", sort = {sort_base = "*" .. langname, lang = "en"}}}, breadcrumb = lang:getCanonicalName() .. "-based", } end end end) -- Handle categories such as [[:Category: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 = "Constructed languages", sort = {sort_base = "*" .. langname, lang = "en"}}}, breadcrumb = lang:getCanonicalName() .. "-based", } end end end) return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers, LOCATION_CATEGORIES = location_categories} n7sdteo87025rrknnlkzu93ipcds0w1 مۆدیوول:category tree/lemmas 828 9311 36747 36739 2026-08-12T20:41:19Z Ghybu 12 36747 Scribunto text/plain local labels = {} local raw_categories = {} local handlers = {} ----------------------------------------------------------------------------- -- -- -- LABELS -- -- -- ----------------------------------------------------------------------------- local diminutive_augmentative_poses = { "adjectives", "adverbs", "interjections", "nouns", "numerals", "prefixes", "proper nouns", "pronouns", "suffixes", "verbs" } labels["لەما"] = { description = "{{{langname}}} [[Wiktionary:Lemmas|lemmas]], categorized by their part of speech.", umbrella_parents = "Fundamental", parents = {{name = "{{{langcat}}}", raw = true, sort = " "}}, } labels["abstract verbs"] = { description = "{{{langname}}} abstract verbs of motion whose motion is multidirectional (as opposed to unidirectional) or indirect, or whose action is repeated or in a series, instead of being a single, completed action. Abstract verbs are always imperfective in aspect, even with prefixes that are normally associated with the perfective aspect.", additional = "See also [[abstract verb]].", parents = {"کار"}, } labels["action nouns"] = { description = "{{{langname}}} nouns denoting action of a verb or verbal root that it is derived from.", parents = {"ناو"}, } labels["act-related adverbs"] = { description = "{{{langname}}} adverbs that indicate the motive or other background information for an action.", parents = {"adverbs"}, } labels["active verbs"] = { description = "{{{langname}}} verbs that indicate an activity", parents = {"کار"}, } labels["adjective concords"] = { description = "{{{langname}}} concords that are prefixed to adjective stems.", parents = {"concords"}, } labels["ھاوەڵناو"] = { description = "{{{langname}}} terms that give attributes to nouns, extending their definitions.", parents = {"لەما"}, } labels["adverbial accusatives"] = { description = "Accusative case-forms in {{{langname}}} used as adverbs.", parents = {"adverbs"}, } labels["adverbs"] = { description = "{{{langname}}} terms that modify clauses, sentences and phrases directly.", parents = {"لەما"}, } labels["affixes"] = { description = "Morphemes attached to existing {{{langname}}} words.", parents = {"morphemes"}, } labels["agent nouns"] = { description = "{{{langname}}} nouns that denote an agent that performs the action denoted by the verb from which the noun is derived.", parents = {"ناو"}, } labels["ambipositions"] = { description = "{{{langname}}} adpositions that can occur either before or after their objects.", parents = {"لەما"}, } labels["ambitransitive verbs"] = { description = "{{{langname}}} verbs that may or may not direct actions, occurrences or states to grammatical objects.", parents = {"verbs", "transitive verbs", "intransitive verbs"}, } labels["animal commands"] = { description = "{{{langname}}} words used to communicate with animals.", parents = {"interjections"}, } labels["articles"] = { description = "{{{langname}}} terms that indicate and specify nouns.", parents = {"determiners"}, } labels["aspect adverbs"] = { description = "{{{langname}}} adverbs that express [[w:Grammatical aspect|grammatical aspect]], describing the flow of time in relation to a statement.", parents = {"adverbs"}, } for _, pos in ipairs(diminutive_augmentative_poses) do labels["augmentative " .. pos] = { description = "{{{langname}}} " .. pos .. " that are derived from a base word to convey big size or big intensity.", parents = {pos}, } end labels["attenuative verbs"] = { description = "{{{langname}}} verbs that indicate that an action or event is performed or takes place gently, lightly, partially, perfunctorily or to an otherwise reduced extent.", parents = {"کار"}, } labels["autobenefactive verbs"] = { description = "{{{langname}}} verbs that indicate that the agent of an action is also its benefactor.", parents = {"کار"}, } labels["automative verbs"] = { description = "{{{langname}}} verbs that indicate actions directed at or a change of state of the grammatical subject.", parents = {"کار"}, } labels["auxiliary verbs"] = { description = "{{{langname}}} verbs that provide additional conjugations for other verbs.", parents = {"کار"}, } labels["biaspectual verbs"] = { description = "{{{langname}}} verbs that can be both imperfective and perfective.", parents = {"کار"}, } labels["causative verbs"] = { description = "{{{langname}}} verbs that express causing actions or states rather than performing or being them directly. Use this only for separate verbs (as opposed to causative forms that are part of the inflection of verbs).", parents = {"کار"}, } labels["circumfixes"] = { description = "Affixes attached to both the beginning and the end of {{{langname}}} words, functioning together as single units.", parents = {"morphemes"}, } labels["circumpositions"] = { description = "{{{langname}}} adpositions that appear on both sides of their objects.", parents = {"لەما"}, } labels["classifiers"] = { description = "{{{langname}}} terms that classify nouns according to their meanings.", parents = {"لەما"}, } labels["clitics"] = { description = "{{{langname}}} morphemes that function as independent words, but are always attached to another word.", parents = {"morphemes"}, } for _, pos in ipairs { "nouns", "suffixes" } do labels["collective " .. pos] = { description = "{{{langname}}} " .. pos .. " that indicate groups of related things or beings, without the need of grammatical pluralization.", parents = {pos}, } end labels["combining forms"] = { description = "Forms of {{{langname}}} words that do not occur independently, but are used when joined with other words.", parents = {"morphemes"}, } labels["comparable adjectives"] = { description = "{{{langname}}} adjectives that can be inflected to display different degrees of comparison.", parents = {"ھاوەڵناو"}, } labels["comparable adverbs"] = { description = "{{{langname}}} adverbs that can be inflected to display different degrees of comparison.", parents = {"adverbs"}, } labels["comparative-only adjectives"] = { description = "{{{langname}}} adjectives that are only used in their comparative forms.", parents = {"ھاوەڵناو"}, } labels["completive verbs"] = { description = "{{{langname}}} verbs which refer to the completion of an action which has already commenced or which has already been performed upon a subset of the entities which it affects.", parents = {"کار"}, } labels["concords"] = { description = "{{{langname}}} prefixes attached to words to show agreement with a noun or pronoun.", parents = {"prefixes"}, } labels["concrete verbs"] = { description = "{{{langname}}} concrete verbs refer to a verbal aspect in verbs of motion that is unidirectional (as opposed to multidirectional), a definitely directed motion, or a single, completed action (instead of a repeated action or series of actions). Concrete verbs may be either imperfective or perfective.", additional = "See also [[concrete verb]].", parents = {"کار"}, } labels["conjunctions"] = { description = "{{{langname}}} terms that connect words, phrases or clauses together.", parents = {"لەما"}, } labels["conjunctive adverbs"] = { description = "{{{langname}}} adverbs that connect two independent clauses together.", parents = {"adverbs"}, } labels["continuative verbs"] = { description = "{{{langname}}} verbs that express continuing action.", parents = {"کار"}, } labels["control verbs"] = { description = "{{{langname}}} verbs that take multiple arguments, one of which is another verb. One of the control verb's arguments is syntactically both an argument of the control verb and an argument of the other verb.", parents = {"کار"}, } labels["cooperative verbs"] = { description = "{{{langname}}} verbs that indicate cooperation", parents = {"کار"}, } labels["coordinating conjunctions"] = { description = "{{{langname}}} conjunctions that indicate equal syntactic importance between connected items.", parents = {"conjunctions"}, } labels["copulative verbs"] = { description = "{{{langname}}} verbs that may take adjectives as their complement.", parents = {"کار"}, } labels["ناوە ژماردەنییەکان"] = { description = "ناوە ژماردەنییە {{{langname}}}یەکان کە دەتوانرێت ڕاستەوخۆ بە ژمارەیی بپێورێت.", parents = {"ناوەکان"}, } labels["ناوە تایبەتەکان"] = { description = "ناوە تایبەتە {{{langname}}}یەکان کە دەتوانرێت ڕاستەوخۆ بە ژمارەیی بپێورێت.", parents = {"ناوەکان"}, } labels["countable numerals"] = { description = "{{{langname}}} numerals that can be quantified directly by other numerals.", parents = {"numerals"}, } labels["countable suffixes"] = { description = "{{{langname}}} suffixes that can be used to form nouns that can be quantified directly by numerals.", parents = {"numerals"}, } labels["counters"] = { description = "{{{langname}}} terms that combine with numerals to express quantity of nouns.", parents = {"لەما"}, } labels["cumulative verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event gradually yields a certain or significant quantity or effect.", parents = {"کار"}, } labels["degree adverbs"] = { description = "{{{langname}}} adverbs that express a particular degree to which the word they modify applies.", parents = {"adverbs"}, } labels["delimitative verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event is performed or takes place briefly or to an otherwise reduced extent.", parents = {"کار"}, } labels["demonstrative adjectives"] = { description = "{{{langname}}} adjectives that refer to nouns, comparing them to external references.", parents = {"adjectives", {name = "demonstrative pro-forms", sort = "adjectives"}}, } labels["demonstrative adverbs"] = { description = "{{{langname}}} adverbs that refer to other adverbs, comparing them to external references.", parents = {"adverbs", {name = "demonstrative pro-forms", sort = "adverbs"}}, } labels["denominal verbs"] = { -- in [[Appendix:Glossary]]; "denominative" more frequent? description = "{{{langname}}} verbs that derive from nouns.", parents = { "verbs" }, } labels["demonstrative determiners"] = { description = "{{{langname}}} determiners that refer to nouns, comparing them to external references.", parents = {"determiners", {name = "demonstrative pro-forms", sort = "determiners"}}, } labels["demonstrative pronouns"] = { description = "{{{langname}}} pronouns that refer to nouns, comparing them to external references.", parents = {"pronouns", {name = "demonstrative pro-forms", sort = "pronouns"}}, } labels["deponent verbs"] = { description = "{{{langname}}} verbs that have active meanings but are not conjugated in the active voice.", parents = {"کار"}, } labels["derivational prefixes"] = { description = "{{{langname}}} prefixes that are used to create new words.", parents = {"prefixes"}, } labels["derivational suffixes"] = { description = "{{{langname}}} suffixes that are used to create new words.", parents = {"suffixes"}, } labels["derivative verbs"] = { description = "{{{langname}}} verbs that are derived from nouns and adjectives.", parents = {"کار"}, } labels["desiderative verbs"] = { description = "{{{langname}}} verbs with the following morphology: verbal root xxx + [[desiderative]] affix, and the following semantics: to wish to do the action xxx.", parents = {"کار"}, } labels["determinatives"] = { description = "{{{langname}}} terms that indicate the general class to which the following logogram belongs.", parents = {"لەما"}, } labels["determiners"] = { description = "{{{langname}}} terms that narrow down, within the conversational context, the referent of the following noun.", parents = {"لەما"}, } labels["diminutiva tantum"] = { description = "{{{langname}}} nouns or noun senses that are mostly or exclusively used in the diminutive form.", parents = {"ناو"}, } for _, pos in ipairs(diminutive_augmentative_poses) do labels["diminutive " .. pos] = { description = "{{{langname}}} " .. pos .. " that are derived from a base word to convey endearment, small size or small intensity.", parents = {pos}, } end labels["discourse particles"] = { description = "{{{langname}}} particles that manage the flow and structure of discourse.", parents = {"particles"}, } labels["distributive verbs"] = { description = "{{{langname}}} verbs which indicate that an action or event involves multiple participants or a large quantity of an uncountable mass, usually as the grammatical subject in the case of intransitive verbs and as the grammatical object in the case of transitive verbs.", parents = {"کار"}, } labels["ditransitive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states of two grammatical objects simultaneously, one direct and one indirect.", parents = {"verbs", "transitive verbs"}, } labels["dualia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the dual form.", parents = {"ناو"}, } labels["duration adverbs"] = { description = "{{{langname}}} adverbs that express duration in time.", parents = {"time adverbs"}, } labels["ergative verbs"] = { description = "{{{langname}}} [[Appendix:Glossary#ergative|ergative verb]]s: intransitive verbs that become causatives when used transitively.", parents = {"verbs", "intransitive verbs", "transitive verbs"}, } labels["excessive verbs"] = { description = "{{{langname}}} verbs that indicate that an action is performed to an excessive extent.", parents = {"کار"}, } labels["enclitics"] = { description = "{{{langname}}} clitics that attach to the preceding word.", parents = {"clitics"}, } labels["nouns with other-gender equivalents"] = { description = "{{{langname}}} nouns that refer to gendered concepts (e.g. [[actor]] vs. [[actress]], [[king]] vs. [[queen]]) and have corresponding other-gender equivalent terms.", parents = {"ناو"}, } labels["female equivalent nouns"] = { description = "{{{langname}}} nouns that refer to female beings with the same characteristics as the base noun.", parents = {"nouns with other-gender equivalents"}, } labels["neuter equivalent nouns"] = { description = "{{{langname}}} nouns that refer to neuter beings with the same characteristics as the base noun.", parents = {"nouns with other-gender equivalents"}, } labels["female equivalent suffixes"] = { description = "{{{langname}}} suffixes that refer to female beings with the same characteristics as the base suffix.", parents = {"noun-forming suffixes"}, } labels["focus adverbs"] = { description = "{{{langname}}} adverbs that indicate [[w:Focus (linguistics)|focus]] within the sentence.", parents = {"adverbs"}, } labels["frequency adverbs"] = { description = "{{{langname}}} adverbs that express repetition with a certain frequency or interval.", parents = {"time adverbs"}, } labels["frequentative verbs"] = { description = "{{{langname}}} verbs that express repeated action.", parents = {"کار"}, } labels["general pronouns"] = { description = "{{{langname}}} pronouns that refer to all persons, things, abstract ideas and their characteristics.", parents = {"pronouns"}, } labels["generational moieties"] = { description = "{{{langname}}} moieties that alternate every generation.", parents = {"moieties"}, } labels["ideophones"] = { description = "{{{langname}}} terms that evoke an idea, especially a sensation or impression, with a sound.", parents = {"لەما"}, } labels["imperfective verbs"] = { description = "{{{langname}}} verbs that express actions considered as ongoing or continuous, as opposed to completed events.", parents = {"کار"}, } labels["impersonal verbs"] = { description = "{{{langname}}} verbs that do not indicate actions, occurrences or states of any specific grammatical subject.", parents = {"کار"}, } labels["inchoative verbs"] = { description = "{{{langname}}} verbs that indicate the beginning of an action or event.", parents = {"کار"}, } labels["indefinite adjectives"] = { description = "{{{langname}}} adjectives that refer to unspecified adjective meanings.", parents = {"adjectives", {name = "indefinite pro-forms", sort = "adjectives"}}, } labels["indefinite adverbs"] = { description = "{{{langname}}} adverbs that refer to unspecified adverbial meanings.", parents = {"adverbs", {name = "indefinite pro-forms", sort = "adverbs"}}, } labels["indefinite determiners"] = { description = "{{{langname}}} determiners that designate an unidentified noun.", parents = {"determiners", {name = "indefinite pro-forms", sort = "determiners"}}, } labels["indefinite pronouns"] = { description = "{{{langname}}} pronouns that refer to unspecified nouns.", parents = {"pronouns", {name = "indefinite pro-forms", sort = "pronouns"}}, } labels["infixes"] = { description = "Affixes inserted inside {{{langname}}} words.", parents = {"morphemes"}, } labels["inflectional prefixes"] = { description = "{{{langname}}} prefixes that are used as inflectional beginnings in noun, adjective or verb paradigms.", parents = {"prefixes"}, } labels["inflectional suffixes"] = { description = "{{{langname}}} suffixes that are used as inflectional endings in noun, adjective or verb paradigms.", parents = {"suffixes"}, } labels["intensive verbs"] = { description = "{{{langname}}} verbs which indicate that an action is performed vigorously, enthusiastically, forcefully or to an otherwise enlarged extent.", parents = {"کار"}, } labels["interfixes"] = { description = "Affixes used to join two {{{langname}}} words or morphemes together.", parents = {"morphemes"}, } labels["interjections"] = { description = "{{{langname}}} terms that express emotions, sounds, etc. as exclamations.", parents = {"لەما"}, } labels["interrogative adjectives"] = { description = "{{{langname}}} adjectives that indicate questions.", parents = {"adjectives", {name = "interrogative pro-forms", sort = "adjectives"}}, } labels["interrogative adverbs"] = { description = "{{{langname}}} adverbs that indicate questions.", parents = {"adverbs", {name = "interrogative pro-forms", sort = "adverbs"}}, } labels["interrogative determiners"] = { description = "{{{langname}}} determiners that indicate questions.", parents = {"determiners", {name = "interrogative pro-forms", sort = "determiners"}}, } labels["interrogative particles"] = { description = "{{{langname}}} particles that indicate questions.", parents = {"particles", {name = "interrogative pro-forms", sort = "particles"}}, } labels["interrogative pronouns"] = { description = "{{{langname}}} pronouns that indicate questions.", parents = {"pronouns", {name = "interrogative pro-forms", sort = "pronouns"}}, } labels["intransitive verbs"] = { description = "{{{langname}}} verbs that don't require any grammatical objects.", parents = {"کار"}, } labels["iterative verbs"] = { description = "{{{langname}}} verbs that express the repetition of an event.", parents = {"کار"}, } labels["location adverbs"] = { description = "{{{langname}}} adverbs that indicate location.", parents = {"adverbs"}, } labels["male equivalent nouns"] = { description = "{{{langname}}} nouns that refer to male beings with the same characteristics as the base noun.", parents = {"nouns with other-gender equivalents"}, } labels["manner adverbs"] = { description = "{{{langname}}} adverbs that indicate the manner, way or style in which an action is performed.", parents = {"adverbs"}, } labels["modal adverbs"] = { description = "{{{langname}}} adverbs that express [[w:Linguistic modality|linguistic modality]], indicating the mood or attitude of the speaker with respect to what is being said.", parents = {"sentence adverbs"}, } labels["modal particles"] = { description = "{{{langname}}} particles that reflect the mood or attitude of the speaker, without changing the basic meaning of the sentence.", parents = {"particles"}, } labels["modal verbs"] = { description = "{{{langname}}} verbs that indicate [[grammatical mood]].", parents = {"auxiliary verbs"}, } labels["moieties"] = { description = "{{{langname}}} pairs of abstract categories separating people and the environment.", parents = {"لەما"}, } labels["momentane verbs"] = { description = "{{{langname}}} verbs that express a sudden and brief action.", parents = {"کار"}, } labels["morphemes"] = { description = "{{{langname}}} word-elements used to form full words.", parents = {"لەما"}, } labels["multiword terms"] = { description = "{{{langname}}} lemmas that are an [[WT:CFI#Idiomaticity|idiomatic]] combination of multiple words.", parents = {"لەما"}, } labels["negative verbs"] = { description = "{{{langname}}} verbs that indicate the lack of an action.", parents = {"کار"}, } labels["negative particles"] = { description = "{{{langname}}} particles that indicate negation.", parents = {"particles"}, } labels["negative pronouns"] = { description = "{{{langname}}} pronouns that refer to negative or non-existent references.", parents = {"pronouns"}, } labels["neutral verbs"] = { description = "{{{langname}}} verbs that indicate either or both an activity or a result of an activity", parents = {"کار"}, } labels["nominalized adjectives"] = { description = "{{{langname}}} adjectives that are used as nouns.", parents = {"nouns", "adjectives"}, } labels["non-constituents"] = { description = "{{{langname}}} terms that are not grammatical [[constituent#Noun|constituents]], and therefore need to be combined with additional terms to form a complete phrase.", parents = {"phrases"}, } labels["noun prefixes"] = { description = "{{{langname}}} prefixes attached to a noun that display its noun class.", parents = {"prefixes"}, } labels["ناو"] = { description = "{{{langname}}} terms that indicate people, beings, things, places, phenomena, qualities or ideas.", parents = {"لەما"}, } labels["nouns by classifier"] = { description = "{{{langname}}} nouns organized by the classifier they are used with.", parents = {{name = "nouns", sort = "classifier"}}, } labels["numerals"] = { description = "{{{langname}}} terms that quantify nouns.", parents = {"لەما"}, } labels["object concords"] = { description = "{{{langname}}} concords used to show the grammatical object.", parents = {"concords"}, } labels["object pronouns"] = { description = "{{{langname}}} pronouns that refer to grammatical objects.", parents = {"pronouns"}, } labels["particles"] = { description = "{{{langname}}} terms that do not belong to any of the inflected grammatical word classes, often lacking their own grammatical functions and forming other parts of speech or expressing the relationship between clauses.", parents = {"لەما"}, } labels["passive verbs"] = { description = "{{{langname}}} verbs that are usually used in passive voice.", parents = {"کار"}, } labels["perfective verbs"] = { description = "{{{langname}}} verbs that express actions considered as completed events, as opposed to ongoing or continuous.", parents = {"کار"}, } labels["personal pronouns"] = { description = "{{{langname}}} pronouns that are used as substitutes for known nouns.", parents = {"pronouns"}, } labels["phrasal verbs"] = { description = "{{{langname}}} verbs accompanied by particles, such as prepositions and adverbs.", parents = {"verbs", "phrases"}, } labels["phrasal prepositions"] = { description = "{{{langname}}} prepositions formed with combinations of other terms.", parents = {"prepositions", "phrases"}, } labels["pluralia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the plural form.", parents = {"ناو"}, } labels["point-in-time adverbs"] = { description = "{{{langname}}} adverbs that reference a specific point in time, e.g. {{m|en|yesterday}}, {{m+|es|anoche||last night}} or {{m+|hu|egykor||at one o'clock}}.", parents = {"time adverbs"}, } labels["possessable nouns"] = { description = "{{{langname}}} nouns can have their possession indicated directly by possessive pronouns.", parents = {"ناو"}, umbrella = { description = "Categories with nouns that can have their possession indicated directly by possessive pronouns and, in some languages, be transformed into adjectives.", parents = {"Lemmas subcategories by language"}, breadcrumb = "Possessable nouns by language", }, } labels["possessional adjectives"] = { description = "{{{langname}}} adjectives that indicate that a noun is in possession of something.", parents = {"ھاوەڵناو"}, } labels["possessive adjectives"] = { description = "{{{langname}}} adjectives that indicate ownership.", parents = {"ھاوەڵناو"}, } labels["possessive concords"] = { description = "{{{langname}}} concords used to show possession.", parents = {"concords"}, } labels["possessive determiners"] = { description = "{{{langname}}} determiners that indicate ownership.", parents = {"determiners"}, } labels["possessive pronouns"] = { description = "{{{langname}}} pronouns that indicate ownership.", parents = {"pronouns"}, } labels["postpositional phrases"] = { description = "{{{langname}}} phrases headed by a postposition.", parents = {"phrases", "postpositions"}, } labels["postpositions"] = { description = "{{{langname}}} adpositions that are placed after their objects.", parents = {"لەما"}, } labels["predicatives"] = { description = "{{{langname}}} elements of the predicate that supplement the subject or object of a sentence via the verb.", parents = {"لەما"}, } labels["prefixes"] = { description = "Affixes attached to the beginning of {{{langname}}} words.", parents = {"morphemes"}, } labels["prepositional phrases"] = { description = "{{{langname}}} phrases headed by a preposition.", parents = {"phrases", "prepositions"}, } labels["prepositions"] = { description = "{{{langname}}} adpositions that are placed before their objects.", parents = {"لەما"}, } labels["ablative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the ablative case.", parents = {"prepositions"}, } labels["accusative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the accusative case.", parents = {"prepositions"}, } labels["dative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the dative case.", parents = {"prepositions"}, } labels["genitive prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the genitive case.", parents = {"prepositions"}, } labels["instrumental prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the instrumental case.", parents = {"prepositions"}, } labels["matrilineal moieties"] = { description = "{{{langname}}} moieties inherited from an individual's mother.", parents = {"moieties"}, } labels["nominative prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the nominative case.", parents = {"prepositions"}, } labels["patrilineal moieties"] = { description = "{{{langname}}} moieties inherited from an individual's father.", parents = {"moieties"}, } labels["pejorative suffixes"] = { description = "{{{langname}}} suffixes that [[belittle]] (lessen in value).", parents = {"suffixes"}, } labels["prepositional prepositions"] = { description = "{{{langname}}} prepositions that cause the succeeding noun to be in the prepositional case.", parents = {"prepositions"}, } labels["prenouns"] = { description = "{{{langname}}} prefixes of various kinds that are attached to nouns.", parents = {"prefixes"}, } labels["preverbs"] = { description = "{{{langname}}} prefixes of various kinds that are attached to verbs.", parents = {"prefixes"}, } labels["privative verbs"] = { description = "{{{langname}}} verbs that indicate that the grammatical object is deprived of something or that something is removed from the object.", parents = {"کار"}, } labels["pronominal adverbs"] = { description = "{{{langname}}} adverbs that are formed by combining a pronoun with a preposition.", parents = {"adverbs", "prepositions", "pronouns"}, } labels["pronominal concords"] = { description = "{{{langname}}} concords that are prefixed to pronominal stems.", parents = {"concords"}, } labels["pronouns"] = { description = "{{{langname}}} terms that refer to and substitute nouns.", parents = {"لەما"}, } labels["proper nouns"] = { description = "{{{langname}}} nouns that indicate individual entities, such as names of persons, places or organizations.", parents = {"ناو"}, } labels["punctual adverbs"] = { description = "{{{langname}}} adverbs that express a single point or span in time.", parents = {"time adverbs"}, } labels["raising verbs"] = { description = "{{{langname}}} verbs that, in a matrix or main clause, take an argument from an embedded or subordinate clause; in other words, a raising verb appears with a syntactic argument that is not its semantic argument, but is rather the semantic argument of an embedded predicate.", parents = {"کار"}, } labels["reciprocal pronouns"] = { description = "{{{langname}}} pronouns that refer back to a plural subject and express an action done in two or more directions.", parents = {"pronouns", "personal pronouns"}, } labels["reciprocal verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed from multiple subjects to each other.", parents = {"کار"}, } labels["reflexive pronouns"] = { description = "{{{langname}}} pronouns that refer back to the subject.", parents = {"pronouns", "personal pronouns"}, } labels["reflexive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed from the grammatical subjects to themselves.", parents = {"کار"}, } labels["relational adjectives"] = { description = "{{{langname}}} adjectives that stand in place of a noun when modifying another noun.", parents = {"ھاوەڵناو"}, } labels["relational nouns"] = { description = "{{{langname}}} nouns used to indicate a relation between other two nouns by means of possession.", parents = {"ناو"}, } labels["relative adjectives"] = { description = "{{{langname}}} adjectives used to indicate [[relative clause]]s.", parents = {"adjectives", {name = "relative pro-forms", sort = "adjectives"}}, } labels["relative adverbs"] = { description = "{{{langname}}} adverbs used to indicate [[relative clause]]s.", parents = {"adverbs", {name = "relative pro-forms", sort = "adverbs"}}, } labels["relative determiners"] = { description = "{{{langname}}} determiners used to indicate [[relative clause]]s.", parents = {"determiners", {name = "relative pro-forms", sort = "determiners"}}, } labels["relative concords"] = { description = "{{{langname}}} concords that are prefixed to relative stems.", parents = {"concords"}, } labels["relative pronouns"] = { description = "{{{langname}}} pronouns used to indicate [[relative clause]]s.", parents = {"pronouns", {name = "relative pro-forms", sort = "pronouns"}}, } labels["relatives"] = { description = "{{{langname}}} terms that give attributes to nouns, acting grammatically as relative clauses.", parents = {"لەما"}, } labels["repetitive verbs"] = { description = "{{{langname}}} verbs that indicate actions or events which are performed or occur again, anew or differently.", parents = {"کار"}, } labels["resultative verbs"] = { description = "{{{langname}}} verbs that indicate a result of some action", parents = {"کار"}, } labels["reversative verbs"] = { description = "{{{langname}}} verbs that indicate that the reversal or undoing of an action, event or state.", parents = {"کار"}, } labels["saturative verbs"] = { description = "{{{langname}}} verbs which indicate that an action is performed to the point of saturation or satisfaction.", parents = {"کار"}, } labels["semelfactive verbs"] = { description = "{{{langname}}} verbs that are punctual (instantaneous, momentive), perfective (treated as a unitary whole with no explicit internal temporal structure), and telic (having a boundary out of which the activity cannot be said to have taken place or continue).", parents = {"کار"}, } labels["sentence adverbs"] = { description = "{{{langname}}} adverbs that modify an entire clause or sentence.", parents = {"adverbs"}, } labels["sequence adverbs"] = { description = "{{{langname}}} conjunctive adverbs that express sequence in space or time.", parents = {"conjunctive adverbs"}, } labels["simulfixes"] = { description = "Affixes replacing positions in {{{langname}}} words.", parents = {"morphemes"}, } labels["singulative nouns"] = { description = "{{{langname}}} nouns that indicate a single item of a group of related things or beings.", parents = {"ناو"}, } labels["singularia tantum"] = { description = "{{{langname}}} nouns that are mostly or exclusively used in the singular form.", parents = {"ناو"}, } labels["stative verbs"] = { description = "{{{langname}}} verbs that define a state with no or insignificant internal dynamics.", parents = {"کار"}, } labels["stems"] = { description = "Morphemes from which {{{langname}}} words are formed.", parents = {"morphemes"}, } labels["subordinating conjunctions"] = { description = "{{{langname}}} conjunctions that indicate relations of syntactic dependence between connected items.", parents = {"conjunctions"}, } labels["subject concords"] = { description = "{{{langname}}} concords used to show the grammatical subject.", parents = {"concords"}, } labels["subject pronouns"] = { description = "{{{langname}}} pronouns that refer to grammatical subjects.", parents = {"pronouns"}, } labels["suffixes"] = { description = "Affixes attached to the end of {{{langname}}} words.", parents = {"morphemes"}, } labels["splitting verbs"] = { description = "{{{langname}}} bisyllabic verbs that obligatorily split around a direct object or pronoun.", parents = {"کار"}, } labels["terminative verbs"] = { description = "{{{langname}}} verbs that indicate that an action or event ceases.", parents = {"کار"}, } labels["time adverbs"] = { description = "{{{langname}}} adverbs that indicate time.", parents = {"adverbs"}, } labels["transfixes"] = { description = "Discontinuous affixes inserted within a word root.", parents = {"morphemes"}, } labels["transformative verbs"] = { description = "{{{langname}}} verbs that indicate a change of state or nature, in the subject for intransitive verbs and in the object for transitive verbs.", parents = {"کار"}, } labels["transitive verbs"] = { description = "{{{langname}}} verbs that indicate actions, occurrences or states directed to one or more grammatical objects.", parents = {"کار"}, } labels["uncomparable adjectives"] = { description = "{{{langname}}} adjectives that are not inflected to display different degrees of comparison.", parents = {"ھاوەڵناو"}, } labels["uncomparable adverbs"] = { description = "{{{langname}}} adverbs that are not inflected to display different degrees of comparison.", parents = {"adverbs"}, } labels["ناوە ژماردەنییەکان"] = { description = "{{{langname}}} nouns that indicate qualities, ideas, unbounded mass or other abstract concepts that cannot be quantified directly by numerals.", parents = {"ناوەکان"}, } labels["uncountable numerals"] = { description = "{{{langname}}} numerals that cannot be quantified directly by other numerals.", parents = {"numerals"}, } labels["uncountable proper nouns"] = { description = "{{{langname}}} proper nouns that cannot be quantified directly by numerals.", parents = {"proper nouns"}, } labels["uncountable suffixes"] = { description = "{{{langname}}} suffixes that can be used to form nouns that cannot be quantified directly by numerals.", parents = {"numerals"}, } labels["unpossessable nouns"] = { description = "{{{langname}}} nouns that cannot have their possession indicated directly by possessive pronouns.", parents = {"ناو"}, umbrella = { description = "Categories with nouns that cannot have their possession indicated directly by possessive pronouns or, in some languages, be transformed into adjectives.", parents = {"Lemmas subcategories by language"}, breadcrumb = "Unpossessable nouns by language", }, } labels["verbal nouns"] = { description = "{{{langname}}} nouns morphologically related to a verb and similar to it in meaning.", parents = {"ناو"}, } labels["verbal adjectives"] = { description = "{{{langname}}} adjectives describing the condition or state resulting from the action of the corresponding verb.", parents = {"ھاوەڵناو"}, } labels["کار"] = { description = "{{{langname}}} terms that indicate actions, occurrences or states.", parents = {"لەما"}, } labels["verbs of movement"] = { description = "{{{langname}}} verbs that indicate physical movement of the grammatical subject across a trajectory, with a starting point and an endpoint.", parents = {"کار"}, } -- Add "POS-forming suffixes". local poses_derived_by_suffix = { "adjective", "adverb", "noun", "verb", } for _, pos in pairs(poses_derived_by_suffix) do labels[pos .. "-forming suffixes"] = { description = "{{{langname}}} suffixes that are used to derive " .. pos .. "s from other words.", parents = {"derivational suffixes"}, } end local labels2 = {} -- Add "reconstructed" subcategories; add 'umbrella_parents' key if not -- already present. for key, data in pairs(labels) do labels2[key] = data if not data.umbrella_parents then data.umbrella_parents = "Lemmas subcategories by language" end labels2["reconstructed " .. key] = { description = "{{{langname}}} " .. key .. " that have been linguistically [[Wiktionary:Reconstructed terms|reconstructed]].", umbrella_parents = "Lemmas subcategories by language", parents = {key, {name = "reconstructed terms", sort = key}} } end ----------------------------------------------------------------------------- -- -- -- RAW CATEGORIES -- -- -- ----------------------------------------------------------------------------- raw_categories["Lemmas subcategories by language"] = { description = "Umbrella categories covering topics related to lemmas.", additional = "{{{umbrella_meta_msg}}}", parents = { "Umbrella metacategories", {name = "lemmas", is_label = true, sort = " "}, }, } ----------------------------------------------------------------------------- -- -- -- HANDLERS -- -- -- ----------------------------------------------------------------------------- -- Handler for e.g. [[:Category:English phrasal verbs with particle (around)]]. table.insert(handlers, function(data) local particle = data.label:match("^phrasal verbs with particle %((.-)%)$") if particle then local tagged_text = require("Module:script utilities").tag_text(particle, data.lang, nil, "term") local link = require("Module:links").full_link({ term = particle, lang = data.lang }, "term") return { description = "{{{langname}}} {{w|phrasal verb}}s using the particle " .. link .. ".", displaytitle = "{{{langname}}} phrasal verbs with particle (" .. tagged_text .. ")", breadcrumb = tagged_text, parents = {{ name = "phrasal verbs", sort = particle }}, umbrella = false, } end end) return {LABELS = labels2, RAW_CATEGORIES = raw_categories, HANDLERS = handlers} 6pj7hd6pvqpmdyf6x5u08cuo82jxssp پۆل:زمانی ئینگلیزی 14 9990 36765 29940 2026-08-12T22:37:42Z Ghybu 12 36765 wikitext text/x-wiki {{auto cat|ساموای ئەمریکا |Anguilla |ئانتیگوا و باربوودا |Ascension Island |ئوسترالیا |باربادۆس |بەلیز |بەرموودا |بۆتسوانا |کامیروون |کەنەدا |کاریبی Netherlands |دوورگەی کریسمس |دۆمینیکا |ئێسواتینی |فیجی |گانا |گیبرالتار |گرینادا |گوام |Guernsey |گویانا |ھاوایی |ھۆنگ کۆنگ |ھیندستان |ئیرلەند |جامایکا |Jersey |کینیا |کیریباس |لیسۆتۆ |لیبێریا |مالاوی |مالیزیا |ماڵتا |مۆریس |مایکرۆنیزیا |Montserrat |نائووروو |نیوزیلاند |نێجیریا |نیووەی |دوورگەی نۆرفۆلک |the Northern Mariana Islands |عومان |پاکستان |پالاو |Papua New گینێ |پۆرتۆ ڕیکۆ |ڕواندا |سانت ھێلانە |سەینت کیتس و نیڤیس |سەینت لووسیا |سەینت ڤینسەنت و گرینادینز |ساموا |سیەرالیۆن |سینگاپوور |ئەفریقای باشوور |سوودانی باشوور |سوودان |تانزانیا |بەھاما |the British Indian Ocean Territory |the British Virgin Islands |دوورگەکانی کەیمەن |the Cocos (Keeling) Islands |the Cook Islands |دوورگەکانی فۆڵکلاند |گامبیا |the Isle of Man |دوورگەکانی مارشاڵ |the Pitcairn Islands |سیشێل |دوورگەکانی سولەیمان |شانشینی یەکگرتوو |فلیپین |دوورگەکانی تورکس و کایکۆس |ویلایەتە یەکگرتووەکانی ئەمریکا |ویلایەتە یەکگرتووەکانی ئەمریکا Virgin Islands |توکیلاو |تۆنگا |ترینیداد و تۆباگۆ |تووڤالوو |ئووگاندا |ڤانواتوو |زامبیا |زیمبابوی}} 9ftz283mnb9zlxt4htq5oxe0qm6mhex داڕێژە:en-adj 10 10126 36792 29692 2026-08-13T01:19:54Z Ghybu 12 ھاوەڵناو 36792 wikitext text/x-wiki {{#invoke:en-headword|show|ھاوەڵناو}}<!-- --><noinclude>{{documentation}}</noinclude> 3g7wb2ddpkxp3o8g9d9ejlvw301coe2 داڕێژە:en-noun 10 10135 36761 29716 2026-08-12T22:34:29Z Ghybu 12 ناو 36761 wikitext text/x-wiki {{#invoke:en-headword|show|ناو}}<noinclude>{{documentation}}</noinclude> 5mcy3o6453hko4y1qsfrin6ivxapw8v blackwood 0 10147 36806 30373 2026-08-13T11:52:42Z Ghybu 12 /* ئینگلیزی */ 36806 wikitext text/x-wiki == ئینگلیزی == {{ویکیپیدیا|lang=en}} ===وشەڕەتناسی=== {{compound|en|black|wood}} ====ناو==== {{en-noun|-|s}} # شوێنێکی دوور لە [[شارستانیەت]] # [[دێکوێرە]] # [[شارون]] 56g7unqexq917yr5q3fdn4k2t32fx2w داڕێژە:ar-noun 10 10547 36774 30443 2026-08-12T22:43:18Z Ghybu 12 ناو 36774 wikitext text/x-wiki {{#invoke:ar-headword|show|ناو}}<!-- --><noinclude>{{documentation}}</noinclude> an6sopszfpr1ty9wgshfigwpmvcr5o5 مۆدیوول:ar-headword 828 10557 36775 30453 2026-08-12T22:53:02Z Ghybu 12 ناو 36775 Scribunto text/plain -- Author: Benwing2; based on an early version by Rua local ar_translit = require("Module:ar-translit") local m_str_utils = require("Module:string utilities") local list_to_set = require("Module:table").listToSet local rfind = m_str_utils.find local rsubn = m_str_utils.gsub local u = m_str_utils.char local lang = require("Module:languages").getByCode("ar") local export = {} local pos_functions = {} -- diacritics local A = u(0x064E) -- fatḥa local AN = u(0x064B) -- fatḥatān (fatḥa tanwīn) local U = u(0x064F) -- ḍamma local UN = u(0x064C) -- ḍammatān (ḍamma tanwīn) local I = u(0x0650) -- kasra local IN = u(0x064D) -- kasratān (kasra tanwīn) local SK = u(0x0652) -- sukūn = no vowel local SH = u(0x0651) -- šadda = gemination of consonants local DAGGER_ALIF = u(0x0670) local DIACRITIC_ANY_BUT_SH = "[" .. A .. I .. U .. AN .. IN .. UN .. SK .. DAGGER_ALIF .. "]" -- various letters and signs local HAMZA = u(0x0621) -- hamza on the line (stand-alone hamza) = ء local ALIF = u(0x0627) -- ʾalif = ا local AMAQ = u(0x0649) -- ʾalif maqṣūra = ى local TAM = u(0x0629) -- tāʾ marbūṭa = ة -- common combinations local UNU = "[" .. UN .. U .. "]" ----------------------- -- Utility functions -- ----------------------- -- If Not Empty local function ine(arg) if arg == "" then return nil else return arg end end -- version of mw.ustring.gsub() that discards all but the first return value local function rsub(term, foo, bar) local retval = rsubn(term, foo, bar) return retval end local function remove_links(text) text = rsub(text, "%[%[[^|%]]*|", "") text = rsub(text, "%[%[", "") text = rsub(text, "%]%]", "") return text end local function reorder_shadda(text) -- shadda+short-vowel (including tanwīn vowels, i.e. -an -in -un) gets -- replaced with short-vowel+shadda during NFC normalisation, which -- MediaWiki does for all Unicode strings; however, it makes the -- detection process inconvenient, so undo it. (For example, the tracking -- code below would fail to detect the -un in سِتٌّ because the shadda -- would come after the -un.) text = rsub(text, "(" .. DIACRITIC_ANY_BUT_SH .. ")" .. SH, SH .. "%1") return text end -- Tracking functions local trackfn = require("Module:debug/track") local function track(page) trackfn("ar-headword/" .. page) return true end --[==[ Examples of what you can find by looking at what links to the given pages: [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized]] all unvocalized pages [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/pl]] all unvocalized pages where the plural is unvocalized, whether specified using pl=, pl2=, etc. [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/head]] all unvocalized pages where the head is unvocalized [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/head/nouns]] all nouns excluding proper nouns, collective nouns, singulative nouns where the head is unvocalized [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/head/proper]] nouns all proper nouns where the head is unvocalized [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/head/not]] proper nouns all words that are not proper nouns where the head is unvocalized [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized/adjectives]] all adjectives where any parameter is unvocalized; currently only works for heads, so equivalent to .../unvocalized/head/adjectives [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized-empty-head]] all pages with an empty head [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized-manual-translit]] all unvocalized pages with manual translit [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized-manual-translit/head/nouns]] all nouns where the head is unvocalized but has manual translit [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/unvocalized-no-translit]] all unvocalized pages without manual translit [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/i3rab]] all pages with any parameter containing i3rab of either -un, -u, -a or -i [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/i3rab-un]] all pages with any parameter containing an -un i3rab ending [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/i3rab-un/pl]] all pages where a form specified using pl=, pl2=, etc. contains an -un i3rab ending [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/i3rab-u/head]] all pages with a head containing an -u i3rab ending [[Special:WhatLinksHere/Wiktionary:Tracking/ar-headword/i3rab/head/proper]] nouns (all proper nouns with a head containing i3rab of either -un, -u, -a or -i) In general, the format is one of the following: Wiktionary:Tracking/ar-headword/FIRSTLEVEL Wiktionary:Tracking/ar-headword/FIRSTLEVEL/ARGNAME Wiktionary:Tracking/ar-headword/FIRSTLEVEL/POS Wiktionary:Tracking/ar-headword/FIRSTLEVEL/ARGNAME/POS FIRSTLEVEL can be one of "unvocalized", "unvocalized-empty-head" or its opposite "unvocalized-specified", "unvocalized-manual-translit" or its opposite "unvocalized-no-translit", "i3rab", "i3rab-un", "i3rab-u", "i3rab-a", or "i3rab-i". ARGNAME is either "head" or an argument such as "pl", "f", "cons", etc. This automatically includes arguments specified as head2=, pl3=, etc. POS is a part of speech, lowercase and pluralized, e.g. "nouns", "adjectives", "proper nouns", "collective nouns", etc. or "not proper nouns", which includes all parts of speech but proper nouns. ]==] local function track_form(argname, form, translit, pos) form = reorder_shadda(remove_links(form)) function dotrack(page) track(page) track(page .. "/" .. argname) if pos then track(page .. "/" .. pos) track(page .. "/" .. argname .. "/" .. pos) if pos ~= "proper nouns" then track(page .. "/not proper nouns") track(page .. "/" .. argname .. "/not proper nouns") end end end function track_i3rab(arabic, tr) if rfind(form, arabic .. "$") then dotrack("i3rab") dotrack("i3rab-" .. tr) end end track_i3rab(UN, "un") track_i3rab(U, "u") track_i3rab(A, "a") track_i3rab(I, "i") if form == "" or not (lang:transliterate(form)) then dotrack("unvocalized") if form == "" then dotrack("unvocalized-empty-head") else dotrack("unvocalized-specified") end if translit then dotrack("unvocalized-manual-translit") else dotrack("unvocalized-no-translit") end end end -- The main entry point. function export.show(frame) local poscat = frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.") local parargs = frame:getParent().args local params = { [1] = {list = "head", disallow_holes = true}, ["tr"] = {list = true, allow_holes = true}, ["id"] = {}, ["nolinkhead"] = {type = "boolean"}, ["json"] = {type = "boolean"}, ["pagename"] = {}, -- for testing } if pos_functions[poscat] then for key, val in pairs(pos_functions[poscat].params) do params[key] = val end end local args = require("Module:parameters").process(parargs, params) local pagename = args.pagename or mw.loadData("Module:headword/data").pagename local data = { lang = lang, pos_category = poscat, categories = {}, heads = args[1], translits = args.tr, genders = {}, inflections = {enable_auto_translit = true}, pagename = pagename, id = args.id, sort_key = args.sort, force_cat_output = force_cat, } local irreg_translit = false for i = 1, #args[1] do if ar_translit.irregular_translit(args[1][i], args.tr[i]) then irreg_translit = true break end end if irreg_translit then table.insert(data.categories, lang:getCanonicalName() .. " terms with irregular pronunciations") end if pos_functions[poscat] then pos_functions[poscat].func(args, data) end if args.json then return require("Module:JSON").toJSON(data) end return require("Module:headword").full_headword(data) end -- Get a list of inflections. See handle_infl() for meaning of ARGS and ARGPREF. local function getargs(args, argpref) local forms = {} for i, form in ipairs(args[argpref]) do local translit = args[argpref .. "tr"][i] local gender = args[argpref .. "g"][i] local gender2 = args[argpref .. "g2"][i] local genderlist = (gender or gender2) and { gender, gender2 } or nil -- FIXME, do we need this? track_form(argpref, form, translit) table.insert(forms, { term = form, translit = translit, genders = genderlist }) end return forms end local function add_infl_params(params, argpref, defgender) params[argpref] = {list = true, disallow_holes = true} params[argpref .. "\1tr"] = {list = true, allow_holes = true} params[argpref .. "\1g"] = {list = true, default = defgender} params[argpref .. "\1g2"] = {list = true} end -- Get a list of inflections from the arguments in ARGS based on argument -- prefix ARGPREF (e.g. "pl" to snarf arguments called "pl", "pl2", etc., -- along with "pltr", "pl2tr", etc. and optional gender(s) "plg", "plg2", -- "pl2g", "pl2g2", "pl3g", "pl3g2", etc.). Label with LABEL (e.g. "plural"), -- which will appear in the headword. Insert into inflections list -- INFLS. Optional DEFGENDER is default gender to insert if gender -- isn't given; otherwise, no gender is inserted. (This is used for -- singulative forms of collective nouns, and collective forms of singulative -- nouns, which have different gender from the base form(s).) local function handle_infl(args, data, argpref, label, generate_default) local newinfls = getargs(args, argpref) if #newinfls == 0 and generate_default then newinfls = {{term = "+"}} end if generate_default then local saw_plus = false for _, newinfl in ipairs(newinfls) do if newinfl.term == "+" then saw_plus = true break end end if saw_plus then local newnewinfls = {} for _, newinfl in ipairs(newinfls) do if newinfl.term == "+" then local definfls = generate_default(args, data) for _, definfl in ipairs(definfls) do table.insert(newnewinfls, definfl) end else table.insert(newnewinfls, newinfl) end end newinfls = newnewinfls end end if #newinfls > 0 then newinfls.label = label table.insert(data.inflections, newinfls) end end local function add_all_infl_params(params, argpref) if argpref ~= "" then add_infl_params(params, argpref) end add_infl_params(params, argpref .. "cons") add_infl_params(params, argpref .. "def") add_infl_params(params, argpref .. "obl") add_infl_params(params, argpref .. "inf") end -- Handle a basic inflection (e.g. plural, feminine) along with the construct, -- definite and oblique variants of this inflection. Can also handle the base -- construct/definite/oblique variants if both ARGPREF and LABEL are given -- as blank strings. If ARGPREF is blank, skip the base inflection. local function handle_all_infl(args, data, argpref, label, generate_default) if argpref ~= "" then handle_infl(args, data, argpref, label, generate_default) end local labelsp = label == "" and "" or label .. " " handle_infl(args, data, argpref .. "cons", labelsp .. "construct state") handle_infl(args, data, argpref .. "def", labelsp .. "definite state") handle_infl(args, data, argpref .. "obl", labelsp .. "oblique") handle_infl(args, data, argpref .. "inf", labelsp .. "informal") end -- Handle the case where pl=-, indicating an uncountable noun. local function handle_noun_plural(args, data) if args.pl[1] == "-" then table.insert(data.inflections, { label = "usually [[Appendix:Glossary#uncountable|uncountable]]" }) table.insert(data.categories, lang:getCanonicalName() .. " uncountable nouns") if args.pauc and #args.pauc > 0 then error("Can't specify paucals when pl=-") end else handle_all_infl(args, data, "pl", "plural") end end local valid_bare_genders = {false, "m", "f", "mfbysense", "mfequiv"} local valid_bare_numbers = {false, "d", "p"} local valid_bare_animacies = {false, "pr", "np"} local valid_genders = {} for _, gender in ipairs(valid_bare_genders) do for _, number in ipairs(valid_bare_numbers) do for _, animacy in ipairs(valid_bare_animacies) do local parts = {} local function ins_part(part) if part then table.insert(parts, part) end end ins_part(gender) ins_part(number) ins_part(animacy) local full_gender = table.concat(parts, "-") valid_genders[full_gender == "" and "?" or full_gender] = true end end end local function is_masc_sg(g) return g == "m" or g == "m-pr" or g == "m-np" end local function is_fem_sg(g) return g == "f" or g == "f-pr" or g == "f-np" end local function add_gender_params(params, default) params[2] = {list = "g", default = default or "?"} end -- Handle gender in params 2=, g2=, etc., inserting into `data.genders`. Also, if a lemma, insert categories into -- `data.categories` if the gender is unexpected for the form of the noun. (Note: If there are multiple genders, -- [[Module:gender and number]] will automatically insert 'Arabic POS with multiple genders'.) local function handle_gender(args, data, nonlemma) for _, g in ipairs(args[2]) do if valid_genders[g] then table.insert(data.genders, g) else error("Unrecognized gender: " .. g) end end if nonlemma then return end if #args[2] == 1 then local g = args[2][1] if is_masc_sg(g) or is_fem_sg(g) then local head = args.head if head then head = rsub(reorder_shadda(remove_links(head)), UNU .. "?$", "") local ends_with_tam = rfind(head, "^[^ ]*" .. TAM .. "$") or rfind(head, "^[^ ]*" .. TAM .. " ") if is_masc_sg(g) and ends_with_tam then table.insert(data.categories, lang:getCanonicalName() .. " masculine terms with feminine ending") elseif is_fem_sg(g) and not ends_with_tam and not rfind(head, "[" .. ALIF .. AMAQ .. "]$") and not rfind(head, ALIF .. HAMZA .. "$") then table.insert(data.categories, lang:getCanonicalName() .. " feminine terms lacking feminine ending") end end end end end -- Part-of-speech functions local adj_inflections = { {pref = "", label = ""}, -- handle cons, def, obl, inf {pref = "f", label = "feminine"}, {pref = "d", label = "masculine dual"}, {pref = "fd", label = "feminine dual"}, {pref = "cpl", label = "common plural"}, {pref = "pl", label = "masculine plural"}, {pref = "fpl", label = "feminine plural"}, } local function create_infl_list_params(infl_list) params = {} for _, infl in ipairs(infl_list) do if infl.basic then add_infl_params(params, infl.pref) else add_all_infl_params(params, infl.pref) end end return params end local function handle_infl_list_args(args, data, infl_list) for _, infl in ipairs(infl_list) do if infl.handle then infl.handle(args, data) elseif infl.basic then handle_infl(args, data, infl.pref, infl.label, infl.generate_default) else handle_all_infl(args, data, infl.pref, infl.label, infl.generate_default) end end end pos_functions["adjectives"] = { params = (function() local params = create_infl_list_params(adj_inflections) add_infl_params(params, "el") return params end)(), func = function(args, data) handle_infl_list_args(args, data, adj_inflections) handle_infl(args, data, "el", "elative") end } local function make_nisba_default(ending, endingtr) return function(args, data) local heads = data.heads if #heads == 0 then heads = {data.pagename} end local forms = {} for i = 1, #heads do local tr = data.translits[i] table.insert(forms, {term = heads[i] .. ending, translit = tr and tr .. endingtr or nil}) end return forms end end local nisba_adj_inflections = { {pref = "", label = ""}, -- handle cons, def, obl, inf {pref = "f", label = "feminine", generate_default = make_nisba_default(A .. "ة", "a")}, {pref = "d", label = "masculine dual"}, {pref = "fd", label = "feminine dual"}, {pref = "cpl", label = "common plural"}, {pref = "pl", label = "masculine plural", generate_default = make_nisba_default(U .. "ونَ", "ūna")}, {pref = "fpl", label = "feminine plural", generate_default = make_nisba_default(A .. "ات", "āt")}, } pos_functions["nisba adjectives"] = { params = (function() return create_infl_list_params(nisba_adj_inflections) end)(), func = function(args, data) data.pos_category = "adjectives" handle_infl_list_args(args, data, nisba_adj_inflections) end } local sing_coll_noun_inflections = { {pref = "", label = ""}, -- handle cons, def, obl, inf {pref = "d", label = "dual"}, {pref = "pl", label = "plural", handle = handle_noun_plural}, {pref = "pauc", label = "paucal"}, } local function handle_sing_coll_noun_infls(args, data, otherinfl, otherlabel) handle_gender(args, data) -- Handle sing= (corresponding singulative noun) or coll= (corresponding collective noun) and their gender handle_infl(args, data, otherinfl, otherlabel) handle_infl_list_args(args, data, sing_coll_noun_inflections) end local function get_sing_coll_noun_params(defgender, otherinfl, othergender) local params = create_infl_list_params(sing_coll_noun_inflections) add_gender_params(params, defgender) add_infl_params(params, otherinfl, othergender) return params end pos_functions["collective nouns"] = { params = get_sing_coll_noun_params("m", "sing", "f"), func = function(args, data) data.pos_category = "nouns" table.insert(data.categories, lang:getCanonicalName() .. " collective nouns") table.insert(data.inflections, { label = "collective" }) handle_sing_coll_noun_infls(args, data, "sing", "singulative") end } pos_functions["singulative nouns"] = { params = get_sing_coll_noun_params("f", "coll", "m"), func = function(args, data) data.pos_category = "nouns" table.insert(data.categories, lang:getCanonicalName() .. " singulative nouns") table.insert(data.inflections, { label = "singulative" }) handle_sing_coll_noun_infls(args, data, "coll", "collective") end } local noun_inflections = { {pref = "", label = ""}, -- handle cons, def, obl, inf {pref = "d", label = "dual"}, {pref = "pl", label = "plural", handle = handle_noun_plural}, {pref = "pauc", label = "paucal"}, {pref = "f", label = "feminine"}, {pref = "m", label = "masculine"}, } local function get_noun_params() local params = create_infl_list_params(noun_inflections) add_gender_params(params) return params end local function handle_noun_infls(args, data) handle_gender(args, data) handle_infl_list_args(args, data, noun_inflections) end pos_functions["ناو"] = { params = get_noun_params(), func = handle_noun_infls, } -- FIXME: Do numerals really behave almost as nouns? They vary by masc/fem. pos_functions["numerals"] = { params = get_noun_params(), func = function(args, data) table.insert(data.categories, lang:getCanonicalName() .. " cardinal numbers") handle_noun_infls(args, data) end } pos_functions["proper nouns"] = { params = get_noun_params(), func = handle_noun_infls, } local pronoun_inflections = { {pref = "", label = ""}, -- handle cons, def, obl, inf {pref = "d", label = "dual"}, {pref = "pl", label = "plural", handle = handle_noun_plural}, {pref = "f", label = "feminine"}, } local function get_pronoun_params() local params = create_infl_list_params(pronoun_inflections) add_gender_params(params) return params end pos_functions["pronouns"] = { params = get_pronoun_params(), func = function(args, data) handle_gender(args, data) handle_infl_list_args(args, data, pronoun_inflections) end } local function get_gender_only_params(default) local params = {} add_gender_params(params, default) return params end pos_functions["noun plural forms"] = { params = (function() local params = {} add_gender_params(params, "p") add_infl_params(params, "cons") return params end)(), func = function(args, data) data.pos_category = "noun forms" handle_gender(args, data, "nonlemma") handle_infl(args, data, "cons", "construct state") end } pos_functions["adjective feminine forms"] = { params = get_gender_only_params("f"), func = function(args, data) data.pos_category = "adjective feminine forms" handle_gender(args, data, "nonlemma") end } pos_functions["noun dual forms"] = { params = get_gender_only_params("m-d"), func = function(args, data) data.pos_category = "noun forms" handle_gender(args, data, "nonlemma") end } pos_functions["adjective plural forms"] = { params = get_gender_only_params("m-p"), func = function(args, data) data.pos_category = "adjective forms" handle_gender(args, data, "nonlemma") end } pos_functions["adjective dual forms"] = { params = get_gender_only_params("m-p"), func = function(args, data) data.pos_category = "adjective forms" handle_gender(args, data, "m-d", "nonlemma") end } pos_functions["noun forms"] = { params = get_gender_only_params(), func = function(args, data) handle_gender(args, data, nil, "nonlemma") end } local valid_forms = list_to_set( { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII", "XIII", "XIV", "XV", "Iq", "IIq", "IIIq", "IVq" }) local function handle_conj_form(args, data) local form = args[2] if form then if not valid_forms[form] then error("Invalid verb conjugation form " .. form) end table.insert(data.inflections, { label = '[[Appendix:Arabic verbs#Form ' .. form .. '|form ' .. form .. ']]' }) end end pos_functions["verb forms"] = { params = { [2] = {}, }, func = function(args, data) handle_conj_form(args, data) end } local function get_participle_params() local params = create_infl_list_params(adj_inflections) params[2] = {} return params end pos_functions["active participles"] = { params = get_participle_params(), func = function(args, data) data.pos_category = "participles" table.insert(data.categories, lang:getCanonicalName() .. " active participles") handle_conj_form(args, data) handle_infl_list_args(args, data, adj_inflections) end } pos_functions["passive participles"] = { params = get_participle_params(), func = function(args, data) data.pos_category = "participles" table.insert(data.categories, lang:getCanonicalName() .. " passive participles") handle_conj_form(args, data) handle_infl_list_args(args, data, adj_inflections) end } return export 144h3jhppylw6j445plq3fk8afuiz0n لێدوانی بەکارھێنەر:-Haryad 3 11153 36742 36587 2026-08-12T16:27:33Z -Haryad 34 /* داڕێژە:trans-top */ ans 36742 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} kti47gp31phpdfokwdgst9ljnvnxoqj 36745 36742 2026-08-12T20:30:25Z Ghybu 12 36745 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: CaCategories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]] {{Rtl/end}} o98r1gy31niib8kfem6oxj80go6neot 36749 36745 2026-08-12T20:47:17Z Ghybu 12 /* داڕێژە:trans-top */ 36749 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: CaCategories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[پۆل:ھاوەڵناو بە کوردیی ناوەندی]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} gv8pubr51soqfbebuy1r1ejj2n7axmb 36750 36749 2026-08-12T20:49:04Z Ghybu 12 /* داڕێژە:trans-top */ 36750 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: CaCategories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[:مۆدیوول:category tree/lemmas]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} j5r4zvf65iqme4jntftts7vua8oa0vg 36751 36750 2026-08-12T20:55:26Z Ghybu 12 /* داڕێژە:trans-top */ 36751 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: Categories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[:مۆدیوول:category tree/lemmas]] :::::::: For example, you can change the description displayed in English in the category here: [https://ckb.wiktionary.org/w/index.php?title=%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:category_tree/lemmas&oldid=36747#L-633] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} cdmn07ahod1xflj2r7nbn7s9ajhlwh1 36752 36751 2026-08-12T21:11:20Z Ghybu 12 /* داڕێژە:trans-top */ 36752 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: Categories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[:مۆدیوول:category tree/lemmas]] :::::::: For example, you can change the description displayed in English in the category here: [https://ckb.wiktionary.org/w/index.php?title=%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:category_tree/lemmas&oldid=36747#L-633] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: One last remark, and then I'll leave you be :) You created the language category names by adding "زمانی" (ziman), like here [[:پۆل:زمانی کوردیی ناوەندی]]. Why not create the category using simply the name of the language, as most Wiktionaries do? {{Rtl/end}} se0upv30wn4oea2kgw1fqxeb6t7j9o1 36753 36752 2026-08-12T21:13:48Z Ghybu 12 îmze 36753 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: Categories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[:مۆدیوول:category tree/lemmas]] :::::::: For example, you can change the description displayed in English in the category here: [https://ckb.wiktionary.org/w/index.php?title=%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:category_tree/lemmas&oldid=36747#L-633] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: One last remark, and then I'll leave you be :) You created the language category names by adding "زمانی" (ziman), like here [[:پۆل:زمانی کوردیی ناوەندی]]. Why not create the category using simply the name of the language, as most Wiktionaries do ? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:١٣، ١٣ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} d7ghsx3ke65x3fuoljdi6nbf4m75iwr 36757 36753 2026-08-12T21:48:43Z Ghybu 12 /* داڕێژە:trans-top */ 36757 wikitext text/x-wiki ==بە خێر بێن == <div style="border: 1px solid #d2b48c; background-color: #fdfaf6; padding: 1em 1.5em; margin: 1em 0; border-radius: 10px; line-height: 1.6em;"> <div style="text-align:center; font-weight:bold; font-size:115%; margin-bottom: 1em;"> سڵاو {{ROOTPAGENAME}}، [[ویکیفەرھەنگ:بە خێر بێن، تازەکاران|بە خێر بێن بۆ ویکیفەرھەنگ]]، و سپاس بۆ ئەو بەشدارییانەی تا ئێستا کردووتن. </div> ئەگەر بە دەستکاریکردنی ویکی ئاشنا نیت، ئەوا سەیرێکی [[:en:Help:How to edit a page|چۆنێتیی دەستکاریکردنی پەڕە]] بکە. پەڕەکە پێڕستێکی پوختە لەسەر ڕێنمایییە تەکنیکییەکانی ئەو شێوازی ویکییەی ئێمە لێرە بە کاری دەھێنین: بۆ نموونە، چۆن دەقێک تۆخ بکەیت یان بەستەرەکان دروست بکەیت. ئاسوودە بە لە ڕاھێنانکردن لە [[ویکیفەرھەنگ:خۆڵەپەتانێ|خۆڵەپەتانێ]]. ئەگەر حەزت لە پێشەکییەکی ھێواشترە، ئەوا [[ویکیفەرھەنگ:فێرکاری|فێرکارییەکی]] کورتمان ھەیە. لەوانەیە ئەم بەستەرانە وات لێ بکەن تا خۆت بە ویکیفەرھەنگ ئاشنا بکەیت: * [[ویکیفەرھەنگ:ڕێکخستنی سەروشە|ڕێکخستنی سەروشە]] سیاسەتێکی وردە لەسەر شێوازی ڕێکخستنی پەڕەی ویکیفەرھەنگ؛ فەرزە ھەموو سەروشەکان پەیڕەویی لێ بکەن. ئاسانترین ڕێگا بۆ ئەوەی دەست پێ بکەیت، ئەوەیە کە ناوەڕۆکی پەڕەیەکی سەروشەی تری ھەمان زمان لەبەر بگریتەوە و، ئینجا لەگەڵ ئەو پەڕەیەی کە دروستی دەکەیت بیگونجێنیت. * سەیری [[ویکیفەرھەنگ:ڕەچاوکردنی زمان|ڕەچاوکردنی زمان]] بکە تا زیاتر لەسەر چۆنێتیی دەستکاریکردنی زمانێکی دیاریکراو بزانیت. * [[ویکیفەرھەنگ:پێوەرەکانی قبووڵکردن|پێوەری قبووڵکردنەکەمان]] بەتەواوی باسی ئەو وشانە دەکات کە دەکرێت بۆ ویکیفەرھەنگ زیاد بکرێ؛ گرنگترین شت ئەوەیە کە ویکیفەرھەنگ تەنیا ئەو وشانە قبووڵ دەکات کە بە لای کەمەوە بۆ ماوەی ساڵێک تا ڕادەیەک بە شێوەیەکی بەرفراوان بە کار ھێنراون، و کە گومان ھەبوو داوای ئەو سەرچاوانە بکرێت کە بەکارھێنانیان دەسەلمێنێ. * ئەگەر پێشتر ئەزموونێکت لە دەستکاریکردنی پڕۆژەی [[w:دەستپێک|ویکیپیدیا]] ھەبووە، ئەوا لەوانەیە [[:en:Wiktionary:Wiktionary for Wikipedians|ڕێنمایی بۆ بەکارھێنەرانی ویکیپیدیا]] بە کەڵک بێت بۆت. * ئەگەر ھەر پرسیارێکت ھەیە، تکایە بیانبە [[ویکیفەرھەنگ:مێزی زانیاری]] یانیش لە پەڕەی وتووێژەکەم لە منیان بپرسە. * ھانت دەدەین تا [[:en:WT:Babel|سنووقی بابل]] بۆ پەڕەی بەکارھێنەریت زیاد بکەیت تا ئاستی زانینی زمانەکانت دیاری بکەیت. <div style="text-align:center; font-weight:bold; margin-top: 1em;">چێژ لە مانەوەت لە ویکیفەرھەنگ ببینە!</div> </div> [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٧:٢٤، ٢٥ی نیسانی ٢٠٢٦ (+03) == [[داڕێژە:trans-top]] == {{Rtl}} Silav, Could you replace "right" with "left" here: [[MediaWiki:Common.css#L-569]]. Spas! [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٤٠، ٩ی ئابی ٢٠٢٦ (+03) :Silav Ghybu, bi xêr hatî :It is written as right because Sorani Kurdish writing is from RTL. If it is changed to left, the translation table will get messed up. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٠٩:٣٨، ٩ی ئابی ٢٠٢٦ (+03) ::Look at the [[Template:trans-top]] table: currently, "[بشارەوە ▲]/[پیشان بدە ▼]" is written to the right of the table; this is incorrect—it should be placed at the far left of the table. Check the Sorani Wikipedia article [https://ckb.wikipedia.org/wiki/%D8%AF%D8%A7%DA%95%DB%8E%DA%98%DB%95:%D9%86%D9%88%D9%88%D8%B3%DB%95%D8%B1%D8%A7%D9%86_%D9%88_%D8%B4%D8%A7%D8%B9%DB%8C%D8%B1%D8%A7%D9%86%DB%8C_%D8%B3%DB%95%D8%AF%DB%95%DB%8C_%D8%A8%DB%8C%D8%B3%D8%AA%DB%95%D9%85%DB%8C_%D9%81%DB%95%DA%95%DB%95%D9%86%D8%B3%D8%A7]: it is located to the left of the title, not to the right. [[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٨:٤٥، ٩ی ئابی ٢٠٢٦ (+03) :::PS: In the English Wiktionary (written left-to-right), it is also on the right: [https://en.wiktionary.org/wiki/MediaWiki:Gadget-Site.css#L-627] ::::[[بەکارھێنەر:Aram|Aram]]: If you have time, check this out. [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ٢٣:٠٣، ٩ی ئابی ٢٠٢٦ (+03) :::::Hey -Haryad and {{وب|Ghybu}} {{کرا|Done!}} To see the changes, please [https://ckb.wiktionary.org/w/index.php?title=%D8%AA%D8%A7%DB%8C%D8%A8%DB%95%D8%AA%3A%D8%A8%DB%95%D8%B4%D8%AF%D8%A7%D8%B1%DB%8C%DB%8C%DB%95%DA%A9%D8%A7%D9%86&target=Aram&namespace=all&tagfilter=&start=2026-08-10&end=2026-08-10&limit=50 check the edits I've made today]. Thanks! [[بەکارھێنەر:Aram|Aram]] ([[لێدوانی بەکارھێنەر:Aram|لێدوان]]) ٠٧:٢٦، ١٠ی ئابی ٢٠٢٦ (+03) ::::::Spas! {{ping|Aram}} Here too [https://ckb.wiktionary.org/wiki/%D9%85%DB%8C%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Common.css#L-520], <code>padding-left: 10px;</code> needs to be replaced with <code>padding: 1px 10px 1px 5px;</code> because the title is too close to the edge, see [[سێو#وەرگێڕانەکان]]. By the way, what are the Sorani terms for "[[conjugation]]" (of verbs) and "[[declension]]" (of nouns)? That way, I'll be able to add them [[کەوتن|here]]. Do you have a page where you've listed all the section names? I think that could really help newcomers. One more thing: the characters are too small here, aren't they? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ١٥:٤٣، ١٠ی ئابی ٢٠٢٦ (+03) ::::::: Category names are formed from these words: [[مۆدیوول:headword/data#L-41]], when the templates [[Template:ckb-noun]], [[Template:ckb-verb]], etc., are used. For example: [[:پۆل:کوردیی ناوەندی nouns]] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[:لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:٥٧، ١١ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} {{Rtl}} ::::::::[[بەکارھێنەر:Aram|Aram]]: ping [[User:-Haryad |<span style="color:black; font-size:16px;">'''ʜᴀʀʏᴀᴅ'''</span>]] <sub>[[User Talk: -Haryad |<span style="color:yellow; Background:black ">'''ᴛᴀʟᴋ'''</span>]]</sub> ١٩:٢٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: Categories now work using {{tl|auto cat}}. Categories are automatically formed as follows: "Lemma + " بە " + lang", for example: [[:پۆل:ناو بە کوردیی ناوەندی]]/[[:پۆل:کار بە کوردیی ناوەندی]] :::::::: The names of the lemmas are here: [[:مۆدیوول:category tree/lemmas]] :::::::: For example, you can change the description displayed in English in the category here: [https://ckb.wiktionary.org/w/index.php?title=%D9%85%DB%86%D8%AF%DB%8C%D9%88%D9%88%D9%84:category_tree/lemmas&oldid=36747#L-633] --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٢٣:٤٧، ١٢ی ئابی ٢٠٢٦ (+03) :::::::: One last remark, and then I'll leave you be :) You created the language category names by adding "زمانی" ( zimanî + "lang"), like here [[:پۆل:زمانی کوردیی ناوەندی]]. Why not create the category using simply the name of the language, as most Wiktionaries do ? --[[بەکارھێنەر:Ghybu|Ghybu]] ([[لێدوانی بەکارھێنەر:Ghybu|لێدوان]]) ٠٠:١٣، ١٣ی ئابی ٢٠٢٦ (+03) {{Rtl/end}} 8o9mcbkc8bhwyca5a9px5vm444pgrlv پۆل:ھاوەڵناو بە کوردیی ناوەندی 14 11430 36746 2026-08-12T20:37:09Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36746 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:کار بە کوردیی ناوەندی 14 11431 36748 2026-08-12T20:41:35Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36748 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە کوردیی باکووری 14 11432 36759 2026-08-12T22:31:50Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36759 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە ئینگلیزی 14 11433 36762 2026-08-12T22:35:01Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36762 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:کار بە ئینگلیزی 14 11434 36763 2026-08-12T22:35:35Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36763 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:لەما بە ئینگلیزی 14 11435 36764 2026-08-12T22:36:51Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36764 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:لەما بە کوردیی باکووری 14 11436 36766 2026-08-12T22:39:18Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36766 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:کار بە کوردیی باکووری 14 11437 36767 2026-08-12T22:39:38Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36767 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ھاوەڵناو بە کوردیی باکووری 14 11438 36768 2026-08-12T22:40:04Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36768 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە فەڕەنسی 14 11439 36769 2026-08-12T22:40:45Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36769 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە تورکی 14 11440 36770 2026-08-12T22:41:10Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36770 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:لەما بە تورکی 14 11441 36771 2026-08-12T22:41:39Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36771 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە فارسی 14 11442 36772 2026-08-12T22:42:14Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36772 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:لەما بە فارسی 14 11443 36773 2026-08-12T22:42:28Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36773 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ناو بە عەرەبی 14 11444 36776 2026-08-12T22:53:25Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36776 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:لەما بە عەرەبی 14 11445 36777 2026-08-12T22:53:38Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36777 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx داڕێژە:ڕەوانەکەری پۆل 10 11446 36787 2026-08-13T00:48:35Z Ghybu 12 From [[w:داڕێژە:ڕەوانەکەری پۆل]] 36787 wikitext text/x-wiki {| align="center" width="80%" id="softredirect" style="margin-top:0.5em; margin-bottom:0.5em; border: solid 1px #a2a9b1; background: #e4d8ff; line-height:1.4em;" |- | style="padding:0em 0.8em 0em 0.3em" | [[File:Redirect_arrow_rtl_without_text.svg|120px]] | style="padding-right:0.5em; padding-left:0.5em" | '''ئەم پۆلە گوێزراوەتەوە بۆ <span id="softredirect">[[:پۆل:{{{1}}}]]</span>.''' : '''سەرنج:''' ئەم پۆڵە دەبێ واڵا بێ. |}<noinclude>{{documentation}}</noinclude> o5b9zre21xjzoss5srw0dov2494ej28 پۆل:ناو بە ڕووسی 14 11447 36791 2026-08-13T01:03:16Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36791 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:ھاوەڵناو بە ئینگلیزی 14 11448 36794 2026-08-13T01:21:10Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36794 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx پۆل:Categories calling Template:auto cat 14 11449 36796 2026-08-13T03:16:28Z Ghybu 12 پەڕەی دروست کرد بە «{{auto cat}}»ەوە 36796 wikitext text/x-wiki {{auto cat}} eomzlm5v4j7ond1phrju7cnue91g5qx داڕێژە:head/documentation 10 11450 36797 2026-08-13T11:10:52Z Ghybu 12 پەڕەی دروست کرد بە «{{uses lua|Module:headword/templates}} This template is used to create a basic headword line. This is the line of text that comes between the part-of-speech header (like <code>===Noun===</code>) and the actual definitions of the word. Every Wiktionary entry must have one headword line per part of speech. ==Basic usage== The basic usage of this template is: : <code><nowiki>{{</nowiki>head|<var>lang</var>|<var>part of speech</var>}}</code> The...»ەوە 36797 wikitext text/x-wiki {{uses lua|Module:headword/templates}} This template is used to create a basic headword line. This is the line of text that comes between the part-of-speech header (like <code>===Noun===</code>) and the actual definitions of the word. Every Wiktionary entry must have one headword line per part of speech. ==Basic usage== The basic usage of this template is: : <code><nowiki>{{</nowiki>head|<var>lang</var>|<var>part of speech</var>}}</code> The first parameter is the language code (see [[Wiktionary:Languages]]), which is required in all cases. The second is the part of speech. For example on {{m|nl|van}}: {{demo|<nowiki>{{head|nl|preposition|pagename=van}}</nowiki>}} The part of speech is used to add a category to the page. So, the above code would also add the page to [[:Category:Dutch prepositions]]. Using {{temp|head}} directly in an entry, similar to this example, is preferred for words for which the basic usage (two or three parameters) is enough, such as: * words in non-inflecting languages, such as Chinese * parts of speech with no grammatical information, like prepositions * parts of speech where the grammatical information is very simple, such as a plural form or gender only (see [[#Gender and number|below]] to learn how to include this) If a language requires a relatively complex call to {{temp|head}} for many words (such as the same set of inflected forms in many entries, or using <code>sort=</code> in every entry), the language may need its own headword-line templates. Templates made specifically for a given language can handle inflections and other grammatical issues that are specific to that language without reinventing the wheel in every single entry. Many languages already have dedicated [[:Category:Headword-line templates by language|sets of headword-line templates]], such as {{temp|en-verb}}, {{temp|ja-noun}}, {{temp|de-noun}}, {{temp|la-verb}} and so on. ==Parameters== A short reference of all parameters. ; {{para|1}} : The language code. See [[Wiktionary:Languages]]. ; {{para|sc}} : The script code. See [[Wiktionary:Scripts]]. This is rarely needed as the script can generally be automatically detected. ; {{para|2}} : The [[WT:Part of speech|part of speech]] category (such as "noun", "verb", "adjective" etc), which is used to add the entry to the appropriate category. This can be in either plural or singular form. In the latter case, the template will pluralise it automatically if it doesn't already end in ''-s''. Exceptions can be added to the <code>invariable</code> list at the top of [[Module:headword/data]] if necessary. ; {{para|head}} and {{para|head2}}, {{para|head3}} ... : Overrides the headword that is displayed. This is used primarily to add diacritical marks or to link to individual words in a multi-word term. By default, if the page name has spaces in it, the words are split across the spaces, which is usually correct but may need overriding. Additional parameters are available if more than one headword needs to be shown. ; {{para|tr}} and {{para|tr2}}, {{para|tr3}} ... : Provides the transliteration for the term, see [[Wiktionary:Transliteration]]. For many languages, this can be generated automatically so this does not need to be specified, but some entries cannot be reliably transliterated automatically (e.g. Arabic) so this parameter is necessary then. The additional parameters with a number correspond to each additional headword, pairwise. ; {{para|g}} : Provides gender/number specifications for the term, if necessary. Separate multiple specifications with a comma (with no space following). You can use inline modifiers {{cd|<l:...>}}, {{cd|<ll:...>}}, {{cd|<q:...>}}, {{cd|<qq:...>}} or {{cd|<ref:...>}} to add labels, qualifiers and/or references to individual gender-number specifications. See examples below, and see [[Module:gender and number]] for the format used. <small>Alternatively, additional gender/number specs can be given in {{para|g2}}, {{para|g3}}, etc., but this is deprecated.</small> ; {{para|cat2}}, {{para|cat3}}, {{para|cat4}} : Additional part-of-speech or other categories. Unlike the part-of-speech category in {{para|2}}, these should always be in the plural. ; {{para|noposcat|1}} : If given, don't automatically place the headword in a category based on the part of speech as given in {{para|2}}. Normally, two categories are added, one based on the part of speech given (e.g. [[:Category:Sanskrit nouns]]) and one based on the type of the part of speech, either lemma or non-lemma form (e.g. [[:Category:Sanskrit lemmas]]). Specifying {{para|noposcat|1}} will suppress both categories. ; {{para|nogendercat|1}} : If given, don't automatically place the headword in categories based on the gender(s). Normally, headwords with gender/number specifications given are placed in categories appropriate for the gender and number, e.g. [[:Category:Sanskrit masculine nouns]], [[:Category:Russian animate nouns]], [[:Category:Czech imperfective verbs]] or [[:Category:Spanish pluralia tantum]]. ; {{para|nomultiwordcat|1}} : If given, don't automatically categorize multiword headwords. Normally, for most languages, headwords with multiple words are placed in a special category, e.g. [[:Category:Sanskrit multiword terms]]. This is automatically suppressed for some languages, e.g. sign languages; languages without spaces between terms (such as Chinese, Japanese and Thai); or languages with spaces between syllables (such as Vietnamese). This is controlled by [[Module:headword/data]]. ; {{para|nopalindromecat|1}} : If given, don't automatically categorize palindromes. Normally, for most languages, palindromes are placed in a category like [[:Category:English palindromes]] or [[:Category:Hungarian palindromes]]. For some languages, there are language-specific rules for handling digraphs; for example, in Hungarian, ''gy'', ''sz'', ''zs'' and certain other combinations are treated like single letters for palindrome purposes, meaning that words like {{m|hu|koszok}} and {{m|hu|legyél}} are considered palindromes. This can create problems, e.g. {{m|hu|gazság}} would be categorized as a palindrome but is not because in this word, ''zs'' is two separate sounds rather than a digraph. Specifying {{para|nopalindromecat|1}} disables this categorization. ; {{para|sccat|1}} : If given, automatically add a category "(lang) (pos)es in (script) script" (e.g. [[:Category:Sanskrit nouns in Devanagari script]]), for the script specified using {{para|sc}} or autodetected based on the value specified to {{para|head}} or the page name. This category is useful for languages that can be written in multiple scripts. ; {{para|autotrinfl|1}} : If given, include automatic transliteration after each of the inflections specified using {{para|3}}, {{para|4}} and further parameters (see below). This can also be set for individual inflected forms using {{para|f''N''autotr}}. ; {{para|sort}} : The sort key to use when placing the entry in the above categories. This is rarely needed, as the default generated sort key is usually correct. ; {{para|3}}, {{para|4}} and further : Specifies inflected forms to show. These are specified pairwise, with the first giving the name of the form, and the second giving the form itself. So the forms are numbered like this: {{tl|head|language|category|name 1|form 1|name 2|form 2|name 3|form 3|...}}. If multiple forms exist for the same name, separate them by using "<code>or</code>" as the name. Forms work the same as the 2nd parameter of {{tl|l}}, and can thus have embedded wikilinks, will have certain diacritics removed, and so on. : The following additional parameters are available for each form, with <code>''N''</code> replaced by the number of the form: :; {{para|f''N''alt}} :: Specifies the alternative display form of the inflected form, much like the 3rd parameter of {{tl|l}}. :; {{para|f''N''tr}} :: Specifies the transliteration of the inflected form, much like the {{para|tr}} parameter of {{tl|l}}. :; {{para|f''N''ts}} :: Specifies the transcription of the inflected form, much like the {{para|ts}} parameter of {{tl|l}}. The same caveats apply as for that parameter. :; {{para|f''N''sc}} :: Specifies the script of the form; works like {{para|sc}}. :; {{para|f''N''id}} :: Specifies the sense ID to use for the link to the form's entry. See {{tl|senseid}} and the {{para|id}} parameter of {{tl|l}}. :; {{para|f''N''g}} :: Provides gender/number specification(s) to display after the form. To include multiple specifications, separate them by commas (with no space following). Uses the same gender/number specifications as for {{para|g}}. You can use inline modifiers {{cd|<l:...>}}, {{cd|<ll:...>}}, {{cd|<q:...>}}, {{cd|<qq:...>}} or {{cd|<ref:...>}} to add labels, qualifiers and/or references to individual gender-number specifications, as for the overall {{para|g}} parameter. :; {{para|f''N''l}} :: Specifies a label or labels (comma-separated, with no space after the comma) that should appear before the form, formatted like the template {{tl|lb}} does. This is used to mark certain forms as archaic, rare or similar. :; {{para|f''N''ll}} :: Specifies a label or labels (comma-separated, with no space after the comma) that should appear after the form, formatted like the template {{tl|lb}} does. :; {{para|f''N''q}} :: Specifies a qualifier that should appear before the form, formatted like the template {{tl|q}} does. This is used to add descriptive text such as ''in the meaning “foo”'' before a form. :; {{para|f''N''qq}} :: Specifies a qualifier that should appear after the form, formatted like the template {{tl|q}} does. :; {{para|f''N''ref}} :: Specifies a reference or references that should appear after the form, in the same format as specified for references given to {{tl|IPA}}. :; {{para|f''N''t}} :: Specifies a gloss for the form, if its meaning is not apparent. Use this sparingly. :; {{para|f''N''lit}} :: Specifies a literal meaning for the form, if its meaning is not apparent. Use this sparingly. :; {{para|f''N''pos}} :: Specifies a part of speech for the form, if its part of speech is not apparent. Use this sparingly. The same codes as for the {{para|pos}} parameter of {{tl|l}} are accepted; anything else is displayed as-is. :; {{para|f''N''ng}} :: Specifies arbitrary non-gloss explanatory text for the form. Use this sparingly. : The following parameters are available only for each ''name'', meaning that if multiple forms are displayed for the same name (with "<code>or</code>"), these parameters should use the number of the ''first'' form. They are automatically applied to all forms following that name. :; {{para|f''N''accel-form}} :: Specifies an accelerated creation tag to be used by the [[WT:ACCEL]] gadget, to automatically generate an entry for a non-lemma form when the link is clicked. For information about acceleration tags, see [[WT:ACCEL#Acceleration tags]]. This should not be used directly in entries. If you find you need to use it, or any of the following acceleration-related parameters, you should probably make a custom template for the language instead. If the acceleration tag contains a vertical bar <code><nowiki>|</nowiki></code>, use {{tl|!}} instead. :; {{para|f''N''accel-translit}} :: Specifies a manual transliteration of the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|tr}} of the call to {{tl|head}} in the accelerated entry. You only need to specify this for languages that use a non-Latin script, and only when the auto-generated transliteration is insufficient, incorrect or nonexistent. :; {{para|f''N''accel-lemma}} :: Specifies the lemma corresponding to the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|2}} of the call to {{tl|inflection of}} in the accelerated entry. It defaults to the name of the current page, and only needs to be specified when the lemma contains additional diacritics that are stripped in order to generate the pagename (as in Latin, Russian, Ancient Greek, Old English, etc.). :; {{para|f''N''accel-lemma-translit}} :: Specifies a manual transliteration of the lemma corresponding to the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|tr}} of the call to {{tl|inflection of}} in the accelerated entry. You only need to specify this for languages that use a non-Latin script, and only when the auto-generated transliteration is insufficient, incorrect or nonexistent. :; {{para|f''N''accel-gender}} :: Specifies the gender of the non-lemma form for use with accelerated creation of entries; see [[WT:ACCEL]] and {{para|f''N''accel-form}} above. The value of this parameter goes into param {{para|g}} of the call to {{tl|head}} in the accelerated entry. You should only rarely specify this. :; {{para|f''N''accel-nostore|1}} :: For use with accelerated creation of entries. Place this on links that appear in the collapsed state of collapsible tables; see [[WT:ACCEL]]. :; {{para|f''N''nolink|1}} :: Inhibits automatic creation of a link to the forms. The forms will just be displayed in bold text instead. Links that are embedded into the form parameters are retained. :; {{para|f''N''request|1}} :: Causes the page to be added to [[:Category:Requests for inflections by language|Category:Requests for inflections in LANG entries]] if a form is missing. :; {{para|f''N''autotr|1}} :: Causes automatic transliteration to be included after each form. ==Detailed usage== Note that the examples are for illustrative purposes only, to demonstrate how {{tl|head}} works. For most of the languages and parts of speech shown here, there are dedicated headword-line templates that should be used in entries instead of directly invoking {{tl|head}}. ===Part of speech=== The part of speech (second parameter) can be either singular or plural, and written out fully (e.g. {{cd|interjection}}) or abbreviated (e.g. {{cd|int}} or {{cd|intj}}). If the part of speech is written out in full, it is stylistically preferred to write it in the singular. Add the word "form" to indicate a non-[[Wiktionary:Lemmas|lemma]] form. For example, use {{cd|noun form}} for plurals and inflections of nouns. The following part of speech aliases (abbreviations) are recognized by the module. In addition, any alias or fully-written part of speech in the singular can be followed by {{cd|f}} as an abbreviation for "form". For example, {{cd|nf}} or {{cd|nounf}} expands to {{cd|noun forms}}, and {{cd|compadjf}} expands to {{cd|comparative adjective forms}}. {{#invoke:headword doc|pos_alias_table}} ===Displayed headword=== Normally, the displayed headword is the same as the name of the current page. The parameter {{para|head}} can be used to specify a different headword to display. This can be useful if additional accent marks should be placed on the word, that are not present in the normal written form that is given in the page's name. For example, the Latin word {{m|la|scribo}} is normally written that way, but is also spelled {{m|la||scrībō}} in its fully accented form. For such a case, you would specify {{para|head|scrībō}}. Another purpose of this parameter is for terms that consist of multiple words. The {{para|head}} parameter can be used to link to the individual words that the term is made up of. For example, for the English phrasal verb {{m|en|give up}}, you could use: : <code><nowiki>{{head|en|verb|head=[[give]] [[up]]}}</nowiki></code> : {{head|en|verb|head=[[give]] [[up]]}} Note in the above example that the template automatically adds the correct language section to the links in the same way as {{temp|l}}. So the links actually come out as if written <code><nowiki>[[give#English|give]] [[up#English|up]]</nowiki></code>. This means that you should not add such section links yourself, nor should you use {{temp|l}} inside the {{para|head}} parameter. These were necessary in the past, but they can now be safely removed. In a few cases it may be necessary to show more than one headword. For example, a language like Russian might have a word with a single written form, but multiple alternative ways of placing the accent marks (compare this to English {{m|en||kílometer}} and {{m|en||kilómeter}}). Additional headwords can be displayed using the parameters {{para|head2}}, {{para|head3}} and so on. ===Transliteration=== If a term is written in a script other than the Latin alphabet, a transliteration of the term into the Latin alphabet should be provided using the {{para|tr}} parameter. Every language generally has its own rules for writing transliterations on Wiktionary; check with the language's entry guidelines page (such as [[Wiktionary:Russian entry guidelines]]) for more information. The template can automatically transliterate words in many languages; this is controlled through special transliteration modules such as [[Module:el-translit]] (and also the data in [[Module:languages]]). This means that for those languages, a transliteration does not need to be provided, as it can be generated internally. If the {{para|head}} parameter was provided, it is used as the base for the transliteration instead, so that any additional accents are also included in the transliteration. Use {{para|tr|-}} if you don't want a transliteration to be automatically generated (you shouldn't really ever do this in an entry). ===Gender and number=== The template has a set of parameters to display gender, number, noun class or other kinds of grammatical property. These are used and displayed in the standard format required by [[Module:gender and number]]. The gender is given with the optional {{para|g}} parameter. If more than one specification is necessary, separate them with a comma, with no space following, as follows (for {{m+|sc|dì}}): {{demo2|<nowiki>{{head|sc|noun|g=f,m<l:uncommon>|plural|dis|pagename=dì}}</nowiki>}} This also shows the use of an inline modifier attached to the second gender. If you know that a gender is needed, but don't know what it is, specify {{para|g|?}}, which will add the page to a cleanup category. You can also specify a partial gender. For example, if you know that a word is plural but don't know if it's, say, masculine or feminine plural, you can specify {{para|g|?-p}}. ===Inflections=== Further optional parameters are available to display inflections or other closely related forms of the word. These are given pair-wise: the first of each pair gives a label for the inflection, and the second then gives the actual term. For example, in the [[Wiktionary:Sandbox|Sandbox]]: {{demo2|<nowiki>{{head|en|noun|plural|Sandboxes|irregular plural|Sandboxen|pagename=Sandbox}}</nowiki>}} Certain diacritics are automatically removed from the term when creating the link, just like {{temp|l}} and {{temp|term}} do. So you don't need to worry about removing them yourself. A Latin example, where macrons are removed automatically: {{demo2|<nowiki>{{head|la|noun|head=nīdus|g=m|genitive|nīdī|pagename=nidus}}</nowiki>}} If you want to display multiple alternative forms of an inflection, you can use <code>or</code> as the label separating them. The template will recognise this and omit the comma: {{demo2|<nowiki>{{head|en|noun|plural|lemmas|or|lemmata|pagename=lemma}}</nowiki>}} The term (second part of a pair) may be blank. This can be used to add a simple note, such as "uncountable" or "intransitive": {{demo2|<nowiki>{{head|en|noun|countable and uncountable||plural|milks|pagename=milk}}</nowiki>}} If the label is blank, but the term is not, it acts as if the term was not specified either and omits both. This is not very useful in entries, but it can be a very powerful feature when writing templates using {{temp|head}} as a base. You can specify alternative display form, script, sense id and gender for each form with the parameters {{para|fNalt}}, {{para|fNsc}}, {{para|fNid}} and {{para|fNg}}, with "N" replaced with the number of the form. Some examples: {{demo2|<nowiki>{{head|sh|noun|head=tȇlo|g=n|Cyrillic spelling|те̑ло|f1sc=Cyrl|pagename=telo}}</nowiki>}} {{demo2|<nowiki>{{head|de|noun|g=m|genitive|Hundes|or|Hunds|plural|Hunde|diminutive|Hündchen|f4g=n|pagename=Hund}}</nowiki>}} {{demo2|<nowiki>{{head|ja|noun|uncountable||hiragana|せいじ|romaji|seiji|f3sc=Latn|pagename=政治}}</nowiki>}} {{demo2|<nowiki>{{head|cmn|noun|traditional and simplified||Pinyin|zhèngzhì|f2sc=Latn|pagename=政治}}</nowiki>}} When using {{temp|head}} as a base to create other templates, the class for accelerated links ([[WT:ACCEL]]) can be added with {{para|fNaccel-form}}. See [[Module:headword]] for more information on how to use this. If the label is <code>or</code>, the corresponding acceleration is ignored, and it is "inherited" from the preceding form. Examples: {{demo2|<nowiki>{{head|ca|noun|g=m|plural|f1accel-form=p|homes|or|hòmens|pagename=home}}</nowiki>}} An inflection term can contain wikilinks as part of the parameter, like the {{para|head}} parameter as well as the {{temp|l}} template. Language sections will be added to the individual links: {{demo2|<nowiki>{{head|en|adjective|comparative|[[more]] broken|superlative|[[most]] broken|pagename=broken}}</nowiki>}} Naturally, you should only use this to display a ''single'' form that consists of multiple words. You should not use this to specify multiple alternative forms; use the <code>or</code> label for this instead. The following example shows the use of {{para|fNl}} to attach labels to forms (on {{m+|cim|lachan}}): {{demo2|<nowiki>{{head|cim|verb|third-person singular present indicative|lachet|past participle|galàchet|or|gelacht|auxiliary|haban|or|håm|f2l=Sette Comuni|f3l=Luserna|f4l=Sette Comuni|f5l=Luserna|cat2=weak verbs|pagename=lachan}}</nowiki>}} ===Categories=== There are a few more parameters available for categories: * {{para|sort}} specifies a category sort key. This is rarely needed, as by default, a sort key will be generated for the language according to the rules defined for that language in [[Module:languages]] (the <code>sort_key</code> setting). For languages that have no sort key rules defined yet, the default sort key is the name of the page, with any hyphens removed from the beginning of the name. * {{para|cat2}}, {{para|cat3}} and , {{para|cat4}} specify additional category names that the page should be added to. The language's name is added in front, so if you use <code><nowiki>{{head|en|verb|cat2=irregular verbs}}</nowiki></code>, the page will be added to both [[:Category:English verbs]] and [[:Category:English irregular verbs]]. Note that this parameter must be given in plural, unlike the part-of-speech parameter! ===Script code=== The optional parameter {{para|sc}} gives the script code (see [[Wiktionary:Scripts]]). The script can usually be detected automatically based on the possibilities listed for the language in [[Module:languages]], so this parameter is only needed in rare cases. The example below is thus only for illustrative purposes; a real example would not need {{para|sc}} here. An example, for the entry {{m|sh|море}}, one might use: {{demo2|<nowiki>{{head|sh|noun|sc=Cyrl|g=n|pagename=море}}</nowiki>}} <includeonly> [[Category:Headword-line templates|head]] </includeonly> ==TemplateData== <templatedata> { "params": { "1": { "label": "language code", "description": "The language code. See [[Wiktionary:Languages]].", "type": "line", "required": true }, "2": { "label": "part of speech", "description": "The part of speech category which is used to add the entry to the appropriate category. This can be in either plural or singular form. In the latter case, the template will pluralise it automatically if it doesn't already end in ''-s''. Exceptions can be added to the <code>invariable</code> list at the top of [[Module:headword/templates]] if necessary.", "type": "string", "example": "verb", "required": true }, "3": { "label": "name of form 1", "description": "The name of a first of form of a term.", "type": "string" }, "4": { "label": "form 1", "description": "A first form of the term.", "type": "string" }, "sc": { "label": "script code", "description": "The script code. See [[Wiktionary:Scripts]]. This is rarely needed as the script can generally be automatically detected." }, "cat sc": { "label": "script code with category", "description": "The same as {{para|sc}}, but this also adds \"in (name) script\" to the category specified by the second parameter below. This is used to subcategorise words in different scripts, if languages can be written in more than one script. If both {{para|sc}} and {{para|cat sc}} are provided, the latter takes precedence.", "type": "string" }, "cat2": { "label": "part of speech category 2", "description": "Additional part-of-speech categories. Unlike the <code>part of speech</code>, these should always be in plural.", "type": "string" }, "cat3": { "label": "part of speech category 3", "description": "Additional part-of-speech categories. Unlike the <code>part of speech</code>, these should always be in plural.", "type": "string" }, "sort": { "label": "sort key", "description": "The sort key to use when placing the entry in the above categories. This is rarely needed, as the default generated sort key is usually correct.", "type": "string" }, "head": { "description": "Overrides the headword that is displayed. This is used primarily to add diacritical marks or to link to individual words in a multi-word term. By default, if the page name has spaces in it, the words are split across the spaces, which is usually correct but may need overriding. Additional parameters are available if more than one headword needs to be shown.", "type": "string" }, "head2": { "description": "Additional term for the headword display.", "type": "string" }, "head3": { "description": "Additional term for the headword display.", "type": "string" }, "head4": { "description": "Additional term for the headword display.", "type": "string" }, "head5": { "description": "Additional term for the headword display.", "type": "string" }, "tr": { "description": "Provides the transiteration for the term, see [[Wiktionary:Transliteration]]. For many languages, this can be generated automatically so this does not need to be specified, but some entries cannot be reliably transliterated automatically (e.g. Arabic) so this parameter is necessary then.", "type": "string" }, "tr2": { "description": "Provides the transiteration for the term, should match <code>head2</code>.", "type": "string" }, "tr3": { "description": "Provides the transiteration for the term, should match <code>head3</code>.", "type": "string" }, "tr4": { "description": "Provides the transiteration for the term, should match <code>head4</code>.", "type": "string" }, "tr5": { "description": "Provides the transiteration for the term, should match <code>head5</code>.", "type": "string" }, "g": { "description": "Provides gender specifications for the word, if necessary. See [[Module:gender and number]] for the format used.", "type": "string" }, "g2": { "description": "Provides gender specifications for the word, if necessary, should match <code>head2</code>.", "type": "string" }, "g3": { "description": "Provides gender specifications for the word, if necessary, should match <code>head3</code>.", "type": "string" }, "g4": { "description": "Provides gender specifications for the word, if necessary, should match <code>head4</code>.", "type": "string" }, "g5": { "description": "Provides gender specifications for the word, if necessary, should match <code>head5</code>.", "type": "string" } }, "description": "This template is used to create a basic headword line. This is the line of text that comes between the part-of-speech header (like <code>===Noun===</code>) and the actual definitions of the word. ", "paramOrder": [ "1", "2", "sc", "cat sc", "cat2", "cat3", "sort", "head", "head2", "head3", "head4", "head5", "tr", "tr2", "tr3", "tr4", "tr5", "g", "g2", "g3", "g4", "g5", "3", "4" ], "format": "inline" } </templatedata> 4af681hbqbyb52anhern0fu8jlrzdbj داڕێژە:demo2 10 11451 36798 2026-08-13T11:12:14Z Ghybu 12 پەڕەی دروست کرد بە «<includeonly>{{#invoke:demo|main|fmt=twoline}}</includeonly><noinclude>{{documentation}}</noinclude>»ەوە 36798 wikitext text/x-wiki <includeonly>{{#invoke:demo|main|fmt=twoline}}</includeonly><noinclude>{{documentation}}</noinclude> 417sbtee06xrhqzb3uv3t1t68mqwfwa داڕێژە:demo 10 11452 36799 2026-08-13T11:13:55Z Ghybu 12 پەڕەی دروست کرد بە «<includeonly>{{#invoke:demo|main}}</includeonly><noinclude>{{documentation}}</noinclude>»ەوە 36799 wikitext text/x-wiki <includeonly>{{#invoke:demo|main}}</includeonly><noinclude>{{documentation}}</noinclude> gtlov5con2hyrnl984a5hrroa0fjac9 مۆدیوول:demo 828 11453 36800 2026-08-13T11:15:30Z Ghybu 12 From en wiktionary 36800 Scribunto text/plain local export = {} local string_remove_comments_module = "Module:string/removeComments" local string_utilities_module = "Module:string utilities" local require = require local tonumber = tonumber local unstrip_nowiki = mw.text.unstripNoWiki local function remove_comments(...) remove_comments = require(string_remove_comments_module) return remove_comments(...) end -- Ported from [[w:Module:Demo]] by Benwing2 on Sep 1st 2023 around 6am UTC. -- Significantly reworked since then; quite divergent by now. local nowiki_strip_marker_pattern = "\127'\"`UNIQ%-%-nowiki%-" .. ("[%dA-F]"):rep(8) .. "%-QINU`\"'\127" local nowiki_replacements = { ["gt"] = ">", ["lt"] = "<", ["#123"] = "{", ["#125"] = "}", } function export.main(frame) local boolean = {type = "boolean"} local parent_args = frame:getParent().args local args = require("Module:parameters").process(parent_args, { [1] = true, ["fmt"] = { set = { ["compact"] = true, ["c"] = "compact", ["inline"] = true, ["i"] = "inline", ["1"] = "inline", ["multiline"] = true, ["m"] = "multiline", ["raw"] = true, ["twoline"] = true, ["2"] = "twoline", ["twocol"] = true, ["2c"] = "twocol", ["2col"] = "twocol", ["nooutput"] = true, ["0"] = "nooutput", }, default = frame.args.fmt or "compact" }, ["br"] = true, ["fullsep"] = true, ["sep"] = true, ["reverse"] = boolean, ["nocat"] = boolean, ["style"] = true, ["omit"] = {sublist = true, default = "pagename"}, ["indent"] = true, -- Hack to allow for &gt; to appear in the output, if &amp;gt; is supplied in the input. -- Otherwise this isn't possible because > and &gt; both end up as &gt; when placed inside of <nowiki>...</nowiki> -- and passed through unstrip_nowiki(), and can't be distinguished. As a result, the code below converts &gt; back -- to >, and there's no way to get a literal &gt; in the output since &amp;gt; normally ends up unchanged. ["replace_amp"] = boolean, }) local source = args[1] if source:match(nowiki_strip_marker_pattern) then -- Unescape the four patterns that automatically get escaped by nowiki -- (taken from CoreTagHooks.php). source = unstrip_nowiki(source) source = source:gsub("()&([#gl][1t]2?[35]?);", function(pos, code) local ch = nowiki_replacements[code] if ch == "{" then -- -{ return source:byte(pos - 1) == 0x2D and ch or nil elseif ch == "}" then -- }- return source:byte(pos + 6) == 0x2D and ch or nil end return ch end) if args.replace_amp then source = source:gsub("&amp;", "&") end end local fullsep, sep, fmt, rev, indent = args.fullsep, args.sep, args.fmt, args.reverse, args.indent local output = fmt == "nooutput" and "" or remove_comments(frame:preprocess(source), "POST") -- FIXME: this will miss some categories. if args.nocat then output = output:gsub("%[%[Category.-%]%]", "") end for _, param in ipairs(args.omit) do if param ~= "-" then -- FIXME, this doesn't correctly handle nested template calls or HTML comments in the param value source = source:gsub(("| *%s *=[^{}|]*"):format(require(string_utilities_module).pattern_escape(param)), "") end end if indent == "-" then indent = "" elseif not indent then if fmt == "twoline" then indent = ":" else indent = "" end end local newline = indent == "" and "<br />" or "\n" if not fullsep then local br = args.br if br then fullsep = tonumber(br) and ("<br />"):rep(br) or br elseif fmt == "inline" or fmt == "twoline" then fullsep = (sep or (rev and "⇐" or "⇒")) .. (fmt == "twoline" and newline .. (newline == "\n" and "" or "\n") .. indent or "") elseif fmt == "raw" or fmt == "nooutput" then fullsep = sep or "" elseif fmt == "twocol" then fullsep = sep or "||" else fullsep = (sep or (rev and "generated from" or "which produces")) .. "<br />\n" .. indent if fmt == "compact" then fullsep = newline .. indent .. fullsep end end end if #fullsep > 0 and not (fullsep:find("\n", nil, true) or fullsep:match("<br%f[%W].->")) then fullsep = " " .. fullsep .. " " end source = frame:extensionTag("syntaxhighlight", source, { lang = "wikitext", inline = fmt ~= "multiline" and fmt ~= "raw" and true or nil, style = args.style }) return indent .. (rev and output .. fullsep .. source or source .. fullsep .. output) end return export 486zf9394wmx48ne4snwtrr7a90m7vl داڕێژە:m+ 10 11454 36801 2026-08-13T11:17:52Z Ghybu 12 From en wiktionary 36801 wikitext text/x-wiki <includeonly><onlyinclude>{{safesubst:<noinclude/>#invoke:links/templates|l_term_t|langname=1|face=term}}</onlyinclude></includeonly><!-- -->{{m+|en|term}}{{documentation}} 24rcsskporjthfd9afqocn7986e9qpg