git.iko.soy/typeable/pandoc
on master help sign in
Parsing: Added HasMacros, simplified other typeclasses.

Removed updateHeaderMap, setHeaderMap, getHeaderMap, updateIdentifierList, setIdentifierList, getIdentifierList.

commit6992050161f1bbe8d18d7d78beb3b38a4b69a23e authorJohn MacFarlane <jgm@berkeley.edu> dateTue 25 Mar 2014, 14:55 (13 years ago) parent6ec3ee3
2 files changed+24−30
src/Text/Pandoc/Parsing.hs+22−28 src/Text/Pandoc/Readers/MediaWiki.hs+2−2
src/Text/Pandoc/Parsing.hs+22−28
@@ -70,6 +70,7 @@ module Text.Pandoc.Parsing ( (>>~),
7070 HasReaderOptions (..),
7171 HasHeaderMap (..),
7272 HasIdentifierList (..),
73+ HasMacros (..),
7374 defaultParserState,
7475 HeaderType (..),
7576 ParserContext (..),
@@ -880,35 +881,28 @@ instance HasReaderOptions ParserState where
880881
881882class HasHeaderMap st where
882883 extractHeaderMap :: st -> M.Map Inlines String
883− updateHeaderMap :: M.Map Inlines String -> st -> st
884− getHeaderMap :: Parser s st (M.Map Inlines String)
885− putHeaderMap :: M.Map Inlines String -> Parser s st ()
886− modifyHeaderMap :: (M.Map Inlines String -> M.Map Inlines String)
887− -> Parser s st ()
888− -- default
889− getHeaderMap = extractHeaderMap `fmap` getState
890− putHeaderMap x = updateState (updateHeaderMap x)
891− modifyHeaderMap f = getHeaderMap >>= putHeaderMap . f
884+ updateHeaderMap :: (M.Map Inlines String -> M.Map Inlines String) ->
885+ st -> st
892886
893887instance HasHeaderMap ParserState where
894888 extractHeaderMap = stateHeaders
895− updateHeaderMap x st = st{ stateHeaders = x }
889+ updateHeaderMap f st = st{ stateHeaders = f $ stateHeaders st }
896890
897891class HasIdentifierList st where
898892 extractIdentifierList :: st -> [String]
899− updateIdentifierList :: [String] -> st -> st
900− getIdentifierList :: Parser s st ([String])
901− putIdentifierList :: [String] -> Parser s st ()
902− modifyIdentifierList :: ([String] -> [String]) -> Parser s st ()
903− -- default
904− getIdentifierList = extractIdentifierList `fmap` getState
905− putIdentifierList x = updateState (updateIdentifierList x)
906− modifyIdentifierList f = getIdentifierList >>= putIdentifierList . f
893+ updateIdentifierList :: ([String] -> [String]) -> st -> st
907894
908895instance HasIdentifierList ParserState where
909896 extractIdentifierList = stateIdentifiers
910− updateIdentifierList x st = st{ stateIdentifiers = x }
897+ updateIdentifierList f st = st{ stateIdentifiers = f $ stateIdentifiers st }
898+
899+class HasMacros st where
900+ extractMacros :: st -> [Macro]
901+ updateMacros :: ([Macro] -> [Macro]) -> st -> st
911902
903+instance HasMacros ParserState where
904+ extractMacros = stateMacros
905+ updateMacros f st = st{ stateMacros = f $ stateMacros st }
912906
913907defaultParserState :: ParserState
914908defaultParserState =
@@ -980,7 +974,7 @@ type SubstTable = M.Map Key Inlines
980974registerHeader :: (HasReaderOptions st, HasHeaderMap st, HasIdentifierList st)
981975 => Attr -> Inlines -> Parser s st Attr
982976registerHeader (ident,classes,kvs) header' = do
983− ids <- getIdentifierList
977+ ids <- extractIdentifierList `fmap` getState
984978 exts <- getOption readerExtensions
985979 let insert' = M.insertWith (\_new old -> old)
986980 if null ident && Ext_auto_identifiers `Set.member` exts
@@ -989,13 +983,13 @@ registerHeader (ident,classes,kvs) header' = do
989983 let id'' = if Ext_ascii_identifiers `Set.member` exts
990984 then catMaybes $ map toAsciiChar id'
991985 else id'
992− putIdentifierList $ if id' == id''
993− then id' : ids
994− else id' : id'' : ids
995− modifyHeaderMap $ insert' header' id'
986+ updateState $ updateIdentifierList $
987+ if id' == id'' then (id' :) else ([id', id''] ++)
988+ updateState $ updateHeaderMap $ insert' header' id'
996989 return (id'',classes,kvs)
997990 else do
998− unless (null ident) $ modifyHeaderMap $ insert' header' ident
991+ unless (null ident) $
992+ updateState $ updateHeaderMap $ insert' header' ident
999993 return (ident,classes,kvs)
1000994
1001995-- | Fail unless we're in "smart typography" mode.
@@ -1140,7 +1134,7 @@ nested p = do
11401134--
11411135
11421136-- | Parse a \newcommand or \renewcommand macro definition.
1143−macro :: Parser [Char] ParserState Blocks
1137+macro :: (HasMacros st, HasReaderOptions st) => Parser [Char] st Blocks
11441138macro = do
11451139 apply <- getOption readerApplyMacros
11461140 inp <- getInput
@@ -1150,7 +1144,7 @@ macro = do
11501144 if apply
11511145 then do
11521146 updateState $ \st ->
1153− st { stateMacros = ms ++ stateMacros st }
1147+ updateMacros (ms ++) st
11541148 return mempty
11551149 else return $ rawBlock "latex" def'
11561150
@@ -1159,7 +1153,7 @@ applyMacros' :: String -> Parser [Char] ParserState String
11591153applyMacros' target = do
11601154 apply <- getOption readerApplyMacros
11611155 if apply
1162− then do macros <- liftM stateMacros getState
1156+ then do macros <- extractMacros `fmap` getState
11631157 return $ applyMacros macros target
11641158 else return target
11651159
src/Text/Pandoc/Readers/MediaWiki.hs+2−2
@@ -87,11 +87,11 @@ instance HasReaderOptions MWState where
8787
8888instance HasHeaderMap MWState where
8989 extractHeaderMap = mwHeaderMap
90− updateHeaderMap x st = st{ mwHeaderMap = x }
90+ updateHeaderMap f st = st{ mwHeaderMap = f $ mwHeaderMap st }
9191
9292instance HasIdentifierList MWState where
9393 extractIdentifierList = mwIdentifierList
94− updateIdentifierList x st = st{ mwIdentifierList = x }
94+ updateIdentifierList f st = st{ mwIdentifierList = f $ mwIdentifierList st }
9595
9696--
9797-- auxiliary functions