add extensions
This commit is contained in:
6
_extensions/pandoc-ext/author-info-blocks/_extension.yaml
Executable file
6
_extensions/pandoc-ext/author-info-blocks/_extension.yaml
Executable file
@@ -0,0 +1,6 @@
|
||||
name: author-info-blocks
|
||||
author: Albert Krewinkel
|
||||
version: 1.0.0
|
||||
contributes:
|
||||
filters:
|
||||
- author-info-blocks.lua
|
||||
179
_extensions/pandoc-ext/author-info-blocks/author-info-blocks.lua
Executable file
179
_extensions/pandoc-ext/author-info-blocks/author-info-blocks.lua
Executable file
@@ -0,0 +1,179 @@
|
||||
local List = require("pandoc.List")
|
||||
local utils = require("pandoc.utils")
|
||||
local stringify = utils.stringify
|
||||
local byAuthor
|
||||
local byAffiliation
|
||||
local Authors = {}
|
||||
local Affiliations = {}
|
||||
|
||||
local authorHoriz
|
||||
|
||||
local Corresponding = nil
|
||||
local function make_correspondance(name, email)
|
||||
correspondance = List:new({
|
||||
pandoc.Str("* Corresponding Author: "),
|
||||
pandoc.Str(name),
|
||||
pandoc.Str(" ("),
|
||||
pandoc.Link(email, "mailto:" .. email),
|
||||
pandoc.Str(")"),
|
||||
})
|
||||
Corresponding = List:new({ pandoc.Para(correspondance) })
|
||||
end
|
||||
|
||||
local equalCont
|
||||
local function make_equal_contributor()
|
||||
eq_statement = pandoc.Str("† These authors contributed equally to this work.")
|
||||
equalCont = List:new({ pandoc.Para(eq_statement) })
|
||||
end
|
||||
|
||||
local function create_author_list(byAuthor)
|
||||
local authors = {}
|
||||
for i, author in ipairs(byAuthor) do
|
||||
local sups = {}
|
||||
|
||||
for j, aff in ipairs(author.affiliations) do
|
||||
table.insert(sups, aff.number)
|
||||
end
|
||||
sups_str = table.concat(sups, ",")
|
||||
|
||||
local name = stringify(author.name.literal)
|
||||
|
||||
if author.attributes ~= nil then
|
||||
if author.attributes["equal-contributor"] ~= nil and author.attributes["equal-contributor"] then
|
||||
sups_str = sups_str .. ",†"
|
||||
make_equal_contributor()
|
||||
end
|
||||
if author.attributes.corresponding ~= nil and author.attributes.corresponding then
|
||||
local email = stringify(author.email)
|
||||
sups_str = sups_str .. ",*"
|
||||
make_correspondance(name, email)
|
||||
end
|
||||
end
|
||||
|
||||
local authorEntry = List:new({
|
||||
pandoc.Str(name),
|
||||
pandoc.Superscript(pandoc.Str(sups_str)),
|
||||
})
|
||||
|
||||
if authorHoriz and i < #byAuthor then
|
||||
authorEntry:extend({ pandoc.Str(", ") })
|
||||
end
|
||||
|
||||
table.insert(authors, pandoc.Span(authorEntry))
|
||||
end
|
||||
|
||||
if authorHoriz then
|
||||
Authors = { pandoc.Para(authors) }
|
||||
else
|
||||
Authors = authors
|
||||
end
|
||||
end
|
||||
|
||||
local function create_affiliation_list(byAffiliation)
|
||||
for i, aff in ipairs(byAffiliation) do
|
||||
local full_aff = pandoc.List({})
|
||||
if aff.name then
|
||||
full_aff:insert(stringify(aff.name))
|
||||
end
|
||||
|
||||
if aff.address then
|
||||
full_aff:insert(stringify(aff.address))
|
||||
end
|
||||
|
||||
if aff.city then
|
||||
full_aff:insert(stringify(aff.city))
|
||||
end
|
||||
|
||||
if aff["postal-code"] then
|
||||
full_aff:insert(stringify(aff["postal-code"]))
|
||||
end
|
||||
|
||||
if aff.region then
|
||||
full_aff:insert(stringify(aff.region))
|
||||
end
|
||||
|
||||
if aff.country then
|
||||
full_aff:insert(stringify(aff.country))
|
||||
end
|
||||
|
||||
local entry = table.concat(full_aff, ", ")
|
||||
entry = aff.number .. ". " .. entry .. "."
|
||||
table.insert(Affiliations, pandoc.Para(pandoc.Str(entry)))
|
||||
end
|
||||
end
|
||||
|
||||
local Abstract = nil
|
||||
local function create_abstract(ab)
|
||||
Abstract = {}
|
||||
table.insert(Abstract, pandoc.Header(1, "Abstract"))
|
||||
table.insert(Abstract, pandoc.Para(ab))
|
||||
end
|
||||
|
||||
local Keywords = nil
|
||||
local function create_keyword_list(kw)
|
||||
Keywords = {}
|
||||
-- quarto.log.output(kw)
|
||||
local kws = pandoc.List({})
|
||||
for i, keyword in ipairs(kw) do
|
||||
kws:insert(stringify(keyword))
|
||||
end
|
||||
local kwentry = table.concat(kws, "; ")
|
||||
kwentry = "Keywords: " .. kwentry .. "."
|
||||
table.insert(Keywords, pandoc.Para(pandoc.Str(kwentry)))
|
||||
end
|
||||
|
||||
local function remove_author_meta(meta)
|
||||
meta.author = nil
|
||||
meta.authors = nil
|
||||
meta.affiliations = nil
|
||||
meta["by-author"] = nil
|
||||
meta["by-affiliation"] = nil
|
||||
meta["abstract"] = nil
|
||||
return meta
|
||||
end
|
||||
|
||||
return {
|
||||
{
|
||||
Meta = function(meta)
|
||||
byAuthor = meta["by-author"]
|
||||
byAffiliation = meta["by-affiliation"]
|
||||
if meta["author-horizontal"] ~= nil then
|
||||
authorHoriz = meta["author-horizontal"]
|
||||
else
|
||||
authorHoriz = true
|
||||
end
|
||||
create_author_list(byAuthor)
|
||||
create_affiliation_list(byAffiliation)
|
||||
if meta["abstract"] ~= nil then
|
||||
create_abstract(meta["abstract"])
|
||||
end
|
||||
if meta["keywords"] ~= nil then
|
||||
create_keyword_list(meta["keywords"])
|
||||
end
|
||||
return meta
|
||||
end,
|
||||
},
|
||||
{
|
||||
Pandoc = function(doc)
|
||||
local meta = doc.meta
|
||||
local body = List:new({})
|
||||
body:extend(Authors)
|
||||
body:extend(Affiliations)
|
||||
if equalCont ~= nil then
|
||||
body:extend(equalCont)
|
||||
end
|
||||
if Corresponding ~= nil then
|
||||
body:extend(Corresponding)
|
||||
end
|
||||
if Abstract then
|
||||
body:extend(Abstract)
|
||||
end
|
||||
if Keywords then
|
||||
body:extend(Keywords)
|
||||
end
|
||||
body:extend(doc.blocks)
|
||||
meta = remove_author_meta(meta)
|
||||
return pandoc.Pandoc(body, meta)
|
||||
end,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user