Modulo:Geografiaĵoj

El Vikipedio, la libera enciklopedio
Salti al navigilo Salti al serĉilo
Dokumentado Dokumentado


Ŝablona programado Diskutoj Lua Testoj Subpaĝoj
Modulo Esperanto English Deutsch

Modulo: 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.)
-- modulo Geografiaĵoj, 2019-11-09
-- ĉi tiu modulo celas aranĝi la ŝablonon {{informkesto geografiaĵo}}, sed ankaŭ uzeblas por aliaj informkestoj kiel ekzemple {{informkesto urbo}}.

-- aliaj moduloj
-- bonvolu atenti, ke certaj specoj de submoduloj devas subteni la parametron wd por testoj ekster la artikola nomspaco
local kalkuli = require( "Modulo:Math")
local wikidata = require ("Modulo:Wikidata")
local wikidataGeo = require ("Modulo:Wikidata/geografio")
local lucky_bildo, wikidataBildo = pcall ( require,"Modulo:Wikidata/bildoj" )
local listoj = require ("Modulo:Listutil")
local bildoj = require ("Modulo:InfoboxImage")
local prenubildon = require ("Modulo:Portalo").image
local kategorioj = require("Modulo:CatUtil")
local informkesto = require("Modulo:Informkesto")

-- propraj submoduloj
local koloroj=require ("Modulo:Geografiaĵoj/koloroj")

-- variabloj por aŭtomataj kategorioj
        local kategorio = ""
        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        local kat1 = ""
        local wdidstirilo = true
        if ns == 0 then 
        	-- komuna parto por du ŝablonoj: [[Kategorio:{{{1|}}} kun ŝablono Geokesto]] kaj [[Kategorio:{{{tipo|}}} kun Informkesto urbo]]. {{{1|}}} resp. {{{tipo|}}} estas la unua nenomita parametro de {{Geokesto}}, sed nomita de {{Informkesto urbo}}
        	kat1 = " kun "
        	wdidstirilo=false
        	nenumero=false
        end

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	


-- por koordinataj parametroj
local function koordargumentoj(args, a1)
		if a1 ~= "" and a1 ~= nil then
			if a1 == "situo" then
				a1 = ""
			else 
				a1 = a1 .. "_"
			end
						local lat_d = argumentoj(args, a1 .. "lat_d") or argumentoj(args,"latitudo-gradoj")
						local lat_m = argumentoj(args, a1 .. "lat_m") or argumentoj(args,"latitudo-minutoj")				
						local lat_s = argumentoj(args, a1 .. "lat_s") or argumentoj(args,"latitudo-sekundoj")						
						local lat_NS = argumentoj(args, a1 .. "lat_NS")	or argumentoj(args,"latitudo-direkto")
						local long_d = argumentoj(args, a1 .. "long_d") or argumentoj(args,"longitudo-gradoj")
						local long_m = argumentoj(args, a1 .. "long_m")	or argumentoj(args,"longitudo-minutoj")
						local long_s = argumentoj(args, a1 .. "long_s")	or argumentoj(args,"longitudo-sekundoj")					
						local long_EW = argumentoj(args, a1 .. "long_EW") or argumentoj(args,"longitudo-direkto")					
						if lat_d ~= "" and lat_d ~= nil and long_d ~= "" and long_d ~= nil then
							if lat_m ~= "" and lat_m ~= nil then
								lat_d = lat_d .. "/" .. lat_m
								if lat_s ~= "" and lat_s ~= nil then
									lat_d = lat_d .. "/" .. lat_s
									if lat_NS ~= "" and lat_NS ~= nil then
										lat_d = lat_d .. "/" .. lat_NS
									end
								end
							end
							if long_m ~= "" and long_m ~= nil then
								long_d = long_d .. "/" .. long_m
								if long_s ~= "" and long_s ~= nil then
									long_d = long_d .. "/" .. long_s
									if long_EW ~= "" and long_EW ~= nil then
										long_d = long_d .. "/" .. long_EW
									end
								end
							end	
							return lat_d, long_d
						end		
		end -- a1
end	

-- disigo de helpa parametro por koordinatoj
local function koordtipo(teksto)
			if teksto ~= "" and teksto ~= nil then
				local strings = mw.text.split(teksto, "_", plain)
				local regiono = ""
				local tipo = ""
				for k, v in pairs(strings) do
					if mw.ustring.sub(v,1,7) == "region:" then
						regiono = mw.ustring.sub(v,8)
					elseif mw.ustring.sub(v,1,5) == "type:" then	 
						tipo = mw.ustring.sub(v,6)
					end
				end
				return regiono, tipo
			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

-- helpa funkcio por "kodo" kaj "laŭ" 
-- ankoraŭ malkompleta
local function lauparam(args,a2,wdid)    -- por kodo
	if a2 ~= "" and a2 ~= nil then
		local c1 = ""
		local c2 = ""
		local a2a = ""
		a2 = argumentoj(args,a2)
		if a2 == "P374" or a2 == "INSEE" then
			-- Francio
			c1 = "INSEE kodo"
			a2a = "P374"
		elseif a2 == "P782" or a2 == "LAU" then
			-- Eŭropa unuio
			c1 = "LAU kodo"
			a2a = "P782"
		elseif a2 == "P382" or a2 == "CBS" then
			-- Nederlando
			c1 = "CBS kodo"
			a2a = "P382"
		elseif a2 == "P439" or a2 == "Komunuma ŝlosilo" then	
			-- Germanio
			c1 = "Komunuma ŝlosilo"
			a2a = "P439"
		elseif a2 == "P1388" or a2 == "Regiona ŝlosilo" then
			-- Germanio
			c1 = "Regiona ŝlosilo"
			a2a = "P1388"
		elseif a2 == "P525" or a2 == "Sveda komunuma ŝlosilo" then			
			-- Svedio
			c1 = "Sveda komunuma ŝlosilo"
			a2a = "P525"
		elseif a2 == "P721" or a2 == "OKATO" then			
			-- Ruslando
			c1 = "OKATO"
			a2a = "P721"
		elseif a2 == "P764" or a2 == "OKTMO" then	
			-- Ruslando
			c1 = "OKTMO"
			a2a = "P764"
		elseif a2 == "P1653" or a2 == "TERYT" then	
			-- Pollando
			c1 = "TERYT"
			a2a = "P1653"
		end	
		c2 = wdparam(a2a,wdid)
		if c2 ~= "" and c2 ~= nil then
			return c1, c2, a2a
		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	


local function bildaro (args, param, a1, a1_a, a2, a2_a, par, par_a, pri, pk, pk2, wdid)
	local bildo
	local priskriboB
	local wd 
	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")	
	
					if param ~= "" and param ~= nil and param ~= "ne" and param ~= "neniu" then
						-- local bildo = bildoj.InfoboxImage({args={image=param,size=args[a2],sizedefault="frameless",center="yes", caption=args[a1]} })
						bildo = bildoj.InfoboxImage({args={image=param,size=grando,sizedefault="120px",center="yes", alt=priskribo} })
						if priskribo ~= "" and priskribo ~= nil then
							priskriboB = priskribo
						else
							priskriboB = pri
						end
					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 priskriboA							
							if wdid ~= "" and wdid ~= nil then
								bildo, priskriboA = wikidataBildo.bildoj({args={grandeco=grando,["defaŭlta grandeco"]="120px",["priskribo de bildoj"]=priskribo,["defaŭlta priskribo de bildo"]=pri,pkodo=pk, pkodo2=pk2,id=wdid,["ĉu priskribo aparte"]="jes",grupo="ne"} })							
							else	
								bildo, priskriboA = wikidataBildo.bildoj({args={grandeco=grando,["defaŭlta grandeco"]="120px",["priskribo de bildoj"]=priskribo,["defaŭlta priskribo de bildo"]=pri,pkodo=pk, pkodo2=pk2,["ĉu priskribo aparte"]="jes",grupo="ne"} })
							end
							if priskribo ~= "" and priskribo ~= nil then
								priskriboB = priskribo
								wd = 1
							elseif priskribo ~= priskriboA and priskriboA ~= pri  then       
								priskriboB = priskriboA
								wd = 2
							else
								priskriboB = pri
								wd = 1
							end	
							if bildo == "" or bildo == nil then
								wd = nil
							end	
						end
					end
					return bildo, priskriboB, wd

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 = "kaplinio mapo" .. klaso
		else
			klaso = "kaplinio mapo"
		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')
			: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')
			:wikitext(bildo)		

end	

-- bilda ĉelo por duopa bildo
local function duopajbildoj(bildo1, bildo2, priskribo1, priskribo2, wd, wd2)
		if bildo1 == nil then
			bildo1 = ""
		end
		if bildo2 == nil then
			bildo2 = ""
		end		
		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)			

		end

end	


-- helpaj funkcioj sen ŝablonoj
-- c1 - enhavo de ĉelo 1
-- c2 - enhavo de ĉelo 2
-- wd - ĉu datoj el Vikidatuma ero
local function aldonulinion (c1, c2, wd, v, montrilo)
		--local tabellinio = mw.html.create("tr")
		local tabellinio
		if montrilo ~= "" and montrilo ~= nil then
			tabellinio = tabelo:tag('tr')
				:attr('title',montrilo)	
				:addClass('mergedrow')
		else
			tabellinio = tabelo:tag('tr')			
		end		
		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()			

