git.iko.soy/typeable/pandoc
on master help sign in
API changes to HasReaderOptions, HasHeaderMap, HasIdentifierList.
08d1404John MacFarlane
src/Text/Pandoc/Parsing.hs+39−31
@@ -64,7 +64,6 @@ module Text.Pandoc.Parsing ( (>>~),
64 gridTableWith,
64 gridTableWith,
65 readWith,
65 readWith,
66 testStringWith,
66 testStringWith,
67− getOption,
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 }
872
871
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
875−
875+ -- default
876+ getOption f = (f . extractReaderOptions) `fmap` getState
877+
878+instance HasReaderOptions ParserState where
879+ extractReaderOptions = stateOptions
880+
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)
887+ -> Parser s st ()
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
882
892
893+instance HasHeaderMap ParserState where
894+ extractHeaderMap = stateHeaders
895+ updateHeaderMap x st = st{ stateHeaders = x }
896+
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
889
907
890−instance HasReaderOptions (Parser s ParserState) where
891− askReaderOption = getOption
892−
893−instance HasHeaderMap (Parser s ParserState) where
894− getHeaderMap = fmap stateHeaders getState
895− putHeaderMap hm = updateState $ \st -> st{ stateHeaders = hm }
896−
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 }
900
911
901defaultParserState :: ParserState
912defaultParserState :: ParserState
902defaultParserState =
913defaultParserState =
@@ -923,15 +934,12 @@ defaultParserState =
923 stateRstCustomRoles = M.empty,
934 stateRstCustomRoles = M.empty,
924 stateWarnings = []}
935 stateWarnings = []}
925
936
926−getOption :: (ReaderOptions -> a) -> Parser s ParserState a
927−getOption f = (f . stateOptions) `fmap` getState
928−
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
932
940
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
936
944
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
978 then do
986 then do
@@ -990,7 +998,7 @@ registerHeader (ident,classes,kvs) header' = do
990 return (ident,classes,kvs)
998 return (ident,classes,kvs)
991
999
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
995
1003
996smartPunctuation :: Parser [Char] ParserState Inline
1004smartPunctuation :: Parser [Char] ParserState Inline
src/Text/Pandoc/Readers/MediaWiki.hs+8−8
@@ -82,16 +82,16 @@ data MWState = MWState { mwOptions :: ReaderOptions
82
82
83type MWParser = Parser [Char] MWState
83type MWParser = Parser [Char] MWState
84
84
85−instance HasReaderOptions MWParser where
85+instance HasReaderOptions MWState where
86− askReaderOption f = (f . mwOptions) `fmap` getState
86+ extractReaderOptions = mwOptions
87
87
88−instance HasHeaderMap MWParser where
88+instance HasHeaderMap MWState where
89− getHeaderMap = fmap mwHeaderMap getState
89+ extractHeaderMap = mwHeaderMap
90− putHeaderMap hm = updateState $ \st -> st{ mwHeaderMap = hm }
90+ updateHeaderMap x st = st{ mwHeaderMap = x }
91
91
92−instance HasIdentifierList MWParser where
92+instance HasIdentifierList MWState where
93− getIdentifierList = fmap mwIdentifierList getState
93+ extractIdentifierList = mwIdentifierList
94− putIdentifierList l = updateState $ \st -> st{ mwIdentifierList = l }
94+ updateIdentifierList x st = st{ mwIdentifierList = x }
95
95
96--
96--
97-- auxiliary functions
97-- auxiliary functions