75 lines
1.6 KiB
Lua
75 lines
1.6 KiB
Lua
function has_class(el, class)
|
|
if el.attr == nil then
|
|
return nil
|
|
end
|
|
for i,v in ipairs(el.attr.classes) do
|
|
if v == class then
|
|
return true
|
|
end
|
|
end
|
|
return false
|
|
end
|
|
|
|
function find_node(el, predicate)
|
|
if el.content == nil then
|
|
return nil
|
|
end
|
|
for i, v in ipairs(el.content) do
|
|
if predicate(v) then
|
|
return v
|
|
end
|
|
if v.content ~= nil then
|
|
local r = find_node(v, predicate)
|
|
if r ~= nil then
|
|
return r
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function get_block_with_class(el, class)
|
|
return find_node(el, function(el)
|
|
return has_class(el, class)
|
|
end)
|
|
end
|
|
|
|
function get_image(el)
|
|
return find_node(el, function (v)
|
|
return v.t == "Image"
|
|
end)
|
|
end
|
|
|
|
function attribute(el, name, default)
|
|
for k,v in pairs(el.attr.attributes) do
|
|
if k == name then
|
|
return v
|
|
end
|
|
end
|
|
return default
|
|
end
|
|
|
|
return {
|
|
{
|
|
Image = function(image)
|
|
local description = attribute(image, "fig-alt", nil)
|
|
if description == nil then
|
|
return image
|
|
end
|
|
description = pandoc.write(pandoc.Pandoc({description}), "latex")
|
|
if quarto.doc.is_format("latex") then
|
|
local caption = pandoc.write(pandoc.Pandoc({image.caption}), "latex")
|
|
local blockStr = "\\begin{figure}\n" ..
|
|
"{\\centering \\includegraphics{" .. image.src .. "}}\n" ..
|
|
"\\caption{" .. caption .. "}\n\\Description{"
|
|
.. description .. "}\n\\end{figure}\n"
|
|
return {pandoc.RawInline("latex", blockStr)}
|
|
else
|
|
image.attr.attributes["alt"] = description
|
|
image.attr.attributes["fig-alt"] = nil
|
|
return image
|
|
end
|
|
end
|
|
}
|
|
}
|