end	

local function linivarianto(c1,c2,wd, montrilo)
			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",montrilo)							
				else							
					aldonulinion(c1,c2,wd,"",montrilo)							
				end
			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')				
				:wikitext(c) 
				:done()
				:newline()			

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	


-- kalkulaj funkcioj
-- transkalkulas al kvadrataj kilometroj
local function areoKM2(areo,unuo,subfunkcio,rondumo)

	local ru = "[[Kvadrata kilometro|km²]]"
	local rondumo = tonumber(rondumo)
	if rondumo == nil or rondumo == "" then
		rondumo = 0
	end
	
	if areo ~= nil and areo ~= "" and unuo ~= nil and unuo ~= "" then
		local r = 1
		if unuo == "km²" or unuo == "km2" or unuo == "km" then  -- jam estas km²
			r = areo
		elseif unuo == "ha" then				-- el hektaroj al km²     
			r = areo / 100	
			r = kalkuli._round(r,rondumo)
		elseif unuo == "m²" then 				-- el metroj al km²
			r = areo / 1e6
			r = kalkuli._round(r,rondumo)			
		elseif unuo == "cm²" then				-- el cm² al km²
			r = areo / 1e10
			r = kalkuli._round(r,rondumo)			
		else
			r = areo							-- ĉe nekonata unuo, redonu la numeron senŝanĝe, supozante, ke estas jam km²
		end	

		if subfunkcio == "jes" then
			return r 						-- eldono sen unuo
		else	
			r= formatnum(r) 			   	-- elvoko de helpa funkcio, kiu mem elvokas la malkomponilan funkcion {{formatnum:}}
			return r .. " " .. ru			-- eldono kun unuo
		end
--	else
--		return "neniuj valoroj"
	end	
end	

-- transkalkulas al hektaroj
local function areoHA(areo, unuo, subfunkcio,rondumo)

	local ru = "[[Hektaro|ha]]"
	local rondumo = tonumber(rondumo)
	if rondumo == nil or rondumo == "" then
		rondumo = 0
	end	
	
	if areo ~= nil and areo ~= "" and unuo ~= nil and unuo ~= "" then
		local r = 1
		if unuo == "km²" or unuo == "km2" or unuo == "km" then	-- el km² al hektaroj
			r = areo * 100
			r = kalkuli._round(r,rondumo)			
		elseif unuo == "ha" then				-- jam hektaroj      
			r = areo 			
		elseif unuo == "m²" then				-- el metroj al hektaroj
			r = areo / 1e4
			r = kalkuli._round(r,rondumo)			
		elseif unuo == "cm²" then				-- el cm² al hektaroj
			r = areo / 1e8
			r = kalkuli._round(r,rondumo)			
		else
			r = areo * 100 						-- ĉe nekonata unuo, kalkulu kvazaŭ jam estus km²
			r = kalkuli._round(r,rondumo)			
		end	

		if	subfunkcio == "jes" then
			return r						-- eldono sen unuo
		else	
			r= formatnum(r)     			-- elvoko de helpa funkcio, kiu mem elvokas la malkomponilan funkcion {{formatnum:}}
			return r .. " " .. ru			-- eldono kun unuo
		end
--	else
--		return "neniuj valoroj"
	end	
end	

-- por la funkcioj "enkonduko" kaj "informkesto", ĉar tie ligiloj eble devus esti aldonata
-- komparu la funkcion "link" en la modulo Listutil
local function chuligilo (teksto)
			-- analizo, ĉu jam estas ligilo. se jes, ŝanĝu nenion. 
			-- kodopeco el Modulo:Listutil, funcio link
			local r 
			local s = teksto:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
			if not s then
			s = teksto:match( "%[%[%s*([^%]]+)%s*%]%]" )
 			end
 			if not s then
    			r = "ligu"
 			end
 			return r
end	

-- el la modulo Listutil
-- delinks the text from v and returns [[Ulo]] or [[Artikolo|Ulo]] like Ulo.
-- this is needed, because a link in a link is not possible
-- s - is a helping variable

local function delink (v)
     s = v:match( "%[%[[^|%]]*| *([^%]]+) *%]%]" )
     if not s then
     s = v:match( "%[%[%s*([^%]]+)%s*%]%]" )
     end
     if not s then
     s = v
     end
     return mw.text.trim(s) -- removes spaces
end  -- delink ()

-- por landaj flagoj kun sekva teksto
local function flago(nomo)
			if nomo == "" or nomo == nil then 
				return 
			end
			local testo = chuligilo(nomo)
			local ligilo = ""
			if testo == "ligu" then
				ligilo = "[[" .. nomo .. "]]"
			else
				ligilo = nomo
				nomo = 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

-- 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	


-- ŝablonelvokoj
-- por "Ŝanĝu ŝablonon2"
local function changetemplate (shablono,fono)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="ŝanĝu ŝablonon2",
				args = {
				["ŝablono"] = shablono,
				fonkoloro = fono
				}
			}
			return n			
end	

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

-- por koordinatoj
local function koordinatoj(latitudo, longitudo, regiono, tipo, nomo, supre, teksto )
			local t = "dms"
			if teksto ~= "" and teksto ~= nil then
				t = teksto
			end
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Koordinato",
				args ={
					NS=latitudo,
					EW=longitudo,
					region=regiono,
					type=tipo,
					name=nomo,
					text=t, 	    	    	         -- la koordinatoj aperu en la informkesto
					article=supre				    	 -- ĉu ankaŭ supre? se jes, la parametro havu la valoron /
				}
			}
			return n
end	

-- helpa funkcio por komutebla mapo
local function maposimbolo (tipo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Geokesto2 mapo/simbolo",
				args ={
					tipo
				}
			}
			return n
end	

