Módulo:Citar periódico
A documentação para este módulo pode ser criada em Módulo:Citar periódico/doc
local p = require('Módulo:Citação/CS1')
--[[--------------------------< a b s t r a c a o >-----------------------------------
Código em comum às citações de periódico
]]
local abstracao = function(config, A)
config.usaVolume = true
config.usaIssue = true
config.ChapterNaoSuportado = true
local chap_param
-- pega o nome do parâmetro de um destes peta-parâmetros relacionados a "chapter"
if is_set (A.Chapter) then
chap_param = A:ORIGIN ('Chapter')
elseif is_set (A.TransChapter) then
chap_param = A:ORIGIN ('TransChapter')
elseif is_set (A.ChapterURL) then
chap_param = A:ORIGIN ('ChapterURL')
elseif is_set (A.ScriptChapter) then
chap_param = A:ORIGIN ('ScriptChapter')
else is_set (A.ChapterFormat)
chap_param = A:ORIGIN ('ChapterFormat')
end
-- se foi encontrado algum...
if is_set (chap_param) then
-- ... adiciona mensagem de erro
table.insert( z.message_tail, { set_error( 'chapter_ignored', {chap_param}, true ) } )
-- e esvazia para evitar problemas com concatenações
A.Chapter = ''
A.TransChapter = '';
A.ChapterURL = '';
A.ScriptChapter = '';
A.ChapterFormat = '';
end
local TransTitle = A.TransTitle
local Title = A.Title
if is_set(A.TitleLink) and is_set(A.Title) then
Title = "[[" .. A.TitleLink .. "|" .. Title .. "]]"
end
config.TituloFormatado = {}
if (is_set(Title)) then
Title = kern_quotes (Title)
Title = wrap_style ('quoted-title', Title)
config.TituloFormatado.Title = Title
end
if (is_set(TransTitle)) then
TransTitle= wrap_style ('trans-quoted-title', TransTitle ) -- .. ", "
config.TituloFormatado.TransTitle = TransTitle
end
end
--[[--------------------------< p . p e r i o d i c o >----------------------------------
Este é o método principal da predefinição {{citar periódico}}.
]]
p.periodico = function(frame)
frame.whitelist = { aspas = true,
mes = true,
["mês"] = true}
local config, args, A = tratarArgumentos(frame)
config.CitationClass = ''
config.permPCMcomoURL = true
local classe = 'journal'
-- abstração de códigos que os periódicos têm em comum
abstracao(config, A)
if is_set(args.aspas) and args.aspas:lower() == 'não' then
config.TituloFormatado = nil
end
local mes = args.mes or args["mês"]
if is_set(A.Year) and is_set(mes) then
meses = {"janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"}
local n = mes:match("^(%d+)$")
n = n and tonumber(n)
if n and n > 0 and n < 13 then
A.Date = meses[n] .. ' de ' .. A.Year
A.Year = ''
else
existe = false
for _,m in pairs(meses) do
if m == tostring(mes) then
existe = true
break
end
end
if (existe) then
A.Date = mes .. ' de ' .. A.Year
A.Year = ''
end
end
end
local sepc = set_style (A.Mode:lower())
local use_lowercase = sepc == ','
local page, pages = '', ''
-- mla sempre usa os prefixos p ou pp
if A.Mode:lower() ~= 'mla' then
if is_set(A.Page) then
page = substitute(cfg.messages['j-page(s)'], A.Page)
elseif is_set(A.Pages) then
page = substitute (cfg.messages['j-page(s)'], A.Pages)
end
if is_set(A.TotalPages) then
pages = substitute (cfg.messages['total-p'], {sepc, A.TotalPages})
end
else
page, pages = format_pages (A.Page, A.Pages, sepc, A.NoPP, use_lowercase, A.TotalPages)
end
local volume = A.Volume
if ('mla' == A.Mode:lower()) then
-- mla 8th edition; força letra minúscula
if is_set (volume) and is_set (A.Issue) then
volume = wrap_msg ('vol-no', {sepc, volume, A.Issue}, true)
elseif is_set (volume) then
volume = wrap_msg ('vol', {sepc, volume}, true)
else
volume = ''
end
else
volume = format_volume_issue (volume, A.Issue, sepc, use_lowercase)
end
if not is_set(A.Title) and is_set(volume) then
config.TituloDispensavel = true
if is_set(A.URL) then
for i=1,volume:len() do
if volume:sub(i,i):match(("[^%".. sepc .. "%s]")) then
volume = volume:sub(1, i-1) .. '['.. A.URL .. ' '.. volume:sub(i) .. ']'
break
end
end
A.URL = ''
end
end
-- Função com o código abstraído
local B
A, B = citation0(config, args, A)
A.Page = page
A.Pages = pages
A.Volume = volume
if is_set(A.Others) then
A.Others = A.Others .. B.sepc .. " "
end
if 'mla' == A.Mode then
B.tcommon = safe_join( {A.Periodical, A.Format, A.TitleType, A.Series, A.Language
, A.Edition, B.Publisher, A.Agency, A.Volume}, B.sepc )
else
B.tcommon = safe_join( {A.Others, A.Title, A.TitleNote, A.Edition, B.Publisher, A.Periodical
, A.Format, A.TitleType, A.Series, A.Language, A.Agency, A.Volume}, B.sepc )
end
config.CitationClass = classe
B.config = config
return textoFinal(A, B)
end
--[[--------------------------< p . j o r n a l >-----------------------------------------
Este é o método principal da predefinição {{citar jornal}}.
]]
p.jornal = function(frame)
local config, args, A = tratarArgumentos(frame)
config.CitationClass = ''
local classe = 'news'
-- abstração de códigos que os periódicos têm em comum
abstracao(config, A)
-- Função com o código abstraído
local B
A, B = citation0(config, args, A)
if ('mla' == A.Mode) then -- caso especial caso estiver no modo MLA
B.tcommon = safe_join( {A.Periodical, A.Format, A.TitleType, A.Series
, A.Language, A.Edition, B.Publisher, A.Agency}, B.sepc )
else
B.tcommon = safe_join({A.Title, A.TitleNote, A.Periodical, A.Format, A.TitleType
, A.Series, A.Language, A.Volume, A.Others, A.Edition, B.Publisher, A.Agency}, B.sepc )
end
config.CitationClass = classe
B.config = config
return textoFinal(A, B)
end
--[[--------------------------< p . r e v i s t a >----------------------------------
Este é o método principal da predefinição {{citar revista}}.
]]
p.revista = function(frame)
local config, args, A = tratarArgumentos(frame)
config.CitationClass = ''
local classe = 'magazine'
-- abstração de códigos que os periódicos têm em comum
abstracao(config, A)
local sepc = set_style (A.Mode:lower())
local volume = A.Volume
if is_set (volume) and is_set (A.Issue) then
volume = wrap_msg ('vol-no', {sepc, volume, A.Issue}, sepc == ',');
elseif is_set (volume) then
volume = wrap_msg ('vol', {sepc, volume}, sepc == ',');
elseif is_set (A.Issue) then
volume = wrap_msg ('issue', {sepc, A.Issue}, sepc == ',');
else
volume = ''
end
-- Função com o código abstraído
local B
A, B = citation0(config, args, A)
A.Volume = volume
config.CitationClass = classe
B.config = config
return textoFinal(A, B)
end
return p