mirror of
https://github.com/ganelson/inform.git
synced 2024-07-09 02:24:21 +03:00
391 lines
48 KiB
HTML
391 lines
48 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>Paragraphing</title>
|
|
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
|
|
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
|
|
</head>
|
|
<body class="commentary-font">
|
|
<nav role="navigation">
|
|
<h1><a href="../index.html">
|
|
<img src="../docs-assets/Inform.png" height=72">
|
|
</a></h1>
|
|
<ul><li><a href="../compiler.html">compiler tools</a></li>
|
|
<li><a href="../other.html">other tools</a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul><h2>Extensions</h2><ul>
|
|
<li><a href="../basic_inform/index.html">basic_inform</a></li>
|
|
<li><a href="../standard_rules/index.html">standard_rules</a></li>
|
|
</ul><h2>Kits</h2><ul>
|
|
<li><a href="index.html"><span class="selectedlink">BasicInformKit</span></a></li>
|
|
<li><a href="../BasicInformExtrasKit/index.html">BasicInformExtrasKit</a></li>
|
|
<li><a href="../CommandParserKit/index.html">CommandParserKit</a></li>
|
|
<li><a href="../EnglishLanguageKit/index.html">EnglishLanguageKit</a></li>
|
|
<li><a href="../WorldModelKit/index.html">WorldModelKit</a></li>
|
|
|
|
</ul>
|
|
</nav>
|
|
<main role="main">
|
|
<!--Weave of 'Paragraphing' generated by Inweb-->
|
|
<div class="breadcrumbs">
|
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../extensions.html">Kits</a></li><li><a href="index.html">BasicInformKit</a></li><li><b>Paragraphing</b></li></ul></div>
|
|
<p class="purpose">To manage the line skips which space paragraphs out.</p>
|
|
|
|
<ul class="toc"><li><a href="S-prg.html#SP1">§1. Paragraph Control</a></li><li><a href="S-prg.html#SP2">§2. State</a></li><li><a href="S-prg.html#SP3">§3. Say Number</a></li><li><a href="S-prg.html#SP4">§4. Print English Number</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. Paragraph Control. </b>Ah, yes: the paragraph breaking algorithm. In {\it \TeX: The Program},
|
|
Donald Knuth writes at section 768: "It's sort of a miracle whenever <span class="extract"><span class="extract-syntax">\halign</span></span>
|
|
and <span class="extract"><span class="extract-syntax">\valign</span></span> work, because they cut across so many of the control structures
|
|
of \TeX." It's sort of a miracle whenever Inform 7's paragraph breaking
|
|
system works, too. Most users probably imagine that it's implemented by
|
|
having I7 look at where the cursor currently is (at the start of a line or
|
|
not) and whether a line has just been skipped. In fact, the virtual machines
|
|
simply do not offer facilities like that, and so we have to use our own
|
|
book-keeping. Given the huge number of ways in which text can be printed,
|
|
this is a delicate business. For some years now, "spacing bugs" — those
|
|
where a spurious extra skipped line appears in a paragraph break, or
|
|
where, conversely, no line is skipped at all — have been the least
|
|
welcome in the Inform bugs database.
|
|
</p>
|
|
|
|
<p class="commentary">The basic method is to set <span class="extract"><span class="extract-syntax">say__p</span></span>, the paragraph flag, when we print any
|
|
matter; every so often we reach a "divide paragraph" point — for instance
|
|
when one rule has finished and before another is about to start — and at
|
|
those positions we look for <span class="extract"><span class="extract-syntax">say__p</span></span>, and print a skipped line (and clear
|
|
<span class="extract"><span class="extract-syntax">say__p</span></span> again) if we find it. Thus:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> > WAIT</span>
|
|
<span class="plain-syntax"> The clock ticks ominously. ...first rule</span>
|
|
<span class="plain-syntax"> ...skipped line printed at a Divide Paragraph point</span>
|
|
<span class="plain-syntax"> Mme Tourmalet rises from her chair and slips out. ...second rule</span>
|
|
<span class="plain-syntax"> ...skipped line printed at a Divide Paragraph point</span>
|
|
<span class="plain-syntax"> ></span>
|
|
</pre>
|
|
<p class="commentary">A divide paragraph point occurs between any two rules in an action rulebook,
|
|
but not an activity rulebook: many activities exist to print text, such as
|
|
the names of objects, and there would be wild spacing accidents if paragraphs
|
|
were divided there. Inform places DPPs elsewhere, too: and the text substitution
|
|
"[conditional paragraph break]" allows the user to place one anywhere.
|
|
</p>
|
|
|
|
<p class="commentary">A traditional layout convention handed down from Infocom makes an exception
|
|
of the first paragraph to appear after the prompt, but only in one situation.
|
|
Ordinarily, the first paragraph of any turn appears straight after the prompt:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> > EXAMINE DOG</span>
|
|
<span class="plain-syntax"> Mme Tourmalet's borzoi looks as if it means fashion, not business.</span>
|
|
</pre>
|
|
<p class="commentary">The command is echoed on screen as the player types, but this doesn't set the
|
|
paragraph flag, which is still clear when the text "Mme Tourmalet's..."
|
|
begins to be printed. The single exception occurs when the command calls for
|
|
the player to go to a new location, when a skipped line is printed before the
|
|
room description for the new room. Thus:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> > SOUTH</span>
|
|
<span class="plain-syntax"> ...the "going look break" here</span>
|
|
<span class="plain-syntax"> Rocky Beach</span>
|
|
</pre>
|
|
<p class="commentary">(Note that this is not inherent in the looking action:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> > LOOK</span>
|
|
<span class="plain-syntax"> Rocky Beach</span>
|
|
</pre>
|
|
<p class="commentary">...which obeys the standard paragraphing conventions.)
|
|
</p>
|
|
|
|
<p class="commentary">So much for automatic paragraph breaks. However, we need a variety of different
|
|
ways explicitly to control paragraphs, in order to accommodate traditional
|
|
layout conventions handed down from Infocom.
|
|
</p>
|
|
|
|
<p class="commentary">The simplest exceptional kind of paragraph break is a "command
|
|
clarification break", in which a single new-line is printed but there is
|
|
no skipped line: as the name implies, it's traditionally used when a
|
|
command such as OPEN DOOR is clarified. For example:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> (first unlocking the oak door) ...now a command clarification break</span>
|
|
<span class="plain-syntax"> You open the oak door.</span>
|
|
</pre>
|
|
<p class="commentary">This is not quite the same thing as a "run paragraph on" break, in which
|
|
we also deliberately suppress the skipped line, but make an exception for
|
|
the skipped line which ought to appear last before the prompt: the idea is
|
|
to merge two or more paragraphs together.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> > TAKE ALL</span>
|
|
<span class="plain-syntax"> marmot: Taken. ...we run paragraph on here</span>
|
|
<span class="plain-syntax"> weasel: Taken. ...and also here</span>
|
|
<span class="plain-syntax"> ...despite which the final skip does occur</span>
|
|
<span class="plain-syntax"> > ...before the next prompt</span>
|
|
</pre>
|
|
<p class="commentary">A more complicated case is "special look spacing", used for the break which
|
|
occurs after the (boldface) short name of a room description is printed. This
|
|
is tricky because it is sometimes followed directly by a long description, and
|
|
we don't want a skipped line:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> Villa Christiane ...a special look spacing break</span>
|
|
<span class="plain-syntax"> The walled garden of a villa in Cap d'Agde.</span>
|
|
<span class="plain-syntax"> ...a Divide Paragraph break</span>
|
|
<span class="plain-syntax"> Mme Tourmalet's borzoi lazes in the long grass.</span>
|
|
</pre>
|
|
<p class="commentary">But sometimes it is followed directly by a subsequent paragraph, and again
|
|
we want no skip:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> Villa Christiane ...a special look spacing break</span>
|
|
<span class="plain-syntax"> Mme Tourmalet's borzoi lazes in the long grass.</span>
|
|
</pre>
|
|
<p class="commentary">And sometimes it is the only content of the room description and is followed
|
|
only by the prompt:
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax"> Villa Christiane ...a special look spacing break</span>
|
|
<span class="plain-syntax"> ...a break inserted before the prompt</span>
|
|
<span class="plain-syntax"> ></span>
|
|
</pre>
|
|
<p class="commentary">To recap, we have five kinds of paragraph break:
|
|
</p>
|
|
|
|
<ul class="items"><li>(a) Standard breaks at "divide paragraph points", used between rules.
|
|
</li><li>(b) The "going look break", used before the room description after going to
|
|
a new room.
|
|
</li><li>(c) A "command clarification break", used after text clarifying a command.
|
|
</li><li>(d) A "run paragraph on" break, used to merge multiple paragraphs into a
|
|
single block of text.
|
|
</li><li>(e) The "special look spacing" break, used after the boldface headline of
|
|
a room description.
|
|
</li></ul>
|
|
<p class="commentary">We now have to implement all of these behaviours. The code, while very simple,
|
|
is highly prone to behaving unexpectedly if changes are made, simply because
|
|
of the huge number of circumstances in which paragraphs are printed: so change
|
|
nothing without very careful testing.
|
|
</p>
|
|
|
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. State. </b>The current state is stored in a combination of two global variables:
|
|
</p>
|
|
|
|
<ul class="items"><li>(1) <span class="extract"><span class="extract-syntax">say__p</span></span>, the "say paragraph" flag, which is set if a paragraph break
|
|
needs to be printed before the next text can begin;
|
|
</li><li>(2) <span class="extract"><span class="extract-syntax">say__pc</span></span>, originally named as the "paragraph completed" flag, but
|
|
which is now a bitmap:
|
|
<ul class="items"><li>(2a) <span class="extract"><span class="extract-syntax">PARA_COMPLETED</span></span> is set if a standard paragraph break has been made
|
|
since the last time the flag was cleared;
|
|
</li><li>(2b) <span class="extract"><span class="extract-syntax">PARA_PROMPTSKIP</span></span> is set to indicate that the current printing position
|
|
does not follow a skipped line, and that further material is expected which
|
|
will run on from the previous paragraph, but that if no further material turns
|
|
up then a skipped line would be needed before the next prompt;
|
|
</li><li>(2c) <span class="extract"><span class="extract-syntax">PARA_SUPPRESSPROMPTSKIP</span></span> is set to indicate that, despite <span class="extract"><span class="extract-syntax">PARA_PROMPTSKIP</span></span>
|
|
being set, no skipped line is needed before the prompt after all;
|
|
</li><li>(2d) <span class="extract"><span class="extract-syntax">PARA_NORULEBOOKBREAKS</span></span> suppresses divide paragraph points in between
|
|
rules in rulebooks; it treats all rulebooks, and in particular action rulebooks,
|
|
the way activity rulebooks are treated. (The flag is used for short periods
|
|
only and never across turn boundaries, prompts and so on.)
|
|
</li><li>(2e) <span class="extract"><span class="extract-syntax">PARA_CONTENTEXPECTED</span></span> is set after a paragraph division as a signal
|
|
that if any contents looks likely to be printed soon then <span class="extract"><span class="extract-syntax">say__p</span></span> needs
|
|
to be set, because a successor paragraph will then have started. This
|
|
is checked by calling <span class="extract"><span class="extract-syntax">ParaContent()</span></span> — while it's slow to have to call
|
|
this routine so often, that's better than compiling inline code with the
|
|
same effect, because minimising compiled code size is more important, and
|
|
speed is never a big deal when printing.
|
|
</li></ul>
|
|
</li></ul>
|
|
<p class="commentary">Not all printing is to the screen: sometimes the output is to a file, or to
|
|
memory, and in that case we want to start the switched output at a clear
|
|
paragraphing state and then go back to the screen afterwards without any
|
|
sign of change. The correct way to do this is to push the <span class="extract"><span class="extract-syntax">say__p</span></span> and
|
|
<span class="extract"><span class="extract-syntax">say__pc</span></span> variables onto the VM stack and call <span class="extract"><span class="extract-syntax">ClearParagraphing()</span></span> before
|
|
starting to print to the new stream, and then pull the variables back again
|
|
before resuming printing to the old stream.
|
|
</p>
|
|
|
|
<p class="commentary">In no other case should any code alter <span class="extract"><span class="extract-syntax">say__pc</span></span> except via the routines
|
|
below.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="comment-syntax">onstant TRACE_I7_SPACING;</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax"> </span><span class="identifier-syntax">r</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">DivideParagraphPoint</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_I7_SPACING</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"[DPP"</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">, </span><span class="string-syntax">"]"</span><span class="plain-syntax">; #</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__p</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">; </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc_save</span><span class="plain-syntax"> = </span><span class="reserved-syntax">true</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_I7_SPACING</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"[-->"</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">, </span><span class="string-syntax">"]"</span><span class="plain-syntax">; #</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_CONTENTEXPECTED</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc_save</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">AdjustParagraphPoint</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_I7_SPACING</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"[APP "</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">, </span><span class="string-syntax">" "</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc_save</span><span class="plain-syntax">, </span><span class="string-syntax">"]^"</span><span class="plain-syntax">; #</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc_save</span><span class="plain-syntax">) </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">ParaContent</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_CONTENTEXPECTED</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PARA_CONTENTEXPECTED</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">GoingLookBreak</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_COMPLETED</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax">(10);</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">CommandClarificationBreak</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax">(11);</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">RunParagraphOn</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_I7_SPACING</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"[RPO"</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">, </span><span class="string-syntax">"]"</span><span class="plain-syntax">; #</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">SpecialLookSpacingBreak</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> #</span><span class="identifier-syntax">ifdef</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRACE_I7_SPACING</span><span class="plain-syntax">; </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"[SLS"</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__p</span><span class="plain-syntax">, </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax">, </span><span class="string-syntax">"]"</span><span class="plain-syntax">; #</span><span class="identifier-syntax">endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">EnsureBreakBeforePrompt</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">say__p</span><span class="plain-syntax">) ||</span>
|
|
<span class="plain-syntax"> ((</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_PROMPTSKIP</span><span class="plain-syntax">) && ((</span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> & </span><span class="identifier-syntax">PARA_SUPPRESSPROMPTSKIP</span><span class="plain-syntax">)==0)))</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">new_line</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">ClearParagraphing</span><span class="plain-syntax">(12);</span>
|
|
<span class="plain-syntax">];</span>
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">PrintSingleParagraph</span><span class="plain-syntax"> </span><span class="identifier-syntax">matter</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__p</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> | </span><span class="identifier-syntax">PARA_NORULEBOOKBREAKS</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_TY_Say</span><span class="plain-syntax">(</span><span class="identifier-syntax">matter</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DivideParagraphPoint</span><span class="plain-syntax">(13);</span>
|
|
<span class="plain-syntax"> </span><span class="identifier-syntax">say__pc</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. Say Number. </b>The global variable <span class="extract"><span class="extract-syntax">say__n</span></span> is set to the numerical value of any quantity
|
|
printed, and this is used for the text substitution "[s]", so that
|
|
"You have been awake for [turn count] turn[s]." will expand correctly.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">STextSubstitution</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">say__n</span><span class="plain-syntax"> ~= </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"s"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax">];</span>
|
|
</pre>
|
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. Print English Number. </b>Another traditional name, this: in fact it prints the number as text in
|
|
whatever is the current language of play.
|
|
</p>
|
|
|
|
<pre class="displayed-code all-displayed-code code-font">
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">EnglishNumber</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax">; </span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">(</span><span class="identifier-syntax">n</span><span class="plain-syntax">); ];</span>
|
|
|
|
|
|
<span class="plain-syntax">[ </span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> </span><span class="identifier-syntax">f</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"zero"</span><span class="plain-syntax">; </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">; }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> < </span><span class="constant-syntax">0</span><span class="plain-syntax">) { </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"minus "</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = -</span><span class="identifier-syntax">n</span><span class="plain-syntax">; }</span>
|
|
<span class="plain-syntax">#</span><span class="identifier-syntax">Iftrue</span><span class="plain-syntax"> (</span><span class="identifier-syntax">WORDSIZE</span><span class="plain-syntax"> == </span><span class="constant-syntax">4</span><span class="plain-syntax">);</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1000000000</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">", "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">/1000000000, </span><span class="string-syntax">" billion"</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">%1000000000; </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1000000</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">", "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">/1000000, </span><span class="string-syntax">" million"</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">%1000000; </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax">#</span><span class="identifier-syntax">Endif</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> >= </span><span class="constant-syntax">1000</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">", "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">/1000, </span><span class="string-syntax">" thousand"</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">%1000; </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> >= </span><span class="constant-syntax">100</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">", "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">print</span><span class="plain-syntax"> (</span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">/100, </span><span class="string-syntax">" hundred"</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">n</span><span class="plain-syntax">%100; </span><span class="identifier-syntax">f</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">rfalse</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">KIT_CONFIGURATION_BITMAP</span><span class="plain-syntax"> & </span><span class="identifier-syntax">DIALECT_US_TCBIT</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">f</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">" and "</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">n</span><span class="plain-syntax"> >= </span><span class="constant-syntax">20</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">n</span><span class="plain-syntax"><100)) {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">/10) {</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"twenty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"thirty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"forty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"fifty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"sixty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"seventy"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">8</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"eighty"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">9</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"ninety"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">%10 ~= </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"-"</span><span class="plain-syntax">, (</span><span class="identifier-syntax">LanguageNumber</span><span class="plain-syntax">) </span><span class="identifier-syntax">n</span><span class="plain-syntax">%10;</span>
|
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
|
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="identifier-syntax">n</span><span class="plain-syntax">) {</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"one"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"two"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"three"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"four"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"five"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"six"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"seven"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">8</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"eight"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">9</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"nine"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">10</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"ten"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">11</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"eleven"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">12</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"twelve"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">13</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"thirteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">14</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"fourteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">15</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"fifteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">16</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"sixteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">17</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"seventeen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">18</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"eighteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> </span><span class="constant-syntax">19</span><span class="plain-syntax">: </span><span class="reserved-syntax">print</span><span class="plain-syntax"> </span><span class="string-syntax">"nineteen"</span><span class="plain-syntax">;</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax"> }</span>
|
|
<span class="plain-syntax">];</span>
|
|
</pre>
|
|
<nav role="progress"><div class="progresscontainer">
|
|
<ul class="progressbar"><li class="progressprev"><a href="S-zmc.html">❮</a></li><li class="progresssection"><a href="S-dfn.html">dfn</a></li><li class="progresssection"><a href="S-utl.html">utl</a></li><li class="progresssection"><a href="S-gll.html">gll</a></li><li class="progresssection"><a href="S-zmc.html">zmc</a></li><li class="progresscurrent">prg</li><li class="progresssection"><a href="S-mth.html">mth</a></li><li class="progresssection"><a href="S-fl.html">fl</a></li><li class="progresssection"><a href="S-srt.html">srt</a></li><li class="progresssection"><a href="S-tbl.html">tbl</a></li><li class="progresssection"><a href="S-mst.html">mst</a></li><li class="progresssection"><a href="S-rlb.html">rlb</a></li><li class="progresssection"><a href="S-flx.html">flx</a></li><li class="progresssection"><a href="S-blc.html">blc</a></li><li class="progresssection"><a href="S-txt.html">txt</a></li><li class="progresssection"><a href="S-unc.html">unc</a></li><li class="progresssection"><a href="S-chr.html">chr</a></li><li class="progresssection"><a href="S-rgx.html">rgx</a></li><li class="progresssection"><a href="S-lst.html">lst</a></li><li class="progresssection"><a href="S-cmb.html">cmb</a></li><li class="progresssection"><a href="S-rlt.html">rlt</a></li><li class="progresssection"><a href="S-rlt2.html">rlt2</a></li><li class="progresssection"><a href="S-rtp.html">rtp</a></li><li class="progressnext"><a href="S-mth.html">❯</a></li></ul></div>
|
|
</nav><!--End of weave-->
|
|
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|