<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://rishon.rcorp.fr/index.php?action=history&amp;feed=atom&amp;title=Module%3ANoble</id>
	<title>Module:Noble - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://rishon.rcorp.fr/index.php?action=history&amp;feed=atom&amp;title=Module%3ANoble"/>
	<link rel="alternate" type="text/html" href="https://rishon.rcorp.fr/index.php?title=Module:Noble&amp;action=history"/>
	<updated>2026-09-09T15:33:43Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://rishon.rcorp.fr/index.php?title=Module:Noble&amp;diff=435&amp;oldid=prev</id>
		<title>RubnK : 1 version importée</title>
		<link rel="alternate" type="text/html" href="https://rishon.rcorp.fr/index.php?title=Module:Noble&amp;diff=435&amp;oldid=prev"/>
		<updated>2025-06-26T12:20:33Z</updated>

		<summary type="html">&lt;p&gt;1 version importée&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;fr&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Version précédente&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version du 26 juin 2025 à 14:20&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fr&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(Aucune différence)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>RubnK</name></author>
	</entry>
	<entry>
		<id>https://rishon.rcorp.fr/index.php?title=Module:Noble&amp;diff=434&amp;oldid=prev</id>
		<title>wp&gt;Od1n : utilisation d&#039;un &lt;nowiki /&gt; (avec callParserFunction(), qui appelle {{#tag:nowiki}})&amp;nbsp;; probablement moins rapide, mais je pense que c&#039;est largement préférable de ne pas alourdir &quot;inutilement&quot; le markup généré&amp;nbsp;; après essais, il est suffisant de mettre un &lt;nowiki /&gt; au début</title>
		<link rel="alternate" type="text/html" href="https://rishon.rcorp.fr/index.php?title=Module:Noble&amp;diff=434&amp;oldid=prev"/>
		<updated>2024-08-18T20:33:38Z</updated>

		<summary type="html">&lt;p&gt;utilisation d&amp;#039;un &amp;lt;nowiki /&amp;gt; (avec &lt;a href=&quot;https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#frame:callParserFunction&quot; class=&quot;extiw&quot; title=&quot;mw:Extension:Scribunto/Lua reference manual&quot;&gt;callParserFunction()&lt;/a&gt;, qui appelle &lt;a href=&quot;https://www.mediawiki.org/wiki/Help:Magic_words#Miscellaneous&quot; class=&quot;extiw&quot; title=&quot;mw:Help:Magic words&quot;&gt;{{#tag:nowiki}}&lt;/a&gt;) ; probablement moins rapide, mais je pense que c&amp;#039;est largement préférable de ne pas alourdir &amp;quot;inutilement&amp;quot; le markup généré ; après essais, il est suffisant de mettre un &amp;lt;nowiki /&amp;gt; au début&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local Romains = require(&amp;#039;Module:Chiffres romains&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Traitement d&amp;#039;une erreur.&lt;br /&gt;
	Argument:	message d&amp;#039;erreur en texte simple&lt;br /&gt;
	Résultat:	la fonction ne retourne pas à l&amp;#039;appelant, mais après le pcall()&lt;br /&gt;
	&lt;br /&gt;
	Lorsqu&amp;#039;une erreur est détectée, par exemple un argument invalide dans&lt;br /&gt;
	l&amp;#039;appel du modèle, cette fonction est appelée. Elle termine tous les appels&lt;br /&gt;
	de fonction, jusqu&amp;#039;à atteindre un appel à la fonction pcall(), qui retourne&lt;br /&gt;
	false et le message (s&amp;#039;il n&amp;#039;y avait pas eu d&amp;#039;erreur dans le traitement,&lt;br /&gt;
	pcall retournait true et les valeurs retournées par la fonction qu&amp;#039;on lui&lt;br /&gt;
	passe en premier argument).&lt;br /&gt;
	&lt;br /&gt;
	Cette méthode a l&amp;#039;intérêt de rendre le code nettement plus lisible en ne&lt;br /&gt;
	traînant pas partout des codes et des messages d&amp;#039;erreur, et accessoirement&lt;br /&gt;
	de gagner un brin de performance.&lt;br /&gt;
	&lt;br /&gt;
	Dans ce module, la fonction erreur() peut être appelée à peu près n&amp;#039;importe&lt;br /&gt;
	quand. Voir les fonctions p.Noble() et p.Noble_() pour l&amp;#039;utilisation de&lt;br /&gt;
	pcall().&lt;br /&gt;
	]]&lt;br /&gt;
