Copyright | Copyright (C) 2013 John MacFarlane |
---|---|
License | BSD3 |
Maintainer | John MacFarlane <jgm@berkeley.edu> |
Stability | alpha |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Functions for manipulating Pandoc
documents or extracting
information from them by walking the Pandoc
structure (or
intermediate structures like '[Block]' or '[Inline]'.
These are faster (by a factor of four or five) than the generic
functions defined in Text.Pandoc.Generic
.
Here's a simple example, defining a function that replaces all the level 3+ headers in a document with regular paragraphs in ALL CAPS:
import Text.Pandoc.Definition import Text.Pandoc.Walk import Data.Char (toUpper) modHeader :: Block -> Block modHeader (Header n _ xs) | n >= 3 = Para $ walk allCaps xs modHeader x = x allCaps :: Inline -> Inline allCaps (Str xs) = Str $ map toUpper xs allCaps x = x changeHeaders :: Pandoc -> Pandoc changeHeaders = walk modHeader
query
can be used, for example, to compile a list of URLs
linked to in a document:
extractURL :: Inline -> [String] extractURL (Link _ _ (u,_)) = [u] extractURL (Image _ _ (u,_)) = [u] extractURL _ = [] extractURLs :: Pandoc -> [String] extractURLs = query extractURL
Documentation
class Walkable a b where Source #
walk :: (a -> a) -> b -> b Source #
walk f x
walks the structure x
(bottom up) and replaces every
occurrence of an a
with the result of applying f
to it.
walkM :: (Monad m, Applicative m, Functor m) => (a -> m a) -> b -> m b Source #
A monadic version of walk
.
query :: Monoid c => (a -> c) -> b -> c Source #
query f x
walks the structure x
(bottom up) and applies f
to every a
, appending the results.