<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALineage</id>
	<title>Module:Lineage - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ALineage"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Lineage&amp;action=history"/>
	<updated>2026-05-28T17:41:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Lineage&amp;diff=137251&amp;oldid=prev</id>
		<title>imported&gt;WOSlinker: use require(&#039;strict&#039;) instead of require(&#039;Module:No globals&#039;)</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Lineage&amp;diff=137251&amp;oldid=prev"/>
		<updated>2022-10-21T22:04:14Z</updated>

		<summary type="html">&lt;p&gt;use require(&amp;#039;strict&amp;#039;) instead of require(&amp;#039;Module:No globals&amp;#039;)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
local errorCategory = &amp;#039;[[Categoria:Errors reported by Module Lineage]]&amp;#039;&lt;br /&gt;
local mwHtml = getmetatable( mw.html.create() ).__index&lt;br /&gt;
&lt;br /&gt;
function mwHtml:attrIf( cond, name, value )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:attr( name, value )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:cssIf( cond, name, value )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:css( name, value )&lt;br /&gt;
    else&lt;br /&gt;
        return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mwHtml:wikitextIf( cond, value1, value2 )&lt;br /&gt;
    if cond then&lt;br /&gt;
        return self:wikitext( value1 )&lt;br /&gt;
    elseif not (value2 == nil) then&lt;br /&gt;
        return self:wikitext( value2 )&lt;br /&gt;
    else&lt;br /&gt;
    	return self&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local pers = {}&lt;br /&gt;
local tabella = {}&lt;br /&gt;
&lt;br /&gt;
local function errhandler(msg)&lt;br /&gt;
	local cat = mw.title.getCurrentTitle().namespace == 0 and errorCategory or &amp;#039;&amp;#039;&lt;br /&gt;
	return string.format(&amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;%s&amp;#039;, msg, cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dividi(dati)&lt;br /&gt;
	local n = 1&lt;br /&gt;
	local resto = 0&lt;br /&gt;
	local nx,px&lt;br /&gt;
	while (dati[n]) do n = n+1 end&lt;br /&gt;
	n = n-1&lt;br /&gt;
	for m=4,n,4 do&lt;br /&gt;
		nx = tonumber(dati[m-3])&lt;br /&gt;
		px = tonumber(dati[m-2])&lt;br /&gt;
		if (nx) then&lt;br /&gt;
			if (px) then&lt;br /&gt;
				if (pers[nx]) then&lt;br /&gt;
					error(string.format(&amp;#039;Duplicated id %d&amp;#039;,nx))&lt;br /&gt;
				else&lt;br /&gt;
					pers[nx] = { padre = px, testo = dati[m-1], nota = dati[m], id = -1, x = -1, y = -1, sp = 0, figli = {} }&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				error(string.format(&amp;#039;Erroneous parent id %s for id %d&amp;#039;,dati[m-2],nx))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			error(string.format(&amp;#039;Erroneous id %s&amp;#039;,dati[m-3]))&lt;br /&gt;
		end&lt;br /&gt;
		resto = n-m&lt;br /&gt;
	end&lt;br /&gt;
	if (resto &amp;gt; 0) then&lt;br /&gt;
		error(string.format(&amp;#039;Erroneous number of data %d (elementi in più: %d)&amp;#039;,n))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function organizza(pid, y)&lt;br /&gt;
	local nn = 1&lt;br /&gt;
	pers[pid].y = y&lt;br /&gt;
	if (not tabella[y]) then tabella[y] = {} end&lt;br /&gt;
	table.insert(tabella[y], pid)&lt;br /&gt;
	for i, v in pairs(pers[pid].figli) do&lt;br /&gt;
		pers[v].id = i&lt;br /&gt;
		nn = nn + organizza(v, y+1)&lt;br /&gt;
	end&lt;br /&gt;
	return nn&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function limSx(pid, delta, dt)&lt;br /&gt;
	if (dt[pers[pid].y]) then&lt;br /&gt;
		dt[pers[pid].y] = math.min(dt[pers[pid].y], pers[pid].x+delta)&lt;br /&gt;
	else&lt;br /&gt;
		dt[pers[pid].y] = pers[pid].x + delta&lt;br /&gt;
	end&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		dt = limSx(v, delta+pers[pid].sp, dt)&lt;br /&gt;
	end&lt;br /&gt;
	return dt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function limDx(pid, delta, dt)&lt;br /&gt;
	if (dt[pers[pid].y]) then&lt;br /&gt;
		dt[pers[pid].y] = math.max(dt[pers[pid].y], pers[pid].x+delta)&lt;br /&gt;
	else&lt;br /&gt;
		dt[pers[pid].y] = pers[pid].x + delta&lt;br /&gt;
	end&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		dt = limDx(v, delta+pers[pid].sp, dt)&lt;br /&gt;
	end&lt;br /&gt;
	return dt&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function riallinea(pid2, n1, n2)&lt;br /&gt;
	local distanza = n2 - n1&lt;br /&gt;
	local vrf = 0&lt;br /&gt;
	local pos, inizio, passo&lt;br /&gt;
	if (distanza &amp;gt; 1) then&lt;br /&gt;
		inizio = pers[pers[pid2].figli[n1]].x&lt;br /&gt;
		passo = (pers[pers[pid2].figli[n2]].x - inizio)/distanza&lt;br /&gt;
		for cc=1,(distanza-1) do&lt;br /&gt;
			pos = inizio + math.floor(cc*passo)&lt;br /&gt;
			if (pos - pers[pers[pid2].figli[n1+cc]].x &amp;gt; 0) then&lt;br /&gt;
				pers[pers[pid2].figli[n1+cc]].x = pos&lt;br /&gt;
				pers[pers[pid2].figli[n1+cc]].sp = pos&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		vrf = 1&lt;br /&gt;
	end&lt;br /&gt;
	return vrf&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function verifica(pid)&lt;br /&gt;
	local tSx&lt;br /&gt;
	local tDx&lt;br /&gt;
	local sposta = 0&lt;br /&gt;
&lt;br /&gt;
	local fine = pers[pid].id&lt;br /&gt;
	local frt2, n&lt;br /&gt;
	&lt;br /&gt;
	for frt=1,(fine-1) do&lt;br /&gt;
		frt2 = pers[pers[pid].padre].figli[frt]&lt;br /&gt;
		tDx = limDx(frt2, 0, {})&lt;br /&gt;
		tSx = limSx(pid, 0, {})&lt;br /&gt;
		n = pers[pid].y&lt;br /&gt;
		while ((tSx[n]) and (tDx[n])) do&lt;br /&gt;
			if (tSx[n] - tDx[n] + sposta &amp;lt; 2) then&lt;br /&gt;
				sposta = 2 + tDx[n] - tSx[n]&lt;br /&gt;
			end&lt;br /&gt;
			n = n + 1&lt;br /&gt;
		end&lt;br /&gt;
		if  (sposta &amp;gt; 0) then&lt;br /&gt;
			pers[pid].x = pers[pid].x + sposta&lt;br /&gt;
			pers[pid].sp = pers[pid].sp + sposta&lt;br /&gt;
			if (riallinea(pers[pid].padre, frt, fine) == 1) then verifica(pid) end&lt;br /&gt;
			sposta = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function calcolaX1(pid)&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		calcolaX1(v)&lt;br /&gt;
	end&lt;br /&gt;
	local tt = #pers[pid].figli&lt;br /&gt;
	if (tt == 0) then&lt;br /&gt;
		if (pers[pid].padre == -1 or pers[pid].id == 1) then&lt;br /&gt;
			pers[pid].x = 0&lt;br /&gt;
		else&lt;br /&gt;
			pers[pid].x = pers[pers[pers[pid].padre].figli[pers[pid].id - 1]].x + 2&lt;br /&gt;
		end&lt;br /&gt;
	elseif (tt == 1) then&lt;br /&gt;
		if (pers[pid].padre == -1 or pers[pid].id == 1) then&lt;br /&gt;
			pers[pid].x = pers[pers[pid].figli[1]].x&lt;br /&gt;
		else&lt;br /&gt;
			pers[pid].x = pers[pers[pers[pid].padre].figli[pers[pid].id - 1]].x + 2&lt;br /&gt;
			pers[pid].sp = pers[pid].x - pers[pers[pid].figli[1]].x&lt;br /&gt;
			verifica(pid)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		local media = math.floor((pers[pers[pid].figli[1]].x + pers[pers[pid].figli[tt]].x)/2)&lt;br /&gt;
		if (pers[pid].padre == -1 or pers[pid].id == 1) then&lt;br /&gt;
			pers[pid].x = media&lt;br /&gt;
		else&lt;br /&gt;
			pers[pid].x = pers[pers[pers[pid].padre].figli[pers[pid].id - 1]].x + 2&lt;br /&gt;
			pers[pid].sp = pers[pid].x - media&lt;br /&gt;
			verifica(pid)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function calcolaX2(pid)&lt;br /&gt;
	local sposta = 0&lt;br /&gt;
	local tt = limSx(pid, 0, {})&lt;br /&gt;
	for _, v in pairs(tt) do&lt;br /&gt;
		if (v+sposta&amp;lt;0) then&lt;br /&gt;
			sposta = -v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if (sposta &amp;gt; 0) then&lt;br /&gt;
		pers[pid].x = pers[pid].x + sposta&lt;br /&gt;
		pers[pid].sp = pers[pid].sp + sposta&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function calcolaX3(pid, sposta)&lt;br /&gt;
	pers[pid].x = pers[pid].x + sposta&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		calcolaX3(v, sposta + pers[pid].sp)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function massimoXY(pid, t)&lt;br /&gt;
	if (pers[pid].x &amp;gt; t[1]) then t[1] = pers[pid].x end&lt;br /&gt;
	if (pers[pid].y &amp;gt; t[2]) then t[2] = pers[pid].y end&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		t = massimoXY(v,t)&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mostraX(pid,allinea,largo,dida)&lt;br /&gt;
	local posx = {}&lt;br /&gt;
	local n1&lt;br /&gt;
	local stx&lt;br /&gt;
	local riga = {}&lt;br /&gt;
	local xx, xp&lt;br /&gt;
	local stileDiv = { [&amp;#039;width&amp;#039;] = largo..&amp;#039;px&amp;#039;, [&amp;#039;padding&amp;#039;] = &amp;#039;3px&amp;#039;, [&amp;#039;background&amp;#039;] = &amp;#039;#FFF&amp;#039;, [&amp;#039;border&amp;#039;] = &amp;#039;1px solid #C8CCD1&amp;#039; }&lt;br /&gt;
	local stileTabella = { [&amp;#039;border-collapse&amp;#039;] = &amp;#039;separate&amp;#039;, [&amp;#039;text-align&amp;#039;] = &amp;#039;center&amp;#039;, [&amp;#039;font-size&amp;#039;] = &amp;#039;95%&amp;#039;, [&amp;#039;line-height&amp;#039;] = &amp;#039;105%&amp;#039;, [&amp;#039;margin&amp;#039;] = &amp;#039;10px auto !important&amp;#039;, }&lt;br /&gt;
	local xy = massimoXY(pid, {0, 0})&lt;br /&gt;
	local lg = math.floor(100/(xy[1]+2))&lt;br /&gt;
	if (lg == 0) then lg = 1 end&lt;br /&gt;
&lt;br /&gt;
	local bDiv = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
	if (allinea == &amp;#039;right&amp;#039;) then&lt;br /&gt;
		bDiv:css(stileDiv):addClass(&amp;#039;floatright&amp;#039;)&lt;br /&gt;
		stileTabella[&amp;#039;margin&amp;#039;] = &amp;#039;0px auto !important&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local bTabella = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:css(stileTabella)&lt;br /&gt;
		:attr({[&amp;#039;cellpadding&amp;#039;]=&amp;#039;1&amp;#039;,[&amp;#039;cellspacing&amp;#039;]=&amp;#039;0&amp;#039;,[&amp;#039;border&amp;#039;]=&amp;#039;0&amp;#039;})&lt;br /&gt;
	for n=1,xy[2] do&lt;br /&gt;
		local riga1 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local riga2 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local riga3 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		posx[1] = 0; posx[2] = 0; posx[3] = 0&lt;br /&gt;
		n1 = 0&lt;br /&gt;
		if (n&amp;gt;1) then riga1:css(&amp;#039;line-height&amp;#039;,&amp;#039;8px&amp;#039;) end&lt;br /&gt;
		if (n&amp;lt;xy[2]) then riga3:css(&amp;#039;line-height&amp;#039;,&amp;#039;8px&amp;#039;) end&lt;br /&gt;
		for _, v in pairs(tabella[n]) do&lt;br /&gt;
			xx = pers[v].x&lt;br /&gt;
			xp = pers[v].padre&lt;br /&gt;
			&lt;br /&gt;
			if (n==1) then&lt;br /&gt;
				for m=1,(xy[1]+2) do&lt;br /&gt;
					riga1:node(mw.html.create(&amp;#039;td&amp;#039;):css(&amp;#039;width&amp;#039;,lg..&amp;#039;%&amp;#039;))&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				riga1:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:css(&amp;#039;border-right&amp;#039;,&amp;#039;1px solid #000&amp;#039;)&lt;br /&gt;
					:cssIf(n1 == xp,&amp;#039;border-top&amp;#039;,&amp;#039;1px solid #000&amp;#039;)&lt;br /&gt;
					:attrIf(xx-posx[1]&amp;gt;0,&amp;#039;colspan&amp;#039;,xx+1-posx[1])&lt;br /&gt;
					:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
				)&lt;br /&gt;
				n1 = xp&lt;br /&gt;
				posx[1] = xx + 1&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			if (xx-posx[2]&amp;gt;0) then&lt;br /&gt;
				riga2:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:attrIf(xx-posx[2]&amp;gt;1,&amp;#039;colspan&amp;#039;,xx-posx[2])&lt;br /&gt;
					:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			riga2:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;,&amp;#039;2&amp;#039;)&lt;br /&gt;
				:wikitextIf(pers[v].nota==&amp;#039;-&amp;#039;, pers[v].testo, string.format(&amp;#039;%s&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size:90%%&amp;quot;&amp;gt;&amp;lt;i&amp;gt;%s&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&amp;#039;,pers[v].testo,pers[v].nota))&lt;br /&gt;
			)&lt;br /&gt;
			posx[2] = xx + 2&lt;br /&gt;
&lt;br /&gt;
			if (n&amp;lt;xy[2]) then&lt;br /&gt;
				if (#pers[v].figli &amp;gt; 0) then&lt;br /&gt;
					riga3:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
						:css(&amp;#039;border-right&amp;#039;,&amp;#039;1px solid #000&amp;#039;)&lt;br /&gt;
						:attrIf(xx-posx[3]&amp;gt;0,&amp;#039;colspan&amp;#039;,xx+1-posx[3])&lt;br /&gt;
						:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
					)&lt;br /&gt;
					posx[3] = xx + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		bTabella:node(riga1):node(riga2):node(riga3)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	bDiv:node(bTabella)&lt;br /&gt;
	if (allinea == &amp;#039;right&amp;#039; and not (dida==&amp;#039;&amp;#039;)) then&lt;br /&gt;
		bDiv:node(mw.html.create(&amp;#039;p&amp;#039;)&lt;br /&gt;
			:css({[&amp;#039;font-size&amp;#039;] = &amp;#039;87%&amp;#039;, [&amp;#039;font-style&amp;#039;] = &amp;#039;normal&amp;#039;, [&amp;#039;border-top&amp;#039;] = &amp;#039;1px solid #c8ccd1&amp;#039;, [&amp;#039;margin&amp;#039;] = &amp;#039;8px 2px 3px&amp;#039;})&lt;br /&gt;
			:wikitext(dida)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(bDiv)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function calcolaY(pid, t)&lt;br /&gt;
	if (pers[pid].y &amp;gt; t) then t = pers[pid].y end&lt;br /&gt;
	for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
		t = calcolaY(v,t)&lt;br /&gt;
		pers[pid].sp = pers[pid].sp + 1 + pers[v].sp&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function mostraY(pid)&lt;br /&gt;
	local bTabella = mw.html.create(&amp;#039;table&amp;#039;)&lt;br /&gt;
		:attr({[&amp;#039;cellpadding&amp;#039;]=&amp;#039;0&amp;#039;,[&amp;#039;cellspacing&amp;#039;]=&amp;#039;0&amp;#039;,[&amp;#039;border&amp;#039;]=&amp;#039;0&amp;#039;})&lt;br /&gt;
		:css({[&amp;#039;border-collapse&amp;#039;]=&amp;#039;separate&amp;#039;,[&amp;#039;text-align&amp;#039;]=&amp;#039;left&amp;#039;,[&amp;#039;margin&amp;#039;]=&amp;#039;10px 0 10px 16px&amp;#039;})&lt;br /&gt;
&lt;br /&gt;
local function mostraY2(pid, a)&lt;br /&gt;
	if (pers[pid].padre &amp;gt; -1) then&lt;br /&gt;
		local riga1 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local riga2 = mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
		local spd = pers[pers[pid].padre].sp&lt;br /&gt;
		if (pers[pid].id == 1 and pers[pers[pid].padre].padre &amp;gt; -1) then&lt;br /&gt;
			riga1:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;,2*spd))&lt;br /&gt;
			riga1:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;rowspan&amp;#039;,2*spd)&lt;br /&gt;
				:cssIf(pers[pers[pid].padre].id &amp;lt; #pers[pers[pers[pid].padre].padre].figli,&amp;#039;border-left&amp;#039;,&amp;#039;1px solid #666&amp;#039;)&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		riga1&lt;br /&gt;
			:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:css(&amp;#039;width&amp;#039;,&amp;#039;6px&amp;#039;))&lt;br /&gt;
			:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:css({[&amp;#039;border-left&amp;#039;]=&amp;#039;1px solid #666&amp;#039;,[&amp;#039;border-bottom&amp;#039;]=&amp;#039;1px solid #666&amp;#039;,[&amp;#039;width&amp;#039;]=&amp;#039;10px&amp;#039;,[&amp;#039;line-height&amp;#039;]=&amp;#039;3px&amp;#039;,[&amp;#039;height&amp;#039;]=&amp;#039;12px&amp;#039;}))&lt;br /&gt;
			:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr({[&amp;#039;colspan&amp;#039;]=2*a-1, [&amp;#039;rowspan&amp;#039;]=2})&lt;br /&gt;
				:css(&amp;#039;padding&amp;#039;, &amp;#039;0px 3px 2px 1px&amp;#039;)&lt;br /&gt;
				:wikitextIf(pers[pid].nota==&amp;#039;&amp;#039;, pers[pid].testo, pers[pid].testo..&amp;#039; - &amp;#039;..pers[pid].nota))&lt;br /&gt;
		riga2&lt;br /&gt;
			:node(mw.html.create(&amp;#039;td&amp;#039;))&lt;br /&gt;
			:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:css({[&amp;#039;line-height&amp;#039;]=&amp;#039;8px&amp;#039;,[&amp;#039;line-height&amp;#039;]=&amp;#039;3px&amp;#039;,[&amp;#039;height&amp;#039;]=&amp;#039;12px&amp;#039;})&lt;br /&gt;
				:cssIf(pers[pid].id &amp;lt; #pers[pers[pid].padre].figli,&amp;#039;border-left&amp;#039;,&amp;#039;1px solid #666&amp;#039;))&lt;br /&gt;
		bTabella:node(riga1):node(riga2)&lt;br /&gt;
	else&lt;br /&gt;
		bTabella:node(&lt;br /&gt;
			mw.html.create(&amp;#039;tr&amp;#039;)&lt;br /&gt;
				:node(mw.html.create(&amp;#039;td&amp;#039;)&lt;br /&gt;
					:attr(&amp;#039;colspan&amp;#039;,2*a-1)&lt;br /&gt;
					:css(&amp;#039;padding&amp;#039;,&amp;#039;0px 0px 2px 2px&amp;#039;)&lt;br /&gt;
					:wikitextIf(pers[pid].nota==&amp;#039;&amp;#039;,pers[pid].testo,pers[pid].testo..&amp;#039; - &amp;#039;..pers[pid].nota)&lt;br /&gt;
				)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
	if (pers[pid].sp &amp;gt; 0) then&lt;br /&gt;
		for _, v in pairs(pers[pid].figli) do&lt;br /&gt;
			mostraY2(v,a-1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
	mostraY2(pid,calcolaY(pid,0))&lt;br /&gt;
	return tostring(bTabella)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._lineage(args)&lt;br /&gt;
	local capo = -1&lt;br /&gt;
	local n1, n2&lt;br /&gt;
	local lato = args[&amp;#039;align&amp;#039;] or &amp;#039;center&amp;#039;&lt;br /&gt;
	local larg = args[&amp;#039;width&amp;#039;] or &amp;#039;300&amp;#039;&lt;br /&gt;
	local tipo = args[&amp;#039;show&amp;#039;] or &amp;#039;h&amp;#039;&lt;br /&gt;
	local dida = args[&amp;#039;caption&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	dividi(args)&lt;br /&gt;
	n1 = 0&lt;br /&gt;
	for i, v in pairs(pers) do&lt;br /&gt;
		n1 = n1+1&lt;br /&gt;
		if (v.padre == -1) then&lt;br /&gt;
			if (capo == -1) then&lt;br /&gt;
				capo = i&lt;br /&gt;
			else&lt;br /&gt;
				error(string.format(&amp;#039;Duplicated progenitor (id = %d, %d)&amp;#039;,capo,i))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if (v.padre == i) then&lt;br /&gt;
				error(string.format(&amp;#039;%d is parent of himself&amp;#039;, i))&lt;br /&gt;
			elseif (pers[v.padre]) then&lt;br /&gt;
				table.insert(pers[v.padre].figli,i)&lt;br /&gt;
			else&lt;br /&gt;
				error(string.format(&amp;#039;Erroneous parent id %d for row with id %d&amp;#039;,v.padre,i))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (capo == -1) then&lt;br /&gt;
		error(&amp;#039;Progenitor not found&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		n2 = organizza(capo, 1)&lt;br /&gt;
		if (n1 == n2) then&lt;br /&gt;
			if (tipo == &amp;#039;v&amp;#039;) then&lt;br /&gt;
				return mostraY(capo)&lt;br /&gt;
			elseif (tipo == &amp;#039;h&amp;#039;) then&lt;br /&gt;
				calcolaX1(capo)&lt;br /&gt;
				calcolaX2(capo)&lt;br /&gt;
				calcolaX3(capo, 0)&lt;br /&gt;
				return mostraX(capo, lato, larg, dida)&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;#039;Some elements are not linked to the progenitor&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.lineage(frame)&lt;br /&gt;
	local args = getArgs(frame, {&lt;br /&gt;
		valueFunc = function (key, value)&lt;br /&gt;
			if type(key) == &amp;quot;number&amp;quot; then&lt;br /&gt;
				if value == nil then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					value = mw.text.trim(value)&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				if value == &amp;#039;&amp;#039; then return nil end&lt;br /&gt;
            end&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return p._lineage(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;WOSlinker</name></author>
	</entry>
</feed>