Saltu al enhavo

Modulo:Geografiaĵoj

El Vikipedio, la libera enciklopedio
Dokumentado Dokumentado


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

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, 2024-05-18
-- ĉ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")
local kontrasto = require ("Modulo:Color contrast")
local ligiloj = require ("Modulo:Linkutil")
local datoj = require("Modulo:Datoj")

-- propraj submoduloj
local koloroj=require ("Modulo:Geografiaĵoj/koloroj")
local type_atributo=require ("Modulo:Geografiaĵoj/type:")
local mapsimbolo=require ("Modulo:Geografiaĵoj/simbolo")
local fonbildo=require ("Modulo:Geografiaĵoj/fonobildo")
local tipoareo=require ("Modulo:Geografiaĵoj/areo")

-- variabloj por aŭtomataj kategorioj
        local kategorio = ""
        currentTitle = mw.title.getCurrentTitle()
        local ns   = currentTitle.namespace
        local kat1 = ""
        local wdidstirilo = true
        local wdref = ""
        local artref = ""
        local nelogh = ""     -- por insuloj, insularoj ktp.
        local nelogh2 = ""    -- por atoloj
        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
        	wdref = false
        	artref = false
        	nenumero=false
        	subshablono = false
        	nelogh = false
        	nelogh2 = 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
						if ref ~= "auto" and ref ~= nil and ref ~= "" then
							wdref = true
						end
						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	

