Text.Pandoc.Chunks

pandoc-3.7.0.2: Conversion between markup formats

Copyright | Copyright (C) 2022-2024 John MacFarlane
License | GNU GPL, version 2 or above
Maintainer | John MacFarlane <jgm@berkeley.edu>
Stability | alpha
Portability | portable
Safe Haskell | None
Language | Haskell2010

Text.Pandoc.Chunks

Description

Functions and types for splitting a Pandoc into subdocuments, e.g. for conversion into a set of HTML pages.

Synopsis

- data Chunk = Chunk {
  - chunkHeading :: [Inline]
  - chunkId :: Text
  - chunkLevel :: Int
  - chunkNumber :: Int
  - chunkSectionNumber :: Maybe Text
  - chunkPath :: FilePath
  - chunkUp :: Maybe Chunk
  - chunkPrev :: Maybe Chunk
  - chunkNext :: Maybe Chunk
  - chunkUnlisted :: Bool
  - chunkContents :: [Block]
  }
- data ChunkedDoc = ChunkedDoc {
  - chunkedMeta :: Meta
  - chunkedTOC :: Tree SecInfo
  - chunkedChunks :: [Chunk]
  }
- newtype PathTemplate = PathTemplate {
  - unPathTemplate :: Text
  }
- splitIntoChunks :: PathTemplate -> Bool -> Maybe Int -> Int -> Pandoc -> ChunkedDoc
- toTOCTree :: [Block] -> Tree SecInfo
- tocToList :: Bool -> Int -> Tree SecInfo -> Block
- data SecInfo = SecInfo {
  - secTitle :: [Inline]
  - secNumber :: Maybe Text
  - secId :: Text
  - secPath :: Text
  - secLevel :: Int
  }

# Documentation

data Chunk #

A part of a document (typically a chapter or section, or the part of a section before its subsections).

Constructors

Chunk |
Fields chunkHeading :: [Inline] chunkId :: Text chunkLevel :: Int chunkNumber :: Int chunkSectionNumber :: Maybe Text chunkPath :: FilePath chunkUp :: Maybe Chunk chunkPrev :: Maybe Chunk chunkNext :: Maybe Chunk chunkUnlisted :: Bool chunkContents :: [Block]

#### Instances

Instances details

