module Epublishable
where
-import Codec.EBook
-import qualified Data.ByteString.Lazy as B (writeFile)
-import Data.List (foldl')
+import Text.Pandoc
+import qualified Data.ByteString.Lazy as B (ByteString, writeFile)
+import Data.Time (getCurrentTime)
import Data.Tree.NTree.TypeDefs (NTree)
import System.FilePath (normalise)
import Text.XML.HXT.Core (IOSArrow, XNode, XmlTree)
-import Misc (string_to_bytestring)
import XHTML
title :: a -> String
- epublish :: a -> FilePath -> Integer -> IO ()
- epublish obj path time = do
- let book_name = title obj
- let book =
- emptyBook {
- bookID = "http://lwn.net/" ++ book_name,
- bookAuthor = "LWN <http://lwn.net> Copyright Eklektix, Inc.",
- bookTitle = book_name
- }
+ metadata :: a -> IO String
+ metadata obj = do
+ date <- getCurrentTime
+ return $
+ "<dc:creator>http://lwn.net/</dc:creator>\n" ++
+ "<dc:date>" ++ (show date) ++ "</dc:date>\n" ++
+ "<dc:language>en-US</dc:language>\n" ++
+ "<dc:rights>Copyright Eklektix, Inc.</dc:rights>\n" ++
+ "<dc:title>" ++ (title obj) ++ "</dc:title>\n"
+
+ epublish :: a -> FilePath -> IO ()
+ epublish obj path = do
let xhtml = to_xhtml obj
- bs_xhtml <- string_to_bytestring xhtml
- let iid = "iid-1"
+ epmd <- metadata obj
+ epub <- xhtml_to_epub epmd xhtml
let normalized_path = normalise path
- let metadata = Just (ChapterMetadata book_name)
- let bi = BookItem iid normalized_path bs_xhtml opsMediatype metadata
- let bookFull = foldl' addItem2Book book [bi]
- let outdata = book2Bin bookFull time
- B.writeFile normalized_path outdata
+ B.writeFile normalized_path epub
+
+xhtml_to_epub :: String -> String -> IO B.ByteString
+xhtml_to_epub epmd =
+ write_epub . read_html
+ where
+ my_writer_options = defaultWriterOptions { writerEPUBMetadata = epmd }
+ write_epub = writeEPUB Nothing [] my_writer_options
+ read_html = readHtml defaultParserState