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")