Modulo:Informkesto/provejo

El Vikipedio, la libera enciklopedio
Dokumentado Dokumentado



Se vi havas demandon pri ĉi tiu Lua-modulo, tiam vi povas demandi en la diskutejo pri Lua-moduloj. La Intervikiaj ligiloj estu metataj al Vikidatumoj. (Vidu Helpopaĝon pri tio.)
-- 20210504
-- Jen modulo por krei informkestojn aŭ/kaj informkestajn partojn
-- Atentu, ke la plej multaj funkcioj ankoraŭ ne estis testitaj!

-- importu modulojn
local bildoj = require ("Modulo:InfoboxImage")
local kontrasto = require ("Modulo:Color contrast")

local p = {}

-- tabelliniaj funkcioj

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

	if v == "caption" then
		-- por la html-etikedo "caption"	
		local colspan ='2'
		local tabelkapo = mw.html.create('caption')
			:attr({colspan = colspan})
			:css(style)
			:wikitext(text)
			:done()		
		return tostring(tabelkapo)	
	else
		-- por la html-etikedoj "tr" kaj "th"
		-- kaplinio	
		if klaso ~= "" and klaso ~= nil and type(klaso) == "string" then
			klaso = "kaplinio mapo" .. klaso
		else
			klaso = "kaplinio mapo"
		end
		if wd == "jes" then
			klaso = klaso .. " wikidata-content"
		end
		local tabelkapo = mw.html.create('tr')
		-- kaplinia ĉelo
		local kapchelo = tabelkapo:tag('th')	
			:addClass(klaso)
			:attr('colspan','2')
			:css('color','#000')							
			:css('background-color',fono)
			:css('text-align','center')
			:wikitext(titolo)
			:done()
			:newline()	
		return tostring(tabelkapo)	
	end
end	


-- tabela subtitilo
function p.tabelsubtitolo(titolo, fono)
	if titolo == nil then
		titolo = ""
	end

	local subtitolo1 = mw.html.create('tr')
	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()	
		return tostring(subtitolo1)	
	else	
		local titol1chelo = subtitolo1:tag('th')
			:css('text-align','center')
			:attr('colspan','2')
			:wikitext(titolo)
			:done()
			:newline()
		return tostring(subtitolo1)				
	end
end	

-- bilda ĉelo por unuopa bildo
function p.unuopabildo(bildo, wd)
		if bildo == nil then
			bildo = ""
		end
		if wd == "jes" then
			wd = "wikidata-content"	
		else
			wd = ""
		end		
			local bildo1 = mw.html.create("tr")
			local bildchelo = bildo1:tag("td")
				:addClass(wd)
				:attr('colspan','2')
				:css('font-size','smaller')
				:css('text-align','center')
				:wikitext(bildo)		
			return tostring(bildo1)
end	

-- bilda ĉelo por duopa bildo
function p.duopajbildoj(bildo1, bildo2, priskribo1, priskribo2, wd, wd2)
		if bildo1 == nil then
			bildo1 = ""
		end
		if bildo2 == nil then
			bildo2 = ""
		end		
		local tabelo = mw.html.create('')
		local bildoj = tabelo:tag("tr")
		local klaso1 = ""
		local klaso2 = ""
		if wd == 1 or wd == 2 then
			klaso1 = "wikidata-content"
		end	
			local bildchelo = bildoj:tag("td")
				:addClass(klaso1)
				:css('font-size','smaller')
				:css('text-align','center')
				:wikitext(bildo1)			

		if	wd2 == 1 or wd2 == 2 then
			klaso2 = "wikidata-content"
		end	
			local bildchelo = bildoj:tag("td")
				:addClass(klaso2)			
				:css('font-size','smaller')
				:css('text-align','center')
				:wikitext(bildo2)		

		if (priskribo1 ~= "" and priskribo1 ~= nil) or (priskribo2 ~= "" and priskribo2 ~= nil) then
			local priskriboj = tabelo:tag("tr")
			if priskribo1 == nil then
				priskribo1 = ""
			end
			if wd == 2 then
				klaso1 = "wikidata-content"
			else
				klaso1 = ""
			end	
				local priskribochelo = priskriboj:tag("td")
					:addClass(klaso1)					
					:css('font-size','smaller')
					:css('text-align','center')
					:wikitext(priskribo1)			

			if priskribo2 == nil then
				priskribo2 = ""
			end
			if wd2 == 2 then
				klaso2 = "wikidata-content"
			else
				klaso2 = ""
			end	
				local priskribochelo = priskriboj:tag("td")
					:addClass(klaso2)					
					:css('font-size','smaller')
					:css('text-align','center')
					:wikitext(priskribo2)			
			return tostring(tabelo)
		end
			return tostring(tabelo)
end	


-- helpaj funkcioj sen ŝablonoj
-- c1 - enhavo de ĉelo 1
-- c2 - enhavo de ĉelo 2
-- wd - ĉu datoj el Vikidatuma ero
function p.aldonulinion (c1, c2, wd, v)
		--local tabellinio = mw.html.create("tr")
		local tabellinio = mw.html.create('tr')
		local etikedo = "th"
		if v == "td"  then
			etikedo = v
		end	
			local chelo1 = tabellinio:tag(etikedo)
				:css('text-align','left')
				:wikitext(c1)
				:done()			

		if wd == "jes"	 then
			wd = "wikidata-content"
		else
			wd = ""
		end	
			local chelo2 = tabellinio:tag('td')	
				:addClass(wd)
				:wikitext(c2) 
				:done()
				:newline()			
		return tostring(tabellinio)
end	

function p.linivarianto(c1,c2,wd)
			if c1 ~= "" and c1 ~= nil and c2 ~= "" and c2 ~= nil then
	
				if mw.ustring.sub(c1,1,3) == " - " then
					--wd estos aranĝata poste
					aldonulinion(c1,c2,wd,"td")							
				else							
					aldonulinion(c1,c2,wd)							
				end
			end	
