Module:Maintenance

Une page de Wikiversité, la communauté pédagogique libre.

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 derniere, 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