1
0
Fork 0
lvspec/raterspec.cls

209 lines
4.5 KiB
TeX

% LoVullo rater specification class
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{raterspec}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{lvspec}}
\ProcessOptions\relax
% we're an extension of the base lvspec
\LoadClass[insuranceterms]{lvspec}
%%
% Default package includes
%
% Note that these are not all the packages that are available; see the
% raterspec/ directory in the lvspec repo
%
\RequirePackage{raterspec/param}
\RequirePackage{raterspec/class}
\RequirePackage{raterspec/question}
\RequirePackage{raterspec/rates}
\RequirePackage{raterspec/form}
\RequirePackage{raterspec/c1import}
\RequirePackage{lvflow}
%\RequirePackage{premcalc}
%%
% Formatting
%
% we gots some big section numbers
\renewcommand\l@subsubsection{\@dottedtocline{3}{7em}{4.6em}}
%%
% Rater-specific specification additions
%
% This should be called before beginning the documet environment
%
\def\@RaterProgramName#1{
\gdef\@lvspec@pretitle{%
#1 Supplier\\Specifications:\\
\vspace{0.5em}%
}
\gdef\@lvspec@premarktitle{#1:\space}
\abstract{%
This document is a formal specification for the integration of
\@title@short{} with the Dwelling Program of the Quote Server, Program
UI and~ConceptOne. This document should contain all information
necessary to complete a conforming implementation with minimal
clarification and will serve as a reference for future development,
including bug fixes and feature requests.
}
}
\terminology{%
\subsection{Rater Terminology}
\input{raterspec/sec/rater-dfn}
}
%% note: \pnumoff and \pnumon are temporary kluges (...hopefully)
%%
% Beginning of document
%
% The host environment is the same for all new systems
%
\let\@@madespec0
\def\@raterspec@mkhook#1#2#3#4{
\expandafter\gdef\csname @raterspec@#1\endcsname{
\PackageWarning{raterspec}{Missing #2!
\MessageBreak Define using \expandafter\protect\csname#1\endcsname}%
\todo{No #2 have been defined.}%
}
\expandafter\gdef\csname#1\endcsname##1{%
\expandafter\gdef\csname @raterspec@#1\endcsname{%
#3\input{##1}#4%
}%
}
% publically accessible output macro
\expandafter\gdef\csname#1out\endcsname{%
\csname @raterspec@#1\endcsname
}
}
\def\makespec{
\ifx\@@madespec1%
\PackageError{raterspec}{Duplicate call to \protect\makespec}
\fi
\global\let\@@madespec1
\pnumoff\part{General System}\pnumon
\chapter{Host Environment}
\input{raterspec/sec/hostenv}
\chapter{Input Data}
\index{input data|(}
\input{raterspec/sec/input}
% implementation-specific parameter types
\section{Program-Specific Parameter Types}
\sectiondept{it/uw}
\@raterspec@inputtypes
\index{input data|)}
\chapter{Input Parameters}
\index{input data!parameters|(}
\index{parameter|(}
\input{raterspec/sec/params}
\@raterspec@inputparams
\index{input data!parameters|)}
\index{parameter|)}
}
\@raterspec@mkhook{inputtypes}{input types}
{%
% can't really include a sigline here because approvial would be global
\pnumoff
Parameter types in this section are common to the \@title@short\ program.
\pnumon
\index{parameter type|(}
}
{\index{parameter type|)}}
\@raterspec@mkhook{inputparams}{input parameters}
{}
{}
\AtEndDocument{
\ifx\@@madespec0
\PackageError{raterspec}{\protect\makespec\space was not called}
\fi
}
%%
% Code generation
%
% Right now the code generation is tightly coupled with the packages that it
% is applicable to; they need to be refactored and hooks added
\newwrite\@@codegen
\immediate\openout\@@codegen=gen.xml
\def\@codegen{%
\begingroup
% prepare common cases for plain-text output
\def\sref##1{the specification}%
\def~{ }%
\def\emph{}%
\def\nobreakspace{ }%
\def\${}%
\@do@codegen
}
\def\@do@codegen#1{%
\immediate\write\@@codegen{#1}%
\endgroup
}
%%
% Misc
%
\def\@firstchar #1#2||{#1}
\def\@secondchar #1#2#3||{#2}
\def\@ifnumeric#1{{%
\edef\@@chk{\@firstchar#1||}%
% determine if this is a number
\def\@@result{0}%
% strip any negative sign
\ifnum\expandafter`\@@chk=`-
\edef\@@chk{\@secondchar#1--||}%
\fi
% perform number check
\ifnum\expandafter`\@@chk<`0\else
\ifnum\expandafter`\@@chk>`9\else
% is a number
\def\@@result{1}%
\fi
\fi
% use the result to output a conditional that will match a closing \fi
\aftergroup\ifnum
\expandafter\aftergroup\@@result
\aftergroup=%
\aftergroup1%
\aftergroup\relax
}}
\def\beginundersletter{%
\begingroup% ended by \@dotypedef
\catcode`\_=11\relax
}
\def\endundersletter{%
\endgroup
}