Módulo:Citation
De EntreWiki
A documentação para este módulo pode ser criada em Módulo:Citation/doc
local c = require('Módulo:Citação/CS1') --[[--------------------------< c . c i t a t i o n >------------------------------------ Este é o método principal da predefinição {{citation}}. ]] c.citation = function(frame) local config, args, A = tratarArgumentos(frame) config.CitationClass = '' config.usaVolume = true config.usaIssue = true config.TituloDispensavel = true local B local classe = 'citation' A.Mode = A.Mode:lower() if not is_set(A.Mode) or (A.Mode ~= 'mla' and A.Mode ~= 'cs1') then A.Mode = 'cs2' end local coins_chapter local coins_title if not is_set(A.Periodical) then config.usaContributor = true if not is_set(A.Title) and is_set(A.Chapter) then coins_chapter = A.Chapter coins_title = A.Title A.Title = A.Chapter A.Chapter = "" 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 elseif not is_set (A.Encyclopedia) then 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 else if is_set(A.Title) or is_set (A.ScriptTitle) then if not is_set(A.Chapter) then -- |encyclopedia e |title definidos, mapeia |title para |article e |encyclopedia para |title A.Chapter = A.Title A.ScriptChapter = A.ScriptTitle A.TransChapter = A.TransTitle A.ChapterURL = A.URL if not is_set (A.ChapterURL) and is_set (A.TitleLink) then A.Chapter= '[[' .. A.TitleLink .. '|' .. A.Chapter .. ']]' end A.Title = A.Periodical A.ChapterFormat = A.Format A.Periodical = '' -- redundante A.TransTitle = '' A.URL = '' A.Format = '' A.TitleLink = '' A.ScriptTitle = '' elseif is_set(A.Title) then coins_chapter = A.Title -- remapeia coins_title = A.Periodical end else -- |title não definido A.Title = A.Periodical -- mapeia |encyclopedia (alias) ao título A.Periodical = '' -- redundante end end coins_chapter = make_coins_title (coins_chapter or A.Chapter, A.ScriptChapter) coins_title = make_coins_title (coins_title or A.Title, A.ScriptTitle) local sepc = set_style (A.Mode:lower()) local use_lowercase = sepc == ',' local page, pages = '', '' if in_array(A:ORIGIN('Periodical'), {'periódico', 'periodico', 'jornal', 'journal'}) then -- 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 else page, pages = format_pages (A.Page, A.Pages, sepc, A.NoPP, use_lowercase) end else page, pages = format_pages (A.Page, A.Pages, sepc, A.NoPP, use_lowercase) end local volume = A.Volume if in_array(A:ORIGIN('Periodical'), {'revista', 'magazine'}) then if is_set (volume) and is_set (A.Issue) then volume = wrap_msg ('vol-no', {sepc, volume, A.Issue}, use_lowercase); elseif is_set (volume) then volume = wrap_msg ('vol', {sepc, volume}, use_lowercase); elseif is_set (A.Issue) then volume = wrap_msg ('issue', {sepc, A.Issue}, use_lowercase); else volume = '' end else volume = format_volume_issue (A.Volume, A.Issue, sepc) end local isbn, argIsbn = {ISBN = select_one(args, cfg.id_handlers.ISBN.parameters , 'redundant_parameters')} local issn, argIssn = {ISSN = select_one(args, cfg.id_handlers.ISSN.parameters , 'redundant_parameters')} coins_isbn = isbn.ISBN coins_issn = issn.ISSN isbn = build_id_list(isbn, {IdAccessLevels = extract_id_access_levels({argIsbn} , isbn), IgnoreISBN = A.IgnoreISBN})[1] issn = build_id_list(issn, {IdAccessLevels = extract_id_access_levels({argIssn} , issn)})[1] cfg.id_handlers.ISBN.parameters = {} cfg.id_handlers.ISSN.parameters = {} -- Função com o código abstraído A, B = citation0( config, args, A) if is_set(isbn) then A.Title = A.Title .. sepc .. ' ' .. isbn B.coins_table.ID_list.ISBN = coins_isbn end if is_set(issn) then A.Periodical = A.Periodical .. sepc .. ' ' .. issn B.coins_table.ID_list.ISSN = coins_issn end B.coins_table.Chapter = coins_chapter B.coins_table.Title = coins_title A.Page = page A.Pages = pages A.Volume = volume; if is_set(A.Periodical) then 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 else if is_set (B.Contributors) then -- quando citado prefácio, introdução, etc. -- autor e outros virão depois disto e antes de tcommon2 B.tcommon = safe_join( {A.Title, A.TitleNote}, B.sepc ) if 'mla' == A.Mode then B.tcommon2 = safe_join( {A.Periodical, A.Format, A.TitleType, A.Edition, B.Publisher, A.Series, A.Language, A.Volume, A.Agency}, B.sepc ); else B.tcommon2 = safe_join( {A.Periodical, A.Format, A.TitleType, A.Edition, B.Publisher, A.Series, A.Language, A.Volume, A.Others, A.Agency}, B.sepc ); end elseif 'mla' == A.Mode then B.tcommon = safe_join( {A.TitleNote, A.Periodical, A.Format, A.TitleType, A.Series, A.Language, A.Volume, 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 end config.CitationClass = classe B.config = config return textoFinal(A, B) end return c