Ir al contenido

Módulo:Ficha de edificio

De Wikipedia, la enciclopedia libre
Este módulo no tiene página de documentación[crear]
local z = {}

local args			-- used as global in ModuloArgs
local Entidad		-- used as global in local functions
local ModuloFicha    = require('Módulo:Ficha')
local ModuloWikidata = require('Módulo:Wikidata')
local ModuloFormato  = require('Módulo:Formato texto')
local ModuloPaginas  = require('Módulo:Páginas')
local ModuloArgs     = require('Módulo:Argumentos')
local argumento      = ModuloArgs.obtenerValorDeArgumentos
local elementoTabla  = require('Módulo:Tablas').elemento
local sinBandera     = require('Módulo:Bandera').sinBandera
local ModuloWikidataFechas   = require('Módulo:Wikidata/Fecha')
-- sin uso ?
local ModuloWikidataFormatos = require('Módulo:Wikidata/Formatos')
local formatoURL = ModuloWikidataFormatos.formatoURL
local sinEnlazar = {['enlace']='no', ['linkback']='sí'}
local sinLapiz   = {}

function z.prueba(frame)
	ModuloWikidata:setFrame(frame)
	ModuloArgs.obtenerTablaDeArgumentos(frame)
return 'Devuelvo'..argumento{'conBandera'}
end

