-- | Holds all section constructors and labels for creating SRS documents.

-- Changes to SRS sections 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 Drasil.DocLang.SRS (
  -- * Section Constructors
  -- | For use in an SRS document. Ordered by appearance in a SRS.
  tOfCont, refMat, tOfUnit, tOfSymb, tOfAbbAcc, intro, prpsOfDoc, scpOfReq,
  charOfIR, orgOfDoc, stakeholder, theCustomer, theClient, genSysDes, sysCont,
  userChar, sysCon, specSysDes, probDesc, termAndDefn, physSyst, goalStmt,
  solCharSpec, assumpt, thModel, genDefn, dataDefn, inModel, datCon, propCorSol,
  require, nonfuncReq, funcReq, likeChg, unlikeChg, traceyMandG, valsOfAuxCons,
  reference, appendix, offShelfSol, scpOfTheProj, prodUCTable, indPRCase,
  termogy,
  -- * Section Labels
  -- | Labels linked to the associated section constructor. Ordered by appearance in a SRS.
  tOfContLabel, refMatLabel, tOfUnitLabel, tOfSymbLabel, tOfAbbAccLabel,
  introLabel, docPurposeLabel, reqsScopeLabel, readerCharsLabel, docOrgLabel,
  stakeholderLabel, clientLabel, customerLabel, genSysDescLabel, sysContextLabel,
  userCharsLabel, sysConstraintsLabel, specSystDescLabel, physSystLabel, probDescLabel,
  termDefsLabel, goalStmtLabel, solCharSpecLabel, assumptLabel, thModelLabel,
  genDefnLabel, dataDefnLabel, inModelLabel, datConLabel, corSolPropsLabel, requirementsLabel,
  funcReqLabel, nonfuncReqLabel, likeChgLabel, unlikeChgLabel, traceMatricesLabel,
  valsOfAuxConsLabel, referenceLabel, appendixLabel, offShelfSolnsLabel, indPRCaseLabel,
  projScopeLabel, useCaseTableLabel, terminologyLabel,
  -- * All Section References
  sectionReferences) where
--Temporary file for keeping the "srs" document constructor until I figure out
-- a better place for it. Maybe Data.Drasil or Language.Drasil.Template?

--May want to combine SRS-specific functions into this file as well (ie. OrganizationOfSRS) to make it more Recipe-like.

import Language.Drasil
import Language.Drasil.Chunk.Concept.NamedCombinators

import qualified Data.Drasil.Concepts.Documentation as Doc (appendix, assumption,
  charOfIR, client, customer, consVals, datumConstraint, functionalRequirement,
  generalSystemDescription, goalStmt, indPRCase, introduction, likelyChg,
  unlikelyChg, nonfunctionalRequirement, offShelfSolution, orgOfDoc, physSyst,
  prodUCTable, problemDescription, propOfCorSol, prpsOfDoc, reference, requirement,
  scpOfReq, scpOfTheProj, solutionCharSpec, specificsystemdescription,
  stakeholder, sysCont, systemConstraint, termAndDef, terminology, traceyMandG,
  tOfCont, tOfSymb, tOfUnit, userCharacteristic, refMat, abbAcc)
import qualified Data.Drasil.TheoryConcepts as Doc (dataDefn, genDefn, inModel, thModel)


-- Ordered by appearance in SRS.
-- | Standard SRS section builders.
tOfCont, refMat, tOfUnit, tOfSymb, tOfAbbAcc, intro, prpsOfDoc, scpOfReq,
  charOfIR, orgOfDoc, stakeholder, theCustomer, theClient, genSysDes, sysCont,
  userChar, sysCon, specSysDes, probDesc, termAndDefn, physSyst, goalStmt,
  solCharSpec, assumpt, thModel, genDefn, dataDefn, inModel, datCon, propCorSol,
  require, nonfuncReq, funcReq, likeChg, unlikeChg, traceyMandG, valsOfAuxCons,
  reference, appendix, offShelfSol, scpOfTheProj, prodUCTable, indPRCase,
  termogy :: [Contents] -> [Section] -> Section

