module Language.Drasil.Markdown.CreateMd (
makeMd,
introInfo, verInfo, unsupOS, extLibSec, regularSec, instDoc, endNote)
where
import Prelude hiding ((<>))
import Text.PrettyPrint.HughesPJ (Doc, empty, isEmpty, vcat, text, (<+>),
(<>), comma, punctuate, hsep)
type Seperator = Doc
makeMd :: [Doc] -> Doc
makeMd :: [Doc] -> Doc
makeMd = [Doc] -> Doc
vcat ([Doc] -> Doc) -> ([Doc] -> [Doc]) -> [Doc] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> [Doc] -> [Doc]
punctuate Doc
secSep ([Doc] -> [Doc]) -> ([Doc] -> [Doc]) -> [Doc] -> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Doc] -> [Doc]
filtEmp
introInfo :: String -> [String] -> Doc
introInfo :: String -> [String] -> Doc
introInfo name :: String
name auths :: [String]
auths = Doc -> Doc -> Int -> Doc
introSec (String -> Doc
text String
name) ([String] -> Doc
listToDoc [String]
auths) (Int -> Doc) -> Int -> Doc
forall a b. (a -> b) -> a -> b
$ [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
auths
instDoc :: [String] -> Doc
instDoc :: [String] -> Doc
instDoc cfp :: [String]
cfp = Doc -> Doc -> Doc
regularSec (String -> Doc
text "Making Examples")
(Doc
runInstDoc Doc -> Doc -> Doc
<> Doc
doubleSep Doc -> Doc -> Doc
<> Doc
makeInstDoc) Doc -> Doc -> Doc
<> [String] -> Doc
configSec [String]
cfp
commandLine :: Doc
commandLine :: Doc
commandLine = String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ "In your terminal command line, enter the same directory as this " String -> String -> String
forall a. [a] -> [a] -> [a]
++
"README file. Then enter the following line:"
runInstDoc :: Doc
runInstDoc :: Doc
runInstDoc = String -> Doc
text "How to Run the Program:" Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<>
Doc
commandLine Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> Doc
bkQuote3 Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> String -> Doc
text "make run RUNARGS=input.txt" Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> Doc
bkQuote3
makeInstDoc :: Doc
makeInstDoc :: Doc
makeInstDoc = String -> Doc
text "How to Build the Program:" Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> Doc
commandLine Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<>
Doc
bkQuote3 Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> String -> Doc
text "make build" Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> Doc
bkQuote3
configSec :: [String] -> Doc
configSec :: [String] -> Doc
configSec [] = Doc
empty
configSec cfp :: [String]
cfp = Doc
doubleSep Doc -> Doc -> Doc
<> Doc -> Doc -> Doc
regularSec (String -> Doc
text "Configuration Files") (String -> Doc
text ("Configuration files are files that must be " String -> String -> String
forall a. [a] -> [a] -> [a]
++
"in the same directory as the executable in order to run or build successfully.")
Doc -> Doc -> Doc
<> Doc
doubleSep Doc -> Doc -> Doc
<> Doc
bkQuote Doc -> Doc -> Doc
<> [String] -> Doc
listToDoc [String]
cfp Doc -> Doc -> Doc
<> Doc
bkQuote)
verInfo :: String -> String -> Doc
verInfo :: String -> String -> Doc
verInfo pl :: String
pl plv :: String
plv = Doc -> Doc -> Doc
regularSec (String -> Doc
text "Version") (Doc
bkQuote Doc -> Doc -> Doc
<> String -> Doc
text String
pl Doc -> Doc -> Doc
<+> String -> Doc
text String
plv Doc -> Doc -> Doc
<> Doc
bkQuote)
unsupOS :: Maybe String -> Doc
unsupOS :: Maybe String -> Doc
unsupOS = Doc -> (String -> Doc) -> Maybe String -> Doc
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Doc
empty (\uns :: String
uns-> Doc -> Doc -> Doc
regularSec (String -> Doc
text "Unsupported Operating Systems")
(String -> Doc
text (String -> Doc) -> String -> Doc
forall a b. (a -> b) -> a -> b
$ "- " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
uns))
extLibSec:: [(String, String)] -> [String]-> Doc
extLibSec :: [(String, String)] -> [String] -> Doc
extLibSec libns :: [(String, String)]
libns libfps :: [String]
libfps =
let libs :: [(String, String, String)]
libs = [(String, String)] -> [String] -> [(String, String, String)]
addListToTuple [(String, String)]
libns [String]
libfps
formattedLibs :: Doc
formattedLibs = ([Doc] -> Doc
hsep ([Doc] -> Doc)
-> ([(String, String, String)] -> [Doc])
-> [(String, String, String)]
-> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> [Doc] -> [Doc]
punctuate Doc
contSep ([Doc] -> [Doc])
-> ([(String, String, String)] -> [Doc])
-> [(String, String, String)]
-> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Doc] -> [Doc]
filtEmp ([Doc] -> [Doc])
-> ([(String, String, String)] -> [Doc])
-> [(String, String, String)]
-> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
.
((String, String, String) -> Doc)
-> [(String, String, String)] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map (String, String, String) -> Doc
libStatment) [(String, String, String)]
libs
in if Doc -> Bool
isEmpty Doc
formattedLibs then Doc
empty else
Doc -> Doc -> Doc
regularSec (String -> Doc
text "External Libraries") Doc
formattedLibs
libStatment :: (String, String, String) -> Doc
libStatment :: (String, String, String) -> Doc
libStatment ("","", _) = Doc
empty
libStatment (nam :: String
nam,vers :: String
vers, fp :: String
fp) = Doc
bkQuote Doc -> Doc -> Doc
<> String -> Doc
text String
nam Doc -> Doc -> Doc
<+>
String -> Doc
text String
vers Doc -> Doc -> Doc
<> Doc
bkQuote Doc -> Doc -> Doc
<> if String
fp String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== "" then Doc
empty else
String -> Doc
text ". The local file path to the library is" Doc -> Doc -> Doc
<+> Doc
bkQuote Doc -> Doc -> Doc
<> String -> Doc
text String
fp Doc -> Doc -> Doc
<> Doc
bkQuote
addListToTuple :: [(String,String)] -> [String] -> [(String, String, String)]
addListToTuple :: [(String, String)] -> [String] -> [(String, String, String)]
addListToTuple [] [] = []
addListToTuple ((n :: String
n,v :: String
v):_) [] = [(String
n,String
v,"")]
addListToTuple ((n :: String
n,v :: String
v):xtup :: [(String, String)]
xtup) (l :: String
l:xlst :: [String]
xlst) = (String
n,String
v,String
l)(String, String, String)
-> [(String, String, String)] -> [(String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String)] -> [String] -> [(String, String, String)]
addListToTuple [(String, String)]
xtup [String]
xlst
addListToTuple _ _ = []
license :: Doc -> Doc
license :: Doc -> Doc
license auth :: Doc
auth = String -> Doc
text "Copyright (c) 2021," Doc -> Doc -> Doc
<+> Doc
auth Doc -> Doc -> Doc
<>
String -> Doc
text ". All rights reserved. Please see the [full license](https://github.com/JacquesCarette/Drasil/blob/4b9ad0a3016fecb3c7a2aa82ab142f9e805b5cc8/LICENSE) for more details."
drasilImage :: Doc
drasilImage :: Doc
drasilImage = String -> Doc
alignImage "../../../../drasil-website/WebInfo/images/Icon.png"
alignImage :: FilePath -> Doc
alignImage :: String -> Doc
alignImage img :: String
img = String -> Doc
text "<p align=\"center\">" Doc -> Doc -> Doc
<>
Doc
contSep Doc -> Doc -> Doc
<> String -> Doc
text ("<img src=\"" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
img String -> String -> String
forall a. [a] -> [a] -> [a]
++ "\" alt=\"Drasil Tree\" width=\"200\" />")
Doc -> Doc -> Doc
<> Doc
contSep Doc -> Doc -> Doc
<> String -> Doc
text "</p>"
endNote :: [String] -> Doc
endNote :: [String] -> Doc
endNote auth :: [String]
auth = String -> Doc
text "*This README is a software artifact generated by Drasil.*" Doc -> Doc -> Doc
<> Doc
doubleSep Doc -> Doc -> Doc
<> Doc -> Doc
license ([String] -> Doc
listToDoc [String]
auth) Doc -> Doc -> Doc
<> Doc
doubleSep Doc -> Doc -> Doc
<> Doc
drasilImage
secSep, contSep, doubleSep, bkQuote, bkQuote3 :: Seperator
secSep :: Doc
secSep = String -> Doc
text "\n\n------------------------------------------------------------"
contSep :: Doc
contSep = String -> Doc
text "\n"
doubleSep :: Doc
doubleSep = String -> Doc
text "\n\n"
bkQuote :: Doc
bkQuote = String -> Doc
text "`"
bkQuote3 :: Doc
bkQuote3 = String -> Doc
text "```"
introSec :: Doc -> Doc -> Int -> Doc
introSec :: Doc -> Doc -> Int -> Doc
introSec hd :: Doc
hd ms1 :: Doc
ms1 l :: Int
l = String -> Doc
text "#" Doc -> Doc -> Doc
<+> Doc
hd Doc -> Doc -> Doc
<+> Doc
contSep Doc -> Doc -> Doc
<> (if Int
l Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 1 then String -> Doc
text "> Author:" else String -> Doc
text "> Authors: ") Doc -> Doc -> Doc
<+> Doc
ms1
regularSec :: Doc -> Doc -> Doc
regularSec :: Doc -> Doc -> Doc
regularSec hd :: Doc
hd ms :: Doc
ms = String -> Doc
text "##" Doc -> Doc -> Doc
<+> Doc
hd Doc -> Doc -> Doc
<+> Doc
contSep Doc -> Doc -> Doc
<+> Doc
ms
filtEmp :: [Doc] -> [Doc]
filtEmp :: [Doc] -> [Doc]
filtEmp = (Doc -> Bool) -> [Doc] -> [Doc]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool) -> (Doc -> Bool) -> Doc -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> Bool
isEmpty)
listToDoc :: [String] -> Doc
listToDoc :: [String] -> Doc
listToDoc = [Doc] -> Doc
hsep ([Doc] -> Doc) -> ([String] -> [Doc]) -> [String] -> Doc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Doc -> [Doc] -> [Doc]
punctuate Doc
comma ([Doc] -> [Doc]) -> ([String] -> [Doc]) -> [String] -> [Doc]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> Doc) -> [String] -> [Doc]
forall a b. (a -> b) -> [a] -> [b]
map String -> Doc
text