module Epublishable where 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 XHTML class (XHTML a) => Epublishable a where parse :: IOSArrow XmlTree (NTree XNode) -> IO (Maybe a) title :: a -> String metadata :: a -> IO String metadata obj = do date <- getCurrentTime return $ "http://lwn.net/\n" ++ "" ++ (show date) ++ "\n" ++ "en-US\n" ++ "Copyright Eklektix, Inc.\n" ++ "" ++ (title obj) ++ "\n" epublish :: a -> FilePath -> IO () epublish obj path = do let xhtml = to_xhtml obj epmd <- metadata obj epub <- xhtml_to_epub epmd xhtml let normalized_path = normalise path 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