Módulo:ejemplo
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 substr = require("Módulo:String").sub
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"] or args["apellido"] then
generar_error("nombre-apellido")
end
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
generar_error("c")
args["c"] = "libro"
end
if (not args["u"]) and args["URL"] then
generar_error("URELE") -- por si acaso, para que no se mezcle ocn el url de abajo
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
local function esta_desbalanceada(s)
local cursiva_abierta = false
local negrita_abierta = false
local comillas_previas = 0
if not s or s == "" then
return false
end
for i=1,#s do
if substr(s, i, i) == "'" then
comillas_previas = comillas_previas + 1
else
if comillas_previas == 2 then
cursiva_abierta = not cursiva_abierta
elseif comillas_previas == 3 then
negrita_abierta = not negrita_abierta
end
comillas_previas = 0
end
end
return cursiva_abierta or negrita_abierta
end
if esta_desbalanceada(args[1]) or esta_desbalanceada(args["trad"]) then
generar_error("desbalance")
end
if strfind(args[1], "→") or args["trad"] and strfind(args["trad"], "→") then
generar_error("flecha")
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
error("Los argumentos deben escribirse todojunto")
end
if strfind(args[1], "'''[^']+:[^']+'''") or strfind(args["trad"], "'''[^']+:[^']+'''") then
generar_error("iteminterno")
end
if strfind(args[1], "<ref>") then
generar_error("ref")
end
if strfind(args[1], "<small>") then
generar_error("small")
end
if strfind(args[1], "{{referencia") then
generar_error("referencia")
end
if strfind(args[1], "{{cita") then
generar_error("cita")
end
if strfind(args[1], "h?t?t?p?s?:?/?/?.?w?w?w?%.?[-a-zA-Z0-9@:%%%._%+~#=]+%.[a-z]+") then
generar_error("url")
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], "[fF]uente:") or strfind(args["trad"], "[fF]uente:") then
generar_error("sinformato")
end
if strfind(args[1], "<br>[%.%-;:,?!¡¿ ]*$") or strfind(args[1], "^[%.%-;:,?!¡¿ ]*<br>") then
generar_error("doblesalto")
end
if strfind(args[1], "^[^%[]+%]") or strfind(args["trad"], "^[^%[]+%]") 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: ''"..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