{-# LANGUAGE FlexibleContexts #-}
module Codec.Epub.Format.Spine
( formatSpine
)
where
import Control.Monad.Writer.Lazy
import Data.Foldable ( toList )
import Text.Printf
import Codec.Epub.Format.Util
import Codec.Epub.Data.Spine
tellSpineItemref :: MonadWriter (Seq Char) m => SpineItemref -> m ()
tellSpineItemref :: forall (m :: * -> *).
MonadWriter (Seq Char) m =>
SpineItemref -> m ()
tellSpineItemref (SpineItemref MFItemId
idref Maybe Bool
linear) =
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq forall a b. (a -> b) -> a -> b
$ forall r. PrintfType r => MFItemId -> r
printf MFItemId
" idref: %s%s\n" MFItemId
idref (Maybe Bool -> MFItemId
linearToString Maybe Bool
linear)
where
boolToYn :: Bool -> MFItemId
boolToYn Bool
True = MFItemId
"yes"
boolToYn Bool
False = MFItemId
"no"
linearToString :: Maybe Bool -> MFItemId
linearToString Maybe Bool
Nothing = MFItemId
""
linearToString (Just Bool
l) = forall r. PrintfType r => MFItemId -> r
printf MFItemId
", linear: %s" (Bool -> MFItemId
boolToYn Bool
l)
tellSpine :: MonadWriter (Seq Char) m => Spine -> m ()
tellSpine :: forall (m :: * -> *). MonadWriter (Seq Char) m => Spine -> m ()
tellSpine (Spine MFItemId
toc [SpineItemref]
itemRefs) = do
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq forall a b. (a -> b) -> a -> b
$ forall r. PrintfType r => MFItemId -> r
printf MFItemId
"spine toc: %s, itemrefs:\n" MFItemId
toc
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ forall (m :: * -> *).
MonadWriter (Seq Char) m =>
SpineItemref -> m ()
tellSpineItemref [SpineItemref]
itemRefs
formatSpine :: Spine -> String
formatSpine :: Spine -> MFItemId
formatSpine Spine
sp = forall (t :: * -> *) a. Foldable t => t a -> [a]
toList forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall w a. Writer w a -> w
execWriter
forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *). MonadWriter (Seq Char) m => Spine -> m ()
tellSpine Spine
sp