git.iko.soy/typeable/pandoc
on master help sign in
When downloading content from URL arguments, be sensitive to...
5a73c5dJohn MacFarlane
src/Text/Pandoc/App.hs+9−1
@@ -28,6 +28,7 @@ import Control.Monad ( (>=>), when )
28import Control.Monad.Trans ( MonadIO(..) )
28import Control.Monad.Trans ( MonadIO(..) )
29import Control.Monad.Except (throwError)
29import Control.Monad.Except (throwError)
30import qualified Data.ByteString as BS
30import qualified Data.ByteString as BS
31+import qualified Data.ByteString.Char8 as B8
31import qualified Data.ByteString.Lazy as BL
32import qualified Data.ByteString.Lazy as BL
32import Data.Char (toLower)
33import Data.Char (toLower)
33import Data.Maybe (fromMaybe, isJust, isNothing)
34import Data.Maybe (fromMaybe, isJust, isNothing)
@@ -45,6 +46,7 @@ import System.FilePath ( takeBaseName, takeExtension )
45import System.IO (nativeNewline, stdout)
46import System.IO (nativeNewline, stdout)
46import qualified System.IO as IO (Newline (..))
47import qualified System.IO as IO (Newline (..))
47import Text.Pandoc
48import Text.Pandoc
49+import Text.Pandoc.MIME (getCharset)
48import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)
50import Text.Pandoc.App.FormatHeuristics (formatFromFilePaths)
49import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), defaultOpts,
51import Text.Pandoc.App.Opt (Opt (..), LineEnding (..), defaultOpts,
50 IpynbOutput (..) )
52 IpynbOutput (..) )
@@ -344,7 +346,13 @@ readSource src = case parseURI src of
344 _ -> PandocAppError (tshow e))
346 _ -> PandocAppError (tshow e))
345
347
346readURI :: FilePath -> PandocIO Text
348readURI :: FilePath -> PandocIO Text
349+readURI src = do
347−readURI src = UTF8.toText . fst <$> openURL (T.pack src)
350+ (bs, mt) <- openURL (T.pack src)
351+ case mt >>= getCharset of
352+ Just "UTF-8" -> return $ UTF8.toText bs
353+ Just "ISO-8859-1" -> return $ T.pack $ B8.unpack bs
354+ Just charset -> throwError $ PandocUnsupportedCharsetError charset
355+ Nothing -> return $ UTF8.toText bs
348
356
349readFile' :: MonadIO m => FilePath -> m BL.ByteString
357readFile' :: MonadIO m => FilePath -> m BL.ByteString
350readFile' "-" = liftIO BL.getContents
358readFile' "-" = liftIO BL.getContents