mirror of https://github.com/mpastell/Weave.jl
85 lines
2.6 KiB
Julia
85 lines
2.6 KiB
Julia
abstract type PandocFormat <: WeaveFormat end
|
|
|
|
function render_figures(docformat::PandocFormat, chunk)
|
|
fignames = chunk.figures
|
|
length(fignames) > 0 || (return "")
|
|
|
|
caption = chunk.options[:fig_cap]
|
|
label = get(chunk.options, :label, nothing)
|
|
result = ""
|
|
figstring = ""
|
|
attribs = ""
|
|
width = chunk.options[:out_width]
|
|
height = chunk.options[:out_height]
|
|
|
|
# Build figure attibutes
|
|
attribs = String[]
|
|
isnothing(width) || push!(attribs, "width=$width")
|
|
isnothing(height) || push!(attribs, "height=$height")
|
|
isnothing(label) || push!(attribs, "#fig:$label")
|
|
attribs = isempty(attribs) ? "" : "{" * join(attribs, " ") * "}"
|
|
|
|
if !isnothing(caption)
|
|
result *= "![$caption]($(fignames[1]))$attribs\n"
|
|
for fig in fignames[2:end]
|
|
result *= "![]($fig)$attribs\n"
|
|
println("Warning, only the first figure gets a caption\n")
|
|
end
|
|
else
|
|
for fig in fignames
|
|
result *= "![]($fig)$attribs\\ \n\n"
|
|
end
|
|
end
|
|
return result
|
|
end
|
|
|
|
Base.@kwdef mutable struct Pandoc <: PandocFormat
|
|
description = "Pandoc Markdown"
|
|
extension = "md"
|
|
codestart = "~~~~{.julia}"
|
|
codeend = "~~~~~~~~~~~~~\n"
|
|
termstart = codestart
|
|
termend = codeend
|
|
outputstart = "~~~~"
|
|
outputend = "~~~~\n\n"
|
|
# Prefer png figures for markdown conversion, svg doesn't work with latex
|
|
mimetypes = ["image/png", "image/jpg", "image/svg+xml", "text/markdown", "text/plain"]
|
|
fig_ext = ".png"
|
|
out_width = nothing
|
|
out_height = nothing
|
|
fig_pos = nothing
|
|
fig_env = nothing
|
|
# specials
|
|
preserve_header = true
|
|
end
|
|
register_format!("pandoc", Pandoc())
|
|
|
|
const DEFAULT_PANDOC_OPTIONS = String[]
|
|
|
|
Base.@kwdef mutable struct Pandoc2PDF <: PandocFormat
|
|
description = "PDF via intermediate Pandoc Markdown"
|
|
extension = "md"
|
|
codestart = "~~~~{.julia}"
|
|
codeend = "~~~~~~~~~~~~~\n"
|
|
termstart = codestart
|
|
termend = codeend
|
|
outputstart = "~~~~"
|
|
outputend = "~~~~\n\n"
|
|
# Prefer png figures for markdown conversion, svg doesn't work with latex
|
|
mimetypes = ["image/png", "image/jpg", "image/svg+xml", "text/markdown", "text/plain"]
|
|
fig_ext = ".png"
|
|
out_width = nothing
|
|
out_height = nothing
|
|
fig_pos = nothing
|
|
fig_env = nothing
|
|
# specials
|
|
preserve_header = true
|
|
header_template = normpath(TEMPLATE_DIR, "pandoc2pdf_header.txt")
|
|
pandoc_options = DEFAULT_PANDOC_OPTIONS
|
|
end
|
|
register_format!("pandoc2pdf", Pandoc2PDF())
|
|
|
|
function set_format_options!(docformat::Pandoc2PDF; pandoc_options = DEFAULT_PANDOC_OPTIONS, _kwargs...)
|
|
docformat.pandoc_options = pandoc_options
|
|
end
|