-- transprenas vikidatuman eron, se ne temas pri bildo, sed kun "parameter=link"
local function wdparam2(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", parameter="link"} })					
					else	
						-- r = shablonoref(pk) 		wikidata.claim({args={pk,references="jes"} })						
						r, ref = wikidata.claim({args={pk,references="raw", parameter="link"} })	
					end
					if r ~= "" and r ~= nil then
						if ref ~= "auto" and ref ~= nil and ref ~= "" then
							wdref = true
						end
						return r, ref
					end				
				else	
					if wdid ~= "" and wdid ~= nil then
						r = wikidata.claim({args={pk,id=wdid, parameter="link"} })					
					else	
						r = wikidata.claim({args={pk, parameter="link"} })	
					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 unio
			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 simbolo_priskribo (pk2, wdid)
			local r	
			if pk2 == 'P163' or pk2 == 'P237' then
				local nid 
				if wdid ~= "" and wdid ~= nil then
					nid = wikidata.claim({args = { pk2, id = wdid, parameter='numeric-id'} })
				else
					nid = wikidata.claim({args = { pk2, parameter='numeric-id'} })
				end
				if nid ~= "" and nid ~= nil then
					local l
					if pk2 == 'P163' then
						l = 'Flago'
					elseif pk2 == 'P237' then
						l = 'Blazono'
					end
					r = '[[Specialaĵo:AboutTopic/Q' .. nid .. '|' .. l .. ']]'
				end
			end	
			return r or ""
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
							local priskriboT = simbolo_priskribo (pk2, wdid)
							if priskriboT ~= "" then
								priskriboB = priskriboT
							else	
								priskriboB = pri
							end
							
						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	

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


-- 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 " .. 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
		local teksto = "#000"
		-- se koloroj havas tro malaltan kontraston, korektu la tekstokoloron
		local testo = kolorkontrasta_rilatumo(teksto,fono)
		testo = tonumber(testo)
		if type(testo) == 'number' and testo < 4.5 then
			teksto = "white"
		end	
		
		-- kaplinia ĉelo
		local kapchelo = tabelkapo:tag('th')	
			:addClass(klaso)
			:attr('colspan','2')
			:css('color',teksto)							
			:css('background-color',fono)
			:css('text-align','center')
			:css('padding','0.2em')
			: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
	local teksto = "#000"
	-- se koloroj havas tro malaltan kontraston, korektu la tekstokoloron
	local testo = kolorkontrasta_rilatumo(teksto,fono)
	testo = tonumber(testo)
	if type(testo) == 'number' and testo < 4.5 then
		teksto = "white"
	end	
	if fono ~= "" and fono ~= nil then
		local titol1chelo = subtitolo1:tag('th')
			:css('background-color', fono)
			:css('color',teksto)			
			:css('border-top','1px solid ' .. fono)
			:css('border-bottom','1px solid ' .. fono)			
			:css('text-align','center')
			:attr('colspan','2')
			:css('padding','0.4em 0.2em')			
			:wikitext(titolo)
			:done()
			:newline()	
	else	
		local titol1chelo = subtitolo1:tag('th')
			:css('text-align','center')
			:attr('colspan','2')
			:wikitext(titolo)
			:done()
			:newline()
	end
end	

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

end	

-- 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 mw.ustring.sub(c1,1,3) == " - " then
			v = "td"
		end
		if v == "td"  then
			etikedo = v
		end	
		local chelo1
		if montrilo ~= '' and montrilo ~= nil then
			chelo1 = tabellinio:tag(etikedo)
				:css('text-align','left')
				:css('padding','0.4em 0.2em 0.4em 0.8em')
				:css('white-space','nowrap')
				:wikitext(c1)
				:done()			
		else	
			chelo1 = tabellinio:tag(etikedo)
				:css('text-align','left')
				:wikitext(c1)
				:done()			
		end
		if wd == "jes"	 then
			wd = "wikidata-content"
		else
			wd = ""
		end	
			local chelo2 
		if montrilo ~= '' and montrilo ~= nil then
			chelo2 = tabellinio:tag('td')	
				:addClass(wd)
				:css('padding','0.4em 0.2em 0.4em 0.8em')
				:wikitext(c2) 
				:done()
				:newline()			
		else	
			chelo2 = tabellinio:tag('td')	
				:addClass(wd)
				:wikitext(c2) 
				:done()
				:newline()			
		end	
end	

-- unuopa ĉelo
-- c - enhavo de la ĉelo
-- v - varianto de ĉelo
-- wd - ĉu datoj el Vikidatuma ero
local function aldonuchelon (c, v, wd, montrilo)
		local t = ""
		local css_klaso = "mergedrow"
		local shtopado = '0.4em 0.2em'
		if v == "titolo" then			
			t = "th"
		elseif v == "linio"	then
			t = "td"
			css_klaso = "mergedtoprow"
			shtopado = '0'
		else
			t = "td"
		end
		if montrilo == nil then
			montrilo = ""
		end		
		local tabellinio = tabelo:tag('tr')
				:attr('title',montrilo)
				:addClass(css_klaso)
		if wd == "jes"	 then
			wd = "wikidata-content"
		else
			wd = ""
		end	
			local chelo = tabellinio:tag(t)	
				:addClass(wd)
				:attr('colspan','2')
				:css('text-align','center')	
				:css('padding',shtopado)
				: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
			artref = true
			return param
		elseif referenco ~= "" and referenco ~= nil then
			r = frame:extensionTag('ref',  referenco )
			param = param .. r
			artref = true			
			return param							
		end	
		
	else
		return param
	end
end	

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

-- 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 			
			r = kalkuli._round(r,rondumo)				
		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	

-- enplektas la submodulon pri areo, ĉu estu defaŭlte km² aŭ m²
local function areotipo(tipo)
	local r
	local test = tipoareo.areo(tipo)	
	if test ~= "" and test ~= nil then
		r = test
	end
	return r
end	

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

-- 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 "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, globo )
			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 /
					globe=globo
				}
			}
			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,markogrando,teksto)
			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,"mapo-stilo")	-- ŝanĝenda por eviti kolizion kun la enhava parametro "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 = 	mapsimbolo.simbolo(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=teksto,
					['Teksto-loko']="none",
					['Marko-celo']=markocelo,
					Marko=Marko,
					Markospeco=markospeco,
					['Marko-ampl']=markogrando,
					['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, globo)
			local frame = mw.getCurrentFrame()
			local m = "Tero"
			if globo == "moon" then
				m = "Luno"	
--			elseif globo == "mars"	then
--				m = "marso"
			end
			local n = frame:expandTemplate {
				title="Situo sur mapo",
				args ={
					m,
					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
				local frame = mw.getCurrentFrame()
				local n = frame:expandTemplate {
					title= "ParmPart",
					args = {
						"1",
						isokodo
					}
				}
				--kodo = isokodo
				kodo = n
			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=mapsimbolo.simbolo(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 function CoordinateLAT(lat)
			local frame = mw.getCurrentFrame()
			local r	
				r = frame:expandTemplate {
					title="CoordinateLAT",
					args={
						lat
					}
				}			
			return r			
end	

local function CoordinateLONG(long)
			local frame = mw.getCurrentFrame()
			local r	
				r = frame:expandTemplate {
					title="CoordinateLONG",
					args={
						long
					}
				}			
			return r			
end


-- jen funkcio por elvoko de la ŝablono mapligilo

local function mapligilo(komuneja_mapo, nomo, zomo, lat1, long1, lat2, long2, varianto, wd_id)
		local frame = mw.getCurrentFrame()
		local r
		-- la unua litero fariĝu majuskla
		local teksto = mw.ustring.upper(mw.ustring.sub(varianto, 1, 1)) .. mw.ustring.sub(varianto, 2)
		local mapo_parametroj = mw.loadData('Modulo:Geografiaĵoj/mapligilo')
		local mapo_listo = mapo_parametroj.mapligilo
		if type(mapo_listo) == "table" then
			for k, v in pairs(mapo_listo) do
				local varianto2, streko, fono, markilo, markilo2, markilokoloro, grupo
				if type(v) == 'table' then
					varianto2=v["varianto"]
					streko=v["streko"]
					fono=v["fono"]
					markilo=v["markilo"]
					markilo2=v["markilo2"]					
					markilokoloro=v["markilokoloro"]					
					grupo=v["grupo"]
					if varianto2 == varianto then
						-- laŭgrupa traktado
						if grupo == '3' then
							
							local koord1=koordinatoj(lat1, long1)
							local koord2=koordinatoj(lat2, long2)			
					
							r = frame:expandTemplate {
									title='mapligilo', 
									args={
										['frame']='yes',
										plain='yes',
										['type'] = 'line',
										id=wd_id,
										from=komuneja_mapo,
										title='Linio',
										description='Linio',
										['frame-align']='center',
										['frame-width']='250',
										['stroke-width']='2',
										['stroke-color']=streko,
										fill=fono,
										text=nomo,
										zoom=zomo,
										type2='point',
										coord2=koord1,
										title2='Fonto',
										description2='Fonto',
										marker2=markilo,
										['marker-color2']=markilokoloro,										
										type3='point',
										coord3=koord2,
										title3='Enfluejo',
										description3='Enfluejo',
										marker3=markilo2,
										['marker-color3']=markilokoloro										
									}
							}
							return r
						elseif grupo == '2' or grupo == '1' then
							local koord=koordinatoj(lat1, long1)
							local lat=CoordinateLAT(lat1)
							local long=CoordinateLONG(long1)			
							r = frame:expandTemplate {
									title='mapligilo', 
									args={
										['frame']='yes',
										plain='yes',
										['type'] = 'shape',
										id=wd_id,
										title=teksto,
										description=teksto,
										['frame-lat']=lat,
										['frame-long']=long,						
										['frame-align']='center',
										['frame-width']='250',
										['stroke-width']='2',
										['stroke-color']=streko,
										fill=fono,
										text=nomo,
										zoom=zomo,
										type2='point',
										coord2=koord,
										title2=teksto,
										description2=teksto,
										marker2=markilo,
										['marker-color2']=markilokoloro
									}
							}
							return r
		
						end					



						
					end
				end	
			end	
		end	

	
end	

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

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


-- traktu ligilon per {{URL}}
local function url(ligilo, teksto)
		local frame = mw.getCurrentFrame()		 
		local r = frame:expandTemplate {
			title='Ŝablono:URL',
			args = {
				ligilo,
				teksto
			}
		}
		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 ""
	local tipob = tipoj[2] or ""
	if tipo ~= "" then
		tipo = mw.ustring.lower(tipo)
	end	
	if tipob ~= "" then
		tipob = mw.ustring.lower(tipob)
	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
	
	-- variablo por ligilo al Vikidatuma paĝo
	local vikidatumoj=""
	if shablono == "Informkesto geografiaĵo" or shablono == "Informkesto urbo" then
		vikidatumoj="jes"
	end
	
	-- helpa parametro por testoj de valoroj el Vikidatumoj
	local wdid  
	if wdidstirilo == true then
		wdid = args['wd'] or args['wd-id']
	end
	
	-- tradukas la kutiman parametron al la propra
	local wv = args['sen banderolo']
	if wv == "jes" then
		args["vikivojaĝa bildo"] = "neniu"
	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
	local largho = args["informkesta larĝo"] or "23em"
	-- ekuzi submodulojn por la informkesta strukturo
	local submodulo = args['submodulo'] or "geokesto"	
	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',largho)
				: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
			titolklaso = fonbildo.fonobildo(tipo)
			tabelkapo(titolo, fono, '', wd, titolklaso, montrilo)

	else
			-- la variablo "tabelo" ne povas esti local, ĉar alie ĝia uzo en subŝablono ne funkcias		
			tabelo = mw.html.create()
			subshablono = true
	end	
	
	-- posttitola parto de la informkesto
	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, iso, kon, defaulto
		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"]
					iso=v["iso"]
					kon = v["kondicho"]
					globo =v["globe"]
					defaulto = v["defaulto"]

				-- 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 = "nomo por " .. referenco2 
					referenco2b = "nomo-dua por " .. referenco2 						
				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 -------------------------------------------------
					local kondicho = argumentoj(args, kon)
					if args['subŝablono'] ~= "jes" and kondicho ~= 'jes' then
						if param ~= "" and param ~= nil then
						tabelsubtitolo(param, fono, montrilo)
						end
					end		

			elseif t == 'subtitolo2'	then
--------------------------------------------------------------------------------
					local kondicho = argumentoj(args, kon)
					if param ~= "" and param ~= nil and kondicho ~= 'jes' then
						local r = param
						if a1 ~= "" and a1 ~= nil then
							local nombro = tonumber(a1)
							if nombro ~= nil then
								for i=1, nombro do
									local titolo = par .. i
									local st = argumentoj(args, titolo) or ""
									if st ~= "" then
										r = r .. ', ' .. '<span style="white-space: nowrap;">' .. st .. '</span>'
									end
								end	
							end
						end
						tabelsubtitolo(r,fono, montrilo)
					end	

				elseif t == "subtitolo3" or t == '-' then
----------------- SUBTITOLO KUN TEKSTO -------------------------------------------------------------------------------------------
					local c = '<hr style="display:none; " />'
					-- la strio aperu nur, se unu el la grupaj parametroj estas uzata
--					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
					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
									if t == 'subtitolo3' then
										local pri2 = argumentoj(args,a1)
										if pri2 ~= "" and pri2 ~= nil then
											pri = pri2
										end
										tabelsubtitolo(pri, fono2, montrilo)
									elseif t == '-'	then
										aldonuchelon(c,"linio")
									end
									n = n +1
								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 then
						if 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)
						end
					else 
						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	
					local kondicho = argumentoj(args, kon)
					-- 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  and kondicho ~= 'jes' 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) and kondicho ~= 'jes' 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  and kondicho ~= 'jes' 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" or t == "ligilo" then
---------------- TEKSTO - do duĉela teksto kun priskribo aŭ unuĉela sen priskribo --------------------------------------------------------------------------
					-- komuna parto de la priskribo
						local a2a
						local prialt
						local paramalt
						if pri ~= "" then
							prialt = pri							
							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
						paramalt = param	
						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 t == "loĝantaro" and param == "0" then
							-- aktivigu la stiran variablon por kategorio, se loĝantaro estas 0
							if tipo == "insulo" or tipo =="insularo" then
								nelogh = true
								param = "(neloĝata)"
							elseif tipo == "atolo" then
								nelogh2 = true
								param = "(neloĝata)"	
							elseif tipo == "ekoregiono"	then
								param = "(neloĝata)"
							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
							local trajto = argumentoj(args,a2)	
							local faldo = argumentoj(args,a2)
							-- varianto kun la parametro "trajto por libera"
							if prialt == "?" and t == "teksto" and trajto == "ĉelo" then
								local k = v["aldono3"]
								aldonulinion(pri,"","","", montrilo)
								kesteroj(paramalt, trajto, k)
							-- por faldado, se estas multe da informoj	
							elseif t == "teksto" and (faldo == "jes" or faldo == "1") then
									local pri2 = v["priskribo2"]
									local f = kestero(pri2,'+',fono,'0')
									tabelo:wikitext(f)
									-- aldonulinion(pri,param, "", "", montrilo)
									tabelsubtitolo(param, fono, montrilo)	
									local f2 = kestero('','*')
									tabelo:wikitext(f2)
							else	
								aldonulinion(pri,param, "", "", montrilo)
							end
						else
							aldonuchelon(param, "", "", montrilo)							
						end
					else
						-- ĉu vikidatuma ero ekzistas
						local wd, referencovaloro
						-- por plej alta kaj plej malalta. aldonoj eblas.
						if pk == 'P610' or pk == 'P1589' then
								wd, referencovaloro = wdparam2(pk,wdid,referencovaloro)	
						else	
							wd, referencovaloro = wdparam(pk,wdid,referencovaloro)	
						end
						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
								elseif t == "ligilo" then
									pri = "En TTT"  -- kiel en ekz. {{Informkesto urbo}}
									wd = url(wd,"Oficiala retejo")  -- voku la helpan ŝablonon
								elseif t == "teksto" then
									-- forĵeti strangaĵon el Vikidatumo
									if wd == "nekonata valoro" then
										wd = "?"
									end
								end		
								if t == "loĝantaro" and wd == "0" then
									if tipo == "insulo" or tipo =="insularo" then
										nelogh = true
										wd = "(neloĝata)"
									elseif tipo == "atolo" then
										nelogh2 = true
										wd = "(neloĝata)"								
									end									
								end
								wd = notaldono(notovaloro,wd, a2)
								wd = refaldono(referencovaloro,wd, referenconomo, referenconomodua)	
								wd = wd .. ligilo	
							if t == "loĝantaro" then
								-- {{#invoke:Wikidata|claim|P1082|id=Q64|qualifier=P585}}
								local wda2
								-- Veruko por ne afisxi K.E.
								if wdid ~= "" and wdid ~= nil then
									wda2 = wikidata.claim({args={pk,qualifier=pk2,id=wdid} })								
								else	
									wda2 =  wikidata.claim({args={pk,qualifier=pk2} })
								end
								if wda2 ~= "" and wda2 ~= nil then
									-- forigi K.E. el la teksto, sed ankaŭ la antaŭa spaco estu forigita
									wda2 = mw.ustring.gsub( wda2, " K%.E%.", "")
									wd = wd .. " <small>(" .. wda2 .. ")</small>"
								end
								-- fino de la veruko
							else
								if a2a ~= "" and a2a ~= nil then
									wd = wd .. " (" .. a2a .. ")"
								end	
							end
							-- wd = notaldono(noto,par, wd, args,a2,pk,wdid)	
							if pri ~= "" and pri ~= nil then	
								aldonulinion(pri,wd,"jes", "",montrilo)								
							else
								aldonuchelon(wd,"", "jes", montrilo)							
							end							

						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
								aldonulinion(lauc1,lauc2,"jes", "", montrilo)								
							end
								
						end

					end

				elseif t == "teksto1" or t == "ligilo1" then	
---------------- TEKSTO1 - do unuĉela teksto kun priskribo -------------------------------------------------------------------------
						-- komuna parto kun priskribo
						local p = pri or ""
						if p ~= "" then
							p = "<b>" .. p .. "</b>: "
						end		
						local p2 = ""
						local ligilo = ""
						local jes = ""
					-- se parametro estas en artikolo
					if param ~= "" and param ~= nil then
						p2 = p .. param
					else
						-- ĉu estas vikidatuma ero
						local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)
						if wd ~="" and wd ~= nil then
							ligilo = wdlink (wdid, pk) or ""
							if t == "ligilo1" then
								p = "<b>En TTT</b>: "  -- kiel en ekz. {{Informkesto urbo}}
								wd = url(wd,"Oficiala retejo")  -- voku la helpan ŝablonon
							end
							p2 = p .. wd	
							jes = "jes"
						end
					end
					-- eldono
					if p2 ~= "" then
						p2 = notaldono(notovaloro,p2)
						p2 = refaldono(referencovaloro,p2, referenconomo, referenconomodua)								
						p2 = p2 .. ligilo
						-- tio ebligu malaperigon, se la rilata Vikidatuma ero subite enhavas malaktualan informon
						if param ~= "neniu" and param ~= "ne" then
							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						
						local p2 = ""
						local ligilo = ""
						local jes = ""
					if param ~= "" and param ~= nil then
						param = "&nbsp;<b>[[:commons:Category:" .. param .. "|" .. param .. "]]</b>"
						p2 = bildo .. p .. param
					else	
						-- ĉu vikidatuma ero estas
						local wd = wdparam(pk,wdid)
						if wd ~= "" and wd ~= nil then
							wd = "&nbsp;<b>[[:commons:Category:" .. wd .. "|" .. wd .. "]]</b>"							
							p2 = bildo .. p .. wd
							ligilo = wdlink (wdid, pk) or ""
							jes = "jes"
						end
					end		
					-- eldono
					if p2 ~= "" then
						p2 = p2 .. ligilo								
						aldonuchelon(p2,"",jes, montrilo)							
					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						
						aldonulinion(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
							aldonulinion(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 = ligiloj._chuligilo2(param)
						local chuligi = argumentoj(args,par.." ligado")
						if testo == "ligu" and chuligi ~= "ne" 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 = argumentoj(args,"" .. v["parametro"] .. i) or ""
							-- local c2 = args["" .. v["parametro"] .. i] or ""
							if c2 ~= "" and c2 ~= nil then
								if chuflago ~= "" and chuflago ~= nil then
									c2 = flago(c2)
								else
									-- analizo, ĉu jam estas ligilo en la listero. se ne, aldonu ĝin.									
									local testo = ligiloj._chuligilo2(c2)
									local chuligi = argumentoj(args,"" .. v["parametro"] .. i .." ligado") or ""									
									if testo == "ligu" and chuligi ~= "ne" 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 = argumentoj(args, "" .. a1)
							-- local c1a = args["" .. a1]
							if c1a ~= "" and c1a ~= nil then
								c1 = c1a
							end
						end			
						local c2
						if div == true then
							c2 = listoj._list(";;;",param,"ne","faldebla","","jes")
						else
							-- (delimiter, text, x, mode, sep, w, kind, spaces, spaces1, spaces2)
							c2 = listoj._list(";;;",param,"ne","span",",","jes","","",0)
						end
						aldonulinion(c1,c2,"", "",montrilo)						
					else
						local wd
						if wdid ~= "" and wdid ~= nil then
							wd = wikidata.claim({args={pk,list=";;;",id=wdid} })						
						else
							wd = wikidata.claim({args={pk,list=";;;"} })
						end
						if wd ~= "" and wd ~= nil then
							local nombro = listoj._count(";;;",wd)
							local chufaldi = argumentoj(args,a2)
							local chufaldiN = tonumber(chufaldi)
							local ligilo = wdlink (wdid,pk) or ""
							local c2
							if chufaldiN == 1 or chufaldi == "faldo" then
								wd = nombro .. ligilo .. ";;;" .. wd
								c2 = listoj._list(";;;",wd,"jes","faldebla","","jes")							
							else
								wd = wd .. ligilo
								-- (delimiter, text, x, mode, sep, w, kind, spaces, spaces1, spaces2)
								c2 = listoj._list(";;;",wd,"jes","span",",","jes","","",0)							
							end	
							aldonulinion(pri,c2,"jes", "",montrilo)								
						end
					end
-----------  listo2 --------
				elseif t == "listo2" then
					local kondicho = argumentoj(args, kon)
					local def = defaulto -- ĉikaze por la faldado
					local faldo = argumentoj(args,a2)
					if args['subŝablono'] ~= "jes" and kondicho ~= 'jes' then
						if param ~= "" and param ~= nil then
							-- poste aldonota
						else	
							local wd 
							if wdid ~= "" and wdid ~= nil then
								wd = wikidata.claim({args={pk,parameter="link",list=";;;",id=wdid} })						
							else
								wd = wikidata.claim({args={pk,parameter="link",list=";;;"} })
							end			
							local ligilo = wdlink (wdid,pk) or ""
							if wd ~= nil then
								local nombro = listoj._count(";;;",wd)
								nombro = tonumber(nombro)
								local listeroj = v['listeroj'] or 1000
								if nombro >= listeroj then
									faldo = "jes"
								end
								wd = listoj._list(";;;",wd,"","span",",","jes","","",0)	
								wd = wd .. ligilo
								-- aldonuchelon(wd,"",jes, montrilo)
								if faldo == "jes" or faldo == "1" or (def == "1" and faldo ~= "ne") then
									local f = kestero(pri,'+',fono,'0')
									tabelo:wikitext(f)
									tabelsubtitolo(wd, fono, montrilo)	
									local f2 = kestero('','*')
									tabelo:wikitext(f2)
								else	
									tabelsubtitolo(wd, fono, montrilo)
								end
							end								
						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"])
							local dato2 = tonumber(v["dato2"])							
							if param ~= nil and dato ~= nil then
								local diferenco = param - dato
								if param >= dato2  then 
									diferenco = diferenco - 1
								end 
								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
							aldonulinion(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
						local gl = argumentoj(args,globo) -- por malofte uzata parametro "globe"
						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, iso) or 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
							if tipo ~= "" and tipo ~= nil then
								ligiltipo = type_atributo.type_atributo(tipo)
							else	
								ligiltipo = "landmark"
							end
						end
						local nomo    = argumentoj(args,"nomo") or argumentoj(args,"titolo") or paghenamebase ()
						local c1
						local kond = argumentoj(args,kon) -- ĉu kondiĉo?
						if pri ~= "" and pri ~= nil and (kond == "" or kond == nil) then
							c1 = pri
						elseif kond ~= "" and kond ~= nil then
							c1 = " - koordinatoj"
						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 
						if shablono ~= 'Informkesto urbo' then
							supre = "/"								
						end						
						local koordkasho = argumentoj(args,koordkasho) or ""
						if v["supre"] == "ne" or (koordkasho ~= "" and kashvaloro ~= "" and koordkasho == kashvaloro) or args['subŝablono'] == "jes" 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, gl)

							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

								aldonulinion(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
								-- local wdid = argumentoj(args, 'wd-id')
								local altkoord = argumentoj(args,'alto-koord') or argumentoj(args,'alto-koordinatoj')
								if wdid ~= "" and wdid ~= nil  then
									-- aldono por kombino el numera identigilo kaj rilataj koordinatoj
									if pk == "P610" then
										if altkoord == "jes" then
											wdlatitudo = wikidataGeo._plejaltalat(wdid)
											wdlongitudo = wikidataGeo._plejaltalong(wdid)
										end
									elseif pk == "P1589" then	
										if altkoord == "jes" then										
											wdlatitudo = wikidataGeo._plejmalaltalat(wdid)
											wdlongitudo = wikidataGeo._plejmalaltalong(wdid)
										end
									else
										wdlatitudo = wikidataGeo._latitudo(wdid)
										wdlongitudo = wikidataGeo._longitudo(wdid)											
									end
								else	
									-- aldono por kombino el numera identigilo kaj rilataj koordinatoj								
									if pk == "P610" then
										if altkoord == "jes" then
											wdlatitudo = wikidataGeo._plejaltalat()
											wdlongitudo = wikidataGeo._plejaltalong()										
										end
									elseif pk == "P1589" then
										if altkoord == "jes" then										
											wdlatitudo = wikidataGeo._plejmalaltalat()
											wdlongitudo = wikidataGeo._plejmalaltalong()										
										end	
									else
										wdlatitudo = wikidataGeo._latitudo()
										wdlongitudo = wikidataGeo._longitudo()											
									end							

								end
							end
						
							if wdlatitudo ~="" and wdlatitudo ~= nil and wdlongitudo ~= "" and wdlongitudo ~= nil then
								local k = koordinatoj(wdlatitudo, wdlongitudo, regiono, ligiltipo, nomo, supre, teksto, gl)
								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
									aldonulinion(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 
						local param_old = param -- por pli posta testo
						if shablono ~= 'Informkesto urbo' then
							param_old = ''
						end
						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")

						 	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 tipo2 == "" or tipo2 == nil then
								if tipo ~= "" and tipo ~= nil then
									tipo2 = type_atributo.type_atributo(tipo)
								else
									tipo2 = "landmark"
								end
							end							
							-- aktivigo de kelkaj pliaj parametroj por la unua mapo kun markilo
							local angulo = ""
							if mapnumero ~= "dua" then
								angulo ="jes"
							end
							local chumontaro = argumentoj(args,'montar-markilo')
							if tipo == "montaro" and chumontaro ~= "jes" then
								neniukoordinato = "jes"
								montru="ne"
							end	
							local marko=argumentoj(args,'marko') 
							local markospeco=argumentoj(args,'markospeco')
							local markogrando = 8
							local mg = argumentoj(args,'marko-ampl')
							if mg ~= nil and mg ~= "" then
								local test = tonumber(mg)
								if test ~= nil then
									markogrando = mg
								else
									mg = ""
								end
							end
							-- ne estas kombinebla kun la antaŭa if-bloko
							if mg == "" or mg == nil then
								if tipo == "tertremo" or tipo == "lumturo" then
									markogrando = 25
								-- laŭ la specifa ŝablono "Informkesto arkeologia situo"	
								elseif tipo == "arkeologia situo" then
									markogrando = 12
								end								
							end
						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 (tipo == "montaro" and chumontaro ~= "jes") then
						 	latitudo = latitudo or latitudo2 or latitudo3 or latitudo4 
							longitudo = longitudo or longitudo2 or longitudo3 or longitudo4 
							if param_old ~= 'neniu' then
								local m = situomapo(param,a1,a2,latitudo,longitudo,a4,tipo,pri,neniukoordinato,a3,regiono,tipo2,"ne",angulo,args,marko,markospeco,markogrando,titolo)								
								aldonuchelon(m) 							
							end

						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
								-- local wdid = argumentoj(args, 'wd-id')
								if wdid ~= "" and wdid ~= nil then
									wdlatitudo = wikidataGeo._latitudo(wdid)
									wdlongitudo = wikidataGeo._longitudo(wdid)										
								else	
									wdlatitudo = wikidataGeo._latitudo()
									wdlongitudo = wikidataGeo._longitudo()										
								end
							end							
							
							if 	wdlatitudo ~= "" and wdlatitudo ~= nil and wdlongitudo ~= "" and wdlongitudo ~= nil then
								if param_old ~= 'neniu' then							
									local m = situomapo(param,a1,a2,wdlatitudo,wdlongitudo,a4,tipo,pri,neniukoordinato,a3,regiono,tipo2,"ne", angulo,args,marko,markospeco,markogrando,titolo)							
									aldonuchelon(m,x,"jes")   	
								end							
							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	
						 			local pri2
						 			if pri ~= "" and pri ~= nil then
								 		pri2 = argumentoj(args,pri)
							 		end							 		
									if a3 ~= "" and a3 ~= nil then
										a3 = argumentoj(args, a3)
									end
									local m
									if a3 == "ŝablono" then
										m = bildoj.InfoboxImage({args={image=a1a,size=grando,sizedefault="120px",center="yes", alt=pri2} })
										if pri2 ~= "" and pri2 ~= nil then
											m = m .. '<div>' .. pri2 .. '</div>'
										end
									else	
										local gl = argumentoj(args,"globe")
										m = situomaposenmarko(a1a,pri2,a2,tipoj[1],gl)
									end
									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
							if tipo ~="" and tipo ~= nil then
								ligiltipo = type_atributo.type_atributo(tipo)
							else	
								ligiltipo = "landmark"
							end
						end	
						-- local nomo = 
						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)							
						-- kvara 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
								-- local wdid = argumentoj(args, 'wd-id')
								if wdid ~= "" and wdid ~= nil then
									wdlatitudo = wikidataGeo._latitudo(wdid)
									wdlongitudo = wikidataGeo._longitudo(wdid)										
								else	
									wdlatitudo = wikidataGeo._latitudo()
									wdlongitudo = wikidataGeo._longitudo()										
								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 == "mapligilo" then
---------------- MAPLIGILO ----------------------------------------				
					if param ~= 'ne' then
						-- provizore nur kelkaj tipoj laŭ unua nenomita parametro estu subtenataj. sed eble poste pliaj sekvos.
						local mapo_parametroj = mw.loadData('Modulo:Geografiaĵoj/mapligilo')
						local mapo_listo = mapo_parametroj.mapligilo
						if type(mapo_listo) == "table" then
							for k, v2 in pairs(mapo_listo) do
								local temo2, grupo, kondicho, defzomo
								if type(v2) == 'table' then
									temo2 = v2["varianto"]		
									grupo = v2["grupo"]
									defzomo = v2["zomo"]
									kondicho = v2["kondicho"]
									-- iom truka, ĉar ĉe difinita variablo en "Geografiaĵoj/mapligilo" la parametro "mapligilo=jes" fariĝu deviga
									if kondicho == 'jes' and param ~= kondicho then
										temo2 = ""
									end
									
										if temo2 == tipo then
												local id, nomo, m, zomo, komuneja_mapo
												local z = v['aldono1']
												local kom = v['aldono2']
												-- kodo por la rilata Vikidatuma paĝo
												-- wdid = argumentoj(args, 'wd-id')
												-- jen la titolo de la paĝo resp. artikolo
												nomo = titolo
												zomo = argumentoj(args, z) or defzomo
												komuneja_mapo = argumentoj(args,kom)
											if grupo == '3' then
												local koord1 = v['koord2']
												local koord2 = v['koord3']	
												local lat1, long1, lat2, long2 
												local latitudo1 = argumentoj(args, koord1 .. "_latitudo")   -- la parametra varianto kun spaco estas ebligata de la vokata funkcio
												local longitudo1 = argumentoj(args, koord1 .. "_longitudo")  -- la parametra varianto kun spaco estas ebligata de la vokata funkcio	
												local latitudo2 = argumentoj(args, koord2 .. "_latitudo")   -- la parametra varianto kun spaco estas ebligata de la vokata funkcio
												local longitudo2 = argumentoj(args, koord2 .. "_longitudo")  -- la parametra varianto kun spaco estas ebligata de la vokata funkcio									
												if koord1 ~= "" and koord1 ~= nil then
													-- prenu la koordinatojn por la fonto
													lat1, long1 = koordargumentoj(args, koord1)
												end
												if koord2 ~= "" and koord2 ~= nil then
													-- prenu la koordinatojn por la enfluejo
													lat2, long2 = koordargumentoj(args, koord2)
												end			
												if (lat1 ~= nil and long1 ~= nil and lat2 ~= nil and long2 ~= nil) or (latitudo1 ~= nil and longitudo1 ~= nil and latitudo2 ~= nil and longitudo2 ~= nil) then
													lat1 = lat1 or latitudo1
													long1 = long1 or longitudo1
													lat2 = lat2 or latitudo2
													long2 = long2 or longitudo2
													m = mapligilo(komuneja_mapo, nomo, zomo, lat1, long1, lat2, long2, tipo, wdid)
												end
											elseif grupo == '2' or grupo == '1' then
												local latitudo = argumentoj(args,"latitudo")
												local longitudo = argumentoj(args,"longitudo")
												local latitudo2, longitudo2, koord
												if grupo == '2' then
													latitudo2, longitudo2 = koordargumentoj(args, "situo")
													koord = v['koord1']
												elseif grupo == '1' then
													latitudo2, longitudo2 = koordargumentoj(args, "ĉefurbo")
													koord = v['koord4']
												end
												local lat, long
												if koord ~= "" and koord ~= nil then
													-- prenu la koordinatojn por la situo de la lago
													lat, long = koordargumentoj(args, koord)
												end
											
												if (lat ~= nil and long ~= nil) or (latitudo ~= nil and longitudo ~= nil) or (latitudo2 ~= nil and longitudo2 ~= nil) then
													lat = lat or latitudo or latitudo2
													long = long or longitudo or longitudo2
													m = mapligilo(komuneja_mapo, nomo, zomo, lat, long, '', '', tipo, wdid)
												else
												-- aŭ el la Vikidatuma ero	
													if wdid ~= "" and wdid ~= nil then
														lat = wikidataGeo._latitudo(wdid)
														long = wikidataGeo._longitudo(wdid)															
													else	
														lat = wikidataGeo._latitudo()
														long = wikidataGeo._longitudo()															
													end	
													if lat ~= nil and long ~= nil then
														m = mapligilo(komuneja_mapo, nomo, zomo, lat, long, '', '', tipo, wdid)		
													end
												end
											end
												if m ~= nil then
													aldonuchelon(m) 
													aldonuchelon(nomo) 							
												end
										end

								end									
							end
						end
					end
					
				elseif t == "alto" or t == "altitudo" or t == "longo" or t == "profundo" or t == "promilo" then
---------------- ALTO ---------------------------------------------------------------------------------------------
					-- komuna parto kun priskribo
					local c1 = pri or " - alteco"
					local c2 = ""
					local ligilo = ""
					local jes = ""
					local u = ""
					-- varianto de priskriba teksto
					a1a = argumentoj(args,a1) 
					if a1a ~= "" and a1a ~= nil then
						c1 = a1a
					end				
					-- unuo
					a2a = argumentoj(args,a2)
					-- minuskligi ĉion
					if a2a ~= "" and a2a ~= nil then
						a2a = mw.ustring.lower(a2a)
					end
					-- rondumo
					a3a = argumentoj(args,a3)
					local rondumo = 0
					local testo = tonumber(a3a)
					if type(testo) == "number" then
						rondumo = testo
					elseif t == "longo" and tipo == "lago" then
						rondumo = 2
					end
					local kond = argumentoj(args,kon)
					if kond ~= "" and kond ~= nil then
						c1 = " - alteco"
					end
					local unuo = "[[Metro|m]]"
					if t == "longo" then
						unuo = "[[Kilometro|km]]"
						u = "km"
						if tipo == "konstruaĵo" or tipo == "alta konstruaĵo" or tipo == "monumento" or tipo == "ponto" or tipo == "placo" 
						or tipo =="strato" or tipo == "preĝejo" or tipo == "katedralo" or tipo == "monaĥejo" or tipo =="sinagogo" then
							unuo = "[[Metro|m]]"
							u = "m"
						end
					elseif t == "promilo" then
						unuo = "[[Promilo|‰]]"
						u = "‰"
					elseif t == "profundo" and tipo == "tertremo"	then
						unuo = "[[Kilometro|km]]"
						u = "km"							
					end
					-- kontrolo, pri kiu unuo temas en transdonita parametro
					if a2a == "m" or a2a == "km" then
						unuo = a2a
						u = a2a
					end
					local direkto = argumentoj(args,a4) or ""
					if direkto ~= "" then
						direkto = ', ' .. direkto
					end
					local regiono = argumentoj(args,"regiono-ISO")					
					-- se parametro estas en la artikolo
					if param ~= "" and param ~= nil then
						local n = tonumber (param)
												
						if n ~= nil then
							c2 = n
							--if regiono ~= "" and regiono ~= nil and unuo == "[[Metro|m]]" then
							if regiono ~= "" and regiono ~= nil and t == "altitudo" then
								-- nur la du unuaj literoj estu uzataj
								local kodo = mw.ustring.sub(regiono,1,2)
								c2 = alteco(c2,kodo)
							else
								c2 = kalkuli._round(c2,rondumo)
								c2 = formatnum(n)
								c2 = c2 .. " " .. unuo
								if u == "km" then
									local mi = kalkuli._round(n/1.609344,rondumo)
									c2 = c2 .. ' (' .. mi .. ' [[mejlo|mi]])'
								end
							end
							
						else
							c2 = param
							c2 = mw.ustring.gsub(c2,"%.",",")
							c2 = c2 .. " " .. unuo
							nenumero=true								-- aktivigas zorgigan kategorion
						end

					else
						--ĉu vikidatuma ero ekzistas
						--local wd, referencovaloro = wdparam(pk,wdid,referencovaloro)
						local wd, referencovaloro, wdunuo
						if wdid ~= "" and wdid ~= nil then
							wd, referencovaloro = wikidata.claim({args={pk,qualifier=pk2, id=wdid, references = "raw"} })
							if t == "altitudo" then
								wdunuo = wikidataGeo._altecoUnuo(wdid, "", "")	
							end
						else
							wd, referencovaloro = wikidata.claim({args={pk,qualifier=pk2, references = "raw"} })
							if t == "altitudo" then							
								wdunuo = wikidataGeo._altecoUnuo(nil, "", "")								
							end							
						end
						if wd ~= "" and wd ~= nil then
								ligilo = wdlink (wdid, pk)
								c2 = wd
								if regiono ~= "" and regiono ~= nil and t == "altitudo" then
									-- nur la du unuaj literoj estu uzataj
									local kodo = mw.ustring.sub(regiono,1,2)
									if wdunuo ~= nil and wdunuo ~= "" and wdunuo ~= unuo then
										c2 = wikidataGeo._altecoM(c2, wdunuo)
									end									
									c2 = alteco(c2,kodo)
								else								

									if wdunuo ~= nil and wdunuo ~= "" and wdunuo ~= unuo then
										c2 = wikidataGeo._altecoM(c2, wdunuo)
										c2 = formatnum(c2)											
										c2 = c2 .. " " .. "[[metro|m]]"
									else
										c2 = formatnum(wd)										
										c2 = c2 .. " " .. unuo											
									end
	
								end	
								jes = "jes"
						end
					
					end
					-- eldono, se ekzistas enhavo
					if c2 ~= "" then
						c2 = c2 .. direkto									
						c2 = notaldono(notovaloro,c2)
						c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)									
						c2 = c2 .. ligilo							
						aldonulinion(c1,c2,jes,"",montrilo)					
					end
				elseif t == "areo" then	
---------------- AREO ---------------------------------------------------------------------------------------------
					-- komunuo parto kun priskribo
						local c1 = pri or " - areo"		
						-- varianto de priskriba teksto
						a1a = argumentoj(args,a1) or argumentoj(args,a1_a)
						if a1a ~= "" and a1a ~= nil then
							c1 = a1a
						end
						local c2 = ""	
						local c2a = ""
						local rondumo = 0
						local ligilo = ""
						local jes = ""
						if a3 ~= "" and a3 ~= nil then
							rondumo = argumentoj(args,a3) or argumentoj(args,a3_a)
							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 argumentoj(args,a2_a) or ""
							-- ankoraŭfoje ŝanĝenda, por faciligi aldonojn
							if unuo ~= "" then
								if unuo == "m²" or unuo == "m2" then
									areo = kalkuli._round(areo, rondumo)
									c2 = formatnum(areo) .. '&nbsp;m²'
								else	
									c2 = areoKM2(areo,unuo,x,2) 
									c2a = areoHA(areo,unuo,x,rondumo)
									c2 = c2 .. " (" .. c2a .. ")"
								end
							else
								local testo = areotipo(tipo)
								if testo == "m2" then
									areo = kalkuli._round(areo, rondumo)									
									c2 = formatnum(areo) .. '&nbsp;m²'									
								elseif testo == "km2" then	
									c2 = areoKM2(areo,"km²",x,2) 
									c2a = areoHA(areo,"km²",x,rondumo)
									c2 = c2 .. " (" .. c2a .. ")"	
								end
							end

						else
							c2 = mw.ustring.gsub(param,"%.",",")	
							nenumero=true							-- aktivigas zorgigan kategorion
						end
					else
						local unuo = argumentoj(args,a2) or argumentoj(args,a2_a) or ""						
						if unuo ~= nil and unuo ~= "" then
							if unuo == "m²" or unuo == "m2" then
								local wdmet, wdunuo = wikidataGeo._areoM2(wdid, "", "", "subfunkcio", rondumo)	
								if wdmet ~= nil and wdmet ~= "" and wd ~= "neniuj valoroj" and pk ~= "" and pk ~= nil  then
									wdmet = formatnum(wdmet) or wdmet
									if wdunuo ~= nil and wdunuo ~= "" then
										c2 = wdmet .. " " .. wdunuo
									else
										c2 = wdmet .. " [[Kvadrata metro|m²]]"										
									end
								end
							end
						else	
								-- ĉu vikidatuma ero ekzistas
								local wd, wdunuo = wikidataGeo._areoKM2(wdid,"","","subfunkcio",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(wdid,"","","subfunkcio",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
		
										ligilo = wdlink (wdid, pk)
									jes = "jes"
								end
						end
					end
					-- eldono
					if c2 ~= "" then
						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, a2)
						c2 = refaldono(referencovaloro,c2, referenconomo, referenconomodua)									
						c2 = c2 .. ligilo							
						aldonulinion(c1,c2,jes,"",montrilo)					
					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
										d = kalkuli._round(d, rondumo)
										d = formatnum(d)   		-- formatas numeron
										d = d .. " loĝ./[[Kvadrata kilometro|km²]]"
										aldonulinion(pri,d,"","",montrilo)											
									end
								else
									-- rigardu al la Vikidatumaj eroj
									local wdloghantaro = wikidata.claim({args={pk,id=wdid} }) --wdparam(pk,wdid)
									local wdareo, wdunuo = wikidataGeo._areoKM2(wdid,"","","subfunkcio",rondumo)
									-- testo
									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"
											aldonulinion(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)										
										aldonulinion(pri,n,"","",montrilo)										
									else	
										param = notaldono(notovaloro,param, a2)
										param = refaldono(referencovaloro,param, referenconomo, referenconomodua)										
										aldonulinion(pri,param,"","",montrilo)										
										nenumero=true					-- aktivigas zorgigan kategorion
									end									

							end
						end	

				elseif t == "trafluo" or t == "volumeno" then
---------------- TRAFLUO ---------------------------------------------------------------------
						if param ~= "" and param ~= nil then
							local c1 = pri or t
							local unuo 
							if t == "trafluo" then
								unuo = "[[Kubmetro|m³]]/[[Sekundo|s]]"
							elseif t == "volumeno" then
								unuo = "[[Kubmetro|m³]]"								
							end
							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)	
							aldonulinion(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
							-- testo, ĉu temas pri numero. se jes, supozeble iu transdonis la nuran jaron	
							local testo = tonumber(param)
							if type(testo) == 'number' then
								param = datoj._dato("","",param)
							else
								local s = anstatau(param, '-', '')
								local testo = tonumber(s)
								if type(testo) =='number' then
									param = datoj._dato(param,'','')
								end
							end
							param = notaldono(notovaloro,param, a2)
							param = refaldono(referencovaloro,param, referenconomo, referenconomodua)
							-- por tekstoj, kiel ekz. ĉ. aŭ ĉirkaŭ
							local prefikso = argumentoj(args,a2)
							if prefikso ~= "" and prefikso ~= nil then
								param = prefikso .. " " .. param
							end
							aldonulinion(c1,param,"","",montrilo)							
						end
					
				elseif t == 'faldokomenco' then
			--------------------------------------------------------------------
					if param == 'jes' or param == '1' then
						local faldo = kestero(pri,'+',fono,'0')
						tabelo:wikitext(faldo)
					end
				
				elseif t == 'faldofino' then
			--------------------------------------------------------------------
					if param == 'jes' or param == '1' then
						local faldo = kestero('','*')
						tabelo:wikitext(faldo)
					end					

				elseif t == 'aldono' then
			--------------------------------------------------------------------
					local kondicho = argumentoj(args, kon)
					if param ~= '' and param ~= nil and kondicho ~= 'jes' then
						local trajto = argumentoj(args,a1)
						local k = v["aldono2"]
						kesteroj(param, trajto, k)
					
					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
		
				local wybildo = args["vikivojaĝa bildo"]		
				local wikivoyage 		
				if args['subŝablono'] ~= "jes" then
					-- ŝanĝu ŝablonon
					-- {{ŝanĝu ŝablonon|ŝablono=Informkesto geografiaĵo}}
					local t = informkesto._ligilaro (shablono,fono,"","","","","","linio","","","",vikidatumoj)
					if wybildo ~= "" and wybildo ~= nil then
						if wybildo ~= "neniu" then
							wikivoyage = wybildo
						end
					else	
						if wdid ~= "" and wdid ~= nil then
								wikivoyage = wikidata.claim({args={"P948",id=wdid} })
						else	
								wikivoyage = wikidata.claim({args={"P948"} })
						end
					end
					tabelo:newline()
					:wikitext(t)
					:newline()
					:done()
				end	
		
				-- fino de la tabelo	
				r = tostring(tabelo)
				
				if wikivoyage ~= "" and wikivoyage ~= nil then
					-- metu bildeteton de Vikivojaĝo antaŭ la informkestan tabelon, kiel ĉe Informkesto urbo 
					r = '[[Dosiero:' .. wikivoyage .. '|center|775px|]]' .. r
				end
				
				-- aldono de zorgigaj kategorioj
				local kat2 = ""
				local geotipo = ""
				if shablono == "Informkesto geografiaĵo" then
					if tipo ~= "" and tipo ~= nil then
						kat2 = "ŝablono Geokesto"						
						-- por ke "malsanulejo" kaj "hospitalo" havu komunan kategorion
						if tipo == "malsanulejo" then
							tipo = "hospitalo"
						elseif tipo == "alta konstruaĵo" then
							tipo = "konstruaĵo"
						elseif tipo == "historia regiono" then
							tipo = "historia teritorio"
						elseif tipo == "oceano" then
							tipo = "maro"
						elseif tipo == "verda spaco" then
							tipo = "parko"
						elseif tipo == "protektita tereno" then
							tipo = "protektita areo"
						elseif tipo == "restoracio" then	
							tipo = "gastejo"							
						elseif tipo == "zoo" or tipo == "zoologia parko" then
							tipo = "zoologia ĝardeno"
						end
						-- por dua, ne tre ofte uzata dua tipo 
						if tipob == "malsanulejo" then
							tipob = "hospitalo"
						elseif tipob == "alta konstruaĵo" then
							tipob = "konstruaĵo"
						elseif tipob == "historia regiono" then
							tipob = "historia teritorio"
						elseif tipob == "oceano" then
							tipob = "maro"
						elseif tipob == "verda spaco" then
							tipob = "parko"
						elseif tipob == "protektita tereno" then
							tipob = "protektita areo"
						elseif tipob == "restoracio" then	
							tipob = "gastejo"							
						elseif tipob == "zoo" or tipob == "zoologia parko" then
							tipob = "zoologia ĝardeno"
						end	
						geotipo = tipo 						
					else
						kat1 = ""
						-- zorgiga kategorio
						r = r .. [[Kategorio:Ŝablono geokesto sen tipo]]
					end	
				elseif	shablono == "Informkesto urbo" then
					kat2 = shablono
					geotipo = argumentoj(args,"tipo") 
					if geotipo ~= "" and geotipo ~= nil then
						geotipo = geotipo 
					else 
						-- defaŭlta valoro
						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
					-- por dua tipo
					if tipob ~= "" and tipob ~= nil then
						local kategorio2 = "[[Kategorio:" .. tipob .. kat1 .. kat2 .. "]]"
						r = r .. kategorio2						
					end
					if wdref == true then
						r = r .. "[[Kategorio:Artikoloj kun referencoj el Vikidatumoj]]"
					end
					if artref == true then
						r = r .. "[[Kategorio:Artikoloj kun referencoj en informkesto]]"
					end					
					if nelogh == true then
						r = r .. "[[Kategorio:Neloĝataj insuloj]]"
					end
					if nelogh2 == true then
						r = r .. "[[Kategorio:Neloĝataj atoloj]]"
					end					
					-- 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|P94}}
						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
				
				if subshablono then
					r = r .. '[[Kategorio:Artikoloj kun nestitaj informkestoj]]'
				end
				
				return r			
		
	end
	
	
end	

-- redonu koloron laŭ "tipo"
function p._tipkoloro(tipoj,args)
	local tipo = tipoj[1] or ""
	if tipo ~= "" then
		tipo = mw.ustring.lower(tipo)
	end	
	local fono = koloroj.fonkoloro(tipo)
	return fono
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
	if args['tipo'] == "" or args['tipo'] == nil then	
		tipoj[1] = "urbo"
	else
		tipoj[1] = args['tipo']
	end	
	if args['mapligilo'] == "" or args['mapligilo'] == nil then	
		args['mapligilo'] ="jes"
	end	
	if args['denseco'] == "" or args['denseco'] == nil then	
		args['denseco'] ="auto"
	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', 'tipkoloro'}
 
for _, funcName in ipairs(funcNames) do
	p[funcName] = makeWrapper('_' .. funcName)
end



return p