Jump to content

Module:category tree/poscatboiler/data/wiktionary maintenance

Wiktionary වෙතින්

This data submodule defines part of Wiktionary's category structure.

For an introduction to the poscatboiler system and a description of how to add or modify categories, see Module:category tree/poscatboiler/data/documentation.


local raw_categories = {}
local raw_handlers = {}

local m_template_parser = require("Module:template parser")

local get_lang = require("Module:languages").getByCode
local insert = table.insert
local is_valid_title = require("Module:pages").is_valid_title
local new_title = mw.title.new
local split_lang_label = require("Module:category tree").split_lang_label
local php_trim = require("Module:string utilities").php_trim
local uses_hidden_category = require("Module:maintenance category").uses_hidden_category

-----------------------------------------------------------------------------
--                                                                         --
--                              RAW CATEGORIES                             --
--                                                                         --
-----------------------------------------------------------------------------

raw_categories["වික්ෂනරි නඩත්තු කටයුතු"] = {
	description = "Categories containing pages that are being tracked for attention and improvement by editors.",
	breadcrumb = "නඩත්තු කටයුතු",
	parents = "වික්ෂනරිය",
}

raw_categories["හිස් ප්‍රවර්ග"] = {
	topright = "{{shortcut|CAT:EC}}",
	description = "අවයව රහිත ප්‍රවර්ග.",
	additional = [=[යම් ප්‍රවර්ගයක් සතුව පිටු හෝ උප ප්‍රවර්ග නොමැති විට, [[Module:category tree]] මගින් එය මෙහි ලැයිස්තුගත කිරීම සිදු කරයි.

හිස් ප්‍රවර්ගයක් යනු අනිවාර්යයෙන්ම විසඳිය යුතු ගැටළුවක් නොවන මුත්, එමගින් මව් ප්‍රවර්ගය අවුල් වියවුල් කිරීමට ඉඩ ඇත. එසේම ප්‍රවර්ග පද්ධතියේ ව්‍යුහාත්මක වෙනස්කම් හේතු කොට ගෙන අනාත භාවයට පත්ව තිබීමට ඉඩ ඇත. මෙම ප්‍රවර්ගය එම අවස්ථා හා සබැඳි ගැටළු විසඳීම සඳහා හඹා යාම සඳහා සහාය ලබා දෙයි.

විකි මෘදුකාංගය ක්‍රියාත්මක වන ආකාරය හේතුකොට ගෙන, යම් ප්‍රවර්ගයක් මුලදී හිස්ව තිබී පසුව අවයව එකතු වී තිබිණි ද මෙහි ලැයිස්තු ගත වීමට ඉඩ ඇත. අදාළ ප්‍රවර්ග පිටුව මත "අභිශූන්‍ය සංස්කරණයක්" සිදු කිරීම, එනම් පිටුව සංස්කරණය පිණිස ගෙන කිසිවක් වෙනස් නොකොට සේව් කිරීම මගින් මෙම ගැටළුව විසඳිය හැකිය. (විකල්ප ලෙස, "purge tab" [[Special:Preferences#mw-prefsection-gadgets|ගැජටය]] මගින් ලබා දෙන "null edit" ක්‍රියාව භාවිතා කරන්න.) යම් ප්‍රවර්ගයක් නිර්මාණයට පෙර අවයව එක් කිරීම මගින් මෙම සියළුම ගැටළු වළක්වාගත හැකිය. "පහළ සිට ඉහළට" ප්වර්ග නිර්මාණය කිරීම: අවයව සහිත දුහිතෲ ප්‍රවර්ග පළමුව නිර්මාණය කර පසුව මව් ප්‍රවර්ග නිර්මාණය කිරීම වඩා සාර්ථක ක්‍රමවේදයක් වෙයි.]=],
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["දෝෂ සහගත නාම සහිත ප්‍රවර්ග"] = {
	description = "ප්‍රවර්ග පද්ධතිය බලාපොරොත්තු වන ආකාරයේ නොවන නාම සහිත ප්‍රවර්ග .",
	additional = [=[සාමාන්‍යයෙන් මෙය සිදු වන්නේ, මෙම ප්‍රවර්ගයේ නාමය {{tl|auto cat}} වෙත ලබාදෙන අමතර පැරාමිති සමඟ නොගැලපෙන විට, හෝ ප්‍රවර්ග නාමයේ අක්ෂර වින්‍යාසය දෝෂ හෝ නාමය තුළ හිස්තැන් භාවිතා දෝෂ පවතින විටය.

== අමතර අවධානයට ==
* [[:ප්‍රවර්ගය:ප්‍රවර්ග පද්ධතිය තුළ අර්ථ දක්වා නොමැති ප්‍රවර්ග]]]=],
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["ප්‍රවර්ග පද්ධතිය තුළ අර්ථ දක්වා නොමැති ප්‍රවර්ග"] = {
	description = "මෙහි ලැයිස්තු ගත වන්නේ, {{tl|auto cat}} භාවිතා කරන මුත් ප්‍රවර්ග පද්ධතියේ දත්ත මොඩියුල තුළ ලියාපදිංචි කර නොමැති ප්‍රවර්ග වෙයි.",
	additional = [=[වැඩි විස්තර සඳහා මෙම ප්‍රවර්ග වල පෙන්වා ඇති දෝෂ පැනලය වෙත යොමු වන්න.

== අමතර අවධානයට ==
* [[:ප්‍රවර්ගය:දෝෂ සහගත නාම සහිත ප්‍රවර්ග]]]=],
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Hidden categories"] = {
	description = "Categories using the <code>[[mw:Help:Magic words#HIDDENCAT|<nowiki>__HIDDENCAT__</nowiki>]]</code> behavior switch, which hides the category from the lists of categories in its members and subcategories.",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Huge categories"] = {
	description = "Categories with more than 1,250,000 members.",
	additional = "Such categories are unable to use the [[mw:Extension:DynamicPageList (Wikimedia)|DynamicPageList]] extension to track the newest and oldest members.",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Indexed pages"] = {
	description = "Pages using the <code>[[mw:Help:Magic words#INDEX|<nowiki>__INDEX__</nowiki>]]</code> behavior switch, which tells search engines to index the page.",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Noindexed pages"] = {
	description = "Pages using the <code>[[mw:Help:Magic words#NOINDEX|<nowiki>__NOINDEX__</nowiki>]]</code> behavior switch, which tells search engines not to index the page.",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages using lite templates"] = {
	description = "Pages which use at least one of the lite templates.",
	additional = "See [[:Category:Lua-free templates]].",
	breadcrumb = "Using lite templates",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with tab characters"] = {
	description = "Pages which contain a tab character in their wikitext.",
	additional = "These should either be removed or replaced with spaces, because they go against [[WT:NORM]].",
	breadcrumb = "Tab characters",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with language headings in the wrong order"] = {
	description = "Pages in which the headings for each language's entry are in the wrong order.",
	additional = "Level 2 language headings should be in alphabetical order, except for Translingual and English, which go at the top (in that order).",
	breadcrumb = "Language headings in the wrong order",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with nonstandard language headings"] = {
	description = "Pages which contain a level 2 heading which does not match any language's canonical name.",
	additional = "The level 2 language heading for each language should always be that language's canonical name.",
	breadcrumb = "Nonstandard language headings",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with unwanted L1 headings"] = {
	description = "Pages which contain an unwanted level 1 heading.",
	additional = "Level 1 headings are not used in Wiktionary content pages, and only occur due to user error or vandalism.",
	breadcrumb = "Unwanted L1 headings",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with raw triple-brace template parameters"] = {
	description = "Pages which contain raw template parameters in the form of triple braces.",
	additional = "Triple-brace template parameters (e.g. {{param|param}}) are intended for use in templates, as they are substituted with the relevant template argument when the page is transcluded. Although they can theoretically be used on any page, there are currently no legitimate uses for them in content namespaces.\n\nTemplate parameters usually occur due to typos, or when {{tl|subst:}} has been used with a template that isn't supposed to be substed.",
	breadcrumb = "Raw template parameters",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with DEFAULTSORT conflicts"] = {
	topright = "{{shortcut|CAT:DEFAULTSORT}}",
	description = "Pages on which the {{tl|DEFAULTSORT:}} magic word has been used multiple times with different values.",
	additional = "In some (but not all) cases, this causes a warning to display on the page. In the vast majority of instances, an explicit use of {{tl|DEFAULTSORT:}} in wikitext should be <u>removed</u>.This is because the {{tl|head}} template handles it automatically. The only instances where it should be used in wikitext is outside of entries (i.e. outside of mainspace or the Reconstruction namespace)." ..
		"\n\nSee also [[:Category:Pages with DISPLAYTITLE conflicts]].",
	breadcrumb = "DEFAULTSORT conflicts",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with DISPLAYTITLE conflicts"] = {
	topright = "{{shortcut|CAT:DISPLAYTITLE}}",
	description = "Pages on which the {{tl|DISPLAYTITLE:}} magic word has been used multiple times with different values.",
	additional = "In some (but not all) cases, this causes a warning to display on the page. In the vast majority of instances, an explicit use of {{tl|DISPLAYTITLE:}} in wikitext should be <u>removed</u>.This is because the {{tl|head}} template handles it automatically. The only instances where it should be used in wikitext is outside of entries (i.e. outside of mainspace or the Reconstruction namespace)." ..
		"\n\nSee also [[:Category:Pages with DEFAULTSORT conflicts]].",
	breadcrumb = "DISPLAYTITLE conflicts",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with raw sortkeys"] = {
	description = "Pages on which a sortkey has been used with a raw category.",
	additional = "For example, {{code|<nowiki>[[Category:IPA symbols|B]]</nowiki>}}." ..
	"\n\nThese are a priority to replace with category templates, since they are hard-coded and override the {{tl|DEFAULTSORT:}} value for the page. This causes problems if there are any changes to the sorting scheme for the category, because there is no way of changing them centrally.\n\n" ..
	"By comparison, raw categories which have no sortkey are less of a problem, because they will use the {{tl|DEFAULTSORT:}} value; this can be centrally controlled and is designed to be language-neutral, so avoids the issue of different editors using multiple different sorting schemes for the same category. However, they should still be replaced with category templates, since there may be additional language-specific sorting rules which cannot otherwise be applied.",
	breadcrumb = "Raw sortkeys",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["මොඩියුල දෝෂ සහිත පිටු"] = {
	topright = "{{shortcut|CAT:E|CAT:ERR|CAT:ERROR}}",
	description = "මෙම ප්‍රවර්ගය [[වික්ෂනරි:Scribunto|ලුවා]] මොඩියුල හා සබැඳි දෝෂ සහිත පිටු ලැයිස්තුගත කරයි.",
	additional = "යම් අයිතමයක් දිනකට හෝ දෙකකට වඩා මෙහි ලැයිස්තු ගත වී ඇත්නම්, එය [[Wiktionary:GP|වින්කලය]] වෙත වාර්තා කිරීම බොහෝ දුරට උචිත වෙයි. මෙම දෝෂ සඳහා ප්‍රධාන හේතුව වන්නේ Memory errors වෙයි; මෙය පිළිබඳ ඇති සාකච්ඡාවක් [[වික්ෂනරි:Lua memory errors]] තුළ පවතියි." ..
		"\n\nඅදාළ පරිගණක මෘදුකාංගය විසින් සැකිල්ලක හෝ මොඩියුලයක වෙනසක් සිදු වූ විගස සබැඳි පිටු ක්ෂණිකව යාවත්කාලීන කිරීම සිදු නොකරන හෙයින්, මෙහි දක්වා ඇති දෝෂ මේ වන විටත් විසඳා තිබීමට ඉඩ ඇත. එම නිසා දෝෂ වාර්තා කිරීමට පෙර, එම දෝෂ තවමත් තිබේ දැයි සැක හැර දැනගන්න. \"[[meta:Help:Dummy_edit#Null_edit|අභිශූන්‍ය සංස්කරණයක්]]\" (පිටුව සංස්කරණය පිණිස ගෙන කිසිවක් වෙනස් නොකොට සේව් කිරීම) මගින් එය සිදු කළ හැක. එවිට දෝෂය නොපෙන්වන්නේ නම්, ඉන් අදහස් වන්නේ දෝෂය මේ වන විටත් විසඳා ඇති බවයි." ..
		"\n\n<u>[https://si.wiktionary.org/wiki/Special:ApiSandbox#action=purge&format=json&forcelinkupdate=1&generator=categorymembers&utf8=1&formatversion=2&gcmtitle=ප්‍රවර්ගය%3Aමොඩියුල%20දෝෂ%20සහිත%20පිටු&gcmlimit=20 මෙම සබැඳිය] ක්ලික් කර \"අයැදුමක් සිදු කරන්න\" මත ක්ලික් කිරීමෙන්, මෙහි දක්වා ඇති පිටු 20 දක්වා අදාළ සේවා දායකයේ කෑෂය විරේචනය එක වර කළ හැකිය.</u> මෙම සංඛ්‍යාව 5,000 දක්වා වෙනස් කළ හැකි මුත්, 30-100 ඉක්ම වූ ඕනෑම අගයක් බොහෝ දුරට time-outs සිදුවනු ඇත (පිටු වල ප්‍රමාණය අනුව)." ..
		"\n\nමෙම ප්‍රවර්ගයේ අන්තර්ගතය {{tl|maintenance category}} මගින් පාලනය වෙයි. එය දැනට සාකච්ඡා පිටු, පරිශීලක පිටු{{,}} සහ පරිශීලක වැලි පිල්ල මොඩියුල සහ සැකිලි වෙන ම ප්‍රවර්ග තුළට ඇතුළු කිරීම සිදු කරයි." ..
		"\n\n[[:ප්‍රවර්ගය:Pages with ParserFunction errors]], වෙතත් අවධානය යොමු කරන්න." ..
		"\n\n== අමතර අවධානයට ==\n" ..
		"* {{clc|මොඩියුල දෝෂ සහිත පිටු/hidden}}",
	breadcrumb = "මොඩියුල දෝෂ",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages with ParserFunction errors"] = {
	topright = "{{shortcut|CAT:PFE}}",
	description = "Pages that have errors in a [[mw:Help:Extension:ParserFunctions|ParserFunction]] magic word.",
	additional = "Examples of these magic words are {{tl|#expr:}} and {{tl|#time:}}. යම් අයිතමයක් දිනකට හෝ දෙකකට වඩා මෙහි ලැයිස්තු ගත වී ඇත්නම්, එය [[Wiktionary:GP|වින්කලය]] වෙත වාර්තා කිරීම බොහෝ දුරට උචිත වෙයි." ..
		"\n\nඅදාළ පරිගණක මෘදුකාංගය විසින් සැකිල්ලක හෝ මොඩියුලයක වෙනසක් සිදු වූ විගස සබැඳි පිටු ක්ෂණිකව යාවත්කාලීන කිරීම සිදු නොකරන හෙයින්, මෙහි දක්වා ඇති දෝෂ මේ වන විටත් විසඳා තිබීමට ඉඩ ඇත. එම නිසා දෝෂ වාර්තා කිරීමට පෙර, එම දෝෂ තවමත් තිබේ දැයි සැක හැර දැනගන්න. \"[[meta:Help:Dummy_edit#Null_edit|අභිශූන්‍ය සංස්කරණයක්]]\" (පිටුව සංස්කරණය පිණිස ගෙන කිසිවක් වෙනස් නොකොට සේව් කිරීම) මගින් එය සිදු කළ හැක. එවිට දෝෂය නොපෙන්වන්නේ නම්, ඉන් අදහස් වන්නේ දෝෂය මේ වන විටත් විසඳා ඇති බවයි." ..
		"\n\n<u>[https://si.wiktionary.org/wiki/Special:ApiSandbox#action=purge&format=json&forcelinkupdate=1&generator=categorymembers&utf8=1&formatversion=2&gcmtitle=ප්‍රවර්ගය%3APages%20with%20ParserFunction%20errors&gcmlimit=20 මෙම සබැඳිය] ක්ලික් කර \"අයැදුමක් සිදු කරන්න\" මත ක්ලික් කිරීමෙන්, මෙහි දක්වා ඇති පිටු 20 දක්වා අදාළ සේවා දායකයේ කෑෂය විරේචනය එක වර කළ හැකිය.</u> මෙම සංඛ්‍යාව 5,000 දක්වා වෙනස් කළ හැකි මුත්, 30-100 ඉක්ම වූ ඕනෑම අගයක් බොහෝ දුරට time-outs සිදුවනු ඇත (පිටු වල ප්‍රමාණය අනුව)." ..
		"\n\nමෙම ප්‍රවර්ගයේ අන්තර්ගතය {{tl|maintenance category}} මගින් පාලනය වෙයි. එය දැනට සාකච්ඡා පිටු, පරිශීලක පිටු{{,}} සහ පරිශීලක වැලි පිල්ල මොඩියුල සහ සැකිලි වෙන ම ප්‍රවර්ග තුළට ඇතුළු කිරීම සිදු කරයි." ..
		"\n\n[[:ප්‍රවර්ගය:මොඩියුල දෝෂ සහිත පිටු]], වෙතත් අවධානය යොමු කරන්න.",
	breadcrumb = "ParserFunction errors",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Requests for moves, mergers and splits"] = {
	description = "Pages and categories which have been tagged with a request for them to be moved, merged or split.",
	breadcrumb = "Moves, mergers and splits",
	parents = {"වික්ෂනරි නඩත්තු කටයුතු", "ඉල්ලීම්"},
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages to be merged"] = {
	description = "Pages tagged to be merged by the {{tl|merge}} template.",
	parents = "Requests for moves, mergers and splits",
	can_be_empty = true,
}

raw_categories["Pages to be moved"] = {
	description = "Pages tagged to be moved by the {{tl|move}} template.",
	parents = "Requests for moves, mergers and splits",
	can_be_empty = true,
}

raw_categories["Pages to be split"] = {
	description = "Pages tagged to be split by the {{tl|split}} template.",
	parents = "Requests for moves, mergers and splits",
	can_be_empty = true,
}

raw_categories["Pages using invalid parameters when calling templates"] = {
	description = "Pages that use unrecognized parameters when calling a template.",
	breadcrumb = "Invalid template parameters",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
}

raw_categories["Categories calling Template:auto cat"] = {
	description = "Categories that have been placed in another category by calling {{tl|auto cat}}.",
	additional = "This is the preferred way for categories to be subcategorized. The chief reason for this category is to facilitate the finding of categories which are not using {{tl|auto cat}} through the use of negative searches (e.g. qualifying a search with {{code|-incategory:\"{{PAGENAME}}\"}}).",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Categories with categories using raw markup"] = {
	description = "Categories that have been placed in another category using raw wiki markup (e.g. {{code|<nowiki>[[Category:Wiktionary]]</nowiki>}}). They should be added to the [[Module:category tree|category tree]] data instead.",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

raw_categories["Pages using deprecated source tags"] = {
	description = "Pages that use the [[mw:Extension:SyntaxHighlight|SyntaxHighlight]] extension with legacy {{wt|source}} tags instead of {{wt|syntaxhighlight}}.",
	breadcrumb = "Deprecated source tags",
	parents = "වික්ෂනරි නඩත්තු කටයුතු",
	can_be_empty = true,
	hidden = true,
}

insert(raw_handlers, function(data)
	local template_type = data.category:match("^Pages using invalid parameters when calling (.+) templates$")
	
	if not template_type then
		return
	end
	
	local parents = {{
		name = "Pages using invalid parameters when calling templates",
		sort = template_type == "general use" and "*" or template_type,
	}}
	
	local lang = require("Module:languages").getByCanonicalName(template_type, nil, true)
	if lang then
		insert(parents, {name = "entry maintenance", is_label = true, lang = lang:getCode()})
	end
	
	return {
		lang = lang and lang:getCode() or nil,
		description = "Pages that use unrecognized parameters when calling " .. template_type .. " templates.",
		parents = parents,
		breadcrumb = template_type,
	}
end)

do
	local prefixes = require("Module:table").listToSet{"list", "P", "R", "RQ", "table", "U"}
	
	local function add_parent(parents, seen, cat_type, sortkey)
		if seen[cat_type] then
			return
		end
		insert(parents, {
			name = ("Pages using invalid parameters when calling %s templates"):format(cat_type),
			sort = sortkey,
		})
		seen[cat_type] = true
	end
	
	insert(raw_handlers, function(data)
		local template = data.category:match("^Pages using invalid parameters when calling (.+)$")
		
		if not template then
			return
		end
		
		-- Resolve any redirects.
		template = new_title(template)
		while template do
			local redirect = template.redirectTarget
			if not is_valid_title(redirect) then
				break
			end
			template = redirect
		end
		
		-- Disallow templates which would always hidden maintennace categories (e.g. sandboxes).
		if not (template and not uses_hidden_category(template)) then
			return
		end
		
		local prefixed_text, lang = template.prefixedText
		if template.namespace == 10 then
			local name = template.text
			-- Remove the prefix if present (e.g. "R:" or "RQ:").
			local prefix, text = name:match("^(.-):(.+)")
			if not (prefix and prefixes[prefix]) then
				text = name
			end
			-- Check the initial language code, chopping off hyphenated sections until there's a match or they run out.
			local code = mw.ustring.match(text, "^[a-z][a-zA-Z-]*[a-zA-Z]%f[^%w]")
			while code do
				lang = get_lang(code)
				if lang then
					break
				end
				code = code:match("(.+)%-%a*$")
			end
			-- If no match and it's a list: or table: template, check if the template name ends "/CODE".
			if not lang and (prefix == "list" or prefix == "table") then
				code = text:match("%f[^/]%l[%a-]*%a$")
				if code then
					lang = get_lang(code)
				end
			end
		end
		
		local sortkey = template.text
		local parents, seen = {}, {}
		
		-- Categorize as language-specific if a language was found.
		if lang then
			add_parent(parents, seen, lang:getCanonicalName(), sortkey)
		end
		
		-- Also grab any language categories from the template page.
		for _, cat in ipairs(template.categories) do
			if cat:sub(-10) == " templates" or cat:sub(-13) == " subtemplates" then
				local cat_lang = split_lang_label(new_title(cat))
				if cat_lang then
					add_parent(parents, seen, cat_lang:getCanonicalName(), sortkey)
				end
			end
		end
		
		-- If none were found, categorize as general use.
		if #parents == 0 then
			add_parent(parents, seen, "general use", sortkey)
		end
		
		-- Only add can_be_empty if the template exists and contains checkparams.
		local content, can_be_empty = template:getContent()
		if content then
			-- Check for {{#invoke:checkparams|warn|...}}.
			-- args[1] is the module and args[2] is the function name, so #INVOKE: will throw an error if either is not present.
			for template in require("Module:template parser").find_templates(content) do
				if template:get_name() == "#INVOKE:" then
					local args = template:get_arguments()
					local arg_2 = args[2]
					if arg_2 and php_trim(args[1]) == "checkparams" and php_trim(arg_2) == "warn" then
						can_be_empty = true
						break
					end
				end
			end
		end
		
		return {
			canonical_name = "Pages using invalid parameters when calling " .. prefixed_text,
			lang = lang and lang:getCode() or nil,
			description = ("Pages that use unrecognized parameters when calling {{tl|%s}}.")
				:format(m_template_parser.getTemplateInvocationName(template)),
			additional = "These template calls should be reviewed and the invalid parameter(s) should be corrected or removed.",
			breadcrumb = prefixed_text,
			parents = parents,
			can_be_empty = can_be_empty,
			hidden = true,
		}
	end)
end

return {RAW_CATEGORIES = raw_categories, RAW_HANDLERS = raw_handlers}