function z.Ficha(frame)
	ModuloWikidata:setFrame(frame)
	ModuloArgs.obtenerTablaDeArgumentos(frame)
	local mapaloc = ''
	local width = argumento{'tamaño','tamaño_imagen'} or '275'
	if width ~= '275' then
	   width = width:gsub('px','')
	   width = width:sub(1,-1)
	end
	width = '|width='..width
	if argumento{'entidad'} == nil then
	            Entidad   = mw.wikibase.getEntityObject(argumento{'id'}) or {}
	            mapaloc = frame:preprocess('{{map draw'..width..'|zoom=13|height=200|align = center| frameless = 1}}') or ''
	    else
	  	Entidad = mw.wikibase.getEntityObject(argumento{'entidad'}) or {}
	  	local coord = obtenerlatitudlongitud()
	  	mapaloc = frame:preprocess('{{map draw|'..coord['latitud']..', '..coord['longitud']..width..'|zoom=9|height=200|align = center| frameless = 1}}') or ''
	end
	local imagen = argumento{'imagen'}
	local pieDeImagen = argumento{'texto imagen', 'texto_imagen', 'pie de imagen', 'pie imagen', 'pie', 'pie_imagen'}
	if not imagen then
		imagen, pieDeImagen = ModuloWikidata.obtenerImagenWikidata(Entidad, 'P18')
	end

	local nombre = argumento{'nombre'} or
				-- ModuloWikidata.obtenerEtiquetaWikidata() or -- prioridad local
				ModuloPaginas.nombrePagina({desambiguar='sí'})
	local nombrelocal = argumento{'nombre local', 'nombre_local', {propiedad, 'P1705'}}
	if nombrelocal and nombrelocal ~= nombre then
		nombrelocal = '<i>' .. nombrelocal .. '</i>'
	else
		nombrelocal = nil
	end

	local color = obtenerColor()

	local evsigs = devolverelemensigs(Entidad)
	local fechainicio = argumento{'inicio'} or (evsigs and evsigs['Q385378'] and evsigs['Q385378'].fechainicio) or ''
	local fechafin = argumento{'finalización', 'término'} or (evsigs and evsigs['Q385378'] and evsigs['Q385378'].fechafin) or ''
	local primerapiedra = argumento{'fecha primera piedra'} or (evsigs and evsigs['Q106863']) or ''

	local direccionpostal = argumento{'dirección', 'calle', {propiedad, 'P6375'}, {obtenerCalle}}
	local codigopostal = argumento{'código postal', 'código_postal', {propiedad, 'P281'}}
	if codigopostal then
		direccionpostal = ModuloFormato.separadosPorComa({direccionpostal, codigopostal})
	end

	-- TODO: NUEVO -- sin uso ?
	local logotipo = argumento{'logotipo', 'logo', {propiedad, 'P154'}}
	if logotipo ~= nil then
		logotipo = '[[Archivo:'..logotipo..'|275px]]'
	end
    
    local mapaedif = obtenerMapaEdif()
    local mapa1, mapa2, mapa3
    if mapaedif ~= '' then
    	mapa1 = mapaedif['mapa1']
    	mapa2 = mapaedif['mapa2']
    	mapa3 = mapaedif['mapa3']
    end
    local coordenadas = argumento{ {propiedad, 'P625', {formato='dms', display='inline,title', tipo='landmark', uno='sí'}} }
    if argumento{'integrada'} == "si" then
               local coordenadas = ''
    end
	local Ficha =
	{
		tipocabecera = 'edificio',
		estilotitulo = 'background-color:'..color,
		estiloseccion = 'background-color:'..color,
		estilosubtitulo = 'background-color:' .. color .. '; font-size:110%',
		estiloetiqueta = 'width:33%;',
		estilopie = 'font-size:95%',

		['titulo'] = nombre,
		['subtitulo'] = nombrelocal,
		imagen = imagen,
		['tamañoimagen'] = argumento{'tamaño', 'tamaño_imagen'} or '275px',
		pie = pieDeImagen,
		{ '', logotipo },
		imagenflotante2 = 'sí',
		--imagen2 = obtenerMapaLoc(nombre),
		imagen2 = mapaloc,
		pie2 = argumento{'pie mapa'} or (argumento{'pos etiqueta loc'} ~= 'none' and 'Ubicación (' .. nombre .. ').'),
		{tipo = 'sección',
			['titulo'] = 'Localización',
	        {'Ubicación', devolverlocalizacion()},	
			{ 'Dirección', sinBandera( direccionpostal ) },
			{ 'Coordenadas' , coordenadas }, -- argumento{'coordenadas'}
		},
		{tipo = 'sección',
			['titulo'] = 'Información general',
			{ 'Nombres anteriores', argumento{'nombres anteriores', 'nombre anterior', 'nombre inicial'} },
			{ 'Otros nombres', argumento{'otros nombres', 'otro nombre', {propiedad, 'P4970'}} },
			{'Tipo', argumento{'tipo',{propiedad,'P31'}}},
			{ 'Estado', argumento{'estado', 'condición', {propiedad,'P5816'}} },
			{'Catalogación', obtenerCatalogacion()},
			{ 'Usos', argumento{'uso', 'usado', 'tipo', {propiedad, 'P366', {rango_mayor='sí'}}} },
			{ 'Estilo', argumento{'estilo', {propiedad, 'P149'}} },
			{ 'Catalogación', argumento{'catalogación', {propiedad, 'P1435', {rango_mayor='sí'}}} },
			{'Apertura',argumento{'apertura'}},
			{'Producción',argumento{'producción'}},
			{ 'Figura', argumento{'figura'} },
			{ 'Declaración', argumento{'declaración', --[[ TODO: se repite con 'Catalogación': {propiedad, 'P1435', {calificador='P580'}}--]] } },
			{ 'Código', argumento{'código', {propiedad, 'P808'}} },
			{ 'Parte de', argumento{'partede', {propiedad, 'P361'}} },
			{ 'Nombrado en honor a', argumento{'nombrado en honor a', 'etimología', {propiedad, 'P138'}} },
			{ '[[Primera piedra]]', primerapiedra },
			{ 'Inicio de obra', fechainicio },
			{ '[[Coronación (arquitectura)|Coronación]]', argumento{'fecha coronación', 'coronación', 'coronado'} },
			{ 'Finalización', fechafin }, 
			{'Finalización estimada', argumento({'estim completado', 'estim_completado'})},
			{ 'Fundación', argumento{'fundación', 'año_construccion', 'construido', 'año construcción', 'año de construcción', 'construcción', {propiedad, 'P571', {enlace='no',uno='sí'}}} },
			{ 'Inauguración', argumento{'fecha inauguración', 'fecha de inauguración', 'fecha de la inauguración', {propiedad, 'P1619', {enlace='no',uno='sí'}}} },
			{ 'Cierre', argumento{'fecha del cierre'} },
			{ argumento{'fecha demolición', 'demolición'} and 'Demolido' or 'Destruido', argumento{'fecha demolición', 'demolición', 'fecha destruido', 'destruido'} },
			{ 'Propietario', argumento{'propietario', 'dueño', {propiedad, 'P127'}} },
			{'Orden religiosa', argumento{'orden religiosa',{propiedad,'P611'}}},
			{'Acceso público', argumento{'acceso público'}},
			{'Estatus', argumento{'estatus'}},
			{'Patrono', argumento{'patrono'}},
			{'Dedicación', argumento{'dedicación',{propiedad,'P793',{calificador='Q1762010'}}}},
			{'Declaración', argumento{'Declaración'}},
			{'Desacralización', argumento{'Desacralización'}},
			{'Abadia primigenia', argumento{'Abadía primigenia'}},
			{'Abadía madre', argumento{'Abadía madre'}},
			{'Abadía hija', argumento{'Abadía hija','Abadías hijas'}},
			{'Número de orden (según [[Leopold Janauschek|Janauschek]]',argumento{'número de orden','número orden'}}, --esto es para abadías cistercienses 
			-- TODO: diferencia entre 'Arrendatario' y 'Ocupante' ?
			{ 'Arrendatario', argumento{'arrendatarios', 'arrendatario', 'inquilinos'} },
			{ 'Ocupante', argumento{'ocupante', 'ocupantes', {propiedad, 'P466', {uno='sí'}}} },
		--	-- TODO: NUEVO: -- Es de ficha de estructura y la de hospital
			{ 'Organización', argumento{'organización', {propiedad, 'P749'}} },
			{ 'Se conecta con', argumento{'se conecta con'} },
			{ 'Cruza', argumento{'cruza'} },
		    { 'Número de vanos', argumento{'ojos'} },
			{ 'Clausura', argumento{'clausura', {propiedad, 'P3999'}} },
			{ 'Número de camas', argumento{'camas', {propiedad, 'P6801'}} },
			{ 'Número de télefono', argumento{'teléfono', 'telefono', {propiedad, 'P1329'}} },
			{ 'Emergencias', argumento{'emergencias'} },
			{ 'Afiliación', argumento{'afiliación', {propiedad, 'P1416'}} },
			{ 'Red', argumento{'red'} },
			{ 'Clasificación', argumento{'clasificación'} },
			{ 'Especialidad', argumento{'especialidad'} },
			{ 'Financiamiento', argumento{'financiamiento','financiación','Financiación'}},
			{ 'Hospital de referencia', argumento{'hospital'}},
			{ 'Unidad docente ascrita', argumento{'unidad docente','Unidad Docente'}},
			{ 'Universidad adscrita', argumento{'universidad','Universidad'}},	
			{ 'Centro de especialidades de referencia', argumento{'centro de especialidades', 'Centro de especialidades'}},
		},
	   {tipo = 'sección',
	   	['titulo'] = 'Autoridades religiosas',
	   	{'Rector', argumento{'nombre_administrador_eclesiástico'}},
	   	{'Vicario', argumento{'nombre_administrador_eclesiástico2'}},
	   	{'Sacerdote', argumento{'nombre_administrador_eclesiástico3'}},
	   	{'Vicario electo', argumento{'nombre_administrador_eclesiástico4'}},
	   	{'Sacerdote electo', argumento{'nombre_administrador_eclesiástico5'}},
	   	{'Otras autoridades', argumento{'otros'}},
	   		},
		{tipo = 'sección',
			['titulo'] = 'Altura',
			{ 'Máxima', argumento{'altura máxima', 'antena'} or obtenerAlturas().maxima },
			{ 'Arquitectónica', argumento{'altura arquitectónica', 'altura'} or obtenerAlturas().altura },
			{ 'Azotea', argumento{'azotea'} },
			{ 'Piso más alto', argumento{'piso más alto', 'piso_mas_alto'} },
			{ 'Observatorio', argumento{'observatorio'} },
		},
		{tipo = 'sección',
			['título'] = 'Récord de altura',
			{ '', argumento{'más alto fecha', 'alto_fecha'} and '[[Anexo:Rascacielos más altos del mundo|Rascacielos más alto del mundo]] de ' .. argumento{'más alto fecha', 'alto_fecha'} },
			{ 'Predecesor', argumento{'más alto anterior', 'alto_anterior'} },
			{ 'Sucesor', argumento{'más alto siguiente', 'alto_siguiente'} },
			-- TODO: NUEVO: { argumento{'récord de altura', 'record de altura'} }, -- sin uso ?
		},
		{tipo = 'sección',
			['titulo'] = 'Detalles técnicos',
			{ 'Sistema estructural', argumento{'sistema estructural'} },
			{ 'Material', argumento{'material', 'materiales', {obtenerMaterial}} },
			{'Aforo', argumento{'aforo',{propiedad,'P1083'}}},
			{'Orientación', argumento{'orientación'}},
			{ 'Diámetro', argumento{'diámetro'} },
			{ 'Superficie', argumento{'superficie', 'área planta', {obtenerSuperficie}} },
			{ 'Superficie parcela', argumento{'superficie parcela'} },
			{ 'Plantas', argumento{'número de plantas', 'numero_plantas', 'cantidad pisos', 'plantas', {propiedad, 'P1101'}} },
			{ 'Ascensores', argumento{'número de ascensores', 'numero ascensores', {propiedad, 'P1301'}} },
			{ 'Otras dimensiones', argumento{'otras dimensiones'} },
		},
		{tipo = 'sección',
			['titulo'] = 'Diseño y construcción',
			{ 'Arquitecto', argumento{'arquitecto', 'arquitectos', {propiedad, 'P84'}} },
			{'Otro artista', argumento{'artista'}},
			{ 'Fundador', argumento{'fundador', {propiedad, 'P112', {uno='sí'}}} },
			{ 'Promotor', argumento{'promotor', 'promotora'} },
			{ 'Constructor', argumento{'constructor', {propiedad, 'P193', {uno='sí'}}} },
			{ 'Ingeniero', argumento{'ingeniero'} },
			{ 'Ingeniero estructural', argumento{'ingeniero estructural', {propiedad, 'P631'}} },
			{ 'Ingeniero de servicios', argumento{'ingeniero de servicios'} },
			{ 'Ingeniero civil', argumento{'ingeniero civil'} },
			{ 'Otros', argumento{'otros'} },
			{ 'Contratista', argumento{'contratista'} },
			{ 'Viviendas', argumento{'número de viviendas'} },
			{ 'Coste', argumento{'coste'} },
			{ 'Premios', argumento{'premios', {propiedad, 'P166'}} },
			{ 'Conocido por', argumento{'conocido por'} },
		},
		{tipo = 'sección',
			['titulo'] = 'Remodelación',
			{'Derrumbe', argumento{'derrumbe'}},
			{'Incendio', argumento{'incendio'}},
			{ 'Fecha de remodelación', argumento{'fecha remodelación', 'reconstrucción','remodelación', 'fecha de remodelación'} },
			{ 'Coste remodelación', argumento{'coste remodelación'} },
			{ 'Arquitecto', argumento{'rem arquitecto'} },
			{ 'Ingeniero ', argumento{'rem ingeniero'} },
			{ 'Ingeniero estructural', argumento{'rem ingeniero estructural'} },
			{ 'Ingeniero de servicios', argumento{'rem ingeniero de servicios'} },
			{ 'Ingeniero civil', argumento{'rem ingeniero civil'} },
			{ 'Otros', argumento{'rem otros'} },
			{ 'Contratista', argumento{'rem contratista'} },
			{ 'Premios', argumento{'rem premios'} },
		},
		{tipo = 'sección',
			['titulo'] = 'Información religiosa',
			--Edificios religiosos
			{ 'Culto', argumento{'culto', {propiedad, 'P140'}} },
			{ argumento{'nombre_división_eclesiástica'} or 'Diócesis', argumento{'diócesis', 'división_eclesiástica', {propiedad, 'P708'}} },
			{ argumento{'nombre_subdivisión_eclesiástica'} or '[[Parroquia (religión)|Parroquia]]', argumento{'subdivisión_eclesiástica', 'parroquia'} },
			{ '[[Orden religiosa católica|Orden]]', argumento{'orden', {propiedad, 'P611'}} },
			{ 'Advocación', argumento{'advocación', {propiedad, 'P825'}} },
			{ 'Patrono', argumento{'patrono', {propiedad, 'P417'}} },
			{ 'Dedicación', argumento{'dedicación', {propiedad, 'P793', {calificador='Q1762010'}}} },
			{ 'Acceso público', argumento{'acceso'} },
		},
		{tipo = 'sección',
			['titulo'] = 'Información militar',
			--Edificios militares
			{ 'Controlador', argumento{'controlado por'} },
			{ 'Guarnición', argumento{'guarnición'} },
			{ 'Comandante actual', argumento{'comandante actual'} },
			{ 'Comandantes', argumento{'comandantes'} },
			{ 'Batallas', argumento{'batallas'} },
			{ 'Eventos', argumento{'eventos'} },
			{ 'Período', argumento{'período'} },
		},
		{tipo = 'sección',
			['titulo'] = 'Otra información',
			{ 'Capacidad', argumento{'capacidad', 'aforo', {propiedad, 'P1083'}} },
			--Bar o restaurante
			{ 'N.º de asientos', argumento{'número de asientos', 'asientos', {propiedad, 'P1083'}} },
			{ 'N.º de tiendas', argumento{'número de tiendas'} },
			--Hotel
			{ 'N.º de habitaciones', argumento{'número de habitaciones', 'habitaciones'} },
			{ 'N.º de suites', argumento{'número de suites', 'suites'} },
			{ 'N.º de restaurantes', argumento{'número  de restaurantes'} },
			{ 'N.º de bares', argumento{'número de bares'} },
			{ 'Estrellas', argumento{'estrellas'} },
			{ 'Temática', argumento{'tema'} },
			{ 'Director', argumento{'director'} },
			{ 'Cadena', argumento{'cadena'} },
			{'Restaurantes',argumento{'restaurantes'}},
			{'Atracciones',argumento{'atracciones'}},
			{'Espacio de juegos', argumento{'espacio_de_juegos'}},
			{'Espectáculos permanentes', argumento{'espectáculos permanentes'}},
		},
	    {tipo = 'sección',
	    	['titulo'] = 'Nave principal',
	    	{'Longitud de la nave', argumento{'longitud_nave'}},
	    	{'Anchura de la nave', argumento{'anchura_nave'}},
	    	{'Diámetro exterior', argumento{'diámetro exterior'}},
	    	{'Diámetro interior', argumento{'diámetro interior'}},
	    	},
	    {tipo = 'sección',
	    	['titulo'] = 'Cúpula',
	    	{'Altura exterior de la cúpula', argumento{'longitut_nave'}},
	    	{'Altura interior de la cúpula', argumento{'cúpula_altura_interior'}},
			{'Diámetro exterior de la cúpula', argumento{'cúpula_diámetro_exterior'}},
			{'Diámetro interior de la cúpula', argumento{'cúpula_diámetro_interior'}},
	    	},
	    {tipo = 'sección',
	    	['titulo'] = 'Eventos',
	    	{'Evento', argumento{'evento'}},
	    	{'Personas relacionadas', argumento{'personas relacionadas'}},
	    	{'Obras artísticas', argumento{'obras artísticas'}},
		},
	    {tipo = "sección",
	    	['titulo'] = 'Datos adicionales',
	    	{argumento{'campo1_nombre'}, argumento{'campo1'}},
	    	{argumento{'campo2_nombre'}, argumento{'campo2_nombre'}},
	    	{argumento{'campo3_nombre'}, argumento{'campo3_nombre'}},
	    	{argumento{'campo4_nombre'}, argumento{'campo4_nombre'}},
	    	},
	    {tipo = 'sección',
	    	['titulo'] = 'Planta y mapas del edificio',
	    	{'mapa 1', frame:preprocess(mapa1)},
	    	{'mapa 2', frame:preprocess(mapa2)},
	    	{'mapa 3', frame:preprocess(mapa3)},
	    	},
		{tipo = 'sección',
			['titulo'] = 'Sitio web',
			{ 'Sitio web', argumento{'sitio web', 'página web', 'url', {propiedad, 'P856'}} },
		},
		{tipo = 'sección',
			['titulo'] = 'Referencias',
			{'', argumento{'referencias'} },
		},
		{'', argumento{'ficha hija'} },
	}
	return ModuloFicha.infobox(Ficha)
