mirror of
https://github.com/ganelson/inform.git
synced 2024-07-16 22:14:23 +03:00
1002 lines
204 KiB
HTML
1002 lines
204 KiB
HTML
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>EPS Map</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">
|
||
|
<script>
|
||
|
MathJax = {
|
||
|
tex: {
|
||
|
inlineMath: '$', '$'], ['\\(', '\\)'
|
||
|
},
|
||
|
svg: {
|
||
|
fontCache: 'global'
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
<script type="text/javascript" id="MathJax-script" async
|
||
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
|
||
|
</script>
|
||
|
|
||
|
<script>
|
||
|
function togglePopup(material_id) {
|
||
|
var popup = document.getElementById(material_id);
|
||
|
popup.classList.toggle("show");
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<link href="../docs-assets/Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||
|
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||
|
<link href="../docs-assets/Preform-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>Compiler Webs</h2><ul>
|
||
|
<li><a href="../inbuild/index.html">inbuild</a></li>
|
||
|
<li><a href="../inform7/index.html">inform7</a></li>
|
||
|
<li><a href="../inter/index.html">inter</a></li>
|
||
|
</ul><h2>Inbuild Modules</h2><ul>
|
||
|
<li><a href="../supervisor-module/index.html">supervisor</a></li>
|
||
|
</ul><h2>Inform7 Modules</h2><ul>
|
||
|
<li><a href="../core-module/index.html">core</a></li>
|
||
|
<li><a href="../assertions-module/index.html">assertions</a></li>
|
||
|
<li><a href="../values-module/index.html">values</a></li>
|
||
|
<li><a href="../knowledge-module/index.html">knowledge</a></li>
|
||
|
<li><a href="../imperative-module/index.html">imperative</a></li>
|
||
|
<li><a href="index.html"><span class="selectedlink">runtime</span></a></li>
|
||
|
<li><a href="../if-module/index.html">if</a></li>
|
||
|
<li><a href="../multimedia-module/index.html">multimedia</a></li>
|
||
|
<li><a href="../index-module/index.html">index</a></li>
|
||
|
</ul><h2>Inter Modules</h2><ul>
|
||
|
<li><a href="../bytecode-module/index.html">bytecode</a></li>
|
||
|
<li><a href="../building-module/index.html">building</a></li>
|
||
|
<li><a href="../codegen-module/index.html">codegen</a></li>
|
||
|
</ul><h2>Services</h2><ul>
|
||
|
<li><a href="../arch-module/index.html">arch</a></li>
|
||
|
<li><a href="../calculus-module/index.html">calculus</a></li>
|
||
|
<li><a href="../html-module/index.html">html</a></li>
|
||
|
<li><a href="../inflections-module/index.html">inflections</a></li>
|
||
|
<li><a href="../kinds-module/index.html">kinds</a></li>
|
||
|
<li><a href="../linguistics-module/index.html">linguistics</a></li>
|
||
|
<li><a href="../problems-module/index.html">problems</a></li>
|
||
|
<li><a href="../syntax-module/index.html">syntax</a></li>
|
||
|
<li><a href="../words-module/index.html">words</a></li>
|
||
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
||
|
|
||
|
</ul>
|
||
|
</nav>
|
||
|
<main role="main">
|
||
|
<!--Weave of 'EPS Map' generated by Inweb-->
|
||
|
<div class="breadcrumbs">
|
||
|
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">runtime</a></li><li><a href="index.html#2">Chapter 2: Emission</a></li><li><b>EPS Map</b></li></ul></div>
|
||
|
<p class="purpose">To render the spatial map of rooms as an EPS (Encapsulated PostScript) file.</p>
|
||
|
|
||
|
<ul class="toc"><li><a href="2-em.html#SP8">§8. Map parameters</a></li><li><a href="2-em.html#SP9">§9. Map parameter scopes</a></li><li><a href="2-em.html#SP13">§13. Parsing sentences which set map parameters</a></li><li><a href="2-em.html#SP24">§24. Offset notation</a></li></ul><hr class="tocbar">
|
||
|
|
||
|
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>§1. </b>EPS-format files are vector art, rather than raster art, and are produced
|
||
|
with the intention that authors can tidy them up afterwards using programs
|
||
|
like Adobe Illustrator. By default they aren't produced, so that the following
|
||
|
flag stays <span class="extract"><span class="extract-syntax">FALSE</span></span>:
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">write_EPS_format_map</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>§2. </b>The EPS map-maker is really a miniature interpreted programming
|
||
|
language in its own right, and here we define that language's data
|
||
|
types and variables.
|
||
|
</p>
|
||
|
|
||
|
<p class="commentary">The "mapping parameters" amount to being variables. The following
|
||
|
structure defines the type and current value for each variable: see
|
||
|
the Inform documentation for details. But note that variables of the
|
||
|
same name are held by many different objects in the map, and their
|
||
|
values inherited by sub-objects.
|
||
|
</p>
|
||
|
|
||
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">INT_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="comment-syntax"> an integer</span>
|
||
|
<span class="definition-keyword">define</span> <span class="constant-syntax">BOOL_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="comment-syntax"> true or false</span>
|
||
|
<span class="definition-keyword">define</span> <span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">3</span><span class="plain-syntax"> </span><span class="comment-syntax"> quoted text</span>
|
||
|
<span class="definition-keyword">define</span> <span class="constant-syntax">COL_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">4</span><span class="plain-syntax"> </span><span class="comment-syntax"> an HTML-safe colour</span>
|
||
|
<span class="definition-keyword">define</span> <span class="constant-syntax">FONT_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span><span class="plain-syntax"> </span><span class="comment-syntax"> the name of a font</span>
|
||
|
<span class="definition-keyword">define</span> <span class="constant-syntax">OFF_MDT</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="comment-syntax"> a positional offset in an </span>\((x,y)\)<span class="comment-syntax"> grid</span>
|
||
|
</pre>
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">plotting_parameter</span><span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">specified</span><span class="plain-syntax">; </span><span class="comment-syntax"> is it explicitly specified at this scope?</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">; </span><span class="comment-syntax"> name (used only in global scope)</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">parameter_data_type</span><span class="plain-syntax">; </span><span class="comment-syntax"> one of the above types (used only in global scope)</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">string_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> string value, if appropriate to this type;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stream_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> text value, if appropriate to this type;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">numeric_value</span><span class="plain-syntax">; </span><span class="comment-syntax"> or numeric value, if appropriate to this type</span>
|
||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">plotting_parameter</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>The structure plotting_parameter is accessed in 2/sc, 2/ie, 3/uo, 4/rsp, 5/act, 5/mlt, 5/tc, 5/rls, 5/rlb, 5/vrb, 5/prp, 5/act2, 5/ts, 6/pi, 7/cg, 7/pnp and here.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>§3. </b>A set of variables associated with any map object is called a "scope".
|
||
|
As implied above, the global scope is special: it contains the default
|
||
|
settings passed down to all lower scopes.
|
||
|
</p>
|
||
|
|
||
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">NO_MAP_PARAMETERS</span><span class="plain-syntax"> </span><span class="constant-syntax">35</span>
|
||
|
</pre>
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">wider_scope</span><span class="plain-syntax">; </span><span class="comment-syntax"> that is, the scope above this</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">plotting_parameter</span><span class="plain-syntax"> </span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="constant-syntax">NO_MAP_PARAMETERS</span><span class="plain-syntax">];</span>
|
||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax">;</span>
|
||
|
|
||
|
<span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> </span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax"> = {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">,</span>
|
||
|
<span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"font"</span><span class="plain-syntax">, </span><span class="constant-syntax">FONT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Helvetica"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"minimum-map-width"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">72</span><span class="plain-syntax">*5 },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"title"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Map"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"title-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">24</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"title-font"</span><span class="plain-syntax">, </span><span class="constant-syntax">FONT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"title-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"map-outline"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"border-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">12</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"vertical-spacing"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">6</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"monochrome"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"annotation-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"annotation-length"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">8</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"annotation-font"</span><span class="plain-syntax">, </span><span class="constant-syntax">FONT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"subtitle"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Map"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"subtitle-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">16</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"subtitle-font"</span><span class="plain-syntax">, </span><span class="constant-syntax">FONT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"subtitle-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"grid-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">72</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"route-stiffness"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">100</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"route-thickness"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"route-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-offset"</span><span class="plain-syntax">, </span><span class="constant-syntax">OFF_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">36</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"DDDDDD"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">""</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-size"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">12</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-font"</span><span class="plain-syntax">, </span><span class="constant-syntax">FONT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-length"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="constant-syntax">5</span><span class="plain-syntax"> },</span>
|
||
|
<span class="plain-syntax"> { </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-offset"</span><span class="plain-syntax">, </span><span class="constant-syntax">OFF_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-outline"</span><span class="plain-syntax">, </span><span class="constant-syntax">BOOL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-outline-colour"</span><span class="plain-syntax">, </span><span class="constant-syntax">COL_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-outline-thickness"</span><span class="plain-syntax">, </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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">TRUE</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-shape"</span><span class="plain-syntax">, </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"square"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</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="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">changed_global_room_colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>The structure map_parameter_scope is private to this section.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>§4. </b>A "rubric" is a freestanding piece of text written on the map. Typically
|
||
|
it will be a title.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">rubric_holder</span><span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">annotation</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">point_size</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">font</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">colour</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">at_offset</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">offset_from</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">rubric_holder</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>The structure rubric_holder is private to this section.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>§5. </b>Each horizontal level of the EPS map needs its own storage, not least to
|
||
|
hold the applicable mapping parameters.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">EPS_map_level</span><span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">width</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">actual_height</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">height</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">titling</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">titling_point_size</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">map_level</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">y_max</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">y_min</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">contains_rooms</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">contains_titling</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">eps_origin</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> </span><span class="identifier-syntax">map_parameters</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">CLASS_DEFINITION</span>
|
||
|
<span class="plain-syntax">} </span><span class="reserved-syntax">EPS_map_level</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>The structure EPS_map_level is private to this section.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>§6. </b>The following are the directions at which arrows for UP, DOWN, IN and OUT
|
||
|
are drawn on EPS maps.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="identifier-syntax">vector</span><span class="plain-syntax"> </span><span class="identifier-syntax">U_vector_EPS</span><span class="plain-syntax"> = {2, </span><span class="constant-syntax">3</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">};</span>
|
||
|
<span class="identifier-syntax">vector</span><span class="plain-syntax"> </span><span class="identifier-syntax">D_vector_EPS</span><span class="plain-syntax"> = {-2, -3, </span><span class="constant-syntax">0</span><span class="plain-syntax">};</span>
|
||
|
<span class="identifier-syntax">vector</span><span class="plain-syntax"> </span><span class="identifier-syntax">IN_vector_EPS</span><span class="plain-syntax"> = {3, </span><span class="constant-syntax">2</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">};</span>
|
||
|
<span class="identifier-syntax">vector</span><span class="plain-syntax"> </span><span class="identifier-syntax">OUT_vector_EPS</span><span class="plain-syntax"> = {-3, -2, </span><span class="constant-syntax">0</span><span class="plain-syntax">};</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>§7. </b>A convenience when parsing:
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_pass</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">;</span>
|
||
|
<span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>§8. Map parameters. </b>We convert a parameter's name to its index in the list; slowly, but that
|
||
|
doesn't matter.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::get_map_variable_index</span><button class="popup" onclick="togglePopup('usagePopup1')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup1">Usage of <span class="code-font"><span class="function-syntax">EPSMap::get_map_variable_index</span></span>:<br/><a href="2-em.html#SP11">§11</a>, <a href="2-em.html#SP12">§12</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index_forgivingly</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">s</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">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"Tried to look up <%w>\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"looked up non-existent map variable"</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">s</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="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::get_map_variable_index_forgivingly</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">EPSMap::get_map_variable_index_forgivingly</span></span>:<br/><a href="2-em.html#SP18_1">§18.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="constant-syntax">NO_MAP_PARAMETERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</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">global_map_scope</span><span class="plain-syntax">.</span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">name</span><span class="plain-syntax">) &&</span>
|
||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Wide::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">.</span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">name</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">))</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> -1;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>§9. Map parameter scopes. </b>Here goes, then: an initialised set of parameters.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::prepare_map_parameter_scope</span><span class="plain-syntax">(</span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">wider_scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="identifier-syntax">s</span><span class="plain-syntax">=0; </span><span class="identifier-syntax">s</span><span class="plain-syntax"><</span><span class="constant-syntax">NO_MAP_PARAMETERS</span><span class="plain-syntax">; </span><span class="identifier-syntax">s</span><span class="plain-syntax">++) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">string_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">numeric_value</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>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>§10. </b>The following sets a parameter to a given value (the string value if that's
|
||
|
non-<span class="extract"><span class="extract-syntax">NULL</span></span>, the number value otherwise), for a particular scope: this is
|
||
|
slightly wastefully specified either as a <span class="extract"><span class="extract-syntax">map_parameter_scope</span></span> object,
|
||
|
or as a single room, or as a single region, or as a kind of room or region.
|
||
|
If all are null, then the global scope is used.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::put_mp</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">EPSMap::put_mp</span></span>:<br/><a href="2-em.html#SP22_4_2">§22.4.2</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">,</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">put_string</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">put_integer</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">scope_I</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">Spatial::object_is_a_room</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">))</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::scope_for_single_room</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Regions::object_is_a_region</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">)) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">rm</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::obj_in_region</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rm</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">))</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">rm</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_integer</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</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">scope_k</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_INSTANCES</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_string</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_integer</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</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">Wide::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-colour"</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">scope</span><span class="plain-syntax"> == &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">) </span><span class="identifier-syntax">changed_global_room_colour</span><span class="plain-syntax"> = </span><span class="identifier-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">scope_I</span><span class="plain-syntax">) </span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">world_index_colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">put_string</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">Wide::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"room-name-colour"</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</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">scope_I</span><span class="plain-syntax">) </span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">world_index_text_colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">put_string</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">put_string</span><span class="plain-syntax">) </span><a href="2-em.html#SP11" class="function-link"><span class="function-syntax">EPSMap::put_string_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_string</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><a href="2-em.html#SP12" class="function-link"><span class="function-syntax">EPSMap::put_int_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">put_integer</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="function-syntax">EPSMap::scope_for_single_room</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rm</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> &(</span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">rm</span><span class="plain-syntax">)-></span><span class="identifier-syntax">local_map_parameters</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::obj_in_region</span><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">reg</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">reg</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</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">Regions::enclosing</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) == </span><span class="identifier-syntax">reg</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::obj_in_region</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">Regions::enclosing</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">reg</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>§11. </b>String parameters.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="function-syntax">EPSMap::get_string_mp</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">wider_scope</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"scope exhausted in looking up map parameter"</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">string_value</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">Wide::cmp</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><a href="2-em.html#SP11" class="function-link"><span class="function-syntax">EPSMap::get_string_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="string-syntax">"font"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::put_string_mp</span><button class="popup" onclick="togglePopup('usagePopup4')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup4">Usage of <span class="code-font"><span class="function-syntax">EPSMap::put_string_mp</span></span>:<br/><a href="2-em.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">string_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="function-syntax">EPSMap::get_stream_mp</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">wider_scope</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"scope exhausted in looking up map parameter"</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">stream_value</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::put_stream_mp</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">stream_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::duplicate</span><span class="plain-syntax">(</span><span class="identifier-syntax">val</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>§12. </b>Integer parameters.
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::get_int_mp</span><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">wider_scope</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"scope exhausted in looking up map parameter"</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">numeric_value</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::put_int_mp</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">EPSMap::put_int_mp</span></span>:<br/><a href="2-em.html#SP10">§10</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">val</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">s</span><span class="plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="function-syntax">EPSMap::get_map_variable_index</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &</span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">specified</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax">-></span><span class="identifier-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">s</span><span class="plain-syntax">].</span><span class="element-syntax">numeric_value</span><span class="plain-syntax"> = </span><span class="identifier-syntax">val</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>§13. Parsing sentences which set map parameters. </b>This happens in two passes: pass 1 before HTML mapping, pass 2 before EPS mapping.
|
||
|
</p>
|
||
|
|
||
|
<pre class="definitions code-font"><span class="definition-keyword">enum</span> <span class="constant-syntax">TRAVERSE_FOR_MAP1_SMFT</span>
|
||
|
<span class="definition-keyword">enum</span> <span class="constant-syntax">TRAVERSE_FOR_MAP2_SMFT</span>
|
||
|
</pre>
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::traverse_for_map_parameters</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">PL::SpatialMap::initialise_page_directions</span><span class="plain-syntax">();</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">SyntaxTree::traverse_intp</span><span class="plain-syntax">(</span><span class="identifier-syntax">Task::syntax_tree</span><span class="plain-syntax">(), </span><a href="2-em.html#SP13" class="function-link"><span class="function-syntax">EPSMap::look_for_map_parameters</span></a><span class="plain-syntax">, &</span><span class="identifier-syntax">pass</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::look_for_map_parameters</span><span class="plain-syntax">(</span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="reserved-syntax">int</span><span class="plain-syntax"> *</span><span class="identifier-syntax">pass</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">SENTENCE_NT</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">MajorNodes::try_special_meaning</span><span class="plain-syntax">(</span><span class="constant-syntax">TRAVERSE_FOR_MAP1_SMFT</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">MajorNodes::try_special_meaning</span><span class="plain-syntax">(</span><span class="constant-syntax">TRAVERSE_FOR_MAP2_SMFT</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP14" class="paragraph-anchor"></a><b>§14. </b></p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::index_map_with_SMF</span><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">task</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> *</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">OW</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">)?(</span><span class="identifier-syntax">NPs</span><span class="plain-syntax">[1]):</span><span class="identifier-syntax">EMPTY_WORDING</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">task</span><span class="plain-syntax">) { </span><span class="comment-syntax"> "Index map with ..."</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ACCEPT_SMFT:</span>
|
||
|
<span class="plain-syntax"> </span><span class="function-syntax"><np-articled-list></span><span class="plain-syntax">(</span><span class="identifier-syntax">OW</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRAVERSE_FOR_MAP1_SMFT:</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP22" class="function-link"><span class="function-syntax">EPSMap::new_map_hint_sentence</span></a><span class="plain-syntax">(1, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRAVERSE_FOR_MAP2_SMFT:</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP22" class="function-link"><span class="function-syntax">EPSMap::new_map_hint_sentence</span></a><span class="plain-syntax">(2, </span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TRAVERSE_FOR_MAP_INDEX_SMFT:</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOG</span><span class="plain-syntax">(</span><span class="string-syntax">"\nIndex map with %+W.\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">));</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP15" class="paragraph-anchor"></a><b>§15. </b>This conveniently filters instance names to accept only those of kind
|
||
|
"direction".
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><direction-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }; if (Instances::of_kind(RP[1], K_direction) == FALSE) return FALSE;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16" class="paragraph-anchor"></a><b>§16. </b>The subject noun phrase of sentences like this:
|
||
|
</p>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>Index map with Chamber mapped north of Cave and EPS file.</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<p class="commentary">is an articled list of subjects (in this case, two of them); each subject
|
||
|
is parsed with the following grammar, which is almost a mini-language in
|
||
|
itself.
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><index-map-sentence-subject></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">eps</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">file</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { EPSFILE_IMW, - }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><direction-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">mapped</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">as</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><direction-name></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { MAPPED_AS_IMW, -, <<instance:x>> = RP[1], <<instance:y>> = RP[2] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">mapped</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">as</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_1" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapDirectionClue problem</span><span class="named-paragraph-number">16.1</span></a></span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">mapped</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-positioning></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { MAPPED_IMW, -, <<instance:x>> = RP[1], <<instance:y>> = RP[2] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">mapped</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapPlacement problem</span><span class="named-paragraph-number">16.2</span></a></span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">set</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-value></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { EPSMap::setting(R[1]), -, <<scoping>> = R[1], <<msvtype>> = R[2] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">set</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_3" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapSettingTooLong problem</span><span class="named-paragraph-number">16.3</span></a></span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">set</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">to</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_4" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapSettingOfUnknown problem</span><span class="named-paragraph-number">16.4</span></a></span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">rubric</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{<quoted-text-without-subs>}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_IMW, - }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_5" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapHintUnknown problem</span><span class="named-paragraph-number">16.5</span></a></span>
|
||
|
|
||
|
<span class="Preform-function-syntax"><map-positioning></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of/from</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, RP[2], <<instance:dir>> = RP[1] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">above</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, RP[1], <<instance:dir>> = I_up }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">below</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, RP[1], <<instance:dir>> = I_down }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_1" class="paragraph-anchor"></a><b>§16.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapDirectionClue problem</span><span class="named-paragraph-number">16.1</span></span><span class="Preform-comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</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">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapDirectionClue</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"You can only say 'Index map with D mapped as E.' "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"when D and E are directions."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16">§16</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_2" class="paragraph-anchor"></a><b>§16.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapPlacement problem</span><span class="named-paragraph-number">16.2</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</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">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapPlacement</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"The map placement hint should either have the form 'Index map with X "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"mapped east of Y' or 'Index map with X mapped above/below Y'."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16">§16</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_3" class="paragraph-anchor"></a><b>§16.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapSettingTooLong problem</span><span class="named-paragraph-number">16.3</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</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">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapSettingTooLong</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"The value supplied has to be a single item, a number, a word "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"or some text in double-quotes: this looks too long to be right."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16">§16</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_4" class="paragraph-anchor"></a><b>§16.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapSettingOfUnknown problem</span><span class="named-paragraph-number">16.4</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_4_1" class="named-paragraph-link"><span class="named-paragraph">Actually issue PM_MapSettingOfUnknown problem</span><span class="named-paragraph-number">16.4.1</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16">§16</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_5" class="paragraph-anchor"></a><b>§16.5. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapHintUnknown problem</span><span class="named-paragraph-number">16.5</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapHintUnknown</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"The general form for this is 'Index map with ...' and then a "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"list of clues, such as 'the Ballroom mapped east of the Terrace', "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"or 'room-size of the Ballroom set to 100'."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16">§16</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP17" class="paragraph-anchor"></a><b>§17. </b></p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::setting</span><button class="popup" onclick="togglePopup('usagePopup6')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup6">Usage of <span class="code-font"><span class="function-syntax">EPSMap::setting</span></span>:<br/><a href="2-em.html#SP16">§16</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</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">NO_IMW</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">N</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">SETTING_IMW</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP18" class="paragraph-anchor"></a><b>§18. </b>Now we parse the setting to be set. For example,
|
||
|
</p>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>title-size of the first room</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>border-size of level 1</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>room-outline-thickness of the Taj Mahal</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>title-size</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><map-setting></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-parameter></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-scope></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { R[2], -, <<wchar_t:partext>> = RP[1], <<parindex>> = R[1] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-parameter></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { ENTIRE_MAP_SCOPE, -, <<wchar_t:partext>> = RP[1], <<parindex>> = R[1] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">of</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-scope></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP18_2" class="named-paragraph-link"><span class="named-paragraph">Issue PM_MapSettingUnknown problem</span><span class="named-paragraph-number">18.2</span></a></span>
|
||
|
|
||
|
<span class="Preform-function-syntax"><map-setting-scope></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><definite-article></span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-scope-unarticled></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 2 }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-scope-unarticled></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { pass 1 }</span>
|
||
|
|
||
|
<span class="Preform-function-syntax"><map-setting-scope-unarticled></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">first</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">room</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { FIRST_ROOM_MAP_SCOPE, - }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">level</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { LEVEL_MAP_SCOPE, -, <<level>> = R[1] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><k-kind></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { KIND_MAP_SCOPE, -, <<kind:kscope>> = RP[1] }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><instance-of-object></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { INSTANCE_MAP_SCOPE, -, <<instance:iscope>> = RP[1] }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP18_1" class="paragraph-anchor"></a><b>§18.1. </b>The map parameters all have one-word, sometimes hyphenated, names, such
|
||
|
as the following:
|
||
|
</p>
|
||
|
|
||
|
<blockquote>
|
||
|
<p>vertical-spacing, monochrome, annotation-size</p>
|
||
|
</blockquote>
|
||
|
|
||
|
<p class="commentary">For now, at least, these are all in English only.
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><map-parameter></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">int</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">;</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">wchar_t</span><span class="Preform-plain-syntax"> *</span><span class="Preform-identifier-syntax">parameter_name</span><span class="Preform-plain-syntax"> = </span><span class="Preform-identifier-syntax">Lexer::word_text</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">Wordings::first_wn</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">));</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">if</span><span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">Wordings::length</span><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">) == </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax">) &&</span>
|
||
|
<span class="Preform-plain-syntax"> ((</span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax"> = </span><a href="2-em.html#SP8" class="function-link"><span class="Preform-function-syntax">EPSMap::get_map_variable_index_forgivingly</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">parameter_name</span><span class="Preform-plain-syntax">))>=0)) {</span>
|
||
|
<span class="Preform-plain-syntax"> ==> { </span><span class="Preform-identifier-syntax">i</span><span class="Preform-plain-syntax">, </span><span class="Preform-identifier-syntax">parameter_name</span><span class="Preform-plain-syntax"> };</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
|
||
|
<span class="Preform-plain-syntax"> }</span>
|
||
|
<span class="Preform-plain-syntax"> ==> { </span><span class="Preform-identifier-syntax">fail</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">nonterminal</span><span class="Preform-plain-syntax"> };</span>
|
||
|
<span class="Preform-plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP18_2" class="paragraph-anchor"></a><b>§18.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Issue PM_MapSettingUnknown problem</span><span class="named-paragraph-number">18.2</span></span><span class="Preform-comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</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">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapSettingUnknown</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"The parameter has to be one of the fixed named set given in "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"the documentation, like 'room-name'. All parameters are one "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"word, but many are hyphenated. (Also, note that 'colour' has the "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"Canadian/English spelling, not the American one 'color'.)"</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> ==> { </span><span class="constant-syntax">NO_IMW</span><span class="plain-syntax">, - };</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP18">§18</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP19" class="paragraph-anchor"></a><b>§19. </b>The value of map settings is as follows. In retrospect, the "booleans"
|
||
|
perhaps should just have been "true" and "false", not "on" and "off".
|
||
|
Never mind.
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><map-setting-value></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { INT_MDT, -, <<msvalue>> = R[1], <<msword>> = Wordings::first_wn(W) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><quoted-text></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TEXT_MDT, -, <<msvalue>> = R[1], <<msword>> = Wordings::first_wn(W) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-setting-boolean></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { BOOL_MDT, -, <<msvalue>> = R[1], <<msword>> = Wordings::first_wn(W) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-offset></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { OFF_MDT, -, <<msvalue>> = R[1], <<msword>> = Wordings::first_wn(W) }; if (R[1] == ERRONEOUS_OFFSET_VALUE) return FALSE;</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">###</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { -1, -, <<msword>> = Wordings::first_wn(W) } </span><span class="Preform-comment-syntax"> leads to a problem message later</span>
|
||
|
|
||
|
<span class="Preform-function-syntax"><map-setting-boolean></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">on</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { TRUE, - }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">off</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { FALSE, - }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP20" class="paragraph-anchor"></a><b>§20. </b>Map offsets have a cutesy notation: <span class="extract"><span class="Preform-extract-syntax">10&-30</span></span>, for example, written as a
|
||
|
single word. The following nonterminal actually matches any single word
|
||
|
(so that problems can be caught later, not now), returning either a valid
|
||
|
offset or else the <span class="extract"><span class="Preform-extract-syntax">ERRONEOUS_OFFSET_VALUE</span></span> sentinel.
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><map-offset></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">internal</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{</span>
|
||
|
<span class="Preform-plain-syntax"> ==> { </span><a href="2-em.html#SP24" class="function-link"><span class="Preform-function-syntax">EPSMap::parse_eps_map_offset</span></a><span class="Preform-plain-syntax">(</span><span class="Preform-identifier-syntax">W</span><span class="Preform-plain-syntax">), - };</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">return</span><span class="Preform-plain-syntax"> </span><span class="Preform-identifier-syntax">TRUE</span><span class="Preform-plain-syntax">;</span>
|
||
|
<span class="Preform-plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP21" class="paragraph-anchor"></a><b>§21. </b>The one part of the grammar not explicitly spelled out above was what to do
|
||
|
with the optional text which follows a rubric. This is a sequence of any of
|
||
|
the following:
|
||
|
</p>
|
||
|
|
||
|
<pre class="Preform-displayed-code all-displayed-code code-font">
|
||
|
<span class="Preform-function-syntax"><map-rubric></span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">::=</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">size</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><cardinal-number></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_SIZE, -, <<rsize>> = R[1], <<edge>> = Wordings::first_wn(WR[1]) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">font</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{<quoted-text-without-subs>}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_FONT, -, <<rfont>> = R[1], <<edge>> = Wordings::first_wn(WR[2]) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">colour</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">{<quoted-text-without-subs>}</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_COLOUR, -, <<rcol>> = R[1], <<edge>> = Wordings::first_wn(WR[2]) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">at</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-offset></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">from</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">...</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">|</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_OFFSET, -, <<roff>> = R[1], <<edge>> = Wordings::first_wn(WR[1]) }</span>
|
||
|
<span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">at</span><span class="Preform-plain-syntax"> </span><span class="Preform-function-syntax"><map-offset></span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">***</span><span class="Preform-plain-syntax"> </span><span class="Preform-reserved-syntax">==></span><span class="Preform-plain-syntax"> { RUBRIC_POSITION, -, <<roff>> = R[1], <<edge>> = Wordings::first_wn(WR[1]) }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This is <a href="../words-module/4-ap.html" class="internal">Preform grammar</a>, not regular C code.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22" class="paragraph-anchor"></a><b>§22. </b></p>
|
||
|
|
||
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="Preform-constant-syntax">NO_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">0</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">EPSFILE_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">MAPPED_AS_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">MAPPED_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">SETTING_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_IMW</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_SIZE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_FONT</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_COLOUR</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_OFFSET</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">RUBRIC_POSITION</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">FIRST_ROOM_MAP_SCOPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">1</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">LEVEL_MAP_SCOPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">2</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">KIND_MAP_SCOPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">3</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">INSTANCE_MAP_SCOPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">4</span>
|
||
|
<span class="definition-keyword">define</span> <span class="Preform-constant-syntax">ENTIRE_MAP_SCOPE</span><span class="Preform-plain-syntax"> </span><span class="Preform-constant-syntax">5</span>
|
||
|
</pre>
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::new_map_hint_sentence</span><button class="popup" onclick="togglePopup('usagePopup7')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup7">Usage of <span class="code-font"><span class="function-syntax">EPSMap::new_map_hint_sentence</span></span>:<br/><a href="2-em.html#SP14">§14</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">pass</span><span class="plain-syntax">, </span><span class="identifier-syntax">parse_node</span><span class="plain-syntax"> *</span><span class="identifier-syntax">p</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">Node::get_type</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">) == </span><span class="identifier-syntax">AND_NT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP22" class="function-link"><span class="function-syntax">EPSMap::new_map_hint_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pass</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP22" class="function-link"><span class="function-syntax">EPSMap::new_map_hint_sentence</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pass</span><span class="plain-syntax">, </span><span class="identifier-syntax">p</span><span class="plain-syntax">-></span><span class="identifier-syntax">down</span><span class="plain-syntax">-></span><span class="element-syntax">next</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">current_sentence</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_pass</span><span class="plain-syntax"> = </span><span class="identifier-syntax">pass</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax"> = </span><span class="identifier-syntax">p</span><span class="plain-syntax">;</span>
|
||
|
|
||
|
<span class="plain-syntax"> </span><span class="comment-syntax"> the following take effect on pass 1</span>
|
||
|
<span class="plain-syntax"> </span><span class="function-syntax"><index-map-sentence-subject></span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">));</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">EPSFILE_IMW:</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">write_EPS_format_map</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MAPPED_AS_IMW:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_1" class="named-paragraph-link"><span class="named-paragraph">Parse "Index map with starboard mapped as east"-style sentences</span><span class="named-paragraph-number">22.1</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">MAPPED_IMW:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_2" class="named-paragraph-link"><span class="named-paragraph">Parse "Index map with Ballroom mapped north of the Hallway"-style sentences</span><span class="named-paragraph-number">22.2</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">SETTING_IMW:</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_4" class="named-paragraph-link"><span class="named-paragraph">Parse "Index map with room size of Ballroom set to 72"-style sentences</span><span class="named-paragraph-number">22.4</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_IMW:</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_3" class="named-paragraph-link"><span class="named-paragraph">Parse "Index map with rubric "Here Be Dragons""-style sentences</span><span class="named-paragraph-number">22.3</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_1" class="paragraph-anchor"></a><b>§22.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse "Index map with starboard mapped as east"-style sentences</span><span class="named-paragraph-number">22.1</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP23" class="function-link"><span class="function-syntax">EPSMap::map_direction_as_if</span></a><span class="plain-syntax">(</span><span class="function-syntax"><<instance:x>></span><span class="plain-syntax">, </span><span class="function-syntax"><<instance:y>></span><span class="plain-syntax">);</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22">§22</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_2" class="paragraph-anchor"></a><b>§22.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse "Index map with Ballroom mapped north of the Hallway"-style sentences</span><span class="named-paragraph-number">22.2</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Instances::of_kind</span><span class="plain-syntax">(</span><span class="function-syntax"><<instance:dir>></span><span class="plain-syntax">, </span><span class="identifier-syntax">K_direction</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapPlacementDirection</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"The direction given as a hint for map placement wasn't "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"one that I know of."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="function-syntax"><<instance:x>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I2</span><span class="plain-syntax"> = </span><span class="function-syntax"><<instance:y>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">exit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="function-syntax"><<instance:dir>>)-></span><span class="identifier-syntax">direction_index</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Spatial::object_is_a_room</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapFromNonRoom</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"The first-named thing must be a room (beware ambiguities!)."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">I2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) || (</span><span class="identifier-syntax">Spatial::object_is_a_room</span><span class="plain-syntax">(</span><span class="identifier-syntax">I2</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapToNonRoom</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"The second-named thing must be a room (beware ambiguities!)."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">PL::SpatialMap::direction_is_lateral</span><span class="plain-syntax">(</span><span class="identifier-syntax">exit</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapNonLateral</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"The direction given as a hint for map placement must be "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"a lateral direction (not up, down, above, below, inside "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"or outside)."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">PL::SpatialMap::lock_exit_in_place</span><span class="plain-syntax">(</span><span class="identifier-syntax">IXInstances::fi</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">), </span><span class="identifier-syntax">exit</span><span class="plain-syntax">, </span><span class="identifier-syntax">IXInstances::fi</span><span class="plain-syntax">(</span><span class="identifier-syntax">I2</span><span class="plain-syntax">));</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22">§22</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_3" class="paragraph-anchor"></a><b>§22.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse "Index map with rubric "Here Be Dragons""-style sentences</span><span class="named-paragraph-number">22.3</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><index-map-sentence-subject></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">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RESTW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">GET_RW</span><span class="plain-syntax">(</span><span class="function-syntax"><index-map-sentence-subject></span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">));</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">rubric_holder</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rh</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">rubric_holder</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">annotation</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">));</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">point_size</span><span class="plain-syntax"> = </span><span class="constant-syntax">12</span><span class="plain-syntax">; </span><span class="comment-syntax"> 12-point type</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">font</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">"<font>"</span><span class="plain-syntax">; </span><span class="comment-syntax"> meaning the default font</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">L</span><span class="string-syntax">"000000"</span><span class="plain-syntax">; </span><span class="comment-syntax"> black</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">at_offset</span><span class="plain-syntax"> = </span><span class="constant-syntax">10001</span><span class="plain-syntax">; </span><span class="comment-syntax"> the offset </span>\((1, 1)\)
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">offset_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESTW</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">i</span><span class="plain-syntax"> <= </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESTW</span><span class="plain-syntax">)) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><map-rubric></span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESTW</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</span><span class="plain-syntax">))) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="function-syntax"><<edge>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_SIZE:</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">point_size</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rsize>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_FONT:</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="function-syntax"><<rfont>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">font</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="function-syntax"><<rfont>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_COLOUR:</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_3_1" class="named-paragraph-link"><span class="named-paragraph">Make a rubric colour setting</span><span class="named-paragraph-number">22.3.1</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_OFFSET:</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">RUBRIC_POSITION:</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_3_2" class="named-paragraph-link"><span class="named-paragraph">Make a rubric offset setting</span><span class="named-paragraph-number">22.3.2</span></a></span><span class="plain-syntax">; </span><span class="reserved-syntax">break</span><span class="plain-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="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapBadRubric</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"Unfortunately the details of that rubric seem to be "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"in error (a lame message, but an accurate one)."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22">§22</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_3_1" class="paragraph-anchor"></a><b>§22.3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make a rubric colour setting</span><span class="named-paragraph-number">22.3.1</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="function-syntax"><<rcol>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">thec</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HTML::translate_colour_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="function-syntax"><<rcol>></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">thec</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapUnknownColour</span><span class="plain-syntax">), </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"There's no such map colour."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">colour</span><span class="plain-syntax"> = </span><span class="identifier-syntax">thec</span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22_3">§22.3</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_3_2" class="paragraph-anchor"></a><b>§22.3.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Make a rubric offset setting</span><span class="named-paragraph-number">22.3.2</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><<roff>></span><span class="plain-syntax"> == </span><span class="constant-syntax">ERRONEOUS_OFFSET_VALUE</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapUnknownOffset</span><span class="plain-syntax">), </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"There's no such offset."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">at_offset</span><span class="plain-syntax"> = </span><span class="function-syntax"><<roff>></span><span class="plain-syntax">;</span>
|
||
|
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><<r>></span><span class="plain-syntax"> == </span><span class="constant-syntax">RUBRIC_OFFSET</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">RW</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::from</span><span class="plain-syntax">(</span><span class="identifier-syntax">Node::get_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">p</span><span class="plain-syntax">), </span><span class="identifier-syntax">i</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="function-syntax"><instance-of-object></span><span class="plain-syntax">(</span><span class="identifier-syntax">RW</span><span class="plain-syntax">)) </span><span class="identifier-syntax">I</span><span class="plain-syntax"> = </span><span class="function-syntax"><<rp>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Wordings::last_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">RESTW</span><span class="plain-syntax">) + </span><span class="constant-syntax">1</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">I</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapUnknownOffsetBase</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"There's no such room to be offset from."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">rh</span><span class="plain-syntax">-></span><span class="element-syntax">offset_from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">I</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22_3">§22.3</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_4" class="paragraph-anchor"></a><b>§22.4. </b>Finally, then, sentences which set parameters for the EPS map-maker.
|
||
|
</p>
|
||
|
|
||
|
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Parse "Index map with room size of Ballroom set to 72"-style sentences</span><span class="named-paragraph-number">22.4</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">allow_on_pass_2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">map_parameter_scope</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope_I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">kind</span><span class="plain-syntax"> *</span><span class="identifier-syntax">scope_k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_4_1" class="named-paragraph-link"><span class="named-paragraph">Determine the scope for which the parameter is being set</span><span class="named-paragraph-number">22.4.1</span></a></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">allow_on_pass_2</span><span class="plain-syntax"> == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) && (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">2</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax"> = </span><span class="function-syntax"><<wchar_t:partext>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">index_of_parameter</span><span class="plain-syntax"> = </span><span class="function-syntax"><<parindex>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP22_4_2" class="named-paragraph-link"><span class="named-paragraph">Check that the value has the right type for this map parameter, and set it</span><span class="named-paragraph-number">22.4.2</span></a></span><span class="plain-syntax">;</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22">§22</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_4_1" class="paragraph-anchor"></a><b>§22.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Determine the scope for which the parameter is being set</span><span class="named-paragraph-number">22.4.1</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">bad_scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">switch</span><span class="plain-syntax"> (</span><span class="function-syntax"><<scoping>></span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FIRST_ROOM_MAP_SCOPE:</span><span class="plain-syntax"> {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">first</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Spatial::get_benchmark_room</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">first</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax"> = </span><span class="identifier-syntax">first</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">LEVEL_MAP_SCOPE:</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax">; </span><span class="comment-syntax"> we'll pick this up on pass 2 when levels exist</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">allow_on_pass_2</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">ln</span><span class="plain-syntax"> = </span><span class="function-syntax"><<level>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">EPS_map_level</span><span class="plain-syntax"> *</span><span class="identifier-syntax">eml</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">eml</span><span class="plain-syntax">, </span><span class="reserved-syntax">EPS_map_level</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">eml</span><span class="plain-syntax">-></span><span class="element-syntax">contains_rooms</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> && (</span><span class="identifier-syntax">eml</span><span class="plain-syntax">-></span><span class="element-syntax">map_level</span><span class="plain-syntax"> - </span><span class="identifier-syntax">PL::SpatialMap::benchmark_level</span><span class="plain-syntax">() == </span><span class="identifier-syntax">ln</span><span class="plain-syntax">))</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope</span><span class="plain-syntax"> = &(</span><span class="identifier-syntax">eml</span><span class="plain-syntax">-></span><span class="element-syntax">map_parameters</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">scope</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapLevelMisnamed</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="string-syntax">"Layers of the map must be called 'level N', where "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"N is a number, and level 0 is the one which contains "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"the first room."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">KIND_MAP_SCOPE:</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax"> = </span><span class="function-syntax"><<kind:kscope>></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">Kinds::Behaviour::is_subkind_of_object</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">) == </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">) </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</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">scope_k</span><span class="plain-syntax">) &&</span>
|
||
|
<span class="plain-syntax"> ((</span><span class="identifier-syntax">Kinds::Behaviour::is_object_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">)) ||</span>
|
||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Kinds::Behaviour::is_object_of_kind</span><span class="plain-syntax">(</span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">K_region</span><span class="plain-syntax">)))) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">SPATIAL_MAP</span><span class="plain-syntax">, </span><span class="string-syntax">"Setting for kind %u\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">bad_scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INSTANCE_MAP_SCOPE:</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">Spatial::object_is_a_room</span><span class="plain-syntax">(</span><span class="function-syntax"><<instance:iscope>></span><span class="plain-syntax">)) ||</span>
|
||
|
<span class="plain-syntax"> (</span><span class="identifier-syntax">Regions::object_is_a_region</span><span class="plain-syntax">(</span><span class="function-syntax"><<instance:iscope>></span><span class="plain-syntax">)))</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax"> = </span><span class="function-syntax"><<instance:iscope>></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">scope_I</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">LOGIF</span><span class="plain-syntax">(</span><span class="identifier-syntax">SPATIAL_MAP</span><span class="plain-syntax">, </span><span class="string-syntax">"Setting for object $O\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">bad_scope</span><span class="plain-syntax"> = </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">ENTIRE_MAP_SCOPE:</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax"> = </span><span class="identifier-syntax">K_room</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</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">bad_scope</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="2-em.html#SP16_4_1" class="named-paragraph-link"><span class="named-paragraph">Actually issue PM_MapSettingOfUnknown problem</span><span class="named-paragraph-number">16.4.1</span></a></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22_4">§22.4</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP16_4_1" class="paragraph-anchor"></a><b>§16.4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Actually issue PM_MapSettingOfUnknown problem</span><span class="named-paragraph-number">16.4.1</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">index_map_with_pass</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">StandardProblems::map_problem</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapSettingOfUnknown</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">index_map_with_p</span><span class="plain-syntax">, </span><span class="string-syntax">"The parameter has to be 'of' either 'the first room' "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"or a specific named room (beware ambiguities!) or "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"a level such as 'level 0' (the first room is by "</span>
|
||
|
<span class="plain-syntax"> </span><span class="string-syntax">"definition on level 0), or a region, or a kind of room."</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP16_4">§16.4</a>, <a href="2-em.html#SP22_4_1">§22.4.1</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP22_4_2" class="paragraph-anchor"></a><b>§22.4.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Check that the value has the right type for this map parameter, and set it</span><span class="named-paragraph-number">22.4.2</span></span><span class="comment-syntax"> =</span>
|
||
|
</p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">type_wanted</span><span class="plain-syntax"> = </span><span class="identifier-syntax">global_map_scope</span><span class="plain-syntax">.</span><span class="element-syntax">values</span><span class="plain-syntax">[</span><span class="identifier-syntax">index_of_parameter</span><span class="plain-syntax">].</span><span class="element-syntax">parameter_data_type</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">type_found</span><span class="plain-syntax"> = </span><span class="function-syntax"><<msvtype>></span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">char</span><span class="plain-syntax"> *</span><span class="identifier-syntax">i_wanted_a</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">wn</span><span class="plain-syntax"> = </span><span class="function-syntax"><<msword>></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">type_wanted</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">INT_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"an integer"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">INT_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="function-syntax"><<msvalue>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">OFF_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"an offset in the form 34&-450"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">OFF_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="function-syntax"><<msvalue>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">BOOL_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"'on' or 'off'"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">BOOL_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="function-syntax"><<msvalue>></span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">TEXT_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"some text in double-quotes"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">), </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">FONT_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"a font name in double-quotes"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">), </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">COL_MDT:</span><span class="plain-syntax"> </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax"> = </span><span class="string-syntax">"a colour name in double-quotes"</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">type_found</span><span class="plain-syntax"> == </span><span class="constant-syntax">TEXT_MDT</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Word::dequote</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> *</span><span class="identifier-syntax">col</span><span class="plain-syntax"> = </span><span class="identifier-syntax">HTML::translate_colour_name</span><span class="plain-syntax">(</span><span class="identifier-syntax">Lexer::word_text</span><span class="plain-syntax">(</span><span class="identifier-syntax">wn</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">col</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><a href="2-em.html#SP10" class="function-link"><span class="function-syntax">EPSMap::put_mp</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">parameter_name</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_I</span><span class="plain-syntax">, </span><span class="identifier-syntax">scope_k</span><span class="plain-syntax">, </span><span class="identifier-syntax">col</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> }</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">default:</span><span class="plain-syntax"> </span><span class="identifier-syntax">internal_error</span><span class="plain-syntax">(</span><span class="string-syntax">"Unexpected map parameter data type"</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">pass</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">) </span><span class="identifier-syntax">StandardProblems::map_problem_wanted_but</span><span class="plain-syntax">(</span><span class="identifier-syntax">_p_</span><span class="plain-syntax">(</span><span class="identifier-syntax">PM_MapSettingTypeFailed</span><span class="plain-syntax">),</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">p</span><span class="plain-syntax">, </span><span class="identifier-syntax">i_wanted_a</span><span class="plain-syntax">, </span><span class="identifier-syntax">wn</span><span class="plain-syntax">);</span>
|
||
|
</pre>
|
||
|
<ul class="endnotetexts"><li>This code is used in <a href="2-em.html#SP22_4">§22.4</a>.</li></ul>
|
||
|
<p class="commentary firstcommentary"><a id="SP23" class="paragraph-anchor"></a><b>§23. </b></p>
|
||
|
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::map_direction_as_if</span><button class="popup" onclick="togglePopup('usagePopup8')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup8">Usage of <span class="code-font"><span class="function-syntax">EPSMap::map_direction_as_if</span></span>:<br/><a href="2-em.html#SP22_1">§22.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I</span><span class="plain-syntax">, </span><span class="identifier-syntax">instance</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I2</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">story_dir_to_page_dir</span><span class="plain-syntax">[</span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="plain-syntax">)-></span><span class="identifier-syntax">direction_index</span><span class="plain-syntax">] = </span><span class="identifier-syntax">MAP_DATA</span><span class="plain-syntax">(</span><span class="identifier-syntax">I2</span><span class="plain-syntax">)-></span><span class="identifier-syntax">direction_index</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<p class="commentary firstcommentary"><a id="SP24" class="paragraph-anchor"></a><b>§24. Offset notation. </b>The offset parameter \((x, y)\) is stored as the integer \(10000y + x\). Except
|
||
|
for the error value, we are required to have \(-9999 \leq x, y \leq 9999\), and
|
||
|
the syntax to specify this is two literal numbers divided by an ampersand.
|
||
|
For instance, <span class="extract"><span class="extract-syntax">28&-125</span></span> means \((28, -125)\) which is stored as \(-1249972\).
|
||
|
</p>
|
||
|
|
||
|
<pre class="definitions code-font"><span class="definition-keyword">define</span> <span class="constant-syntax">ERRONEOUS_OFFSET_VALUE</span><span class="plain-syntax"> </span><span class="constant-syntax">100000000</span>
|
||
|
</pre>
|
||
|
<pre class="displayed-code all-displayed-code code-font">
|
||
|
<span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="function-syntax">EPSMap::parse_eps_map_offset</span><button class="popup" onclick="togglePopup('usagePopup9')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup9">Usage of <span class="code-font"><span class="function-syntax">EPSMap::parse_eps_map_offset</span></span>:<br/><a href="2-em.html#SP20">§20</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">wording</span><span class="plain-syntax"> </span><span class="identifier-syntax">W</span><span class="plain-syntax">) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">offs</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">offs</span><span class="plain-syntax">, </span><span class="string-syntax">"%W"</span><span class="plain-syntax">, </span><span class="identifier-syntax">Wordings::one_word</span><span class="plain-syntax">(</span><span class="identifier-syntax">Wordings::first_wn</span><span class="plain-syntax">(</span><span class="identifier-syntax">W</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">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">offs</span><span class="plain-syntax">) >= </span><span class="constant-syntax">30</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">ERRONEOUS_OFFSET_VALUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Regexp::create_mr</span><span class="plain-syntax">();</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">xbit</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">, </span><span class="identifier-syntax">ybit</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</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">Regexp::match</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">, </span><span class="identifier-syntax">offs</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"(%c*?)&(%c*)"</span><span class="plain-syntax">)) {</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">xbit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[0], </span><span class="constant-syntax">0</span><span class="plain-syntax">), </span><span class="identifier-syntax">ybit</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Str::atoi</span><span class="plain-syntax">(</span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="identifier-syntax">exp</span><span class="plain-syntax">[1], </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">Regexp::dispose_of</span><span class="plain-syntax">(&</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
|
||
|
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="constant-syntax">ERRONEOUS_OFFSET_VALUE</span><span class="plain-syntax">;</span>
|
||
|
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">offs</span><span class="plain-syntax">)</span>
|
||
|
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">xbit</span><span class="plain-syntax"> + </span><span class="identifier-syntax">ybit</span><span class="plain-syntax">*10000;</span>
|
||
|
<span class="plain-syntax">}</span>
|
||
|
</pre>
|
||
|
<nav role="progress"><div class="progresscontainer">
|
||
|
<ul class="progressbar"><li class="progressprev"><a href="2-ie.html">❮</a></li><li class="progresschapter"><a href="P-wtmd.html">P</a></li><li class="progresschapter"><a href="1-rm.html">1</a></li><li class="progresscurrentchapter">2</li><li class="progresssection"><a href="2-hrr.html">hrr</a></li><li class="progresssection"><a href="2-ni.html">ni</a></li><li class="progresssection"><a href="2-cu.html">cu</a></li><li class="progresssection"><a href="2-emt.html">emt</a></li><li class="progresssection"><a href="2-ec.html">ec</a></li><li class="progresssection"><a href="2-ea.html">ea</a></li><li class="progresssection"><a href="2-int.html">int</a></li><li class="progresssection"><a href="2-sv.html">sv</a></li><li class="progresssection"><a href="2-th.html">th</a></li><li class="progresssection"><a href="2-dv.html">dv</a></li><li class="progresssection"><a href="2-es.html">es</a></li><li class="progresssection"><a href="2-ic.html">ic</a></li><li class="progresssection"><a href="2-kd.html">kd</a></li><li class="progresssection"><a href="2-sc.html">sc</a></li><li class="progresssection"><a href="2-hnae.html">hnae</a></li><li class="progresssection"><a href="2-sn.html">sn</a></li><li class="progresssection"><a href="2-gpr.html">gpr</a></li><li class="progresssection"><a href="2-ie.html">ie</a></li><li class="progresscurrent">em</li><li class="progresschapter"><a href="3-gm.html">3</a></li><li class="progresschapter"><a href="4-enc.html">4</a></li><li class="progresschapter"><a href="5-act.html">5</a></li><li class="progresschapter"><a href="6-bd.html">6</a></li><li class="progresschapter"><a href="7-cg.html">7</a></li><li class="progressnext"><a href="3-gm.html">❯</a></li></ul></div>
|
||
|
</nav><!--End of weave-->
|
||
|
|
||
|
</main>
|
||
|
</body>
|
||
|
</html>
|
||
|
|