Module:Designation2

Documentation du module [voir] [modifier] [purger]
La documentation de ce module Scribunto écrit en Lua est incluse depuis sa sous-page de documentation.

Le module:Designation (version 2) contient le code pertinent à des modèles servant à abréger des titres ({{Mgr}}, {{Mme}}...), des ordinaux ({{1er}}, {{2de}}…, IIe, XXe…) et toute autre abréviation mettant en exposant.

Exemples modifier

Ce code dans un modèle
{{#invoke:Designation2|Construire|un=M|deux=me|trois=Madame}}
donne
Mme
Au survol de « Mme », le mot « Madame » est affiché.


Ce code dans un modèle
{{#invoke:Designation2|Construire|un=M|deux=me|trois=Madame|r=sc}}
donne
Mme
Les lettres en exposant sont en petites capitales. Au survol de « Mme », le mot « Madame » est affiché.


Ce code dans un modèle
{{#invoke:Designation2|Construire|un=M|deux=me|trois=Madame|r=s}}
donne
Mme
Les lettres en exposant sont soulignées. Au survol de « Mme », le mot « Madame » est affiché.


Ce code dans un modèle
{{#invoke:Designation2|Construire|un=M.|deux=|trois=monsieur}}
donne
M.
Le paramètre deux est vide, ce que le module accepte. Au survol de « M. », le mot « monsieur » est affiché.
Les paramètres un, deux et trois peuvent être vides, mais doivent être nommés explicitement.

Paramètres dans l'appel de modèle modifier

Paramètres à passer au modèle :

  • <texte> (optionnel) : texte affiché à la suite du titre, les deux liés par une espace insécable

Paramètres dans le code du modèle modifier

Paramètres à passer au module (et non PAS au modèle) :

  • un=<texte> (obligatoire) : première partie de l'abréviation (peut être vide)
  • deux=<texte> (obligatoire) : deuxième partie de l'abréviation (peut être vide)
  • trois=<texte> (obligatoire) : message de l'infobulle (peut être vide)
  • r= (optionnel) : registre d'états, chaque état séparé par une virgule et autant d'espaces que souhaité (exemples : r=s, r=m, p,   nx)
    • m (état optionnel) : mettre en minuscule les lettres du paramètre un
    • p (état optionnel) : insérer un point (.) entre les paramètres un et deux
    • nx (état optionnel) : ne PAS mettre en exposant les lettres du paramètre deux
    • s (état optionnel) : souligner le texte du paramètre deux
    • sc (état optionnel) : mettre en petites capitales (small caps) les lettres du paramètre deux

Vecteur de test modifier

Voir Utilisateur:Cantons-de-l'Est/Module/Designation2

local p = {}
local szMsg = ''
local szCode = ''

function p.Construire( frame )

    -------------------------------------------------------
    -- Noter les paramètres sans nom dans l'appel du modèle
    -------------------------------------------------------
    local args = mw.getCurrentFrame():getParent().args
    local aParamSansNom = {}
    local nCnt = 0
    local szInfo = ''
    for i, v in ipairs(args) do
      aParamSansNom[i] = mw.text.trim(v)
      if string.len( mw.text.trim(v) ) ~= 0  then
        aParamSansNom[i] = mw.text.trim(v)
        nCnt = nCnt + 1
        szInfo = szInfo .. 'Paramètre ' .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n'
      end
-- szCode = szCode .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n'
    end

    if nCnt > 1 then
      szMsg = '<span style="font-size:200%; color:red;">Prière de saisir un seul texte.</span>' .. '<br>\n' .. szInfo
    end
    
    --------------------------------------------------------
    -- Noter les états dans l'appel du modèle :
    --    |r=m, p, nx, s, sc
    --------------------------------------------------------
    local szAppelR =  args['r']   -- Registre d'états des parties de l'abréviation

    local bAppelM =  false  -- (m)  Première partie en minuscule, ou pas
    local bAppelP =  false  -- (p)  Insertion d'un point entre la première partie et la deuxième partie, ou pas
    local bAppelNx = false  -- (nx) Deuxième partie en NON eXposant, ou pas
    local bAppelS =  false  -- (s)  Deuxième partie soulignée, ou pas
    local bAppelSc = false  -- (sc) Deuxième partie en petites capitales, ou pas

    if szAppelR ~= nil then
      local t = mw.text.split( szAppelR, ',', plain )
      local bIsExtra = false
      local sz = ''
      for k, v in ipairs(t) do
        sz = mw.text.trim(v)
        if     sz == 'm'   then bAppelM  = true 
        elseif sz == 'p'   then bAppelP  = true 
        elseif sz == 'nx'  then bAppelNx = true
        elseif sz == 's'   then bAppelS  = true
        elseif sz == 'sc'  then bAppelSc = true
        elseif sz == ''    then -- état blanc/nul ; ignorer pcq peut-être en test
        else bIsExtra = true
        end
      end
      if bIsExtra == true then
        szMsg = '<span style="font-size:200%; color:red;">Au moins un état du registre <code>r</code> est inconnu : <code>' .. szAppelR .. '</code>.</span>'
      end
    end

    ------------------------------------------------------------
    -- Noter les paramètres nommés dans le code du modèle :
    --    |un=M    |deux=me   |trois=Madame 
    -- Noter les états dans le code du modèle :
    --    |r=m, p, nx, s, sc
    ------------------------------------------------------------
    local szModeleUn =    frame.args.un     -- Première partie de l'abréviation
    local szModeleDeux =  frame.args.deux   -- Deuxième partie de l'abréviation
    local szModeleTrois = frame.args.trois  -- Un mot 
    local szModeleR =     frame.args.r      -- Registre d'états des parties de l'abréviation

    local bModeleM =  false  -- (m)  Première partie en minuscule, ou pas
    local bModeleP =  false  -- (p)  Insertion d'un point entre la première partie et la deuxième partie, ou pas
    local bModeleNx = false  -- (nx) Deuxième partie en NON eXposant, ou pas
    local bModeleS =  false  -- (s)  Deuxième partie soulignée, ou pas
    local bModeleSc = false  -- (sc) Deuxième partie en petites capitales, ou pas

    if szModeleR ~= nil then
      local t = mw.text.split( szModeleR, ',', plain )
      local bIsExtra = false
      local sz = ''
      for k, v in ipairs(t) do
        sz = mw.text.trim(v)
        if     sz == 'm'   then bModeleM  = true 
        elseif sz == 'p'   then bModeleP  = true 
        elseif sz == 'nx'  then bModeleNx = true
        elseif sz == 's'   then bModeleS  = true
        elseif sz == 'sc'  then bModeleSc = true
        elseif sz == ''    then -- état blanc/nul ; ignorer pcq peut-être en test
        else bIsExtra = true
        end
      end
      if bIsExtra == true then
        szMsg = '<span style="font-size:200%; color:red;">Dans le code du modèle, au moins un état du registre <code>r</code> est inconnu : <code>' .. szModeleR .. '</code>.</span>'
        szModeleUn = ''
        szModeleDeux = ''
        szModeleTrois = ''
      end
    end
    
    if szModeleUn == nil or szModeleDeux == nil or szModeleTrois == nil then
      szMsg = '<span style="font-size:200%; color:red;">Dans le code du modèle, prière de saisir une valeur, même vide, pour chacun des paramètres <code>un</code>, <code>deux</code> et <code>trois</code>.</span>'
      szModeleUn = ''
      szModeleDeux = ''
      szModeleTrois = ''
    end

    ---------------------
    -- Créer le code HTML
    ---------------------
    -- Première partie en minuscule ?
    if bModeleM == true or szAppelM ~= nil or bAppelM == true then 
      szModeleUn = mw.ustring.lower( szModeleUn )
    end

    -- Insertion d'un point entre la première partie et la deuxième partie ?
    if bModeleP == true or szAppelP ~= nil or bAppelP == true then 
      szModeleUn = szModeleUn .. '.'
    end

    -- Deuxième partie soulignée ?
    if bModeleS == true or szAppelS ~= nil or bAppelS == true then 
      szModeleDeux = '<span style="text-decoration: underline;">' .. szModeleDeux .. '</span>'
    end

    -- Deuxième partie en non exposant ?
    if not(bModeleNx == true or szAppelNx ~= nil or bAppelNx == true) then 
      szModeleDeux = '<sup style="font-size:70%;">' .. szModeleDeux .. '</sup>'
    end
    
    -- Deuxième partie en petites capitales ?
    if bModeleSc == true or szAppelSc ~= nil or bAppelSc == true then 
      szModeleDeux = '<span class=sc>' .. szModeleDeux .. '</span>'
    end
    
    szCode = szCode .. '<abbr class="abbr" title="' .. szModeleTrois .. '">' .. szModeleUn .. szModeleDeux .. '</abbr>'

    if nCnt == 1 then
      szCode = szCode .. '&nbsp;' .. aParamSansNom[1]
    end
    
    if string.len( szMsg ) ~= 0 then
      szCode = szMsg
    end

    return szCode
end

return p