Módulo:ejemplo

De Wikcionario, el diccionario libre

La documentación para este módulo puede ser creada en Módulo:ejemplo/doc

--Parámetros deprecados: apellidos, nombre, enlaceautor, fecha, año, mes, coautores, URL

local export = {}
local generar_error = require("Módulo:traza")
local strfind = require("Módulo:String").find

local params = {
    [1] = {}, --ejemplo
    ["tradtrad"] = {}, --solo para debug
    ["trad"] = {}, -- traducción
    ["traducción"] = {alias_de = "trad"},
    --Parámetros viejos
    ["apellidos"] = {},
    ["nombre"] = {},
    ["año"] = {},
    ["mes"] = {},
    ["URL"] = {},
    -- resto de parámetros para referencia
    ["c"] = {},
    ["cat"] = {alias_de = "c"},
    --Libros, artículos y general
    ["a"] = {lista = true},
    ["autor"] = {alias_de = "a"},
    ["artista"] = {alias_de = "a"},
    ["remitente"] = {alias_de = "a"},
    ["de"] = {alias_de = "a"},
    ["v"] = {},
    ["version"] = {alias_de = "v"},
    ["versión"] = {alias_de = "v"},
    ["editor"] = {lista = true},
    ["ilustrador"] = {lista = true},
    ["compositor"] = {lista=true},
    ["traductor"] = {lista=true},
    ["compilador"] = {lista=true},
    ["interprete"] = {lista=true},
    ["intérprete"] = {alias_de = "interprete"},
    --Títulos
    ["t0"] = {},
    ["revista"] = {alias_de = "t0"},
    ["colección"] = {alias_de = "t0"},
    ["coleccion"] = {alias_de = "t0"},
    ["t"] = {},
    ["t1"] = {alias_de = "t"},
    ["título"] = {alias_de = "t"},
    ["titulo"] = {alias_de = "t"},
    ["t2"] = {},
    ["subtítulo"] = {alias_de = "t2"},
    ["subtitulo"] = {alias_de = "t2"},
    ["parte"] = {alias_de = "t2"},
    ["art"] = {alias_de = "t2"},
    ["artículo"] = {alias_de = "t2"},
    ["termino"] = {alias_de = "t2"},
    ["término"] = {alias_de = "t2"},
    ["t3"] = {},
    ["cap"] = {alias_de = "t3"},
    ["capítulo"] = {alias_de = "t3"},
    ["capitulo"] = {alias_de = "t3"},
    ["subsubtítulo"] = {alias_de = "t3"},
    ["subsubtitulo"] = {alias_de = "t3"},
    ["sección"] = {alias_de = "t3"},
    ["seccion"] = {alias_de = "t3"},
    ["sec"] = {alias_de = "t3"},
    ["inc"] = {alias_de = "t3"},
    ["inciso"] = {alias_de = "t3"},
    ---Otros campos de libros
    ["p"] = {},
    ["pags"] = {alias_de = "p"},
    ["págs"] = {alias_de = "p"},
    ["paginas"] = {alias_de = "p"},
    ["páginas"] = {alias_de = "p"},
    ["vol"] = {tipo = "num"},
    ["volumen"] = {alias_de = "vol"},
    ["edicion"] = {tipo = "num"},
    ["edición"] = {alias_de = "edicion"},
    ["pasaje"] = {}, --Por ejemplo LA Biblia o las obras griegas clásicas; también aplica para revistas de artículos
    --Instituciones, editoriales, etc.
    ["editorial"] = {},
    ["sitio"] = {alias_de = "editorial"},
    ["diario"] = {alias_de = "editorial"},
    ["inst"] = {}, --institución
    ["institución"] = {alias_de = "inst"},
    ["institucion"] = {alias_de = "inst"},
    ["org"] = {alias_de = "inst"},
    ["organizacion"] = {alias_de = "inst"},
    ["organización"] = {alias_de = "inst"},
    --Fecha YYYY-MM-DD
    ["f"] = {},
    ["fecha"] = {alias_de = "f"},
    ["fo"] = {},
    ["fechaoriginal"] = {alias_de = "fo"},
    ["fecha original"] = {},
    --también fc = fecha consulta
    --Lugar
    ["l"] = {},
    ["lugar"] = {alias_de = "l"},
    ["lo"] = {},
    ["lugaroriginal"] = {alias_de = "lo"},
    ["lugar original"] = {},
    --Códigos de identifiación
    ["id"] = {},
    ["pid"] = {alias_de = "id"},
    ["patenteid"] = {alias_de = "id"},
    ["doi"] = {},
    ["isan"] = {},
    ["isbn"] = {},
    ["ismn"] = {},
    ["isrc"] = {},
    ["issn"] = {},
    ["iswc"] = {},
    ["oclc"] = {},
    -- diccionario
    ["urlprefijo"] = {},
    ["urlsufijo"] = {},
    --musica y audio
    ["album"] = {},
    ["álbum"] = {alias_de = "album"},
    ["n"] = {tipo = "num"},
    ["num"] = {alias_de = "n"},
    ["núm"] = {alias_de = "n"},
    ["nro"] = {alias_de = "n"},
    ["numero"] = {alias_de = "n"},
    ["número"] = {alias_de = "n"},
    ["estudio"] = {},
    --audiovisual
    ["clip"] = {},
    ["temporada"] = {tipo = "num"},
    ["m"] = {},
    ["modo"] = {alias_de = "m"},
    ["formato"] = {alias_de = "m"},
    ["plataforma"] = {alias_de = "m"},
    --cartas e emails
    ["destinatario"] = {lista = true},
    ["receptor"] = {alias_de = "destinatario"},
    ["para"] = {alias_de = "destinatario"},
    ["lr"] = {alias_de = "l"},
    ["lugarremitente"] = {alias_de = "l"},
    ["lugar remitente"] = {},
    ["ld"] = {},
    ["lugardestinatario"] = {alias_de = "ld"},
    ["lugar destinatario"] = {},
    --URL
    ["u"] = {},
    ["url"] = {alias_de = "u"},
    ["fc"] = {},
    ["fechaconsulta"] = {alias_de = "fc"},
    ["fecha consulta"] = {},
    ["fechaacceso"] = {alias_de = "fc"},
    --Si es esbozo o no
    ["esbozo"] = {tipo = "bool"},
    ["borrador"] = {alias_de = "esbozo"},
    --Observaciones
    ["obs"] = {},
    ["nota"] = {alias_de = "obs"},
    
    -- Parámetros duplicados por si se quiere incluir ref de traduccion
    ["tradc"] = {},
    ["tradcat"] = {alias_de = "tradc"},
    --Libros, artículos y general
    ["trada"] = {lista = true},
    ["tradautor"] = {alias_de = "trada"},
    ["tradartista"] = {alias_de = "trada"},
    ["tradremitente"] = {alias_de = "trada"},
    ["tradde"] = {alias_de = "trada"},
    ["tradv"] = {},
    ["tradversion"] = {alias_de = "tradv"},
    ["tradversión"] = {alias_de = "tradv"},
    ["tradeditor"] = {lista = true},
    ["tradilustrador"] = {lista = true},
    ["tradcompositor"] = {lista=true},
    ["tradtraductor"] = {lista=true},
    ["tradcompilador"] = {lista=true},
    ["tradinterprete"] = {lista=true},
    ["tradintérprete"] = {alias_de = "tradinterprete"},
    --Títulos
    ["tradt0"] = {},
    ["tradrevista"] = {alias_de = "tradt0"},
    ["tradcolección"] = {alias_de = "tradt0"},
    ["tradcoleccion"] = {alias_de = "tradt0"},
    ["tradt"] = {},
    ["tradt1"] = {alias_de = "tradt"},
    ["tradtítulo"] = {alias_de = "tradt"},
    ["tradtitulo"] = {alias_de = "tradt"},
    ["tradt2"] = {},
    ["tradsubtítulo"] = {alias_de = "tradt2"},
    ["tradsubtitulo"] = {alias_de = "tradt2"},
    ["tradparte"] = {alias_de = "tradt2"},
    ["tradart"] = {alias_de = "tradt2"},
    ["tradartículo"] = {alias_de = "tradt2"},
    ["tradtermino"] = {alias_de = "tradt2"},
    ["tradtérmino"] = {alias_de = "tradt2"},
    ["tradt3"] = {},
    ["tradcap"] = {alias_de = "tradt3"},
    ["tradcapítulo"] = {alias_de = "tradt3"},
    ["tradcapitulo"] = {alias_de = "tradt3"},
    ["tradsubsubtítulo"] = {alias_de = "tradt3"},
    ["tradsubsubtitulo"] = {alias_de = "tradt3"},
    ["tradsección"] = {alias_de = "tradt3"},
    ["tradseccion"] = {alias_de = "tradt3"},
    ["tradsec"] = {alias_de = "tradt3"},
    ["tradinc"] = {alias_de = "tradt3"},
    ["tradinciso"] = {alias_de = "tradt3"},
    ---Otros campos de libros
    ["tradp"] = {},
    ["tradpags"] = {alias_de = "tradp"},
    ["tradpágs"] = {alias_de = "tradp"},
    ["tradpaginas"] = {alias_de = "tradp"},
    ["tradpáginas"] = {alias_de = "tradp"},
    ["tradvol"] = {tipo = "num"},
    ["tradvolumen"] = {alias_de = "tradvol"},
    ["tradedicion"] = {tipo = "num"},
    ["tradedición"] = {alias_de = "tradedicion"},
    ["tradpasaje"] = {}, --Por ejemplo LA Biblia o las obras griegas clásicas; también aplica para revistas de artículos
    --Instituciones, editoriales, etc.
    ["tradeditorial"] = {},
    ["tradsitio"] = {alias_de = "tradeditorial"},
    ["traddiario"] = {alias_de = "tradeditorial"},
    ["tradinst"] = {}, --institución
    ["tradinstitución"] = {alias_de = "tradinst"},
    ["tradinstitucion"] = {alias_de = "tradinst"},
    ["tradorg"] = {alias_de = "tradinst"},
    ["tradorganizacion"] = {alias_de = "tradinst"},
    ["tradorganización"] = {alias_de = "tradinst"},
    --Fecha YYYY-MM-DD
    ["tradf"] = {},
    ["tradfecha"] = {alias_de = "tradf"},
    ["tradfo"] = {},
    ["tradfechaoriginal"] = {alias_de = "tradfo"},
    ["tradfecha original"] = {},
    --también fc = fecha consulta
    --Lugar
    ["tradl"] = {},
    ["tradlugar"] = {alias_de = "tradl"},
    ["tradlo"] = {},
    ["tradlugaroriginal"] = {alias_de = "tradlo"},
    ["tradlugar original"] = {},
    --Códigos de identifiación
    ["tradid"] = {},
    ["tradpid"] = {alias_de = "tradid"},
    ["tradpatenteid"] = {alias_de = "tradid"},
    ["traddoi"] = {},
    ["tradisan"] = {},
    ["tradisbn"] = {},
    ["tradismn"] = {},
    ["tradisrc"] = {},
    ["tradissn"] = {},
    ["tradiswc"] = {},
    ["tradoclc"] = {},
    -- diccionario
    ["tradurlprefijo"] = {},
    ["tradurlsufijo"] = {},
    --musica y audio
    ["tradalbum"] = {},
    ["tradálbum"] = {alias_de = "tradalbum"},
    ["tradn"] = {tipo = "num"},
    ["tradnum"] = {alias_de = "tradn"},
    ["tradnúm"] = {alias_de = "tradn"},
    ["tradnro"] = {alias_de = "tradn"},
    ["tradnumero"] = {alias_de = "tradn"},
    ["tradnúmero"] = {alias_de = "tradn"},
    ["tradestudio"] = {},
    --audiovisual
    ["tradclip"] = {},
    ["tradtemporada"] = {tipo = "num"},
    ["tradm"] = {},
    ["tradmodo"] = {alias_de = "tradm"},
    ["tradformato"] = {alias_de = "tradm"},
    ["tradplataforma"] = {alias_de = "tradm"},
    --cartas e emails
    ["traddestinatario"] = {lista = true},
    ["tradreceptor"] = {alias_de = "traddestinatario"},
    ["tradpara"] = {alias_de = "traddestinatario"},
    ["tradlr"] = {alias_de = "tradl"},
    ["tradlugarremitente"] = {alias_de = "tradl"},
    ["tradlugar remitente"] = {},
    ["tradld"] = {},
    ["tradlugardestinatario"] = {alias_de = "tradld"},
    ["tradlugar destinatario"] = {},
    --URL
    ["tradu"] = {},
    ["tradurl"] = {alias_de = "tradu"},
    ["tradfc"] = {},
    ["tradfechaconsulta"] = {alias_de = "tradfc"},
    ["tradfecha consulta"] = {},
    ["tradfechaacceso"] = {alias_de = "tradfc"},
    --Si es esbozo o no
    ["tradesbozo"] = {tipo = "bool"},
    ["tradborrador"] = {alias_de = "tradesbozo"},
    --Observaciones
    ["tradobs"] = {},
    ["tradnota"] = {alias_de = "tradobs"}
}

