@@ -213,14 +213,16 @@ parseFormatSpec = parse formatSpec ""
213 '-' -> Set.delete ext
213 '-' -> Set.delete ext
214 _ -> Set.insert ext
214 _ -> Set.insert ext
216+-- TODO: when we get the PandocMonad stuff all sorted out,
217+-- we can simply these types considerably. Errors/MediaBag can be
218+-- part of the monad's internal state.
219+data Reader m = StringReader (ReaderOptions -> String -> m (Either PandocError Pandoc))
220+ | ByteStringReader (ReaderOptions -> BL.ByteString -> m (Either PandocError (Pandoc,MediaBag)))
217−data Reader = StringReader (ReaderOptions -> String -> IO (Either PandocError Pandoc))
218− | ByteStringReader (ReaderOptions -> BL.ByteString -> IO (Either PandocError (Pandoc,MediaBag)))
220−mkStringReader :: (ReaderOptions -> String -> Either PandocError Pandoc) -> Reader
222+mkStringReader :: (ReaderOptions -> String -> Either PandocError Pandoc) -> Reader IO
221mkStringReader r = StringReader (\o s -> return $ r o s)
223mkStringReader r = StringReader (\o s -> return $ r o s)
223−mkStringReaderWithWarnings :: (ReaderOptions -> String -> Either PandocError (Pandoc, [String])) -> Reader
225+mkStringReaderWithWarnings :: (ReaderOptions -> String -> Either PandocError (Pandoc, [String])) -> Reader IO
224mkStringReaderWithWarnings r = StringReader $ \o s ->
226mkStringReaderWithWarnings r = StringReader $ \o s ->
225 case r o s of
227 case r o s of
226 Left err -> return $ Left err
228 Left err -> return $ Left err
@@ -228,10 +230,10 @@ mkStringReaderWithWarnings r = StringReader $ \o s ->
228 mapM_ warn warnings
230 mapM_ warn warnings
229 return (Right doc)
231 return (Right doc)
231−mkBSReader :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag)) -> Reader
233+mkBSReader :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag)) -> Reader IO
232mkBSReader r = ByteStringReader (\o s -> return $ r o s)
234mkBSReader r = ByteStringReader (\o s -> return $ r o s)
234−mkBSReaderWithWarnings :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag, [String])) -> Reader
236+mkBSReaderWithWarnings :: (ReaderOptions -> BL.ByteString -> Either PandocError (Pandoc, MediaBag, [String])) -> Reader IO
235mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
237mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
236 case r o s of
238 case r o s of
237 Left err -> return $ Left err
239 Left err -> return $ Left err
@@ -240,7 +242,7 @@ mkBSReaderWithWarnings r = ByteStringReader $ \o s ->
240 return $ Right (doc, mediaBag)
242 return $ Right (doc, mediaBag)
242-- | Association list of formats and readers.
244-- | Association list of formats and readers.
243−readers :: [(String, Reader)]
245+readers :: [(String, Reader IO)]
244readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
246readers = [ ("native" , StringReader $ \_ s -> return $ readNative s)
245 ,("json" , mkStringReader readJSON )
247 ,("json" , mkStringReader readJSON )
246 ,("markdown" , mkStringReaderWithWarnings readMarkdownWithWarnings)
248 ,("markdown" , mkStringReaderWithWarnings readMarkdownWithWarnings)
@@ -349,7 +351,7 @@ getDefaultExtensions "epub" = Set.fromList [Ext_raw_html,
349getDefaultExtensions _ = Set.fromList [Ext_auto_identifiers]
351getDefaultExtensions _ = Set.fromList [Ext_auto_identifiers]
351-- | Retrieve reader based on formatSpec (format+extensions).
353-- | Retrieve reader based on formatSpec (format+extensions).
352−getReader :: String -> Either String Reader
354+getReader :: String -> Either String (Reader IO)
353getReader s =
355getReader s =
354 case parseFormatSpec s of
356 case parseFormatSpec s of
355 Left e -> Left $ intercalate "\n" [m | Message m <- errorMessages e]
357 Left e -> Left $ intercalate "\n" [m | Message m <- errorMessages e]