-- | Defines concepts used to create documentation.

-- Changes to documentation-related named chunks and common ideas should be reflected in the
-- 'Creating Your Project in Drasil' tutorial found on the wiki:
-- https://github.com/JacquesCarette/Drasil/wiki/Creating-Your-Project-in-Drasil

module Data.Drasil.Concepts.Documentation (
    module Drasil.Metadata.Documentation
  , module Data.Drasil.Concepts.Documentation
  ) where

import Language.Drasil hiding (organization, year, label, variable, sec)
import Language.Drasil.Chunk.Concept.NamedCombinators

import Drasil.Metadata.Domains (softEng)
import Drasil.Metadata.Documentation
import Drasil.Metadata.TheoryConcepts (dataDefn, genDefn, inModel, thModel)

-- | Collects all documentation-related named chunks (not concept-level yet).
doccon :: [IdeaDict]
doccon :: [IdeaDict]
doccon = [IdeaDict
abbAcc, IdeaDict
abbreviation, IdeaDict
acronym, IdeaDict
analysis, IdeaDict
appendix, IdeaDict
aspect, IdeaDict
body,
  IdeaDict
caseProb, IdeaDict
charOfIR, IdeaDict
characteristic, IdeaDict
class_, IdeaDict
client, IdeaDict
code, IdeaDict
column, IdeaDict
company,
  IdeaDict
component, IdeaDict
concept, IdeaDict
condition, IdeaDict
connection, IdeaDict
consVals, IdeaDict
constant, IdeaDict
constraint,
  IdeaDict
consumer, IdeaDict
content, IdeaDict
context, IdeaDict
coordinate, IdeaDict
coordinateSystem, IdeaDict
corSol, IdeaDict
customer,
  IdeaDict
datum, IdeaDict
datumConstraint, IdeaDict
decision, IdeaDict
definition, IdeaDict
dependency, IdeaDict
description,
  IdeaDict
design, IdeaDict
designDoc, IdeaDict
document, IdeaDict
documentation, IdeaDict
effect, IdeaDict
element, IdeaDict
emphasis,
  IdeaDict
endUser, IdeaDict
environment, IdeaDict
example, IdeaDict
failure, IdeaDict
figure, IdeaDict
first, IdeaDict
form, IdeaDict
full,
  IdeaDict
fullForm, IdeaDict
functional, IdeaDict
functionalRequirement, IdeaDict
game, IdeaDict
general,
  IdeaDict
generalSystemDescription, IdeaDict
goal, IdeaDict
guide, IdeaDict
implementation, IdeaDict
indPRCase,
  IdeaDict
individual, IdeaDict
information, IdeaDict
input_, IdeaDict
instance_, IdeaDict
intReader, IdeaDict
interest, IdeaDict
interface,
  IdeaDict
introduction, IdeaDict
issue, IdeaDict
item, IdeaDict
label, IdeaDict
library, IdeaDict
limitation, IdeaDict
literacy, IdeaDict
loss,
  IdeaDict
material_, IdeaDict
mainIdea, IdeaDict
message, IdeaDict
method_, IdeaDict
methAndAnls, IdeaDict
model, IdeaDict
module_, IdeaDict
name_,
  IdeaDict
nonfunctional, IdeaDict
nonfunctionalRequirement, IdeaDict
notApp, IdeaDict
object, IdeaDict
offShelf,
  IdeaDict
offShelfSolution, IdeaDict
open, IdeaDict
orgOfDoc, IdeaDict
organization, IdeaDict
output_, IdeaDict
physical,
  IdeaDict
physicalConstraint, IdeaDict
physicalProperty, IdeaDict
physicalSim, IdeaDict
physicalSystem, IdeaDict
physics,
  IdeaDict
plan, IdeaDict
practice, IdeaDict
priority, IdeaDict
problem, IdeaDict
problemDescription, IdeaDict
problemIntro,
  IdeaDict
procedure, IdeaDict
prodUCTable, IdeaDict
productUC, IdeaDict
product_, IdeaDict
project, IdeaDict
procForAnls,
  IdeaDict
propOfCorSol, IdeaDict
property, IdeaDict
prpsOfDoc, IdeaDict
purpose, IdeaDict
quantity, IdeaDict
realtime, IdeaDict
review,
  IdeaDict
reference, IdeaDict
refMat, IdeaDict
reqInput, IdeaDict
response, IdeaDict
result, IdeaDict
reviewer,
  IdeaDict
safety, IdeaDict
safetyReq, IdeaDict
scenario, IdeaDict
scope, IdeaDict
scpOfReq, IdeaDict
scpOfTheProjS, IdeaDict
second_,
  IdeaDict
section_, IdeaDict
simulation, IdeaDict
software, IdeaDict
softwareConstraint, IdeaDict
softwareDoc,
  IdeaDict
softwareReq, IdeaDict
softwareSys, IdeaDict
softwareVAV, IdeaDict
softwareVerif, IdeaDict
solution,
  IdeaDict
solutionCharSpec, IdeaDict
solutionCharacteristic, IdeaDict
summary, IdeaDict
source, IdeaDict
specific,
  IdeaDict
specification, IdeaDict
specificsystemdescription, IdeaDict
stakeholder, IdeaDict
standard, IdeaDict
statement,
  IdeaDict
symbol_, IdeaDict
sysCont, IdeaDict
system, IdeaDict
systemConstraint, IdeaDict
systemdescription, IdeaDict
tAuxConsts,
  IdeaDict
tOfCont, IdeaDict
tOfSymb, IdeaDict
tOfUnit, IdeaDict
inDatumConstraint, IdeaDict
outDatumConstraint, IdeaDict
table_,
  IdeaDict
task, IdeaDict
template, IdeaDict
termAndDef, IdeaDict
term_, IdeaDict
terminology, IdeaDict
theory, IdeaDict
traceyGraph,
  IdeaDict
traceyMandG, IdeaDict
traceyMatrix, IdeaDict
type_, IdeaDict
uncertCol, IdeaDict
uncertainty, IdeaDict
useCase,
  IdeaDict
useCaseTable, IdeaDict
user, IdeaDict
userCharacteristic, IdeaDict
userInput, IdeaDict
validation, IdeaDict
value,
  IdeaDict
variable, IdeaDict
vav, IdeaDict
vavPlan, IdeaDict
verification, IdeaDict
video, IdeaDict
year]

