-- | Holds all section constructors and labels for creating SRS documents.
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       cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.tOfCont)                   [Contents]
cs [Section]
ss Reference
tOfContLabel

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

-- | Introduction 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
-- | Purpose of Document section.
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
-- | Scope of Requirements section.
scpOfReq :: [Contents] -> [Section] -> Section
scpOfReq      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.scpOfReq)                 [Contents]
cs [Section]
ss Reference
reqsScopeLabel
-- | Characteristics of Intended Reader section.
charOfIR :: [Contents] -> [Section] -> Section
charOfIR      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.charOfIR)                 [Contents]
cs [Section]
ss Reference
readerCharsLabel
-- | Organization of Document section.
orgOfDoc :: [Contents] -> [Section] -> Section
orgOfDoc      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.orgOfDoc)                  [Contents]
cs [Section]
ss Reference
docOrgLabel

-- | Stakeholders section.
stakeholder :: [Contents] -> [Section] -> Section
stakeholder   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.stakeholder)              [Contents]
cs [Section]
ss Reference
stakeholderLabel
-- | The Customer section.
theCustomer :: [Contents] -> [Section] -> Section
theCustomer   cs :: [Contents]
cs ss :: [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
$ NamedChunk -> NP
forall t. NamedIdea t => t -> NP
the NamedChunk
Doc.customer)          [Contents]
cs [Section]
ss Reference
customerLabel
-- | The Client section.
theClient :: [Contents] -> [Section] -> Section
theClient     cs :: [Contents]
cs ss :: [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
$ NamedChunk -> NP
forall t. NamedIdea t => t -> NP
the NamedChunk
Doc.client)            [Contents]
cs [Section]
ss Reference
clientLabel

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

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

