Module:Maintenance
Apparence
Ce module contient des programmes destinés à faire la maintenance des sous-pages d'une leçon. Toutes les maintenances pour un type de sous-page (chapitre, exercices, annexe, etc.) sont réunies en un seul programme pour économiser l'appel aux fonctions coûteuses.
Chaque programme vérifie que :
- La page possède un modèle Bas de page.
- L' idfaculté donnée dans le modèle en haut de page correspond à l'idfaculté du sommaire de la leçon.
- L' idfaculté du modèle Bas de page est la même que l' idfaculté du modèle en haut de page.
- La page est bien numérotée.
- Le lien précédent donné dans le modèle de haut de page pointe bien sur la page précédente prévue dans le sommaire.
- Le lien suivant donné dans le modèle de haut de page pointe bien sur la page suivante prévue dans le sommaire.
- Le lien précédent dans le modèle Bas de page est le même que le lien précédent du modèle en haut de page.
- Le lien suivant dans le modèle Bas de page est le même que le lien suivant du modèle en haut de page.
- Le niveau donné à la page correspond bien au niveau, prévu dans le sommaire, pour cette page.
- Les liens précédent et suivant sont correctement écrit.
- La page est bien déclarée dans le sommaire de la leçon.
- Les liens précédent et suivant sont là quand les pages précédentes et suivantes sont prévues dans le sommaire.
- Les enchaînements avec les pages précédentes et suivantes sont corrects, même indépendamment du sommaire d'une leçon (cours par exemple).
- La page a un avancement dans le sommaire.
Pour une utilisation correcte des programmes ci-dessous, voir la page Aide:Maintenance à l'aide du Lua.
Les pages où un défaut a été détecté sont automatiquement catégorisée dans une sous-catégorie de la Catégorie:Multi-maintenance des chapitres et de la Catégorie:Multi-maintenance des sous-pages.
local p = {}
local categorie = ""
function modele(texte,mod,item)
local repere = 1
local taille = 1
if texte ~= nil then
repere = mw.ustring.find(texte,mod,1,true) -- Recherche la position du modèle
if repere then -- Le modèle a été trouvé
if tonumber(item) then
repere = mw.ustring.find(texte,"| "..item,repere,true) -- Dans le modèle recherche l’article indexé par un nombre
if repere then repere = repere+2 end
else
repere = mw.ustring.find(texte,"| "..item,repere,true) -- Dans le modèle recherche l'article
end
if repere then
taille = mw.ustring.find(texte,'\
',repere,true) -- Puis recherche le premier retour chariot qui suit
texte = mw.ustring.sub(texte,repere,taille-1) -- L'article est isolé
taille = taille - repere -- Calcul de la taille de l'article
repere = mw.ustring.find(texte,"=",1,true) -- Repère le =
repere = repere+1 -- Et regarde ce qu’il y a après
while mw.ustring.sub(texte,repere,repere) == " " do -- Cherche le début du paramètre
repere = repere+1
end
while mw.ustring.sub(texte,taille,taille) == " " do -- Pour supprimer les éventuel espace en fin de ligne
taille = taille-1
end
texte = mw.ustring.sub(texte,repere,taille) -- isole le paramètre
else
texte = repere
end
else
texte = nil -- N'a pas trouvé le modèle
end
end
return texte
end
function grignotte(param,rep)
param = mw.ustring.sub(param,rep) -- Élimine le début de paramètre provenant du modèle d'appel
rep = 1
while (mw.ustring.sub(param,rep,rep) ~= "|") and (mw.ustring.sub(param,rep,rep) ~= "}") do -- Cherche la fin du nom de paramètre dans le sommaire de la leçon
rep = rep+1
end
if (mw.ustring.sub(param,rep,rep) == "}") then
categorie = categorie.."[[Catégorie:Pages sans avancement dans le sommaire]] "
end
param = mw.ustring.sub(param,1,rep - 1) --Isole le nom de la page prévu dans le sommaire pour le numéro donné dans le chapitre
rep = mw.ustring.find(param,"=",1,true) --Recherche un éventuel =
if rep then
param = mw.ustring.sub(param,rep+1) -- Prend ce qui est après égal
end
param = mw.text.trim(param)
return param
end
function ronge(param)
local rep = 1
local ex = true
rep = mw.ustring.find(param,"Sommaire",1,true)
if rep then
ex = false
end
rep = mw.ustring.find(param,"sommaire",1,true)
if rep then
ex = false
categorie = categorie.."[[Catégorie:Pages avec erreur dans un lien]] "
end
rep = 1
if ex then
param = mw.ustring.sub(param,6) -- Élimine le suffixe
while (mw.ustring.sub(param,rep,rep) ~= "/") and (mw.ustring.sub(param,rep,rep) ~= "|") and (mw.ustring.sub(param,rep,rep) ~= "]") do -- Cherche la fin du nom de la sous-page
rep = rep+1
end
if (mw.ustring.sub(param,rep,rep) == "]") then
categorie = categorie.."[[Catégorie:Pages avec erreur dans un lien]] "
end
return mw.ustring.sub(param,1,rep - 1) --Isole le nom de la sous-page
else
return "Sommaire"
end
end
function p.chapitre(frame)
local title = mw.title.getCurrentTitle()
if (title.namespace == 0 or title.namespace == 104) and mw.ustring.find(title.fullText, "/Version imprimable") == nil then -- La maintenance ne sera faite que dans l'espace principal et l'espace recherche
local model = frame:getParent()
local sommaire = title.basePageTitle
local texte_sommaire = sommaire.getContent(sommaire) -- Lit le sommaire
local nature
if texte_sommaire then
if mw.ustring.find(texte_sommaire,"{{Leçon") then
nature = "Leçon"
else
if mw.ustring.find(texte_sommaire,"{{Recherche") then
nature = "Recherche"
end
end
end
if nature then -- Maintenance liée au sommaire
local idfac = modele(texte_sommaire,nature,"idfaculté") -- Cherche l'idfaculté dans le modèle leçon ou recherche
if (idfac ~= nil) and (idfac ~= model.args["idfaculté"]) then
categorie = categorie.."[[Catégorie:Chapitres avec idfaculté différente du sommaire]] "
end
local numero = model.args["numéro"]
local numero_sommaire = modele(texte_sommaire,nature,numero) -- Cherche le numéro du sommaire dans le modèle leçon ou recherche
if numero_sommaire then
numero_sommaire = grignotte(numero_sommaire,5)
else
categorie = categorie.."[[Catégorie:Chapitres mal numérotés]] "
end
if (numero_sommaire ~= nil) and (numero_sommaire == title.subpageText) then -- teste si le numéro de chapitre correspond à celui prévu dans le sommaire
local precedent_sommaire = modele(texte_sommaire,nature,numero - 1)
if (precedent_sommaire ~= nil) and (precedent_sommaire ~= "") then -- Si le chapitre considéré est le premier,il n'y aura pas de chapitre précédent
precedent_sommaire = grignotte(precedent_sommaire,5)
if (model.args["précédent"] ~= "") and (model.args["précédent"] ~= nil) then
if precedent_sommaire ~= ronge(model.args["précédent"]) then
categorie = categorie.."[[Catégorie:Chapitres avec mauvais lien précédent]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec lien précédent absent]] "
end
end
local suivant_sommaire = modele(texte_sommaire,nature,numero + 1)
if (suivant_sommaire ~= nil) and (suivant_sommaire ~= "") then -- Si le chapitre est le dernier, pas de chapitre suivant
suivant_sommaire = grignotte(suivant_sommaire,5)
if (model.args["suivant"] ~= "") and (model.args["suivant"] ~= nil) then
if suivant_sommaire ~= ronge(model.args["suivant"]) then
categorie = categorie.."[[Catégorie:Chapitres avec mauvais lien suivant]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec lien suivant absent]] "
end
end
else
categorie = categorie.."[[Catégorie:Chapitres mal numérotés]] " --Numéro dans modèle chapitre différent celui du sommaire
end
local rep = mw.ustring.find(texte_sommaire,"| 1",1,true) -- Recherche du niveau, on se positionne au début des chapitre
local reper = rep -- sauvegarde nécessaire pour le else du prochain if
rep = mw.ustring.find(texte_sommaire,"|"..title.subpageText,rep,true) -- et on cherche le chapitre courant
if rep then
rep = rep + 1
local fin = mw.ustring.find(texte_sommaire,"}",rep,true)
local niveau_sommaire = mw.ustring.sub(texte_sommaire,rep,fin)
rep = mw.ustring.find(niveau_sommaire,"|",1,true)
if rep then -- Au cas ou n'y a pas d'avancement dans le sommaire, ni de niveau
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1) -- On supprime de début du paramètre
rep = mw.ustring.find(niveau_sommaire,"itre",1,true) -- on recherche un éventuel changement de titre dans le sommaire
if rep then -- Si c’est le cas, on saute le changement de titre
rep = mw.ustring.find(niveau_sommaire,"|",7,true)
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1)
end
rep = mw.ustring.find(niveau_sommaire,"|",1,true) -- On cherche à sauter l'avancement du chapitre
if rep then -- Le niveau du chapitre est après l'avancement
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1)
rep = mw.ustring.find(niveau_sommaire,"}",1,true)
if mw.ustring.sub(niveau_sommaire,rep-1,rep-1) == "V" then
niveau_sommaire = mw.ustring.sub(niveau_sommaire,1,rep-3) -- Le niveau est noté entre | et |V}}
else
niveau_sommaire = mw.ustring.sub(niveau_sommaire,1,rep-1) -- Le niveau est noté entre | et }}
end
else -- Si le niveau du chapitre n'est pas noté dans le modèle C, alors on prend le niveau de la leçon
niveau_sommaire = modele(texte_sommaire,nature,"niveau")
end
else --S'il n'y a pas d'avancement, on prend le niveau de la leçon
niveau_sommaire = modele(texte_sommaire,nature,"niveau")
end
if niveau_sommaire ~= model.args["niveau"] then -- On compare le niveau donné dans le sommaire avec le niveau du chapitre
categorie = categorie.."[[Catégorie:Chapitres avec niveau incorrect ]] "
end
else
reper = mw.ustring.find(texte_sommaire,"|1="..title.subpageText,reper,true)
if reper == nil then
categorie = categorie.."[[Catégorie:Chapitres non déclarés dans son sommaire]] "
end
end
end
local texte = title.getContent(title) -- Lit la page
local trouve_basdepage = mw.ustring.find(texte,"{{Bas de page",1,true) -- Recherche le modèle Bas de page
if trouve_basdepage then -- Pour effectuer les opérations de maintenance liée au pied de page
local bas_de_page = mw.ustring.sub(texte,trouve_basdepage) -- isole le modèle pour économiser du temps d'exécution
local idfaculte = modele(bas_de_page,"Bas de page","idfaculté") -- Lit les paramètres du modèle Bas de page
local precedent = modele(bas_de_page,"Bas de page","précédent")
local suivant = modele(bas_de_page,"Bas de page","suivant")
if trouve_basdepage < 300 then -- Pour repérer les chapitres quasiment vides
categorie = categorie.."[[Catégorie:Chapitres pauvres en contenu]] "
end
if idfaculte then
if model.args["idfaculté"] ~= idfaculte then --Teste si l'idfaculté du modèle chapitre est la même que celle du modèle bas de page
categorie = categorie.."[[Catégorie:Chapitres avec idfaculté différente dans pied de page]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec idfaculté absente dans pied de page]] "
end
if precedent then
if model.args["précédent"] ~= precedent then --Les liens précédents sont-ils les mêmes dans les modèles chapitre et bas de page
categorie = categorie.."[[Catégorie:Chapitres avec lien précédent différent dans pied de page]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec lien précédent absent dans pied de page]] "
end
if suivant then
if model.args["suivant"] ~= suivant then --Les liens suivant sont-ils les mêmes dans les modèles chapitre et bas de page
categorie = categorie.."[[Catégorie:Chapitres avec lien suivant différent dans pied de page]] "
end
end
else
categorie = categorie.."[[Catégorie:Chapitres sans pied de page]] " --Le modèle Bas de page n'a pas été trouvé
end
if (model.args["précédent"] ~= nil) and (model.args["précédent"] ~= "") and (ronge(model.args["précédent"]) ~= "") then
local precede
if title.namespace == 0 then
precede = mw.title.new(title.baseText.."/"..ronge(model.args["précédent"]))
else
precede = mw.title.new("Recherche:"..title.baseText.."/"..ronge(model.args["précédent"]))
end
if precede.exists then
local texte_precede = precede.getContent(precede)
local lesson_chap = mw.ustring.find(texte_precede,"{{Leçon",1,true)
local numero_precedent
if lesson_chap then
numero_precedent = modele(texte_precede,"Leçon","numéro")
else
numero_precedent = modele(texte_precede,"Chapitre","numéro")
end
if (numero_precedent ~= nil) and (tonumber(numero_precedent) ~= nil) then
if (numero_precedent ~= nil) and (model.args["numéro"] - numero_precedent ~= 1) then --Le chapitre courant ne suit pas le chapitre précédent
categorie = categorie.."[[Catégorie:Chapitres avec mauvais enchaînement vers le chapitre précédent]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec erreur dans le chapitre précédent]] "
end
end
end
if (model.args["suivant"] ~= nil) and (model.args["suivant"] ~= "") and (ronge(model.args["suivant"]) ~= "") then
local suit
if title.namespace == 0 then
suit = mw.title.new(title.baseText.."/"..ronge(model.args["suivant"]))
else
suit = mw.title.new("Recherche:"..title.baseText.."/"..ronge(model.args["suivant"]))
end
if suit.exists then
local texte_suit = suit.getContent(suit)
local lesson_chap = mw.ustring.find(texte_suit,"{{Leçon",1,true)
local numero_suivant
if lesson_chap then
numero_suivant = modele(texte_suit,"Leçon","numéro")
else
numero_suivant = modele(texte_suit,"Chapitre","numéro")
end
if (numero_suivant ~= nil) and (tonumber(numero_suivant) ~= nil) then
if (numero_suivant ~= nil) and (numero_suivant - model.args["numéro"] ~= 1) then -- Le chapitre suivant ne suit pas le chapitre courant
categorie = categorie.."[[Catégorie:Chapitres avec mauvais enchaînement vers le chapitre suivant]] "
end
else
categorie = categorie.."[[Catégorie:Chapitres avec erreur dans le chapitre suivant]] "
end
end
end
return categorie
end
end
function p.souspages(frame)
local title = mw.title.getCurrentTitle()
if title.namespace == 0 or title.namespace == 104 then -- La maintenance ne sera faite que dans l'espace principal et l'espace recherche
local model = frame:getParent()
local sommaire = title.baseText
local rep = 1
local ici = 1
repeat -- Pour chercher le dernier "/"
rep = ici
ici = mw.ustring.find(sommaire,"/",rep+1,true)
until ici == nil
local type_page = mw.ustring.sub(sommaire,rep+1) -- Mémorise de type de sous-page : Exercices, annexe etc.
sommaire = mw.ustring.sub(sommaire,1,rep-1) -- Mémorise le nom de la page du sommaire
sommaire = mw.title.makeTitle(title.namespace,sommaire)
local texte_sommaire = sommaire.getContent(sommaire) -- Lit le sommaire
local nature
if texte_sommaire then
if mw.ustring.find(texte_sommaire,"{{Leçon") then
nature = "Leçon"
else
if mw.ustring.find(texte_sommaire,"{{Recherche") then
nature = "Recherche"
end
end
end
if nature then -- Maintenance liée au sommaire
local idfac = modele(texte_sommaire,nature,"idfaculté")
if (idfac ~= nil) and (idfac ~= model.args["idfaculté"]) then
categorie = categorie.."[[Catégorie:Pages avec idfaculté différente du sommaire]] "
end
local numero = model.args["numéro"]
local numeroc
local numerop
local numeros
if type_page == "Exercices" then
numeroc = "exo"..numero
numerop = "exo"..numero-1
numeros = "exo"..numero+1
elseif type_page == "Annexe" then
numeroc = "annexe"..numero
numerop = "annexe"..numero-1
numeros = "annexe"..numero+1
elseif type_page == "Quiz" then
numeroc = "quiz"..numero
numerop = "quiz"..numero-1
numeros = "quiz"..numero+1
elseif type_page == "Travail pratique" then
numeroc = "tp"..numero
numerop = "tp"..numero-1
numeros = "tp"..numero+1
end
local numero_sommaire = modele(texte_sommaire,nature,numeroc)
rep = 7
if type_page == "Quiz" or type_page == "Travail pratique" then
rep = 6
end
if numero_sommaire then
numero_sommaire = grignotte(numero_sommaire,rep)
else
categorie = categorie.."[[Catégorie:Pages mal numérotées]] "
end
if (numero_sommaire ~= nil) and (numero_sommaire == title.subpageText) then -- teste si le numéro de la page correspond à celui prévu dans le sommaire
local precedent_sommaire = modele(texte_sommaire,nature,numerop)
if (precedent_sommaire ~= nil) and (precedent_sommaire ~= "") then -- Si la page considérée est la premiere,il n'y aura pas de page précédente
precedent_sommaire = grignotte(precedent_sommaire,rep)
if (model.args["précédent"] ~= "") and (model.args["précédent"] ~= nil) then
if precedent_sommaire ~= ronge(model.args["précédent"]) then
categorie = categorie.."[[Catégorie:Pages avec mauvais lien précédent]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec lien précédent absent]] "
end
end
local suivant_sommaire = modele(texte_sommaire,nature,numeros)
if (suivant_sommaire ~= nil) and (suivant_sommaire ~= "") then -- Si la pages est la dernière, pas de pages suivantes
suivant_sommaire = grignotte(suivant_sommaire,rep)
if (model.args["suivant"] ~= "") and (model.args["suivant"] ~= nil) then
if suivant_sommaire ~= ronge(model.args["suivant"]) then
categorie = categorie.."[[Catégorie:Pages avec mauvais lien suivant]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec lien suivant absent]] "
end
end
else
categorie = categorie.."[[Catégorie:Pages mal numérotées]] " --Numéro dans le modèle différent de celui du sommaire
end
local rep = mw.ustring.find(texte_sommaire,"| "..numeroc,1,true) -- Recherche du niveau, on se positionne au début de la page concernées
local reper = rep -- sauvegarde nécessaire pour le else du prochain if
rep = mw.ustring.find(texte_sommaire,"|"..title.subpageText,rep,true) -- et on cherche la page courante
if rep then
rep = rep + 1
local fin = mw.ustring.find(texte_sommaire,"}",rep,true)
local niveau_sommaire = mw.ustring.sub(texte_sommaire,rep,fin)
rep = mw.ustring.find(niveau_sommaire,"|",1,true)
if rep then -- Au cas ou n'y a pas d'avancement dans le sommaire, ni de niveau
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1) -- On supprime de début du paramètre
rep = mw.ustring.find(niveau_sommaire,"itre",1,true) -- on recherche un éventuel changement de titre dans le sommaire
if rep then -- Si c’est le cas, on saute le changement de titre
rep = mw.ustring.find(niveau_sommaire,"|",7,true)
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1)
end
rep = mw.ustring.find(niveau_sommaire,"|",1,true) -- On cherche à sauter l'avancement de la page
if rep then -- Le niveau de la page est après l'avancement
niveau_sommaire = mw.ustring.sub(niveau_sommaire,rep+1)
rep = mw.ustring.find(niveau_sommaire,"}",1,true)
if mw.ustring.sub(niveau_sommaire,rep-1,rep-1) == "V" then
niveau_sommaire = mw.ustring.sub(niveau_sommaire,1,rep-3) -- Le niveau est noté entre | et |V}}
else
niveau_sommaire = mw.ustring.sub(niveau_sommaire,1,rep-1) -- Le niveau est noté entre | et }}
end
else -- Si le niveau de la page n'est pas noté dans le modèle, alors on prend le niveau de la leçon
niveau_sommaire = modele(texte_sommaire,nature,"niveau")
end
else --S'il n'y a pas d'avancement, on prend le niveau de la leçon
niveau_sommaire = modele(texte_sommaire,nature,"niveau")
end
if niveau_sommaire ~= model.args["niveau"] then -- On compare le niveau donné dans le sommaire avec le niveau de la page
categorie = categorie.."[[Catégorie:Pages avec niveau incorrect ]] "
end
else
reper = mw.ustring.find(texte_sommaire,"|1="..title.subpageText,reper,true)
if reper == nil then
categorie = categorie.."[[Catégorie:Pages non déclarées dans le sommaire]] "
end
end
end
local texte = title.getContent(title) -- Lit la page
local trouve_basdepage = mw.ustring.find(texte,"{{Bas de page",1,true) -- Recherche le modèle Bas de page
if trouve_basdepage then -- Pour effectuer les opérations de maintenance liée au pied de page
local bas_de_page = mw.ustring.sub(texte,trouve_basdepage) -- isole le modèle pour économiser du temps d'exécution
local idfaculte = modele(bas_de_page,"Bas de page","idfaculté") -- Lit les paramètres du modèle Bas de page
local precedent = modele(bas_de_page,"Bas de page","précédent")
local suivant = modele(bas_de_page,"Bas de page","suivant")
if trouve_basdepage < 300 then -- Pour repérer les pages quasiment vides
categorie = categorie.."[[Catégorie:Pages pauvres en contenu]] "
end
if idfaculte then
if model.args["idfaculté"] ~= idfaculte then --Teste si l'idfaculté du modèle haut de page est la même que celle du modèle bas de page
categorie = categorie.."[[Catégorie:Pages avec idfaculté différente dans pied de page]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec idfaculté absente dans pied de page]] "
end
if precedent then
if model.args["précédent"] ~= precedent then --Les liens précédents sont-ils les mêmes dans les modèles chapitre et bas de page
categorie = categorie.."[[Catégorie:Pages avec lien précédent différent dans pied de page]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec lien précédent absent dans pied de page]] "
end
if suivant then
if model.args["suivant"] ~= suivant then --Les liens suivant sont-ils les mêmes dans les modèles haut et bas de page
categorie = categorie.."[[Catégorie:Pages avec lien suivant différent dans pied de page]] "
end
end
else
categorie = categorie.."[[Catégorie:Pages sans pied de page]] " --Le modèle Bas de page n'a pas été trouvé
end
if type_page == "Exercices" then
type_page = "Exercice"
end
if (model.args["précédent"] ~= nil) and (model.args["précédent"] ~= "") and (ronge(model.args["précédent"]) ~= "") then
local precede
if title.namespace == 0 then
precede = mw.title.new(title.baseText.."/"..ronge(model.args["précédent"]))
else
precede = mw.title.new("Recherche:"..title.baseText.."/"..ronge(model.args["précédent"]))
end
if precede.exists then
local texte_precede = precede.getContent(precede)
local numero_precedent = modele(texte_precede,type_page,"numéro")
if (numero_precedent ~= nil) and (tonumber(numero_precedent) ~= nil) then
if (numero_precedent ~= nil) and (model.args["numéro"] - numero_precedent ~= 1) then --La page courante ne suit pas la page précédent
categorie = categorie.."[[Catégorie:Pages avec mauvais enchaînement vers la page précédente]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec erreur dans la page précédente]] "
end
end
end
if (model.args["suivant"] ~= nil) and (model.args["suivant"] ~= "") and (ronge(model.args["suivant"]) ~= "") then
local suit
if title.namespace == 0 then
suit = mw.title.new(title.baseText.."/"..ronge(model.args["suivant"]))
else
suit = mw.title.new("Recherche:"..title.baseText.."/"..ronge(model.args["suivant"]))
end
if suit.exists then
local texte_suit = suit.getContent(suit)
local numero_suivant = modele(texte_suit,type_page,"numéro")
if (numero_suivant ~= nil) and (tonumber(numero_suivant) ~= nil) then
if (numero_suivant ~= nil) and (numero_suivant - model.args["numéro"] ~= 1) then -- La page suivante ne suit pas la page courante
categorie = categorie.."[[Catégorie:Pages avec mauvais enchaînement vers la page suivante]] "
end
else
categorie = categorie.."[[Catégorie:Pages avec erreur dans la page suivante]] "
end
end
end
return categorie
end
end
return p