Aller au contenu

Module:Harvapbrouillon

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 28 mars 2024 à 14:30 et modifiée en dernier par N25KC (discuter | contributions) (essai avec bananes.imprime). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

 Documentation[créer] [purger]
-- brouillon
-- brouillon personnel analyse et prog
-- brouillon
--  ébauche de 'module:nom_module/Documentation'
	-- présentation générale
	--
	--  on part de la base : la méthode harvard est un accès, le sous-produit de l'écriture dans l'article de l'ouvrage sourçant
	--  but:
	--   >obtention d'une génération de la référence à partir du traitement automatique en wikicode d'un duplicata de l'ouvrage
	--	 >obtention d'une génération manuelle guidée modification-code respectant les normes établies par consensus 
	--   >obtention du résultat comme avec la modification-écran : aucune erreur de transcription technique ni de bugs
	-- avec pour objectifs:
	--	¤rassemble les possibilités de note((harvsp) citations brèves référencées) rappels courts
	--  ¤respect de l'automatisme de sfn pour constituer des sous-groupes dans les groupes déclarés par duplicata à contenu modifié
	--  ¤rassemble la possibilité de sfnp de mettre la date entre (), ajout de la formulation Av JC
	-- les paramètres du module respectent la convention d'affichage de {{m|sfn}} ( et pas celle de stockage et affichage de {{m|ouvrage}} )
	--  pour éviter les bugs, 'trim' aussi des positionnels (pas plus de 5 positionnels autorisés)
	--	la syntaxe est 4 noms -sans prénoms-    (diff. nom1-prénom1 pour duplicata ouvrage si 'génération')
	--  										(diff. sur commentaire, alias, citation ...)
	-- auteur1.."/"
	--	"1" positionnel (espaces avant-arrière enlevés)
    -- auteur2.."/" 
	--	"2" positionnel (espaces avant-arrière enlevés)    
    -- auteur3.."/"
	--	"3" positionnel (espaces avant-arrière enlevés)
    -- auteur4.."/"
	--	"4" positionnel (espaces avant-arrière enlevés)
	-- date.."/" 
	--  5, 4, 3, 2 ;dernier positionnel (espaces avant-arrière enlevés, forme JJ_MM_AAAA, AAAA défaut, voir 'dpar' )
	-- p.."/"  --> (voir doc sfn)
	-- loc.."/"  --> (voir doc sfn)  
	-- ps.."/" --> autorise l'indirection par création d'une ref quand nécessaire et forme classique (voir doc sfn) 
	-- id.."/" --> ne tolère pas les positionnels, obligation de 'texte'
	-- texte.."/" --> utilisable pour se substituer à n'importe quel automatisme pour formuler le lien clicable
	-- gr.."/" --> (voir doc sfn)
	-- name.."/" --> les valeurs qui suivent autorisent les mêmes possibilités que <ref>, {{m|note}} :
	--	":<nom-manuel>" --> autorise les citations pas brèves respecte la formulation classique
	--  "auto" --> par défaut si pas de name
	-- Tdpar --> utilise la formulation nombre négatif pour préfixe 
	-- "()" --> date dernier positionnel entre parenthèses façon {{m|sfnp}}
	-- "(Av JC)" --> 
	-- "Av JC"	-->
	--	    	aliases pour l'analyseur 
	--
	--	
-- brouillon
-- brouillon
-- brouillon
local p = {}
--
--
local function _coulerr (objet)	 -- rouge
	local objet ='<span style="color:#d00000;">' .. objet .. '</span>'
  return objet
end	--fin _coulerr
--
local function _coulok (objet)	 -- vert
	local objet ='<span style="color:#00A030;">' .. objet .. '</span>'
  return objet
