Módulo:Ficha

De Biquipedia

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

--
-- Iste modulo ye pa implementar en {{Ficha}}
--
 
local p = {}
 
local HtmlBuilder = require('Module:HtmlBuilder')
local CategorizacionAByAD = require('Módulo:Categorización de buenos y destacaus')
local marco = {} 
local args
local root
local amploImachen = '245px' 
function union(t1, t2)
    -- torna a unión d'as valors de dos tablas, como una seqüencia
    local vals = {}
    for k, v in pairs(t1) do
        vals[v] = true
    end
    for k, v in pairs(t2) do
        vals[v] = true
    end
    local ret = {}
    for k, v in pairs(vals) do
        table.insert(ret, k)
    end
    return ret
end

local function depurarVueitas(conteniu)
    if conteniu and conteniu ~= '' then
        return conteniu
    end
end

local function getArgNums(prefix)
    local nums = {}
    for k, v in pairs(args) do
        local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$')
        if num then table.insert(nums, tonumber(num)) end
    end
    table.sort(nums)
    return nums
end

local function adhibirRinglera(rowArgs)
    if rowArgs.seccion then
        root
            .tag('tr')
                .tag('th')
                    .attr('colspan', 3)
                    .addClass(rowArgs.claseRinglera)
                    .css('text-align', 'center')
                    .cssText(rowArgs.estiloseccion or args.estiloseccion)
                    .wikitext(rowArgs.seccion)
    elseif rowArgs.datos then
        local ringlera = root.tag('tr')
        ringlera.addClass(rowArgs.claseRinglera)
        if rowArgs.etiqueta then
            ringlera
                .tag('th')
                    .attr('scope', 'row')
                    .css('text-align', 'left')
                    .addClass(rowArgs.claseRinglera)
                    .cssText (rowArgs.estiloetiqueta or args.estiloetiqueta)
                    .wikitext(rowArgs.etiqueta)
                    .done()
        end
        
        local datosCelula = ringlera.tag('td')

        if rowArgs.etiqueta then 
            datosCelula
                .attr('colspan', 2)
        else
            datosCelula
                .attr('colspan', 3)
                .css('text-align', 'center') 
        end
        datosCelula
            .addClass(rowArgs.clase)
            .cssText (rowArgs.estilodatos or args.estilodatos)

        -- S'adhibe un salto de linia porque si no se fa asinas y por eixemplo en os
        -- datos i hai una lista con asteriscos en o primer elemento s'amostra
        -- un asterisco. 
        -- Se tracta d'una error que ya ocurre con tablas normals sin LUA. Por eixemplo
        -- {|
        -- | * elemento1
        -- * elemento2
        -- |}
        -- O salto de linia ya se produciba en a plantilla Ficha/ringlera
            .wikitext('\n' .. rowArgs.datos)
            --.newline()	
    end
end

local function ferTitol() -- Cabecera d'a ficha
    if not args.titol then return end
local cabecera = {}    
    if args.media == 'si' and args.clasetitol then
      cabecera = 'media ' .. args['clasetitol']
    elseif args.media == 'si' then
      cabecera = 'media ' 
    elseif args.tipocabecera then
      cabecera = 'cabecera ' .. args.tipocabecera
    elseif args.clasetitol then
      cabecera = 'cabecera ' .. args.clasetitol
    else 
      cabecera = 'cabecera '
    end
    root
        .tag('tr')
           .tag('th')
              .attr('colspan', 3)
              .addClass(cabecera)
              .css('text-align', 'center')
              .css('background-color', args.colorfondo or args.colorfondotitol or 'transparent')
              .css('color', args.colortexto or 'black')
              .cssText(args.estilotitol)
              .wikitext(args.titol)
end
local function ferRingleraAlto()
    if not args.alto and not args.titol2 then return end
 
    root
        .tag('tr')
            .tag('th')
                .attr('colspan', 3)
                .addClass(args.clasealtoor or args.clasetitol2)
                .css('text-align', 'center')
                .css('font-size', '125%')
                .css('font-weight', 'bold')
                .cssText(args.estiloalto or args.estilotitol2)
                .wikitext(args.alto or args.titol2)
end

local function ferPietDeTabla()-- Piet de tabla, apareixerá debaixo d'a ficha
    if not args.pietdetabla then return end
    
    root
        .tag('tr')
            .tag('td')
                .attr('colspan', '3')
                .addClass(args.clasepietdetabla)
                .css('text-align', 'center')
                .cssText(args.estilopietdetabla)
                .wikitext(args.pietdetabla)
