2015-03-23 15:11:35 -04:00
|
|
|
<?xml version="1.0"?>
|
2015-03-18 13:32:24 -04:00
|
|
|
<!--
|
|
|
|
Copyright (C) 2015 LoVullo Associates, Inc.
|
|
|
|
|
|
|
|
This file is part of tame-core.
|
|
|
|
|
|
|
|
tame-core is free software: you can redistribute it and/or modify it
|
|
|
|
under the terms of the GNU Lesser General Public License as
|
|
|
|
published by the Free Software Foundation, either version 3 of the
|
|
|
|
License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
-->
|
2015-03-18 11:31:47 -04:00
|
|
|
<package xmlns="http://www.lovullo.com/rater"
|
2015-03-23 15:11:35 -04:00
|
|
|
xmlns:c="http://www.lovullo.com/calc"
|
|
|
|
core="true"
|
|
|
|
desc="Base features">
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
The \pkgself~package exposes common and internal
|
|
|
|
defintions. Ideally, this package will be included automatically by
|
|
|
|
the compiler to remove repetitive, boilerplate imports. Importing
|
|
|
|
this package isn't necessary if none of these definitions are
|
|
|
|
needed.
|
2013-02-13 09:27:33 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<section title="Internal Constants">
|
|
|
|
\ref{_CMATCH_} is a magic constant that contains the result of
|
|
|
|
a~classification match. This is used implicity by
|
|
|
|
\ref{rate-each}.\footnote{The symbol is \Xi~because it looks like
|
|
|
|
a sideways array.}
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
\todo{Remove in favor of a local variable or generated
|
|
|
|
classification; there is no need (anymore) for this to be magic.}
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<const name="_CMATCH_" type="boolean" sym="\Xi"
|
|
|
|
desc="Set indicating indexes of classification matches">
|
|
|
|
<item value="0"
|
|
|
|
desc="Dummy value; this set is populated upon entering
|
|
|
|
each rate block" />
|
|
|
|
</const>
|
2013-02-13 09:27:33 -05:00
|
|
|
|
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
The runtime is responsible for populating \ref{__DATE_YEAR__} with
|
|
|
|
a proper value representing the current year.
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
\todo{TAME is deterministic with this one exception; remove it and
|
|
|
|
have users use a param instead if they need this datum.}
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<const name="__DATE_YEAR__" magic="true"
|
|
|
|
value="0" type="integer"
|
|
|
|
desc="Current year"
|
|
|
|
sym="\widehat{D^\gamma}" />
|
|
|
|
</section>
|
2013-02-13 09:27:33 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<section title="Primitive Types">
|
|
|
|
Primitives are defined internally; these definitions simply
|
|
|
|
provide symbols to permit their use.
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<typedef name="integer"
|
|
|
|
desc="Any value in the set of integers"
|
|
|
|
sym="\mathbb{I}">
|
|
|
|
<base-type />
|
|
|
|
</typedef>
|
2013-02-13 09:27:33 -05:00
|
|
|
|
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<typedef name="float"
|
|
|
|
desc="Any real number (represented as a float)"
|
|
|
|
sym="\mathbb{R}">
|
|
|
|
<base-type />
|
|
|
|
</typedef>
|
2013-02-13 09:27:33 -05:00
|
|
|
|
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
<typedef name="boolean" desc="Boolean values">
|
|
|
|
<enum type="integer">
|
|
|
|
<item name="TRUE" value="1" desc="True" />
|
|
|
|
<item name="FALSE" value="0" desc="False" />
|
|
|
|
</enum>
|
|
|
|
</typedef>
|
2013-02-13 09:27:33 -05:00
|
|
|
|
2015-03-23 15:11:35 -04:00
|
|
|
|
|
|
|
\ref{empty} does not have much use outside of the compiler.
|
|
|
|
|
|
|
|
<typedef name="empty"
|
|
|
|
desc="Empty set"
|
|
|
|
sym="\emptyset">
|
|
|
|
<base-type />
|
|
|
|
</typedef>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section title="Convenience">
|
2015-03-24 13:48:11 -04:00
|
|
|
$0$~is a~common value. Where a value is required (such
|
2015-03-23 15:11:35 -04:00
|
|
|
as a~template argument), \ref{ZERO} may be used. TAME now
|
|
|
|
supports a~constant-scalar syntax ({\tt #0}; \todo{reference this
|
|
|
|
in documentation}), making this largely unnecessary.
|
|
|
|
|
|
|
|
This is declared as a float to provide compatibility with all
|
|
|
|
types of expressions.
|
|
|
|
|
|
|
|
<const name="ZERO" value="0.00"
|
|
|
|
desc="Zero value" />
|
|
|
|
|
|
|
|
|
|
|
|
In the case where classifications are required, but a~static
|
|
|
|
assumption about the applicability of the subject can be made, we
|
|
|
|
have values that are always~true and always~false. The use
|
|
|
|
of~\ref{never} may very well be a~code smell, but let us not rush
|
|
|
|
to judgment.\footnote{\ref{never} has been added as an analog
|
|
|
|
to~\ref{always}; its author has never had use for it. Oh, look,
|
|
|
|
we just used ``never''.}
|
|
|
|
|
|
|
|
<classify as="always"
|
|
|
|
desc="Always true"
|
|
|
|
yields="alwaysTrue"
|
|
|
|
keep="true" />
|
|
|
|
|
|
|
|
<classify as="never"
|
2015-04-29 15:23:04 -04:00
|
|
|
any="true"
|
2015-03-23 15:11:35 -04:00
|
|
|
desc="Never true"
|
|
|
|
yields="neverTrue"
|
|
|
|
keep="true" />
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<section title="Work-In-Progress">
|
|
|
|
The templates in this section handle code that is
|
|
|
|
a~work-in-progress; they should probably not be used in production
|
|
|
|
code, since they indicate that something is incomplete or unused.
|
|
|
|
|
|
|
|
\ref{_todo_} formalizes TODO items and \may~always yield a scalar
|
|
|
|
integer~0, so it may be used within calculations. If yielding a
|
|
|
|
constant value is not appropriate, it \may~also be stripped from
|
|
|
|
the output entirely.
|
|
|
|
|
|
|
|
<template name="_todo_"
|
|
|
|
desc="Represents work that needs to be done">
|
|
|
|
<param name="@desc@" desc="TODO desc">
|
|
|
|
<text>TODO</text>
|
|
|
|
</param>
|
|
|
|
|
|
|
|
<param name="@hide@" desc="Whether to hide content by stripping
|
|
|
|
it entriely from the output" />
|
|
|
|
|
|
|
|
<unless name="@hide@">
|
|
|
|
<c:const value="0"
|
|
|
|
desc="@desc@" />
|
|
|
|
</unless>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
The \ref{_ignore_} template serves as a~block
|
|
|
|
comment.\footnote{This is useful since XML does not support nested
|
|
|
|
comments, which makes it difficult to comment out code that
|
|
|
|
already has XML comments.} It may be useful for debugging, but is
|
|
|
|
discouraged for use otherwise. The \ref{_ignore_/@desc@} param
|
|
|
|
should be used to describe intent.
|
|
|
|
|
|
|
|
<template name="_ignore_"
|
|
|
|
desc="Removes all child nodes (as if commented out)">
|
|
|
|
<param name="@values@" desc="Nodes to comment out" />
|
|
|
|
<param name="@desc@" desc="Reason for ignore" />
|
|
|
|
|
|
|
|
<!-- nothing -->
|
|
|
|
</template>
|
|
|
|
</section>
|
2015-03-18 11:31:47 -04:00
|
|
|
</package>
|
2013-02-13 09:27:33 -05:00
|
|
|
|