aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn MacFarlane <fiddlosopher@gmail.com>2013-05-22 14:51:47 -0700
committerJohn MacFarlane <fiddlosopher@gmail.com>2013-05-22 14:51:47 -0700
commitf8e6f9c215c6df318c608d632ca8283406d16c0d (patch)
tree80fd45dd14ddec8d6037e738c50c6eb44b34aa67
parent210855e03e9389f8818870e20ca9a4f63d38ca8b (diff)
downloadpandoc-f8e6f9c215c6df318c608d632ca8283406d16c0d.tar.gz
EPUB writer: math with `--webtex` is automatically made self-contained.
And some code cleanup.
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index fc8d041f4..01318ce00 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE PatternGuards #-}
{-
Copyright (C) 2010 John MacFarlane <jgm@berkeley.edu>
@@ -30,7 +31,7 @@ Conversion of 'Pandoc' documents to EPUB.
module Text.Pandoc.Writers.EPUB ( writeEPUB ) where
import Data.IORef
import Data.Maybe ( fromMaybe, isNothing )
-import Data.List ( isInfixOf, intercalate, isPrefixOf )
+import Data.List ( isInfixOf, intercalate )
import System.Environment ( getEnv )
import Text.Printf (printf)
import System.FilePath ( (</>), takeBaseName, takeExtension, takeFileName )
@@ -53,7 +54,7 @@ import Text.Pandoc.UUID
import Text.Pandoc.Writers.HTML
import Text.Pandoc.Writers.Markdown ( writePlain )
import Data.Char ( toLower )
-import Network.URI ( unEscapeString )
+import Network.URI ( isAbsoluteURI, unEscapeString )
import Text.Pandoc.MIME (getMimeType)
import Prelude hiding (catch)
import Control.Exception (catch, SomeException)
@@ -116,7 +117,7 @@ writeEPUB opts doc@(Pandoc meta _) = do
-- handle pictures
picsRef <- newIORef []
Pandoc _ blocks <- bottomUpM
- (transformInline (writerHTMLMathMethod opts') sourceDir picsRef) doc
+ (transformInline opts' sourceDir picsRef) doc
pics <- readIORef picsRef
let readPicEntry (oldsrc, newsrc) = do
(img,_) <- fetchItem sourceDir oldsrc
@@ -405,17 +406,16 @@ metadataElement version metadataXML uuid lang title authors date currentTime mbC
showDateTimeISO8601 :: UTCTime -> String
showDateTimeISO8601 = formatTime defaultTimeLocale "%FT%TZ"
-transformInline :: HTMLMathMethod
+transformInline :: WriterOptions
-> FilePath
-> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) images
-> Inline
-> IO Inline
-transformInline _ sourceDir picsRef (Image lab (src,tit))
- | "http://chart.apis.google.com" `isPrefixOf` src = do
- raw <- makeSelfContained Nothing $
- writeHtmlInline def (Image lab (src,tit))
- return (RawInline "html" raw)
- | isNothing (imageTypeOf src) = return $ Emph lab
+transformInline opts sourceDir picsRef (Image lab (src,tit))
+ | isAbsoluteURI src = do
+ raw <- makeSelfContained Nothing
+ $ writeHtmlInline opts (Image lab (src,tit))
+ return $ RawInline "html" raw
| otherwise = do
let src' = unEscapeString src
pics <- readIORef picsRef
@@ -428,17 +428,16 @@ transformInline _ sourceDir picsRef (Image lab (src,tit))
modifyIORef picsRef ( (oldsrc, new): )
return new
return $ Image lab (newsrc, tit)
-transformInline (MathML _) _ _ (x@(Math _ _)) = do
- -- note: ideally we'd use a switch statement to provide a fallback
- -- but switch does not seem to be widely implemented yet, so we just
- -- provide the mathml
- let result = writeHtmlInline def{writerHTMLMathMethod = MathML Nothing } x
- return $ RawInline "html" result
+transformInline opts _ _ (x@(Math _ _))
+ | WebTeX _ <- writerHTMLMathMethod opts = do
+ raw <- makeSelfContained Nothing $ writeHtmlInline opts x
+ return $ RawInline "html" raw
transformInline _ _ _ x = return x
writeHtmlInline :: WriterOptions -> Inline -> String
writeHtmlInline opts z = trimr $
- writeHtmlString opts $ Pandoc (Meta [] [] []) [Plain [z]]
+ writeHtmlString opts{ writerStandalone = False }
+ $ Pandoc (Meta [] [] []) [Plain [z]]
(!) :: Node t => (t -> Element) -> [(String, String)] -> t -> Element
(!) f attrs n = add_attrs (map (\(k,v) -> Attr (unqual k) v) attrs) (f n)