-- Copyright: 2010 Dino Morelli -- License: BSD3 (see LICENSE) -- Author: Dino Morelli -- | Module for pretty-printing ePub metadata info module Codec.Epub.Opf.Metadata.Format ( opfToString ) where import Text.Printf import Codec.Epub.Opf.Metadata formatSubline :: String -> Maybe String -> String formatSubline _ Nothing = "" formatSubline key (Just value) = printf " %s: %s\n" key value packageToString :: (String, String) -> String packageToString (version, uniqueId) = "package\n" ++ (formatSubline "version" (Just version)) ++ (formatSubline "unique-identifier" (Just uniqueId)) titleToString :: EMTitle -> String titleToString (EMTitle Nothing title) = printf "title: %s\n" title titleToString (EMTitle lang title) = "title\n" ++ (formatSubline "lang" lang) ++ (formatSubline "title" (Just title)) creatorToString :: EMCreator -> String creatorToString (EMCreator Nothing Nothing creator) = printf "creator: %s\n" creator creatorToString (EMCreator role fileAs creator) = "creator\n" ++ (formatSubline "role" role) ++ (formatSubline "file-as" fileAs) ++ (formatSubline "creator" (Just creator)) contributorToString :: EMCreator -> String contributorToString (EMCreator Nothing Nothing contributor) = printf "contributor: %s\n" contributor contributorToString (EMCreator role fileAs contributor) = "contributor\n" ++ (formatSubline "role" role) ++ (formatSubline "file-as" fileAs) ++ (formatSubline "creator" (Just contributor)) subjectToString :: String -> String subjectToString = printf "subject: %s\n" descriptionToString :: Maybe String -> String descriptionToString = maybe "" (printf "description: %s\n") publisherToString :: Maybe String -> String publisherToString = maybe "" (printf "publisher: %s\n") dateToString :: EMDate -> String dateToString (EMDate Nothing date) = printf "date: %s\n" date dateToString (EMDate event date) = "date\n" ++ (formatSubline "event" event) ++ (formatSubline "date" (Just date)) typeToString :: Maybe String -> String typeToString = maybe "" (printf "type: %s\n") formatToString :: Maybe String -> String formatToString = maybe "" (printf "format: %s\n") idToString :: EMId -> String idToString (EMId idVal scheme content) = "identifier\n" ++ (formatSubline "id" (Just idVal)) ++ (formatSubline "scheme" scheme) ++ (formatSubline "identifier" (Just content)) sourceToString :: Maybe String -> String sourceToString = maybe "" (printf "source: %s\n") langToString :: String -> String langToString = printf "language: %s\n" relationToString :: Maybe String -> String relationToString = maybe "" (printf "relation: %s\n") coverageToString :: Maybe String -> String coverageToString = maybe "" (printf "coverage: %s\n") rightsToString :: Maybe String -> String rightsToString = maybe "" (printf "rights: %s\n") -- | Format an ePub metadata into a String opfToString :: OPFPackage -> String opfToString (OPFPackage v u em) = concat $ [packageToString (v, u)] ++ (map titleToString $ emTitles em) ++ (map creatorToString $ emCreators em) ++ (map contributorToString $ emContributors em) ++ (map dateToString $ emDates em) ++ [typeToString . emType $ em] ++ [formatToString . emFormat $ em] ++ (map idToString $ emIds em) ++ [sourceToString . emSource $ em] ++ (map subjectToString $ emSubjects em) ++ [descriptionToString . emDescription $ em] ++ [publisherToString . emPublisher $ em] ++ (map langToString $ emLangs em) ++ [relationToString . emRelation $ em] ++ [coverageToString . emCoverage $ em] ++ [rightsToString . emRights $ em]