Module:Designation

De Wicri Chanson de Roland

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

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 = ''
    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 paramètres nommés dans le code du modèle :
    --    |un=M    |deux=me   |trois=Madame   |v=(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 =     frame.args.v      -- 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 szModeleV ~= nil then
      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 string.len( szModeleV ) ~= 0  then
        szMsg = '<span style="font-size:200%; color:red;">Dans le code du modèle, au moins un état du registre <code>v</code> est inconnu : <code>' .. szModeleV .. '</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 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