Modul:cat-etym

Definition från Wiktionary, den fria ordlistan.
Hoppa till navigering Hoppa till sök

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


Syfte[redigera]

Implementerar {{kategorinavigering-härledningar}}.

Parametrar[redigera]

  • inga!
  • caller=true, pagenameoverridetestonly=, nsnumberoverridetestonly=, nocat=true

All information hämtas från sidnamnet som måsta vara på formen:

Kategori:<Språk 1>/Härledningar från <språk 2>

Exempel och självtest[redigera]


sida "Kategori:Engelska/Härledningar från svenska", motsatt kategori finns
Den här kategorin innehåller uppslag på engelska (kod "en") härledda från svenska (kod "sv").
Se även kategorierna: Index (kategoristartsida), Engelska/Härledningar, Svenska/Härledningar. Motsatt kategori är Kategori:Svenska/Härledningar från engelska.

sida "Kategori:Engelska/Härledningar från latin", motsatt kategori saknas
Den här kategorin innehåller uppslag på engelska (kod "en") härledda från latin (kod "la").
Se även kategorierna: Index (kategoristartsida), Engelska/Härledningar, Latin/Härledningar. Motsatt kategori "Kategori:Latin/Härledningar från engelska" saknas.

sida "Appendix:Engelska/Härledningar från latin", FEL -- användning i fel namnrymd


Mallanvändning -- "Mall:kategorinavigering-härledningar" används enbart på särskilda kategorisidor.
Se dokumentationen.


sida "Kategori:Svenska/Härledningar från samiska", språkkod och språknamn reserverade för etymologi
Den här kategorin innehåller uppslag på svenska (kod "sv") härledda från samiska (kod "h-smi" , reserverad för härledningar).
Se även kategorierna: Index (kategoristartsida), Svenska/Härledningar, Samiska/Härledningar.

sida "Kategori:Samiska/Härledningar från svenska", FEL -- språknamn "samiska" är reserverad för etymologi


Mallanvändning -- "Mall:kategorinavigering-härledningar" har upptäckt okänt språknamn "samiska" i sidnamnet.


Felhantering[redigera]

3 olika fel detekteras. Spårningskategori Kategori:Mallanvändning och andra. Tydliga röda varningar visas alltid.

Behövda submoduler[redigera]

-- no parameters, depends on pagename and namespace

local exporttbl = {}

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

local name_short = 'kategorinavigering-härledningar'
local name_long  = '"Mall:' .. name_short .. '"' -- quoted

local separation_string = "/Härledningar från "

local function ucFirst(str)
  return mw.ustring.gsub(str, "^%l", mw.ustring.upper)
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

local function ifExistEnhanced (arxinp3,strpgname,aggressive_mode)
  local boomemangada = false
  local metaa = 0
  if (aggressive_mode) then -- does NOT work with substitution
    boomemangada = ( '&#91;&#91;:' .. strpgname .. '&#93;&#93;' ~= arxinp3:preprocess ('{{msgnw::' .. strpgname .. '}}') )
  else
    metaa = mw.title.new (strpgname) -- 1 param
    boomemangada = metaa.exists -- expensive
  end--if
  return boomemangada
