aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Text/Pandoc/SelfContained.hs141
1 files changed, 6 insertions, 135 deletions
diff --git a/src/Text/Pandoc/SelfContained.hs b/src/Text/Pandoc/SelfContained.hs
index 269d9eb06..9c609b8fe 100644
--- a/src/Text/Pandoc/SelfContained.hs
+++ b/src/Text/Pandoc/SelfContained.hs
@@ -43,6 +43,7 @@ import Data.Char (toLower, isAscii, isAlphaNum)
import Codec.Compression.GZip as Gzip
import qualified Data.ByteString.Lazy as L
import Text.Pandoc.Shared (findDataFile)
+import Text.Pandoc.MIME (getMimeType)
import System.Directory (doesFileExist)
getItem :: Maybe FilePath -> String -> IO (ByteString, Maybe String)
@@ -50,21 +51,21 @@ getItem userdata f =
if isAbsoluteURI f
then openURL f
else do
- let ext = case takeExtension f of
- ".gz" -> takeExtension $ dropExtension f
- x -> x
+ let mime = case takeExtension f of
+ ".gz" -> getMimeType $ dropExtension f
+ x -> getMimeType x
exists <- doesFileExist f
if exists
then do
cont <- B.readFile f
- return (cont, mimeTypeFor ext)
+ return (cont, mime)
else do
res <- findDataFile userdata f
exists' <- doesFileExist res
if exists'
then do
cont <- B.readFile res
- return (cont, mimeTypeFor ext)
+ return (cont, mime)
else error $ "Could not find `" ++ f ++ "'"
-- TODO - have this return mime type too - then it can work for google
@@ -77,136 +78,6 @@ openURL u = getBodyAndMimeType =<< simpleHTTP (getReq u)
getBodyAndMimeType (Left err) = fail (show err)
getBodyAndMimeType (Right r) = return (rspBody r, findHeader HdrContentType r)
-mimeTypeFor :: String -> Maybe String
-mimeTypeFor s = lookup (map toLower s) mimetypes
- where mimetypes = [ -- taken from MissingH
- (".a", "application/octet-stream"),
- (".ai", "application/postscript"),
- (".aif", "audio/x-aiff"),
- (".aifc", "audio/x-aiff"),
- (".aiff", "audio/x-aiff"),
- (".au", "audio/basic"),
- (".avi", "video/x-msvideo"),
- (".bat", "text/plain"),
- (".bcpio", "application/x-bcpio"),
- (".bin", "application/octet-stream"),
- (".bmp", "image/x-ms-bmp"),
- (".c", "text/plain"),
- (".cdf", "application/x-netcdf"),
- (".cpio", "application/x-cpio"),
- (".csh", "application/x-csh"),
- (".css", "text/css"),
- (".dll", "application/octet-stream"),
- (".doc", "application/msword"),
- (".dot", "application/msword"),
- (".dvi", "application/x-dvi"),
- (".eml", "message/rfc822"),
- (".eps", "application/postscript"),
- (".etx", "text/x-setext"),
- (".exe", "application/octet-stream"),
- (".gif", "image/gif"),
- (".gtar", "application/x-gtar"),
- (".h", "text/plain"),
- (".hdf", "application/x-hdf"),
- (".htm", "text/html"),
- (".html", "text/html"),
- (".ief", "image/ief"),
- (".jpe", "image/jpeg"),
- (".jpeg", "image/jpeg"),
- (".jpg", "image/jpeg"),
- (".js", "application/x-javascript"),
- (".ksh", "text/plain"),
- (".latex", "application/x-latex"),
- (".m1v", "video/mpeg"),
- (".man", "application/x-troff-man"),
- (".me", "application/x-troff-me"),
- (".mht", "message/rfc822"),
- (".mhtml", "message/rfc822"),
- (".mif", "application/x-mif"),
- (".mov", "video/quicktime"),
- (".movie", "video/x-sgi-movie"),
- (".mp2", "audio/mpeg"),
- (".mp3", "audio/mpeg"),
- (".mpa", "video/mpeg"),
- (".mpe", "video/mpeg"),
- (".mpeg", "video/mpeg"),
- (".mpg", "video/mpeg"),
- (".ms", "application/x-troff-ms"),
- (".nc", "application/x-netcdf"),
- (".nws", "message/rfc822"),
- (".o", "application/octet-stream"),
- (".obj", "application/octet-stream"),
- (".oda", "application/oda"),
- (".p12", "application/x-pkcs12"),
- (".p7c", "application/pkcs7-mime"),
- (".pbm", "image/x-portable-bitmap"),
- (".pdf", "application/pdf"),
- (".pfx", "application/x-pkcs12"),
- (".pgm", "image/x-portable-graymap"),
- (".pl", "text/plain"),
- (".png", "image/png"),
- (".pnm", "image/x-portable-anymap"),
- (".pot", "application/vnd.ms-powerpoint"),
- (".ppa", "application/vnd.ms-powerpoint"),
- (".ppm", "image/x-portable-pixmap"),
- (".pps", "application/vnd.ms-powerpoint"),
- (".ppt", "application/vnd.ms-powerpoint"),
- (".ps", "application/postscript"),
- (".pwz", "application/vnd.ms-powerpoint"),
- (".py", "text/x-python"),
- (".pyc", "application/x-python-code"),
- (".pyo", "application/x-python-code"),
- (".qt", "video/quicktime"),
- (".ra", "audio/x-pn-realaudio"),
- (".ram", "application/x-pn-realaudio"),
- (".ras", "image/x-cmu-raster"),
- (".rdf", "application/xml"),
- (".rgb", "image/x-rgb"),
- (".roff", "application/x-troff"),
- (".rtx", "text/richtext"),
- (".sgm", "text/x-sgml"),
- (".sgml", "text/x-sgml"),
- (".sh", "application/x-sh"),
- (".shar", "application/x-shar"),
- (".snd", "audio/basic"),
- (".so", "application/octet-stream"),
- (".src", "application/x-wais-source"),
- (".sv4cpio", "application/x-sv4cpio"),
- (".sv4crc", "application/x-sv4crc"),
- (".swf", "application/x-shockwave-flash"),
- (".t", "application/x-troff"),
- (".tar", "application/x-tar"),
- (".tcl", "application/x-tcl"),
- (".tex", "application/x-tex"),
- (".texi", "application/x-texinfo"),
- (".texinfo", "application/x-texinfo"),
- (".tif", "image/tiff"),
- (".tiff", "image/tiff"),
- (".tr", "application/x-troff"),
- (".tsv", "text/tab-separated-values"),
- (".txt", "text/plain"),
- (".ustar", "application/x-ustar"),
- (".vcf", "text/x-vcard"),
- (".wav", "audio/x-wav"),
- (".wiz", "application/msword"),
- (".xbm", "image/x-xbitmap"),
- (".xlb", "application/vnd.ms-excel"),
- (".xls", "application/vnd.ms-excel"),
- (".xml", "text/xml"),
- (".xpm", "image/x-xpixmap"),
- (".xsl", "application/xml"),
- (".xwd", "image/x-xwindowdump"),
- (".zip", "application/zip"),
- (".jpg", "image/jpg"),
- (".mid", "audio/midi"),
- (".midi", "audio/midi"),
- (".pct", "image/pict"),
- (".pic", "image/pict"),
- (".pict", "image/pict"),
- (".rtf", "application/rtf"),
- (".xul", "text/xul")
- ]
-
isOk :: Char -> Bool
isOk c = isAscii c && isAlphaNum c