65 lines
2.6 KiB
Lua
65 lines
2.6 KiB
Lua
--[[
|
||
authors-block – affiliations block extension for quarto
|
||
|
||
Copyright (c) 2023 Lorenz A. Kapsner
|
||
|
||
Permission to use, copy, modify, and/or distribute this software for any purpose
|
||
with or without fee is hereby granted, provided that the above copyright notice
|
||
and this permission notice appear in all copies.
|
||
|
||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
||
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||
THIS SOFTWARE.
|
||
]]
|
||
|
||
local List = require 'pandoc.List'
|
||
|
||
-- [import]
|
||
local from_utils = require "utils"
|
||
local normalize_affiliations = from_utils.normalize_affiliations
|
||
local normalize_authors = from_utils.normalize_authors
|
||
local normalize_latex_authors = from_utils.normalize_latex_authors
|
||
|
||
local from_authors = require "from_author_info_blocks"
|
||
local default_marks = from_authors.default_marks
|
||
local create_equal_contributors_block = from_authors.create_equal_contributors_block
|
||
local create_affiliations_blocks = from_authors.create_affiliations_blocks
|
||
local create_correspondence_blocks = from_authors.create_correspondence_blocks
|
||
local is_corresponding_author = from_authors.is_corresponding_author
|
||
local author_inline_generator = from_authors.author_inline_generator
|
||
local create_authors_inlines = from_authors.create_authors_inlines
|
||
-- [/import]
|
||
|
||
-- This is the main-part
|
||
function Pandoc(doc)
|
||
local meta = doc.meta
|
||
local body = List:new{}
|
||
|
||
local mark = function (mark_name) return default_marks[mark_name] end
|
||
|
||
body:extend(create_equal_contributors_block(meta.authors, mark) or {})
|
||
body:extend(create_affiliations_blocks(meta.affiliations) or {})
|
||
body:extend(create_correspondence_blocks(meta.authors, mark) or {})
|
||
body:extend(doc.blocks)
|
||
|
||
for _i, author in ipairs(meta.authors) do
|
||
author.test = is_corresponding_author(author)
|
||
end
|
||
|
||
meta.affiliations = normalize_affiliations(meta.affiliations)
|
||
meta.author = meta.authors:map(normalize_authors(meta.affiliations))
|
||
|
||
-- Overwrite authors with formatted values. We use a single, formatted
|
||
-- string for most formats. LaTeX output, however, looks nicer if we
|
||
-- provide a authors as a list.
|
||
meta.author = pandoc.MetaInlines(create_authors_inlines(meta.author, mark))
|
||
-- Institute info is now baked into the affiliations block.
|
||
meta.affiliations = nil
|
||
|
||
return pandoc.Pandoc(body, meta)
|
||
end
|