Module:reference template cat

local export = {}

local Array = require("Module:array") local m_lang = require("Module:languages")

local prefixes = { ['reference'] = 'R', ['quotation'] = 'RQ', }

function export.categorize(title, langs, sortkey, what) what = what or 'reference'; langs = Array(langs):slice local name = title.text:gsub("^" .. prefixes[what] .. ":", "") local lang_in_title, rest = name:match("^(%l[%l-]*%l):(.+)$") if lang_in_title then if not m_lang.getByCode(lang_in_title) then lang_in_title = lang_in_title .. "-pro" end if m_lang.getByCode(lang_in_title) and not langs:contains(lang_in_title) then langs:insert(1, lang_in_title) end name = rest end sortkey = sortkey or name return langs :map(			function (langCode)				local lang = m_lang.getByCode(langCode, true)				return "[[Category:" .. lang:getCanonicalName					.. " " .. what .. " templates|" .. sortkey .. "]]"			end) :concat "" end

function export.main(frame) local current_title = mw.title.getCurrentTitle if current_title.nsText == "" or current_title.nsText == "Reconstruction" then error("This template is meant to be used in the Template namespace.") end

local what = frame.args.what or 'reference'; -- can be either 'reference' or 'quotation' local args = frame:getParent.args local sortkey = args.sort local args = Array.shallow_copy(args) local title = current_title local is_demo = current_title.nsText == "Module" or (current_title.nsText == "Template"		and current_title.baseText == what .. " template cat") if is_demo and args.title then title = mw.title.new(args.title) args.title = nil end args.sort = nil local langs = args if not langs:is_array then error("Sequential positional parameters expected") end local categories = export.categorize(title, langs, sortkey, what) if is_demo then categories = mw.text.nowiki(categories) end return categories end

return export