-- mapo per la ŝablono {{Geokesto2 mapo2}}, kiu iel elvokas {{Situo sur mapo}}
local function situomapo(mapo,aliamapo,mapofono,lat,lon,markocelo,tipo,priskribo,neniukoordinato,mapospeco,regiono,tipo2,montru,angulojes,args,marko,markospeco)
			local x, y
			if neniukoordinato ~= "" and neniukoordinato ~= nil then
				x = 50
				y = 50
			end
			local angulmapo, angulmapo2, aldono, anguldosiero, stilo, angulo, angulstilo, angullargho
			if angulojes == "jes" then
				-- | Mapo en angulo =  | angula mapo    =  | aldono         =  | dosiero        =  | stilo          =  | angulo         =  | angula stilo   =  | angula larĝo   =
				angulmapo = args["Mapo en angulo"]
				angulmapo2 = argumentoj(args,"angula mapo")				
				aldono = argumentoj(args,"aldono")						
				anguldosiero = argumentoj(args,"anguldosiero")	or argumentoj(args,"angulbildo")				
				stilo = argumentoj(args,"stilo")					
				angulo = argumentoj(args,"angulo")				
				angulstilo = argumentoj(args,"angula stilo")
				angullargho = argumentoj(args,"angula larĝo")				
			end	
			
			-- {{#if:{{{tipo|}}}|{{Geokesto2 mapo/simbolo|{{{tipo|}}}}}|{{{Marko|Red_pog.svg}}} }}
			local Marko = "Red_pog.svg"
			if markospeco ~= "" and markospeco ~= nil then
				Marko = ""
			elseif marko ~= "" and marko ~= nil then
				Marko = marko
			else
				if tipo ~= "" and tipo ~= nil then
					local m = 	maposimbolo(tipo)	
					if m ~= "Red_pog.svg" then
						Marko = m
					end
				end
			end		
			local frame = mw.getCurrentFrame()		
			if angulmapo == "" then
				local s = frame:expandTemplate {
					title="Surmapo",
					args={
						mapo
						}
					}	
				angulmapo = s
			end
			local n = frame:expandTemplate {
				title="Situo sur mapo",
				args ={
					mapo,
					Alia_mapo=aliamapo,
					Mapo_fono=mapofono,
					Lat=lat,
					Lon=lon,
					['Teksto-loko']="none",
					['Marko-celo']=markocelo,
					Marko=Marko,
					Markospeco=markospeco,
					['Larĝo']=250,
					Floso="center",
					Titolo=priskribo,
					['Loko de titolo']="centre",
					X=x,
					Y=y,
					Mapospeco=mapospeco,
					region=regiono,
					type=tipo2,
					montrukoordinatojn=montru,
					senombre="jes",
					Bordo="none",
					wd=wd,
					['Mapo en angulo'] = angulmapo,
					mapo=angulmapo2,
					aldono=aldono,
					dosiero=anguldosiero,
					stilo=stilo,
					angulo=angulo,
					['angula stilo']=angulstilo,
					['angula larĝo']=angullargho
				}
			}
			return n				

end	


-- mapo per la ŝablono {{Situo sur mapo}}, sed ĉikaze sen koordinatoj
local function situomaposenmarko(mapo,priskribo,mapofono,tipo)
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Situo sur mapo",
				args ={
					Alia_mapo=mapo,      
					Titolo=priskribo, 
					X="50",       -- malaperigas koordinatojn
					Y="50",       -- malaperigas koordinatojn
					Mapo_fono=mapofono,
					montrukoordinatojn="ne",
					['Loko de titolo']="centre",
					Floso="center",
					Bordo="none",
					senombre="jes"

				}
			}
			return n				

end


-- "tradukas" regiono-ISO al la nomo de la mapo
-- {{Info ISO-3166-2 |code={{#if:{{{1|}}}|{{{1}}}|??}} |map}}
local function isomapilo(isokodo)
			local kodo 
			if isokodo ~= "" and isokodo ~= nil then
				kodo = isokodo
			else
				kodo = "??"
			end
			local frame = mw.getCurrentFrame()
			local n = frame:expandTemplate {
				title="Info ISO-3166-2",
				args ={
					code=kodo,
					"map"
				}
			}
			return n			
end	


-- komutebla mapo
local function situomapo2(lokigo,latitudo,longitudo,nomo,punkto,tipo,marko,mapotipo, tipo1,alt1,mapo1,fonamapo1, tipo2,alt2,mapo2,fonamapo2, tipo3,alt3,mapo3,fonamapo3, tipo4,alt4,mapo4,fonamapo4,ligiltipo,regiono,markospeco)
			local frame = mw.getCurrentFrame()
			if tipo ~= "" and tipo ~= nil and (marko == "" or marko ==nil) and (markospeco == "" or markospeco == nil) then     -- tipo de geografiaĵo
				marko=maposimbolo(tipo) or "Red_pog.svg"
			elseif markospeco ~= "" and markospeco ~= nil then
				marko = ""
			else
				if marko == "" or marko == nil then
					marko = "Red_pog.svg"
				end
			end
			local komenco = '<div style="font-size:112%">'
			komenco = komenco .. "\n\n" .. frame:expandTemplate {
				title="Informkesto/Komenco",
				args={
					senombre="jes",
					klaso="centered"
				}
			}		
			local enhavo = frame:expandTemplate {
				title="Informkesto/Geografia lokigo multobla",
				args ={
					['geografia lokigo']=lokigo,
					latitudo=latitudo,
					longitudo=longitudo,
					loknomo=nomo,
					punkto=punkto,
					Marko=marko,
					tipo=mapotipo,         		-- tipoj de mapo
					tipo1=tipo1,
					alt1=alt1,
					mapo1=mapo1,
					['fona mapo1']=fonamapo1,
					tipo2=tipo2,	
					alt2=alt2,		
					mapo2=mapo2,
					['fona mapo2']=fonamapo2,					
					tipo3=tipo3,
					alt3=alt3,
					mapo3=mapo3,
					['fona mapo3']=fonamapo3,
					tipo4=tipo4,	
					alt4=alt4,		
					mapo4=mapo4,
					['fona mapo4']=fonamapo4,	
					type=ligiltipo,
					['regiono-ISO']=regiono,
					Markospeco=markospeco
				}
			}
			local fino = frame:expandTemplate {
				title="Informkesto/Fino"
			}			
			fino = fino .. "\n\n" .. "</div>"
			n = "\n" .. komenco .. "\n\n" .. enhavo .. "\n\n" .. fino .. "\n\n"  -- linisaltoj necesas, ĉar alie ne funkcias la Vikia sintakso por tabeloj. Vidu la dokumentadon de {{Informkest}}
			return n			
end	

-- por alteco
local function alteco(alto,kodo)
			local frame = mw.getCurrentFrame()
			local r
			if kodo == "AT" or kodo == "CH" or kodo == "HU" or kodo == "LI" or kodo == "SK" or kodo == "CZ" or kodo == "FR" or kodo == "IT" or kodo == "JP"
			or kodo == "NL" or kodo == "PL" or kodo == "SE" or kodo == "ES" or kodo == "BA" or kodo == "HR" or kodo == "ME" or kodo == "MK" or kodo == "RS" or kodo == "SI" then 
				r = frame:expandTemplate {
					title="Alto",
					args={
						alto,
						kodo
					}
				}
			elseif kodo == "DE" then	
				r = frame:expandTemplate {
					title="Alto",
					args={
						alto,
						"DE-NHN"
					}
				}				
			else	
				r = frame:expandTemplate {
					title="Alto",
					args={
						alto
					}
				}			
			end
			return r
end	


local p = {}

-- spaco por la eksportataj funkcioj
function p._informkesto(tipoj,args)

	
	-- klaso por la tuta tabelo, aldonata post "infobox"
	local klaso = args['klaso'] or ""
	local titolklaso = args['titolklaso'] or ""	
	local tipo = tipoj[1] or ""
	if tipo ~= "" then
		tipo = mw.ustring.lower(tipo)
	end	
	
	-- formatoj
	local fono = args['fono'] or ""
	local fono2 = args['fono2'] or "#efefef"
	if fono == "" then 
		if tipo ~= "" then
			fono = koloroj.fonkoloro(tipo)
		else
			fono = "#FFFFFF"
		end
	end
	
	local shablono
	-- parametro kun nomo de la ŝablono
	if args['ŝablono'] ~= "" and args['ŝablono'] ~= nil then
		shablono = args['ŝablono']
	else
		shablono = "Informkesto geografiaĵo"
	end

	-- helpa parametro por testoj de valoroj el Vikidatumoj
	local wdid  
	if wdidstirilo == true then
		wdid = args['wd']
	end
	
	-- pliaj variabloj
	local r = ""
	
	
	-- enhavo de la informkesto 
	local dua_klaso = ""
	if shablono == "Informkesto geografiaĵo" then
		dua_klaso = ' geography '
	end
	if klaso ~= "" and klaso ~= nil then
		klaso = "infobox " .. dua_klaso .. klaso
	else
		klaso = "infobox" .. dua_klaso
	end	
	
	
	-- komenco de la tabelo
	local titolo = args["titolo"] or args["nomo"] or "" -- pliaj variantoj aldoneblas
	if titolo == "" then
		titolo = paghenamebase ()
	end
	if 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)
	else
			-- la variablo "tabelo" ne povas esti local, ĉar alie ĝia uzo en subŝablono ne funkcias		
			tabelo = mw.html.create()
	end	
	
	
	
	-- ekuzi submodulon por la informkesta strukturo
	local submodulo = args['submodulo'] or "geokesto"
	local variabloj = 'Modulo:Geografiaĵoj/' .. submodulo
	local parametroj = mw.loadData(variabloj)
	local listo = parametroj.linioj
	local noto = parametroj.noto or ""
	local referenco = parametroj.referenco or ""
	local ktipo = parametroj.tipo or ""
	local koordkasho = parametroj.koordkasho or ""
	local kashvaloro = parametroj.kashvaloro or ""
	local situo = parametroj.situo or ""
	if type(listo) == "table" then
		-- testo
		local s
		local par, t, pk, pk2, a1, a2, pri, pri2
		for k, v in pairs(listo) do
--			s = type(k)
--			if s == "string" then
--				return k
--			elseif s == "table" then	
--				return k
--			elseif s == "number" then	

				if type(v) == "table" then
					par = v["parametro"] 
					par_a = v['parametro_a']
					par2 = v["parametro2"] 
					par2_a = v['parametro2_a']		
					t = v["tipo"]
					pri = v["priskribo"]
					pri2 = v["priskribo2"]	
					pri3 = v["priskribo3"]
					pri4 = v["priskribo4"]						
					pk = v["pKodo"]
					pk2 = v["pKodo2"]
					pk3 = v["pKodo3"]
					pk4 = v["pKodo4"]					
					a1 = v["aldono1"] 
					a1_a = v["aldono1_a"]
					a2 = v["aldono2"] 
					a2_a = v["aldono2_a"]
					a3 = v["aldono3"] 
					a3_a = v["aldono3_a"]
					a4 = v["aldono4"] 
					a4_a = v["aldono4_a"]
					p1 = v["prefikso1"]
					p2 = v["prefikso2"]	
					p3 = v["prefikso3"]
					p4 = v["prefikso4"]					
					grupanoj=v["grupanoj"]
					listeroj=v["listeroj"]	
					montrilo=v["montrilo"] 
					defmontrilo=v["defmontrilo"]

				-- voki la parametron el args
				par = tostring(par)
				-- local param = args[par]	or ""			
				local param = argumentoj (args, par) or argumentoj(args, par_a)
				local param2
				if par2 ~= "" and par2 ~= nil then
					param2 = argumentoj(args,par2) or argumentoj(args, par2_a)
				end
				-- "montrilo" de tabela linio (angle Tooltip; esperanta traduko de la tradukinto de {{Geokesto}})
				local montrilo = argumentoj(args, montrilo)
				if montrilo == "" or montrilo == nil then
					montrilo = defmontrilo
				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
-------------------- SUBTITOLO ----------------------------------------------------------------------------------------------------					
					if args['subŝablono'] ~= "jes" then
						if param ~= "" and param ~= nil then
						tabelsubtitolo(param, fono, montrilo)
						end
					end		

				elseif t == "subtitolo2" then
-------------------- SUBTITOLOJ en grupo de maksimume 8 eroj, el kiuj 7 havas ciferon je la fino -----------------------------------------------------------------------------------------					
					if args['subŝablono'] ~= "jes" then
						if param ~= "" and param ~= nil then
							tabelsubtitolo(param, fono, montrilo)
							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
											tabelsubtitolo(st,fono, montrilo)
										end
									end	
								end
							end
						end
					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 urbo" then
								fono2 = args['fono']
							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 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,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 == "bildo2" then	
---------------- BILDO2 -------------------------------------------------------------------------------------------------------------
					-- unue transprenas la bildojn el parametroj aŭ Vikidatumaj eroj
					local bildo	
					local bildo2
					local priskriboB
					local priskriboC	
					-- unua bildo
					bildo, priskriboB, wd = bildaro (args, param, a1, a1_a, a2, a2_a, par, par_a, pri, pk, pk2, wdid)


					-- dua bildo
					bildo2, priskriboC, wd2 = bildaro (args, param2, a3, a3_a, a4, a4_a, par2, par2_a, pri2, pk3, pk4, wdid)							

				
					-- due la jam aranĝitaj bildoj estas metataj en tabelajn ĉelojn
						if bildo ~= "" and bildo ~= nil and bildo2 ~= "" and bildo2 ~= nil then
							if priskriboB == "" or priskriboB == nil then
								priskriboB = pri or ""
							end
							if priskriboC == "" or priskriboC == nil then
								priskriboC = pri2 or ""
							end							
							duopajbildoj(bildo,bildo2,priskriboB,priskriboC, wd, wd2)	
						elseif bildo ~= "" and bildo ~= nil and (bildo2 == "" or bildo2 == nil) then	
							if priskriboB ~= "" and priskriboB ~= nil then
								bildo = bildo .. "<div>" .. priskriboB .. "</div>"
							elseif pri ~= "" and pri ~= nil then
								-- defaŭlta priskribo
								bildo = bildo .. "<div>" .. pri .. "</div>"
							end
							if wd == 1 or wd == 2 then
								wd = "jes"
							end	
							unuopabildo(bildo, wd)
						elseif (bildo == "" or bildo == nil) and bildo2 ~= "" and bildo2 ~= nil then	
							if priskriboC ~= "" and priskriboC ~= nil then
								bildo2 = bildo2 .. "<div>" .. priskriboC .. "</div>"
							elseif pri2 ~= "" and pri2 ~= nil then
								-- defaŭlta priskribo
								bildo2 = bildo2 .. "<div>" .. pri2 .. "</div>"
							end
							if wd2 == 1 or wd2 == 2 then
								wd2 = "jes"
							end								
							unuopabildo(bildo2,wd2)							
						end				


				elseif t == "teksto" or t == "numero" or t == "loĝantaro" or t == "kodo" or t == "ekde" or t == "situo" 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 == "kodo" then
									pri = pri .. " laŭ " .. a2a
								elseif 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

						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	
							linivarianto(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 then
								local ligilo = wdlink (wdid, pk) or ""
								if t == "numero" or t == "loĝantaro" then
									wd = formatnum(wd) or 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	
								linivarianto(pri,wd,"jes", montrilo)
							else
								aldonuchelon(wd,"", "jes", montrilo)							
							end							

						else
						-- varianto kun "laŭ" ktp.	
							local lauc1, lauc2, pk = lauparam(args,a2,wdid)    -- por kodo	
							if lauc1 ~= "" and lauc1 ~= nil and lauc2 ~= "" and lauc2 ~= nil then
								local ligilo = wdlink(wdid,pk) or ""
								lauc2 = lauc2 .. ligilo
								linivarianto(lauc1,lauc2,"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)
					end
					
				elseif t == "komunejo" then	
---------------- KOMUNEJO - rilata kategorio en la Komunejo -------------------------------------------------------------------------
					-- komuna parto 
						local bildo = "[[Dosiero:Commons-logo.svg|15px]]"
						local p = pri or ""
						if p ~= "" then
							p = "<b>" .. p .. "</b>: "
						end						
					
					if param ~= "" and param ~= nil then
						param = "&nbsp;<b>[[:commons:Category:" .. param .. "|" .. param .. "]]</b>"
						local p2 = bildo .. p .. param
						aldonuchelon(p2, "", "", montrilo)
					else	
						-- ĉu vikidatuma ero estas
						local wd = wdparam(pk,wdid)
						if wd ~= "" and wd ~= nil then
							wd = "&nbsp;<b>[[:commons:Category:" .. wd .. "|" .. wd .. "]]</b>"							
							local p2 = bildo .. p .. wd
							local ligilo = wdlink (wdid, pk) or ""
							p2 = p2 .. ligilo								
							aldonuchelon(p2,"","jes", montrilo)							
							
						end
						
					end					

				elseif t == "teksto2l" then
----------------- TEKSTO EN DU SINSEKVAJ LINIOJ -----------------------------------------------------------------------------------
					local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)
					if (param ~= "" and param ~= nil) or (wd ~= "" and wd ~= nil) then
						local paramA = param   -- konservu "param" por pli posta analizo
						param = param or wd
						local a1a = argumentoj(args,a1) or argumentoj(args,a1_a)
						if a1a ~= "" and a1a ~= nil then
							pri = a1a
						end
						local a2a = argumentoj(args,a2) or argumentoj(args,a2_a)
						if a2a ~= "" and a2a ~= nil then
							if p2 ~= "" and p2 ~= nil then
								a2a = p2 .. a2a
							end
							param = notaldono(notovaloro,param, a2)
							param = refaldono(referencovaloro,param, referenconomo, referenconomodua)								
							param = param .. " (" .. a2a .. ")"
						end				
						if (paramA == "" or paramA == nil) and wd ~= "" and wd ~= nil then
							wd = "jes"
							local ligilo = wdlink (wdid, pk) or ""
							param = param .. ligilo								
						end						
						linivarianto(pri,param,wd, montrilo)
						if param2 ~= "" and param2 ~= nil then
							local a3a = argumentoj(args,a3) or argumentoj(args,a3_a)
							if a3a ~= "" and a3a ~= nil then
								pri2 = a3a
							end
							local a4a = argumentoj(args,a4) or argumentoj(args,a4_a)
							if a4a ~= "" and a4a ~= nil then
								if p4 ~= "" and p4 ~= nil then
									a4a = p4 .. a4a
								end								
								param2 = param2 .. " (" .. a4a .. ")"
							end								
							-- wd estu poste aldonata
							wd = nil
							linivarianto(pri2, param2,wd, montrilo)
						end
					end	

				elseif t == "-teksto" then
-----------------TEKSTO, KIU APERAS MALDEKSTRE SEN DEKSTRAJ DATOJ -----------------------------------------------------------------
					-- la strio aperu nur, se unu el la grupaj parametroj estas uzata
					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						
						for k, v in pairs(string) do
							local testo = argumentoj(args,v)
							if testo ~= "" and testo ~= nil and n == 1 then
								local c1 = pri
								if a1 ~= "" and a1 ~= nil then
									c1a = argumentoj(args,a1) or argumentoj(args,a1_a)
									if c1a ~= "" and c1a ~= nil then
										c1 = c1a
									end
								end
								aldonulinion(c1,"","","", montrilo)
								n = n +1
							end
						end
					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 = chuligilo(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 = chuligilo(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
						linivarianto(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 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	
							linivarianto(pri,c2,"jes", montrilo)		
						end
					end

				elseif t == "datoj" then
---------------- DATOJ KUN DIVERSAJ TRAJTOJ --------------------------------------------------------------------
					if param ~= "" and param ~= nil then
						local r 
						if v["dato"] ~= "" and v["dato"] ~= nil then
							local param = tonumber(param)
							local dato = tonumber(v["dato"])
							if param ~= nil and dato ~= nil then
								local diferenco = param - dato
								r = param .. " (" .. diferenco .. ")"
							end
						end
						if v["ligilo"] ~= "" and v["ligilo"] ~= nil then
							r = "[" .. v["ligilo"] .. param .. " " .. param .. "]" 
						end
						if v["kondicho"] ~= "" and v["kondicho"] ~= nil and v["rezulto"] ~= "" and v["rezulto"] ~= nil then
							local strings1 = mw.text.split(v["kondicho"], "///", plain)
							local strings2 = mw.text.split(v["rezulto"], "///", plain)							
							local numero1 = #strings1
							local numero2 = #strings2
							if numero1 == numero2 then
								for k, v in pairs(strings1) do
									if v == param then
										r = strings2[k]
										break
									end
								end
								if r == "" or r == nil then
									r = param
								end
							end
						end
						if r ~= "" and r ~= nil then
							linivarianto(pri,r,"", montrilo)
						end
					end
					
				elseif t == "koordinatoj" then		
---------------- KOORDINATOJ ------------------------------------------------------------------------------------
					if a1 ~= "" and a1 ~= nil then
	
						local latitudo, longitudo = koordargumentoj(args, a1)
						local latitudo2, longitudo2
						if a1 == "situo" then
							latitudo2 = argumentoj(args,"latitudo")
							longitudo2 = argumentoj(args,"longitudo")						
						else
							latitudo2 = argumentoj(args, a1 .. "_latitudo")   -- la parametra varianto kun spaco estas ebligata de la vokata funkcio
							longitudo2 = argumentoj(args,a1 .. "_longitudo")  -- la parametra varianto kun spaco estas ebligata de la vokata funkcio								
						end
						local regiono1, tipo1 = koordtipo(argumentoj(args, a2))   -- kodo por {{Geokesto}} aŭ simila ŝablono
						local regiono = argumentoj(args,"regiono-ISO") or regiono1
						local ligiltipo    = argumentoj(args,"type") or tipo1 
						if ktipo ~= "" and ktipo ~= nil and (ligiltipo == "" or ligiltipo == nil) then
							ligiltipo = ktipo
						elseif ligiltipo == "" or ligiltipo == nil then
							ligiltipo = "landmark"
						end
						local nomo    = argumentoj(args,"nomo") or argumentoj(args,"titolo") or paghenamebase ()
						local c1
						if pri ~= "" and pri ~= nil then
							c1 = pri
						else
							c1 = "Koordinatoj"
						end			
						-- ĉu la koordinatoj aperu supre dekstre apud la titola linio aŭ ne? se jes, estu /. se ne, estu io alia.
						local supre = "/"
						local koordkasho = argumentoj(args,koordkasho) or ""
						-- se estas en artikolo kaj la ŝablono "Informkesto geografiaĵo", nur kaŝu la supre dekstrajn koordinatojn, se la difino en la parametra tabelo postulas tion
						if kat1 == " kun " and shablono == "Informkesto geografiaĵo" then
							kashvaloro = ""
						end
						if v["supre"] == "ne" or (koordkasho ~= "" and kashvaloro ~= "" and koordkasho == kashvaloro) then
							supre = ""
						end
						-- formatoj
						local teksto
						if v["formato"] ~= "" and v["formato"] ~= nil then
							teksto = argumentoj(args,v["formato"])
							if teksto ~= "" and teksto ~= nil then
								teksto = mw.ustring.lower(teksto)
								if teksto == "dms" or teksto == "gms" then
									teksto = "dms"
								elseif teksto == "dec" or teksto == "dek" then
									teksto = "dec"
								else
									-- defaŭlta valoro, se uzanto provas difini sensencan valoron
									teksto = "dms"
								end
							end
						end
						if (latitudo ~= "" and latitudo ~= nil and longitudo ~= "" and longitudo ~= nil) or (latitudo2 ~= "" and latitudo2 ~= nil and longitudo2 ~= "" and longitudo2 ~= nil) then

							latitudo = latitudo or latitudo2 
							longitudo = longitudo or longitudo2 
							local k = koordinatoj(latitudo, longitudo, regiono, ligiltipo, nomo, supre, teksto)

							if k ~= "" and k ~= nil then
								
								if a3 ~= "" and a3 ~= nil then
									local n = argumentoj(args,a3)	-- transprenas la valoron el la ŝablono
									if n ~= nil then
										k = k .. n				-- aldonas noton
									end
								end

								linivarianto(c1,k,"",montrilo)
							end
						else
							local wdlatitudo, wdlongitudo
							-- trajto por kelkaj ŝablonoj, kiuj jam subtenu la koordinatojn el Vikidatuma ero P625
							local metukoordinatojn = false							
							-- rigardas, ĉu la difinita valoro de tipo estas en la kondiĉa listo aŭ ne
							if v['pkondicho'] ~= "" and v['pkondicho'] ~= nil then
								local kondicho = v['pkondicho']
								local strings = mw.text.split(kondicho, "///", plain)	
								for k, v in pairs(strings) do
									if v == tipo then
										metukoordinatojn = true
										break
									end
								end
							end
							if shablono == "Informkesto urbo" or metukoordinatojn then
								if wdid ~= "" and wdid ~= nil then
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude",id=wdid} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude",id=wdid} })							
								else	
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude"} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude"} })
								end
							end
						
							if wdlatitudo ~="" and wdlatitudo ~= nil and wdlongitudo ~= "" and wdlongitudo ~= nil then
								local supre = "/"								
								local k = koordinatoj(wdlatitudo, wdlongitudo, regiono, ligiltipo, nomo, supre, teksto)
								local neniukoordinato = argumentoj(args,"neniukoordinato")
								
								if k ~= "" and k ~= nil and neniukoordinato ~= "jes" then
								
									if a3 ~= "" and a3 ~= nil then
										local n = argumentoj(args,a3)	-- transprenas la valoron el la ŝablono
										if n ~= nil then
											k = k .. n				-- aldonas noton
										end
									end
									local ligilo = wdlink (wdid, "P625") or ""	
									k = k .. ligilo
									linivarianto(c1,k,"jes", montrilo)
								end
						
							end
						end
					end -- a1

				elseif t == "mapo" then
---------------- MAPO KUN MARKILO -------------------------------------------------------------------------------------------------------------------------------
				-- mapo(mapo,aliamapo,mapofono,lat,lon,markocelo,tipo,priskribo,neniukoordinato)
					local isomapo
					local mapnumero = v["mapnumero"]
					if args['uzuiso'] == "jes" and mapnumero ~= "dua" then
						isomapo = isomapilo(args['regiono-ISO'])
					end
					if v['shanghebla'] ~= "" and v['shanghebla'] ~= nil then
						-- testo, ĉu ŝanĝebla mapo estas difinita
						local sh = v['shanghebla'] 
						local testo = argumentoj(args,sh)
						if testo ~= "" and testo ~= nil then
						-- se jes, malebligu la neŝanĝeblan unuan mapon, kiel nun ja estas trajto de {{informkesto urbo}}	
							param = nil
							isomapo = nil
						end
					end
					if v['kashu'] ~="" and v['kashu'] ~= nil then
						-- testo, ĉu ŝanĝebla mapo estas difinita
						local sh = v['kashu']
						local testo = argumentoj(args,sh)
						if testo ~= "" and testo ~= nil then
						-- se jes, malebligu la neŝanĝeblan unuan mapon, kiel nun ja estas trajto de {{informkesto urbo}}	
							param = nil
							isomapo = nil
						end
					end

					if (param ~= "" and param ~= nil) or isomapo then 
						param = param or isomapo
						if param == "iso" then
							param = isomapilo(args['regiono-ISO'])
						end
						local latitudo = argumentoj(args,"latitudo")
						local longitudo = argumentoj(args,"longitudo")
						local latitudo2, longitudo2 = koordargumentoj(args, "situo")
						local latitudo3, longitudo3
						local latitudo4, longitudo4						
						local koord1 = v['koord1']
						local koord2 = v['koord2']						
						if koord1 ~= "" and koord1 ~= nil then
							latitudo3, longitudo3 = koordargumentoj(args, koord1)	
						end						
						if koord2 ~= "" and koord2 ~= nil then
							latitudo4, longitudo4 = koordargumentoj(args, koord2)	
						end							
						
						local neniukoordinato = argumentoj(args,"neniukoordinato")

						local temo = tipoj[1]
						if temo ~= "" and temo ~= nil then
							temo = mw.ustring.lower(temo)
						end
	
						 	if pri ~= "" and pri ~= nil then
							 	pri = argumentoj(args,pri)
						 	end
						 	if (shablono=="Informkesto urbo"  or submodulo == "urbo") and (pri == "" or pri == nil) then
								pri = "Situo de " .. titolo
							end	
						 	if a1 ~= "" and a1 ~= nil then
							 	a1 = argumentoj(args,a1)
						 	end	
						 	if a2 ~= "" and a2 ~= nil then
							 	a2 = argumentoj(args,a2)
						 	end			
						 	if a3 ~= "" and a3 ~= nil then
							 	a3 = argumentoj(args,a3) or "reliefo"
						 	end		
						 	if a4 ~= "" and a4 ~= nil then
							 	a4 = argumentoj(args,a4)
						 	end		
						 	local t = v['koordtipo']
						 	local regiono1, tipo1, regiono, tipo2
						 	if t ~= "" and t ~= nil then
								regiono1, tipo1 = koordtipo(argumentoj(args, t))   -- kodo por {{Geokesto}} aŭ simila ŝablono
								regiono = argumentoj(args,"regiono-ISO") or regiono1
								tipo2    = argumentoj(args,"type") or tipo1 
							else
								regiono = argumentoj(args,"regiono-ISO") 
								tipo2    = argumentoj(args,"type") 								
							end
							if ktipo ~= "" and ktipo ~= nil and (tipo2 == "" or tipo2 == nil) then
								tipo2 = ktipo
							elseif tipo == "" or tipo == nil then
								tipo2 = "landmark"
							end							
							-- aktivigo de kelkaj pliaj parametroj por la unua mapo kun markilo
							local angulo = ""
							if mapnumero ~= "dua" then
								angulo ="jes"
							end
							if temo == "montaro" then
								neniukoordinato = "jes"
								montru="ne"
							end	
							local marko=argumentoj(args,'marko') 
							local markospeco=argumentoj(args,'markospeco')
						
						if (latitudo ~= "" and latitudo ~= nil and longitudo ~= "" and longitudo ~= nil) or (latitudo2 ~= "" and latitudo2 ~= nil and longitudo2 ~= "" and longitudo2 ~= nil) 
						 or (latitudo3 ~= "" and latitudo3 ~= nil and longitudo3 ~= "" and longitudo3 ~= nil) or (latitudo4 ~= "" and latitudo4 ~= nil and longitudo4 ~= "" and longitudo4 ~= nil) 
						 or (neniukoordinato ~= "" and neniukoordinato ~= nil) or temo == "montaro" then
						 	latitudo = latitudo or latitudo2 or latitudo3 or latitudo4 
							longitudo = longitudo or longitudo2 or longitudo3 or longitudo4 

							local m = situomapo(param,a1,a2,latitudo,longitudo,a4,tipoj[1],pri,neniukoordinato,a3,regiono,tipo2,"ne",angulo,args,marko,markospeco)

							aldonuchelon(m)   
						else
							
							local wdlatitudo, wdlongitudo
							-- trajto por kelkaj ŝablonoj, kiuj jam subtenu la koordinatojn el Vikidatuma ero P625	
							if shablono == "Informkesto urbo"  or submodulo == "urbo" or shablono == "Informkesto geografiaĵo" then
								if wdid ~= "" and wdid ~= nil then
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude",id=wdid} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude",id=wdid} })							
								else	
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude"} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude"} })
								end
							end							
							
							if 	wdlatitudo ~= "" and wdlatitudo ~= nil and wdlongitudo ~= "" and wdlongitudo ~= nil then
							
							local m = situomapo(param,a1,a2,wdlatitudo,wdlongitudo,a4,tipoj[1],pri,neniukoordinato,a3,regiono,tipo2,"ne", angulo,args,marko,markospeco)							
							aldonuchelon(m,x,"jes")   	
							
							end	
							
						end
					else	 -- lokumilo forestas

						 	if a1 ~= "" and a1 ~= nil then          -- ĉu en la difina tabelo enestas io uzebla?
							 	a1a = argumentoj(args,a1)			-- transpreno el la ŝablono
								if a1a ~= "" and a1a ~= nil then	-- ĉu parametro estas en la ŝablona uzado?
						 			if a2 ~= "" and a2 ~= nil then
							 			a2 = argumentoj(args,a2)
						 			end	
						 			if pri ~= "" and pri ~= nil then
								 		pri = argumentoj(args,pri)
							 		end							 		
									
									local m = situomaposenmarko(a1a,pri,a2,tipoj[1])
									aldonuchelon(m)		
								end
						 	end							
					end

				elseif t == "mapo2" then	
