Module:Designation test

La documentation pour ce module peut être créée à Module:Designation test/Documentation

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

function p.Construire( frame )

    local args = mw.getCurrentFrame():getParent().args

    -------------------------------------------------------
    -- Noter les paramètres sans nom dans l'appel du modèle
    -------------------------------------------------------
    local aParamSansNom = {}
    local nCnt = 0
    local szInfo = ''
    
    aParamSansNom[1] = ''
    aParamSansNom[2] = ''
    
    for i, v in ipairs(args) do
      if string.len( mw.text.trim(v) ) ~= 0  then
        if i == 1 then
        	aParamSansNom[i] = mw.text.trim(v)
        	nCnt = nCnt + 1
        	szInfo = szInfo .. 'Paramètre ' .. i .. ' : ' .. aParamSansNom[i] .. '<br>\n'
        else
        	aParamSansNom[2] = aParamSansNom[2] .. mw.text.trim(v)
        end
      end
    end
    
    ----------------------------------------------------------
    -- Paramètres possibles : 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 szModeleV = '' -- Paramètres de mise en forme du texte
    if aParamSansNom[2] ~= nil then
    	szModeleV = mw.ustring.lower(aParamSansNom[2])
    end
    if frame.args.v ~= nil then
    	szModeleV = szModeleV .. ', ' .. frame.args.v
    end

    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 string.find( szModeleV, 'm' )  then szModeleV = string.gsub( szModeleV, 'm', '' )  ; bModeleM = true  ; end
    if string.find( szModeleV, 'p' )  then szModeleV = string.gsub( szModeleV, 'p', '' )  ; bModeleP = true  ; end
    if string.find( szModeleV, 'nx' ) then szModeleV = string.gsub( szModeleV, 'nx', '' ) ; bModeleNx = true ; end
    if string.find( szModeleV, 'sc' ) then szModeleV = string.gsub( szModeleV, 'sc', '' ) ; bModeleSc = true ; end
    if string.find( szModeleV, 's' )  then szModeleV = string.gsub( szModeleV, 's', '' )  ; bModeleS = true  ; 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 then 
      szModeleUn = mw.ustring.lower( szModeleUn )
    end

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

	-- Deuxième partie vide, on ne génère pas de modificateurs
	if szModeleDeux ~= '' then
    	-- Deuxième partie soulignée ?
    	if bModeleS == true then 
        	szModeleDeux = '<span style="text-decoration: underline;">' .. szModeleDeux .. '</span>'
    	end

    	-- Deuxième partie en non exposant ?
    	if not(bModeleNx == true) then 
    		szModeleDeux = '<sup style="font-size:70%;">' .. szModeleDeux .. '</sup>'
    	end
    
    	-- Deuxième partie en petites capitales ?
    	if bModeleSc == true then 
    		szModeleDeux = '<span class=sc>' .. szModeleDeux .. '</span>'
    	end
    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