<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mywikibiz.com/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://mywikibiz.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ALineage"/>
	<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Lineage&amp;action=history"/>
	<updated>2026-06-14T00:43:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://mywikibiz.com/index.php?title=Module:Lineage&amp;diff=472465&amp;oldid=prev</id>
		<title>Zoran: Pywikibot 6.4.0</title>
		<link rel="alternate" type="text/html" href="https://mywikibiz.com/index.php?title=Module:Lineage&amp;diff=472465&amp;oldid=prev"/>
		<updated>2021-07-15T23:32:43Z</updated>

		<summary type="html">&lt;p&gt;Pywikibot 6.4.0&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require('Module:No globals')&lt;br /&gt;
local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
local errorCategory = '[[Categoria:Errors reported by Module Lineage]]'&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 ''&lt;br /&gt;
	return string.format('&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;%s', 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('Duplicated id %d',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('Erroneous parent id %s for id %d',dati[m-2],nx))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			error(string.format('Erroneous id %s',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('Erroneous number of data %d (elementi in più: %d)',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 = { ['width'] = largo..'px', ['padding'] = '3px', ['background'] = '#FFF', ['border'] = '1px solid #C8CCD1' }&lt;br /&gt;
	local stileTabella = { ['border-collapse'] = 'separate', ['text-align'] = 'center', ['font-size'] = '95%', ['line-height'] = '105%', ['margin'] = '10px auto !important', }&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('div')&lt;br /&gt;
	if (allinea == 'right') then&lt;br /&gt;
		bDiv:css(stileDiv):addClass('floatright')&lt;br /&gt;
		stileTabella['margin'] = '0px auto !important'&lt;br /&gt;
	end&lt;br /&gt;
	local bTabella = mw.html.create('table')&lt;br /&gt;
		:css(stileTabella)&lt;br /&gt;
		:attr({['cellpadding']='1',['cellspacing']='0',['border']='0'})&lt;br /&gt;
	for n=1,xy[2] do&lt;br /&gt;
		local riga1 = mw.html.create('tr')&lt;br /&gt;
		local riga2 = mw.html.create('tr')&lt;br /&gt;
		local riga3 = mw.html.create('tr')&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('line-height','8px') end&lt;br /&gt;
		if (n&amp;lt;xy[2]) then riga3:css('line-height','8px') 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('td'):css('width',lg..'%'))&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				riga1:node(mw.html.create('td')&lt;br /&gt;
					:css('border-right','1px solid #000')&lt;br /&gt;
					:cssIf(n1 == xp,'border-top','1px solid #000')&lt;br /&gt;
					:attrIf(xx-posx[1]&amp;gt;0,'colspan',xx+1-posx[1])&lt;br /&gt;
					:wikitext('&amp;amp;nbsp;')&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('td')&lt;br /&gt;
					:attrIf(xx-posx[2]&amp;gt;1,'colspan',xx-posx[2])&lt;br /&gt;
					:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			riga2:node(mw.html.create('td')&lt;br /&gt;
				:attr('colspan','2')&lt;br /&gt;
				:wikitextIf(pers[v].nota=='-', pers[v].testo, string.format('%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;',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('td')&lt;br /&gt;
						:css('border-right','1px solid #000')&lt;br /&gt;
						:attrIf(xx-posx[3]&amp;gt;0,'colspan',xx+1-posx[3])&lt;br /&gt;
						:wikitext('&amp;amp;nbsp;')&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 == 'right' and not (dida=='')) then&lt;br /&gt;
		bDiv:node(mw.html.create('p')&lt;br /&gt;
			:css({['font-size'] = '87%', ['font-style'] = 'normal', ['border-top'] = '1px solid #c8ccd1', ['margin'] = '8px 2px 3px'})&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('table')&lt;br /&gt;
		:attr({['cellpadding']='0',['cellspacing']='0',['border']='0'})&lt;br /&gt;
		:css({['border-collapse']='separate',['text-align']='left',['margin']='10px 0 10px 16px'})&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('tr')&lt;br /&gt;
		local riga2 = mw.html.create('tr')&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('td')&lt;br /&gt;
				:attr('rowspan',2*spd))&lt;br /&gt;
			riga1:node(mw.html.create('td')&lt;br /&gt;
				:attr('rowspan',2*spd)&lt;br /&gt;
				:cssIf(pers[pers[pid].padre].id &amp;lt; #pers[pers[pers[pid].padre].padre].figli,'border-left','1px solid #666')&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
		riga1&lt;br /&gt;
			:node(mw.html.create('td')&lt;br /&gt;
				:css('width','6px'))&lt;br /&gt;
			:node(mw.html.create('td')&lt;br /&gt;
				:css({['border-left']='1px solid #666',['border-bottom']='1px solid #666',['width']='10px',['line-height']='3px',['height']='12px'}))&lt;br /&gt;
			:node(mw.html.create('td')&lt;br /&gt;
				:attr({['colspan']=2*a-1, ['rowspan']=2})&lt;br /&gt;
				:css('padding', '0px 3px 2px 1px')&lt;br /&gt;
				:wikitextIf(pers[pid].nota=='', pers[pid].testo, pers[pid].testo..' - '..pers[pid].nota))&lt;br /&gt;
		riga2&lt;br /&gt;
			:node(mw.html.create('td'))&lt;br /&gt;
			:node(mw.html.create('td')&lt;br /&gt;
				:css({['line-height']='8px',['line-height']='3px',['height']='12px'})&lt;br /&gt;
				:cssIf(pers[pid].id &amp;lt; #pers[pers[pid].padre].figli,'border-left','1px solid #666'))&lt;br /&gt;
		bTabella:node(riga1):node(riga2)&lt;br /&gt;
	else&lt;br /&gt;
		bTabella:node(&lt;br /&gt;
			mw.html.create('tr')&lt;br /&gt;
				:node(mw.html.create('td')&lt;br /&gt;
					:attr('colspan',2*a-1)&lt;br /&gt;
					:css('padding','0px 0px 2px 2px')&lt;br /&gt;
					:wikitextIf(pers[pid].nota=='',pers[pid].testo,pers[pid].testo..' - '..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['align'] or 'center'&lt;br /&gt;
	local larg = args['width'] or '300'&lt;br /&gt;
	local tipo = args['show'] or 'h'&lt;br /&gt;
	local dida = args['caption'] or ''&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('Duplicated progenitor (id = %d, %d)',capo,i))&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if (v.padre == i) then&lt;br /&gt;
				error(string.format('%d is parent of himself', 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('Erroneous parent id %d for row with id %d',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('Progenitor not found')&lt;br /&gt;
	else&lt;br /&gt;
		n2 = organizza(capo, 1)&lt;br /&gt;
		if (n1 == n2) then&lt;br /&gt;
			if (tipo == 'v') then&lt;br /&gt;
				return mostraY(capo)&lt;br /&gt;
			elseif (tipo == 'h') 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('Some elements are not linked to the progenitor')&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 == '' 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>Zoran</name></author>
	</entry>
</feed>