local function erreur(msg)		&lt;br /&gt;
	if string.sub(msg, 1, 5) ~= &amp;#039;&amp;lt;span&amp;#039; then&lt;br /&gt;
		-- Romains.conversion() inclut déjà le &amp;lt;span&amp;gt;&lt;br /&gt;
		msg = &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. msg .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	error(msg, 0)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Génération d&amp;#039;un &amp;lt;span&amp;gt; enrobant un nombre romain.&lt;br /&gt;
	Argument:	chaîne avec des chiffres romains majuscules&lt;br /&gt;
	Résultat:	la même chaîne enrobée dans un &amp;lt;span&amp;gt; avec le bon style&lt;br /&gt;
	]]&lt;br /&gt;
local function html_romain(chaine)	&lt;br /&gt;
	return	&amp;#039;&amp;lt;span class=&amp;quot;romain&amp;quot; style=&amp;quot;text-transform:uppercase&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
			.. chaine&lt;br /&gt;
			.. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Génération d&amp;#039;un &amp;lt;abbr&amp;gt; avec l&amp;#039;infobulle, le nombre romain et un exposant&lt;br /&gt;
	éventuel.&lt;br /&gt;
	Arguments:	infobulle	à afficher&lt;br /&gt;
				nombre		en chiffres romains majuscules uniquement&lt;br /&gt;
				exposant	peut être &amp;#039;er&amp;#039;, &amp;#039;re&amp;#039;, &amp;#039;&amp;#039; (chaîne vide)&lt;br /&gt;
	Résultat:	les arguments enrobés dans un &amp;lt;abbr&amp;gt;&lt;br /&gt;
	]]&lt;br /&gt;
local function html_abbr(infobulle, nombre, exposant)	&lt;br /&gt;
	return	&amp;#039;&amp;lt;abbr class=&amp;quot;abbr&amp;quot; title=&amp;quot;&amp;#039; .. infobulle .. &amp;#039;&amp;quot; &amp;gt;&amp;#039;&lt;br /&gt;
			.. html_romain(nombre) .. exposant .. &amp;#039;&amp;lt;/abbr&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Génération d&amp;#039;un nombre romain à afficher.&lt;br /&gt;
	Argument:	chaine, noerror&lt;br /&gt;
		chaine:		la chaîne avec uniquement les caractères &amp;quot;IVXLCDMer&amp;quot;&lt;br /&gt;
		noerror:	empeche l&amp;#039;affichage des erreurs&lt;br /&gt;
	Résultat:	le HTML pour afficher le nombre romain, ou&lt;br /&gt;
				nil si la chaîne doit être ignorée&lt;br /&gt;
	Notes:&lt;br /&gt;
	-	Si un argument valide comme &amp;#039;Ier&amp;#039;, &amp;#039;Ire&amp;#039;, &amp;#039;XIV&amp;#039; est fourni, retourne le&lt;br /&gt;
		HTML.&lt;br /&gt;
	-	Si un argument invalide comme &amp;#039;Le&amp;#039; ou &amp;#039;Veere&amp;#039; est fourni, retourne nil.&lt;br /&gt;
		Dans ce case, l&amp;#039;analyseur doit essayer de trouver un nombre plus loin.&lt;br /&gt;
	-	Si un argument avec on nombre romain clairement invalide comme &amp;#039;VV&amp;#039; est&lt;br /&gt;
		fourni, une erreur est causée.&lt;br /&gt;
	]]&lt;br /&gt;
