module Drasil.DocLang.Notebook where

import Language.Drasil

import qualified Data.Drasil.Concepts.Documentation as Doc (introduction, prpsOfDoc, 
  review, body, mainIdea, procForAnls, summary, methAndAnls, coordinateSystem, 
  example, appendix, reference)
import qualified Data.Drasil.Concepts.Physics as P (motion, horizontalMotion, verticalMotion, kinematics)

--  Notebook constructor. 
-- Create the notebook from given system name, authors, and sections
--doc :: NamedIdea c => c -> Sentence -> [Section] -> Document
--doc  sys = Document (Doc.notebook `S.forTPS` sys)

-- * Section Constructors

-- | Section constructors for the lesson plan documents/jupyter notebooks.
intro, prpsOfDoc, body, review, mainIdea, motion, hormotion, vermotion, methAndAnls,
  coorSyst, kinematic, procForAnls, summary, appendix, reference, example :: [Contents] -> [Section] -> Section
  
intro :: [Contents] -> [Section] -> Section
intro       cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.introduction)      [Contents]
cs [Section]
ss Reference
introLabel
prpsOfDoc :: [Contents] -> [Section] -> Section
prpsOfDoc   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.prpsOfDoc)         [Contents]
cs [Section]
ss Reference
docPurposeLabel

body :: [Contents] -> [Section] -> Section
body        cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.body)              [Contents]
cs [Section]
ss Reference
bodyLabel
review :: [Contents] -> [Section] -> Section
review      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.review)            [Contents]
cs [Section]
ss Reference
reviewLabel

mainIdea :: [Contents] -> [Section] -> Section
mainIdea    cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.mainIdea)          [Contents]
cs [Section]
ss Reference
mainIdeaLabel
motion :: [Contents] -> [Section] -> Section
motion      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.motion)              [Contents]
cs [Section]
ss Reference
motionLabel
hormotion :: [Contents] -> [Section] -> Section
hormotion   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.horizontalMotion)    [Contents]
cs [Section]
ss Reference
hormotionLabel
vermotion :: [Contents] -> [Section] -> Section
vermotion   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.verticalMotion)      [Contents]
cs [Section]
ss Reference
vermotionLabel

methAndAnls :: [Contents] -> [Section] -> Section
methAndAnls cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.methAndAnls)      [Contents]
cs [Section]
ss Reference
methsAndanlsLabel

summary :: [Contents] -> [Section] -> Section
summary     cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.summary)           [Contents]
cs [Section]
ss Reference
summaryLabel

procForAnls :: [Contents] -> [Section] -> Section
procForAnls cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section  (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.procForAnls)      [Contents]
cs [Section]
ss Reference
anlsProcLabel
coorSyst :: [Contents] -> [Section] -> Section
coorSyst    cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section  (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.coordinateSystem) [Contents]
cs [Section]
ss Reference
coorSystLabel
kinematic :: [Contents] -> [Section] -> Section
kinematic   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section  (ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.kinematics)         [Contents]
cs [Section]
ss Reference
kinematicLabel

appendix :: [Contents] -> [Section] -> Section
appendix    cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.appendix)          [Contents]
cs [Section]
ss Reference
appendixLabel

reference :: [Contents] -> [Section] -> Section
reference   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.reference)        [Contents]
cs [Section]
ss Reference
referenceLabel
example :: [Contents] -> [Section] -> Section
example     cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.example)           [Contents]
cs [Section]
ss Reference
exampleLabel

--Labels--
sectionReferences :: [Reference]
sectionReferences :: [Reference]
sectionReferences = [Reference
introLabel, Reference
docPurposeLabel, Reference
methsAndanlsLabel, Reference
referenceLabel,
  Reference
bodyLabel, Reference
reviewLabel, Reference
mainIdeaLabel, Reference
motionLabel, Reference
hormotionLabel, Reference
vermotionLabel, 
  Reference
appendixLabel, Reference
coorSystLabel, Reference
kinematicLabel, Reference
summaryLabel, Reference
anlsProcLabel, Reference
exampleLabel]

-- * Section References

-- | Individual section reference labels. Used in creating example sections for the notebook.
introLabel, docPurposeLabel, methsAndanlsLabel, referenceLabel, bodyLabel,
  reviewLabel, mainIdeaLabel, motionLabel, hormotionLabel, vermotionLabel, 
  appendixLabel, coorSystLabel, kinematicLabel, summaryLabel, anlsProcLabel, exampleLabel :: Reference
introLabel :: Reference
introLabel          = String -> Sentence -> Reference
makeSecRef "Intro"            (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.introduction
docPurposeLabel :: Reference
docPurposeLabel     = String -> Sentence -> Reference
makeSecRef "DocPurpose"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.prpsOfDoc
methsAndanlsLabel :: Reference
methsAndanlsLabel   = String -> Sentence -> Reference
makeSecRef "MethsAndAnls"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.methAndAnls
referenceLabel :: Reference
referenceLabel      = String -> Sentence -> Reference
makeSecRef "References"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.reference
bodyLabel :: Reference
bodyLabel           = String -> Sentence -> Reference
makeSecRef "Body"             (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.body
reviewLabel :: Reference
reviewLabel         = String -> Sentence -> Reference
makeSecRef "Review"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.review
mainIdeaLabel :: Reference
mainIdeaLabel       = String -> Sentence -> Reference
makeSecRef "MainIdea"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.mainIdea        
motionLabel :: Reference
motionLabel         = String -> Sentence -> Reference
makeSecRef "Motion"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.motion              
hormotionLabel :: Reference
hormotionLabel      = String -> Sentence -> Reference
makeSecRef "HorizontalMotion" (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.horizontalMotion
vermotionLabel :: Reference
vermotionLabel      = String -> Sentence -> Reference
makeSecRef "VerticalMotion"   (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.verticalMotion
appendixLabel :: Reference
appendixLabel       = String -> Sentence -> Reference
makeSecRef "Appendix"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.appendix
coorSystLabel :: Reference
coorSystLabel       = String -> Sentence -> Reference
makeSecRef "CoordinateSystem" (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.coordinateSystem
kinematicLabel :: Reference
kinematicLabel      = String -> Sentence -> Reference
makeSecRef "Kinematic"        (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ ConceptChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize ConceptChunk
P.kinematics
summaryLabel :: Reference
summaryLabel        = String -> Sentence -> Reference
makeSecRef "Summary"          (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.summary
anlsProcLabel :: Reference
anlsProcLabel       = String -> Sentence -> Reference
makeSecRef "AnlsProc"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.procForAnls
exampleLabel :: Reference
exampleLabel        = String -> Sentence -> Reference
makeSecRef "Example"          (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.example