end
local function hacerImagenInferior()-- Imachen que apareixerá en a parti inferior d'a tabla
    if not args.imacheninferior then return end
            imacheninferior  = {}
            if args['grandariaimacheninferior']  == nil or args['grandariaimacheninferior'] == '' then
                 args['grandariaimacheninferior'] = amploImachen
            end
            if string.find(args.imacheninferior, '[{[]') == nil then
            imacheninferior = ('[[Imachen:' .. args.imacheninferior .. '|'.. args['grandariaimacheninferior'] .. ']]' )
            else 
            imacheninferior = args.imacheninferior
            end
    
    root
        .tag('tr')
            .tag('td')
                .attr('colspan', '3')
                .addClass(args.claseimacheninferior)
                .css('text-align', 'center')
                .cssText(args.estiloimacheninferior)
                .newline()
                .wikitext(imacheninferior)
                .tag('br', {selfClosing = true})
                    .done()
                .tag('div')
                    .css('display','inline')
                    .cssText(args.estilopietinferior)
                    .wikitext(args.pietinferior)
                    .done()
                    .newline()
end

local function ferImachenSuperior()-- Imachen que apareixerá en a parti superior d'a tabla
    if not args.imachensuperior then return end
    if args['grandariaimachensuperior']  == nil or args['grandariaimachensuperior']  == '' then
            args['grandariaimachensuperior'] = amploImachen
    end
    imachensuperior  = {}
            if string.find(args.imachensuperior, '[{[]') == nil then
            imachensuperior = ('[[Imachen:' .. args.imachensuperior .. '|'.. args['grandariaimachensuperior'] .. ']]' )
            else 
            imachensuperior = args.imachensuperior
            end
    
    root
        .tag('tr')
            .tag('td')
                .attr('colspan', '3')
                .addClass(args.claseimachensuperior)
                .css('text-align', 'center')
                .cssText(args.estiloimachensuperior)
                .newline()
                .wikitext(imachensuperior)
                .tag('br', {selfClosing = true})
                    .done()
                .tag('div')
                    .css('display','inline')
                    .cssText(args.estilopietsuperior)
                    .wikitext(args.pietsuperior)
                    .done()
                    .newline()
end

local function ferSubtitols()-- Subtitols d'a ficha
    if args.subtitol then
        args.subtitol1 = args.subtitol
    end
    if args.clasesubtitol then
        args.clasesubtitol1 = args.clasesubtitol
    end
    local subtitolnumero = getArgNums('subtitol')
    for k, num in ipairs(subtitolnumero) do
        adhibirRinglera({
            datos       = args['subtitol' .. num],
            estilodatos = args['estilosubtitol' .. num] or args.estilosubtitol,
            clase       = args.clasesubtitol,
            claseRinglera   = args['clasesubtitol' .. num]
        })
    end
end
local function ferRinglerasSuperiors()-- ringleras dencima d'imachens laterals 
    if args.datosup then
        args.datosup1 = args.datosup
    end
    if args.clasedatosup then
        args.clasedatosup1 = args.clasedatosup
    end

    if args.estilodatosup then
        args.estilodatosup1 = args.estilodatosup
    end
    local datosupnumero = getArgNums('datosup')
    for k, num in ipairs(datosupnumero) do
        adhibirRinglera({
            datos = args['datosup' .. num],
            estilodatos = args['estilodatosup' .. num],
            clase = args.clasedatosup,
            claseRinglera = args['clasedatosup' .. num]
        })
    end
end
local function ferImachensLaterals()
-- Imagenes que apareceran alto de forma geminada por ejemplo escudos y banderas
   
