Módulo:Footnotes
Este módulo está na categoria sujeitos a proteção de página. Ele é um módulo de alta visibilidade em uso por um grande número de páginas, ou é transcluído muito frequentemente. Por causa do vandalismo ou erros que podem afectar muitas páginas, e mesmo edições triviais podem causar cargas substanciais nos servidores, ele está protegido de editar. |
Este módulo é usado em aproximadamente 7 000 páginas. (Ver Wikipedia:Predefinições em alto risco) Para evitar sobrecargas desnecessárias ao servidor e outros transtornos, quaisquer mudanças devem ser previamente testadas, seja na subpágina de testes deste módulo, na subpágina de testes de módulos (ou ainda em sua subpágina de testes). Por favor, sempre considere expor eventuais mudanças na página de discussão, antes de implementá-las. |
Descrição
Este Módulo implementa a predefinição {{HarvRef}} entre outras. Por favor consulte a predefinição para mais instruções.
Uso
Outra documentação:
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 = "[[#" .. mw.uri.anchorEncode(args.ref) .. "|" .. 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 {{sfnp}}, 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