{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
module Language.Drasil.SoftwareDossier.SoftwareDossierSym (
SoftwareDossierState, makeSds, headers, sources, mainMod,
SoftwareDossierSym(..),
sampleInput, sdsFromData
) where
import Text.PrettyPrint.HughesPJ (Doc)
import Drasil.FileHandling (FileLayout, file, ps)
import Drasil.GOOL (ProgData)
import Language.Drasil.Printers (PrintingInformation)
import Language.Drasil (Expr)
import Language.Drasil.Code.DataDesc (DataDesc)
import Language.Drasil.SoftwareDossier.FileNames (sampleInputName)
import Language.Drasil.Choices (Comments, ImplementationType, Verbosity)
import Language.Drasil.Code.Imperative.WriteInput (makeInputFile)
import Language.Drasil.Code.Imperative.README (ReadMeInfo(..))
import Control.Lens (makeLenses)
data SoftwareDossierState = Sds {
:: [FilePath],
SoftwareDossierState -> [FilePath]
_sources :: [FilePath],
SoftwareDossierState -> Maybe FilePath
_mainMod :: Maybe FilePath
}
makeSds :: [FilePath] -> [FilePath] -> Maybe FilePath -> SoftwareDossierState
makeSds :: [FilePath] -> [FilePath] -> Maybe FilePath -> SoftwareDossierState
makeSds [FilePath]
headerFiles [FilePath]
sourceFiles Maybe FilePath
mainModule = Sds {
_headers :: [FilePath]
_headers = [FilePath]
headerFiles,
_sources :: [FilePath]
_sources = [FilePath]
sourceFiles,
_mainMod :: Maybe FilePath
_mainMod = Maybe FilePath
mainModule
}
class SoftwareDossierSym r where
doxConfig :: String -> SoftwareDossierState -> Verbosity -> Maybe (r FileLayout)
readMe :: ReadMeInfo -> r FileLayout
optimizeDox :: r Doc
makefile :: [FilePath] -> ImplementationType -> [Comments] -> SoftwareDossierState ->
ProgData -> r FileLayout
unReprDoc :: r Doc -> Doc
sampleInput :: (Applicative r) => PrintingInformation -> DataDesc -> [Expr] ->
r FileLayout
sampleInput :: forall (r :: * -> *).
Applicative r =>
PrintingInformation -> DataDesc -> [Expr] -> r FileLayout
sampleInput PrintingInformation
db DataDesc
d [Expr]
sd = FilePath -> Doc -> r FileLayout
forall (r :: * -> *).
Applicative r =>
FilePath -> Doc -> r FileLayout
sdsFromData FilePath
sampleInputName (PrintingInformation -> DataDesc -> [Expr] -> Doc
makeInputFile PrintingInformation
db DataDesc
d [Expr]
sd)
sdsFromData :: Applicative r => FilePath -> Doc -> r FileLayout
sdsFromData :: forall (r :: * -> *).
Applicative r =>
FilePath -> Doc -> r FileLayout
sdsFromData FilePath
fp Doc
d = FileLayout -> r FileLayout
forall a. a -> r a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (FileLayout -> r FileLayout) -> FileLayout -> r FileLayout
forall a b. (a -> b) -> a -> b
$ PathSegment -> Doc -> FileLayout
forall doc. Writeable doc => PathSegment -> doc -> FileLayout
file [ps|{fp}|] Doc
d