Modul:bjform
Dokumentation för denna modul finns på /dok (redigera), /test
Syfte
Implementerar {{böjning}}
.
Parametrar
- (obligatorisk) språkkod (se Wiktionary:Alla språk och koder med antal huvuduppslag och Modul:lang/data)
- (obligatorisk) ordklass (se Modul:h3/data)
- (frivillig) grundform
- (villkorlig) text= grundform med diakriter som ska visas men avlägsnas i sidnamnet
- (villkorlig) host= sida där uppslaget finns som ett avsnitt, eller specialvärde "#" för samma sida, används enbart på Appendix:Övriga uppslagsord
- caller=true, pagenameoverridetestonly=, nocat=true, nocat=false
Viktig: grundformen måste anges exakt en gång, antingen via anonym parameter eller via text= .
Självtest
{sv|adj|hammare}
- sida "hammaren"
böjningsform av hammare
{sv|adj|b:ig|host=#}
- uppslag "b:igare" på Appendix:Övriga uppslagsord länkar till "b:ig" på samma sida
böjningsform av b:ig
{svenska|adj|hammare}
- sida hammaren, ogiltig språkkod
Uppenbarligen ogiltig språkkod -- Kod "svenska" skickades in i "Mall:böjning".
{sv|adj|hammare|fyra|hoax=hämmare}
- sida hammaren, två ogiltiga parametrar
Ogiltiga parametrar -- "Mall:böjning" använder inte parametrar 4 (anonym) och "hoax=".
Felhantering
6 olika fel detekteras. Spårningskategori Kategori:Mallsyntax och andra. Tydliga röda varningar visas vid förhandsgranskning men inte i sparade versioner.
Behövda submoduler
Automatiserade tester
All tests passed. (refresh)
Text | Expected | Actual | |
---|---|---|---|
{{böjning|sv|subst|katt|pagenameoverridetestonly=katten|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[katt#Substantiv|katt]][[Kategori:Svenska/Substantivformer|katten]] | <i style="color:#6B5A40">böjningsform av</i> [[katt#Substantiv|katt]][[Kategori:Svenska/Substantivformer|katten]] | |
{{böjning|sv|subst|ärr|pagenameoverridetestonly=ärret|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[ärr#Substantiv|ärr]][[Kategori:Svenska/Substantivformer|z¡rret]] | <i style="color:#6B5A40">böjningsform av</i> [[ärr#Substantiv|ärr]][[Kategori:Svenska/Substantivformer|z¡rret]] | |
{{böjning|sv|adj|sliten|pagenameoverridetestonly=slitna|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[sliten#Adjektiv|sliten]][[Kategori:Svenska/Adjektivformer|slitna]] | <i style="color:#6B5A40">böjningsform av</i> [[sliten#Adjektiv|sliten]][[Kategori:Svenska/Adjektivformer|slitna]] | |
{{böjning|sv|räkn|tre|pagenameoverridetestonly=tredje|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[tre#Räkneord|tre]][[Kategori:Svenska/Räkneordsformer|tredje]] | <i style="color:#6B5A40">böjningsform av</i> [[tre#Räkneord|tre]][[Kategori:Svenska/Räkneordsformer|tredje]] | |
{{böjning|sv|subj|som|pagenameoverridetestonly=eftersom|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[som#Subjunktion|som]][[Kategori:Svenska/Subjunktionformer|eftersom]] | <i style="color:#6B5A40">böjningsform av</i> [[som#Subjunktion|som]][[Kategori:Svenska/Subjunktionformer|eftersom]] |
Text | Expected | Actual | |
---|---|---|---|
{{böjning|en|subst|wolf|pagenameoverridetestonly=wolves|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[wolf#Engelska|wolf]][[Kategori:Engelska/Substantivformer|wolves]] | <i style="color:#6B5A40">böjningsform av</i> [[wolf#Engelska|wolf]][[Kategori:Engelska/Substantivformer|wolves]] | |
{{böjning|la|subst|text=rēx|pagenameoverridetestonly=regibus|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[rex#Latin|rēx]][[Kategori:Latin/Substantivformer|regibus]] | <i style="color:#6B5A40">böjningsform av</i> [[rex#Latin|rēx]][[Kategori:Latin/Substantivformer|regibus]] | |
{{böjning|ru|subst|text=избра́ть|pagenameoverridetestonly=избрать|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[избрать#Ryska|избра́ть]][[Kategori:Ryska/Substantivformer|избрать]] | <i style="color:#6B5A40">böjningsform av</i> [[избрать#Ryska|избра́ть]][[Kategori:Ryska/Substantivformer|избрать]] |
Text | Expected | Actual | |
---|---|---|---|
{{böjning|sv|adv|b:igt|host=#|pagenameoverridetestonly=Appendix:Övriga uppslagsord|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[Appendix:Övriga uppslagsord#b:igt|b:igt]][[Kategori:Svenska/Adverbformer|appendixz°vrigauppslagsord]] | <i style="color:#6B5A40">böjningsform av</i> [[Appendix:Övriga uppslagsord#b:igt|b:igt]][[Kategori:Svenska/Adverbformer|appendixz°vrigauppslagsord]] | |
{{böjning|sv|adv|b:igt|host=Förbjudna sidnamn|pagenameoverridetestonly=Appendix:Övriga uppslagsord|nocat=false}} | <i style="color:#6B5A40">böjningsform av</i> [[Förbjudna sidnamn#b:igt|b:igt]][[Kategori:Svenska/Adverbformer|appendixz°vrigauppslagsord]] | <i style="color:#6B5A40">böjningsform av</i> [[Förbjudna sidnamn#b:igt|b:igt]][[Kategori:Svenska/Adverbformer|appendixz°vrigauppslagsord]] |
Text | Expected | Actual | |
---|---|---|---|
{{böjning|sv|adj|sliten|fyra|fem|extra=garbage|pagenameoverridetestonly=slitna|nocat=false}} | <br><span class="error"><b>Ogiltiga parametrar -- "Mall:böjning" använder inte parametrar 4 (anonym) och 5 (anonym) och "extra=".</b></span></br>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (böjning)]] | <br><span class="error"><b>Ogiltiga parametrar -- "Mall:böjning" använder inte parametrar 4 (anonym) och 5 (anonym) och "extra=".</b></span></br>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (böjning)]] | |
{{böjning|sv|adj|sliten|fyra|fem|extra=garbage|pagenameoverridetestonly=slitna}} | <i>böjning</i>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (böjning)]] | <i>böjning</i>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (böjning)]] | |
{{böjning|pagenameoverridetestonly=nope|nocat=false}} | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | |
{{böjning| |pagenameoverridetestonly=kosong|nocat=false}} | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | |
{{böjning|id|räkn| |pagenameoverridetestonly=kesatu|nocat=false}} | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:böjning".</b></span></br>Språkkod, ordklass och grundform krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | |
{{böjning|SV|subj|asdqwezxc|pagenameoverridetestonly=SLITNA|nocat=false}} | <br><span class="error"><b>Uppenbarligen ogiltig språkkod -- Kod "SV" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Uppenbarligen ogiltig språkkod]][[Kategori:Uppenbarligen ogiltig språkkod (böjning)]] | <br><span class="error"><b>Uppenbarligen ogiltig språkkod -- Kod "SV" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Uppenbarligen ogiltig språkkod]][[Kategori:Uppenbarligen ogiltig språkkod (böjning)]] | |
{{böjning|aad|subj|asdqwezxc|pagenameoverridetestonly=slitnaad|nocat=false}} | <br><span class="error"><b>Okänd språkkod -- Kod "aad" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Okänd språkkod]][[Kategori:Okänd språkkod (böjning)]] | <br><span class="error"><b>Okänd språkkod -- Kod "aad" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Okänd språkkod]][[Kategori:Okänd språkkod (böjning)]] | |
{{böjning|sv|noun|nonsens|pagenameoverridetestonly=nonnenset|nocat=false}} | <br><span class="error"><b>Mallsyntax -- Okänd ordklass "noun" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | <br><span class="error"><b>Mallsyntax -- Okänd ordklass "noun" skickades in i "Mall:böjning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | |
{{böjning|sv|pron|vår|text=var|pagenameoverridetestonly=vårat|nocat=false}} | <br><span class="error"><b>Mallsyntax -- Grundformen har angetts dubbelt för "Mall:böjning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] | <br><span class="error"><b>Mallsyntax -- Grundformen har angetts dubbelt för "Mall:böjning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (böjning)]] |
-- (obligatory) language code
-- (obligatory) word class
-- (optional) base form
-- (optional) "text=" base form with diacrit
-- (optional) "host=" host page, special value "#" for same
local exporttbl = {}
local import_h3 = require ("Modul:h3")
local import_lang = require ("Modul:lang")
local import_param = require ("Modul:param")
local import_sort = require ("Modul:sort")
local cbo = "b" .. string.char(195,182) .. "jning"
local cbform = cbo .. "sform av"
local name_short = cbo
local name_long = '"Mall:' .. name_short .. '"'
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 exporttbl.go (arxframent)
local arxsomons = 0
local legal_params = {}
local many_complaints = {}
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 pagename = ''
local link_target = ''
local taget_section = ''
local link_right_part = ''
local error_visible = ''
local error_cat = ''
local good_visible = ''
local good_cat = ''
local final_result = ''
local error_code = 0
local boo_no_cat_true = false
local boo_no_cat_false = false
arxsomons = arxframent.args -- "args" from our own "frame"
if (arxsomons['caller']=="true") then
arxsomons = arxframent:getParent().args -- "args" from caller's "frame"
end--if
legal_params = {[0]=3,"text","host","nocat","pagenameoverridetestonly"}
list_bad_params = import_param.go (arxsomons,legal_params)
local lang_code = mw.text.trim (arxsomons[1] or "")
local word_class = mw.text.trim (arxsomons[2] or "")
local base_form = mw.text.trim (arxsomons[3] or "")
local base_text = arxsomons["text"] or "" -- diacrit will get removed later
local page_host = arxsomons["host"] or "" -- special value "#" defined
pagename = arxsomons["pagenameoverridetestonly"] or mw.title.getCurrentTitle().prefixedText
boo_no_cat_true = (arxsomons["nocat"]=="true")
boo_no_cat_false = (arxsomons["nocat"]=="false")
local h3_singular = import_h3.getLongSingUCFirst(word_class) -- returns empty for unknown
many_complaints[1] = {'Ogiltiga parametrar','@M använder inte @V'}
many_complaints[2] = {'Mallsyntax','Obligatorisk parameter saknas i @M','Språkkod, ordklass och grundform krävs alltid.'}
many_complaints[3] = {'Uppenbarligen ogiltig språkkod','Kod @V skickades in i @M'}
many_complaints[4] = {'Okänd språkkod','Kod @V skickades in i @M'}
many_complaints[5] = {'Mallsyntax','Okänd ordklass @V skickades in i @M'}
many_complaints[6] = {'Mallsyntax','Grundformen har angetts dubbelt för @M'}
while true do
if list_bad_params ~= '' then
error_code = 1
violating_string = list_bad_params
break
end--if
if ((lang_code=="") or (word_class=="") or (base_form=="") and (base_text=="")) then
error_code = 2 -- no string here
break
end--if
if import_lang.isObviouslyInvalid(lang_code) then
error_code = 3
violating_string = '"' .. lang_code .. '"'
break
end--if
if not import_lang.hasLanguage(lang_code) then
error_code = 4
violating_string = '"' .. lang_code .. '"'
break
end--if
if (h3_singular=="") then
error_code = 5
violating_string = '"' .. word_class .. '"'
break
end--if
if ((base_form~="") and (base_text~="")) then
error_code = 6 -- no string here
end--if
break
end--while
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] or '' -- 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
if (error_code==0) then
local language_ucf = import_lang.getLanguageUCFirst(lang_code) -- use "hasLanguage" for validation
local sort_key = import_sort.getSortKey(lang_code, pagename)
if (base_text~="") then
link_target = import_lang.getEntryName(lang_code, base_text) -- remove diacrit
link_right_part = base_text -- with diacrit
else
link_target = base_form -- keep diacrit
link_right_part = base_form -- with possible diacrit
end--if
if (page_host~="") then -- neither word class nor language as section
taget_section = link_target
if (page_host=="#") then
link_target = pagename
else
link_target = page_host
end--if
else
if (lang_code=="sv") then
taget_section = h3_singular -- word class as section
else
taget_section = language_ucf -- language name as section
end--if
end--if
if (h3_singular=="Räkneord") then
h3_singular = h3_singular .. "s" -- absurdities of the Swedish language "Räkneordsformer"
end--if
good_visible = '<i style="color:#6B5A40">' .. cbform .. '</i> [[' .. link_target .. "#" .. taget_section .. '|' .. link_right_part .. ']]'
good_cat = "[[Kategori:" .. language_ucf .. "/" .. h3_singular .. "former|" .. sort_key .. "]]"
end--if (error_code==0) then
if (error_code==0) then
final_result = good_visible
else
if ((arxframent:preprocess ("{{REVISIONID}}") == '') or boo_no_cat_true or boo_no_cat_false) then
mw.addWarning (error_visible)
final_result = error_visible
else
final_result = "<i>" .. name_short .. "</i>"
end--if
end--if
if (not boo_no_cat_true) then
if (error_code==0) then
final_result = final_result .. good_cat
else
final_result = final_result .. error_cat
end--if
end--if
return final_result
end--function
return exporttbl