1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-17 07:40:47 +03:00

Windows variation on advice texts

This commit is contained in:
Graham Nelson 2022-08-15 21:45:46 +01:00
parent b4327d135b
commit 6c42df5bc4
13 changed files with 355 additions and 25 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.1.0-beta+6V40 'Krypton' (12 August 2022)
[Version](notes/versioning.md): 10.1.0-beta+6V41 'Krypton' (15 August 2022)
## About Inform

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 12 August 2022
Build Number: 6V40
Build Date: 15 August 2022
Build Number: 6V41

View file

@ -74,6 +74,7 @@ function togglePopup(material_id) {
<span class="reserved-syntax">inbuild_registry</span><span class="plain-syntax"> *</span><span class="identifier-syntax">selected_registry</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">filter_text</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">pathname</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preprocess_HTML_destination</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">preprocess_HTML_app</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. Main routine. </b>When Inbuild is called at the command line, it begins at <span class="extract"><span class="extract-syntax">main</span></span>, like all C
programs.
@ -401,6 +402,7 @@ other options to the selection defined here.
<span class="definition-keyword">enum</span> <span class="constant-syntax">BUILD_REGISTRY_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PREPROCESS_HTML_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PREPROCESS_HTML_TO_CLSW</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">PREPROCESS_APP_CLSW</span>
</pre>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read the command line</span><span class="named-paragraph-number">2.8</span></span><span class="comment-syntax"> =</span>
</p>
@ -457,6 +459,8 @@ other options to the selection defined here.
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"construct HTML page based on X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PREPROCESS_HTML_TO_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"preprocess-html-to"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"set destination for -preprocess-html to be X"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP5" class="function-link"><span class="function-syntax">CommandLine::declare_switch</span></a><span class="plain-syntax">(</span><span class="constant-syntax">PREPROCESS_APP_CLSW</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"preprocess-app"</span><span class="plain-syntax">, </span><span class="constant-syntax">2</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">L</span><span class="string-syntax">"use CSS suitable for app platform X (macos, windows, linux)"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP4" class="function-link"><span class="function-syntax">Supervisor::declare_options</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-cla.html#SP8" class="function-link"><span class="function-syntax">CommandLine::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">argc</span><span class="plain-syntax">, </span><span class="identifier-syntax">argv</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, &amp;</span><a href="1-mn.html#SP3" class="function-link"><span class="function-syntax">Main::option</span></a><span class="plain-syntax">, &amp;</span><a href="1-mn.html#SP4" class="function-link"><span class="function-syntax">Main::bareword</span></a><span class="plain-syntax">);</span>
@ -509,12 +513,15 @@ other options to the selection defined here.
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREPROCESS_HTML_TO_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">preprocess_HTML_destination</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREPROCESS_APP_CLSW:</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">preprocess_HTML_app</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">case</span><span class="plain-syntax"> </span><span class="identifier-syntax">PREPROCESS_HTML_CLSW:</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">preprocess_HTML_destination</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../../../inweb/foundation-module/3-em.html#SP2" class="function-link"><span class="function-syntax">Errors::fatal</span></a><span class="plain-syntax">(</span><span class="string-syntax">"must specify -preprocess-html-to P to give destination path P first"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">arg</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax"> = </span><a href="../../../inweb/foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">preprocess_HTML_destination</span><span class="plain-syntax">, </span><a href="../../../inweb/foundation-module/3-fln.html#SP7" class="function-link"><span class="function-syntax">Filenames::get_leafname</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/2-rgs.html#SP28" class="function-link"><span class="function-syntax">Registries::preprocess_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/2-rgs.html#SP28" class="function-link"><span class="function-syntax">Registries::preprocess_HTML</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocess_HTML_app</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">break</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../supervisor-module/1-ic.html#SP7" class="function-link"><span class="function-syntax">Supervisor::option</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">id</span><span class="plain-syntax">, </span><span class="identifier-syntax">val</span><span class="plain-syntax">, </span><span class="identifier-syntax">arg</span><span class="plain-syntax">, </span><span class="identifier-syntax">state</span><span class="plain-syntax">);</span>

View file

@ -75,6 +75,7 @@ and those not documented in this manual are covered in that one.
<span class="plain-syntax">-graph show dependency graph of target(s) but take no action</span>
<span class="plain-syntax">-inspect show target(s) but take no action</span>
<span class="plain-syntax">-matching X apply to all works in nest(s) matching requirement X</span>
<span class="plain-syntax">-preprocess-app X use CSS suitable for app platform X (macos, windows, linux)</span>
<span class="plain-syntax">-preprocess-html X construct HTML page based on X</span>
<span class="plain-syntax">-preprocess-html-to X set destination for -preprocess-html to be X</span>
<span class="plain-syntax">-rebuild completely rebuild target(s)</span>

View file

@ -244,7 +244,7 @@ through exactly as written.
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="2-rgs.html#SP6" class="function-link"><span class="function-syntax">Registries::scan_line</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::scan_line</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Registries::scan_line</span></span>:<br/><a href="2-rgs.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::scan_line</span><button class="popup" onclick="togglePopup('usagePopup3')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup3">Usage of <span class="code-font"><span class="function-syntax">Registries::scan_line</span></span>:<br/><a href="2-rgs.html#SP8">&#167;8</a>, <a href="2-rgs.html#SP28">&#167;28</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">line</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">, </span><span class="reserved-syntax">void</span><span class="plain-syntax"> *</span><span class="identifier-syntax">X</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax"> = (</span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">X</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"%S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
@ -270,7 +270,7 @@ files for the named platform. It's an <span class="extract"><span class="extract
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::css_expander</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Registries::css_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">&#167;5.1</a>, <a href="2-rgs.html#SP28">&#167;28</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">,</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::css_expander</span><button class="popup" onclick="togglePopup('usagePopup5')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup5">Usage of <span class="code-font"><span class="function-syntax">Registries::css_expander</span></span>:<br/><a href="2-rgs.html#SP5_1">&#167;5.1</a></span></button><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> **</span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">platform</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InstalledFiles::filename_for_platform</span><span class="plain-syntax">(</span><span class="identifier-syntax">CSS_SET_BY_PLATFORM_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
@ -761,17 +761,43 @@ they may need platform-specific CSS in order to display properly in Dark Mode,
use congenial fonts, and so on.
</p>
<p class="commentary">We preprocess from <span class="extract"><span class="extract-syntax">F</span></span> to <span class="extract"><span class="extract-syntax">T</span></span>:
<p class="commentary">We preprocess from <span class="extract"><span class="extract-syntax">F</span></span> to <span class="extract"><span class="extract-syntax">T</span></span>, except that we look to see if there's a platform
variant of the file <span class="extract"><span class="extract-syntax">F</span></span> first: for example, if <span class="extract"><span class="extract-syntax">F</span></span> is <span class="extract"><span class="extract-syntax">Fruits/bananas.html</span></span>, and
the platform is <span class="extract"><span class="extract-syntax">wii</span></span>, then we look for <span class="extract"><span class="extract-syntax">Fruits/bananas-wii.html</span></span> and use that
instead. (If not, we just use <span class="extract"><span class="extract-syntax">F</span></span>.) In practice, for example, this allows the
file in the apps which lists keyboard shortcuts to vary with platform.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::preprocess_HTML</span><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::preprocess_HTML</span><span class="plain-syntax">(</span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">platform</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ML</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::new_macro</span><span class="plain-syntax">(</span><span class="identifier-syntax">ML</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"include-css"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"?platform: PLATFORM"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="2-rgs.html#SP8" class="function-link"><span class="function-syntax">Registries::css_expander</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="2-rgs.html#SP28" class="function-link"><span class="function-syntax">Registries::preprocess_css_expander</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_unextended_leafname</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant</span><span class="plain-syntax">, </span><span class="string-syntax">"-%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Filenames::write_extension</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">variant_F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">Filenames::in</span><span class="plain-syntax">(</span><span class="identifier-syntax">Filenames::up</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">), </span><span class="identifier-syntax">variant</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">TextFiles::exists</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant_F</span><span class="plain-syntax">)) </span><span class="identifier-syntax">F</span><span class="plain-syntax"> = </span><span class="identifier-syntax">variant_F</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">variant</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">STDOUT</span><span class="plain-syntax">, </span><span class="string-syntax">"%f -&gt; %f\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">Preprocessor::preprocess</span><span class="plain-syntax">(</span><span class="identifier-syntax">F</span><span class="plain-syntax">, </span><span class="identifier-syntax">T</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">ML</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">NULL_GENERAL_POINTER</span><span class="plain-syntax">, </span><span class="character-syntax">'#'</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">STORE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">platform</span><span class="plain-syntax">), </span><span class="character-syntax">'#'</span><span class="plain-syntax">, </span><span class="identifier-syntax">UTF8_ENC</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Registries::preprocess_css_expander</span><span class="plain-syntax">(</span><span class="identifier-syntax">preprocessor_macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">mm</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> **</span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">, </span><span class="identifier-syntax">preprocessor_loop</span><span class="plain-syntax"> *</span><span class="identifier-syntax">loop</span><span class="plain-syntax">, </span><span class="identifier-syntax">text_file_position</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tfp</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">platform</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">Str::len</span><span class="plain-syntax">(</span><span class="identifier-syntax">platform</span><span class="plain-syntax">) == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">platform</span><span class="plain-syntax"> = </span><span class="identifier-syntax">RETRIEVE_POINTER_text_stream</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">specifics</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InstalledFiles::filename_for_platform</span><span class="plain-syntax">(</span><span class="identifier-syntax">CSS_SET_BY_PLATFORM_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"&lt;style type=\"text/css\"&gt;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"&lt;!--\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"can't open include file"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="2-rgs.html#SP6" class="function-link"><span class="function-syntax">Registries::scan_line</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">prototype</span><span class="plain-syntax"> = </span><span class="identifier-syntax">InstalledFiles::filename_for_platform</span><span class="plain-syntax">(</span><span class="identifier-syntax">CSS_FOR_STANDARD_PAGES_IRES</span><span class="plain-syntax">, </span><span class="identifier-syntax">platform</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TextFiles::read</span><span class="plain-syntax">(</span><span class="identifier-syntax">prototype</span><span class="plain-syntax">, </span><span class="identifier-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"can't open include file"</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TRUE</span><span class="plain-syntax">, </span><a href="2-rgs.html#SP6" class="function-link"><span class="function-syntax">Registries::scan_line</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">PPS</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">WRITE_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">dest</span><span class="plain-syntax">, </span><span class="string-syntax">"--&gt;&lt;/style&gt;\n"</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<nav role="progress"><div class="progresscontainer">

View file

@ -16,6 +16,7 @@ usage: inbuild [-TASK] TARGET1 TARGET2 ...
-graph show dependency graph of target(s) but take no action
-inspect show target(s) but take no action
-matching X apply to all works in nest(s) matching requirement X
-preprocess-app X use CSS suitable for app platform X (macos, windows, linux)
-preprocess-html X construct HTML page based on X
-preprocess-html-to X set destination for -preprocess-html to be X
-rebuild completely rebuild target(s)

View file

@ -667,13 +667,24 @@ on the launcher panels. There's nothing interesting about those files except tha
they may need platform-specific CSS in order to display properly in Dark Mode,
use congenial fonts, and so on.
We preprocess from |F| to |T|:
We preprocess from |F| to |T|, except that we look to see if there's a platform
variant of the file |F| first: for example, if |F| is |Fruits/bananas.html|, and
the platform is |wii|, then we look for |Fruits/bananas-wii.html| and use that
instead. (If not, we just use |F|.) In practice, for example, this allows the
file in the apps which lists keyboard shortcuts to vary with platform.
=
void Registries::preprocess_HTML(filename *T, filename *F, text_stream *platform) {
linked_list *ML = NEW_LINKED_LIST(preprocessor_macro);
Preprocessor::new_macro(ML, I"include-css", I"?platform: PLATFORM",
Registries::preprocess_css_expander, NULL);
TEMPORARY_TEXT(variant)
Filenames::write_unextended_leafname(variant, F);
WRITE_TO(variant, "-%S", platform);
Filenames::write_extension(variant, F);
filename *variant_F = Filenames::in(Filenames::up(F), variant);
if (TextFiles::exists(variant_F)) F = variant_F;
DISCARD_TEXT(variant)
WRITE_TO(STDOUT, "%f -> %f\n", F, T);
Preprocessor::preprocess(F, T, NULL, ML,
STORE_POINTER_text_stream(platform), '#', UTF8_ENC);

View file

@ -1,33 +1,32 @@
100.0% in inform7 run
71.2% in compilation to Inter
49.7% in //Sequence::undertake_queued_tasks//
4.8% in //MajorNodes::pre_pass//
3.8% in //MajorNodes::pass_1//
2.0% in //ImperativeDefinitions::assess_all//
68.9% in compilation to Inter
48.4% in //Sequence::undertake_queued_tasks//
4.4% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.0% in //RTPhrasebook::compile_entries//
1.8% in //ImperativeDefinitions::assess_all//
1.4% in //RTKindConstructors::compile//
1.0% in //Sequence::lint_inter//
0.6% in //MajorNodes::pass_2//
0.6% in //World::stage_V//
0.4% in //ImperativeDefinitions::compile_first_block//
0.4% in //MajorNodes::pass_2//
0.4% in //Sequence::undertake_queued_tasks//
0.4% in //Sequence::undertake_queued_tasks//
0.2% in //CompletionModule::compile//
0.2% in //InferenceSubjects::emit_all//
0.2% in //RTKindConstructors::compile_permissions//
0.2% in //Task::make_built_in_kind_constructors//
0.2% in //World::stages_II_and_III//
2.8% not specifically accounted for
25.7% in running Inter pipeline
9.9% in step 14/15: generate inform6 -> auto.inf
5.6% in step 5/15: load-binary-kits
5.2% in step 6/15: make-synoptic-module
3.1% not specifically accounted for
28.0% in running Inter pipeline
12.0% in step 14/15: generate inform6 -> auto.inf
6.1% in step 5/15: load-binary-kits
5.3% in step 6/15: make-synoptic-module
1.4% in step 9/15: make-identifiers-unique
0.4% in step 12/15: eliminate-redundant-operations
0.4% in step 4/15: compile-splats
0.4% in step 7/15: shorten-wiring
0.2% in step 11/15: eliminate-redundant-labels
0.2% in step 8/15: detect-indirect-calls
1.9% not specifically accounted for
1.5% not specifically accounted for
2.6% in supervisor
0.5% not specifically accounted for

View file

@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
{include-css}
<style type="text/css">
th,td
\{
text-align: left;
padding: 0px;
\}
table
\{
border-spacing:16px 0px;
\}
</style>
<title>Keyboard Shortcuts</title>
</head>
<body>
<p><span class="headingpaneltext">Keyboard Shortcuts</span></p>
<table>
<tr><td>Shift F1</td><td>Summon/Dismiss Launcher</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Projects</th></tr>
<tr><td>Ctrl O</td><td>Open...</td></tr>
<tr><td>Ctrl N</td><td>New Project</td></tr>
<tr><td>Alt F4</td><td>Close Project</td></tr>
<tr><td>F5</td><td>Go</td></tr>
<tr><td>F9</td><td>Replay</td></tr>
<tr><td>Ctrl R</td><td>Release</td></tr>
<tr><td>Ctrl Shift T</td><td>Go and then type "Test Me"</td></tr>
<tr><td>F7</td><td>Refresh Index</td></tr>
<tr><td>Ctrl Shift M</td><td>Open Materials Folder in Explorer</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Switching Panes</th></tr>
<tr><td>Ctrl 1</td><td>Go to Left Pane</td></tr>
<tr><td>Ctrl 2</td><td>Go to Right Pane</td></tr>
<tr><td>F6</td><td>Switch Panes</td></tr>
<tr><td>Ctrl F1</td><td>Source</td></tr>
<tr><td>Ctrl F2</td><td>Results</td></tr>
<tr><td>Ctrl F3</td><td>Story</td></tr>
<tr><td>Ctrl F4</td><td>Testing</td></tr>
<tr><td>Ctrl F5</td><td>Index</td></tr>
<tr><td>Ctrl 3</td><td>Index: Welcome Page</td></tr>
<tr><td>Ctrl 4</td><td>Index: Contents Page</td></tr>
<tr><td>Ctrl 5</td><td>Index: Actions Page</td></tr>
<tr><td>Ctrl 6</td><td>Index: Kinds Page</td></tr>
<tr><td>Ctrl 7</td><td>Index: Phrasebook Page</td></tr>
<tr><td>Ctrl 8</td><td>Index: Rules Page</td></tr>
<tr><td>Ctrl 9</td><td>Index: Scenes Page</td></tr>
<tr><td>Ctrl 0</td><td>Index: World Page</td></tr>
<tr><td>Ctrl F6</td><td>Documentation</td></tr>
<tr><td>Ctrl F7</td><td>Extensions</td></tr>
<tr><td>Ctrl F8</td><td>Settings</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Within the Source Pane</th></tr>
<tr><td>Ctrl Shift H</td><td>Show Headings</td></tr>
<tr><td>Ctrl .</td><td>Show Only This Section in Source</td></tr>
<tr><td>Ctrl /</td><td>Show More Sections in Source</td></tr>
<tr><td>Ctrl ,</td><td>Show Fewer Sections in Source</td></tr>
<tr><td>F4</td><td>Show Entire Source</td></tr>
<tr><td>Ctrl ;</td><td>Shift View to Previous Section</td></tr>
<tr><td>Ctrl '</td><td>Shift View to Next Section</td></tr>
<tr><td>Ctrl M</td><td>Renumber All Sections</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Editing the Source</th></tr>
<tr><td>Ctrl C</td><td>Copy</td></tr>
<tr><td>Ctrl V</td><td>Paste</td></tr>
<tr><td>Ctrl X</td><td>Cut</td></tr>
<tr><td>Ctrl Z</td><td>Undo</td></tr>
<tr><td>Ctrl Y</td><td>Redo</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><td>Ctrl A</td><td>Select All</td></tr>
<tr><td>Alt ]</td><td>Shift Selection Right</td></tr>
<tr><td>Alt [</td><td>Shift Selection Left</td></tr>
<tr><td>Alt /</td><td>Comment Out Selection</td></tr>
<tr><td>Alt Shift /</td><td>Uncomment Selection</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<!--<tr><td>&#8984;:</td><td>Show Spelling and Grammar</td></tr>-->
<tr><td>Ctrl G</td><td>Check Spelling</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Find</th></tr>
<tr><td>Ctrl F</td><td>Find...</td></tr>
<tr><td>F10</td><td>Find In Files...</td></tr>
<tr><td>F8</td><td>Find Next</td></tr>
<tr><td>Shift F8</td><td>Find Previous</td></tr>
<tr><td>Ctrl J</td><td>Scroll To Selection</td></tr>
<tr><td colspan=2>&nbsp;</td></tr>
<tr><th colspan=2>Application Control</th></tr>
<tr><td>Ctrl Shift N</td><td>(Inform) Preferences</td></tr>
<tr><td>Ctrl S</td><td>Save</td></tr>
<tr><td>Ctrl Shift S</td><td>Save As...</td></tr>
<!--<tr><td>&#8984;P</td><td>Print</td></tr>-->
<!--<tr><td>⇧&#8984;P</td><td>Page Setup</td></tr>-->
<tr><td>Ctrl Q</td><td>Quit</td></tr>
</td></tr>
</table>
<hr style="margin-top: 18px;">
</body>
</html>

View file

@ -0,0 +1,58 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
{include-css}
<style type="text/css">
.red
\{
color:rgb(255,0,0);
\}
</style>
<title>Materials Folder</title>
</head>
<body>
<p><span class="headingpaneltext">Materials Folder</span></p>
<p>Every project has a &quot;.materials&quot; folder, which is always stored next to it on disc. (Use Ctrl+Shift+M to show the current project's .materials in Windows Explorer.) This screenshot shows how the .materials folder would look for a project which used it in every possible way. In practice, this is very unlikely.</p>
<img src="MaterialsDiagram.png" width="275" height="403"/>
<p>Project (<span class="red">1</span>) and .materials folder (<span class="red">2</span>) live side by side in Windows Explorer: everything else here is inside .materials (<span class="red">2</span>). The author of this story decided that it should be given to players along with a PDF booklet (<span class="red">3</span>), by including this Release instruction in the source text:
<blockquote>
Release along with a file of &quot;A Guide to Arboreal Fauna&quot; called &quot;A Guide to Arboreal Fauna.pdf&quot;.
</blockquote>
<p>Every released project needs cover art. Authors have to provide two files, full-sized at 960 by 960 (<span class="red">4</span>) and reduced at 120 by 120 (<span class="red">18</span>): they can either be &quot;Cover.jpg&quot; and &quot;Small Cover.jpg&quot; or &quot;Cover.png&quot; and &quot;Small Cover.png&quot;.</p>
<p>Extensions to Inform are usually centrally installed, and available to all projects. But this project has its own private copy of &quot;Feeding Squirrels by Emily Short&quot; (<span class="red">7</span>), in its own private Extensions folder (<span class="red">5</span>). This would override any installed copy of the same extension. It has to have the correct name and .i7x ending, and it has to live inside a folder with its author's name (<span class="red">6</span>).</p>
<p>Projects which include pictures as well as text need to store the necessary images, in JPEG or PNG format, in the Figures folder (<span class="red">8</span>). This one was declared in the source text like so:</p>
<blockquote>
Figure of Red Admiral Butterfly is the file &quot;butterfly.jpg&quot;.
</blockquote>
<p>Sound effects are similar, use AIFF or OGG format, and live in Sounds (<span class="red">19</span>). There's one here (<span class="red">20</span>), declared by:</p>
<blockquote>
Sound of Rustling Leaves is the file &quot;Rustling Leaves.aiff&quot;.
</blockquote>
<p>Projects which read or write files of data as they play should have a Files folder (<span class="red">10</span>) to hold these. This one (<span class="red">11</span>) was declared by:
<blockquote>
The File of Nut Storage Locations is called &quot;nutstorage&quot;.
</blockquote>
<p>Now for some expert-only features which hardly anybody needs in practice. The I6T folder (<span class="red">12</span>) provides extra template files (<span class="red">13</span>), or indeed replacement ones (<span class="red">14</span>), and allows a project to include substantial portions of raw Inform 6 code. The Languages folder (<span class="red">16</span>) is for experimenting with language bundles, a feature still in its early stages. The Templates folder (<span class="red">21</span>) is for providing the project with a non-standard Javascript engine, called an &quot;interpreter&quot;, when it's released as a website. Here there's an intepreter called &quot;Experimental&quot; (<span class="red">22</span>) which can be selected by putting this into the source:</p>
<blockquote>
Release along with the &quot;Experimental&quot; interpreter.
</blockquote>
<p>And that just leaves the Release folder (<span class="red">17</span>). Inform creates this automatically if the project's Release button is clicked, and then writes into it whatever will eventually go out to players. So never store anything permanent here: it's intended to be just a holding area.
</p>
<hr style="margin-top: 18px;">
</body>
</html>

View file

@ -45,7 +45,7 @@
The File of Nut Storage Locations is called &quot;nutstorage&quot;.
</blockquote>
<p>Now for some expert-only features which hardly anybody needs in practice. The I6T folder (<span class="red">12</span>) provides extra template files (<span class="red">13</span>), or indeed replacement ones (<span class="red">14</span>), and allows a project to include substantial portions of raw Inform 6 code. The Languages folder (<span class="red">16</span>) is for experimenting with new language bundles, a 2014 feature still in its early stages. The Templates folder (<span class="red">21</span>) is for providing the project with a non-standard Javascript engine, called an &quot;interpreter&quot;, when it's released as a website. Here there's an intepreter called &quot;Experimental&quot; (<span class="red">22</span>) which can be selected by putting this into the source:</p>
<p>Now for some expert-only features which hardly anybody needs in practice. The I6T folder (<span class="red">12</span>) provides extra template files (<span class="red">13</span>), or indeed replacement ones (<span class="red">14</span>), and allows a project to include substantial portions of raw Inform 6 code. The Languages folder (<span class="red">16</span>) is for experimenting with language bundles, a feature still in its early stages. The Templates folder (<span class="red">21</span>) is for providing the project with a non-standard Javascript engine, called an &quot;interpreter&quot;, when it's released as a website. Here there's an intepreter called &quot;Experimental&quot; (<span class="red">22</span>) which can be selected by putting this into the source:</p>
<blockquote>
Release along with the &quot;Experimental&quot; interpreter.

View file

@ -0,0 +1,49 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
{include-css}
<title>New To Inform?</title>
</head>
<body>
<p><span class="headingpaneltext">New To Inform?</span></p>
<p>Inform is both an application and a language for creating text-based
interactive stories. Interactive fiction is an art form which evolved out of the
adventure games of the 1970s, in the same way that today's graphic novels
evolved out of the newspaper cartoons of the 1930s. Inform has been the design
tool of choice for many, indeed most, of the world's leading writers in this
genre since 1993, and is also widely used in education at a variety of levels.
It's completely free, even when used to create commercial works. Thanks for
downloading this copy, and we hope you'll enjoy it.</p>
<p>As you've seen, the app begins with a launcher panel. (Bring it back or
remove it by typing Shift+F1.) You might like to try clicking Onyx, the smallest
of the samples, under the &quot;Open a Sample Project&quot; list: it's a very
short Russian folk-tale. Inform will ask you to choose somewhere on disc to
store it, and then make a copy there. You can play with this and alter it
freely, then throw it away when you're done: it's just a copy.</p>
<p>You can have several Inform projects open at once, but each one lives in a
single window which is divided in half. The left and right sides are called
&quot;panes&quot; and you can choose what's shown in them with the side tabs: it
starts out as Source on the left, Documentation on the right.</p>
<p>Inform &quot;translates&quot; the instructions in the Source into a playable
story. To see that in action, click the Go button for the Onyx project. You'll
have to wait just a moment - an Inform project is a surprisingly complicated
thing to make, even when the instructions look short - but then the Story pane
will open, and you can type in commands as if you were the player. If you're not
sure what to type, try typing:</p>
<blockquote>
TEST ME
</blockquote>
<p>The Launcher also offers a larger sample project called &quot;Disenchantment
Bay&quot;, a story about a boat trip in Alaska. Beyond that, there are around
450 Examples in the Documentation, and by clicking on the &quot;save as
project&quot; icon you can get playable versions of all of those, too.</p>
<hr style="margin-top: 18px;">
</body>
</html>

View file

@ -0,0 +1,69 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
{include-css}
<title>Testing</title>
<script type='text/javascript'>
function showBlock(id) \{ if( document.getElementById(id) ) document.getElementById(id).style.display = 'block'; \}
function hideBlock(id) \{ if( document.getElementById(id) ) document.getElementById(id).style.display = 'none'; \}
</script>
</head>
<body onLoad="test();">
<div id="welcome"><p>Welcome to the new Testing panel. This combines the old Skein and
Transcript panels. Like them, it records every play through the story. It helps with testing
because it compares the text this time with the &quot;blessed&quot; text on previous plays. The panel
shows oval &quot;knots&quot; representing turns of play.</p></div>
<div id="title" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpStoryTitle.png"> The topmost knot is
the start position, representing the story before any choices are made.</p></div>
<div id="purple" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpPurpleKnot.png">
The purple knot marks the position reached at any given moment in the Story panel.</p></div>
<div id="grey" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpGreyKnot.png"> Each
grey knot represents a command typed in, and the text which resulted. Grey means it's not
selected: click it to select.</p></div>
<div id="blue" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpBlueKnot.png"> A blue
knot is a grey knot that has been selected. Click it again to unselect.</p></div>
<div id="report" style="content: ''; clear: both; display: table;"><p>The yellow box shows the text produced the last time the selected (blue
knot) commands were typed in. The arrows show which command led to what.</p></div>
<div id="tick" style="content: ''; clear: both; display: table;"><p>Text is automatically compared against an earlier version known to be
correct, called the &quot;blessed&quot; version.
<p><img style="float:left" src="inform://Skein/Trans-tick-off.png">&nbsp;The tick icon
is shown if that turn's text failed to match. Green highlighting shows text added since the
&quot;blessed&quot; version, red highlighting shows text removed. (All green must mean there's no
&quot;blessed&quot; version, so that all text is new.) If you agree that the current text is correct,
click the tick icon. If you don't agree, you'll need to rewrite your story to produce
different text next time.</div>
<div id="cross" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/Trans-cross-off.png">
&nbsp;The cross icon is only shown if that turn's text was correct, that is, if it exactly
matched the "blessed" version. Click the cross to "curse" the turn - that removes the blessing.</p></div>
<div id="badge" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpBadgedBlueKnot.png">
The red star on a knot means that the text definitely had a &quot;blessed&quot; version but that the
most recent play failed to match it - so this is a knot where there's a problem.</p></div>
<div id="threads" style="content: ''; clear: both; display: table;"><p>The black &quot;threads&quot; between the knots show the sequence of play. Time runs
downwards, so later turns are below earlier ones.</p></div>
<div id="knots" style="content: ''; clear: both; display: table;"><p>Once a turn is played in the Story panel, by typing in a command, another knot will appear here.</p></div>
<div id="moreknots" style="content: ''; clear: both; display: table;"><p>As more turns are played in the Story panel, more knots will appear here.</p></div>
<div id="menu" style="content: ''; clear: both; display: table;"><p><img style="float:left" src="inform://Skein/HelpGreyKnotMenu.png"> Hover the mouse over a knot to see the
pop-up menu button for it - clicking this gives more advanced options.</p></div>
<div id="welcomead" style="content: ''; clear: both; display: table;"><p>In addition to Hide/Show Help, the top of this panel has two buttons for advanced users. Save Transcript
lets you save out the text from the currently selected thread of play. Play All
systematically plays through every variation in the diagram, restarting the story
as needed to do so, so that it tests every knot.</p></div>
<hr style="margin-top: 18px;">
</body>
</html>