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


Syfte redigera

Implementerar {{gammalstavning}}.

Parametrar redigera

  • (obligatorisk) språkkod (se Wiktionary:Alla språk och koder med antal huvuduppslag och Modul:lang/data)
  • (obligatorisk) kod för reformen (gemener, se {{gammalstavning}} för listan, eller - för ospecificerad)
  • (obligatorisk) ny (aktuell eller näst nyare) stavning (utan hakparenteser [[...]])
  • (optionell) ejtagg=1 utelämna texten (ålderdomligt)   (vid kedjelagd användning)
  • caller=true, pagenameoverridetestonly=, nocat=true, nocat=false

Exempel och självtest redigera


{sv|hv|vilken}
sida "hvilken", svenska

(ålderdomligt) genom stavningsreformen 1906 ersatt av vilken


{da|aa|forstå}
sida "forstaa", danska

(ålderdomligt) genom rättskrivningsreformen 1948 ersatt av forstå


{sv|-|glass}
sida "glass", ospecificerad reform

(ålderdomligt) ersatt av glass


{da|aa|forstå|junk=uppskattas-ej}
FEL, sida "forstaa", ogiltig parameter


Ogiltiga parametrar -- "Mall:gammalstavning" använder inte parameter "junk=".


{Sv|hv|vilken}
FEL, sida "hvilken", uppenbarligen ogiltig språkkod


Uppenbarligen ogiltig språkkod -- Kod "Sv" skickades in i "Mall:gammalstavning".


{sv|av|vilken}
FEL, sida "hvilken", svenska, okänd reform


Mallsyntax -- Okänd förkortning för reform "av" för språkkod "sv" skickad in i "Mall:gammalstavning".


Felhantering redigera

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 redigera

Automatiserade test redigera

All tests passed. (refresh)

