| Copyright | Copyright (C) 2010-2019 John MacFarlane |
|---|---|
| License | BSD3 |
| Maintainer | John MacFarlane <jgm@berkeley.edu> |
| Stability | alpha |
| Portability | portable |
| Safe Haskell | None |
| Language | Haskell98 |
Text.Pandoc.Builder
Description
Convenience functions for building pandoc documents programmatically.
Example of use (with OverloadedStrings pragma):
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
import Data.Map (fromList)
myDoc :: Pandoc
myDoc = Pandoc (Meta {unMeta = fromList [("title",
MetaInlines [Str "My",Space,Str "title"])]})
[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 nullAttr [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 xSynopsis
- module Text.Pandoc.Definition
- newtype Many a = Many {
- unMany :: Seq a
- type Inlines = Many Inline
- type Blocks = Many Block
- (<>) :: Semigroup a => a -> a -> a
- singleton :: a -> Many a
- toList :: Many a -> [a]
- fromList :: [a] -> Many a
- isNull :: Many a -> Bool
- doc :: Blocks -> Pandoc
- class ToMetaValue a where
- toMetaValue :: a -> MetaValue
- class HasMeta a where
- setMeta :: ToMetaValue b => Text -> b -> a -> a
- deleteMeta :: Text -> a -> a
- setTitle :: Inlines -> Pandoc -> Pandoc
- setAuthors :: [Inlines] -> Pandoc -> Pandoc
- setDate :: Inlines -> Pandoc -> Pandoc
- text :: Text -> Inlines
- str :: Text -> 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 -> Text -> Inlines
- code :: Text -> Inlines
- space :: Inlines
- softbreak :: Inlines
- linebreak :: Inlines
- math :: Text -> Inlines
- displayMath :: Text -> Inlines
- rawInline :: Text -> Text -> Inlines
- link :: Text -> Text -> Inlines -> Inlines
- linkWith :: Attr -> Text -> Text -> Inlines -> Inlines
- image :: Text -> Text -> Inlines -> Inlines
- imageWith :: Attr -> Text -> Text -> Inlines -> Inlines
- note :: Blocks -> Inlines
- spanWith :: Attr -> Inlines -> Inlines
- trimInlines :: Inlines -> Inlines
- para :: Inlines -> Blocks
- plain :: Inlines -> Blocks
- lineBlock :: [Inlines] -> Blocks
- codeBlockWith :: Attr -> Text -> Blocks
- codeBlock :: Text -> Blocks
- rawBlock :: Text -> Text -> 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
- divWith :: Attr -> Blocks -> Blocks
Documentation
module Text.Pandoc.Definition
Instances
| Functor Many # | |
| IsString Inlines # | |
Defined in Text.Pandoc.Builder Methods fromString :: String -> Inlines | |
| Foldable Many # | |
Defined in Text.Pandoc.Builder Methods fold :: Monoid m => Many m -> m foldMap :: Monoid m => (a -> m) -> Many a -> m foldMap' :: Monoid m => (a -> m) -> Many a -> m foldr :: (a -> b -> b) -> b -> Many a -> b foldr' :: (a -> b -> b) -> b -> Many a -> b foldl :: (b -> a -> b) -> b -> Many a -> b foldl' :: (b -> a -> b) -> b -> Many a -> b foldr1 :: (a -> a -> a) -> Many a -> a foldl1 :: (a -> a -> a) -> Many a -> a elem :: Eq a => a -> Many a -> Bool maximum :: Ord a => Many a -> a | |
| Traversable Many # | |
| Semigroup Blocks # | |
| Semigroup Inlines # | |
| Monoid Blocks # | |
| Monoid Inlines # | |
| Arbitrary Blocks # | |
| Arbitrary Inlines # | |
| ToMetaValue Blocks # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Blocks -> MetaValue # | |
| ToMetaValue Inlines # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Inlines -> MetaValue # | |
| ToMetaValue Blocks # | |
Defined in Text.Pandoc.Legacy.Builder Methods toMetaValue :: Blocks -> MetaValue # | |
| ToMetaValue Inlines # | |
Defined in Text.Pandoc.Legacy.Builder Methods toMetaValue :: Inlines -> MetaValue # | |
| Eq a => Eq (Many a) # | |
| Data a => Data (Many a) # | |
Defined in Text.Pandoc.Builder Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Many a -> c (Many a) gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Many a) dataTypeOf :: Many a -> DataType dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Many a)) dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Many a)) gmapT :: (forall b. Data b => b -> b) -> Many a -> Many a gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Many a -> r gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Many a -> r gmapQ :: (forall d. Data d => d -> u) -> Many a -> [u] gmapQi :: Int -> (forall d. Data d => d -> u) -> Many a -> u gmapM :: Monad m => (forall d. Data d => d -> m d) -> Many a -> m (Many a) gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Many a -> m (Many a) gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Many a -> m (Many a) | |
| Ord a => Ord (Many a) # | |
| Read a => Read (Many a) # | |
| Show a => Show (Many a) # | |
| Generic (Many a) # | |
| type Rep (Many a) # | |
Defined in Text.Pandoc.Builder type Rep (Many a) = D1 ('MetaData "Many" "Text.Pandoc.Builder" "pandoc-types-1.20-DTIttl5ns2z3CpH6MqcSJ" 'True) (C1 ('MetaCons "Many" 'PrefixI 'True) (S1 ('MetaSel ('Just "unMany") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Seq a)))) | |
Document builders
class ToMetaValue a where #
Methods
toMetaValue :: a -> MetaValue #
Instances
| ToMetaValue Bool # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Bool -> MetaValue # | |
| ToMetaValue String # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: String -> MetaValue # | |
| ToMetaValue Text # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Text -> MetaValue # | |
| ToMetaValue MetaValue # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: MetaValue -> MetaValue # | |
| ToMetaValue Blocks # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Blocks -> MetaValue # | |
| ToMetaValue Inlines # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Inlines -> MetaValue # | |
| ToMetaValue a => ToMetaValue [a] # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: [a] -> MetaValue # | |
| ToMetaValue a => ToMetaValue (Map String a) # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Map String a -> MetaValue # | |
| ToMetaValue a => ToMetaValue (Map Text a) # | |
Defined in Text.Pandoc.Builder Methods toMetaValue :: Map Text a -> MetaValue # | |
Instances
| HasMeta Meta # | |
Defined in Text.Pandoc.Builder | |
| HasMeta Pandoc # | |
Defined in Text.Pandoc.Builder Methods setMeta :: ToMetaValue b => Text -> b -> Pandoc -> Pandoc # deleteMeta :: Text -> Pandoc -> Pandoc # | |
setAuthors :: [Inlines] -> Pandoc -> Pandoc #
Inline list builders
superscript :: Inlines -> Inlines #
singleQuoted :: Inlines -> Inlines #
doubleQuoted :: Inlines -> Inlines #
displayMath :: Text -> Inlines #
Display math
trimInlines :: Inlines -> Inlines #
Trim leading and trailing spaces and softbreaks from an Inlines.
Block list builders
codeBlockWith :: Attr -> Text -> Blocks #
A code block with attributes.
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 #
headerWith :: Attr -> Int -> Inlines -> Blocks #
Arguments
| :: Inlines | Caption |
| -> [(Alignment, Double)] | Column alignments and fractional widths |
| -> [Blocks] | Headers |
| -> [[Blocks]] | Rows |
| -> Blocks |
Table builder. Rows and headers will be padded or truncated to the size of
cellspecs
A simple table without a caption.