pandoc-types-1.10: Types for representing a structured document

Portability | portable
Stability | alpha
Maintainer | John MacFarlane <jgm@berkeley.edu>
Safe Haskell | None

Text.Pandoc.Builder

Contents

- Document builders
- Inline list builders
- Block list builders

Description

Convenience functions for building pandoc documents programmatically.

Example of use:

     import Text.Pandoc.Builder

     myDoc :: Pandoc
     myDoc = setTitle "My title" $ doc $
       para "This is the first paragraph" <>
       para ("And " <> emph "another" <> ".") <>
       bulletList [ para "item one" <> para "continuation"
                  , plain ("item two and a " <>
                      link "/url" "go to url" "link")
                  ]

Isn't that nicer than writing the following?

     import Text.Pandoc.Definition

     myDoc :: Pandoc
     myDoc = Pandoc (Meta {docTitle = [Str "My",Space,Str "title"]
                          , docAuthors = []
                          , docDate = []})
      [Para [Str "This",Space,Str "is",Space,Str "the",Space,Str "first",
       Space,Str "paragraph"]
      ,Para [Str "And",Space,Emph [Str "another"],Str "."]
      ,BulletList [[Para [Str "item",Space,Str "one"]
                   ,Para [Str "continuation"]]
                  ,[Plain [Str "item",Space,Str "two",Space,Str "and", Space,
                     Str "a",Space,Link [Str "link"] ("/url","go to url")]]]]

And of course, you can use Haskell to define your own builders:

     import Text.Pandoc.Builder
     import Text.JSON
     import Control.Arrow ((***))
     import Data.Monoid (mempty)

     -- | Converts a JSON document into 'Blocks'.
     json :: String -> Blocks
     json x =
       case decode x of
            Ok y    -> jsValueToBlocks y
            Error y -> error y
        where jsValueToBlocks x =
               case x of
                JSNull         -> mempty
                JSBool x       -> plain $ text $ show x
                JSRational _ x -> plain $ text $ show x
                JSString x     -> plain $ text $ fromJSString x
                JSArray xs     -> bulletList $ map jsValueToBlocks xs
                JSObject x     -> definitionList $
                                   map (text *** (:[]) . jsValueToBlocks) $
                                   fromJSObject x

Synopsis

- module Text.Pandoc.Definition
- newtype Many a = Many {
  - unMany :: Seq a
  }
- type Inlines = Many Inline
- type Blocks = Many Block
- (<>) :: Monoid m => m -> m -> m
- singleton :: a -> Many a
- toList :: Many a -> [a]
- fromList :: [a] -> Many a
- isNull :: Many a -> Bool
- doc :: Blocks -> Pandoc
- setTitle :: Inlines -> Pandoc -> Pandoc
- setAuthors :: [Inlines] -> Pandoc -> Pandoc
- setDate :: Inlines -> Pandoc -> Pandoc
- text :: String -> Inlines
- str :: String -> Inlines
- emph :: Inlines -> Inlines
- strong :: Inlines -> Inlines
- strikeout :: Inlines -> Inlines
- superscript :: Inlines -> Inlines
- subscript :: Inlines -> Inlines
- smallcaps :: Inlines -> Inlines
- singleQuoted :: Inlines -> Inlines
- doubleQuoted :: Inlines -> Inlines
- cite :: [Citation] -> Inlines -> Inlines
- codeWith :: Attr -> String -> Inlines
- code :: String -> Inlines
- space :: Inlines
- linebreak :: Inlines
- math :: String -> Inlines
- displayMath :: String -> Inlines
- rawInline :: Format -> String -> Inlines
- link :: String -> String -> Inlines -> Inlines
- image :: String -> String -> Inlines -> Inlines
- note :: Blocks -> Inlines
- trimInlines :: Inlines -> Inlines
- para :: Inlines -> Blocks
- plain :: Inlines -> Blocks
- codeBlockWith :: Attr -> String -> Blocks
- codeBlock :: String -> Blocks
- rawBlock :: Format -> String -> Blocks
- blockQuote :: Blocks -> Blocks
- bulletList :: [Blocks] -> Blocks
- orderedListWith :: ListAttributes -> [Blocks] -> Blocks
- orderedList :: [Blocks] -> Blocks
- definitionList :: [(Inlines, [Blocks])] -> Blocks
- header :: Int -> Inlines -> Blocks
- headerWith :: Attr -> Int -> Inlines -> Blocks
- horizontalRule :: Blocks
- table :: Inlines -> [(Alignment, Double)] -> [Blocks] -> [[Blocks]] -> Blocks
- simpleTable :: [Blocks] -> [[Blocks]] -> Blocks