Text Expected Actual
test_01_basic_sv:
Passed {{gammalstavning|sv|hv|vilken|pagenameoverridetestonly=hvilken|nocat=false}} <i>(ålderdomligt) genom [[w:stavningsreformen 1906|stavningsreformen 1906]] ersatt av</i> [[vilken]][[Kategori:Svenska/Ålderdomligt|hvilken]] <i>(ålderdomligt) genom [[w:stavningsreformen 1906|stavningsreformen 1906]] ersatt av</i> [[vilken]][[Kategori:Svenska/Ålderdomligt|hvilken]]
Passed {{gammalstavning|sv|wv|öfvergifva|pagenameoverridetestonly=öfwergifwa|nocat=false}} <i>(ålderdomligt) genom övergången från fraktur till antikva ersatt av</i> [[öfvergifva]][[Kategori:Svenska/Ålderdomligt|z°fwergifwa]] <i>(ålderdomligt) genom övergången från fraktur till antikva ersatt av</i> [[öfvergifva]][[Kategori:Svenska/Ålderdomligt|z°fwergifwa]]
Passed {{gammalstavning|sv|-|dom|pagenameoverridetestonly=dem|nocat=false}} <i>(ålderdomligt) ersatt av</i> [[dom]][[Kategori:Svenska/Ålderdomligt|dem]] <i>(ålderdomligt) ersatt av</i> [[dom]][[Kategori:Svenska/Ålderdomligt|dem]]
Text Expected Actual
test_02_other_lang:
Passed {{gammalstavning|da|aa|forstå|pagenameoverridetestonly=forstaa|nocat=false}} <i>(ålderdomligt) genom [[:da:w:Retskrivningsreformen i 1948|rättskrivningsreformen 1948]] ersatt av</i> [[forstå]][[Kategori:Danska/Ålderdomligt|forstaa]] <i>(ålderdomligt) genom [[:da:w:Retskrivningsreformen i 1948|rättskrivningsreformen 1948]] ersatt av</i> [[forstå]][[Kategori:Danska/Ålderdomligt|forstaa]]
Text Expected Actual
test_03_errors:
Passed {{gammalstavning|da|aa|forstå|junk=uppskattas-ej|pagenameoverridetestonly=forstaa|nocat=false}} <br><span class="error"><b>Ogiltiga parametrar -- "Mall:gammalstavning" använder inte parameter "junk=".</b></span></br>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (gammalstavning)]] <br><span class="error"><b>Ogiltiga parametrar -- "Mall:gammalstavning" använder inte parameter "junk=".</b></span></br>[[Kategori:Ogiltiga parametrar]][[Kategori:Ogiltiga parametrar (gammalstavning)]]
Passed {{gammalstavning| |aa|lyn|pagenameoverridetestonly=lin|nocat=false}} <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:gammalstavning".</b></span></br>Språkkod, förkortning för reform och ny stavning krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]] <br><span class="error"><b>Mallsyntax -- Obligatorisk parameter saknas i "Mall:gammalstavning".</b></span></br>Språkkod, förkortning för reform och ny stavning krävs alltid.[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]]
Passed {{gammalstavning|Da|aa|forstå|pagenameoverridetestonly=forstaa|nocat=false}} <br><span class="error"><b>Uppenbarligen ogiltig språkkod -- Kod "Da" skickades in i "Mall:gammalstavning".</b></span></br>[[Kategori:Uppenbarligen ogiltig språkkod]][[Kategori:Uppenbarligen ogiltig språkkod (gammalstavning)]] <br><span class="error"><b>Uppenbarligen ogiltig språkkod -- Kod "Da" skickades in i "Mall:gammalstavning".</b></span></br>[[Kategori:Uppenbarligen ogiltig språkkod]][[Kategori:Uppenbarligen ogiltig språkkod (gammalstavning)]]
Passed {{gammalstavning|aad|aa|forstå|pagenameoverridetestonly=forstaa|nocat=false}} <br><span class="error"><b>Okänd språkkod -- Kod "aad" skickades in i "Mall:gammalstavning".</b></span></br>[[Kategori:Okänd språkkod]][[Kategori:Okänd språkkod (gammalstavning)]] <br><span class="error"><b>Okänd språkkod -- Kod "aad" skickades in i "Mall:gammalstavning".</b></span></br>[[Kategori:Okänd språkkod]][[Kategori:Okänd språkkod (gammalstavning)]]
Passed {{gammalstavning|id|fv|provinsi|pagenameoverridetestonly=profinsi|nocat=false}} <br><span class="error"><b>Mallsyntax -- Okänd förkortning för reform "fv" för språkkod "id" skickad in i "Mall:gammalstavning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]] <br><span class="error"><b>Mallsyntax -- Okänd förkortning för reform "fv" för språkkod "id" skickad in i "Mall:gammalstavning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]]
Passed {{gammalstavning|sv|fv|[[övergiva]]|pagenameoverridetestonly=öfvergifva|nocat=false}} <br><span class="error"><b>Mallsyntax -- Ny stavning ska anges utan hakparenteser för "Mall:gammalstavning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]] <br><span class="error"><b>Mallsyntax -- Ny stavning ska anges utan hakparenteser för "Mall:gammalstavning".</b></span></br>[[Kategori:Mallsyntax]][[Kategori:Mallsyntax (gammalstavning)]]


-- (obligatory) language code
-- (obligatory) code for reform (lowercase, see list, or "-" for unspecified)
-- (obligatory) new (current or next newer) spelling (raw word without brackets "[["..."]]")
-- (optional) "ejtagg=1" (suppress text "(ålderdomligt) " for chained use)

local exporttbl = {}

local import_lang  = require ("Modul:lang")
local import_param = require ("Modul:param")
local import_sort  = require ("Modul:sort")

local name_short = "gammalstavning"
local name_long  = '"Mall:' .. name_short .. '"'

local reformer = {}

reformer["sv|wv"]  = "övergången från fraktur till antikva"
reformer["sv|th"]  = "förenklingen under 1800-talet"
reformer["sv|eä"]  = "sjätte upplagan av [[w:SAOL|SAOL]] (1889)"
reformer["sv|qv"]  = reformer["sv|eä"] -- 1889
reformer["sv|gk"]  = "sjunde upplagan av [[w:SAOL|SAOL]] (1900)"
reformer["sv|hv"]  = "[[w:stavningsreformen 1906|stavningsreformen 1906]]"
reformer["sv|dt"]  = reformer["sv|hv"] -- 1906
reformer["sv|f"]   = reformer["sv|hv"] -- 1906
reformer["sv|fv"]  = reformer["sv|hv"] -- 1906

