Dokumentation för denna modul finns på /dok (redigera), /test


Syfte

Implementerar {{böjning}}.

Parametrar

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

{la|verb|text=dīcō}
sida "dicere" ("dīcere"), länka till "dico" men visa "dīcō"
böjningsform av dīcō
{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
test_01_basic_sv:
Passed {{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]]
Passed {{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]]
Passed {{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]]
Passed {{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]]
Passed {{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
test_02_other_lang:
Passed {{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]]
Passed {{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]]
Passed {{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
test_03_host:
Passed {{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]]
Passed {{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
test_04_errors:
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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)]]
Passed {{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