module Main where
import Text.CSL.Pandoc (processCites')
import Text.Pandoc.JSON
import Text.Pandoc.Walk
import System.IO (stderr, hPutStrLn)
import System.Console.GetOpt
import System.Environment (getArgs)
import Control.Monad
import System.Exit
import Data.Version (showVersion)
import Paths_pandoc_citeproc (version)
main :: IO ()
main = do
argv <- getArgs
let (flags, _, errs) = getOpt Permute options argv
let header = "Usage: pandoc-citeproc"
unless (null errs) $ do
hPutStrLn stderr $ usageInfo (unlines $ errs ++ [header]) options
exitWith $ ExitFailure 1
when (Version `elem` flags) $ do
putStrLn $ "pandoc-citeproc " ++ showVersion version
exitWith ExitSuccess
when (Help `elem` flags) $ do
putStrLn $ usageInfo header options
exitWith ExitSuccess
toJSONFilter doCites
doCites :: Pandoc -> IO Pandoc
doCites doc = do
doc' <- processCites' doc
let warnings = query findWarnings doc'
mapM_ (hPutStrLn stderr) warnings
return doc'
findWarnings :: Inline -> [String]
findWarnings (Span (_,["citeproc-not-found"],[("data-reference-id",ref)]) _) =
["pandoc-citeproc: reference " ++ ref ++ " not found"]
findWarnings (Span (_,["citeproc-no-output"],_) _) =
["pandoc-citeproc: reference with no printed form"]
findWarnings _ = []
data Option =
Help | Version
deriving (Ord, Eq, Show)
options :: [OptDescr Option]
options =
[ Option ['h'] ["help"] (NoArg Help) "show usage information"
, Option ['V'] ["version"] (NoArg Version) "show program version"
]