lambdatex-0.2.0.0: src/Text/LaTeX/LambdaTeX/Reference/Internal.hs
{-# LANGUAGE OverloadedStrings #-}
module Text.LaTeX.LambdaTeX.Reference.Internal where
import qualified Data.Set as S
import qualified Data.Text as T
import Text.LaTeX.LambdaTeX.Reference.Types
import Text.LaTeX.LambdaTeX.Types
-- * Internal references
-- | Declare that a label has been made
addLabelMade :: Monad m => Text -> ΛTeXT m ()
addLabelMade label = λtell $ mempty {outputLabelsMade = S.singleton label}
-- | Declare that a label is needed
addLabelNeeded :: Monad m => Text -> ΛTeXT m ()
addLabelNeeded label = λtell $ mempty {outputLabelsNeeded = S.singleton label}
-- * External references
-- | Render references to bib(La)TeX format
renderReferences :: [Reference] -> Text
renderReferences rs =
(`mappend` "\n\n") . T.intercalate ",\n\n" $ map showRef rs
where
showRef :: Reference -> Text
showRef r =
mconcat
[ "@"
, referenceType r
, "{"
, referenceName r
, ",\n"
, T.intercalate ",\n" (map showField $ referenceFields r)
, "\n}"
]
showField :: (Text, Text) -> Text
showField (a, b) = mconcat [" ", a, " = {", b, "}"]
-- | Add a reference to a ΛTeX generator
addReference :: Monad m => Reference -> ΛTeXT m ()
addReference ref = λtell $ mempty {outputExternalReferences = S.singleton ref}