diff options
| author | John MacFarlane <[email protected]> | 2025-12-24 10:13:03 -0700 |
|---|---|---|
| committer | John MacFarlane <[email protected]> | 2025-12-24 11:00:25 -0700 |
| commit | 83692bbc50d46e157126099da84233deb6dc6574 (patch) | |
| tree | 30ee8f569121a989a3fa97d5331b06f3f4bcbdc2 /src | |
| parent | eef6cde22f868c82618bf9517f5281f28ed10ab0 (diff) | |
Add http cabal flag.
This allows pandoc to be compiled without support for making
HTTP requests, which is useful when WASM is the target.
Closes #10980.
Diffstat (limited to 'src')
| -rw-r--r-- | src/Text/Pandoc/Class/CommonState.hs | 7 | ||||
| -rw-r--r-- | src/Text/Pandoc/Class/IO.hs | 23 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/Text/Pandoc/Class/CommonState.hs b/src/Text/Pandoc/Class/CommonState.hs index e3c4efce9..27f9c7f16 100644 --- a/src/Text/Pandoc/Class/CommonState.hs +++ b/src/Text/Pandoc/Class/CommonState.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {- | Module : Text.Pandoc.Class.CommonState Copyright : Copyright (C) 2016-2020 Jesse Rosenthal, John MacFarlane @@ -23,7 +24,9 @@ import Text.Collate.Lang (Lang) import Text.Pandoc.MediaBag (MediaBag) import Text.Pandoc.Logging (LogMessage, Verbosity (WARNING)) import Text.Pandoc.Translations.Types (Translations) +#ifdef PANDOC_HTTP_SUPPORT import Network.HTTP.Client (Manager) +#endif -- | 'CommonState' represents state that is used by all -- instances of 'PandocMonad'. Normally users should not @@ -51,9 +54,11 @@ data CommonState = CommonState , stResourcePath :: [FilePath] -- ^ Path to search for resources like -- included images +#ifdef PANDOC_HTTP_SUPPORT , stManager :: Maybe Manager -- ^ Manager for HTTP client; this needs to persist across many requests -- for efficiency. +#endif , stVerbosity :: Verbosity -- ^ Verbosity level , stTrace :: Bool @@ -79,7 +84,9 @@ defaultCommonState = CommonState , stInputFiles = [] , stOutputFile = Nothing , stResourcePath = ["."] +#ifdef PANDOC_HTTP_SUPPORT , stManager = Nothing +#endif , stVerbosity = WARNING , stTrace = False } diff --git a/src/Text/Pandoc/Class/IO.hs b/src/Text/Pandoc/Class/IO.hs index 1a9dc2eae..4c0d7b1ab 100644 --- a/src/Text/Pandoc/Class/IO.hs +++ b/src/Text/Pandoc/Class/IO.hs @@ -38,13 +38,17 @@ module Text.Pandoc.Class.IO import Control.Monad.Except (throwError) import Control.Monad.IO.Class (MonadIO, liftIO) -import Data.ByteString.Lazy (toChunks) import Data.Text (Text, pack, unpack) import Data.Time (TimeZone, UTCTime) import Data.Unique (hashUnique) +#ifdef PANDOC_HTTP_SUPPORT +import Data.ByteString.Lazy (toChunks) +import System.Environment (getEnv) +import Data.Default (def) import Network.Connection (TLSSettings(..)) import qualified Network.TLS as TLS import qualified Network.TLS.Extra as TLS +import System.X509 (getSystemCertificateStore) import Network.HTTP.Client (httpLbs, Manager, responseBody, responseHeaders, Request(port, host, requestHeaders), parseUrlThrow, newManager, HttpException) @@ -52,17 +56,19 @@ import Network.HTTP.Client.Internal (addProxy) import Network.HTTP.Client.TLS (mkManagerSettings) import Network.HTTP.Types.Header ( hContentType ) import Network.Socket (withSocketsDo) +import Text.Pandoc.Class.CommonState (CommonState (..)) +import Text.Pandoc.Class.PandocMonad ( getsCommonState, modifyCommonState ) +import qualified Data.CaseInsensitive as CI +#endif import Network.URI (URI(..), parseURI, unEscapeString) import System.Directory (createDirectoryIfMissing) -import System.Environment (getEnv) import System.FilePath ((</>), takeDirectory, normalise) import qualified System.FilePath.Posix as Posix import System.IO (stderr) import System.IO.Error import System.Random (StdGen) -import Text.Pandoc.Class.CommonState (CommonState (..)) import Text.Pandoc.Class.PandocMonad - (PandocMonad, getsCommonState, modifyCommonState, + (PandocMonad, getMediaBag, report, extractURIData) import Text.Pandoc.Definition (Pandoc, Inline (Image)) import Text.Pandoc.Error (PandocError (..)) @@ -73,7 +79,6 @@ import Text.Pandoc.Walk (walk) import qualified Control.Exception as E import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL -import qualified Data.CaseInsensitive as CI import qualified Data.Text as T import qualified Data.Time import qualified Data.Time.LocalTime @@ -83,8 +88,6 @@ import qualified System.Environment as Env import qualified System.FilePath.Glob import qualified System.Random import qualified Text.Pandoc.UTF8 as UTF8 -import Data.Default (def) -import System.X509 (getSystemCertificateStore) #ifndef EMBED_DATA_FILES import qualified Paths_pandoc as Paths #endif @@ -125,6 +128,7 @@ newStdGen = liftIO System.Random.newStdGen newUniqueHash :: MonadIO m => m Int newUniqueHash = hashUnique <$> liftIO Data.Unique.newUnique +#ifdef PANDOC_HTTP_SUPPORT getManager :: (PandocMonad m, MonadIO m) => m Manager getManager = do mbManager <- getsCommonState stManager @@ -154,12 +158,14 @@ getManager = do newManager tlsManagerSettings modifyCommonState $ \st -> st{ stManager = Just manager } pure manager +#endif openURL :: (PandocMonad m, MonadIO m) => Text -> m (B.ByteString, Maybe MimeType) openURL u | Just (URI{ uriScheme = "data:", uriPath = upath }) <- parseURI (T.unpack u) = pure $ extractURIData upath +#ifdef PANDOC_HTTP_SUPPORT | otherwise = do let toReqHeader (n, v) = (CI.mk (UTF8.fromText n), UTF8.fromText v) customHeaders <- map toReqHeader <$> getsCommonState stRequestHeaders @@ -181,6 +187,9 @@ openURL u Right r -> return r Left (e :: HttpException) -> throwError $ PandocHttpError u (T.pack (show e)) +#else + | otherwise = error "Text.Pandoc.Class.IO.openURL" +#endif -- | Read the lazy ByteString contents from a file path, raising an error on -- failure. |