# Documentation

module Text.Pandoc.Definition

newtype Many a

Constructors

Many |
Fields unMany :: Seq a

Instances

Functor Many |
Typeable1 Many |
IsString Inlines |
Foldable Many |
Traversable Many |
Monoid Inlines |
Eq a => Eq (Many a) |
Data a => Data (Many a) |
Ord a => Ord (Many a) |
Read a => Read (Many a) |
Show a => Show (Many a) |
Generic (Many a) |
Monoid (Many Block) |

type Inlines = Many Inline

type Blocks = Many Block

(<>) :: Monoid m => m -> m -> m

An infix synonym for `mappend`.

singleton :: a -> Many a

toList :: Many a -> [a]

fromList :: [a] -> Many a

isNull :: Many a -> Bool

# Document builders

doc :: Blocks -> Pandoc

setTitle :: Inlines -> Pandoc -> Pandoc

setAuthors :: [Inlines] -> Pandoc -> Pandoc

setDate :: Inlines -> Pandoc -> Pandoc

# Inline list builders

text :: String -> Inlines

Convert a `String` to `Inlines`, treating interword spaces as `Space`s. If you want a `Str` with literal spaces, use `str`.

str :: String -> Inlines

emph :: Inlines -> Inlines

strong :: Inlines -> Inlines

strikeout :: Inlines -> Inlines

superscript :: Inlines -> Inlines

subscript :: Inlines -> Inlines

smallcaps :: Inlines -> Inlines

singleQuoted :: Inlines -> Inlines

doubleQuoted :: Inlines -> Inlines

cite :: [Citation] -> Inlines -> Inlines

codeWith :: Attr -> String -> Inlines

Inline code with attributes.

code :: String -> Inlines

Plain inline code.

space :: Inlines

linebreak :: Inlines

math :: String -> Inlines

Inline math

displayMath :: String -> Inlines

Display math

rawInline :: Format -> String -> Inlines

link

Arguments

:: String | URL
-> String | Title
-> Inlines | Label
-> Inlines |

image

Arguments

:: String | URL
-> String | Title
-> Inlines | Alt text
-> Inlines |

note :: Blocks -> Inlines

trimInlines :: Inlines -> Inlines

Trim leading and trailing Sp (spaces) from an Inlines.

# Block list builders

para :: Inlines -> Blocks

plain :: Inlines -> Blocks

codeBlockWith :: Attr -> String -> Blocks

A code block with attributes.

codeBlock :: String -> Blocks

A plain code block.

rawBlock :: Format -> String -> Blocks

blockQuote :: Blocks -> Blocks

bulletList :: [Blocks] -> Blocks

orderedListWith :: ListAttributes -> [Blocks] -> Blocks

Ordered list with attributes.

orderedList :: [Blocks] -> Blocks

Ordered list with default attributes.

definitionList :: [(Inlines, [Blocks])] -> Blocks

header

Arguments

:: Int | Level
-> Inlines |
-> Blocks |

headerWith :: Attr -> Int -> Inlines -> Blocks

horizontalRule :: Blocks

table

Arguments

:: Inlines | Caption
-> [(Alignment, Double)] | Column alignments and fractional widths
-> [Blocks] | Headers
-> [[Blocks]] | Rows
-> Blocks |

simpleTable

Arguments

:: [Blocks] | Headers
-> [[Blocks]] | Rows
-> Blocks |

A simple table without a caption.