-- | Table of Contents section.
tOfCont :: [Contents] -> [Section] -> Section
tOfCont       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfCont)                   [Contents]
cs [Section]
ss Reference
tOfContLabel

-- | Reference Material section.
refMat :: [Contents] -> [Section] -> Section
refMat        [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.refMat)                    [Contents]
cs [Section]
ss Reference
refMatLabel
-- | Table of Units section.
tOfUnit :: [Contents] -> [Section] -> Section
tOfUnit       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfUnit)                  [Contents]
cs [Section]
ss Reference
tOfUnitLabel
-- | Table of Symbols section.
tOfSymb :: [Contents] -> [Section] -> Section
tOfSymb       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfSymb)                  [Contents]
cs [Section]
ss Reference
tOfSymbLabel
-- | Table of Abbreviations and Acronyms section.
tOfAbbAcc :: [Contents] -> [Section] -> Section
tOfAbbAcc     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.abbAcc)                   [Contents]
cs [Section]
ss Reference
tOfAbbAccLabel

-- | Introduction section.
intro :: [Contents] -> [Section] -> Section
intro         [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.introduction)              [Contents]
cs [Section]
ss Reference
introLabel
-- | Purpose of Document section.
prpsOfDoc :: [Contents] -> [Section] -> Section
prpsOfDoc     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.prpsOfDoc)                 [Contents]
cs [Section]
ss Reference
docPurposeLabel
-- | Scope of Requirements section.
scpOfReq :: [Contents] -> [Section] -> Section
scpOfReq      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.scpOfReq)                 [Contents]
cs [Section]
ss Reference
reqsScopeLabel
-- | Characteristics of Intended Reader section.
charOfIR :: [Contents] -> [Section] -> Section
charOfIR      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.charOfIR)                 [Contents]
cs [Section]
ss Reference
readerCharsLabel
-- | Organization of Document section.
orgOfDoc :: [Contents] -> [Section] -> Section
orgOfDoc      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.orgOfDoc)                  [Contents]
cs [Section]
ss Reference
docOrgLabel

-- | Stakeholders section.
stakeholder :: [Contents] -> [Section] -> Section
stakeholder   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.stakeholder)              [Contents]
cs [Section]
ss Reference
stakeholderLabel
-- | The Customer section.
theCustomer :: [Contents] -> [Section] -> Section
theCustomer   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NP -> Sentence
forall n. NounPhrase n => n -> Sentence
titleizeNP (NP -> Sentence) -> NP -> Sentence
forall a b. (a -> b) -> a -> b
$ IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
Doc.customer)          [Contents]
cs [Section]
ss Reference
customerLabel
-- | The Client section.
theClient :: [Contents] -> [Section] -> Section
theClient     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NP -> Sentence
forall n. NounPhrase n => n -> Sentence
titleizeNP (NP -> Sentence) -> NP -> Sentence
forall a b. (a -> b) -> a -> b
$ IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
Doc.client)            [Contents]
cs [Section]
ss Reference
clientLabel

-- | General System Description section.
genSysDes :: [Contents] -> [Section] -> Section
genSysDes     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.generalSystemDescription)  [Contents]
cs [Section]
ss Reference
genSysDescLabel
-- | System Context section.
sysCont :: [Contents] -> [Section] -> Section
sysCont       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.sysCont)                   [Contents]
cs [Section]
ss Reference
sysContextLabel
-- | User Characteristics section.
userChar :: [Contents] -> [Section] -> Section
userChar      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.userCharacteristic)       [Contents]
cs [Section]
ss Reference
userCharsLabel
-- | System Constraints section.
sysCon :: [Contents] -> [Section] -> Section
sysCon        [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.systemConstraint)         [Contents]
cs [Section]
ss Reference
sysConstraintsLabel

