Ir al contenido

Módulo:Formato texto

De Wikipedia, la enciclopedia libre

Uso

Este módulo define varias funciones útiles sobre texto.

Funciones

enlazar()

Función simple para generar un wikienlace

Código
enlazar(enlace, texto, calificativo)
Parámetros
  • enlace es el enlace a analizar
  • texto la etiqueta del enlace
  • calificativo un valor opcional, entre paréntesis, con tanaño de fuente más pequeño

enlazar2()

Función compleja para generar un wikinelace o archivo multimedia, y comprobar si el destino existe.

Código
enlazar(enlace, opciones)
Parámetros
  • enlace string es el enlace a analizar.
  • opciones mixed valor mixto para las opciones, según el tipo de dato:
  • string la etiqueta del enlace.
  • number el espacio de nombres como identificador numérico (el identificador de espacio de nombres para "Archivo:" es 6).
  • nil la etiqueta será idéntica al enlace (no se suprimirá en el wikitexto resultante por razones técnicas).
  • table una serie de opciones en una tabla (array) cuyas claves son:
  • etiqueta string la etiqueta del enlace.
  • namespace number el espacio de nombres.
  • tamaño string el tamaño de la imagen (para espacio de nombres 6), seguido del sufijo 'px'.
  • link string un enlace alternativo, para archivos multimedia (espacio de nombres 6).
  • calificativo string un texto alternativo, entre paréntesis, con fuente más pequeña para espacios de nombre diferentes de 6.
  • debeExistir bool tratar el resultado según la prefrencia de existencia o no del enlace.
  • true la función comprueba si el destino existe. De existir, devuelve el wikienlace, de lo contrario, devuelve la etiqueta. Para el espacio de nombres "Archivo:", siempre se considerará true.
  • false devuelve el wikienlace indistintamente si existe o no el destino.

entreParentesis()

Función simple para poner texto y un calificativo entre paréntesis

Código
entreParentesis(texto fuera de los paréntesis, texto dentro de los paréntesis)
Ejemplos
  • entreParentesis(Robert de Niro, actor) → Robert de Niro (actor)
  • entreParentesis(Robert de Niro) → Robert de Niro
  • entreParentesis(nil, actor)

enCursivas()

enCursivas(texto)

enVariasLineas()

enVariasLineas(tabla)
Ejemplos

enVariasLineas({'Robert de Niro', 'actor'})

Robert de Niro
actor

enVersalitas()

enVersalitas(texto)

local z = {}

function z.enCursivas(texto, ref)
	if ref and texto then
		return '<i>' .. texto .. '</i>' .. ref
	elseif texto then
	    return '<i>' .. texto .. '</i>'
	end
end

-- Adaptado de [[:en:Module:String2]], función sentence
function z.enMayusculas(texto)
	if not texto or texto == '' then
		return texto
	end
	
	-- [[hipótesis (método científico)|hipótesis]]
	
	if texto:find("^%[%[[^|]+|[^%]]+%]%]") then
		local b, c = texto:find("|%A*%a") 
		return string.sub(texto, 1, c-1) .. string.upper(string.sub(texto, c, c)) .. string.sub(texto, c+1)
	end
	
	local letterpos = texto:find('%a')
	if letterpos then
		local first = texto:sub(1, letterpos - 1)
		local letter = texto:sub(letterpos, letterpos)
		local rest = texto:sub(letterpos + 1)
		return first .. string.upper(letter) .. rest
	else
		return texto
	end
end

function z.enVersalitas(texto)
	if not texto or texto == '' then
		return texto
	end	
	return '<span style="font-variant:small-caps">' .. texto .. '</span>'
end

function z.enVariasLineas(lista)
	local resultado
	local copia={}
	require('Módulo:Tablas').insertarElementosConValor(lista, copia)
	
	-- Solo devolver algo si hay al menos un elemento
	if copia[1] then
		return table.concat(copia, '<br/>')
	end
end

function z.entreComillas(texto, ref)
	if not texto or texto == '' then
		return texto
	elseif ref and ref ~='' then
		return '«' .. texto .. '»' .. ref
	else 
	    return '«' .. texto .. '»'
	end