-- | Collects all documentation-related common ideas (like a concept, but with no definition).
doccon' :: [CI]
doccon' :: [CI]
doccon' = [CI
assumption, CI
dataConst, CI
dataDefn, CI
desSpec, CI
genDefn, CI
goalStmt, CI
inModel,
  CI
likelyChg, CI
learnObj, CI
mg, CI
mis, CI
notebook, CI
physSyst, CI
refBy, CI
requirement, CI
srs,
  CI
thModel, CI
typUnc, CI
unlikelyChg]

dataConst :: CI

-- * Common Ideas

------------------------------------------------------------------------------------------------------------------------------
-- | CI       |                  |    uid      |         term                                   | abbreviation | ConceptDomain
------------------------------------------------------------------------------------------------------------------------------
dataConst :: CI
dataConst   = String -> NP -> String -> [IdeaDict] -> CI
commonIdeaWithDict String
"dataConst"   (String -> NP
cn' String
"data constraint")                               String
"DC"      [IdeaDict
softEng]

---------------------------------------------------------------------

-- concepts relating to the templates and their contents
-- * Named Chunks
-- ** Basic Chunks

analysis, aspect, body, class_, company, concept, condition, connection, constant,
  consumer, coordinate, effect, emphasis, failure, figure, first, game,
  instance_, issue, label, library, literacy, loss, material_, mainIdea, message, method_,
  name_, notApp, object, open,
  physics, practice, priority, procedure,
  realtime, response,
  result, reviewer, safety, scpOfTheProjS, second_, scenario,
  source, simulation, standard, task, type_, video, year :: IdeaDict