-- | Specific System Description section.
specSysDes :: [Contents] -> [Section] -> Section
specSysDes    [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.specificsystemdescription) [Contents]
cs [Section]
ss Reference
specSystDescLabel

-- | Problem Description section.
probDesc :: [Contents] -> [Section] -> Section
probDesc      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.problemDescription)        [Contents]
cs [Section]
ss Reference
probDescLabel
-- | Terminology and Definitions section.
termAndDefn :: [Contents] -> [Section] -> Section
termAndDefn   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.termAndDef)               [Contents]
cs [Section]
ss Reference
termDefsLabel
-- | Physical System Description section.
physSyst :: [Contents] -> [Section] -> Section
physSyst      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize CI
Doc.physSyst)                  [Contents]
cs [Section]
ss Reference
physSystLabel
-- | Goal Statement section.
goalStmt :: [Contents] -> [Section] -> Section
goalStmt      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.goalStmt)                 [Contents]
cs [Section]
ss Reference
goalStmtLabel

-- | Solution Characteristics Specification section.
solCharSpec :: [Contents] -> [Section] -> Section
solCharSpec   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.solutionCharSpec)          [Contents]
cs [Section]
ss Reference
solCharSpecLabel
-- | Assumptions section.
assumpt :: [Contents] -> [Section] -> Section
assumpt       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.assumption)               [Contents]
cs [Section]
ss Reference
assumptLabel
-- | Theoretical Models section.
thModel :: [Contents] -> [Section] -> Section
thModel       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.thModel)                  [Contents]
cs [Section]
ss Reference
thModelLabel
-- | General Definitions section.
genDefn :: [Contents] -> [Section] -> Section
genDefn       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.genDefn)                  [Contents]
cs [Section]
ss Reference
genDefnLabel
-- | Data Definitions section.
dataDefn :: [Contents] -> [Section] -> Section
dataDefn      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.dataDefn)                 [Contents]
cs [Section]
ss Reference
dataDefnLabel
-- | Instance Models section.
inModel :: [Contents] -> [Section] -> Section
inModel       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.inModel)                  [Contents]
cs [Section]
ss Reference
inModelLabel
-- | Data Constraints section.
datCon :: [Contents] -> [Section] -> Section
datCon        [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.datumConstraint)          [Contents]
cs [Section]
ss Reference
datConLabel
-- | Properties of a Correct Solution section.
propCorSol :: [Contents] -> [Section] -> Section
propCorSol    [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.propOfCorSol)             [Contents]
cs [Section]
ss Reference
corSolPropsLabel

-- | Requirements section.
require :: [Contents] -> [Section] -> Section
require       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.requirement)              [Contents]
cs [Section]
ss Reference
requirementsLabel
-- | Non-Functional Requirements section.
nonfuncReq :: [Contents] -> [Section] -> Section
nonfuncReq    [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.nonfunctionalRequirement) [Contents]
cs [Section]
ss Reference
nonfuncReqLabel
-- | Functional Requirements section.
funcReq :: [Contents] -> [Section] -> Section
funcReq       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.functionalRequirement)    [Contents]
cs [Section]
ss Reference
funcReqLabel

-- | Likely Changes section.
likeChg :: [Contents] -> [Section] -> Section
likeChg       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.likelyChg)                [Contents]
cs [Section]
ss Reference
likeChgLabel
-- | Unlikely Changes section.
unlikeChg :: [Contents] -> [Section] -> Section
unlikeChg     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.unlikelyChg)              [Contents]
cs [Section]
ss Reference
unlikeChgLabel

