Modul:tagg
Dokumentation för denna modul finns på /dok (redigera), /test
Den här modulen används för att generera innehåll till {{tagg}}
.
- På undersidan /data finns metadata som styr hur olika taggar hanteras.
- På undersidan /test finns enhetstest som man ska förhandsgranska sina ändringar i modulen mot innan man sparar.
Vissa taggar specialbehandlas på ett mer avancerat sätt och de återfinns i modulens kod under kommentaren "-- Specialbehandla vissa taggars visningstext".
local import_sort = require("Modul:sort")
local import_lang = require("Modul:lang")
local import_param = require("Modul:param")
local taggdata = mw.loadData("Modul:tagg/data")
local export = {}
local name_short = "tagg"
local name_long = '"Mall:' .. name_short .. '"'
local function ucFirst(str)
return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
end
local function discardHoles (big_table, name_prefix)
local indx = 1
local temp_value = 0
local deholed_table = {}
while true do
if (indx==8) then
break
end
if name_prefix then
if (indx==1) then
temp_value = big_table [name_prefix]
else
temp_value = big_table [name_prefix..tostring(indx)]
end
else
temp_value = big_table [indx]
end
temp_value = mw.text.trim (temp_value or "") -- trim only needed for anonymous
if (temp_value~="") then
deholed_table[#deholed_table+1] = temp_value
end
indx = indx + 1
end
return deholed_table
end
local function expandTwo (control_string, insert_m_string, insert_v_string)
local temp_string = ''
local expanded_string = ''
local x_length = 0
local x_index = 0
local chark = 0
local charl = 0
x_length = string.len (control_string)
while true do
if (x_index==x_length) then
break
end--if
chark = string.byte (control_string,(x_index+1),(x_index+1))
x_index = x_index + 1
charl = 0
if (x_index<x_length) then
charl = string.byte (control_string,(x_index+1),(x_index+1))
end--if
if ((chark==64) and (charl==77)) then -- @M cannot be empty
temp_string = insert_m_string
x_index = x_index + 1
else
if ((chark==64) and (charl==86)) then -- @V can be empty
temp_string = insert_v_string
x_index = x_index + 1
else
temp_string = string.char (chark)
end--if
end--if
expanded_string = expanded_string .. temp_string
end--while
return expanded_string
end--function expandTwo
function export.getWikitext(frame)
local legal_params = {}
local many_complaints = {}
local texter = {} -- visas inom ''(parenteser)''
local kategorier = {}
local list_bad_params = ''
local violating_string = ''
local problem_1_main = ''
local problem_2_desc = ''
local problem_3_hint = ''
local p_2_desc_expanded = ''
local error_visible = ''
local error_cat = ''
local pagename = ''
local result = ''
local error_code = 0
local boo_no_cat_true = false
local boo_no_cat_false = false
local args = frame:getParent().args
legal_params = {[0]=7,"kat","kat2","kat3","kat4","kat5","kat6","kat7","språk","text","nocat","pagenameoverridetestonly"}
list_bad_params = import_param.go (args,legal_params)
pagename = args["pagenameoverridetestonly"] or mw.title.getCurrentTitle().text
boo_no_cat_true = (args["nocat"]=="true")
boo_no_cat_false = (args["nocat"]=="false")
local text = args["text"]
local lang_code = args["språk"] or "sv"
many_complaints[1] = {'Ogiltiga parametrar','@M använder inte @V',''}
many_complaints[2] = {'Uppenbarligen ogiltig språkkod','Kod @V skickades in i @M','Använd enbart språkkoder enligt [[Wiktionary:Stilguide/Språknamn]].'}
many_complaints[3] = {'Okänd språkkod','Kod @V skickades in i @M','Använd enbart språkkoder enligt [[Wiktionary:Stilguide/Språknamn]].'}
while true do
if list_bad_params ~= '' then
error_code = 1
violating_string = list_bad_params
break
end
if import_lang.isObviouslyInvalid(lang_code) then
error_code = 2
violating_string = '"' .. lang_code .. '"'
break
end
if not import_lang.hasLanguage(lang_code) then
error_code = 3
violating_string = '"' .. lang_code .. '"'
end
break
end
if (error_code~=0) then
problem_1_main = many_complaints[error_code][1]
problem_2_desc = many_complaints[error_code][2] -- @M cannot be empty, @V can be empty
problem_3_hint = many_complaints[error_code][3] -- optional, can be empty
p_2_desc_expanded = expandTwo (problem_2_desc, name_long, violating_string)
error_cat = '[[Kategori:' .. problem_1_main .. ']][[Kategori:' .. problem_1_main .. ' (' .. name_short .. ')]]'
error_visible = '<br><span class="error"><b>' .. problem_1_main .. ' -- ' .. p_2_desc_expanded .. '.</b></span></br>'
if (problem_3_hint~='') then
error_visible = error_visible .. problem_3_hint
end--if
end--if
local language = import_lang.getLanguageUCFirst(lang_code)
local sort_key = import_sort.getSortKey(lang_code, pagename)
function katString(kat)
return "[[Kategori:" .. language .. "/" .. ucFirst(kat) .. "|" .. sort_key .. "]]"
end
-- Parse the labels
for i, tagg in ipairs(discardHoles(args,nil)) do
local data = taggdata.taggar[tagg] or {}
for _, kategori in ipairs(data.kat or {tagg}) do
kategorier[#kategorier + 1] = katString(kategori)
end
local visa = data.visa or tagg
if visa ~= "" then
-- Specialbehandla vissa taggars visningstext (för -fr- se nedan, ska ej vara inkluderad här)
local reflexiva_pronomen = {
["no"] = {"seg", "%s seg"},
["bs"] = {"se", "%s se"},
["gmq-bot"] = {"sig", "%s sig"},
["da"] = {"sig", "%s sig"},
["en"] = {"oneself", "%s oneself"},
["gmq-fsv"] = {"sik", "%s sik"},
["ia"] = {"se", "%s se"},
["is"] = {"sig", "%s sig"},
["mk"] = {"се", "%s се"},
["nn"] = {"seg", "%s seg"},
["pl"] = {"się", "%s się"},
["sv"] = {"sig", "%s sig"},
["cs"] = {"se", "%s se"},
["de"] = {"sich", "sich %s"},
["ovd"] = {"sig", "%s sig"},
}
if tagg == "reflexivt" and reflexiva_pronomen[lang_code] then
if not string.find(pagename, "%f[%a]" .. reflexiva_pronomen[lang_code][1] .. "%f[%A]") then
visa = visa .. ": '''" .. string.format(reflexiva_pronomen[lang_code][2], pagename) .. "'''"
end
end
if tagg == "reflexivt" and lang_code == "fr" then
if not string.find(pagename, "%f[%a]s\'") and -- Sidnamn innehåller aldrig ’ (sned apostrof), endast ' (enkel apostrof)
not string.find(pagename, "%f[%a]se%f[%A]") then
if string.find("h", mw.ustring.sub(pagename, 1, 1)) then
elseif string.find("aeiouéèàùâêîôûëïüÿ", mw.ustring.sub(pagename, 1, 1)) then
visa = visa .. ": '''s’" .. pagename .. "'''"
else
visa = visa .. ": '''se " .. pagename .. "'''"
end
end
end
texter[#texter + 1] = visa
end
end
if text then
texter[#texter+1] = text
end
-- Parse kat-parameters
for _, kategori in ipairs(discardHoles(args,"kat")) do
kategorier[#kategorier + 1] = katString(kategori)
end
result = ''
if (not boo_no_cat_true) then
if (error_code == 0) then
result = table.concat(kategorier, "")
else
result = error_cat
end
end
if #texter > 0 then
result = result .. " ''(" .. table.concat(texter, ", ") .. ")'' "
end
if (error_code ~= 0) and ((frame:preprocess ("{{REVISIONID}}") == '') or boo_no_cat_true or boo_no_cat_false) then
mw.addWarning (error_visible)
result = result .. error_visible
end
return result
end
return export