Ir para o conteúdo

Módulo:Footnotes

De Wiki TokuDrive
Revisão de 06h50min de 5 de julho de 2026 por Tavoraadmin (discussão | contribs) (Importando predefinição/módulo da Wikipédia em português para manter layout)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)

f = {

   args_default = {
       bracket_left = "",
       bracket_right = "",
       bracket_year_left = "",
       bracket_year_right = "",
       postscript = "",
       page = "",
       pages = "",
       location = "",
       page_sep = ", p. ",
       pages_sep = ", pp. ",
       ref = "",
       P1 = "",
       P2 = "",
       P3 = "",
       P4 = "",
       P5 = ""
   }

}

function trim( str )

   if str == nil then
       return nil
   end
   return str:match( "^%s*(.-)%s*$")

end

function core( args )

   local result;

--TODO: evaluate to make sure that the following if correctly handles the parameter set when there is no year

   local ano
   if args.P5 ~= "" then
       result = args.P1 .. ' et al. ' .. args.bracket_year_left .. args.P5 ..
       args.bracket_year_right
   elseif args.P4 ~= "" then
       result = args.P1 .. ', ' .. args.P2 .. ' & ' .. args.P3 .. ' ' ..
       args.bracket_year_left .. args.P4 .. args.bracket_year_right
   elseif args.P3 ~= "" then
       result = args.P1 .. ' & ' .. args.P2 .. ' ' .. args.bracket_year_left ..
       args.P3 .. args.bracket_year_right
   elseif args.P2 ~= "" then
       local ano = args.P2
       -- converte possível hífen para traço
       if string.match(ano, "^[1-9]%d%d%d?[%-–][1-9]%d%d%d?%a?$") then
           ano = ("%d–%d"):format(string.match(args.P2, "(%d%d%d%d?)%-(%d%d%d%d?)%a?"))
       end
       local isDate
       for _, tmp in ipairs {'%d%d', 'Século', 'século', 'AC', 'A%.C%.', 'AD', 'A%.D%.'
           , 'aC', 'a%.C%.', 'dC', 'd%.C%.', 'DC', 'D%.C%.', 'n%.d%.', 'nd', 's%.d%.', 'sd'}
       do
           if ano:find(tmp) then
               isDate = true
               break
           end
       end
       if isDate then
           result = args.P1 .. ' ' .. args.bracket_year_left .. ano .. args.bracket_year_right
       else
           result = args.P1 .. ' & ' .. args.P2 -- for the case where the last numbered parameter is a name and not a year and not no-date
       end
       args.P2 = ano
   else
       result = trim( args.P1 .. ' ' .. args.bracket_year_left .. args.P2 ..
       args.bracket_year_right )
   end
   if ('.' == result:sub(-1)) and ( == args.page) and ( == args.pages) and ( == args.location) then
       args.postscript =  -- prevent double periods when date is 'n.d.'
   end
   if args.ref ~= 'none' then
       if args.ref ~= "" then
           result = "" .. result .. ""
       else
           result = "[[#CITEREF" .. mw.uri.anchorEncode(args.P1 .. (ano or args.P2)
               .. args.P3 .. args.P4 .. args.P5) .. "|" .. result .. "]]"
       end
   end
   if args.page ~= "" then
       result = result .. args.page_sep .. args.page
   elseif args.pages ~= "" then
       result = result .. args.pages_sep .. args.pages
   end
   if args.location ~= "" then
       result = result .. ", " .. args.location
   end
   result = args.bracket_left .. result .. args.bracket_right .. args.postscript
   return result

end

function f.harvard_core( frame )

   local args = {}
   local pframe = frame:getParent()
   args.bracket_left = pframe.args.BracketLeft or ""
   args.bracket_right = pframe.args.BracketRight or ""
   args.bracket_year_left = pframe.args.BracketYearLeft or ""
   args.bracket_year_right = pframe.args.BracketYearRight or ""
   args.postscript = pframe.args.Postscript or ""
   if 'none' == args.postscript then
       args.postscript = 
   end
   args.page = pframe.args.Page or ""
   args.pages = pframe.args.Pages or ""
   args.location = pframe.args.Location or ""
   args.page_sep = pframe.args.PageSep or ""
   args.pages_sep = pframe.args.PagesSep or ""
   args.ref = pframe.args.REF or "{{{REF}}}"
   args.P1 = trim( pframe.args.P1 ) or ""
   args.P2 = trim( pframe.args.P2 ) or ""
   args.P3 = trim( pframe.args.P3 ) or ""
   args.P4 = trim( pframe.args.P4 ) or ""
   args.P5 = trim( pframe.args.P5 ) or ""
   return core( args )

end

function f.harvard_citation( frame )

   local args = f.args_default
   pframe = frame:getParent()
   args.bracket_left = "("
   args.bracket_right = ")"
   args.page = pframe.args.p or pframe.args.page or ""
   args.pages = pframe.args.pp or pframe.args.pages or ""
   args.location = pframe.args.loc or ""
   args.ref = pframe.args.ref or pframe.args.Ref or ""
   args.P1 = trim( pframe.args[1] ) or ""
   args.P2 = trim( pframe.args[2] ) or ""
   args.P3 = trim( pframe.args[3] ) or ""
   args.P4 = trim( pframe.args[4] ) or ""
   args.P5 = trim( pframe.args[5] ) or ""
   return core( args )

end

function f.harvard_citation_no_bracket( frame )

   local args = f.args_default
   pframe = frame:getParent()
   args.page = pframe.args.p or pframe.args.page or ""
   args.pages = pframe.args.pp or pframe.args.pages or ""
   args.location = pframe.args.loc or ""
   args.ref = pframe.args.ref or pframe.args.Ref or ""
   args.P1 = trim( pframe.args[1] ) or ""
   args.P2 = trim( pframe.args[2] ) or ""
   args.P3 = trim( pframe.args[3] ) or ""
   args.P4 = trim( pframe.args[4] ) or ""
   args.P5 = trim( pframe.args[5] ) or ""
   return core( args )

end

function f.sfn( frame )

   local args = f.args_default
   for k, v in pairs( frame.args ) do -- for {{#invoke:Footnotes|sfn

|bracket_year_left = ( |bracket_year_right = ) }}, override default with values provided in the #invoke:

       args[k] = v
   end
   pframe = frame:getParent()
   args.postscript = pframe.args.postscript or pframe.args.ps or "."
   if 'none' == args.postscript then
       args.postscript = 
   end
   args.page = pframe.args.p or pframe.args.page or ""
   args.pages = pframe.args.pp or pframe.args.pages or ""
   args.location = pframe.args.loc or ""
   args.ref = pframe.args.ref or pframe.args.Ref or ""
   args.P1 = trim( pframe.args[1] ) or ""
   args.P2 = trim( pframe.args[2] ) or ""
   args.P3 = trim( pframe.args[3] ) or ""
   args.P4 = trim( pframe.args[4] ) or ""
   args.P5 = trim( pframe.args[5] ) or ""
   local result = core( args );
   local name = trim(pframe.args['name']) or trim(pframe.args['nome']) or
       "FOOTNOTE" .. args.P1 .. args.P2 .. args.P3 .. args.P4 .. args.P5 ..
       args.page .. args.pages .. args.location
   local group = trim(pframe.args['group']) or trim(pframe.args['grupo'])
   result = frame:extensionTag{ name = "ref", args = { name = name,  group = group}, content=result }
   return result

end

return f