analysis :: IdeaDict
analysis        = String -> NP -> IdeaDict
nc String
"analysis"       (String -> NP
cnIS   String
"analysis"           )
aspect :: IdeaDict
aspect          = String -> NP -> IdeaDict
nc String
"aspect"         (String -> NP
cn'    String
"aspect"             )
body :: IdeaDict
body            = String -> NP -> IdeaDict
nc String
"body"           (String -> NP
cnIES  String
"body"               )
class_ :: IdeaDict
class_          = String -> NP -> IdeaDict
nc String
"class"          (String -> NP
cn'''  String
"class"              )
company :: IdeaDict
company         = String -> NP -> IdeaDict
nc String
"company"        (String -> NP
cnIES  String
"company"            )
concept :: IdeaDict
concept         = String -> NP -> IdeaDict
nc String
"concept"        (String -> NP
cn'    String
"concept"            )
condition :: IdeaDict
condition       = String -> NP -> IdeaDict
nc String
"condition"      (String -> NP
cn'    String
"condition"          )
connection :: IdeaDict
connection      = String -> NP -> IdeaDict
nc String
"connection"     (String -> NP
cn'    String
"connection"         )
constant :: IdeaDict
constant        = String -> NP -> IdeaDict
nc String
"constant"       (String -> NP
cn'    String
"constant"           )
consumer :: IdeaDict
consumer        = String -> NP -> IdeaDict
nc String
"consumer"       (String -> NP
cn'    String
"consumer"           )
coordinate :: IdeaDict
coordinate      = String -> NP -> IdeaDict
nc String
"coordinate"     (String -> NP
cn'    String
"coordinate"         )
effect :: IdeaDict
effect          = String -> NP -> IdeaDict
nc String
"effect"         (String -> NP
cn'    String
"effect"             )
emphasis :: IdeaDict
emphasis        = String -> NP -> IdeaDict
nc String
"emphasis"       (String -> NP
cnIS   String
"emphasis"           )
failure :: IdeaDict
failure         = String -> NP -> IdeaDict
nc String
"failure"        (String -> NP
cn'    String
"failure"            )
figure :: IdeaDict
figure          = String -> NP -> IdeaDict
nc String
"figure"         (String -> NP
cn'    String
"figure"             )
first :: IdeaDict
first           = String -> NP -> IdeaDict
nc String
"first"          (String -> NP
cn'    String
"first"              ) --Does it make sense for this to be here?
game :: IdeaDict
game            = String -> NP -> IdeaDict
nc String
"game"           (String -> NP
cn'    String
"game"               )
instance_ :: IdeaDict
instance_       = String -> NP -> IdeaDict
nc String
"instance"       (String -> NP
cn'    String
"instance"           )
issue :: IdeaDict
issue           = String -> NP -> IdeaDict
nc String
"issue"          (String -> NP
cn'    String
"issue"              )
label :: IdeaDict
label           = String -> NP -> IdeaDict
nc String
"label"          (String -> NP
cn'    String
"label"              )
library :: IdeaDict
library         = String -> NP -> IdeaDict
nc String
"library"        (String -> NP
cnIES  String
"library"            )
literacy :: IdeaDict
literacy        = String -> NP -> IdeaDict
nc String
"literacy"       (String -> NP
cnIES  String
"literacy"           )
loss :: IdeaDict
loss            = String -> NP -> IdeaDict
nc String
"loss"           (String -> NP
cn'''  String
"loss"               )
material_ :: IdeaDict
material_       = String -> NP -> IdeaDict
nc String
"material"       (String -> NP
cn'    String
"material"           )
mainIdea :: IdeaDict
mainIdea        = String -> NP -> IdeaDict
nc String
"mainIdea"       (String -> NP
cn'    String
"main idea"          )
message :: IdeaDict
message         = String -> NP -> IdeaDict
nc String
"message"        (String -> NP
cn'    String
"message"            )
method_ :: IdeaDict
method_         = String -> NP -> IdeaDict
nc String
"method"         (String -> NP
cn'    String
"method"             )
name_ :: IdeaDict
name_           = String -> NP -> IdeaDict
nc String
"name"           (String -> NP
cn'    String
"name"               )
object :: IdeaDict
object          = String -> NP -> IdeaDict
nc String
"object"         (String -> NP
cn'    String
"object"             )
open :: IdeaDict
open            = String -> NP -> IdeaDict
nc String
"open"           (String -> NP
cn'    String
"open"               )
physics :: IdeaDict
physics         = String -> NP -> IdeaDict
nc String
"physics"        (String -> NP
cn'    String
"physics"            )
practice :: IdeaDict
practice        = String -> NP -> IdeaDict
nc String
"practice"       (String -> NP
cn'    String
"practice"           )
priority :: IdeaDict
priority        = String -> NP -> IdeaDict
nc String
"priority"       (String -> NP
cnIES  String
"priority"           )
procedure :: IdeaDict
procedure       = String -> NP -> IdeaDict
nc String
"procedure"      (String -> NP
cn'    String
"procedure"          )
realtime :: IdeaDict
realtime        = String -> NP -> IdeaDict
nc String
"real-time"      (String -> NP
cn'    String
"real-time"          )
response :: IdeaDict
response        = String -> NP -> IdeaDict
nc String
"response"       (String -> NP
cn'    String
"response"           )
result :: IdeaDict
result          = String -> NP -> IdeaDict
nc String
"result"         (String -> NP
cn'    String
"result"             )
reviewer :: IdeaDict
reviewer        = String -> NP -> IdeaDict
nc String
"reviewer"       (String -> NP
cn'    String
"reviewer"           )
safety :: IdeaDict
safety          = String -> NP -> IdeaDict
nc String
"safety"         (String -> NP
cnIES  String
"safety"             )
second_ :: IdeaDict
second_         = String -> NP -> IdeaDict
nc String
"second"         (String -> NP
cn'    String
"second"             ) --Does it make sense for this to be here?
scenario :: IdeaDict
scenario        = String -> NP -> IdeaDict
nc String
"scenario"       (String -> NP
cn'    String
"scenario"           )
source :: IdeaDict
source          = String -> NP -> IdeaDict
nc String
"source"         (String -> NP
cn'    String
"source"             )
simulation :: IdeaDict
simulation      = String -> NP -> IdeaDict
nc String
"simulation"     (String -> NP
cn'    String
"simulation"         )
standard :: IdeaDict
standard        = String -> NP -> IdeaDict
nc String
"standard"       (String -> NP
cn'    String
"standard"           )
task :: IdeaDict
task            = String -> NP -> IdeaDict
nc String
"task"           (String -> NP
cn'    String
"task"               )
type_ :: IdeaDict
type_           = String -> NP -> IdeaDict
nc String
"type"           (String -> NP
cn'    String
"type"               )
video :: IdeaDict
video           = String -> NP -> IdeaDict
nc String
"video"          (String -> NP
cn'    String
"video"              )
year :: IdeaDict
year            = String -> NP -> IdeaDict
nc String
"year"           (String -> NP
cn'    String
"year"               )
scpOfTheProjS :: IdeaDict
scpOfTheProjS   = String -> NP -> IdeaDict
nc String
"scpOfTheProj"   (String -> NP
cn'    String
"scope of the project") -- temporary generated for test

