@@ -19,6 +19,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
1919-}
2020import Prelude
2121import Text.Pandoc
22+import Text.Pandoc.Error (PandocError(..))
23+import Control.Monad.Except (throwError)
2224import qualified Text.Pandoc.UTF8 as UTF8
2325import qualified Data.ByteString as B
2426import Criterion.Main
@@ -37,14 +39,15 @@ readerBench doc name =
3739 $ nf (\i -> either (error . show) id $ runPure (readerFun i))
3840 inp
3941 Left _ -> Nothing
40− where res = runPure $ do
41− (TextReader r, rexts)
42− <- either (fail . show) return $ getReader name
43− (TextWriter w, wexts)
44− <- either (fail . show) return $ getWriter name
45− inp <- w def{ writerWrapText = WrapAuto, writerExtensions = wexts }
46− doc
47− return (r def{ readerExtensions = rexts }, inp)
42+ where res = runPure $
43+ case (getReader name, getWriter name) of
44+ (Right (TextReader r, rexts),
45+ Right (TextWriter w, wexts)) -> do
46+ inp <- w def{ writerWrapText = WrapAuto
47+ , writerExtensions = wexts } doc
48+ return $ (r def{ readerExtensions = rexts }, inp)
49+ _ -> throwError $ PandocSomeError
50+ $ "could not get text reader and writer for " ++ name
4851
4952writerBench :: Pandoc
5053 -> String
@@ -55,11 +58,13 @@ writerBench doc name =
5558 Just $ bench (name ++ " writer")
5659 $ nf (\d -> either (error . show) id $
5760 runPure (writerFun d)) doc
58− _ -> Nothing
61+ Left _ -> Nothing
5962 where res = runPure $ do
60− (TextWriter w, wexts)
61− <- either (fail . show) return $ getWriter name
62− return $ w def{ writerExtensions = wexts }
63+ case (getWriter name) of
64+ Right (TextWriter w, wexts) ->
65+ return $ w def{ writerExtensions = wexts }
66+ _ -> throwError $ PandocSomeError
67+ $ "could not get text reader and writer for " ++ name
6368
6469main :: IO ()
6570main = do