reformer["da|aa"]  = "[[:da:w:Retskrivningsreformen i 1948|rättskrivningsreformen 1948]]"
reformer["da|dl"]  = reformer["da|aa"]
reformer["da|ld"]  = reformer["da|aa"]

reformer["de|ss"]  = "[[:en:w:German orthography reform of 1996|rättskrivningsreformen 1996]]"
reformer["de|auh"] = reformer["de|ss"]
reformer["de|ff"]  = reformer["de|ss"]
reformer["de|sär"] = reformer["de|ss"]
reformer["de|eä"]  = reformer["de|ss"]

reformer["is|zs"]  = "stavningsreformen 1973"

reformer["nn|gk"]  = "[[:en:Wiktionary:Norwegian_Nynorsk_spelling_reforms#1917|reformen år 1917]]"

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 = '' -- only for sorting hint/key
  local reform_desc = ''

  local error_visible = ''
  local error_cat = ''
  local good_visible = ''
  local good_cat = ''
  local final_result = ''

  local error_code = 0

  local boo_bad_brackets = false
  local boo_reform_type_specified = false
  local boo_ej_tagg = false

  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,"ejtagg","nocat","pagenameoverridetestonly"}
  list_bad_params = import_param.go (arxsomons,legal_params)

  pagename = arxsomons["pagenameoverridetestonly"] or mw.title.getCurrentTitle().text

  local lang_code    = mw.text.trim (arxsomons[1] or "")
  local reform_code  = mw.text.trim (arxsomons[2] or "")
  local new_spelling = mw.text.trim (arxsomons[3] or "")

  boo_ej_tagg = (arxsomons["ejtagg"]=="1")

  boo_no_cat_true  = (arxsomons["nocat"]=="true")
  boo_no_cat_false = (arxsomons["nocat"]=="false")

  many_complaints[1] = {'Ogiltiga parametrar','@M använder inte @V'}
  many_complaints[2] = {'Mallsyntax','Obligatorisk parameter saknas i @M','Språkkod, förkortning för reform och ny stavning 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 @V skickad in i @M'} -- "@V" contains both ref code and lang code
  many_complaints[6] = {'Mallsyntax','Ny stavning ska anges utan hakparenteser för @M'}

  boo_reform_type_specified = (reform_code~="-") -- can still be unknown

  if boo_reform_type_specified then
    reform_desc = reformer[lang_code .. '|' .. reform_code] or "" -- circumvent risk of type "nil"
  end--if

  boo_bad_brackets = (string.find(new_spelling,'[',1,true)~=nil) or (string.find(new_spelling,']',1,true)~=nil)

  while true do
    if list_bad_params ~= '' then
      error_code = 1
      violating_string = list_bad_params
      break
    end--if
    if ((lang_code=="") or (reform_code=="") or (new_spelling=="")) 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 (boo_reform_type_specified and (reform_desc=="")) then
      error_code = 5
      violating_string = 'förkortning för reform "' .. reform_code .. '" för språkkod "' .. lang_code .. '"'
      break
    end--if
    if boo_bad_brackets 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 "isObviouslyInvalid" and "hasLanguage" for validation
    local sort_key = import_sort.getSortKey(lang_code, pagename)

    good_visible = "<i>"
    if (not boo_ej_tagg) then
      good_visible = good_visible .. "(ålderdomligt) "
    end--if
    if (boo_reform_type_specified) then
      good_visible = good_visible .. "genom " .. reform_desc .. " "
    end--if
    good_visible = good_visible .. "ersatt av</i> [[" .. new_spelling .. "]]"
    good_cat = "[[Kategori:" .. language_ucf .. "/Ålderdomligt|" .. 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