local function romain(chaine, noerror)	&lt;br /&gt;
	if chaine == &amp;quot;Ier&amp;quot; then return html_abbr(&amp;#039;premier&amp;#039;,  &amp;#039;I&amp;#039;, &amp;#039;&amp;lt;sup&amp;gt;er&amp;lt;/sup&amp;gt;&amp;#039;) end&lt;br /&gt;
	if chaine == &amp;quot;Ire&amp;quot; then return html_abbr(&amp;#039;première&amp;#039;, &amp;#039;I&amp;#039;, &amp;#039;&amp;lt;sup&amp;gt;re&amp;lt;/sup&amp;gt;&amp;#039;) end&lt;br /&gt;
	if string.find(chaine, &amp;#039;e&amp;#039;, 1, true) then return nil end&lt;br /&gt;
	if string.find(chaine, &amp;#039;r&amp;#039;, 1, true) then return nil end&lt;br /&gt;
	local test, msg, infobulle = Romains.conversion(chaine)&lt;br /&gt;
	if not test then if noerror then return nil else erreur(msg) end end&lt;br /&gt;
	return html_abbr(infobulle, chaine, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Formatage d&amp;#039;une chaîne. Une homonymie entre parenthèses est conservée.&lt;br /&gt;
	Argument:	chaine, noerror&lt;br /&gt;
		chaine:		chaîne à formater&lt;br /&gt;
		noerror:	empêche l&amp;#039;affichage des erreurs&lt;br /&gt;
	Résultat:	texte, complement&lt;br /&gt;
		texte:		nom et numéro formatés, par exemple Louis II, avec mise en&lt;br /&gt;
					forme; vide si pas de numéro&lt;br /&gt;
		complement:	le complément de nom, par exemple de Bavière (1229-1294)&lt;br /&gt;
		&lt;br /&gt;
	La recherche de patterns en unicode est relativement coûteuse, donc on essaie&lt;br /&gt;
	de ne pas multiplier les recherches: on ratisse large et on trie après. Comme&lt;br /&gt;
	il peut y avoir plusieurs nombres en chiffres romains dans la chaîne, on&lt;br /&gt;
	utilise une boucle pour les trouver un par un et on accumule le texte formaté&lt;br /&gt;
	au fur et à mesure.&lt;br /&gt;
	&lt;br /&gt;
	La fonction utilise les variables suivantes:&lt;br /&gt;
	sujet:	la chaîne à formater, à laquelle on a ajouté une espace au début et&lt;br /&gt;
			à la fin parce que mw.ustring.find() a besoin d&amp;#039;un caractère avant&lt;br /&gt;
			et après les chiffres romains, pour détecter un nombre romain dans&lt;br /&gt;
			un mot isolé, et ne pas détecter le D dans Désirée.&lt;br /&gt;
	texte:	accumule le texte analysé jusqu&amp;#039;ici; soit vide, soit se terminant par&lt;br /&gt;
			un nombre romain formaté. Peut contenir plusieurs fois des nombres&lt;br /&gt;
			romains.&lt;br /&gt;
	index:	index dans le sujet du premier caractère qui n&amp;#039;a pas encore été&lt;br /&gt;
			copié dans la variable texte.&lt;br /&gt;
			Exprimé en caractères, pas en bytes.&lt;br /&gt;
	init:	position où débuter la recherche de pattern. Souvent identique à&lt;br /&gt;
			index, mais pourrait en différer. Par exemple avec le sujet &amp;quot; Louis&lt;br /&gt;
			de Veere Ier &amp;quot; le pattern trouvera d&amp;#039;abord &amp;quot;Veere&amp;quot; mais&lt;br /&gt;
			romain(capture) retournera nil, et donc texte restera inchangé&lt;br /&gt;
			(vide), index aussi (2) mais init indiquera le premier caractère&lt;br /&gt;
			après &amp;quot;Veere&amp;quot; (16).&lt;br /&gt;
			Exprimé en caractères, pas en bytes.&lt;br /&gt;
	&lt;br /&gt;
	Cette fonction est le coeur du module, à ne modifier qu&amp;#039;avec d&amp;#039;infinies&lt;br /&gt;
	précautions !&lt;br /&gt;
	]]&lt;br /&gt;
local function formatage2(chaine, noerror)	&lt;br /&gt;
	local sujet = &amp;#039; &amp;#039; .. chaine .. &amp;#039; &amp;#039;	-- la chaîne à formater&lt;br /&gt;
	local texte = &amp;#039;&amp;#039;			-- accumule le texte formaté&lt;br /&gt;
	local index = 2				-- premier caractère de sujet non copié dans texte&lt;br /&gt;
	local init  = 1				-- position où démarrer la recherche de pattern&lt;br /&gt;
	while true do&lt;br /&gt;
		local debut, fin, capture&lt;br /&gt;
			  = mw.ustring.find(sujet, &amp;#039;%W([IVXLCDM]+[er]*)%W&amp;#039;, init)&lt;br /&gt;
		if not debut then					-- plus aucun nombre romain&lt;br /&gt;
			return texte, mw.ustring.sub(sujet, index, -2)&lt;br /&gt;
		end&lt;br /&gt;
		capture = romain(capture, noerror)			-- formate le nombre romain&lt;br /&gt;
		if capture then						-- accumuler avec le nombre romain&lt;br /&gt;
			texte = texte .. mw.ustring.sub(sujet, index, debut)&lt;br /&gt;
			if string.sub(texte, -1) == &amp;#039; &amp;#039; then				-- Louis XIV&lt;br /&gt;
				texte = string.sub(texte, 1, -2) .. &amp;#039;&amp;amp;nbsp;&amp;#039;&lt;br /&gt;
			elseif string.sub(texte, -2) == &amp;#039; (&amp;#039; then			-- Louis (XIV)&lt;br /&gt;
				texte = string.sub(texte, 1, -3) .. &amp;#039;&amp;amp;nbsp;(&amp;#039;&lt;br /&gt;
			elseif string.sub(texte, -2) == &amp;#039; [&amp;#039; then			-- Louis [XIV]&lt;br /&gt;
				texte = string.sub(texte, 1, -3) .. &amp;#039;&amp;amp;nbsp;[&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			texte = texte .. capture&lt;br /&gt;
			index = fin&lt;br /&gt;
			init  = fin						-- .. et chercher le suivant&lt;br /&gt;
		else								-- fausse alerte, par exemple &amp;#039;Veere&amp;#039;&lt;br /&gt;
			init = fin&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Formatage d&amp;#039;une chaîne. Une homonymie entre parenthèses est ignorée.&lt;br /&gt;
	Arguments:	chaine, noerror&lt;br /&gt;
		chaine:		chaîne à formater&lt;br /&gt;
		noerror:	empêcher l&amp;#039;affichage des erreurs&lt;br /&gt;
	Résultat:	texte, complement&lt;br /&gt;
		texte:		nom et numéro formatés, par exemple Louis II, avec mise en&lt;br /&gt;
					forme; vide si pas de numéro&lt;br /&gt;
		complement:	le complément de nom, par exemple de Bavière&lt;br /&gt;
	&lt;br /&gt;
	Pour l&amp;#039;instant, l&amp;#039;homonymie est défini comme le texte à partir de la dernière&lt;br /&gt;
	parenthèse ouvrante, pourvu que le dernier caractère de la chaîne soit une&lt;br /&gt;
	parenthèse fermante. Une définition plutôt rudimentaire, qui devrait&lt;br /&gt;
	probablement être affinée avec l&amp;#039;expérience.&lt;br /&gt;
	]]&lt;br /&gt;
local function formatage1(chaine, noerror)	&lt;br /&gt;
	if string.sub(chaine, -1, -1) ~= &amp;quot;)&amp;quot; then&lt;br /&gt;
		return formatage2(chaine, noerror)&lt;br /&gt;
	end&lt;br /&gt;
	local paren = 0		-- position de la dernière parenthèse ouvrante&lt;br /&gt;
	local teste			-- dernier index testé&lt;br /&gt;
	repeat&lt;br /&gt;
		teste = string.find(chaine, &amp;quot;(&amp;quot;, paren + 1, true)&lt;br /&gt;
		if teste then paren = teste end&lt;br /&gt;
	until teste == nil&lt;br /&gt;
	if paren == 0 then return formatage2(chaine, noerror)&lt;br /&gt;
	              else return formatage2(string.sub(chaine, 1, paren - 1), noerror)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Formatage du texte à afficher.&lt;br /&gt;
	Arguments:	arg1, arg2, arg3, noerror&lt;br /&gt;
		arg1:		premier argument reçu de l&amp;#039;appel du modèle&lt;br /&gt;
		arg2:		deuxième argument reçu de l&amp;#039;appel du modèle&lt;br /&gt;
		arg3:		troisième argument reçu de l&amp;#039;appel du modèle&lt;br /&gt;
		noerror:	empêche l&amp;#039;affichage des erreurs&lt;br /&gt;
	Résultat:	texte à afficher&lt;br /&gt;
	]]&lt;br /&gt;