if args['grandariaimachenizquierda'] == "" or args['grandariaimachenizquierda'] == nil then
         args['grandariaimachenizquierda'] = '100px'
      end 
      if args['grandariaimachendreita'] == "" or args['grandariaimachendreita'] == nil then
         args['grandariaimachendreita'] = '100px'
      end
   if args.imachendreita and args.imachenizquierda then
      if args.pietizquierdo then brcondicionalizquierdo = 'br' end
      if args.pietdreito then brcondicionaldreito = 'br' end
      	
      root
        .tag('tr')
        .tag('td')
        --.attr('cellspacing', '0em')
        --.attr('padding','0em')
        .attr('colspan', '3')
        .css('align', 'center')
        .tag('table') -- ha d'ir adintro d'una tabla pa que as filas no lo deformen
        .css('width', '100%')
        .addClass('mergedrow')
        .tag('tr')
            .tag('td')
            .css('text-align', 'center')
                .css('background-color', 'transparent')
                .addClass(args.claseimagenizquierda)
                .css('align', 'center')-- S'alinia en o centro horizontal
                .css('text-align', 'center') -- S'alinia en o centro horizontal
                .css('vertical-align', 'middle')-- S'alinia en o centro vertical 
                .cssText(args.estiloimagenizquierda)
                .wikitext('[[Imachen:' .. args.imachenizquierda .. '|' .. args['grandariaimachenizquierda'] .. ']]' )
                .tag(brcondicionalizquierdo)
                .tag('div')
                    .css('display','inline')
                    .cssText(args.estilopieizquierdo)
                    .wikitext(args.pietizquierdo)
                    .done()
            .tag('td')
                .css('text-align', 'center')-- S'alinia en o centro horizontal
                .css('align', 'center')-- S'alinia en o horizontal
                .css('vertical-align', 'middle')-- S'alinia en o centro vertical
                .css('background-color', 'transparent')
                .addClass(args.claseimagenderecha)
                .cssText(args.estiloimagenderecha)       
                .wikitext('[[Imachen:' .. args.imachendreita .. '|' .. args['grandariaimachendreita'] .. ']]' )
                .tag(brcondicionaldreito)
                .tag('div')
                    .css('display','inline')
                    .cssText(args.estilopiederecho)
                    .wikitext(args.pietdreito)
                    .done()
                .newline()
     elseif args.imachendreita or args.imachenizquierda then 
-- Si nomás una d'as dos, a imachen que apareixca será en o centro
         imachenL = {}    
           if args.imachendreita ~= '' and  args.imachendreita ~= nil then
               imachenL = 'imachendreita'  
           elseif args.imachenizquierda ~= '' and  args.imachenizquierda ~= nil then
               imachenL = 'imachenizquierda'
           end
        pieL = {}
          if args.imachendreita then
               pieL = 'pietdreito' 
          elseif args.imachenizquierda then
               pieL = 'pietizquierdo' 
          end
      root
        .tag('tr')
            .tag('td')
                .attr('colspan', '3')
                .addClass(args['clase' .. imachenL])
                .css('text-align', 'center')
                .cssText(args['estilo' .. imachenL])
                .newline()
                .wikitext('[[Imachen:' ..  args[imachenL] .. '|'.. args['tamanyo'..imachenL] .. ']]' )
                .tag('br')
                .tag('div')
                   .css('display','inline')
                   .cssText(args['estilo' .. pieL])
                   .wikitext(args[pieL])
                   .done()
                
    end
    end
            
