@@ -76,7 +76,6 @@ module Text.Pandoc.Shared (
76 renderTags',
76 renderTags',
77 -- * File handling
77 -- * File handling
78 inDirectory,
78 inDirectory,
80 collapseFilePath,
79 collapseFilePath,
81 filteredFilesFromArchive,
80 filteredFilesFromArchive,
82 -- * URI handling
81 -- * URI handling
@@ -98,19 +97,17 @@ import Text.Pandoc.Definition
98import Text.Pandoc.Walk
97import Text.Pandoc.Walk
99import Text.Pandoc.Builder (Inlines, Blocks, ToMetaValue(..))
98import Text.Pandoc.Builder (Inlines, Blocks, ToMetaValue(..))
100import qualified Text.Pandoc.Builder as B
99import qualified Text.Pandoc.Builder as B
101−import qualified Text.Pandoc.UTF8 as UTF8
102import Data.Char ( toLower, isLower, isUpper, isAlpha,
100import Data.Char ( toLower, isLower, isUpper, isAlpha,
103 isLetter, isDigit, isSpace )
101 isLetter, isDigit, isSpace )
104import Data.List ( find, stripPrefix, intercalate )
102import Data.List ( find, stripPrefix, intercalate )
105import Data.Maybe (mapMaybe)
103import Data.Maybe (mapMaybe)
106import Data.Version ( showVersion )
104import Data.Version ( showVersion )
107import qualified Data.Map as M
105import qualified Data.Map as M
108−import Network.URI ( URI(uriScheme), escapeURIString, unEscapeString, parseURI )
106+import Network.URI ( URI(uriScheme), escapeURIString, parseURI )
109import qualified Data.Set as Set
107import qualified Data.Set as Set
110import System.Directory
108import System.Directory
111import System.FilePath (splitDirectories, isPathSeparator)
109import System.FilePath (splitDirectories, isPathSeparator)
112import qualified System.FilePath.Posix as Posix
110import qualified System.FilePath.Posix as Posix
113−import Text.Pandoc.MIME (MimeType)
114import Data.Generics (Typeable, Data)
111import Data.Generics (Typeable, Data)
115import qualified Control.Monad.State.Strict as S
112import qualified Control.Monad.State.Strict as S
116import qualified Control.Exception as E
113import qualified Control.Exception as E
@@ -118,33 +115,16 @@ import Control.Monad (msum, unless, MonadPlus(..))
118import Text.Pandoc.Pretty (charWidth)
115import Text.Pandoc.Pretty (charWidth)
119import Text.Pandoc.Generic (bottomUp)
116import Text.Pandoc.Generic (bottomUp)
120import Text.Pandoc.Compat.Time
117import Text.Pandoc.Compat.Time
121−import System.IO.Error
122import System.IO.Temp
118import System.IO.Temp
123import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
119import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),
124 renderOptions)
120 renderOptions)
125import Data.Monoid ((<>))
121import Data.Monoid ((<>))
126−import qualified Data.ByteString as BS
127−import qualified Data.ByteString.Char8 as B8
128−import Data.ByteString.Base64 (decodeLenient)
129import Data.Sequence (ViewR(..), ViewL(..), viewl, viewr)
122import Data.Sequence (ViewR(..), ViewL(..), viewl, viewr)
130import qualified Data.Text as T
123import qualified Data.Text as T
131−import Data.ByteString.Lazy (toChunks)
132import qualified Data.ByteString.Lazy as BL
124import qualified Data.ByteString.Lazy as BL
133import Paths_pandoc (version)
125import Paths_pandoc (version)
135import Codec.Archive.Zip
126import Codec.Archive.Zip
137−import Network.HTTP.Client (httpLbs, responseBody, responseHeaders,
138− Request(port,host,requestHeaders),
140−import Network.HTTP.Client (parseRequest)
141−import Network.HTTP.Client (newManager)
142−import Network.HTTP.Client.Internal (addProxy)
143−import Network.HTTP.Client.TLS (tlsManagerSettings)
144−import System.Environment (getEnv)
145−import Network.HTTP.Types.Header ( hContentType, hUserAgent)
146−import Network (withSocketsDo)
148-- | Version number of pandoc library.
128-- | Version number of pandoc library.
149pandocVersion :: String
129pandocVersion :: String
150pandocVersion = showVersion version
130pandocVersion = showVersion version
@@ -606,36 +586,6 @@ inDirectory path action = E.bracket
606 setCurrentDirectory
586 setCurrentDirectory
607 (const $ setCurrentDirectory path >> action)
587 (const $ setCurrentDirectory path >> action)
609−-- | Read from a URL and return raw data and maybe mime type.
610−openURL :: String -> IO (Either HttpException (BS.ByteString, Maybe MimeType))
612− | Just u'' <- stripPrefix "data:" u =
613− let mime = takeWhile (/=',') u''
614− contents = B8.pack $ unEscapeString $ drop 1 $ dropWhile (/=',') u''
615− in return $ Right (decodeLenient contents, Just mime)
616− | otherwise = E.try $ withSocketsDo $ do
617− let parseReq = parseRequest
618− (proxy :: Either IOError String) <-
619− tryIOError $ getEnv "http_proxy"
620− (useragent :: Either IOError String) <-
621− tryIOError $ getEnv "USER_AGENT"
623− req' <- case proxy of
624− Left _ -> return req
625− Right pr -> (parseReq pr >>= \r ->
626− return $ addProxy (host r) (port r) req)
628− req'' <- case useragent of
629− Left _ -> return req'
631− let headers = requestHeaders req'
632− let useragentheader = (hUserAgent, B8.pack ua)
633− let headers' = useragentheader:headers
634− return $ req' {requestHeaders = headers'}
635− resp <- newManager tlsManagerSettings >>= httpLbs req''
636− return (BS.concat $ toChunks $ responseBody resp,
637− UTF8.toString `fmap` lookup hContentType (responseHeaders resp))
640-- Error reporting
590-- Error reporting