mirror of
https://github.com/ganelson/inform.git
synced 2024-07-08 10:04:21 +03:00
316 lines
43 KiB
HTML
316 lines
43 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<title>3/laaf</title>
|
|
<meta name="viewport" content="width=device-width initial-scale=1">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
<meta http-equiv="Content-Language" content="en-gb">
|
|
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
|
</head>
|
|
<body>
|
|
<nav role="navigation">
|
|
<h1><a href="../webs.html">Sources</a></h1>
|
|
<ul>
|
|
<li><a href="../compiler.html">compiler</a></li>
|
|
<li><a href="../other.html"><b>other tools</b></a></li>
|
|
<li><a href="../extensions.html">extensions and kits</a></li>
|
|
<li><a href="../units.html">unit test tools</a></li>
|
|
</ul>
|
|
<h2>Other Tools</h2>
|
|
<ul>
|
|
<li><a href="../inblorb/index.html">inblorb</a></li>
|
|
<li><a href="../indoc/index.html">indoc</a></li>
|
|
<li><a href="../inpolicy/index.html">inpolicy</a></li>
|
|
<li><a href="../inrtps/index.html">inrtps</a></li>
|
|
</ul>
|
|
<h2>Foundation</h2>
|
|
<ul>
|
|
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
|
|
</ul>
|
|
|
|
|
|
</nav>
|
|
<main role="main">
|
|
|
|
<!--Weave of '3/plc' generated by 7-->
|
|
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../other.html">Other Tools</a></li><li><a href="index.html">inblorb 4</a></li><li><a href="index.html#3">Chapter 3: Other Material</a></li><li><b>Placeholders</b></li></ul><p class="purpose">To manage placeholder variables.</p>
|
|
|
|
<ul class="toc"><li><a href="#SP1">§1. Placeholders</a></li><li><a href="#SP2">§2. Initial values</a></li></ul><hr class="tocbar">
|
|
|
|
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Placeholders. </b>Placeholders are markers such as "[AUTHOR]", found in the template
|
|
files for making web pages. ("AUTHOR" would be the name of this one; the use
|
|
of capital letters is customary but not required.) Most of these can be set
|
|
to arbitrary texts by use of the <code class="display"><span class="extract">placeholder</span></code> command in the blurb file, but
|
|
a few are "reserved":
|
|
</p>
|
|
|
|
|
|
<pre class="definitions">
|
|
<span class="definitionkeyword">define</span> <span class="constant">SOURCE_RPL</span><span class="plain"> 1</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SOURCENOTES_RPL</span><span class="plain"> 2</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">SOURCELINKS_RPL</span><span class="plain"> 3</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">COVER_RPL</span><span class="plain"> 4</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">DOWNLOAD_RPL</span><span class="plain"> 5</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">AUXILIARY_RPL</span><span class="plain"> 6</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PAGENUMBER_RPL</span><span class="plain"> 7</span>
|
|
<span class="definitionkeyword">define</span> <span class="constant">PAGEEXTENT_RPL</span><span class="plain"> 8</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">placeholder</span><span class="plain"> {</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">pl_name</span><span class="plain">; </span> <span class="comment">such as "[AUTHOR]"</span>
|
|
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">pl_contents</span><span class="plain">; </span> <span class="comment">current value</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">reservation</span><span class="plain">; </span> <span class="comment">one of the <code class="display"><span class="extract">*_RPL</span></code> values above, or 0 for unreserved</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">locked</span><span class="plain">; </span> <span class="comment">currently being expanded: locked to prevent mise-en-abyme</span>
|
|
<span class="constant">MEMORY_MANAGEMENT</span>
|
|
<span class="plain">} </span><span class="reserved">placeholder</span><span class="plain">;</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The structure placeholder is private to this section.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Initial values. </b>The <code class="display"><span class="extract">BLURB</span></code> refers here to back-cover-style text, and not to the "blurb"
|
|
file which we are acting on.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::initialise</span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCE"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">SOURCE_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCENOTES"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">SOURCENOTES_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"SOURCELINKS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">SOURCELINKS_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"COVER"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">COVER_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"DOWNLOAD"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">DOWNLOAD_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"AUXILIARY"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">AUXILIARY_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"PAGENUMBER"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">PAGENUMBER_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"PAGEEXTENT"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="constant">PAGEEXTENT_RPL</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"CBLORBERRORS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INBROWSERPLAY"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"INTERPRETERSCRIPTS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"OTHERCREDITS"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BLURB"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"TEMPLATE"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Standard"</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"GENERATOR"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"inblorb [[Build Number]]"</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BASE64_TOP"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"BASE64_TAIL"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"JAVASCRIPTPRELUDE"</span><span class="plain">, </span><span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">JAVASCRIPT_PRELUDE</span><span class="plain">), 0);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"FONTTAG"</span><span class="plain">, </span><span class="functiontext">Str::literal</span><span class="plain">(</span><span class="identifier">FONT_TAG</span><span class="plain">), 0);</span>
|
|
|
|
<span class="functiontext">Main::initialise_time_variables</span><span class="plain">();</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::initialise is used in 1/mn (<a href="1-mn.html#SP3">§3</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>We don't need any very efficient system for parsing these names, as there
|
|
are typically fewer than 20 placeholders at a time.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">placeholder</span><span class="plain"> *</span><span class="functiontext">Placeholders::find</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="reserved">placeholder</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">;</span>
|
|
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">placeholder</span><span class="plain">)</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_name</span><span class="plain">, </span><span class="identifier">name</span><span class="plain">))</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wv</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Placeholders::read</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
|
|
<span class="reserved">placeholder</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain"> = </span><span class="functiontext">Placeholders::find</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">wv</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">;</span>
|
|
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::find is used in <a href="#SP6">§6</a>, <a href="#SP7">§7</a>.</p>
|
|
|
|
<p class="endnote">The function Placeholders::read is used in 1/mn (<a href="1-mn.html#SP5">§5</a>), 1/bp (<a href="1-bp.html#SP8">§8</a>), 3/rls (<a href="3-rls.html#SP5">§5</a>, <a href="3-rls.html#SP6_5">§6.5</a>, <a href="3-rls.html#SP6_8">§6.8</a>, <a href="3-rls.html#SP6_9">§6.9</a>, <a href="3-rls.html#SP7">§7</a>, <a href="3-rls.html#SP8_1">§8.1</a>, <a href="3-rls.html#SP8_2">§8.2</a>, <a href="3-rls.html#SP8_2_1">§8.2.1</a>, <a href="3-rls.html#SP11">§11</a>), 3/laaf (<a href="3-laaf.html#SP5">§5</a>), 3/wm (<a href="3-wm.html#SP11">§11</a>, <a href="3-wm.html#SP15">§15</a>, <a href="3-wm.html#SP15_1">§15.1</a>, <a href="3-wm.html#SP18">§18</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>There are no "types" of these placeholders. When they hold numbers, it's only
|
|
as the text of a number written out in decimal, so:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::set_to_number</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">var</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">v</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">temp_digits</span><span class="plain">);</span>
|
|
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">temp_digits</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">v</span><span class="plain">);</span>
|
|
<span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">, </span><span class="identifier">temp_digits</span><span class="plain">, 0);</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">temp_digits</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::set_to_number is used in 1/mn (<a href="1-mn.html#SP4">§4</a>, <a href="1-mn.html#SP6_1">§6.1</a>), 1/bp (<a href="1-bp.html#SP7_2">§7.2</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>And here we set a given placeholder to a given text value. If it doesn't
|
|
already exist, it will be created. A reserved placeholder can then never again
|
|
be set, and since it will have been set at creation time (above), it follows
|
|
that a reserved placeholder cannot be set with the <code class="display"><span class="extract">placeholder</span></code> command of a
|
|
blurb file.
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::set_to</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">var</span><span class="plain">, </span><span class="reserved">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">reservation</span><span class="plain">) {</span>
|
|
<span class="functiontext">Placeholders::set_to_inner</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">reservation</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::append_to</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">var</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
|
|
<span class="functiontext">Placeholders::set_to_inner</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, 0, </span><span class="constant">TRUE</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::set_to is used in <a href="#SP2">§2</a>, <a href="#SP4">§4</a>, 1/mn (<a href="1-mn.html#SP4">§4</a>, <a href="1-mn.html#SP6_1">§6.1</a>), 1/bp (<a href="1-bp.html#SP7_2">§7.2</a>, <a href="1-bp.html#SP7_2_1">§7.2.1</a>, <a href="1-bp.html#SP7_2_2">§7.2.2</a>), 3/rls (<a href="3-rls.html#SP6_7">§6.7</a>, <a href="3-rls.html#SP6_8">§6.8</a>, <a href="3-rls.html#SP6_9">§6.9</a>, <a href="3-rls.html#SP9_1">§9.1</a>).</p>
|
|
|
|
<p class="endnote">The function Placeholders::append_to is used in 1/be (<a href="1-be.html#SP4">§4</a>), 3/rls (<a href="3-rls.html#SP8_2">§8.2</a>, <a href="3-rls.html#SP12">§12</a>, <a href="3-rls.html#SP12_1">§12.1</a>, <a href="3-rls.html#SP12_2">§12.2</a>, <a href="3-rls.html#SP12_3">§12.3</a>, <a href="3-rls.html#SP12_4">§12.4</a>, <a href="3-rls.html#SP12_5">§12.5</a>, <a href="3-rls.html#SP12_6">§12.6</a>, <a href="3-rls.html#SP12_7">§12.7</a>, <a href="3-rls.html#SP12_8">§12.8</a>, <a href="3-rls.html#SP12_9">§12.9</a>, <a href="3-rls.html#SP12_10">§12.10</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>Where:
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::set_to_inner</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">var</span><span class="plain">, </span><span class="reserved">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">reservation</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">extend</span><span class="plain">) {</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! [%S] <-- \</span><span class="plain">"</span><span class="string">%S\</span><span class="plain">"</span><span class="string">\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">var</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
|
|
|
<span class="reserved">placeholder</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain"> = </span><span class="functiontext">Placeholders::find</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">wv</span><span class="plain">) && (</span><span class="identifier">reservation</span><span class="plain"> > 0)) { </span><span class="functiontext">BlorbErrors::error_1S</span><span class="plain">(</span><span class="string">"tried to set reserved variable %S"</span><span class="plain">, </span><span class="identifier">var</span><span class="plain">); </span><span class="reserved">return</span><span class="plain">; }</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wv</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
|
<span class="identifier">wv</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">placeholder</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">verbose_mode</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"! Creating [%S]\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">var</span><span class="plain">);</span>
|
|
<span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">);</span>
|
|
<span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
|
<span class="identifier">wv</span><span class="plain">-</span><span class="element">>reservation</span><span class="plain"> = </span><span class="identifier">reservation</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">extend</span><span class="plain">) </span><span class="functiontext">Str::concatenate</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::set_to_inner is used in <a href="#SP5">§5</a>.</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>And that just leaves writing the output of these placeholders. The scenario
|
|
here is that we're copying HTML over to make a new web page, but we've hit
|
|
text in the template like "[AUTHOR]". We output the value of this
|
|
placeholder instead of that literal text. The reserved placeholders output as
|
|
special gadgets instead of any fixed text, so those all call suitable
|
|
routines elsewhere in Inblorb.
|
|
</p>
|
|
|
|
<p class="inwebparagraph">If the placeholder name isn't known to us, we print the text back, so that the
|
|
original material will be unchanged. (This is in case the original contains
|
|
uses of square brackets which aren't for placeholding.)
|
|
</p>
|
|
|
|
|
|
<pre class="display">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">escape_quotes_mode</span><span class="plain"> = 0;</span>
|
|
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Placeholders::write</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">var</span><span class="plain">) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">multiparagraph_mode</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">eqm</span><span class="plain"> = </span><span class="identifier">escape_quotes_mode</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">) == </span><span class="character">'*'</span><span class="plain">) { </span><span class="functiontext">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">); </span><span class="identifier">escape_quotes_mode</span><span class="plain"> = 1; }</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">) == </span><span class="character">'*'</span><span class="plain">) { </span><span class="functiontext">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">); </span><span class="identifier">escape_quotes_mode</span><span class="plain"> = 2; }</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"BLURB"</span><span class="plain">)) </span><span class="identifier">multiparagraph_mode</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">placeholder</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain"> = </span><span class="functiontext">Placeholders::find</span><span class="plain">(</span><span class="identifier">var</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">wv</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>locked</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"[%S]"</span><span class="plain">, </span><span class="identifier">var</span><span class="plain">);</span>
|
|
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
|
<span class="identifier">wv</span><span class="plain">-</span><span class="element">>locked</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">multiparagraph_mode</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<p>"</span><span class="plain">);</span>
|
|
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>reservation</span><span class="plain">) {</span>
|
|
<span class="reserved">case</span><span class="plain"> 0: </span><<span class="cwebmacro">Copy an ordinary unreserved placeholder</span> <span class="cwebmacronumber">7.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">SOURCE_RPL</span><span class="plain">: </span><span class="functiontext">Websites::expand_SOURCE_or_SOURCENOTES_variable</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">FALSE</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">SOURCENOTES_RPL</span><span class="plain">: </span><span class="functiontext">Websites::expand_SOURCE_or_SOURCENOTES_variable</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="constant">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">SOURCELINKS_RPL</span><span class="plain">: </span><span class="functiontext">Websites::expand_SOURCELINKS_variable</span><span class="plain">(</span><span class="identifier">OUT</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">COVER_RPL</span><span class="plain">: </span><span class="functiontext">Links::expand_COVER_variable</span><span class="plain">(</span><span class="identifier">OUT</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">DOWNLOAD_RPL</span><span class="plain">: </span><span class="functiontext">Links::expand_DOWNLOAD_variable</span><span class="plain">(</span><span class="identifier">OUT</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">AUXILIARY_RPL</span><span class="plain">: </span><span class="functiontext">Links::expand_AUXILIARY_variable</span><span class="plain">(</span><span class="identifier">OUT</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">PAGENUMBER_RPL</span><span class="plain">: </span><span class="functiontext">Websites::expand_PAGENUMBER_variable</span><span class="plain">(</span><span class="identifier">OUT</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">PAGEEXTENT_RPL</span><span class="plain">: </span><span class="functiontext">Websites::expand_PAGEEXTENT_variable</span><span class="plain">(</span><span class="identifier">OUT</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">multiparagraph_mode</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</p>"</span><span class="plain">);</span>
|
|
<span class="identifier">wv</span><span class="plain">-</span><span class="element">>locked</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
|
<span class="identifier">escape_quotes_mode</span><span class="plain"> = </span><span class="identifier">eqm</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">The function Placeholders::write is used in <a href="#SP7_1">§7.1</a>, 3/sd (<a href="3-sd.html#SP12">§12</a>), 3/wm (<a href="3-wm.html#SP10">§10</a>).</p>
|
|
|
|
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b>Note that the [BLURB] placeholder — which holds the story description, and is
|
|
like a back cover blurb for a book; the name is not related to the release
|
|
instructions format — may consist of multiple paragraphs. If so, then they
|
|
will be divided by <code class="display"><span class="extract"><br/></span></code>, since that's the XML convention. But we want to
|
|
translate those breaks to <code class="display"><span class="extract"></p><p></span></code>, closing an old paragraph and opening
|
|
a new one, because that will make the blurb text much easier to style
|
|
with a CSS file. It follows that [BLURB] should always appear in templates
|
|
within an HTML paragraph.
|
|
</p>
|
|
|
|
|
|
<p class="macrodefinition"><code class="display">
|
|
<<span class="cwebmacrodefn">Copy an ordinary unreserved placeholder</span> <span class="cwebmacronumber">7.1</span>> =
|
|
</code></p>
|
|
|
|
|
|
<pre class="displaydefn">
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">L</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">c</span><span class="plain"> = </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'<'</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'b'</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">'r'</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+3) == </span><span class="character">'/'</span><span class="plain">) &&</span>
|
|
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+4) == </span><span class="character">'>'</span><span class="plain">) && (</span><span class="identifier">multiparagraph_mode</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</p><p>"</span><span class="plain">); </span><span class="identifier">i</span><span class="plain"> += 4; </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'['</span><span class="plain">) {</span>
|
|
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">inner_name</span><span class="plain">);</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">expanded</span><span class="plain"> = </span><span class="constant">FALSE</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">j</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">+1; </span><span class="identifier">j</span><span class="plain"><</span><span class="identifier">L</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) {</span>
|
|
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-</span><span class="element">>pl_contents</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'['</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">' '</span><span class="plain">)) </span><span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">']'</span><span class="plain">) {</span>
|
|
<span class="identifier">i</span><span class="plain"> = </span><span class="identifier">j</span><span class="plain">;</span>
|
|
<span class="functiontext">Placeholders::write</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">inner_name</span><span class="plain">);</span>
|
|
<span class="identifier">expanded</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
|
<span class="reserved">break</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">inner_name</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">inner_name</span><span class="plain">);</span>
|
|
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">expanded</span><span class="plain">) </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> (((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">x</span><span class="character">0a'</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">x</span><span class="character">0d'</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">x</span><span class="character">7f'</span><span class="plain">)) && (</span><span class="identifier">multiparagraph_mode</span><span class="plain">)) {</span>
|
|
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<p>"</span><span class="plain">); </span><span class="reserved">continue</span><span class="plain">;</span>
|
|
<span class="plain">}</span>
|
|
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">escape_quotes_mode</span><span class="plain"> == 1) && (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&#39;"</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">escape_quotes_mode</span><span class="plain"> == 2) && (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%%2527"</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">"%c"</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
|
|
<span class="plain">}</span>
|
|
</pre>
|
|
|
|
<p class="inwebparagraph"></p>
|
|
|
|
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
|
|
|
<hr class="tocbar">
|
|
<ul class="toc"><li><a href="3-laaf.html">Back to 'Links and Auxiliary Files'</a></li><li><a href="3-tmp.html">Continue with 'Templates'</a></li></ul><hr class="tocbar">
|
|
<!--End of weave-->
|
|
</main>
|
|
</body>
|
|
</html>
|
|
|