From a7723529f35fb8cdef1833148feb3724e3084278 Mon Sep 17 00:00:00 2001 From: Simon Christ Date: Tue, 8 Aug 2023 14:25:53 +0200 Subject: [PATCH] switch to CommonMark parser --- Project.toml | 2 +- src/Literate.jl | 48 ++++++++++++++++++++++-------------------------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Project.toml b/Project.toml index cd71aa1..47a89a3 100644 --- a/Project.toml +++ b/Project.toml @@ -4,9 +4,9 @@ version = "2.14.0" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +CommonMark = "a80b9123-70ca-4bc0-993e-6e3bcb318db6" IOCapture = "b5f81e59-6552-4d32-b1f0-c071b021bf89" JSON = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a" REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [compat] diff --git a/src/Literate.jl b/src/Literate.jl index b97f11c..2b0dc5b 100644 --- a/src/Literate.jl +++ b/src/Literate.jl @@ -6,7 +6,7 @@ https://fredrikekre.github.io/Literate.jl/ for documentation. """ module Literate -import JSON, REPL, IOCapture, Markdown +import JSON, REPL, IOCapture, CommonMark include("IJulia.jl") import .IJulia @@ -550,44 +550,39 @@ function containsAdmonition(chunk) end function chunkToMD(chunk) + parser = CommonMark.Parser() + CommonMark.enable!(parser, CommonMark.AdmonitionRule()) buffer = IOBuffer() for line in chunk.lines - write(buffer, line.first * line.second, "\n\n") + write(buffer, line.first * line.second, '\n') end str = String(take!(buffer)) - return Markdown.parse(str) + return parser(str) end function rewriteContent!(mdContent) - for (i, item) in enumerate(mdContent.content) - if isa(item, Markdown.Admonition) - mdContent.content[i] = if any(x -> x isa Markdown.Admonition, item.content) - admonition_to_fenced_div(rewriteContent!(item)) + for (node, entering) in mdContent + if isa(node.t, CommonMark.Admonition) + admonition = node.t + node.t = CommonMark.Paragraph() + if admonition.category == "yaml" + node.first_child.t = CommonMark.Text() + node.first_child.nxt.t = CommonMark.Paragraph() + CommonMark.insert_after(node.first_child.nxt.last_child, CommonMark.text("\n---\n")) + CommonMark.insert_before(node.first_child.nxt, CommonMark.text("---\n")) else - admonition_to_fenced_div(item) + CommonMark.insert_before(node, CommonMark.text(""":::::: $(admonition.category) + + ## $(admonition.title) + + """)) + CommonMark.insert_after(node, CommonMark.text("::::::\n\n")) end end end mdContent end - -#Functions needed for addition transformation into Carpentries style. Markdown style into pandoc fenced divs - -function admonition_to_fenced_div(admonition) - category = admonition.category - if category == "yaml" - single_paragraph = Markdown.Paragraph(vcat("---\n", - reduce(vcat, map(Base.Fix2(getproperty, :content), Iterators.filter(Base.Fix2(!isa, Markdown.HorizontalRule), admonition.content))) .* '\n', - "---\n" - )) - return single_paragraph - end - title = admonition.title - vcat(Markdown.Paragraph(":::::::: $category \n"), - isempty(title) ? [] : Markdown.Header{2}(title), admonition.content, Markdown.Paragraph("::::::::\n\n")) -end - #_______________________________________________________________________________________ @@ -631,8 +626,9 @@ function write_md_chunks!(iomd, chunks, outputdir, config) if flavor isa CarpentriesFlavor if containsAdmonition(chunk) md_chunk = chunkToMD(chunk) + # CommonMark.term(stdout, md_chunk) rewriteContent!(md_chunk) - write(iomd, string(Markdown.MD(md_chunk))) + CommonMark.markdown(iomd, md_chunk) continue end end