local function affichage(arg1, arg2, arg3, noerror)&lt;br /&gt;
	local texte, reste = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
	if not arg2 or arg2 == &amp;quot;*&amp;quot; then&lt;br /&gt;
		-- second argument absent: on formate le premier argument&lt;br /&gt;
		-- avec le complément&lt;br /&gt;
		texte, reste = formatage1(arg1, noerror)&lt;br /&gt;
	elseif arg2 == &amp;quot;-&amp;quot; or arg2 == &amp;quot;&amp;quot; then&lt;br /&gt;
		-- second argument &amp;quot;-&amp;quot;: on formate le premier argument&lt;br /&gt;
		-- sans le complément&lt;br /&gt;
		texte = formatage1(arg1, noerror)&lt;br /&gt;
	elseif arg2 == &amp;quot;+&amp;quot; then&lt;br /&gt;
		-- second argument &amp;quot;+&amp;quot;: on formate le premier argument&lt;br /&gt;
		-- avec le complément et l&amp;#039;homonyùie&lt;br /&gt;
		texte, reste = formatage2(arg1, noerror)&lt;br /&gt;
	else&lt;br /&gt;
		-- second argument présent, avec ou sans un numéro&lt;br /&gt;
		texte, reste = formatage2(arg2, noerror)&lt;br /&gt;
		if texte == &amp;quot;&amp;quot; then&lt;br /&gt;
			-- pas de numéro: on prend le nom et le numéro du premier argument&lt;br /&gt;
			texte = formatage1(arg1, noerror)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Assemblage des éléments&lt;br /&gt;
	texte = mw.text.trim(texte)&lt;br /&gt;
	reste = mw.text.trim(reste)&lt;br /&gt;
	if reste == &amp;quot;&amp;quot; then							-- Louis II&lt;br /&gt;
		-- Pas de reste, le texte est bon&lt;br /&gt;
	elseif texte == &amp;quot;&amp;quot; then						-- Charlemagne&lt;br /&gt;
		-- Il n&amp;#039;y avait pas de chiffres romains,&lt;br /&gt;
		-- il faut prendre le reste sans ajouter d&amp;#039;espace&lt;br /&gt;
		texte = reste&lt;br /&gt;
	else&lt;br /&gt;
		local debut = string.sub(reste, 1, 1)	-- premier caractère du reste&lt;br /&gt;
		if	debut == &amp;#039;)&amp;#039; or						-- {{noble|Louis (II)}}&lt;br /&gt;
			debut == &amp;#039;]&amp;#039; or						-- {{noble|Louis [II]}}&lt;br /&gt;
			debut == &amp;#039;,&amp;#039; or						-- {{noble|Louis II, le Jeune}}&lt;br /&gt;
			debut == &amp;#039;.&amp;#039;						-- {{noble|Karl I. der Große}}&lt;br /&gt;
		then&lt;br /&gt;
			-- Le reste commence par un caractère particulier,&lt;br /&gt;
			-- il ne faut pas insérer d&amp;#039;espace avant le reste.&lt;br /&gt;
			texte = texte .. reste&lt;br /&gt;
		else									-- {{noble|Louis II le Jeune}}&lt;br /&gt;
			-- Le reste ne commence pas par un caractère particulier,&lt;br /&gt;
			-- il faut insérer une espace avant le reste, puisque des&lt;br /&gt;
			-- espaces au début avaient été supprimées par trim().&lt;br /&gt;
			texte = texte .. &amp;quot; &amp;quot; .. reste&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if arg3 then&lt;br /&gt;
		-- troisième argument présent&lt;br /&gt;
		local suppl, reste = formatage2(arg3, noerror)&lt;br /&gt;
		local debut&lt;br /&gt;
		debut = string.sub(suppl, 1, 1)		-- premier caractère du supplément&lt;br /&gt;
		if	debut == &amp;#039;)&amp;#039; or					-- {{noble|Louis (II)}}&lt;br /&gt;
			debut == &amp;#039;]&amp;#039; or					-- {{noble|Louis [II]}}&lt;br /&gt;
			debut == &amp;#039;,&amp;#039; or					-- {{noble|Louis II, le Jeune}}&lt;br /&gt;
			debut == &amp;#039;.&amp;#039;					-- {{noble|Karl I. der Große}}&lt;br /&gt;
		then&lt;br /&gt;
			-- Le supplément commence par un caractère particulier,&lt;br /&gt;
			-- il ne faut pas insérer d&amp;#039;espace avant le supplément.&lt;br /&gt;
			texte = texte .. suppl&lt;br /&gt;
		else								-- {{noble|Louis II le Jeune}}&lt;br /&gt;
			-- Le supplément ne commence pas par un caractère particulier,&lt;br /&gt;
			-- il faut insérer une espace avant le supplément, puisque des&lt;br /&gt;
			-- espaces au début avaient été supprimées par trim().&lt;br /&gt;
			texte = texte .. &amp;quot; &amp;quot; .. suppl&lt;br /&gt;
		end&lt;br /&gt;
		debut = string.sub(reste, 1, 1)		-- premier caractère du reste&lt;br /&gt;
		if	debut == &amp;#039;)&amp;#039; or					-- {{noble|Louis (II)}}&lt;br /&gt;
			debut == &amp;#039;]&amp;#039; or					-- {{noble|Louis [II]}}&lt;br /&gt;
			debut == &amp;#039;,&amp;#039; or					-- {{noble|Louis II, le Jeune}}&lt;br /&gt;
			debut == &amp;#039;.&amp;#039;					-- {{noble|Karl I. der Große}}&lt;br /&gt;
		then&lt;br /&gt;
			-- Le reste commence par un caractère particulier,&lt;br /&gt;
			-- il ne faut pas insérer d&amp;#039;espace avant le reste.&lt;br /&gt;
			texte = texte .. reste&lt;br /&gt;
		else									-- {{noble|Louis II le Jeune}}&lt;br /&gt;
			-- Le supplément ne commence pas par un caractère particulier,&lt;br /&gt;
			-- il faut insérer une espace avant le reste, puisque des&lt;br /&gt;
			-- espaces au début avaient été supprimées par trim().&lt;br /&gt;
			texte = texte .. &amp;quot; &amp;quot; .. reste&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- Correction du bug qui empêche la gestion correcte des insécables&lt;br /&gt;
	-- dans un lien wiki&lt;br /&gt;
	texte = mw.ustring.gsub(texte, &amp;#039;« &amp;#039;, &amp;#039;«&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
	texte = mw.ustring.gsub(texte, &amp;#039; »&amp;#039;, &amp;#039;&amp;amp;nbsp;»&amp;#039;)&lt;br /&gt;
	return texte&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Nettoyage d&amp;#039;une chaîne.&lt;br /&gt;
	Argument:	valeur reçue de l&amp;#039;appel du modèle&lt;br /&gt;
	Résultat:	l&amp;#039;argument, avec les diverses espaces HTML remplacés par des&lt;br /&gt;
				espaces normales&lt;br /&gt;
	&lt;br /&gt;
	Ce code est utile, par exemple avec arg2 = &amp;quot;Louis&amp;amp;nbsp;XIV&amp;quot;. Si on ne le&lt;br /&gt;
	fait pas, les résultats ne seront pas les résultats attendus.&lt;br /&gt;
	]]&lt;br /&gt;
