mirror of
https://github.com/ganelson/inform.git
synced 2024-07-05 08:34:22 +03:00
2013 lines
288 KiB
HTML
2013 lines
288 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>3/hm</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
|
|
<!--Weave of '3/em' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">★</a></li><li><a href="index.html">if</a></li><li><a href="index.html#3">Chapter 3: Space and Time</a></li><li><b>EPS Map</b></li></ul><p class="purpose">To render the spatial map of rooms as an EPS (Encapsulated PostScript) file.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Definitions</a></li><li><a href="#SP9">§9. Map parameters</a></li><li><a href="#SP10">§10. Map parameter scopes</a></li><li><a href="#SP14">§14. Parsing sentences which set map parameters</a></li><li><a href="#SP23">§23. Offset notation</a></li><li><a href="#SP26">§26. Writing text in EPS</a></li><li><a href="#SP28">§28. EPS header</a></li><li><a href="#SP29">§29. Circles and rectangles</a></li><li><a href="#SP31">§31. Straight lines</a></li><li><a href="#SP32">§32. Dashed arrows</a></li><li><a href="#SP33">§33. Bezier curves</a></li><li><a href="#SP34">§34. Line thickness</a></li><li><a href="#SP35">§35. Text</a></li><li><a href="#SP36">§36. RGB colours</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Definitions. </b></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </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 <code class="display"><span class="extract">FALSE</span></code>:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">write_EPS_format_map</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </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="inwebparagraph">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">
|
|
<span class="definitionkeyword">define</span> <span class="constant">INT_MDT</span><span class="plain"> 1 </span> <span class="comment">an integer</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">BOOL_MDT</span><span class="plain"> 2 </span> <span class="comment">true or false</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">TEXT_MDT</span><span class="plain"> 3 </span> <span class="comment">quoted text</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">COL_MDT</span><span class="plain"> 4 </span> <span class="comment">an HTML-safe colour</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">FONT_MDT</span><span class="plain"> 5 </span> <span class="comment">the name of a font</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">OFF_MDT</span><span class="plain"> 6 </span> <span class="comment">a positional offset in an (x,y) grid</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">plotting_parameter</span><span class="plain"> {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">specified</span><span class="plain">; </span> <span class="comment">is it explicitly specified at this scope?</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">; </span> <span class="comment">name (used only in global scope)</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parameter_data_type</span><span class="plain">; </span> <span class="comment">one of the above types (used only in global scope)</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">string_value</span><span class="plain">; </span> <span class="comment">string value, if appropriate to this type;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">stream_value</span><span class="plain">; </span> <span class="comment">text value, if appropriate to this type;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">numeric_value</span><span class="plain">; </span> <span class="comment">or numeric value, if appropriate to this type</span>
|
|
<span class="plain">} </span><span class="reserved">plotting_parameter</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure plotting_parameter is accessed in 2/bd, 3/tnt, 3/sm, 3/tp, 3/bck, 3/rgn, 3/tm, 3/sc, 3/scn, 4/act, 4/anl, 4/nap, 5/gp, 5/gv, 5/gpr and here.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </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">
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_MAP_PARAMETERS</span><span class="plain"> 35</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">map_parameter_scope</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">wider_scope</span><span class="plain">; </span> <span class="comment">that is, the scope above this</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">plotting_parameter</span><span class="plain"> </span><span class="identifier">values</span><span class="plain">[</span><span class="constant">NO_MAP_PARAMETERS</span><span class="plain">];</span>
|
|
<span class="plain">} </span><span class="reserved">map_parameter_scope</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> </span><span class="identifier">global_map_scope</span><span class="plain"> = {</span>
|
|
<span class="identifier">NULL</span><span class="plain">,</span>
|
|
<span class="plain">{</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"font"</span><span class="plain">, </span><span class="constant">FONT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Helvetica"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"minimum-map-width"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 72*5 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"title"</span><span class="plain">, </span><span class="constant">TEXT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Map"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"title-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 24 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"title-font"</span><span class="plain">, </span><span class="constant">FONT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"title-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"map-outline"</span><span class="plain">, </span><span class="constant">BOOL_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"border-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 12 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"vertical-spacing"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 6 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="constant">BOOL_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"annotation-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 8 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"annotation-length"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 8 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"annotation-font"</span><span class="plain">, </span><span class="constant">FONT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"subtitle"</span><span class="plain">, </span><span class="constant">TEXT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Map"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"subtitle-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 16 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"subtitle-font"</span><span class="plain">, </span><span class="constant">FONT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"subtitle-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"grid-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 72 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"route-stiffness"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 100 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"route-thickness"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"route-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-offset"</span><span class="plain">, </span><span class="constant">OFF_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 36 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"DDDDDD"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name"</span><span class="plain">, </span><span class="constant">TEXT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-size"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 12 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-font"</span><span class="plain">, </span><span class="constant">FONT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-length"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 5 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-offset"</span><span class="plain">, </span><span class="constant">OFF_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-outline"</span><span class="plain">, </span><span class="constant">BOOL_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-outline-colour"</span><span class="plain">, </span><span class="constant">COL_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-outline-thickness"</span><span class="plain">, </span><span class="constant">INT_MDT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 1 },</span>
|
|
<span class="plain">{ </span><span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-shape"</span><span class="plain">, </span><span class="constant">TEXT_MDT</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"square"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 0 }</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">};</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">changed_global_room_colour</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure map_parameter_scope is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>A "rubric" is a freestanding piece of text written on the map. Typically
|
|
it will be a title.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">rubric_holder</span><span class="plain"> {</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">annotation</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">point_size</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">font</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">colour</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">at_offset</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">offset_from</span><span class="plain">;</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">rubric_holder</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure rubric_holder is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>Each horizontal level of the EPS map needs its own storage, not least to
|
|
hold the applicable mapping parameters.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">EPS_map_level</span><span class="plain"> {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">width</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">actual_height</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">height</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">titling</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">titling_point_size</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">map_level</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">y_max</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">y_min</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">contains_rooms</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">contains_titling</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">eps_origin</span><span class="plain">;</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">map_parameter_scope</span><span class="plain"> </span><span class="identifier">map_parameters</span><span class="plain">;</span>
|
|
<span class="identifier">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">EPS_map_level</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure EPS_map_level is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>The following are the directions at which arrows for UP, DOWN, IN and OUT
|
|
are drawn on EPS maps.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">U_vector_EPS</span><span class="plain"> = {2, 3, 0};</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">D_vector_EPS</span><span class="plain"> = {-2, -3, 0};</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">IN_vector_EPS</span><span class="plain"> = {3, 2, 0};</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">OUT_vector_EPS</span><span class="plain"> = {-3, -2, 0};</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </b>A convenience when parsing:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">index_map_with_pass</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">index_map_with_p</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Map parameters. </b>We convert a parameter's name to its index in the list; slowly, but that
|
|
doesn't matter.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index_forgivingly</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">s</span><span class="plain"> < 0) {</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"Tried to look up <%w>\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"looked up non-existent map variable"</span><span class="plain">);</span>
|
|
<span class="identifier">s</span><span class="plain"> = 0;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">s</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::get_map_variable_index_forgivingly</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain">=0; </span><span class="identifier">s</span><span class="plain"><</span><span class="constant">NO_MAP_PARAMETERS</span><span class="plain">; </span><span class="identifier">s</span><span class="plain">++)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">global_map_scope</span><span class="element">.values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.name</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">global_map_scope</span><span class="element">.values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.name</span><span class="plain">) == 0))</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">s</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> -1;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::get_map_variable_index is used in <a href="#SP12">§12</a>, <a href="#SP13">§13</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::get_map_variable_index_forgivingly is used in <a href="#SP18_1">§18.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP10"></a><b>§10. Map parameter scopes. </b>Here goes, then: an initialised set of parameters.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::prepare_map_parameter_scope</span><span class="plain">(</span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>wider_scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">s</span><span class="plain">=0; </span><span class="identifier">s</span><span class="plain"><</span><span class="constant">NO_MAP_PARAMETERS</span><span class="plain">; </span><span class="identifier">s</span><span class="plain">++) {</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.string_value</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.numeric_value</span><span class="plain"> = 0;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::prepare_map_parameter_scope is used in <a href="#SP24_1">§24.1</a>, <a href="#SP24_2">§24.2</a>, 3/sm2 (<a href="3-sm2.html#SP8_1">§8.1</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>The following sets a parameter to a given value (the string value if that's
|
|
non-<code class="display"><span class="extract">NULL</span></code>, the number value otherwise), for a particular scope: this is
|
|
slightly wastefully specified either as a <code class="display"><span class="extract">map_parameter_scope</span></code> 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="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">scope_I</span><span class="plain">,</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">put_string</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">put_integer</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope_I</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">scope_I</span><span class="plain">))</span>
|
|
<span class="identifier">scope</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::scope_for_single_room</span><span class="plain">(</span><span class="identifier">scope_I</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Regions::object_is_a_region</span><span class="plain">(</span><span class="identifier">scope_I</span><span class="plain">)) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">rm</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">rm</span><span class="plain">, </span><span class="identifier">K_room</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::obj_in_region</span><span class="plain">(</span><span class="identifier">rm</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">))</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">rm</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">put_string</span><span class="plain">, </span><span class="identifier">put_integer</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope_k</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_INSTANCES</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">put_string</span><span class="plain">, </span><span class="identifier">put_integer</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-colour"</span><span class="plain">) == 0) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == &</span><span class="identifier">global_map_scope</span><span class="plain">) </span><span class="identifier">changed_global_room_colour</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope_I</span><span class="plain">) </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain"> = </span><span class="identifier">put_string</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"room-name-colour"</span><span class="plain">) == 0)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope_I</span><span class="plain">) </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">)-</span><span class="element">>world_index_text_colour</span><span class="plain"> = </span><span class="identifier">put_string</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">put_string</span><span class="plain">) </span><span class="functiontext">PL::EPSMap::put_string_mp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">put_string</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::put_int_mp</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">put_integer</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="functiontext">PL::EPSMap::scope_for_single_room</span><span class="plain">(</span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">rm</span><span class="plain">) {</span>
|
|
<span class="reserved">return</span><span class="plain"> &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">rm</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::obj_in_region</span><span class="plain">(</span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">reg</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">reg</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Regions::enclosing</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">) == </span><span class="identifier">reg</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::obj_in_region</span><span class="plain">(</span><span class="functiontext">PL::Regions::enclosing</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">reg</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::put_mp is used in <a href="#SP22_4_2">§22.4.2</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::scope_for_single_room appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::obj_in_region appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>String parameters.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">scope</span><span class="plain"> = </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>wider_scope</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"scope exhausted in looking up map parameter"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.string_value</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"font"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">p</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::put_string_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.string_value</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">text_stream</span><span class="plain"> *</span><span class="functiontext">PL::EPSMap::get_stream_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">scope</span><span class="plain"> = </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>wider_scope</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"scope exhausted in looking up map parameter"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.stream_value</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::put_stream_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.stream_value</span><span class="plain"> = </span><span class="identifier">Str::duplicate</span><span class="plain">(</span><span class="identifier">val</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::get_string_mp is used in <a href="#SP25">§25</a>, <a href="#SP25_4">§25.4</a>, <a href="#SP25_6_1">§25.6.1</a>, <a href="#SP25_6_1_2">§25.6.1.2</a>, <a href="#SP25_7_1">§25.7.1</a>, <a href="#SP25_7_2">§25.7.2</a>, <a href="#SP25_7_3">§25.7.3</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::put_string_mp is used in <a href="#SP11">§11</a>, <a href="#SP24_3">§24.3</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::get_stream_mp is used in <a href="#SP25_4">§25.4</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::put_stream_mp is used in <a href="#SP24_1">§24.1</a>, <a href="#SP24_2">§24.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>Integer parameters.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="identifier">scope</span><span class="plain"> = </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>wider_scope</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"scope exhausted in looking up map parameter"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.numeric_value</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::put_int_mp</span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">scope</span><span class="plain"> = &</span><span class="identifier">global_map_scope</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.specified</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">scope</span><span class="plain">-</span><span class="element">>values</span><span class="plain">[</span><span class="identifier">s</span><span class="plain">]</span><span class="element">.numeric_value</span><span class="plain"> = </span><span class="identifier">val</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::get_int_mp is used in <a href="#SP24_1">§24.1</a>, <a href="#SP25">§25</a>, <a href="#SP25_1">§25.1</a>, <a href="#SP25_4">§25.4</a>, <a href="#SP25_5">§25.5</a>, <a href="#SP25_6">§25.6</a>, <a href="#SP25_6_1">§25.6.1</a>, <a href="#SP25_6_1_2">§25.6.1.2</a>, <a href="#SP25_7">§25.7</a>, <a href="#SP25_7_1">§25.7.1</a>, <a href="#SP25_7_2">§25.7.2</a>, <a href="#SP25_7_3">§25.7.3</a>, <a href="#SP25_8">§25.8</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::put_int_mp is used in <a href="#SP11">§11</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP14"></a><b>§14. 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="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::traverse_for_map_parameters</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="functiontext">PL::SpatialMap::initialise_page_directions</span><span class="plain">();</span>
|
|
<span class="identifier">ParseTree::traverse_int</span><span class="plain">(</span><span class="functiontext">PL::EPSMap::look_for_map_parameters</span><span class="plain">, &</span><span class="identifier">pass</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::look_for_map_parameters</span><span class="plain">(</span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> *</span><span class="identifier">pass</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">SENTENCE_NT</span><span class="plain">)</span>
|
|
<span class="plain">&& (</span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (*</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Assertions::Traverse::try_special_meaning</span><span class="plain">(</span><span class="identifier">TRAVERSE_FOR_MAP1_SMFT</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">Assertions::Traverse::try_special_meaning</span><span class="plain">(</span><span class="identifier">TRAVERSE_FOR_MAP2_SMFT</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::traverse_for_map_parameters is used in <a href="#SP24">§24</a>, 3/sm2 (<a href="3-sm2.html#SP46">§46</a>).</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::look_for_map_parameters appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::index_map_with_SMF</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">task</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">wording</span><span class="plain"> *</span><span class="identifier">NPs</span><span class="plain">) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">OW</span><span class="plain"> = (</span><span class="identifier">NPs</span><span class="plain">)?(</span><span class="identifier">NPs</span><span class="plain">[1]):</span><span class="identifier">EMPTY_WORDING</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">task</span><span class="plain">) { </span> <span class="comment">"Index map with ..."</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ACCEPT_SMFT</span><span class="plain">:</span>
|
|
<span class="identifier">ParseTree::annotate_int</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">verb_id_ANNOT</span><span class="plain">, </span><span class="identifier">SPECIAL_MEANING_VB</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">nounphrase</span><span class="plain">-</span><span class="identifier">articled</span><span class="plain">-</span><span class="identifier">list</span><span class="plain">>(</span><span class="identifier">OW</span><span class="plain">);</span>
|
|
<span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain"> = <<</span><span class="identifier">rp</span><span class="plain">>>;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TRAVERSE_FOR_MAP1_SMFT</span><span class="plain">:</span>
|
|
<span class="functiontext">PL::EPSMap::new_map_hint_sentence</span><span class="plain">(1, </span><span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TRAVERSE_FOR_MAP2_SMFT</span><span class="plain">:</span>
|
|
<span class="functiontext">PL::EPSMap::new_map_hint_sentence</span><span class="plain">(2, </span><span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TRAVERSE_FOR_MAP_INDEX_SMFT</span><span class="plain">:</span>
|
|
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"\</span><span class="plain">n</span><span class="string">Index map with %+W.\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">-</span><span class="element">>next</span><span class="plain">));</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::index_map_with_SMF appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>This conveniently filters instance names to accept only those of kind
|
|
"direction".
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">direction</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ==> 0; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]; </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Instances::of_kind</span><span class="plain">(</span><span class="identifier">RP</span><span class="plain">[1], </span><span class="identifier">K_direction</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17"></a><b>§17. </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="inwebparagraph">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="display">
|
|
<span class="plain"><</span><span class="identifier">index</span><span class="plain">-</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">> ::=</span>
|
|
<span class="identifier">eps</span><span class="plain"> </span><span class="identifier">file</span><span class="plain"> | ==> </span><span class="constant">EPSFILE_IMW</span>
|
|
<span class="plain"><</span><span class="identifier">direction</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> </span><span class="identifier">mapped</span><span class="plain"> </span><span class="identifier">as</span><span class="plain"> <</span><span class="identifier">direction</span><span class="plain">-</span><span class="identifier">name</span><span class="plain">> | ==> </span><span class="constant">MAPPED_AS_IMW</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">x</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">y</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[2];</span>
|
|
<span class="plain">... </span><span class="identifier">mapped</span><span class="plain"> </span><span class="identifier">as</span><span class="plain"> ... | ==> </span><<span class="cwebmacro">Issue PM_MapDirectionClue problem</span> <span class="cwebmacronumber">17.1</span>>
|
|
<span class="plain"><</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> </span><span class="identifier">mapped</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">positioning</span><span class="plain">> | ==> </span><span class="constant">MAPPED_IMW</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">x</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">y</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[2];</span>
|
|
<span class="plain">... </span><span class="identifier">mapped</span><span class="plain"> ... | ==> </span><<span class="cwebmacro">Issue PM_MapPlacement problem</span> <span class="cwebmacronumber">17.2</span>>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">> </span><span class="identifier">set</span><span class="plain"> </span><span class="identifier">to</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">value</span><span class="plain">> | ==> </span><span class="constant">SETTING_IMW</span><span class="plain">; <<</span><span class="identifier">scoping</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">[1] == </span><span class="constant">NO_IMW</span><span class="plain">) *</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">; <<</span><span class="identifier">msvtype</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[2]</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">> </span><span class="identifier">set</span><span class="plain"> </span><span class="identifier">to</span><span class="plain"> ... | ==> </span><<span class="cwebmacro">Issue PM_MapSettingTooLong problem</span> <span class="cwebmacronumber">17.3</span>>
|
|
<span class="plain">... </span><span class="identifier">set</span><span class="plain"> </span><span class="identifier">to</span><span class="plain"> ... | ==> </span><<span class="cwebmacro">Issue PM_MapSettingOfUnknown problem</span> <span class="cwebmacronumber">17.4</span>>
|
|
<span class="identifier">rubric</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} *** | ==> </span><span class="constant">RUBRIC_IMW</span>
|
|
<span class="plain">... ==> </span><<span class="cwebmacro">Issue PM_MapHintUnknown problem</span> <span class="cwebmacronumber">17.5</span>>
|
|
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">positioning</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> </span><span class="identifier">of</span><span class="plain">/</span><span class="identifier">from</span><span class="plain"> <</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> | ==> </span><span class="identifier">TRUE</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">dir</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[2]</span>
|
|
<span class="identifier">above</span><span class="plain"> <</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> | ==> </span><span class="identifier">TRUE</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">dir</span><span class="plain">>> = </span><span class="identifier">I_up</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
<span class="identifier">below</span><span class="plain"> <</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ==> </span><span class="identifier">TRUE</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">dir</span><span class="plain">>> = </span><span class="identifier">I_down</span><span class="plain">; *</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_1"></a><b>§17.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapDirectionClue problem</span> <span class="cwebmacronumber">17.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapDirectionClue</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"You can only say 'Index map with D mapped as E.' "</span>
|
|
<span class="string">"when D and E are directions."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_2"></a><b>§17.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapPlacement problem</span> <span class="cwebmacronumber">17.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapPlacement</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"The map placement hint should either have the form 'Index map with X "</span>
|
|
<span class="string">"mapped east of Y' or 'Index map with X mapped above/below Y'."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_3"></a><b>§17.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapSettingTooLong problem</span> <span class="cwebmacronumber">17.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapSettingTooLong</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"The value supplied has to be a single item, a number, a word "</span>
|
|
<span class="string">"or some text in double-quotes: this looks too long to be right."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_4"></a><b>§17.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapSettingOfUnknown problem</span> <span class="cwebmacronumber">17.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Actually issue PM_MapSettingOfUnknown problem</span> <span class="cwebmacronumber">17.4.1</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_5"></a><b>§17.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapHintUnknown problem</span> <span class="cwebmacronumber">17.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 2) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapHintUnknown</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"The general form for this is 'Index map with ...' and then a "</span>
|
|
<span class="string">"list of clues, such as 'the Ballroom mapped east of the Terrace', "</span>
|
|
<span class="string">"or 'room-size of the Ballroom set to 100'."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17">§17</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18"></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="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">parameter</span><span class="plain">> </span><span class="identifier">of</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]; <<</span><span class="identifier">wchar_t</span><span class="plain">:</span><span class="identifier">partext</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]; <<</span><span class="identifier">parindex</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">parameter</span><span class="plain">> | ==> </span><span class="constant">ENTIRE_MAP_SCOPE</span><span class="plain">; <<</span><span class="identifier">wchar_t</span><span class="plain">:</span><span class="identifier">partext</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]; <<</span><span class="identifier">parindex</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain">... </span><span class="identifier">of</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">> ==> </span><<span class="cwebmacro">Issue PM_MapSettingUnknown problem</span> <span class="cwebmacronumber">18.2</span>>
|
|
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">definite</span><span class="plain">-</span><span class="identifier">article</span><span class="plain">> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> | ==> </span><span class="identifier">R</span><span class="plain">[2]</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> ==> </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">scope</span><span class="plain">-</span><span class="identifier">unarticled</span><span class="plain">> ::=</span>
|
|
<span class="identifier">first</span><span class="plain"> </span><span class="identifier">room</span><span class="plain"> | ==> </span><span class="constant">FIRST_ROOM_MAP_SCOPE</span>
|
|
<span class="identifier">level</span><span class="plain"> <</span><span class="identifier">cardinal</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">> | ==> </span><span class="constant">LEVEL_MAP_SCOPE</span><span class="plain">; <<</span><span class="identifier">level</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="identifier">k</span><span class="plain">-</span><span class="identifier">kind</span><span class="plain">> | ==> </span><span class="constant">KIND_MAP_SCOPE</span><span class="plain">; <<</span><span class="identifier">kind</span><span class="plain">:</span><span class="identifier">kscope</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
<span class="plain"><</span><span class="identifier">instance</span><span class="plain">-</span><span class="identifier">of</span><span class="plain">-</span><span class="identifier">object</span><span class="plain">> ==> </span><span class="constant">INSTANCE_MAP_SCOPE</span><span class="plain">; <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">iscope</span><span class="plain">>> = </span><span class="identifier">RP</span><span class="plain">[1]</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18_1"></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="inwebparagraph">For now, at least, these are all in English only.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">parameter</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">parameter_name</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Wordings::length</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">) == 1) &&</span>
|
|
<span class="plain">((</span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_map_variable_index_forgivingly</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">))>=0)) {</span>
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">;</span>
|
|
<span class="plain">*</span><span class="identifier">XP</span><span class="plain"> = </span><span class="identifier">parameter_name</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP18_2"></a><b>§18.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Issue PM_MapSettingUnknown problem</span> <span class="cwebmacronumber">18.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="constant">NO_IMW</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapSettingUnknown</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"The parameter has to be one of the fixed named set given in "</span>
|
|
<span class="string">"the documentation, like 'room-name'. All parameters are one "</span>
|
|
<span class="string">"word, but many are hyphenated. (Also, note that 'colour' has the "</span>
|
|
<span class="string">"Canadian/English spelling, not the American one 'color'.)"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP18">§18</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP19"></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="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">value</span><span class="plain">> ::=</span>
|
|
<span class="plain"><</span><span class="identifier">cardinal</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">> | ==> </span><span class="constant">INT_MDT</span><span class="plain">; <<</span><span class="identifier">msvalue</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">msword</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">> | ==> </span><span class="constant">TEXT_MDT</span><span class="plain">; <<</span><span class="identifier">msvalue</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">msword</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">boolean</span><span class="plain">> | ==> </span><span class="constant">BOOL_MDT</span><span class="plain">; <<</span><span class="identifier">msvalue</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">msword</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">offset</span><span class="plain">> | ==> </span><span class="constant">OFF_MDT</span><span class="plain">; <<</span><span class="identifier">msvalue</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">msword</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">); </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">[1] == </span><span class="constant">ERRONEOUS_OFFSET_VALUE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="plain">### ==> -1; <<</span><span class="identifier">msword</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">); </span> <span class="comment">leads to a problem message later</span>
|
|
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">setting</span><span class="plain">-</span><span class="identifier">boolean</span><span class="plain">> ::=</span>
|
|
<span class="identifier">on</span><span class="plain"> | ==> </span><span class="identifier">TRUE</span>
|
|
<span class="identifier">off</span><span class="plain"> ==> </span><span class="identifier">FALSE</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP20"></a><b>§20. </b>Map offsets have a cutesy notation: <code class="display"><span class="extract">10&-30</span></code>, 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 <code class="display"><span class="extract">ERRONEOUS_OFFSET_VALUE</span></code> sentinel.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">offset</span><span class="plain">> </span><span class="identifier">internal</span><span class="plain"> 1 {</span>
|
|
<span class="plain">*</span><span class="identifier">X</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::parse_eps_map_offset</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP21"></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="display">
|
|
<span class="plain"><</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">rubric</span><span class="plain">> ::=</span>
|
|
<span class="identifier">size</span><span class="plain"> <</span><span class="identifier">cardinal</span><span class="plain">-</span><span class="identifier">number</span><span class="plain">> *** | ==> </span><span class="constant">RUBRIC_SIZE</span><span class="plain">; <<</span><span class="identifier">rsize</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">edge</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[1])</span>
|
|
<span class="identifier">font</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} *** | ==> </span><span class="constant">RUBRIC_FONT</span><span class="plain">; <<</span><span class="identifier">rfont</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">edge</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[2])</span>
|
|
<span class="identifier">colour</span><span class="plain"> {<</span><span class="identifier">quoted</span><span class="plain">-</span><span class="identifier">text</span><span class="plain">-</span><span class="identifier">without</span><span class="plain">-</span><span class="identifier">subs</span><span class="plain">>} *** | ==> </span><span class="constant">RUBRIC_COLOUR</span><span class="plain">; <<</span><span class="identifier">rcol</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">edge</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[2])</span>
|
|
<span class="identifier">at</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">offset</span><span class="plain">> </span><span class="identifier">from</span><span class="plain"> ... | ==> </span><span class="constant">RUBRIC_OFFSET</span><span class="plain">; <<</span><span class="identifier">roff</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">edge</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[1])</span>
|
|
<span class="identifier">at</span><span class="plain"> <</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">offset</span><span class="plain">> *** ==> </span><span class="constant">RUBRIC_POSITION</span><span class="plain">; <<</span><span class="identifier">roff</span><span class="plain">>> = </span><span class="identifier">R</span><span class="plain">[1]; <<</span><span class="identifier">edge</span><span class="plain">>> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">WR</span><span class="plain">[1])</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22"></a><b>§22. </b></p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">NO_IMW</span><span class="plain"> 0</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">EPSFILE_IMW</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAPPED_AS_IMW</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAPPED_IMW</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SETTING_IMW</span><span class="plain"> 4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_IMW</span><span class="plain"> 5</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_SIZE</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_FONT</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_COLOUR</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_OFFSET</span><span class="plain"> 4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">RUBRIC_POSITION</span><span class="plain"> 5</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">FIRST_ROOM_MAP_SCOPE</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">LEVEL_MAP_SCOPE</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">KIND_MAP_SCOPE</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">INSTANCE_MAP_SCOPE</span><span class="plain"> 4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">ENTIRE_MAP_SCOPE</span><span class="plain"> 5</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::new_map_hint_sentence</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ParseTree::get_type</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">) == </span><span class="identifier">AND_NT</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::EPSMap::new_map_hint_sentence</span><span class="plain">(</span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::new_map_hint_sentence</span><span class="plain">(</span><span class="identifier">pass</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">-></span><span class="identifier">down</span><span class="plain">-</span><span class="element">>next</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">;</span>
|
|
<span class="identifier">index_map_with_pass</span><span class="plain"> = </span><span class="identifier">pass</span><span class="plain">;</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">;</span>
|
|
|
|
<span class="comment">the following take effect on pass 1</span>
|
|
<span class="plain"><</span><span class="identifier">index</span><span class="plain">-</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">));</span>
|
|
<span class="reserved">switch</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">EPSFILE_IMW</span><span class="plain">: </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">write_EPS_format_map</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MAPPED_AS_IMW</span><span class="plain">: </span><<span class="cwebmacro">Parse "Index map with starboard mapped as east"-style sentences</span> <span class="cwebmacronumber">22.1</span>><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">MAPPED_IMW</span><span class="plain">: </span><<span class="cwebmacro">Parse "Index map with Ballroom mapped north of the Hallway"-style sentences</span> <span class="cwebmacronumber">22.2</span>><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">SETTING_IMW</span><span class="plain">: </span><<span class="cwebmacro">Parse "Index map with room size of Ballroom set to 72"-style sentences</span> <span class="cwebmacronumber">22.4</span>><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_IMW</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 2)</span>
|
|
<<span class="cwebmacro">Parse "Index map with rubric "Here Be Dragons""-style sentences</span> <span class="cwebmacronumber">22.3</span>><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::new_map_hint_sentence is used in <a href="#SP15">§15</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_1"></a><b>§22.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Parse "Index map with starboard mapped as east"-style sentences</span> <span class="cwebmacronumber">22.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1)</span>
|
|
<span class="functiontext">PL::SpatialMap::map_direction_as_if</span><span class="plain">(<<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">x</span><span class="plain">>>, <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">y</span><span class="plain">>>);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_2"></a><b>§22.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Parse "Index map with Ballroom mapped north of the Hallway"-style sentences</span> <span class="cwebmacronumber">22.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Instances::of_kind</span><span class="plain">(<<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">dir</span><span class="plain">>>, </span><span class="identifier">K_direction</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapPlacementDirection</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"The direction given as a hint for map placement wasn't "</span>
|
|
<span class="string">"one that I know of."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">x</span><span class="plain">>>;</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I2</span><span class="plain"> = <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">y</span><span class="plain">>>;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">dir</span><span class="plain">>>)-</span><span class="element">>direction_index</span><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapFromNonRoom</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"The first-named thing must be a room (beware ambiguities!)."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">I2</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">I2</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapToNonRoom</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"The second-named thing must be a room (beware ambiguities!)."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::SpatialMap::direction_is_lateral</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapNonLateral</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"The direction given as a hint for map placement must be "</span>
|
|
<span class="string">"a lateral direction (not up, down, above, below, inside "</span>
|
|
<span class="string">"or outside)."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="functiontext">PL::SpatialMap::lock_exit_in_place</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">exit</span><span class="plain">, </span><span class="identifier">I2</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_3"></a><b>§22.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Parse "Index map with rubric "Here Be Dragons""-style sentences</span> <span class="cwebmacronumber">22.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">RW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">index</span><span class="plain">-</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>, 1);</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">RESTW</span><span class="plain"> = </span><span class="identifier">GET_RW</span><span class="plain">(<</span><span class="identifier">index</span><span class="plain">-</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">sentence</span><span class="plain">-</span><span class="identifier">subject</span><span class="plain">>, 2);</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">RW</span><span class="plain">));</span>
|
|
<span class="reserved">rubric_holder</span><span class="plain"> *</span><span class="identifier">rh</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">rubric_holder</span><span class="plain">);</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>annotation</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">RW</span><span class="plain">));</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>point_size</span><span class="plain"> = 12; </span> <span class="comment">12-point type</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>font</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"<font>"</span><span class="plain">; </span> <span class="comment">meaning the default font</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>colour</span><span class="plain"> = </span><span class="identifier">L</span><span class="string">"000000"</span><span class="plain">; </span> <span class="comment">black</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>at_offset</span><span class="plain"> = 10001; </span> <span class="comment">the offset (1, 1)</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>offset_from</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">RESTW</span><span class="plain">);</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> <= </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">RESTW</span><span class="plain">)) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (<</span><span class="identifier">map</span><span class="plain">-</span><span class="identifier">rubric</span><span class="plain">>(</span><span class="identifier">Wordings::from</span><span class="plain">(</span><span class="identifier">RESTW</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))) {</span>
|
|
<span class="identifier">i</span><span class="plain"> = <<</span><span class="identifier">edge</span><span class="plain">>>;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>>) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_SIZE</span><span class="plain">:</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>point_size</span><span class="plain"> = <<</span><span class="identifier">rsize</span><span class="plain">>>;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_FONT</span><span class="plain">:</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(<<</span><span class="identifier">rfont</span><span class="plain">>>);</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>font</span><span class="plain"> = </span><span class="identifier">Lexer::word_text</span><span class="plain">(<<</span><span class="identifier">rfont</span><span class="plain">>>);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_COLOUR</span><span class="plain">:</span>
|
|
<<span class="cwebmacro">Make a rubric colour setting</span> <span class="cwebmacronumber">22.3.1</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_OFFSET</span><span class="plain">:</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">RUBRIC_POSITION</span><span class="plain">:</span>
|
|
<<span class="cwebmacro">Make a rubric offset setting</span> <span class="cwebmacronumber">22.3.2</span>><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapBadRubric</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"Unfortunately the details of that rubric seem to be "</span>
|
|
<span class="string">"in error (a lame message, but an accurate one)."</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_3_1"></a><b>§22.3.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Make a rubric colour setting</span> <span class="cwebmacronumber">22.3.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">Word::dequote</span><span class="plain">(<<</span><span class="identifier">rcol</span><span class="plain">>>);</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">thec</span><span class="plain"> = </span><span class="identifier">HTML::translate_colour_name</span><span class="plain">(</span><span class="identifier">Lexer::word_text</span><span class="plain">(<<</span><span class="identifier">rcol</span><span class="plain">>>));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">thec</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapUnknownColour</span><span class="plain">), </span><span class="identifier">p</span><span class="plain">, </span><span class="string">"There's no such map colour."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>colour</span><span class="plain"> = </span><span class="identifier">thec</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22_3">§22.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_3_2"></a><b>§22.3.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Make a rubric offset setting</span> <span class="cwebmacronumber">22.3.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">roff</span><span class="plain">>> == </span><span class="constant">ERRONEOUS_OFFSET_VALUE</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapUnknownOffset</span><span class="plain">), </span><span class="identifier">p</span><span class="plain">, </span><span class="string">"There's no such offset."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>at_offset</span><span class="plain"> = <<</span><span class="identifier">roff</span><span class="plain">>>;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (<<</span><span class="identifier">r</span><span class="plain">>> == </span><span class="constant">RUBRIC_OFFSET</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain"> = </span><span class="identifier">Instances::parse_object</span><span class="plain">(</span><span class="identifier">Wordings::from</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">), </span><span class="identifier">i</span><span class="plain">));</span>
|
|
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">RESTW</span><span class="plain">) + 1;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapUnknownOffsetBase</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"There's no such room to be offset from."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">rh</span><span class="plain">-</span><span class="element">>offset_from</span><span class="plain"> = </span><span class="identifier">I</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22_3">§22.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_4"></a><b>§22.4. </b>Finally, then, sentences which set parameters for the EPS map-maker.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Parse "Index map with room size of Ballroom set to 72"-style sentences</span> <span class="cwebmacronumber">22.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">allow_on_pass_2</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">scope_I</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="identifier">kind</span><span class="plain"> *</span><span class="identifier">scope_k</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<<span class="cwebmacro">Determine the scope for which the parameter is being set</span> <span class="cwebmacronumber">22.4.1</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">allow_on_pass_2</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">) && (</span><span class="identifier">pass</span><span class="plain"> == 2)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">parameter_name</span><span class="plain"> = <<</span><span class="identifier">wchar_t</span><span class="plain">:</span><span class="identifier">partext</span><span class="plain">>>;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">index_of_parameter</span><span class="plain"> = <<</span><span class="identifier">parindex</span><span class="plain">>>;</span>
|
|
<<span class="cwebmacro">Check that the value has the right type for this map parameter, and set it</span> <span class="cwebmacronumber">22.4.2</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22">§22</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_4_1"></a><b>§22.4.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Determine the scope for which the parameter is being set</span> <span class="cwebmacronumber">22.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bad_scope</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">switch</span><span class="plain"> (<<</span><span class="identifier">scoping</span><span class="plain">>>) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FIRST_ROOM_MAP_SCOPE</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">benchmark_room</span><span class="plain">) </span><span class="identifier">scope_I</span><span class="plain"> = </span><span class="identifier">benchmark_room</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">LEVEL_MAP_SCOPE</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="reserved">return</span><span class="plain">; </span> <span class="comment">we'll pick this up on pass 2 when levels exist</span>
|
|
<span class="identifier">allow_on_pass_2</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ln</span><span class="plain"> = <<</span><span class="identifier">level</span><span class="plain">>>;</span>
|
|
<span class="reserved">EPS_map_level</span><span class="plain"> *</span><span class="identifier">eml</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">, </span><span class="reserved">EPS_map_level</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain">)</span>
|
|
<span class="plain">&& (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_level</span><span class="plain"> - </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">benchmark_room</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">ln</span><span class="plain">))</span>
|
|
<span class="identifier">scope</span><span class="plain"> = &(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapLevelMisnamed</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="string">"Layers of the map must be called 'level N', where "</span>
|
|
<span class="string">"N is a number, and level 0 is the one which contains "</span>
|
|
<span class="string">"the first room."</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">KIND_MAP_SCOPE</span><span class="plain">:</span>
|
|
<span class="identifier">scope_k</span><span class="plain"> = <<</span><span class="identifier">kind</span><span class="plain">:</span><span class="identifier">kscope</span><span class="plain">>>;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Kinds::Compare::lt</span><span class="plain">(</span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">K_object</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="identifier">scope_k</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">scope_k</span><span class="plain">) &&</span>
|
|
<span class="plain">((</span><span class="identifier">Kinds::Compare::le</span><span class="plain">(</span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">K_room</span><span class="plain">)) ||</span>
|
|
<span class="plain">(</span><span class="identifier">Kinds::Compare::le</span><span class="plain">(</span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">K_region</span><span class="plain">)))) {</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SPATIAL_MAP</span><span class="plain">, </span><span class="string">"Setting for kind $u\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">bad_scope</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INSTANCE_MAP_SCOPE</span><span class="plain">:</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(<<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">iscope</span><span class="plain">>>)) ||</span>
|
|
<span class="plain">(</span><span class="functiontext">PL::Regions::object_is_a_region</span><span class="plain">(<<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">iscope</span><span class="plain">>>)))</span>
|
|
<span class="identifier">scope_I</span><span class="plain"> = <<</span><span class="identifier">instance</span><span class="plain">:</span><span class="identifier">iscope</span><span class="plain">>>;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">scope_I</span><span class="plain">) {</span>
|
|
<span class="identifier">LOGIF</span><span class="plain">(</span><span class="identifier">SPATIAL_MAP</span><span class="plain">, </span><span class="string">"Setting for object $O\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="identifier">bad_scope</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">ENTIRE_MAP_SCOPE</span><span class="plain">:</span>
|
|
<span class="identifier">scope_k</span><span class="plain"> = </span><span class="identifier">K_room</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bad_scope</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Actually issue PM_MapSettingOfUnknown problem</span> <span class="cwebmacronumber">17.4.1</span>><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22_4">§22.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP17_4_1"></a><b>§17.4.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Actually issue PM_MapSettingOfUnknown problem</span> <span class="cwebmacronumber">17.4.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">index_map_with_pass</span><span class="plain"> == 1) {</span>
|
|
<span class="identifier">Problems::Issue::map_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapSettingOfUnknown</span><span class="plain">),</span>
|
|
<span class="identifier">index_map_with_p</span><span class="plain">, </span><span class="string">"The parameter has to be 'of' either 'the first room' "</span>
|
|
<span class="string">"or a specific named room (beware ambiguities!) or "</span>
|
|
<span class="string">"a level such as 'level 0' (the first room is by "</span>
|
|
<span class="string">"definition on level 0), or a region, or a kind of room."</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP17_4">§17.4</a>, <a href="#SP22_4_1">§22.4.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP22_4_2"></a><b>§22.4.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Check that the value has the right type for this map parameter, and set it</span> <span class="cwebmacronumber">22.4.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">type_wanted</span><span class="plain"> = </span><span class="identifier">global_map_scope</span><span class="element">.values</span><span class="plain">[</span><span class="identifier">index_of_parameter</span><span class="plain">]</span><span class="element">.parameter_data_type</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">type_found</span><span class="plain"> = <<</span><span class="identifier">msvtype</span><span class="plain">>>;</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">""</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain"> = <<</span><span class="identifier">msword</span><span class="plain">>>;</span>
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">type_wanted</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">INT_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"an integer"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">INT_MDT</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, <<</span><span class="identifier">msvalue</span><span class="plain">>>);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">OFF_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"an offset in the form 34&-450"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">OFF_MDT</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, <<</span><span class="identifier">msvalue</span><span class="plain">>>);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">BOOL_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"'on' or 'off'"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">BOOL_MDT</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, <<</span><span class="identifier">msvalue</span><span class="plain">>>);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">TEXT_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"some text in double-quotes"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">TEXT_MDT</span><span class="plain">) {</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">), 0);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">FONT_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"a font name in double-quotes"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">TEXT_MDT</span><span class="plain">) {</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">), 0);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="constant">COL_MDT</span><span class="plain">: </span><span class="identifier">i_wanted_a</span><span class="plain"> = </span><span class="string">"a colour name in double-quotes"</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">type_found</span><span class="plain"> == </span><span class="constant">TEXT_MDT</span><span class="plain">) {</span>
|
|
<span class="identifier">Word::dequote</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">);</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">col</span><span class="plain"> = </span><span class="identifier">HTML::translate_colour_name</span><span class="plain">(</span><span class="identifier">Lexer::word_text</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">col</span><span class="plain">) {</span>
|
|
<span class="functiontext">PL::EPSMap::put_mp</span><span class="plain">(</span><span class="identifier">parameter_name</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">, </span><span class="identifier">scope_I</span><span class="plain">, </span><span class="identifier">scope_k</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">, 0);</span>
|
|
<span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Unexpected map parameter data type"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pass</span><span class="plain"> == 1) </span><span class="identifier">Problems::Issue::map_problem_wanted_but</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_MapSettingTypeFailed</span><span class="plain">),</span>
|
|
<span class="identifier">p</span><span class="plain">, </span><span class="identifier">i_wanted_a</span><span class="plain">, </span><span class="identifier">wn</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP22_4">§22.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP23"></a><b>§23. 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 <= x, y <= 9999, and
|
|
the syntax to specify this is two literal numbers divided by an ampersand.
|
|
For instance, <code class="display"><span class="extract">28&-125</span></code> means (28, -125) which is stored as -1249972.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">ERRONEOUS_OFFSET_VALUE</span><span class="plain"> 100000000</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::parse_eps_map_offset</span><span class="plain">(</span><span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">offs</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">offs</span><span class="plain">, </span><span class="string">"%W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">offs</span><span class="plain">) >= 30) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">ERRONEOUS_OFFSET_VALUE</span><span class="plain">;</span>
|
|
<span class="identifier">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="identifier">Regexp::create_mr</span><span class="plain">();</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">xbit</span><span class="plain"> = 0, </span><span class="identifier">ybit</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">offs</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?)&(%c*)"</span><span class="plain">)) {</span>
|
|
<span class="identifier">xbit</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[0], 0), </span><span class="identifier">ybit</span><span class="plain"> = </span><span class="identifier">Str::atoi</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1], 0);</span>
|
|
<span class="identifier">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">ERRONEOUS_OFFSET_VALUE</span><span class="plain">;</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">offs</span><span class="plain">);</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">xbit</span><span class="plain"> + </span><span class="identifier">ybit</span><span class="plain">*10000;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::parse_eps_map_offset is used in <a href="#SP20">§20</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::render_map_as_EPS</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Create the main EPS map super-level</span> <span class="cwebmacronumber">24.1</span>><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">z</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">z</span><span class="plain">=</span><span class="identifier">Universe</span><span class="element">.corner1</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">; </span><span class="identifier">z</span><span class="plain">>=</span><span class="identifier">Universe</span><span class="element">.corner0</span><span class="plain">.</span><span class="identifier">z</span><span class="plain">; </span><span class="identifier">z</span><span class="plain">--)</span>
|
|
<<span class="cwebmacro">Create an EPS map level for this z-slice</span> <span class="cwebmacronumber">24.2</span>><span class="plain">;</span>
|
|
|
|
<span class="functiontext">PL::EPSMap::traverse_for_map_parameters</span><span class="plain">(2);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">changed_global_room_colour</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Inherit EPS room colours from those used in the World Index</span> <span class="cwebmacronumber">24.3</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">write_EPS_format_map</span><span class="plain">) </span><<span class="cwebmacro">Open a stream and write the EPS map to it</span> <span class="cwebmacronumber">24.4</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::render_map_as_EPS appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24_1"></a><b>§24.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create the main EPS map super-level</span> <span class="cwebmacronumber">24.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">EPS_map_level</span><span class="plain"> *</span><span class="identifier">main_eml</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">EPS_map_level</span><span class="plain">);</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>width</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"minimum-map-width"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>actual_height</span><span class="plain"> = 0;</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>titling_point_size</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-size"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain"> = </span><span class="identifier">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">, </span><span class="string">"Map"</span><span class="plain">);</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>contains_titling</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="functiontext">PL::EPSMap::prepare_map_parameter_scope</span><span class="plain">(&(</span><span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::put_stream_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title"</span><span class="plain">, &(</span><span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">), </span><span class="identifier">main_eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24_2"></a><b>§24.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Create an EPS map level for this z-slice</span> <span class="cwebmacronumber">24.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">EPS_map_level</span><span class="plain"> *</span><span class="identifier">eml</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">EPS_map_level</span><span class="plain">);</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_level</span><span class="plain"> = </span><span class="identifier">z</span><span class="plain">;</span>
|
|
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_max</span><span class="plain"> = -100000, </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_min</span><span class="plain"> = 100000;</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">z</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain"> < </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_min</span><span class="plain">) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_min</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain"> > </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_max</span><span class="plain">) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_max</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="identifier">Str::clear</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">);</span>
|
|
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">level_rubric</span><span class="plain"> = </span><span class="string">"Map"</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">par</span><span class="plain"> = 0;</span>
|
|
<span class="functiontext">PL::HTMLMap::devise_level_rubric</span><span class="plain">(</span><span class="identifier">z</span><span class="plain">, &</span><span class="identifier">level_rubric</span><span class="plain">, &</span><span class="identifier">par</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">, </span><span class="identifier">level_rubric</span><span class="plain">, </span><span class="identifier">par</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">) == 0) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_titling</span><span class="plain"> = </span><span class="identifier">FALSE</span><span class="plain">;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_titling</span><span class="plain"> = </span><span class="identifier">TRUE</span><span class="plain">;</span>
|
|
|
|
<span class="functiontext">PL::EPSMap::prepare_map_parameter_scope</span><span class="plain">(&(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::put_stream_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle"</span><span class="plain">, &(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">), </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling</span><span class="plain">);</span>
|
|
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">z</span><span class="plain">) {</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>local_map_parameters.wider_scope</span><span class="plain"> = &(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24_3"></a><b>§24.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Inherit EPS room colours from those used in the World Index</span> <span class="cwebmacronumber">24.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::EPSMap::put_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-colour"</span><span class="plain">, &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">),</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>world_index_colour</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP24_4"></a><b>§24.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Open a stream and write the EPS map to it</span> <span class="cwebmacronumber">24.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">text_stream</span><span class="plain"> </span><span class="identifier">EPS_struct</span><span class="plain">; </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">EPS</span><span class="plain"> = &</span><span class="identifier">EPS_struct</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">, </span><span class="identifier">filename_of_epsfile</span><span class="plain">, </span><span class="identifier">ISO_ENC</span><span class="plain">) == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="identifier">Problems::Fatal::filename_related</span><span class="plain">(</span><span class="string">"Can't open EPS map file"</span><span class="plain">, </span><span class="identifier">filename_of_epsfile</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_map</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">);</span>
|
|
<span class="identifier">STREAM_CLOSE</span><span class="plain">(</span><span class="identifier">EPS</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP24">§24</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_map</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">blh</span><span class="plain">, </span> <span class="comment">total height of the EPS map area (not counting border)</span>
|
|
<span class="identifier">blw</span><span class="plain">, </span> <span class="comment">total width of the EPS map area (not counting border)</span>
|
|
<span class="identifier">border</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"border-size"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
|
|
<span class="identifier">vskip</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"vertical-spacing"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Compute the dimensions of the EPS map</span> <span class="cwebmacronumber">25.1</span>><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bounding_box_width</span><span class="plain"> = </span><span class="identifier">blw</span><span class="plain">+2*</span><span class="identifier">border</span><span class="plain">, </span><span class="identifier">bounding_box_height</span><span class="plain"> = </span><span class="identifier">blh</span><span class="plain">+2*</span><span class="identifier">border</span><span class="plain">;</span>
|
|
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_header</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bounding_box_width</span><span class="plain">, </span><span class="identifier">bounding_box_height</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-font"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">), </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-size"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">));</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"map-outline"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Draw a big rectangular outline around the entire EPS map</span> <span class="cwebmacronumber">25.2</span>><span class="plain">;</span>
|
|
|
|
<span class="reserved">EPS_map_level</span><span class="plain"> *</span><span class="identifier">eml</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">, </span><span class="reserved">EPS_map_level</span><span class="plain">) {</span>
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">level_scope</span><span class="plain"> = &(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mapunit</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"grid-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain"> == </span><span class="identifier">FALSE</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"map-outline"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Draw an intermediate strut in the big rectangular outline</span> <span class="cwebmacronumber">25.3</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_titling</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Draw the title for this EPS map level</span> <span class="cwebmacronumber">25.4</span>><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_level</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Establish EPS coordinates for this room</span> <span class="cwebmacronumber">25.5</span>><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_level</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Draw the map connections from this room as EPS paths</span> <span class="cwebmacronumber">25.6</span>><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_ROOMS</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_level</span><span class="plain">)</span>
|
|
<<span class="cwebmacro">Draw the boxes for the rooms themselves</span> <span class="cwebmacronumber">25.7</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
|
|
<<span class="cwebmacro">Plot all of the rubrics onto the EPS map</span> <span class="cwebmacronumber">25.8</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_map is used in <a href="#SP24_4">§24.4</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_1"></a><b>§25.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Compute the dimensions of the EPS map</span> <span class="cwebmacronumber">25.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">total_chunk_height</span><span class="plain"> = 0, </span><span class="identifier">max_chunk_width</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">EPS_map_level</span><span class="plain"> *</span><span class="identifier">eml</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_BACKWARDS_OVER</span><span class="plain">(</span><span class="identifier">eml</span><span class="plain">, </span><span class="reserved">EPS_map_level</span><span class="plain">) {</span>
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">level_scope</span><span class="plain"> = &(</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>map_parameters</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mapunit</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"grid-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">p</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain">) </span><span class="identifier">p</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">);</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling_point_size</span><span class="plain"> = </span><span class="identifier">p</span><span class="plain">;</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>width</span><span class="plain"> = (</span><span class="identifier">Universe</span><span class="element">.corner1.x</span><span class="plain">-</span><span class="identifier">Universe</span><span class="element">.corner0.x</span><span class="plain">+2)*</span><span class="identifier">mapunit</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> == 0) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>actual_height</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>actual_height</span><span class="plain"> = (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_max</span><span class="plain">-</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_min</span><span class="plain">+1)*</span><span class="identifier">mapunit</span><span class="plain">;</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>eps_origin</span><span class="plain"> = </span><span class="identifier">total_chunk_height</span><span class="plain"> + </span><span class="identifier">border</span><span class="plain">;</span>
|
|
<span class="identifier">eml</span><span class="plain">-</span><span class="element">>height</span><span class="plain"> = </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>actual_height</span><span class="plain"> + </span><span class="identifier">vskip</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain">) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>height</span><span class="plain"> += </span><span class="identifier">vskip</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_titling</span><span class="plain">) </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>height</span><span class="plain"> += </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>titling_point_size</span><span class="plain">+</span><span class="identifier">vskip</span><span class="plain">;</span>
|
|
<span class="identifier">total_chunk_height</span><span class="plain"> += </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>height</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">max_chunk_width</span><span class="plain"> < </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>width</span><span class="plain">) </span><span class="identifier">max_chunk_width</span><span class="plain"> = </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>width</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">blh</span><span class="plain"> = </span><span class="identifier">total_chunk_height</span><span class="plain">;</span>
|
|
<span class="identifier">blw</span><span class="plain"> = </span><span class="identifier">max_chunk_width</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_2"></a><b>§25.2. </b>The outline is a little like drawing the shape of a bookcase: there's a big
|
|
rectangle around the whole thing...
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Draw a big rectangular outline around the entire EPS map</span> <span class="cwebmacronumber">25.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"newpath %% Ruled outline outer box of map\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_rectangular_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">border</span><span class="plain">, </span><span class="identifier">border</span><span class="plain">, </span><span class="identifier">border</span><span class="plain">+</span><span class="identifier">blw</span><span class="plain">, </span><span class="identifier">border</span><span class="plain">+</span><span class="identifier">blh</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"stroke\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_3"></a><b>§25.3. </b>...and then there are horizontal shelves dividing it into compartments.
|
|
(Each map level will be drawn inside one of these compartments.)
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Draw an intermediate strut in the big rectangular outline</span> <span class="cwebmacronumber">25.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"newpath %% Ruled horizontal line\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_horizontal_line_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">border</span><span class="plain">, </span><span class="identifier">blw</span><span class="plain">+</span><span class="identifier">border</span><span class="plain">, </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>eps_origin</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"stroke\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_4"></a><b>§25.4. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the title for this EPS map level</span> <span class="cwebmacronumber">25.4</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain"> = </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>eps_origin</span><span class="plain"> + </span><span class="identifier">vskip</span><span class="plain"> + </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>actual_height</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>contains_rooms</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle-colour"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::plot_stream_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_stream_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">),</span>
|
|
<span class="identifier">NULL</span><span class="plain">, 128,</span>
|
|
<span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle-font"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">),</span>
|
|
<span class="identifier">border</span><span class="plain">*2, </span><span class="identifier">y</span><span class="plain">+</span><span class="identifier">vskip</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"subtitle-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">),</span>
|
|
<span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-colour"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::plot_stream_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_stream_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
|
|
<span class="identifier">NULL</span><span class="plain">, 128,</span>
|
|
<span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-font"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">),</span>
|
|
<span class="identifier">border</span><span class="plain">*2, </span><span class="identifier">y</span><span class="plain">+2*</span><span class="identifier">vskip</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"title-size"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">),</span>
|
|
<span class="identifier">FALSE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_5"></a><b>§25.5. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Establish EPS coordinates for this room</span> <span class="cwebmacronumber">25.5</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">room_scope</span><span class="plain"> = &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bx</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">)</span><span class="element">.x</span><span class="plain">-</span><span class="identifier">Universe</span><span class="element">.corner0.x</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">by</span><span class="plain"> = </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">y</span><span class="plain">-</span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>y_min</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">offs</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-offset"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">xpart</span><span class="plain"> = </span><span class="identifier">offs</span><span class="plain">%10000, </span><span class="identifier">ypart</span><span class="plain"> = </span><span class="identifier">offs</span><span class="plain">/10000;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> > 5000) </span><span class="identifier">xpart</span><span class="plain">-=10000;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> < -5000) </span><span class="identifier">xpart</span><span class="plain">+=10000;</span>
|
|
|
|
<span class="identifier">bx</span><span class="plain"> = (</span><span class="identifier">bx</span><span class="plain">)*</span><span class="identifier">mapunit</span><span class="plain"> + </span><span class="identifier">border</span><span class="plain"> + </span><span class="identifier">mapunit</span><span class="plain">/2;</span>
|
|
<span class="identifier">by</span><span class="plain"> = (</span><span class="identifier">by</span><span class="plain">)*</span><span class="identifier">mapunit</span><span class="plain"> + </span><span class="identifier">eml</span><span class="plain">-</span><span class="element">>eps_origin</span><span class="plain"> + </span><span class="identifier">vskip</span><span class="plain"> + </span><span class="identifier">mapunit</span><span class="plain">/2;</span>
|
|
|
|
<span class="identifier">bx</span><span class="plain"> += </span><span class="identifier">xpart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100;</span>
|
|
<span class="identifier">by</span><span class="plain"> += </span><span class="identifier">ypart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100;</span>
|
|
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>eps_x</span><span class="plain"> = </span><span class="identifier">bx</span><span class="plain">;</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-></span><span class="identifier">eps_y</span><span class="plain"> = </span><span class="identifier">by</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_6"></a><b>§25.6. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the map connections from this room as EPS paths</span> <span class="cwebmacronumber">25.6</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">room_scope</span><span class="plain"> = &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_line_width_setting</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"route-thickness"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bx</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>eps_x</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">by</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-></span><span class="identifier">eps_y</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">boxsize</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-size"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">)/2;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">R_stiffness</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"route-stiffness"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">dir</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER_STORY_DIRECTIONS</span><span class="plain">(</span><span class="identifier">dir</span><span class="plain">) {</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::room_exit</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">, </span><span class="identifier">dir</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit</span><span class="plain"> = </span><span class="identifier">story_dir_to_page_dir</span><span class="plain">[</span><span class="identifier">dir</span><span class="plain">];</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::Spatial::object_is_a_room</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Draw a single map connection as an EPS arrow</span> <span class="cwebmacronumber">25.6.1</span>><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_line_width_unsetting</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_6_1"></a><b>§25.6.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw a single map connection as an EPS arrow</span> <span class="cwebmacronumber">25.6.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">T_stiffness</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"route-stiffness"</span><span class="plain">, &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"route-colour"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">).</span><span class="identifier">z</span><span class="plain"> == </span><span class="identifier">Room_position</span><span class="plain">(</span><span class="identifier">R</span><span class="plain">).</span><span class="identifier">z</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">PL::SpatialMap::room_exit</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="functiontext">PL::SpatialMap::opposite</span><span class="plain">(</span><span class="identifier">dir</span><span class="plain">), </span><span class="identifier">FALSE</span><span class="plain">) == </span><span class="identifier">R</span><span class="plain">))</span>
|
|
<<span class="cwebmacro">Draw a two-ended arrow for a two-way horizontal connection</span> <span class="cwebmacronumber">25.6.1.1</span>>
|
|
<span class="reserved">else</span>
|
|
<<span class="cwebmacro">Draw a one-way arrow for a distant or off-level connection</span> <span class="cwebmacronumber">25.6.1.2</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_6">§25.6</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_6_1_1"></a><b>§25.6.1.1. </b>We don't want to draw this twice (once for R, once for T), so we draw it
|
|
just for the earlier-defined room.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Draw a two-ended arrow for a two-way horizontal connection</span> <span class="cwebmacronumber">25.6.1.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">R</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain"> <= </span><span class="identifier">T</span><span class="plain">-></span><span class="identifier">allocation_id</span><span class="plain">)</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_Bezier_curve</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">,</span>
|
|
<span class="identifier">R_stiffness</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">, </span><span class="identifier">T_stiffness</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">,</span>
|
|
<span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">exit</span><span class="plain">,</span>
|
|
<span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">)-</span><span class="element">>eps_x</span><span class="plain">, </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">)-></span><span class="identifier">eps_y</span><span class="plain">, </span><span class="functiontext">PL::SpatialMap::opposite</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">));</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_6_1">§25.6.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_6_1_2"></a><b>§25.6.1.2. </b>A one-way arrow has the destination marked on it textually, since it doesn't
|
|
actually go there in any visual way.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Draw a one-way arrow for a distant or off-level connection</span> <span class="cwebmacronumber">25.6.1.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">scaled</span><span class="plain"> = 1;</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::direction_as_vector</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">);</span>
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">exit</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 8: </span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">U_vector_EPS</span><span class="plain">; </span><span class="identifier">scaled</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 9: </span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">D_vector_EPS</span><span class="plain">; </span><span class="identifier">scaled</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 10: </span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">IN_vector_EPS</span><span class="plain">; </span><span class="identifier">scaled</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">case</span><span class="plain"> 11: </span><span class="identifier">E</span><span class="plain"> = </span><span class="identifier">OUT_vector_EPS</span><span class="plain">; </span><span class="identifier">scaled</span><span class="plain"> = 2; </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_dashed_arrow</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">boxsize</span><span class="plain">/</span><span class="identifier">scaled</span><span class="plain">, </span><span class="identifier">E</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::plot_text_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">T</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"annotation-length"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
|
|
<span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"annotation-font"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
|
|
<span class="identifier">bx</span><span class="plain">+</span><span class="identifier">E</span><span class="element">.x</span><span class="plain">*</span><span class="identifier">boxsize</span><span class="plain">*6/</span><span class="identifier">scaled</span><span class="plain">/5, </span><span class="identifier">by</span><span class="plain">+</span><span class="identifier">E</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">*</span><span class="identifier">boxsize</span><span class="plain">*6/</span><span class="identifier">scaled</span><span class="plain">/5,</span>
|
|
<span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"annotation-size"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">),</span>
|
|
<span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_6_1">§25.6.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_7"></a><b>§25.7. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the boxes for the rooms themselves</span> <span class="cwebmacronumber">25.7</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">map_parameter_scope</span><span class="plain"> *</span><span class="identifier">room_scope</span><span class="plain"> = &(</span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>local_map_parameters</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bx</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-</span><span class="element">>eps_x</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">by</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">R</span><span class="plain">)-></span><span class="identifier">eps_y</span><span class="plain">;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">boxsize</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-size"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">)/2;</span>
|
|
<<span class="cwebmacro">Draw the filled box for the room</span> <span class="cwebmacronumber">25.7.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Draw the outline of the box for the room</span> <span class="cwebmacronumber">25.7.2</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">Write in the name of the room</span> <span class="cwebmacronumber">25.7.3</span>><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_7_1"></a><b>§25.7.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the filled box for the room</span> <span class="cwebmacronumber">25.7.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"newpath %% Room interior\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 75);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-colour"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_room_boundary_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">boxsize</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-shape"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"fill\</span><span class="plain">n</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_7">§25.7</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_7_2"></a><b>§25.7.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Draw the outline of the box for the room</span> <span class="cwebmacronumber">25.7.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-outline"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">)) {</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_line_width_setting</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-outline-thickness"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"newpath %% Room outline\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-outline-colour"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_room_boundary_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">boxsize</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-shape"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"stroke\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_line_width_unsetting</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_7">§25.7</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_7_3"></a><b>§25.7.3. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Write in the name of the room</span> <span class="cwebmacronumber">25.7.3</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">offs</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name-offset"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">xpart</span><span class="plain"> = </span><span class="identifier">offs</span><span class="plain">%10000, </span><span class="identifier">ypart</span><span class="plain"> = </span><span class="identifier">offs</span><span class="plain">/10000;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> > 5000) </span><span class="identifier">xpart</span><span class="plain">-=10000;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> < -5000) </span><span class="identifier">xpart</span><span class="plain">+=10000;</span>
|
|
<span class="identifier">bx</span><span class="plain"> += </span><span class="identifier">xpart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100;</span>
|
|
<span class="identifier">by</span><span class="plain"> += </span><span class="identifier">ypart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100;</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">level_scope</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name-colour"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">));</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">legend</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">);</span>
|
|
<span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">room_to_name</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">legend</span><span class="plain">, </span><span class="identifier">L</span><span class="string">""</span><span class="plain">) == 0) { </span><span class="identifier">room_to_name</span><span class="plain"> = </span><span class="identifier">R</span><span class="plain">; </span><span class="identifier">legend</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; }</span>
|
|
<span class="functiontext">PL::EPSMap::plot_text_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">legend</span><span class="plain">, </span><span class="identifier">room_to_name</span><span class="plain">,</span>
|
|
<span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name-length"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">),</span>
|
|
<span class="functiontext">PL::EPSMap::get_string_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name-font"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">),</span>
|
|
<span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"room-name-size"</span><span class="plain">, </span><span class="identifier">room_scope</span><span class="plain">),</span>
|
|
<span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">);</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25_7">§25.7</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP25_8"></a><b>§25.8. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Plot all of the rubrics onto the EPS map</span> <span class="cwebmacronumber">25.8</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">rubric_holder</span><span class="plain"> *</span><span class="identifier">rh</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">rh</span><span class="plain">, </span><span class="reserved">rubric_holder</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bx</span><span class="plain"> = 0, </span><span class="identifier">by</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">xpart</span><span class="plain"> = </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>at_offset</span><span class="plain">%10000, </span><span class="identifier">ypart</span><span class="plain"> = </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>at_offset</span><span class="plain">/10000;</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mapunit</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"grid-size"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> > 5000) </span><span class="identifier">xpart</span><span class="plain">-=10000;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">xpart</span><span class="plain"> < -5000) </span><span class="identifier">xpart</span><span class="plain">+=10000;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">PL::EPSMap::get_int_mp</span><span class="plain">(</span><span class="identifier">L</span><span class="string">"monochrome"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">)) </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, 0);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>colour</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>offset_from</span><span class="plain">) {</span>
|
|
<span class="identifier">bx</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>offset_from</span><span class="plain">)-</span><span class="element">>eps_x</span><span class="plain">;</span>
|
|
<span class="identifier">by</span><span class="plain"> = </span><span class="identifier">PF_I</span><span class="plain">(</span><span class="identifier">map</span><span class="plain">, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>offset_from</span><span class="plain">)-></span><span class="identifier">eps_y</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">bx</span><span class="plain"> += </span><span class="identifier">xpart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100; </span><span class="identifier">by</span><span class="plain"> += </span><span class="identifier">ypart</span><span class="plain">*</span><span class="identifier">mapunit</span><span class="plain">/100;</span>
|
|
<span class="functiontext">PL::EPSMap::plot_text_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>annotation</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, 128, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>font</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">rh</span><span class="plain">-</span><span class="element">>point_size</span><span class="plain">,</span>
|
|
<span class="identifier">TRUE</span><span class="plain">, </span><span class="identifier">TRUE</span><span class="plain">); </span> <span class="comment">centred both horizontally and vertically</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP26"></a><b>§26. Writing text in EPS. </b>All of words written on the map — titles, labels for arrows, rubrics, and so
|
|
on — come from here.
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAX_EPS_TEXT_LENGTH</span><span class="plain"> 1000</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">MAX_EPS_ABBREVIATED_LENGTH</span><span class="plain"> </span><span class="constant">MAX_EPS_TEXT_LENGTH</span>
|
|
</pre>
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::plot_text_at</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">text_to_plot</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">abbrev_to</span><span class="plain">,</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">font</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pointsize</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_h</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_v</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">text_to_plot</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="string">"%w"</span><span class="plain">, </span><span class="identifier">text_to_plot</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">I</span><span class="plain">) {</span>
|
|
<<span class="cwebmacro">Try taking the name from the printed name property of the room</span> <span class="cwebmacronumber">26.1</span>><span class="plain">;</span>
|
|
<<span class="cwebmacro">If that fails, try taking the name from its source text name</span> <span class="cwebmacronumber">26.2</span>><span class="plain">;</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="functiontext">PL::EPSMap::plot_stream_at</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">abbrev_to</span><span class="plain">, </span><span class="identifier">font</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">pointsize</span><span class="plain">, </span><span class="identifier">centre_h</span><span class="plain">, </span><span class="identifier">centre_v</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::plot_text_at is used in <a href="#SP25_6_1_2">§25.6.1.2</a>, <a href="#SP25_7_3">§25.7.3</a>, <a href="#SP25_8">§25.8</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP26_1"></a><b>§26.1. </b><code class="display">
|
|
<<span class="cwebmacrodefn">Try taking the name from the printed name property of the room</span> <span class="cwebmacronumber">26.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P_printed_name</span><span class="plain">) {</span>
|
|
<span class="identifier">parse_node</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="identifier">World::Inferences::get_prop_state_at</span><span class="plain">(</span>
|
|
<span class="identifier">Instances::as_subject</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">), </span><span class="identifier">P_printed_name</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Rvalues::is_CONSTANT_of_kind</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="identifier">K_text</span><span class="plain">)) &&</span>
|
|
<span class="plain">(</span><span class="identifier">Wordings::nonempty</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">)))) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">wn</span><span class="plain"> = </span><span class="identifier">Wordings::first_wn</span><span class="plain">(</span><span class="identifier">ParseTree::get_text</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">));</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">Wordings::one_word</span><span class="plain">(</span><span class="identifier">wn</span><span class="plain">));</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_first_char</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) </span><span class="identifier">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_last_char</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">"</span><span class="character">'</span><span class="plain">) </span><span class="identifier">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP26">§26</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP26_2"></a><b>§26.2. </b><code class="display">
|
|
<<span class="cwebmacrodefn">If that fails, try taking the name from its source text name</span> <span class="cwebmacronumber">26.2</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">) == 0) {</span>
|
|
<span class="identifier">wording</span><span class="plain"> </span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">Instances::get_name</span><span class="plain">(</span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">FALSE</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wordings::empty</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="string">"%+W"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP26">§26</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::plot_stream_at</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text_to_plot</span><span class="plain">, </span><span class="identifier">instance</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">abbrev_to</span><span class="plain">,</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">font</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pointsize</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_h</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_v</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="identifier">Str::copy</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">text_to_plot</span><span class="plain">);</span>
|
|
<<span class="cwebmacro">Abbreviate the text to be printed by stripping dispensable letters</span> <span class="cwebmacronumber">27.1</span>><span class="plain">;</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_text</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">font</span><span class="plain">, </span><span class="identifier">pointsize</span><span class="plain">, </span><span class="identifier">centre_h</span><span class="plain">, </span><span class="identifier">centre_v</span><span class="plain">);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::plot_stream_at is used in <a href="#SP25_4">§25.4</a>, <a href="#SP26">§26</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP27_1"></a><b>§27.1. </b>The following cuts the text down to the abbreviation length by knocking out,
|
|
in sequence: (a) lower-case vowels; (b) spaces; (c) lower-case consonants; (d)
|
|
punctuation marks. If that doesn't do it, the text is simply truncated. For
|
|
example, "Peisey-Nancroix" abbreviated to 10 is "Pesy-Nncrx" and to 5
|
|
is "PsyNn".
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Abbreviate the text to be printed by stripping dispensable letters</span> <span class="cwebmacronumber">27.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">abbrev_to</span><span class="plain"> > </span><span class="constant">MAX_EPS_ABBREVIATED_LENGTH</span><span class="plain">) </span><span class="identifier">abbrev_to</span><span class="plain"> = </span><span class="constant">MAX_EPS_ABBREVIATED_LENGTH</span><span class="plain">;</span>
|
|
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">) > </span><span class="identifier">abbrev_to</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">)-1; </span><span class="identifier">j</span><span class="plain">>=0; </span><span class="identifier">j</span><span class="plain">--)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Characters::vowel</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">))) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">RemoveOne</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">)-1; </span><span class="identifier">j</span><span class="plain">>=0; </span><span class="identifier">j</span><span class="plain">--)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">RemoveOne</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">)-1; </span><span class="identifier">j</span><span class="plain">>=0; </span><span class="identifier">j</span><span class="plain">--)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">islower</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">))) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">RemoveOne</span><span class="plain">;</span>
|
|
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">Str::len</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">)-1; </span><span class="identifier">j</span><span class="plain">>=0; </span><span class="identifier">j</span><span class="plain">--)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">isupper</span><span class="plain">(</span><span class="identifier">Str::get_at</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">)) == </span><span class="identifier">FALSE</span><span class="plain">) </span><span class="reserved">goto</span><span class="plain"> </span><span class="identifier">RemoveOne</span><span class="plain">;</span>
|
|
<span class="identifier">Str::truncate</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">abbrev_to</span><span class="plain">);</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="identifier">RemoveOne</span><span class="plain">: </span><span class="identifier">Str::delete_nth_character</span><span class="plain">(</span><span class="identifier">txt</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP27">§27</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP28"></a><b>§28. EPS header. </b>EPS files are identified and version-numbered by a header, as follows.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_header</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bounding_box_width</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bounding_box_height</span><span class="plain">,</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">default_font</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">default_point_size</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%%!PS-Adobe EPSF-3.0\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%%%%BoundingBox: 0 0 %d %d\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">bounding_box_width</span><span class="plain">, </span><span class="identifier">bounding_box_height</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%%%%IncludeFont: %w\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">default_font</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"/%w findfont %d scalefont setfont\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">default_font</span><span class="plain">, </span><span class="identifier">default_point_size</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_header is used in <a href="#SP25">§25</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP29"></a><b>§29. Circles and rectangles. </b>In EPS files, there's an imaginary pen which traces out "paths". These begin
|
|
whenever the pen moves to a new location, and then continue until they are
|
|
closed (joined up back to the start position) with a <code class="display"><span class="extract">closepath</span></code> command.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_circular_path</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">radius</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d moveto %% rightmost point\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">+</span><span class="identifier">radius</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d %d %d %d arc %% full circle traced anticlockwise\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">, </span><span class="identifier">radius</span><span class="plain">, 0, 360);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"closepath\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_rectangular_path</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y1</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d moveto %% bottom left corner\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d lineto %% bottom side\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x1</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d lineto %% right side\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x1</span><span class="plain">, </span><span class="identifier">y1</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d lineto %% top side\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y1</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"closepath\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_circular_path is used in <a href="#SP30">§30</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_rectangular_path is used in <a href="#SP25_2">§25.2</a>, <a href="#SP30">§30</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP30"></a><b>§30. </b>The boundary of a room is always one of these:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_room_boundary_path</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">bx</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">by</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">shape</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">shape</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"square"</span><span class="plain">) == 0)</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_rectangular_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">-</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">-</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">+</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">+</span><span class="identifier">boxsize</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">shape</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"rectangle"</span><span class="plain">) == 0)</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_rectangular_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">-2*</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">-</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">+2*</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">+</span><span class="identifier">boxsize</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::cmp</span><span class="plain">(</span><span class="identifier">shape</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"circle"</span><span class="plain">) == 0)</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_circular_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">, </span><span class="identifier">boxsize</span><span class="plain">);</span>
|
|
<span class="reserved">else</span>
|
|
<span class="functiontext">PL::EPSMap::EPS_compile_rectangular_path</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">-</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">-</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">bx</span><span class="plain">+</span><span class="identifier">boxsize</span><span class="plain">, </span><span class="identifier">by</span><span class="plain">+</span><span class="identifier">boxsize</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_room_boundary_path is used in <a href="#SP25_7_1">§25.7.1</a>, <a href="#SP25_7_2">§25.7.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP31"></a><b>§31. Straight lines. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_horizontal_line_path</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d moveto %% LHS\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d lineto %% RHS\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x1</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"closepath\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_horizontal_line_path is used in <a href="#SP25_3">§25.3</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP32"></a><b>§32. Dashed arrows. </b></p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_dashed_arrow</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">length</span><span class="plain">, </span><span class="reserved">vector</span><span class="plain"> </span><span class="identifier">Dir</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y0</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[2 1] 0 setdash %% dashed line for arrow\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d moveto %% room centre\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d rlineto %% arrow out\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">Dir</span><span class="element">.x</span><span class="plain">*</span><span class="identifier">length</span><span class="plain">, </span><span class="identifier">Dir</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">*</span><span class="identifier">length</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"stroke\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[] 0 setdash %% back to normal solid lines\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_dashed_arrow is used in <a href="#SP25_6_1_2">§25.6.1.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP33"></a><b>§33. Bezier curves. </b>The other sort of path we'll need is a Bézier curve, a quadratic curve which
|
|
interpolates between vectors. EPS has support for these built-in; see any
|
|
reference book on PostScript.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_Bezier_curve</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stiffness0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stiffness1</span><span class="plain">,</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit0</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">exit1</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cx1</span><span class="plain">, </span><span class="identifier">cy1</span><span class="plain">, </span><span class="identifier">cx2</span><span class="plain">, </span><span class="identifier">cy2</span><span class="plain">;</span>
|
|
<span class="reserved">vector</span><span class="plain"> </span><span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::direction_as_vector</span><span class="plain">(</span><span class="identifier">exit0</span><span class="plain">);</span>
|
|
<span class="identifier">cx1</span><span class="plain"> = </span><span class="identifier">x0</span><span class="plain">+</span><span class="identifier">E</span><span class="element">.x</span><span class="plain">*</span><span class="identifier">stiffness0</span><span class="plain">/100; </span><span class="identifier">cy1</span><span class="plain"> = </span><span class="identifier">y0</span><span class="plain">+</span><span class="identifier">E</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">*</span><span class="identifier">stiffness0</span><span class="plain">/100;</span>
|
|
<span class="identifier">E</span><span class="plain"> = </span><span class="functiontext">PL::SpatialMap::direction_as_vector</span><span class="plain">(</span><span class="identifier">exit1</span><span class="plain">);</span>
|
|
<span class="identifier">cx2</span><span class="plain"> = </span><span class="identifier">x1</span><span class="plain">+</span><span class="identifier">E</span><span class="element">.x</span><span class="plain">*</span><span class="identifier">stiffness1</span><span class="plain">/100; </span><span class="identifier">cy2</span><span class="plain"> = </span><span class="identifier">y1</span><span class="plain">+</span><span class="identifier">E</span><span class="plain">.</span><span class="identifier">y</span><span class="plain">*</span><span class="identifier">stiffness1</span><span class="plain">/100;</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d moveto %% start of Bezier curve\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x0</span><span class="plain">, </span><span class="identifier">y0</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d %d %d %d %d curveto %% control points 1, 2 and end\</span><span class="plain">n</span><span class="string">"</span><span class="plain">,</span>
|
|
<span class="identifier">cx1</span><span class="plain">, </span><span class="identifier">cy1</span><span class="plain">, </span><span class="identifier">cx2</span><span class="plain">, </span><span class="identifier">cy2</span><span class="plain">, </span><span class="identifier">x1</span><span class="plain">, </span><span class="identifier">y1</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"stroke\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_Bezier_curve is used in <a href="#SP25_6_1_1">§25.6.1.1</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP34"></a><b>§34. Line thickness. </b>The following routines should be used in nested pairs, so that the PostScript
|
|
stack is kept in order.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_line_width_setting</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"currentlinewidth %% Push old line width onto stack\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d setlinewidth\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">new</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_line_width_unsetting</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"setlinewidth %% Pull old line width from stack\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_line_width_setting is used in <a href="#SP25_6">§25.6</a>, <a href="#SP25_7_2">§25.7.2</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_line_width_unsetting is used in <a href="#SP25_6">§25.6</a>, <a href="#SP25_7_2">§25.7.2</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP35"></a><b>§35. Text. </b>In EPS world, text is just another sort of path.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_text</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">y</span><span class="plain">,</span>
|
|
<span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">font</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pointsize</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_h</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">centre_v</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"/%w findfont %d scalefont setfont\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">font</span><span class="plain">, </span><span class="identifier">pointsize</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"newpath (%S)\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">centre_h</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"dup stringwidth add 2 div %d exch sub %% = X centre-offset\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %% = X\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">centre_v</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %d 2 div sub %% = Y centre-offset\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">, </span><span class="identifier">pointsize</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%d %% = Y\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">y</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"moveto show\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_text is used in <a href="#SP27">§27</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP36"></a><b>§36. RGB colours. </b>Inform internally stores colours as six hexadecimal digits, in traditional
|
|
HTML way: <code class="display"><span class="extract">RRGGBB</span></code>, with each colour from 0 to 255. In EPS files, colours
|
|
are written as triples of floating point numbers 0 <= b <= 1.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">EPS uses reverse Polish notation, so the command here is: <code class="display"><span class="extract">R G B setrgbcolor</span></code>.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_colour</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">htmlcolour</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">Wide::len</span><span class="plain">(</span><span class="identifier">htmlcolour</span><span class="plain">) != 6) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Improper HTML colour"</span><span class="plain">);</span>
|
|
<span class="functiontext">PL::EPSMap::choose_colour_beam</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">htmlcolour</span><span class="plain">[0], </span><span class="identifier">htmlcolour</span><span class="plain">[1]);</span>
|
|
<span class="functiontext">PL::EPSMap::choose_colour_beam</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">htmlcolour</span><span class="plain">[2], </span><span class="identifier">htmlcolour</span><span class="plain">[3]);</span>
|
|
<span class="functiontext">PL::EPSMap::choose_colour_beam</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">htmlcolour</span><span class="plain">[4], </span><span class="identifier">htmlcolour</span><span class="plain">[5]);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"setrgbcolor %% From HTML colour %w\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">htmlcolour</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::choose_colour_beam</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hex1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hex2</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">k</span><span class="plain"> = </span><span class="functiontext">PL::EPSMap::hex_to_int</span><span class="plain">(</span><span class="identifier">hex1</span><span class="plain">)*16 + </span><span class="functiontext">PL::EPSMap::hex_to_int</span><span class="plain">(</span><span class="identifier">hex2</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%.6g "</span><span class="plain">, (</span><span class="reserved">double</span><span class="plain">) (((</span><span class="reserved">float</span><span class="plain">) </span><span class="identifier">k</span><span class="plain">)/255.0));</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::hex_to_int</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hex</span><span class="plain">) {</span>
|
|
<span class="reserved">switch</span><span class="plain">(</span><span class="identifier">hex</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'0'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 0;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'1'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 1;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'2'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 2;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'3'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 3;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'4'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 4;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'5'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 5;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'6'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 6;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'7'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 7;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'8'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 8;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'9'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 9;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'a'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'A'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 10;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'b'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'B'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 11;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'c'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'C'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 12;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'D'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 13;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'e'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'E'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 14;</span>
|
|
<span class="reserved">case</span><span class="plain"> </span><span class="character">'f'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'F'</span><span class="plain">: </span><span class="reserved">return</span><span class="plain"> 15;</span>
|
|
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"Improper character in HTML colour"</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">return</span><span class="plain"> 0;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_set_colour is used in <a href="#SP25_4">§25.4</a>, <a href="#SP25_6_1">§25.6.1</a>, <a href="#SP25_7_1">§25.7.1</a>, <a href="#SP25_7_2">§25.7.2</a>, <a href="#SP25_7_3">§25.7.3</a>, <a href="#SP25_8">§25.8</a>.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::choose_colour_beam appears nowhere else.</p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::hex_to_int appears nowhere else.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP37"></a><b>§37. </b>EPS also supports greyscale, where there's only one beam:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">PL::EPSMap::EPS_compile_set_greyscale</span><span class="plain">(</span><span class="identifier">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%0.02f setgray %% greyscale %d/100ths of white\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, (</span><span class="reserved">float</span><span class="plain">) </span><span class="identifier">N</span><span class="plain">/100, </span><span class="identifier">N</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function PL::EPSMap::EPS_compile_set_greyscale is used in <a href="#SP25_4">§25.4</a>, <a href="#SP25_6_1">§25.6.1</a>, <a href="#SP25_7_1">§25.7.1</a>, <a href="#SP25_7_2">§25.7.2</a>, <a href="#SP25_7_3">§25.7.3</a>, <a href="#SP25_8">§25.8</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="3-hm.html">Back to 'HTML Map'</a></li><li><a href="3-sc.html">Continue with 'Showme Command'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</body>
|
|
</html>
|
|
|