local function parche(args)
	if not args["a"][1] then
		if args["nombre"] then
    		args["a"][1] = args["nombre"]..(args["apellidos"] and " "..args["apellidos"] or "")
		else
    		args["a"][1] = args["apellidos"] and args["apellidos"] or nil
    	end
	end

	if (not args["c"]) and (args["apellidos"] or args["nombre"] or args["t"] or args["a"][1]) then
		args["c"] = "libro"
	end
	
	if (not args["u"]) and args["URL"] then
		args["u"] = args["URL"]
	end
	return args
end

local function obtener_args_trad(args)
	local args2 = nil
	for arg, val in pairs(args) do
		if type(arg) == "string" then
			arg2_ = {arg:match("^trad(.+)$")}
			if arg2_[1] then
				if not args2 then
					args2 = {}
				end
				args2[arg2_[1]] = val
			end
		end
	end
	return args2
end

local function obtener_ejemplo(args, frame)
	if not args[1] or args[1] == "" then
		generar_error("ejemplovacio")
		return nil
	end
	
	--if strfind(args[1], "^[^']+''[^']+$") or args["trad"] and strfind(args["trad"], "[^']+''[^']+$") then
	--	generar_error("desbalance")	
	--end
	
	--if strfind(args[1], "→") or args["trad"] and strfind(args["trad"], "→") then
	--	generar_error("flecha")	
	--end
	
	if args["tradtrad"] and args["tradtrad"] ~= "" then
		generar_error("tradtrad")	
	end
	
	if strfind(args["t"], "[gG]oogle") then
		generar_error("google")	
	end
	
	if args["fecha consulta"] or args["lugar destinatrio"] or args["lugar remitente"] or args["lugar original"] or args["fecha original"] 
	or args["tradfecha consulta"] or args["tradlugar destinatrio"] or args["tradlugar remitente"] or args["tradlugar original"] or args["tradfecha original"]  then
		generar_error("espacio")	
	end
	
	if strfind(args[1], "<ref>")
	or strfind(args[1], "<small>")
	or strfind(args[1], "{{referencia") 
	or strfind(args[1], "{{cita") 
	or strfind(args[1], "h?t?t?p?s?:?/?/?.?w?w?w?%.?[-a-zA-Z0-9@:%%%._%+~#=]+%.[a-z]+") then
		generar_error("referenciainterna")
	end
	
	if strfind(args[1], "%.''%.") or strfind(args[1], "[%.%,]%.$") or (args["trad"] and (strfind(args["trad"], "%.''%.") or strfind(args["trad"], "[%.%,]%.$"))) then
		generar_error("doblepunto")
	end
	
	wikitexto = false
	if strfind(args[1], "[<>%[%]'%*%{%}:|]") then
		wikitexto = true
	end
	if not wikitexto then
		for arg, v in pairs(args) do
			if strfind(v, "[<>%[%]'%*%{%}:|]") then
				wikitexto = true
				break
			end
		end
	end
	if wikitexto then
		generar_error("wikitexto")
	end
	
	if strfind(args[1], "posible referencia sin formato") or strfind(args["trad"], "posible referencia sin formato") or strfind(args[1], "tomado de") or strfind(args["trad"], "tomado de") then
		generar_error("sinformato")	
	end
	
	if strfind(args[1], "<br>[^a-zA-ZÀ-ž]-$") then
		generar_error("doblesalto")	
	end
	
	if strfind(args[1], "^[^%[]+%]") then
		generar_error("corchete")	
	end
    
    args = parche(args)
    
    local ref = require("Módulo:referencia").generar_referencia_con_link_implicito(args)
    local ref2 = nil
    local args_trad = obtener_args_trad(args)
    if args_trad then
    	ref2 = require("Módulo:referencia").generar_referencia_con_link_implicito(args_trad)
    end
    
    if not args["trad"] and (type(ref) ~= "string" or ref == "") and #args[1] < 200 and not args[1]:find("<br>") then
    	return ":*'''Ejemplo:''' "..args[1]
    end
    
    local ej = {}
    table.insert(ej, ":*'''Ejemplo:'''"..frame:extensionTag("templatestyles", nil, {src = "Plantilla:ejemplo/estilo.css"}).."\n::<blockquote><span class='cita'>"..args[1].."</span>")
    if args["trad"] then
    	table.insert(ej, "<span class='trad'>''Traducción:&nbsp;''"..args["trad"].."</span>")
    end
    
    if type(ref) == "string" and ref ~= "" then
    	table.insert(ej, "<span class='ref'>"..ref)    
    	if type(ref2) == "string" and ref2 ~= "" then
    		table.insert(ej, "<br>Traducción: "..ref2)
    	end
    	table.insert(ej, "</span>")
    end
    
    table.insert(ej, "</blockquote>")
    
    return table.concat(ej)
end

function export.generar_ejemplo_test(argumentos_plantilla)
	local args = require("Módulo:parámetros").obtener_parametros(argumentos_plantilla, params)
	return obtener_ejemplo(args)
end

function export.generar_ejemplo(frame)
    local parent_frame = frame:getParent()
	local args = require("Módulo:parámetros").obtener_parametros(parent_frame.args, params)
	return obtener_ejemplo(args, frame)
end

return export