end

-- helpers:

function propiedad(idPropiedad,opciones)
	-- global Entidad
	local frame = mw.getCurrentFrame()
	if argumento{'wikidata'} == 'no' then
		return ''
	end
	return ModuloWikidata.propiedad( Entidad, idPropiedad, opciones or {} )
end

-- Devuelve el mapa de localización
function obtenerMapaLoc(nombre)
	local frame = mw.getCurrentFrame()
	local mapa = argumento{'mapa loc', 'mapa'}
	local coor = propiedad('P625', {formato='dms', display='inline,title', tipo='landmark', uno='sí'})
	if mapa and coor then
		return frame:preprocess('{{Mapa de localización|' .. mapa
			.. '|mapa_alternativo = ' .. (argumento{'mapa alternativo'} or '')
			.. '|ancho = ' .. (argumento{'tam mapa loc'} or '275')
			.. '|alineación = center'
			.. '|marca = ' .. (argumento{'mark'} or 'Red pog.svg')
			.. '|tamaño_marca = ' .. (argumento{'marksize'} or '8')
			.. '|pie = ' .. (argumento{'pie mapa'} or '')
			.. '|etiqueta = ' .. nombre
			.. '|posición = ' .. (argumento{'pos etiqueta loc'} or '')
			.. '}}') or ''
	end
	return ''
