Browse Source

Add empty line between input and output code-blocks in markdown, fixes #101.

pull/102/head
Fredrik Ekre 6 years ago
parent
commit
56ec426ae5
  1. 22
      src/Literate.jl

22
src/Literate.jl

@ -426,8 +426,7 @@ function markdown(inputfile, outputdir; config::Dict=Dict(), kwargs...)
end end
write(iomd, codefence.second, '\n') write(iomd, codefence.second, '\n')
if config["execute"]::Bool if config["execute"]::Bool
res = execute_markdown(sb, join(chunk.lines, '\n'), outputdir) execute_markdown!(iomd, sb, join(chunk.lines, '\n'), outputdir)
write(iomd, res, '\n')
end end
end end
write(iomd, '\n') # add a newline between each chunk write(iomd, '\n') # add a newline between each chunk
@ -446,8 +445,9 @@ function markdown(inputfile, outputdir; config::Dict=Dict(), kwargs...)
return outputfile return outputfile
end end
function execute_markdown(sb::Module, block::String, outputdir) function execute_markdown!(io::IO, sb::Module, block::String, outputdir)
r, str = execute_block(sb, block) r, str = execute_block(sb, block)
plain_fence = "\n```\n" => "\n```" # issue #101: consecutive codefenced blocks need newline
if r !== nothing && !REPL.ends_with_semicolon(block) if r !== nothing && !REPL.ends_with_semicolon(block)
for (mime, ext) in [(MIME("image/png"), ".png"), (MIME("image/jpeg"), ".jpeg")] for (mime, ext) in [(MIME("image/png"), ".png"), (MIME("image/jpeg"), ".jpeg")]
if showable(mime, r) if showable(mime, r)
@ -455,18 +455,18 @@ function execute_markdown(sb::Module, block::String, outputdir)
open(joinpath(outputdir, file), "w") do io open(joinpath(outputdir, file), "w") do io
Base.invokelatest(show, io, mime, r) Base.invokelatest(show, io, mime, r)
end end
return "![]($(file))" write(io, "![](", file, ")\n")
return
end end
end end
io = IOBuffer() # fallback to text/plain
write(io, "```\n") write(io, plain_fence.first)
Base.invokelatest(show, io, "text/plain", r) Base.invokelatest(show, io, "text/plain", r)
write(io, "\n```\n") write(io, plain_fence.second, '\n')
return String(take!(io)) return
elseif !isempty(str) elseif !isempty(str)
return "```\n" * str * "\n```\n" write(io, plain_fence.first, str, plain_fence.second, '\n')
else return
return ""
end end
end end

Loading…
Cancel
Save