LEFT TEXT
_library/index-include.md.cms
_library/sitemap-include.md.cms
If you need to render a format not already handled by pandoc, or you want to change how pandoc renders a format, you can create a custom writer using the Lua language. Pandoc has a built-in Lua interpreter, so you needn’t install any additional software to do this.
A custom writer is a Lua file that defines how to render the document. Two styles of custom writers are supported: classic custom writers must define rendering functions for each AST element. New style writers, available since pandoc 2.17.2, must define just a single function Writer
, which gets passed the document and writer options, and then does all rendering.
A writer using the classic style defines rendering functions for each element of the pandoc AST.
For example,
The best way to go about creating a classic custom writer is to modify the example that comes with pandoc. To get the example, you can do
pandoc --print-default-data-file sample.lua > sample.lua
[…]
If you need to parse a format not already handled by pandoc, you can create a custom reader using the Lua language. Pandoc has a built-in Lua interpreter, so you needn’t install any additional software to do this.
A custom reader is a Lua file that defines a function called Reader
, which takes two arguments:
{ columns = 62, standalone = true }
.The Reader
function should return a Pandoc
AST. This can be created using functions in the pandoc
module, which is automatically in scope. (Indeed, all of the utility functions that are available for Lua filters are available in custom readers, too.)
Each source item corresponds to a file or stream passed to pandoc containing its text and name. E.g., if a single file input.txt
is passed to pandoc, then the list of sources will contain just a single element s
, where s.name == 'input.txt'
and s.text
contains the file contents as a string.
[…]
Pandoc, the universal document converter, can serve as a nice intro into functional programming with Haskell. For many contributors, including the author of this guide, pandoc was their first real exposure to this language. Despite its impressive size of more than 60.000 lines of Haskell code (excluding the test suite), pandoc is still very approachable due to its modular architecture. It can serve as an interesting subject for learning.
This guide exists to navigate the large amount of sources, to lay-out a path that can be followed for learning, and to explain the underlying concepts.
A basic understanding of Haskell and of pandoc’s functionality is assumed.
Pandoc has a publicly accessible git repository on GitHub: https://github.com/jgm/pandoc. To get a local copy of the source:
git clone https://github.com/jgm/pandoc
The source for the main pandoc program is app/pandoc.hs
. The source for the pandoc library is in src/
, the source for the tests is in test/
, and the source for the benchmarks is in benchmark/
.
[…]