end	


-- unuopa ĉelo
-- c - enhavo de la ĉelo
-- v - varianto de ĉelo
-- wd - ĉu datoj el Vikidatuma ero
function p.aldonuchelon (c, v, wd)
		local t = ""
		if v == "titolo" then			
			t = "th"
		else
			t = "td"
		end
		local tabellinio = mw.html.create('tr')
		if wd == "jes"	 then
			wd = "wikidata-content"
		else
			wd = ""
		end	
			local chelo = tabellinio:tag(t)	
				:addClass(wd)
				:attr('colspan','2')
				:css('text-align','center')				
				:wikitext(c) 
				:done()
				:newline()			
		return tostring(tabellinio)
end	

-- helpa funkcio por redono de kolorkodoj
local function koloroj (kodo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Informkesto/koloro",
				args ={
					kodo
				}
			}
			return n
end	

-- helpa funkcio por rigardo en tekstoĉenon
local function lin_mald (teksto, longo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Lin mald",
				args ={
					teksto, longo
				}
			}
			return n
end	

-- helpa funkcio por rigardo en tekstoĉenon
local function lin_serchi (teksto, longo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Lin serĉi",
				args ={
					teksto, longo
				}
			}
			return n
end	

-- helpa funkcio por rigardo en tekstoĉenon
local function lin_sub (teksto, komenco, longo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Lin sub",
				args ={
					teksto, komenco, longo
				}
			}
			return n
end


-- helpa funkcio por kontrasto
local function kolorkontrasta_rilatumo (teksto, fono)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Kolorkontrasta rilatumo",
				args ={
					teksto, fono
				}
			}
			return n
end


-- helpa funkcio por la fonaj kaj malfonaj koloroj
local function fono_malfono(koloro, fono, malfono, kruda)
			teksto = ""	
			if koloro ~= "" and koloro ~= nil and (fono == "" or fono == nil) then
				local testo = lin_mald(koloro,17)
				if testo == "background-color:" then 
					return koloro
				else
					testo = lin_mald(koloro,5)
					local testo2 = lin_mald(koloro,1)
					if (testo == "#" or testo2 == "#") and kruda ~= "jes" then    
						teksto = teksto .. ' background-color:' .. koloro .. '; '
						return teksto
					elseif (testo == "#" or testo2 == "#") and kruda == "jes" then	
						teksto = teksto .. ' ' .. koloro .. '; '
						return teksto						
					end
				end
				local k = koloroj(koloro)
				if k ~= "" and k ~= nil  and kruda ~= "jes" then
					teksto = teksto .. ' background-color:' .. k .. '; '
				elseif k ~= "" and k ~= nil  and kruda == "jes" then	
					teksto = teksto .. ' ' .. k .. '; '					
				end	
				if koloro == "13" and (malfono == "" or malfono == nil) then
					teksto = teksto .. ' color:white; '
				end
			else
				if fono ~= "" and fono ~= nil then
					local testo = lin_mald(fono,17)
					if testo == "background-color:" then 
						local p = lin_sub(fono,17)
						local testo2 = lin_serchi(p,"color:")
						if testo2 ~= "-1" then
							malfono = ""
						end
						teksto = teksto .. fono
					else
						teksto = teksto .. ' background-color:' .. fono .. '; '						
					end					
				end
				if malfono ~= "" and malfono ~= nil then
					if fono ~= "" and fono ~= nil then
						local testo = kolorkontrasta_rilatumo(malfono,fono)
						if testo == "?" then
							malfono = "black"
						end
					end
					teksto = teksto .. ' color:' .. malfono .. '; '
				end				
			end	
			return teksto
end	


-- alvoko de {{ŝanĝu ŝablonon}}
local function changetemplate (shablono,fono,malfono,klaso,stiloj,tekstokoloro)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="ŝanĝu ŝablonon/provejo",
				args = {
				["ŝablono"] = shablono,
				fonkoloro = fono,
				tekstokoloro = malfono,
				klaso = klaso,
				stiloj = stiloj,
				tekstokoloro = tekstokoloro
				}
			}
			return n			
end	

-- helpa funkcio pri kolortransdono el ŝablonoj
function kolorilo(koloro)
	local k = "#"
	--local sercho = mw.ustring.find( koloro, k)
	local t = "#"
	local nova = mw.ustring.gsub( koloro, k, t )
	return nova
end	