---------------- KOMUTEBLAJ MAPOJ -----------------------------------------------------------------------------------------------------------------					
					if param ~= "" and param ~= nil then
						local latitudo = argumentoj(args,"latitudo")
						local longitudo = argumentoj(args,"longitudo")
						local latitudo2, longitudo2 = koordargumentoj(args, "situo")
						local latitudo3, longitudo3
						local latitudo4, longitudo4						
						local koord1 = v['koord1']
						local koord2 = v['koord2']						
						if koord1 ~= "" and koord1 ~= nil then
							latitudo3, longitudo3 = koordargumentoj(args, koord1)	
						end						
						if koord2 ~= "" and koord2 ~= nil then
							latitudo4, longitudo4 = koordargumentoj(args, koord2)	
						end	
						local t = v['koordtipo']
						local regiono1, tipo1, regiono, ligiltipo
						if t ~= "" and t ~= nil then
							regiono1, tipo1 = koordtipo(argumentoj(args, t))   -- kodo por {{Geokesto}} aŭ simila ŝablono
							regiono = argumentoj(args,"regiono-ISO") or regiono1
							ligiltipo    = argumentoj(args,"type") or tipo1 
						else
							regiono = argumentoj(args,"regiono-ISO") 
							ligiltipo    = argumentoj(args,"type") 								
						end
						if ktipo ~= "" and ktipo ~= nil and (ligiltipo == "" or ligiltipo == nil) then
							ligiltipo = ktipo
						elseif ligiltipo == "" or ligiltipo == nil then
							ligiltipo = "landmark"
						end	
						-- local nomo = 
						local tipo=tipoj[1]
						local marko=argumentoj(args,'marko') 
						local markospeco=argumentoj(args,'markospeco')
						local mapotipo=argumentoj(args,'tipo')     
						-- unua mapo
						local tipo1=argumentoj(args,a1)
						local alt1=argumentoj(args,pri)
						local mapo1=v['mapo1']
						local mapo1=argumentoj(args,mapo1)
						local fonamapo1=v['fonmapo1']
						local fonamapo1=argumentoj(args,fonamapo1)							
						-- dua mapo
						local tipo2=argumentoj(args,a2)
						local alt2=argumentoj(args,pri2)
						local mapo2=v['mapo2']
						local mapo2=argumentoj(args,mapo2)
						local fonamapo2=v['fonmapo2']
						local fonamapo2=argumentoj(args,fonamapo2)	
						-- tria mapo
						local tipo3=argumentoj(args,a3)
						local alt3=argumentoj(args,pri3)
						local mapo3=v['mapo3']
						local mapo3=argumentoj(args,mapo3)
						local fonamapo3=v['fonmapo3']
						local fonamapo3=argumentoj(args,fonamapo3)							
						-- dua mapo
						local tipo4=argumentoj(args,a4)
						local alt4=argumentoj(args,pri4)
						local mapo4=v['mapo4']
						local mapo4=argumentoj(args,mapo4)
						local fonamapo4=v['fonmapo4']
						local fonamapo4=argumentoj(args,fonamapo4)

						if (latitudo ~= "" and latitudo ~= nil and longitudo ~= "" and longitudo ~= nil) or (latitudo2 ~= "" and latitudo2 ~= nil and longitudo2 ~= "" and longitudo2 ~= nil) 
						 or (latitudo3 ~= "" and latitudo3 ~= nil and longitudo3 ~= "" and longitudo3 ~= nil) or (latitudo4 ~= "" and latitudo4 ~= nil and longitudo4 ~= "" and longitudo4 ~= nil) then	
						 	latitudo = latitudo or latitudo2 or latitudo3 or latitudo4
							longitudo = longitudo or longitudo2 or longitudo3 or longitudo4	
								
							local m = situomapo2(param,latitudo,longitudo,titolo,punkto,tipo,marko,mapotipo, tipo1,alt1,mapo1,fonamapo1, tipo2,alt2,mapo2,fonamapo2, tipo3,alt3,mapo3,fonamapo3, tipo4,alt4,mapo4,fonamapo4,ligiltipo,regiono,markospeco)
							aldonuchelon(m)
						else
							local wdlatitudo, wdlongitudo
							-- trajto por kelkaj ŝablonoj, kiuj jam subtenu la koordinatojn el Vikidatuma ero P625	
							if shablono == "Informkesto urbo"  or submodulo == "urbo" or shablono == "Informkesto geografiaĵo" then
								if wdid ~= "" and wdid ~= nil then
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude",id=wdid} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude",id=wdid} })							
								else	
									wdlatitudo = wikidata.claim({args={"P625", parameter="latitude"} })
									wdlongitudo = wikidata.claim({args={"P625", parameter="longitude"} })
								end
							end							
							
							if 	wdlatitudo ~= "" and wdlatitudo ~= nil and wdlongitudo ~= "" and wdlongitudo ~= nil then
							
							local m = situomapo2(param,wdlatitudo,wdlongitudo,titolo,punkto,tipo,marko,mapotipo, tipo1,alt1,mapo1,fonamapo1, tipo2,alt2,mapo2,fonamapo2, tipo3,alt3,mapo3,fonamapo3, tipo4,alt4,mapo4,fonamapo4,ligiltipo,regiono,markospeco)							
							aldonuchelon(m,x,"jes")   	
							
							end								
							
						end
					end
					
				elseif t == "alto" or t == "longo" then
