1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-10 04:18:09 +03:00
inform7/docs/core-module/2-pwst.html
2020-04-07 23:02:44 +01:00

491 lines
70 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>2/si</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"><b>compiler tools</b></a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul>
<h2>Compiler Webs</h2>
<ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul>
<h2>Inbuild Modules</h2>
<ul>
<li><a href="../inbuild-module/index.html">inbuild</a></li>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../html-module/index.html">html</a></li>
</ul>
<h2>Inform7 Modules</h2>
<ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../if-module/index.html">if</a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul>
<h2>Inter Modules</h2>
<ul>
<li><a href="../inter-module/index.html">inter</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</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 '2/pwst' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="../compiler.html">Compiler Modules</a></li><li><a href="index.html">core</a></li><li><a href="index.html#2">Chapter 2: Bridge to Problems Module</a></li><li><b>Problems With Source Text</b></li></ul><p class="purpose">Errors with the source text, either lexical issues or major syntactic ones, are found when Inbuild reads the text in: what this section does is to collect and issue those errors as tidy Inform problem messages.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>To trigger all of the problems listed below, test with the <code class="display"><span class="extract">:inbuild</span></code>
group.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">SourceProblems::issue_problems_arising</span><span class="plain">(</span><span class="identifier">inbuild_copy</span><span class="plain"> *</span><span class="identifier">C</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="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">copy_error</span><span class="plain"> *</span><span class="identifier">CE</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">, </span><span class="identifier">copy_error</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">errors_reading_source_text</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">error_category</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">OPEN_FAILED_CE:</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(1, </span><span class="identifier">Filenames::get_leafname</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_file</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"I can't open the file '%1' of source text. %P"</span>
<span class="string">"If you are using the 'Source' subfolder of Materials to "</span>
<span class="string">"hold your source text, maybe your 'Contents.txt' has a "</span>
<span class="string">"typo in it?"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXT_MISWORDED_CE:</span>
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">copy</span><span class="plain">-&gt;</span><span class="identifier">found_by</span><span class="plain">-&gt;</span><span class="identifier">work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMiswordedBeginsHere</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The extension %1, which your source text makes use of, seems to be "</span>
<span class="string">"damaged or incorrect: its identifying opening line is wrong. "</span>
<span class="string">"Specifically, %2."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">KIT_MISWORDED_CE:</span>
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">copy</span><span class="plain">-&gt;</span><span class="identifier">found_by</span><span class="plain">-&gt;</span><span class="identifier">work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The kit %1, which your source text makes use of, seems to be "</span>
<span class="string">"damaged or incorrect: its identifying opening line is wrong. "</span>
<span class="string">"Specifically, %2."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXT_TITLE_TOO_LONG_CE:</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = </span><span class="identifier">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">overage</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_N</span><span class="plain"> - </span><span class="identifier">MAX_EXTENSION_TITLE_LENGTH</span><span class="plain">;</span>
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">copy</span><span class="plain">-&gt;</span><span class="identifier">found_by</span><span class="plain">-&gt;</span><span class="identifier">work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_number</span><span class="plain">(2, &amp;</span><span class="identifier">max</span><span class="plain">);</span>
<span class="identifier">Problems::quote_number</span><span class="plain">(3, &amp;</span><span class="identifier">overage</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtTitleTooLong</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The extension %1, which your source text makes use of, has a "</span>
<span class="string">"title which is too long, exceeding the maximum allowed "</span>
<span class="string">"(%2 characters) by %3."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">EXT_AUTHOR_TOO_LONG_CE:</span><span class="plain"> {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max</span><span class="plain"> = </span><span class="identifier">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">overage</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_N</span><span class="plain"> - </span><span class="identifier">MAX_EXTENSION_AUTHOR_LENGTH</span><span class="plain">;</span>
<span class="functiontext">Problems::quote_work</span><span class="plain">(1, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">copy</span><span class="plain">-&gt;</span><span class="identifier">found_by</span><span class="plain">-&gt;</span><span class="identifier">work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_number</span><span class="plain">(2, &amp;</span><span class="identifier">max</span><span class="plain">);</span>
<span class="identifier">Problems::quote_number</span><span class="plain">(3, &amp;</span><span class="identifier">overage</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtAuthorTooLong</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The extension %1, which your source text makes use of, has an "</span>
<span class="string">"author name which is too long, exceeding the maximum allowed "</span>
<span class="string">"(%2 characters) by %3."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">LEXER_CE:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">error_subcategory</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STRING_TOO_LONG_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_TooMuchQuotedText</span><span class="plain">),</span>
<span class="string">"Too much text in quotation marks"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_word</span><span class="plain">,</span>
<span class="string">"...\" The maximum length is very high, so this is more "</span>
<span class="string">"likely to be because a close quotation mark was "</span>
<span class="string">"forgotten."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">WORD_TOO_LONG_LEXERERROR:</span>
<span class="plain"> </span><span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_WordTooLong</span><span class="plain">),</span>
<span class="string">"Word too long"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_word</span><span class="plain">,</span>
<span class="string">"(Individual words of unquoted text can run up to "</span>
<span class="string">"128 letters long, which ought to be plenty. The longest "</span>
<span class="string">"recognised place name in the English speaking world is "</span>
<span class="string">"a hill in New Zealand called Taumatawhakatang-"</span>
<span class="string">"ihangakoauauot-amateaturipukaka-pikimaunga-"</span>
<span class="string">"horonuku-pokaiwhenuak-itanatahu. (You say tomato, "</span>
<span class="string">"I say taumatawhakatang-...) The longest word found in a "</span>
<span class="string">"classic novel is bababadalgharaghtakamminarronnkonnbronntonn"</span>
<span class="string">"erronntuonnthunntrovarrhounawnskawntoohoohoordenenthurnuk, "</span>
<span class="string">"creation's thunderclap from Finnegan's Wake. And both of those "</span>
<span class="string">"words are fine.)"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">I6_TOO_LONG_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">Untestable</span><span class="plain">), </span><span class="comment">well, not at all conveniently</span>
<span class="string">"Verbatim Inform 6 extract too long"</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_word</span><span class="plain">,</span>
<span class="string">"... -). The maximum length is quite high, so this "</span>
<span class="string">"may be because a '-)' was forgotten. Still, if "</span>
<span class="string">"you do need to paste a huge I6 program in, try "</span>
<span class="string">"using several verbatim inclusions in a row."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">STRING_NEVER_ENDS_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingQuote</span><span class="plain">),</span>
<span class="string">"Some source text ended in the middle of quoted text"</span><span class="plain">,</span>
<span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">,</span>
<span class="string">"This probably means that a quotation mark is missing "</span>
<span class="string">"somewhere. If you are using Inform with syntax colouring, "</span>
<span class="string">"look for where the quoted-text colour starts. (Sometimes "</span>
<span class="string">"this problem turns up because a piece of quoted text contains "</span>
<span class="string">"a text substitution in square brackets which in turn contains "</span>
<span class="string">"another piece of quoted text - this is not allowed, and causes "</span>
<span class="string">"me to lose track.)"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">COMMENT_NEVER_ENDS_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingComment</span><span class="plain">),</span>
<span class="string">"Some source text ended in the middle of a comment"</span><span class="plain">,</span>
<span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">,</span>
<span class="string">"This probably means that a ']' is missing somewhere. "</span>
<span class="string">"(If you are using Inform with syntax colouring, look for "</span>
<span class="string">"where the comment colour starts.) Inform's convention on "</span>
<span class="string">"'nested comments' is that each '[' in a comment must be "</span>
<span class="string">"matched by a corresponding ']': so for instance '[This "</span>
<span class="string">"[even nested like so] acts as a comment]' is a single "</span>
<span class="string">"comment - the first ']' character matches the second '[' "</span>
<span class="string">"and so doesn't end the comment: only the second ']' ends "</span>
<span class="string">"the comment."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">I6_NEVER_ENDS_LEXERERROR:</span>
<span class="identifier">Problems::Issue::lexical_problem_S</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnendingI6</span><span class="plain">),</span>
<span class="string">"Some source text ended in the middle of a verbatim passage "</span>
<span class="string">"of Inform 6 code"</span><span class="plain">,</span>
<span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">,</span>
<span class="string">"This probably means that a '-)' is missing."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unknown lexer error"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SYNTAX_CE:</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">error_subcategory</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UnexpectedSemicolon_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnexpectedSemicolon</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 is followed by a semicolon ';', which only makes "</span>
<span class="string">"sense to me inside a rule or phrase (where there's a heading, "</span>
<span class="string">"then a colon, then a list of instructions divided by semicolons). "</span>
<span class="string">"Perhaps you want a full stop '.' instead?"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ParaEndsInColon_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ParaEndsInColon</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to end a paragraph with a colon. (Rule declarations "</span>
<span class="string">"can end a sentence with a colon, so maybe there's accidentally a "</span>
<span class="string">"skipped line here?)"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SentenceEndsInColon_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_SentenceEndsInColon</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to have a colon followed by a full stop, which is "</span>
<span class="string">"punctuation I don't understand."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SentenceEndsInSemicolon_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_SentenceEndsInSemicolon</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to have a semicolon followed by a full stop, which is "</span>
<span class="string">"punctuation I don't understand."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SemicolonAfterColon_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_SemicolonAfterColon</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to have a semicolon following a colon, which is "</span>
<span class="string">"punctuation I don't understand."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">SemicolonAfterStop_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_SemicolonAfterStop</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to have a semicolon following a full stop, which is "</span>
<span class="string">"punctuation I don't understand."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingOverLine_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(2, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">Wordings::up_to</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_N</span><span class="plain">-1)));</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(3, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">Wordings::from</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_N</span><span class="plain">)));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingOverLine</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to be a heading, but contains a "</span>
<span class="string">"line break, which is not allowed: so I am reading it "</span>
<span class="string">"as just %2 and ignoring the continuation %3. The rule "</span>
<span class="string">"is that a heading must be a single line which is the "</span>
<span class="string">"only sentence in its paragraph, so there must be a "</span>
<span class="string">"skipped line above and below."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingStopsBeforeEndOfLine_SYNERROR:</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">));</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(2,</span>
<span class="identifier">NounPhrases::new_raw</span><span class="plain">(</span><span class="identifier">Wordings::new</span><span class="plain">(</span><span class="identifier">Wordings::last_wn</span><span class="plain">(</span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">)+1, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_N</span><span class="plain">-1)));</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingStopsBeforeEndOfLine</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The text %1 seems to be a heading, but does not occupy "</span>
<span class="string">"the whole of its line of source text, which continues %2. "</span>
<span class="string">"The rule is that a heading must occupy a whole single line "</span>
<span class="string">"which is the only sentence in its paragraph, so there "</span>
<span class="string">"must be a skipped line above and below. %P"</span>
<span class="string">"A heading must not contain a colon ':' or any full stop "</span>
<span class="string">"characters '.', even if they occur in an ellipsis '...' or a "</span>
<span class="string">"number '2.3.13'. (I mention that because sometimes this problem "</span>
<span class="string">"arises when a decimal point is misread as a full stop.)"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtNoBeginsHere_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtNoBeginsHere</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has no 'begins here' sentence"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtNoEndsHere_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtNoEndsHere</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has no 'ends here' sentence"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtSpuriouslyContinues_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtSpuriouslyContinues</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"continues after the 'ends here' sentence"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtMultipleEndsHere_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMultipleEndsHere</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has more than one 'ends here' sentence"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtMultipleBeginsHere_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMultipleBeginsHere</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has more than one 'begins here' sentence"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtBeginsAfterEndsHere_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtBeginsAfterEndsHere</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has a further 'begins here' after an 'ends here'"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtEndsWithoutBegins_SYNERROR:</span>
<span class="functiontext">Problems::Issue::extension_problem</span><span class="plain">(</span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">BelievedImpossible</span><span class="plain">),</span>
<span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">),</span>
<span class="string">"has an 'ends here' with nothing having begun"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BadTitleSentence_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BadTitleSentence</span><span class="plain">),</span>
<span class="string">"the initial bibliographic sentence can only be a title in double-quotes"</span><span class="plain">,</span>
<span class="string">"possibly followed with 'by' and the name of the author."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UnknownLanguageElement_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnknownLanguageElement</span><span class="plain">),</span>
<span class="string">"this heading contains a stipulation about the current "</span>
<span class="string">"Inform language definition which I can't understand"</span><span class="plain">,</span>
<span class="string">"and should be something like '(for Glulx external files "</span>
<span class="string">"language element only)'."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UnknownVirtualMachine_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnknownVirtualMachine</span><span class="plain">),</span>
<span class="string">"this heading contains a stipulation about the Setting "</span>
<span class="string">"for story file format which I can't understand"</span><span class="plain">,</span>
<span class="string">"and should be something like '(for Z-machine version 5 "</span>
<span class="string">"or 8 only)' or '(for Glulx only)'."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UseElementWithdrawn_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UseElementWithdrawn</span><span class="plain">),</span>
<span class="string">"the ability to activate or deactivate compiler elements "</span>
<span class="string">"in source text has been withdrawn"</span><span class="plain">,</span>
<span class="string">"in favour of a new system with Inform kits."</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">IncludeExtQuoted_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_IncludeExtQuoted</span><span class="plain">),</span>
<span class="string">"the name of an included extension should be given without double "</span>
<span class="string">"quotes in an Include sentence"</span><span class="plain">,</span>
<span class="string">"so for instance 'Include Oh My God by Janice Bing.' rather than "</span>
<span class="string">"'Include \"Oh My God\" by Janice Bing.')"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">BogusExtension_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_BogusExtension</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"I can't find the extension requested by: %1. %P"</span>
<span class="string">"You can get hold of extensions which people have made public at "</span>
<span class="string">"the Inform website, www.inform7.com, or by using the Public "</span>
<span class="string">"Library in the Extensions panel."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtVersionTooLow_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtVersionTooLow</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"I can't find the right version of the extension requested by %1 - "</span>
<span class="string">"I can only find %2. %P"</span>
<span class="string">"You can get hold of extensions which people have made public at "</span>
<span class="string">"the Inform website, www.inform7.com, or by using the Public "</span>
<span class="string">"Library in the Extensions panel."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtVersionMalformed_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtVersionMalformed</span><span class="plain">),</span>
<span class="string">"a version number must have the form N/DDDDDD"</span><span class="plain">,</span>
<span class="string">"as in the example '2/040426' for release 2 made on 26 April 2004. "</span>
<span class="string">"(The DDDDDD part is optional, so '3' is a legal version number too. "</span>
<span class="string">"N must be between 1 and 999: in particular, there is no version 0.)"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtInadequateVM_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtInadequateVM</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"You wrote %1: but my copy of that extension stipulates that it "</span>
<span class="string">"is '%2'. That means it can only be used with certain of "</span>
<span class="string">"the possible compiled story file formats, and at the "</span>
<span class="string">"moment, we don't fit the requirements. (You can change "</span>
<span class="string">"the format used for this project on the Settings panel.)"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">ExtMisidentifiedEnds_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="functiontext">Problems::quote_extension</span><span class="plain">(1, </span><span class="identifier">ExtensionManager::from_copy</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">));</span>
<span class="identifier">Problems::quote_wording</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_ExtMisidentifiedEnds</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"The extension %1, which your source text makes use of, seems to be "</span>
<span class="string">"malformed: its 'begins here' sentence correctly identifies it, but "</span>
<span class="string">"then the 'ends here' sentence calls it '%2' instead. (They need "</span>
<span class="string">"to be a matching pair except that the end does not name the "</span>
<span class="string">"author: for instance, 'Hocus Pocus by Jan Ackerman begins here.' "</span>
<span class="string">"would match with 'Hocus Pocus ends here.')"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingInPlaceOfUnincluded_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_work</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfUnincluded</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
<span class="string">"of source text from the extension '%2', but no extension of that "</span>
<span class="string">"name has been included - so it is not possible to replace any of its "</span>
<span class="string">"headings."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">UnequalHeadingInPlaceOf_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::Issue::sentence_problem</span><span class="plain">(</span>
<span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_UnequalHeadingInPlaceOf</span><span class="plain">),</span>
<span class="string">"these headings are not of the same level"</span><span class="plain">,</span>
<span class="string">"so it is not possible to make the replacement. (Level here means "</span>
<span class="string">"being a Volume, Book, Part, Chapter or Section: for instance, "</span>
<span class="string">"only a Chapter heading can be used 'in place of' a Chapter.)"</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingInPlaceOfSubordinate_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(3, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node2</span><span class="plain">);</span>
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(4, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_work2</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfSubordinate</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
<span class="string">"of source text from the extension '%2', but that doesn't really make "</span>
<span class="string">"sense because this new piece of source text is part of a superior "</span>
<span class="string">"heading ('%3') which is already being replaced spliced into '%4'."</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">HeadingInPlaceOfUnknown_SYNERROR:</span>
<span class="identifier">current_sentence</span><span class="plain"> = </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_node</span><span class="plain">;</span>
<span class="identifier">Problems::quote_source</span><span class="plain">(1, </span><span class="identifier">current_sentence</span><span class="plain">);</span>
<span class="functiontext">Problems::quote_extension_id</span><span class="plain">(2, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_work</span><span class="plain">);</span>
<span class="identifier">Problems::quote_wording</span><span class="plain">(3, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details_W</span><span class="plain">);</span>
<span class="identifier">Problems::quote_stream</span><span class="plain">(4, </span><span class="identifier">CE</span><span class="plain">-&gt;</span><span class="identifier">details</span><span class="plain">);</span>
<span class="identifier">Problems::Issue::handmade_problem</span><span class="plain">(</span><span class="functiontext">Task::syntax_tree</span><span class="plain">(), </span><span class="identifier">_p_</span><span class="plain">(</span><span class="identifier">PM_HeadingInPlaceOfUnknown</span><span class="plain">));</span>
<span class="identifier">Problems::issue_problem_segment</span><span class="plain">(</span>
<span class="string">"In the sentence %1, it looks as if you intend to replace a section "</span>
<span class="string">"of source text from the extension '%2', but that extension does "</span>
<span class="string">"not seem to have any heading called '%3'. (The version I loaded "</span>
<span class="string">"was %4.)"</span><span class="plain">);</span>
<span class="identifier">Problems::issue_problem_end</span><span class="plain">();</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span>
<span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"unknown syntax error"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="identifier">default:</span><span class="plain"> </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"an unknown error occurred"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">The function SourceProblems::issue_problems_arising is used in 1/wtc (<a href="1-wtc.html#SP3">&#167;3</a>).</p>
<hr class="tocbar">
<ul class="toc"><li><a href="2-si.html">Back to 'Supplementary Issues'</a></li><li><i>(This section ends Chapter 2: Bridge to Problems Module.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
</main>
</body>
</html>