diff options
Diffstat (limited to 'src/Text/Pandoc/Error.hs')
-rw-r--r-- | src/Text/Pandoc/Error.hs | 116 |
1 files changed, 61 insertions, 55 deletions
diff --git a/src/Text/Pandoc/Error.hs b/src/Text/Pandoc/Error.hs index 113ab9d6e..38db4fda9 100644 --- a/src/Text/Pandoc/Error.hs +++ b/src/Text/Pandoc/Error.hs @@ -1,6 +1,7 @@ -{-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE OverloadedStrings #-} {- | Module : Text.Pandoc.Error Copyright : Copyright (C) 2006-2019 John MacFarlane @@ -22,6 +23,8 @@ import Prelude import Control.Exception (Exception) import Data.Typeable (Typeable) import Data.Word (Word8) +import Data.Text (Text) +import qualified Data.Text as T import GHC.Generics (Generic) import Network.HTTP.Client (HttpException) import System.Exit (ExitCode (..), exitWith) @@ -31,32 +34,32 @@ import Text.Printf (printf) import Text.Parsec.Error import Text.Parsec.Pos hiding (Line) -type Input = String +type Input = Text -data PandocError = PandocIOError String IOError - | PandocHttpError String HttpException - | PandocShouldNeverHappenError String - | PandocSomeError String - | PandocParseError String +data PandocError = PandocIOError Text IOError + | PandocHttpError Text HttpException + | PandocShouldNeverHappenError Text + | PandocSomeError Text + | PandocParseError Text | PandocParsecError Input ParseError - | PandocMakePDFError String - | PandocOptionError String - | PandocSyntaxMapError String + | PandocMakePDFError Text + | PandocOptionError Text + | PandocSyntaxMapError Text | PandocFailOnWarningError - | PandocPDFProgramNotFoundError String - | PandocPDFError String - | PandocFilterError String String - | PandocCouldNotFindDataFileError String - | PandocResourceNotFound String - | PandocTemplateError String - | PandocAppError String - | PandocEpubSubdirectoryError String - | PandocMacroLoop String - | PandocUTF8DecodingError String Int Word8 - | PandocIpynbDecodingError String - | PandocUnknownReaderError String - | PandocUnknownWriterError String - | PandocUnsupportedExtensionError String String + | PandocPDFProgramNotFoundError Text + | PandocPDFError Text + | PandocFilterError Text Text + | PandocCouldNotFindDataFileError Text + | PandocResourceNotFound Text + | PandocTemplateError Text + | PandocAppError Text + | PandocEpubSubdirectoryError Text + | PandocMacroLoop Text + | PandocUTF8DecodingError Text Int Word8 + | PandocIpynbDecodingError Text + | PandocUnknownReaderError Text + | PandocUnknownWriterError Text + | PandocUnsupportedExtensionError Text Text deriving (Show, Typeable, Generic) instance Exception PandocError @@ -68,23 +71,23 @@ handleError (Left e) = case e of PandocIOError _ err' -> ioError err' PandocHttpError u err' -> err 61 $ - "Could not fetch " ++ u ++ "\n" ++ show err' + "Could not fetch " <> u <> "\n" <> tshow err' PandocShouldNeverHappenError s -> err 62 $ - "Something we thought was impossible happened!\n" ++ - "Please report this to pandoc's developers: " ++ s + "Something we thought was impossible happened!\n" <> + "Please report this to pandoc's developers: " <> s PandocSomeError s -> err 63 s PandocParseError s -> err 64 s PandocParsecError input err' -> let errPos = errorPos err' errLine = sourceLine errPos errColumn = sourceColumn errPos - ls = lines input ++ [""] + ls = T.lines input <> [""] errorInFile = if length ls > errLine - 1 - then concat ["\n", ls !! (errLine - 1) - ,"\n", replicate (errColumn - 1) ' ' - ,"^"] + then T.concat ["\n", ls !! (errLine - 1) + ,"\n", T.replicate (errColumn - 1) " " + ,"^"] else "" - in err 65 $ "\nError at " ++ show err' ++ + in err 65 $ "\nError at " <> tshow err' <> -- if error comes from a chunk or included file, -- then we won't get the right text this way: if sourceName errPos == "source" @@ -95,49 +98,52 @@ handleError (Left e) = PandocSyntaxMapError s -> err 67 s PandocFailOnWarningError -> err 3 "Failing because there were warnings." PandocPDFProgramNotFoundError pdfprog -> err 47 $ - pdfprog ++ " not found. Please select a different --pdf-engine or install " ++ pdfprog - PandocPDFError logmsg -> err 43 $ "Error producing PDF.\n" ++ logmsg - PandocFilterError filtername msg -> err 83 $ "Error running filter " ++ - filtername ++ ":\n" ++ msg + pdfprog <> " not found. Please select a different --pdf-engine or install " <> pdfprog + PandocPDFError logmsg -> err 43 $ "Error producing PDF.\n" <> logmsg + PandocFilterError filtername msg -> err 83 $ "Error running filter " <> + filtername <> ":\n" <> msg PandocCouldNotFindDataFileError fn -> err 97 $ - "Could not find data file " ++ fn + "Could not find data file " <> fn PandocResourceNotFound fn -> err 99 $ - "File " ++ fn ++ " not found in resource path" - PandocTemplateError s -> err 5 $ "Error compiling template " ++ s + "File " <> fn <> " not found in resource path" + PandocTemplateError s -> err 5 $ "Error compiling template " <> s PandocAppError s -> err 4 s PandocEpubSubdirectoryError s -> err 31 $ - "EPUB subdirectory name '" ++ s ++ "' contains illegal characters" + "EPUB subdirectory name '" <> s <> "' contains illegal characters" PandocMacroLoop s -> err 91 $ - "Loop encountered in expanding macro " ++ s + "Loop encountered in expanding macro " <> s PandocUTF8DecodingError f offset w -> err 92 $ - "UTF-8 decoding error in " ++ f ++ " at byte offset " ++ show offset ++ - " (" ++ printf "%2x" w ++ ").\n" ++ + "UTF-8 decoding error in " <> f <> " at byte offset " <> tshow offset <> + " (" <> T.pack (printf "%2x" w) <> ").\n" <> "The input must be a UTF-8 encoded text." PandocIpynbDecodingError w -> err 93 $ - "ipynb decoding error: " ++ w + "ipynb decoding error: " <> w PandocUnknownReaderError r -> err 21 $ - "Unknown input format " ++ r ++ + "Unknown input format " <> r <> case r of - "doc" -> "\nPandoc can convert from DOCX, but not from DOC." ++ - "\nTry using Word to save your DOC file as DOCX," ++ + "doc" -> "\nPandoc can convert from DOCX, but not from DOC." <> + "\nTry using Word to save your DOC file as DOCX," <> " and convert that with pandoc." "pdf" -> "\nPandoc can convert to PDF, but not from PDF." _ -> "" PandocUnknownWriterError w -> err 22 $ - "Unknown output format " ++ w ++ + "Unknown output format " <> w <> case w of - "pdf" -> "To create a pdf using pandoc, use" ++ - " -t latex|beamer|context|ms|html5" ++ - "\nand specify an output file with " ++ + "pdf" -> "To create a pdf using pandoc, use" <> + " -t latex|beamer|context|ms|html5" <> + "\nand specify an output file with " <> ".pdf extension (-o filename.pdf)." "doc" -> "\nPandoc can convert to DOCX, but not from DOC." _ -> "" PandocUnsupportedExtensionError ext f -> err 23 $ - "The extension " ++ ext ++ " is not supported " ++ - "for " ++ f + "The extension " <> ext <> " is not supported " <> + "for " <> f -err :: Int -> String -> IO a +err :: Int -> Text -> IO a err exitCode msg = do - UTF8.hPutStrLn stderr msg + UTF8.hPutStrLn stderr (T.unpack msg) exitWith $ ExitFailure exitCode return undefined + +tshow :: Show a => a -> Text +tshow = T.pack . show |