{-# OPTIONS_GHC -fno-warn-orphans #-} module Hakyll.TeX.BibTeX ( bibtexCompiler , compileBibtex , BibTeX ) where import Prolog import Data.List qualified as L import Hakyll import Text.BibTeX.Entry qualified as B import Text.BibTeX.Format qualified as B import Text.BibTeX.Parse qualified as B import Text.Parsec qualified as P import Text.Parsec.Error qualified as P type BibTeX = B.T deriving instance Generic B.T instance Binary B.T instance Writable B.T where write p = write p . B.entry instance Writable [B.T] where write p = write p . fold . L.intersperse "\n" . fmap B.entry compileBibtex :: (StringConv s String) => Item s -> Compiler (Item [B.T]) compileBibtex (Item i b) = either (throwError . fmap P.messageString . P.errorMessages) (pure . Item i) $ P.parse p (show i) (toSL b) where p = B.skippingLeadingSpace $ B.file <* P.eof bibtexCompiler :: Compiler (Item [B.T]) bibtexCompiler = getResourceBody >>= compileBibtex