authoring-0.3.3.1: src/Text/Authoring/Combinator/Cite.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE OverloadedStrings #-}
module Text.Authoring.Combinator.Cite where
import Control.Lens
import Control.Monad
import Control.Monad.State
import Control.Monad.Writer
import qualified Data.Set as Set
import qualified Data.Text as Text
import Text.CSL.Input.Identifier (resolve, HasDatabase)
import Text.Authoring.Class
import Text.Authoring.Combinator.Meta
import Text.Authoring.Combinator.Writer
import Text.Authoring.Document
import Text.Authoring.State
-- | Cite a list of documents
citet, citep :: MonadAuthoring s w m => [String] -> m ()
citet = citationGen "citet"
citep = citationGen "citep"
-- | Cite a single document
citet1, citep1 :: MonadAuthoring s w m => String -> m ()
citet1 = citationGen "citet" . (:[]) -- + ---<=== I am a long man lying
citep1 = citationGen "citep" . (:[]) -- + ---<=== We are long men lying
-- | make a citation to a document(s).
citationGen :: MonadAuthoring s w m => Text.Text -> [String] -> m ()
citationGen cmdName urls = do
forM_ urls $ \url -> do
resolve url
citedUrlSet %= Set.insert url
command1 cmdName $ braces $ raw $ Text.intercalate "," $ map Text.pack urls