pandoc-types- Types for representing a structured document

MaintainerJohn MacFarlane <>
Safe HaskellNone



Functions for serializing the Pandoc AST to JSON and deserializing from JSON.

Example of use: The following script (capitalize.hs) reads reads a JSON representation of a Pandoc document from stdin, and writes a JSON representation of a Pandoc document to stdout. It changes all regular text in the document to uppercase, without affecting URLs, code, tags, etc. Run the script with

 pandoc -t json | runghc capitalize.hs | pandoc -f json

or (making capitalize.hs executable)

 pandoc --filter ./capitalize.hs
 #!/usr/bin/env runghc
 import Text.Pandoc.JSON
 import Data.Char (toUpper)

 main :: IO ()
 main = toJSONFilter capitalizeStrings

 capitalizeStrings :: Inline -> Inline
 capitalizeStrings (Str s) = Str $ map toUpper s
 capitalizeStrings x       = x



class ToJSONFilter a whereSource

toJSONFilter convert a function into a filter that reads pandoc's JSON serialized output from stdin, transforms it by walking the AST and applying the specified function, and serializes the result as JSON to stdout.

For a straight transformation, use a function of type a -> a or a -> IO a where a = Block, Inline,Pandoc, Meta, or MetaValue.

If your transformation needs to be sensitive to the script's arguments, use a function of type [String] -> a -> a (with a constrained as above). The [String] will be populated with the script's arguments.

An alternative is to use the type Maybe Format -> a -> a. This is appropriate when the first argument of the script (if present) will be the target format, and allows scripts to behave differently depending on the target format. The pandoc executable automatically provides the target format as argument when scripts are called using the `--filter` option.


toJSONFilter :: a -> IO ()Source


ToJSONFilter a => ToJSONFilter ([String] -> a) 
Data a => ToJSONFilter (a -> IO [a]) 
Data a => ToJSONFilter (a -> [a]) 
Walkable a Pandoc => ToJSONFilter (a -> IO a) 
Walkable a Pandoc => ToJSONFilter (a -> a) 
ToJSONFilter a => ToJSONFilter (Maybe Format -> a)