end

function obtenerlatitudlongitud() --Obtiene latitud y longitud en bruto, sin hipervinculos ni tags html
	Entidad   = mw.wikibase.getEntityObject(argumento{'entidad'}) or {}
    local coord = elementoTabla(Entidad,'claims','P625',1,'mainsnak','datavalue','value')
    local latitud = elementoTabla(coord,'latitude')
    local longitud = elementoTabla(coord,'longitude')
    local retorno = {}
    retorno['latitud'] = latitud
    retorno['longitud'] = longitud
    return retorno
end

function obtenerMapaEdif()
	local frame = mw.getCurrentFrame()
	local retorno = {}
	retorno['mapa1'] = {}
	retorno['mapa2'] = {}
	retorno['mapa3'] = {}
	local mapa1 = argumento{'mapa1'}
	if mapa1 then
	    local tamanomapa1 = argumento{'tamaño_mapa1)'} or '273px'
	    local piemapa1 = argumento{'pie_mapa1'} or ''
	    local marcamapa1 = argumento{'markmapa1'} or 'Gfi-set01-church1.png'
     	local tamanomarca1 = argumento{'markmap1size'} or '10px'
	    local xmapa1 = argumento{'locator_x_mapa1'} or ''
	    local ymapa1 = argumento{'locator_y_mapa1'} or ''
	    retorno['mapa1'] = ('{{Sobrepuesto |base='..mapa1..'|base_width='..tamanomapa1..'|base_caption='..piemapa1..'|float='..marcamapa1..'|x='..xmapa1..'|y='..ymapa1..'}}</center><div style="font-size:95%">'..pie_mapa1..'}}</div>')
	 else
	 	retorno['mapa1'] = ''
	 end
	
	local mapa2 = argumento{'mapa2'}
    if mapa2 then
	    local tamanomapa2 = argumento{'tamaño_mapa2)'} or '273px'
	    local piemapa2 = argumento{'pie_mapa2'} or ''
	    local marcamapa2 = argumento{'markmapa2'} or Gfi-set01-church1.png
     	local tamanomarca2 = argumento{'markmap2size'} or '10px'
	    local xmapa2 = argumento{'locator_x_mapa2'} or ''
	    local ymapa1 = argumento{'locator_y_mapa2'} or ''
	    retorno['mapa2'] = ('{{Sobrepuesto |base='..mapa2..'|base_width='..tamanomapa2..'|base_caption='..piemapa2..'|float='..marcamapa2..'|x='..xmapa2..'|y='..ymapa2..'}}'..pie_mapa2)
    else
    	retorno['mapa2'] = ''
    end
    
   	local mapa3 = argumento{'mapa3'}
    if mapa3 then
	    local tamanomapa3 = argumento{'tamaño_mapa3)'} or '273px'
	    local piemapa3 = argumento{'pie_mapa3'} or ''
	    local marcamapa3= argumento{'markmapa3'} or Gfi-set01-church1.png
     	local tamanomarca2 = argumento{'markmap3size'} or '10px'
	    local xmapa3 = argumento{'locator_x_mapa3'} or ''
	    local ymapa3 = argumento{'locator_y_mapa3'} or ''
	    retorno['mapa3'] = ('{{Sobrepuesto |base='..mapa3..'|base_width='..tamanomapa3..'|base_caption='..piemapa3..'|float='..marcamapa3..'|x='..xmapa3..'|y='..ymapa3..'}}'..pie_mapa3)
	else
		retorno['mapa3'] = ''
    end
