Saltu al enhavo

Modulo:Biografio/provejo2

El Vikipedio, la libera enciklopedio

Dokumentado por ĉi tiu modulo povas esti kreata ĉe Modulo:Biografio/provejo2/dokumentado

-- modulo Biografio, 2020-04-18
-- ĉi tiu modulo celas aranĝi la ŝablonon {{informkesto biografio}}, kiu konsistas el tri partoj:
-- enkonduka frazo
-- kategorioj
-- informkesto

local datoj = require("Modulo:Datoj")
local wikidata = require("Modulo:Wikidata")			-- bonvolu atenti, ke temas pri du malsamaj moduloj!
local wikidatoj = require("Modulo:WikidataBiografio")	-- bonvolu atenti, ke temas pri du malsamaj moduloj!
local listoj = require("Modulo:Listutil")
local bildoj = require("Modulo:InfoboxImage")
local prenubildon = require ("Modulo:Portalo").image
local informkesto = require("Modulo:Informkesto")
local ligiloj = require ("Modulo:Linkutil")
local signocheno = require("Modulo:String")

-- helpaj funkcioj
local function argumentoj(args, par)
		if par ~= "" and par ~= nil then
			local varianto = mw.ustring.gsub(par, "_", " ")   											-- ŝanĝo de _ el parametro al spaco
			local varianto2 = mw.ustring.upper(par)			  											-- ŝanĝo al majusklaj literoj
			local varianto3 = mw.ustring.upper(mw.ustring.sub(par, 1, 1)) .. mw.ustring.sub(par, 2)   	-- nur la unua litero fariĝas majusklo
			local r = args["" .. par] or args["" .. varianto] or args["" .. varianto2] or args["" .. varianto3] or ""
			if r ~= "" then
				return r
			end
		end		
end	

-- aldonaj parametroj por bildoj
local function bildargumentoj(args, par, parto)
	if par == "bildo" or par == "dosiero" or par == "flago" or par == "blazono" or par == "mapo" or par == "foto" or par == "portreto" then
		local r = ""
		if parto == "priskribo" then
			r = "priskribo de " .. par 
		elseif parto == "grandeco" then	
			r = "grandeco de " .. par
		end
		if r ~= "" then
			r = argumentoj(args,r)
			if r ~= "" and r ~= nil then
				return r
			end
		end	
	end
end	

-- Vikidatumaj helpaj funkcioj
-- transprenas vikidatuman eron, se ne temas pri bildo
local function wdparam(pk,wdid,ref)
			-- analizo, ĉu pk enhavas valoron.
			if pk ~= "" and pk ~= nil then
				local r, r2				
				if ref == "auto" then
					if wdid ~= "" and wdid ~= nil then
						-- r = shablonoref(pk,wdid) 	wikidata.claim({args={pk,id=wdid,references="jes"} })
						r, ref = wikidata.claim({args={pk,id=wdid,references="raw"} })					
					else	
						-- r = shablonoref(pk) 		wikidata.claim({args={pk,references="jes"} })						
						r, ref = wikidata.claim({args={pk,references="raw"} })	
					end
					if r ~= "" and r ~= nil then
						return r, ref
					end				
				else	
					if wdid ~= "" and wdid ~= nil then
						r = wikidata.claim({args={pk,id=wdid} })					
					else	
						r = wikidata.claim({args={pk} })	
					end
					if r ~= "" and r ~= nil then
						return r, ref
					end
				end	
			end 
end	

