Browse Source

support nested blocks via recursion

pull/220/head
Simon Christ 2 years ago
parent
commit
6b53729da2
  1. 96
      src/Literate.jl

96
src/Literate.jl

@ -572,91 +572,60 @@ function processNonAdmonitions(item, io)
write(io, string(Markdown.MD(item))) write(io, string(Markdown.MD(item)))
end end
function writeContent(mdContent, io) function rewriteContent!(mdContent)
for item in mdContent.content for (i, item) in enumerate(mdContent.content)
if isa(item, Markdown.Admonition) if isa(item, Markdown.Admonition)
CarpentriesAdmonition(item, io) mdContent.content[i] = if any(x->x isa Markdown.Admonition, item.content)
CarpentriesAdmonition(rewriteContent!(item))
else else
processNonAdmonitions(item, io) CarpentriesAdmonition(item)
end end
# write(io, '\n')
end end
end
mdContent
end end
#Functions needed for addition transformation into Carpentries style. Markdown style into pandoc fenced divs #Functions needed for addition transformation into Carpentries style. Markdown style into pandoc fenced divs
function CarpentriesCallout(admonition, io) function CarpentriesCallout(admonition)
for line in admonition vcat(Markdown.Paragraph(":::::::: callout\n"), admonition.content, Markdown.Paragraph("::::::::\n\n"))
if startswith(line, "!!!")
write(io, ":::::::: callout", '\n')
else
if line != ""
write(io, line, '\n')
end
end
end
write(io, "::::::::", "\n\n")
end end
function CarpentriesTestamonial(admonition, io) function CarpentriesTestamonial(admonition)
for line in admonition vcat(Markdown.Paragraph(":::::::: testamonial\n"), admonition.content, Markdown.Paragraph("::::::::\n\n"))
if startswith(strip(line), "!!!")
write(io, ":::::::: testamonial", '\n')
else
write(io, line, '\n')
end
end
write(io, "::::::::", "\n\n")
end end
function CarpentriesChallenge(admonition, io) function CarpentriesSolution(admonition)
for line in admonition vcat(Markdown.Paragraph(":::::::: solution\n"), admonition.content, Markdown.Paragraph("::::::::\n\n"))
if startswith(strip(line), r"\S+\s[smf][cr]")
write(io, ":::::::: challenge", '\n')
elseif startswith(strip(line), "!!! solution")
write(io, ":::::::: solution", '\n')
else
write(io, line, '\n')
end
end
write(io, "::::::::", "\n\n", "::::::::", "\n\n")
end end
function CarpentriesWarning(admonition, io) function CarpentriesChallenge(admonition)
for line in admonition vcat(Markdown.Paragraph(":::::::: challenge\n"), admonition.content, Markdown.Paragraph("::::::::\n\n"))
if startswith(strip(line), "!!!")
write(io, ":::::::: warning", '\n')
else
write(io, line, '\n')
end
end
write(io, "::::::::", "\n\n")
end end
function CarpentriesYAML(admonition, io) function CarpentriesWarning(admonition)
for line in admonition vcat(Markdown.Paragraph(":::::::: warning\n"), admonition.content, Markdown.Paragraph("::::::::\n\n"))
if startswith(line, "!!!")
continue
else
write(io, line, '\n')
end
end
end end
function CarpentriesAdmonition(admonition, io) function CarpentriesYAML(admonition)
admonition.content
end
function CarpentriesAdmonition(admonition)
category = admonition.category category = admonition.category
admonition = split(string(Markdown.MD(admonition)), '\n') return if category in ("challenge", "sc", "mc", "freecode")
if category in ("sc", "mc", "freecode") CarpentriesChallenge(admonition)
CarpentriesChallenge(admonition, io) elseif category == "solution"
CarpentriesSolution(admonition)
elseif category == "tip" elseif category == "tip"
CarpentriesTestamonial(admonition, io) CarpentriesTestamonial(admonition)
elseif category == "warning" elseif category == "warning"
CarpentriesWarning(admonition, io) CarpentriesWarning(admonition)
elseif category in ("info", "note") elseif category in ("info", "note")
CarpentriesCallout(admonition, io) CarpentriesCallout(admonition)
elseif category == "carp" elseif category == "carp"
CarpentriesYAML(admonition, io) CarpentriesYAML(admonition)
end end
end end
#_______________________________________________________________________________________ #_______________________________________________________________________________________
@ -701,7 +670,10 @@ function write_md_chunks!(iomd, chunks, outputdir, config)
#______________________________________________________________________________________________________________ #______________________________________________________________________________________________________________
if flavor isa CarpentriesFlavor if flavor isa CarpentriesFlavor
if containsAdmonition(chunk) if containsAdmonition(chunk)
writeContent(chunkToMD(chunk), iomd) md_chunk = chunkToMD(chunk)
rewriteContent!(md_chunk)
write(iomd, string(Markdown.MD(md_chunk)))
continue
end end
end end
if containsYAML(chunk) # This part is the only change. It (should) delete the YAML Admo for non Carpentries MD. if containsYAML(chunk) # This part is the only change. It (should) delete the YAML Admo for non Carpentries MD.

Loading…
Cancel
Save