if retorno['mapa1'] ~= nil and retorno['mapa2'] ~=nil and retorno['mapa3'] ~=nil then
return retorno
else
	return ''
	end
end

function obtenerCatalogacion()
	local frame = mw.getCurrentFrame()
	if argumento{'Catalogación'} ~=nil 	and argumento{'Catalogación',propiedad{'P1435',{calificador,'P2868'}}} ~=nil and argumento{'Catalogación',propiedad{'P1435',{calificador,'P580'}}} ~= nil then
		return 	ModuloFormato.enVariasLineas(argumento{'Catalogación',propiedad{'P1435',{calificador,'P2868'}}},argumento{'Catalogación',propiedad{'P1435',{calificador,'P580'}}})
    end
    if argumento{'Catalogación'} ~=nil  and argumento{'Catalogación',propiedad{'P1435',{calificador,'P580'}}} ~= nil then
         	return 	argumento{'Catalogación',propiedad{'P1435',{calificador,'P2868'}}}
	end
	if argumento{'Catalogación'} ~=nil  and argumento{'Catalogación',propiedad{'P1435',{calificador,'P2868'}}} ~= nil then
                  	return 	argumento{'Catalogación',propiedad{'P1435',{calificador,'P580'}}}
        end

 if argumento{'Catalogación',propiedad{'P1435',{calificador,'P2868'}}} ~=nil and argumento{'Catalogación',propiedad{'P1435',{calificador,'P580'}}} ~= nil then
   return argumento{'Catalogación'}
 end
