Pandoc can be extended with custom readers and writers written in Lua. (Pandoc includes a Lua interpreter, so Lua need not be installed separately.)
To use a custom reader or writer, simply specify the path to the Lua script in place of the input or output format. For example:
pandoc -t data/sample.lua
pandoc -f my_custom_markup_language.lua -t latex -s
If the script is not found relative to the working directory, it will
be sought in the custom
subdirectory of the user data
directory (see --data-dir
).
A custom reader is a Lua script that defines one function, Reader, which takes a string as input and returns a Pandoc AST. See the Lua filters documentation for documentation of the functions that are available for creating pandoc AST elements. For parsing, the lpeg parsing library is available by default. To see a sample custom reader:
pandoc --print-default-data-file creole.lua
If you want your custom reader to have access to reader options
(e.g. the tab stop setting), you give your Reader function a second
options
parameter.
A custom writer is a Lua script that defines a function that specifies how to render each element in a Pandoc AST. See the djot-writer.lua for a full-featured example.
Note that custom writers have no default template. If you want to use
--standalone
with a custom writer, you will need to specify
a template manually using --template
or add a new default
template with the name default.NAME_OF_CUSTOM_WRITER.lua
to
the templates
subdirectory of your user data directory (see
Templates).