authoring-0.3.4: src/Text/Authoring/Bibliography.hs
module Text.Authoring.Bibliography (bibliographyContent, toBibliographyContent, withDatabaseFile) where
import Control.Lens (use)
import Control.Monad
import Control.Monad.State
import Control.Monad.IO.Class
import qualified Data.Set as Set
import qualified Data.Text as Text
import Text.CSL.Input.Identifier (toBibTeXItem, HasDatabase, withDatabaseFile)
import Text.Authoring.State
-- | generate the content of the LaTeX bibliography @.bib@ file.
-- We need 'MonadIO' capability in order to access online
-- literature information.
bibliographyContent :: (MonadState s m, HasAuthorState s, HasDatabase s, MonadIO m) => m Text.Text
bibliographyContent = do
urls <- use citedUrlSet
items <- mapM toBibTeXItem $ Set.toList urls
return $ Text.unlines $ items
-- | generate the @.bib@ file outside the authoring monad.
toBibliographyContent :: (HasAuthorState s, HasDatabase s, MonadIO m) =>
s -> m Text.Text
toBibliographyContent s0 = flip evalStateT s0 $ do
urls <- use citedUrlSet
items <- mapM toBibTeXItem $ Set.toList urls
return $ Text.unlines $ items