---------------- ALTO ---------------------------------------------------------------------------------------------
					-- komuna parto kun priskribo
					local c1 = pri or " - alteco"
					-- varianto de priskriba teksto
					a1a = argumentoj(args,a1) 
					if a1a ~= "" and a1a ~= nil then
						c1 = a1a
					end					
					local unuo = "[[Metro|m]]"
					if t == "longo" then
						unuo = "[[Kilometro|km]]"
						if tipo == "konstruaĵo" or tipo == "monumento" or tipo == "ponto" then
							unuo = "[[Metro|m]]"
						end
					end
					-- se parametro estas en la artikolo
					if param ~= "" and param ~= nil then
						local n = tonumber (param)
												
						if n ~= nil then
							local c2 = n
							local regiono = argumentoj(args,"regiono-ISO")
							if regiono ~= "" and regiono ~= nil and unuo == "[[Metro|m]]" then
								-- nur la du unuaj literoj estu uzataj
								local kodo = mw.ustring.sub(regiono,1,2)
								c2 = alteco(c2,kodo)
							else
								c2 = formatnum(n)
								c2 = c2 .. " " .. unuo								
							end
							c2 = notaldono(notovaloro,c2)
							c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)								
							linivarianto(c1,c2,"",montrilo)
						else
							local c2 = param
							c2 = mw.ustring.gsub(c2,"%.",",")	
							c2 = notaldono(notovaloro,c2)
							c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)								
							linivarianto(c1,c2,"",montrilo)
							nenumero=true								-- aktivigas zorgigan kategorion
						end
					else
						--ĉu vikidatuma ero ekzistas
						local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)
						if wd ~= "" and wd ~= nil then
								local ligilo = wdlink (wdid, pk)
								local c2 = wd
								if regiono ~= "" and regiono ~= nil and unuo == "[[Metro|m]]" then
									-- nur la du unuaj literoj estu uzataj
									local kodo = mw.ustring.sub(regiono,1,2)
									c2 = alteco(c2,kodo)
								else								
									c2 = formatnum(wd)
									c2 = c2 .. " " .. unuo		
								end	
								c2 = notaldono(notovaloro,c2)
								c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)									
								c2 = c2 .. ligilo							
								linivarianto(c1,c2,"jes",montrilo)
						end
					
					end
					
				elseif t == "areo" then	