local function nettoyage(chaine)	&lt;br /&gt;
	if type(chaine) ~= &amp;quot;string&amp;quot; then return chaine end&lt;br /&gt;
	return chaine&lt;br /&gt;
			-- nbsp&lt;br /&gt;
			:gsub( &amp;#039;\194\160&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#160;&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;nbsp;&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			-- narrow nbsp&lt;br /&gt;
			:gsub( &amp;#039;\226\128\175&amp;#039;,	&amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#8239;&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			-- thin space&lt;br /&gt;
			:gsub( &amp;#039;\226\128\137&amp;#039;,	&amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#8201;&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;thinsp;&amp;#039;,		&amp;#039; &amp;#039; )&lt;br /&gt;
			-- simple space&lt;br /&gt;
			:gsub( &amp;#039;&amp;amp;#32;&amp;#039;,			&amp;#039; &amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Validation du premier argument, qui doit être présent, non vide et différent&lt;br /&gt;
	de &amp;quot;-&amp;quot;.&lt;br /&gt;
	Argument:	valeur reçue de l&amp;#039;appel du modèle&lt;br /&gt;
	Résultat:	l&amp;#039;argument, éventuellement modifié &lt;br /&gt;
	]]&lt;br /&gt;
local function valide1(valeur)	&lt;br /&gt;
	if valeur == nil then&lt;br /&gt;
		erreur(&amp;quot;L&amp;#039;argument 1 est requis&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	if valeur == &amp;quot;&amp;quot;  then&lt;br /&gt;
		erreur(&amp;quot;L&amp;#039;argument 1 ne peut pas être vide&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	if valeur == &amp;quot;-&amp;quot; then&lt;br /&gt;
		erreur(&amp;quot;L&amp;#039;argument 1 ne peut pas être un simple tiret&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
	return nettoyage(valeur)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Validation du deuxième argument, qui peut être présent, vide, ou  &amp;quot;-&amp;quot;.&lt;br /&gt;
	Argument:	valeur reçue de l&amp;#039;appel du modèle&lt;br /&gt;
	Résultat:	l&amp;#039;argument, éventuellement modifié&lt;br /&gt;
	]]&lt;br /&gt;
local function valide2(valeur)	&lt;br /&gt;
	return nettoyage(valeur)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Validation du troisième argument optionnel.&lt;br /&gt;
	Argument:	valeur reçue de l&amp;#039;appel du modèle&lt;br /&gt;
	Résultat:	l&amp;#039;argument, éventuellement modifié&lt;br /&gt;
	]]&lt;br /&gt;
local function valide3(valeur)	&lt;br /&gt;
	return nettoyage(valeur)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Traitement de l&amp;#039;appel.&lt;br /&gt;
	Argument:	frame reçu du modèle&lt;br /&gt;
	Résultat:	le texte à retourner au modèle, et&lt;br /&gt;
				le premier argument (pour la construction du lien)&lt;br /&gt;
	]]&lt;br /&gt;
