packages feed

tex-join-bib-0.1.0.0: app/Main.hs

{- tex-join-bib
Gregory W. Schwartz

Blah's the blah in the blah.
-}

{-# LANGUAGE DataKinds         #-}
{-# LANGUAGE DeriveGeneric     #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators     #-}

module Main where

-- Remote
import Data.Maybe (fromMaybe)
import Options.Generic
import qualified Data.Text as T
import qualified Filesystem.Path as FP
import qualified Filesystem.Path.CurrentOS as FP

-- Local
import Tex.Join

-- | Command line arguments
data Options = Options { input  :: [T.Text]
                               <?> "(FILE) Input tex files. A list, so for example: `-i a.tex -i b.tex -i c.tex`. The global bibliography should already be setup with biblatex, i.e. in the preamble: \\usepackage{biblatex} and \\addbibresource{/path/to/global_references.bib}. This path will automatically be replaced with the combined bib. Order matters in terms of reference numbering."
                       , output :: Maybe T.Text
                               <?> "([out.pdf] | FILE) The output joined compiled pdf. Will also output FILE_references.bib, FILE_references.tex, and FILE_references.pdf to customize later if needed."
                       }
               deriving (Generic)

modifiers :: Modifiers
modifiers = lispCaseModifiers { shortNameModifier = firstLetter }

instance ParseRecord Options where
  parseRecord = parseRecordWithModifiers modifiers

main :: IO ()
main = do
  opts <- getRecord "tex-join-bib, Gregory W. Schwartz.\
                    \ Compiles each tex separately with a joined bibliography.\
                    \ Order matters in terms of reference numbering.\
                    \ Works by replacing \
                    \ \\addbibresource{/path/to/global_bibliography.bib} with\
                    \ the new combined bibliography, then inserting \\nocite{*}."

  let files = fmap FP.fromText . unHelpful . input $ opts
      out =
        FP.fromText . fromMaybe "out.pdf" . unHelpful . output $ opts

  joinTex out files

  return ()