---------------- AREO ---------------------------------------------------------------------------------------------
					-- komunuo parto kun priskribo
						local c1 = pri or " - areo"		
						-- varianto de priskriba teksto
						a1a = argumentoj(args,a1) 
						if a1a ~= "" and a1a ~= nil then
							c1 = a1a
						end
						local c2 = ""	
						local c2a = ""
						local rondumo = 0
						if a3 ~= "" and a3 ~= nil then
							rondumo = argumentoj(args,a3)
							local testo = tonumber(rondumo)
							if testo ~= nil then
								rondumo = testo
							else
								rondumo = 0
							end
						end						
					if param ~= "" and param ~= nil then
						local areo = tonumber (param)
						if areo ~= nil then
							local unuo = argumentoj(args,a2) or ""

							if unuo ~= "" then
								c2 = areoKM2(areo,unuo,x,2) 
								c2a = areoHA(areo,unuo,x,rondumo)
								c2 = c2 .. " (" .. c2a .. ")"
							else
								c2 = areoKM2(areo,"km²",x,2) 
								c2a = areoHA(areo,"km²",x,rondumo)
								c2 = c2 .. " (" .. c2a .. ")"	
							end
							local procentoj = v['procentoj']    -- por "tera areo" kaj "akva areo" aŭ io tia
							if procentoj ~= "" and procentoj ~= nil then  -- ambaŭ "if"-blokoj ne estas kombineblaj, ĉar en la unua la enhavo de la variablo "procentoj" ŝanĝiĝas.
								procentoj = argumentoj(args,procentoj)
							end
							if procentoj ~= "" and procentoj ~= nil then
								c2 = c2 .. " <small>(" .. procentoj .. "%)</small>"
							end
							c2 = notaldono(notovaloro,c2)
							c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)								
							linivarianto(c1,c2,"",montrilo)
						else
							local c2 = mw.ustring.gsub(param,"%.",",")	
							c2 = notaldono(notovaloro,c2)
							c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)								
							linivarianto(c1,c2,"",montrilo)		
							nenumero=true							-- aktivigas zorgigan kategorion
						end
					else
						-- ĉu vikidatuma ero ekzistas
						local wd, wdunuo = wikidataGeo.areoKM2({args={id=wdid,mode="subfunkcio",round=2}})

						if wd ~= "" and wd ~= nil and wd ~= "neniuj valoroj" and pk ~= "" and pk ~= nil then
							wd = formatnum(wd) or wd							
							if wdunuo ~= "" and wdunuo ~= nil then
								c2 = wd .. " " .. wdunuo
							else
								c2 = wd .. " [[Kvadrata kilometro|km²]]"								
							end
							
							local wd2, wdunuo2 = wikidataGeo.areoHA({args={id=wdid,mode="subfunkcio",round=rondumo}})
							wd2 = formatnum(wd2) or wd2							
							if wdunuo2 ~= "" and wdunuo2 ~= nil then
								c2a = wd2 ..  " " .. wdunuo2
							else
								c2a = wd2 .. " [[Hektaro|ha]]"
							end
							if c2a ~= "" and c2a ~= nil then
								c2 = c2 .. " (" .. c2a .. ")"
							end

							local procentoj = v['procentoj']    -- por "tera areo" kaj "akva areo" aŭ io tia
							if procentoj ~= "" and procentoj ~= nil then  -- ambaŭ "if"-blokoj ne estas kombineblaj, ĉar en la unua la enhavo de la variablo "procentoj" ŝanĝiĝas.
								procentoj = argumentoj(args,procentoj)
							end
							if procentoj ~= "" and procentoj ~= nil then
								c2 = c2 .. " <small>(" .. procentoj .. "%)</small>"
							end
								local ligilo = wdlink (wdid, pk)
								c2 = notaldono(notovaloro,c2, a2)
								c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)									
								if ligilo ~= "" and ligilo ~= nil then
									c2 = c2 .. ligilo							
								end
								linivarianto(c1,c2,"jes",montrilo)
								
						end
						
					end

				elseif t == "denso" then
