clippings-0.2.0: src/Text/Kindle/Clippings/Writer.hs
module Text.Kindle.Clippings.Writer
( showClipping
, showClippings
) where
import Data.Time.Format (formatTime)
import Data.Time.LocalTime (LocalTime)
import System.Locale (defaultTimeLocale)
import Text.Kindle.Clippings.Types (Clipping(..), Document(..), Position(..), Content(..), Interval(..))
instance Show Document where
show (Document t (Just a)) = t ++ " (" ++ a ++ ")"
show (Document t Nothing) = t
instance Show Interval where
show (Singleton i) = show i
show (Proper i0 i1) = show i0 ++ "-" ++ show i1
instance Show Position where
show (Position Nothing (Just l)) = "Loc. " ++ show l
show (Position (Just p) Nothing) = "on Page " ++ show p
show (Position p@(Just _) l@(Just _)) = show (Position p Nothing) ++ " | " ++ show (Position Nothing l)
show (Position Nothing Nothing) = ""
instance Show Content where
show (Highlight s) = s
show (Annotation s) = s
show (Bookmark) = ""
showContentType :: Content -> String
showContentType (Highlight _) = "Highlight"
showContentType (Annotation _) = "Note"
showContentType (Bookmark) = "Bookmark"
showKindleDate :: LocalTime -> String
showKindleDate = formatTime defaultTimeLocale "%A, %d %B %y %X"
showClipping :: Clipping -> String
showClipping c = unlines $
[ show (document c)
, "- " ++ showType c ++ " " ++ showPosition c ++ " | Added on " ++ showDate c
, ""
, showContent c
, "=========="
] where showPosition = show . position
showDate = showKindleDate . date
showContent = show . content
showType = showContentType . content
instance Show Clipping where
show = showClipping
showClippings :: [Clipping] -> String
showClippings = concat . map showClipping