diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Text/Pandoc/SelfContained.hs | 141 |
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 |