-- | Traceablilty Matrices and Graphs section.
traceyMandG :: [Contents] -> [Section] -> Section
traceyMandG   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.traceyMandG)              [Contents]
cs [Section]
ss Reference
traceMatricesLabel
-- | Values of Auxiliary Constants section.
valsOfAuxCons :: [Contents] -> [Section] -> Section
valsOfAuxCons [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.consVals)                  [Contents]
cs [Section]
ss Reference
valsOfAuxConsLabel
-- | References section.
reference :: [Contents] -> [Section] -> Section
reference     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.reference)                [Contents]
cs [Section]
ss Reference
referenceLabel
-- | Appendix section.
appendix :: [Contents] -> [Section] -> Section
appendix      [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.appendix)                  [Contents]
cs [Section]
ss Reference
appendixLabel
-- | Off-the-Shelf Solutions section.
offShelfSol :: [Contents] -> [Section] -> Section
offShelfSol   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.offShelfSolution)         [Contents]
cs [Section]
ss Reference
offShelfSolnsLabel

-- Unused
-- | Scope of the Project section.
scpOfTheProj :: [Contents] -> [Section] -> Section
scpOfTheProj  [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
atStart ((IdeaDict -> Sentence) -> IdeaDict
Doc.scpOfTheProj IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize))    [Contents]
cs [Section]
ss Reference
projScopeLabel
-- | Product Use Case Table section.
prodUCTable :: [Contents] -> [Section] -> Section
prodUCTable   [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.prodUCTable)               [Contents]
cs [Section]
ss Reference
useCaseTableLabel
-- | Individual Product Use Case section.
indPRCase :: [Contents] -> [Section] -> Section
indPRCase     [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.indPRCase)                [Contents]
cs [Section]
ss Reference
indPRCaseLabel
-- | Terminology section.
termogy :: [Contents] -> [Section] -> Section
termogy       [Contents]
cs [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize IdeaDict
Doc.terminology)               [Contents]
cs [Section]
ss Reference
terminologyLabel

--Labels--
-- | Collections all 'Section' 'Reference's.
sectionReferences :: [Reference]
sectionReferences :: [Reference]
sectionReferences = [Reference
tOfContLabel, Reference
refMatLabel, Reference
tOfUnitLabel, Reference
tOfSymbLabel, Reference
tOfAbbAccLabel,
  Reference
introLabel, Reference
docPurposeLabel, Reference
reqsScopeLabel, Reference
readerCharsLabel, Reference
docOrgLabel,
  Reference
stakeholderLabel, Reference
clientLabel, Reference
customerLabel, Reference
genSysDescLabel, Reference
sysContextLabel,
  Reference
userCharsLabel, Reference
sysConstraintsLabel, Reference
specSystDescLabel, Reference
physSystLabel, Reference
probDescLabel,
  Reference
termDefsLabel, Reference
goalStmtLabel, Reference
solCharSpecLabel, Reference
assumptLabel, Reference
thModelLabel,
  Reference
genDefnLabel, Reference
dataDefnLabel, Reference
inModelLabel, Reference
datConLabel, Reference
corSolPropsLabel, Reference
requirementsLabel,
  Reference
funcReqLabel, Reference
nonfuncReqLabel, Reference
likeChgLabel, Reference
unlikeChgLabel, Reference
traceMatricesLabel,
  Reference
valsOfAuxConsLabel, Reference
referenceLabel, Reference
appendixLabel, Reference
offShelfSolnsLabel, Reference
indPRCaseLabel,
  Reference
projScopeLabel, Reference
useCaseTableLabel, Reference
terminologyLabel]

--FIXME: create using section information somehow?
-- | Makes a 'Reference' to a 'Section'.
tOfContLabel, refMatLabel, tOfUnitLabel, tOfSymbLabel, tOfAbbAccLabel,
  introLabel, docPurposeLabel, reqsScopeLabel, readerCharsLabel, docOrgLabel,
  stakeholderLabel, clientLabel, customerLabel, genSysDescLabel, sysContextLabel,
  userCharsLabel, sysConstraintsLabel, specSystDescLabel, physSystLabel, probDescLabel,
  termDefsLabel, goalStmtLabel, solCharSpecLabel, assumptLabel, thModelLabel,
  genDefnLabel, dataDefnLabel, inModelLabel, datConLabel, corSolPropsLabel, requirementsLabel,
  funcReqLabel, nonfuncReqLabel, likeChgLabel, unlikeChgLabel, traceMatricesLabel,
  valsOfAuxConsLabel, referenceLabel, appendixLabel, offShelfSolnsLabel, indPRCaseLabel,
  projScopeLabel, useCaseTableLabel, terminologyLabel :: Reference

