@@ -64,7 +64,6 @@ module Text.Pandoc.Parsing ( (>>~),
64 gridTableWith,
64 gridTableWith,
66 testStringWith,
66 testStringWith,
68 guardEnabled,
67 guardEnabled,
69 guardDisabled,
68 guardDisabled,
70 ParserState (..),
69 ParserState (..),
@@ -870,33 +869,45 @@ instance HasMeta ParserState where
870 deleteMeta field st =
869 deleteMeta field st =
871 st{ stateMeta = deleteMeta field $ stateMeta st }
870 st{ stateMeta = deleteMeta field $ stateMeta st }
873−class Monad m => HasReaderOptions m where
872+class HasReaderOptions st where
873+ extractReaderOptions :: st -> ReaderOptions
874− askReaderOption :: (ReaderOptions -> b) -> m b
874+ getOption :: (ReaderOptions -> b) -> Parser s st b
876+ getOption f = (f . extractReaderOptions) `fmap` getState
878+instance HasReaderOptions ParserState where
879+ extractReaderOptions = stateOptions
876−class Monad m => HasHeaderMap m where
881+class HasHeaderMap st where
882+ extractHeaderMap :: st -> M.Map Inlines String
883+ updateHeaderMap :: M.Map Inlines String -> st -> st
877− getHeaderMap :: m (M.Map Inlines String)
884+ getHeaderMap :: Parser s st (M.Map Inlines String)
878− putHeaderMap :: M.Map Inlines String -> m ()
885+ putHeaderMap :: M.Map Inlines String -> Parser s st ()
879− modifyHeaderMap :: (M.Map Inlines String -> M.Map Inlines String) -> m ()
886+ modifyHeaderMap :: (M.Map Inlines String -> M.Map Inlines String)
880 -- default
888 -- default
889+ getHeaderMap = extractHeaderMap `fmap` getState
890+ putHeaderMap x = updateState (updateHeaderMap x)
881 modifyHeaderMap f = getHeaderMap >>= putHeaderMap . f
891 modifyHeaderMap f = getHeaderMap >>= putHeaderMap . f
893+instance HasHeaderMap ParserState where
894+ extractHeaderMap = stateHeaders
895+ updateHeaderMap x st = st{ stateHeaders = x }
883−class Monad m => HasIdentifierList m where
897+class HasIdentifierList st where
898+ extractIdentifierList :: st -> [String]
899+ updateIdentifierList :: [String] -> st -> st
884− getIdentifierList :: m [String]
900+ getIdentifierList :: Parser s st ([String])
885− putIdentifierList :: [String] -> m ()
901+ putIdentifierList :: [String] -> Parser s st ()
886− modifyIdentifierList :: ([String] -> [String]) -> m ()
902+ modifyIdentifierList :: ([String] -> [String]) -> Parser s st ()
887 -- default
903 -- default
904+ getIdentifierList = extractIdentifierList `fmap` getState
905+ putIdentifierList x = updateState (updateIdentifierList x)
888 modifyIdentifierList f = getIdentifierList >>= putIdentifierList . f
906 modifyIdentifierList f = getIdentifierList >>= putIdentifierList . f
890−instance HasReaderOptions (Parser s ParserState) where
891− askReaderOption = getOption
893−instance HasHeaderMap (Parser s ParserState) where
894− getHeaderMap = fmap stateHeaders getState
895− putHeaderMap hm = updateState $ \st -> st{ stateHeaders = hm }
897−instance HasIdentifierList (Parser s ParserState) where
908+instance HasIdentifierList ParserState where
898− getIdentifierList = fmap stateIdentifiers getState
909+ extractIdentifierList = stateIdentifiers
899− putIdentifierList l = updateState $ \st -> st{ stateIdentifiers = l }
910+ updateIdentifierList x st = st{ stateIdentifiers = x }
901defaultParserState :: ParserState
912defaultParserState :: ParserState
902defaultParserState =
913defaultParserState =
@@ -923,15 +934,12 @@ defaultParserState =
923 stateRstCustomRoles = M.empty,
934 stateRstCustomRoles = M.empty,
924 stateWarnings = []}
935 stateWarnings = []}
926−getOption :: (ReaderOptions -> a) -> Parser s ParserState a
927−getOption f = (f . stateOptions) `fmap` getState
929-- | Succeed only if the extension is enabled.
937-- | Succeed only if the extension is enabled.
930−guardEnabled :: Extension -> Parser s ParserState ()
938+guardEnabled :: HasReaderOptions st => Extension -> Parser s st ()
931guardEnabled ext = getOption readerExtensions >>= guard . Set.member ext
939guardEnabled ext = getOption readerExtensions >>= guard . Set.member ext
933-- | Succeed only if the extension is disabled.
941-- | Succeed only if the extension is disabled.
934−guardDisabled :: Extension -> Parser s ParserState ()
942+guardDisabled :: HasReaderOptions st => Extension -> Parser s st ()
935guardDisabled ext = getOption readerExtensions >>= guard . not . Set.member ext
943guardDisabled ext = getOption readerExtensions >>= guard . not . Set.member ext
937data HeaderType
945data HeaderType
@@ -968,11 +976,11 @@ type SubstTable = M.Map Key Inlines
968-- and the auto_identifers extension is set, generate a new
976-- and the auto_identifers extension is set, generate a new
969-- unique identifier, and update the list of identifiers
977-- unique identifier, and update the list of identifiers
970-- in state.
978-- in state.
971−registerHeader :: (HasReaderOptions m, HasHeaderMap m, HasIdentifierList m)
979+registerHeader :: (HasReaderOptions st, HasHeaderMap st, HasIdentifierList st)
972− => Attr -> Inlines -> m Attr
980+ => Attr -> Inlines -> Parser s st Attr
973registerHeader (ident,classes,kvs) header' = do
981registerHeader (ident,classes,kvs) header' = do
974 ids <- getIdentifierList
982 ids <- getIdentifierList
975− exts <- askReaderOption readerExtensions
983+ exts <- getOption readerExtensions
976 let insert' = M.insertWith (\_new old -> old)
984 let insert' = M.insertWith (\_new old -> old)
977 if null ident && Ext_auto_identifiers `Set.member` exts
985 if null ident && Ext_auto_identifiers `Set.member` exts
@@ -990,7 +998,7 @@ registerHeader (ident,classes,kvs) header' = do
990 return (ident,classes,kvs)
998 return (ident,classes,kvs)
992-- | Fail unless we're in "smart typography" mode.
1000-- | Fail unless we're in "smart typography" mode.
993−failUnlessSmart :: Parser [tok] ParserState ()
1001+failUnlessSmart :: HasReaderOptions st => Parser s st ()
994failUnlessSmart = getOption readerSmart >>= guard
1002failUnlessSmart = getOption readerSmart >>= guard
996smartPunctuation :: Parser [Char] ParserState Inline
1004smartPunctuation :: Parser [Char] ParserState Inline