Module:RbpNote
Apparence
La documentation pour ce module peut être créée à Module:RbpNote/doc
--[[ Version: 1/06/2018 à usage restreint à l'"existant"
sur modèles à parseur (multiples),
vérification du paramétrage avec alias,
génère une liste d'erreur à imprimer,
catégorie cachée optionnelle,
option analyse de syntaxe organique par valeur / contenu d'adresse (grille écran valeurs refusées; valeur(s) obligatoire(s))
option analyse de syntaxe fonctionnelle par fonction d'alias / paramètre (grille filtre des doublons fonctionnels) et dépendance simple d'un paramètre à un autre à respecter
impression dans et hors corps de rendu, selon implantation.
utilise (insérées dans le modèle en littéraux) les tables config du module, alias dans article, valeur modélisées
]]
local p = {}
-->
local function _tablov(tablovT, tablovname)
local Tname = tablovname
local tflag = ''
local renvoi = "<br><br><br>>>>>dump récapitulatif de la TABLE: "..Tname.."<br>"
local T = tablovT
local tak = ''
local tav = ''
for tak, tav in pairs(T) do
if (tav ~= nil) then
tflag = true
renvoi = renvoi.."<br> tablovkey: "..tak.." tablovvalue:"..tav..""
else
tflag = false
renvoi = "pas d'éléments"
end
end
return tflag, renvoi
end --fin _tablov
-->
-->
local function _xist(objet) --> transforme localement un objet composite "qui n'existe pas" nil & '' (taille 0) en valeur false d'objet pour Rbp 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 _validation_ecran(articleargs, choix, ecran, parame, balisesargs, modelid, nb_erreurs, liste_err, RV )
--m RV=RV.."<br>==== début écran avec valeur reçue: "..ecran.." paramètre: "..parame
local article_args = articleargs
local option = choix
local modeleid = modelid
local balises_args = balisesargs
local parametre = parame
local tableecran = ecran
local table_ecran = {}
table_ecran = mw.text.split( tableecran, balises_args[2] )
local wapparie = 0 -- régime obligatoire, inf à 1 égale message d'erreur
for ec, ep in pairs(table_ecran) do --[[
>2ABCDE fouille écran pour valeur paramètre-article impérative/refusée]]
--m RV=RV.."<br>===== fouille écran (ec): "..ec.." valeur étudiée (ep): "..ep.." pour: "..parametre
--m if _xist(article_args[parametre]) then RV=RV.."<br> parametre à valeur dans l'article: "..article_args[parametre] else RV=RV.."<br>parametre VIDE " end
if option == "refus" and article_args[parametre] == ep and ec > 1 then
--2ABCDEF en refus 1 item
--m RV=RV.."<br>====== valeur étudiée en refus trouvée dans article (ep): "..ep.." pour: "..parametre.."<br>==== valeur "..article_args[parametre].." en erreur par valeur refusée !"
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..parametre.." » a une valeur non admise: « "..article_args[parametre].." ». "..table_ecran[1].."<br>"
break
end -- fin 2ABCDEF étude du refus
if option == "obligatoire" and article_args[parametre] == ep then
--2ABCDEG étude ensemble valeurs imposées si 1 choisi
--m RV=RV.."<br>====== valeur étudiée obligatoire trouvée dans article (ep): "..ep.." pour paramètre transmis: "..parametre
--m RV=RV.."<br>====== valeur "..article_args[parametre].."acceptée par valeur obligatoire !"
wapparie = wapparie + 1
break
--m else RV=RV.."<br>====== cette valeur du modèle (ep): "..ep.." n'est pas choisie pour faire l'article avec le paramètre considéré: "..parametre.." "
end -- fin 2ABCDEG étude ensemble valeurs imposées
end -- fin >2ABCDE fouille écran (impératif/refus)
if wapparie < 1 and option == "obligatoire" and _xist(article_args[parametre]) then -- clause pas respectée sur impératif
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..parametre.." » a une valeur non admise: « "..article_args[parametre].." ». "..table_ecran[1].."<br>"
end
return nb_erreurs, liste_err, RV
end -- fin _ecran_valeur-non-admise
-->
-->
local function _traitement_liste_alias(articleargs, tablealipar, parali, balisesargs, modelid, nb_erreurs, liste_err, RV)
local article_args = articleargs
local table_alipar = tablealipar
local parametre = string.gsub( parali, '_P:', '', 1 )
local modeleid = modelid
local balises_args = balisesargs
local aliparnom = ''
local nb_alias = 0
for tk, tv in pairs (table_alipar) do --[[
>2ABC fouille table alias vérifier les doublons]]
--m RV=RV.."<br>--dans une vérif des doublons alias (et écran) tk: "..tk..", tv de la fouille: >"..tv.."<"
--m RV=RV.."<br>--+ parametre défini: "..parametre--w.." (et ecran: "..ecran..")"
if (_xist(article_args[tv])) then
-- 2ABCE test vérif doublon alias
--m RV=RV.."<br>---d dans article testé existe paramètre: "..tv.." à valeur dans l'article: "..article_args[tv]
nb_alias = nb_alias + 1
if (nb_alias > 1) then
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.." Erreur. Modèle:"..modeleid..". Définition de paramètre en double, doublon: « "..aliparnom.." » de valeur: « "..article_args[aliparnom].." » et « "..tv.." » de valeur: « "..article_args[tv].." »,<br> "
end
aliparnom = tv
--m RV=RV.."<br>---d nombre de valeurs dans l'article: "..nb_alias.." avec: "..tv
end -- fin 2ABCE test vérif doublon alias
-->partie dissociée écran pour des erreurs de saisie
--m RV=RV.."<br>--e"
if string.find(tv,'_v') == 1 then
-- 2ABCD procédure ecran
--m RV=RV.."<br>== écran: >"..tv.."<"
--m RV=RV.."<br>==> début procédure refus obligatoire (aliparnom) "..aliparnom
local option = ''
local ecran = ' '
if string.find(tv,'_vrefus:') == 1 then
option = "refus"
ecran = string.gsub( tv, '_vrefus:', '', 1 )
elseif string.find(tv,'_vobligatoire:') == 1 then
option = "obligatoire"
ecran = string.gsub( tv, '_vobligatoire:', '', 1 )
else liste_err=liste_err.."<br>!!!<br>!!!<br>ERREUR: MODELE MAL PROGRAMMÉ POUR LA GRILLE DES VALEURS EN « refus/obligatoire » DES ALIAS. <br>!!!<br>!!!<br>"
end
--m if string.find( ecran, aliparnom ) == 1 and article_args[aliparnom] ~= nil then RV=RV.."<br>===> déclenche option: "..option
nb_erreurs, liste_err, RV = _validation_ecran(article_args, option, ecran, aliparnom, balises_args, modeleid, nb_erreurs, liste_err, RV)
--m end
end -- fin 2ABCD partie écran procédure écran
end -- fin >2ABC fouille table alias vérifier les doublons et valeurs saisies
return nb_erreurs, liste_err, RV
end -- fin _traitement_liste_alias
-->
-->
local function _chargement_alias_parametre_doublon_ecran(modeleargs, articleargs, balisesargs, modelid, nb_erreurs, liste_err, RV)
--les alias partie 2 contiennent la séquence ;_vrefus:message-erreur-de-saisie-affiché,valeur1-refusée,valeur2...;_vobligatoire:message-erreur-de-saisie-de-valeur-affiché,valeur1-parmi-les-obligatoires,valeur2...
local modeleid = modelid
local balises_args = balisesargs
local modele_args = modeleargs
local article_args = articleargs
local modelindex = 0
for mc , mp in pairs (modele_args) do --[[
>2A fouille modèle pour alias-paramètres avec écran]]
modelindex = modelindex + 1
--m RV=RV.."<br> fouille MODELE: "..modeleid.." pour alias-paramètres index: "..modelindex.." mc: "..mc.." mp: "..mp
local table_alipar = {}
if string.find(mc, '_P:') == 1 then
-- 2AB procédure des alias-paramètres écran
--m RV=RV.."<br>-dans une définition d' alias-paramètre écran"
table_alipar = mw.text.split( mp, balises_args[1] )
-->partie exploitation liste alias
nb_erreurs, liste_err, RV = _traitement_liste_alias(article_args, table_alipar, mc, balises_args, modeleid, nb_erreurs, liste_err, RV)
end -- fin 2AB procédure alias-paramètre
end -- fin >2A fouille modèle pour alias-paramètres et écran
return nb_erreurs, liste_err, RV
end -- fin 2A (partie 2) _chargement_alias_parametre_doublon_ecran
-->
-->
-->partie 1
local function _validation_filtre_liaison(articleargs, tableparams, paramf, balisesargs, modelid, nb_erreurs, liste_err, RV )
--les paramètres partie 1 contiennent la séquence ;_filtre:paramètre-concerné,message-de-filtrage-affiché,autre-paramètre-prééminent,...,dernier-paramètre-normé-sur-édition-visuelle
local article_args = articleargs
local modeleid = modelid
local balises_args = balisesargs
local parametre = paramf
local table_params = tableparams
--m RV=RV.."<br> ¤ DEBUT filtrage de parametre article: "..parametre
local fflag = false
for fc, fp in pairs(table_params) do --[[
>1ABCD selection filtre - selection liaison]]
--m RV=RV.."<br> ¤¤ dans filtrage de parametre article: "..parametre..", recherche des filtres pour lui sur: "..fp
local selecte = fp
local table_selecte = mw.text.split(selecte,balises_args[2])
--> filtre
if table_selecte[1] == ("_filtre:"..parametre ) then
--1ABCDE ventilation des éléments du filtre
--m RV=RV.."<br> ¤¤* paramètre article sélectionné: "..parametre.." pour liste: "..fp.." <<<<<filtre<<<<<"
for sc, sp in pairs(table_selecte) do --[[
>1ABCDEFG fouille sélection prééminent]]
--m RV=RV.."<br> ¤¤** fouille de table_selecte (sc):"..sc..", valeur (sp): "..sp
if sc > 2 then
if _xist(article_args[sp]) then
--m RV=RV.."<br> ¤¤** un paramètre d'article plus select nom:"..sp..", valeur: "..article_args[sp].." EXISTE pour le paramètre donné: "..parametre
if nb_erreurs < 1 then nb_erreurs = 1 end
liste_err = liste_err.."Avertissement! Modèle:"..modeleid..". Le paramètre « "..sp.." », valeur: « "..article_args[sp].." » est en double avec le paramètre « "..parametre..", » de valeur: « "..article_args[parametre].." » , ce dernier est à supprimer. "..table_selecte[2].."<br>"
end
end
end -- fin >1ABCDEFG
--m else
--m RV=RV.."<br> ¤¤¤ paramètre article pas sélectionné: "..parametre.." pour liste, la valeur (fp): "..fp.." le string gsub (fp): "..string.gsub( fp, '_filtre:', '', 1 )
end -- fin 1ABCDE ventilation des éléments du filtre
-->liaison
if table_selecte[1] == ("_liaison:"..parametre ) then
--1ABCDH ventilation des éléments de la liaison hiérarchique
--m RV=RV.."<br> ¤¤# paramètre article sélectionné: "..parametre.." à valeur: "..article_args[parametre].." pour liste: "..fp.." <<<<<liaison<<<<<"
for sc, sp in pairs(table_selecte) do --[[
>1ABCDHI fouille sélection dépendance]]
--m RV=RV.."<br> ¤¤## fouille de table_selecte (sc):"..sc..", valeur (sp): "..sp
if not(_xist(article_args[sp])) and sc > 2 then
--m RV=RV.."<br> ¤¤### EXISTE PAS paramètre PERE chargé (sp):"..sp.." pour le paramètre donné: "..parametre
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.."Erreur. Modèle:"..modeleid..". Le paramètre « "..sp.." » n'existe pas, le paramètre « "..parametre.." », de valeur: « "..article_args[parametre].." » , en est dépendant. "..table_selecte[2].."<br>"
--m else RV=RV.."<br> ¤¤### EXISTE ou l < 2 !!!!!!!! paramètre PERE chargé (article_args[sp]) ou 2 premiers: "
end
end -- fin >1ABCDHI
--m else RV=RV.."<br> ¤¤¤ paramètre article pas sélectionné: "..parametre.." pour liste, la valeur (fp): "..fp.." le string gsub liaison (fp): "..string.gsub( fp, '_liaison:', '', 1 )
end -- fin 1ABCDH liaison
end -- fin >1ABCD selection filtre selection liaison
return nb_erreurs, liste_err, RV
end -- fin _validation_filtre_liaison
-->
-->
local function _traitement_liste_parametres(articleargs,tableparams, paramp, balisesargs, modelid, pvalide, nb_erreurs, liste_err, RV)
local article_args = articleargs
local modeleid = modelid
local balises_args = balisesargs
local parametre = paramp
local table_params = tableparams
local pvalide = false
for tk, tv in pairs(table_params) do --[[
>1AB fouille table-parametres déclarés pour appariement parametre article]]
--m RV=RV.."<br>°° fouille des paramètres déclarés, tableindex: "..tk..", paramètre déclaré: >"..tv.."< face au paramètre article: >"..parametre.."<"
--m if string.find(tv,parametre,1) == 1 then RV=RV.."<br>!!!!!!!!!!!!!oui" else RV=RV.." (NON PAS IDENTIQUE)" end
if (parametre == tv) then
-- 1ABC validation du paramètre article
pvalide = true
--m RV=RV.."<br>°°° paramètre article valide: "..parametre..", idem valeur modèle-table: "..tv.." "
------> ;_filtre:filtré,message-de-filtrage-affiché,auteur,auteur1,nom1,prénom1 (suivants préférés au premier si écriture doublon fonctionnel)
nb_erreurs, liste_err, RV = _validation_filtre_liaison(article_args, table_params, parametre, balisesargs, modelid, nb_erreurs, liste_err, RV)
-- break -- retour, paramètre traité
else -- 1ABC RV=RV.."<br>°°° paramètre article non valide: "..parametre..", valeur: "..tv
end -- fin 1ABC procédure de validation parametre article
end -- fin >1AB fouille modèle paramètres trouver déclaré appareillé au parametre article
if not(pvalide) then
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.." Erreur. Modèle:"..modeleid..". Paramètre non valide « "..parametre.." » valeur: « "..article_args[parametre].." »,<br> "
end
---->
return nb_erreurs, liste_err, RV
end --fin _traitement_liste_parametres
-->
-->
local function _validation_parametres_article_filtre_liaison(modeleargs, articleargs, balisesargs, modelid, double_barre, nb_erreurs, liste_err, RV)
local modele_args = modeleargs
local article_args = articleargs
local modeleid = modelid
local balises_args = balisesargs
--> modele_args
local mc = '' -- pairs clef
local mp = '' -- pairs paramètre
--> article_args
local ac = '' -- pairs clef
local ap = '' -- pairs paramètre
local parametres = modele_args["_parametres"] -- ensemble des paramètres valides
--m RV = RV.."<br> PARAMETRES ensemble: "..parametres
table_params = mw.text.split( parametres, balises_args[1] )
local i = 0
for ac,ap in pairs(article_args) do --[[
>1A fouille validation des paramètres article]]
i = i + 1
--m RV=RV.."<br>°validation paramètres article, index: "..i.."; ac: "..ac..", ap: "..ap.." double_barre: >"..double_barre.."<"
if (modele_args[i] == nil and ap == '' and double_barre == 'refus') then --> ||
nb_erreurs = nb_erreurs + 1
liste_err = liste_err.."[[:Catégorie:DOUBLE BARRE]]".." Erreur. Modèle:"..modeleid..". Définition de paramètre non-nommé à valeur absente par || ou |}} ,<br> "
end -- fin test DOUBLE BARRE
local parametre = tostring(ac)
nb_erreurs, liste_err, RV = _traitement_liste_parametres(article_args, table_params, parametre, balises_args, modeleid, pvalide, nb_erreurs, liste_err, RV)
end -- fin >B fouille validation paramètres article
return nb_erreurs, liste_err, RV
end -- fin 1A ( partie 1) _validation_parametres-article_filtre
-->
-->
-->
function p.verifier_parametres_ (frame)
local RV = "TRACE:VVVV<br>" -- y compris les fonctions
local referr = '' -- résultat final renvoyé
local modeleid = " "
local double_barre = " "
local caterr = ''
local nb_erreurs = 0 -- pour les fonctions
local liste_err = '' -- pour les fonctions
-->
local modele_args = frame.args -- entrée des fonctions
local article_args = frame:getParent().args -- entrée des fonctions
-->
local configliste = modele_args["__configuration"]
local config_args = {}
config_args = mw.text.split(configliste,"¿")
local baliseslist = ''
local balises_args = {}
---->entrer la configuration des balises pour le décodage des tables
---->du modèle sans avoir à recompiler ce module général
baliseslist = config_args[1]
balises_args = mw.text.split(baliseslist,"÷")
--m RV=RV.."<br> baliseslist:>"..baliseslist.."<"
--m RV=RV.."<br> balise1:>"..balises_args[1].."<" --profondeur 1 table
--m RV=RV.."<br> balise2:>"..balises_args[2].."<" --profondeur 2 sous-table
--m RV=RV.."<br> balise1:>"..balises_args[3].."<" --ne sert pas actuellement
for cc, cp in pairs(config_args) do
--m RV=RV.."<br> cc: "..cc.." cp: >"..cp.."<"
if string.find(cp, '__modèle≈',1) == 1 then modeleid = string.gsub( cp, '__modèle≈', '', 1 ) end
if string.find(cp, '__double_barre≈',1) == 1 then double_barre = string.gsub( cp, '__double_barre≈', '', 1 ) end
if string.find(cp, '__catégorie≈',1) == 1 then caterr = string.gsub( cp, '__catégorie≈', '', 1 ) end
end
--m if _xist(modeleid) then RV=RV.."<br> existe: "..modeleid else RV=RV.."<br> modelid VIDE " end
--m if _xist(double_barre) then RV=RV.."<br> existe: "..double_barre else RV=RV.."<br> double_barre VIDE " end
--m if _xist(caterr) then RV=RV.."<br> existe: "..caterr else RV=RV.."<br> caterr VIDE " end
--> partie 1
nb_erreurs, liste_err, RV = _validation_parametres_article_filtre_liaison(modele_args, article_args, balises_args, modeleid, double_barre, nb_erreurs, liste_err, RV)
--> partie 2
nb_erreurs, liste_err, RV = _chargement_alias_parametre_doublon_ecran(modele_args, article_args, balises_args, modeleid, nb_erreurs, liste_err, RV)
--> partie 3 renvoi à modèle
if (nb_erreurs > 0) then -->
referr = caterr.._coulerr("<br> nb erreurs: "..nb_erreurs.."<br>"..liste_err)
end
return referr --..RV-- fin liste des erreurs avec catégorisation
end --fin verifier_parametres_
-->
return p