bibtex-0.0.1: src/Publications.hs
module Main where
import qualified Text.BibTeX.Parse as Parse
import qualified Text.BibTeX.Entry as Entry
import qualified Text.ParserCombinators.Parsec as Parsec
import qualified Data.Char as Char
import Data.Maybe (fromMaybe, )
import System.IO (hPutStrLn, stderr, )
typeTable :: [((String, Maybe String), String)]
typeTable =
(("article", Just "reviewed"), "reviewedjournal") :
(("article", Just "popular"), "popular") :
(("article", Nothing), "journal") :
(("inproceedings", Just "reviewed"), "reviewedconference") :
(("inproceedings", Nothing), "conference") :
(("techreport", Nothing), "techreport") :
(("inbook", Just "program"), "program") :
(("misc", Just "program"), "program") :
(("mastersthesis", Nothing), "thesis") :
(("phdthesis", Nothing), "thesis") :
[]
cite :: Entry.T -> String
cite entry =
"\\nocite" ++
fromMaybe ""
(lookup
(map Char.toLower (Entry.entryType entry),
lookup "subtype" (Entry.fields (Entry.lowerCaseFieldNames entry)))
typeTable) ++
"{" ++ Entry.identifier entry ++ "}"
main :: IO ()
main =
do bib <- getContents
case Parsec.parse (Parsec.skipMany Parsec.space >> Parse.file) "stdin" bib of
Left errMsg -> hPutStrLn stderr (show errMsg)
Right entries ->
mapM_ (putStrLn . cite) entries