Browse Source

switch to CommonMark parser

pull/220/head
Simon Christ 2 years ago
parent
commit
a7723529f3
  1. 2
      Project.toml
  2. 48
      src/Literate.jl

2
Project.toml

@ -4,9 +4,9 @@ version = "2.14.0" @@ -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]

48
src/Literate.jl

@ -6,7 +6,7 @@ https://fredrikekre.github.io/Literate.jl/ for documentation. @@ -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) @@ -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) @@ -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

Loading…
Cancel
Save