end--function ifExistEnhanced

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 = '' -- crucial, override exists

  local lang_lemma = ''
  local lang_etymo = ''
  local lang_lemma_ucf = ''
  local lang_etymo_ucf = ''
  local code_lemma = ''
  local code_etymo = ''

  local cat_opposite = ''

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

  local error_code = 0

  local pagename_len = 0
  local num_namespace = 0 -- must be 14, override exists

  local position_a = 0
  local position_b = 0

  local boo_no_cat_true = false

  local boo_bad_pagename = false
  local boo_no_lemma_code = false
  local boo_opposite_exists = 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]=0,"nocat","pagenameoverridetestonly","nsnumberoverridetestonly"}
  list_bad_params = import_param.go (arxsomons,legal_params)

  pagename      = arxsomons["pagenameoverridetestonly"] or mw.title.getCurrentTitle().text
  num_namespace = tonumber (arxsomons["nsnumberoverridetestonly"] or mw.title.getCurrentTitle().namespace)

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

  many_complaints[1] = {'Ogiltiga parametrar','@M använder inte @V','Den här mallen behöver inga parametrar alls.'}
  many_complaints[2] = {'Mallanvändning','@M används enbart på särskilda kategorisidor','Se dokumentationen.'}
  many_complaints[3] = {'Mallanvändning','@M har upptäckt okänt språknamn @V i sidnamnet'}

  boo_bad_pagename = (num_namespace~=14)
  if not boo_bad_pagename then
    pagename_len = string.len(pagename)
    boo_bad_pagename = (pagename_len<24)
  end--if
  if not boo_bad_pagename then
    position_a = (string.find(pagename,separation_string,1,true) or 1) - 1 -- inclusive last pos ONE-based, ZERO if NOT found
    boo_bad_pagename = (position_a<2) -- minimal length of lang name 2 chars "yi"
  end--if
  if not boo_bad_pagename then
    position_b = position_a + string.len(separation_string) + 1 -- inclusive beginning pos ONE-based
    boo_bad_pagename = ((position_b+1)>pagename_len) -- minimal length of lang name 2 chars "yi"
  end--if
  if not boo_bad_pagename then
    lang_lemma = mw.ustring.lower(string.sub(pagename,1,position_a)) -- wrong capitalization will fire error "bad pagename"
    lang_etymo = mw.ustring.lower(string.sub(pagename,position_b,pagename_len)) -- wrong capitalization will fire error "bad pagename"
    lang_lemma_ucf = ucFirst(lang_lemma)
    lang_etymo_ucf = ucFirst(lang_etymo)
    boo_bad_pagename = (pagename~=(lang_lemma_ucf..separation_string..lang_etymo)) or (lang_lemma==lang_etymo) -- wrong capitalization or are same
  end--if
  if not boo_bad_pagename then
    code_lemma = import_lang.getCode (lang_lemma) -- do NOT accept etymological codes here
    code_etymo = import_lang.getCode (lang_etymo,"alsoetym") -- YES do accept etymological codes here
    boo_no_lemma_code = (import_lang.getCode(lang_etymo)=="xx")
  end--if

  while true do
    if list_bad_params ~= '' then
      error_code = 1
      violating_string = list_bad_params
      break
    end--if
    if boo_bad_pagename then
      error_code = 2 -- no violating string here
      break
    end--if
    if (code_lemma=="xx") then
      error_code = 3 -- code 3 used two times
      violating_string = '"' .. lang_lemma .. '"'
      break
    end--if
    if (code_etymo=="xx") then
      error_code = 3 -- code 3 used two times
      violating_string = '"' .. lang_etymo .. '"'
    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 but NOT nil
    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

    good_visible = '<div style="margin:0.7em;">Den här kategorin innehåller uppslag på ' .. lang_lemma
    good_visible = good_visible .. ' (kod "<code>' .. code_lemma .. '</code>") härledda från '
    good_visible = good_visible .. lang_etymo .. ' (kod "<code>' .. code_etymo .. '</code>"'
    if boo_no_lemma_code then
      good_visible = good_visible .. " , reserverad för härledningar"
    end--if
    good_visible = good_visible .. ").</div>"
    good_visible = good_visible .. '<div style="margin:0.7em;"><i>Se även kategorierna:</i> [[:Kategori:Index|Index (kategoristartsida)]]'
    good_visible = good_visible .. ", <b>[[:Kategori:" .. lang_lemma_ucf .. "/Härledningar|" .. lang_lemma_ucf .. "/Härledningar]]</b>"
    good_visible = good_visible .. ", <b>[[:Kategori:" .. lang_etymo_ucf .. "/Härledningar|" .. lang_etymo_ucf .. "/Härledningar]]</b>."
    if not boo_no_lemma_code then
      cat_opposite = lang_etymo_ucf .. separation_string .. lang_lemma -- omit ns prefix
      boo_opposite_exists = ifExistEnhanced (arxframent,("Kategori:"..cat_opposite),false)
      good_visible = good_visible .. " Motsatt kategori "
      if (boo_opposite_exists) then
        good_visible = good_visible .. 'är <b>[[:Kategori:' .. cat_opposite .. ']]</b>.'
      else
        good_visible = good_visible .. '"Kategori:' .. cat_opposite .. '" saknas.'
      end--if
    end--if
    good_visible = good_visible .. "</div>"

    good_cat= "[[Kategori:" .. lang_lemma_ucf .. "/Härledningar|" .. lang_etymo .. "]][[Kategori:" .. lang_etymo_ucf .. "/Härledningar|" .. lang_lemma .. "]]"

  end--if (error_code==0) then

  if (error_code==0) then
    final_result = good_visible -- do NOT warn since the template is used on very short pages only
  else
    final_result = error_visible
  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