{-# LANGUAGE OverloadedStrings #-} module BNFC.Backend.Latex.Makefile where import BNFC.Backend.CommonInterface.Backend import BNFC.CF import BNFC.Options.GlobalOptions import BNFC.Backend.Latex.State import BNFC.Prelude import Control.Monad.State import Data.String (fromString) import System.FilePath (takeBaseName) import Prettyprinter import Prettyprinter.Render.String latexmakefile :: LBNF -> State LatexBackendState Result latexmakefile _ = do st <- get let cfName = takeBaseName $ optInput $ globalOpt st return [("Makefile", makefileString cfName)] makefileString :: String -> String makefileString cfName = renderString . layoutSmart defaultLayoutOptions $ makefileDoc cfName makefileDoc :: String -> Doc () makefileDoc cfName = vsep [ "## File generated by the BNF Converter." , emptyDoc , "all :" <+> grammar <> dot <> "pdf" , emptyDoc , grammar <> dot <> "pdf" <+> colon <+> grammar <> dot <> "tex" , "\tpdflatex" <+> grammar <> dot <> "tex" , emptyDoc , "clean :" , "\t-rm" <+> grammar <> dot <> "pdf" <+> grammar <> dot <> "aux" <+> grammar <> dot <> "log" , emptyDoc , "cleanall : clean" , "\t-rm" <+> "Makefile" <+> grammar <> dot <> "tex" ] where grammar = fromString cfName