local function ferImachens() -- Puet creyar un numero infinito de imachens 
    if args.imachen then
        args.imagen1 = args.imachen
    end
     if args['grandariaimachen'] then
        args['grandariaimachen1'] = args['grandariaimachen']
    end

    if args.piet then
        args.pie1 = args.piet
    end
    local imagenums = getArgNums('imachen')

    for k, num in ipairs(imagenums) do
        local piet = args['piet' .. num]
        local flotante = args['imachenflotant' .. num] or false
            if args['grandariaimachen'..num]  == nil then
                args['grandariaimachen'..num]  =    amploImachen
            end
        imachen  = {}
            local cadenaBusqueda = mw.ustring.gsub(args['imachen'..num],'UNIQ','[') -- Pa que no de problemas con qualques plantillas
            if mw.ustring.find(cadenaBusqueda, '[{[|]') == nil then -- Comprueba si i hai [ o { para no adhibir-ie prefixo
            imachen = ('[[Imachen:' .. args['imachen' .. num] .. '|'.. args['grandariaimachen' ..num] .. ']]' )
            else 
            imachen = args['imachen'..num]
            end
        local datos = HtmlBuilder.create().wikitext(imachen)
        if piet and not flotante then
        	datos
                .tag('br', {selfClosing = true})
                    .done()
        end
        if piet then
            datos
                .tag('div')
                    .css('display','inline')
                    .cssText(args.estilopie)
                    .wikitext(piet)
                    .done()
        end
        adhibirRinglera({
            datos = tostring(datos),
            estilodatos = args.estiloimachen,
            clase = args.claseimachen,
            claseRinglera = args['claseimachen' .. num]
        })
    end
end

local function ferRingleras()
    local filanum = union(getArgNums('seccion'), getArgNums('datos'))
    table.sort(filanum)
    for k, num in ipairs(filanum) do
        adhibirRinglera({
            estilosubtitol = depurarVueitas(args['estilosubtitol' .. num]),
            seccion         = depurarVueitas(args['seccion' .. num]),
            estiloseccion   = depurarVueitas(args['estilosección' .. num]),
            etiqueta        = depurarVueitas(args['etiqueta' .. num]),
            datos           = depurarVueitas(args['datos' .. num]),
            estiloetiqueta  = depurarVueitas(args['estiloetiqueta' .. num]),
            estilodatos     = depurarVueitas(args['estilodatos' .. num]),
            clase           = depurarVueitas(args['clase' .. num]),
            claseRinglera       = depurarVueitas(args['claseRinglera' .. num])
        })
    end
end

function tienDatosRinglera(ringlera)
    -- Función que torna true si a ringlera u grupo de ringleras (en o caso de
    -- secciones) tien datos.
    
    if ringlera.tipo == 'sección' or ringlera.tipo == 'seccion' then
        for k, ringleraSeccion in ipairs(ringlera) do
            if tienDatosRinglera(ringleraSeccion) then 
                return true
            end
        end
    elseif ringlera.tipo == 'succesión' or ringlera.tipo == 'succesion' then
        if depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['anterior']) or
           depurarVueitas(ringlera[3]) or depurarVueitas(ringlera['siguient']) then 
            return true 
        end
    else
        if depurarVueitas(ringlera[2]) or depurarVueitas(ringlera['datos']) then
            return true
        end
    end
    
    return false
end

function adhibirSuccesion(argumentosSuccesion)
    local ringlera = root.tag('tr')
    ringlera.css('font-size', '88%')
    ringlera.css('text-align', 'center')
    
    local celda
    local width
    
    width = '33%'
    
    celda = ringlera.tag('td')
    celda
            .css('width', width)
            .css('padding', '0.2em 0.1em 0.2em 0')
            .css('vertical-align', 'middle')

    if argumentosSuccesion['estilo fuent'] then
           celda
                .tag('div')
                    .css('display','inline')
                    .css('font-style', argumentosSuccesion['estilo fuent'])
                    .wikitext(argumentosSuccesion.anterior)
                    .done()
    else 
        celda.wikitext(argumentosSuccesion.anterior)
    end
        
    if argumentosSuccesion['anyo anterior'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSuccesion['anyo anterior'] .. ')')
    end
    
    celda = ringlera.tag('td')
    celda
         .css('width', width)    
            .css('padding', '0.2em 0.1em')
            .css('vertical-align', 'middle')
            .css('background-color', argumentosSuccesion.color or '#E6E8FA')
            
    celda
         .tag('div')
              .css('display','inline')
              .css('font-weight', 'bold')
              .css('font-style', argumentosSuccesion['estilo fuent'] or '')
              .wikitext(argumentosSuccesion.actual or args.titol)
              .done()
              
    if argumentosSuccesion['anyo'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSuccesion['anyo'] .. ')')
    end              
    
    celda = ringlera.tag('td')
    celda
            .css('width', width)
            .css('padding', '0.2em 0 0.2em 0.1em')
            .css('vertical-align', 'middle')
        
    if argumentosSuccesion['estilo fuent'] then
           celda
                .tag('div')
                    .css('display','inline')
                    .css('font-style', argumentosSuccesion['estilo fuent'])
                    .wikitext(argumentosSuccesion.siguient)
                    .done()
    else 
        celda.wikitext(argumentosSuccesion.siguient)
    end
        
    if argumentosSuccesion['anyo siguient'] then
        celda
            .tag('br')
            .wikitext('(' .. argumentosSuccesion['anyo siguient'] .. ')')
    end
end
function ferRinglerasTabla(tabla)
    -- Función que composa as ringleras d'una tabla bien a ficha u bien una sección d'a mesma.
    
    local anadidoTituloSeccion = false
    
    for k, ringlera in ipairs(tabla) do
        if tienDatosRinglera(ringlera) then
            if ringlera.tipo == 'sección' or ringlera.tipo == 'seccion' then
                -- Adhibir o títol d'a sección (si ye informau)
                local titolSeccion = depurarVueitas(ringlera.titol) or depurarVueitas(ringlera['títol'])
                if titolSeccion then
                    adhibirRinglera({
                        estiloseccion = ringlera['estilotitol'] or ringlera['estilotítol'],
                        seccion       = titolSeccion
                   })
                end
                ferRinglerasTabla(ringlera)
            elseif ringlera.tipo == 'sección desplegable' or ringlera.tipo == 'seccion desplegable' then -- MANCA
            elseif ringlera.tipo == 'succesión'or ringlera.tipo == 'succesion' then
                adhibirSuccesion({
                    ['anterior']      = depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['anterior']),
                    ['actual']        = depurarVueitas(ringlera['actual']),
                    ['siguient']     = depurarVueitas(ringlera[3]) or depurarVueitas(ringlera['siguient']),
                    ['anyo anterior']  = depurarVueitas(ringlera['anyo anterior']),
                    ['anyo']           = depurarVueitas(ringlera['anyo']),
                    ['anyo siguient'] = depurarVueitas(ringlera['anyo siguient']),
                    ['estilo fuent'] = depurarVueitas(ringlera['estilo fuent']),
                    ['color']         = depurarVueitas(ringlera['color'])
                })
            elseif ringlera.tipo == 'dos columnas'  then -- MANCA
            elseif ringlera.tipo == 'tres columnas' then -- MANCA            
            else                      -- Etiqueta + Datos u nomás Datos
                adhibirRinglera({
                    etiqueta       = depurarVueitas(ringlera[1]) or depurarVueitas(ringlera['etiqueta']),
                    datos          = depurarVueitas(ringlera[2]) or depurarVueitas(ringlera['datos']),
                    estiloetiqueta = ringlera['estiloetiqueta'] or tabla['estiloetiqueta'],
                    estilodatos    = ringlera['estilodatos']    or tabla['estilodatos'],
                    clase          = ringlera['clase']          or tabla['clase'],
                    claseRinglera      = ringlera['claseRinglera']      or tabla['claseRinglera']
                })
            end        
        end
    end   
