aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Readers.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Readers.hs')
-rw-r--r--src/Text/Pandoc/Readers.hs26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/Text/Pandoc/Readers.hs b/src/Text/Pandoc/Readers.hs
index 1e2f16d43..3ad479287 100644
--- a/src/Text/Pandoc/Readers.hs
+++ b/src/Text/Pandoc/Readers.hs
@@ -55,6 +55,7 @@ module Text.Pandoc.Readers
) where
import Prelude
+import Control.Monad (unless)
import Control.Monad.Except (throwError)
import Data.Aeson
import qualified Data.ByteString.Lazy as BL
@@ -134,15 +135,28 @@ readers = [ ("native" , TextReader readNative)
]
-- | Retrieve reader, extensions based on formatSpec (format+extensions).
-getReader :: PandocMonad m => String -> Either String (Reader m, Extensions)
+getReader :: PandocMonad m => String -> m (Reader m, Extensions)
getReader s =
case parseFormatSpec s of
- Left e -> Left $ intercalate "\n" [m | Message m <- errorMessages e]
- Right (readerName, setExts) ->
+ Left e -> throwError $ PandocAppError
+ $ intercalate "\n" [m | Message m <- errorMessages e]
+ Right (readerName, extsToEnable, extsToDisable) ->
case lookup readerName readers of
- Nothing -> Left $ "Unknown reader: " ++ readerName
- Just r -> Right (r, setExts $
- getDefaultExtensions readerName)
+ Nothing -> throwError $ PandocUnknownReaderError
+ readerName
+ Just r -> do
+ let allExts = getAllExtensions readerName
+ let exts = foldr disableExtension
+ (foldr enableExtension
+ (getDefaultExtensions readerName)
+ extsToEnable) extsToDisable
+ mapM_ (\ext ->
+ unless (extensionEnabled ext allExts) $
+ throwError $
+ PandocUnsupportedExtensionError
+ (drop 4 $ show ext) readerName)
+ (extsToEnable ++ extsToDisable)
+ return (r, exts)
-- | Read pandoc document from JSON format.
readJSON :: PandocMonad m