---------------- DENSO ----------------------------------------------------------------------
						if param ~= "" and param ~= nil then
							if param == "auto" then
								local rondumo = 2
								if a4 ~= "" and a4 ~= nil then
									rondumo = argumentoj(args,a4)
									local testo = tonumber(rondumo)
									if testo ~= nil then
										rondumo = testo
									else
										rondumo = 2
									end
								end		
								local loghantaro = argumentoj(args,a1) or argumentoj(args,a1_a) 
								local areo = argumentoj(args,a2) or argumentoj(args,a2_a) 
								local d     -- por denso								
								if loghantaro ~= "" and loghantaro ~= nil and areo ~= "" and areo ~= nil then
									local l = tonumber(loghantaro)
									local a = tonumber(areo)
									if l ~= nil and a ~= nil then
										local unuo = argumentoj(args,a3) or ""
										local a2    -- por transkalkulata areo
										if unuo ~= "" then
											a2 = areoKM2(a,unuo,"jes")
											if a2 ~= "" and a2 ~= nil then
												d = l/a2
											end
										else
											a2 = areoKM2(a,"km²","jes")
											if a2 ~= "" and a2 ~= nil then
												d = l/a2
											end											
										end
	
--										local d2 = tonumber(d)
--										if d2 ~= nil then
--											d = kalkuli._round(d2, rondumo)
											d = kalkuli._round(d, rondumo)
											d = formatnum(d)   		-- formatas numeron
											d = d .. " loĝ./[[Kvadrata kilometro|km²]]"
											linivarianto(pri,d,wd,montrilo)
--										end											
									end
								else
									-- rigardu al la Vikidatumaj eroj
									local wdloghantaro = wikidata.claim({args={pk,id=wdid} }) --wdparam(pk,wdid)
									local wdareo, wdunuo = wikidataGeo.areoKM2({args={id=wdid,mode="subfunkcio",round=rondumo}})
									-- testo
									--linivarianto(pri,wdareo,wd,montrilo)
									local denso
									if wdloghantaro ~= "" and wdloghantaro ~= nil and wdareo ~= "" and wdareo ~= nil then
										local wdloghantaro2 = tonumber(wdloghantaro)
										local wdareo2 = tonumber(wdareo)
										if wdloghantaro2 ~= nil and wdareo2 ~= nil then
											denso = wdloghantaro2 / wdareo2
											local rondumo = 2
											if a4 ~= "" and a4 ~= nil then
												rondumo = argumentoj(args,a4)
												local testo = tonumber(rondumo)
												if testo ~= nil then
													rondumo = testo
												else
													rondumo = 2
												end
											end											
											denso = kalkuli._round(denso, rondumo)
											denso = formatnum(denso)   		-- formatas numeron
											denso = denso .. " loĝ./[[Kvadrata kilometro|km²]]"
											local ligilo1 = wdlink (wdid, pk)
											local ligilo2 = wdlink (wdid, pk2)											
											denso = denso .. ligilo1 .. ligilo2
											wd = "jes"
											linivarianto(pri,denso,wd,montrilo)
										end
									end	
								end
							else
									local n = mw.ustring.gsub(param, ",", ".") -- tonumber nur ĝuste funkcias, se la esperanta komo estas anstataŭigata per la angla punkto, se necesas
									n = tonumber(n)
									if n ~= nil then
										n = mw.ustring.gsub(param, "%.", ",")  -- angla punkto estu anstataŭigata per esperanta komo
										n = n .. " loĝ./[[Kvadrata kilometro|km²]]"
										n = notaldono(notovaloro,n)
										n = refaldono(referencovaloro,n, referenconomo, referenconomodua)										
										linivarianto(pri,n,wd,montrilo)
									else	
										param = notaldono(notovaloro,param, a2)
										param = refaldono(referencovaloro,param, referenconomo, referenconomodua)										
										linivarianto(pri,param,wd,montrilo)
										nenumero=true					-- aktivigas zorgigan kategorion
									end									
									
--								end
--								end								

							end
						end	

				elseif t == "trafluo" then
