Modulo:mmulnam

El Vikivortaro
Salti al navigilo Salti al serĉilo
--[===[

MODULE "MMULNAM" (multiple name)

"eo.wiktionary.org/wiki/Modulo:mmulnam" <!--2020-Nov-08-->
"id.wiktionary.org/wiki/Modul:mmulnam"

Purpose: shows multiple names of a language as links to lemma pages

Utilo: montras plurajn nomojn de lingvo kiel ligiloj al kapvortaj pagxoj

Manfaat: menampilkan beberapa ...

Syfte: visar flera ...

Used by templates / Uzata far sxablonoj:
- "mulnam" only

Required submodules / Bezonataj submoduloj:
- none / neniuj

This module can take parameters both those sent to itself
(own frame) and those sent to the caller (caller's frame).

Incoming: - one anonymous obligatory parameter type ("E" or "P" or "A")
          - further 2...10 anonymous parameters (2...48 octet:s each)

Returned: - text with wikicode (to be dropped on a line beginnig with "*")

Special trick: if there is a parameter "caller=true" on the own frame then
               that own frame is discarded in favor of the caller's one.

This module is unbreakable (when called with correct module
name and function name).

Cxi tiu modulo estas nerompebla (kiam vokita kun gxustaj nomo de
modulo kaj nomo de funkcio).

]===]

local mulnam = {}

------------------------------------------------------------------------

---- CONSTANTS ----

------------------------------------------------------------------------

  -- constant strings (generic & misc)

  local constrkros  = '&nbsp;#&nbsp;#&nbsp;'       -- lagom -> huge circumfix
  local constrelabg = '<span class="error"><b>'    -- lagom whining begin
  local constrelaen = '</b></span>'                -- lagom whining end

  -- HTML stuff for our tiny frames

  local constrtabu3  = '<table style="display:inline-block; vertical-align:middle; margin:0.1em; padding:0; border:0.05em solid #000000;"><tr><td>'
  local constrtabu5  = '</td></tr></table>'

  -- uncommentable constant strings EO vs ID

  local contblliteroj = {}
  contblliteroj = {'E','P','A'}                           -- EO (index 1...3)

  local contblpriskribo = {}
  contblpriskribo = {'esperante','propralingve','angle'}  -- EO (index 1...3)

  local constrer0 = "nevalida kvanto da nomoj"            -- EO
  -- local constrer0 = "jumlah nama tidak sah"               -- ID

------------------------------------------------------------------------

---- MAIN EXPORTED FUNCTION ----

------------------------------------------------------------------------

function mulnam.ek (arxframent)

  -- general unknown type

  local vartmp = 0     -- variable without type

  -- special type "args" AKA "arx"

  local arxsomons = 0  -- metaized "args" from our own or caller's "frame"

  -- general "tab"

  local tabarx2t10 = {}

  -- general "str"

  local strtpm        = ""
  local strret        = ""  -- final output string
  local strpriskribo  = ""  -- picked from "contblpriskribo"

  -- general "num"

  local numlong   = 0  -- length
  local numamop   = 0  -- amount of extra parameters (2...10)
  local numindx   = 0

  -- general "boo"

  local boocrap   = false
  local boocryd   = false

  ---- GUARD AGAINST INTERNAL ERROR ----

  -- "contblliteroj" and "contblpriskribo" must be uncommented and assigned

  -- note that reporting of this error may NOT depend of uncommentable strings

  if ((type(contblliteroj[1])~="string") or (type(contblpriskribo[1])~="string")) then
    boocrap = true
  end--if

  ---- WHINE IF YOU MUST ABOUT INTERNAL ERROR ----

  -- note that reporting of this error may NOT depend of uncommentable strings

  if (boocrap) then
    strtpm = 'FATAL in "mmulnam" : internal error'
    strret = constrkros .. constrelabg .. strtpm .. constrelaen .. constrkros
    boocryd = true
  end--if

  ---- GET THE ARX (ONE OF TWO) ----

  if (boocrap==false) then
    arxsomons = arxframent.args -- "args" from our own "frame"
    vartmp = arxsomons ["caller"]
    if (vartmp=="true") then
      arxsomons = arxframent:getParent().args -- "args" from caller's "frame"
    end--if
  end--if

  ---- SEIZE 1 OBLIGATORY ANONYMOUS PARAMETER ----

  if (boocrap==false) then
    strpriskribo = "" -- preassign to empty
    vartmp = arxsomons[1]
    if (type(vartmp)=="string") then
      if (string.len(vartmp)==1) then
        if (vartmp==contblliteroj[1]) then
          strpriskribo = contblpriskribo[1]
        end--if
        if (vartmp==contblliteroj[2]) then
          strpriskribo = contblpriskribo[2]
        end--if
        if (vartmp==contblliteroj[3]) then
          strpriskribo = contblpriskribo[3]
        end--if
      end--if (string.len(vartmp)==1) then
    end--if
    if (strpriskribo=="") then
      boocrap = true -- missing or invalid parameter
    end--if
  end--if

  ---- WHINE IF YOU MUST ----

  if ((boocrap) and (boocryd==false)) then
    strtpm = 'FATAL in "mmulnam" : bad or missing obligatory parameter'
    strret = constrkros .. constrelabg .. strtpm .. constrelaen .. constrkros
    boocryd = true
  end--if

  ---- SEIZE 2...10 EXTRA ANONYMOUS PARAMETERS ----

  if (boocrap==false) then
    numamop = 0 -- here ZERO-based index
    while (true) do
      if (numamop==11) then
        break -- this is baad
      end--if
      vartmp = arxsomons[numamop+2] -- OFF-by-TWO here
      if (type(vartmp)~="string") then
        break -- this is good or baad
      end--if
      strtpm = vartmp
      numlong = (string.len(strtpm))
      if ((numlong<2) or (numlong>48)) then
        boocrap = true -- invalid extra parameter
        break
      end--if
      tabarx2t10[numamop] = strtpm -- ZERO-based
      numamop = numamop + 1
    end--while
    if ((numamop<2) or (numamop>10)) then
      boocrap = true -- invalid amount of extra parameters
    end--if
  end--if

  ---- WHINE IF YOU MUST #0 ----

  if ((boocrap) and (boocryd==false)) then
    strret = constrkros .. constrelabg .. constrer0 .. constrelaen .. constrkros
  end--if

  ---- MAIN LOOP ----

  -- generate the string with 2...10 links

  if (boocrap==false) then
    strret = '<small>(' .. strpriskribo .. ')</small>&nbsp;'
    numindx = 0
    while (true) do
      if (numindx==numamop) then
        break -- done
      end--if
      if (numindx~=0) then
        strret = strret .. ", "
      end--if
      strret = strret .. constrtabu3 .. "[[" .. tabarx2t10[numindx] .. "]]" .. constrtabu5
      numindx = numindx  + 1 -- ZERO-based
    end--while
  end--if

  ---- RETURN THE JUNK STRING ----

  return strret

end--function

  ---- RETURN THE JUNK LUA TABLE ----

return mulnam