notApp :: IdeaDict
notApp          = String -> NP -> Maybe String -> IdeaDict
mkIdea String
"notApp" (String -> NP
nounPhraseSP String
"not applicable")   (String -> Maybe String
forall a. a -> Maybe a
Just String
"N/A")

methAndAnls, procForAnls :: IdeaDict

methAndAnls :: IdeaDict
methAndAnls         = String -> NP -> IdeaDict
nc String
"methAndAnls"        (IdeaDict
method_ IdeaDict -> IdeaDict -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`and_` IdeaDict
analysis)
procForAnls :: IdeaDict
procForAnls         = String -> NP -> IdeaDict
nc String
"procForAnls"        (IdeaDict
procedure IdeaDict -> IdeaDict -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`for` IdeaDict
analysis)

-- ** Compound Chunks

coordinateSystem, physicalSim, useCaseTable, physicalProperty, safetyReq,
  softwareSys, softwareVerif, uncertCol, userInput :: IdeaDict

coordinateSystem :: IdeaDict
coordinateSystem             = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
coordinate IdeaDict
system
--inDatumConstraint            = compoundNC input_ datumConstraint -- may be used later, but they break stable for now
--outDatumConstraint           = compoundNC output_ datumConstraint
physicalProperty :: IdeaDict
physicalProperty             = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
physical IdeaDict
property
physicalSim :: IdeaDict
physicalSim                  = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
physical IdeaDict
simulation
safetyReq :: IdeaDict
safetyReq                    = IdeaDict -> CI -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
safety CI
requirement
softwareSys :: IdeaDict
softwareSys                  = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
software IdeaDict
system
softwareVerif :: IdeaDict
softwareVerif                = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
software IdeaDict
verification
uncertCol :: IdeaDict
uncertCol                    = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
uncertainty IdeaDict
column
useCaseTable :: IdeaDict
useCaseTable                 = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
useCase IdeaDict
table_
userInput :: IdeaDict
userInput                    = IdeaDict -> IdeaDict -> IdeaDict
forall a b. (NamedIdea a, NamedIdea b) => a -> b -> IdeaDict
compoundNC IdeaDict
user IdeaDict
input_

-- * Domains

-- | List of SRS-related concepts, including SRS.
srsDomains :: [ConceptChunk]
srsDomains :: [ConceptChunk]
srsDomains = [ConceptChunk -> ConceptChunk
forall c. Concept c => c -> ConceptChunk
cw ConceptChunk
srsDom, ConceptChunk
goalStmtDom, ConceptChunk
reqDom, ConceptChunk
funcReqDom, ConceptChunk
nonFuncReqDom,
  ConceptChunk
assumpDom, ConceptChunk
chgProbDom, ConceptChunk
likeChgDom, ConceptChunk
unlikeChgDom]