Module:Utilities/format categories

local data = mw.loadData("Module:utilities/format_categories/data")

-- Format the categories with the appropriate sort key. CATEGORIES is a list of categories.	-- LANG is an object encapsulating a language; if nil, the object for	  language code 'und' (undetermined) will be used.	-- SORT_KEY is placed in the category invocation, and indicates how the	   page will sort in the respective category. Normally this should be nil,	   and a default sort key based on the subpage name (the part after the	   colon) will be used.	-- SORT_BASE lets you override the default sort key used when SORT_KEY is	   nil. Normally, this should be nil, and a language-specific default sort	   key is computed from the subpage name (e.g. for Russian this converts	   Cyrillic ё to a string consisting of Cyrillic е followed by U+10FFFF,	   so that effectively ё sorts after е instead of the default Wikimedia	   sort, which (I think) is based on Unicode sort order and puts ё after я,	   the last letter of the Cyrillic alphabet.	-- FORCE_OUTPUT forces normal output in all namespaces. Normally, nothing	   is output if the page isn't in the main, Appendix:, Reconstruction: or	   Citations: namespaces. return function(categories, lang, sort_key, sort_base, force_output, sc) if type(lang) == "table" and not lang.getCode then error("The second argument to format_categories should be a language object.") end

local title_obj = mw.title.getCurrentTitle

if force_output or data.allowedNamespaces[title_obj.nsText] or data.allowedPrefixedPages[title_obj.prefixedText] then local PAGENAME = title_obj.text local SUBPAGENAME = title_obj.subpageText if not lang then lang = require("Module:languages").getByCode("und") end -- Generate a default sort key sort_base = lang:makeSortKey(sort_base or SUBPAGENAME, sc) if sort_key and sort_key ~= "" then -- Gather some statistics regarding sort keys if mw.ustring.upper(sort_key) == sort_base then table.insert(categories, "Sort key tracking/redundant") end else sort_key = sort_base end -- If the sortkey is empty, remove it. -- Leave the sortkey if it is equal to PAGENAME, because it still -- might be different from DEFAULTSORT and therefore have an effect; see -- Grease pit/2020/April. if sort_key == "" then sort_key = nil end local out_categories = {} for key, cat in ipairs(categories) do			out_categories[key] = "" end return table.concat(out_categories, "") else return "" end end