packages feed

epub-0.0.4: src/xhtml2epub.hs

import qualified Data.ByteString.Lazy as B
import Codec.EBook
import System.Environment (getArgs)
import System.FilePath
import Data.List (foldl')

main = do
  args <- getArgs
  case args of 
     (nameOfBook:fileNames) -> do 
          let book = emptyBook { 
                bookID = "http://localhost/"++nameOfBook,
                bookAuthor = "xhtml2epub",
                bookTitle = nameOfBook
          }
          items <- mapM loadItems $ zip fileNames [1..]
          let bookFull = foldl' addItem2Book book items
          let epubFName = nameOfBook <.> "epub"
          outdata <- book2Bin' bookFull
          B.writeFile epubFName  outdata
          putStrLn $ epubFName ++ " constructed."
     _ -> error "Usage: xhtml2epub <name of book> <xhtml file1> [<xhtml file2>,...]"

-- | Constructs a book item from a given filename and item index. The
-- index is used to generate a unique item identifier.
loadItems :: (FilePath,Int) -> IO BookItem
loadItems (p,i) = do
   c <- B.readFile p
   return (BookItem iid np c opsMediatype (Just (ChapterMetadata np)))
   where
      np = normalise p
      iid = takeBaseName p ++ "-" ++ show i