return ''
end



--Devuelve la fecha de inicio y fin de la construcción
function obtenerfechasObra(unaTabla)
	local retorno = {}
	local fechainicio = elementoTabla(unaTabla,'qualifiers','P580',1,'datavalue','value') -- 'fecha de inicio'
	if fechainicio then
		retorno.fechainicio = ModuloWikidataFechas.FormateaFechaHora(fechainicio, {['mayúscula'] = 'sí'})
	end
	local fechafin = elementoTabla(unaTabla,'qualifiers','P582',1,'datavalue','value') -- 'fecha de fin'
	if fechafin then
		retorno.fechafin = ModuloWikidataFechas.FormateaFechaHora(fechafin, {['mayúscula'] = 'sí'})
	end
	return retorno
end

--Devuelve la fecha ceremonia de inauguración 
function devolvercereminaug(unaTabla)
	local retorno = ''
	local fecha = elementoTabla(unaTabla,'qualifiers','P585',1,'datavalue','value') -- 'fecha'
	if fecha then
		retorno = ModuloWikidataFechas.FormateaFechaHora(fecha, {['mayúscula'] = 'sí'})
	end
	return retorno
end

--Devuelve los campos de elementos significativos de Wikidata
function devolverelemensigs(unaEntidad)
	local evsigs = elementoTabla(unaEntidad,'claims','P793') -- 'evento significativo'
	if evsigs == nil then
		return
	end
	local elementos = {}
	for i, j in pairs(evsigs) do
		valorQ =  elementoTabla(j,'mainsnak','datavalue','value','id')
		if valorQ == 'Q385378' then -- 'construcción'
			elementos[valorQ] = obtenerfechasObra(j)
		elseif valorQ == 'Q3010369' then -- 'ceremonia de inauguración'
			elementos[valorQ] = devolvercereminaug(j)
		elseif valorQ == 'Q744913' then -- 'accidente de aviación'
			elementos[valorQ] = elementoTabla(construccion,'qualifiers','P805',1,'datavalue','value','id')
		elseif valorQ == 'Q1068633' then -- 'primera piedra'
			elementos[valorQ] = elementoTabla(construccion,'qualifiers','P585',1,'datavalue','value','time')
		end
	end
	return elementos
end

function obtenerColor()
	-- TODO: revisar colores y contraste
	local colores = {
		['hotel'] = '#A7D3F3', -- mejor que {{Ficha de hotel}}
		['edificio militar'] = '#665D1D', -- revisar, marrón demasiado oscuro, no se diferencia el texto
		['cuartel'] =  '#665D1D', -- ídem anterior
		['bar'] = '#BFFF00', -- revisar, verde claro intenso, fosforito ?
		['restaurante'] = '#BFFF00', -- ídem anterior
		['iglesia'] = '#F3D5E1', -- según {{Ficha de edificio religioso}}
		['catedral'] = '#F3D5E1',
		['catedral católica'] = '#F3D5E1',
		['hospital'] = 	'#EEE', -- según {{Ficha de hospital}}
		['centro de salud'] = '#EEE',
		['monumento conmemorativo'] = '#D5D4FC', -- según {{Ficha de monumento}}
		['librería'] = '#FFF0C9',
		['teatro'] =  '#FFE5B4',
		['casino'] =  '#AA6A6B',
	}
	local tipoedificio = elementoTabla(Entidad,'claims','P31',1,'mainsnak','datavalue')
	tipoedificio = elementoTabla(tipoedificio,'value','id')
	local nombretipoedificio= mw.wikibase.getEntityObject(tipoedificio)
    nombretipoedificio = elementoTabla(nombretipoedificio,'labels','es','value')
    local frame = mw.getCurrentFrame()
    if frame:getParent():getTitle() == "Plantilla:Ficha de estructura" then
               return '#FFFFFF'
               end
    local uso =  argumento{'tipo', 'uso', 'usos', {propiedad, 'P366'}}
    if uso == "militar" or uso == "Militar" then
    	return colores['edificio militar']
    end
	return colores[nombretipoedificio] or '#ddd' -- según {{Ficha de edificio}} [original]
