aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordespresc <[email protected]>2019-11-05 15:13:45 -0500
committerdespresc <[email protected]>2019-11-08 15:45:02 -0500
commitdb6a63d1ff3f48317cb7e71afcda6ddc8bcf66bc (patch)
treef4fc90f9cb1feae5e44e01851612be29b11b81c4
parentaab8f811ca7d893465459173e176e894cb194d08 (diff)
Switch MIME to Text, add Legacy
-rw-r--r--pandoc.cabal1
-rw-r--r--src/Text/Pandoc/Class.hs2
-rw-r--r--src/Text/Pandoc/Legacy/MIME.hs24
-rw-r--r--src/Text/Pandoc/Lua/Marshaling/MediaBag.hs2
-rw-r--r--src/Text/Pandoc/Lua/Module/MediaBag.hs2
-rw-r--r--src/Text/Pandoc/MIME.hs22
-rw-r--r--src/Text/Pandoc/MediaBag.hs2
-rw-r--r--src/Text/Pandoc/PDF.hs2
-rw-r--r--src/Text/Pandoc/Readers/EPUB.hs2
-rw-r--r--src/Text/Pandoc/Readers/Ipynb.hs2
-rw-r--r--src/Text/Pandoc/SelfContained.hs2
-rw-r--r--src/Text/Pandoc/Writers/Docx.hs2
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs2
-rw-r--r--src/Text/Pandoc/Writers/HTML.hs2
-rw-r--r--src/Text/Pandoc/Writers/JATS.hs2
-rw-r--r--src/Text/Pandoc/Writers/ODT.hs2
-rw-r--r--src/Text/Pandoc/Writers/Powerpoint/Output.hs2
17 files changed, 50 insertions, 25 deletions
diff --git a/pandoc.cabal b/pandoc.cabal
index 6e399ce82..1ca4fd260 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -555,6 +555,7 @@ library
, Text.Pandoc.Legacy.Highlighting
, Text.Pandoc.Legacy.Translations
, Text.Pandoc.Legacy.Logging
+ , Text.Pandoc.Legacy.MIME
--
other-modules: Text.Pandoc.App.CommandLineOptions,
Text.Pandoc.App.FormatHeuristics,
diff --git a/src/Text/Pandoc/Class.hs b/src/Text/Pandoc/Class.hs
index a5559d36c..b328f4041 100644
--- a/src/Text/Pandoc/Class.hs
+++ b/src/Text/Pandoc/Class.hs
@@ -88,7 +88,7 @@ import Text.Pandoc.Legacy.Logging
import Text.Pandoc.Legacy.Shared (uriPathToPath) -- TODO text: remove Legacy
import Text.Parsec (ParsecT, getPosition, sourceLine, sourceName)
import qualified Data.Time as IO (getCurrentTime)
-import Text.Pandoc.MIME (MimeType, getMimeType, extensionFromMimeType)
+import Text.Pandoc.Legacy.MIME (MimeType, getMimeType, extensionFromMimeType)
import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Text.DocTemplates (TemplateMonad(..))
import Data.Digest.Pure.SHA (sha1, showDigest)
diff --git a/src/Text/Pandoc/Legacy/MIME.hs b/src/Text/Pandoc/Legacy/MIME.hs
new file mode 100644
index 000000000..40a327b12
--- /dev/null
+++ b/src/Text/Pandoc/Legacy/MIME.hs
@@ -0,0 +1,24 @@
+module Text.Pandoc.Legacy.MIME
+ ( MimeType
+ , getMimeType
+ , getMimeTypeDef
+ , extensionFromMimeType
+ , mediaCategory
+ ) where
+
+import qualified Data.Text as T
+import qualified Text.Pandoc.MIME as TP
+
+type MimeType = String
+
+getMimeType :: FilePath -> Maybe MimeType
+getMimeType = fmap T.unpack . TP.getMimeType
+
+getMimeTypeDef :: FilePath -> MimeType
+getMimeTypeDef = T.unpack . TP.getMimeTypeDef
+
+extensionFromMimeType :: MimeType -> Maybe String
+extensionFromMimeType = fmap T.unpack . TP.extensionFromMimeType . T.pack
+
+mediaCategory :: FilePath -> Maybe String
+mediaCategory = fmap T.unpack . TP.mediaCategory
diff --git a/src/Text/Pandoc/Lua/Marshaling/MediaBag.hs b/src/Text/Pandoc/Lua/Marshaling/MediaBag.hs
index 816843c1d..fa051b923 100644
--- a/src/Text/Pandoc/Lua/Marshaling/MediaBag.hs
+++ b/src/Text/Pandoc/Lua/Marshaling/MediaBag.hs
@@ -19,7 +19,7 @@ import Foreign.Lua.Types.Peekable (reportValueOnFailure)
import Foreign.Lua.Userdata (ensureUserdataMetatable, pushAnyWithMetatable,
toAnyWithName)
import Text.Pandoc.MediaBag (MediaBag, mediaItems)
-import Text.Pandoc.MIME (MimeType)
+import Text.Pandoc.Legacy.MIME (MimeType)
import Text.Pandoc.Lua.Marshaling.AnyValue (AnyValue (..))
import qualified Data.ByteString.Lazy as BL
diff --git a/src/Text/Pandoc/Lua/Module/MediaBag.hs b/src/Text/Pandoc/Lua/Module/MediaBag.hs
index 261785665..d1a63d5c0 100644
--- a/src/Text/Pandoc/Lua/Module/MediaBag.hs
+++ b/src/Text/Pandoc/Lua/Module/MediaBag.hs
@@ -22,7 +22,7 @@ import Text.Pandoc.Class (CommonState (..), fetchItem, putCommonState,
import Text.Pandoc.Lua.Marshaling ()
import Text.Pandoc.Lua.Marshaling.MediaBag (pushIterator)
import Text.Pandoc.Lua.Util (addFunction)
-import Text.Pandoc.MIME (MimeType)
+import Text.Pandoc.Legacy.MIME (MimeType)
import qualified Data.ByteString.Lazy as BL
import qualified Foreign.Lua as Lua
diff --git a/src/Text/Pandoc/MIME.hs b/src/Text/Pandoc/MIME.hs
index ee0fe3efb..77f4c4b96 100644
--- a/src/Text/Pandoc/MIME.hs
+++ b/src/Text/Pandoc/MIME.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.MIME
Copyright : Copyright (C) 2011-2019 John MacFarlane
@@ -13,14 +14,13 @@ Mime type lookup for ODT writer.
module Text.Pandoc.MIME ( MimeType, getMimeType, getMimeTypeDef,
extensionFromMimeType, mediaCategory ) where
import Prelude
-import Data.Char (toLower)
import Data.List (isPrefixOf, isSuffixOf)
-import Data.List.Split (splitOn)
import qualified Data.Map as M
+import qualified Data.Text as T
import Data.Maybe (fromMaybe, listToMaybe)
import System.FilePath
-type MimeType = String
+type MimeType = T.Text
-- | Determine mime type appropriate for file path.
getMimeType :: FilePath -> Maybe MimeType
@@ -31,34 +31,34 @@ getMimeType fp
| "Formula-" `isPrefixOf` fp && "/" `isSuffixOf` fp =
Just "application/vnd.oasis.opendocument.formula"
-- generic
- | otherwise = M.lookup (map toLower $ drop 1 $ takeExtension fp) mimeTypes
+ | otherwise = M.lookup (T.toLower $ T.drop 1 $ T.pack $ takeExtension fp) mimeTypes
-- | Determime mime type appropriate for file path, defaulting to
-- “application/octet-stream” if nothing else fits.
getMimeTypeDef :: FilePath -> MimeType
getMimeTypeDef = fromMaybe "application/octet-stream" . getMimeType
-extensionFromMimeType :: MimeType -> Maybe String
+extensionFromMimeType :: MimeType -> Maybe T.Text
extensionFromMimeType mimetype =
- M.lookup (takeWhile (/=';') mimetype) reverseMimeTypes
+ M.lookup (T.takeWhile (/=';') mimetype) reverseMimeTypes
-- note: we just look up the basic mime type, dropping the content-encoding etc.
-- | Determine general media category for file path, e.g.
--
-- prop> mediaCategory "foo.jpg" = Just "image"
-mediaCategory :: FilePath -> Maybe String
-mediaCategory fp = getMimeType fp >>= listToMaybe . splitOn "/"
+mediaCategory :: FilePath -> Maybe T.Text
+mediaCategory fp = getMimeType fp >>= listToMaybe . T.splitOn "/"
-reverseMimeTypes :: M.Map MimeType String
+reverseMimeTypes :: M.Map MimeType T.Text
reverseMimeTypes = M.fromList $ map (\(k,v) -> (v,k)) mimeTypesList
-mimeTypes :: M.Map String MimeType
+mimeTypes :: M.Map T.Text MimeType
mimeTypes = M.fromList mimeTypesList
-- | Collection of common mime types.
-- Except for first entry, list borrowed from
-- <https://github.com/Happstack/happstack-server/blob/master/src/Happstack/Server/FileServe/BuildingBlocks.hs happstack-server>
-mimeTypesList :: [(String, MimeType)]
+mimeTypesList :: [(T.Text, MimeType)]
mimeTypesList =
[("cpt","image/x-corelphotopaint")
,("gz","application/x-gzip")
diff --git a/src/Text/Pandoc/MediaBag.hs b/src/Text/Pandoc/MediaBag.hs
index bb6fc88ac..9325aa725 100644
--- a/src/Text/Pandoc/MediaBag.hs
+++ b/src/Text/Pandoc/MediaBag.hs
@@ -30,7 +30,7 @@ import Data.Maybe (fromMaybe)
import Data.Typeable (Typeable)
import System.FilePath
import qualified System.FilePath.Posix as Posix
-import Text.Pandoc.MIME (MimeType, getMimeTypeDef)
+import Text.Pandoc.Legacy.MIME (MimeType, getMimeTypeDef)
-- | A container for a collection of binary resources, with names and
-- mime types. Note that a 'MediaBag' is a Monoid, so 'mempty'
diff --git a/src/Text/Pandoc/PDF.hs b/src/Text/Pandoc/PDF.hs
index ebc1b8edd..0752c3809 100644
--- a/src/Text/Pandoc/PDF.hs
+++ b/src/Text/Pandoc/PDF.hs
@@ -42,7 +42,7 @@ import qualified System.IO.Error as IE
import Text.DocLayout (literal)
import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Text.Pandoc.Error (PandocError (PandocPDFProgramNotFoundError))
-import Text.Pandoc.MIME (getMimeType)
+import Text.Pandoc.Legacy.MIME (getMimeType)
import Text.Pandoc.Options (HTMLMathMethod (..), WriterOptions (..))
import Text.Pandoc.Process (pipeProcess)
import System.Process (readProcessWithExitCode)
diff --git a/src/Text/Pandoc/Readers/EPUB.hs b/src/Text/Pandoc/Readers/EPUB.hs
index 0c87d3942..8503aae03 100644
--- a/src/Text/Pandoc/Readers/EPUB.hs
+++ b/src/Text/Pandoc/Readers/EPUB.hs
@@ -37,7 +37,7 @@ import Text.Pandoc.Class (PandocMonad, insertMedia)
import Text.Pandoc.Legacy.Definition hiding (Attr) -- TODO text: remove Legacy
import Text.Pandoc.Error
import Text.Pandoc.Extensions (Extension (Ext_raw_html), enableExtension)
-import Text.Pandoc.MIME (MimeType)
+import Text.Pandoc.Legacy.MIME (MimeType)
import Text.Pandoc.Options (ReaderOptions (..))
import Text.Pandoc.Readers.HTML (readHtml)
import Text.Pandoc.Legacy.Shared (addMetaField, collapseFilePath, escapeURI)
diff --git a/src/Text/Pandoc/Readers/Ipynb.hs b/src/Text/Pandoc/Readers/Ipynb.hs
index f676a8895..979fce63c 100644
--- a/src/Text/Pandoc/Readers/Ipynb.hs
+++ b/src/Text/Pandoc/Readers/Ipynb.hs
@@ -29,7 +29,7 @@ import Text.Pandoc.Legacy.Logging
import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Data.Ipynb as Ipynb
import Text.Pandoc.Class
-import Text.Pandoc.MIME (extensionFromMimeType)
+import Text.Pandoc.Legacy.MIME (extensionFromMimeType)
import Text.Pandoc.UTF8
import Text.Pandoc.Walk (walk)
import Text.Pandoc.Error
diff --git a/src/Text/Pandoc/SelfContained.hs b/src/Text/Pandoc/SelfContained.hs
index 931113841..7368c1d6a 100644
--- a/src/Text/Pandoc/SelfContained.hs
+++ b/src/Text/Pandoc/SelfContained.hs
@@ -33,7 +33,7 @@ import Text.Pandoc.Class (PandocMonad (..), fetchItem, getInputFiles, report,
setInputFiles)
import Text.Pandoc.Error
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (MimeType)
+import Text.Pandoc.Legacy.MIME (MimeType)
import Text.Pandoc.Legacy.Shared (isURI, renderTags', trim)
import Text.Pandoc.UTF8 (toString)
import Text.Parsec (ParsecT, runParserT)
diff --git a/src/Text/Pandoc/Writers/Docx.hs b/src/Text/Pandoc/Writers/Docx.hs
index fc7c362ea..8936cc1c3 100644
--- a/src/Text/Pandoc/Writers/Docx.hs
+++ b/src/Text/Pandoc/Writers/Docx.hs
@@ -47,7 +47,7 @@ import Text.Pandoc.Legacy.Highlighting (highlight)
import Text.Pandoc.Error
import Text.Pandoc.ImageSize
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (MimeType, extensionFromMimeType, getMimeType,
+import Text.Pandoc.Legacy.MIME (MimeType, extensionFromMimeType, getMimeType,
getMimeTypeDef)
import Text.Pandoc.Options
import Text.Pandoc.Writers.Docx.StyleMap
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index 619fd902c..75061403a 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -44,7 +44,7 @@ import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Text.Pandoc.Error
import Text.Pandoc.ImageSize
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (MimeType, extensionFromMimeType, getMimeType)
+import Text.Pandoc.Legacy.MIME (MimeType, extensionFromMimeType, getMimeType)
import Text.Pandoc.Options (EPUBVersion (..), HTMLMathMethod (..),
ObfuscationMethod (NoObfuscation), WrapOption (..),
WriterOptions (..))
diff --git a/src/Text/Pandoc/Writers/HTML.hs b/src/Text/Pandoc/Writers/HTML.hs
index 1b00f61b6..370133ddb 100644
--- a/src/Text/Pandoc/Writers/HTML.hs
+++ b/src/Text/Pandoc/Writers/HTML.hs
@@ -83,7 +83,7 @@ import qualified Text.Blaze.XHtml1.Transitional.Attributes as A
import Text.Pandoc.Class (PandocMonad, report, runPure)
import Text.Pandoc.Error
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (mediaCategory)
+import Text.Pandoc.Legacy.MIME (mediaCategory)
import Text.TeXMath
import Text.XML.Light (elChildren, unode, unqual)
import qualified Text.XML.Light as XML
diff --git a/src/Text/Pandoc/Writers/JATS.hs b/src/Text/Pandoc/Writers/JATS.hs
index 6ce02f4df..6afa5cf9f 100644
--- a/src/Text/Pandoc/Writers/JATS.hs
+++ b/src/Text/Pandoc/Writers/JATS.hs
@@ -30,7 +30,7 @@ import Text.Pandoc.Class (PandocMonad, report)
import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Text.Pandoc.Legacy.Highlighting (languages, languagesByExtension)
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (getMimeType)
+import Text.Pandoc.Legacy.MIME (getMimeType)
import Text.Pandoc.Walk (walk)
import Text.Pandoc.Options
import Text.DocLayout
diff --git a/src/Text/Pandoc/Writers/ODT.hs b/src/Text/Pandoc/Writers/ODT.hs
index 9588823d6..bc9526ebb 100644
--- a/src/Text/Pandoc/Writers/ODT.hs
+++ b/src/Text/Pandoc/Writers/ODT.hs
@@ -30,7 +30,7 @@ import qualified Text.Pandoc.Class as P
import Text.Pandoc.Legacy.Definition -- TODO text: remove Legacy
import Text.Pandoc.ImageSize
import Text.Pandoc.Legacy.Logging
-import Text.Pandoc.MIME (extensionFromMimeType, getMimeType)
+import Text.Pandoc.Legacy.MIME (extensionFromMimeType, getMimeType)
import Text.Pandoc.Options (WrapOption (..), WriterOptions (..))
import Text.DocLayout
import Text.Pandoc.Legacy.Shared -- TODO text: remove Legacy (stringify, pandocVersion)
diff --git a/src/Text/Pandoc/Writers/Powerpoint/Output.hs b/src/Text/Pandoc/Writers/Powerpoint/Output.hs
index 7c46aefd3..86a0f9dd9 100644
--- a/src/Text/Pandoc/Writers/Powerpoint/Output.hs
+++ b/src/Text/Pandoc/Writers/Powerpoint/Output.hs
@@ -37,7 +37,7 @@ import Text.Pandoc.Class (PandocMonad)
import Text.Pandoc.Error (PandocError(..))
import qualified Text.Pandoc.Class as P
import Text.Pandoc.Options
-import Text.Pandoc.MIME
+import Text.Pandoc.Legacy.MIME
import qualified Data.ByteString.Lazy as BL
import Text.Pandoc.Writers.OOXML
import qualified Data.Map as M