-- jen piedlinio kun triopo de centraj ligiloj kaj dekstra ligilo kun bildeto
-- fakte estas {{ŝanĝu ŝablonon}}
-- c - enhavo de la ĉelo, fakte la nomo de ŝablono, kutime informkesto, al kies paĝo konduku la tri ligiloj
-- koloro1 - fonkoloro de la kestero
-- koloro2 - tekstokoloro
-- klaso - por la interna th/td-etikedo
-- stilo - por la interna div-etikedo
-- bla - rubo el la testoj
-- v - varianto de ĉelo
-- kolumnoj - nombro de kolumnoj, defaŭlte 2
-- klaso2 - por la interna th/td-etikedo, defaŭlte "shangu-shablonon"
-- ligilaro(teksto,"","",klaso,f,f)
function p._ligilaro (c, koloro1, koloro2, koloro3, klaso, stilo, bla, v, kolumnoj, klaso2, linio_alteco)
		local t = ""
		local k = (klaso or "") .. ' ' .. (klaso2 or "infoboximage")
		local base = mw.title.getCurrentTitle().baseText
		if base ~= "Ŝanĝu ŝablonon" then
			k = "shangu-shablonon " .. k
		end
		-- kutima difino de ŝtopado (angle padding)
		local padding = "0 0.2em 0.2em 0.2em"
		if v == "titolo" then			
			t = "th"
		elseif v == "linio" then
			t = "td"
			-- sub linio la supra ŝtopado estu la sama kiel ĉiuj aliflankaj
			padding = "0.2em"
		elseif v == "taksokesto" then
			t = "td"
			-- en taksokesto (taksonomia informkesto) la supra ŝtopado estu for
			padding = "0"			
		else
			t = "td"
		end
		if stilo == nil then
			stilo = ""
		end	
		-- defaŭlta fonkoloro
		if koloro1 == "" or koloro1 == nil then
			koloro1 = "#ecf9ed" -- "#e0e0e0"
		else
			koloro1 = kolorilo(koloro1)
		end
		-- defaŭlta tekstokoloro
		if koloro2 == "" or koloro2 == nil then
			koloro2 = "black"
		else
			koloro2 = kolorilo(koloro2)			
		end		
		-- defaŭlta kadrokoloro
		if koloro3 == "" or koloro3 == nil then
			koloro3 = "#a2a9b1"
		else
			koloro3 = kolorilo(koloro3)
		end	
		-- se koloroj havas tro malaltan kontraston, korektu la tekstokoloron
		local testo = kolorkontrasta_rilatumo(koloro2,koloro1)
		testo = tonumber(testo)
		if type(testo) == 'number' and testo < 4.5 then
			koloro2 = "white"
		end	
		local k2 = kolumnoj
		local k2testo = tonumber(k2)
		if (k2 == "" or k2 == nil) or type(k2testo) ~= "number" then
			k2 = "2"
		end
		local tabellinio = mw.html.create('tr')
		local chelo = tabellinio:tag(t)	
				:addClass(k)
				:attr('colspan',k2)
				:css('text-align','center')	
				:css('padding',padding)
				if linio_alteco ~= "" and linio_alteco ~= nil then
					chelo:css('line-height', linio_alteco)
				end
		-- difino de ligilo al rilata projektopaĝo
		local informo = "Projekto:Ŝablonoj"		
		local testo = lin_serchi(c,'Informkesto')
		if testo == "-1" then
			informo = 'Projekto:Ŝablonoj'
		elseif testo == "1"	then
			informo = "Vikipedio:Informkestoj"
		end
		-- ĉirkaŭanta kesto <div> kun dekstre metata bildeto kun ligilo al antaŭe difinita projektopaĝo
		local div = chelo:tag('div')	
				:addClass('noprint toccolours')
				:css('border','2px solid ' .. koloro3)
				-- truko pro strangaĵoj en kelkaj helpaj ŝablnoj por fervojlinioj -- 2021-05-04
				local testo = lin_mald(koloro1,17)
				if testo == "background-color:" then 
					-- denove forigi la komencan kodopecon, por ke poste Lua denove aldonu ĝin. kio estas logiko?
					koloro1 = mw.ustring.gsub( koloro1, "background%-color%:", "" )
					div:css('background-color',koloro1)
				else
					div:css('background-color',koloro1)
				end
				div:css('color',koloro2)	
				--:css(stilo)
				if stilo ~= nil and stilo ~= "" then
					div:attr('style',stilo)
				end
				div:css('font-size','xx-small')	
				:css('font-weight','normal')
				--:css('width','97%')				
				:wikitext('[[Dosiero:Information_icon.svg|15px|right|link=' .. informo .. ']]')
		-- defaŭltaj tekstoj de la ligiloj
		local vidu = "v"
		local diskutu = "d"
		local redaktu = "r"
		-- traktado de stiloj resp. CSS
		if koloro2 ~= "black" then
			vidu = '<span style="color:' .. koloro2 .. '">' .. vidu .. '</span>'
			diskutu = '<span style="color:' .. koloro2 .. '">' .. diskutu .. '</span>'			
			redaktu = '<span style="color:' .. koloro2 .. '">' .. redaktu .. '</span>'	
		elseif stilo ~= "" then
			vidu = '<span style="' .. stilo .. ';border:0;">' .. vidu .. '</span>'
			diskutu = '<span style="' .. stilo .. ';border:0;">' .. diskutu .. '</span>'			
			redaktu = '<span style="' .. stilo .. ';border:0;">' .. redaktu .. '</span>'			
		end
		-- kodigo de [{{fullurl:{{ns:10}}:{{{1}}}|action=edit} per Lua. Vidu ankaŭ [[Helpo:Lua/Ligiloj]], kvankam tie temas pri artikola historio.
		local uri = mw.uri.fullUrl( 'Ŝablono:' .. c, "action=edit" )
		local r = string.format( "[%s " .. redaktu .. "]", tostring( uri ) )
		-- kunmetado de la triopa ligilaro en ĉirkaŭanta <span>
		local span = div:tag('span')
				:addClass('noprint plainlinksneverexpand')
				:css('text-align','center')
				:wikitext('[[Ŝablono:'.. c ..'|' .. vidu .. ']]')
				:wikitext(' • ')
				:wikitext('[[Ŝablono-Diskuto:'.. c ..'|' .. diskutu .. ']]')
				:wikitext(' • ')				
				:wikitext(r)
				:done()
		
		return tostring(tabellinio)
end	

-- jen memstare vokebla varianto de la antaŭa funkcio
function p.ligilaro(frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	-- post modifo de {{ŝanĝu ŝablonon}} la sekva estos denove ŝanĝenda!
	local args = getArgs(frame, {removeBlanks = false, wrappers = {"Ŝablono:Ŝanĝu ŝablonon/provejo","Ŝablono:Ŝanĝu ŝablonon"}})
	-- parametroj
	local c = args["ŝablono"]
	local koloro1 = args["fono"] or args["fonkoloro"]
	local koloro2 = args["malfono"]	or args["tekstokoloro"]
	local koloro3 = args["kadro"] or args["kadrokoloro"]
	local klaso = args["klaso"]
	local klaso2 = args["klaso2"]	
	local stilo = args["stilo"]
	local v = args["v"] or args["varianto"]
	local kolumnoj = args["kolumnoj"] or "2"
	local linio_alteco = args["linio-alteco"]

	if c ~= "" and c ~= nil then
		return p._ligilaro (c, koloro1, koloro2, koloro3, klaso, stilo, bla, v, kolumnoj, klaso2, linio_alteco)
	else
		return '<span class="error">Vi forgesis difini nomon de ŝablono!</span>'
	end
end	


-- Lua-versio de {{Informkesto}}
function p.kesto(frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	local args = getArgs(frame, {removeBlanks = false, wrappers = {"Ŝablono:Informkesto/+/provejo","Ŝablono:Informkesto/+"}})	
	
	local bildo = args["bildo"]
	local teksto = args["teksto"]
	local etikedo = args["etikedo"]
	local klaso = args["klaso"]
	local klaso2 = args["klaso2"]	
	local mikro = args["mikro"]	
	local fono = args["fono"]
	local malfono = args["malfono"]
	local kadro = args["kadro"] or args["kadrokoloro"]
	local kapkadro = args["kapkadro"] or args["kapkadrokoloro"]	
	local piedkadro = args["piedkadro"] or args["piedkadrokoloro"]	
	local koloro = args["koloro"] or "5"
	local koloro_alt = args["koloro alt"]
	local stilo = args["stilo"] or "1"
	local bildo_grando = args["bildo-grando"]
	local shablononomo = args["ŝablononomo"] or args["ŝablono-nomo"]
	local kolumnoj = args["kolumnoj"]
	local linisalto = args["linisalto"]
	local largho = args["larĝo"] 
	local kesta_klaso = args["kesta klaso"] or ""
	local css_stiloj = args["style"] or args["css-stiloj"] or ""
	local subshablono = args["subŝablono"]
	-- parametroj por la titola linio
	local titola_koloro = args["titola koloro"] or "6"
	local titola_stilo = args["titola stilo"] or ""
	local titola_klaso = args["titola klaso"] or "io"
	local tekstogrando = args["tekstogrando"] or '150%'
	local subshablona_klaso = args["subŝablona klaso"]
	local teksto_poz = args["tekstopozicio"] or "center"
	if teksto_poz == "" then
		teksto_poz = "center"
	end
	
	local s = ""
	if linisalto == "jes" then
		s = "\n"
	end
	
	local tabelo = ""
	if teksto ~="" and teksto ~= nil and (bildo == "" or bildo == nil) and etikedo~="--tabelo--" and etikedo~="--komenco--" then
		tabelo = s .. "|-"
		if etikedo == "" then
			tabelo = tabelo .. "\n" .. '| colspan="2" style="text-align:' .. teksto_poz .. '"'
			if klaso ~= "" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" '
			end
			tabelo = tabelo .. '| ' .. teksto
			return tabelo
		elseif etikedo == "-" or etikedo == "bildo" then
			if klaso ~= "" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" '
			end	
			tabelo = tabelo .. "\n"
			tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. 'style="text-align:' .. teksto_poz .. ';'
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
				tabelo = tabelo .. f
			else
				if koloro_alt ~= "" and koloro_alt ~= nil then
					tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
					local testo = kolorkontrasta_rilatumo('black',koloro_alt)
					testo = tonumber(testo)
					if type(testo) == "number" and testo < 4.5 then
						tabelo = tabelo .. 'color: white;'
					end
				end				
			end
			if kadro ~= "" and kadro ~= nil then
				tabelo = tabelo .. 'border:2px solid ' .. kadro .. '; '
			end
			tabelo = tabelo .. '"' .. '| ' .. teksto
			
			
			return tabelo
		-- aldono kompare al al ĝisnuna ŝablono	{{informkesto/+}}
		elseif (etikedo == "ŝŝ" or etikedo == "--piedlinio--" or etikedo == "--ligilaro--") and (subshablono == "" or subshablono == nil) then
			local f = fono_malfono(koloro,fono,malfono)
			local shablono = ""
			local linio_alteco = args["linio-alteco"]
			if f ~= "" and f ~= nil then
				-- tabelo = tabelo .. f
				-- shablono = changetemplate(teksto,"","",klaso,f,"inherit !important")
				--shablono = changetemplate(teksto,"","",klaso,f,f)
				shablono = p._ligilaro(teksto,"","",piedkadro,klaso,f,f,"",kolumnoj, klaso2, linio_alteco)
			else
				if koloro_alt ~= "" and koloro_alt ~= nil then
					-- tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
					-- shablono = changetemplate(teksto,koloro_alt,"",klaso,"","")	
					shablono = p._ligilaro(teksto,koloro_alt,"",piedkadro,klaso,"","","",kolumnoj, klaso2, linio_alteco)							
				end				
			end
			tabelo = tabelo .. '\n' .. shablono
			return tabelo			
			
		-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}, normala uzo
		elseif (etikedo == "--kaplinio--" or etikedo == "--titolo--") and (subshablono == "" or subshablono == nil) then
			tabelo = tabelo .. ' style="font-size:110%; text-align:' .. teksto_poz .. '"\n'
			tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. ' style="'
			local tkoloro = koloroj(titola_koloro)
			tabelo = tabelo .. 'background-color:' .. tkoloro .. '; '
			tabelo = tabelo .. 'padding-left:0.5em; padding-right:0.5em;'
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
				tabelo = tabelo .. f
			end				
			if kapkadro ~= "" and kapkadro ~= nil then
				tabelo = tabelo .. "border:2px solid " .. kapkadro .. '; '
			end
			tabelo = tabelo .. titola_stilo .. '" '
			tabelo = tabelo .. 'class="kaplinio ' .. titola_klaso
			tabelo = tabelo .. '" ' .. '| ' .. teksto			
			
			return tabelo			

		-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}, subŝablona uzo
		elseif (etikedo == "--kaplinio--" or etikedo == "--titolo--") and subshablono ~= "" and subshablono ~= nil then
			tabelo = tabelo .. '\n! colspan="2" style="text-align:' .. teksto_poz .. '; background-color:'
			if fono ~= "" and fono ~= nil then
				tabelo = tabelo .. fono
			else
				tabelo = tabelo .. '#ddd; '
			end
			if malfono ~= "" and malfono ~= nil then
				tabelo = tabelo .. 'color:' .. malfono .. '; '
			end
			if kapkadro ~= "" and kapkadro ~= nil then
				tabelo = tabelo .. "border:2px solid " .. kapkadro .. '; '
			end			
			tabelo = tabelo .. 'font-size:' .. tekstogrando .. '; '
			tabelo = tabelo .. 'line-height:1.5;" '
			if subshablona_klaso ~= "" and subshablona_klaso ~= nil then
				tabelo = tabelo .. 'class="' .. subshablona_klaso .. '"'
			end
			tabelo = tabelo .. ' | ' .. subshablono
			
			return tabelo
			
		elseif etikedo == "+" then	
			tabelo = tabelo .. 'style="background-color:transparent;"'
			if klaso ~= "" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" '
			end	
			tabelo = tabelo .. "\n"
			tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. 'style="text-align: center; '	
			if koloro_alt ~= "" and koloro_alt ~= nil then
				tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
			end
			tabelo = tabelo .. '" '
			tabelo = tabelo .. '| \n'
			tabelo = tabelo .. '{| '
			local kl = 'class="'
			if stilo == "2" then 
				kl = kl .. 'toccolours '
			elseif stilo == "3" then	
				kl = kl .. 'prettytable '
			elseif stilo == "" or stilo == nil or stilo == "1" then
				kl = kl .. 'infobox '
			else
				-- ĉe iuj sensencaj valoroj tamen funkciu la defaŭlta "1"
				kl = kl .. 'infobox '
			end
			kl = kl .. 'collapsible collapsed"'
			tabelo = tabelo .. kl
			tabelo = tabelo .. ' width=100%\n'
			tabelo = tabelo .. '|-\n'
			tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. 'style="text-align:' .. teksto_poz .. '; '
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
				tabelo = tabelo .. f
			end			
			local truko = '<div style="float:left; width:6em;text-align:left;">&nbsp;</div>'
			tabelo = tabelo .. '"' .. '| ' .. truko .. teksto			
			
			return tabelo
		elseif etikedo == "*" then
			tabelo = tabelo .. '\n|}\n'
			return tabelo	
		elseif etikedo == "nenio" then	
			return ""
		elseif etikedo == "enhavo" then
			tabelo = tabelo .. '\n! colspan="2" style="background-color:transparent;'
			if klaso ~="" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" ' 
			end
			tabelo = tabelo .. '| \n' .. teksto
			return tabelo

		elseif etikedo ~= nil then 
			tabelo = tabelo .. '\n!'
			local st = ""
			if stilo == 2 then
				st = ' style="vertical-align:top; '
			end
			if kadro ~= "" and kadro ~= nil and stilo ~= 2 then
				st = st .. ' style="border:2px solid ' .. kadro .. ';" '			
			elseif 	kadro ~= "" and kadro ~= nil and stilo == 2 then
				st = st .. 'border:' .. kadro .. ';" '
			else 
				st = st .. '" '
			end
			tabelo = tabelo .. st
			local k1 = ""
			if klaso ~= "" and klaso ~= nil then
				k1 = ' class="' .. klaso .. '" '
			end		
			tabelo = tabelo .. k1 
			if st ~= "" or k1 ~= "" then
				tabelo = tabelo .. ' | '
			end				
			tabelo = tabelo .. etikedo .. '\n'	
			tabelo = tabelo .. '| ' .. st .. k1
			if st ~= "" or k1 ~= "" then
				tabelo = tabelo .. ' | '
			end
			local m1 = ""
			local m2 = ""			
			if mikro ~= "" and mikro ~= nil then
				m1 = '<span class="' .. mikro .. '">' 
				m2 = '</span>'
			end
			tabelo = tabelo .. m1 .. teksto .. m2
			return tabelo

		end
	elseif bildo ~= "" and bildo ~= nil and etikedo == "bildo" then
			tabelo = s .. "|-"
			tabelo = tabelo .. '\n! colspan="2" style="text-align:' .. teksto_poz .. '; background-color:' 
			if fono ~= "" and fono ~= nil then
				tabelo = tabelo .. fono .. '; '
			else
				tabelo = tabelo .. '#f2f2f4; '
			end
			if klaso ~= "" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" ' 				
			end
			tabelo = tabelo .. '|' 
			-- bilda modulo
			local b = bildoj.InfoboxImage({args={image=bildo,size=bildo_grando,sizedefault="120px",sizedefault="frameless",suppressplaceholder="yes",center="yes", alt=teksto} })
			if b ~= nil then
				tabelo = tabelo .. b
			end
			if teksto ~= "" and teksto ~= nil then
				tabelo = tabelo .. '<div>' .. teksto .. '</div>'
			end
			return tabelo
	-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}
	elseif (etikedo == "--tabelo--" or etikedo == "--komenco--") and (subshablono == "" or subshablono == nil) then
			tabelo = s .. '{| '
			local kl = 'class="'
			if stilo == "2" then 
				kl = kl .. 'toccolours ' .. kesta_klaso
			elseif stilo == "3" then	
				kl = kl .. 'prettytable ' .. kesta_klaso
			elseif stilo == "" or stilo == nil or stilo == "1" then
				kl = kl .. 'infobox ' .. kesta_klaso
			else
				-- ĉe iuj sensencaj valoroj tamen funkciu la defaŭlta "1"
				kl = kl .. 'infobox ' .. kesta_klaso
			end	
			tabelo = tabelo .. kl
			tabelo = tabelo .. '" style="'
			if stilo == "2" or stilo == "3" then
				tabelo = tabelo .. 'float:right; clear:right; margin-left:1em;'
			end
			tabelo = tabelo .. 'font-size:90%;  text-align:left;'
			if css_stiloj ~= "" then
				tabelo = tabelo .. css_stiloj
			end
			if largho ~= "" and largho ~= nil then
				tabelo = tabelo .. 'width:' .. largho .. '\n'
			else	
				tabelo = tabelo .. 'min-width:190px; max-width:260px; width:30%;\n'	
			end
			
			return tabelo
			
	elseif etikedo == "*" and (bildo == "" or bildo == nil) then
			tabelo = tabelo .. '\n|-\n'
			tabelo = tabelo .. '|}'
			return tabelo		
	end	
	
end	

-- Lua-versio de {{Informkesto}}. sed fakte uzata de alia modulo per helpo de la ŝablono {{informkesto/+/html}}
function p.kesto_html(frame)
	-- This function builds the infobox used by the {{informkesto}} template.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	local args = getArgs(frame, {removeBlanks = false, wrappers = {"Ŝablono:Informkesto/+/html","Ŝablono:Informkesto/+"}})	
	
	local bildo = args["bildo"]
	local teksto = args["teksto"]
	local etikedo = args["etikedo"]
	local klaso = args["klaso"]
	local klaso2 = args["klaso2"]	
	local mikro = args["mikro"]	
	local fono = args["fono"]
	local malfono = args["malfono"]
	local kadro = args["kadro"] or args["kadrokoloro"]
	local kapkadro = args["kapkadro"] or args["kapkadrokoloro"]	
	local piedkadro = args["piedkadro"] or args["piedkadrokoloro"]	
	local koloro = args["koloro"] or "5"
	local koloro_alt = args["koloro alt"]
	local stilo = args["stilo"] or "1"
	local bildo_grando = args["bildo-grando"]
	local shablononomo = args["ŝablononomo"] or args["ŝablono-nomo"]
	local kolumnoj = args["kolumnoj"]
	local linisalto = args["linisalto"]
	local largho = args["larĝo"] 
	local kesta_klaso = args["kesta klaso"] or ""
	local css_stiloj = args["style"] or args["css-stiloj"] or ""
	local subshablono = args["subŝablono"]
	-- parametroj por la titola linio
	local titola_koloro = args["titola koloro"] or "6"
	local titola_stilo = args["titola stilo"] or ""
	local titola_klaso = args["titola klaso"] or "io"
	local tekstogrando = args["tekstogrando"] or '150%'
	local skribogrando = args["skribogrando"] or '100%'	
	local tiparapezo = args["tipara pezo"] 
	local subshablona_klaso = args["subŝablona klaso"]
	local shtopado = args["ŝtopado"]
	
	local s = ""
	if linisalto == "jes" then
		s = "\n"
	end
	
	local tabelo = ""
	if teksto ~="" and teksto ~= nil and (bildo == "" or bildo == nil) and etikedo~="--tabelo--" and etikedo~="--komenco--" then
		if etikedo == "+" then
			tabelo = s .. "<tr "			
		elseif etikedo == "*" then
			tabelo = s .. "</tr "			
		else
			tabelo = mw.html.create("tr") -- s .. "|-"
			--tabelo = s .. "|-"
		end
		if etikedo == "" then
			local chelo = tabelo:tag("td")
				chelo:attr("colspan","2")
				chelo:css("text-align","center")
			-- tabelo = tabelo .. "\n" .. '| colspan="2" style="text-align:center;"'
			if klaso ~= "" and klaso ~= nil then
				chelo:addClass(klaso)
				-- tabelo = tabelo .. ' class="' .. klaso .. '" '
			end
			chelo:wikitext(teksto)
			--tabelo = tabelo .. '| ' .. teksto
			
			return tostring(tabelo)
		elseif etikedo == "-" or etikedo == "bildo" then
			if klaso ~= "" and klaso ~= nil then
				tabelo:addClass(klaso)
				-- tabelo = tabelo .. ' class="' .. klaso .. '" '
			end	
			-- tabelo = tabelo .. "\n"
			local chelo = tabelo:tag("th")
				chelo:attr("colspan","2")
			-- tabelo = tabelo .. '! colspan="2" '
				chelo:css("text-align","center")
			-- tabelo = tabelo .. 'style="text-align:center; '
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
				chelo:attr("style",f)
				chelo:css("text-align","center")				
			--	tabelo = tabelo .. f
			else
				if koloro_alt ~= "" and koloro_alt ~= nil then
					chelo:css("background-color",koloro_alt)
					-- tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
					local testo = kolorkontrasta_rilatumo('black',koloro_alt)
					testo = tonumber(testo)
					if type(testo) == "number" and testo < 4.5 then
						chelo:css("color","white")
						--tabelo = tabelo .. 'color: white;'
					end
				end				
			end
			chelo:wikitext(teksto)
			--tabelo = tabelo .. '"' .. '| ' .. teksto
			
			
			return tostring(tabelo)
		-- aldono kompare al al ĝisnuna ŝablono	{{informkesto/+}}
		elseif (etikedo == "ŝŝ" or etikedo == "--piedlinio--" or etikedo == "--ligilaro--") and (subshablono == "" or subshablono == nil) then
			local f = fono_malfono(koloro,fono,malfono)
			local shablono = ""
			local linio_alteco = args["linio-alteco"]
			if f ~= "" and f ~= nil then
				-- tabelo = tabelo .. f
				-- shablono = changetemplate(teksto,"","",klaso,f,"inherit !important")
				--shablono = changetemplate(teksto,"","",klaso,f,f)
				shablono = p._ligilaro(teksto,"","",piedkadro,klaso,f,f,"",kolumnoj, klaso2, linio_alteco)
			else
				if koloro_alt ~= "" and koloro_alt ~= nil then
					-- tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
					-- shablono = changetemplate(teksto,koloro_alt,"",klaso,"","")	
					shablono = p._ligilaro(teksto,koloro_alt,"",piedkadro,klaso,"","","",kolumnoj, klaso2, linio_alteco)							
				end				
			end
			tabelo:wikitext(shablono)
			--tabelo = tabelo .. '\n' .. shablono
			return tostring(tabelo)
			
		-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}, normala uzo
		elseif (etikedo == "--kaplinio--" or etikedo == "--titolo--") and (subshablono == "" or subshablono == nil) then
			tabelo:css("font-size","110%")
			tabelo:css("text-align","center")
			-- tabelo = tabelo .. ' style="font-size:110%; text-align:center;"\n'
			local chelo = tabelo:tag("th")
				chelo:attr("colspan","2")
			-- tabelo = tabelo .. '! colspan="2" '
			-- tabelo = tabelo .. ' style="'
			local tkoloro = koloroj(titola_koloro)
			chelo:css("background-color",tkoloro)
			-- tabelo = tabelo .. 'background-color:' .. tkoloro .. '; '
			chelo:css("padding-left","0.5em")
			chelo:css("padding-right","0.5em")
			-- tabelo = tabelo .. 'padding-left:0.5em; padding-right:0.5em;'
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
			--	tabelo = tabelo .. f
			end				
			if kapkadro ~= "" and kapkadro ~= nil then
				chelo:css('border',kapkadro)
			end
			-- tabelo = tabelo .. titola_stilo .. '" '
			chelo:addClass("kaplinio")
			chelo:addClass(titola_klaso)
			-- tabelo = tabelo .. 'class="kaplinio ' .. titola_klaso
			chelo:wikitext(teksto)
			-- tabelo = tabelo .. '" ' .. '| ' .. teksto			
			
			return tostring(tabelo)

		-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}, subŝablona uzo
		elseif (etikedo == "--kaplinio--" or etikedo == "--titolo--") and subshablono ~= "" and subshablono ~= nil then
			local chelo = tabelo:tag("th")
				chelo:attr("colspan","2")
				chelo:css("text-align","center")
			-- tabelo = tabelo .. '\n! colspan="2" style="text-align:center; background-color:'
			if fono ~= "" and fono ~= nil then
				chelo:css("background-color",fono)
				-- tabelo = tabelo .. fono
			else
				chelo:css("background-color","#ddd")
				-- tabelo = tabelo .. '#ddd; '
			end
			if malfono ~= "" and malfono ~= nil then
				chelo:css("color",malfono)
				-- tabelo = tabelo .. 'color:' .. malfono .. '; '
			end
			if kapkadro ~= "" and kapkadro ~= nil then
				chelo:css('border',kapkadro)
			end			
			chelo:css("font-size",tekstogrando)
			-- tabelo = tabelo .. 'font-size:' .. tekstogrando .. '; '
			chelo:css("line-height","1.5")
			-- tabelo = tabelo .. 'line-height:1.5;" '
			if subshablona_klaso ~= "" and subshablona_klaso ~= nil then
				chelo:addClass(subshablona_klaso)
				-- tabelo = tabelo .. 'class="' .. subshablona_klaso .. '"'
			end
			tabelo:wikitext(subshablono)
			-- tabelo = tabelo .. ' | ' .. subshablono
			
			return tostring(tabelo)
			
		elseif etikedo == "+" then	
			tabelo = tabelo .. 'style="background-color:transparent;"'
			if klaso ~= "" and klaso ~= nil then
				tabelo = tabelo .. ' class="' .. klaso .. '" '
			end	
			tabelo = tabelo .. ">"
			--tabelo = tabelo .. "\n"
			tabelo = tabelo .. '<th colspan="2" '
			--tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. 'style="text-align:center; '	
			-- por la ŝablono {{informkesto geografiaĵo}}, ĉar alie la maldekstra ŝtopado estas pli larĝa ol la dekstra.
			if shtopado ~= "" and shtopado ~= nil then
				tabelo = tabelo .. 'padding: ' .. shtopado .. '; '
			end 
			-- por malaperigi la strangan "grasan tekston" en aliaj informkestoj
			if skribogrando ~= "" and skribogrando ~= nil then
				tabelo = tabelo .. 'font-size: ' .. skribogrando .. '; '
			end
			if tiparapezo ~= "" and tiparapezo ~= nil then
				tabelo = tabelo .. 'font-weight: ' .. tiparapezo .. '; '
			end
			if koloro_alt ~= "" and koloro_alt ~= nil then
				tabelo = tabelo .. 'background-color:' .. koloro_alt .. '; '
			end
			tabelo = tabelo .. '" '
			tabelo = tabelo .. '>'
			--tabelo = tabelo .. '| \n'
			tabelo = tabelo .. '<table '
			-- tabelo = tabelo .. '{| '
			local kl = 'class="'
			if stilo == "2" then 
				kl = kl .. 'toccolours '
			elseif stilo == "3" then	
				kl = kl .. 'prettytable '
			elseif stilo == "" or stilo == nil or stilo == "1" then
				kl = kl .. 'infobox '
			else
				-- ĉe iuj sensencaj valoroj tamen funkciu la defaŭlta "1"
				kl = kl .. 'infobox '
			end
			kl = kl .. 'collapsible collapsed"'
			tabelo = tabelo .. kl
			tabelo = tabelo .. ' width=100%>'
			--tabelo = tabelo .. ' width=100%\n'
			tabelo = tabelo .. '<tr>'
			--tabelo = tabelo .. '|-\n'
			tabelo = tabelo .. '<th colspan="2" '
			--tabelo = tabelo .. '! colspan="2" '
			tabelo = tabelo .. 'style="text-align:center; '
			local f = fono_malfono(koloro,fono,malfono)
			if f ~= "" and f ~= nil then
				tabelo = tabelo .. f
			end			
			-- por truke ebligi, ke la teksto restas pli malpli centra. alie la ligilo por kaŝado ŝovas ĝin maldekstren.
			local truko = '<div style="float:left; width:6em;text-align:left;">&nbsp;</div>'
			tabelo = tabelo .. '"' .. '> ' .. truko .. teksto
			-- tabelo = tabelo .. '"' .. '| ' .. teksto			
			tabelo = tabelo .. '</th></tr>'
			return tabelo
		elseif etikedo == "*" then
			tabelo = '</table>' .. tabelo .. '>'
			--tabelo = tabelo .. '\n|}\n'
			return tabelo	
		elseif etikedo == "nenio" then	
			return ""
		elseif etikedo == "enhavo" then
			tabelo:attr("colspan","2")
			tabelo:css("background-color","transparent")
			-- tabelo = tabelo .. '\n! colspan="2" style="background-color:transparent;'
			if klaso ~="" and klaso ~= nil then
				tabelo:addClass(klaso)
				--tabelo = tabelo .. ' class="' .. klaso .. '" ' 
			end
			tabelo:wikitext(teksto)
			--tabelo = tabelo .. '| \n' .. teksto
			return tostring(tabelo)

		elseif etikedo ~= nil then 
			local chelo1 = tabelo:tag("th")
			-- tabelo = tabelo .. '\n!'
			local st = ""
			if stilo == 2 then
				chelo1:css("vertical-align","top")
				--st = ' style="vertical-align:top;" '
			end
			if kadro ~= "" and kadro ~= nil then
				chelo1:css("border",kadro)
			end
			-- tabelo = tabelo .. st
			local k1 = ""
			if klaso ~= "" and klaso ~= nil then
				chelo1:addClass(klaso)
				-- k1 = ' class="' .. klaso .. '" '
			end		
			-- tabelo = tabelo .. k1 
			if st ~= "" or k1 ~= "" then
				-- tabelo = tabelo .. ' | '
			end				
			chelo1:wikitext(etikedo)
			-- tabelo = tabelo .. etikedo .. '\n'	
			-- tabelo = tabelo .. '| ' .. st .. k1
			local chelo2 = tabelo:tag("td")
			if st ~= "" or k1 ~= "" then
				-- tabelo = tabelo .. ' | '
			end
			local m1 = ""
			local m2 = ""	
			local span = chelo2:tag("span")			
			if mikro ~= "" and mikro ~= nil then
				span:addClass(mikro)				
				-- m1 = '<span class="' .. mikro .. '">' 
				-- m2 = '</span>'
				span:wikitext(teksto)
			else
				chelo2:wikitext(teksto)
			end

			-- tabelo = tabelo .. m1 .. teksto .. m2
			
			return tostring(tabelo)

		end
	elseif bildo ~= "" and bildo ~= nil and etikedo == "bildo" then
			tabelo = mw.html.create("tr")
			--tabelo = s .. "|-"
			local chelo = tabelo:tag("th")
				chelo:attr("colspan","2")
				chelo:css("text-align","center")
			-- tabelo = tabelo .. '\n! colspan="2" style="text-align:center; background-color:' 
			if fono ~= "" and fono ~= nil then
				chelo:css("background-color",fono)
				-- tabelo = tabelo .. fono .. '; '
			else
				chelo:css("background-color","#f2f2f4")				
				-- tabelo = tabelo .. '#f2f2f4; '
			end
			if klaso ~= "" and klaso ~= nil then
				chelo:addClass(klaso)
				-- tabelo = tabelo .. ' class="' .. klaso .. '" ' 				
			end
			-- tabelo = tabelo .. '|' 
			-- bilda modulo
			local b = bildoj.InfoboxImage({args={image=bildo,size=bildo_grando,sizedefault="120px",sizedefault="frameless",suppressplaceholder="yes",center="yes", alt=teksto} })
			if b ~= nil then
				chelo:wikitext(b)
				-- tabelo = tabelo .. b
			end
			if teksto ~= "" and teksto ~= nil then
				local priskribo = chelo:tag("div")
					priskribo:wikitext(teksto)
				-- tabelo = tabelo .. '<div>' .. teksto .. '</div>'
			end
			return tostring(tabelo)
	-- aldono kompare al la ĝisnuna ŝablono	{{informkesto/+}}
	elseif (etikedo == "--tabelo--" or etikedo == "--komenco--") and (subshablono == "" or subshablono == nil) then
			tabelo = s .. '{| '
			local kl = 'class="'
			if stilo == "2" then 
				kl = kl .. 'toccolours ' .. kesta_klaso
			elseif stilo == "3" then	
				kl = kl .. 'prettytable ' .. kesta_klaso
			elseif stilo == "" or stilo == nil or stilo == "1" then
				kl = kl .. 'infobox ' .. kesta_klaso
			else
				-- ĉe iuj sensencaj valoroj tamen funkciu la defaŭlta "1"
				kl = kl .. 'infobox ' .. kesta_klaso
			end	
			tabelo = tabelo .. kl
			tabelo = tabelo .. '" style="'
			if stilo == "2" or stilo == "3" then
				tabelo = tabelo .. 'float:right; clear:right; margin-left:1em;'
			end
			tabelo = tabelo .. 'font-size:90%;  text-align:left;'
			if css_stiloj ~= "" then
				tabelo = tabelo .. css_stiloj
			end
			if largho ~= "" and largho ~= nil then
				tabelo = tabelo .. 'width:' .. largho .. '\n'
			else	
				tabelo = tabelo .. 'min-width:190px; max-width:260px; width:30%;\n'	
			end
			
			return tabelo
			
	elseif etikedo == "*" and (bildo == "" or bildo == nil) then
			-- tabelo = tabelo .. '|-\n'
			tabelo = tabelo .. '</table></tr>'
			-- tabelo = tabelo .. '|}'
			return tabelo		
	end	
	
end	

-- por tri koloroj
function p.koloroj(frame)
	-- This function builds the colors for some templates and modules.
	if not getArgs then
		getArgs = require("Module:Arguments").getArgs
	end
	--local args = getArgs(frame, {wrappers = "Template:Babel"})
	local args = getArgs(frame, {wrappers = {"Ŝablono:Informkesto/provejo","Ŝablono:Informkesto","Ŝablono:Informkesto fervojlinio"}})	
		local koloro=args['koloro']
		local fono=args['fono']		
		local malfono=args['malfono']
		local kruda=args['kruda']		
		
		return fono_malfono(koloro, fono, malfono, kruda)
end	


return p