end

local function ferBarraDeNavegacion()-- Creya en a parti inferior un enlace a la plantilla que se de con nombre
    if not args.nombre then return end
    
    root
        .tag('tr')
            .tag('td')
                .attr('colspan', '3')
                .css('text-align', 'right')
                .wikitext(mw.getCurrentFrame():expandTemplate({ 
                    title = 'navbar', 
                    args = { args.nombre, mini = 1 }
                }))
end

local function ferBarraWikidata()-- Creya en a parti inferior un enlace a l'ítem de Wikidata
   
    local enlacePachina = mw.title.getCurrentTitle().text 
    local etiquetaPachina = mw.ustring.gsub(enlacePachina,'%s%(.*%)','') 
    local entidat = args.entidat or mw.wikibase.getEntityIdForCurrentPage()
    local textoPie = ""
    if  (args.child == 'si' or args.integrada == 'sí' or args.wikidata == 'no') or (mw.title.getCurrentTitle().namespace ~= 0 and mw.title.getCurrentTitle().namespace ~= 104 and not args.entidat) then
        textoPie = ''
    elseif  entidat ~= "" and entidat ~= nil  then
        textoPie = '<div class="plainlinks wikidata-link" style="font-size: 0.85em">&#x5B;[[d:' .. tostring(entidat) .. '|editar datos en Wikidata]]&#x5D;</div>'
        if (entidat ~= mw.wikibase.getEntityIdForCurrentPage()) and (mw.title.getCurrentTitle().namespace == 0 or mw.title.getCurrentTitle().namespace == 104)  then
        	textoPie = textoPie .. '[[Categoría:Biquipedia:Articlos con fichas que emplegan acceso arbitrario]]'
        end
    else
        textoPie = "<small>'''Pachina no enlazada a [[Wikidata]]'''\n"..
"* Si no existe en atras Wikipedias: [<span class=plainlinks>[//www.wikidata.org/w/index.php?title=Special:NewItem&site=eswiki&page="..mw.uri.encode(enlacePachina,WIKI) .."&label="..mw.uri.encode(etiquetaPachina,WIKI) .." crea&nbsp;nuevo&nbsp;ítem]]</span>\n"..
"* Si existe en atras Wikipedias: [<span class=plainlinks>[[:d:Special:ItemByTitle|busca&nbsp;ítem&nbsp;para&nbsp;enlazar]]</span>]\n"..
"y ashibe o enlace en aragonés: ".. enlacePachina ..".</small>"
    end
    if textoPie ~= '' then
    	root
        	.tag('tr')
	            .tag('td')
	                .addClass('noprint')
                	.attr('colspan', '3')
                	.css('text-align', 'left')
                	.wikitext(textoPie)
    end