end	--fin _coulok
--
local function _Xist(objet)	-->	transforme localement un objet "qui n'existe pas" nil &  '' (taille 0) en valeur " "
	if (tostring(objet) ~= nil and #tostring(objet) > 0 ) then	return objet else return " "	end
end	--fin _xist

--
--   élaboration du clicbleu test de la date
--
local function _clicbleu (texteaf, toggle, p1val, p2val, p3val, p4val, p5val)	 -- ébauche de fonction appelée 
    local nb_erreurs = 0 -- au brouillon dates à tester si ce sont des nombres
	local toggle = toggle --mesparams sont transmis depuis l'appel
    if (texteaf ~= "") then texteaf = texteaf
      else
      		if (toggle == "5")  then 
      			if (type(p5val) ~= 'number') then nb_erreurs = nb_erreurs + 1 else
      			texteaf = p1val.." ''& al.'' "..p5val
      			end
      		end
	        if (toggle == "4") then
      			if (type(p4val) ~= 'number') then nb_erreurs = nb_erreurs + 1 else	        	
	        	texteaf = p1val.." "..p2val.." ".." "..p3val.." et ".." "..p4val
	        	end
	        end 
	        if (toggle == "3") then
      			if (type(p3val) ~= 'number') then nb_erreurs = nb_erreurs + 1 else	        	
	        	texteaf = p1val.." et "..p2val.." "..p3val
	        	end
	        end
	        if (toggle == "2") then
      			if (type(p2val) ~= 'number') then nb_erreurs = nb_erreurs + 1 else	        	
	        	texteaf = p1val.." "..p2val
	        	end
	        end	        
    end
  return texteaf, nb_erreurs
end	--fin _clicbleu
local function _syntax (mesparams,nb_erreurs,liste_erreurs, liste_opt) -- les positionnels sont abrégés des espaces avant et arrière
	local switch = "xcute"
if (switch == "stdby") then
   	local renvoi = ""
	local trim = ""	
	local liste_erreurs = ""
-- récupérer d'abord iden et texte pour l'ancre Harvard
    local liste_par_nom = ""
    local liste_optaf = ""
	local clicbleu = ""
--	local iden = ""
--	local texteaf = ""
	for ind, parval in pairs(mesparams.args) do --tous les params positionnels et nommés
		if (type(ind) ~= 'number') then -- que les nommés
            liste_par_nom = liste_par_nom.."{{,}}"..ind.."="..parval--liste indicative envoyée à la fin
--          test nom paramètres nommés
            if    not ((ind == "texte") 
               or (ind == "id")
               or (ind == "p") or (ind == "pp")
               or (ind == "loc")
               or (ind == "ps")
               or (ind == "gr") or (ind == "group") or (ind == "groupe") 
               or (ind == "dpar"))
              then 
              	-- sous else
 --               	repporter ici le chargement des nommés 
  --               	  repporter ici le chargement des nommés 
   --               	repporter ici le chargement des nommés 
            	--ok  brouillon rien chargé 
 --   	      else --aucun
         		nb_erreurs = nb_erreurs + 1 
            	liste_erreurs = liste_erreurs .."<br>;paramètre  ".." ; "..ind.." : mal nommé "
            end
        end
	end
--
--    https://fr.wikipedia.org/w/index.php?title=Module:Bac_%C3%A0_sable&diff=prev&oldid=213169114
	local toggle = 0
	local p1val = ""
	local p2val = ""
	local p3val = ""
	local p4val = ""
	local p5val = ""
--	local idx, parmval --supprimer les déclarations d'indice index
	for idx, parmval in ipairs(mesparams.args) do --paramètres non nommés
		toggle = toggle + 1
--		if toggle == 1 then p1val = parmval end
--		if toggle == 2 then p2val = parmval end
--		if toggle == 3 then p3val = parmval end
--		if toggle == 4 then p4val = parmval end
--		if toggle == 5 then p5val = parmval end	
       
        --		
		trim = mw.text.trim(parmval)
--        if (#trim ~= #parmval) then 
--        	nb_erreurs = nb_erreurs + 1 
--        	liste_erreurs = liste_erreurs .."<br>;paramètre "..idx.." prenant la valeur '"..parmval.."' : espace(s) avant arrière du paramètre"
--         else
         	clicbleu = clicbleu..parmval		
--        end
	end -- fin xtraction positionnels
    if (toggle > 5) then  
        nb_erreurs = nb_erreurs + 1 
--KO parmval null        liste_erreurs = liste_erreurs .."<br>;paramètre "..idx.." prenant la valeur '"..parmval.."' : paramètre en trop" 
    end

-- brouillon clicbleu = p1val..p2val..p3val..p4val..p5val.." valeur du toggle :"..toggle --Brouillon
--en attendant suivant toggle	_clicbleu mis en forme
-- 
	--
	--constitution de référence affichée en détail
	--
	local paf = ""
	local locaf = ""
	local psaf = ""
	local texteaf = ""
	local iden = ""
	local graf = ""
	for ind, parval in pairs(mesparams.args) do --tous les params
		if (type(ind) ~= 'number') then 
--            constitution liste_opt 
            if (ind == "p") or (ind == "pp" ) then paf = ", p. "..parval end
            if (ind == "loc") then locaf = ", "..parval end
            if (ind == "ps") then psaf = ", « "..parval.." »" end            
            if (ind == "texte") then texteaf = parval clicbleu=parval end 
            if (ind == "id") then iden = parval end 
            if (ind == "gr") or (ind == "group") or (ind == "groupe") then graf = parval end 
        end
	end
	if (toggle < 2) and (iden == "") then  
        	nb_erreurs = nb_erreurs + 1 
        	liste_erreurs = liste_erreurs .."<br>;manque paramètres, au moins un auteur+date sinon paramètres id et texte" end 
	if (iden ~= "" and texteaf == "") then 
		nb_erreurs = nb_erreurs + 1
		liste_erreurs = liste_erreurs .."<br>;paramètre id présent sans paramètre texte"
	end
	if (iden ~= "" and p1val ~= "") then 
		nb_erreurs = nb_erreurs + 1
		liste_erreurs = liste_erreurs .."<br>;paramètre id présent avec paramètre(s) auteur(s)+date"
	end
	liste_optaf = locaf..paf..psaf
	return nb_erreurs, liste_erreurs, liste_par_nom, liste_optaf, textaf, graf, iden, clicbleu
else
	
--zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz	
-- Illustration du passage des paramètres dans les modules Lua
-- utilisation des itérations sur ipairs() et pairs()
local b = {};
function b.imprime_les_parametres( frame )
    local args = frame.args

    -- Uniquement les paramètres non nommés (ou dont la clé est un indice entier séquentiel)
    local resultat = '; Paramètres séquentiels uniquement (entiers de 1 à N, sans aucun trou)\n';
    for rang, valeur in ipairs( args ) do
        resultat = resultat .. ': args[' .. rang .. '] = "' .. valeur .. '"\n';
    end

    resultat = resultat .. '; Tous les paramètres (dans un ordre arbitraire)\n';
    for clef, valeur in pairs( args ) do
        -- Noter que les deux variables `clef` et `valeur` sont locales à chaque boucle
        -- `for` qui les déclare implicitement : il est donc inutile de les déclarer avant
        -- car elles ne seraient pas utilisées et pas modifiées du tout, et leur valeur
        -- est inaccessible à la boucle suivante ou après la fin des boucles.
        if type( clef ) == 'number' then
            resultat = resultat .. ': args[' .. clef .. '] = "' .. valeur .. '"\n';
        else
            resultat = resultat .. ': args["' .. clef .. '"] = "' .. valeur .. '"\n';
        end
    end

    resultat = resultat .. '; Tous les paramètres (dans l’ordre numérique sinon lexicographique ASCII des clefs)\n';
    -- Forme une séquence contenant seulement les clefs dans un ordre quelconque en les
    -- mettant en valeur d'une autre clef, un numéro entier arbitraire mais séquentiel.
    local clefs = {}; -- séquence initialement vide
    for clef, _ in pairs( args ) do
        table.insert( clefs, clef );
    end
    -- Trie cette séquence.
    table.sort( clefs,
        function( a, b )
            --[[
            -- Pour pouvoir comparer les clés de types différents, on peut les convertir toutes
            -- en chaînes (sinon se produit l'erreur Lua: attempt to compare string with number).
            return tostring(a) < tostring(b);
            -- Noter qu'alors une clé comme '+' sera classée lexicographiquement avant la clé 1, et
            -- la clé 10 sera classée lexicographiquement avant la clé 2.
            --]]
            -- On peut aussi décider que lorsque les deux clés sont de types différents,
            -- on classe toute clé numérique avant celles d'un autre type
            -- if faut juste modifier cette fonction ainsi :
            if type(a) ~= type(b) then
                return type(a) == 'number';
            else
                return a < b;
            end
            
            -- Noter toutefois que Scribunto transmet tout paramètre dont le nom est numérique
            -- mais non entier tel que `{{#invoke|... |1.5=belge}}` sous forme de chaîne, qui
            -- sera donc triée ici lexicographiquement (comme clef="1.5" en Lua) et non
            -- pas numériquement (comme clef=1.5 en Lua) et la clef donc toujours listée après
            -- tous les autres paramètres dont le nom est n'importe quel entier même de valeur
            -- supérieur (le paramètre [20]="z" sera donc AVANT ["1.5"]="a").
            -- De même un paramètre dont le nom est entier mais inclut des décimales nulles
            -- sera transmis sous forme de chaîne.
            
            -- En revanche tout paramètre dont le nom est donné explicitement avec un signe `=`
            -- qu'il soit numérique ou pas, entier ou pas, avec des décimales nulles ou pas
            -- verra son nom chaine transmis sans aucun blanc au début ou à la fin, les autres
            -- blancs étant compressés en un espace unique; si Scribunto ne voit plus que des
            -- chiffres décimaux dans ce nom (éventuellement précédé d'un unique signe `-`)
            -- et si sa valeur est représentable en Lua sous forme d'un nombre entier Lua,
            -- il sera transmis en tant que nombre (qu'il forme une séquence continue ou pas);
            -- la valeur de ces paramètres verra ses blancs au début et à la fin aussi éliminés.
        end );
    -- Utilise les clés maintenant lues depuis la séquence triée
    for rang = 1, #clefs do
        local clef = clefs[rang];
        local valeur = args[clef];
        if type( clef ) == 'number' then
            resultat = resultat .. ': args[' .. clef .. '] = "' .. valeur .. '"\n';
        else
            resultat = resultat .. ': args["' .. clef .. '"] = "' .. valeur .. '"\n';
        end
    end

    return resultat;
end
return b;
	
	
	
	
end
end --fin _syntax	
--
-- Cette fonction est accès  p.harvap_ 
--
function p.harvap_ (frame) --Cette fonction fabrique un renvoi en bas de page
        --le frame renvoyé 'table' est la récup où il n'y a pas traitement indexé des params du modèle mais des params indiqués dans l'article 
        --le modèle (Template appelant le module) définit 
        --         s'il y a sfn défini à la main à l'aide de l'analyseur intégré
        --   ou bien (incompatibles)
        --         s'il y a génération auto du sfn depuis la copie de l'ouvrage par modif du code
        
	-- (les définitions des zones de travail à portée p sont ici 
	-- en fait ce qui suit est la définition des variables pour toutes fonctions appelées
	--  par leur chargement : x, y = _mafonc(params, x, y)
	--switch déconnecte / connecte parties du code de la fonc principale
	--tout ce qui commence par un B est une bidouille, est une restriction du cas pas encore développé

	---faire le trim	

 local switch = {"all", "rien", "lereste"} -- un array
 	local argsTemplate = frame:getParent().args --parms de l'article passés au modèle appelant ce module, pour l'instant auteur-date
	local nb_erreurs = 0 -- pour l'analyseur interne
    local renvoi = ""
    local trax = '' --trax est le dump pour bench
    local clicbleu = "auteur-date (défaut)" --brouillon  pour test initial 
	local Bauteur1 = argsTemplate[1]
 if (switch[3] == "all") then
 		renvoi = "essai switch "..switch[1].." "..switch[2]..">>>"
 		renvoi = renvoi.._Xist(Bauteur1)
 		
 			if (tostring(Bauteur1) ~= nil and #tostring(Bauteur1) > 0 ) then	renvoi=renvoi.. "plein" else renvoi=renvoi.. "inexistant"	end
 elseif (switch[3]) == "rien" then
 	renvoi = mw.hash.listAlgorithms()
 	
-- 	renvoi = mw.hash.hashValue( 'md5',    "brouillon  brouillon personnel analyse et prog  brouillon   ébauche de 'module:nom_module/Documentation'	  présentation générale	 	   on part de la base : harvard est un accès sous-produit de l'écriture dans l'article de l'ouvrage sourçant	    >obtention d'une génération de la référence à partir du traitement automatique en wikicode d'un duplicata de l'ouvrage	 	 >obtention d'une génération manuelle guidée modification-code respectant les normes établies par consensus 	    >obtention du résultat comme avec la modification-écran : aucune erreur de transcription technique ni de bugs 	 	¤rassemble les possibilités de note  harvsp  citations longues référencées  rappels courts	   ¤respect de l'automatisme de sfn pour constituer des sous-groupes dans les groupes déclarés par duplicata à contenu modifié	   ¤rassemble la possibilité de sfnp de mettre la date entre   , ajout de la formulation Av JC	  les paramètres du module respectent la convention d'affichage de {{m|sfn}}   et pas celle de stockage et affichage d {m|ouvrage}}  	   pour éviter les bugs, 'trim' aussi des positionnels  pas plus de 5 positionnels autorisés 	 	la syntaxe est 4 noms -sans prénoms-     diff. nom1-prénom1 pour duplicata ouvrage si 'génération' 	   										 diff. sur commentaire, alias, citation ... 	  auteur1.. / 	 	 1  positionnel  espaces avant-arrière enlevés       auteur2.. /  	 	 2  positionnel  espaces avant-arrière enlevés           auteur3.. / 	 	 3  positionnel  espaces avant-arrière enlevés       auteur4.. / 	 	 4  positionnel  espaces avant-arrière enlevés 	  date.. /  	   5, 4, 3, 2 ;dernier positionnel  espaces avant-arrière enlevés, forme JJ_MM_AAAA, AAAA défaut, voir 'dpar'  	  p.. /    >  voir doc sfn 	  loc.. /    >  voir doc sfn   	  ps.. /   > autorise l'indirection par création d'une ref quand nécessaire et forme classique  voir doc sfn  	  id.. /   > ne tolère pas les positionnels, obligation de 'texte'	  texte.. /   > utilisable pour se substituer à n'importe quel automatisme pour formuler le lien clicable	  gr.. /   > voir doc sfn 	  name.. /   > les valeurs qui suivent autorisent les mêmes possibilités que <ref>, {{m|note}} :	 	 :<nom-manuel>   > autorise les citations pas brèves respecte la formulation classique	    auto   > par défaut si pas de name	    compact   >  optimisation  utilise l'algorithme de compacter séparément chaque constituant-clé 	                  voir wikicode {{m|sfn2}} de la chaîne-identifiante rassemblée	  Tdpar  > utilise la formulation nombre négatif pour préfixe 	        > date dernier positionnel entre parenthèses façon {{m|sfnp}}	    Av JC    > 	   Av JC 	 >	 	    	pas d'alias pour simplifier l'analyseur 	 	 	  brouillon  brouillon  brouillon")

 	else
 	
 		----
 		---- A vérifier utilité de ce qui suit
 		----

	local cat_erreurs = "North Park" --récup prov

	local Liste_opt = ""
	local texteaf = "inutile, initialisation défaut"

    local paf = "pas p"
	local locaf = "pas loc"
	local pasaf = "pas ps"
	local texteaf = "pas texte"
	local idenaf = "pas iden"
	local graf = "pas gr"
	local iden = "pas de parms"
		---
		--- fin A
		---
--	 nb_erreurs, liste_erreurs, liste_par_nom, liste_optaf, textaf, graf, iden, clicbleu = _syntax (frame, nb_erreurs)


	local Tauteur1 = _Xist(argsTemplate[1])
    local Tauteur2 = _Xist(argsTemplate[2])
    local Tauteur3 = _Xist(argsTemplate[3])
    local Tauteur4 = _Xist(argsTemplate[4])
	local Tdate = _Xist(argsTemplate[5])
	local Tp = _Xist(argsTemplate['p'])
	local Tloc = _Xist(argsTemplate['loc'])
	local Tps = _Xist(argsTemplate['ps'])
	local Tid = _Xist(argsTemplate['id'])
	local Ttexte = _Xist(argsTemplate['texte'])
	local Tgr = _Xist(argsTemplate['gr'])
	local Tdpar = _Xist(argsTemplate['dpar'])
trax =Tauteur1.."/" 
    .. Tauteur2.."/"  
    .. Tauteur3.."/"  
    .. Tauteur4.."/"  
	.. Tdate.."/"  
	.. Tp.."/"  
	.. Tloc.."/"  
	.. Tps.."/"  
	.. Tid.."/"  
	.. Ttexte.."/" 
	.. Tgr.."/" 
	.. Tdpar
--	local argsModule = frame.args --parms passés à ce module SANS utilité? voir la routine
	
	List_opt = _Xist(Tp).._Xist(Tloc)..frame:preprocess(_Xist(Tps))
	
    local Biden = _Xist(Tauteur1).._Xist(Tdate)-- bidouille

     if (nb_erreurs ~= 0) then
        renvoi = _coulerr("nb erreurs :"..nb_erreurs.."<br> "..liste_erreurs.." <br>") --ok
      else    
      	Blicbleu = (_Xist(Tauteur1).."space A MODIFIER ".._Xist(Tdate)) -- EST renvoyé 
        local Bancre = frame:preprocess("[[#"..Biden.."{{!}}"..Blicbleu.."]]") --ok
        renvoi = renvoi..Liste_opt
        rname = "LE name"
--                                 {{ #tag:ref       |some text   |name=foo    |group=bar}}
--renvoi = frame:callParserFunction( '#tag', { 'ref', 'some text', name = 'foo', group = 'bar'} )
 	renvoi = frame:callParserFunction( '#tag', { 'ref', "[[#"..Biden.."{{!}}".."BlicYbleu".."]] "..List_opt.."<!--{{sfn|name="..iden.." group="..Tgr.."/}}-->" , name = iden, group = Tgr} )
      end
 
--   return frame:preprocess(renvoi) 

 		
 end--fin switch
	local liste_erreurs = "initLerreur" 
	local liste_par_nom = "initLnom"
	local liste_optaf = "initLoptaf"
 	local texteaf = "inittexte"
 	local graf = "initgr"
 	local iden = "initiden"
 	local clicbleu = "initclicbleu"
 	
		nb_erreurs, liste_erreurs, liste_par_nom, liste_optaf, textaf, graf, iden, clicbleu = _syntax (frame, nb_erreurs) 
 
    renvoi =nb_erreurs.."<br>".. liste_erreurs.."<br>"..liste_par_nom.."<br>"..liste_optaf.."<br>".. texteaf.."<br>".. graf.."<br>".. iden.."<br>".. clicbleu
     return (renvoi);
     

end --fin harvap_ 

return p