Module:RbpNote
Aller à la navigation
Aller à la recherche
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