<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.froce.fr//index.php?action=history&amp;feed=atom&amp;title=Module%3AArbre</id>
	<title>Module:Arbre - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.froce.fr//index.php?action=history&amp;feed=atom&amp;title=Module%3AArbre"/>
	<link rel="alternate" type="text/html" href="https://wiki.froce.fr//index.php?title=Module:Arbre&amp;action=history"/>
	<updated>2026-04-10T12:24:42Z</updated>
	<subtitle>Historique des révisions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.froce.fr//index.php?title=Module:Arbre&amp;diff=2387&amp;oldid=prev</id>
		<title>Alexandre Lacroix Le Menn : Page créée avec « --   Test de module pour générer des arbres (cf Modèle:Arbre début) avec   une syntaxe plus simple.   local p = {}  -- Crée la balise &lt;li&gt; à insérer au début d… »</title>
		<link rel="alternate" type="text/html" href="https://wiki.froce.fr//index.php?title=Module:Arbre&amp;diff=2387&amp;oldid=prev"/>
		<updated>2021-06-12T19:15:06Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « --&lt;a href=&quot;/index.php?title=Test_de_module_pour_g%C3%A9n%C3%A9rer_des_arbres_(cf_Mod%C3%A8le:Arbre_d%C3%A9but)_avec_une_syntaxe_plus_simple.&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Test de module pour générer des arbres (cf Modèle:Arbre début) avec une syntaxe plus simple. (page inexistante)&quot;&gt;Test de module pour générer des arbres (cf Modèle:Arbre début) avec   une syntaxe plus simple. &lt;/a&gt;  local p = {}  -- Crée la balise &amp;lt;li&amp;gt; à insérer au début d… »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
  Test de module pour générer des arbres (cf Modèle:Arbre début) avec&lt;br /&gt;
  une syntaxe plus simple.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Crée la balise &amp;lt;li&amp;gt; à insérer au début d'une ligne pour avoir le bon embranchement.&lt;br /&gt;
local function baliseEmbranchement(brancheFinale, texte)&lt;br /&gt;
	local classesEmbranchement = ''&lt;br /&gt;
	if brancheFinale then&lt;br /&gt;
		classesEmbranchement = 'lastline '&lt;br /&gt;
	end&lt;br /&gt;
	if texte == '' then&lt;br /&gt;
		classesEmbranchement = classesEmbranchement .. 'emptyline'&lt;br /&gt;
	end&lt;br /&gt;
	if classesEmbranchement == '' then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	return '&amp;lt;li class=&amp;quot;' .. classesEmbranchement .. '&amp;quot;&amp;gt;'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ajoute les balises &amp;lt;li&amp;gt; d'embranchement dans lignes.&lt;br /&gt;
function p.ajouteEmbranchements(lignes)&lt;br /&gt;
	-- Les lignes sont parcourues en partant de la fin.&lt;br /&gt;
	-- niveauxDejaFinis[i] indique si on a déjà vu une ligne de profondeur i plus récemment qu'une ligne de&lt;br /&gt;
	-- profondeur i-1, autrement dit que la balise de fin à la profondeur i a déjà été insérée quelque part et que&lt;br /&gt;
	-- les autres lignes de profondeur i n'en ont pas besoin (tant qu'on ne revient pas à i-1).&lt;br /&gt;
	local niveauxDejaFinis = {}&lt;br /&gt;
	-- Profondeur de la ligne vue à l'itération d'avant, c'est-à-dire la ligne suivante dans l'ordre du texte.&lt;br /&gt;
	local derniereProfondeur = 0&lt;br /&gt;
&lt;br /&gt;
	for i = #lignes, 1, -1 do&lt;br /&gt;
		-- Découpe la ligne en deux : etoiles contient les '*' du début, texte le reste.&lt;br /&gt;
		local etoiles = string.match(lignes[i], '^%**')&lt;br /&gt;
		local texte = mw.text.trim(string.sub(lignes[i], #etoiles + 1))&lt;br /&gt;
		local profondeur = #etoiles&lt;br /&gt;
&lt;br /&gt;
		-- Met à jour la ligne courante.&lt;br /&gt;
		local embranchement = baliseEmbranchement(not niveauxDejaFinis[profondeur] and profondeur &amp;gt; 1, texte)&lt;br /&gt;
		if profondeur &amp;gt; 0 then&lt;br /&gt;
			lignes[i] = etoiles .. embranchement .. texte&lt;br /&gt;
		end&lt;br /&gt;
		-- Pour faciliter l'utilisation du modèle, l'entrée est autorisée à contenir des augmentations de plus&lt;br /&gt;
		-- d'un niveau à la fois. Dans ce cas, on synthétise les niveaux intermédaires, sans contenu.&lt;br /&gt;
		for j = profondeur + 1, derniereProfondeur - 1 do&lt;br /&gt;
			etoiles = etoiles .. '*'&lt;br /&gt;
			lignes[i] = lignes[i] .. '\n' .. etoiles .. baliseEmbranchement(not niveauxDejaFinis[j], '')&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Mise à jour de niveauxDejaFinis. Le tableau doit être rempli jusqu'à la profondeur courante et vidé&lt;br /&gt;
		-- après, de sorte que #niveauxDejaFinis soit égal à profondeur après la mise à jour.&lt;br /&gt;
		for j = #niveauxDejaFinis + 1, profondeur - 1 do&lt;br /&gt;
			niveauxDejaFinis[j] = false&lt;br /&gt;
		end&lt;br /&gt;
		niveauxDejaFinis[profondeur] = true&lt;br /&gt;
		for j = profondeur + 1, #niveauxDejaFinis do&lt;br /&gt;
			niveauxDejaFinis[j] = nil&lt;br /&gt;
		end&lt;br /&gt;
		derniereProfondeur = profondeur&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.arbre(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args&lt;br /&gt;
	local data = args['contenu'] or pargs['contenu'] or ''&lt;br /&gt;
	local lignes = mw.text.split(mw.text.trim(data), '\n', true)&lt;br /&gt;
	p.ajouteEmbranchements(lignes)&lt;br /&gt;
	local style = ''&lt;br /&gt;
	if args.templatestyles ~= 'non' then&lt;br /&gt;
		style = frame:preprocess('&amp;lt;templatestyles src=&amp;quot;Arbre/styles.css&amp;quot; /&amp;gt;')&lt;br /&gt;
	end&lt;br /&gt;
	local resultat = '&amp;lt;div class=&amp;quot;treeview&amp;quot;&amp;gt;\n' .. table.concat(lignes, '\n') .. '&amp;lt;/div&amp;gt;'&lt;br /&gt;
	return style .. resultat&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Alexandre Lacroix Le Menn</name></author>
	</entry>
</feed>