end

function z.entreParentesis(texto, calificativo)
	if not texto or texto == '' then
		return
	elseif calificativo and calificativo ~= '' then
	    return texto .. ' (' .. calificativo .. ')'
	else
		return texto
	end
end

function z.separadosPorComa(lista)
	local copia={}
	require('Módulo:Tablas').insertarElementosConValor(lista, copia)
	
	return table.concat(copia, ', ')
end

-- :: Generar un enlace
function z.enlazar(enlace, texto, calificativo)
	local resultado 
	
	if enlace and texto then
		resultado = '[[' .. enlace .. '|' .. texto .. ']]'
	elseif enlace then
		resultado = '[[' .. enlace .. ']]'
	else
		resultado = texto
	end
	
	if resultado and calificativo then
		return resultado .. ' <small>(' .. calificativo .. ')</small>'
	else
		return resultado
	end
end

-- Generar un enlace (implementación extendida)
function z.enlazar2(enlace, opciones)
	if enlace then
		local etiqueta, namespace, tamano, borde, enlace2, pieImagen, debeExistir, solotexto

		if type(opciones) == 'table' then
			etiqueta	= opciones['etiqueta'] or ''
			namespace	= tonumber(opciones['namespace']) or 0
			tamano		= opciones['tamaño'] or '250px'
			borde		= opciones['border'] or opciones['borde']
			enlace2		= opciones['link']
			pieImagen	= opciones['pie']
			debeExistir	= opciones['debe existir'] or opciones['debeExistir'] or opciones['debeexistir']
			solotexto	= opciones['solotexto']
		elseif type(opciones) == 'string' then
			etiqueta = opciones
		elseif type(opciones) == 'number' then
			namespace = opciones
		else
			etiqueta = enlace
			namespace = 0
		end

		local tituloObj = mw.title.new(enlace, namespace) or {}

		local titulo2Obj = {}
		if enlace2 then titulo2Obj= mw.title.new(enlace2, 0) end

		local resultado = {}

		table.insert(resultado, tituloObj.fullText)

		if not debeExistir and namespace ~= 6 and namespace ~= 14 then
			if etiqueta then table.insert(resultado, etiqueta) end
			if calificativo then return '[[' .. prefix .. table.concat(resultado, '|') .. ']]' .. ' <small>(' .. calificativo .. ')</small>' end
			return '[[' .. table.concat(resultado, '|') .. ']]'
		end

		if tituloObj.exists or tituloObj.fileExists then
			-- Archivo:
			if namespace == 6 then
				if solotexto then
					if etiqueta then table.insert(resultado, etiqueta) end
					return '[[:' .. table.concat(resultado, '|') .. ']]'
				end
				
				if tamano then table.insert(resultado, tamano) end
				if borde then table.insert(resultado, 'border') end
				if titulo2Obj.exists then table.insert(resultado, 'link=' .. titulo2Obj.fullText) end
				if etiqueta then table.insert(resultado, etiqueta) end
				if pieImagen then return '[[' .. table.concat(resultado, '|') .. ']]' .. '<br>' .. pieImagen end
				return '[[' .. table.concat(resultado, '|') .. ']]'
			end
			
			-- Categoría:
			if namespace == 14 then
				if solotexto then
					if etiqueta then table.insert(resultado, etiqueta) end
					return '[[:' .. table.concat(resultado, '|') .. ']]'
				end
				return '[[' .. tituloObj.fullText .. ']]'
			end

			-- El resto
			if etiqueta then table.insert(resultado, etiqueta) end
			return '[[' .. table.concat(resultado, '|') .. ']]'

		end

		return etiqueta
	end
end

function z.llamadaDesdeUnaPlantilla(frame)
	local args = frame.args
	
	if args['tipo argumento'] == 'tabla' then
		local tabla = {args[2], args[3], args[4]}
		return z[args[1]](tabla)
	else
		return z[args[1]](args[2], args[3], args[4])
	end
end

return z