---------------- TRAFLUO ---------------------------------------------------------------------
						if param ~= "" and param ~= nil then
							local c1 = pri or "Trafluo"
							local unuo = "[[Kubmetro|m³]]/[[Sekundo|s]]"
							local unuo1 = argumentoj(args,a2)		
							param = formatnum(param) or param
							if unuo1 ~= "" and unuo1 ~= nil then
								param = param .. " " .. unuo1
							else
								param = param .. " " .. unuo
							end
							param = notaldono(notovaloro,param)
							param = refaldono(referencovaloro,param, referenconomo, referenconomodua)	
							linivarianto(c1,param,"",montrilo)							
						end
				

				elseif t == "dato" then	
----------------- DATO -----------------------------------------------------------------------
						if param ~= "" and param ~= nil then
							local c1 = pri or "Dato" 
							local c1a = argumentoj(args, a1) or argumentoj(args, a1_a) or ""
							if c1a ~= "" then
								c1 = c1a
							end
--							aldonulinion(c1,param)
							param = notaldono(notovaloro,param, a2)
							param = refaldono(referencovaloro,param, referenconomo, referenconomodua)								
							linivarianto(c1,param,wd,montrilo)
						end
					
				elseif t == "-" then
---------------- DISIGA LINIO -----------------------------------------------------------------
					local c = '<hr style="display:none; " />'
					-- la strio aperu nur, se unu el la grupaj parametroj estas uzata
					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						
						for k, v in pairs(string) do
							local testo = argumentoj(args,v)
							
							if 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
								aldonuchelon(c,"linio")
								n = n +1
							end
						end
					end
				-- loko por pliaj variantoj
					
					
				end




---------------- FINO DE LA LAŬTIPA ANALIZO --------------------------------------------------------------
				else
					-- return '<span class="error">La submodulo verŝajne havas la malgustan strukturon</span>'
				end
				-- return k, v
--			end

		end	

				-- nestado de interna ŝablono	
				if args['enhavo'] ~= "" and args['enhavo'] ~= nil then
					-- tabela strukturo devas esti kreata de la interna ŝablono!
					tabelo:newline()
					tabelo:wikitext(args['enhavo'])
					tabelo:newline()		
				end
		
				if args['subŝablono'] ~= "jes" then
					-- ŝanĝu ŝablonon
					-- {{ŝanĝu ŝablonon|ŝablono=Informkesto geografiaĵo}}
					-- local t = changetemplate(shablono,fono)
					local t = informkesto._ligilaro (shablono,fono,"","","","","linio")
					tabelo:newline()
					:wikitext(t)
					:newline()
					:done()
				end	
		
				-- fino de la tabelo	
				r = tostring(tabelo)
				
				-- aldono de zorgigaj kategorioj
				local kat2 = ""
				local geotipo = ""
				if shablono == "Informkesto geografiaĵo" and tipo ~= "" and tipo ~= nil then
					kat2 = "ŝablono Geokesto"
					geotipo = tipo 
				elseif	shablono == "Informkesto urbo" then
					kat2 = shablono
					geotipo = argumentoj(args,"tipo") 
					if geotipo ~= "" and geotipo ~= nil then
						geotipo = geotipo 
					else 
						geotipo = "urbo"
					end
				else
					kat1 = ""
				end
				if kat1 ~= "" then          -- kat1 troviĝas je la komenco de la modulo, ĉar ĝi estas difinata nur, se oni elvokas la modulon en artikolo, ĉu rekte aŭ malrekte ne gravas
					-- kategorio laŭ la skemoj [[Kategorio:{{{1|}}} kun ŝablono Geokesto]] kaj [[Kategorio:{{{tipo|}}} kun Informkesto urbo]]
					local kategorio1 = "[[Kategorio:" .. geotipo .. kat1 .. kat2 .. "]]"
					r = r .. kategorio1
					-- kategorioj por flagoj kaj blazonoj el Vikidatumoj
					local flago = argumentoj(args,"flago")
					if  flago == "" or flago == nil then
						-- {{#invoke:Wikidata|claim|P41}}
						local wd = wikidata.claim({args={"P41"} })
						if wd ~= "" and wd ~= nil then
							local kategorio2 = "[[Kategorio:Artikoloj kun Vikidatumaj flagoj]]"
							r = r .. kategorio2
						end
					end
					local blazono = argumentoj(args,"blazono")
					if  blazono == "" or blazono == nil then
						-- {{#invoke:Wikidata|claim|P41}}
						local wd = wikidata.claim({args={"P94"} })
						if wd ~= "" and wd ~= nil then
							local kategorio3 = "[[Kategorio:Artikoloj kun Vikidatumaj blazonoj]]"
							r = r .. kategorio3
						end
					end		
					if nenumero == true then
						r = r .. "[[Kategorio:Nenombraj signifoj de nombraj parametroj]]"
					end
				end
				
				return r			
		
	end
	
	
end	

-- plia testo
function p._testo (tipoj,args)

	-- antaŭdifino de kelkaj parametroj 
	if args["fono"] == "" or args["fono"] == nil then
		args["fono"] = "#EFEFEF"
	end
	args["submodulo"] = "testado"
	
	return p._informkesto(tipoj,args)
	
end	


-- aliaj informkestoj
function p._urbo (tipoj,args)

	-- antaŭdifino de kelkaj parametroj 
	if args["fono"] == "" or args["fono"] == nil then
		--args["fono"] = "#EFEFEF"
		if args['malfondo'] or args['malapero'] then
			args["fono"] = "#F9F9F9"
		elseif args['tipo']	 == "vilaĝo" then
			args["fono"] = "#96C8A2"
		else
			args["fono"] = "#DDFFDD"
		end
	end
	args["submodulo"] = "urbo"
	args["ŝablono"] = "Informkesto urbo"
	args['uzuiso'] = "jes"    -- aktivigas la "tradukilon" por regiono-ISO al maponomo
	if args['tipo1'] == "" or args['tipo1'] == nil then
		args['tipo1'] ="normala"
	end
	if args['tipo2'] == "" or args['tipo2'] == nil then	
		args['tipo2'] ="normala"
	end
	
	local r = p._informkesto(tipoj,args)
	
	if kat1 ~= "" then
		local lando = args['lando']
		-- {{#invoke:CatUtil|city|tipo={{{tipo}}}|lando={{{lando}}}|ordigilo={{#if:{{{nomo|}}}|{{{nomo}}}|{{PAGENAMEBASE}}}}|ŝablono=Informkesto urbo<!--fino "invoke"-->}}}}}}
		local kat = kategorioj.city({args={tipo=tipo,lando=lando,ordigilo=titolo,['ŝablono']=args["ŝablono"]} })
		if kat ~= "" and kat ~= nil then
			r = r .. kat
		end
	end
	
	return r
	
end	

--
function p._wdlink (tipoj,args)
	local wd = args['wd']
	local pkodo = args['pkodo']
	return wdlink (wd, pkodo)
end	


-- helpaj funkcioj por la frame-parametraro kaj parametra transpreno el ŝablono resp. #invoke:

local function processKestoArgs(args)
	-- This function processes a table of arguments and returns two tables: an array of portal names for processing by ipairs, and a table of
	-- the named arguments that specify style options, etc. We need to use ipairs because we want to list all the portals in the order
	-- they were passed to the template, but we also want to be able to deal with positional arguments passed explicitly, for example
	-- {{portal|2=Politics}}. The behaviour of ipairs is undefined if nil values are present, so we need to make sure they are all removed.
	args = type(args) == 'table' and args or {}
	local tipoj = {}
	local namedArgs = {}
	for k, v in pairs(args) do
		if type(k) == 'number' and type(v) == 'string' then -- Make sure we have no non-string babel names.
			table.insert(tipoj, k)
		elseif type(k) ~= 'number' then
			namedArgs[k] = v
		end
	end
	table.sort(tipoj)
	for i, v in ipairs(tipoj) do
		tipoj[i] = args[v]
	end
	return tipoj, namedArgs
end
 
local function makeWrapper(funcName)
	-- Processes external arguments and sends them to the alia functions.
	return function (frame)
		-- If called via #invoke, use the args passed into the invoking
		-- template, or the args passed to #invoke if any exist. Otherwise
		-- assume args are being passed directly in from the debug console
		-- or from another Lua modulo.
		local origArgs
		if frame == mw.getCurrentFrame() then
			origArgs = frame:getParent().args
			for k, v in pairs(frame.args) do
				origArgs = frame.args
				break
			end
		else
			origArgs = frame
		end
		-- Trim whitespace and remove blank arguments.
		local args = {}
		for k, v in pairs(origArgs) do
			if type(v) == 'string' then
				v = mw.text.trim(v)
			end
			if v ~= '' then
				args[k] = v
			end
		end
		local templateArgs = frame:getParent().args
		args['Mapo en angulo'] = templateArgs['Mapo en angulo'] or args['Mapo en angulo']
		return p[funcName](processKestoArgs(args)) -- passes two tables to func: an array of portal names, and a table of named arguments.
	end
end
 
local funcNames = {'informkesto', 'testo', 'urbo', 'wdlink'}
 
for _, funcName in ipairs(funcNames) do
	p[funcName] = makeWrapper('_' .. funcName)
end



return p