<ulclass="crumbs"><li><ahref="../webs.html">Source</a></li><li><ahref="../compiler.html">Compiler Modules</a></li><li><ahref="index.html">inbuild</a></li><li><ahref="index.html#2">Chapter 2: Conceptual Framework</a></li><li><b>Copy Errors</b></li></ul><pclass="purpose">A copy error is attached to a copy when scanning it reveals some malformation.</p>
<pclass="inwebparagraph"><aid="SP1"></a><b>§1. </b>Copies can sometimes exist in a damaged form: for example, they are purportedly
extension files but have a mangled identification line. Each copy structure
therefore has a list attached of errors which occurred in reading it.
</p>
<pclass="inwebparagraph">Each copy error has one of the following categories, and some are divided into
subcategories too. Otherwise an error has no real contents: only a ragbag of
contextual data — exactly what word it is that is too long, where the
sentence is which is mis-punctuated, and such. In every case most of these
fields are blank.
</p>
<preclass="definitions">
<spanclass="definitionkeyword">enum</span><spanclass="constant">OPEN_FAILED_CE</span><spanclass="definitionkeyword"> from </span><spanclass="constant">1</span>
<spanclass="definitionkeyword">enum</span><spanclass="constant">LEXER_CE</span><spanclass="plain"></span><spanclass="comment">an error generated by the <codeclass="display"><spanclass="extract">words</span></code> module</span>
<spanclass="definitionkeyword">enum</span><spanclass="constant">SYNTAX_CE</span><spanclass="plain"></span><spanclass="comment">an error generated by the <codeclass="display"><spanclass="extract">syntax</span></code> module, or by our reading of the tree</span>
<pclass="endnote">The function CopyErrors::new_T is used in 5/es (<ahref="5-es.html#SP2_2">§2.2</a>, <ahref="5-es.html#SP2_2_3">§2.2.3</a>, <ahref="5-es.html#SP2_2_3_2">§2.2.3.2</a>, <ahref="5-es.html#SP2_3">§2.3</a>), 5/kts (<ahref="5-kts.html#SP5">§5</a>, <ahref="5-kts.html#SP5_1">§5.1</a>, <ahref="5-kts.html#SP5_3">§5.3</a>), 6/hdn (<ahref="6-hdn.html#SP23_2">§23.2</a>), 6/inc (<ahref="6-inc.html#SP6_1_1">§6.1.1</a>, <ahref="6-inc.html#SP6_1_2">§6.1.2</a>).</p>
<pclass="endnote">The function CopyErrors::new_N is used in 5/es (<ahref="5-es.html#SP2_3">§2.3</a>), 6/st (<ahref="6-st.html#SP4">§4</a>).</p>
<pclass="endnote">The function CopyErrors::new_F is used in 5/es (<ahref="5-es.html#SP2_2">§2.2</a>), 6/st (<ahref="6-st.html#SP1">§1</a>).</p>
<pclass="endnote">The function CopyErrors::supply_wording is used in 6/st (<ahref="6-st.html#SP4">§4</a>), 6/hdn (<ahref="6-hdn.html#SP23_2">§23.2</a>), 6/inc (<ahref="6-inc.html#SP11">§11</a>).</p>
<pclass="endnote">The function CopyErrors::supply_work is used in 6/hdn (<ahref="6-hdn.html#SP23_1">§23.1</a>, <ahref="6-hdn.html#SP23_2">§23.2</a>).</p>
<pclass="endnote">The function CopyErrors::supply_works is used in 6/hdn (<ahref="6-hdn.html#SP24_1">§24.1</a>).</p>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">OPEN_FAILED_CE:</span><spanclass="plain"></span><spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"unable to open file %f"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details_file</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">KIT_MISWORDED_CE:</span><spanclass="plain"></span><spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"kit has incorrect metadata: %S"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">EXT_TITLE_TOO_LONG_CE:</span><spanclass="plain"></span><spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"title too long: %d characters (max is %d)"</span><spanclass="plain">,</span>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">EXT_AUTHOR_TOO_LONG_CE:</span><spanclass="plain"></span><spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"author name too long: %d characters (max is %d)"</span><spanclass="plain">,</span>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">LEXER_CE:</span><spanclass="plain"></span><<spanclass="cwebmacro">Write a lexer error</span><spanclass="cwebmacronumber">5.1</span>><spanclass="plain">; </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="reserved">case</span><spanclass="plain"></span><spanclass="identifier">SYNTAX_CE:</span><spanclass="plain"></span><<spanclass="cwebmacro">Write a syntax error</span><spanclass="cwebmacronumber">5.2</span>><spanclass="plain">; </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<pclass="endnote">The function CopyErrors::write is used in 2/cps (<ahref="2-cps.html#SP5">§5</a>), 7/ec (<ahref="7-ec.html#SP5">§5</a>).</p>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"Too much text in quotation marks: %w"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details_word</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"Quoted text never ends: %S"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"Square-bracketed text never ends: %S"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"I6 inclusion text never ends: %S"</span><spanclass="plain">, </span><spanclass="identifier">CE</span><spanclass="plain">-></span><spanclass="element">details</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"unexpected semicolon in sentence"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"paragraph ends with a colon"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"paragraph ends with a colon and full stop"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"paragraph ends with a semicolon and full stop"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"paragraph ends with a colon and semicolon"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"paragraph ends with a full stop and semicolon"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading contains a line break"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading stops before end of line"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension has no beginning"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension has no end"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension continues after end"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension has a 'begins here' after its 'ends here'"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension has an 'ends here' but no 'begins here'"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"bibliographic sentence at the start is malformed"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"unrecognised stipulation about Inform language elements"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"use language element is no longer supported"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension name should not be double-quoted"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"can't find this extension"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension version too low"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension version is malformed"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension is not compatible with the target virtual machine"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"extension has an 'ends here' which doesn't match the 'begins here'"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading is in place of an extension not included"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading is in place of another heading but of a diffeent level"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading is in place of another heading subordinate to itself"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>
<spanclass="identifier">WRITE</span><spanclass="plain">(</span><spanclass="string">"heading is in place of another heading which doesn't exist'"</span><spanclass="plain">); </span><spanclass="reserved">break</span><spanclass="plain">;</span>