মডিউল:module categorization
অবয়ব
এই মডিউলের জন্য মডিউল:module categorization/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে
local export = {}
local categoryKeywords = {
common = "Utility",
utilities = "Utility",
headword = "Headword-line",
translit = "প্রতিবর্ণী",
decl = "Inflection",
conj = "Inflection",
pronun = "Pronunciation",
pronunc = "Pronunciation",
pronunciation = "Pronunciation",
IPA = "Pronunciation",
sortkey = "Sortkey-generating",
}
-- returnTable set to true makes function return table of categories with
-- "[[Category:" and "]]" stripped away. It is used by [[Module:documentation]].
function export.categorize(frame, returnTable)
local title = mw.title.getCurrentTitle()
local subpage = title.subpageText
-- To ensure no categories are added on documentation pages.
if subpage == "documentation" then
return ""
end
local output, categories = {}, {}
local namespace = title.nsText
local pagename, mode
if frame.args[1] then
pagename = frame.args[1]
pagename = pagename:gsub("^Module:", "")
mode = "testing"
mw.log("arg", pagename)
else
if namespace ~= "Module" then
error("This template should only be used in the Module namespace.")
end
pagename = title.text
if subpage ~= pagename then
pagename = title.rootText
end
end
local args
if frame.args.is_template then
local params = {
[1] = {},
[2] = {}, -- FIXME: used in several modules saying e.g. "per the Paiboon scheme"; ignored
["cat"] = {},
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
else
args = {}
end
--[[
If this is a transliteration module, parameter 1 is used as the code,
rather than the code in the page title.
]]
local code, categoryKeyword = pagename:match("([-%a]+)[- ]([^/]+)$")
if not code then
error("Category name was not recognized.")
end
local lang, sc
if subpage == "sandbox" then
table.insert(categories, "Sandbox modules")
else
local category = args.cat or categoryKeywords[categoryKeyword]
if category == "প্রতিবর্ণী" then
code = args[1] or code
end
local origcode = code
if code then
if category then
local getByCode = require("Module:languages").getByCode
for stage=1,2 do
lang = getByCode(code) or getByCode(code .. "-pro")
if category == "প্রতিবর্ণী" then
if not lang then
sc = require("Module:scripts").getByCode(code)
if sc then
table.insert(categories, "Transliteration modules by script|" .. sc:getCanonicalName())
end
end
end
if lang or sc then
break
end
-- Some modules have names like [[Module:bho-Kthi-translit]] or
-- [[Module:Deva-Kthi-translit]]. If we didn't recognize the code the
-- first time, try chopping off the attached script and try again.
code = code:gsub("%-[A-Z].*", "")
end
if not (sc or lang) then
if category == "প্রতিবর্ণী" then
error('The language or script code "' .. origcode ..
'" in the page title is not recognized by [[Module:languages]] or [[Module:scripts]].')
else
error('The language code "' .. origcode ..
'" in the page title is not recognized by [[Module:languages]].')
end
end
local function languageCategory(lang, sortkey)
return lang:getCanonicalName() .. " modules|" .. sortkey
end
local function generalCategory(category, sortkey)
return category .. " modules|" .. sortkey
end
if category == "প্রতিবর্ণী" then
local langs = require("Module:languages/byTranslitModule")(pagename)
local sortkey = category
if sc then
sortkey = sortkey .. ", " .. sc:getCanonicalName()
end
if langs[1] then
for i, lang in ipairs(langs) do
table.insert(categories, languageCategory(lang, sortkey))
end
elseif lang then
table.insert(categories, languageCategory(lang, sortkey))
end
if sc then
table.insert(categories, generalCategory(category, sc:getCanonicalName()))
else
table.insert(categories, generalCategory(category, lang:getCanonicalName()))
end
else
table.insert(categories, languageCategory(lang, category))
table.insert(categories, generalCategory(category, lang:getCanonicalName()))
end
else
error('The category keyword "' .. categoryKeyword .. '" was not recognized.')
end
end
end
if returnTable then
return categories
else
categories = table.concat(
require "Module:fun".map(
function (category)
return "[[Category:" .. category .. "]]"
end,
categories))
end
if testing then
table.insert(output, pagename)
if categories == "" then
categories = '<span class="error">failed to generate categories for ' .. pagename .. '</span>'
else
categories = mw.ustring.gsub(categories, "%]%]%[%[", "]]\n[[")
categories = frame:extensionTag{ name = "syntaxhighlight", content = categories }
end
end
return table.concat(output) .. categories
end
return export