pandoc-types-1.23.0.1: Types for representing a structured document
CopyrightCopyright (C) 2013-2023 John MacFarlane
LicenseBSD3
MaintainerJohn MacFarlane <jgm@berkeley.edu>
Stabilityalpha
Portabilityportable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Text.Pandoc.JSON

Description

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
Synopsis

Documentation

class ToJSONFilter m a where Source #

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.

Methods

toJSONFilter :: a -> m () Source #

Instances

Instances details
Walkable a Pandoc => ToJSONFilter IO (a -> a) Source # 
Instance details

Defined in Text.Pandoc.JSON

Methods

toJSONFilter :: (a -> a) -> IO () Source #

(ToJSONFilter m a, MonadIO m) => ToJSONFilter m (Maybe Format -> a) Source # 
Instance details

Defined in Text.Pandoc.JSON

Methods

toJSONFilter :: (Maybe Format -> a) -> m () Source #

(ToJSONFilter m a, MonadIO m) => ToJSONFilter m ([String] -> a) Source # 
Instance details

Defined in Text.Pandoc.JSON

Methods

toJSONFilter :: ([String] -> a) -> m () Source #

(Walkable [a] Pandoc, MonadIO m) => ToJSONFilter m (a -> m [a]) Source # 
Instance details

Defined in Text.Pandoc.JSON

Methods

toJSONFilter :: (a -> m [a]) -> m () Source #

(Walkable a Pandoc, MonadIO m) => ToJSONFilter m (a -> m a) Source # 
Instance details

Defined in Text.Pandoc.JSON

Methods

toJSONFilter :: (a -> m a) -> m () Source #