-- | Problem Description section.
probDesc :: [Contents] -> [Section] -> Section
probDesc      cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.problemDescription)        [Contents]
cs [Section]
ss Reference
probDescLabel
-- | Terminology and Definitions section.
termAndDefn :: [Contents] -> [Section] -> Section
termAndDefn   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.termAndDef)               [Contents]
cs [Section]
ss Reference
termDefsLabel
-- | Physical System Description section.
physSyst :: [Contents] -> [Section] -> Section
physSyst      cs :: [Contents]
cs ss :: [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      cs :: [Contents]
cs ss :: [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   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.solutionCharSpec)          [Contents]
cs [Section]
ss Reference
solCharSpecLabel
-- | Assumptions section.
assumpt :: [Contents] -> [Section] -> Section
assumpt       cs :: [Contents]
cs ss :: [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       cs :: [Contents]
cs ss :: [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       cs :: [Contents]
cs ss :: [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      cs :: [Contents]
cs ss :: [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       cs :: [Contents]
cs ss :: [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        cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.datumConstraint)          [Contents]
cs [Section]
ss Reference
datConLabel
-- | Properties of a Correct Solution section.
propCorSol :: [Contents] -> [Section] -> Section
propCorSol    cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.propOfCorSol)             [Contents]
cs [Section]
ss Reference
corSolPropsLabel

-- | Requirements section.
require :: [Contents] -> [Section] -> Section
require       cs :: [Contents]
cs ss :: [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    cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.nonfunctionalRequirement) [Contents]
cs [Section]
ss Reference
nonfuncReqLabel
-- | Functional Requirements section.
funcReq :: [Contents] -> [Section] -> Section
funcReq       cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.functionalRequirement)    [Contents]
cs [Section]
ss Reference
funcReqLabel

-- | Likely Changes section.
likeChg :: [Contents] -> [Section] -> Section
likeChg       cs :: [Contents]
cs ss :: [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     cs :: [Contents]
cs ss :: [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   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.traceyMandG)              [Contents]
cs [Section]
ss Reference
traceMatricesLabel
-- | Values of Auxiliary Constants section.
valsOfAuxCons :: [Contents] -> [Section] -> Section
valsOfAuxCons cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.consVals)                  [Contents]
cs [Section]
ss Reference
valsOfAuxConsLabel
-- | References section.
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
-- | Appendix section.
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
-- | Off-the-Shelf Solutions section.
offShelfSol :: [Contents] -> [Section] -> Section
offShelfSol   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.offShelfSolution)         [Contents]
cs [Section]
ss Reference
offShelfSolnsLabel

-- Unused
-- | Scope of the Project section.
scpOfTheProj :: [Contents] -> [Section] -> Section
scpOfTheProj  cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
atStart ((NamedChunk -> Sentence) -> NamedChunk
Doc.scpOfTheProj NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize))    [Contents]
cs [Section]
ss Reference
projScopeLabel
-- | Product Use Case Table section.
prodUCTable :: [Contents] -> [Section] -> Section
prodUCTable   cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
Doc.prodUCTable)               [Contents]
cs [Section]
ss Reference
useCaseTableLabel
-- | Individual Product Use Case section.
indPRCase :: [Contents] -> [Section] -> Section
indPRCase     cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.indPRCase)                [Contents]
cs [Section]
ss Reference
indPRCaseLabel
-- | Terminology section.
termogy :: [Contents] -> [Section] -> Section
termogy       cs :: [Contents]
cs ss :: [Section]
ss = Sentence -> [Contents] -> [Section] -> Reference -> Section
section (NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize NamedChunk
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 "ToC"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.tOfCont

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

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
reqsScopeLabel :: Reference
reqsScopeLabel      = String -> Sentence -> Reference
makeSecRef "ReqsScope"        (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.scpOfReq
readerCharsLabel :: Reference
readerCharsLabel    = String -> Sentence -> Reference
makeSecRef "ReaderChars"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.charOfIR
docOrgLabel :: Reference
docOrgLabel         = String -> Sentence -> Reference
makeSecRef "DocOrg"           (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  NamedChunk
Doc.orgOfDoc

stakeholderLabel :: Reference
stakeholderLabel    = String -> Sentence -> Reference
makeSecRef "Stakeholder"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.stakeholder
clientLabel :: Reference
clientLabel         = String -> Sentence -> Reference
makeSecRef "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
$ NamedChunk -> NP
forall t. NamedIdea t => t -> NP
the NamedChunk
Doc.client
customerLabel :: Reference
customerLabel       = String -> Sentence -> Reference
makeSecRef "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
$ NamedChunk -> NP
forall t. NamedIdea t => t -> NP
the NamedChunk
Doc.customer

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

specSystDescLabel :: Reference
specSystDescLabel   = String -> Sentence -> Reference
makeSecRef "SpecSystDesc"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  NamedChunk
Doc.specificsystemdescription
physSystLabel :: Reference
physSystLabel       = String -> Sentence -> Reference
makeSecRef "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 "ProbDesc"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  NamedChunk
Doc.problemDescription
termDefsLabel :: Reference
termDefsLabel       = String -> Sentence -> Reference
makeSecRef "TermDefs"         (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.termAndDef
goalStmtLabel :: Reference
goalStmtLabel       = String -> Sentence -> Reference
makeSecRef "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 "SolCharSpec"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  NamedChunk
Doc.solutionCharSpec
assumptLabel :: Reference
assumptLabel        = String -> Sentence -> Reference
makeSecRef "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 "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 "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 "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 "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 "DataConstraints"  (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.datumConstraint
corSolPropsLabel :: Reference
corSolPropsLabel    = String -> Sentence -> Reference
makeSecRef "CorSolProps"      (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.propOfCorSol

requirementsLabel :: Reference
requirementsLabel   = String -> Sentence -> Reference
makeSecRef "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 "FRs"              (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.functionalRequirement
nonfuncReqLabel :: Reference
nonfuncReqLabel     = String -> Sentence -> Reference
makeSecRef "NFRs"             (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.nonfunctionalRequirement

likeChgLabel :: Reference
likeChgLabel        = String -> Sentence -> Reference
makeSecRef "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 "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 "TraceMatrices"    (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.traceyMandG
valsOfAuxConsLabel :: Reference
valsOfAuxConsLabel  = String -> Sentence -> Reference
makeSecRef "AuxConstants"     (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize  NamedChunk
Doc.consVals
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 
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
offShelfSolnsLabel :: Reference
offShelfSolnsLabel  = String -> Sentence -> Reference
makeSecRef "offShelfSolns"    (Sentence -> Reference) -> Sentence -> Reference
forall a b. (a -> b) -> a -> b
$ NamedChunk -> Sentence
forall n. NamedIdea n => n -> Sentence
titleize' NamedChunk
Doc.offShelfSolution

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