end

function obtenerSuperficie()
	-- global Entidad
	local frame = mw.getCurrentFrame()
	local valor = {}
	local datos = elementoTabla(Entidad,'claims','P2046') -- 'superficie'
	if datos ~= nil then
		local lang = mw.language.getContentLanguage()
		for i, j in pairs(datos) do
			local medida = elementoTabla(j,'mainsnak','datavalue','value','amount')
			local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit')
			if medida ~= nil then
				unidad = mw.ustring.gsub(unidad, '^.-/(Q%d )$', '%1')
				if unidad ~= 'Q25343' then -- unidades en 'metro cuadrado'
					local unidades = {
						-- véanse valores admitidos para 'superficie' en https://www.wikidata.org/wiki/Property:P2046#P2302
						['Q2737347' ] = 'mm2',
						['Q2489298' ] = 'cm2',
						['Q25343'   ] = 'm2', -- unidad de destino
						['Q712226'  ] = 'km2',
						['Q185078'  ] = 'dam2',
						['Q35852'   ] = 'ha',
						['Q81292'   ] = 'acre',
						['Q232291'  ] = 'sqmi',
						['Q857027'  ] = 'sqft',
						['Q1063786' ] = 'sqin',
						-- ['Q21074767'] = 'sqvt', -- medida antigua en desuso, [[versta]] cuadrada
						-- ['Q669931'  ] = 'dessiatin', -- medida antigua en desuso
						-- ['Q935614'  ] = 'rai', -- medida antigua en desuso
						-- ['Q216795'  ] = 'dunam', -- medida antigua en desuso, [[dunam]]
						-- ['Q23931103'] = 'nmi²', -- no para edificios
						-- ['Q254532'  ] = 'sqdeg', -- no para edificios
						-- ? 'sqyd'
					}
					medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m2|abr=3|disp=#}}')
					medida = mw.ustring.gsub(medida, ',', '.')
				end
				table.insert( valor, lang:formatNum( tonumber( medida ) ) .. '&nbsp;[[metro cuadrado|m²]]' )
			end
		end
	end
	return mw.text.listToText( valor, ' o ', ' o ' )
end

function obtenerAlturas()
	-- global Entidad
	local frame = mw.getCurrentFrame()
	local valor = {}
	local datos = elementoTabla(Entidad,'claims','P2048') -- 'altura'
	if datos ~= nil then
		local valores = {}
		local altmax = ''
		local altarq = ''
		local lang = mw.language.getContentLanguage()
		for i, j in pairs(datos) do
			local medida = elementoTabla(j,'mainsnak','datavalue','value','amount')
			local unidad = elementoTabla(j,'mainsnak','datavalue','value','unit')
			if medida ~= nil then
				unidad = mw.ustring.gsub(unidad, '^.-/(Q%d )$', '%1')
				if unidad ~= 'Q11573' then -- unidades en 'metro'
					local unidades = {
						-- véanse valores admitidos para 'altura' en https://www.wikidata.org/wiki/Property:P2048#P2302
						['Q174789'] = 'mm',
						['Q174728'] = 'cm',
						-- ['Q11573'] = 'm', -- unidad de destino
						['Q828224'] = 'km',
						['Q218593'] = 'in',
						['Q3710'  ] = 'ft',
						-- ['Q355198' ] = 'pixel', -- no para edificios
						-- ['Q7673190'] = 'celda', -- no para edificios
						-- ? 'yd'
					}
					medida = frame:preprocess('{{Convertir|' .. medida .. '|' .. unidades[unidad] .. '|m|abr=3|disp=#}}')
					medida = mw.ustring.gsub(medida, ',', '.')
				end
				valores[i] = tonumber( medida )
				local texto = lang:formatNum( valores[i] ) .. '&nbsp;[[metro|m]]'
				local parte = elementoTabla(j,'qualifiers','P518',1,'datavalue','value','id')
				if parte == 'Q26970842' then -- 'altura máxima'
					if altmax ~= '' then
						altmax = altmax .. ' o '
					end
					altmax = altmax .. texto
				elseif parte == 'Q24192182' then -- 'altura arquitectónica'
					if altarq ~= '' then
						altarq = altarq .. ' o '
					end
					altarq = altarq .. texto
				end
			end
		end
		-- cuando no se especifica la 'altura máxima' se muestra la máxima altura disponible:
		if altmax == '' and #valores > 0 then
			altmax = 0
			for i,j in pairs(valores)
			do
				if altmax < tonumber(j) then
					altmax = tonumber(j)
				end
			end
			altmax = lang:formatNum( altmax ) .. '&nbsp;[[metro|m]]'
		end
	--	-- cuando no se especifica la 'altura arquitectónica' se muestran todas las alturas disponibles:
	--	if altarq == '' and #valores > 0 then
	--		altarq = ''
	--		for i,j in pairs(valores) do
	--			if altarq ~= '' then
	--				altarq = altarq .. ' o '
	--			end
	--			altarq = lang:formatNum( j ) .. '&nbsp;[[metro|m]]'
	--		end
	--	end
		valor.maxima = altmax
		valor.altura = altarq
	end
	return valor
