packages feed

imbib-1.0.0: BibDB.hs

module BibDB where


import Control.Applicative hiding ((<|>),many)
import Control.Monad
import Control.Monad.Trans
import qualified Data.ByteString 
import Data.Char
import Data.List
import Data.List.Split
import Data.Maybe
import Data.Tree
import System.Directory
import System.FilePath
import Data.Function

import Text.ParserCombinators.Parsec (parseFromFile)
import TypedBibData
import Config

------------
-- DB


loadBibliography = loadBibliographyFrom bibfile

loadBibliographyFrom fileName = do
  mBib <- fmap bibToForest <$> parseFromFile parseBib fileName 
  case mBib of
    Left err -> return (Left err)
    Right bib -> do putStrLn $ show (length $ bib) ++ " entries loaded." -- force it right here
                    return (Right bib)

formatBib = concatMap formatEntry . map treeToEntry

saveBibliography :: [TypedBibData.Entry] -> IO ()
saveBibliography bib = do
  writeFile bibfile (formatBib bib)
  putStrLn $ show (length bib) ++ " entries saved to " ++ bibfile