local function wdlink (id, pkodo)
	-- <span class="el_wd">[[:d:{{#invoke:Wikidata|pageId}}#P374|[+]]]</span>
	if pkodo ~= "" and pkodo ~= nil then
		local ligilo
		if id ~= "" and id ~= nil then
			ligilo = id
		else
			ligilo = wikidata.pageId({args = {} }) or ""
		end
		if ligilo then
			ligilo = ' <span class="el_wd">[[:d:' .. ligilo .. "#" .. pkodo .. '|[+]]]</span>'
		end
		return ligilo
	end	
end

-- por aldono de piednoto al teksto
local function notaldono(noto, param)
	if noto ~= "" and noto ~= nil then
		param = param .. "  ''" .. noto .. "''" -- aldonas noton kursive
		return param
	else
		return param
	end
end

-- por aldono de referenco
local function refaldono(referenco, param, refnomo, refnomodua)
	if (referenco ~= "" and referenco ~= nil) or (refnomo ~= "" and refnomo ~= nil) then
		local r
		local frame = mw.getCurrentFrame()
		if referenco ~= "" and referenco ~= nil then
			local strings= mw.text.split(referenco, "///", plain)
			local nombro = #strings
			if nombro > 1 then
				for k, ref in pairs(strings) do
				
					if refnomo ~= "" and refnomo ~= nil then
					if refnomodua ~= "" and refnomodua ~= nil then
					r = frame:extensionTag('ref', {name= refnomo } )
					else	
					r = frame:extensionTag('ref', ref, {name=refnomo} )
					end
					param = param .. r
					elseif ref ~= "" and ref ~= nil then
					r = frame:extensionTag('ref',  ref )
					param = param .. r
					end	
				end
				return param			
			end
		end
		if refnomo ~= "" and refnomo ~= nil then
			if refnomodua ~= "" and refnomodua ~= nil then
			r = frame:extensionTag('ref', {name= refnomo } )
			else	
			r = frame:extensionTag('ref', referenco, {name=refnomo} )
			end
			param = param .. r
			return param
		elseif referenco ~= "" and referenco ~= nil then
			r = frame:extensionTag('ref',  referenco )
			param = param .. r
			return param							
		end	
		
	else
		return param
	end
end	

-- tabelliniaj funkcioj

-- tabela kaplinio
-- titolo - teksto por la titola linio
-- fono - fona koloro 
-- v - varianto
-- wd - ĉu Vikidatuma ero?
local function tabelkapo(titolo, fono, v, wd, klaso, montrilo)

	if v == "caption" then
		-- por la html-etikedo "caption"	
		local colspan ='2'
		local tabelkapo = tabelo:tag('caption')
			:attr({colspan = colspan})
			:css(style)
			:wikitext(text)
			:done()		
	else
		-- por la html-etikedoj "tr" kaj "th"
		-- kaplinio	
		if klaso ~= "" and klaso ~= nil and type(klaso) == "string" then
			klaso = klaso
		else
			klaso = "kaplinio persono fn"
		end
		if wd == "jes" then
			klaso = klaso .. " wikidata-content"
		end
		local tabelkapo
		if montrilo ~= "" and montrilo ~= nil then
			tabelkapo = tabelo:tag('tr')
			:attr('title',montrilo)	
			:addClass('mergedtoprow')
		else
			tabelkapo = tabelo:tag('tr')			
		end
		-- kaplinia ĉelo
		local kapchelo = tabelkapo:tag('th')	
			:addClass(klaso)
			:attr('colspan','2')
			:css('color','#000')							
			:css('background-color',fono)
			:css('text-align','center')
			:css('font-family','Monotype Corsiva, serif')
			:wikitext(titolo)
			:done()
			:newline()				
	end
end	

-- tabela subtitilo
local function tabelsubtitolo(titolo, fono, montrilo)
	if titolo == nil then
		titolo = ""
	end
	local subtitolo1
	if montrilo ~= "" and montrilo ~= nil then
		subtitolo1 = tabelo:tag('tr')
			:attr('title',montrilo)	
			:addClass('mergedrow')
	else
		subtitolo1 = tabelo:tag('tr')		
	end
	if fono ~= "" and fono ~= nil then
		local titol1chelo = subtitolo1:tag('th')
			:css('background-color', fono)
			:css('border-top','1px solid ' .. fono)
			:css('border-bottom','1px solid ' .. fono)			
			:css('text-align','center')
			:attr('colspan','2')
			:wikitext(titolo)
			:done()
			:newline()	
	else	
		local titol1chelo = subtitolo1:tag('th')
			:css('text-align','center')
			:attr('colspan','2')
			:wikitext(titolo)
			:done()
			:newline()
	end
end	

-- bilda ĉelo por unuopa bildo
local function unuopabildo(bildo, wd)
		if bildo == nil then
			bildo = ""
		end
		if wd == "jes" then
			wd = "wikidata-content"	
		else
			wd = ""
		end	
		local bildo1 = tabelo:tag("tr")
		local bildchelo = bildo1:tag("td")
			:addClass(wd)
			:attr('colspan','2')
			:css('font-size','smaller')
			:css('text-align','center')
			:css('padding','0.4em 0.2em')
			:wikitext(bildo)		

end	

local function aldonulinion (c1, c2, wd)
	local tabellinio = tabelo:tag("tr")
	local chelo1 = tabellinio:tag("td")
		:wikitext("'''" .. c1 .. "'''")
		:done()
	if wd == "jes" then
		local chelo2 = tabellinio:tag("td")
			:addClass("wikidata-content")
			:wikitext(c2)
			:done()
			:newline()
	else
		local chelo2 = tabellinio:tag("td")
			:wikitext(c2)
			:done()
			:newline()
	end
end

-- unuopa ĉelo
-- c - enhavo de la ĉelo
-- v - varianto de ĉelo
-- wd - ĉu datoj el Vikidatuma ero
local function aldonuchelon (c, v, wd, montrilo)
		local t = ""
		local css_klaso = "mergedrow"
		if v == "titolo" then			
			t = "th"
		elseif v == "linio"	then
			t = "td"
			css_klaso = "mergedtoprow"
		else
			t = "td"
		end
		if montrilo == nil then
			montrilo = ""
		end		
		local tabellinio = tabelo:tag('tr')
				:attr('title',montrilo)
				:addClass(css_klaso)
		if wd == "jes"	 then
			wd = "wikidata-content"
		else
			wd = ""
		end	
			local chelo = tabellinio:tag(t)	
				:addClass(wd)
				:attr('colspan','2')
				:css('text-align','center')	
				:css('padding','0.4em 0.2em')
				:wikitext(c) 
				:done()
				:newline()			

end	

-- por landaj flagoj kun sekva teksto
local function flago(nomo)
			if nomo == "" or nomo == nil then 
				return 
			end
			local testo = ligiloj._chuligilo2(nomo)
			local ligilo = ""
			if testo == "ligu" then
				ligilo = "[[" .. nomo .. "]]"
			else
				ligilo = nomo
				nomo = ligiloj._delink(nomo)
			end
			local n = prenubildon{nomo} -- ne estu ronda krampo, ĉar estas importita funkcio
			
			if n ~= "Portal-puzzle.svg" and n ~= nil then
				n = "[[Dosiero:" .. n .. "|18px]]&nbsp;" .. ligilo
				return n
			else
				return ligilo
			end
			
end


-- rearanĝas la okupojn, traŝovante la unuopajn erojn tra alia helpa funkcio, se estas pli ol unu
-- alie faru kiel ĉe "okupo", "okupo2" kaj "okupo3"
-- "chu" stiras, ĉu la rekunigitaj listeroj jam estu traktataj de la modulo Listutil aŭ ne
local function okupoanalizo(okupoj,chu)
	local o = ""
	local n = listoj._count(",",okupoj)
	if n > 1 then
		local strings = mw.text.split(okupoj, ",", plain)
		for k,v in pairs(strings) do
			local listero = ""
			if ligiloj._chuligilo1(v) then
				listero = "[[" .. v .. "]]"
			else
				listero = v
			end
			if k > 1 then
				o = o .. "," .. listero
			else
				o = listero
			end
		end
		if chu ~="ne" then
			o = listoj._list(",",o,"jes","kaj")
		end
	else
		-- analizo, ĉu jam estas ligilo. se jes, ŝanĝu nenion.
		if ligiloj._chuligilo1(okupoj) then
			o = "[[" .. okupoj .. "]]"
		else
			o = okupoj
		end
	end
	return o
end

local function okupokategorio (shtato, okupo,t)
	if shtato ~= "" and shtato ~= nil then
		local frame = mw.getCurrentFrame()
		local r = frame:expandTemplate{
			title="Informkesto biografio/Kategorio",
			args={
				shtato,
				okupo
			}
		}
		if t ~="" then
			r = mw.ustring.gsub(r,"%[%[Kategorio:","[[:Kategorio:")
		end
		return r
	else
		return ""
	end
end

local function shtatadjektivo (shtato)
	local frame = mw.getCurrentFrame()
	local st = frame:expandTemplate{
		title = "Informkesto biografio/Ŝtatlisto",
		args = {
		shtato,
		}
	}
	return st
end

local function vivtempo (ordigo, naskjaro, mortjaro,t)
	local frame = mw.getCurrentFrame()
	local n = frame:expandTemplate{
		title="Vivtempo",
		args = {
			ordigo,
			naskjaro,
			mortjaro
		}
	}
	-- la alia modulo ŝajnas esti iomete "stulta" :-(
	if mortjaro ~= "" and mortjaro ~= nil then
		n = mw.ustring.gsub(n,"%[%[Kategorio:Vivantaj homoj%]%]","")
	end
	if t ~="" then
		n = mw.ustring.gsub(n,"%[%[Kategorio:","[[:Kategorio:")
	end
	return n
end

local function etmajuskloj (teksto)
	local frame = mw.getCurrentFrame()
	local n = frame:expandTemplate {
		title="etmajuskloj",
		args = {
		teksto
		}
	}
	return n
end

local function monato (m)
	local frame = mw.getCurrentFrame()
	local n = frame:expandTemplate {
		title="monato",
		args = {
		m
		}
	}
	return n
end

-- malkomponilaj funkcioj
-- formatigi numeron
function formatnum(numero)
			local frame = mw.getCurrentFrame()	
			local n = tonumber(numero)
			if n ~= nil then
				local r = frame:callParserFunction( "formatnum", n )
				return r
			end	
end	

local function paghenamebase ()
	local frame = mw.getCurrentFrame()
	local n = frame:expandTemplate {
		title="PAGENAMEBASE",
	}
	return n
end

-- alvoko de informkestera ŝablono
local function kestero(teksto, etikedo, fono, shtopado)
		local frame = mw.getCurrentFrame()
		
		local r = frame:expandTemplate {
			title='Ŝablono:Informkesto/+/html',
			args = {
				linisalto='jes',
				['titola koloro']='neniu',
				['koloro alt']=fono,
				fono=fono,				
				teksto=teksto,
				etikedo=etikedo,
				['ŝtopado']=shtopado
			}
		}
		return r
end	

-- anstataŭu ion
local function anstatau(teksto, serchu, metu)
		local frame = mw.getCurrentFrame()
		
		local r = frame:expandTemplate {
			title='Ŝablono:Anstataŭu',
			args={
				teksto,
				serchu, 
				metu
			}
		}
		return r

end	

local p = {}

-- spaco por enkonduko kaj kategorioj



local function kesteroj(nomo, trajto, k)
				if trajto == 'ĉelo' then
					tabelo:wikitext('<tr><td colspan="2" style="padding:0"><div>\n')
					if k == 'kaŝu' then
						tabelo:wikitext('{| class="collapsible collapsed" style="width:23em"\n')					
					else
						tabelo:wikitext('{| style="width:23em"\n')
					end
					tabelo:wikitext('|-\n')
				end
				--tabelo:wikitext('\n<nowiki/>\n')
					tabelo:wikitext('\n\n')						
					tabelo:wikitext(nomo)	
				if trajto == 'ĉelo' then
					tabelo:wikitext('\n\n|}\n')
					tabelo:wikitext('\n</div></td></tr>')
				end		
end	

-- rigardas al la Vikidatuma ero, ĉu iu havas indikon pri Esperanto en P1412.
local function chuesperanto(id)
		local frame = mw.getCurrentFrame()	
		local r = frame:expandTemplate{
			title="Ĉuesperanto",
			args={
				wdid=id
			}
		}
		return r
end	

-- funkcio por la informkesta parto, iom post iom kompletigota
function p.informkesto (frame)
	-- This function builds the infobox used by the {{informkesto biografio}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	local args = getArgs(frame, {wrappers = "Ŝablono:Informkesto biografio"})

	-- analizo de la nomspaco
    currentTitle = mw.title.getCurrentTitle()
    local ns   = currentTitle.namespace


    local wdidstirilo = true

-- klaso por la tuta tabelo, aldonata post "infobox"
	local klaso = args['klaso'] or args['Klaso'] or "infobox vcard"
	local titolklaso = args['titolklaso'] or args['Titolklaso'] or "kaplinio persono fn"	
	local tipo = args[1] or ""
	if tipo ~= "" then
		tipo = mw.ustring.lower(tipo)
	end	
	
-- vikidatuma id	
	-- helpa parametro por testoj de valoroj el Vikidatumoj
	local wdid  
	if wdidstirilo == true then
		wdid = args['wd']
	end
	
	-- formatoj
	local fono = args['fono'] or args['Fono'] or ""
	local fono2 = args['fono2'] or args['Fono2'] or "#efefef"
	if fono == "" then 
		fono = "#DDDDFF"
	end
	local testo = chuesperanto(wdid)
	if testo ~= '0' then
		fono = '#090'
		titolklaso = "kaplinio stelo fn"
	end
	
	local shablono
	-- parametro kun nomo de la ŝablono
	if (args['ŝablono'] ~= "" and args['ŝablono'] ~= nil) or (args['Ŝablono'] ~= "" and args['Ŝablono'] ~= nil) then
		shablono = args['ŝablono'] or args['Ŝablono']
	else
		shablono = "Informkesto biografio"
	end

	-- pliaj variabloj
	local r = ""
	-- ĉu io estas el Vikidatuma ero aŭ ne., ebla valoro estas "jes"
	local wdj = ""
	-- por la enkonduka teksto
	local teksto = ''	
	local nasko_teksto = ''
	local morto_teksto = ''
	local okupo_teksto = ''
	local d = ''
	local vn = "" -- vera nomo kun indiko pri tio
	local estas = "estas"
	
	-- komenco de la tabelo
	local titolo = args["titolo"] or args["Titolo"] or args["nomo"] or args["Nomo"] or "" -- pliaj variantoj aldoneblas
	if titolo == "" then
		titolo = paghenamebase ()
	end
	
	-- nomoj
	local antaunomo = args["Antaŭnomo"] or args["antaŭnomo"] or ""
	local familinomo = args["Familinomo"] or args["familinomo"] or ""
	local postnomo = args["Postnomo"] or args["postnomo"] or ""	

	-- ceteraj variabloj
	local r = ""
	local spaco = "&#32;"
	local fn1 = '<span style="text-transform:uppercase">'
	local fn2 = "</span>"
	local br = "<br/>"
	
	-- nomoj
	local nomo = ""
	local nomo2 = "" -- por la enkonduko
	if antaunomo ~="" then
		nomo = antaunomo .. spaco
	end
	if familinomo ~="" then
		nomo = nomo .. fn1 .. familinomo .. fn2
	end
	if postnomo ~= "" then
		--ne shanghu la sinsekon de la du sekvaj linioj!
		nomo2 = nomo .. spaco .. postnomo		
		nomo = nomo .. br .. spaco .. postnomo
	end
	
	if nomo ~= "" and nomo ~= nil then
		titolo = nomo
	end
	if nomo2 ~= "" and nomo2 ~= nil then
		titolo2 = nomo2
	elseif nomo ~= "" and nomo ~= nil then
		titolo2 = nomo 
	else
		titolo2 = titolo
	end	

	-- por la enkonduka teksto
	local prononco = args["Prononco"] or ""
	local postfamilinomo = args["PostFamilinomo"] or ""
	local aliajlingvoj = args["AliajLingvoj"] or ""

	-- datoj
	local nasktago = args["NaskiĝTago"] or ""
	local naskmonato = args["NaskiĝMonato"] or ""
	local naskjaro = args["NaskiĝJaro"] or ""
	local morttago = args["MortTago"] or ""
	local mortmonato = args["MortMonato"] or ""
	local mortjaro = args["MortJaro"] or ""
	local mortodato = args["Mortodato"] or args["Mortdato"] or args["Dato de morto"] or ""


	-- okupoj
	local antauokupo = args["AntaŭOkupo"] or ""
	local okupoj = args["Okupoj"] or ""
	local okupo = args["Okupo"] or ""
	local okupo2 = args["Okupo2"]	or ""
	local okupo3 = args["Okupo3"]	or ""
	local aliajokupoj = args["AliajOkupoj"] or ""
	local postokupo = args["PostOkupo"] or ""
	
	-- por la kategorioj
	local ordigilo = args["Ordigo"] or ""
	local ordigu = args["Ordigu"] or ""
	local test = args["Testo"] or ""
	
	-- ceteraj variabloj por la kategorio
	local kategorio = ""
	local okat = ""
	local spaco = "&#32;"
	local tk = ""
	if test == "yes" or test == "jes" or ns ~= 0 then
		tk = ":"
	end	
	local shtato = ''

-- el la malnova modulo
	-- okupoj
	local o = ""
	local n = 1 -- nombro de okupoj, ĉar de tio dependas la teksto en la tabelo

	if okupoj ~="" then
		if aliajokupoj ~= "" then
			okupoj = okupoj .. "," .. aliajokupoj
		end
		n = listoj._count(",",okupoj)
		o =  okupoanalizo(okupoj)
	elseif okupo ~= "" or okupo2 ~= "" or okupo3 ~= "" or aliajokupoj ~= ""  then
		local okupoj = ""
		if okupo ~="" then
			local o1 = okupo
			if ligiloj._chuligilo1(okupo) then
				o1 = "[[" .. o1 .. "]]"
			end
			okupoj = o1
		end
		if okupo2 ~="" then
			local o2 = okupo2
			if ligiloj._chuligilo1(okupo2) then
				o2 = "[[" .. o2 .. "]]"
			end
			okupoj = okupoj .. "," .. o2
		end
		if okupo3 ~="" then
			local o3 = okupo3
			if ligiloj._chuligilo1(okupo3) then
				o3 = "[[" .. o3 .. "]]"
			end
			okupoj = okupoj .. "," .. o3
		end
		if aliajokupoj ~="" then
			local o_a = okupoanalizo(aliajokupoj,"ne")
			okupoj = okupoj .. "," .. o_a
		end
		if okupo ~= "" or okupo2 ~= "" or okupo3 ~= "" or aliajokupoj ~= "" then
			n = listoj._count(",",okupoj)
			if n > 1 then
				o = listoj._list(",",okupoj,"jes","kaj","","jes") -- disiga signo, ĉitiea variablo, modo, limsigno (ĉikaze ne uzata), linisalto
			else
				o = okupoj
			end
		end
	else
		-- okupoj el Vikidatumoj
		local wdo = wikidatoj.okupo()
		if wdo ~= nil then
			n = listoj._count(",",wdo)
			o = listoj._list(",",wdo,"jes","kaj","","jes")
			wdj = "jes" -- ne estu "local" ĉi tie, ĉar alie ne funkcios ekster ĉi tiu else-bloko
		end
	end

local va = true -- ĉu viva?
	if naskjaro ~= "" and mortjaro ~="" then
		-- naskiĝdato
		local nj = naskjaro
		local nm = "januaro"
		if naskmonato ~= "" then
			nm = naskmonato
		end
		local nm = monato(nm)
		local nt = "1"
		if nasktago ~= "" then
			nt = nasktago
		end
		-- mortodato
		local mj = mortjaro
		local mm = "januaro"
		if mortmonato ~= "" then
			mm = mortmonato
		end
		local mm = monato(mm)
		local mt = "1"
		if morttago ~= "" then
			mt = morttago
		end
		--a = agho (nj,nm,nt,mj,mm,mt,ordigo)
		-- la funkcio prefere estu en la modulo Datoj kaj tial estas nun enplektita de tie
		if ordigo ~= "" and ordigo ~= nil then
			a = datoj._agho(nt,nm,nj,mt,mm,mj,"","",ordigo)
		else
			a = datoj._agho(nt,nm,nj,mt,mm,mj,"","",'')			
		end
		va = false
	elseif naskjaro ~= "" and mortjaro == "" then
		-- naskiĝdato
		local nj = naskjaro
		local nm = "januaro"
		if naskmonato ~= "" then
			nm = naskmonato
		end
		local nm = monato(nm)
		local nt = "1"
		if nasktago ~= "" then
			nt = nasktago
		end
		--a = agho (nj,nm,nt,"","","",ordigo)
		-- nun la funkcio troviĝas en la modulo Datoj, ĉar tio estas pli taŭga modulo por ĝi
		if ordigo ~= nil and ordigo ~= "" then
			a = datoj._agho(nt,nm,nj,"","","","","",ordigo)
		else
			a = datoj._agho(nt,nm,nj,"","","","","","")			
		end
	else
		a = wikidatoj.agho()
		local test = wikidatoj.vivanta()
		if test == 1 then
			va = false
		end
		if a == nil then
			a = ""
		end
	end

-- pliaj variabloj 
local portalo = false
	
-- ekuzi submodulojn por la informkesta strukturo
	local submodulo = args['submodulo'] or args['Submodulo'] or "homo"	
	if args['subŝablono'] ~= "jes" and args['Subŝablono'] ~= 'jes' then
			-- la variablo "tabelo" ne povas esti local, ĉar alie ĝia uzo en subŝablono ne funkcias		
			tabelo = mw.html.create("table")
				:addClass(klaso)
				:css('width','23em')
				:css("font-size","89%")
				:css('-moz-box-shadow', '4px 4px 4px #CCC')
				:css('-webkit-box-shadow', '4px 4px 4px #CCC')
				:css('box-shadow', '4px 4px 4px #CCC')
				:newline()	
			--tabelkomenco(klaso)
			-- wd poste estos aranĝata
			tabelkapo(titolo, fono, "", wd, titolklaso, montrilo)
			
	else
			-- la variablo "tabelo" ne povas esti local, ĉar alie ĝia uzo en subŝablono ne funkcias		
			tabelo = mw.html.create()
	end		
	
	
	-- loko por la enhavo

	-- posttitola parto de la informkesto
	local variabloj = 'Modulo:Biografio/' .. submodulo
	local parametroj = mw.loadData(variabloj)
	local listo = parametroj.linioj
	local noto = parametroj.noto or ""
	local referenco = parametroj.referenco or ""
	if type(listo) == "table" then
		-- testo
		local s
		local par, t, pk, pk2, a1, a2, pri, pri2, iso, lig
		for k, v in pairs(listo) do
			
			if type(v) == "table" then
				par = v["parametro"] 
				par_a = v['parametro_a']
				par_b = v['parametro_b']				
				par2 = v["parametro2"] 
				par2_a = v['parametro2_a']
				par2_b = v['parametro2_b']				
				t = v["tipo"]
				pri = v["priskribo"]		
				pri2 = v["priskribo2"]	
				pk = v["pkodo"]	
				pk2 = v["pkodo2"]		
				a1 = v["aldono1"] 
				a1_a = v["aldono1_a"]
				a2 = v["aldono2"]
				a2_a = v["aldono2_a"]
				lig = v["ligilo"]
				grupanoj=v["grupanoj"]
				listeroj=v["listeroj"]	
				montrilo=v["montrilo"] 
				defmontrilo=v["defmontrilo"]	
				fonkoloro = v["fono"]
				tt = v["teksto"]
				-- por la finaĵo de bildo. laŭ la ĝisnuna trajto.
				suf = v["sufikso"]
				suf2 = v["sufikso2"]	
				-- por kaŝado kaj aliaj ruzaĵoj
				kondicho = v["kondicho"]
				
				-- voki la parametron el args
				par = tostring(par)
				-- local param = args[par]	or ""			
				local param = argumentoj (args, par) or argumentoj(args, par_a) or argumentoj(args, par_b)
				local param2
				if par2 ~= "" and par2 ~= nil then
					param2 = argumentoj(args,par2) or argumentoj(args, par2_a) or argumentoj(args, par2_b)
				end
				
				-- por notoj
				local noto2
				if noto == "_noto" then
					noto2 = par .. noto						-- kunigas parametrajn nomojn, ne valorojn
				elseif noto == "noto por " then
					noto2 = noto .. par						-- kunigas parametrajn nomojn, ne valorojn
				end
				local notovaloro = argumentoj(args,noto2)	-- transprenas la valoron el la ŝablono
				-- por referencoj
				local referenco2, referenco2a, referenco2b
				if referenco == "_referenco" then
					referenco2 = par .. referenco			-- kunigas parametrajn nomojn, ne valorojn
					referenco2a = referenco2 .. "_nomo"
					referenco2b = referenco2 .. "_nomo-dua"					
				elseif referenco == "referenco por " then
					referenco2 = referenco .. par			-- kunigas parametrajn nomojn, ne valorojn
					referenco2a = referenco2 .. "-nomo"
					referenco2b = referenco2 .. "-nomo-dua"						
				end
				local referencovaloro = argumentoj(args,referenco2)		-- transprenas la valoron el la ŝablono
				local referenconomo = argumentoj(args,referenco2a)		-- transprenas la valoron el la ŝablono				
				local referenconomodua = argumentoj(args,referenco2b)	-- transprenas la valoron el la ŝablono					
					
					
					if t == "subtitolo" then  -- ankoraŭ devas resti
	-------------------- SUBTITOLO ---------------------------------------------		
						local kon = argumentoj(args, kondicho)
						if args['subŝablono'] ~= "jes" and kon ~= 'jes' then
							if param ~= "" and param ~= nil then
							tabelsubtitolo(param, fono, montrilo)
							end
						end		

				elseif t == 'subtitolo2'	then
	----------------------------------------------------------------------------
						local kon = argumentoj(args, kondicho)	
						if param ~= "" and param ~= nil and kon ~= 'jes' then
							local r = kapo_param
							if a1 ~= "" and a1 ~= nil then
								local nombro = tonumber(a1)
								if nombro ~= nil then
									for i=1, nombro do
										local titolo = par .. i
										local st = argumentoj(args, titolo) or ""
										if st ~= "" then
											r = r .. ', ' .. st
										end
									end	
								end
							end
							tabelsubtitolo(r,fono, montrilo)
						end	



					elseif t == "subtitolo3" then
		----------------- SUBTITOLO KUN TEKSTO -------------------------------------------------------------------------------------------
		--					bonvolu atenti, ke la defaŭlta teksto estas difinata en priskribo, ne en parametro
		--					parametro nur povas anstataŭigi ĝin
						if pri ~= "" and pri ~= nil then
								if param ~= "" and param ~= nil then
									pri = param
								end
								if grupanoj ~= "" and grupanoj ~= nil then
									local nombro = #grupanoj
									-- la disiga signaro estas ///
									local string = mw.text.split(grupanoj, "///", true)
									-- helpa parametro por eviti pli ol unu strion
									local n = 1						
									if shablono == "Informkesto biografio" then
										fono2 = args['fono']
										if fonkoloro ~= "" and fonkoloro ~= nil then
											fono2 = fonkoloro
										end
									elseif v["koloro"] == "cheftitolo" then
										fono2 = fono
									end
									for k, v in pairs(string) do
										local testo = argumentoj(args,v)
										-- aldono por Informkesto urbo kaj similaj ŝablonoj
										if v == "situo sur mapo" and (testo == "" or testo == nil) then
											testo = argumentoj(args,"regiono-ISO")
										elseif v == "koordinatoj" and (testo == "" or testo == nil) then	
											lat, lon = koordargumentoj(args,"situo")
											if lat and lon then
												testo = "jes"
											else
												lat = argumentoj(args,"latitudo")
												lon = argumentoj(args,"longitudo")
												if lat and lon then
													testo = "jes"
												end
											end
										elseif testo == "" or testo == nil then
											local chupkodo = mw.ustring.match(v,"P[0-9]*([0-9])")  --analizo, ĉu estas pkodo 
											if chupkodo ~= nil then
												testo=wdparam(v,wdid)
		
											end
										end
										if testo ~= "" and testo ~= nil and n == 1 then
											tabelsubtitolo(pri, fono2, montrilo)
											n = n +1
										end
									end
								end
								
							end

					elseif t == "bildo" then
	---------------- BILDO ------------------------------------------------------------------------------------------------------------
						-- bilda parto -- bildo estas malaperigebla per certaj valoroj
						-- komunaj variabloj
						local priskribo = argumentoj(args, a1) or argumentoj(args, a1_a) or bildargumentoj(args, par, "priskribo") or bildargumentoj(args, par_a, "priskribo")
						local grando = argumentoj(args, a2) or argumentoj(args, a2_a) or bildargumentoj(args, par, "grandeco") or bildargumentoj(args, par_a, "grandeco")					
						local grupo = argumentoj(args, a3) or argumentoj(args, a3_a)
						if param ~= "" and param ~= nil and param ~= "ne" and param ~= "neniu" then
								local fino = argumentoj(args, suf) or argumentoj(args, suf2)
							-- local bildo = bildoj.InfoboxImage({args={image=param,size=args[a2],sizedefault="frameless",center="yes", caption=args[a1]} })
	
							local bildo = bildoj.InfoboxImage({args={image=param,size=grando,ending=fino,endingdefault='jpg',sizedefault="frameless",center="yes", caption=priskribo} })
							unuopabildo(bildo)
						elseif param ~= "ne" and param ~= "neniu" then
							if pK ~= "" and lucky_bildo then
								-- {{#invoke:Wikidata/bildoj|bildoj|priskribo de bildoj={{{priskribo de bildoj|}}}|priskribo de bildo={{{priskribo de bildoj|{{{bildo-priskribo|}}}}}}}}
								-- local bildo = wikidataBildo.bildoj({args={grandeco=args[a2],["defaŭlta grandeco"]="frameless",["priskribo de bildoj"]=args[a1]} })
								local bildo
								if wdid ~= "" and wdid ~= nil then
									bildo = wikidataBildo.bildoj({args={grandeco=grando,["defaŭlta grandeco"]="frameless",["priskribo de bildoj"]=priskribo,pkodo=pk, pkodo2=pk2,id=wdid, tabelo=args, grupo=grupo} })							
								else	
									bildo = wikidataBildo.bildoj({args={grandeco=grando,["defaŭlta grandeco"]="frameless",["priskribo de bildoj"]=priskribo,pkodo=pk, pkodo2=pk2, tabelo=args, grupo=grupo} })
								end
								if bildo then
									unuopabildo(bildo,"jes")
								end		
							end
						end				


					elseif t == "teksto" or t == "numero" or t == "loĝantaro" or t == "ekde" or t == "situo" or t == 'loko' then
	---------------- TEKSTO - do duĉela teksto kun priskribo aŭ unuĉela sen priskribo --------------------------------------------------------------------------
						-- komuna parto de la priskribo
							local a2a
							if pri ~= "" then
								a1a = argumentoj(args,a1) or argumentoj(args,a1_a)
								if a1a ~= "" and a1a ~= nil then
									pri = a1a
								end
								if v['sub'] == 1 then
									pri = " - " .. pri
								end
									a2a = argumentoj(args,a2) or argumentoj(args,a2_a)
								if a2a ~= "" and a2a ~= nil then
									if t == "ekde" then	
										if a3 ~= "" and a3 ~= nil then
											local a3a = argumentoj(args,a3) or argumentoj(args,a3_a)
											if a3a ~= "" and a3a ~= nil then
												a3a = " ĝis " .. a3a
												pri = pri .. " (ekde " .. a2a .. a3a .. ")"	
											else
												pri = pri .. " (ekde " .. a2a .. ")"	
											end
										else
											pri = pri .. " (ekde " .. a2a .. ")"									
										end
									end
								end
							end
						if v['kondicho'] ~= "" and v['kondicho'] ~= nil and (param == "" or param == nil) then
							local kondicho = v['kondicho']
							local strings = mw.text.split(kondicho, "///", plain)	
							for k, v in pairs(strings) do
								local testo = argumentoj(args,v)
								if testo ~= "" and testo ~= nil then
									param = "&nbsp;"
									break
								end
							end
							
						end
						-- pliaj informoj pri situo
						local situo2 = ""
						if situo ~= "" and situo ~= nil and t == "situo" then
							local strings = mw.text.split(situo, "///", plain)
							local n = 1      -- nombro de tiaj parametroj en artikolo
							for k, v in pairs(strings) do
								local situoinformo = argumentoj(args,a2 .. "_" .. v)
								if situoinformo ~= "" and situoinformo ~= nil then
									if n == 1 then
										situo2 = situo2 .. situoinformo
									else
										situo2 = situo2 .. ", " .. situoinformo
									end
									n = n + 1
								end
							end
						end
						
						-- se parametro estas en la artikolo
						if param ~= "" and param ~= nil then
							-- por naskiĝloko kaj mortoloko
							if t == 'loko' then
								-- ligilo al artikolo malsamas al legebla ligiloteksto
								local l = argumentoj(args, lig)
								-- savu la nomon de loko por pli posta uzo
								local l2 = param
								if l ~= "" and l ~= nil then
										param = "[[" .. l .. "|" .. l2 .. "]]"
									else
										local l = listoj._count(",",l2)
										if l > 1 then
											param = listoj._list(",",l2, "jes", "span", ",", "", "", "", 0, "")
										else
											param = "[[" .. l2 .. "]]"
										end
								end
								-- por la enkonduka teksto
								if tt == 'nasko_teksto' then
									if nasko_teksto == '' then
										nasko_teksto = 'naskiĝis '
									end
									nasko_teksto = nasko_teksto .. " en " .. param
								elseif tt == 'morto_teksto'	then
									if morto_teksto == '' then
										morto_teksto = 'mortis '
									end									
									morto_teksto = morto_teksto .. " en " .. param	

								end
								
							end
							-- pliaj variantoj
							if tt == 'vn' then
								vn = "&#059; vera nomo " .. param
							elseif tt == 'ŝtato' then
								local testo = ligiloj._chuligilo2(param)
								if testo == 'ligu' then
									shtato = param	
									param = '[[' .. param .. ']]'
								else
									shtato = ligiloj._delink(param)
								end
							end

							if t == "numero" or t == "loĝantaro" then       -- se estas numero aŭ nombro de loĝantoj, laŭ la subŝablona tabelo, tiam formatigu tiel
								local n = tonumber(param)
								if n ~= nil then
									param = formatnum(param) 
								else
									nenumero = true							 -- aktivigas zorgigan kategorion
								end
							end
							if a2a ~= "" and a2a ~= nil then
								if t == "loĝantaro" then
									param = param .. " <small>(" .. a2a .. ")</small>"
								elseif t ~= "situo" then
									if v["prefikso"] ~= "" and v["prefikso"] ~= nil then
										a2a = v["prefikso"] .. a2a
									end
									param = param .. " (" .. a2a .. ")"										
								end						
							end
							if situo2 ~= "" then
								param = param .. ", " .. situo2
							end
								param = notaldono(notovaloro,param, a2)
								param = refaldono(referencovaloro,param, referenconomo, referenconomodua)							
							if pri ~= "" and pri ~= nil then	
								aldonulinion(pri,param, "", "", montrilo)							
							else
								aldonuchelon(param, "", "", montrilo)							
							end
						else
							-- ĉu vikidatuma ero ekzistas
							local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)	
							if wd ~= "" and wd ~= nil and wd ~= 'sen valoro' and wd ~= "nekonata valoro" then
									local ligilo = wdlink (wdid, pk) or ""
									if t == "numero" or t == "loĝantaro" then
										wd = formatnum(wd) or wd
									end
									if tt == 'nasko_teksto' then
										nasko_teksto = nasko_teksto .. ' en [[' .. wd .. ']]'
									elseif tt == 'morto_teksto'	 then
										morto_teksto = morto_teksto .. ' en [[' .. wd .. ']]'										
									end
									wd = notaldono(notovaloro,wd, a2)
									wd = refaldono(referencovaloro,wd, referenconomo, referenconomodua)	
									wd = wd .. ligilo	
								if t == "loĝantaro" then
									-- {{#invoke:Wikidata|claim|P1082|id=Q64|qualifier=P585}}
									local wda2
									-- Veruko por ne afisxi K.E.
									if wdid ~= "" and wdid ~= nil then
										wda2 = wikidata.claim({args={pk,qualifier=pk2,id=wdid} })								
									else	
										wda2 =  wikidata.claim({args={pk,qualifier=pk2} })
									end
									if wda2 ~= "" and wda2 ~= nil then
										-- forigi K.E. el la teksto, sed ankaŭ la antaŭa spaco estu forigita
										wda2 = mw.ustring.gsub( wda2, " K%.E%.", "")
										wd = wd .. " <small>(" .. wda2 .. ")</small>"
									end
									-- fino de la veruko
								else
									if a2a ~= "" and a2a ~= nil then
										wd = wd .. " (" .. a2a .. ")"
									end	
								end
								-- wd = notaldono(noto,par, wd, args,a2,pk,wdid)	
								if pri ~= "" and pri ~= nil then	
									aldonulinion(pri,wd,"jes", "",montrilo)								
								else
									aldonuchelon(wd,"", "jes", montrilo)							
								end							
	

							end
	
						end					
					elseif t == "teksto1" then	
	---------------- TEKSTO1 - do unuĉela teksto kun priskribo -------------------------------------------------------------------------
							-- komuna parto kun priskribo
							local p = pri or ""
							if p ~= "" then
								p = "<b>" .. p .. "</b>: "
							end					
						-- se parametro estas en artikolo
						if param ~= "" and param ~= nil then
	
							local p2 = p .. param
							p2 = notaldono(notovaloro,p2)
							p2 = refaldono(referencovaloro,p2, referenconomo, referenconomodua)							
							aldonuchelon(p2,"", "", montrilo)
							
						else
							-- ĉu estas vikidatuma ero
							local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)
							if wd ~="" and wd ~= nil then
								local ligilo = wdlink (wdid, pk) or ""
								local p2 = p .. wd							
								p2 = notaldono(notovaloro,p2)
								p2 = refaldono(referencovaloro,p2, referenconomo, referenconomodua)								
								p2 = p2 .. ligilo
								aldonuchelon(p2,"","jes", montrilo)							
							end
							
						end
					elseif t == "portalo" then	
	---------------- PORTALO - rilata portalo -------------------------------------------------------------------------
						if param ~= "" and param ~= nil then
							local bildo = "[[Dosiero:Portal.svg|15px]]"
							param = "&nbsp;<b>[[Portalo:" .. param .. "|" .. param .. "]]</b>"
							local p2 = bildo .. param
							aldonuchelon(p2, "", "", montrilo)
							portalo = true
						end

					elseif t == "listo" then
		---------------- LISTO --------------------------------------------------------------------------------------------------------------
							-- Listecaj parametroj
							if param ~= "" and param ~= nil then
								local c1 = pri
								local f = false   	-- ne pluralo
								local div = false	-- neniu faldado
								local nombro = 15
								if listeroj ~= "" and listeroj ~= nil then
									local l = tonumber(listeroj)
									if l ~= nil then
										nombro = l
									end
								end
								local n = 1
								local chuflago
								if a3 ~= "" and a3 ~= nil then
									chuflago=argumentoj(args,a3)
								end
								if chuflago ~= "" and chuflago ~= nil then
									param = flago(param)
								end					
								-- analizo, ĉu jam estas ligilo en la listero. se ne, aldonu ĝin.
								local testo = ligiloj._chuligilo2(param)
								if testo == "ligu" then
									param = "[[" .. param .. "]]"
								end
								if v["prefikso"] ~= "" and v["prefikso"] ~= nil and a2 ~= "" and a2 ~= nil then
									local a2a = argumentoj(args,a2)
									if a2a ~= "" and a2a ~= nil then
										a2a = v["prefikso"] .. a2a
										param = param .. " (" .. a2a .. ")"
									end
								end							
								param = notaldono(notovaloro,param)
								param = refaldono(referencovaloro,param, referenconomo, referenconomodua)							
								for i=1, nombro do
									local c2 = args["" .. v["parametro"] .. i] or ""
									if c2 ~= "" and c2 ~= nil then
										if chuflago ~= "" and chuflago ~= nil then
											c2 = flago(c2)
										else
											-- analizo, ĉu jam estas ligilo en la listero. se ne, aldonu ĝin.									
											local testo = ligiloj._chuligilo2(c2)
											if testo == "ligu" then
												c2 = "[[" .. c2 .. "]]"
											end
										end
										local noto2 
										if noto == "_noto" then
											noto2 = par .. i .. noto
										elseif noto == "noto por " then
											noto2 = noto .. par .. i
										end
										local notovaloro = argumentoj(args,noto2)
										local referenco2, referenco2a, referenco2b
										if referenco == "_referenco" then
											referenco2 = par .. i .. referenco
											referenco2a = referenco2 .. "_nomo"
											referenco2b = referenco2 .. "_nomo-dua"									
										elseif referenco == "referenco por " then
											referenco2 =  referenco .. par .. i
											referenco2a = referenco2 .. "-nomo"
											referenco2b = referenco2 .. "-nomo-dua"									
										end
										local referencovaloro = argumentoj(args,referenco2)
										local referenconomo = argumentoj(args,referenco2a)								
										local referenconomodua = argumentoj(args,referenco2b)
										c2 = notaldono(notovaloro,c2)
										c2 = refaldono(referencovaloro,c2,referenconomo,referenconomodua)
										param = param .. ";;;" .. c2
										f = true
										n = n + 1
									end
								end
								if n > 1 then
									local chufaldi = argumentoj(args,a2)
									local chufaldiN = tonumber(chufaldi)	
									if chufaldiN == 1 or chufaldi == "faldo" then
										param = n .. ";;;" .. param
										div = true
									end
								end
								if f == true and pri2 ~= "" and pri2 ~= nil then
									c1 = pri2
								end			
								if a1 ~= "" and a1 ~= nil then
									-- c1 = argumentoj(args, a1)
									local c1a = args["" .. a1]
									if c1a ~= "" and c1a ~= nil then
										c1 = c1a
									end
								end			
								local c2
								if div == true then
									c2 = listoj._list(";;;",param,"ne","faldebla","","jes")
								else
									-- (delimiter, text, x, mode, sep, w, kind, spaces, spaces1, spaces2)
									c2 = listoj._list(";;;",param,"ne","span",",","jes","","",0)
								end
								aldonulinion(c1,c2,"", "",montrilo)						
							else
								local wd
								if wdid ~= "" and wdid ~= nil then
									wd = wikidata.claim({args={pk,list=";;;",id=wdid} })						
								else
									wd = wikidata.claim({args={pk,list=";;;"} })
								end
								if wd ~= "" and wd ~= nil and wd ~= 'sen valoro' and wd ~= 'nekonata valoro' then
									local nombro = listoj._count(";;;",wd)
									local chufaldi = argumentoj(args,a2)
									local chufaldiN = tonumber(chufaldi)
									local ligilo = wdlink (wdid,pk) or ""
									local c2
									if chufaldiN == 1 or chufaldi == "faldo" then
										wd = nombro .. ligilo .. ";;;" .. wd
										c2 = listoj._list(";;;",wd,"jes","faldebla","","jes")							
									else
										wd = wd .. ligilo
										-- (delimiter, text, x, mode, sep, w, kind, spaces, spaces1, spaces2)
										c2 = listoj._list(";;;",wd,"jes","span",",","jes","","",0)							
									end	
									aldonulinion(pri,c2,"jes", "",montrilo)								
								end
							end
						elseif t == "dato" then	
		----------------- DATO -----------------------------------------------------------------------
								if param ~= "" and param ~= nil then
									local c1 = pri or "Dato" 
									local c2
									local c1a = argumentoj(args, a1) or argumentoj(args, a1_a) or ""
									if c1a ~= "" then
										c1 = c1a
									end
		--							aldonulinion(c1,param)
									-- testo, ĉu temas pri numero. se jes, supozeble iu transdonis la nuran jaron	
									local testo = tonumber(param)
									if type(testo) == 'number' then
										-- por la enkonduka teksto
										if tt == "nasko_teksto" then
											nasko_teksto= 'naskiĝis en ' .. datoj._daton("","",param)
										elseif tt == 'morto_teksto' then
											morto_teksto = 'mortis en ' .. datoj._daton("","",param)
											estas = 'estis'
										end										
										param = datoj._dato("","",param)
									else
										local s = anstatau(param, '-', '')
										local testo = tonumber(s)
										if type(testo) =='number' then
											-- por la enkonduka teksto											
											if tt == "nasko_teksto" then
												nasko_teksto= 'naskiĝis la ' .. datoj._daton(param,"","")
											elseif tt == 'morto_teksto' then
												morto_teksto = 'mortis la ' .. datoj._daton(param,"","")
												estas = 'estis'												
											end												
											param = datoj._dato(param,'','')
										end
									end
									c2 = notaldono(notovaloro,param, a2)
									c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)								
									aldonulinion(c1,c2,wd,"",montrilo)							
								end
						elseif t == 'faldokomenco' then
		------------------------------------------------------------------------------------------------					
							if param == 'jes' or param == '1' then
								local faldo = kestero(pri,'+',fono2,'0.4em 0.2em')
								-- aldonuchelon(faldo)
								--tabelo = tabelo .. faldo
								tabelo:wikitext(faldo)
							end
						
						elseif t == 'faldofino' then
		--------------------------------------------------------------------------------------------------					
							if param == 'jes' or param == '1' then
								local faldo = kestero('','*')
								-- aldonuchelon(faldo)
								--tabelo = tabelo .. faldo						
								tabelo:wikitext(faldo)
							end					
		
					elseif t == 'aldono' then
		---------------------------------------------------------------------------------------------------	
								local kon = argumentoj(args, kondicho)
								if param ~= '' and param ~= nil and kon ~= 'jes' then
									local trajto = argumentoj(args,a1)
									local k = v["aldono2"]
									kesteroj(param, trajto, k)
								
								end	
						elseif t == 'okupo' then
		----------------------------------------------------------------------------------------------------					
						-- el la malnova modulo
						-- metado en tabelajn ĉelojn
							local o1 = "Okupoj"
							if o ~= "" then
								if n == 1 or n == "1" then
									o1 = "Okupo"
								end
								local o2 = o
								if wdj == "jes" then
									local wdl = wikidata._pageId()         -- <span class="el_wd">[[:d:{{#invoke:Wikidata|pageId}}#P106|[+]]]</span>
									if wdl ~= nil then
										o2 = o2 .. ' <span class="el_wd">[[:d:' .. wdl .. "#P106|[#]]]</span>"
									end
									aldonulinion(o1, o2,wd)
									okupo_teksto = o2
								else
									aldonulinion(o1, o2)
									okupo_teksto = o2
								end
							end
						elseif t == 'nasko' or t == 'naskiĝo' then
		------------------------------------------------------------------------------					
							-- naskiĝjaro
							local n1 = "Dato de naskiĝo"
							if naskjaro ~= "" then
								local testo = tonumber(naskjaro)
								local n2 = ""
								local n3 = ''
								if type(testo) == "number" then
									-- por la informkesto
									n2 = datoj._dato(nasktago,naskmonato,naskjaro)
									-- por la enkonduka teksto
									n3 = datoj._daton(nasktago,naskmonato,naskjaro)									
								else
									n2 = naskjaro
									n3 = naskjaro									
								end
								aldonulinion (n1, n2)
								-- por la enkonduka teksto								
								if nasktago ~= '' and naskmonato ~= '' then
									nasko_teksto = 'naskiĝis la ' .. n3
								else
									if naskjaro == '?' then
										nasko_teksto = 'naskiĝdato nekonata'
									else
										local testo = tonumber(naskjaro)
										if type(testo) == 'number' then
											nasko_teksto = "naskiĝis en [[" .. naskjaro .. "]]"
										else
											nasko_teksto = "naskiĝis " .. naskjaro
										end
									end
								end
							else
								local naskdato = wikidatoj.naskidato()
								if naskdato ~= nil then
									-- n2 = wikidatoj.Nkesto()
									n2 = datoj.Nkesto()
									local wdl = wikidata._pageId()         -- <span class="el_wd">[[:d:{{#invoke:Wikidata|pageId}}#P569|[+]]]</span>
									if wdl ~= nil then
										n2 = n2 .. ' <span class="el_wd">[[:d:' .. wdl .. "#P569|[#]]]</span>"
									end
									local wd = "jes"
									aldonulinion (n1, n2, wd)
									nasko_teksto = "naskiĝis " .. datoj.Nteksto()
									naskodato = naskdato
								end
							end
						elseif t == 'morto' then
		--------------------------------------------------------------------------------------					
							-- mortjaro
							local m1 = "Dato de morto"
							if mortjaro ~= "" then
								local testo = tonumber(mortjaro)
								local m2 = ""
								local m3 = ""
								if type(testo) == "number" then
									m2 = datoj._dato(morttago,mortmonato,mortjaro)
									-- por la enkondika teksto
									m3 = datoj._daton(morttago,mortmonato,mortjaro)									
								else
									m2 = mortjaro
									m3 = mortjaro									
								end
								aldonulinion (m1, m2)
								-- por la enkondika teksto	
								estas = "estis"
								if morttago ~= '' and mortmonato ~= '' then
									morto_teksto = 'mortis la ' .. m3
								else
									if mortjaro == '?' then
										morto_teksto = 'mortodato nekonata'
									else
										local testo = tonumber(mortjaro)
										if type(testo) == 'number' then
											morto_teksto = "mortis en [[" .. mortjaro .. "]]"
										else
											morto_teksto = "mortis " .. mortjaro
										end
									end
								end
							else
								local mortdato = wikidatoj.mortdato()
								if mortdato ~= nil then
									-- m2 = wikidatoj.Mkesto()
									m2 = datoj.Mkesto()
									if wikidatoj.mortdato() == "nekonata" then m2="nekonata" end
									local wdl = wikidata._pageId()         -- <span class="el_wd">[[:d:{{#invoke:Wikidata|pageId}}#P570|[+]]]</span>
									if wdl ~= nil then
										m2 = m2 .. ' <span class="el_wd">[[:d:' .. wdl .. "#P570|[#]]]</span>"
									end
									local wd = "jes"
									aldonulinion (m1, m2, wd)
									morto_teksto = "mortis " .. datoj.Mteksto()
									mortodato = mortdato
									estas = 'estis'
								end
							end
						elseif t == 'aĝo' then
		---------------------------------------------------------------------------------					
							-- aldono al la tabelo
								local a1 = "Aĝo"
								if a ~= "" then
									if va == false then
										a1 = "Aĝo je morto"
									end
									local a2 = a
									aldonulinion (a1, a2)
								end
						elseif t == 'nomo' then
		--------------------------------------------------------------------------------					
							if antaunomo ~= "" or familinomo ~= "" or titolo ~= "" then
								local c1 = 'Nomo'
								local c2
								local k = v["kondicho"]
								local k2 = v["kondicho2"]
								local rezulto = v["rezulto"]
								local k_a = argumentoj(args, k) or ""
								local k2_a = argumentoj(args, k2) or ""
								if k_a ~= "" or k2_a ~= "" then
									c1 = 'Plumnomo'
								end
								if antaunomo ~= "" then
									c2 = antaunomo .. spaco
								else 
									c2 = ''
								end
								if familinomo ~= "" then
									c2 = c2 .. etmajuskloj(familinomo)
								end
								if postnomo ~= "" then
									c2 = c2 .. spaco .. postnomo
								end
								if antaunomo == "" and familinomo == "" then
									c2 = titolo
								end
								aldonulinion(c1, c2)
							end
						elseif t == 'enkonduko' then
		------------------------------------------------------------------------					
							if param ~= 'ne' then
								if titolo2 ~= "" then
									local nomo2 = titolo2
									teksto = "'''" .. nomo2 .. "'''"
									local spaco = "&#32;"
									
									-- enkrampa teksto
									-- stira variablo por la sekvaj informoj kaj la funkcia bloko pri naskiĝo kaj morto
									local jamkrampo = false
									-- transdoni prononcindikon al la rilata ŝablono
									if prononco ~= "" then
										local p = frame:expandTemplate{
											title = "prononco",
											args = {
												prononco,
											}
										}
										teksto = teksto .. spaco .. "(" .. p
										jamkrampo = true
									end
									if postfamilinomo ~= "" then
										local k = ""
										if jamkrampo == false then
											k = "("
											jamkrampo = true
										else
											k = ", "
										end
										teksto = teksto .. spaco .. k .. postfamilinomo
									end
									if aliajlingvoj ~= "" then
										local k = ""
										if jamkrampo == false then
											k = "("
											jamkrampo = true
										else
											k = ", "
										end
										teksto = teksto .. spaco .. k .. aliajlingvoj
									end			
									-- kunmetado de la informoj pri la naskiĝo kaj morto, se tiaj datoj estas ie difinitaj
									-- se ekzistas informoj pri prononco, postfamilinomo aŭ aliajlingvoj, tiam la enkonduka krampo
									-- jam estas tie kaj ĉi tie devas esti punktokomo
									local k = "; "
									if jamkrampo == false then
										k = "("
										jamkrampo = true
									end
									if nasko_teksto ~= "" and morto_teksto ~= "" then
										d = spaco .. k .. nasko_teksto .. ", " .. morto_teksto .. vn .. ") "
									elseif nasko_teksto ~= "" and morto_teksto == "" then
										d = spaco .. k .. nasko_teksto .. vn .. ") "
									elseif nasko_teksto == "" and morto_teksto ~= "" then
										d = spaco .. k .. "naskiĝdato nekonata; " .. morto_teksto .. vn .. ") "
									elseif nasko_teksto == "" and morto_teksto == "" then
										d = spaco .. k .. "naskiĝdato nekonata" .. vn .. ") "
									end
									-- aldono al la eldonota signoĉeno
									teksto = teksto .. d

									-- fina krampo estu aranĝata, se informoj pri naskiĝo kaj morto forestas, sed estas io pri
									-- prononco, postfamilinomo aŭ aliajlingvoj
									if d == "" and jamkrampo == true then
										teksto = teksto .. ") "
									end				
										-- aldono al la eldonota signoĉeno
									if antauokupo ~= "" then
										teksto = teksto .. antauokupo .. spaco
									else
										teksto = teksto .. " " .. estas
									end
									-- ŝtato kaj la rilata adjektivo per ŝablono
									local s = " [[" .. shtato .. "|"
									local st = shtatadjektivo(shtato)
									if shtato ~= "" then
										teksto = teksto .. s .. st .. "]] "	
									end
									if o ~= '' then
										teksto = teksto .. ' ' .. o
									end
									if postokupo ~= "" then
										teksto = teksto .. postokupo
									end
									
									
								-- fino "param ~= ne"	
								end

							-- fino "enkonduko"	
							end
						elseif t == 'kategorio' and param ~= 'ne' and ns ~= 10 then
						-- kategorioj ne aperu en la dokumentado de ŝablono, sed en artikoloj kaj sur testo- kaj diskutopaĝoj		
				----------------------------------------------------------------			
							-- kategorioj pri okupoj
							if okupoj ~= "" then
								local n = listoj._count(",", okupoj)
								if n > 1 then
									strings = mw.text.split(okupoj, ",", plain)
									for k,v in pairs(strings) do
										v = ligiloj._delink(v)
										local okat1 = okupokategorio(shtato,v,tk)
										okat = okat .. okat1
									end
								else
									okupoj = ligiloj._delink(okupoj)
									local okat1 = okupokategorio(shtato,okupoj,tk)
									okat = okat .. okat1
								end
							end
						
							if okupo ~="" then
								okupo = ligiloj._delink(okupo)
								local okat1 = okupokategorio(shtato,okupo,tk)
								okat = okat .. okat1
							end
							if okupo2 ~="" then
								okupo2 = ligiloj._delink(okupo2)
								local okat1 = okupokategorio(shtato,okupo2,tk)
								okat = okat .. okat1
							end
							if okupo3 ~="" then
								okupo3 = ligiloj._delink(okupo3)
								local okat1 = okupokategorio(shtato,okupo3,tk)
								okat = okat .. okat1
							end
							-- Kategorioj pri okupoj el Vikidatumoj, se nenio alia ĉeestas
							if okupoj == "" and okupo == "" and okupo2 == "" and okupo3 == "" then
								local wdo = wikidatoj.okupo()
								if wdo ~= nil then
									local n = listoj._count(",", wdo)
									if n > 1 then
										strings = mw.text.split(wdo, ",", plain)
										for k,v in pairs(strings) do
											local okat1 = okupokategorio(shtato,v,tk)
											okat = okat .. okat1
										end
						
									else
										local okat1 = okupokategorio(shtato,wdo,tk)
										okat = okat .. okat1
									end
								end
							end
							-- fino de kategorioj pri okupoj
							-- transpreno de informoj pri la sekso de persono el vikidatumoj
							local sekso = wikidatoj.sekso()
							if sekso ~= nil then
								if sekso == "vira" then
									okat = okat .. okat .. "[[" .. tk  .. "Kategorio:Viroj]]"
								elseif sekso == "ina" then
									okat = okat .. okat .. "[[" .. tk .. "Kategorio:Virinoj]]"
								end
							end
							-- aldono al la eldonenda signoĉeno
							kategorio = kategorio .. okat
							-- ordigo
							--{{DEFAULTSORT:{{ucfirst:{{#if:{{{Ordigo|}}}|{{{Ordigo}}}|{{#if:{{{Familinomo|}}}|{{{Familinomo}}}&#32;,{{{Antaŭnomo}}}|{{{Antaŭnomo}}}}}}}}}}}
							local ordigo = ""
							if ordigilo ~="" then
								local ordigilo = mw.ustring.upper(mw.ustring.sub(ordigilo, 1, 1)) .. mw.ustring.sub(ordigilo, 2)   -- anstataŭaĵo de {{ucfirst:
								ordigo = ordigo .. ordigilo
							else
								if familinomo ~= "" then
									ordigo = ordigo .. familinomo .. spaco .. "," .. antaunomo
								else
									ordigo = ordigo .. antaunomo
								end
							end
							-- ĝi okazu nur, se la koncerna variablo ne malŝaltas tion
							if ordigu == "ne" then
								-- se ne okazu ordigo laŭ iu ordigilo, forĵetu tion, por ke tio ne subite aperu kiel normala teksto
								ordigo = ""
							end
							-- dataj kategorioj
							if naskjaro ~= "" then
								local n = vivtempo(ordigo,naskjaro,mortjaro,tk)
								-- aldono al la eldonenda signoĉeno
								kategorio = kategorio .. n
							elseif naskodato ~= "" and mortodato ~= "" then
								local n = vivtempo(ordigo,naskodato, mortodato, tk)
								kategorio = kategorio .. n
							elseif naskodato ~= "" and mortodato == "" then
								local n = vivtempo(ordigo,naskodato, "", tk)
								kategorio = kategorio .. n		
							elseif naskodato == "" and mortodato ~= "" then
								local n = vivtempo(ordigo,"NEKONATA",mortodato,tk)
								kategorio = kategorio .. n			
							else
								local n = wikidatoj.naskidato()
								if n ~= nil then
									local n = wikidatoj.Njaro()
									local m = wikidatoj.Mjaro()
									if wikidatoj.mortdato() == "nekonata" then m="NEKONATA" end
									local k = vivtempo(ordigo,n,m,tk)
									--local k = ""
									-- aldono al la eldonenda signoĉeno
									kategorio = kategorio .. k
								else
									kategorio = kategorio .. frame:callParserFunction{ name = "DEFAULTSORT", args = ordigo }
								end
							end							

-- aldonu antaŭ tio						
					end	
					
					
			end	
		
		end	
	
	end
	
	-- fina parto 
	
				-- nestado de interna ŝablono	
				if args['enhavo'] ~= "" and args['enhavo'] ~= nil and args['Enhavo'] ~= "" and args['Enhavo'] ~= nil  then
					-- tabela strukturo devas esti kreata de la interna ŝablono!
					local enhavo = args['enhavo'] or args['Enhavo']
					tabelo:newline()
					tabelo:wikitext(enhavo)
					tabelo:newline()		
				end
		
				if args['subŝablono'] ~= "jes" and args['Subŝablono'] ~= "jes" then
					if portalo == false then
						-- ligilo al portalo, laŭ {{Informkesto homoj}}
						-- ! colspan="2" style="margin:0;padding:1px;border:solid #aaa 1px;background:#fff;
						-- font-size:90%;text-align:center"| '''[[Portalo:Homoj|<span style="color:#000;background:#f9f9f9">Portalo pri Homoj</span>]]'''
						local portalo = '[[Portalo:Homoj|<span style="color:#000;background:#f9f9f9">Portalo pri Homoj</span>]]'
						portalo = "'''" .. portalo .. "'''" -- la grasigo estu aparta, ĉar alie Lua traktas tion kiel eraron
						local portallinio = tabelo:tag("tr")
						local portalchelo = portallinio:tag("th")
							:attr("colspan","2")
							:css("margin","0")
							:css("padding","1px")
							:css("border","solid #aaa 1px")
							:css("background","#fff")
							:css("font-size","90%")
							:css("text-align","center")
							:wikitext(portalo)
					end	
					-- ŝanĝu ŝablonon
					-- {{ŝanĝu ŝablonon|ŝablono=Informkesto geografiaĵo}}
					local t = informkesto._ligilaro (shablono,fono,"","","","","linio")
					tabelo:newline()
					:wikitext(t)
					:newline()
					:done()
				end	
		
				-- fino de la tabelo	
				r = tostring(tabelo) .. teksto .. kategorio
				
				
				return r	

	
end	






return p