tOfContLabel :: Reference
tOfContLabel        = String -> Sentence -> Reference
makeSecRef String
"ToC"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfCont

refMatLabel :: Reference
refMatLabel         = String -> Sentence -> Reference
makeSecRef String
"RefMat"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.refMat
tOfUnitLabel :: Reference
tOfUnitLabel        = String -> Sentence -> Reference
makeSecRef String
"ToU"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfUnit
tOfSymbLabel :: Reference
tOfSymbLabel        = String -> Sentence -> Reference
makeSecRef String
"ToS"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.tOfSymb
tOfAbbAccLabel :: Reference
tOfAbbAccLabel      = String -> Sentence -> Reference
makeSecRef String
"TAbbAcc"          (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.abbAcc

introLabel :: Reference
introLabel          = String -> Sentence -> Reference
makeSecRef String
"Intro"            (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.introduction
docPurposeLabel :: Reference
docPurposeLabel     = String -> Sentence -> Reference
makeSecRef String
"DocPurpose"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.prpsOfDoc
reqsScopeLabel :: Reference
reqsScopeLabel      = String -> Sentence -> Reference
makeSecRef String
"ReqsScope"        (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.scpOfReq
readerCharsLabel :: Reference
readerCharsLabel    = String -> Sentence -> Reference
makeSecRef String
"ReaderChars"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.charOfIR
docOrgLabel :: Reference
docOrgLabel         = String -> Sentence -> Reference
makeSecRef String
"DocOrg"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.orgOfDoc

stakeholderLabel :: Reference
stakeholderLabel    = String -> Sentence -> Reference
makeSecRef String
"Stakeholder"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.stakeholder
clientLabel :: Reference
clientLabel         = String -> Sentence -> Reference
makeSecRef String
"Client"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NP -> Sentence
forall n. NounPhrase n => n -> Sentence
titleizeNP (NP -> Sentence) -> NP -> Sentence
forall a b. (a -> b) -> a -> b
$ IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
Doc.client
customerLabel :: Reference
customerLabel       = String -> Sentence -> Reference
makeSecRef String
"Customer"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NP -> Sentence
forall n. NounPhrase n => n -> Sentence
titleizeNP (NP -> Sentence) -> NP -> Sentence
forall a b. (a -> b) -> a -> b
$ IdeaDict -> NP
forall t. NamedIdea t => t -> NP
the IdeaDict
Doc.customer

genSysDescLabel :: Reference
genSysDescLabel     = String -> Sentence -> Reference
makeSecRef String
"GenSysDesc"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.generalSystemDescription
sysContextLabel :: Reference
sysContextLabel     = String -> Sentence -> Reference
makeSecRef String
"SysContext"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.sysCont
userCharsLabel :: Reference
userCharsLabel      = String -> Sentence -> Reference
makeSecRef String
"UserChars"        (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.userCharacteristic
sysConstraintsLabel :: Reference
sysConstraintsLabel = String -> Sentence -> Reference
makeSecRef String
"SysConstraints"   (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.systemConstraint

specSystDescLabel :: Reference
specSystDescLabel   = String -> Sentence -> Reference
makeSecRef String
"SpecSystDesc"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.specificsystemdescription
physSystLabel :: Reference
physSystLabel       = String -> Sentence -> Reference
makeSecRef String
"PhysSyst"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  CI
Doc.physSyst
probDescLabel :: Reference
probDescLabel       = String -> Sentence -> Reference
makeSecRef String
"ProbDesc"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.problemDescription
termDefsLabel :: Reference
termDefsLabel       = String -> Sentence -> Reference
makeSecRef String
"TermDefs"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.termAndDef
goalStmtLabel :: Reference
goalStmtLabel       = String -> Sentence -> Reference
makeSecRef String
"GoalStmt"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.goalStmt

solCharSpecLabel :: Reference
solCharSpecLabel    = String -> Sentence -> Reference
makeSecRef String
"SolCharSpec"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.solutionCharSpec
assumptLabel :: Reference
assumptLabel        = String -> Sentence -> Reference
makeSecRef String
"Assumps"          (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.assumption
thModelLabel :: Reference
thModelLabel        = String -> Sentence -> Reference
makeSecRef String
"TMs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.thModel
genDefnLabel :: Reference
genDefnLabel        = String -> Sentence -> Reference
makeSecRef String
"GDs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.genDefn
dataDefnLabel :: Reference
dataDefnLabel       = String -> Sentence -> Reference
makeSecRef String
"DDs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.dataDefn
inModelLabel :: Reference
inModelLabel        = String -> Sentence -> Reference
makeSecRef String
"IMs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.inModel
datConLabel :: Reference
datConLabel         = String -> Sentence -> Reference
makeSecRef String
"DataConstraints"  (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.datumConstraint
corSolPropsLabel :: Reference
corSolPropsLabel    = String -> Sentence -> Reference
makeSecRef String
"CorSolProps"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.propOfCorSol

requirementsLabel :: Reference
requirementsLabel   = String -> Sentence -> Reference
makeSecRef String
"Requirements"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.requirement
funcReqLabel :: Reference
funcReqLabel        = String -> Sentence -> Reference
makeSecRef String
"FRs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.functionalRequirement
nonfuncReqLabel :: Reference
nonfuncReqLabel     = String -> Sentence -> Reference
makeSecRef String
"NFRs"             (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.nonfunctionalRequirement

likeChgLabel :: Reference
likeChgLabel        = String -> Sentence -> Reference
makeSecRef String
"LCs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.likelyChg
unlikeChgLabel :: Reference
unlikeChgLabel      = String -> Sentence -> Reference
makeSecRef String
"UCs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ CI -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' CI
Doc.unlikelyChg

traceMatricesLabel :: Reference
traceMatricesLabel  = String -> Sentence -> Reference
makeSecRef String
"TraceMatrices"    (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.traceyMandG
valsOfAuxConsLabel :: Reference
valsOfAuxConsLabel  = String -> Sentence -> Reference
makeSecRef String
"AuxConstants"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.consVals
referenceLabel :: Reference
referenceLabel      = String -> Sentence -> Reference
makeSecRef String
"References"       (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.reference 
appendixLabel :: Reference
appendixLabel       = String -> Sentence -> Reference
makeSecRef String
"Appendix"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.appendix
offShelfSolnsLabel :: Reference
offShelfSolnsLabel  = String -> Sentence -> Reference
makeSecRef String
"offShelfSolns"    (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.offShelfSolution

-- Used only under People/Dan/Presentations/CommitteeMeeting4/BodyNew.hs
indPRCaseLabel :: Reference
indPRCaseLabel      = String -> Sentence -> Reference
makeSecRef String
"IndividualProdUC" (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' IdeaDict
Doc.indPRCase
-- Seem to be unused. Should they be deleted?
projScopeLabel :: Reference
projScopeLabel      = String -> Sentence -> Reference
makeSecRef String
"ProjScope"        (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
atStart (IdeaDict -> Sentence) -> IdeaDict -> Sentence
forall a b. (a -> b) -> a -> b
$ (IdeaDict -> Sentence) -> IdeaDict
Doc.scpOfTheProj IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize
useCaseTableLabel :: Reference
useCaseTableLabel   = String -> Sentence -> Reference
makeSecRef String
"UseCaseTable"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.prodUCTable
terminologyLabel :: Reference
terminologyLabel    = String -> Sentence -> Reference
makeSecRef String
"Terminology"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ IdeaDict -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  IdeaDict
Doc.terminology