{-# LANGUAGE FlexibleContexts #-}
module Codec.Epub.Format.Spine
( formatSpine
)
where
import Control.Monad.Writer.Lazy ( MonadWriter, execWriter )
import Data.Foldable ( toList )
import Text.Printf ( 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) =
MFItemId -> m ()
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq (MFItemId -> m ()) -> MFItemId -> m ()
forall a b. (a -> b) -> a -> b
$ MFItemId -> MFItemId -> MFItemId -> MFItemId
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) = MFItemId -> MFItemId -> MFItemId
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
MFItemId -> m ()
forall a (m :: * -> *). MonadWriter (Seq a) m => [a] -> m ()
tellSeq (MFItemId -> m ()) -> MFItemId -> m ()
forall a b. (a -> b) -> a -> b
$ MFItemId -> MFItemId -> MFItemId
forall r. PrintfType r => MFItemId -> r
printf MFItemId
"spine toc: %s, itemrefs:\n" MFItemId
toc
(SpineItemref -> m ()) -> [SpineItemref] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ SpineItemref -> m ()
forall (m :: * -> *).
MonadWriter (Seq Char) m =>
SpineItemref -> m ()
tellSpineItemref [SpineItemref]
itemRefs
formatSpine :: Spine -> String
formatSpine :: Spine -> MFItemId
formatSpine Spine
sp = Seq Char -> MFItemId
forall a. Seq a -> [a]
forall (t :: * -> *) a. Foldable t => t a -> [a]
toList (Seq Char -> MFItemId)
-> (Writer (Seq Char) () -> Seq Char)
-> Writer (Seq Char) ()
-> MFItemId
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Writer (Seq Char) () -> Seq Char
forall w a. Writer w a -> w
execWriter
(Writer (Seq Char) () -> MFItemId)
-> Writer (Seq Char) () -> MFItemId
forall a b. (a -> b) -> a -> b
$ Spine -> Writer (Seq Char) ()
forall (m :: * -> *). MonadWriter (Seq Char) m => Spine -> m ()
tellSpine Spine
sp