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

-- Au 18/11/2021 sur la base de Ref expurgé, (plus de clé automatique) ajout de paramètre trace qui affiche le HTML
-- Au 02/05/2018. Ce module Ref fabrique les balises de renvoi en bas de page
--	<ref name="xxxx" group="yyyy">aaaa</ref> et rappel
--	<ref name="xxxx" group="yyyy"/> 
--(à la place du tag:ref du parseur initialement mis en place puis de son ancien appel en redirection)
local p = {}
--
local function _xist(objet)	--Cette fonction transforme localement un objet composite "qui n'existe pas" nil &  '' (taille 0) en valeur false d'objet pour Ref testable sans passer par pcall
	if (tostring(objet) ~= nil and #tostring(objet) > 0 ) then	return objet else return false	end
end	--fin _xist
--
local function _coulerr (objet)	 -- rouge
	local objet ='<span style="color:#d00000;">' .. objet .. '</span>'
  return objet
end	--fin _coulerr
--
local function _trx (reftext, module_args)--Cette fonction fabrique la trace conditionnée par l'argument trace=oui
    if _xist (module_args["trace"]) 
     then -- tracage
          trax = '<span style="color:#F08000;">'..reftext..' Rappel: ne pas mettre de = dans le code de paramètres positionnels. Utilisez {{=}} si besoin.'..'</span>'          
     else -- pas trace
          trax = ''
   end
    return trax
end --fin _trx
--
local function _mef_balRef (module_args, nb_erreurs) -- Cette fonction met en forme les balises ref name group - /ref pour le preparseur
	local clefauto = '°°0'
    local renvoi = 'rien'
    local affiche = 'rien à afficher'
    -- éliminer les paramètres nommés 
-- OK pas de nommés, décoder les positionnels
     if _xist(module_args[2])
       then -- un group
           if _xist(module_args[3])
            then -- un name
                if _xist(module_args[1])
                   then -- un text
                   --renvoi = 'un group un name un text 1'
                   renvoi = '<ref group="'..module_args[2]..'" name="'..module_args[3]..'">'..module_args[1]..'</ref>'
                   else -- pas text
                   --renvoi = 'un group un name pas text 2'
                   renvoi = '<ref group="'..module_args[2]..'" name="'..module_args[3]..'"/>'
                end
            else -- pas name
                if _xist(module_args[1])
                   then -- un text
                   --renvoi = 'un group pas name un text 3'
                   renvoi = '<ref group="'..module_args[2]..'">'..module_args[1]..'</ref>'
                   else -- pas text
                   --renvoi = 'un group pas name pas text 4'
                   renvoi = _coulerr ('ERREUR pas de texte pas de nom (mais un groupe) en paramètres positionnels ou bien un paramètre nommé ou bien un = dans le texte du renvoi. Utilisez {{=}} si besoin.')
                   nb_erreurs = nb_erreurs + 1
                end
           end
       else -- pas group
           if _xist(module_args[3])
            then -- un name
                if _xist(module_args[1])
                   then -- un text
                   --renvoi = 'pas group un name un text 5'
                   renvoi = '<ref name="'..module_args[3]..'">'..module_args[1]..'</ref>'
                   else -- pas text
                   --renvoi = 'pas group un name pas text 6'
                   renvoi = '<ref name="'..module_args[3]..'"/>'
                end
            else -- pas name
                if _xist(module_args[1])
                   then -- un text
                   --renvoi = 'pas group pas name un text 7'
                   renvoi = '<ref>'..module_args[1]..'</ref>'
                   else -- pas text
                   --renvoi = 'pas group pas name pas text 8'
                   renvoi = _coulerr ('ERREUR pas de texte, pas de nom (et pas de groupe) en paramètres positionnels ou bien un paramètre nommé ou bien un = dans le texte du renvoi. Utilisez {{=}} si besoin.')
                   nb_erreurs = nb_erreurs + 1
                end
           end   
     end

   return renvoi
end
--
function _verifsyntax(article_args, nb_erreurs, liste_erreurs)    -- détecter les positionnels

    if _xist(article_args["texte"] or article_args["text"]) then liste_erreurs=liste_erreurs..'<br>ERREUR argument nommé texte= ou text=;Remplacez ce modèle avec {{Note}}, avec {{Efn}}. Utilisez {{=}} si besoin.'
        nb_erreurs = nb_erreurs + 1 end
    if _xist(article_args["groupe"] or article_args["group"]) then liste_erreurs=liste_erreurs..'<br>ERREUR argument nommé groupe= ou group=;Remplacez ce modèle avec {{Note}}, avec {{Efn}}. Utilisez {{=}} si besoin.'
        nb_erreurs = nb_erreurs + 1 end
    if _xist(article_args["nom"] or article_args["name"]) then liste_erreurs= liste_erreurs..'<br>ERREUR argument nommé nom= ou name=;Remplacez ce modèle avec {{Note}}, avec {{Efn}}. Utilisez {{=}} si besoin.'
        nb_erreurs = nb_erreurs + 1 end


   return nb_erreurs, liste_erreurs
end
--
-- Cette fonction est accès  p.Ref_ 
--
function p.Ref_ (frame) --Cette fonction fabrique un renvoi en bas de page
	-- (les définitions des zones de travail à portée p sont  sous p{} )
	-- en fait ce qui suit est la définition des variables  pour toutes fonctions
	local objet = ''	--pour fonctions
    local pbjet = '' 
	-- modele_args
	local modele_args = frame.args
	-- article_args
	local article_args = frame:getParent().args

	--
	local clef = '°°0'	--clé automatique inutilisée
	--
	local nom = ''  	-- mettre les args article d'abord
	local groupe = ''	-- mettre les args article d'abord 	
	local reftext = ''	-- le texte
    local trax = ''     -- la trace
	local cat_erreurs = ''
	local liste_erreurs = ''
	local nb_erreurs = 0
    -- détecter les positionnels
        nb_erreurs, liste_erreurs = _verifsyntax(article_args, nb_erreurs, liste_erreurs)

	-- préparer l'HTML
	    reftext =  _mef_balRef(modele_args, nb_erreurs)
    -- trace éventuelle - pour doc avec trace
        trax = _trx(reftext, modele_args)    
	-- erreurs éventuelles
	if (nb_erreurs > 0) then
       	if _xist(modele_args['__Cat']) then cat_erreurs  = modele_args['__Cat'] end
	    liste_erreurs = "[["..cat_erreurs.."]]".._coulerr("<br> nb erreurs: "..nb_erreurs..liste_erreurs.."<br>")
        renvoi = trax..liste_erreurs
                        else
	-- le corps du rendu
        renvoi =  trax..frame:preprocess(reftext)
	end
   return renvoi
end --fin Ref_ 

return p