@@ -1,4 +1,4 @@
1−{-# LANGUAGE DeriveDataTypeable, CPP #-}
1+{-# LANGUAGE DeriveDataTypeable, CPP, MultiParamTypeClasses #-}
22{-
33Copyright (C) 2006-2013 John MacFarlane <jgm@berkeley.edu>
44
@@ -79,6 +79,7 @@ module Text.Pandoc.Shared (
7979 ) where
8080
8181import Text.Pandoc.Definition
82+import Text.Pandoc.Walk
8283import Text.Pandoc.Generic
8384import Text.Pandoc.Builder (Blocks, ToMetaValue(..))
8485import qualified Text.Pandoc.Builder as B
@@ -105,6 +106,7 @@ import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
105106 renderOptions)
106107import qualified Data.ByteString as BS
107108import qualified Data.ByteString.Char8 as B8
109+import Text.Pandoc.Compat.Monoid
108110
109111#ifdef EMBED_DATA_FILES
110112import Text.Pandoc.Data (dataFiles)
@@ -383,7 +385,7 @@ consolidateInlines [] = []
383385
384386-- | Convert list of inlines to a string with formatting removed.
385387stringify :: [Inline] -> String
386−stringify = queryWith go
388+stringify = query go
387389 where go :: Inline -> [Char]
388390 go Space = " "
389391 go (Str x) = x
@@ -433,6 +435,29 @@ data Element = Blk Block
433435 -- lvl num attributes label contents
434436 deriving (Eq, Read, Show, Typeable, Data)
435437
438+instance Walkable Inline Element where
439+ walk f (Blk x) = Blk (walk f x)
440+ walk f (Sec lev nums attr ils elts) = Sec lev nums attr (walk f ils) (walk f elts)
441+ walkM f (Blk x) = Blk `fmap` walkM f x
442+ walkM f (Sec lev nums attr ils elts) = do
443+ ils' <- walkM f ils
444+ elts' <- walkM f elts
445+ return $ Sec lev nums attr ils' elts'
446+ query f (Blk x) = query f x
447+ query f (Sec _ _ _ ils elts) = query f ils <> query f elts
448+
449+instance Walkable Block Element where
450+ walk f (Blk x) = Blk (walk f x)
451+ walk f (Sec lev nums attr ils elts) = Sec lev nums attr (walk f ils) (walk f elts)
452+ walkM f (Blk x) = Blk `fmap` walkM f x
453+ walkM f (Sec lev nums attr ils elts) = do
454+ ils' <- walkM f ils
455+ elts' <- walkM f elts
456+ return $ Sec lev nums attr ils' elts'
457+ query f (Blk x) = query f x
458+ query f (Sec _ _ _ ils elts) = query f ils <> query f elts
459+
460+
436461-- | Convert Pandoc inline list to plain text identifier. HTML
437462-- identifiers must start with a letter, and may contain only
438463-- letters, digits, and the characters _-.