summaryrefslogtreecommitdiff
path: root/src/Text
diff options
context:
space:
mode:
authorJohn MacFarlane <jgm@berkeley.edu>2017-01-26 20:39:32 +0100
committerJohn MacFarlane <jgm@berkeley.edu>2017-01-26 22:09:21 +0100
commit190943e1fd75b7fa30689387e4416dd81b584f5e (patch)
tree6ca98e8cd717ada5b6b664b9a08c653975e261f7 /src/Text
parentfce0a60f0a85d6c3a9e7633074ecd781af08c75b (diff)
EPUB writer: split writeEPUB into writeEPUB2, writeEPUB3.
Also include explicit epub2 output format in CLI tool.
Diffstat (limited to 'src/Text')
-rw-r--r--src/Text/Pandoc.hs12
-rw-r--r--src/Text/Pandoc/Templates.hs1
-rw-r--r--src/Text/Pandoc/Writers/EPUB.hs31
3 files changed, 32 insertions, 12 deletions
diff --git a/src/Text/Pandoc.hs b/src/Text/Pandoc.hs
index aa4cab840..449cab120 100644
--- a/src/Text/Pandoc.hs
+++ b/src/Text/Pandoc.hs
@@ -115,7 +115,8 @@ module Text.Pandoc
, writeRTF
, writeODT
, writeDocx
- , writeEPUB
+ , writeEPUB2
+ , writeEPUB3
, writeFB2
, writeOrg
, writeAsciiDoc
@@ -278,10 +279,9 @@ writers = [
,("json" , StringWriter $ \o d -> return $ writeJSON o d)
,("docx" , ByteStringWriter writeDocx)
,("odt" , ByteStringWriter writeODT)
- ,("epub" , ByteStringWriter $ \o ->
- writeEPUB o{ writerEpubVersion = Just EPUB2 })
- ,("epub3" , ByteStringWriter $ \o ->
- writeEPUB o{ writerEpubVersion = Just EPUB3 })
+ ,("epub" , ByteStringWriter writeEPUB2)
+ ,("epub2" , ByteStringWriter writeEPUB2)
+ ,("epub3" , ByteStringWriter writeEPUB3)
,("fb2" , StringWriter writeFB2)
,("html" , StringWriter writeHtml5String)
,("html4" , StringWriter writeHtml4String)
@@ -349,6 +349,8 @@ getDefaultExtensions "epub" = extensionsFromList
Ext_native_divs,
Ext_native_spans,
Ext_epub_html_exts]
+getDefaultExtensions "epub2" = getDefaultExtensions "epub"
+getDefaultExtensions "epub3" = getDefaultExtensions "epub"
getDefaultExtensions "latex" = extensionsFromList
[Ext_smart,
Ext_auto_identifiers]
diff --git a/src/Text/Pandoc/Templates.hs b/src/Text/Pandoc/Templates.hs
index 03dc917e6..38d956f1f 100644
--- a/src/Text/Pandoc/Templates.hs
+++ b/src/Text/Pandoc/Templates.hs
@@ -61,6 +61,7 @@ getDefaultTemplate user writer = do
"fb2" -> return $ Right ""
"odt" -> getDefaultTemplate user "opendocument"
"html" -> getDefaultTemplate user "html5"
+ "epub" -> getDefaultTemplate user "epub2"
"markdown_strict" -> getDefaultTemplate user "markdown"
"multimarkdown" -> getDefaultTemplate user "markdown"
"markdown_github" -> getDefaultTemplate user "markdown"
diff --git a/src/Text/Pandoc/Writers/EPUB.hs b/src/Text/Pandoc/Writers/EPUB.hs
index bd95c170e..c2fc4422e 100644
--- a/src/Text/Pandoc/Writers/EPUB.hs
+++ b/src/Text/Pandoc/Writers/EPUB.hs
@@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Conversion of 'Pandoc' documents to EPUB.
-}
-module Text.Pandoc.Writers.EPUB ( writeEPUB ) where
+module Text.Pandoc.Writers.EPUB ( writeEPUB2, writeEPUB3 ) where
import qualified Data.Map as M
import qualified Data.Set as Set
import Data.Maybe ( fromMaybe, catMaybes )
@@ -75,8 +75,9 @@ import qualified Text.Pandoc.Class as P
-- in filenames, chapter0003.xhtml.
data Chapter = Chapter (Maybe [Int]) [Block]
-data EPUBState = EPUBState { stMediaPaths :: [(FilePath, (FilePath, Maybe Entry))]
- }
+data EPUBState = EPUBState {
+ stMediaPaths :: [(FilePath, (FilePath, Maybe Entry))]
+ }
type E m = StateT EPUBState m
@@ -336,16 +337,32 @@ metadataFromMeta opts meta = EPUBMetadata{
Just "rtl" -> Just RTL
_ -> Nothing
+-- | Produce an EPUB2 file from a Pandoc document.
+writeEPUB2 :: PandocMonad m
+ => WriterOptions -- ^ Writer options
+ -> Pandoc -- ^ Document to convert
+ -> m B.ByteString
+writeEPUB2 = writeEPUB EPUB2
+
+-- | Produce an EPUB3 file from a Pandoc document.
+writeEPUB3 :: PandocMonad m
+ => WriterOptions -- ^ Writer options
+ -> Pandoc -- ^ Document to convert
+ -> m B.ByteString
+writeEPUB3 = writeEPUB EPUB3
+
-- | Produce an EPUB file from a Pandoc document.
writeEPUB :: PandocMonad m
- => WriterOptions -- ^ Writer options
+ => EPUBVersion
+ -> WriterOptions -- ^ Writer options
-> Pandoc -- ^ Document to convert
-> m B.ByteString
-writeEPUB opts doc =
+writeEPUB epubVersion opts doc =
let initState = EPUBState { stMediaPaths = []
}
in
- evalStateT (pandocToEPUB opts doc) initState
+ evalStateT (pandocToEPUB opts{ writerEpubVersion = Just epubVersion } doc)
+ initState
pandocToEPUB :: PandocMonad m
=> WriterOptions
@@ -353,7 +370,7 @@ pandocToEPUB :: PandocMonad m
-> E m B.ByteString
pandocToEPUB opts doc@(Pandoc meta _) = do
let version = fromMaybe EPUB2 (writerEpubVersion opts)
- let epub3 = version == EPUB3
+ let epub3 = writerEpubVersion opts == Just EPUB3
epochtime <- floor <$> lift P.getPOSIXTime
let mkEntry path content = toEntry path epochtime content
let vars = ("epub3", if epub3 then "true" else "false")