end
local function ferCategoriasSeguimiento()
    if args.decat ~= 'si' and #(getArgNums('datos')) == 0 and not args[1] and mw.title.getCurrentTitle().namespace == 0 then
        root.wikitext('[[Categoría:Biquipedia:Articlos que emplegan ficha sin datos en ringleras]]')
    end
    
    if CategorizacionAByAD.hasAnyBadge() == '1' then
	    root.wikitext(CategorizacionAByAD.badgesCategories())
	end
end

function _infobox()
    if args.child ~= 'si' and args.integrada ~= 'sí' then
        root = HtmlBuilder.create('table')
        
        root   -- Estilo de toda a ficha         
            .addClass('infobox')
            .addClass(args.clase)
            .cssText('width:22.7em; line-height: 1.4em; text-align:left; padding:.23em') -- Lo mesmo que a plantilla:Ficha
            .cssText(args.estilo)
        if args.estilo and (mw.title.getCurrentTitle().namespace == 10) then -- Para que sólo lo adhiba en o espacio de nombres plantilla
        	root.wikitext('[[Categoría:Biquipedia:Fichas con o parametro estilo]]')
        end
    
        ferTitol()
        ferRingleraAlto()
    else
        root = HtmlBuilder.create()
        
        if args.titol then
            root.wikitext("'''" .. args.titol .. "'''")
        end
    end

    ferSubtitols()
    ferImachenSuperior()
    ferImachensLaterals()
    ferRinglerasSuperiors()
    ferImachens() 
    if not args[1] then
        ferRingleras()
    else
        ferRinglerasTabla(args)
    end
    hacerImagenInferior()
    ferPietDeTabla()  
    ferBarraDeNavegacion()
    ferBarraWikidata()
    ferCategoriasSeguimiento()
    
    return tostring(root)
end
local function touchParameters(prefixTable, orichArgs, step)
    -- Analiza os parametros con os prefixos daus, en orden por lotes y con a grandaria especificada a step. 
    -- Isto ye para privar que referencias etc aparezcan en l'orden entivocau.
    if type(prefixTable) ~= 'table' or type(orichArgs) ~= 'table' then
        error("Dentrada no valida detectada pa la función touchParameters. Os dos parametros han d'estar tablas.", 2)
    end
    if step and type(step) ~= 'number' then
        error("Detectada valor no numerica en step.", 2)
    end
 
    step = step or 20 -- Si no se le da a grandaria a step, a valor predeterminada ye 20.
    local temp
    local a = 1 -- variable de contador.
    local moreArgumentsExist = true
    for j,v in ipairs(prefixTable) do
        if not type(v) == "string" then
            error("Detectada una valor que no ye string en o prefixo d'a tabla por a función touchParameters.", 2)
        end
        temp = orichArgs[v]
    end
    while moreArgumentsExist == true do
        moreArgumentsExist = false
        for i = a, a + step - 1 do
            for j,v in ipairs(prefixTable) do
                temp = orichArgs[v .. tostring(i)]
                if temp then
                    moreArgumentsExist = true
                end
            end
        end
        a = a + step
    end
end 
function p.infobox(frame)
    local orichArgs
    marco = frame
    -- Si se grita a traviés de #invoke, emplegue os argumentos pasaus ​​a la plantilla d'invocación.
    -- D'atra man, para fins de prueba, asume args que se pasan dreitament como parametros.
    if frame == mw.getCurrentFrame() then
        orichArgs = frame:getParent().args
    else
        orichArgs = frame
    end
 -- Analizar os parametros de datos en o mesmo orden que a plantilla {{ficha}} lo fa, por lo que
 -- referencias etc. s'amostrarán en os puestos previstos.
    local temp
    temp = orichArgs.titol
    temp = orichArgs.alto
    touchParameters({'subtitol'}, orichArgs, 5)
    touchParameters({'imachen', 'piet'}, orichArgs, 5)
    touchParameters({'seccion', 'etiqueta', 'datos'}, orichArgs, 20)
    temp = orichArgs.pietdetabla

    -- L'analizador de funcions  considera que una cadena vueita ye falsa, por lo que pa preservar l'anterior
    -- comportamiento de {{Ficha}}, s'han de cambear os argumentos vueitos ta cero, por lo que Lua los considerará
    -- que son falsos tamién (excepto parametros 'title cursiva', que especifica un comportamiento diferent
    -- pendendo de si ye ausent u vueito)
    args = {}
    for k, v in pairs(orichArgs) do
        if v ~= ''  then
            args[k] = v
        end
    end
 
    return _infobox()
end

return p