Modulens syfte är att bistå mallar med kategorisering. Med hjälp av modulen kan mallar kategorisera sidor från huvudnamnrymden i lämpliga kategorier, eller kategorisera sig själva för att på så sett bidra till en överblick av alla mallar som finns.
local sort = require("Modul:sort")
local lang = require("Modul:lang")
local h3 = require("Modul:h3")
local export = {}
local function ucFirst(str)
return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
end
local function extractLanguageCode(templatename)
local language_code = ""
local parts = mw.text.split(templatename, "-", true)
if parts then
if lang.hasLanguage(parts) then
language_code = parts
elseif parts and lang.hasLanguage(parts .. "-" .. parts) then
language_code = parts .. "-" .. parts
end
end
return language_code
end
local function isPalindrome(str, short_h3)
return false; --ej aktiverat ännu
--exkludera tecken, koder och förkortningar (den senaste borde nog tas med ändå)
--if short_h3 == "tecken" or short_h3 == "kod" or short_h3 == "förkortning" then
-- return false
--end
--skapa omvänd textsträng
--local temp_str = ""
--reversed_str = mw.ustring.gsub(str, ".", function(c) temp_str = c .. temp_str end)
--ta bort alla tecken som inte är bokstäver eller siffror och gör inte skillnad på gemener och versaler
--str = mw.ustring.gsub(mw.ustring.lower(str), "%W", "")
--reversed_str = mw.ustring.gsub(mw.ustring.lower(reversed_str), "%W", "")
--return reversed_str == str
end
function export.getWikitext(frame)
local categories = frame.args
local text = ""
for k, v in pairs(categories) do
text = text .. "]"
end
return text
end
function export.getSortedWikitext(frame)
local language_code = frame.args or "xx"
local text = ""
for k, v in pairs(frame.args) do
if k ~= 1 then
local sort_key = sort.getSortKey(language_code, v)
text = text .. "]"
end
end
return text
end
function export.getTemplateWikitext(frame)
local title = mw.title.getCurrentTitle()
local is_test = title.rootText == "categorize" and title.nsText == "Modul"
local templatename = is_test and frame.args or title.text
local language_code = extractLanguageCode(templatename)
local is_grammar_template = language_code ~= ""
local is_part_of_speech_template = h3.hasH3(templatename)
local text = ""
if is_grammar_template then
local language = lang.getLanguage(language_code)
text = "]"
elseif is_part_of_speech_template then
text = "]"
else
text = "]"
end
return text
end
function export.getMainWikitext(frame)
local title = mw.title.getCurrentTitle()
local is_test = title.rootText == "categorize" and title.nsText == "Modul"
local language_code = frame.args or "xx"
local short_h3 = frame.args or ""
local pagename = is_test and (frame:getParent().args or frame.args) or title.text
local is_always_translingual = not not frame.args
local supports_alt_categories = not not frame.args
local alternative_categories_args = frame:getParent().args
local alternative_categories_start_index = is_always_translingual and 1 or 2
local language = lang.getLanguageUCFirst(language_code)
local h3_plural = h3.getLongPlurUCFirst(short_h3)
local sort_key = is_always_translingual and "*" .. pagename or sort.getSortKey(language_code, pagename)
local language_slash_text = is_always_translingual and "" or language .. "/"
local text = ""
if title:inNamespace(0) or is_test then
if not is_always_translingual then
text = "]"
end
if supports_alt_categories and alternative_categories_args then
for k, v in pairs(alternative_categories_args) do
if type(k) == "number" and k >= alternative_categories_start_index then
text = text .. "]"
end
end
else
text = text .. "]"
end
if isPalindrome(pagename, short_h3) then
text = text .. "]"
end
end
return text
end
return export