local function traitement(frame)		&lt;br /&gt;
	local args  = frame:getParent().args&lt;br /&gt;
	local arg1  = valide1(args[1]);&lt;br /&gt;
	local arg2  = valide2(args[2]);&lt;br /&gt;
	local arg3  = valide3(args[3]);&lt;br /&gt;
	local texte = affichage(arg1, arg2, arg3);&lt;br /&gt;
	return texte, arg1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Formatage d&amp;#039;un nom dynastique, avec lien: modèle Noble.&lt;br /&gt;
	Note: Le &amp;lt;nowiki /&amp;gt; est nécessaire pour supporter [{{Noble:Louis XIV}}] sans&lt;br /&gt;
	obtenir des triple crochets dans l&amp;#039;affichage.&lt;br /&gt;
	]]&lt;br /&gt;
function p.Noble(frame)		&lt;br /&gt;
	local ok, texte, arg1 = pcall(traitement, frame)&lt;br /&gt;
	if ok then	return mw.getCurrentFrame():callParserFunction(&amp;#039;#tag&amp;#039;, &amp;#039;nowiki&amp;#039;) .. &amp;#039;[[&amp;#039; .. arg1 .. &amp;#039;|&amp;#039; .. texte .. &amp;#039;]]&amp;#039;&lt;br /&gt;
		  else	return texte&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Formatage d&amp;#039;un nom dynastique, sans lien: modèle Noble-.&lt;br /&gt;
	]]&lt;br /&gt;
function p.Noble_(frame)		&lt;br /&gt;
	local ok, texte = pcall(traitement, frame)&lt;br /&gt;
	return texte&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.labelInfobox(label)&lt;br /&gt;
	return affichage(nettoyage(label), &amp;#039;+&amp;#039;, nil, true)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>wp&gt;Od1n</name></author>
	</entry>
</feed>