Usage
Install
To use it in Julia, first add it:
(v1.8)> add Pandoc
Convert Markdown to HTML
julia> using Pandoc
julia> run(Pandoc.Converter(input = raw""" # This is a header level 1 This is a paragraph """)) |> println
<h1 id="this-is-a-header-level-1">This is a header level 1</h1> <p>This is a paragraph</p>
Convert Markdown to Markdown
julia> using Pandoc
julia> run(Pandoc.Converter(input = raw""" # This is a header level 1 This is a paragraph """, to = "markdown")) |> println
# This is a header level 1 This is a paragraph
Convert Markdown to LaTeX
julia> using Pandoc
julia> run(Pandoc.Converter(input = raw""" # This is a header level 1 This is a paragraph """, to = "latex")) |> println
\section{This is a header level 1}\label{this-is-a-header-level-1} This is a paragraph
Convert Markdown to JSON
julia> using Pandoc
julia> run(Pandoc.Converter(input = raw""" # This is a header level 1 This is a paragraph """, to = "json")) |> println
{"pandoc-api-version":[1,23,1],"meta":{},"blocks":[{"t":"Header","c":[1,["this-is-a-header-level-1",[],[]],[{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"header"},{"t":"Space"},{"t":"Str","c":"level"},{"t":"Space"},{"t":"Str","c":"1"}]]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"paragraph"}]}]}
Convert Markdown to Pandoc.jl
's Document type
julia> using Pandoc
julia> Pandoc.Document(raw""" # header level 1 This is a paragraph ## header level 2 This is another paragraph """)
Pandoc.Document(Dict{Symbol, Any}(), v"1.23.1", Pandoc.MetaValueData(Pandoc.MetaValueType.MetaMap, Dict{String, Pandoc.MetaValue}()), Pandoc.Block[Pandoc.Header(1, Pandoc.Attr("header-level-1", String[], Tuple{String, String}[]), Pandoc.Inline[Pandoc.Str("header"), Pandoc.Space(), Pandoc.Str("level"), Pandoc.Space(), Pandoc.Str("1")]), Pandoc.Para(Pandoc.Inline[Pandoc.Str("This"), Pandoc.Space(), Pandoc.Str("is"), Pandoc.Space(), Pandoc.Str("a"), Pandoc.Space(), Pandoc.Str("paragraph")]), Pandoc.Header(2, Pandoc.Attr("header-level-2", String[], Tuple{String, String}[]), Pandoc.Inline[Pandoc.Str("header"), Pandoc.Space(), Pandoc.Str("level"), Pandoc.Space(), Pandoc.Str("2")]), Pandoc.Para(Pandoc.Inline[Pandoc.Str("This"), Pandoc.Space(), Pandoc.Str("is"), Pandoc.Space(), Pandoc.Str("another"), Pandoc.Space(), Pandoc.Str("paragraph")])])
Convert Markdown to Pandoc JSon
julia> using Pandoc
julia> Pandoc.JSON3.write(Pandoc.Document(raw""" # header level 1 This is a paragraph ## header level 2 This is another paragraph """))
"{\"pandoc-api-version\":[1,23],\"meta\":{},\"blocks\":[{\"t\":\"Header\",\"c\":[1,[\"header-level-1\",[],[]],[{\"t\":\"Str\",\"c\":\"header\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"level\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"1\"}]]},{\"t\":\"Para\",\"c\":[{\"t\":\"Str\",\"c\":\"This\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"is\"}," ⋯ 115 bytes ⋯ "\",[],[]],[{\"t\":\"Str\",\"c\":\"header\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"level\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"2\"}]]},{\"t\":\"Para\",\"c\":[{\"t\":\"Str\",\"c\":\"This\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"is\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"another\"},{\"t\":\"Space\"},{\"t\":\"Str\",\"c\":\"paragraph\"}]}]}"
Writing Pandoc Filters in Julia
Let's say you wanted to increment all the headers by 1 level.
julia> using Pandoc
julia> doc = Pandoc.Document(raw""" # header level 1 This is a paragraph. ## header level 2 This is another paragraph. """)
Pandoc.Document(Dict{Symbol, Any}(), v"1.23.1", Pandoc.MetaValueData(Pandoc.MetaValueType.MetaMap, Dict{String, Pandoc.MetaValue}()), Pandoc.Block[Pandoc.Header(1, Pandoc.Attr("header-level-1", String[], Tuple{String, String}[]), Pandoc.Inline[Pandoc.Str("header"), Pandoc.Space(), Pandoc.Str("level"), Pandoc.Space(), Pandoc.Str("1")]), Pandoc.Para(Pandoc.Inline[Pandoc.Str("This"), Pandoc.Space(), Pandoc.Str("is"), Pandoc.Space(), Pandoc.Str("a"), Pandoc.Space(), Pandoc.Str("paragraph.")]), Pandoc.Header(2, Pandoc.Attr("header-level-2", String[], Tuple{String, String}[]), Pandoc.Inline[Pandoc.Str("header"), Pandoc.Space(), Pandoc.Str("level"), Pandoc.Space(), Pandoc.Str("2")]), Pandoc.Para(Pandoc.Inline[Pandoc.Str("This"), Pandoc.Space(), Pandoc.Str("is"), Pandoc.Space(), Pandoc.Str("another"), Pandoc.Space(), Pandoc.Str("paragraph.")])])
julia> for block in doc.blocks if block isa Pandoc.Header block.level += 1 end end
julia> run(Pandoc.Converter(input = doc, from="json", to="markdown")) |> println
## header level 1 This is a paragraph. ### header level 2 This is another paragraph.
Using Pandoc.jl
with FilePaths
You can also load a file from disk:
julia> using Pandoc, FilePaths
julia> Pandoc.Document(p"./path/to/markdown_file.md")