module Language.Drasil.Code.Imperative.README (
ReadMeInfo(..), makeReadMe
) where
import Prelude hiding ((<>))
import Data.List.NonEmpty (nonEmpty, toList)
import Text.PrettyPrint.HughesPJ (Doc, empty)
import Language.Drasil.Printers (makeMd, introInfo, verInfo, unsupOS,
extLibSec, instDoc, endNote, whatInfo)
import Utils.Drasil (RelativeFile, relFileToStr)
import Language.Drasil.Choices (ImplementationType(..))
import Language.Drasil.Mod (Name, Version)
type LangAbbrev = String
type LangVers = String
type CaseName = String
type ExamplePurpose = String
type ExampleDescr = String
type ExampleMotivation = String
type ExampleScope = String
type Contributor = String
type InFile = String
type OutFile = String
data ReadMeInfo = ReadMeInfo {
ReadMeInfo -> LangAbbrev
langName :: LangAbbrev,
ReadMeInfo -> LangAbbrev
langVersion :: LangVers,
ReadMeInfo -> Maybe LangAbbrev
invalidOS :: Maybe String,
ReadMeInfo -> ImplementationType
implementType :: ImplementationType,
ReadMeInfo -> [(LangAbbrev, LangAbbrev)]
extLibNV :: [(Name, Version)],
ReadMeInfo -> [LangAbbrev]
extLibFP :: [FilePath],
ReadMeInfo -> [LangAbbrev]
contributors :: [Contributor],
ReadMeInfo -> [RelativeFile]
configFP :: [RelativeFile],
ReadMeInfo -> LangAbbrev
caseName :: CaseName,
ReadMeInfo -> LangAbbrev
examplePurpose :: ExamplePurpose,
ReadMeInfo -> LangAbbrev
exampleDescr :: ExampleDescr,
ReadMeInfo -> LangAbbrev
exampleMotivation :: ExampleMotivation,
ReadMeInfo -> LangAbbrev
exampleScope :: ExampleScope,
ReadMeInfo -> Int
folderNum :: Int,
ReadMeInfo -> (LangAbbrev, LangAbbrev)
inputOutput :: (InFile, OutFile)
}
makeReadMe :: ReadMeInfo -> Doc
makeReadMe :: ReadMeInfo -> Doc
makeReadMe ReadMeInfo {
langName :: ReadMeInfo -> LangAbbrev
langName = LangAbbrev
progLang,
langVersion :: ReadMeInfo -> LangAbbrev
langVersion = LangAbbrev
progLangVers,
invalidOS :: ReadMeInfo -> Maybe LangAbbrev
invalidOS = Maybe LangAbbrev
unsupportedOSs,
implementType :: ReadMeInfo -> ImplementationType
implementType = ImplementationType
imptype,
extLibNV :: ReadMeInfo -> [(LangAbbrev, LangAbbrev)]
extLibNV = [(LangAbbrev, LangAbbrev)]
extLibns,
extLibFP :: ReadMeInfo -> [LangAbbrev]
extLibFP = [LangAbbrev]
extLibfp,
contributors :: ReadMeInfo -> [LangAbbrev]
contributors = [LangAbbrev]
auths,
configFP :: ReadMeInfo -> [RelativeFile]
configFP = [RelativeFile]
configFPs,
caseName :: ReadMeInfo -> LangAbbrev
caseName = LangAbbrev
name,
examplePurpose :: ReadMeInfo -> LangAbbrev
examplePurpose = LangAbbrev
purp,
exampleDescr :: ReadMeInfo -> LangAbbrev
exampleDescr = LangAbbrev
descr,
exampleMotivation :: ReadMeInfo -> LangAbbrev
exampleMotivation = LangAbbrev
motiv,
exampleScope :: ReadMeInfo -> LangAbbrev
exampleScope = LangAbbrev
sc,
folderNum :: ReadMeInfo -> Int
folderNum = Int
number,
inputOutput :: ReadMeInfo -> (LangAbbrev, LangAbbrev)
inputOutput = (LangAbbrev, LangAbbrev)
inoutf} =
[Doc] -> Doc
makeMd [LangAbbrev
-> [LangAbbrev] -> Maybe LangAbbrev -> Maybe LangAbbrev -> Doc
introInfo LangAbbrev
name [LangAbbrev]
auths (LangAbbrev -> Maybe LangAbbrev
fieldEmptySTR LangAbbrev
motiv)
(LangAbbrev -> Maybe LangAbbrev
fieldEmptySTR LangAbbrev
purp),
Maybe LangAbbrev -> Maybe LangAbbrev -> Doc
whatInfo (LangAbbrev -> Maybe LangAbbrev
fieldEmptySTR LangAbbrev
descr) (LangAbbrev -> Maybe LangAbbrev
fieldEmptySTR LangAbbrev
sc),
ImplementationType
-> [LangAbbrev] -> LangAbbrev -> (LangAbbrev, LangAbbrev) -> Doc
makeInstr ImplementationType
imptype ((RelativeFile -> LangAbbrev) -> [RelativeFile] -> [LangAbbrev]
forall a b. (a -> b) -> [a] -> [b]
map RelativeFile -> LangAbbrev
relFileToStr [RelativeFile]
configFPs) LangAbbrev
name (LangAbbrev, LangAbbrev)
inoutf,
LangAbbrev -> LangAbbrev -> Doc
verInfo LangAbbrev
progLang LangAbbrev
progLangVers,
Maybe LangAbbrev -> Doc
unsupOS Maybe LangAbbrev
unsupportedOSs,
[(LangAbbrev, LangAbbrev)] -> [LangAbbrev] -> Doc
extLibSec [(LangAbbrev, LangAbbrev)]
extLibns [LangAbbrev]
extLibfp,
Int -> [LangAbbrev] -> Doc
endNote Int
number [LangAbbrev]
auths]
makeInstr :: ImplementationType -> [FilePath] -> String -> (String, String) -> Doc
makeInstr :: ImplementationType
-> [LangAbbrev] -> LangAbbrev -> (LangAbbrev, LangAbbrev) -> Doc
makeInstr ImplementationType
Library [LangAbbrev]
_ LangAbbrev
_ (LangAbbrev, LangAbbrev)
_ = Doc
empty
makeInstr ImplementationType
Program [LangAbbrev]
cfp LangAbbrev
n (LangAbbrev, LangAbbrev)
inOutf = [LangAbbrev] -> LangAbbrev -> (LangAbbrev, LangAbbrev) -> Doc
instDoc [LangAbbrev]
cfp LangAbbrev
n (LangAbbrev, LangAbbrev)
inOutf
fieldEmptySTR :: String -> Maybe String
fieldEmptySTR :: LangAbbrev -> Maybe LangAbbrev
fieldEmptySTR = (NonEmpty Char -> LangAbbrev)
-> Maybe (NonEmpty Char) -> Maybe LangAbbrev
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap NonEmpty Char -> LangAbbrev
forall a. NonEmpty a -> [a]
toList (Maybe (NonEmpty Char) -> Maybe LangAbbrev)
-> (LangAbbrev -> Maybe (NonEmpty Char))
-> LangAbbrev
-> Maybe LangAbbrev
forall b c a. (b -> c) -> (a -> b) -> a -> c
. LangAbbrev -> Maybe (NonEmpty Char)
forall a. [a] -> Maybe (NonEmpty a)
nonEmpty