end

function obtenerCalle()
	-- global Entidad
	local valor = {}
	local datos = elementoTabla(Entidad,'claims','P669') -- 'calle'
	if datos ~= nil then
		for i, j in pairs(datos) do
			local qid = elementoTabla(j,'mainsnak','datavalue','value','id')
			local obj = mw.wikibase.getEntityObject(qid)
			if obj ~= nil then
				local titulo = elementoTabla(obj,'labels','es','value')
				local pagina = obj:getSitelink('eswiki')
				if titulo ~= nil then
					local entrada = ''
					if pagina ~= nil then
						entrada = '[[' .. pagina .. '|' .. titulo .. ']]'
					else
						entrada = titulo
					end
					local nrocalle = elementoTabla(j,'qualifiers','P670',1,'datavalue','value')
					if nrocalle ~= nil then
						entrada = entrada .. ' n.º&nbsp;' .. nrocalle
					end
					table.insert( valor, entrada )
				end
			end
		end
	end
	return mw.text.listToText( valor )
end

function devolverlocalizacion()
  local frame = mw.getCurrentFrame()
  local Ubicacion = sinBandera(argumento{'ubicación'}) or sinBandera(argumento{'localización'}) or ''
 -- local localizacion = sinBandera(argumento{'localización'}) or ''
  local locamuniciu = argumento{'localidad', 'municipio', 'ciudad'} or ''
  local pais = argumento{'país',{propiedad,'P17',{rango_mayor='sí'}}} or ''
  local tipodivadministrativa = argumento{'tipo_división_administrativa', 'tipo_división'} or 'División' 
  local divadministrativa = sinBandera( argumento{'división_administrativa', 'división',{propiedad,'P131'}} ) or	''
  local tipoosubdivadministrativa = argumento{'tipo_subdivisión_administrativa', 'tipo_subdivisión'} or 'Subdivisión'
 local subdivadministrativa = sinBandera( argumento{'subdivisión_administrativa', 'subdivisión'} ) or ''
 local pais1 = sinBandera(pais)
 local pais1 = pais:gsub('%[','')	 
 pais1 = pais1:gsub('%]','')
 if Ubicacion ~= '' then
 		if Ubicacion:find(pais1) then
 		Ubicacion = Ubicacion:gsub(pais1,'')
 	    Ubicacion:sub(1,-1)
 	    Ubicacion = Ubicacion:gsub('%[%[%]%]','')
 	    Ubicacion = Ubicacion:gsub('%[%[%|%]%]','')
 	    Ubicacion = Ubicacion:gsub(',','')
 	    Ubicacion = Ubicacion:gsub('%(%)','')
 		end
 	if argumento{'conBandera'} == 'si' then	
 	     pais1 = frame:preprocess('{{Bandera2|'..pais1..'}}')
 	 else
      pais1 = '[['..pais1..']]'
     end 
  return ModuloFormato.entreParentesis(Ubicacion, pais1)
    --return ModuloFormato.entreParentesis(Ubicacion,pais)
 end
 
 if divadministrativa ~= '' then
 	if divadministrativa:find(pais) then
 		divadministrativa = divadministrativa:gsub(pais1,'')
 		divadministrativa:sub(1,-1)
 	    divadministrativa = divadministrativa:gsub('%[%[%]%]','')
 	    divadministrativa = divadministrativa:gsub('%[%[%|%]%]','')
 	    divadministrativa = divadministrativa:gsub(',','')
 	end
 	if argumento{'conBandera'} == 'si' then 
    pais1 = frame:preprocess('{{Bandera2|'..pais1..'}}')
       else
       	pais1 = '[['..pais1..']]'
    end
    return ModuloFormato.entreParentesis(divadministrativa,pais)
 end
 
 if argumento{'conBandera'} == 'si' then
 return pais
 else
 	return sinBandera(pais)
 end
 end	
 

function obtenerMaterial()
	-- global Entidad
	local valor = {}
	local datos = elementoTabla(Entidad,'claims','P186') -- 'material empleado'
	if datos ~= nil then
		for i,j in pairs(datos) do
			local qid = elementoTabla(j,'mainsnak','datavalue','value','id')
			local obj = mw.wikibase.getEntityObject(qid)
			if obj ~= nil then
				local titulo = elementoTabla(obj,'labels','es','value')
				local pagina = obj:getSitelink('eswiki')
				if titulo ~= nil then
					if pagina ~= nil then
						table.insert( valor, '[[' .. pagina .. '|' .. titulo .. ']]' )
					else
						table.insert( valor, titulo )
					end
				end
			end
		end
	end
	return mw.text.listToText( valor )
end

return z