Generic Chunk # |
Instance details Defined in Text.Pandoc.Chunks Associated Types
type Rep Chunk |
Instance details Defined in Text.Pandoc.Chunks type Rep Chunk = D1 ('MetaData "Chunk" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "Chunk" 'PrefixI 'True) (((S1 ('MetaSel ('Just "chunkHeading") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Inline]) :*: S1 ('MetaSel ('Just "chunkId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "chunkLevel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: (S1 ('MetaSel ('Just "chunkNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "chunkSectionNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))) :*: ((S1 ('MetaSel ('Just "chunkPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath) :*: (S1 ('MetaSel ('Just "chunkUp") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)) :*: S1 ('MetaSel ('Just "chunkPrev") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)))) :*: (S1 ('MetaSel ('Just "chunkNext") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)) :*: (S1 ('MetaSel ('Just "chunkUnlisted") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Just "chunkContents") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Block]))))))
Methods from :: Chunk -> Rep Chunk x # to :: Rep Chunk x -> Chunk #
Show Chunk # |
Instance details Defined in Text.Pandoc.Chunks Methods showsPrec :: Int -> Chunk -> ShowS # show :: Chunk -> String # showList :: [Chunk] -> ShowS #
Eq Chunk # |
Instance details Defined in Text.Pandoc.Chunks Methods (==) :: Chunk -> Chunk -> Bool # (/=) :: Chunk -> Chunk -> Bool #
Walkable Block Chunk # |
Instance details Defined in Text.Pandoc.Chunks Methods walk :: (Block -> Block) -> Chunk -> Chunk # walkM :: (Monad m, Applicative m, Functor m) => (Block -> m Block) -> Chunk -> m Chunk # query :: Monoid c => (Block -> c) -> Chunk -> c #
Walkable Inline Chunk # |
Instance details Defined in Text.Pandoc.Chunks Methods walk :: (Inline -> Inline) -> Chunk -> Chunk # walkM :: (Monad m, Applicative m, Functor m) => (Inline -> m Inline) -> Chunk -> m Chunk # query :: Monoid c => (Inline -> c) -> Chunk -> c #
type Rep Chunk # |
Instance details Defined in Text.Pandoc.Chunks type Rep Chunk = D1 ('MetaData "Chunk" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "Chunk" 'PrefixI 'True) (((S1 ('MetaSel ('Just "chunkHeading") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Inline]) :*: S1 ('MetaSel ('Just "chunkId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)) :*: (S1 ('MetaSel ('Just "chunkLevel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: (S1 ('MetaSel ('Just "chunkNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int) :*: S1 ('MetaSel ('Just "chunkSectionNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))))) :*: ((S1 ('MetaSel ('Just "chunkPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath) :*: (S1 ('MetaSel ('Just "chunkUp") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)) :*: S1 ('MetaSel ('Just "chunkPrev") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)))) :*: (S1 ('MetaSel ('Just "chunkNext") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Chunk)) :*: (S1 ('MetaSel ('Just "chunkUnlisted") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Bool) :*: S1 ('MetaSel ('Just "chunkContents") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Block]))))))

data ChunkedDoc #

A `Pandoc` broken into `Chunk`s for writing to separate files.

Constructors

ChunkedDoc |
Fields chunkedMeta :: Meta chunkedTOC :: Tree SecInfo chunkedChunks :: [Chunk]

#### Instances

Instances details

Generic ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks Associated Types
type Rep ChunkedDoc |
Instance details Defined in Text.Pandoc.Chunks type Rep ChunkedDoc = D1 ('MetaData "ChunkedDoc" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "ChunkedDoc" 'PrefixI 'True) (S1 ('MetaSel ('Just "chunkedMeta") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Meta) :*: (S1 ('MetaSel ('Just "chunkedTOC") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Tree SecInfo)) :*: S1 ('MetaSel ('Just "chunkedChunks") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Chunk]))))
Methods from :: ChunkedDoc -> Rep ChunkedDoc x # to :: Rep ChunkedDoc x -> ChunkedDoc #
Show ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks Methods showsPrec :: Int -> ChunkedDoc -> ShowS # show :: ChunkedDoc -> String # showList :: [ChunkedDoc] -> ShowS #
Eq ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks Methods (==) :: ChunkedDoc -> ChunkedDoc -> Bool # (/=) :: ChunkedDoc -> ChunkedDoc -> Bool #
Walkable Block ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks Methods walk :: (Block -> Block) -> ChunkedDoc -> ChunkedDoc # walkM :: (Monad m, Applicative m, Functor m) => (Block -> m Block) -> ChunkedDoc -> m ChunkedDoc # query :: Monoid c => (Block -> c) -> ChunkedDoc -> c #
Walkable Inline ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks Methods walk :: (Inline -> Inline) -> ChunkedDoc -> ChunkedDoc # walkM :: (Monad m, Applicative m, Functor m) => (Inline -> m Inline) -> ChunkedDoc -> m ChunkedDoc # query :: Monoid c => (Inline -> c) -> ChunkedDoc -> c #
type Rep ChunkedDoc # |
Instance details Defined in Text.Pandoc.Chunks type Rep ChunkedDoc = D1 ('MetaData "ChunkedDoc" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "ChunkedDoc" 'PrefixI 'True) (S1 ('MetaSel ('Just "chunkedMeta") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Meta) :*: (S1 ('MetaSel ('Just "chunkedTOC") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Tree SecInfo)) :*: S1 ('MetaSel ('Just "chunkedChunks") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Chunk]))))

newtype PathTemplate #

A `PathTemplate` is a FilePath in which certain codes will be substituted with information from a `Chunk`. `%n` will be replaced with the chunk number (padded with leading 0s to 3 digits), `%s` with the section number of the heading, `%h` with the (stringified) heading text, `%i` with the section identifier. For example, `"section-%s-%i.html"` might be resolved to `"section-1.2-introduction.html"`.

Constructors

PathTemplate |
Fields unPathTemplate :: Text

#### Instances

Instances details

FromJSON PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Methods parseJSON :: Value -> Parser PathTemplate # parseJSONList :: Value -> Parser [PathTemplate] # omittedField :: Maybe PathTemplate #
ToJSON PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Methods toJSON :: PathTemplate -> Value # toEncoding :: PathTemplate -> Encoding # toJSONList :: [PathTemplate] -> Value # toEncodingList :: [PathTemplate] -> Encoding # omitField :: PathTemplate -> Bool #
Data PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PathTemplate -> c PathTemplate # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c PathTemplate # toConstr :: PathTemplate -> Constr # dataTypeOf :: PathTemplate -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c PathTemplate) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c PathTemplate) # gmapT :: (forall b. Data b => b -> b) -> PathTemplate -> PathTemplate # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PathTemplate -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PathTemplate -> r # gmapQ :: (forall d. Data d => d -> u) -> PathTemplate -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> PathTemplate -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> PathTemplate -> m PathTemplate # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PathTemplate -> m PathTemplate # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PathTemplate -> m PathTemplate #
IsString PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Methods fromString :: String -> PathTemplate #
Generic PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Associated Types
type Rep PathTemplate |
Instance details Defined in Text.Pandoc.Chunks type Rep PathTemplate = D1 ('MetaData "PathTemplate" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'True) (C1 ('MetaCons "PathTemplate" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPathTemplate") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))
Methods from :: PathTemplate -> Rep PathTemplate x # to :: Rep PathTemplate x -> PathTemplate #
Show PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks Methods showsPrec :: Int -> PathTemplate -> ShowS # show :: PathTemplate -> String # showList :: [PathTemplate] -> ShowS #
type Rep PathTemplate # |
Instance details Defined in Text.Pandoc.Chunks type Rep PathTemplate = D1 ('MetaData "PathTemplate" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'True) (C1 ('MetaCons "PathTemplate" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPathTemplate") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

splitIntoChunks #

Arguments

:: PathTemplate | Template for filepath
-> Bool | Number sections
-> Maybe Int | Base heading level
-> Int | Chunk level -- level of section to split at
-> Pandoc |
-> ChunkedDoc |

Split `Pandoc` into `Chunk`s, e.g. for conversion into a set of HTML pages or EPUB chapters.

toTOCTree :: [Block] -> Tree SecInfo #

Create tree of sections with titles, links, and numbers, in a form that can be turned into a table of contents. Presupposes that the '[Block]' is the output of `makeSections`.

tocToList :: Bool -> Int -> Tree SecInfo -> Block #

Generate a table of contents of the given depth.

data SecInfo #

Data for a section in a hierarchical document.

Constructors

SecInfo |
Fields secTitle :: [Inline] secNumber :: Maybe Text secId :: Text secPath :: Text secLevel :: Int

#### Instances

Instances details

Generic SecInfo # |
Instance details Defined in Text.Pandoc.Chunks Associated Types
type Rep SecInfo |
Instance details Defined in Text.Pandoc.Chunks type Rep SecInfo = D1 ('MetaData "SecInfo" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "SecInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "secTitle") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Inline]) :*: S1 ('MetaSel ('Just "secNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))) :*: (S1 ('MetaSel ('Just "secId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: (S1 ('MetaSel ('Just "secPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "secLevel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))))
Methods from :: SecInfo -> Rep SecInfo x # to :: Rep SecInfo x -> SecInfo #
Show SecInfo # |
Instance details Defined in Text.Pandoc.Chunks Methods showsPrec :: Int -> SecInfo -> ShowS # show :: SecInfo -> String # showList :: [SecInfo] -> ShowS #
Eq SecInfo # |
Instance details Defined in Text.Pandoc.Chunks Methods (==) :: SecInfo -> SecInfo -> Bool # (/=) :: SecInfo -> SecInfo -> Bool #
Walkable Inline SecInfo # |
Instance details Defined in Text.Pandoc.Chunks Methods walk :: (Inline -> Inline) -> SecInfo -> SecInfo # walkM :: (Monad m, Applicative m, Functor m) => (Inline -> m Inline) -> SecInfo -> m SecInfo # query :: Monoid c => (Inline -> c) -> SecInfo -> c #
type Rep SecInfo # |
Instance details Defined in Text.Pandoc.Chunks type Rep SecInfo = D1 ('MetaData "SecInfo" "Text.Pandoc.Chunks" "pandoc-3.7.0.2-LV2qWKW0Q2RElzdkrvf5Ll" 'False) (C1 ('MetaCons "SecInfo" 'PrefixI 'True) ((S1 ('MetaSel ('Just "secTitle") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Inline]) :*: S1 ('MetaSel ('Just "secNumber") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Text))) :*: (S1 ('MetaSel ('Just "secId") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: (S1 ('MetaSel ('Just "secPath") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text) :*: S1 ('MetaSel ('Just "secLevel") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))))