Module:Harvapbrouillon
Apparence
La documentation de ce module est générée par le modèle {{Documentation module}}.
Les éditeurs peuvent travailler dans le bac à sable (créer).
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
----
---- brouillon perso
----
-- Illustration du passage des paramètres dans les modules Lua
-- utilisation des itérations sur ipairs() et pairs()
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
--
--
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 == "xcute") 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 -- A tous les params positionnels et nommés
end--fin for A
end--fin switch
end--fin _syntax
--
--
function p.harvap_( frame )
local args = frame:getParent().args
local renvoi = "initrenvoi+"
---- importation de la banane
---- importation de la banane
---- importation de la banane
-- 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, renvoi;
---- fin importation de la banane
---- fin importation de la banane
---- fin importation de la banane
end
return p;