Diff for /Amaya/doc/languages.html between versions 1.17 and 1.18

version 1.17, 1997/12/30 17:22:38 version 1.18, 1998/04/03 10:40:51
Line 1 Line 1
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 <HTML>  <html>
 <HEAD>  <head>
 <TITLE>The Languages of Thot</TITLE>  <title>
 </HEAD>  The Languages of Thot</title>
 <BODY>  </head>
   <body>
 <DIV class="frontmatter" align=center>  
 <H1>The Languages of Thot</H1>  <div class="frontmatter" align=center>
   
 <H3>Vincent Quint</H3>  <h1>The Languages of Thot</h1>
   
 <H4>Translated from French by Ethan Munson</H4>  <h3>Vincent Quint</h3>
   
 <H4>Version of December 29, 1997</H4>  <h4>Translated from French by Ethan Munson</h4>
   
 <P>&copy; 1996 INRIA  <h4>Version of March, 1998</h4>
   <p>
 <HR>  &copy; 1996 INRIA</p>
 </DIV>  <hr>
   </div>
 <DIV class="tableofcontents">  
 <H2><A href="languages.toc.html">Contents</A></H2>  <div class="tableofcontents">
 <UL>  
 <LI><BIG><A href="#sect2">The document model of Thot</A></BIG>  <h2><a href="languages.toc.html">Contents</a></h2>
   <UL>  <ul>
   <LI><STRONG><A href="#sectb21">The logical structure of documents</A></STRONG>  <li>
   <LI><STRONG><A href="#sectb22">Generic and specific structures</A></STRONG>  <big><a href="#sect2">The document model of Thot</a></big>
   <LI><STRONG><A href="#sectb23">Logical structure and physical structure</A></STRONG>  <ul>
   <LI><STRONG><A href="#sectb24">Document structures and object structures</A></STRONG>  <li>
   </UL>  <strong><a href="#sectb21">The logical structure of documents</a></strong>
   <li>
 <LI><BIG><A href="#sect3">The S language</A></BIG>  <strong><a href="#sectb22">Generic and specific structures</a></strong>
   <UL>  <li>
   <LI><STRONG><A href="#sectb31">Document meta-structure</A></STRONG>  <strong><a href="#sectb23">Logical structure and physical
     <UL>  structure</a></strong>
     <LI><A href="#sectc311">The basic types</A>  <li>
     <LI><A href="#sectc312">Constructed elements</A>  <strong><a href="#sectb24">Document structures and object
     <LI><A href="#sectc313">Logical structure constructors</A>  structures</a></strong>
       <UL>  </ul>
       <LI><SMALL><A href="#sectd3131">Aggregate and List</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd3132">Choice, Schema, and Unit</A></SMALL>  <big><a href="#sect3">The S language</a></big>
       <LI><SMALL><A href="#sectd3133">Reference and Inclusion</A></SMALL>  <ul>
       <LI><SMALL><A href="#sectd3134">Mark pairs</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd3135">Restrictions and Extensions</A></SMALL>  <strong><a href="#sectb31">Document meta-structure</a></strong>
       <LI><SMALL><A href="#sectd3136">Summary</A></SMALL>  <ul>
       </UL>  <li>
     <LI><A href="#sectc314">Associated Elements</A>  <a href="#sectc311">The basic types</a>
     <LI><A href="#sectc315">Attributes</A>  <li>
     <LI><A href="#sectc316">Discussion of the model</A>  <a href="#sectc312">Constructed elements</a>
     </UL>  <li>
   <LI><STRONG><A href="#sectb32">The definition language for generic structures</A></STRONG>  <a href="#sectc313">Logical structure constructors</a>
     <UL>  <ul>
     <LI><A href="#sectc321">Writing Conventions</A>  <li>
     <LI><A href="#sectc322">Extension schemas</A>  <small><a href="#sectd3131">Aggregate and List</a></small>
     <LI><A href="#sectc323">The general organization of structure schemas</A>  <li>
     <LI><A href="#sectc324">The default presentation</A>  <small><a href="#sectd3132">Choice, Schema, and Unit</a></small>
     <LI><A href="#sectc325">Global Attributes</A>  <li>
     <LI><A href="#sectc326">Parameters</A>  <small><a href="#sectd3133">Reference and Inclusion</a></small>
     <LI><A href="#sectc327">Structured elements</A>  <li>
     <LI><A href="#sectc328">Structure definitions</A>  <small><a href="#sectd3134">Mark pairs</a></small>
       <UL>  <li>
       <LI><SMALL><A href="#sectd3281">List</A></SMALL>  <small><a href="#sectd3135">Restrictions and Extensions</a></small>
       <LI><SMALL><A href="#sectd3282">Aggregate</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd3283">Choice</A></SMALL>  <small><a href="#sectd3136">Summary</a></small>
       <LI><SMALL><A href="#sectd3284">Reference</A></SMALL>  </ul>
       <LI><SMALL><A href="#sectd3285">Mark pairs</A></SMALL>  <li>
       </UL>  <a href="#sectc314">Associated Elements</a>
     <LI><A href="#sectc329">Imports</A>  <li>
     <LI><A href="#sectc3210">Extension rules</A>  <a href="#sectc315">Attributes</a>
     <LI><A href="#sectc3211">Associated elements</A>  <li>
     <LI><A href="#sectc3212">Units</A>  <a href="#sectc316">Discussion of the model</a>
     <LI><A href="#sectc3213">Skeleton elements</A>  </ul>
     <LI><A href="#sectc3214">Exceptions</A>  <li>
     </UL>  <strong><a href="#sectb32">The definition language for generic
   <LI><STRONG><A href="#sectb33">Some examples</A></STRONG>  structures</a></strong>
     <UL>  <ul>
     <LI><A href="#sectc331">A class of documents: articles</A>  <li>
     <LI><A href="#sectc332">A class of objects: mathematical formulas</A>  <a href="#sectc321">Writing Conventions</a>
     </UL>  <li>
   </UL>  <a href="#sectc322">Extension schemas</a>
   <li>
 <LI><BIG><A href="#sect4">The P language</A></BIG>  <a href="#sectc323">The general organization of structure schemas</a>
   <UL>  <li>
   <LI><STRONG><A href="#sectb41">Document presentation</A></STRONG>  <a href="#sectc324">The default presentation</a>
     <UL>  <li>
     <LI><A href="#sectc411">Two levels of presentation</A>  <a href="#sectc325">Global Attributes</a>
     <LI><A href="#sectc412">Boxes</A>  <li>
     <LI><A href="#sectc413">Views and visibility</A>  <a href="#sectc326">Parameters</a>
     <LI><A href="#sectc414">Pages</A>  <li>
     <LI><A href="#sectc415">Numbering</A>  <a href="#sectc327">Structured elements</a>
     <LI><A href="#sectc416">Presentation parameters</A>  <li>
     </UL>  <a href="#sectc328">Structure definitions</a>
   <LI><STRONG><A href="#sectb42">Presentation description language</A></STRONG>  <ul>
     <UL>  <li>
     <LI><A href="#sectc421">The organization of a presentation schema</A>  <small><a href="#sectd3281">List</a></small>
     <LI><A href="#sectc422">Views</A>  <li>
     <LI><A href="#sectc423">Print Views</A>  <small><a href="#sectd3282">Aggregate</a></small>
     <LI><A href="#sectc424">Counters</A>  <li>
     <LI><A href="#sectc425">Presentation constants</A>  <small><a href="#sectd3283">Choice</a></small>
     <LI><A href="#sectc426">Variables</A>  <li>
     <LI><A href="#sectc427">Default presentation rules</A>  <small><a href="#sectd3284">Reference</a></small>
     <LI><A href="#sectc428">Presentation and page layout boxes</A>  <li>
     <LI><A href="#sectc429">Presentation of structured elements</A>  <small><a href="#sectd3285">Mark pairs</a></small>
     <LI><A href="#sectc4210">Logical attribute presentation</A>  </ul>
     <LI><A href="#sectc4212">Value transmission rules</A>  <li>
     <LI><A href="#sectc4213">Presentation rules</A>  <a href="#sectc329">Imports</a>
     <LI><A href="#sectc4214">Conditions applying to presentation rules</A>  <li>
       <UL>  <a href="#sectc3210">Extension rules</a>
       <LI><SMALL><A href="#sectd42141">Conditions based on the logical position of the element</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42142">Conditions on references</A></SMALL>  <a href="#sectc3211">Associated elements</a>
       <LI><SMALL><A href="#sectd42143">Conditions on logical attributes</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42144">Conditions on page breaks</A></SMALL>  <a href="#sectc3212">Units</a>
       <LI><SMALL><A href="#sectd42145">Conditions on the element's content</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42146">Conditions on counters</A></SMALL>  <a href="#sectc3213">Skeleton elements</a>
       </UL>  <li>
     <LI><A href="#sectc4215">A presentation rule</A>  <a href="#sectc3214">Exceptions</a>
     <LI><A href="#sectc4216">Box axes</A>  </ul>
     <LI><A href="#sectc4217">Distance units</A>  <li>
     <LI><A href="#sectc4218">Relative positions</A>  <strong><a href="#sectb33">Some examples</a></strong>
     <LI><A href="#sectc4219">Box extents</A>  <ul>
       <UL>  <li>
       <LI><SMALL><A href="#sectd42191">Fixed extents</A></SMALL>  <a href="#sectc331">A class of documents: articles</a>
       <LI><SMALL><A href="#sectd42192">Relative extents</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42193">Elastic extents</A></SMALL>  <a href="#sectc332">A class of objects: mathematical formulas</a>
       </UL>  </ul>
     <LI><A href="#sectc4220">Overflow</A>  </ul>
     <LI><A href="#sectc4221">Inheritance</A>  <li>
     <LI><A href="#sectc4222">Line breaking</A>  <big><a href="#sect4">The P language</a></big>
       <UL>  <ul>
       <LI><SMALL><A href="#sectd42221">Line spacing</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42222">First line indentation</A></SMALL>  <strong><a href="#sectb41">Document presentation</a></strong>
       <LI><SMALL><A href="#sectd42223">Alignment</A></SMALL>  <ul>
       <LI><SMALL><A href="#sectd42224">Justification</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42225">Hyphenation</A></SMALL>  <a href="#sectc411">Two levels of presentation</a>
       <LI><SMALL><A href="#sectd42226">Avoiding line breaking</A></SMALL>  <li>
       </UL>  <a href="#sectc412">Boxes</a>
     <LI><A href="#sectc4223">Page breaking and line breaking conditions</A>  <li>
     <LI><A href="#sectc4224">Visibility</A>  <a href="#sectc413">Views and visibility</a>
     <LI><A href="#sectc4225">Character style parameters</A>  <li>
       <UL>  <a href="#sectc414">Pages</a>
       <LI><SMALL><A href="#sectd42251">Character size</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd42252">Font and character style</A></SMALL>  <a href="#sectc415">Numbering</a>
       <LI><SMALL><A href="#sectd42253">Underlining</A></SMALL>  <li>
       </UL>  <a href="#sectc416">Presentation parameters</a>
     <LI><A href="#sectc4226">Stacking order</A>  </ul>
     <LI><A href="#sectc4227">Line style</A>  <li>
     <LI><A href="#sectc4228">Line thickness</A>  <strong><a href="#sectb42">Presentation description language</a></strong>
     <LI><A href="#sectc4229">Fill pattern</A>  <ul>
     <LI><A href="#sectc4230">Colors</A>  <li>
     <LI><A href="#sectc4230a">Background color and border</A>  <a href="#sectc421">The organization of a presentation schema</a>
     <LI><A href="#sectc4230b">Background pictures</A>  <li>
     <LI><A href="#sectc4231">Presentation box content</A>  <a href="#sectc422">Views</a>
     <LI><A href="#sectc4232">Presentation box creation</A>  <li>
     <LI><A href="#sectc4233">Page layout</A>  <a href="#sectc423">Print Views</a>
     <LI><A href="#sectc4234">Box copies</A>  <li>
     </UL>  <a href="#sectc424">Counters</a>
   </UL>  <li>
   <a href="#sectc425">Presentation constants</a>
 <LI><BIG><A href="#sect5">The T language</A></BIG>  <li>
   <UL>  <a href="#sectc426">Variables</a>
   <LI><STRONG><A href="#sectb51">Document translation</A></STRONG>  <li>
     <UL>  <a href="#sectc427">Default presentation rules</a>
     <LI><A href="#sectc511">Translation principles</A>  <li>
     <LI><A href="#sectc512">Translation procedure</A>  <a href="#sectc428">Presentation and page layout boxes</a>
     </UL>  <li>
   <LI><STRONG><A href="#sectb52">Translation definition language</A></STRONG>  <a href="#sectc429">Presentation of structured elements</a>
     <UL>  <li>
     <LI><A href="#sectc521">Organization of a translation schema</A>  <a href="#sectc4210">Logical attribute presentation</a>
     <LI><A href="#sectc522">Line length</A>  <li>
     <LI><A href="#sectc523">Buffers</A>  <a href="#sectc4212">Value transmission rules</a>
     <LI><A href="#sectc524">Counters</A>  <li>
     <LI><A href="#sectc525">Constants</A>  <a href="#sectc4213">Presentation rules</a>
     <LI><A href="#sectc526">Variables</A>  <li>
     <LI><A href="#sectc527">Translating structure elements</A>  <a href="#sectc4214">Conditions applying to presentation rules</a>
     <LI><A href="#sectc528">Conditional rules</A>  <ul>
       <UL>  <li>
       <LI><SMALL><A href="#sectd5281">Conditions based on the logical position of the element</A></SMALL>  <small><a href="#sectd42141">Conditions based on the logical position of the
       <LI><SMALL><A href="#sectd5282">Conditions on references</A></SMALL>  element</a></small>
       <LI><SMALL><A href="#sectd5283">Conditions on the parameters</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd5284">Conditions on the alphabets</A></SMALL>  <small><a href="#sectd42142">Conditions on references</a></small>
       <LI><SMALL><A href="#sectd5285">Conditions on page breaks</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd5286">Conditions on the element's content</A></SMALL>  <small><a href="#sectd42143">Conditions on logical attributes</a></small>
       <LI><SMALL><A href="#sectd5287">Conditions on the presence of comments</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd5288">Conditions on the presence of specific presentation rules</A></SMALL>  <small><a href="#sectd42144">Conditions on page breaks</a></small>
       <LI><SMALL><A href="#sectd5289">Conditions on the presence of logical attributes</A></SMALL>  <li>
       <LI><SMALL><A href="#sectd52810">Conditions on logical attributes</A></SMALL>  <small><a href="#sectd42145">Conditions on the element's content</a></small>
       <LI><SMALL><A href="#sectd52811">Conditions on specific presentation rules</A></SMALL>  <li>
       </UL>  <small><a href="#sectd42146">Conditions on counters</a></small>
     <LI><A href="#sectc529">Translation rules</A>  </ul>
     <LI><A href="#sectc5210">The <TT>Create</TT> rule</A>  <li>
     <LI><A href="#sectc5211">The <TT>Write</TT> rule</A>  <a href="#sectc4215">A presentation rule</a>
     <LI><A href="#sectc5212">The <TT>Read</TT> rule</A>  <li>
     <LI><A href="#sectc5213">The <TT>Include</TT> rule</A>  <a href="#sectc4216">Box axes</a>
     <LI><A href="#sectc5214">The <TT>Get</TT> rule</A>  <li>
     <LI><A href="#sectc5215">The <TT>Copy</TT> rule</A>  <a href="#sectc4217">Distance units</a>
     <LI><A href="#sectc5216">The <TT>Use</TT> rule</A>  <li>
     <LI><A href="#sectc5217">The <TT>Remove</TT> rule</A>  <a href="#sectc4218">Relative positions</a>
     <LI><A href="#sectc5218">The <TT>NoTranslation</TT> rule</A>  <li>
     <LI><A href="#sectc5219">The <TT>NoLineBreak</TT> rule</A>  <a href="#sectc4219">Box extents</a>
     <LI><A href="#sectc5220">The <TT>ChangeMainFile</TT> rule</A>  <ul>
     <LI><A href="#sectc5220a">The <TT>RemoveFile</TT> rule</A>  <li>
     <LI><A href="#sectc5221">The <TT>Set</TT> and <TT>Add</TT> rules</A>  <small><a href="#sectd42191">Fixed extents</a></small>
     <LI><A href="#sectc5221a">The <TT>Indent</TT> rule</A>  <li>
     <LI><A href="#sectc5222">Rule application order</A>  <small><a href="#sectd42192">Relative extents</a></small>
     <LI><A href="#sectc5223">Translation of logical attributes</A>  <li>
     <LI><A href="#sectc5224">Translation of specific presentations</A>  <small><a href="#sectd42193">Elastic extents</a></small>
     <LI><A href="#sectc5225">Recoding of characters, symbols and graphics</A>  </ul>
     </UL>  <li>
   </UL>  <a href="#sectc4220">Overflow</a>
   <li>
 <LI><BIG><A href="#sect6">Language grammars</A></BIG>  <a href="#sectc4221">Inheritance</a>
   <UL>  <li>
   <LI><STRONG><A href="#sectb61">The M meta-language</A></STRONG>  <a href="#sectc4222">Line breaking</a>
   <LI><STRONG><A href="#sectb62">The S language</A></STRONG>  <ul>
   <LI><STRONG><A href="#sectb63">The P language</A></STRONG>  <li>
   <LI><STRONG><A href="#sectb64">The T language</A></STRONG>  <small><a href="#sectd42221">Line spacing</a></small>
   </UL>  <li>
   <small><a href="#sectd42222">First line indentation</a></small>
 <LI><BIG><A href="#sect7">Character coding</A></BIG>  <li>
   <UL>  <small><a href="#sectd42223">Alignment</a></small>
   <LI><STRONG><A href="#sectb71">Characters</A></STRONG>  <li>
   <LI><STRONG><A href="#sectb72">Symbols</A></STRONG>  <small><a href="#sectd42224">Justification</a></small>
   <LI><STRONG><A href="#sectb73">Graphical elements</A></STRONG>  <li>
   </UL>  <small><a href="#sectd42225">Hyphenation</a></small>
 </UL>  <li>
 <HR>  <small><a href="#sectd42226">Avoiding line breaking</a></small>
 </DIV>  </ul>
   <li>
   <a href="#sectc4223">Page breaking and line breaking conditions</a>
   <li>
   <a href="#sectc4224">Visibility</a>
   <li>
   <a href="#sectc4225">Character style parameters</a>
   <ul>
   <li>
   <small><a href="#sectd42251">Character size</a></small>
   <li>
   <small><a href="#sectd42252">Font and character style</a></small>
   <li>
   <small><a href="#sectd42253">Underlining</a></small>
   </ul>
   <li>
   <a href="#sectc4226">Stacking order</a>
   <li>
   <a href="#sectc4227">Line style</a>
   <li>
   <a href="#sectc4228">Line thickness</a>
   <li>
   <a href="#sectc4229">Fill pattern</a>
   <li>
   <a href="#sectc4230">Colors</a>
   <li>
   <a href="#sectc4230a">Background color and border</a>
   <li>
   <a href="#sectc4230b">Background pictures</a>
   <li>
   <a href="#sectc4231">Presentation box content</a>
   <li>
   <a href="#sectc4232">Presentation box creation</a>
   <li>
   <a href="#sectc4233">Page layout</a>
   <li>
   <a href="#sectc4234">Box copies</a>
   </ul>
   </ul>
   <li>
   <big><a href="#sect5">The T language</a></big>
   <ul>
   <li>
   <strong><a href="#sectb51">Document translation</a></strong>
   <ul>
   <li>
   <a href="#sectc511">Translation principles</a>
   <li>
   <a href="#sectc512">Translation procedure</a>
   </ul>
   <li>
   <strong><a href="#sectb52">Translation definition language</a></strong>
   <ul>
   <li>
   <a href="#sectc521">Organization of a translation schema</a>
   <li>
   <a href="#sectc522">Line length</a>
   <li>
   <a href="#sectc523">Buffers</a>
   <li>
   <a href="#sectc524">Counters</a>
   <li>
   <a href="#sectc525">Constants</a>
   <li>
   <a href="#sectc526">Variables</a>
   <li>
   <a href="#sectc527">Translating structure elements</a>
   <li>
   <a href="#sectc528">Conditional rules</a>
   <ul>
   <li>
   <small><a href="#sectd5281">Conditions based on the logical position of the
   element</a></small>
   <li>
   <small><a href="#sectd5282">Conditions on references</a></small>
   <li>
   <small><a href="#sectd5283">Conditions on the parameters</a></small>
   <li>
   <small><a href="#sectd5284">Conditions on the alphabets</a></small>
   <li>
   <small><a href="#sectd5285">Conditions on page breaks</a></small>
   <li>
   <small><a href="#sectd5286">Conditions on the element's content</a></small>
   <li>
   <small><a href="#sectd5287">Conditions on the presence of comments</a></small>
   <li>
   <small><a href="#sectd5288">Conditions on the presence of specific
   presentation rules</a></small>
   <li>
   <small><a href="#sectd5289">Conditions on the presence of logical
   attributes</a></small>
   <li>
   <small><a href="#sectd52810">Conditions on logical attributes</a></small>
   <li>
   <small><a href="#sectd52811">Conditions on specific presentation
   rules</a></small>
   </ul>
   <li>
   <a href="#sectc529">Translation rules</a>
   <li>
   <a href="#sectc5210">The <tt>Create</tt> rule</a>
   <li>
   <a href="#sectc5211">The <tt>Write</tt> rule</a>
   <li>
   <a href="#sectc5212">The <tt>Read</tt> rule</a>
   <li>
   <a href="#sectc5213">The <tt>Include</tt> rule</a>
   <li>
   <a href="#sectc5214">The <tt>Get</tt> rule</a>
   <li>
   <a href="#sectc5215">The <tt>Copy</tt> rule</a>
   <li>
   <a href="#sectc5216">The <tt>Use</tt> rule</a>
   <li>
   <a href="#sectc5217">The <tt>Remove</tt> rule</a>
   <li>
   <a href="#sectc5218">The <tt>NoTranslation</tt> rule</a>
   <li>
   <a href="#sectc5219">The <tt>NoLineBreak</tt> rule</a>
   <li>
   <a href="#sectc5220">The <tt>ChangeMainFile</tt> rule</a>
   <li>
   <a href="#sectc5220a">The <tt>RemoveFile</tt> rule</a>
   <li>
   <a href="#sectc5221">The <tt>Set</tt> and <tt>Add</tt> rules</a>
   <li>
   <a href="#sectc5221a">The <tt>Indent</tt> rule</a>
   <li>
   <a href="#sectc5222">Rule application order</a>
   <li>
   <a href="#sectc5223">Translation of logical attributes</a>
   <li>
   <a href="#sectc5224">Translation of specific presentations</a>
   <li>
   <a href="#sectc5225">Recoding of characters, symbols and graphics</a>
   </ul>
   </ul>
   <li>
   <big><a href="#sect6">Language grammars</a></big>
   <ul>
   <li>
   <strong><a href="#sectb61">The M meta-language</a></strong>
   <li>
   <strong><a href="#sectb62">The S language</a></strong>
   <li>
   <strong><a href="#sectb63">The P language</a></strong>
   <li>
   <strong><a href="#sectb64">The T language</a></strong>
   </ul>
   <li>
   <big><a href="#sect7">Character coding</a></big>
   <ul>
   <li>
   <strong><a href="#sectb71">Characters</a></strong>
   <li>
   <strong><a href="#sectb72">Symbols</a></strong>
   <li>
   <strong><a href="#sectb73">Graphical elements</a></strong>
   </ul>
   </ul>
   <hr>
   </div>
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect2>The document model of Thot</A></H1>  
   
 <P>  <h1><a name="sect2">The document model of Thot</a></h1>
   <p>
 All of the services which Thot provides to the user are based on the system's  All of the services which Thot provides to the user are based on the system's
 internal document representation.  This representation is itself derived from  internal document representation.  This representation is itself derived from
 the document model which underlies Thot.  The model is presented here, prior  the document model which underlies Thot.  The model is presented here, prior
 to the description of the languages which permit the generic specification of  to the description of the languages which permit the generic specification of
 documents.</P>  documents.</p>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb21>The logical structure of documents</A></H2>  
   
 <P>  <h2><a name="sectb21">The logical structure of documents</a></h2>
   <p>
 The document model of Thot is primarily designed to allow the user to operate  The document model of Thot is primarily designed to allow the user to operate
 on those entities which s/he has in mind when s/he works on a document. The  on those entities which s/he has in mind when s/he works on a document. The
 model makes no assumptions about the nature of these entities. It is  model makes no assumptions about the nature of these entities. It is
 essentially these logical entities, such as paragraphs, sections, chapters,  essentially these logical entities, such as paragraphs, sections, chapters,
 notes, titles, and cross-references which give a document its logical  notes, titles, and cross-references which give a document its logical
 structure.</P>  structure.</p>
 <P>  <p>
 Because of this model, the author can divide the document into chapters,  Because of this model, the author can divide the document into chapters,
 giving each one a title.  The content of these chapters can be further divided  giving each one a title.  The content of these chapters can be further divided
 into sections, subsections, etc.  The text is organized into successive  into sections, subsections, etc.  The text is organized into successive
Line 255  paragraphs, according to the content. In Line 416  paragraphs, according to the content. In
 margins, spacing, fonts, and character styles are not very important. In fact,  margins, spacing, fonts, and character styles are not very important. In fact,
 if the system requires documents to be written in these terms, it gets in the  if the system requires documents to be written in these terms, it gets in the
 way. So, Thot's model is primarily based on the logical aspect of documents.  way. So, Thot's model is primarily based on the logical aspect of documents.
 The creation of a model of this type essentially requires the definition :</P>  The creation of a model of this type essentially requires the definition :</p>
 <UL>  <ul>
 <LI>of the entities which can appear in the documents,  <li>
 <LI>and the relations between these entities.  of the entities which can appear in the documents,
 </UL>  <li>
 <P>  and the relations between these entities.
   </ul>
   <p>
 The choice of entities to include in the model can be subtle.  Some documents  The choice of entities to include in the model can be subtle.  Some documents
 require chapters, while others only need various levels of sections. Certain  require chapters, while others only need various levels of sections. Certain
 documents contain appendices, others don't.  In different documents the same  documents contain appendices, others don't.  In different documents the same
 logical entity may go by different names (e.g. ``Conclusion'' and  logical entity may go by different names (e.g. ``Conclusion'' and
 ``Summary'').  Certain entities which are absolutely necessary in some  ``Summary'').  Certain entities which are absolutely necessary in some
 documents, such as clauses in a contract or the address of the recipient in a  documents, such as clauses in a contract or the address of the recipient in a
 letter, are useless in most other cases.</P>  letter, are useless in most other cases.</p>
 <P>  <p>
 The differences between documents result from more than just the entities that  The differences between documents result from more than just the entities that
 appear in them, but also from the relationships between these entities and the  appear in them, but also from the relationships between these entities and the
 ways that they are linked.  In certain documents, notes are spread throughout  ways that they are linked.  In certain documents, notes are spread throughout
Line 277  cross-reference to them, while in other Line 440  cross-reference to them, while in other
 end of each chapter or even at the end of the work.  As another example, the  end of each chapter or even at the end of the work.  As another example, the
 introduction of some documents can contain many sections, while in other  introduction of some documents can contain many sections, while in other
 documents, the introduction is restricted to be a short sequence of  documents, the introduction is restricted to be a short sequence of
 paragraphs.</P>  paragraphs.</p>
 <P>  <p>
 All of this makes it unlikely that a single model can describe any document at  All of this makes it unlikely that a single model can describe any document at
 a relatively high level.  It is obviously tempting to make up a list of widely  a relatively high level.  It is obviously tempting to make up a list of widely
 used entities, such as chapters, sections, paragraphs, and titles, and then  used entities, such as chapters, sections, paragraphs, and titles, and then
Line 294  include introductions in the list of sup Line 457  include introductions in the list of sup
 one distinguish those introductions which are allowed to have sections from  one distinguish those introductions which are allowed to have sections from
 those which are not.  Perhaps this could be done by defining two types of  those which are not.  Perhaps this could be done by defining two types of
 introduction. Clearly, this approach risks an infinite expansion of the list  introduction. Clearly, this approach risks an infinite expansion of the list
 of widely used entities.</P>  of widely used entities.</p>
 </DIV>  </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb22>Generic and specific structures</A></H2>  
   
 <P>  <h2><a name="sectb22">Generic and specific structures</a></h2>
   <p>
 Thus, it is apparently impossible to construct an exhaustive inventory of all  Thus, it is apparently impossible to construct an exhaustive inventory of all
 those entities which are necessary and sufficient to precisely describe any  those entities which are necessary and sufficient to precisely describe any
 document. It also seems impossible to specify all possible arrangements of  document. It also seems impossible to specify all possible arrangements of
 these entities in a document.  This is why Thot uses a <EM>meta-model</EM>  these entities in a document.  This is why Thot uses a <em>meta-model</em>
 instead, which permits the description of numerous <EM>models</EM>, each one  instead, which permits the description of numerous <em>models</em>, each one
 describing a <EM>class</EM> of documents.</P>  describing a <em>class</em> of documents.</p>
 <P>  <p>
 A <EM>class</EM> is a set of documents having very similar structure. Thus,  A <em>class</em> is a set of documents having very similar structure. Thus,
 the collection of research reports published by a laboratory constitutes a  the collection of research reports published by a laboratory constitutes a
 class; the set of commercial proposals by the sales department of a company  class; the set of commercial proposals by the sales department of a company
 constitutes another class; the set of articles published by a journal  constitutes another class; the set of articles published by a journal
 constitutes a third class.  Clearly, it is not possible to enumerate every  constitutes a third class.  Clearly, it is not possible to enumerate every
 possible document class.  It is also clear that new document classes must be  possible document class.  It is also clear that new document classes must be
 created to satisfy new needs and applications.</P>  created to satisfy new needs and applications.</p>
 <P>  <p>
 To give a more rigorous definition of classes, we must introduce the ideas of  To give a more rigorous definition of classes, we must introduce the ideas of
 <EM>generic structure</EM> and <EM>specific structure</EM>.  Each document has  <em>generic structure</em> and <em>specific structure</em>.  Each document has
 a <EM>specific structure</EM> which organizes the various parts which comprise  a <em>specific structure</em> which organizes the various parts which comprise
 it.  We illustrate this with the help of a simple example comparing two  it.  We illustrate this with the help of a simple example comparing two
 reports, A and B (<A href="#specstruct">see Figure</A>). The report A contains  reports, A and B (<a href="#specstruct">see Figure</a>). The report A contains
 an introduction followed by three chapters and a conclusion.  The first  an introduction followed by three chapters and a conclusion.  The first
 chapter contains two sections, the second, three sections.  That is the  chapter contains two sections, the second, three sections.  That is the
 <EM>specific</EM> structure of document A. Similarly, the structure of  <em>specific</em> structure of document A. Similarly, the structure of
 document B is: an introduction, two chapters, a conclusion; Chapter 1 has  document B is: an introduction, two chapters, a conclusion; Chapter 1 has
 three sections while Chapter 2 has four.  The specific structures of these two  three sections while Chapter 2 has four.  The specific structures of these two
 documents are thus different.</P>  documents are thus different.</p>
   
 <DIV class="figure">  <div class="figure">
 <HR>  <hr>
 <PRE>  <pre>        Report A                 Report B
         Report A                 Report B  
              Introduction              Introduction               Introduction              Introduction
              Chapter 1                 Chapter 1               Chapter 1                 Chapter 1
                   Section 1.1               Section 1.1                    Section 1.1               Section 1.1
Line 342  documents are thus different.</P> Line 504  documents are thus different.</P>
                   Section 2.3               Section 2.2                    Section 2.3               Section 2.2
              Chapter 3                      Section 2.3               Chapter 3                      Section 2.3
              Conclusion                     Section 2.4               Conclusion                     Section 2.4
                                        Conclusion                                         Conclusion</pre>
 </PRE>  <p align=center>
 <P align=center>  <em><a name="specstruct">Two specific structures</a></em></p>
 <EM><A name="specstruct">Two specific structures</A></EM></P>  <hr>
 <HR>  </div>
 </DIV>  <p>
 <P>  The <em>generic structure</em> defines the ways in which specific structures
 The <EM>generic structure</EM> defines the ways in which specific structures  
 can be constructed.  It specifies how to generate specific structures.  The  can be constructed.  It specifies how to generate specific structures.  The
 reports A and B, though different, are constructed in accordance with the same  reports A and B, though different, are constructed in accordance with the same
 generic structure, which specifies that a report contains an introduction  generic structure, which specifies that a report contains an introduction
 followed by a variable number of chapters and a conclusion, with each chapter  followed by a variable number of chapters and a conclusion, with each chapter
 containing a variable number of sections.</P>  containing a variable number of sections.</p>
 <P>  <p>
 There is a one-to-one correspondence between a class and a generic structure:  There is a one-to-one correspondence between a class and a generic structure:
 all the documents of a class are constructed in accordance with the same  all the documents of a class are constructed in accordance with the same
 generic structure.  Hence the definition of the class: a class is a set of  generic structure.  Hence the definition of the class: a class is a set of
 documents whose specific structure is constructed in accordance with the same  documents whose specific structure is constructed in accordance with the same
 generic structure.  A class is characterized by its generic structure.</P>  generic structure.  A class is characterized by its generic structure.</p>
 <P>  <p>
 Thus, a generic structure can be considered to be a model at the level which  Thus, a generic structure can be considered to be a model at the level which
 interests us, but only for one class of documents.  When the definition is  interests us, but only for one class of documents.  When the definition is
 limited to a single class of documents, it is possible to define a model which  limited to a single class of documents, it is possible to define a model which
 does a good job of representing the documents of the class, including the  does a good job of representing the documents of the class, including the
 necessary entities and unencumbered by useless entities.  The description of  necessary entities and unencumbered by useless entities.  The description of
 the organization of the documents in the class can then be sufficiently  the organization of the documents in the class can then be sufficiently
 precise.</P>  precise.</p>
 </DIV>  </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb23>Logical structure and physical structure</A></H2>  
   
 <P>  <h2><a name="sectb23">Logical structure and physical structure</a></h2>
 Generic structures only describe the <EM>logical</EM> organization of  <p>
 documents, not their <EM>physical</EM> presentation on a screen or on sheets  Generic structures only describe the <em>logical</em> organization of
   documents, not their <em>physical</em> presentation on a screen or on sheets
 of paper.  However, for a document to be displayed or printed, its graphic  of paper.  However, for a document to be displayed or printed, its graphic
 presentation must be taken into account.</P>  presentation must be taken into account.</p>
 <P>  <p>
 An examination of current printed documents shows that the details of  An examination of current printed documents shows that the details of
 presentation essentially serve to bring out their logical structure. Outside  presentation essentially serve to bring out their logical structure. Outside
 of some particular domains, notably advertising, the presentation is rarely  of some particular domains, notably advertising, the presentation is rarely
Line 393  text: vertical space, margin changes, pa Line 554  text: vertical space, margin changes, pa
 combined with the changes in the shapes or weight of the characters. These  combined with the changes in the shapes or weight of the characters. These
 effects serve to indicate the transitions between paragraphs, sections, or  effects serve to indicate the transitions between paragraphs, sections, or
 chapters: an object's level in the logical structure of the document is shown  chapters: an object's level in the logical structure of the document is shown
 by the markedness of the effects.</P>  by the markedness of the effects.</p>
 <P>  <p>
 Since the model permits the description of all of the logical structure of the  Since the model permits the description of all of the logical structure of the
 document, the presentation can be derived from the model without being  document, the presentation can be derived from the model without being
 submerged in the document itself.  It suffices to use the logical structure of  submerged in the document itself.  It suffices to use the logical structure of
 the document to make the desired changes in its presentation: changes in type  the document to make the desired changes in its presentation: changes in type
 size, type style, spacing, margin, centering, etc.</P>  size, type style, spacing, margin, centering, etc.</p>
 <P>  <p>
 Just as one cannot define a unique generic logical structure for all document  Just as one cannot define a unique generic logical structure for all document
 classes, one cannot define universal presentation rules which can be applied  classes, one cannot define universal presentation rules which can be applied
 to all document classes.  For certain types of documents the chapter titles  to all document classes.  For certain types of documents the chapter titles
 will be centered on the page and printed in large, bold type.  For other  will be centered on the page and printed in large, bold type.  For other
 documents, the same chapter titles will be printed in small, italic type and  documents, the same chapter titles will be printed in small, italic type and
 aligned on the left margin.</P>  aligned on the left margin.</p>
 <P>  <p>
 Therefore, it is necessary to base the presentation specifications for  Therefore, it is necessary to base the presentation specifications for
 documents on their class.  Such a specification can be very fine-grained,  documents on their class.  Such a specification can be very fine-grained,
 because the presentation is expressed in terms of the entities defined in the  because the presentation is expressed in terms of the entities defined in the
Line 415  generic logical structure of the class. Line 576  generic logical structure of the class.
 different presentation for the chapter titles and the section titles, and  different presentation for the chapter titles and the section titles, and
 similarly to specify titles for the sections according to their level in the  similarly to specify titles for the sections according to their level in the
 section hierarchy.  The set of rules which specify the presentation of all the  section hierarchy.  The set of rules which specify the presentation of all the
 elements defined in a generic logical structure is called a <EM>generic  elements defined in a generic logical structure is called a <em>generic
 presentation</EM>.</P>  presentation</em>.</p>
 <P>  <p>
 There are several advantages derived from having a presentation linked to the  There are several advantages derived from having a presentation linked to the
 generic structure and described by a generic presentation. Homogeneity is the  generic structure and described by a generic presentation. Homogeneity is the
 first.  Since every document in a class corresponds to the same generic  first.  Since every document in a class corresponds to the same generic
Line 426  same class can be assured by applying th Line 587  same class can be assured by applying th
 documents of the class.  Homogeneity of presentation can also be found among  documents of the class.  Homogeneity of presentation can also be found among
 the entities of a single document: every section heading will be presented  in  the entities of a single document: every section heading will be presented  in
 the same way, the first line of every paragraph of the same type will have the  the same way, the first line of every paragraph of the same type will have the
 same indentation, etc.</P>  same indentation, etc.</p>
 <P>  <p>
 Another advantage of this approach to presentation is that it facilitates  Another advantage of this approach to presentation is that it facilitates
 changes to the graphical aspect of documents.  A change to the generic  changes to the graphical aspect of documents.  A change to the generic
 presentation rules attached to each type of entity will alter the presentation  presentation rules attached to each type of entity will alter the presentation
 of the entire document, and will do so homogenously.  In this case, the  of the entire document, and will do so homogenously.  In this case, the
 internal homogeneity of the class is no longer assured, but the way to control  internal homogeneity of the class is no longer assured, but the way to control
 it is simple.  It suffices to adopt a single generic presentation for the  it is simple.  It suffices to adopt a single generic presentation for the
 entire class.</P>  entire class.</p>
 <P>  <p>
 If the presentation of the class does not have to be homogenous, then the  If the presentation of the class does not have to be homogenous, then the
 appearance of the document can be adapted to the way it will be used or to the  appearance of the document can be adapted to the way it will be used or to the
 device used to render it.  This quality is sufficient to allow the existence  device used to render it.  This quality is sufficient to allow the existence
 of <A name="mulpres">many generic presentations</A> for the same document  of <a name="mulpres">many generic presentations</a> for the same document
 class. By applying one or the other of these presentations to it, the document  class. By applying one or the other of these presentations to it, the document
 can be seen under different graphical aspects.  It must be emphasized that  can be seen under different graphical aspects.  It must be emphasized that
 this type of modification of the presentation is not a change to the document  this type of modification of the presentation is not a change to the document
 itself (in its specific logical structure or its content), but only in its  itself (in its specific logical structure or its content), but only in its
 appearance at the time of editing or printing.</P>  appearance at the time of editing or printing.</p>
 </DIV>  </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb24>Document structures and object structures</A></H2>  
   
 <P>  <h2><a name="sectb24">Document structures and object structures</a></h2>
   <p>
 So far, we have only discussed the global structure of documents and have not  So far, we have only discussed the global structure of documents and have not
 considered the contents found in that structure.  We could limit ourselves to  considered the contents found in that structure.  We could limit ourselves to
 purely textual contents by assuming that a title or a paragraph contains a  purely textual contents by assuming that a title or a paragraph contains a
 simple linear text.  But this model would be too restrictive.  In fact,  simple linear text.  But this model would be too restrictive.  In fact,
 certain documents contain not only text, but also contain tables,  diagrams,  certain documents contain not only text, but also contain tables,  diagrams,
 photographs, mathematical formulas, and program fragments.  The model must  photographs, mathematical formulas, and program fragments.  The model must
 permit the representation of such <EM>objects</EM>.</P>  permit the representation of such <em>objects</em>.</p>
 <P>  <p>
 Just as with the whole of the document, the model takes into account the  Just as with the whole of the document, the model takes into account the
 logical structure of objects of this type.  Some are clearly structured,  logical structure of objects of this type.  Some are clearly structured,
 others are less so.  Logical structure can be recognized in mathematical  others are less so.  Logical structure can be recognized in mathematical
Line 468  in any case, it does not seem possible t Line 629  in any case, it does not seem possible t
 can represent every one of these types of objects.  The approach taken in the  can represent every one of these types of objects.  The approach taken in the
 definition of meta-structure and document classes also applies to objects.  definition of meta-structure and document classes also applies to objects.
 Object classes can be defined which put together objects of similar type,  Object classes can be defined which put together objects of similar type,
 constructed from the same generic logical structure.</P>  constructed from the same generic logical structure.</p>
 <P>  <p>
 Thus, a mathematical class can be defined and have a generic logical structure  Thus, a mathematical class can be defined and have a generic logical structure
 associated with it.  But even if a single generic structure can represent a  associated with it.  But even if a single generic structure can represent a
 sufficient variety of mathematical formulas, for other objects with less  sufficient variety of mathematical formulas, for other objects with less
Line 478  multiple classes assures that the model Line 639  multiple classes assures that the model
 to be presented.  It also permits the system to support objects which were not  to be presented.  It also permits the system to support objects which were not
 initially anticipated.  Moreover, this comment applies equally to mathematics:  initially anticipated.  Moreover, this comment applies equally to mathematics:
 different classes of formulas can be described depending on the domain of  different classes of formulas can be described depending on the domain of
 mathematics being described.</P>  mathematics being described.</p>
 <P>  <p>
 Since objects have the same level of logical representation as documents, they  Since objects have the same level of logical representation as documents, they
 gain the same advantages.  In particular, it is possible to define the  gain the same advantages.  In particular, it is possible to define the
 presentation separately from the objects themselves and attach it to the  presentation separately from the objects themselves and attach it to the
Line 488  presentation and the presentation of eve Line 649  presentation and the presentation of eve
 changed simply by changing the generic presentation of the class.  Another  changed simply by changing the generic presentation of the class.  Another
 advantage of using this document model is that the system does not bother the  advantage of using this document model is that the system does not bother the
 user with the details of presentation, but rather allows the user to  user with the details of presentation, but rather allows the user to
 concentrate on the logical aspect of the document and the objects.</P>  concentrate on the logical aspect of the document and the objects.</p>
 <P>  <p>
 It is clear that the documents in a class do not necessarily use the same  It is clear that the documents in a class do not necessarily use the same
 classes of objects: one technical report will contain tables while another  classes of objects: one technical report will contain tables while another
 report will have no tables but will use mathematical formulas. The usable  report will have no tables but will use mathematical formulas. The usable
 object classes are not always mentioned in a limiting way in the generic  object classes are not always mentioned in a limiting way in the generic
 logical structure of documents.  Rather, they can be chosen freely from a  logical structure of documents.  Rather, they can be chosen freely from a
 large set, independent of the document class.</P>  large set, independent of the document class.</p>
 <P>  <p>
 Thus, the object classes will be made commonplace and usable in every  Thus, the object classes will be made commonplace and usable in every
 document. The notion of ``object'' can be enlarged to include not only  document. The notion of ``object'' can be enlarged to include not only
 non-textual elements, but also certain types of textual elements which can  non-textual elements, but also certain types of textual elements which can
 appear in practically every document, whatever their class.  Among these  appear in practically every document, whatever their class.  Among these
 textual elements, one can mention enumerations, descriptions, examples,  textual elements, one can mention enumerations, descriptions, examples,
 quotations, even paragraphs.</P>  quotations, even paragraphs.</p>
 <P>  <p>
 Thus, the document model is not a single, general model describing every type  Thus, the document model is not a single, general model describing every type
 of document in one place.  Rather, it is a meta-model which can be used to  of document in one place.  Rather, it is a meta-model which can be used to
 describe many different models each of which represents either a class of  describe many different models each of which represents either a class of
 similar documents or a class of similar objects which every document can  similar documents or a class of similar objects which every document can
 include.</P>  include.</p>
 </DIV>  </div>
 <HR>  <hr>
 </DIV>  </div>
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect3>The S language</A></H1>  
   
   <h1><a name="sect3">The S language</a></h1>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb31>Document meta-structure</A></H2>  
   
 <P>  <h2><a name="sectb31">Document meta-structure</a></h2>
   <p>
 Since the concept of meta-structure is well suited to the task of describing  Since the concept of meta-structure is well suited to the task of describing
 documents at a high level of abstraction, this meta-structure must be  documents at a high level of abstraction, this meta-structure must be
 precisely defined.  Toward that end this section first presents the basic  precisely defined.  Toward that end this section first presents the basic
 elements from which documents and structured objects are composed and then  elements from which documents and structured objects are composed and then
 specifies the ways in which these basic elements are assembled into structures  specifies the ways in which these basic elements are assembled into structures
 representing complete documents and objects.</P>  representing complete documents and objects.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc311>The basic types</A></H3>  
   
 <P>  <h3><a name="sectc311">The basic types</a></h3>
   <p>
 At the lowest level of a document's structure, the first atom considered is  At the lowest level of a document's structure, the first atom considered is
 the character.  However, since characters are seldom isolated, usually  the character.  However, since characters are seldom isolated, usually
 appearing as part of a linear sequence, and in order to reduce the complexity  appearing as part of a linear sequence, and in order to reduce the complexity
 of the document structure, <EM>character strings</EM> are used as atoms and  of the document structure, <em>character strings</em> are used as atoms and
 consecutive characters belonging to the same structural element are grouped in  consecutive characters belonging to the same structural element are grouped in
 the same character string.</P>  the same character string.</p>
 <P>  <p>
 If the structure of a document is not refined to go down to  the level of  If the structure of a document is not refined to go down to  the level of
 words or phrases, the contents of a simple paragraph can be considered to be a  words or phrases, the contents of a simple paragraph can be considered to be a
 single character string.  On the other hand, the title of a chapter, the title  single character string.  On the other hand, the title of a chapter, the title
 of the first section of that chapter, and the text of the first paragraph of  of the first section of that chapter, and the text of the first paragraph of
 that section constitute three different character strings, because they belong  that section constitute three different character strings, because they belong
 to distinct structural elements.</P>  to distinct structural elements.</p>
 <P>  <p>
 If, instead, a very fine-grained representation for the structure of a  If, instead, a very fine-grained representation for the structure of a
 document is sought, character strings could be defined to contain only a  document is sought, character strings could be defined to contain only a
 single word, or even just a single character.  This is the case, for example,  single word, or even just a single character.  This is the case, for example,
Line 553  in programs,  for which one wants to ret Line 714  in programs,  for which one wants to ret
 syntax of the programming language.  In this case, an assignment statement  syntax of the programming language.  In this case, an assignment statement
 initializing a simple variable to zero would be composed of two structural  initializing a simple variable to zero would be composed of two structural
 elements, the identifier of the variable (a short character string) and the  elements, the identifier of the variable (a short character string) and the
 assigned value (a string of a single character, `0').</P>  assigned value (a string of a single character, `0').</p>
 <P>  <p>
 The character string is not the only atom necessary for representing those  The character string is not the only atom necessary for representing those
 documents that interest us.  It suffices for purely textual documents, but as  documents that interest us.  It suffices for purely textual documents, but as
 soon as the non-textual objects which we have considered arise, there must be  soon as the non-textual objects which we have considered arise, there must be
 other atoms; the number of objects which are to be represented determines the  other atoms; the number of objects which are to be represented determines the
 number of types of atoms that are necessary.</P>  number of types of atoms that are necessary.</p>
 <P>  <p>
 Primitive <EM>graphical elements</EM> are used for tables and figures of  Primitive <em>graphical elements</em> are used for tables and figures of
 different types.  These elements are simple geometric shapes like horizontal  different types.  These elements are simple geometric shapes like horizontal
 or vertical lines, which are sufficient for tables, or even oblique lines,  or vertical lines, which are sufficient for tables, or even oblique lines,
 arrows, rectangles, circles, polygons, and curves for use in figures. From  arrows, rectangles, circles, polygons, and curves for use in figures. From
 these elements and character strings, graphical objects and tables can be  these elements and character strings, graphical objects and tables can be
 constructed.</P>  constructed.</p>
 <P>  <p>
 Photographs, though having very little structure, must still appear in  Photographs, though having very little structure, must still appear in
 documents.  They are supported by <EM>picture</EM> elements, which are  documents.  They are supported by <em>picture</em> elements, which are
 represented as matrices of pixels.</P>  represented as matrices of pixels.</p>
 <P>  <p>
 Finally, mathematical notations require certain elements which are  Finally, mathematical notations require certain elements which are
 simultaneously characters and graphical elements, the <EM>symbols</EM>. By way  simultaneously characters and graphical elements, the <em>symbols</em>. By way
 of example, radicals, integration signs, or even large parentheses are  of example, radicals, integration signs, or even large parentheses are
 examples of this type of atom.  The size of each of these symbols is  examples of this type of atom.  The size of each of these symbols is
 determined by its environment, that is to say, by the expression to which it  determined by its environment, that is to say, by the expression to which it
 is attached.</P>  is attached.</p>
 <P>  <p>
 To summarize, the primitive elements which are used in the construction of  To summarize, the primitive elements which are used in the construction of
 documents and structured objects are:</P>  documents and structured objects are:</p>
 <UL>  <ul>
 <LI>character strings,  <li>
 <LI>graphical elements,  character strings,
 <LI>pictures,  <li>
 <LI>and mathematical symbols.  graphical elements,
 </UL>  <li>
 </DIV>  pictures,
   <li>
   and mathematical symbols.
   </ul>
   </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc312>Constructed elements</A></H3>  
   
 <P>  <h3><a name="sectc312">Constructed elements</a></h3>
   <p>
 A document is evidently formed from primitive elements.  But the model of Thot  A document is evidently formed from primitive elements.  But the model of Thot
 also proposes higher level elements.  Thus, in a document composed of several  also proposes higher level elements.  Thus, in a document composed of several
 chapters, each chapter is an element, and in the chapters each section is also  chapters, each chapter is an element, and in the chapters each section is also
 an element, and so on.  A document is thus an organized set of elements.</P>  an element, and so on.  A document is thus an organized set of elements.</p>
 <P>  <p>
 In a document there are different sorts of elements.  Each element has a  In a document there are different sorts of elements.  Each element has a
 <EM>type</EM> which indicates the role of the element within the document as a  <em>type</em> which indicates the role of the element within the document as a
 whole.  Thus, we have, for example, the chapter and section types.  The  whole.  Thus, we have, for example, the chapter and section types.  The
 document is made up of typed elements: elements of the type chapter and  document is made up of typed elements: elements of the type chapter and
 elements of the type section, among others, but also character string elements  elements of the type section, among others, but also character string elements
 and graphical elements: the primitive elements are typed elements just as  and graphical elements: the primitive elements are typed elements just as
 well.  At the other extreme, the document itself is also considered to be a  well.  At the other extreme, the document itself is also considered to be a
 typed element.</P>  typed element.</p>
 <P>  <p>
 The important difference between the primitive elements and the other elements  The important difference between the primitive elements and the other elements
 of the document is that the primitive elements are atoms (they cannot be  of the document is that the primitive elements are atoms (they cannot be
 decomposed), whereas the others, called <EM>constructed elements</EM>, are  decomposed), whereas the others, called <em>constructed elements</em>, are
 composed of other elements, which can either be primitive elements or  composed of other elements, which can either be primitive elements or
 constructed elements.  A constructed element of type chapter (or more simply,  constructed elements.  A constructed element of type chapter (or more simply,
 ``a chapter'') is composed of sections, which are also constructed elements. A  ``a chapter'') is composed of sections, which are also constructed elements. A
 paragraph, a constructed element, can be made up of character strings, which  paragraph, a constructed element, can be made up of character strings, which
 are primitive elements, and of equations, which are constructed elements.</P>  are primitive elements, and of equations, which are constructed elements.</p>
 <P>  <p>
 A document is also a constructed element.  This is an important point. In  A document is also a constructed element.  This is an important point. In
 particular, it allows a document to be treated as part of another document,  particular, it allows a document to be treated as part of another document,
 and conversely, permits a part of a document to be treated as a complete  and conversely, permits a part of a document to be treated as a complete
Line 623  document.  Thus, an article presented in Line 788  document.  Thus, an article presented in
 a document in itself, while the editor of the journal considers it to be part  a document in itself, while the editor of the journal considers it to be part
 of an issue.  A table or a figure appearing in a document can be extracted and  of an issue.  A table or a figure appearing in a document can be extracted and
 treated as a complete document, for example to prepare transparencies for a  treated as a complete document, for example to prepare transparencies for a
 conference.</P>  conference.</p>
 <P>  <p>
 These thoughts about types and constructed elements apply just as well to  These thoughts about types and constructed elements apply just as well to
 objects as they do to documents.  A table is a constructed element made up of  objects as they do to documents.  A table is a constructed element made up of
 other constructed elements, rows and columns.  A row is formed of cells, which  other constructed elements, rows and columns.  A row is formed of cells, which
 are also constructed elements which contain primitive elements (character  are also constructed elements which contain primitive elements (character
 strings) and/or constructed elements like equations.</P>  strings) and/or constructed elements like equations.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc313>Logical structure constructors</A></H3>  
   
 <P>  <h3><a name="sectc313">Logical structure constructors</a></h3>
   <p>
 Having defined the primitive elements and the constructed elements, it is now  Having defined the primitive elements and the constructed elements, it is now
 time to define the types of organization which allow the building of  time to define the types of organization which allow the building of
 structures.  For this, we rely on the notion of the <EM>constructor</EM>.  A  structures.  For this, we rely on the notion of the <em>constructor</em>.  A
 constructor defines a way of assembling certain elements in a structure.  It  constructor defines a way of assembling certain elements in a structure.  It
 resides at the level of the meta-structure: it does not describe the existing  resides at the level of the meta-structure: it does not describe the existing
 relations in a given structure, but rather defines  how elements are assembled  relations in a given structure, but rather defines  how elements are assembled
 to build a structure that conforms to a model.</P>  to build a structure that conforms to a model.</p>
 <P>  <p>
 In defining the overall organization of documents, the first two constructors  In defining the overall organization of documents, the first two constructors
 considered are the aggregate and the list.</P>  considered are the aggregate and the list.</p>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3131>Aggregate and List</A></H4>  
   
 <P>  <h4><a name="sectd3131">Aggregate and List</a></h4>
 The <EM>aggregate</EM> constructor is used to define constructed element types  <p>
   The <em>aggregate</em> constructor is used to define constructed element types
 which are collections of a given number of other elements. These collections  which are collections of a given number of other elements. These collections
 may or may not be ordered.  The elements may be either constructed or  may or may not be ordered.  The elements may be either constructed or
 primitive and are specified by their type.  A report (that is, a constructed  primitive and are specified by their type.  A report (that is, a constructed
 element of the report type) has an aggregate structure.  It is formed from a  element of the report type) has an aggregate structure.  It is formed from a
 title, an author's name, an introduction, a body, and a conclusion, making it  title, an author's name, an introduction, a body, and a conclusion, making it
 a collection of five element types.  This type of constructor is found in  a collection of five element types.  This type of constructor is found in
 practically every document, and generally at several levels in a document.</P>  practically every document, and generally at several levels in a document.</p>
 <P>  <p>
 The <EM>list</EM> constructor is used to define constructed elements which are  The <em>list</em> constructor is used to define constructed elements which are
 ordered sequences of elements (constructed or primitive) having the same type.  ordered sequences of elements (constructed or primitive) having the same type.
 The minimum and maximum numbers of elements for the sequence can be specified  The minimum and maximum numbers of elements for the sequence can be specified
 in the list constructor or the number of elements can be left unconstrained.  in the list constructor or the number of elements can be left unconstrained.
Line 668  The body of a report is a list of chapte Line 833  The body of a report is a list of chapte
 contain a minimum of two chapters (is a chapter useful if it is the only one  contain a minimum of two chapters (is a chapter useful if it is the only one
 in the report?) The chapter itself can contain a list of sections, each  in the report?) The chapter itself can contain a list of sections, each
 section containing a list of paragraphs.  In the same way as the aggregate,  section containing a list of paragraphs.  In the same way as the aggregate,
 the list is a very frequently used constructor in every type of document.   the list is a very frequently used constructor in every type of document.
 However, these two constructors are not sufficient to describe every document  However, these two constructors are not sufficient to describe every document
 structure; thus other constructors supplement them.</P>  structure; thus other constructors supplement them.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3132>Choice, Schema, and Unit</A></H4>  
   
 <P>  <h4><a name="sectd3132">Choice, Schema, and Unit</a></h4>
 The <EM>choice</EM> constructor is used to define the structure of an element  <p>
   The <em>choice</em> constructor is used to define the structure of an element
 type for which one alternative is chosen from several possibilities. Thus, a  type for which one alternative is chosen from several possibilities. Thus, a
 paragraph can be either a simple text paragraph, or an enumeration, or a  paragraph can be either a simple text paragraph, or an enumeration, or a
 citation.</P>  citation.</p>
 <P>  <p>
 The choice constructor indicates the complete list of possible options, which  The choice constructor indicates the complete list of possible options, which
 can be too restrictive in certain cases, the paragraph being one such case.  can be too restrictive in certain cases, the paragraph being one such case.
 Two constructors, <EM>unit</EM> and <EM>schema</EM>, address this  Two constructors, <em>unit</em> and <em>schema</em>, address this
 inconvenience.  They allow more freedom in the choice of an element type.  If  inconvenience.  They allow more freedom in the choice of an element type.  If
 a paragraph is defined by a schema constructor, it is possible to put in the  a paragraph is defined by a schema constructor, it is possible to put in the
 place of a paragraph a table, an equation, a drawing or any other object  place of a paragraph a table, an equation, a drawing or any other object
Line 692  defined by another generic logical struc Line 857  defined by another generic logical struc
 paragraph as a sequence of units, which could be character strings, symbols,  paragraph as a sequence of units, which could be character strings, symbols,
 or pictures.  The choice constructor alone defines a generic logical structure  or pictures.  The choice constructor alone defines a generic logical structure
 that is relatively constrained; in contrast, using units and schemas, a very  that is relatively constrained; in contrast, using units and schemas, a very
 open structure can be defined.</P>  open structure can be defined.</p>
 <P>  <p>
 The <EM>schema</EM> constructor represents an object defined by a generic  The <em>schema</em> constructor represents an object defined by a generic
 logical structure chosen freely from among those available.</P>  logical structure chosen freely from among those available.</p>
 <P>  <p>
 The <EM>unit</EM> constructor represents an element whose type can be either a  The <em>unit</em> constructor represents an element whose type can be either a
 primitive type or an element type defined as a unit in the generic logical  primitive type or an element type defined as a unit in the generic logical
 structure of the document, or in another generic logical structure used in the  structure of the document, or in another generic logical structure used in the
 document.  Such an element may be used in document objects constructed  document.  Such an element may be used in document objects constructed
 according to other generic structures.</P>  according to other generic structures.</p>
 <P>  <p>
 Thus, for example, if a cross-reference to a footnote is defined in the  Thus, for example, if a cross-reference to a footnote is defined in the
 generic logical structure ``Article'' as a unit, a table (an object defined by  generic logical structure ``Article'' as a unit, a table (an object defined by
 another generic structure) can contain cross-references to footnotes, when  another generic structure) can contain cross-references to footnotes, when
Line 712  the type of document into which the tabl Line 877  the type of document into which the tabl
 to declare, in the generic structure for tables, that the contents of cells  to declare, in the generic structure for tables, that the contents of cells
 are units.  In this way, the generic structure of objects is divided up  are units.  In this way, the generic structure of objects is divided up
 between different types of documents which are able to adapt themselves to the  between different types of documents which are able to adapt themselves to the
 environment into which they are inserted.</P>  environment into which they are inserted.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3133>Reference and Inclusion</A></H4>  
   
 <P>  <h4><a name="sectd3133">Reference and Inclusion</a></h4>
 The <EM>reference</EM> is used to define document  <p>
 elements that are cross-references to other elements, such as a section, a  The <em>reference</em> is used to define document elements that are
 chapter, a bibliographic citation, or a figure.  The reference is  cross-references to other elements, such as a section, a chapter, a
 bi-directional.  It can be used to access both the element being  bibliographic citation, or a figure.  The reference is bi-directional.  It can
 cross-referenced and each of the elements which make use of the  be used to access both the element being cross-referenced and each of the
 cross-reference.</P>  elements which make use of the cross-reference.</p>
 <P>  <p>
 References can be either <EM>internal</EM> or <EM>external</EM>.  That is,  References can be either <em>internal</em> or <em>external</em>.  That is,
 they can designate elements which appear in the same document or in another  they can designate elements which appear in the same document or in another
 document.</P>  document.</p>
 <P>  <p>
 The <EM><A name="inclusion">inclusion</A></EM> constructor is a special type  The <em><a name="inclusion">inclusion</a></em> constructor is a special type
 of reference.  Like the reference, it is an internal or external bidirectional  of reference.  Like the reference, it is an internal or external bidirectional
 link, but it is not a cross-reference.  This link represents the ``live''  link, but it is not a cross-reference.  This link represents the ``live''
 inclusion of the designated element; it accesses the most recent version of  inclusion of the designated element; it accesses the most recent version of
 that element and not a ``dead'' copy, fixed in the state in which it was found  that element and not a ``dead'' copy, fixed in the state in which it was found
 at the moment the copy was made.  As soon as an element is modified, all of  at the moment the copy was made.  As soon as an element is modified, all of
 its inclusions are automatically brought up to date.  It must be noted that,  its inclusions are automatically brought up to date.  It must be noted that,
 in addition to inclusion, Thot permits the creation of ``dead'' copies.</P>  in addition to inclusion, Thot permits the creation of ``dead'' copies.</p>
 <P>  <p>
 There are three types of inclusions: inclusions with full expansion,  There are three types of inclusions: inclusions with full expansion,
 inclusions with partial expansion, and inclusions without expansion. During  inclusions with partial expansion, and inclusions without expansion. During
 editing, inclusions without expansion are represented on the screen by the  editing, inclusions without expansion are represented on the screen by the
 name of the included document, in a special color, while inclusions with  name of the included document, in a special color, while inclusions with
 expansion (full or partial) are represented by a copy (full or partial) of the  expansion (full or partial) are represented by a copy (full or partial) of the
 included element (also in a special color). The on-screen representation of a  included element (also in a special color). The on-screen representation of a
 partial inclusion is a <A href="#sectc3213">``skeleton''</A> image of the  partial inclusion is a <a href="#sectc3213">``skeleton''</a> image of the
 included document.</P>  included document.</p>
 <P>  <p>
 Inclusion with complete expansion can be used to include parts of the same  Inclusion with complete expansion can be used to include parts of the same
 document or of other documents.  Thus, it can be either an internal or an  document or of other documents.  Thus, it can be either an internal or an
 external link.  It can be used to include certain bibliographic entries of a  external link.  It can be used to include certain bibliographic entries of a
 scientific article in another article, or to copy part of a mathematical  scientific article in another article, or to copy part of a mathematical
 formula into another formula of the same document, thus assuring that both  formula into another formula of the same document, thus assuring that both
 copies will remain synchronized.</P>  copies will remain synchronized.</p>
 <P>  <p>
 Inclusion without expansion or with partial expansion is used to include  Inclusion without expansion or with partial expansion is used to include
 complete documents.  It is always an external link.  It is used primarily to  complete documents.  It is always an external link.  It is used primarily to
 divide very large documents into sub-documents that are easier to manipulate,  divide very large documents into sub-documents that are easier to manipulate,
Line 762  especially when there are many authors. Line 926  especially when there are many authors.
 where each chapter is a different document which can be edited separately.  where each chapter is a different document which can be edited separately.
 When viewing the book on the screen, it might be desirable to see only the  When viewing the book on the screen, it might be desirable to see only the
 titles of the chapters and sections.  This can be achieved using inclusion  titles of the chapters and sections.  This can be achieved using inclusion
 with partial expansion.</P>  with partial expansion.</p>
 <P>  <p>
 During printing, inclusions without expansion or with partial expansion can be  During printing, inclusions without expansion or with partial expansion can be
 represented either as they were shown on the screen or by a complete (and  represented either as they were shown on the screen or by a complete (and
 up-to-date) copy of the included element or document.</P>  up-to-date) copy of the included element or document.</p>
 <P>  <p>
 The inclusion constructor, whatever its type, respects the generic structure:  The inclusion constructor, whatever its type, respects the generic structure:
 only those elements authorized by the generic structure can be included at a  only those elements authorized by the generic structure can be included at a
 given position in a document.</P>  given position in a document.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3134>Mark pairs</A></H4>  
   
 <P>  <h4><a name="sectd3134">Mark pairs</a></h4>
   <p>
 It is often useful to delimit certain parts of a document independently from  It is often useful to delimit certain parts of a document independently from
 the logical structure.  For example, one might wish to attach some information  the logical structure.  For example, one might wish to attach some information
 (in the form of an <A href="#sectc315">attribute</A>) or a particular  (in the form of an <a href="#sectc315">attribute</a>) or a particular
 treatment to a group of words or a set of consecutive paragraphs. <EM>Mark  treatment to a group of words or a set of consecutive paragraphs. <em>Mark
 pairs</EM> are used to do this.</P>  pairs</em> are used to do this.</p>
 <P>  <p>
 Mark pairs are elements which are always paired and are terminals in the  Mark pairs are elements which are always paired and are terminals in the
 logical structure of the document.  Their position in the structure of the  logical structure of the document.  Their position in the structure of the
 document is defined in the generic structure.  It is important to note that  document is defined in the generic structure.  It is important to note that
 when the terminals of a mark pair are <EM>extensions</EM> (see the next  when the terminals of a mark pair are <em>extensions</em> (see the next
 section), they can be used quite freely.</P>  section), they can be used quite freely.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3135>Restrictions and Extensions</A></H4>  
   
 <P>  <h4><a name="sectd3135">Restrictions and Extensions</a></h4>
   <p>
 The primitive types and the constructors presented so far permit the  The primitive types and the constructors presented so far permit the
 definition of the logical structure of documents and objects in a rigorous  definition of the logical structure of documents and objects in a rigorous
 way.  But this definition can be very cumbersome in certain cases, notably  way.  But this definition can be very cumbersome in certain cases, notably
 when trying to constrain or extend the authorized element types in a  when trying to constrain or extend the authorized element types in a
 particular context.  <EM>Restrictions</EM> and <EM>extensions</EM> are used to  particular context.  <em>Restrictions</em> and <em>extensions</em> are used to
 cope with these cases.</P>  cope with these cases.</p>
 <P>  <p>
 A restriction associates with a particular element type <EM>A</EM>, a list of  A restriction associates with a particular element type <em>A</em>, a list of
 those element types which elements of type <EM>A</EM> may not contain, even if  those element types which elements of type <em>A</em> may not contain, even if
 the definition of type <EM>A</EM> and those of its components authorize them  the definition of type <em>A</em> and those of its components authorize them
 otherwise.  This simplifies the writing of generic logical structures and  otherwise.  This simplifies the writing of generic logical structures and
 allows limitations to be placed, when necessary, on the choices offered by the  allows limitations to be placed, when necessary, on the choices offered by the
 schema and unit constructors.</P>  schema and unit constructors.</p>
 <P>  <p>
 Extensions are the inverse of restrictions.  They identify a list of element  Extensions are the inverse of restrictions.  They identify a list of element
 types whose presence <EM>is</EM> permitted, even if its definition and those  types whose presence <em>is</em> permitted, even if its definition and those
 of its components do not authorize them otherwise.</P>  of its components do not authorize them otherwise.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3136>Summary</A></H4>  
   <h4><a name="sectd3136">Summary</a></h4>
 <P>  <p>
 Thus, four constructors are used to construct a document:</P>  Thus, four constructors are used to construct a document:</p>
 <UL>  <ul>
 <LI>the aggregate constructor (ordered or not),  <li>
 <LI>the list constructor,  the aggregate constructor (ordered or not),
 <LI>the choice constructor and its extensions, the unit and schema  <li>
 constructors,  the list constructor,
 <LI>the reference constructor and its variant, the inclusion.  <li>
 </UL>  the choice constructor and its extensions, the unit and schema constructors,
 <P>  <li>
   the reference constructor and its variant, the inclusion.
   </ul>
   <p>
 These constructors are also sufficient for objects.  Thus, these constructors  These constructors are also sufficient for objects.  Thus, these constructors
 provide a homogenous meta-model which can describe both the organization of  provide a homogenous meta-model which can describe both the organization of
 the document as a whole and that of the various types of objects which it  the document as a whole and that of the various types of objects which it
 contains.  After presenting the description language for generic structures,  contains.  After presenting the description language for generic structures,
 we will present several examples which illustrate the appropriateness of the  we will present several examples which illustrate the appropriateness of the
 model.</P>  model.</p>
 <P>  <p>
 The first three constructors (aggregate, list and choice) lead to tree-like  The first three constructors (aggregate, list and choice) lead to tree-like
 structures for documents and objects, the objects being simply the subtrees of  structures for documents and objects, the objects being simply the subtrees of
 the tree of a document (or even of other objects' subtrees).  The reference  the tree of a document (or even of other objects' subtrees).  The reference
Line 840  constructor introduces other, non-hierar Line 1007  constructor introduces other, non-hierar
 of the tree: when a paragraph makes reference to a chapter or a section, that  of the tree: when a paragraph makes reference to a chapter or a section, that
 relation leaves the purely tree-like structure.  Moreover,  external reference  relation leaves the purely tree-like structure.  Moreover,  external reference
 and inclusion constructors permit the establishment of links between different  and inclusion constructors permit the establishment of links between different
 documents, thus creating a hypertext structure.</P>  documents, thus creating a hypertext structure.</p>
 </DIV>  </div>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc314>Associated Elements</A></H3>  
   
 <P>  <h3><a name="sectc314">Associated Elements</a></h3>
   <p>
 Thanks to the list, aggregate and choice constructors, the organization of the  Thanks to the list, aggregate and choice constructors, the organization of the
 document is specified rigorously, using constructed and primitive elements.  document is specified rigorously, using constructed and primitive elements.
 But a document is made up of more than just its elements; it clearly also  But a document is made up of more than just its elements; it clearly also
Line 866  course, this brings up questions of the Line 1033  course, this brings up questions of the
 documents that are broken into pages, but this reflects the structural  documents that are broken into pages, but this reflects the structural
 instability of these elements.  They cannot be treated the same way as  instability of these elements.  They cannot be treated the same way as
 elements like paragraphs or sections, whose position in the structure is  elements like paragraphs or sections, whose position in the structure is
 directly linked to the semantics of the document.</P>  directly linked to the semantics of the document.</p>
 <P>  <p>
 Those elements whose position in the structure of the document is not fixed,  Those elements whose position in the structure of the document is not fixed,
 even though they are definitely part of the document, are called  even though they are definitely part of the document, are called
 <EM>associated elements</EM>.  Associated elements are themselves structures,  <em>associated elements</em>.  Associated elements are themselves structures,
 which is to say that their content can be organized logically by the  which is to say that their content can be organized logically by the
 constructors from primitive and constructed elements.</P>  constructors from primitive and constructed elements.</p>
 <P>  <p>
 It can happen that the associated elements are totally disconnected from the  It can happen that the associated elements are totally disconnected from the
 structure of the document, as in a commentary or appraisal of the entire work.  structure of the document, as in a commentary or appraisal of the entire work.
 But more often, the associated elements are linked to the content of the  But more often, the associated elements are linked to the content of the
 document by references.  This is generally the case for notes and figures,  document by references.  This is generally the case for notes and figures,
 among others.</P>  among others.</p>
 <P>  <p>
 Thus, associated elements introduce a new use for the reference constructor.  Thus, associated elements introduce a new use for the reference constructor.
 It not only serves to create links between elements of the principal structure  It not only serves to create links between elements of the principal structure
 of the document, but also serves to link the associated elements to the  of the document, but also serves to link the associated elements to the
 primary structure.</P>  primary structure.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc315>Attributes</A></H3>  
   
 <P>  <h3><a name="sectc315">Attributes</a></h3>
   <p>
 There remain logical aspects of documents that are not entirely described by  There remain logical aspects of documents that are not entirely described by
 the structure.  Certain types of semantic information, which are not stated  the structure.  Certain types of semantic information, which are not stated
 explicitly in the text, must also be taken into account.  In particular, such  explicitly in the text, must also be taken into account.  In particular, such
Line 900  order to mark them as structurally disti Line 1067  order to mark them as structurally disti
 frequently appear in the middle of continuous text (e.g. in the interior of a  frequently appear in the middle of continuous text (e.g. in the interior of a
 paragraph).  In this case, there is no change between structural elements; the  paragraph).  In this case, there is no change between structural elements; the
 effect serves to highlight a word, expression, or phrase.  The notion of an  effect serves to highlight a word, expression, or phrase.  The notion of an
 <EM>attribute</EM> is used to express this type of information.</P>  <em>attribute</em> is used to express this type of information.</p>
 <P>  <p>
 An attribute is a piece of information attached to a structural element which  An attribute is a piece of information attached to a structural element which
 augments the type of the element and clarifies its function in the document.  augments the type of the element and clarifies its function in the document.
 Keywords, foreign language words, and titles of other works can all be  Keywords, foreign language words, and titles of other works can all be
 represented by character strings with attached attributes.  Attributes may  represented by character strings with attached attributes.  Attributes may
 also be attached to constructed elements.  Thus, an attribute indicating the  also be attached to constructed elements.  Thus, an attribute indicating the
 language can be attached to a single word or to a large part of a  language can be attached to a single word or to a large part of a
 document.</P>  document.</p>
 <P>  <p>
 In fact, an attribute can be any piece of information which is linked to a  In fact, an attribute can be any piece of information which is linked to a
 part of a document and which can be used by agents which work on the document.  part of a document and which can be used by agents which work on the document.
 For example, the language in which the document is written determines the set  For example, the language in which the document is written determines the set
Line 917  of characters used by an editor or forma Line 1084  of characters used by an editor or forma
 algorithm or hyphenation dictionary to be used.  The attribute ``keyword''  algorithm or hyphenation dictionary to be used.  The attribute ``keyword''
 facilitates the work of an information retrieval system.  The attribute  facilitates the work of an information retrieval system.  The attribute
 ``index word'' allows a formatter to automatically construct an index at the  ``index word'' allows a formatter to automatically construct an index at the
 end of the document.</P>  end of the document.</p>
 <P>  <p>
 As with the types of constructed elements, the attributes and the values they  As with the types of constructed elements, the attributes and the values they
 can take are defined separately in each generic logical structure, not in the  can take are defined separately in each generic logical structure, not in the
 meta-model, according to the needs of the document class or the nature of the  meta-model, according to the needs of the document class or the nature of the
 object.</P>  object.</p>
 <P>  <p>
 Many types of attributes are offered: numeric, textual, references, and  Many types of attributes are offered: numeric, textual, references, and
 enumerations:</P>  enumerations:</p>
 <UL>  <ul>
 <LI><EM>Numeric attributes</EM> can take integer values (negative, positive,  <li>
 or null).  <em>Numeric attributes</em> can take integer values (negative, positive, or
 <LI><EM>Textual attributes</EM> have as their values character strings.  null).
 <LI><EM>Reference attributes</EM> designate an element of the logical  <li>
 structure.  <em>Textual attributes</em> have as their values character strings.
 <LI><EM>Enumeration attributes</EM> can take one value from a limited list of  <li>
   <em>Reference attributes</em> designate an element of the logical structure.
   <li>
   <em>Enumeration attributes</em> can take one value from a limited list of
 possible values, each value being a name.  possible values, each value being a name.
 </UL>  </ul>
 <P>  <p>
 In a generic structure, there is a distinction between <EM>global  In a generic structure, there is a distinction between <em>global
 attributes</EM> and <EM>local attributes</EM>.  A global attribute can be  attributes</em> and <em>local attributes</em>.  A global attribute can be
 applied to every element type defined in the generic structure where it is  applied to every element type defined in the generic structure where it is
 specified.  In contrast, a local attribute can only be applied to certain  specified.  In contrast, a local attribute can only be applied to certain
 types of elements, even only a single type.  The ``language'' attribute  types of elements, even only a single type.  The ``language'' attribute
 presented above is an example of a global attribute.  An example of a local  presented above is an example of a global attribute.  An example of a local
 attribute is the rank of an author (principal author of the document or  attribute is the rank of an author (principal author of the document or
 secondary author): this attribute can only be applied sensibly to an element  secondary author): this attribute can only be applied sensibly to an element
 of the ``author'' type.</P>  of the ``author'' type.</p>
 <P>  <p>
 Attributes can be assigned to the elements which make up the document in many  Attributes can be assigned to the elements which make up the document in many
 different ways.  The author can freely and dynamically place them on any part  different ways.  The author can freely and dynamically place them on any part
 of the document in order to attach supplementary information of his/her choice.  of the document in order to attach supplementary information of his/her
 However, attributes may only be assigned in accordance with the rules of the  choice. However, attributes may only be assigned in accordance with the rules
 generic structure; in particular, local attributes can only be assigned to  of the generic structure; in particular, local attributes can only be assigned
 those element types for which they are defined.</P>  to those element types for which they are defined.</p>
 <P>  <p>
 In the generic structure, certain local attributes can be made mandatory for  In the generic structure, certain local attributes can be made mandatory for
 certain element types.  In this case, Thot automatically associates the  certain element types.  In this case, Thot automatically associates the
 attribute with the elements of this type and it requires the user to provide a  attribute with the elements of this type and it requires the user to provide a
 value for this attribute.</P>  value for this attribute.</p>
 <P>  <p>
 Attributes can also be automatically assigned, with a given value, by every  Attributes can also be automatically assigned, with a given value, by every
 application processing the document in order to systematically add a piece of  application processing the document in order to systematically add a piece of
 information to certain predefined elements of the document.  By way of  information to certain predefined elements of the document.  By way of
 example, in a report containing a French abstract and an English abstract,  example, in a report containing a French abstract and an English abstract,
 each of the two abstracts is defined as a sequence of paragraphs.  The first  each of the two abstracts is defined as a sequence of paragraphs.  The first
 abstract has a value of ``French'' for the ``language'' attribute while the  abstract has a value of ``French'' for the ``language'' attribute while the
 second abstract's ``language'' attribute has a value of ``English''.</P>  second abstract's ``language'' attribute has a value of ``English''.</p>
 <P>  <p>
 In the case of mark pairs, attributes are logically associated with the pair  In the case of mark pairs, attributes are logically associated with the pair
 as a whole, but are actually attached to the first mark.</P>  as a whole, but are actually attached to the first mark.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc316>Discussion of the model</A></H3>  
   
 <P>  <h3><a name="sectc316">Discussion of the model</a></h3>
   <p>
 The notions of attribute, constructor, structured element, and associated  The notions of attribute, constructor, structured element, and associated
 element are used in the definition of generic logical structures of documents  element are used in the definition of generic logical structures of documents
 and objects.  The problem is to assemble them to form generic structures.  In  and objects.  The problem is to assemble them to form generic structures.  In
Line 987  considered here; it also arises for the Line 1157  considered here; it also arises for the
 many document classes.  This is the reason why the notion of object is so  many document classes.  This is the reason why the notion of object is so
 broad and why paragraphs and enumerations are also considered to be objects.  broad and why paragraphs and enumerations are also considered to be objects.
 These object classes not only permit the sharing of the structures of  These object classes not only permit the sharing of the structures of
 elements, but also of the attributes defined in the generic structures.</P>  elements, but also of the attributes defined in the generic structures.</p>
 <P>  <p>
 Structure, such as that presented here, can appear very rigid, and it is  Structure, such as that presented here, can appear very rigid, and it is
 possible to imagine that a document editing system based on this model could  possible to imagine that a document editing system based on this model could
 prove very constraining to the user.  This is, in fact, a common criticism of  prove very constraining to the user.  This is, in fact, a common criticism of
 syntax-directed editors.  This defect can be avoided with Thot, primarily for  syntax-directed editors.  This defect can be avoided with Thot, primarily for
 three reasons:</P>  three reasons:</p>
 <UL>  <ul>
 <LI>the generic structures are not fixed in the model itself,  <li>
 <LI>the model takes the dynamics of documents into account,  the generic structures are not fixed in the model itself,
 <LI>the constructors offer great flexibility.  <li>
 </UL>  the model takes the dynamics of documents into account,
 <P>  <li>
   the constructors offer great flexibility.
   </ul>
   <p>
 When the generic structure of a document is not predefined, but rather is  When the generic structure of a document is not predefined, but rather is
 constructed specifically for each document class, it can be carefully adapted  constructed specifically for each document class, it can be carefully adapted
 to the current needs.  In cases where the generic structure is inadequate for  to the current needs.  In cases where the generic structure is inadequate for
Line 1007  a particular document of the class, it i Line 1180  a particular document of the class, it i
 new class with a generic structure well suited to the new case or to extend  new class with a generic structure well suited to the new case or to extend
 the generic structure of the existing class to take into account the specifics  the generic structure of the existing class to take into account the specifics
 of the document which poses the problem.  These two solutions can also be  of the document which poses the problem.  These two solutions can also be
 applied to objects whose structures prove to be poorly designed.</P>  applied to objects whose structures prove to be poorly designed.</p>
 <P>  <p>
 The model is sufficiently flexible to take into account all the phases of the  The model is sufficiently flexible to take into account all the phases of the
 life of the document.  When a generic structure specifies that a report must  life of the document.  When a generic structure specifies that a report must
 contain a title, an abstract, an introduction, at least two chapters, and a  contain a title, an abstract, an introduction, at least two chapters, and a
 conclusion, this means only that a report, <EM>upon completion</EM>, will have  conclusion, this means only that a report, <em>upon completion</em>, will have
 to contain all of these elements.  When the author begins writing, none of  to contain all of these elements.  When the author begins writing, none of
 these elements is present.  Thot uses this model.  Therefore, it tolerates  these elements is present.  Thot uses this model.  Therefore, it tolerates
 documents which do not conform strictly to the generic structure of their  documents which do not conform strictly to the generic structure of their
 class;  it also considers the generic logical structure to be a way of helping  class;  it also considers the generic logical structure to be a way of helping
 the user in the construction of a complex document.</P>  the user in the construction of a complex document.</p>
 <P>  <p>
 In contrast, other applications may reject a document which does not conform  In contrast, other applications may reject a document which does not conform
 strictly to its generic structure.  This is, for example, what is done by  strictly to its generic structure.  This is, for example, what is done by
 compilers which refuse to generate code for a program which is not  compilers which refuse to generate code for a program which is not
 syntactically correct.  This might also occur when using a document  syntactically correct.  This might also occur when using a document
 application for a report which does not have an abstract or title.</P>  application for a report which does not have an abstract or title.</p>
 <P>  <p>
 The constructors of the document model bring a great flexibility to the  The constructors of the document model bring a great flexibility to the
 generic structures.  A choice constructor (and even more, a unit or schema  generic structures.  A choice constructor (and even more, a unit or schema
 constructor)  can represent several, very different elements. The list  constructor)  can represent several, very different elements. The list
Line 1032  constructor permits the addition of more Line 1205  constructor permits the addition of more
 together, these two constructors permit any series of elements of different  together, these two constructors permit any series of elements of different
 types.  Of course, this flexibility can be reduced wherever necessary since a  types.  Of course, this flexibility can be reduced wherever necessary since a
 generic structure can limit the choices or the number of elements in a  generic structure can limit the choices or the number of elements in a
 list.</P>  list.</p>
 <P>  <p>
 Another difficulty linked to the use of structure in the document model  Another difficulty linked to the use of structure in the document model
 resides in the choice of the level of the structure.  The structure of a  resides in the choice of the level of the structure.  The structure of a
 discussion could be extracted from the text itself via linguistic analysis.  discussion could be extracted from the text itself via linguistic analysis.
 Some studies are exploring this approach, but the model of Thot excludes this  Some studies are exploring this approach, but the model of Thot excludes this
 type of structure.  It only takes into account the logical structure provided  type of structure.  It only takes into account the logical structure provided
 explicitly by the author.</P>  explicitly by the author.</p>
 <P>  <p>
 However, the level of structure of the model is not imposed.  Each generic  However, the level of structure of the model is not imposed.  Each generic
 structure defines its own level of structure, adapted to the document class or  structure defines its own level of structure, adapted to the document class or
 object and to the ways in which it will be processed.  If it will only be  object and to the ways in which it will be processed.  If it will only be
Line 1049  specialized processing will be applied t Line 1222  specialized processing will be applied t
 element types on which this processing must act.  By way of example, a simple  element types on which this processing must act.  By way of example, a simple
 structure is sufficient for printing formulas, but a more complex structure is  structure is sufficient for printing formulas, but a more complex structure is
 required to perform symbolic or numeric calculations on the mathematical  required to perform symbolic or numeric calculations on the mathematical
 expressions.  The document model of Thot allows both types of structure.</P>  expressions.  The document model of Thot allows both types of structure.</p>
 </DIV>  </div>
 </DIV>  </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb32>The definition language for generic structures</A></H2>  
   
 <P>  <h2><a name="sectb32">The definition language for generic structures</a></h2>
   <p>
 Generic structures, which form the basis of the document model of Thot, are  Generic structures, which form the basis of the document model of Thot, are
 specified using a special language.  This definition language, called S, is  specified using a special language.  This definition language, called S, is
 described in this section.</P>  described in this section.</p>
 <P>  <p>
 Each generic structure, which defines a class of documents or objects, is  Each generic structure, which defines a class of documents or objects, is
 specified by a file, written in the S language, which is called a  specified by a file, written in the S language, which is called a
 <EM>structure schema</EM>.  Structure schemas are compiled into tables, called  <em>structure schema</em>.  Structure schemas are compiled into tables, called
 structure tables, which are used by Thot and which determine its behavior.</P>  structure tables, which are used by Thot and which determine its behavior.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc321>Writing Conventions</A></H3>  
   
 <P>  <h3><a name="sectc321">Writing Conventions</a></h3>
   <p>
 The grammar of S, like those of the languages P and T presented later, is  The grammar of S, like those of the languages P and T presented later, is
 described using the meta-language M, derived from the Backus-Naur Form  described using the meta-language M, derived from the Backus-Naur Form
 (BNF).</P>  (BNF).</p>
 <P>  <p>
 In this meta-language each rule of the grammar is composed of a grammar symbol  In this meta-language each rule of the grammar is composed of a grammar symbol
 followed by an equals sign (`=') and the right part of the rule.  The equals  followed by an equals sign (`=') and the right part of the rule.  The equals
 sign plays the same role as the traditional `::=' of BNF: it indicates that  sign plays the same role as the traditional `::=' of BNF: it indicates that
 the right part defines the symbol of the left part.  In the right part,</P>  the right part defines the symbol of the left part.  In the right part,</p>
 <DL>  <dl>
 <DT>concatenation</DT>  <dt>concatenation</dt>
 <DD>is shown by the juxtaposition of symbols;  <dd>
 </DD>  is shown by the juxtaposition of symbols;
 <DT>character strings</DT>  </dd>
 <DD>between apostrophes ' represent terminal symbols, that is, keywords in the  <dt>character strings</dt>
   <dd>
   between apostrophes ' represent terminal symbols, that is, keywords in the
 language defined.  Keywords are written here in upper-case letters, but can be  language defined.  Keywords are written here in upper-case letters, but can be
 written in any combination of upper and lower-case letters.  For example, the  written in any combination of upper and lower-case letters.  For example, the
 keyword <TT>DEFPRES</TT> of S can also be written as <TT>defpres</TT> or  keyword <tt>DEFPRES</tt> of S can also be written as <tt>defpres</tt> or
 <TT>DefPres</TT>.  <tt>DefPres</tt>.
 </DD>  </dd>
 <DT>material between brackets</DT>  <dt>material between brackets</dt>
 <DD>(`[' and `]') is optional;  <dd>
 </DD>  (`[' and `]') is optional;
 <DT>material between angle brackets</DT>  </dd>
 <DD>(`&lt;' and `>') can be repeated many times or omitted;  <dt>material between angle brackets</dt>
 </DD>  <dd>
 <DT>the slash</DT>  (`&lt;' and `>') can be repeated many times or omitted;
 <DD>(`/') indicates an alternative, a choice between the options separated by  </dd>
 the slash character;  <dt>the slash</dt>
 </DD>  <dd>
 <DT>the period</DT>  (`/') indicates an alternative, a choice between the options separated by the
 <DD>marks the end of a rule;  slash character;
 </DD>  </dd>
 <DT>text between braces</DT>  <dt>the period</dt>
 <DD>(`{' and `}') is simply a comment.  <dd>
 </DD>  marks the end of a rule;
 </DL>  </dd>
 <P>  <dt>text between braces</dt>
   <dd>
   (`{' and `}') is simply a comment.
   </dd>
   </dl>
   <p>
 The M meta-language also uses the concepts of identifiers, strings, and  The M meta-language also uses the concepts of identifiers, strings, and
 integers:</P>  integers:</p>
 <DL>  <dl>
 <DT><TT>NAME</TT></DT>  <dt><tt>NAME</tt></dt>
 <DD>represents an identifier, a sequence of letters (upper or lower-case),  <dd>
 digits, and underline characters (`_'), beginning with a letter.  Also  represents an identifier, a sequence of letters (upper or lower-case), digits,
 considered a letter is the sequence of characters `<TT>\nnn</TT>' where the  and underline characters (`_'), beginning with a letter.  Also considered a
 letter <TT>n</TT> represents the ISO Latin-1 code of the letter in octal.  It  letter is the sequence of characters `<tt>\nnn</tt>' where the letter
 is thus possible to use accented letters in identifiers.  The maximum length  <tt>n</tt> represents the ISO Latin-1 code of the letter in octal.  It is thus
 of identifiers is fixed by the compiler.  It is normally 31 characters.  possible to use accented letters in identifiers.  The maximum length of
 <P>  identifiers is fixed by the compiler.  It is normally 31 characters.
   <p>
 Unlike keywords, upper and lower-case letters are distinct in identifiers.  Unlike keywords, upper and lower-case letters are distinct in identifiers.
 Thus, <TT>Title</TT>, <TT>TITLE</TT>, and <TT>title</TT> are considered  Thus, <tt>Title</tt>, <tt>TITLE</tt>, and <tt>title</tt> are considered
 different identifiers.</P>  different identifiers.</p>
 </DD>  </dd>
 <DT><TT>STRING</TT></DT>  <dt><tt>STRING</tt></dt>
 <DD>represents a string.  This is a string of characters delimited by  <dd>
 apostrophes.  If an apostrophe must appear in a string, it is doubled.  As  represents a string.  This is a string of characters delimited by apostrophes.
 with identifiers, strings can contain characters represented by their octal  If an apostrophe must appear in a string, it is doubled.  As with identifiers,
 code (after a backslash).  As with apostrophes, if a backslash must appear in  strings can contain characters represented by their octal code (after a
 a string, it is doubled.  backslash).  As with apostrophes, if a backslash must appear in a string, it
 </DD>  is doubled.
 <DT><TT>NUMBER</TT></DT>  </dd>
 <DD>represents a positive integer or zero (without a sign), or said another  <dt><tt>NUMBER</tt></dt>
 way, a sequence of decimal digits.  <dd>
 </DD>  represents a positive integer or zero (without a sign), or said another way, a
 </DL>  sequence of decimal digits.
 <P>  </dd>
 The M language can be used to define itself as follows:</P>  </dl>
 <PRE>  <p>
 { Any text between braces is a comment. }  The M language can be used to define itself as follows:</p>
   <pre>{ Any text between braces is a comment. }
 Grammar      = Rule &lt; Rule > 'END' .  Grammar      = Rule &lt; Rule > 'END' .
                { The &lt; and > signs indicate zero }                 { The &lt; and > signs indicate zero }
                { or more repetitions. }                 { or more repetitions. }
Line 1159  Ident        = NAME . Line 1341  Ident        = NAME .
                { Identifier, sequence of characters }                 { Identifier, sequence of characters }
 KeyWord      = STRING .  KeyWord      = STRING .
                { Character string delimited by apostrophes }                 { Character string delimited by apostrophes }
 END  END</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc322>Extension schemas</A></H3>  
   
 <P>  <h3><a name="sectc322">Extension schemas</a></h3>
   <p>
 A structure schema defines the generic logical structure of a class of  A structure schema defines the generic logical structure of a class of
 documents or objects, independent of the operations which can be performed on  documents or objects, independent of the operations which can be performed on
 the documents.  However, certain applications may require particular  the documents.  However, certain applications may require particular
Line 1174  information to be represented by the str Line 1355  information to be represented by the str
 operate on.  Thus a document version manager will need to indicate in the  operate on.  Thus a document version manager will need to indicate in the
 document the parts which belong to one version or another.  An indexing system  document the parts which belong to one version or another.  An indexing system
 will add highly-structured index tables as well as the links between these  will add highly-structured index tables as well as the links between these
 tables and the rest of the document.</P>  tables and the rest of the document.</p>
 <P>  <p>
 Thus, many applications need to extend the generic structure of the documents  Thus, many applications need to extend the generic structure of the documents
 on which they operate to introduce new attributes, associated elements or  on which they operate to introduce new attributes, associated elements or
 element types.  These additions are specific to each application and must be  element types.  These additions are specific to each application and must be
Line 1184  versions or construct indices for many t Line 1365  versions or construct indices for many t
 fulfill this role: they define attributes, elements, associated elements,  fulfill this role: they define attributes, elements, associated elements,
 units, etc., but they can only be used jointly with a structure schema that  units, etc., but they can only be used jointly with a structure schema that
 they complete. Otherwise, structure schemas can always be used without these  they complete. Otherwise, structure schemas can always be used without these
 extensions when the corresponding applications are not available.</P>  extensions when the corresponding applications are not available.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc323>The general organization of structure schemas</A></H3>  
   
 <P>  <h3><a name="sectc323">The general organization of structure schemas</a></h3>
 Every structure schema begins with the keyword <TT>STRUCTURE</TT> and ends  <p>
 with the keyword <TT>END</TT>.  The keyword <TT>STRUCTURE</TT> is followed by  Every structure schema begins with the keyword <tt>STRUCTURE</tt> and ends
 the keyword <TT>EXTENSION</TT> in the case where the schema defines an  with the keyword <tt>END</tt>.  The keyword <tt>STRUCTURE</tt> is followed by
   the keyword <tt>EXTENSION</tt> in the case where the schema defines an
 extension, then by the name of the generic structure which the schema defines  extension, then by the name of the generic structure which the schema defines
 (the name of the document or object class).  The name of the structure is  (the name of the document or object class).  The name of the structure is
 followed by a semicolon.</P>  followed by a semicolon.</p>
 <P>  <p>
 In the case of a complete schema (that is, a schema which is not an  In the case of a complete schema (that is, a schema which is not an
 extension), the definition of the name of the structure is followed by the  extension), the definition of the name of the structure is followed by the
 declarations of the default presentation schema, the global attributes, the  declarations of the default presentation schema, the global attributes, the
 parameters, the structure rules, the associated elements, the units, the  parameters, the structure rules, the associated elements, the units, the
 skeleton elements and the exceptions.  Only the definition of the structure  skeleton elements and the exceptions.  Only the definition of the structure
 rules is required.  Each series of declarations begins with a keyword:  rules is required.  Each series of declarations begins with a keyword:
 <TT>DEFPRES</TT>, <TT>ATTR</TT>, <TT>PARAM</TT>, <TT>STRUCT</TT>,  <tt>DEFPRES</tt>, <tt>ATTR</tt>, <tt>PARAM</tt>, <tt>STRUCT</tt>,
 <TT>ASSOC</TT>, <TT>UNITS</TT>, <TT>EXPORT</TT>, <TT>EXCEPT</TT>.</P>  <tt>ASSOC</tt>, <tt>UNITS</tt>, <tt>EXPORT</tt>, <tt>EXCEPT</tt>.</p>
 <P>  <p>
 In the case of an extension schema, there are neither parameters nor skeleton  In the case of an extension schema, there are neither parameters nor skeleton
 elements and the <TT>STRUCT</TT> section is optional, while that section is  elements and the <tt>STRUCT</tt> section is optional, while that section is
 required in a schema that is not an extension.  On the other hand, extension  required in a schema that is not an extension.  On the other hand, extension
 schemas can contain an <TT>EXTENS</TT> section, which must not appear in a  schemas can contain an <tt>EXTENS</tt> section, which must not appear in a
 schema which is not an extension; this section defines the complements to  schema which is not an extension; this section defines the complements to
 attach to the rules found in the schema to which the extension will be added.  attach to the rules found in the schema to which the extension will be added.
 The sections <TT>ATTR</TT>, <TT>STRUCT</TT>, <TT>ASSOC</TT>, and  The sections <tt>ATTR</tt>, <tt>STRUCT</tt>, <tt>ASSOC</tt>, and
 <TT>UNITS</TT> define new attributes, new elements, new associated elements,  <tt>UNITS</tt> define new attributes, new elements, new associated elements,
 and new units which add their definitions to the principal schema.</P>  and new units which add their definitions to the principal schema.</p>
 <PRE>  <pre>     StructSchema ='STRUCTURE' ElemID ';'
      StructSchema ='STRUCTURE' ElemID ';'  
                    'DEFPRES' PresID ';'                     'DEFPRES' PresID ';'
                  [ 'ATTR' AttrSeq ]                   [ 'ATTR' AttrSeq ]
                  [ 'PARAM' RulesSeq ]                   [ 'PARAM' RulesSeq ]
Line 1227  and new units which add their definition Line 1407  and new units which add their definition
                  [ 'EXPORT' SkeletonSeq ]                   [ 'EXPORT' SkeletonSeq ]
                  [ 'EXCEPT' ExceptSeq ]                   [ 'EXCEPT' ExceptSeq ]
                    'END' .                     'END' .
      ElemID       = NAME .       ElemID       = NAME .</pre>
 </PRE>  <p>
 <P>  or</p>
 or</P>  <pre>     ExtensSchema ='STRUCTURE' 'EXTENSION' ElemID ';'
 <PRE>  
      ExtensSchema ='STRUCTURE' 'EXTENSION' ElemID ';'  
                    'DEFPRES' PresID ';'                     'DEFPRES' PresID ';'
                  [ 'ATTR' AttrSeq ]                   [ 'ATTR' AttrSeq ]
                  [ 'STRUCT' RulesSeq ]                   [ 'STRUCT' RulesSeq ]
Line 1241  or</P> Line 1419  or</P>
                  [ 'UNITS' RulesSeq ]                   [ 'UNITS' RulesSeq ]
                  [ 'EXCEPT' ExceptSeq ]                   [ 'EXCEPT' ExceptSeq ]
                    'END' .                     'END' .
      ElemID       = NAME .       ElemID       = NAME .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc324>The default presentation</A></H3>  
   
 <P>  <h3><a name="sectc324">The default presentation</a></h3>
 It was shown <A href="#mulpres">above</A> that many different presentations  <p>
   It was shown <a href="#mulpres">above</a> that many different presentations
 are possible for documents and objects of the same class.  The structure  are possible for documents and objects of the same class.  The structure
 schema defines a preferred presentation for the class, called the <EM>default  schema defines a preferred presentation for the class, called the <em>default
 presentation</EM>.  Like generic structures, presentations are described by  presentation</em>.  Like generic structures, presentations are described by
 programs, called <EM>presentation schemas</EM>, which are written in a  programs, called <em>presentation schemas</em>, which are written in a
 specific language, P, presented <A href="#sectb42">later</A> in this document.  specific language, P, presented <a href="#sectb42">later</a> in this document.
 The name appearing after the keyword <TT>DEFPRES</TT> is the name of the  The name appearing after the keyword <tt>DEFPRES</tt> is the name of the
 default presentation schema.  When a new document is created, Thot will use  default presentation schema.  When a new document is created, Thot will use
 this presentation schema by default, but the user remains free to choose  this presentation schema by default, but the user remains free to choose
 another if s/he wishes.</P>  another if s/he wishes.</p>
 <PRE>  <pre>     PresID = NAME .</pre>
      PresID = NAME .  </div>
 </PRE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc325>Global Attributes</A></H3>  
   
 <P>  <h3><a name="sectc325">Global Attributes</a></h3>
   <p>
 If the generic structure includes global attributes of its own, they are  If the generic structure includes global attributes of its own, they are
 declared after the keyword <TT>ATTR</TT>.  Each global attribute is defined by  declared after the keyword <tt>ATTR</tt>.  Each global attribute is defined by
 its name, followed by an equals sign and the definition of its type.  The  its name, followed by an equals sign and the definition of its type.  The
 declaration of a global attribute is terminated by a semi-colon.</P>  declaration of a global attribute is terminated by a semi-colon.</p>
 <P>  <p>
 For attributes of the numeric, textual, or reference types, the type is  For attributes of the numeric, textual, or reference types, the type is
 indicated by a keyword, <TT>INTEGER</TT>, <TT>TEXT</TT>, or <TT>REFERENCE</TT>  indicated by a keyword, <tt>INTEGER</tt>, <tt>TEXT</tt>, or <tt>REFERENCE</tt>
 respectively.</P>  respectively.</p>
 <P>  <p>
 In the case of a reference attribute, the keyword <TT>REFERENCE</TT> is  In the case of a reference attribute, the keyword <tt>REFERENCE</tt> is
 followed by the type of the referenced element in parentheses.  It can refer  followed by the type of the referenced element in parentheses.  It can refer
 to any type at all, specified by using the keyword <TT>ANY</TT>, or to a  to any type at all, specified by using the keyword <tt>ANY</tt>, or to a
 specific type.  In the latter case, the element type designated by the  specific type.  In the latter case, the element type designated by the
 reference can be defined either in the <A href="#sectc327"><TT>STRUCT</TT>  reference can be defined either in the <a href="#sectc327"><tt>STRUCT</tt>
 section</A> of the same structure schema or in the <TT>STRUCT</TT> section of  section</a> of the same structure schema or in the <tt>STRUCT</tt> section of
 another structure schema.  When the type is defined in another schema, the  another structure schema.  When the type is defined in another schema, the
 element type is followed by the name of the structure schema (within  element type is followed by the name of the structure schema (within
 parentheses) in which it is defined.  The name of the designated element type  parentheses) in which it is defined.  The name of the designated element type
 can be preceded by the keyword <TT>First</TT> or <TT>Second</TT>, but only in  can be preceded by the keyword <tt>First</tt> or <tt>Second</tt>, but only in
 the case where the type is defined as <A href="#sectd3285">a pair</A>.  These  the case where the type is defined as <a href="#sectd3285">a pair</a>.  These
 keywords indicate whether the attribute must designate the first mark of the  keywords indicate whether the attribute must designate the first mark of the
 pair or the second.  If the reference refers to a pair and neither of these  pair or the second.  If the reference refers to a pair and neither of these
 two keywords is present, then the first mark is used.</P>  two keywords is present, then the first mark is used.</p>
 <P>  <p>
 In the case of an enumeration attribute, the equals sign is followed by the  In the case of an enumeration attribute, the equals sign is followed by the
 list of names representing the possible values of the attribute, the names  list of names representing the possible values of the attribute, the names
 being separated from each other by commas.  An enumeration attribute has at  being separated from each other by commas.  An enumeration attribute has at
 least one possible value; the maximum number of values is defined by the  least one possible value; the maximum number of values is defined by the
 compiler for the S language.</P>  compiler for the S language.</p>
 <PRE>  <pre>     AttrSeq   = Attribute &lt; Attribute > .
      AttrSeq   = Attribute &lt; Attribute > .  
      Attribute = AttrID '=' AttrType  ';' .       Attribute = AttrID '=' AttrType  ';' .
      AttrType  = 'INTEGER' / 'TEXT' /       AttrType  = 'INTEGER' / 'TEXT' /
                  'REFERENCE' '(' RefType ')' /                   'REFERENCE' '(' RefType ')' /
Line 1308  compiler for the S language.</P> Line 1482  compiler for the S language.</P>
      ExtStruct = '(' ElemID ')' .       ExtStruct = '(' ElemID ')' .
      ValueSeq  = AttrVal &lt; ',' AttrVal > .       ValueSeq  = AttrVal &lt; ',' AttrVal > .
      AttrID    = NAME .       AttrID    = NAME .
      AttrVal   = NAME .       AttrVal   = NAME .</pre>
 </PRE>  <p>
 <P>  There is a predefined global text attribute, the <em>language</em>, which is
 There is a predefined global text attribute, the <EM>language</EM>, which is  
 automatically added to every Thot structure schema.  This attribute allows  automatically added to every Thot structure schema.  This attribute allows
 Thot to perform certain actions, such as hyphenation and spell-checking, which  Thot to perform certain actions, such as hyphenation and spell-checking, which
 cannot be performed without knowing the language in which each part of the  cannot be performed without knowing the language in which each part of the
 document is written.  This attribute can be used just like any explicitly  document is written.  This attribute can be used just like any explicitly
 declared attribute: the system acts as if every structure schema contains</P>  declared attribute: the system acts as if every structure schema contains</p>
 <PRE>  <pre>ATTR
 ATTR     Language = TEXT;</pre>
    Language = TEXT;  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 The following specification defines the global enumeration attribute  The following specification defines the global enumeration attribute
 WordType.</P>  WordType.</p>
 <PRE>  <pre>ATTR
 ATTR     WordType = Definition, IndexWord, DocumentTitle;</pre>
    WordType = Definition, IndexWord, DocumentTitle;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc326>Parameters</A></H3>  
   
 <P>  <h3><a name="sectc326">Parameters</a></h3>
   <p>
 A parameter is a document element which can appear many times in the document,  A parameter is a document element which can appear many times in the document,
 but always has the same value.  This value can only be modified in a  but always has the same value.  This value can only be modified in a
 controlled way by certain applications.  For example, in an advertising  controlled way by certain applications.  For example, in an advertising
 circular, the name of the recipient may appear in the address part and in the  circular, the name of the recipient may appear in the address part and in the
 text of the circular.  If the recipient's name were a parameter, it might only  text of the circular.  If the recipient's name were a parameter, it might only
 be able to be changed by a ``mail-merge'' application.</P>  be able to be changed by a ``mail-merge'' application.</p>
 <P>  <p>
 Parameters are not needed for every document class, but if the schema includes  Parameters are not needed for every document class, but if the schema includes
 parameters they are declared after the keyword <TT>PARAM</TT>. Each parameter  parameters they are declared after the keyword <tt>PARAM</tt>. Each parameter
 declaration is made in the same way as a <A href="#sectc327">structure  declaration is made in the same way as a <a href="#sectc327">structure element
 element declaration</A>.</P>  declaration</a>.</p>
 <P>  <p>
 During editing, Thot permits the insertion of parameters wherever the  During editing, Thot permits the insertion of parameters wherever the
 structure schema allows; it also permits the removal of parameters which are  structure schema allows; it also permits the removal of parameters which are
 already in the document but does not allow the modification of the parameter's  already in the document but does not allow the modification of the parameter's
 content in any way.  The content is generated automatically by Thot during the  content in any way.  The content is generated automatically by Thot during the
 creation of the parameter, based on the value of the parameter in the  creation of the parameter, based on the value of the parameter in the
 document.</P>  document.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc327>Structured elements</A></H3>  
   
 <P>  <h3><a name="sectc327">Structured elements</a></h3>
   <p>
 The rules for defining structured elements are required, except in an  The rules for defining structured elements are required, except in an
 extension schema: they constitute the core of a structure schema, since they  extension schema: they constitute the core of a structure schema, since they
 define the structure of the different types of elements that occur in a  define the structure of the different types of elements that occur in a
 document or object of the class defined by the schema.</P>  document or object of the class defined by the schema.</p>
 <P>  <p>
 The first structure rule after the keyword <TT>STRUCT</TT> must define the  The first structure rule after the keyword <tt>STRUCT</tt> must define the
 structure of the class whose name appears in the first instruction  structure of the class whose name appears in the first instruction
 (<TT>STRUCTURE</TT>) of the schema.  This is the root rule of the schema,  (<tt>STRUCTURE</tt>) of the schema.  This is the root rule of the schema,
 defining the root of the document tree or object tree.</P>  defining the root of the document tree or object tree.</p>
 <P>  <p>
 The remaining rules may be placed in any order, since the language permits the  The remaining rules may be placed in any order, since the language permits the
 definition of element types before or after their use, or even in the same  definition of element types before or after their use, or even in the same
 instruction in which they are used.  This last case allows the definition of  instruction in which they are used.  This last case allows the definition of
 recursive structures.</P>  recursive structures.</p>
 <P>  <p>
 Each rule is composed of a name (the name of the element type whose structure  Each rule is composed of a name (the name of the element type whose structure
 is being defined) followed by an equals sign and a structure definition.</P>  is being defined) followed by an equals sign and a structure definition.</p>
 <P>  <p>
 If any local attributes are associated with the element type defined by the  If any local attributes are associated with the element type defined by the
 rule, they appear between parentheses after the type name and before the  rule, they appear between parentheses after the type name and before the
 equals sign.  The parentheses contain, first, the keyword <TT>ATTR</TT>, then  equals sign.  The parentheses contain, first, the keyword <tt>ATTR</tt>, then
 the list of local attributes, separated by commas.  Each local attribute is  the list of local attributes, separated by commas.  Each local attribute is
 composed of the name of the attribute followed by an equals sign and the  composed of the name of the attribute followed by an equals sign and the
 definition of the attribute's type, just as in the definition of <A  definition of the attribute's type, just as in the definition of <a
 href="#sectc325">global attributes</A>.  The name of the attribute can be  href="#sectc325">global attributes</a>.  The name of the attribute can be
 preceded by an exclamation point to indicate that the attribute must always be  preceded by an exclamation point to indicate that the attribute must always be
 present for this element type.  The same attribute, identified by its name,  present for this element type.  The same attribute, identified by its name,
 can be defined  as a local attribute for multiple element types.  In this  can be defined  as a local attribute for multiple element types.  In this
 case, the equals sign and definition of the attribute type need only appear in  case, the equals sign and definition of the attribute type need only appear in
 the first occurrence of the attribute.  It should be noted that global  the first occurrence of the attribute.  It should be noted that global
 attributes cannot also be defined as local attributes.</P>  attributes cannot also be defined as local attributes.</p>
 <P>  <p>
 If any <A href="#sectd3135">extensions</A> are defined for this  If any <a href="#sectd3135">extensions</a> are defined for this element type,
 element type, a plus sign follows the structure definition and the names of  a plus sign follows the structure definition and the names of the extension
 the extension element types appear between parentheses after the plus.  If  element types appear between parentheses after the plus.  If there are
 there are multiple extensions, they are separated by commas.  These types can  multiple extensions, they are separated by commas.  These types can either be
 either be defined in the same schema, defined in other schemas, or they may be  defined in the same schema, defined in other schemas, or they may be base
 base types identified by the keywords <TT>TEXT</TT>, <TT>GRAPHICS</TT>,  types identified by the keywords <tt>TEXT</tt>, <tt>GRAPHICS</tt>,
 <TT>SYMBOL</TT>, or <TT>PICTURE</TT>.</P>  <tt>SYMBOL</tt>, or <tt>PICTURE</tt>.</p>
 <P>  <p>
 <A href="#sectd3135">Restrictions</A> are indicated in the same  <a href="#sectd3135">Restrictions</a> are indicated in the same manner as
 manner as extensions, but they are introduced by a minus sign and they come  extensions, but they are introduced by a minus sign and they come after the
 after the extensions, or if there are no extensions, after the structure  extensions, or if there are no extensions, after the structure definition.</p>
 definition.</P>  <p>
 <P>  
 If the values of attributes must be attached systematically to this element  If the values of attributes must be attached systematically to this element
 type, they are introduced by the keyword <TT>WITH</TT> and declared in the  type, they are introduced by the keyword <tt>WITH</tt> and declared in the
 form of a list of fixed-value attributes.  When such definitions of fixed  form of a list of fixed-value attributes.  When such definitions of fixed
 attribute values appear, they are always the last part of the rule.</P>  attribute values appear, they are always the last part of the rule.</p>
 <P>  <p>
 The rule is terminated by a semicolon.</P>  The rule is terminated by a semicolon.</p>
 <PRE>  <pre>  RuleSeq       = Rule &lt; Rule > .
   RuleSeq       = Rule &lt; Rule > .  
   Rule          = ElemID [ LocAttrSeq ] '=' DefWithAttr ';'.    Rule          = ElemID [ LocAttrSeq ] '=' DefWithAttr ';'.
   LocAttrSeq    = '(' 'ATTR' LocAttr &lt; ';' LocAttr > ')' .    LocAttrSeq    = '(' 'ATTR' LocAttr &lt; ';' LocAttr > ')' .
   LocAttr       = [ '!' ] AttrID [ '=' AttrType ] .    LocAttr       = [ '!' ] AttrID [ '=' AttrType ] .
Line 1427  The rule is terminated by a semicolon.</ Line 1594  The rule is terminated by a semicolon.</
                   'SYMBOL' / 'PICTURE' .                    'SYMBOL' / 'PICTURE' .
   RestrictSeq   = RestrictElem &lt; ',' RestrictElem > .    RestrictSeq   = RestrictElem &lt; ',' RestrictElem > .
   RestrictElem  = ElemID / 'TEXT' / 'GRAPHICS' /    RestrictElem  = ElemID / 'TEXT' / 'GRAPHICS' /
                   'SYMBOL' / 'PICTURE' .                    'SYMBOL' / 'PICTURE' .</pre>
 </PRE>  <p>
 <P>  
 The list of fixed-value attributes is composed of a sequence of  The list of fixed-value attributes is composed of a sequence of
 attribute-value pairs separated by commas.  Each pair contains the name of the  attribute-value pairs separated by commas.  Each pair contains the name of the
 attribute and the fixed value for this element type, the two being separated  attribute and the fixed value for this element type, the two being separated
Line 1440  cannot be assigned a fixed value, but wh Line 1606  cannot be assigned a fixed value, but wh
 appears this indicates that this element type must have a valid value for the  appears this indicates that this element type must have a valid value for the
 attribute.  For the other attribute types, the fixed value is indicated by a  attribute.  For the other attribute types, the fixed value is indicated by a
 signed integer (numeric attributes), a character string between apostrophes  signed integer (numeric attributes), a character string between apostrophes
 (textual attributes) or the name of a value (enumeration attributes).</P>  (textual attributes) or the name of a value (enumeration attributes).</p>
 <P>  <p>
 Fixed-value attributes can either be <A href="#sectc325">global</A> or local  Fixed-value attributes can either be <a href="#sectc325">global</a> or local
 to the element type for which they are fixed, but they must be declared before  to the element type for which they are fixed, but they must be declared before
 they are used.</P>  they are used.</p>
 <PRE>  <pre>    FixedAttrSeq    = FixedAttr &lt; ',' FixedAttr > .
     FixedAttrSeq    = FixedAttr &lt; ',' FixedAttr > .  
     FixedAttr       = AttrID [ FixedOrModifVal ] .      FixedAttr       = AttrID [ FixedOrModifVal ] .
     FixedOrModifVal = [ '?' ] '=' FixedValue .      FixedOrModifVal = [ '?' ] '=' FixedValue .
     FixedValue      = [ '-' ] NumValue / TextVal / AttrVal .      FixedValue      = [ '-' ] NumValue / TextVal / AttrVal .
     NumValue        = NUMBER .      NumValue        = NUMBER .
     TextVal         = STRING .      TextVal         = STRING .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc328>Structure definitions</A></H3>  
   
 <P>  <h3><a name="sectc328">Structure definitions</a></h3>
   <p>
 The structure of an element type can be a simple base type or a constructed  The structure of an element type can be a simple base type or a constructed
 type.</P>  type.</p>
 <P>  <p>
 For constructed types, it is frequently the case that similar structures  For constructed types, it is frequently the case that similar structures
 appear in many places in a document.  For example the contents of the  appear in many places in a document.  For example the contents of the
 abstract, of the introduction, and of a section can have the same structure,  abstract, of the introduction, and of a section can have the same structure,
 that of a sequence of paragraphs.  In this case, a single, common structure  that of a sequence of paragraphs.  In this case, a single, common structure
 can be defined (the paragraph sequence in this example), and the schema is  can be defined (the paragraph sequence in this example), and the schema is
 written to indicate that each element type possesses this structure, as  written to indicate that each element type possesses this structure, as
 follows:</P>  follows:</p>
 <PRE>  <pre>     Abstract           = Paragraph_sequence;
      Abstract           = Paragraph_sequence;  
      Introduction       = Paragraph_sequence;       Introduction       = Paragraph_sequence;
      Section_contents   = Paragraph_sequence;       Section_contents   = Paragraph_sequence;</pre>
 </PRE>  <p>
 <P>  The equals sign means ``has the same structure as''.</p>
 The equals sign means ``has the same structure as''.</P>  <p>
 <P>  
 If the element type defined is a simple base type, this is indicated by one of  If the element type defined is a simple base type, this is indicated by one of
 the keywords <TT>TEXT</TT>, <TT>GRAPHICS</TT>, <TT>SYMBOL</TT>, or  the keywords <tt>TEXT</tt>, <tt>GRAPHICS</tt>, <tt>SYMBOL</tt>, or
 <TT>PICTURE</TT>.  If some local attributes must be associated with a base  <tt>PICTURE</tt>.  If some local attributes must be associated with a base
 type, the keyword of the base type is followed by the declaration of the local  type, the keyword of the base type is followed by the declaration of the local
 attributes using the syntax <A href="#sectc327">presented above.</A></P>  attributes using the syntax <a href="#sectc327">presented above.</a></p>
 <P>  <p>
 In the case of an open choice, the type is indicated by the keyword  In the case of an open choice, the type is indicated by the keyword
 <TT>UNIT</TT> for units or the keyword <TT>NATURE</TT> for objects having a  <tt>UNIT</tt> for units or the keyword <tt>NATURE</tt> for objects having a
 structure defined by any other schema.</P>  structure defined by any other schema.</p>
 <P>  <p>
 A unit represents one of the two following categories:</P>  A unit represents one of the two following categories:</p>
 <UL>  <ul>
 <LI>a base type: text, graphical element, symbol, picture,  <li>
 <LI>an element whose type is chosen from among the types defined as units in  a base type: text, graphical element, symbol, picture,
 the <TT>UNITS</TT> section of the document's structure schema.  It can also be  <li>
 chosen from among the types defined as <A href="#sectd3132">units</A> in  an element whose type is chosen from among the types defined as units in the
 the <A href="#sectc3212"><TT>UNITS</TT> section</A> of the structure schemas that  <tt>UNITS</tt> section of the document's structure schema.  It can also be
   chosen from among the types defined as <a href="#sectd3132">units</a> in the
   <a href="#sectc3212"><tt>UNITS</tt> section</a> of the structure schemas that
 defines the ancestors of the element to which the rule is applied.  defines the ancestors of the element to which the rule is applied.
 </UL>  </ul>
 <P>  <p>
 Before the creation of an element defined as a unit, Thot asks the user to  Before the creation of an element defined as a unit, Thot asks the user to
 choose between the categories of elements.</P>  choose between the categories of elements.</p>
 <P>  <p>
 Thus, the contents of a paragraph can be specified as a sequence of units,  Thus, the contents of a paragraph can be specified as a sequence of units,
 which will permit the inclusion in the paragraphs of character strings,  which will permit the inclusion in the paragraphs of character strings,
 symbols, and various elements, such as cross-references, if these are defined  symbols, and various elements, such as cross-references, if these are defined
 as units.</P>  as units.</p>
 <P>  <p>
 A schema object (keyword <TT>NATURE</TT>) represents an object defined by a  A schema object (keyword <tt>NATURE</tt>) represents an object defined by a
 structure schema freely chosen from among the available schemas; in the case  structure schema freely chosen from among the available schemas; in the case
 the element type is defined by the first rule (the root rule) of the chosen  the element type is defined by the first rule (the root rule) of the chosen
 schema.</P>  schema.</p>
 <P>  <p>
 If the element type defined is a constructed type, the list, aggregate,  If the element type defined is a constructed type, the list, aggregate,
 choice, and reference constructors are used.  In this case the definition  choice, and reference constructors are used.  In this case the definition
 begins with a keyword identifying the constructor.  This keyword is followed  begins with a keyword identifying the constructor.  This keyword is followed
 by a syntax specific to each constructor.</P>  by a syntax specific to each constructor.</p>
 <P>  <p>
 The local attribute definitions appear after the name of the element type  The local attribute definitions appear after the name of the element type
 being defined, if this element type has <A href="#sectc327">local  being defined, if this element type has <a href="#sectc327">local
 attributes</A>.</P>  attributes</a>.</p>
 <PRE>  <pre>   Definition = BaseType [ LocAttrSeq ] / Constr / Element .
    Definition = BaseType [ LocAttrSeq ] / Constr / Element .  
    BaseType   = 'TEXT' / 'GRAPHICS' / 'SYMBOL' / 'PICTURE' /     BaseType   = 'TEXT' / 'GRAPHICS' / 'SYMBOL' / 'PICTURE' /
                 'UNIT' / 'NATURE' .                  'UNIT' / 'NATURE' .
    Element    = ElemID [ ExtOrDef ] .     Element    = ElemID [ ExtOrDef ] .
Line 1531  attributes</A>.</P> Line 1694  attributes</A>.</P>
                 'AGGREGATE' DefOptSeq 'END' /                  'AGGREGATE' DefOptSeq 'END' /
                 'CASE' 'OF' DefSeq 'END' /                  'CASE' 'OF' DefSeq 'END' /
                 'REFERENCE' '(' RefType ')' /                  'REFERENCE' '(' RefType ')' /
                 'PAIR' .                  'PAIR' .</pre>
 </PRE>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3281>List</A></H4>  
   
 <P>  <h4><a name="sectd3281">List</a></h4>
   <p>
 The list constructor permits the definition of an element type composed of a  The list constructor permits the definition of an element type composed of a
 list of elements, all of the same type.  A list definition begins with the  list of elements, all of the same type.  A list definition begins with the
 <TT>LIST</TT> keyword followed by an optional range, the keyword <TT>OF</TT>,  <tt>LIST</tt> keyword followed by an optional range, the keyword <tt>OF</tt>,
 and the definition, between parentheses, of the element type which must  and the definition, between parentheses, of the element type which must
 compose the list.  The optional range is composed of the minimum and maximum  compose the list.  The optional range is composed of the minimum and maximum
 number of elements for the list separated by two periods and enclosed by  number of elements for the list separated by two periods and enclosed by
 brackets.  If the range is not present, the number of list elements is  brackets.  If the range is not present, the number of list elements is
 unconstrained.  When only one of the two bounds of the range is unconstrained,  unconstrained.  When only one of the two bounds of the range is unconstrained,
 it is represented by a star ('*') character.  Even when both bounds are  it is represented by a star ('*') character.  Even when both bounds are
 unconstrained, they can be specified by <TT>[*..*]</TT>, but it is simpler not  unconstrained, they can be specified by <tt>[*..*]</tt>, but it is simpler not
 to specify any bound.</P>  to specify any bound.</p>
 <PRE>  <pre>               'LIST' [ '[' min '..' max ']' ]
                'LIST' [ '[' min '..' max ']' ]  
                'OF' '(' DefWithAttr ')'                 'OF' '(' DefWithAttr ')'
      min     = Integer / '*' .       min     = Integer / '*' .
      max     = Integer / '*' .       max     = Integer / '*' .
      Integer = NUMBER .       Integer = NUMBER .</pre>
 </PRE>  <p>
 <P>  
 Before the document is edited, Thot creates the minimum number of elements for  Before the document is edited, Thot creates the minimum number of elements for
 the list.  If no minimum was given, it creates a single element. If a maximum  the list.  If no minimum was given, it creates a single element. If a maximum
 number of elements is given and that number is attained, the editor refuses to  number of elements is given and that number is attained, the editor refuses to
 create new elements for the list.</P>  create new elements for the list.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 The following two instructions define the body of a document as a sequence of  The following two instructions define the body of a document as a sequence of
 at least two chapters and the contents of a section as a sequence of  at least two chapters and the contents of a section as a sequence of
 paragraphs.  A single paragraph can be the entire contents of a section.</P>  paragraphs.  A single paragraph can be the entire contents of a section.</p>
 <PRE>  <pre>Body             = LIST [2..*] OF (Chapter);
 Body             = LIST [2..*] OF (Chapter);  Section_contents = LIST OF (Paragraph);</pre>
 Section_contents = LIST OF (Paragraph);  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3282>Aggregate</A></H4>  
   
 <P>  <h4><a name="sectd3282">Aggregate</a></h4>
   <p>
 The aggregate constructor is used to define an element type as a collection of  The aggregate constructor is used to define an element type as a collection of
 sub-elements, each having a fixed type.  The collection may be ordered or  sub-elements, each having a fixed type.  The collection may be ordered or
 unordered.  The elements composing the collection are called  unordered.  The elements composing the collection are called
 <EM>components</EM>.  In the definition of an aggregate, a keyword indicates  <em>components</em>.  In the definition of an aggregate, a keyword indicates
 whether or not the aggregate is ordered: <TT>BEGIN</TT> for an ordered  whether or not the aggregate is ordered: <tt>BEGIN</tt> for an ordered
 aggregate, <TT>AGGREGATE</TT> for an unordered aggregate. This keyword is  aggregate, <tt>AGGREGATE</tt> for an unordered aggregate. This keyword is
 followed by the list of component type definitions which is terminated by the  followed by the list of component type definitions which is terminated by the
 <TT>END</TT> keyword.  The component type definitions are separated by  <tt>END</tt> keyword.  The component type definitions are separated by
 commas.</P>  commas.</p>
 <P>  <p>
 Before creating an aggregate, the Thot editor creates all the aggregate's  Before creating an aggregate, the Thot editor creates all the aggregate's
 components in the order they appear in the structure schema, even for  components in the order they appear in the structure schema, even for
 unordered aggregates.  However, unlike ordered aggregates, the components of  unordered aggregates.  However, unlike ordered aggregates, the components of
Line 1596  an unordered aggregate may be rearranged Line 1754  an unordered aggregate may be rearranged
 The exceptions to the rule are any components whose name was preceded by a  The exceptions to the rule are any components whose name was preceded by a
 question mark character ('?').  These components, which are optional, can be  question mark character ('?').  These components, which are optional, can be
 created by explicit request, possibly at the time the aggregate is created,  created by explicit request, possibly at the time the aggregate is created,
 but they are not created automatically <EM>prior</EM> to the creation of the  but they are not created automatically <em>prior</em> to the creation of the
 aggregate.</P>  aggregate.</p>
 <PRE>  <pre>                 'BEGIN' DefOptSeq 'END'
                  'BEGIN' DefOptSeq 'END'  
      DefOptSeq = DefOpt ';' &lt; DefOpt ';' > .       DefOptSeq = DefOpt ';' &lt; DefOpt ';' > .
      DefOpt    = [ '?' ] DefWithAttr .       DefOpt    = [ '?' ] DefWithAttr .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 In a bilingual document, each paragraph has an English version and a French  In a bilingual document, each paragraph has an English version and a French
 version.  In certain cases, the translator wants to add a marginal note, but  version.  In certain cases, the translator wants to add a marginal note, but
 this note is present in very few paragraphs.  Thus, it must not be created  this note is present in very few paragraphs.  Thus, it must not be created
 systematically for every paragraph.  A bilingual paragraph of this type is  systematically for every paragraph.  A bilingual paragraph of this type is
 declared:</P>  declared:</p>
 <PRE>  <pre>Bilingual_paragraph = BEGIN
 Bilingual_paragraph = BEGIN  
                       French_paragraph  = TEXT;                        French_paragraph  = TEXT;
                       English_paragraph = TEXT;                        English_paragraph = TEXT;
                       ? Note            = TEXT;                        ? Note            = TEXT;
                       END;                        END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3283>Choice</A></H4>  
   
 <P>  <h4><a name="sectd3283">Choice</a></h4>
   <p>
 The choice constructor permits the definition of an element type which is  The choice constructor permits the definition of an element type which is
 chosen from among a set of possible types.  The keywords <TT>CASE</TT> and  chosen from among a set of possible types.  The keywords <tt>CASE</tt> and
 <TT>OF</TT> are followed by a list of definitions of possible types, which are  <tt>OF</tt> are followed by a list of definitions of possible types, which are
 separated by semicolons and terminated by the <TT>END</TT> keyword.</P>  separated by semicolons and terminated by the <tt>END</tt> keyword.</p>
 <PRE>  <pre>               'CASE' 'OF' DefSeq 'END'
                'CASE' 'OF' DefSeq 'END'       DefSeq = DefWithAttr ';' &lt; DefWithAttr ';' > .</pre>
      DefSeq = DefWithAttr ';' &lt; DefWithAttr ';' > .  <p>
 </PRE>  
 <P>  
 Before the creation of an element defined as a choice, the Thot editor  Before the creation of an element defined as a choice, the Thot editor
 presents the list of possible types for the element to the user.  The user has  presents the list of possible types for the element to the user.  The user has
 only to select the element type that s/he wants to create from this list.</P>  only to select the element type that s/he wants to create from this list.</p>
 <P>  <p>
 The order of the type declarations is important.  It determines the order of  The order of the type declarations is important.  It determines the order of
 the list presented to the user before the creation of the element.  Also, when  the list presented to the user before the creation of the element.  Also, when
 a Choice element is being created automatically, the first type in the list is  a Choice element is being created automatically, the first type in the list is
 used.  In fact, using the Thot editor, when an empty Choice element is  used.  In fact, using the Thot editor, when an empty Choice element is
 selected, it is possible to select this element and to enter its text from  selected, it is possible to select this element and to enter its text from
 keyboard. In this case, the editor uses the first element type which can  keyboard. In this case, the editor uses the first element type which can
 contain an atom of the character string type.</P>  contain an atom of the character string type.</p>
 <P>  <p>
 The two special cases of the choice constructor, the <A  The two special cases of the choice constructor, the <a
 href="#sectc328"><EM>schema</EM></A> and the <A  href="#sectc328"><em>schema</em></a> and the <a
 href="#sectc3212"><EM>unit</EM></A> are discussed elsewhere.</P>  href="#sectc3212"><em>unit</em></a> are discussed elsewhere.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 It is common in documents to treat a variety of objects as if they were  It is common in documents to treat a variety of objects as if they were
 ordinary paragraphs.  Thus, a ``Paragraph'' might actually be composed of a  ordinary paragraphs.  Thus, a ``Paragraph'' might actually be composed of a
 block of text (an ordinary paragraph), or a mathematical formula whose  block of text (an ordinary paragraph), or a mathematical formula whose
 structure is defined by another structure schema named Math, or a table, also  structure is defined by another structure schema named Math, or a table, also
 defined by another structure schema.  Here is a definition of such a  defined by another structure schema.  Here is a definition of such a
 paragraph:</P>  paragraph:</p>
 <PRE>  <pre>Paragraph = CASE OF
 Paragraph = CASE OF  
               Simple_text = TEXT;                Simple_text = TEXT;
               Formula     = Math;                Formula     = Math;
               Table_para  = Table;                Table_para  = Table;
               END;                END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3284>Reference</A></H4>  
   
 <P>  <h4><a name="sectd3284">Reference</a></h4>
   <p>
 Like all elements in Thot, references are typed.  An element type defined as a  Like all elements in Thot, references are typed.  An element type defined as a
 reference is a cross-reference to an element of some other given type. The  reference is a cross-reference to an element of some other given type. The
 keyword <TT>REFERENCE</TT> is followed by the name of a type enclosed in  keyword <tt>REFERENCE</tt> is followed by the name of a type enclosed in
 parentheses.  When the type which is being cross-referenced is defined in  parentheses.  When the type which is being cross-referenced is defined in
 another structure schema, the type name is itself followed by the name of the  another structure schema, the type name is itself followed by the name of the
 external structure schema in which it is defined.</P>  external structure schema in which it is defined.</p>
 <P>  <p>
 When the designated element type is a <A href="#sectd3285">mark pair</A>, it can  When the designated element type is a <a href="#sectd3285">mark pair</a>, it
 be preceded by a <TT>FIRST</TT> or <TT>SECOND</TT> keyword.  These keywords  can be preceded by a <tt>FIRST</tt> or <tt>SECOND</tt> keyword.  These
 indicate whether the reference points to the first or second mark of the pair.  keywords indicate whether the reference points to the first or second mark of
 If the reference points to a pair and neither of these two keywords is  the pair. If the reference points to a pair and neither of these two keywords
 present, the reference is considered to point to the first mark of the  is present, the reference is considered to point to the first mark of the
 pair.</P>  pair.</p>
 <P>  <p>
 There is an exception to the principle of typed references:  it is possible to  There is an exception to the principle of typed references:  it is possible to
 define a reference which designates an element of any type, which can either  define a reference which designates an element of any type, which can either
 be in the same document or another document. In this case, it suffices to put  be in the same document or another document. In this case, it suffices to put
 the keyword <TT>ANY</TT> in the parentheses which indicate the referenced  the keyword <tt>ANY</tt> in the parentheses which indicate the referenced
 element type.</P>  element type.</p>
 <PRE>  <pre>             'REFERENCE' '(' RefType ')'
              'REFERENCE' '(' RefType ')'     RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .</pre>
    RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .  <p>
 </PRE>  When defining an inclusion, the <tt>REFERENCE</tt> keyword is not used.
 <P>  
 When defining an inclusion, the <TT>REFERENCE</TT> keyword is not used.  
 Inclusions with complete expansion are not declared as such in the structure  Inclusions with complete expansion are not declared as such in the structure
 schemas, since any element defined in a structure schema can be replaced by an  schemas, since any element defined in a structure schema can be replaced by an
 element of the same type.  Instead, inclusions without expansion or with  element of the same type.  Instead, inclusions without expansion or with
 partial expansion must be declared explicitly whenever they will include a  partial expansion must be declared explicitly whenever they will include a
 complete object ( and not a part of an object).  In this case, the object type  complete object ( and not a part of an object).  In this case, the object type
 to be included (that is, the name of its structure schema) is followed by a  to be included (that is, the name of its structure schema) is followed by a
 keyword: <TT>EXTERN</TT> for inclusion without expansion and <TT>INCLUDED</TT>  keyword: <tt>EXTERN</tt> for inclusion without expansion and <tt>INCLUDED</tt>
 for partial expansion.</P>  for partial expansion.</p>
 <P>  <p>
 Before creating a cross-reference or an inclusion, the Thot editor asks the  Before creating a cross-reference or an inclusion, the Thot editor asks the
 user to choose, from the document images displayed, the referenced or included  user to choose, from the document images displayed, the referenced or included
 element.</P>  element.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 If the types Note and Section are defined in the Article structure schema, it  If the types Note and Section are defined in the Article structure schema, it
 is possible to define, in the same structure schema, a reference to a note and  is possible to define, in the same structure schema, a reference to a note and
 a reference to a section in this manner:</P>  a reference to a section in this manner:</p>
 <PRE>  <pre>Ref_note    = REFERENCE (Note);
 Ref_note    = REFERENCE (Note);  Ref_section = REFERENCE (Section);</pre>
 Ref_section = REFERENCE (Section);  <p>
 </PRE>  
 <P>  
 It is also possible to define the generic structure of a collection of  It is also possible to define the generic structure of a collection of
 articles, which include (with partial expansion) objects of the Article class  articles, which include (with partial expansion) objects of the Article class
 and which possess an introduction which may include cross-references to  and which possess an introduction which may include cross-references to
 sections of the included articles.  In the Collection structure schema, the  sections of the included articles.  In the Collection structure schema, the
 definitions are:</P>  definitions are:</p>
 <PRE>  <pre>Collection = BEGIN
 Collection = BEGIN  
              Collection_title = TEXT;               Collection_title = TEXT;
              Introduction = LIST OF (Elem = CASE OF               Introduction = LIST OF (Elem = CASE OF
                                            TEXT;                                             TEXT;
Line 1737  Collection = BEGIN Line 1882  Collection = BEGIN
                                            END);                                             END);
              Body = LIST OF (Article INCLUDED);               Body = LIST OF (Article INCLUDED);
              END;               END;
 Ref_sect   = REFERENCE (Section (Article));  Ref_sect   = REFERENCE (Section (Article));</pre>
 </PRE>  <p>
 <P>  
 Here we define a Folder document class which has a title and includes  Here we define a Folder document class which has a title and includes
 documents of different types, particularly Folders:</P>  documents of different types, particularly Folders:</p>
 <PRE>  <pre>Folder   = BEGIN
 Folder   = BEGIN  
            Folder_title    = TEXT;             Folder_title    = TEXT;
            Folder_contents = LIST OF (Document);             Folder_contents = LIST OF (Document);
            END;             END;
Line 1752  Document = CASE OF Line 1895  Document = CASE OF
               Article EXTERN;                Article EXTERN;
               Collection EXTERN;                Collection EXTERN;
               Folder EXTERN;                Folder EXTERN;
               END;                END;</pre>
 </PRE>  <p>
 <P>  
 Under this definition, Folder represents either an aggregate which contains a  Under this definition, Folder represents either an aggregate which contains a
 folder title and the list of included documents or an included folder.  To  folder title and the list of included documents or an included folder.  To
 resolve this ambiguity, in the P language, the placement of a star character  resolve this ambiguity, in the P language, the placement of a star character
 in front of the type name (here, Folder) indicates an included document.</P>  in front of the type name (here, Folder) indicates an included document.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd3285>Mark pairs</A></H4>  
   
 <P>  <h4><a name="sectd3285">Mark pairs</a></h4>
   <p>
 Like other elements, mark pairs are typed.  The two marks of the pair have the  Like other elements, mark pairs are typed.  The two marks of the pair have the
 same type, but there exist two predefined subtypes which apply to all mark  same type, but there exist two predefined subtypes which apply to all mark
 pairs: the first mark of the pair (called <TT>First</TT> in the P and T  pairs: the first mark of the pair (called <tt>First</tt> in the P and T
 languages) and the second mark (called <TT>Second</TT>).</P>  languages) and the second mark (called <tt>Second</tt>).</p>
 <P>  <p>
 In the S language, a mark pair is noted simply by the <TT>PAIR</TT>  In the S language, a mark pair is noted simply by the <tt>PAIR</tt>
 keyword.</P>  keyword.</p>
 <P>  <p>
 In the Thot editor, marks are always moved or destroyed together.  The two  In the Thot editor, marks are always moved or destroyed together.  The two
 marks of a pair have the same identifier, unique within the document, which  marks of a pair have the same identifier, unique within the document, which
 permits intertwining mark pairs without risk of ambiguity.</P>  permits intertwining mark pairs without risk of ambiguity.</p>
 </DIV>  </div>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc329>Imports</A></H3>  
   
 <P>  <h3><a name="sectc329">Imports</a></h3>
   <p>
 Because of schema constructors, it is possible, before editing a document, to  Because of schema constructors, it is possible, before editing a document, to
 use classes defined by other structure schemas whenever they are needed. It is  use classes defined by other structure schemas whenever they are needed. It is
 also possible to assign specific document classes to certain element types. In  also possible to assign specific document classes to certain element types. In
 this case, these classes are simply designated by their name.  In fact, if a  this case, these classes are simply designated by their name.  In fact, if a
 type name is not defined in the structure schema, it is assumed that it  type name is not defined in the structure schema, it is assumed that it
 specifies a structure defined by another structure schema.</P>  specifies a structure defined by another structure schema.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 If the types Math and Table don't appear in the left part of a structure rule  If the types Math and Table don't appear in the left part of a structure rule
 in the schema, the following two rules indicate that a formula has the  in the schema, the following two rules indicate that a formula has the
 structure of an object defined by the structure schema Math and that a table  structure of an object defined by the structure schema Math and that a table
 element has the structure of an object defined by the Table schema.</P>  element has the structure of an object defined by the Table schema.</p>
 <PRE>  <pre>Formula    = Math;
 Formula    = Math;  Table_elem = Table;</pre>
 Table_elem = Table;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc3210">Extension rules</a></h3>
 <H3><A name=sectc3210>Extension rules</A></H3>  <p>
   The <tt>EXTENS</tt> section, which can only appear in an extension schema,
 <P>  
 The <TT>EXTENS</TT> section, which can only appear in an extension schema,  
 defines complements to the rules in the primary schema (i.e. the structure  defines complements to the rules in the primary schema (i.e. the structure
 schema to which the extension schema will be applied). More precisely, this  schema to which the extension schema will be applied). More precisely, this
 section permits the addition to an existing type of local attributes,  section permits the addition to an existing type of local attributes,
 extensions, restrictions and fixed-value attributes.</P>  extensions, restrictions and fixed-value attributes.</p>
 <P>  <p>
 These additions can be applied to the root rule of the primary schema,  These additions can be applied to the root rule of the primary schema,
 designated by the keyword <TT>Root</TT>, or to any other explicitly named  designated by the keyword <tt>Root</tt>, or to any other explicitly named
 rule.</P>  rule.</p>
 <P>  <p>
 Extension rules are separated from each other by a semicolon and each  Extension rules are separated from each other by a semicolon and each
 extension rule has the same syntax as a <A href="#sectc327">structure  extension rule has the same syntax as a <a href="#sectc327">structure
 rule</A>, but the part which defines the constructor is absent.</P>  rule</a>, but the part which defines the constructor is absent.</p>
 <PRE>  <pre>     ExtenRuleSeq = ExtensRule ';' &lt; ExtensRule ';' > .
      ExtenRuleSeq = ExtensRule ';' &lt; ExtensRule ';' > .  
      ExtensRule   = RootOrElem [ LocAttrSeq ]       ExtensRule   = RootOrElem [ LocAttrSeq ]
                     [ '+' '(' ExtensionSeq ')' ]                      [ '+' '(' ExtensionSeq ')' ]
                     [ '-' '(' RestrictSeq ')' ]                      [ '-' '(' RestrictSeq ')' ]
                     [ 'WITH' FixedAttrSeq ] .                      [ 'WITH' FixedAttrSeq ] .
      RootOrElem   = 'Root' / ElemID .       RootOrElem   = 'Root' / ElemID .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc3211>Associated elements</A></H3>  
   
 <P>  <h3><a name="sectc3211">Associated elements</a></h3>
   <p>
 If associated elements are necessary, they must be declared in a specific  If associated elements are necessary, they must be declared in a specific
 section of the structure schema, introduced by the keyword <TT>ASSOC</TT>.  section of the structure schema, introduced by the keyword <tt>ASSOC</tt>.
 Each associated element type is specified like any other structured element.  Each associated element type is specified like any other structured element.
 However, these types must not appear in any other element types of the schema,  However, these types must not appear in any other element types of the schema,
 except in <TT>REFERENCE</TT> rules.</P>  except in <tt>REFERENCE</tt> rules.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc3212>Units</A></H3>  
   
 <P>  <h3><a name="sectc3212">Units</a></h3>
 The <TT>UNITS</TT> section of the structure schema contains the declarations  <p>
   The <tt>UNITS</tt> section of the structure schema contains the declarations
 of the element types which can be used in the external objects making up parts  of the element types which can be used in the external objects making up parts
 of the document or in objects of the class defined by the schema.  As with  of the document or in objects of the class defined by the schema.  As with
 associated elements, these element types are defined just like other  associated elements, these element types are defined just like other
 structured element types. They can be used in the other element types of the  structured element types. They can be used in the other element types of the
 schema, but they can also be used in any other rule of the schema.</P>  schema, but they can also be used in any other rule of the schema.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 If references to notes are declared as units:</P>  If references to notes are declared as units:</p>
 <PRE>  <pre>UNITS
 UNITS     Ref_note = REFERENCE (Note);</pre>
    Ref_note = REFERENCE (Note);  <p>
 </PRE>  
 <P>  
 then it is possible to use references to notes in a cell of a table, even when  then it is possible to use references to notes in a cell of a table, even when
 <TT>Table</TT> is an external structure schema.  The <TT>Table</TT> schema must  <tt>Table</tt> is an external structure schema.  The <tt>Table</tt> schema
 declare a cell to be a sequence of units, which can then be base element types  must declare a cell to be a sequence of units, which can then be base element
 (text, for example) or references to notes in the document.</P>  types (text, for example) or references to notes in the document.</p>
 <PRE>  <pre>Cell = LIST OF (UNITS);</pre>
 Cell = LIST OF (UNITS);  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc3213>Skeleton elements</A></H3>  
   
 <P>  <h3><a name="sectc3213">Skeleton elements</a></h3>
   <p>
 When editing a document which contains or must contain external references to  When editing a document which contains or must contain external references to
 several other documents, it may be necessary to load a large number of  several other documents, it may be necessary to load a large number of
 documents, simply to see the parts designated by the external references of  documents, simply to see the parts designated by the external references of
Line 1885  this case, the external documents are no Line 2019  this case, the external documents are no
 see the elements of these documents which could be referenced.  Because of  see the elements of these documents which could be referenced.  Because of
 this, the editor will suggest that the documents be loaded in ``skeleton''  this, the editor will suggest that the documents be loaded in ``skeleton''
 form.  This form contains only the elements of the document explicitly  form.  This form contains only the elements of the document explicitly
 mentioned in the <TT>EXPORT</TT> section of their structure schema and, for  mentioned in the <tt>EXPORT</tt> section of their structure schema and, for
 these elements, only the part of the contents specified in that section. This  these elements, only the part of the contents specified in that section. This
 form has the advantage of being very compact, thus requiring very few  form has the advantage of being very compact, thus requiring very few
 resources from the editor.  This is also the skeleton form which constitutes  resources from the editor.  This is also the skeleton form which constitutes
 the expanded form of <A href="#inclusion">inclusions</A> with partial  the expanded form of <a href="#inclusion">inclusions</a> with partial
 expansion.</P>  expansion.</p>
 <P>  <p>
 Skeleton elements must be declared explicitly in the <TT>EXPORT</TT> section  Skeleton elements must be declared explicitly in the <tt>EXPORT</tt> section
 of the structure schema that defines them.  This section begins with the  of the structure schema that defines them.  This section begins with the
 keyword <TT>EXPORT</TT> followed by a comma-separated list of the element  keyword <tt>EXPORT</tt> followed by a comma-separated list of the element
 types which must appear in the skeleton form and ending with a semicolon.  types which must appear in the skeleton form and ending with a semicolon.
 These types must have been previously declared in the schema.</P>  These types must have been previously declared in the schema.</p>
 <P>  <p>
 For each skeleton element type, the part of the contents which is loaded by  For each skeleton element type, the part of the contents which is loaded by
 the editor, and therefore displayable, can be specified by putting the keyword  the editor, and therefore displayable, can be specified by putting the keyword
 <TT>WITH</TT> and the name of the contained element type to be loaded after  <tt>WITH</tt> and the name of the contained element type to be loaded after
 the name of the skeleton element type.  In this case only that named element,  the name of the skeleton element type.  In this case only that named element,
 among all the elements contained in the exportable element type, will be  among all the elements contained in the exportable element type, will be
 loaded.  If the <TT>WITH</TT> is absent, the entire contents of the skeleton  loaded.  If the <tt>WITH</tt> is absent, the entire contents of the skeleton
 element will be loaded by the editor.  If instead, it is better that the  element will be loaded by the editor.  If instead, it is better that the
 skeleton form not load the contents of a particular element type, the keyword  skeleton form not load the contents of a particular element type, the keyword
 <TT>WITH</TT> must be followed by the word <TT>Nothing</TT>.</P>  <tt>WITH</tt> must be followed by the word <tt>Nothing</tt>.</p>
 <PRE>  <pre>                [ 'EXPORT' SkeletonSeq ]
                 [ 'EXPORT' SkeletonSeq ]  
   
      SkeletonSeq = SkelElem &lt; ',' SkelElem > ';' .       SkeletonSeq = SkelElem &lt; ',' SkelElem > ';' .
      SkelElem    = ElemID [ 'WITH' Contents ] .       SkelElem    = ElemID [ 'WITH' Contents ] .
      Contents    = 'Nothing' / ElemID [ ExtStruct ] .       Contents    = 'Nothing' / ElemID [ ExtStruct ] .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose that, in documents of the article class, the element types  Suppose that, in documents of the article class, the element types
 Article_title, Figure, Section, Paragraph, and Biblio should appear in the  Article_title, Figure, Section, Paragraph, and Biblio should appear in the
 skeleton form in order to make it easier to create external references to them  skeleton form in order to make it easier to create external references to them
 from other documents.  When loading an article in its skeleton form, all of  from other documents.  When loading an article in its skeleton form, all of
 these element types will be loaded except for paragraphs, but only the article  these element types will be loaded except for paragraphs, but only the article
 title will be loaded in its entirety.  For figures, the caption will be loaded,  title will be loaded in its entirety.  For figures, the caption will be
 while for sections, the title will be loaded, and for bibliographic entries,  loaded, while for sections, the title will be loaded, and for bibliographic
 only the title that they contain will be loaded.  Note that  entries, only the title that they contain will be loaded.  Note that
 bibliographic elements are defined in another structure schema, RefBib.  To  bibliographic elements are defined in another structure schema, RefBib.  To
 produce this result, the following declarations should be placed in the  produce this result, the following declarations should be placed in the
 Article structure schema:</P>  Article structure schema:</p>
 <PRE>  <pre>EXPORT
 EXPORT  
    Article_title,     Article_title,
    Figure With Caption,     Figure With Caption,
    Section With Section_title,     Section With Section_title,
    Paragraph With Nothing,     Paragraph With Nothing,
    Biblio With Biblio_title(RefBib);     Biblio With Biblio_title(RefBib);</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc3214>Exceptions</A></H3>  
   
 <P>  <h3><a name="sectc3214">Exceptions</a></h3>
   <p>
 The behavior of the Thot editor and the actions that it performs are  The behavior of the Thot editor and the actions that it performs are
 determined by the structure schemas.  These actions are applied to all  determined by the structure schemas.  These actions are applied to all
 document and object types in accordance with their generic structure.  For  document and object types in accordance with their generic structure.  For
 certain object types, such as tables and graphics, these actions are not  certain object types, such as tables and graphics, these actions are not
 sufficient or are poorly adapted and some special actions must be added to or  sufficient or are poorly adapted and some special actions must be added to or
 substituted for certain standard actions.  These special actions are called  substituted for certain standard actions.  These special actions are called
 <EM>exceptions</EM>.</P>  <em>exceptions</em>.</p>
 <P>  <p>
 Exceptions only inhibit or modify certain standard actions, but they can be  Exceptions only inhibit or modify certain standard actions, but they can be
 used freely in every structure schema.</P>  used freely in every structure schema.</p>
 <P>  <p>
 Each structure schema can contain a section defining exceptions.  It begins  Each structure schema can contain a section defining exceptions.  It begins
 with the keyword <TT>EXCEPT</TT> and is composed of a sequence of exception  with the keyword <tt>EXCEPT</tt> and is composed of a sequence of exception
 declarations, separated by semicolons.  Each declaration of an exception  declarations, separated by semicolons.  Each declaration of an exception
 begins with the name of an element type or attribute followed by a colon. This  begins with the name of an element type or attribute followed by a colon. This
 indicates the element type or attribute to which the following exceptions  indicates the element type or attribute to which the following exceptions
 apply.  When the given element type name is a <A href="#sectd3285">mark pair</A>,  apply.  When the given element type name is a <a href="#sectd3285">mark
 and only in this case, the type name can be preceded by the keyword  pair</a>, and only in this case, the type name can be preceded by the keyword
 <TT>First</TT> or <TT>Second</TT>, to indicate if the exceptions which follow  <tt>First</tt> or <tt>Second</tt>, to indicate if the exceptions which follow
 are associated with the first mark of the pair or the second.  In the absence  are associated with the first mark of the pair or the second.  In the absence
 of this keyword, the first mark is used.</P>  of this keyword, the first mark is used.</p>
 <P>  <p>
 When placed in an <A href="#sectc322">extension schema</A>, the keyword  When placed in an <a href="#sectc322">extension schema</a>, the keyword
 <TT>EXTERN</TT> indicates that the type name which follows is found in the  <tt>EXTERN</tt> indicates that the type name which follows is found in the
 principal schema (the schema being extended by the extension schema).  The  principal schema (the schema being extended by the extension schema).  The
 exceptions are indicated by a name.  They are separated by semicolons.</P>  exceptions are indicated by a name.  They are separated by semicolons.</p>
 <PRE>  <pre>                  [ 'EXCEPT' ExceptSeq ]
                   [ 'EXCEPT' ExceptSeq ]  
   
      ExceptSeq     = Except ';' &lt; Except ';' > .       ExceptSeq     = Except ';' &lt; Except ';' > .
      Except        = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr       Except        = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr
Line 1981  exceptions are indicated by a name.  The Line 2110  exceptions are indicated by a name.  The
      ExcValue      ='NoCut' / 'NoCreate' /       ExcValue      ='NoCut' / 'NoCreate' /
                     'NoHMove' / 'NoVMove' / 'NoMove' /                      'NoHMove' / 'NoVMove' / 'NoMove' /
                     'NoHResize' / 'NoVResize' / 'NoResize' /                      'NoHResize' / 'NoVResize' / 'NoResize' /
                     'MoveResize' /                      'MoveResize' /
                     'NewWidth' / 'NewHeight' /                      'NewWidth' / 'NewHeight' /
                     'NewHPos' / 'NewVPos' /                      'NewHPos' / 'NewVPos' /
                     'Invisible' / 'NoSelect' /                      'Invisible' / 'NoSelect' /
Line 1989  exceptions are indicated by a name.  The Line 2118  exceptions are indicated by a name.  The
                     'ImportLine' / 'ImportParagraph' /                      'ImportLine' / 'ImportParagraph' /
                     'NoPaginate' / 'ParagraphBreak' /                      'NoPaginate' / 'ParagraphBreak' /
                     'HighlightChildren' / 'ExtendedSelection' /                      'HighlightChildren' / 'ExtendedSelection' /
                     'ReturnCreateNL' .                      'ReturnCreateNL' .</pre>
 </PRE>  <p>
 <P>  The following are the available exceptions:</p>
 The following are the available exceptions:</P>  <dl>
 <DL>  <dt><tt>NoCut</tt></dt>
 <DT><TT>NoCut</TT></DT>  <dd>
 <DD>This exception can only be applied to element types.  Elements of a type to  This exception can only be applied to element types.  Elements of a type to
 which this exception is applied cannot be deleted by the editor.  which this exception is applied cannot be deleted by the editor.
 </DD>  </dd>
 <DT><TT>NoCreate</TT></DT>  <dt><tt>NoCreate</tt></dt>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dd>
   This exception can only be applied to element types.  Elements of a type to
 which this exception is applied cannot be created by ordinary commands for  which this exception is applied cannot be created by ordinary commands for
 creating new elements.  These elements are usually created by special actions  creating new elements.  These elements are usually created by special actions
 associated with other exceptions.  associated with other exceptions.
 </DD>  </dd>
 <DT><TT>NoHMove</TT></DT>  <dt><tt>NoHMove</tt></dt>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dd>
 which this exception is applied cannot be moved horizontally with the  This exception can only be applied to element types.  Elements of a type to
 mouse.  Their children elements cannot be moved either.  which this exception is applied cannot be moved horizontally with the mouse.
 </DD>  Their children elements cannot be moved either.
 <DT><TT>NoVMove</TT></DT>  </dd>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dt><tt>NoVMove</tt></dt>
 which this exception is applied cannot be moved vertically with the  <dd>
 mouse.  Their children elements cannot be moved either.  This exception can only be applied to element types.  Elements of a type to
 </DD>  which this exception is applied cannot be moved vertically with the mouse.
 <DT><TT>NoMove</TT></DT>  Their children elements cannot be moved either.
 <DD>This exception can only be applied to element types.  Elements of a type to  </dd>
   <dt><tt>NoMove</tt></dt>
   <dd>
   This exception can only be applied to element types.  Elements of a type to
 which this exception is applied cannot be moved in any direction with the  which this exception is applied cannot be moved in any direction with the
 mouse.  Their children elements cannot be moved either.  mouse.  Their children elements cannot be moved either.
 </DD>  </dd>
 <DT><TT>NoHResize</TT></DT>  <dt><tt>NoHResize</tt></dt>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dd>
 which this exception is applied cannot be resized horizontally with the  This exception can only be applied to element types.  Elements of a type to
 mouse.  Their children elements cannot be resized either.  which this exception is applied cannot be resized horizontally with the mouse.
 </DD>  Their children elements cannot be resized either.
 <DT><TT>NoVResize</TT></DT>  </dd>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dt><tt>NoVResize</tt></dt>
 which this exception is applied cannot be resized vertically with the  <dd>
 mouse.  Their children elements cannot be resized either.  This exception can only be applied to element types.  Elements of a type to
 </DD>  which this exception is applied cannot be resized vertically with the mouse.
 <DT><TT>NoResize</TT></DT>  Their children elements cannot be resized either.
 <DD>This exception can only be applied to element types.  Elements of a type to  </dd>
   <dt><tt>NoResize</tt></dt>
   <dd>
   This exception can only be applied to element types.  Elements of a type to
 which this exception is applied cannot be resized in any direction with the  which this exception is applied cannot be resized in any direction with the
 mouse.  Their children elements cannot be resized either.  mouse.  Their children elements cannot be resized either.
 </DD>  </dd>
 <DT><TT>MoveResize</TT></DT>  <dt><tt>MoveResize</tt></dt>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dd>
 which this exception is applied can be moved and resized in any direction  This exception can only be applied to element types.  Elements of a type to
 with the mouse, even if one of their ancestor element has an exception that  which this exception is applied can be moved and resized in any direction with
   the mouse, even if one of their ancestor element has an exception that
 prevents moving or resizing.  Their children elements can also be resized or  prevents moving or resizing.  Their children elements can also be resized or
 moved.  moved.
 </DD>  </dd>
 <DT><TT>NoSelect</TT></DT>  <dt><tt>NoSelect</tt></dt>
 <DD>This exception can only be applied to element types.  Elements of a type to  <dd>
 which this exception is applied cannot be selected directly with the mouse, but  This exception can only be applied to element types.  Elements of a type to
 they can be selected by other methods provided by the editor.  which this exception is applied cannot be selected directly with the mouse,
 </DD>  but they can be selected by other methods provided by the editor.
 <DT><TT>NewWidth</TT></DT>  </dd>
 <DD>This exception can only be applied to numeric attributes.  If the width of  <dt><tt>NewWidth</tt></dt>
 an element which has this attribute is modified with the mouse, the value of  <dd>
 the new width will be assigned to the attribute.  This exception can only be applied to numeric attributes.  If the width of an
 </DD>  element which has this attribute is modified with the mouse, the value of the
 <DT><TT>NewHeight</TT></DT>  new width will be assigned to the attribute.
 <DD>This exception can only be applied to numeric attributes.  If the height of  </dd>
 an element which has this attribute is modified with the mouse, the value of  <dt><tt>NewHeight</tt></dt>
 the new height will be assigned to the attribute.  <dd>
 </DD>  This exception can only be applied to numeric attributes.  If the height of an
 <DT><TT>NewHPos</TT></DT>  element which has this attribute is modified with the mouse, the value of the
 <DD>This exception can only be applied to numeric attributes.  If the  new height will be assigned to the attribute.
 horizontal position of an element which has this attribute is modified with the  </dd>
 mouse, the value of the new horizontal position will be assigned to the  <dt><tt>NewHPos</tt></dt>
 attribute.  <dd>
 </DD>  This exception can only be applied to numeric attributes.  If the horizontal
 <DT><TT>NewVPos</TT></DT>  position of an element which has this attribute is modified with the mouse,
 <DD>This exception can only be applied to numeric attributes.  If the vertical  the value of the new horizontal position will be assigned to the attribute.
 position of an element which has this attribute is modified with the mouse, the  </dd>
 value of the new vertical position will be assigned to the attribute.  <dt><tt>NewVPos</tt></dt>
 </DD>  <dd>
 <DT><TT>Invisible</TT></DT>  This exception can only be applied to numeric attributes.  If the vertical
 <DD>This exception can only be applied to attributes, but can be applied to all  position of an element which has this attribute is modified with the mouse,
   the value of the new vertical position will be assigned to the attribute.
   </dd>
   <dt><tt>Invisible</tt></dt>
   <dd>
   This exception can only be applied to attributes, but can be applied to all
 attribute types.  It indicates that the attribute must not be seen by the user  attribute types.  It indicates that the attribute must not be seen by the user
 and that its value must not be changed directly.  This exception is usually  and that its value must not be changed directly.  This exception is usually
 used when another exception manipulates the value of an attribute.  used when another exception manipulates the value of an attribute.
 </DD>  </dd>
 <DT><TT>Hidden</TT></DT>  <dt><tt>Hidden</tt></dt>
 <DD>This exception can only be applied to element types.  It indicates that  <dd>
   This exception can only be applied to element types.  It indicates that
 elements of this type, although present in the document's structure, must not  elements of this type, although present in the document's structure, must not
 be shown to the user of the editor.  In particular, the creation menus must not  be shown to the user of the editor.  In particular, the creation menus must
 propose this type and the selection message must not pick it.  not propose this type and the selection message must not pick it.
 </DD>  </dd>
 <DT><TT>ActiveRef</TT></DT>  <dt><tt>ActiveRef</tt></dt>
 <DD>This exception can only be applied to attributes of the reference type.  It  <dd>
   This exception can only be applied to attributes of the reference type.  It
 indicates that when the user of the editor makes a double click on an element  indicates that when the user of the editor makes a double click on an element
 which possesses a reference attribute having this exception, the element  which possesses a reference attribute having this exception, the element
 designated by the reference attribute will be selected.  designated by the reference attribute will be selected.
 </DD>  </dd>
 <DT><TT>ImportLine</TT></DT>  <dt><tt>ImportLine</tt></dt>
 <DD>This exception can only be applied to element types.  It indicates that  <dd>
   This exception can only be applied to element types.  It indicates that
 elements of this type should receive the content of imported text files.  An  elements of this type should receive the content of imported text files.  An
 element is created for each line of the imported file.  A structure schema  element is created for each line of the imported file.  A structure schema
 cannot contain several exceptions <TT>ImportLine</TT> and, if it contains one,  cannot contain several exceptions <tt>ImportLine</tt> and, if it contains one,
 it should not contain any exception <TT>ImportParagraph</TT>.  it should not contain any exception <tt>ImportParagraph</tt>.
 </DD>  </dd>
 <DT><TT>ImportParagraph</TT></DT>  <dt><tt>ImportParagraph</tt></dt>
 <DD>This exception can only be applied to element types.  It indicates that  <dd>
   This exception can only be applied to element types.  It indicates that
 elements of this type should receive the content of imported text files.  An  elements of this type should receive the content of imported text files.  An
 element is created for each paragraph of the imported file.  A paragraph is a  element is created for each paragraph of the imported file.  A paragraph is a
 sequence of lines without any empty line.  A structure schema cannot contain  sequence of lines without any empty line.  A structure schema cannot contain
 several exceptions <TT>ImportParagraph</TT> and, if it contains one, it should  several exceptions <tt>ImportParagraph</tt> and, if it contains one, it should
 not contain any exception <TT>ImportLine</TT>.  not contain any exception <tt>ImportLine</tt>.
 </DD>  </dd>
 <DT><TT>NoPaginate</TT></DT>  <dt><tt>NoPaginate</tt></dt>
 <DD>This exception can only be applied to the root element, i.e. the name that  <dd>
 appear after the keyword <TT>STRUCTURE</TT> at the beginning of the structure  This exception can only be applied to the root element, i.e. the name that
   appear after the keyword <tt>STRUCTURE</tt> at the beginning of the structure
 schema.  It indicates that the editor should not allow the user to paginate  schema.  It indicates that the editor should not allow the user to paginate
 documents of that type.  documents of that type.
 </DD>  </dd>
 <DT><TT>ParagraphBreak</TT></DT>  <dt><tt>ParagraphBreak</tt></dt>
 <DD>This exception can only be applied to element types.  When the caret is  <dd>
 within an element of a type to which this exception is applied, it is that  This exception can only be applied to element types.  When the caret is within
 element that will be split when the user hits the Return key.  an element of a type to which this exception is applied, it is that element
 </DD>  that will be split when the user hits the Return key.
 <DT><TT>ReturnCreateNL</TT></DT>  </dd>
 <DD>This exception can only be applied to element types.  When the caret is  <dt><tt>ReturnCreateNL</tt></dt>
 within an element of a type to which this exception is applied, the Return  <dd>
 key simply inserts a New line character (code \212) at the current position.  This exception can only be applied to element types.  When the caret is within
 The Return key does not create a new element; it does not split the current  an element of a type to which this exception is applied, the Return key simply
 element either.  inserts a New line character (code \212) at the current position. The Return
 </DD>  key does not create a new element; it does not split the current element
 <DT><TT>HighlightChildren</TT></DT>  either.
 <DD>This exception can only be applied to element types.  Elements of a type to  </dd>
   <dt><tt>HighlightChildren</tt></dt>
   <dd>
   This exception can only be applied to element types.  Elements of a type to
 which this exception is applied are not highlighted themselves when they are  which this exception is applied are not highlighted themselves when they are
 selected, but all their children are highlighted instead.  selected, but all their children are highlighted instead.
 </DD>  </dd>
 <DT><TT>ExtendedSelection</TT></DT>  <dt><tt>ExtendedSelection</tt></dt>
 <DD>This exception can only be applied to element types.  The selection  <dd>
 extension command (middle button of the mouse) only add the clicked element (if  This exception can only be applied to element types.  The selection extension
 it has that exception) to the current selection, without selecting other  command (middle button of the mouse) only add the clicked element (if it has
 elements between the current selection and the clicked element.  that exception) to the current selection, without selecting other elements
 </DD>  between the current selection and the clicked element.
 </DL>  </dd>
 <BLOCKQUOTE class="example">  </dl>
 <P>  <blockquote class="example">
 <STRONG>Example:</STRONG></P>  <p>
 <P>  <strong>Example:</strong></p>
   <p>
 Consider a structure schema for object-style graphics which defines the  Consider a structure schema for object-style graphics which defines the
 Graphic_object element type with the associated Height and Weight  Graphic_object element type with the associated Height and Weight numeric
 numeric attributes.  Suppose that we want documents of this class to have  attributes.  Suppose that we want documents of this class to have the
 the following qualities:</P>  following qualities:</p>
 <UL>  <ul>
 <LI>Whenever the width or height of an object is changed using the mouse, the  <li>
 new values are stored in the object's Width and Height attributes.  Whenever the width or height of an object is changed using the mouse, the new
 <LI>The user should not be able to change the values of the Width and Height  values are stored in the object's Width and Height attributes.
   <li>
   The user should not be able to change the values of the Width and Height
 attributes via the Attributes menu of the Thot editor.  attributes via the Attributes menu of the Thot editor.
 </UL>  </ul>
 <P>  <p>
 The following exceptions will produce this effect.</P>  The following exceptions will produce this effect.</p>
 <PRE>  <pre>STRUCT
 STRUCT  
 ...  ...
    Graphics_object (ATTR Height = Integer; Width = Integer)     Graphics_object (ATTR Height = Integer; Width = Integer)
        = GRAPHICS with Height ?= 10, Width ?= 10;         = GRAPHICS with Height ?= 10, Width ?= 10;
 ...  ...
 EXCEPT  EXCEPT
    Height: NewHeight, Invisible;     Height: NewHeight, Invisible;
    Width: NewWidth, Invisible;     Width: NewWidth, Invisible;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb33>Some examples</A></H2>  
   
 <P>  <h2><a name="sectb33">Some examples</a></h2>
   <p>
 In order to illustrate the principles of the document model and the syntax of  In order to illustrate the principles of the document model and the syntax of
 the S language, this section presents two examples of structure schemas. One  the S language, this section presents two examples of structure schemas. One
 defines a class of documents, the other defines a class of objects.</P>  defines a class of documents, the other defines a class of objects.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc331>A class of documents: articles</A></H3>  
   
 <P>  <h3><a name="sectc331">A class of documents: articles</a></h3>
   <p>
 This example shows a possible structure for articles published in a journal.  This example shows a possible structure for articles published in a journal.
 Text between braces is comments.</P>  Text between braces is comments.</p>
 <PRE>  <pre>STRUCTURE Article;  { This schema defines the Article class }
 STRUCTURE Article;  { This schema defines the Article class }  
 DEFPRES ArticleP;   { The default presentation schema is  DEFPRES ArticleP;   { The default presentation schema is
                       ArticleP }                        ArticleP }
 ATTR                { Global attribute definitions }  ATTR                { Global attribute definitions }
Line 2284  EXPORT     { Skeleton elements } Line 2434  EXPORT     { Skeleton elements }
    Figure with Figure_caption,     Figure with Figure_caption,
    Section With Section_title;     Section With Section_title;
   
 END           { End of the structure schema }  END           { End of the structure schema }</pre>
 </PRE>  <p>
 <P>  
 This schema is very complete since it defines both paragraphs and  This schema is very complete since it defines both paragraphs and
 bibliographic citations.  These element types could just as well be defined in  bibliographic citations.  These element types could just as well be defined in
 other structure schemas, as is the case with the <TT>Formula</TT> class.  All  other structure schemas, as is the case with the <tt>Formula</tt> class.  All
 sorts of other elements can be inserted into an article, since a paragraph can  sorts of other elements can be inserted into an article, since a paragraph can
 contain any type of unit.  Similarly, figures can be any class of document or  contain any type of unit.  Similarly, figures can be any class of document or
 object that the user chooses.</P>  object that the user chooses.</p>
 <P>  <p>
 Generally, an article doesn't contain appendices, but it is possible to add  Generally, an article doesn't contain appendices, but it is possible to add
 them on explicit request:  this is the effect of the question mark before the  them on explicit request:  this is the effect of the question mark before the
 word Appendices.</P>  word Appendices.</p>
 <P>  <p>
 The Figure, Biblio_citation and Note elements are associated elements. Thus,  The Figure, Biblio_citation and Note elements are associated elements. Thus,
 they are only used in <TT>REFERENCE</TT> statements.</P>  they are only used in <tt>REFERENCE</tt> statements.</p>
 <P>  <p>
 Various types of cross-references can be put in paragraphs.  They can also be  Various types of cross-references can be put in paragraphs.  They can also be
 placed the objects which are part of the article, since the cross-references  placed the objects which are part of the article, since the cross-references
 are defined as units (<TT>UNITS</TT>).</P>  are defined as units (<tt>UNITS</tt>).</p>
 <P>  <p>
 There is a single restriction to prevent the creation of Ref_note elements  There is a single restriction to prevent the creation of Ref_note elements
 within notes.</P>  within notes.</p>
 <P>  <p>
 It is worth noting that the S language permits the definition of recursive  It is worth noting that the S language permits the definition of recursive
 structures like sections: a section can contain other sections (which are thus  structures like sections: a section can contain other sections (which are thus
 at the next lower level of the document tree).  Paragraphs are also recursive  at the next lower level of the document tree).  Paragraphs are also recursive
 elements, since a paragraph can contain an enumeration in which each element  elements, since a paragraph can contain an enumeration in which each element
 (<TT>Item</TT>) is composed of paragraphs.</P>  (<tt>Item</tt>) is composed of paragraphs.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc332>A class of objects: mathematical formulas</A></H3>  
   
 <P>  <h3><a name="sectc332">A class of objects: mathematical formulas</a></h3>
 The example below defines the <TT>Formula</TT> class which is used in Article  <p>
   The example below defines the <tt>Formula</tt> class which is used in Article
 documents.  This class represents mathematical formulas  with a rather simple  documents.  This class represents mathematical formulas  with a rather simple
 structure, but sufficient to produce a correct rendition on the screen or  structure, but sufficient to produce a correct rendition on the screen or
 printer.  To support more elaborate operations (formal or numeric  printer.  To support more elaborate operations (formal or numeric
 calculations), a finer structure should be defined. This class doesn't use any  calculations), a finer structure should be defined. This class doesn't use any
 other class and doesn't define any associated elements or units.</P>  other class and doesn't define any associated elements or units.</p>
 <PRE>  <pre>STRUCTURE Formula;
 STRUCTURE Formula;  
 DEFPRES FormulaP;  DEFPRES FormulaP;
   
 ATTR  ATTR
Line 2370  STRUCT Line 2518  STRUCT
                         Closing  = SYMBOL;                          Closing  = SYMBOL;
                         END;                          END;
                   END;       { End of Choice Constructor }                    END;       { End of Choice Constructor }
 END                          { End of Structure Schema }  END                          { End of Structure Schema }</pre>
 </PRE>  <p>
 <P>  
 This schema defines a single global attribute which allows functions and  This schema defines a single global attribute which allows functions and
 variables to be distinguished.  In the presentation schema, this attribute can  variables to be distinguished.  In the presentation schema, this attribute can
 be used to choose between roman (for functions) and italic characters (for  be used to choose between roman (for functions) and italic characters (for
 variables).</P>  variables).</p>
 <P>  <p>
 A formula's structure is that of a mathematical expression, which is itself a  A formula's structure is that of a mathematical expression, which is itself a
 sequence of mathematical constructions.  A mathematical construction can be  sequence of mathematical constructions.  A mathematical construction can be
 either a simple character string, an index, an exponent, a fraction, a root,  either a simple character string, an index, an exponent, a fraction, a root,
 etc.  Each of these mathematical constructions has a sensible structure which  etc.  Each of these mathematical constructions has a sensible structure which
 generally includes one or more expressions, thus making the formula class's  generally includes one or more expressions, thus making the formula class's
 structure definition recursive.</P>  structure definition recursive.</p>
 <P>  <p>
 In most cases, the roots which appear in the formulas are square roots and  In most cases, the roots which appear in the formulas are square roots and
 their order (2) is not specified.  This is why the Order component is marked  their order (2) is not specified.  This is why the Order component is marked
 optional by a question mark.  When explicitly requested, it is possible to add  optional by a question mark.  When explicitly requested, it is possible to add
 an order to a root, for example for cube roots (order = 3).</P>  an order to a root, for example for cube roots (order = 3).</p>
 <P>  <p>
 An integral is formed by an integration symbol, chosen by the user (simple  An integral is formed by an integration symbol, chosen by the user (simple
 integral, double, curvilinear, etc.), and two bounds.  A more fine-grained  integral, double, curvilinear, etc.), and two bounds.  A more fine-grained
 schema would add components for the integrand and the integration variable.  schema would add components for the integrand and the integration variable.
 Similarly, the Block_Parentheses construction leaves the choice of opening and  Similarly, the Block_Parentheses construction leaves the choice of opening and
 closing symbols to the user.  They can be brackets, braces, parentheses,  closing symbols to the user.  They can be brackets, braces, parentheses,
 etc.</P>  etc.</p>
 </DIV>  </div>
 </DIV>  </div>
 <HR>  <hr>
 </DIV>  </div>
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect4>The P Language</A></H1>  
   
   <h1><a name="sect4">The P Language</a></h1>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb41>Document presentation</A></H2>  
   
 <P>  <h2><a name="sectb41">Document presentation</a></h2>
   <p>
 Because of the model adopted for Thot, the presentation of documents is  Because of the model adopted for Thot, the presentation of documents is
 clearly separated from their structure and content.  After having presented  clearly separated from their structure and content.  After having presented
 the logical structure of documents, we now detail the principles implemented  the logical structure of documents, we now detail the principles implemented
 for their presentation.  The concept of <EM>presentation</EM> encompasses what  for their presentation.  The concept of <em>presentation</em> encompasses what
 is often called the page layout, the composition, or the document style.  It  is often called the page layout, the composition, or the document style.  It
 is the set of operations which display the document on the screen or print  is the set of operations which display the document on the screen or print it
 it on paper.  Like logical structure, document presentation is defined  on paper.  Like logical structure, document presentation is defined
 generically with the help of a language, called P.</P>  generically with the help of a language, called P.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc411>Two levels of presentation</A></H3>  
   
 <P>  <h3><a name="sectc411">Two levels of presentation</a></h3>
   <p>
 The link between structure and presentation is clear: the logical organization  The link between structure and presentation is clear: the logical organization
 of a document is used to carry out its presentation, since the purpose of the  of a document is used to carry out its presentation, since the purpose of the
 presentation is to make evident the organization of the document.  But the  presentation is to make evident the organization of the document.  But the
Line 2430  Certain presentation effects, notably ch Line 2577  Certain presentation effects, notably ch
 be performed on all printers or on all screens.  This is why Thot uses a  be performed on all printers or on all screens.  This is why Thot uses a
 two-level approach, where the presentation is first described in abstract  two-level approach, where the presentation is first described in abstract
 terms, without taking into account each particular device, and then the  terms, without taking into account each particular device, and then the
 presentation is realized within the constraints of a given device.</P>  presentation is realized within the constraints of a given device.</p>
 <P>  <p>
 Thus, presentation is only described as a function of the structure of the  Thus, presentation is only described as a function of the structure of the
 documents and the image that would be produced on an idealized device.  For  documents and the image that would be produced on an idealized device.  For
 this reason, presentation descriptions do not refer to any device  this reason, presentation descriptions do not refer to any device
 characteristics: they describe <EM>abstract presentations</EM> which can be  characteristics: they describe <em>abstract presentations</em> which can be
 concretized on different devices.</P>  concretized on different devices.</p>
 <P>  <p>
 A presentation description also defines a <EM>generic presentation</EM>, since  A presentation description also defines a <em>generic presentation</em>, since
 it describes the appearance of a class of documents or objects. This generic  it describes the appearance of a class of documents or objects. This generic
 presentation must also be applied to document and object instances, each  presentation must also be applied to document and object instances, each
 conforming to its generic logical structure, but with all the allowances that  conforming to its generic logical structure, but with all the allowances that
 were called to mind above: missing elements, constructed elements with other  were called to mind above: missing elements, constructed elements with other
 logical structures, etc.</P>  logical structures, etc.</p>
 <P>  <p>
 In order to preserve the homogeneity between documents and objects,  In order to preserve the homogeneity between documents and objects,
 presentation is described with a single set of tools which support the layout  presentation is described with a single set of tools which support the layout
 of a large document as well as the composition of objects like a graphical  of a large document as well as the composition of objects like a graphical
Line 2452  figure or mathematical formula.  This un Line 2599  figure or mathematical formula.  This un
 contrasts with the traditional approach, which focuses more on documents than  contrasts with the traditional approach, which focuses more on documents than
 objects and thus is based on the usual typographic conventions, such as the  objects and thus is based on the usual typographic conventions, such as the
 placement of margins, indentations, vertical spaces, line lengths,  placement of margins, indentations, vertical spaces, line lengths,
 justification, font changes, etc.</P>  justification, font changes, etc.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc412>Boxes</A></H3>  
   
 <P>  <h3><a name="sectc412">Boxes</a></h3>
   <p>
 To assure the homogeneity of tools, all presentation in Thot, for documents as  To assure the homogeneity of tools, all presentation in Thot, for documents as
 well as for the objects which they contain, is based on the notion of the  well as for the objects which they contain, is based on the notion of the
 <EM>box</EM>, such as was implemented in T<SUB><BIG>E</BIG></SUB>X.</P>  <em>box</em>, such as was implemented in T<sub><big>E</big></sub>X.</p>
 <P>  <p>
 Corresponding to each element of the document is a box,  which is the  Corresponding to each element of the document is a box,  which is the
 rectangle enclosing the element on the display device (screen or sheet of  rectangle enclosing the element on the display device (screen or sheet of
 paper);  the outline of this rectangle is not visible, except when a  paper);  the outline of this rectangle is not visible, except when a <a
 <A href="#sectc4230a"><TT>ShowBox</TT> rule</A> applies to the element. The  href="#sectc4230a"><tt>ShowBox</tt> rule</a> applies to the element. The sides
 sides of  of the box are parallel to the sides of the screen or the sheet of paper.  By
 the box are parallel to the sides of the screen or the sheet of paper.  By way  way of example, a box is associated with a character string, a line of text, a
 of example, a box is associated with a character string, a line of text, a  page, a paragraph, a title, a mathematical formula, or a table cell.</p>
 page, a paragraph, a title, a mathematical formula, or a table cell.</P>  <p>
 <P>  
 Whatever element it corresponds to, each box possesses four sides and four  Whatever element it corresponds to, each box possesses four sides and four
 axes, which we designate as follows (<A href="#boxes">see figure</A>):</P>  axes, which we designate as follows (<a href="#boxes">see figure</a>):</p>
 <DL>  <dl>
 <DT><TT> Top</TT></DT>  <dt><tt>Top</tt></dt>
 <DD>the upper side,  <dd>
 </DD>  the upper side,
 <DT><TT> Bottom</TT></DT>  </dd>
 <DD>the lower side,  <dt><tt>Bottom</tt></dt>
 </DD>  <dd>
 <DT><TT> Left</TT></DT>  the lower side,
 <DD>the left side,  </dd>
 </DD>  <dt><tt>Left</tt></dt>
 <DT><TT> Right</TT></DT>  <dd>
 <DD>the right side,  the left side,
 </DD>  </dd>
 <DT><TT> VMiddle</TT></DT>  <dt><tt>Right</tt></dt>
 <DD>the vertical axis passing through the center of the box,  <dd>
 </DD>  the right side,
 <DT><TT> HMiddle</TT></DT>  </dd>
 <DD>the horizontal axis passing through the center of the box,  <dt><tt>VMiddle</tt></dt>
 </DD>  <dd>
 <DT><TT> VRef</TT></DT>  the vertical axis passing through the center of the box,
 <DD>the vertical reference axis,  </dd>
 </DD>  <dt><tt>HMiddle</tt></dt>
 <DT><TT> HRef</TT></DT>  <dd>
 <DD>the horizontal reference axis.  the horizontal axis passing through the center of the box,
 </DD>  </dd>
 </DL>  <dt><tt>VRef</tt></dt>
   <dd>
 <DIV class="figure">  the vertical reference axis,
 <HR>  </dd>
 <PRE>  <dt><tt>HRef</tt></dt>
         Left   VRef  VMiddle        Right  <dd>
   the horizontal reference axis.
   </dd>
   </dl>
   
   <div class="figure">
   <hr>
   <pre>        Left   VRef  VMiddle        Right
                  :      :                   :      :
     Top   -----------------------------      Top   -----------------------------
           |      :      :             |            |      :      :             |
Line 2519  HMiddle ..|...........................|. Line 2672  HMiddle ..|...........................|.
           |      :      :             |            |      :      :             |
           |      :      :             |            |      :      :             |
   Bottom  -----------------------------    Bottom  -----------------------------
                  :      :                   :      :</pre>
 </PRE>  <p align=center>
 <P align=center>  <em><a name="boxes">The sides and axes of boxes</a><em></em></em></p>
 <EM><A name="boxes">The sides and axes of boxes</A><EM></EM></EM></P>  <hr>
 <HR>  </div>
 </DIV>  <p>
 <P>  
 The principal role of boxes is to set the extent and position of the images of  The principal role of boxes is to set the extent and position of the images of
 the different elements of a document with respect to each other on the  the different elements of a document with respect to each other on the
 reproduction device.  This is done by defining relations between the boxes of  reproduction device.  This is done by defining relations between the boxes of
 different elements which give relative extents and positions to these  different elements which give relative extents and positions to these
 boxes.</P>  boxes.</p>
 <P>  <p>
 There are three types of boxes:</P>  There are three types of boxes:</p>
 <UL>  <ul>
 <LI>boxes corresponding to structural elements of the document,  <li>
 <LI>presentation boxes,  boxes corresponding to structural elements of the document,
 <LI>page layout boxes.  <li>
 </UL>  presentation boxes,
 <P>  <li>
 <STRONG>Boxes corresponding to structural elements of the document</STRONG>  page layout boxes.
   </ul>
   <p>
   <strong>Boxes corresponding to structural elements of the document</strong>
 are those which linked to each of the elements (base or structured) of the  are those which linked to each of the elements (base or structured) of the
 logical structure of the document.  Such a box contains all the contents of  logical structure of the document.  Such a box contains all the contents of
 the element to which it corresponds (there is an exception: see  the element to which it corresponds (there is an exception: see <a
 <A href="#sectc4220">rules <TT>VertOverflow</TT> and  href="#sectc4220">rules <tt>VertOverflow</tt> and <tt>HorizOverflow</tt></a>).
 <TT>HorizOverflow</TT></A>).  These boxes form a  These boxes form a tree-like structure, identical to that of the structural
 tree-like structure, identical to that of the structural elements to which  elements to which they correspond.  This tree expresses the inclusion
 they correspond.  This tree expresses the inclusion relationships between the  relationships between the boxes: a box includes all the boxes of its subtree.
 boxes: a box includes all the boxes of its subtree.  On the other hand, there  On the other hand, there are no predefined rules for the relative positions of
 are no predefined rules for the relative positions of the included boxes.  If  the included boxes.  If they are at the same level, they can overlap, be
 they are at the same level, they can overlap, be contiguous, or be disjoint.  contiguous, or be disjoint. The rules expressed in the generic presentation
 The rules expressed in the generic presentation specify their relative  specify their relative positions.</p>
 positions.</P>  <p>
 <P>  <strong>Presentation boxes</strong> represent elements which are not found in
 <STRONG>Presentation boxes</STRONG> represent elements which are not found in  
 the logical structure of the document but which are added to meet the needs of  the logical structure of the document but which are added to meet the needs of
 presentation.  These boxes are linked to the elements of the logical structure  presentation.  These boxes are linked to the elements of the logical structure
 that are best suited to bringing them out. For example, they are used to add  that are best suited to bringing them out. For example, they are used to add
Line 2570  editor.  This is why they must appear in Line 2724  editor.  This is why they must appear in
 generic presentation which specifies the presentation boxes to add by  generic presentation which specifies the presentation boxes to add by
 indicating their content (a base element for which the value is specified) and  indicating their content (a base element for which the value is specified) and
 the position that they must take in the tree of boxes.  During editing, these  the position that they must take in the tree of boxes.  During editing, these
 boxes cannot be modified by the user.</P>  boxes cannot be modified by the user.</p>
 <P>  <p>
 <STRONG>Page layout boxes</STRONG> are boxes created implicitly by the page  <strong>Page layout boxes</strong> are boxes created implicitly by the page
 layout rules.  These rules indicate how the contents of a structured element  layout rules.  These rules indicate how the contents of a structured element
 must be broken into lines and pages.  In contrast to presentation boxes, these  must be broken into lines and pages.  In contrast to presentation boxes, these
 line and page boxes do not depend on the logical structure of the document,  line and page boxes do not depend on the logical structure of the document,
 but rather on the physical constraints of the output devices: character  but rather on the physical constraints of the output devices: character size,
 size, height and width of the window on the screen or of the sheet of  height and width of the window on the screen or of the sheet of paper.</p>
 paper.</P>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc413>Views and visibility</A></H3>  
   
 <P>  <h3><a name="sectc413">Views and visibility</a></h3>
   <p>
 One of the operations that one might wish to perform on a document is to view  One of the operations that one might wish to perform on a document is to view
 it is different ways.  For this reason, it is possible to define several  it is different ways.  For this reason, it is possible to define several
 <EM>views</EM> for the same document, or better yet, for all documents of the  <em>views</em> for the same document, or better yet, for all documents of the
 same class.  A view is not a different presentation of the document, but  same class.  A view is not a different presentation of the document, but
 rather a filter which only allows the display of certain parts of the  rather a filter which only allows the display of certain parts of the
 document.  For example, it might be desirable to see only the titles of  document.  For example, it might be desirable to see only the titles of
Line 2595  chapters and sections in order to be abl Line 2748  chapters and sections in order to be abl
 document.  Such a view could be called a ``table of contents''.  It might also  document.  Such a view could be called a ``table of contents''.  It might also
 be desirable to see only the mathematical formulas of a document in order to  be desirable to see only the mathematical formulas of a document in order to
 avoid being distracted by the non-mathematical aspects of the document.  A  avoid being distracted by the non-mathematical aspects of the document.  A
 ``mathematics'' view could provide this service.</P>  ``mathematics'' view could provide this service.</p>
 <P>  <p>
 Views, like presentation, are based on the generic logical structure. Each  Views, like presentation, are based on the generic logical structure. Each
 document class, and each generic presentation, can be provided with views  document class, and each generic presentation, can be provided with views
 which are particularly useful for that class or presentation.  For each view,  which are particularly useful for that class or presentation.  For each view,
 the <EM>visibility</EM> of elements is defined, indicated whether or not the  the <em>visibility</em> of elements is defined, indicated whether or not the
 elements must be presented to the user.  The visibility is calculated  as a  elements must be presented to the user.  The visibility is calculated  as a
 function of the type of the elements or their hierarchical position in the  function of the type of the elements or their hierarchical position in the
 structure of the document.  Thus, for a table of contents, all the ``Chapter  structure of the document.  Thus, for a table of contents, all the ``Chapter
Line 2608  Title'' and ``Section Title'' elements a Line 2761  Title'' and ``Section Title'' elements a
 hierarchical level could be used to make the section titles invisible below a  hierarchical level could be used to make the section titles invisible below a
 certain threshold level.  By varying this threshold, the granularity of the  certain threshold level.  By varying this threshold, the granularity of the
 view can be varied.  In the ``mathematics'' view, only Formula elements would  view can be varied.  In the ``mathematics'' view, only Formula elements would
 be made visible, no matter what their hierarchical level.</P>  be made visible, no matter what their hierarchical level.</p>
 <P>  <p>
 Because views are especially useful for producing a synthetic image of the  Because views are especially useful for producing a synthetic image of the
 document, it is necessary to adapt the presentation of the elements to the  document, it is necessary to adapt the presentation of the elements to the
 view in which they appear.  For example, it is inappropriate to have a page  view in which they appear.  For example, it is inappropriate to have a page
 break before every chapter title in the table of contents.  Thus, generic  break before every chapter title in the table of contents.  Thus, generic
 presentations take into account the possible views and permit each element  presentations take into account the possible views and permit each element
 type's presentation to vary according the view in which its image appears.</P>  type's presentation to vary according the view in which its image appears.</p>
 <P>  <p>
 <A name="views">Views</A> are also used, when editing documents, to display  <a name="views">Views</a> are also used, when editing documents, to display
 the associated elements.  So, in addition to the primary view of the document,  the associated elements.  So, in addition to the primary view of the document,
 there can be a ``notes'' view and a ``figures'' view which contain,  there can be a ``notes'' view and a ``figures'' view which contain,
 respectively, the associated elements of the Note and Figure types. In this  respectively, the associated elements of the Note and Figure types. In this
 way, it is possible to see simultaneously the text which refers to these  way, it is possible to see simultaneously the text which refers to these
 elements and the elements themselves, even if they will be separated when  elements and the elements themselves, even if they will be separated when
 printed.</P>  printed.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc414>Pages</A></H3>  
   
 <P>  <h3><a name="sectc414">Pages</a></h3>
   <p>
 Presentation schemas can be defined which display the document as a long  Presentation schemas can be defined which display the document as a long
 scroll, without page breaks.  This type of schema is particularly well-suited  scroll, without page breaks.  This type of schema is particularly well-suited
 to the initial phase of work on a document, where jumps from page to page  to the initial phase of work on a document, where jumps from page to page
Line 2638  the associated elements (such as notes), Line 2791  the associated elements (such as notes),
 page footer, are presented in a separate window.  But, once the document is  page footer, are presented in a separate window.  But, once the document is
 written, it may be desirable to display the document on the screen in the same  written, it may be desirable to display the document on the screen in the same
 manner in which it will be printed.  So, the presentation schema must define  manner in which it will be printed.  So, the presentation schema must define
 pages.</P>  pages.</p>
 <P>  <p>
 The P language permits the specification of the dimensions of pages as well as  The P language permits the specification of the dimensions of pages as well as
 their composition.  It is possible to generate running titles, page numbers,  their composition.  It is possible to generate running titles, page numbers,
 zones at the bottom of the page for notes, etc.  The editor follows this model  zones at the bottom of the page for notes, etc.  The editor follows this model
 and inserts page break marks in the document which are used during printing,  and inserts page break marks in the document which are used during printing,
 insuring that the pages on paper are the same as on the screen.</P>  insuring that the pages on paper are the same as on the screen.</p>
 <P>  <p>
 Once a document has been edited with a presentation schema defining pages, it  Once a document has been edited with a presentation schema defining pages, it
 contains page marks.  But it is always possible to edit the document using a  contains page marks.  But it is always possible to edit the document using a
 schema without pages.  In this case, the page marks are simply ignored by the  schema without pages.  In this case, the page marks are simply ignored by the
 editor.  They are considered again as soon as a schema with pages is used.  editor.  They are considered again as soon as a schema with pages is used.
 Thus, the user is free to choose between schemas with and without pages.</P>  Thus, the user is free to choose between schemas with and without pages.</p>
 <P>  <p>
 Thot treats the page break, rather than the page itself, as a box. This page  Thot treats the page break, rather than the page itself, as a box. This page
 break box contains all the elements of one page's footer, a rule marking the  break box contains all the elements of one page's footer, a rule marking the
 edge of this page, and all the elements of the next page's header.  The  edge of this page, and all the elements of the next page's header.  The
 elements of the header and footer can be running titles, page number,  elements of the header and footer can be running titles, page number,
 associated elements (notes, for example), etc. All these elements, as well as  associated elements (notes, for example), etc. All these elements, as well as
 their content and graphical appearance, are defined by the generic  their content and graphical appearance, are defined by the generic
 presentation.</P>  presentation.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc415>Numbering</A></H3>  
   
 <P>  <h3><a name="sectc415">Numbering</a></h3>
   <p>
 Many elements are numbered in documents: pages, chapters, sections, formulas,  Many elements are numbered in documents: pages, chapters, sections, formulas,
 theorems, notes, figures, bibliographic references, exercises, examples,  theorems, notes, figures, bibliographic references, exercises, examples,
 lemmas, etc.  Because Thot has a notion of logical structure, all of these  lemmas, etc.  Because Thot has a notion of logical structure, all of these
Line 2674  make the structure of the document more Line 2827  make the structure of the document more
 document's presentation and are calculated by the editor from the logical  document's presentation and are calculated by the editor from the logical
 structure.  The structure does not contain numbers as such; it only defines  structure.  The structure does not contain numbers as such; it only defines
 relative structural positions between elements, which serve as ordering  relative structural positions between elements, which serve as ordering
 relations on these elements.</P>  relations on these elements.</p>
 <P>  <p>
 If the structure schema defines the body of a document as a sequence of at  If the structure schema defines the body of a document as a sequence of at
 least two chapters:</P>  least two chapters:</p>
 <PRE>  <pre>Body = LIST [2..*] OF Chapter;</pre>
 Body = LIST [2..*] OF Chapter;  <p>
 </PRE>  the sequence defined by the list constructor is ordered and each chapter can
 <P>  be assigned a number based on its rank in the Body list.  Therefore, all
 the sequence defined by the list constructor is ordered and each chapter can be  elements contained in lists a the structure of a document can be numbered, but
 assigned a number based on its rank in the Body list.  Therefore, all elements  they are not the only ones.  The tree structure induced by the aggregate,
 contained in lists a the structure of a document can be numbered, but they are  list, and choice constructors (excluding references) defines a total order on
 not the only ones.  The tree structure induced by the aggregate, list, and  the elements of the document's primary structure.  So, it is possible to
 choice constructors (excluding references) defines a total order on the  define a numbering which uses this order, filtering elements according to
 elements of the document's primary structure.  So, it is possible to define  their type so that only certain element types are taken into account in the
 a numbering which uses this order, filtering elements according to their type  numbering.  In this way, it possible to number all the theorems and lemmas of
 so that only certain element types are taken into account in the numbering.  In  a chapter in the same sequence of numbers, even when they are not part of the
 this way, it possible to number all the theorems and lemmas of a chapter in the  same list constructor and appear at different levels of the document's tree.
 same sequence of numbers, even when they are not part of the same list  By changing the filter, they can be numbered separately: one sequence of
 constructor and appear at different levels of the document's tree.  By changing  numbers for theorems, another for the lemmas.</p>
 the filter, they can be numbered separately: one sequence of numbers for  <p>
 theorems, another for the lemmas.</P>  
 <P>  
 Associated elements pose a special problem, since they are not part of the  Associated elements pose a special problem, since they are not part of the
 document's primary structure, but are attached only by references, which  document's primary structure, but are attached only by references, which
 violate the total order of the document.  Then, these associated elements are  violate the total order of the document.  Then, these associated elements are
Line 2703  frequently numbered, precisely because t Line 2854  frequently numbered, precisely because t
 visualize the reference.  In order to resolve this problem, Thot implicitly  visualize the reference.  In order to resolve this problem, Thot implicitly
 defines a list constructor for each type of associated element, gathering  defines a list constructor for each type of associated element, gathering
 together (and ordering) these elements.  Thus, the associated elements can be  together (and ordering) these elements.  Thus, the associated elements can be
 numbered by type.</P>  numbered by type.</p>
 <P>  <p>
 Since they are calculated from the document's logical structure and only for  Since they are calculated from the document's logical structure and only for
 the needs of the presentation, numbers are presentation elements, described by  the needs of the presentation, numbers are presentation elements, described by
 presentation boxes, just like the fraction bar or the word ``Summary''.  presentation boxes, just like the fraction bar or the word ``Summary''.
 Nevertheless, numbers differ from these other boxes because their content  Nevertheless, numbers differ from these other boxes because their content
 varies from instance to instance, even though they are of the same type,  varies from instance to instance, even though they are of the same type,
 whereas all fraction bars are horizontal lines and the same word ``Summary''  whereas all fraction bars are horizontal lines and the same word ``Summary''
 appears at the head of every document's summary.</P>  appears at the head of every document's summary.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc416>Presentation parameters</A></H3>  
   
 <P>  <h3><a name="sectc416">Presentation parameters</a></h3>
   <p>
 The principal parameters which determine document presentation are the  The principal parameters which determine document presentation are the
 <EM>positions</EM> and <EM>dimensions</EM> of boxes, the <EM>font</EM>, the  <em>positions</em> and <em>dimensions</em> of boxes, the <em>font</em>, the
 <EM>style</EM>, the <EM>size</EM>, the <EM>underlining</EM> and the  <em>style</em>, the <em>size</em>, the <em>underlining</em> and the
 <EM>color</EM> of their content.  From these parameters, and some others of  <em>color</em> of their content.  From these parameters, and some others of
 less importance, it is possible to represent the usual typographic parameters  less importance, it is possible to represent the usual typographic parameters
 for the textual parts of the document.  These same parameters can be used to  for the textual parts of the document.  These same parameters can be used to
 describe the geometry of the non-textual elements, even though they are  describe the geometry of the non-textual elements, even though they are
 two-dimensional elements unlike the text, which is linear.</P>  two-dimensional elements unlike the text, which is linear.</p>
 <P>  <p>
 As we have already  seen, the positions of the boxes always respect the rule  As we have already  seen, the positions of the boxes always respect the rule
 of enclosure: a box in the tree encloses all the boxes of the next lower level  of enclosure: a box in the tree encloses all the boxes of the next lower level
 which are attached to it.  The positional parameters permit the specification  which are attached to it.  The positional parameters permit the specification
 of the position of each box in relation to the enclosing box or to its sibling  of the position of each box in relation to the enclosing box or to its sibling
 boxes (boxes directly attached to the same enclosing box in the tree of  boxes (boxes directly attached to the same enclosing box in the tree of
 boxes).</P>  boxes).</p>
 <P>  <p>
 The presentation parameters also provide control over the dimensions of the  The presentation parameters also provide control over the dimensions of the
 boxes.  The dimensions of a box can depend either on its content or on its  boxes.  The dimensions of a box can depend either on its content or on its
 context (its sibling boxes and the enclosing box). Each dimension (height or  context (its sibling boxes and the enclosing box). Each dimension (height or
 width) can be defined independently of the other.</P>  width) can be defined independently of the other.</p>
 <P>  <p>
 Because of the position and dimension parameters, it is possible to do the  Because of the position and dimension parameters, it is possible to do the
 same things that are normally done in typography by changing margins, line  same things that are normally done in typography by changing margins, line
 lengths, and vertical or horizontal skips.  This approach can also align or  lengths, and vertical or horizontal skips.  This approach can also align or
 center elements and groups of elements.</P>  center elements and groups of elements.</p>
 <P>  <p>
 In contrast to the position and dimension parameters, the font, style, size,  In contrast to the position and dimension parameters, the font, style, size,
 underlining, and color do not concern the box itself (the rectangle delimiting  underlining, and color do not concern the box itself (the rectangle delimiting
 the element), but its content.  These parameters indicate the typographic  the element), but its content.  These parameters indicate the typographic
 attributes which must be applied to the text contained in the box, and by  attributes which must be applied to the text contained in the box, and by
 extension, to all base elements.</P>  extension, to all base elements.</p>
 <P>  <p>
 For text, the font parameter is used to change the family of characters  For text, the font parameter is used to change the family of characters
 (Times, Helvetica, Courier, etc.); the style is used to obtain italic or  (Times, Helvetica, Courier, etc.); the style is used to obtain italic or
 roman, bold or light characters;  the size determines the point size of the  roman, bold or light characters;  the size determines the point size of the
 characters; underlining defines the type and thickness of the lines drawn  characters; underlining defines the type and thickness of the lines drawn
 above, below, or through the characters.</P>  above, below, or through the characters.</p>
 <P>  <p>
 For graphics, the line style parameter can be either solid, dotted, or dashed;  For graphics, the line style parameter can be either solid, dotted, or dashed;
 the line thickness parameter controls the width of the lines; the fill pattern  the line thickness parameter controls the width of the lines; the fill pattern
 parameter determines how closed geometric figures must be filled.</P>  parameter determines how closed geometric figures must be filled.</p>
 <P>  <p>
 While some of the parameters which determine the appearance of a box's  While some of the parameters which determine the appearance of a box's
 contents make sense only for one content type (text or graphic), other  contents make sense only for one content type (text or graphic), other
 parameters apply to all content types: these are the color parameters. These  parameters apply to all content types: these are the color parameters. These
 indicate the color of lines and the background color.</P>  indicate the color of lines and the background color.</p>
 </DIV>  </div>
 </DIV>  </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb42>Presentation description language</A></H2>  
   
 <P>  <h2><a name="sectb42">Presentation description language</a></h2>
   <p>
 A generic presentation defines the values of presentation parameters (or the  A generic presentation defines the values of presentation parameters (or the
 way to calculate those values) for a generic structure, or more precisely, for  way to calculate those values) for a generic structure, or more precisely, for
 all the element types and all the global and local attributes defined in that  all the element types and all the global and local attributes defined in that
 generic structure.  This definition of the presentation parameters is made  generic structure.  This definition of the presentation parameters is made
 with the P language.  A program written in this language, that is a generic  with the P language.  A program written in this language, that is a generic
 presentation expressed in P, is call a <EM>presentation schema</EM>. This  presentation expressed in P, is call a <em>presentation schema</em>. This
 section describes the syntax and semantics of the language, using the same <A  section describes the syntax and semantics of the language, using the same <a
 href="#sectc321">meta-language</A> as was used for the definition of the S  href="#sectc321">meta-language</a> as was used for the definition of the S
 language.</P>  language.</p>
 <P>  <p>
 Recall that it is possible to write many different presentation schemas for  Recall that it is possible to write many different presentation schemas for
 the same class of documents or objects.  This allows users to choose for a  the same class of documents or objects.  This allows users to choose for a
 document the graphical appearance  which best suits their type of work or  document the graphical appearance  which best suits their type of work or
 their personal taste.</P>  their personal taste.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc421>The organization of a presentation schema</A></H3>  
   
 <P>  <h3><a name="sectc421">The organization of a presentation schema</a></h3>
 A presentation schema begins with the word <TT>PRESENTATION</TT> and ends with  <p>
 the word <TT>END</TT>.  The word <TT>PRESENTATION</TT> is followed by the name  A presentation schema begins with the word <tt>PRESENTATION</tt> and ends with
   the word <tt>END</tt>.  The word <tt>PRESENTATION</tt> is followed by the name
 of the generic structure to which the presentation will be applied.  This name  of the generic structure to which the presentation will be applied.  This name
 must be the same as that which follows the keyword <TT>STRUCTURE</TT> in the  must be the same as that which follows the keyword <tt>STRUCTURE</tt> in the
 structure schema associated with the presentation schema.</P>  structure schema associated with the presentation schema.</p>
 <P>  <p>
 After this declaration of the name of the structure, the following sections  After this declaration of the name of the structure, the following sections
 appear (in order):</P>  appear (in order):</p>
 <UL>  <ul>
 <LI>Declarations of  <li>
 <UL>  Declarations of
 <LI>all views,  <ul>
 <LI>printed views,  <li>
 <LI>counters,  all views,
 <LI>presentation constants,  <li>
 <LI>variables,  printed views,
 </UL>  <li>
 <LI>default presentation rules,  counters,
 <LI>presentation box and page layout box definitions,  <li>
 <LI>presentation rules for structured elements,  presentation constants,
 <LI>presentation rules for attributes,  <li>
 <LI>rules for transmitting values to attributes of included documents.  variables,
 </UL>  </ul>
 <P>  <li>
   default presentation rules,
   <li>
   presentation box and page layout box definitions,
   <li>
   presentation rules for structured elements,
   <li>
   presentation rules for attributes,
   <li>
   rules for transmitting values to attributes of included documents.
   </ul>
   <p>
 Each of these sections is introduced by a keyword which is followed by a  Each of these sections is introduced by a keyword which is followed by a
 sequence of declarations.  Every section is optional.</P>  sequence of declarations.  Every section is optional.</p>
 <PRE>  <pre>     SchemaPres ='PRESENTATION' ElemID ';'
      SchemaPres ='PRESENTATION' ElemID ';'  
                [ 'VIEWS' ViewSeq ]                 [ 'VIEWS' ViewSeq ]
                [ 'PRINT' PrintViewSeq ]                 [ 'PRINT' PrintViewSeq ]
                [ 'COUNTERS' CounterSeq ]                 [ 'COUNTERS' CounterSeq ]
Line 2829  sequence of declarations.  Every section Line 2990  sequence of declarations.  Every section
                [ 'ATTRIBUTES' PresAttrSeq ]                 [ 'ATTRIBUTES' PresAttrSeq ]
                [ 'TRANSMIT' TransmitSeq ]                 [ 'TRANSMIT' TransmitSeq ]
                  'END' .                   'END' .
      ElemID     = NAME .       ElemID     = NAME .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc422>Views</A></H3>  
   
 <P>  <h3><a name="sectc422">Views</a></h3>
   <p>
 Each of the possible views must be declared in the presentation schema.  As  Each of the possible views must be declared in the presentation schema.  As
 has <A href="#views">already been described</A>, the presentation rules for an  has <a href="#views">already been described</a>, the presentation rules for an
 element type can vary according to the view in which the element appears.  The  element type can vary according to the view in which the element appears.  The
 name of the view is used to designate the view to which the presentation rules  name of the view is used to designate the view to which the presentation rules
 apply (see the <A href="#inkeyword"><TT>IN</TT> instruction</A>).  The  apply (see the <a href="#inkeyword"><tt>IN</tt> instruction</a>).  The
 definition of the view's contents are dispersed throughout the presentation  definition of the view's contents are dispersed throughout the presentation
 rules attached to the different element types and attributes.  The  rules attached to the different element types and attributes.  The
 <TT>VIEWS</TT> section is simply a sequence of view names separated by commas  <tt>VIEWS</tt> section is simply a sequence of view names separated by commas
 and terminated by a semi-colon.</P>  and terminated by a semi-colon.</p>
 <P>  <p>
 One of the view names (and only one) can be followed by the keyword  One of the view names (and only one) can be followed by the keyword
 <TT>EXPORT</TT>.  This keyword identifies the view which presents the members  <tt>EXPORT</tt>.  This keyword identifies the view which presents the members
 of the document class in <A href="#sectc3213">skeleton form</A>.  The graphical  of the document class in <a href="#sectc3213">skeleton form</a>.  The
 appearance  and the content of this view is defined just as with other views,  graphical appearance  and the content of this view is defined just as with
 but it is useless to specify presentation rules concerning this view for the  other views, but it is useless to specify presentation rules concerning this
 elements which are not loaded in the skeleton form.</P>  view for the elements which are not loaded in the skeleton form.</p>
 <P>  <p>
 It is not necessary to declare any views; in this case there is a single  It is not necessary to declare any views; in this case there is a single
 unnamed view.  If many views are declared, the first view listed is considered  unnamed view.  If many views are declared, the first view listed is considered
 the principal view.  The principal view is the one to which all rules that are  the principal view.  The principal view is the one to which all rules that are
 not preceded by an indication of a view will apply (see the <A  not preceded by an indication of a view will apply (see the <a
 href="#inkeyword">instruction <TT>IN</TT></A>).</P>  href="#inkeyword">instruction <tt>IN</tt></a>).</p>
 <P>  <p>
 The principal view is the the one which the editor presents on the screen when  The principal view is the the one which the editor presents on the screen when
 the user asks to create or edit a document.  Thus, it makes sense to put the  the user asks to create or edit a document.  Thus, it makes sense to put the
 most frequently used view at the head of the list.  But if the structure  most frequently used view at the head of the list.  But if the structure
 schema contains <A href="#sectc3213">skeleton elements</A> and is loaded in its  schema contains <a href="#sectc3213">skeleton elements</a> and is loaded in
 skeleton form, the view whose name is followed by the keyword <TT>EXPORT</TT>  its skeleton form, the view whose name is followed by the keyword
 will be opened and no other views can be opened.</P>  <tt>EXPORT</tt> will be opened and no other views can be opened.</p>
 <PRE>  <pre>                      'VIEWS' ViewSeq
                       'VIEWS' ViewSeq  
      ViewSeq         = ViewDeclaration       ViewSeq         = ViewDeclaration
                        &lt; ',' ViewDeclaration > ';' .                         &lt; ',' ViewDeclaration > ';' .
      ViewDeclaration = ViewID [ 'EXPORT' ] .       ViewDeclaration = ViewID [ 'EXPORT' ] .
      ViewID          = NAME .       ViewID          = NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 When editing a report, it might be useful have views of the table of contents  When editing a report, it might be useful have views of the table of contents
 and of the mathematical formulas, in addition to the principal view which shows  and of the mathematical formulas, in addition to the principal view which
 the document in its entirety.  To achieve this, a presentation schema for the  shows the document in its entirety.  To achieve this, a presentation schema
 Report class would have the following <TT>VIEWS</TT> section:</P>  for the Report class would have the following <tt>VIEWS</tt> section:</p>
 <PRE>  <pre>VIEWS
 VIEWS       Full_text, Table_of_contents, Formulas;</pre>
      Full_text, Table_of_contents, Formulas;  <p>
 </PRE>  
 <P>  
 The contents of these views are specified in the presentation rules of the  The contents of these views are specified in the presentation rules of the
 schema.</P>  schema.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc423>Print Views</A></H3>  
   
 <P>  <h3><a name="sectc423">Print Views</a></h3>
   <p>
 When editing a document, each view is presented in a different window.  In  When editing a document, each view is presented in a different window.  In
 addition to the views specified by the <TT>VIEWS</TT> instruction, the user  addition to the views specified by the <tt>VIEWS</tt> instruction, the user
 can display the associated elements with one window for each type of  can display the associated elements with one window for each type of
 associated element.</P>  associated element.</p>
 <P>  <p>
 When printing a document, it is possible to print any number of views, chosen  When printing a document, it is possible to print any number of views, chosen
 from among all the views which the editor can display (views in the strict  from among all the views which the editor can display (views in the strict
 sense or associated elements).  Print views, as well as the order in which  sense or associated elements).  Print views, as well as the order in which
 they must be printed, are indicated by the <TT>PRINT</TT> instruction. It  they must be printed, are indicated by the <tt>PRINT</tt> instruction. It
 appears after the <TT>VIEWS</TT> instruction and is formed of the keyword  appears after the <tt>VIEWS</tt> instruction and is formed of the keyword
 <TT>PRINT</TT> followed by the ordered list of print view names.  The print  <tt>PRINT</tt> followed by the ordered list of print view names.  The print
 view names are separated by commas and followed by a semi-colon.  A print view  view names are separated by commas and followed by a semi-colon.  A print view
 name is either a view name declared in the <TT>VIEWS</TT> instruction or the  name is either a view name declared in the <tt>VIEWS</tt> instruction or the
 name of an associated element type (with an ``s'' added to the end).  The  name of an associated element type (with an ``s'' added to the end).  The
 associated element must have been declared in the <TT>ASSOC</TT> section of  associated element must have been declared in the <tt>ASSOC</tt> section of
 the structure schema.</P>  the structure schema.</p>
 <PRE>  <pre>                    'PRINT' PrintViewSeq
                     'PRINT' PrintViewSeq  
      PrintViewSeq = PrintView &lt; ',' PrintView > ';' .       PrintViewSeq = PrintView &lt; ',' PrintView > ';' .
      PrintView    = ViewID / ElemID .       PrintView    = ViewID / ElemID .</pre>
 </PRE>  <p>
 <P>  If the <tt>PRINT</tt> instruction is absent, the printing program will print
 If the <TT>PRINT</TT> instruction is absent, the printing program will print  only the principal view (the first view specified by the <tt>VIEWS</tt>
 only the principal view (the first view specified by the <TT>VIEWS</TT>  instruction or the single, unnamed view when there is no <tt>VIEWS</tt>
 instruction or the single, unnamed view when there is no <TT>VIEWS</TT>  instruction).</p>
 instruction).</P>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Consider a Report presentation using the view declarations from the preceding  Consider a Report presentation using the view declarations from the preceding
 example.  Suppose we want to print the full text and table of contents views,  example.  Suppose we want to print the full text and table of contents views,
 but not the Formulas view, which is only useful when editing.  In addition,  but not the Formulas view, which is only useful when editing.  In addition,
 suppose that we also want to print the bibliographic citations, which are  suppose that we also want to print the bibliographic citations, which are
 associated elements (of type <TT>Citation</TT>).  A sensible printing order  associated elements (of type <tt>Citation</tt>).  A sensible printing order
 would be to print the full text then the bibliography and finally the table of  would be to print the full text then the bibliography and finally the table of
 contents.  To obtain this result when printing, the presentation schema would  contents.  To obtain this result when printing, the presentation schema would
 say:</P>  say:</p>
 <PRE>  <pre>PRINT
 PRINT       Full_text, Citations, Table_of_contents;</pre>
      Full_text, Citations, Table_of_contents;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc424">Counters</a></h3>
 <H3><A name=sectc424>Counters</A></H3>  <p>
   A presentation has a <em>counter</em> for each type of number in the
 <P>  
 A presentation has a <EM>counter</EM> for each type of number in the  
 presentation.  All counters, and therefore all types of numbers, used in the  presentation.  All counters, and therefore all types of numbers, used in the
 schema must be declared after the <TT>COUNTERS</TT> keyword.</P>  schema must be declared after the <tt>COUNTERS</tt> keyword.</p>
 <P>  <p>
 Each counter declaration is composed of a name identifying the counter  Each counter declaration is composed of a name identifying the counter
 followed by a colon and the counting function to be applied to the counter.  followed by a colon and the counting function to be applied to the counter.
 The counter declaration ends with a semi-colon.</P>  The counter declaration ends with a semi-colon.</p>
 <P>  <p>
 The counting function indicates how the counter values will be calculated.  The counting function indicates how the counter values will be calculated.
 Three types of counting functions are available.  The first type is used to  Three types of counting functions are available.  The first type is used to
 count the elements of a list or aggregate: it assigns to the counter the rank  count the elements of a list or aggregate: it assigns to the counter the rank
 of the element in the list or aggregate.  More precisely, the function</P>  of the element in the list or aggregate.  More precisely, the function</p>
 <PRE>  <pre>RANK OF ElemID [ LevelAsc ] [ INIT AttrID ]
 RANK OF ElemID [ LevelAsc ] [ INIT AttrID ]          [ 'REINIT' AttrID ]</pre>
         [ 'REINIT' AttrID ]  <p>
 </PRE>  indicates that when an element creates, by a creation rule (see the <a
 <P>  href="#sectc4232"><tt>Create</tt> instructions</a>), a presentation box
 indicates that when an element creates, by a creation rule (see the <A  
 href="#sectc4232"><TT>Create</TT> instructions</A>), a presentation box  
 containing  the counter value, this value is the rank of the creating element,  containing  the counter value, this value is the rank of the creating element,
 if it is of type <TT>ElemID</TT>, otherwise the rank of the first element of  if it is of type <tt>ElemID</tt>, otherwise the rank of the first element of
 type <TT>ElemID</TT> which encloses the creating element in the logical  type <tt>ElemID</tt> which encloses the creating element in the logical
 structure of the document.</P>  structure of the document.</p>
 <P>  <p>
 The type name can be preceded by a star in the special case where the  The type name can be preceded by a star in the special case where the
 structure schema defines an element of whose <TT>ElemID</TT> is the same as  structure schema defines an element of whose <tt>ElemID</tt> is the same as
 that of an <A href="#sectd3284">inclusion</A> without expansion or with  that of an <a href="#sectd3284">inclusion</a> without expansion or with
 partial expansion.  To resolve this ambiguity, the <TT>ElemID</TT> alone  partial expansion.  To resolve this ambiguity, the <tt>ElemID</tt> alone
 refers to the type defined in the structure schema while the <TT>ElemID</TT>  refers to the type defined in the structure schema while the <tt>ElemID</tt>
 preceded by a star refers to the included type.</P>  preceded by a star refers to the included type.</p>
 <P>  <p>
 The type name <TT>ElemID</TT> can be followed by an integer.  That number  The type name <tt>ElemID</tt> can be followed by an integer.  That number
 represents the relative level, among the ancestors of the creating element, of  represents the relative level, among the ancestors of the creating element, of
 the element whose rank is asked.  If that relative level <I>n</I> is unsigned,  the element whose rank is asked.  If that relative level <i>n</i> is unsigned,
 the <I>n</I><SUP>th</SUP> element of type <TT>ElemID</TT> encountered when  the <i>n</i><sup>th</sup> element of type <tt>ElemID</tt> encountered when
 travelling the logical structure from the root to the creating element is  travelling the logical structure from the root to the creating element is
 taken into account.  If the relative level is negative, the logical structure  taken into account.  If the relative level is negative, the logical structure
 is travelled in the other direction, from the creating element to the  is travelled in the other direction, from the creating element to the
 root.</P>  root.</p>
 <P>  <p>
 The function can end with the keyword <TT>INIT</TT> followed by the name of a  The function can end with the keyword <tt>INIT</tt> followed by the name of a
 numeric attribute (and only a numeric attribute).  Then, the rank of the first  numeric attribute (and only a numeric attribute).  Then, the rank of the first
 element of the list or aggregate is considered to be the value of this  element of the list or aggregate is considered to be the value of this
 attribute, rather than the default value of 1, and the rank of the other  attribute, rather than the default value of 1, and the rank of the other
 elements is shifted accordingly.  The attribute which determines the initial  elements is shifted accordingly.  The attribute which determines the initial
 value is searched on the element itself and on its ancestors.</P>  value is searched on the element itself and on its ancestors.</p>
 <P>  <p>
 The function can end with the keyword <TT>REINIT</TT> followed by the name of  The function can end with the keyword <tt>REINIT</tt> followed by the name of
 a numeric attribute (and only a numeric attribute).  Then, if an element to be  a numeric attribute (and only a numeric attribute).  Then, if an element to be
 counted has this attribute, the counter value for this element is the  counted has this attribute, the counter value for this element is the
 attribute value and the following elements are numbered starting from this  attribute value and the following elements are numbered starting from this
 value.</P>  value.</p>
 <P>  <p>
 When the <TT>RANK</TT> function is written</P>  When the <tt>RANK</tt> function is written</p>
 <PRE>  <pre>RANK OF Page [ ViewID ] [ INIT AttrID ]</pre>
 RANK OF Page [ ViewID ] [ INIT AttrID ]  <p>
 </PRE>  (<tt>Page</tt>is a keyword of the P language), the counter takes as its value
 <P>  
 (<TT>Page</TT>is a keyword of the P language), the counter takes as its value  
 the number of the page on which the element which creates the presentation box  the number of the page on which the element which creates the presentation box
 containing the number appears.  This is done as if the pages of the document  containing the number appears.  This is done as if the pages of the document
 form a list for each view.  The counter only takes into account the pages of  form a list for each view.  The counter only takes into account the pages of
 the relevant view, that is the view displaying the presentation box whose  the relevant view, that is the view displaying the presentation box whose
 contents take the value of the number.  However, if the keyword <TT>Page</TT>  contents take the value of the number.  However, if the keyword <tt>Page</tt>
 is followed by the name of a view (between parentheses), it is the pages of  is followed by the name of a view (between parentheses), it is the pages of
 that view that are taken into account.  As in the preceding form, the  that view that are taken into account.  As in the preceding form, the
 <TT>RANK</TT> function applied to pages can end with the <TT>INIT</TT> keyword  <tt>RANK</tt> function applied to pages can end with the <tt>INIT</tt> keyword
 followed by the name of a numeric attribute which sets the value of the first  followed by the name of a numeric attribute which sets the value of the first
 page's number.  This attribute must be a local attribute of the document  page's number.  This attribute must be a local attribute of the document
 itself, and not of one of its components.</P>  itself, and not of one of its components.</p>
 <P>  <p>
 The second counting function is used to count the occurrences of a certain  The second counting function is used to count the occurrences of a certain
 element type in a specified context.  The instruction</P>  element type in a specified context.  The instruction</p>
 <PRE>  <pre>SET n ON Type1 ADD m ON Type2 [ INIT AttrID ]</pre>
 SET n ON Type1 ADD m ON Type2 [ INIT AttrID ]  <p>
 </PRE>  
 <P>  
 says that when the document is traversed from beginning to end (in the order  says that when the document is traversed from beginning to end (in the order
 induced by the logical structure), the counter is assigned the value <TT>n</TT>  induced by the logical structure), the counter is assigned the value
 each time an element of type <TT>Type1</TT> is encountered, no matter  <tt>n</tt> each time an element of type <tt>Type1</tt> is encountered, no
 what the current value of the counter, and the value <TT>m</TT> is added to the  matter what the current value of the counter, and the value <tt>m</tt> is
 current value of the counter each time an element of type <TT>Type2</TT> is  added to the current value of the counter each time an element of type
 encountered.</P>  <tt>Type2</tt> is encountered.</p>
 <P>  <p>
 As with the <TT>RANK</TT> function, the type names can be preceded by a star  As with the <tt>RANK</tt> function, the type names can be preceded by a star
 to resolve the ambiguity of included elements.</P>  to resolve the ambiguity of included elements.</p>
 <P>  <p>
 If the function ends with the keyword <TT>INIT</TT> followed by the name of an  If the function ends with the keyword <tt>INIT</tt> followed by the name of an
 attribute and if the document possesses this attribute, the value of this  attribute and if the document possesses this attribute, the value of this
 attribute is used in place of <TT>n</TT>.  The attribute must be numeric.  It  attribute is used in place of <tt>n</tt>.  The attribute must be numeric.  It
 is searched on the element itself and on its ancestors.</P>  is searched on the element itself and on its ancestors.</p>
 <P>  <p>
 This function can also be used with the <TT>Page</TT> keyword in the place of  This function can also be used with the <tt>Page</tt> keyword in the place of
 <TT>Type1</TT> or <TT>Type2</TT>.  In the first case, the counter is  <tt>Type1</tt> or <tt>Type2</tt>.  In the first case, the counter is
 reinitialized on each page with the value <TT>n</TT>, while in the second  reinitialized on each page with the value <tt>n</tt>, while in the second
 case, it is incremented by <TT>m</TT> on each page.  As with the preceding  case, it is incremented by <tt>m</tt> on each page.  As with the preceding
 counting function, the word <TT>Page</TT> can be followed by a name between  counting function, the word <tt>Page</tt> can be followed by a name between
 parentheses.  In this case, the name specifies a view whose pages are taken  parentheses.  In this case, the name specifies a view whose pages are taken
 into account.</P>  into account.</p>
 <P>  <p>
 The definition of a counter can contain several <TT>SET</TT> functions and  The definition of a counter can contain several <tt>SET</tt> functions and
 several <TT>ADD</TT> functions, each with a different value.  The total number  several <tt>ADD</tt> functions, each with a different value.  The total number
 of counting functions must not be greater than 6.</P>  of counting functions must not be greater than 6.</p>
 <P>  <p>
 The third counting function is used to count the elements of a certain type  The third counting function is used to count the elements of a certain type
 encountered when travelling from the creating element to the root of the  encountered when travelling from the creating element to the root of the
 logical structure.  The creating element is included if it is of that type.  logical structure.  The creating element is included if it is of that type.
 That function is written</P>  That function is written</p>
 <PRE>  <pre>RLEVEL OF Type</pre>
 RLEVEL OF Type  <p>
 </PRE>  where <tt>Type</tt> represents the type of the elements to be counted.</p>
 <P>  <p>
 where <TT>Type</TT> represents the type of the elements to be counted.</P>  The formal definition of counter declarations is:</p>
 <P>  <pre>                    'COUNTERS' CounterSeq
 The formal definition of counter declarations is:</P>  
 <PRE>  
                     'COUNTERS' CounterSeq  
      CounterSeq   = Counter &lt; Counter > .       CounterSeq   = Counter &lt; Counter > .
      Counter      = CounterID ':' CounterFunc ';' .       Counter      = CounterID ':' CounterFunc ';' .
      CounterID    = NAME .       CounterID    = NAME .
Line 3076  The formal definition of counter declara Line 3219  The formal definition of counter declara
      AddFunction  = 'ADD' CounterValue 'ON' TypeOrPage .       AddFunction  = 'ADD' CounterValue 'ON' TypeOrPage .
      TypeOrPage   = 'Page' [ '(' ViewID ')' ] /        TypeOrPage   = 'Page' [ '(' ViewID ')' ] / 
                     [ '*' ] ElemID .                      [ '*' ] ElemID .
      CounterValue = NUMBER .       CounterValue = NUMBER .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 If the body of a chapter is defined as a sequence of sections in the structure  If the body of a chapter is defined as a sequence of sections in the structure
 schema:</P>  schema:</p>
 <PRE>  <pre>Chapter_body = LIST OF (Section = 
 Chapter_body = LIST OF (Section =   
                             BEGIN                              BEGIN
                             Section_Title = Text;                              Section_Title = Text;
                             Section_Body  = Paragraphs;                              Section_Body  = Paragraphs;
                             END                              END
                          );                           );</pre>
 </PRE>  <p>
 <P>  the section counter is declared:</p>
 the section counter is declared:</P>  <pre>SectionCtr : RANK OF Section;</pre>
 <PRE>  <p>
 SectionCtr : RANK OF Section;  and the display of the section number before the section title is obtained by
 </PRE>  a <a href="#sectc4232"><tt>CreateBefore</tt> rule</a> attached the
 <P>  <tt>Section_Title</tt> type, which creates a presentation box whose content is
 and the display of the section number before the section title is obtained by a  the value of the <tt>SectionCtr</tt> counter (see the <a
 <A href="#sectc4232"><TT>CreateBefore</TT> rule</A> attached the  href="#sectc4231"><tt>Content</tt> instruction</a>).</p>
 <TT>Section_Title</TT> type, which creates a presentation box whose content is  <p>
 the value of the <TT>SectionCtr</TT> counter (see the <A  
 href="#sectc4231"><TT>Content</TT> instruction</A>).</P>  
 <P>  
 In order to number the formulas separately within each chapter, the formula  In order to number the formulas separately within each chapter, the formula
 counter is declared:</P>  counter is declared:</p>
 <PRE>  <pre>FormulaCtr : SET 0 ON Chapter ADD 1 ON Formula;</pre>
 FormulaCtr : SET 0 ON Chapter ADD 1 ON Formula;  <p>
 </PRE>  
 <P>  
 and the display of the formula number in the right margin, alongside each  and the display of the formula number in the right margin, alongside each
 formula, is obtained by a <TT>CreateAfter</TT> instruction attached to the  formula, is obtained by a <tt>CreateAfter</tt> instruction attached to the
 <TT>Formula</TT> type, which creates a presentation box whose content is the  <tt>Formula</tt> type, which creates a presentation box whose content is the
 value of the <TT>FormulaCtr</TT> counter.</P>  value of the <tt>FormulaCtr</tt> counter.</p>
 <P>  <p>
 To number the page chapter by chapter, with the first page of each chapter  To number the page chapter by chapter, with the first page of each chapter
 having the number 1, the counter definition would be</P>  having the number 1, the counter definition would be</p>
 <PRE>  <pre>ChapterPageCtr : SET 0 ON Chapter ADD 1 ON Page;</pre>
 ChapterPageCtr : SET 0 ON Chapter ADD 1 ON Page;  <p>
 </PRE>  If there is also a chapter counter</p>
 <P>  <pre>ChapterCtr : RANK OF Chapter;</pre>
 If there is also a chapter counter</P>  <p>
 <PRE>  the <a href="#sectc4231">content</a> of a presentation box created at the top
 ChapterCtr : RANK OF Chapter;  of each page could be defined as:</p>
 </PRE>  <pre>Content : (VALUE(ChapterCtr, URoman) TEXT '-'
 <P>             VALUE(ChapterPageCtr, Arabic));</pre>
 the <A href="#sectc4231">content</A> of a presentation box created at the top of  <p>
 each page could be defined as:</P>  
 <PRE>  
 Content : (VALUE(ChapterCtr, URoman) TEXT '-'  
            VALUE(ChapterPageCtr, Arabic));  
 </PRE>  
 <P>  
 Thus, the presentation box contains the number of the chapter in upper-case  Thus, the presentation box contains the number of the chapter in upper-case
 roman numerals followed by a hyphen and the number of the page within  roman numerals followed by a hyphen and the number of the page within the
 the chapter in arabic numerals.</P>  chapter in arabic numerals.</p>
 </BLOCKQUOTE>  </blockquote>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 To count tables and figures together in a document of the chapter type, a  To count tables and figures together in a document of the chapter type, a
 counter could be defined using:</P>  counter could be defined using:</p>
 <PRE>  <pre>CommonCtr : SET 0 ON Chapter ADD 1 ON Table
 CommonCtr : SET 0 ON Chapter ADD 1 ON Table              ADD 1 ON Figure;</pre>
             ADD 1 ON Figure;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc425>Presentation constants</A></H3>  
   
 <P>  <h3><a name="sectc425">Presentation constants</a></h3>
   <p>
 Presentation constants are used in the definition of the content of  Presentation constants are used in the definition of the content of
 presentation boxes.  This content is used in <A href="#sectc426">variable  presentation boxes.  This content is used in <a href="#sectc426">variable
 definitions</A> and in the <A href="#sectc4231"><TT>Content</TT> rule</A>.  The  definitions</a> and in the <a href="#sectc4231"><tt>Content</tt> rule</a>. The
 only presentation constants which can be used are character strings,  only presentation constants which can be used are character strings,
 mathematical symbols, graphical elements, and pictures, that is to say, base  mathematical symbols, graphical elements, and pictures, that is to say, base
 elements.</P>  elements.</p>
 <P>  <p>
 Constants can be defined directly in the variables or presentation boxes  Constants can be defined directly in the variables or presentation boxes
 (<TT>Content</TT> rule) which use them.  But it is only necessary them to  (<tt>Content</tt> rule) which use them.  But it is only necessary them to
 declare once, in the constant declaration section, even though they are used  declare once, in the constant declaration section, even though they are used
 in many variables or boxes.  Thus, each declared constant has a name, which  in many variables or boxes.  Thus, each declared constant has a name, which
 allows it to be designated whenever it is used, a type (one of the four base  allows it to be designated whenever it is used, a type (one of the four base
 types) and a value (a character string or a single character for mathematical  types) and a value (a character string or a single character for mathematical
 symbols and graphical elements).</P>  symbols and graphical elements).</p>
 <P>  <p>
 The constant declarations appear after the keyword <TT>CONST</TT>.  Each  The constant declarations appear after the keyword <tt>CONST</tt>.  Each
 declaration is composed of the name of the constant, an equals sign, a keyword  declaration is composed of the name of the constant, an equals sign, a keyword
 representing its type (<TT>Text</TT>, <TT>Symbol</TT>, <TT>Graphics</TT> or  representing its type (<tt>Text</tt>, <tt>Symbol</tt>, <tt>Graphics</tt> or
 <TT>Picture</TT>) and the string representing its value. A semi-colon  <tt>Picture</tt>) and the string representing its value. A semi-colon
 terminates each declaration.</P>  terminates each declaration.</p>
 <P>  <p>
 In the case of a character string, the keyword <TT>Text</TT> can be followed  In the case of a character string, the keyword <tt>Text</tt> can be followed
 by the name of an alphabet (for example, <TT>Greek</TT> or <TT>Latin</TT>) in  by the name of an alphabet (for example, <tt>Greek</tt> or <tt>Latin</tt>) in
 which the constant's text should be expressed.  If the alphabet name is  which the constant's text should be expressed.  If the alphabet name is
 absent, the Latin alphabet is used.  When the alphabet name is present, only  absent, the Latin alphabet is used.  When the alphabet name is present, only
 the first letter of the alphabet name is interpreted.  Thus, the words  the first letter of the alphabet name is interpreted.  Thus, the words
 <TT>Greek</TT> and <TT>Grec</TT> designate the same alphabet.  In current  <tt>Greek</tt> and <tt>Grec</tt> designate the same alphabet.  In current
 versions of Thot, only the Greek and Latin alphabets are available.</P>  versions of Thot, only the Greek and Latin alphabets are available.</p>
 <PRE>  <pre>                 'CONST' ConstSeq
                  'CONST' ConstSeq  
      ConstSeq   = Const &lt; Const > .       ConstSeq   = Const &lt; Const > .
      Const      = ConstID '=' ConstType ConstValue ';' .       Const      = ConstID '=' ConstType ConstValue ';' .
      ConstID    = NAME .       ConstID    = NAME .
      ConstType  ='Text' [ Alphabet ] / 'Symbol' /       ConstType  ='Text' [ Alphabet ] / 'Symbol' /
                  'Graphics' / 'Picture' .                   'Graphics' / 'Picture' .
      ConstValue = STRING .       ConstValue = STRING .
      Alphabet   = NAME .       Alphabet   = NAME .</pre>
 </PRE>  <p>
 <P>  
 For character strings in the Latin alphabet (ISO Latin-1 character set),  For character strings in the Latin alphabet (ISO Latin-1 character set),
 characters having codes higher than 127 (decimal) are represented by their  characters having codes higher than 127 (decimal) are represented by their
 code in octal.</P>  code in octal.</p>
 <P>  <p>
 In the case of a symbol or graphical element, the value only contains a single  In the case of a symbol or graphical element, the value only contains a single
 character, between apostrophes, which indicates the form of the element which  character, between apostrophes, which indicates the form of the element which
 must be drawn in the box whose content is the constant.  The symbol or  must be drawn in the box whose content is the constant.  The symbol or
 graphical element takes the dimensions of the box, which are determined by the  graphical element takes the dimensions of the box, which are determined by the
 <TT>Height</TT> and <TT>Width</TT> rules. See <A href="#sectb72">table of  <tt>Height</tt> and <tt>Width</tt> rules. See <a href="#sectb72">table of
 codes</A> for the symbols and graphical elements.</P>  codes</a> for the symbols and graphical elements.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 The constants ``Summary:'' and fraction bar, which were described earlier, are  The constants ``Summary:'' and fraction bar, which were described earlier, are
 declared:</P>  declared:</p>
 <PRE>  <pre>CONST
 CONST  
      SummaryConst = Text 'Summary:';       SummaryConst = Text 'Summary:';
      Bar          = Graphics 'h';       Bar          = Graphics 'h';</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc426>Variables</A></H3>  
   
 <P>  <h3><a name="sectc426">Variables</a></h3>
   <p>
 Variables permit the definition of computed content for presentation boxes. A  Variables permit the definition of computed content for presentation boxes. A
 variable is associated with a presentation box by a <TT>Content</TT> rule; but  variable is associated with a presentation box by a <tt>Content</tt> rule; but
 before being used in a <TT>Content</TT> rule, a variable can be defined in the  before being used in a <tt>Content</tt> rule, a variable can be defined in the
 <TT>VAR</TT> section.  It is also possible to define a variable at the time of  <tt>VAR</tt> section.  It is also possible to define a variable at the time of
 its use in a <TT>Content</TT> rule, as can be done with a constant.</P>  its use in a <tt>Content</tt> rule, as can be done with a constant.</p>
 <P>  <p>
 A variable has a name and a value which is a character string resulting from  A variable has a name and a value which is a character string resulting from
 the concatenation of the values of a sequence of functions.  Each variable  the concatenation of the values of a sequence of functions.  Each variable
 declaration is composed of the variable name followed by a colon and the  declaration is composed of the variable name followed by a colon and the
 sequence of functions which produces its value, separated by spaces.  Each  sequence of functions which produces its value, separated by spaces.  Each
 declaration is terminated by a semi-colon.</P>  declaration is terminated by a semi-colon.</p>
 <PRE>  <pre>                  'VAR' VarSeq
                   'VAR' VarSeq  
      VarSeq      = Variable &lt; Variable > .       VarSeq      = Variable &lt; Variable > .
      Variable    = VarID ':' FunctionSeq ';' .       Variable    = VarID ':' FunctionSeq ';' .
      VarID       = NAME .       VarID       = NAME .
      FunctionSeq = Function &lt; Function > .       FunctionSeq = Function &lt; Function > .</pre>
 </PRE>  <p>
 <P>  
 Several functions are available.  The first two return, in the form of a  Several functions are available.  The first two return, in the form of a
 character string, the current date.  <TT>DATE</TT> returns the date in  character string, the current date.  <tt>DATE</tt> returns the date in
 English, while <TT>FDATE</TT> returns the date in french.</P>  English, while <tt>FDATE</tt> returns the date in french.</p>
 <P>  <p>
 Two other functions, <TT>DocName</TT> and <TT>DirName</TT>, return the  Two other functions, <tt>DocName</tt> and <tt>DirName</tt>, return the
 document name and the directory where the document is stored.</P>  document name and the directory where the document is stored.</p>
 <P>  <p>
 Function <TT>ElemName</TT> returns the type of the element which created the  Function <tt>ElemName</tt> returns the type of the element which created the
 presentation box whose contents are the variable.</P>  presentation box whose contents are the variable.</p>
 <P>  <p>
 Another function simply returns the value of a presentation constant. For any  Another function simply returns the value of a presentation constant. For any
 constant declared in the <TT>CONST</TT> section, it is sufficient to give the  constant declared in the <tt>CONST</tt> section, it is sufficient to give the
 name of the constant.  Otherwise, the type and value of the constant must be  name of the constant.  Otherwise, the type and value of the constant must be
 given, using the same form as in a <A href="#sectc425">constant  given, using the same form as in a <a href="#sectc425">constant
 declaration</A>. If the constant is not of type text, (types <TT>Symbol</TT>,  declaration</a>. If the constant is not of type text, (types <tt>Symbol</tt>,
 <TT>Graphics</TT> or <TT>Picture</TT>), it must be alone in the variable  <tt>Graphics</tt> or <tt>Picture</tt>), it must be alone in the variable
 definition; only constants of type <TT>Text</TT> can be mixed with other  definition; only constants of type <tt>Text</tt> can be mixed with other
 functions.</P>  functions.</p>
 <P>  <p>
 It is also possible to obtain the value of an attribute, simply by mentioning  It is also possible to obtain the value of an attribute, simply by mentioning
 the attribute's name.  The value of this function is the value of the  the attribute's name.  The value of this function is the value of the
 attribute for the element which created the presentation box whose contents  attribute for the element which created the presentation box whose contents
 are the variable.  If the creating element does not have the indicated  are the variable.  If the creating element does not have the indicated
 attribute, the value is an empty string.  In the case of a numeric attribute,  attribute, the value is an empty string.  In the case of a numeric attribute,
 the attribute is translated into a decimal number in arabic numerals.  If  the attribute is translated into a decimal number in arabic numerals.  If
 another form is desired, the <TT>VALUE</TT> function must be used.</P>  another form is desired, the <tt>VALUE</tt> function must be used.</p>
 <P>  <p>
 The last available function returns, as a character string, the value of a  The last available function returns, as a character string, the value of a
 counter, an attribute or a page number. This value can be presented in  counter, an attribute or a page number. This value can be presented in
 different styles.  The keyword <TT>VALUE</TT> is followed (between  different styles.  The keyword <tt>VALUE</tt> is followed (between
 parentheses) by the name of the counter, the name of the attribute, or the  parentheses) by the name of the counter, the name of the attribute, or the
 keyword <TT>PageNumber</TT> and the desired style, the two parameters being  keyword <tt>PageNumber</tt> and the desired style, the two parameters being
 separated by a comma.  The style is a keyword which indicates whether the  separated by a comma.  The style is a keyword which indicates whether the
 value should be presented in arabic numerals (<TT>Arabic</TT>), lower-case  value should be presented in arabic numerals (<tt>Arabic</tt>), lower-case
 roman numerals (<TT>LRoman</TT>), or upper-case roman numerals  roman numerals (<tt>LRoman</tt>), or upper-case roman numerals
 (<TT>URoman</TT>), or by an upper-case letter (<TT>Uppercase</TT>) or  (<tt>URoman</tt>), or by an upper-case letter (<tt>Uppercase</tt>) or
 lower-case letter (<TT>Lowercase</TT>).</P>  lower-case letter (<tt>Lowercase</tt>).</p>
 <P>  <p>
 For a page counter, the keyword <TT>PageNumber</TT> can be followed, between  For a page counter, the keyword <tt>PageNumber</tt> can be followed, between
 parentheses, by the name of the view from which to obtain the page number.  By  parentheses, by the name of the view from which to obtain the page number.  By
 default, the first view declared in the <TT>VIEWS</TT> section is used.  The  default, the first view declared in the <tt>VIEWS</tt> section is used.  The
 value obtained is the number of the page on which is found the element that is  value obtained is the number of the page on which is found the element that is
 using the variable in a <TT>Content</TT> rule.</P>  using the variable in a <tt>Content</tt> rule.</p>
 <P>  <p>
 For an ordinary counter, the name of the counter can be preceded by the  For an ordinary counter, the name of the counter can be preceded by the
 keyword <TT>MaxRangeVal</TT> or <TT>MinRangeVal</TT>.  These keywords mean  keyword <tt>MaxRangeVal</tt> or <tt>MinRangeVal</tt>.  These keywords mean
 that the value returned by the function is the maximum (minimum resp.) value  that the value returned by the function is the maximum (minimum resp.) value
 taken by the counter in the whole document, not the value for the element  taken by the counter in the whole document, not the value for the element
 concerned by the function.</P>  concerned by the function.</p>
 <PRE>  <pre>     Function     = 'DATE' / 'FDATE' /
      Function     = 'DATE' / 'FDATE' /  
                     'DocName' / 'DirName' /                      'DocName' / 'DirName' /
                     'ElemName' / 'AttributeName' /                      'ElemName' / 'AttributeName' /
                      ConstID / ConstType ConstValue /                       ConstID / ConstType ConstValue /
Line 3301  concerned by the function.</P> Line 3422  concerned by the function.</P>
                      [ MinMax ] CounterID / AttrID .                       [ MinMax ] CounterID / AttrID .
      CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /       CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /
                     'Uppercase' / 'Lowercase' .                      'Uppercase' / 'Lowercase' .
      MinMax       = 'MaxRangeVal' / 'MinRangeVal' .       MinMax       = 'MaxRangeVal' / 'MinRangeVal' .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  To make today's date appear at the top of the first page of a report, a <a
 To make today's date appear at the top of the first page of a report, a <A  href="#sectc4232"><tt>CREATE</tt> rule</a> associated with the Report_Title
 href="#sectc4232"><TT>CREATE</TT> rule</A> associated with the Report_Title  
 element type generates a presentation box whose content (specified by the  element type generates a presentation box whose content (specified by the
 <TT>Content</TT> rule of that presentation box) is the variable:</P>  <tt>Content</tt> rule of that presentation box) is the variable:</p>
 <PRE>  <pre>VAR
 VAR       Todays_date : TEXT 'Version of ' DATE;</pre>
      Todays_date : TEXT 'Version of ' DATE;  <p>
 </PRE>  
 <P>  
 To produce, before each section title, the chapter number (in upper-case roman  To produce, before each section title, the chapter number (in upper-case roman
 numerals) followed by the section number (in arabic numerals), two counters  numerals) followed by the section number (in arabic numerals), two counters
 must be defined:</P>  must be defined:</p>
 <PRE>  <pre>COUNTERS
 COUNTERS  
      ChapterCtr : RANK OF Chapter;       ChapterCtr : RANK OF Chapter;
      SectionCtr : RANK OF Section;       SectionCtr : RANK OF Section;</pre>
 </PRE>  <p>
 <P>  
 and the Section_Title element must create a presentation box whose content is  and the Section_Title element must create a presentation box whose content is
 the variable</P>  the variable</p>
 <PRE>  <pre>VAR
 VAR  
      SectionNum : VALUE (ChapterCtr, URoman) TEXT '-'       SectionNum : VALUE (ChapterCtr, URoman) TEXT '-'
                   VALUE (SectionCtr, Arabic);                    VALUE (SectionCtr, Arabic);</pre>
 </PRE>  <p>
 <P>  
 In order to make the page number on which each section begins appear in the  In order to make the page number on which each section begins appear in the
 table of contents view next to the section title, each Section_Title element  table of contents view next to the section title, each Section_Title element
 must create a presentation box, visible only in the table of contents view,  must create a presentation box, visible only in the table of contents view,
 whose content is the variable:</P>  whose content is the variable:</p>
 <PRE>  <pre>VAR
 VAR  
      TitlePageNume :       TitlePageNume :
            VALUE (PageNumber(Full_text), Arabic);             VALUE (PageNumber(Full_text), Arabic);</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc427>Default presentation rules</A></H3>  
   
 <P>  <h3><a name="sectc427">Default presentation rules</a></h3>
   <p>
 In order to avoid having to specify, for each element type defined in the  In order to avoid having to specify, for each element type defined in the
 structure schema, values for every one of the numerous presentation  structure schema, values for every one of the numerous presentation
 parameters, the presentation schema allows the definition of a set of default  parameters, the presentation schema allows the definition of a set of default
 presentation rules.  These rules apply to all the boxes of the elements  presentation rules.  These rules apply to all the boxes of the elements
 defined in the structure schema and to the presentation boxes and page layout  defined in the structure schema and to the presentation boxes and page layout
 boxes defined in the presentation schema.  Only rules which differ from these  boxes defined in the presentation schema.  Only rules which differ from these
 default need to be specified in other sections of the presentation schema.</P>  default need to be specified in other sections of the presentation schema.</p>
 <P>  <p>
 For the primary view, the default rules can define every presentation  For the primary view, the default rules can define every presentation
 parameter, but not the <A href="#presfunct">presentation functions</A> or the  parameter, but not the <a href="#presfunct">presentation functions</a> or the
 <A href="#sectc4223">linebreaking conditions</A> (the <TT>NoBreak1</TT>,  <a href="#sectc4223">linebreaking conditions</a> (the <tt>NoBreak1</tt>,
 <TT>NoBreak2</TT>, and <TT>Gather</TT> rules).</P>  <tt>NoBreak2</tt>, and <tt>Gather</tt> rules).</p>
 <P>  <p>
 In a presentation schema, the default presentation rules section is optional;  In a presentation schema, the default presentation rules section is optional;
 in this case, the <TT>DEFAULT</TT> keyword is also absent and the following  in this case, the <tt>DEFAULT</tt> keyword is also absent and the following
 rules are considered to be the default rules:</P>  rules are considered to be the default rules:</p>
 <PRE>  <pre>   Visibility:    Enclosing =;
    Visibility:    Enclosing =;  
    VertRef:       * . Left;     VertRef:       * . Left;
    HorizRef:      Enclosed . HRef;     HorizRef:      Enclosed . HRef;
    Height:        Enclosed . Height;     Height:        Enclosed . Height;
Line 3393  rules are considered to be the default r Line 3504  rules are considered to be the default r
    LineWeight:    Enclosing =;     LineWeight:    Enclosing =;
    FillPattern:   Enclosing =;     FillPattern:   Enclosing =;
    Background:    Enclosing =;     Background:    Enclosing =;
    Foreground:    Enclosing =;     Foreground:    Enclosing =;</pre>
 </PRE>  <p>
 <P>  
 If other values are desired for the default rules, they must be defined  If other values are desired for the default rules, they must be defined
 explicitly in the default rules section.  In fact, it is only necessary to  explicitly in the default rules section.  In fact, it is only necessary to
 define those default rules which differ from the ones above, since the rules  define those default rules which differ from the ones above, since the rules
 above will be used whenever a rule is not explicitly named.</P>  above will be used whenever a rule is not explicitly named.</p>
 <P>  <p>
 Default rules for views other than the primary  view can also be specified.  Default rules for views other than the primary  view can also be specified.
 Otherwise, the default rules for the primary views are applied to the other  Otherwise, the default rules for the primary views are applied to the other
 views.</P>  views.</p>
 <P>  <p>
 Default rules are expressed in the same way as <A href="#sectc4215">explicit  Default rules are expressed in the same way as <a href="#sectc4215">explicit
 rules for document elements</A>.</P>  rules for document elements</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc428>Presentation and page layout boxes</A></H3>  
   
 <P>  <h3><a name="sectc428">Presentation and page layout boxes</a></h3>
   <p>
 The presentation process uses elements which are not part of the logical  The presentation process uses elements which are not part of the logical
 structure of the document, such as pages (which are the page layout boxes) or  structure of the document, such as pages (which are the page layout boxes) or
 alternatively, rules, numbers, or words introducing certain parts of the  alternatively, rules, numbers, or words introducing certain parts of the
 document, such as ``Summary'', ``Appendices'', ``Bibliography'', etc. (which  document, such as ``Summary'', ``Appendices'', ``Bibliography'', etc. (which
 are presentation boxes).</P>  are presentation boxes).</p>
 <P>  <p>
 After the word <TT>BOXES</TT>, each presentation or page layout box is defined  After the word <tt>BOXES</tt>, each presentation or page layout box is defined
 by its name and a sequence of presentation rules which indicate how they must  by its name and a sequence of presentation rules which indicate how they must
 be displayed.  These rules are the same as those which define the boxes  be displayed.  These rules are the same as those which define the boxes
 associated with element of the logical structure of the document, with a  associated with element of the logical structure of the document, with a
 single exception, the <A href="#sectc4231"><TT>Content</TT> rule</A> which is  single exception, the <a href="#sectc4231"><tt>Content</tt> rule</a> which is
 used only to specify the content of presentation boxes.  The content of boxes  used only to specify the content of presentation boxes.  The content of boxes
 associated with elements of the document structure is defined in each document  associated with elements of the document structure is defined in each document
 or object and thus is not specified in the presentation schema, which applies  or object and thus is not specified in the presentation schema, which applies
 to all documents or objects of a class.</P>  to all documents or objects of a class.</p>
 <P>  <p>
 Among the rules which define a presentation box, certain ones can refer to  Among the rules which define a presentation box, certain ones can refer to
 another presentation box (for example, in their positional rules).  If the  another presentation box (for example, in their positional rules).  If the
 designated box is defined after the box which designates it, a  designated box is defined after the box which designates it, a
 <TT>FORWARD</TT> instruction followed by the name of the designated box must  <tt>FORWARD</tt> instruction followed by the name of the designated box must
 appear before the designation.</P>  appear before the designation.</p>
 <PRE>  <pre>             'BOXES' BoxSeq
              'BOXES' BoxSeq  
      BoxSeq = Box &lt; Box > .       BoxSeq = Box &lt; Box > .
      Box    ='FORWARD' BoxID ';' /       Box    ='FORWARD' BoxID ';' /
               BoxID ':' ViewRuleSeq .                BoxID ':' ViewRuleSeq .
      BoxID  = NAME .       BoxID  = NAME .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc429>Presentation of structured elements</A></H3>  
   
 <P>  <h3><a name="sectc429">Presentation of structured elements</a></h3>
 After the words <TT>RULES</TT>, the presentation schema gives the presentation  <p>
   After the words <tt>RULES</tt>, the presentation schema gives the presentation
 rules that apply to the elements whose types are defined in the structure  rules that apply to the elements whose types are defined in the structure
 schema.  Only those rules which differ from the <A  schema.  Only those rules which differ from the <a
 href="#sectc427">default</A> must be specified in the <TT>RULES</TT>  href="#sectc427">default</a> must be specified in the <tt>RULES</tt>
 section.</P>  section.</p>
 <P>  <p>
 The rule definitions for each element type are composed of the name of the  The rule definitions for each element type are composed of the name of the
 element type (as specified in the structure schema) followed by a colon and  element type (as specified in the structure schema) followed by a colon and
 the set of rules specific to that type.</P>  the set of rules specific to that type.</p>
 <P>  <p>
 The type name can be preceded by a star in the special case where the  The type name can be preceded by a star in the special case where the
 structure schema defines an <A href="#sectd3284">inclusion</A> without  structure schema defines an <a href="#sectd3284">inclusion</a> without
 expansion (or with partial expansion) of a type with the same name as an  expansion (or with partial expansion) of a type with the same name as an
 element of defined in the structure schema.</P>  element of defined in the structure schema.</p>
 <P>  <p>
 In the case where the element is a <A href="#sectd3285">mark pair</A>, but only in  In the case where the element is a <a href="#sectd3285">mark pair</a>, but
 this case, the type name can be preceded by the keywords <TT>First</TT> or  only in this case, the type name can be preceded by the keywords
 <TT>Second</TT>.  These keywords indicate whether the rules that follow apply  <tt>First</tt> or <tt>Second</tt>.  These keywords indicate whether the rules
 to the first or second mark of the pair.</P>  that follow apply to the first or second mark of the pair.</p>
 <PRE>  <pre>                 'RULES' PresentSeq
                  'RULES' PresentSeq  
      PresentSeq = Present &lt; Present > .       PresentSeq = Present &lt; Present > .
      Present    = [ '*' ] [ FirstSec ] ElemID ':'       Present    = [ '*' ] [ FirstSec ] ElemID ':'
                   ViewRuleSeq .                    ViewRuleSeq .
      FirstSec   = 'First' / 'Second' .       FirstSec   = 'First' / 'Second' .</pre>
 </PRE>  <p>
 <P>  
 A presentation schema can define presentation rules for base elements, which  A presentation schema can define presentation rules for base elements, which
 are defined implicitly in the structure schemas.  In the English version of  are defined implicitly in the structure schemas.  In the English version of
 the presentation schema compiler, the base type names are the same as in the S  the presentation schema compiler, the base type names are the same as in the S
 language, but they are terminated by the <TT>_UNIT</TT> suffix:  language, but they are terminated by the <tt>_UNIT</tt> suffix:
 <TT>TEXT_UNIT</TT>, <TT>PICTURE_UNIT</TT>, <TT>SYMBOL_UNIT</TT>,  <tt>TEXT_UNIT</tt>, <tt>PICTURE_UNIT</tt>, <tt>SYMBOL_UNIT</tt>,
 <TT>GRAPHICS_UNIT</TT>.  The base type names are written in upper-case  <tt>GRAPHICS_UNIT</tt>.  The base type names are written in upper-case
 letters.</P>  letters.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4210>Logical attribute presentation</A></H3>  
   <h3><a name="sectc4210">Logical attribute presentation</a></h3>
 <P>  <p>
 After the keyword <TT>ATTRIBUTES</TT>, all attributes which are to have some  After the keyword <tt>ATTRIBUTES</tt>, all attributes which are to have some
 effect on the presentation of the element to which they are attached must be  effect on the presentation of the element to which they are attached must be
 mentioned, along with the corresponding presentation rules.  This is true for  mentioned, along with the corresponding presentation rules.  This is true for
 both global attributes (which can be attached to all element types) and local  both global attributes (which can be attached to all element types) and local
 attributes (which can only be attached to certain element types).</P>  attributes (which can only be attached to certain element types).</p>
 <P>  <p>
 Also mentioned in this section are attributes which imply an effect on  Also mentioned in this section are attributes which imply an effect on
 elements in the subtree of the element to which they are attached. The  elements in the subtree of the element to which they are attached. The
 presentation of these descendants  can be modified as a function of the value  presentation of these descendants  can be modified as a function of the value
 of the attribute which they inherit, just as if it was attached to them  of the attribute which they inherit, just as if it was attached to them
 directly.</P>  directly.</p>
 <P>  <p>
 The specification for each attribute includes the attribute's name, followed  The specification for each attribute includes the attribute's name, followed
 by an optional value specification and, after a colon, a set of rules.  The  by an optional value specification and, after a colon, a set of rules.  The
 set of rules must contain at least one rule.</P>  set of rules must contain at least one rule.</p>
 <P>  <p>
 When there is no value specification, the rules are applied to all elements  When there is no value specification, the rules are applied to all elements
 which carry the attribute, no matter what their value.  When the rules must  which carry the attribute, no matter what their value.  When the rules must
 only apply when the attribute has certain values, these values must be  only apply when the attribute has certain values, these values must be
 specified.  Thus, the same attribute can appear in the <TT>ATTRIBUTES</TT>  specified.  Thus, the same attribute can appear in the <tt>ATTRIBUTES</tt>
 section several times, with each appearance having a different value  section several times, with each appearance having a different value
 specification.  However, reference attributes never have a value specification  specification.  However, reference attributes never have a value specification
 and, as a result, can only appear once in the <TT>ATTRIBUTES</TT> section.</P>  and, as a result, can only appear once in the <tt>ATTRIBUTES</tt> section.</p>
 <P>  <p>
 To specify that the presentation rules apply to some of the descendants of the  To specify that the presentation rules apply to some of the descendants of the
 element having the attribute, the name of the affected element type is given,  element having the attribute, the name of the affected element type is given,
 between parentheses, after the attribute name.  This way, the presentation  between parentheses, after the attribute name.  This way, the presentation
 rules for the attribute will be applied to the element having the attribute,  rules for the attribute will be applied to the element having the attribute,
 if it is of the given type, and to all of its descendants of the given type.  if it is of the given type, and to all of its descendants of the given type.
 In the case where this type is a <A href="#sectd3285">mark pair</A>, but only in  In the case where this type is a <a href="#sectd3285">mark pair</a>, but only
 this case, the type name can be preceded by the keywords <TT>First</TT> or  in this case, the type name can be preceded by the keywords <tt>First</tt> or
 <TT>Second</TT>.  These keywords indicate whether the rules that follow apply  <tt>Second</tt>.  These keywords indicate whether the rules that follow apply
 to the first or second mark of the pair. If the rule must apply to several  to the first or second mark of the pair. If the rule must apply to several
 different element types, the specification must be repeated for each element  different element types, the specification must be repeated for each element
 type.</P>  type.</p>
 <P>  <p>
 The specification of values for which the presentation rules will be applied  The specification of values for which the presentation rules will be applied
 varies according to the type of the attribute:</P>  varies according to the type of the attribute:</p>
 <DL>  <dl>
 <DT>numeric attribute</DT>  <dt>numeric attribute</dt>
 <DD>If the rules are to apply for one value of the attribute, then the  <dd>
 attribute name is followed by an equals sign and this value.  If the rules are  If the rules are to apply for one value of the attribute, then the attribute
 to apply for all values less than (or greater than) a threshold value,  name is followed by an equals sign and this value.  If the rules are to apply
 non-inclusive, the attribute name followed by a '&lt;' sign (or a '>' sign,  for all values less than (or greater than) a threshold value, non-inclusive,
 respectively) and the threshold value.  If the rules must apply to a range of  the attribute name followed by a '&lt;' sign (or a '>' sign, respectively) and
 values, the attribute name is followed by the word '<TT>IN</TT>' and the  the threshold value.  If the rules must apply to a range of values, the
 two bounds of the range, enclosed in brackets and separated by two  attribute name is followed by the word '<tt>IN</tt>' and the two bounds of the
 periods ('<TT>..</TT>').  In the case of ranges, the values of the bounds  range, enclosed in brackets and separated by two periods ('<tt>..</tt>').  In
 are included in the range.  the case of ranges, the values of the bounds are included in the range.
 <P>  <p>
 The threshold value in the comparisons can be the value of an attribute  The threshold value in the comparisons can be the value of an attribute
 attached to an ancestor element.  In this case, the attribute name is given  attached to an ancestor element.  In this case, the attribute name is given
 instead of a constant value.</P>  instead of a constant value.</p>
 <P>  <p>
 It is also possible to write rules which apply only when a comparison between  It is also possible to write rules which apply only when a comparison between
 two different attributes of the element's ancestors is true. In this case, the  two different attributes of the element's ancestors is true. In this case, the
 first attribute name is followed by a comparison keyword and the name of the  first attribute name is followed by a comparison keyword and the name of the
 second attribute.  The comparison keywords are <TT>EQUAL</TT> (simple  second attribute.  The comparison keywords are <tt>EQUAL</tt> (simple
 equality), <TT>LESS</TT> (non-inclusive less than), and <TT>GREATER</TT>  equality), <tt>LESS</tt> (non-inclusive less than), and <tt>GREATER</tt>
 (non-inclusive greater than).</P>  (non-inclusive greater than).</p>
 </DD>  </dd>
 <DT>text attribute</DT>  <dt>text attribute</dt>
 <DD>If the rules are to apply for one value of the attribute, then the  <dd>
 attribute name is followed by an equals sign and this value.  If the rules are to apply for one value of the attribute, then the attribute
 </DD>  name is followed by an equals sign and this value.
 <DT>reference attribute</DT>  </dd>
 <DD>There is never a value specification; the rules apply no matter what  <dt>reference attribute</dt>
 element is designated by the attribute.  <dd>
 </DD>  There is never a value specification; the rules apply no matter what element
 <DT>enumerated attribute</DT>  is designated by the attribute.
 <DD>If the rules are to apply for one value of the attribute, then the  </dd>
 attribute name is followed by an equals sign and this value.  <dt>enumerated attribute</dt>
 </DD>  <dd>
 </DL>  If the rules are to apply for one value of the attribute, then the attribute
 <P>  name is followed by an equals sign and this value.
   </dd>
   </dl>
   <p>
 The order in which the rules associated with a numeric attribute are defined  The order in which the rules associated with a numeric attribute are defined
 is important.  When multiple sets of rules can be applied, the first set  is important.  When multiple sets of rules can be applied, the first set
 declared is the one used.</P>  declared is the one used.</p>
 <P>  <p>
 Rules for attributes have priority over both default rules and rules  Rules for attributes have priority over both default rules and rules
 associated with element types.  The attribute rules apply to the element to  associated with element types.  The attribute rules apply to the element to
 which the attribute is attached.  It is the rules which apply to the  which the attribute is attached.  It is the rules which apply to the
 surrounding elements (and especially to the descendants) which determine the  surrounding elements (and especially to the descendants) which determine the
 effect of the attribute rules on the environment ( and especially on the  effect of the attribute rules on the environment ( and especially on the
 terminal elements of the structure).</P>  terminal elements of the structure).</p>
 <PRE>  <pre>                    'ATTRIBUTES' PresAttrSeq
                     'ATTRIBUTES' PresAttrSeq  
      PresAttrSeq  = PresAttr &lt; PresAttr > .       PresAttrSeq  = PresAttr &lt; PresAttr > .
      PresAttr     = AttrID [ '(' [ FirstSec ] ElemID ')' ]       PresAttr     = AttrID [ '(' [ FirstSec ] ElemID ')' ]
                     [ AttrRelation ] ':' ViewRuleSeq .                      [ AttrRelation ] ':' ViewRuleSeq .
Line 3594  terminal elements of the structure).</P> Line 3702  terminal elements of the structure).</P>
      UpperBound   = NUMBER.       UpperBound   = NUMBER.
      EqualNum     = NUMBER .       EqualNum     = NUMBER .
      EqualText    = STRING .       EqualText    = STRING .
      AttrValue    = NAME .       AttrValue    = NAME .</pre>
 </PRE>  <p>
 <P>  
 In presentation rules associated with a numeric attribute (and only in such  In presentation rules associated with a numeric attribute (and only in such
 rules), the attribute name can be used in place of a numeric value.  In this  rules), the attribute name can be used in place of a numeric value.  In this
 case, the value of the attribute is used in the application of the rule. Thus,  case, the value of the attribute is used in the application of the rule. Thus,
Line 3604  the attribute can represent a relation b Line 3711  the attribute can represent a relation b
 height and width of a box, the height of an area where page breaks are  height and width of a box, the height of an area where page breaks are
 prohibited, the distance between two boxes, the position of the reference axis  prohibited, the distance between two boxes, the position of the reference axis
 of a box, the interline spacing,  the indentation of the first line, the  of a box, the interline spacing,  the indentation of the first line, the
 visibility, the depth (z-order), or the character set.</P>  visibility, the depth (z-order), or the character set.</p>
 <P>  <p>
 The presentation rules associated with reference attributes, it is possible to  The presentation rules associated with reference attributes, it is possible to
 use the element designated by the attribute as a reference box in a positional  use the element designated by the attribute as a reference box in a positional
 or extent rule.  This element is represented in the <A  or extent rule.  This element is represented in the <a
 href="#sectc4218">position</A> or <A href="#sectc4219">extent</A> rule by the  href="#sectc4218">position</a> or <a href="#sectc4219">extent</a> rule by the
 keyword <TT>Referred</TT>.</P>  keyword <tt>Referred</tt>.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 In all structure schemas, there is a global Language attribute defined as  In all structure schemas, there is a global Language attribute defined as
 follows:</P>  follows:</p>
 <PRE>  <pre>ATTR
 ATTR       Language = TEXT;</pre>
      Language = TEXT;  <p>
 </PRE>  The following rules would make French text be displayed in roman characters
 <P>  and English text be displayed in italics:</p>
 The following rules would make French text be displayed in roman characters and  <pre>ATTRIBUTES
 English text be displayed in italics:</P>  
 <PRE>  
 ATTRIBUTES  
      Language = 'French' :       Language = 'French' :
                 Style : Roman;                  Style : Roman;
      Language = 'English' :       Language = 'English' :
                 Style : Italics;                  Style : Italics;</pre>
 </PRE>  <p>
 <P>  
 Using these rules, when the user puts the Language attribute with the value  Using these rules, when the user puts the Language attribute with the value
 'English' on the summary of a document, every character string (terminal  'English' on the summary of a document, every character string (terminal
 elements) contained in the summary are displayed in italics.  See the <A  elements) contained in the summary are displayed in italics.  See the <a
 href="#sectd42252"><TT>Style</TT> rule</A>.</P>  href="#sectd42252"><tt>Style</tt> rule</a>.</p>
 </BLOCKQUOTE>  </blockquote>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 A numeric attribute representing the importance of the part of the document to  A numeric attribute representing the importance of the part of the document to
 which it is attached can be defined:</P>  which it is attached can be defined:</p>
 <PRE>  <pre>ATTR
 ATTR       Importance = INTEGER;</pre>
      Importance = INTEGER;  <p>
 </PRE>  
 <P>  
 In the presentation schema, the importance of an element is reflected in the  In the presentation schema, the importance of an element is reflected in the
 choice of character size, using the following rules.</P>  choice of character size, using the following rules.</p>
 <PRE>  <pre>ATTRIBUTES
 ATTRIBUTES  
      Importance &lt; 2 :       Importance &lt; 2 :
               Size : 1;                Size : 1;
      Importance IN [2..4] :       Importance IN [2..4] :
Line 3659  ATTRIBUTES Line 3759  ATTRIBUTES
      Importance = 10 :       Importance = 10 :
               Size : 5;                Size : 5;
      Importance > 4 :       Importance > 4 :
               Size : 4;                Size : 4;</pre>
 </PRE>  <p>
 <P>  
 Thus, the character size corresponds to the value of the Importance attribute;  Thus, the character size corresponds to the value of the Importance attribute;
 its value is</P>  its value is</p>
 <UL>  <ul>
 <LI>the value of the Importance attribute when the value is between 2 and 4  <li>
   the value of the Importance attribute when the value is between 2 and 4
 (inclusive),  (inclusive),
 <LI>1, when the value of the Importance attribute is less than 2,  <li>
 <LI>4, when the value of the Importance attribute is greater than 4,  1, when the value of the Importance attribute is less than 2,
 <LI>5, when the value of the Importance attribute is 10.  <li>
 </UL>  4, when the value of the Importance attribute is greater than 4,
 <P>  <li>
   5, when the value of the Importance attribute is 10.
   </ul>
   <p>
 The last case (value 5) must be defined before the case which handles all  The last case (value 5) must be defined before the case which handles all
 Importance values greater than 4, because the two rules are not disjoint and  Importance values greater than 4, because the two rules are not disjoint and
 the first one defined will have priority.  Otherwise, when the Importance  the first one defined will have priority.  Otherwise, when the Importance
 attribute has value 10, the font size will be 4.</P>  attribute has value 10, the font size will be 4.</p>
 </BLOCKQUOTE>  </blockquote>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 Suppose the structure defines a list element which can have an attribute  Suppose the structure defines a list element which can have an attribute
 defining the type of list (numbered or not):</P>  defining the type of list (numbered or not):</p>
 <PRE>  <pre>STRUCT
 STRUCT  
     list (ATTR list_type = enumeration, dash)      list (ATTR list_type = enumeration, dash)
          = LIST OF (list_item = TEXT);           = LIST OF (list_item = TEXT);</pre>
 </PRE>  <p>
 <P>  
 Then, the presentation schema could use the attribute placed on the list  Then, the presentation schema could use the attribute placed on the list
 element to put either a dash or a number before the each element of the  element to put either a dash or a number before the each element of the
 list:</P>  list:</p>
 <PRE>  <pre>ATTRIBUTES
 ATTRIBUTES  
    list_type (list_item) = enumeration :     list_type (list_item) = enumeration :
         CreateBefore (NumberBox);          CreateBefore (NumberBox);
    list_type (list_item) = dash :     list_type (list_item) = dash :
         CreateBefore (DashBox);          CreateBefore (DashBox);</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose that two attributes are defined in the structure schema.  The first is  Suppose that two attributes are defined in the structure schema.  The first is
 a numeric global attribute called ``version''.  The other is a local attribute  a numeric global attribute called ``version''.  The other is a local attribute
 defined on the root of the document called ``Document_version'':</P>  defined on the root of the document called ``Document_version'':</p>
 <PRE>  <pre>STRUCTURE Document
 STRUCTURE Document  
 ATTR  ATTR
     version = INTEGER;      version = INTEGER;
 STRUCT  STRUCT
Line 3718  STRUCT Line 3816  STRUCT
         ...          ...
         SomeOtherElement ;          SomeOtherElement ;
         END ;          END ;
 ...  ...</pre>
 </PRE>  <p>
 <P>  These attributes can be used in the presentation schema to place change bars
 These attributes can be used in the presentation schema to place change bars in  in the margin next to elements whose version attribute has a value equal to
 the margin next to elements whose version attribute has a value equal to the  the Document_version attribute of the root and to place a star in margin of
 Document_version attribute of the root and to place a star in margin of  
 elements whose version attribute is less than the value of the root's  elements whose version attribute is less than the value of the root's
 Document_version attribute:</P>  Document_version attribute:</p>
 <PRE>  <pre>ATTRIBUTES
 ATTRIBUTES  
     version EQUAL Document_version :      version EQUAL Document_version :
         CreateBefore (ChangeBarBox) ;          CreateBefore (ChangeBarBox) ;
     version LESS Document_version :      version LESS Document_version :
         CreateBefore (StarBox) ;          CreateBefore (StarBox) ;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4212>Value transmission rules</A></H3>  
   
 <P>  <h3><a name="sectc4212">Value transmission rules</a></h3>
   <p>
 The last section of a presentation schema, which is optional, serves to  The last section of a presentation schema, which is optional, serves to
 defines the way in which a document transmits certain values to its  defines the way in which a document transmits certain values to its
 sub-documents.  A sub-document is an document <A  sub-documents.  A sub-document is an document <a
 href="#inclusion">included</A> without expansion or with partial expansion.  href="#inclusion">included</a> without expansion or with partial expansion.
 The primary document can transmit to its sub-documents the values of certain  The primary document can transmit to its sub-documents the values of certain
 counters or the textual content of certain of its elements, as a function of  counters or the textual content of certain of its elements, as a function of
 their type.</P>  their type.</p>
 <P>  <p>
 The sub-documents receive these values in attributes which must be defined in  The sub-documents receive these values in attributes which must be defined in
 their structure schema as local attributes of the root element.  The types of  their structure schema as local attributes of the root element.  The types of
 these attributes must correspond to the type of the value which they receive:  these attributes must correspond to the type of the value which they receive:
 numeric attributes for receiving the value of a counter, textual attributes  numeric attributes for receiving the value of a counter, textual attributes
 for receiving the content of an element.</P>  for receiving the content of an element.</p>
 <P>  <p>
 In the structure schema of the primary document, there appears at the end,  In the structure schema of the primary document, there appears at the end,
 after the <TT>TRANSMIT</TT> keyword, a sequence of transmission rules.  Each  after the <tt>TRANSMIT</tt> keyword, a sequence of transmission rules.  Each
 rule begins with the name of the counter to transmit or of the element type  rule begins with the name of the counter to transmit or of the element type
 whose textual content will be transmitted.  This name is followed by the  whose textual content will be transmitted.  This name is followed by the
 keyword <TT>To</TT> and the name of the attribute of the sub-document to which  keyword <tt>To</tt> and the name of the attribute of the sub-document to which
 the value is transmitted.  The sub-document class is indicated between  the value is transmitted.  The sub-document class is indicated between
 parentheses after the name of the attribute.  The transmission rule ends with  parentheses after the name of the attribute.  The transmission rule ends with
 a semicolon.</P>  a semicolon.</p>
 <PRE>  <pre>     TransmitSeq   =  Transmit &lt; Transmit > .
      TransmitSeq   =  Transmit &lt; Transmit > .  
      Transmit      =  TypeOrCounter 'To' ExternAttr       Transmit      =  TypeOrCounter 'To' ExternAttr
                       '(' ElemID ')' ';' .                        '(' ElemID ')' ';' .
      TypeOrCounter =  CounterID / ElemID .       TypeOrCounter =  CounterID / ElemID .
      ExternAttr    =  NAME .       ExternAttr    =  NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  Consider a Book document class which includes instances of the Chapter
 Consider a Book document class which includes instances of the Chapter document  document class.  These classes might have the following schemas:</p>
 class.  These classes might have the following schemas:</P>  <pre>STRUCTURE Book
 <PRE>  
 STRUCTURE Book  
 STRUCT  STRUCT
    Book = BEGIN     Book = BEGIN
           Title = Text;            Title = Text;
Line 3793  STRUCT Line 3885  STRUCT
           ChapterTitle = Text;            ChapterTitle = Text;
           ...            ...
           END;            END;
    ...     ...</pre>
 </PRE>  <p>
 <P>  
 Then the presentation schema for books could define chapter and page counters.  Then the presentation schema for books could define chapter and page counters.
 The following transmission rules in the book presentation schema would  The following transmission rules in the book presentation schema would
 transmit values for the three attributes defined at the root of each chapter  transmit values for the three attributes defined at the root of each chapter
 sub-document.</P>  sub-document.</p>
 <PRE>  <pre>PRESENTATION Book;
 PRESENTATION Book;  
 VIEWS  VIEWS
    Full_text;     Full_text;
 COUNTERS  COUNTERS
Line 3812  TRANSMIT Line 3902  TRANSMIT
    PageCtr TO FirstPageNum(Chapter);     PageCtr TO FirstPageNum(Chapter);
    ChapterCtr TO ChapterNum(Chapter);     ChapterCtr TO ChapterNum(Chapter);
    Title TO CurrentTitle(Chapter);     Title TO CurrentTitle(Chapter);
 END  END</pre>
 </PRE>  <p>
 <P>  
 Thus, each chapter included in a book can number its pages as a function of  Thus, each chapter included in a book can number its pages as a function of
 the number of pages preceding it in the book, can make the chapter's number  the number of pages preceding it in the book, can make the chapter's number
 appear before the number of each of its sections, or can place the title of  appear before the number of each of its sections, or can place the title of
 the book at the top of each page.</P>  the book at the top of each page.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4213>Presentation rules</A></H3>  
   
 <P>  <h3><a name="sectc4213">Presentation rules</a></h3>
   <p>
 Whether defining the appearance of a presentation or page layout box, an  Whether defining the appearance of a presentation or page layout box, an
 element type, or an attribute value, the set of presentation rules that apply  element type, or an attribute value, the set of presentation rules that apply
 is always defined in the same way.</P>  is always defined in the same way.</p>
 <P>  <p>
 Normally, a set of presentation rules is placed between the keywords  Normally, a set of presentation rules is placed between the keywords
 <TT>BEGIN</TT> and <TT>END</TT>, the keyword <TT>END</TT> being followed by a  <tt>BEGIN</tt> and <tt>END</tt>, the keyword <tt>END</tt> being followed by a
 semicolon.  The first section of this block defines the rules that apply to  semicolon.  The first section of this block defines the rules that apply to
 the primary view, if the <A href="#sectc427">default rules</A> are not  the primary view, if the <a href="#sectc427">default rules</a> are not
 completely suitable.  Next comes the rules which apply to specific other  completely suitable.  Next comes the rules which apply to specific other
 views, with a rule sequence for each view for which the default rules are not  views, with a rule sequence for each view for which the default rules are not
 satisfactory.  If the default rules are suitable for the non-primary views,  satisfactory.  If the default rules are suitable for the non-primary views,
 there will not be any specific rules for these views.  If there is only one  there will not be any specific rules for these views.  If there is only one
 rule which applies to all views then the keywords <TT>BEGIN</TT> and  rule which applies to all views then the keywords <tt>BEGIN</tt> and
 <TT>END</TT> need not appear.</P>  <tt>END</tt> need not appear.</p>
 <P>  <p>
 For each view, it is only necessary to specify those rules which differ from  For each view, it is only necessary to specify those rules which differ from
 the default rules for the view, so that for certain views (or even all views),  the default rules for the view, so that for certain views (or even all views),
 there may be no specific rules.</P>  there may be no specific rules.</p>
 <P>  <p>
 The specific rules for a non-primary view are introduced by the <A  The specific rules for a non-primary view are introduced by the <a
 name="inkeyword"><TT>IN</TT> keyword</A>, followed by the view name.  The  name="inkeyword"><tt>IN</tt> keyword</a>, followed by the view name.  The
 rules for that view follow, delimited by the keywords <TT>BEGIN</TT> and  rules for that view follow, delimited by the keywords <tt>BEGIN</tt> and
 <TT>END</TT>, or without these two keywords when there is only one rule.</P>  <tt>END</tt>, or without these two keywords when there is only one rule.</p>
 <P>  <p>
 <STRONG>Note:</STRONG> the view name which follows the <TT>IN</TT> keyword  <strong>Note:</strong> the view name which follows the <tt>IN</tt> keyword
 must not be the name of the primary view, since the rules for that view are  must not be the name of the primary view, since the rules for that view are
 found before the rules for the other views.</P>  found before the rules for the other views.</p>
 <P>  <p>
 Within each block concerning a view, other blocks can appear, delimited by the  Within each block concerning a view, other blocks can appear, delimited by the
 same keywords <TT>BEGIN</TT> and <TT>END</TT>.  Each of these blocks gathers  same keywords <tt>BEGIN</tt> and <tt>END</tt>.  Each of these blocks gathers
 the presentation rules that apply, for a given view, only when a given  the presentation rules that apply, for a given view, only when a given
 condition is satisfied.  Each block is preceded by a condition introduced by  condition is satisfied.  Each block is preceded by a condition introduced by
 the <TT>IF</TT> keyword.  If such a conditional block contains only one rule,  the <tt>IF</tt> keyword.  If such a conditional block contains only one rule,
 the keywords <TT>BEGIN</TT> and <TT>END</TT> can be omitted.</P>  the keywords <tt>BEGIN</tt> and <tt>END</tt> can be omitted.</p>
 <P>  <p>
 Although the syntax allows any presentation rule to appear in a conditional  Although the syntax allows any presentation rule to appear in a conditional
 block, only <A href="#sectc4232">creation rules</A> are allowed after any  block, only <a href="#sectc4232">creation rules</a> are allowed after any
 condition; other rules are allowed only after conditions <TT>Within</TT> and  condition; other rules are allowed only after conditions <tt>Within</tt> and
 ElemID.  In addition, the following rules cannot be conditional:  ElemID.  In addition, the following rules cannot be conditional:
 <TT>PageBreak, LineBreak, Inline, Gather</TT>.</P>  <tt>PageBreak, LineBreak, Inline, Gather</tt>.</p>
 <P>  <p>
 For a given view, the rules that apply without any condition must appear  For a given view, the rules that apply without any condition must appear
 before the first conditional block.  If some rules apply only when none of the  before the first conditional block.  If some rules apply only when none of the
 specified condition holds, they are grouped in a block preceded by the keyword  specified condition holds, they are grouped in a block preceded by the keyword
 <TT>Otherwise</TT>, and that block must appear after the last conditionnal  <tt>Otherwise</tt>, and that block must appear after the last conditionnal
 block concerning the same view.</P>  block concerning the same view.</p>
 <PRE>  <pre>     ViewRuleSeq  = 'BEGIN' &lt; RulesAndCond > &lt; ViewRules >
      ViewRuleSeq  = 'BEGIN' &lt; RulesAndCond > &lt; ViewRules >  
                     'END' ';' /                      'END' ';' /
                     ViewRules / CondRules / Rule .                      ViewRules / CondRules / Rule .
      RulesAndCond = CondRules / Rule .       RulesAndCond = CondRules / Rule .
Line 3884  block concerning the same view.</P> Line 3972  block concerning the same view.</P>
                     [ 'Otherwise' RuleSeq ] .                      [ 'Otherwise' RuleSeq ] .
      CondRule     = 'IF' ConditionSeq RuleSeq .       CondRule     = 'IF' ConditionSeq RuleSeq .
      RulesSeq     = 'BEGIN' Rule &lt; Rule > 'END' ';' /       RulesSeq     = 'BEGIN' Rule &lt; Rule > 'END' ';' /
                     Rule .                      Rule .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 The following rules for a report's title make the title visible in the primary  The following rules for a report's title make the title visible in the primary
 view and invisible in the table of contents and in the formula views (see the  view and invisible in the table of contents and in the formula views (see the
 <A href="#sectc4224"><TT>Visibility</TT> rule</A>).</P>  <a href="#sectc4224"><tt>Visibility</tt> rule</a>).</p>
 <PRE>  <pre>Title : BEGIN
 Title : BEGIN  
         Visibility : 1;          Visibility : 1;
         ...    {Other rules for the primary view}          ...    {Other rules for the primary view}
         IN Table_of_contents          IN Table_of_contents
            Visibility : 0;             Visibility : 0;
         IN Formulas          IN Formulas
            Visibility : 0;             Visibility : 0;
         END;          END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4214>Conditions applying to presentation rules</A></H3>  
   
 <P>  <h3><a name="sectc4214">Conditions applying to presentation rules</a></h3>
   <p>
 Many conditions can be applied to presentation rules.  Conditions allow  Many conditions can be applied to presentation rules.  Conditions allow
 certain presentation rules to apply only in certain cases.  These conditions  certain presentation rules to apply only in certain cases.  These conditions
 can be based on the structural position of the element.  They can be based on  can be based on the structural position of the element.  They can be based on
 whether the element has references, and what type of references, whether the  whether the element has references, and what type of references, whether the
 element has attributes, whether the element is empty or not.  They can also be  element has attributes, whether the element is empty or not.  They can also be
 based on the value of a counter.</P>  based on the value of a counter.</p>
 <P>  <p>
 It is possible to specify several conditions which must all be true for the  It is possible to specify several conditions which must all be true for the
 rules to apply.</P>  rules to apply.</p>
 <P>  <p>
 A set of conditions is specified by the <TT>IF</TT> keyword.  This keyword is  A set of conditions is specified by the <tt>IF</tt> keyword.  This keyword is
 followed by the sequence of conditions, separated by the <TT>AND</TT> keyword.  followed by the sequence of conditions, separated by the <tt>AND</tt> keyword.
 Each condition is specified by a keyword which defines the condition type. In  Each condition is specified by a keyword which defines the condition type. In
 some cases, the keyword is followed by other data, which specify the condition  some cases, the keyword is followed by other data, which specify the condition
 more precisely.</P>  more precisely.</p>
 <P>  <p>
 An elementary condition can be negative; it is then preceded by the  An elementary condition can be negative; it is then preceded by the
 <TT>NOT</TT> keyword.</P>  <tt>NOT</tt> keyword.</p>
 <P>  <p>
 When the presentation rule(s) controlled by the condition apply to a reference  When the presentation rule(s) controlled by the condition apply to a reference
 element or a reference attribute, an elementary condition can also apply to  element or a reference attribute, an elementary condition can also apply to
 element referred by this reference.  The <TT>Target</TT> keyword is used for  element referred by this reference.  The <tt>Target</tt> keyword is used for
 that purpose.  It must appear before the keyword defining the condition  that purpose.  It must appear before the keyword defining the condition
 type.</P>  type.</p>
 <PRE>  <pre>     CondRule      ='IF' ConditionSeq RuleSeq .
      CondRule      ='IF' ConditionSeq RuleSeq .  
      ConditionSeq  = Condition &lt; 'AND' Condition > .       ConditionSeq  = Condition &lt; 'AND' Condition > .
      Condition     = [ 'NOT' ] [ 'Target' ] ConditionElem .       Condition     = [ 'NOT' ] [ 'Target' ] ConditionElem .
      ConditionElem ='First' / 'Last' /       ConditionElem ='First' / 'Last' /
Line 3962  type.</P> Line 4046  type.</P>
      MinCtrVal     = NUMBER .       MinCtrVal     = NUMBER .
      EqCtrVal      = NUMBER .       EqCtrVal      = NUMBER .
      MaxCtrBound   = NUMBER .       MaxCtrBound   = NUMBER .
      MinCtrBound   = NUMBER .       MinCtrBound   = NUMBER .</pre>
 </PRE>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42141>Conditions based on the logical position of the element</A></H4>  
   
 <P>  <h4><a name="sectd42141">Conditions based on the logical position of the
   element</a></h4>
   <p>
 The condition can be on the position of the element in the document's logical  The condition can be on the position of the element in the document's logical
 structure tree.  It is possible to test whether the element is the first  structure tree.  It is possible to test whether the element is the first
 (<TT>First</TT>) or last (<TT>Last</TT>) among its siblings or if it is not  (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is not
 the first (<TT>NOT First</TT>) or not the last (<TT>NOT Last</TT>). These  the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>). These
 conditions can be associated only with <A href="#sectc4232">creation  conditions can be associated only with <a href="#sectc4232">creation
 rules</A>.</P>  rules</a>.</p>
 <P>  <p>
 It is also possible to test if the element is contained in an element of a  It is also possible to test if the element is contained in an element of a
 given type (<TT>Within</TT>) or if it is not (<TT>NOT Within</TT>). The type  given type (<tt>Within</tt>) or if it is not (<tt>NOT Within</tt>). The type
 is indicated after the keyword <TT>Within</TT>. If that element type is  is indicated after the keyword <tt>Within</tt>. If that element type is
 defined in a structure schema which is not the one which corresponds to the  defined in a structure schema which is not the one which corresponds to the
 presentation schema, the type name of this element must be followed, between  presentation schema, the type name of this element must be followed, between
 parentheses, by the name of the structure schema which defines it.</P>  parentheses, by the name of the structure schema which defines it.</p>
 <P>  <p>
 If the keyword <TT>Within</TT> is preceded by <TT>Immediately</TT>, the  If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the
 condition is satisfied only if the <EM>parent</EM> element has the type  condition is satisfied only if the <em>parent</em> element has the type
 indicated. If the word <TT>Immediately</TT> is missing, the condition is  indicated. If the word <tt>Immediately</tt> is missing, the condition is
 satisfied if any <EM>ancestor</EM> has the type indicated.</P>  satisfied if any <em>ancestor</em> has the type indicated.</p>
 <P>  <p>
 An integer <I>n</I> can appear between the keyword <TT>Within</TT> and the  An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the
 type.  It specifies the number of ancestors of the indicated type that must be  type.  It specifies the number of ancestors of the indicated type that must be
 present for the condition to be satisfied.  If the keyword  present for the condition to be satisfied.  If the keyword
 <TT>Immediately</TT> is also present, the <I>n</I> immediate ancestors of the  <tt>Immediately</tt> is also present, the <i>n</i> immediate ancestors of the
 element must have the indicated type.  The integer <I>n</I> must be positive  element must have the indicated type.  The integer <i>n</i> must be positive
 or zero.  It can be preceded by <TT>&lt;</TT> or <TT>></TT> to indicate a  or zero.  It can be preceded by <tt>&lt;</tt> or <tt>></tt> to indicate a
 maximum or minimum number of ancestors.  If these symbols are missing, the  maximum or minimum number of ancestors.  If these symbols are missing, the
 condition is satisfied only if it exists exactly <I>n</I> ancestors.  When  condition is satisfied only if it exists exactly <i>n</i> ancestors.  When
 this number is missing, it is equivalent to > 0.</P>  this number is missing, it is equivalent to > 0.</p>
 <P>  <p>
 If the condition applies to presentation rules associated with an attribute,  If the condition applies to presentation rules associated with an attribute,
 in the <TT>ATTRIBUTES</TT> section of the presentation schema, the condition  in the <tt>ATTRIBUTES</tt> section of the presentation schema, the condition
 can be simply an element name. Presentation rules are then executed only if  can be simply an element name. Presentation rules are then executed only if
 the attribute is attached to an element of that type. The keyword <TT>NOT</TT>  the attribute is attached to an element of that type. The keyword <tt>NOT</tt>
 before the element name indicates that the presentation rules must be executed  before the element name indicates that the presentation rules must be executed
 only if the element is not of the type indicated.</P>  only if the element is not of the type indicated.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42142>Conditions on references</A></H4>  
   
 <P>  <h4><a name="sectd42142">Conditions on references</a></h4>
   <p>
 References may be taken into account in conditions, which can be based on the  References may be taken into account in conditions, which can be based on the
 fact that the element, or one of its ancestors, is designated by a at least  fact that the element, or one of its ancestors, is designated by a at least
 one reference (<TT>Referred</TT>) or by none (<TT>NOT Referred</TT>).</P>  one reference (<tt>Referred</tt>) or by none (<tt>NOT Referred</tt>).</p>
 <P>  <p>
 If the element or attribute to which the condition is attached is a reference,  If the element or attribute to which the condition is attached is a reference,
 the condition can be based on the fact that it acts as the first reference to  the condition can be based on the fact that it acts as the first reference to
 the designated element (<TT>FirstRef</TT>), or as the last (<TT>LastRef</TT>),  the designated element (<tt>FirstRef</tt>), or as the last (<tt>LastRef</tt>),
 or as a reference to an element located in another document  or as a reference to an element located in another document
 (<TT>ExternalRef</TT>) or in the same document (<TT>InternalRef</TT>).</P>  (<tt>ExternalRef</tt>) or in the same document (<tt>InternalRef</tt>).</p>
 <P>  <p>
 The condition can also be based on the fact that the element is an <A  The condition can also be based on the fact that the element is an <a
 href="#inclusion">inclusion</A>.  This is noted (<TT>CopyRef</TT>).</P>  href="#inclusion">inclusion</a>.  This is noted (<tt>CopyRef</tt>).</p>
 <P>  <p>
 Like all conditions, conditions on references can be inverted by the  Like all conditions, conditions on references can be inverted by the
 <TT>NOT</TT> keyword. These conditions can be associated only with <A  <tt>NOT</tt> keyword. These conditions can be associated only with <a
 href="#sectc4232">creation rules</A>.</P>  href="#sectc4232">creation rules</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42143>Conditions on logical attributes</A></H4>  
   
 <P>  <h4><a name="sectd42143">Conditions on logical attributes</a></h4>
   <p>
 The condition can be based on the presence or absence of attributes associated  The condition can be based on the presence or absence of attributes associated
 with the element, no matter what the attributes or their values. The  with the element, no matter what the attributes or their values. The
 <TT>AnyAttributes</TT> keyword expresses this condition.</P>  <tt>AnyAttributes</tt> keyword expresses this condition.</p>
 <P>  <p>
 If the condition appears in the presentation rules of an attribute, the  If the condition appears in the presentation rules of an attribute, the
 <TT>FirstAttr</TT> and <TT>LastAttr</TT> keywords can be used to indicate that  <tt>FirstAttr</tt> and <tt>LastAttr</tt> keywords can be used to indicate that
 the rules must only be applied if this attribute is the first attribute for  the rules must only be applied if this attribute is the first attribute for
 the element or if it is the last (respectively).  These conditions can also be  the element or if it is the last (respectively).  These conditions can also be
 inverted by the <TT>NOT</TT> keyword. These conditions can be associated only  inverted by the <tt>NOT</tt> keyword. These conditions can be associated only
 with <A href="#sectc4232">creation rules</A>.</P>  with <a href="#sectc4232">creation rules</a>.</p>
 <P>  <p>
 It is also possible to apply certain presentation rules only when the element  It is also possible to apply certain presentation rules only when the element
 being processed or one of its ancestors has a certain attribute, perhaps with  being processed or one of its ancestors has a certain attribute, perhaps with
 a certain value.  This can be done in the <A  a certain value.  This can be done in the <a
 href="#sectc4210"><TT>ATTRIBUTES</TT> section</A>.</P>  href="#sectc4210"><tt>ATTRIBUTES</tt> section</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42144>Conditions on page breaks</A></H4>  
   
 <P>  <h4><a name="sectd42144">Conditions on page breaks</a></h4>
   <p>
 The page break base type (and only this type) can use the following  The page break base type (and only this type) can use the following
 conditions: <TT>ComputedPage</TT>, <TT>StartPage</TT>, and <TT>UserPage</TT>.  conditions: <tt>ComputedPage</tt>, <tt>StartPage</tt>, and <tt>UserPage</tt>.
 The <TT>ComputedPage</TT> condition indicates that the presentation rule(s)  The <tt>ComputedPage</tt> condition indicates that the presentation rule(s)
 should apply if the page break was created automatically by Thot;  the  should apply if the page break was created automatically by Thot;  the
 <TT>StartPage</TT> condition is true if the page break is generated before the  <tt>StartPage</tt> condition is true if the page break is generated before the
 element by the <TT>Page</TT> rule; and the <TT>UserPage</TT> condition applies  element by the <tt>Page</tt> rule; and the <tt>UserPage</tt> condition applies
 if the page break was inserted by the user.</P>  if the page break was inserted by the user.</p>
 <P>  <p>
 These conditions can be associated only with <A href="#sectc4232">creation  These conditions can be associated only with <a href="#sectc4232">creation
 rules</A>.</P>  rules</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42145>Conditions on the element's content</A></H4>  
   
 <P>  <h4><a name="sectd42145">Conditions on the element's content</a></h4>
   <p>
 The condition can be based on whether or not the element is empty.  An element  The condition can be based on whether or not the element is empty.  An element
 which has no children or whose leaves are all empty is considered to be empty  which has no children or whose leaves are all empty is considered to be empty
 itself.  This condition is expressed by the <TT>Empty</TT> keyword, optionally  itself.  This condition is expressed by the <tt>Empty</tt> keyword, optionally
 preceded by the <TT>NOT</TT> keyword. This condition can be associated only  preceded by the <tt>NOT</tt> keyword. This condition can be associated only
 with <A href="#sectc4232">creation rules</A>.</P>  with <a href="#sectc4232">creation rules</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42146>Conditions on counters</A></H4>  
   
 <P>  <h4><a name="sectd42146">Conditions on counters</a></h4>
   <p>
 Presentation rules can apply when the counter's value is one, is even or odd,  Presentation rules can apply when the counter's value is one, is even or odd,
 is equal, greater than or less than a given value or falls in a range of  is equal, greater than or less than a given value or falls in a range of
 values.  This is particularly useful for creating header and footer boxes.  values.  This is particularly useful for creating header and footer boxes.
 These conditions can be associated only with <A href="#sectc4232">creation  These conditions can be associated only with <a href="#sectc4232">creation
 rules</A>.</P>  rules</a>.</p>
 <P>  <p>
 To compare the value of a counter to a given value, a comparison is given  To compare the value of a counter to a given value, a comparison is given
 between parentheses. The comparison is composed of the counter name followed  between parentheses. The comparison is composed of the counter name followed
 by an equals, greater than, or less than sign and the value to which the  by an equals, greater than, or less than sign and the value to which the
 counter will be compared.  A test for whether or not a counter's value falls  counter will be compared.  A test for whether or not a counter's value falls
 in a range also appears within parentheses.  In this case, the counter name is  in a range also appears within parentheses.  In this case, the counter name is
 followed by the <TT>IN</TT> keyword and the range definition within brackets.  followed by the <tt>IN</tt> keyword and the range definition within brackets.
 The <TT>Even</TT>, <TT>Odd</TT> and <TT>One</TT> are used to test a counter's  The <tt>Even</tt>, <tt>Odd</tt> and <tt>One</tt> are used to test a counter's
 value and are followed by the counter name between parentheses.</P>  value and are followed by the counter name between parentheses.</p>
 <P>  <p>
 The list of possible conditions on counters is:</P>  The list of possible conditions on counters is:</p>
 <DL>  <dl>
 <DT><TT>Even (Counter)</TT></DT>  <dt><tt>Even (Counter)</tt></dt>
 <DD>the box is created only if the counter has an even value.  <dd>
 </DD>  the box is created only if the counter has an even value.
 <DT><TT>Odd (Counter)</TT></DT>  </dd>
 <DD>the box is created only if the counter has an odd value.  <dt><tt>Odd (Counter)</tt></dt>
 </DD>  <dd>
 <DT><TT>One (Counter)</TT></DT>  the box is created only if the counter has an odd value.
 <DD>the box is created only the counter's value is 1.  </dd>
 </DD>  <dt><tt>One (Counter)</tt></dt>
 <DT><TT>NOT One (Counter)</TT></DT>  <dd>
 <DD>the box is created, unless the counter's value is 1.  the box is created only the counter's value is 1.
 </DD>  </dd>
 <DT><TT>(Counter &lt; Value)</TT></DT>  <dt><tt>NOT One (Counter)</tt></dt>
 <DD>the box is created only if the counter's value is less than Value.  <dd>
 </DD>  the box is created, unless the counter's value is 1.
 <DT><TT>(Counter > Value)</TT></DT>  </dd>
 <DD>the box is created only if the counter's value is greater than Value.  <dt><tt>(Counter &lt; Value)</tt></dt>
 </DD>  <dd>
 <DT><TT>(Counter = Value)</TT></DT>  the box is created only if the counter's value is less than Value.
 <DD>the box is created only if the counter's value is equal to Value.  </dd>
 </DD>  <dt><tt>(Counter > Value)</tt></dt>
 <DT><TT>NOT (Counter = Value)</TT></DT>  <dd>
 <DD>the is created only if the counter's value is different than Value.  the box is created only if the counter's value is greater than Value.
 </DD>  </dd>
 <DT><TT>(Counter IN [MinValue..MaxValue])</TT></DT>  <dt><tt>(Counter = Value)</tt></dt>
 <DD>the box is created only if the counter's value falls in the range bounded  <dd>
 by MinValue and MaxValue (inclusive).  the box is created only if the counter's value is equal to Value.
 </DD>  </dd>
 <DT><TT>NOT (Counter IN [MinValue..MaxValue])</TT></DT>  <dt><tt>NOT (Counter = Value)</tt></dt>
 <DD>the box is created only if the value of the counter does not fall in the  <dd>
 range bounded by MinValue and MaxValue (inclusive).  the is created only if the counter's value is different than Value.
 </DD>  </dd>
 </DL>  <dt><tt>(Counter IN [MinValue..MaxValue])</tt></dt>
 <P>  <dd>
 <STRONG>Note:</STRONG> the <TT>NOT Even</TT> and <TT>NOT Odd</TT> conditions  the box is created only if the counter's value falls in the range bounded by
 are syntactically correct but can be expressed more simply by <TT>Odd</TT> and  MinValue and MaxValue (inclusive).
 <TT>Even</TT>, respectively.</P>  </dd>
 </DIV>  <dt><tt>NOT (Counter IN [MinValue..MaxValue])</tt></dt>
 </DIV>  <dd>
   the box is created only if the value of the counter does not fall in the range
   bounded by MinValue and MaxValue (inclusive).
   </dd>
   </dl>
   <p>
   <strong>Note:</strong> the <tt>NOT Even</tt> and <tt>NOT Odd</tt> conditions
   are syntactically correct but can be expressed more simply by <tt>Odd</tt> and
   <tt>Even</tt>, respectively.</p>
   </div>
   </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4215>A presentation rule</A></H3>  
   
 <P>  <h3><a name="sectc4215">A presentation rule</a></h3>
   <p>
 A presentation rule defines either a presentation parameter or presentation  A presentation rule defines either a presentation parameter or presentation
 function.  The parameters are:</P>  function.  The parameters are:</p>
 <UL>  <ul>
 <LI>the position of the vertical and horizontal reference axes of the box,  <li>
 <LI>the position of the box in relation to other boxes,  the position of the vertical and horizontal reference axes of the box,
 <LI>the height or width of the box, with overflow exceptions,  <li>
 <LI>the characteristics of the lines contained in the box: linespacing,  the position of the box in relation to other boxes,
   <li>
   the height or width of the box, with overflow exceptions,
   <li>
   the characteristics of the lines contained in the box: linespacing,
 indentation of the first line, justification, hyphenation,  indentation of the first line, justification, hyphenation,
 <LI>the conditions for breaking the box across pages,  <li>
 <LI>the characteristics of the characters contained in the box: size, font,  the conditions for breaking the box across pages,
 style, underlining,  <li>
 <LI>the depth of the box among overlapping boxes (often called stacking  the characteristics of the characters contained in the box: size, font, style,
 order),  underlining,
 <LI>the characteristics of graphic elements contained in the box: style and  <li>
   the depth of the box among overlapping boxes (often called stacking order),
   <li>
   the characteristics of graphic elements contained in the box: style and
 thickness of lines, fill pattern for closed objects,  thickness of lines, fill pattern for closed objects,
 <LI>the colors in text, graphics, pictures, and symbols contained in the box  <li>
 are displayed or printed,  the colors in text, graphics, pictures, and symbols contained in the box are
 <LI>for presentation boxes only, the contents of the box.  displayed or printed,
 </UL>  <li>
 <P>  for presentation boxes only, the contents of the box.
 The <A name="presfunct">presentation functions</A> are:</P>  </ul>
 <UL>  <p>
 <LI>the creation of a presentation box  The <a name="presfunct">presentation functions</a> are:</p>
 <LI>the line-breaking or page-breaking style,  <ul>
 <LI>the copying of another box,  <li>
 <LI>the display of the box background and border,  the creation of a presentation box
 <LI>the display of a background picture and its aspect.  <li>
 </UL>  the line-breaking or page-breaking style,
 <P>  <li>
   the copying of another box,
   <li>
   the display of the box background and border,
   <li>
   the display of a background picture and its aspect.
   </ul>
   <p>
 For each box and each view, every presentation parameter is defined once and  For each box and each view, every presentation parameter is defined once and
 only once, either explicitly or by the <A href="#sectc427">default  only once, either explicitly or by the <a href="#sectc427">default rules</a>.
 rules</A>.  In contrast, presentation functions are not obligatory and can  In contrast, presentation functions are not obligatory and can appear many
 appear many times for the same element.  for example an element can create  times for the same element.  for example an element can create many
 many presentation boxes.  Another element may not use any presentation  presentation boxes.  Another element may not use any presentation
 functions.</P>  functions.</p>
 <P>  <p>
 Each rule defining a presentation parameter begins with a keyword followed by  Each rule defining a presentation parameter begins with a keyword followed by
 a colon.  The keyword indicates the parameter which is the subject of the rule.  a colon.  The keyword indicates the parameter which is the subject of the
 After the keyword and the colon, the remainder of the rule varies.  All rules  rule. After the keyword and the colon, the remainder of the rule varies.  All
 are terminated by a semicolon.</P>  rules are terminated by a semicolon.</p>
 <PRE>  <pre>     Rule      = PresParam ';' / PresFunc ';' .
      Rule      = PresParam ';' / PresFunc ';' .  
      PresParam ='VertRef' ':'       PositionHoriz /       PresParam ='VertRef' ':'       PositionHoriz /
                 'HorizRef' ':'      PositionVert /                  'HorizRef' ':'      PositionVert /
                 'VertPos' ':'       VPos /                  'VertPos' ':'       VPos /
Line 4221  are terminated by a semicolon.</P> Line 4328  are terminated by a semicolon.</P>
                 'Page' '(' BoxID ')' /                  'Page' '(' BoxID ')' /
                 'Copy' '(' BoxTypeToCopy ')' /                  'Copy' '(' BoxTypeToCopy ')' /
                 'ShowBox' /                  'ShowBox' /
                 'BackgroundPicture' ':' FileName /                  'BackgroundPicture' ':' FileName /
                 'PictureMode' ':'   PictMode /                  'PictureMode' ':'   PictMode /</pre>
 </PRE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc4216>Box axes</A></H3>  <h3><a name="sectc4216">Box axes</a></h3>
   <p>
 <P>  The position of the middle axes <tt>VMiddle</tt> and <tt>HMiddle</tt> in
 The position of the middle axes <TT>VMiddle</TT> and <TT>HMiddle</TT> in  
 relation to their box is always calculated automatically as a function of the  relation to their box is always calculated automatically as a function of the
 height and width of the box and is not specified by the presentation rules. In  height and width of the box and is not specified by the presentation rules. In
 the presentation schema, these middle axes are used only to position their box  the presentation schema, these middle axes are used only to position their box
 with respect to another by specifying the distance between the middle axis and  with respect to another by specifying the distance between the middle axis and
 an axis or a side of another box (see the <A href="#sectc4218">relative  an axis or a side of another box (see the <a href="#sectc4218">relative
 position</A>).</P>  position</a>).</p>
 <P>  <p>
 The reference axes of a box are also used to position their box in relation to  The reference axes of a box are also used to position their box in relation to
 another, but in contrast to the middle axes, the presentation schema must make  another, but in contrast to the middle axes, the presentation schema must make
 their position explicit, either in relation to a side or the middle axis of  their position explicit, either in relation to a side or the middle axis of
 the box itself, or in relation to an axis of an enclosed box.</P>  the box itself, or in relation to an axis of an enclosed box.</p>
 <P>  <p>
 Only boxes of base elements have predefined reference axes.  For character  Only boxes of base elements have predefined reference axes.  For character
 string boxes, the horizontal reference axis is the baseline of the characters  string boxes, the horizontal reference axis is the baseline of the characters
 (the line which passes immediately under the upper-case letters, ignoring the  (the line which passes immediately under the upper-case letters, ignoring the
 letter Q) and the vertical reference axis is at the left edge of the first  letter Q) and the vertical reference axis is at the left edge of the first
 character of the string.</P>  character of the string.</p>
 <P>  <p>
 The positions of a box's reference axes are defined by the <TT>VertRef</TT>  The positions of a box's reference axes are defined by the <tt>VertRef</tt>
 and <TT>HorizRef</TT> rules which specify the <A href="#distance">distance</A>  and <tt>HorizRef</tt> rules which specify the <a href="#distance">distance</a>
 between the reference axis and an axis or parallel side of the same box or of  between the reference axis and an axis or parallel side of the same box or of
 an enclosed box.</P>  an enclosed box.</p>
 <PRE>  <pre>               'VertRef'  ':' PositionHoriz
                'VertRef'  ':' PositionHoriz                 'HorizRef' ':' PositionVert</pre>
                'HorizRef' ':' PositionVert  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 If, in the structure schema for mathematical formulas, the fraction element is  If, in the structure schema for mathematical formulas, the fraction element is
 defined by</P>  defined by</p>
 <PRE>  <pre>Fraction = BEGIN
 Fraction = BEGIN  
            Numerator   = Expression;             Numerator   = Expression;
            Denominator = Expression;             Denominator = Expression;
            END;             END;</pre>
 </PRE>  <p>
 <P>  
 then the horizontal reference axis of the fraction can be positioned on top of  then the horizontal reference axis of the fraction can be positioned on top of
 the denominator by the rule:</P>  the denominator by the rule:</p>
 <PRE>  <pre>Fraction :
 Fraction :  
      BEGIN       BEGIN
      HorizRef : Enclosed Denominator . Top;       HorizRef : Enclosed Denominator . Top;
      ...       ...
      END;       END;</pre>
 </PRE>  <p>
 <P>  To put the horizontal reference axis of a column at its middle:</p>
 To put the horizontal reference axis of a column at its middle:</P>  <pre>Column :
 <PRE>  
 Column :  
      BEGIN       BEGIN
      HorizRef : * . HMiddle;       HorizRef : * . HMiddle;
      ...       ...
      END;       END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4217>Distance units</A></H3>  
   
 <P>  <h3><a name="sectc4217">Distance units</a></h3>
   <p>
 Some distances and dimensions appear in many rules of a presentation schema,  Some distances and dimensions appear in many rules of a presentation schema,
 especially in position rules (<TT>VertPos, HorizPos</TT>), in extent rules for  especially in position rules (<tt>VertPos, HorizPos</tt>), in extent rules for
 boxes (<TT>Height, Width</TT>), in rules defining lines (<TT>LineSpacing,  boxes (<tt>Height, Width</tt>), in rules defining lines (<tt>LineSpacing,
 Indent</TT>), in rules controlling pagination (<TT>NoBreak1, NoBreak2</TT>)  Indent</tt>), in rules controlling pagination (<tt>NoBreak1, NoBreak2</tt>)
 and in rules specifying the thickness of strokes (<TT>LineWeight</TT>).</P>  and in rules specifying the thickness of strokes (<tt>LineWeight</tt>).</p>
 <P>  <p>
 In all these rules, the distance or extent can be expressed</P>  In all these rules, the distance or extent can be expressed</p>
 <UL>  <ul>
 <LI>either in relative units, which depend on the size of the characters in  <li>
 the current font: height of the element's font or height of the letter 'x',  either in relative units, which depend on the size of the characters in the
 <LI>or in absolute units: centimeter, millimeter, inch, typographer's point,  current font: height of the element's font or height of the letter 'x',
 pica or pixel.  <li>
 </UL>  or in absolute units: centimeter, millimeter, inch, typographer's point, pica
 <P>  or pixel.
   </ul>
   <p>
 Units can be chosen freely.  Thus, it is possible to use relative units in one  Units can be chosen freely.  Thus, it is possible to use relative units in one
 rule, centimeters in the next rule, and typographer's points in another.</P>  rule, centimeters in the next rule, and typographer's points in another.</p>
 <P>  <p>
 Absolute units are used to set rigid rules for the appearance of documents. In  Absolute units are used to set rigid rules for the appearance of documents. In
 contrast, relative units allow changes of scale.  The editor lets the value of  contrast, relative units allow changes of scale.  The editor lets the value of
 relative units be changed dynamically.  Such changes affect every box using  relative units be changed dynamically.  Such changes affect every box using
 relative units simultaneously and in the same proportion. Changing the value  relative units simultaneously and in the same proportion. Changing the value
 of the relative units affects the size of the characters and graphical  of the relative units affects the size of the characters and graphical
 elements, and the size of the boxes and the distances between them.</P>  elements, and the size of the boxes and the distances between them.</p>
 <P>  <p>
 A <A name="distance">distance</A> or extent is specified by a number, which  A <a name="distance">distance</a> or extent is specified by a number, which
 may be followed by one or more spaces and a units keyword.  When there is no  may be followed by one or more spaces and a units keyword.  When there is no
 units keyword, the number specifies the number of relative units, where a  units keyword, the number specifies the number of relative units, where a
 relative unit is the height of a character in the current font (an em).  When  relative unit is the height of a character in the current font (an em).  When
 the number is followed by a units keyword, the keyword indicates the type of  the number is followed by a units keyword, the keyword indicates the type of
 absolute units:</P>  absolute units:</p>
 <UL>  <ul>
 <LI><TT>em</TT>: height of the element's font,  <li>
 <LI><TT>ex</TT>: height of the letter 'x',  <tt>em</tt>: height of the element's font,
 <LI><TT>cm</TT>: centimeter,  <li>
 <LI><TT>mm</TT>: millimeter,  <tt>ex</tt>: height of the letter 'x',
 <LI><TT>in</TT>: inch (1 in = 2.54 cm),  <li>
 <LI><TT>pt</TT>: point (1 pt = 1/72 in),  <tt>cm</tt>: centimeter,
 <LI><TT>pc</TT>: pica (1 pc = 12 pt),  <li>
 <LI><TT>px</TT>: pixel.  <tt>mm</tt>: millimeter,
 </UL>  <li>
 <P>  <tt>in</tt>: inch (1 in = 2.54 cm),
   <li>
   <tt>pt</tt>: point (1 pt = 1/72 in),
   <li>
   <tt>pc</tt>: pica (1 pc = 12 pt),
   <li>
   <tt>px</tt>: pixel.
   </ul>
   <p>
 Whatever the chosen unit, relative or absolute, the number is not necessarily  Whatever the chosen unit, relative or absolute, the number is not necessarily
 an integer and may be expressed in fixed point notation (using the American  an integer and may be expressed in fixed point notation (using the American
 convention of a period to express the decimal point).</P>  convention of a period to express the decimal point).</p>
 <P>  <p>
 If the distance appears in a presentation rule for a numeric attribute, the  If the distance appears in a presentation rule for a numeric attribute, the
 number can be replaced by the name of an attribute.  In this case, the value  number can be replaced by the name of an attribute.  In this case, the value
 of the attribute is used.  Obviously, the attribute name cannot be followed by  of the attribute is used.  Obviously, the attribute name cannot be followed by
 a decimal point and a fractional part, but it can be followed a units keyword.  a decimal point and a fractional part, but it can be followed a units keyword.
 However, the choice of units is limited to em, ex, pt and px.</P>  However, the choice of units is limited to em, ex, pt and px.</p>
 <PRE>  <pre>     Distance      = [ Sign ] AbsDist .
      Distance      = [ Sign ] AbsDist .  
      Sign          ='+' / '-' .       Sign          ='+' / '-' .
      AbsDist       = IntegerOrAttr [ '.' DecimalPart ]       AbsDist       = IntegerOrAttr [ '.' DecimalPart ]
                      [ Unit ].                       [ Unit ].
Line 4354  However, the choice of units is limited Line 4461  However, the choice of units is limited
      IntegerPart   = NUMBER .       IntegerPart   = NUMBER .
      DecimalPart   = NUMBER .       DecimalPart   = NUMBER .
      Unit          ='em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /       Unit          ='em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /
                     'pc' / 'px' / '%' .                      'pc' / 'px' / '%' .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 The following rules specify that a box has a height of 10.5 centimeters and a  The following rules specify that a box has a height of 10.5 centimeters and a
 width of 5.3 ems:</P>  width of 5.3 ems:</p>
 <PRE>  <pre>Height : 10.5 cm;
 Height : 10.5 cm;  Width  : 5.3;</pre>
 Width  : 5.3;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4218>Relative positions</A></H3>  
   
 <P>  <h3><a name="sectc4218">Relative positions</a></h3>
   <p>
 The positioning of boxes uses the eight axes and sides, the sides generally  The positioning of boxes uses the eight axes and sides, the sides generally
 being used to define the juxtapositioning (vertical or horizontal) of boxes,  being used to define the juxtapositioning (vertical or horizontal) of boxes,
 the middle axes being used to define centering, and the reference axes being  the middle axes being used to define centering, and the reference axes being
 used for alignment.</P>  used for alignment.</p>
 <P>  <p>
 Two rules allow a box to be placed relative to other boxes.  The <TT>VertPos</TT>  Two rules allow a box to be placed relative to other boxes.  The
 rule positions the box vertically.  The <TT>HorizPos</TT> rule positions the  <tt>VertPos</tt> rule positions the box vertically.  The <tt>HorizPos</tt>
 box horizontally.  It is possible that a box's position could be entirely  rule positions the box horizontally.  It is possible that a box's position
 determined by other boxes positioned relative to it. In this case, the  could be entirely determined by other boxes positioned relative to it. In this
 position is implicit and the word <TT>nil</TT> can be used to specify that no  case, the position is implicit and the word <tt>nil</tt> can be used to
 position rule is needed.  Otherwise, an explicit rule must be given by  specify that no position rule is needed.  Otherwise, an explicit rule must be
 indicating the axis or side which defines the position of the box, followed by  given by indicating the axis or side which defines the position of the box,
 an equals sign and the distance between between this axis or side and a  followed by an equals sign and the distance between between this axis or side
 parallel axis or side of another box, called the reference box.  The box for  and a parallel axis or side of another box, called the reference box.  The box
 which the rule is written will be positioned relative to the reference  for which the rule is written will be positioned relative to the reference
 box.</P>  box.</p>
 <PRE>  <pre>                 'VertPos' ':' VPos
                  'VertPos' ':' VPos  
                  'HorizPos' ':' HPos                   'HorizPos' ':' HPos
      HPos      = 'nil' / VertAxis '=' HorizPosition       HPos      = 'nil' / VertAxis '=' HorizPosition
                  [ 'UserSpecified' ].                   [ 'UserSpecified' ].
      VPos      = 'nil' / HorizAxis '=' VertPosition       VPos      = 'nil' / HorizAxis '=' VertPosition
                  [ 'UserSpecified' ].                   [ 'UserSpecified' ].
      VertAxis  = 'Left' / 'VMiddle' / 'VRef' / 'Right' .       VertAxis  = 'Left' / 'VMiddle' / 'VRef' / 'Right' .
      HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .       HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .</pre>
 </PRE>  <p>
 <P>  
 The reference box is an adjacent box: enclosing, enclosed or adjacent. When a  The reference box is an adjacent box: enclosing, enclosed or adjacent. When a
 rule is associated with a reference type attribute (and only in this case), it  rule is associated with a reference type attribute (and only in this case), it
 can be a box of the element designated by the attribute.  The reference box  can be a box of the element designated by the attribute.  The reference box
 can be either a presentation box previously defined in the <TT>BOXES</TT>  can be either a presentation box previously defined in the <tt>BOXES</tt>
 section of the schema and created by a creation function, or the box  section of the schema and created by a creation function, or the box
 associated with a structured element.</P>  associated with a structured element.</p>
 <P>  <p>
 The structural position of the reference box (relative to the box for which  The structural position of the reference box (relative to the box for which
 the rule is being written) is indicated by a keyword: <TT>Enclosing</TT>,  the rule is being written) is indicated by a keyword: <tt>Enclosing</tt>,
 <TT>Enclosed</TT>, or, for sibling boxes, <TT>Previous</TT> or <TT>Next</TT>.  <tt>Enclosed</tt>, or, for sibling boxes, <tt>Previous</tt> or <tt>Next</tt>.
 The reference attributes, or presentation boxes created by a reference  The reference attributes, or presentation boxes created by a reference
 attribute, the <TT>Referred</TT> keyword may be used to designate the element  attribute, the <tt>Referred</tt> keyword may be used to designate the element
 which the reference points to.  The keyword <TT>Creator</TT> can be used in  which the reference points to.  The keyword <tt>Creator</tt> can be used in
 rules for presentation boxes to designate the box of the element which created  rules for presentation boxes to designate the box of the element which created
 the presentation box.  Finally, the <TT>Root</TT> keyword can be used to  the presentation box.  Finally, the <tt>Root</tt> keyword can be used to
 designate the root of the document.</P>  designate the root of the document.</p>
 <P>  <p>
 When the keyword is ambiguous, it is followed by the name of an element type or  When the keyword is ambiguous, it is followed by the name of an element type
 presentation box which resolves the ambiguity (the <TT>Creator</TT> and  or presentation box which resolves the ambiguity (the <tt>Creator</tt> and
 <TT>Root</TT> keywords are never ambiguous).  If this name is not given, then  <tt>Root</tt> keywords are never ambiguous).  If this name is not given, then
 the first box encountered is used as the reference box. It is also possible to  the first box encountered is used as the reference box. It is also possible to
 use just the name of an element type or presentation box without an initial keyword. In  use just the name of an element type or presentation box without an initial
 this case, a sibling having that name will be used.  If the name is preceded  keyword. In this case, a sibling having that name will be used.  If the name
 by the keyword <TT>NOT</TT>, then the reference box will be the first box  is preceded by the keyword <tt>NOT</tt>, then the reference box will be the
 whose type is not the named one.  first box whose type is not the named one.</p>
 <P>  <p>
 In place of the box or type name, the keywords <TT>AnyElem</TT>,  In place of the box or type name, the keywords <tt>AnyElem</tt>,
 <TT>AnyBox</TT> and <TT>ElemWithAttr</TT> can be used, representing  <tt>AnyBox</tt> and <tt>ElemWithAttr</tt> can be used, representing
 respectively, any structured element box, any presentation box, and the box  respectively, any structured element box, any presentation box, and the box
 corresponding to any structured element having a particular attribute,  corresponding to any structured element having a particular attribute,
 whatever its value; the name of this attribute must follow the keyword  whatever its value; the name of this attribute must follow the keyword
 <TT>ElemWithAttr</TT>.  <tt>ElemWithAttr</tt>.</p>
 <P>  <p>
 A type name may be preceded by a star in order to resolve the ambiguity in the  A type name may be preceded by a star in order to resolve the ambiguity in the
 special case where the structure schema defines an <A  special case where the structure schema defines an <a
 href="#sectd3284">inclusion</A> without expansion (or with partial expansion)  href="#sectd3284">inclusion</a> without expansion (or with partial expansion)
 of the same type as an element of the scheme.  For mark pairs (and only for <A  of the same type as an element of the scheme.  For mark pairs (and only for <a
 href="#sectd3285">mark pairs</A>) the type name <EM>must</EM> be preceded by the  href="#sectd3285">mark pairs</a>) the type name <em>must</em> be preceded by
 <TT>First</TT> or <TT>Second</TT> keyword, which indicates which of the two  the <tt>First</tt> or <tt>Second</tt> keyword, which indicates which of the
 marks of the pair  should be used as the reference box.</P>  two marks of the pair  should be used as the reference box.</p>
 <P>  <p>
 The star character ('<TT>*</TT>') used alone designates the box to which the  The star character ('<tt>*</tt>') used alone designates the box to which the
 rule applies (in this case, it is obviously useless to specify the type of the  rule applies (in this case, it is obviously useless to specify the type of the
 reference box).</P>  reference box).</p>
 <P>  <p>
 The keywords <TT>Enclosing</TT> and <TT>Enclosed</TT> can be used no matter  The keywords <tt>Enclosing</tt> and <tt>Enclosed</tt> can be used no matter
 what constructor defines the type to which the rule applies.  When applied to  what constructor defines the type to which the rule applies.  When applied to
 the element which represents the entire document, <TT>Enclosing</TT>  the element which represents the entire document, <tt>Enclosing</tt>
 designates the window or page in which the document's image is displayed for  designates the window or page in which the document's image is displayed for
 the view to which the rule applies.  A box or type name without a keyword is  the view to which the rule applies.  A box or type name without a keyword is
 used for aggregate elements and designates another element of the same  used for aggregate elements and designates another element of the same
 aggregate.  It can also be used to designate a presentation or page layout  aggregate.  It can also be used to designate a presentation or page layout
 box.  The keywords <TT>Previous</TT> and <TT>Next</TT> are primarily used to  box.  The keywords <tt>Previous</tt> and <tt>Next</tt> are primarily used to
 denote list elements, but can also be used to denote elements of an  denote list elements, but can also be used to denote elements of an
 aggregate.</P>  aggregate.</p>
 <P>  <p>
 In the position rule, the structural position relative to the reference box is  In the position rule, the structural position relative to the reference box is
 followed, after a period, by the name of an axis or side.  The rule specifies  followed, after a period, by the name of an axis or side.  The rule specifies
 its node's position as being some distance from this axis or side of the  its node's position as being some distance from this axis or side of the
Line 4465  sign is required for negative numbers). Line 4567  sign is required for negative numbers).
 orientation of the coordinate axes: for top to bottom for the vertical axis  orientation of the coordinate axes: for top to bottom for the vertical axis
 and from left to right for the horizontal axis.  Thus, a negative distance in  and from left to right for the horizontal axis.  Thus, a negative distance in
 a vertical position indicates that the side or axis specified in the rule is  a vertical position indicates that the side or axis specified in the rule is
 above the side or axis of the reference box.</P>  above the side or axis of the reference box.</p>
 <P>  <p>
 The distance can be followed by the <TT>UserSpecified</TT> keyword (even if  The distance can be followed by the <tt>UserSpecified</tt> keyword (even if
 the distance is nil and does not appear, the <TT>UserSpecified</TT> keyword  the distance is nil and does not appear, the <tt>UserSpecified</tt> keyword
 can be used).  It indicates that when the element to which the rule applies is  can be used).  It indicates that when the element to which the rule applies is
 being created, the editor will ask the user to specify the distance himself,  being created, the editor will ask the user to specify the distance himself,
 using the mouse.  In this case, the distance specified in the rule is a  using the mouse.  In this case, the distance specified in the rule is a
 default distance which is suggested to the user but can be modified.  The  default distance which is suggested to the user but can be modified.  The
 <TT>UserSpecified</TT> keyword can be used either in the vertical position  <tt>UserSpecified</tt> keyword can be used either in the vertical position
 rule, the horizontal position rule, or both.</P>  rule, the horizontal position rule, or both.</p>
 <PRE>  <pre>     VertPosition  = Reference '.' HorizAxis [ Distance ] .
      VertPosition  = Reference '.' HorizAxis [ Distance ] .  
      HorizPosition = Reference '.' VertAxis [ Distance ] .       HorizPosition = Reference '.' VertAxis [ Distance ] .
      Reference     ='Enclosing' [ BoxTypeNot ] /       Reference     ='Enclosing' [ BoxTypeNot ] /
                     'Enclosed' [ BoxTypeNot ] /                      'Enclosed' [ BoxTypeNot ] /
Line 4491  rule, the horizontal position rule, or b Line 4592  rule, the horizontal position rule, or b
                      [ '*' ] [ FirstSec ] ElemID /                       [ '*' ] [ FirstSec ] ElemID /
                     'AnyElem' / 'AnyBox' /                      'AnyElem' / 'AnyBox' /
                     'ElemWithAttr' AttrID .                      'ElemWithAttr' AttrID .
      BoxTypeNot    = [ 'NOT' ] BoxOrType .       BoxTypeNot    = [ 'NOT' ] BoxOrType .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  If a <a name="expos1">report</a> is defined by the following structure
 If a <A name="expos1">report</A> is defined by the following  schema:</p>
 structure schema:</P>  <pre>Report = BEGIN
 <PRE>  
 Report = BEGIN  
          Title  = Text;           Title  = Text;
          Summary = Text;           Summary = Text;
          Keywords = Text;           Keywords = Text;
          ...           ...
          END;           END;</pre>
 </PRE>  <p>
 <P>  then the presentation schema could contain the rules:</p>
 then the presentation schema could contain the rules:</P>  <pre>Report : BEGIN
 <PRE>  
 Report : BEGIN  
          VertPos  : Top = Enclosing . Top;           VertPos  : Top = Enclosing . Top;
          HorizPos : Left = Enclosing . Left;           HorizPos : Left = Enclosing . Left;
          ...           ...
          END;           END;</pre>
 </PRE>  <p>
 <P>  These rules place the <a name="reportexample">report</a> in the upper left
 These rules place the <A name="reportexample">report</A> in the upper left  corner of the enclosing box, which is the window in which the document is
 corner of the enclosing box, which is the window in which the document is being  being edited.</p>
 edited.</P>  <pre>Title :  BEGIN
 <PRE>  
 Title :  BEGIN  
          VertPos  : Top = Enclosing . Top + 1;           VertPos  : Top = Enclosing . Top + 1;
          HorizPos : VMiddle = Enclosing . VMiddle;           HorizPos : VMiddle = Enclosing . VMiddle;
          ...           ...
          END;           END;</pre>
 </PRE>  <p>
 <P>  
 The top of the title is one line (a line has the height of the characters of  The top of the title is one line (a line has the height of the characters of
 the title) from the top of the report, which is also the top of the editing  the title) from the top of the report, which is also the top of the editing
 window.  The title is centered horizontally in the window (see <A  window.  The title is centered horizontally in the window (see <a
 href="#posdim">figure</A>).</P>  href="#posdim">figure</a>).</p>
 <PRE>  <pre>Summary : BEGIN
 Summary : BEGIN  
           VertPos  : Top = Title . Bottom + 1.5;            VertPos  : Top = Title . Bottom + 1.5;
           HorizPos : Left = Enclosing . Left + 2 cm;            HorizPos : Left = Enclosing . Left + 2 cm;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  The top of the summary is place a line and a half below the bottom of the
 The top of the summary is place a line and a half below the bottom of the title  title and is shifted two centimeters from the side of the window.</p>
 and is shifted two centimeters from the side of the window.</P>  </blockquote>
 </BLOCKQUOTE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  Suppose there is a <a name="expos2">Design</a> logical structure which
 Suppose there is a <A name="expos2">Design</A> logical structure which contains  contains graphical elements:</p>
 graphical elements:</P>  <pre>Design = LIST OF (ElemGraph = GRAPHICS);</pre>
 <PRE>  <p>
 Design = LIST OF (ElemGraph = GRAPHICS);  
 </PRE>  
 <P>  
 The following rules allow the user to freely choose the position of each  The following rules allow the user to freely choose the position of each
 element when it is created:</P>  element when it is created:</p>
 <PRE>  <pre>ElemGraph =
 ElemGraph =  
    BEGIN     BEGIN
    VertPos : Top = Enclosing . Top + 1 cm UserSpecified;     VertPos : Top = Enclosing . Top + 1 cm UserSpecified;
    HorizPos: Left = Enclosing . Left UserSpecified;     HorizPos: Left = Enclosing . Left UserSpecified;
    ...     ...
    END;     END;</pre>
 </PRE>  <p>
 <P>  Thus, when a graphical element is created, its default placement is at the
 Thus, when a graphical element is created, its default placement is at the left  left of the window and 1 cm from the top, but the user can move it
 of the window and 1 cm from the top, but the user can move it immediately,  immediately, simply by moving the mouse.</p>
 simply by moving the mouse.</P>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4219>Box extents</A></H3>  
   
 <P>  <h3><a name="sectc4219">Box extents</a></h3>
   <p>
 The extents (height and width) of each box are defined by the two rules  The extents (height and width) of each box are defined by the two rules
 <TT>Height</TT> and <TT>Width</TT>.  There are three types of extents: fixed,  <tt>Height</tt> and <tt>Width</tt>.  There are three types of extents: fixed,
 relative, and elastic.</P>  relative, and elastic.</p>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42191>Fixed extents</A></H4>  
   
 <P>  <h4><a name="sectd42191">Fixed extents</a></h4>
   <p>
 A fixed dimension sets the height or width of the box independently of all  A fixed dimension sets the height or width of the box independently of all
 other boxes.  It is expressed in <A href="#sectc4217">distance units</A>.  The  other boxes.  It is expressed in <a href="#sectc4217">distance units</a>.  The
 extent can be followed by the <TT>UserSpecified</TT> keyword which indicates  extent can be followed by the <tt>UserSpecified</tt> keyword which indicates
 that when the element to which the rule applies is being created, the editor  that when the element to which the rule applies is being created, the editor
 will ask the user to specify the extent himself, using the mouse.  In this  will ask the user to specify the extent himself, using the mouse.  In this
 case, the extent specified in the rule is a default extent which is suggested  case, the extent specified in the rule is a default extent which is suggested
 to the user but can be modified.  The <TT>UserSpecified</TT> keyword can be  to the user but can be modified.  The <tt>UserSpecified</tt> keyword can be
 used either in the <TT>Height</TT> rule, the <TT>Width</TT> rule, or both.</P>  used either in the <tt>Height</tt> rule, the <tt>Width</tt> rule, or both.</p>
 <P>  <p>
 A fixed extent rule can be ended by the <TT>Min</TT> keyword, which signifies  A fixed extent rule can be ended by the <tt>Min</tt> keyword, which signifies
 that the indicated value is a minimum, and that, if the contents of the box  that the indicated value is a minimum, and that, if the contents of the box
 require it, a larger extent is possible.</P>  require it, a larger extent is possible.</p>
 <PRE>  <pre>                'Height' ':' Dimension
                 'Height' ':' Dimension  
                 'Width' ':' Dimension                  'Width' ':' Dimension
      Dimension = AbsDist [ 'UserSpecified' ]  [ 'Min' ] /       Dimension = AbsDist [ 'UserSpecified' ]  [ 'Min' ] /
                  ...                   ...</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  Continuing with the <a href="#expos2">previous example</a>, it is possible to
 Continuing with the <A href="#expos2">previous example</A>, it is possible to  
 allow the user to choose the size of each graphical element as it is  allow the user to choose the size of each graphical element as it is
 created:</P>  created:</p>
 <PRE>  <pre>ElemGraph : BEGIN
 ElemGraph : BEGIN  
             Width :  2 cm UserSpecified;              Width :  2 cm UserSpecified;
             Height : 1 cm UserSpecified;              Height : 1 cm UserSpecified;
             ...              ...
             END;              END;</pre>
 </PRE>  <p>
 <P>  
 Thus, when a graphical element is create, it is drawn by default with a width  Thus, when a graphical element is create, it is drawn by default with a width
 of 2 cm and a height of 1 cm, but the user is free to resize it immediately  of 2 cm and a height of 1 cm, but the user is free to resize it immediately
 with the mouse.</P>  with the mouse.</p>
 <PRE>  <pre>Summary :  BEGIN
 Summary :  BEGIN  
            Height : 5 cm Min;             Height : 5 cm Min;
            ...             ...
            END;             END;
 Keywords : BEGIN  Keywords : BEGIN
            VertPos : Top = Summary . Bottom;             VertPos : Top = Summary . Bottom;
            ...             ...
            END;             END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42192>Relative extents</A></H4>  
   
 <P>  <h4><a name="sectd42192">Relative extents</a></h4>
   <p>
 A relative extent determines the extent as a function of the extent of another  A relative extent determines the extent as a function of the extent of another
 box, just as a relative position places a box in relation to another. The  box, just as a relative position places a box in relation to another. The
 reference box in an extent rule is designated using the same syntax as is used  reference box in an extent rule is designated using the same syntax as is used
 in a relative position rule.  It is followed by a period and a <TT>Height</TT>  in a relative position rule.  It is followed by a period and a <tt>Height</tt>
 or <TT>Width</TT> keyword, depending on the extent being referred to.  Next  or <tt>Width</tt> keyword, depending on the extent being referred to.  Next
 comes the relation between the extent being defined and the extent of the  comes the relation between the extent being defined and the extent of the
 reference box.  This relation can be either a percentage or a difference.</P>  reference box.  This relation can be either a percentage or a difference.</p>
 <P>  <p>
 A percentage is indicated by a star (the multiplication symbol) followed by  A percentage is indicated by a star (the multiplication symbol) followed by
 the numeric percentage value (which may be greater than or less than 100) and  the numeric percentage value (which may be greater than or less than 100) and
 the percent (`%') character.  A difference is simply indicated by a signed  the percent (`%') character.  A difference is simply indicated by a signed
 difference.</P>  difference.</p>
 <P>  <p>
 If the rule appears in the presentation rules of a numeric attribute, the  If the rule appears in the presentation rules of a numeric attribute, the
 percentage value can be replaced by the name of the attribute. This attribute  percentage value can be replaced by the name of the attribute. This attribute
 is then used as a percentage.  The attribute can also be used as part of a <A  is then used as a percentage.  The attribute can also be used as part of a <a
 href="#distance">difference</A>.</P>  href="#distance">difference</a>.</p>
 <P>  <p>
 Just as with a fixed extent, a relative extent rule can end with the  Just as with a fixed extent, a relative extent rule can end with the
 <TT>Min</TT> keyword, which signifies that the extent is a minimum and that,  <tt>Min</tt> keyword, which signifies that the extent is a minimum and that,
 if the contents of the box require it, a larger extent is possible.</P>  if the contents of the box require it, a larger extent is possible.</p>
 <P>  <p>
 A special case of relative extent rules is:</P>  A special case of relative extent rules is:</p>
 <PRE>  <pre>Height : Enclosed . Height;</pre>
 Height : Enclosed . Height;  <p>
 </PRE>  or</p>
 <P>  <pre>Width  : Enclosed . Width;</pre>
 or</P>  <p>
 <PRE>  
 Width  : Enclosed . Width;  
 </PRE>  
 <P>  
 which specifies that the box has a height (or width) such that it encloses all  which specifies that the box has a height (or width) such that it encloses all
 the boxes which it contains, excluding boxes having a rule <TT>VertOverflow:  the boxes which it contains, excluding boxes having a rule <tt>VertOverflow:
 Yes;</TT> or <TT>HorizOverflow: Yes;</TT>.</P>  Yes;</tt> or <tt>HorizOverflow: Yes;</tt>.</p>
 <P>  <p>
 <STRONG>Note:</STRONG> character strings (type <TT>TEXT_UNIT</TT>) generally  <strong>Note:</strong> character strings (type <tt>TEXT_UNIT</tt>) generally
 must use the sum of the widths of the characters which compose them as their  must use the sum of the widths of the characters which compose them as their
 width, which is expressed by the rule:</P>  width, which is expressed by the rule:</p>
 <PRE>  <pre>TEXT_UNIT :
 TEXT_UNIT :       Width : Enclosed . Width;</pre>
      Width : Enclosed . Width;  <p>
 </PRE>  If this rule is not the default <tt>Width</tt> rule, it must be given
 <P>  explicitly in the <tt>RULES</tt> section which defines the presentation rules
 If this rule is not the default <TT>Width</TT> rule, it must be given  of the logical elements.</p>
 explicitly in the <TT>RULES</TT> section which defines the presentation rules  <pre>                  'Height' ':' Extent
 of the logical elements.</P>  
 <PRE>  
                   'Height' ':' Extent  
                   'Width' ':' Extent                    'Width' ':' Extent
      Extent      = Reference '.' HeightWidth [ Relation ]       Extent      = Reference '.' HeightWidth [ Relation ]
                    [ 'Min' ] / ...                     [ 'Min' ] / ...
      HeightWidth ='Height' / 'Width' .       HeightWidth ='Height' / 'Width' .
      Relation    ='*' ExtentAttr '%' / Distance .       Relation    ='*' ExtentAttr '%' / Distance .
      ExtentAttr  = ExtentVal / AttrID .       ExtentAttr  = ExtentVal / AttrID .
      ExtentVal   = NUMBER .       ExtentVal   = NUMBER .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  Completing the <a href="#expos1">above example</a>, it is possible to specify
 Completing the <A href="#expos1">above example</A>, it is possible to specify  that the report takes its width from the editing window and its height from
 that the report takes its width from the editing window and its height from the  the size of its contents (this can obviously be greater than that of the
 size of its contents (this can obviously be greater than that of the  window):</p>
 window):</P>  <pre>Report :  BEGIN
 <PRE>  
 Report :  BEGIN  
           Width : Enclosing . Width;            Width : Enclosing . Width;
           Height : Enclosed . Height;            Height : Enclosed . Height;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  
 Then, the following rules make the title occupy 60% of the width of the report  Then, the following rules make the title occupy 60% of the width of the report
 (which is that of the window) and is broken into centered lines of this width  (which is that of the window) and is broken into centered lines of this width
 (see the <A href="#sectc4222"><TT>Line</TT> rule</A>).</P>  (see the <a href="#sectc4222"><tt>Line</tt> rule</a>).</p>
 <PRE>  <pre>Title :   BEGIN
 Title :   BEGIN  
           Width : Enclosing . Width * 60%;            Width : Enclosing . Width * 60%;
           Height : Enclosed . Height;            Height : Enclosed . Height;
           Line;            Line;
           Adjust : VMiddle;            Adjust : VMiddle;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  The summary occupy the entire width of the window, with the exception of a 2
 The summary occupy the entire width of the window, with the exception of a 2 cm  cm margin reserved by the horizontal position rule:</p>
 margin reserved by the horizontal position rule:</P>  <pre>Summary : BEGIN
 <PRE>  
 Summary : BEGIN  
           Width : Enclosing . Width - 2 cm;            Width : Enclosing . Width - 2 cm;
           Height : Enclosed . Height;            Height : Enclosed . Height;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  This set of rules, plus the <a href="#reportexample">position rules given
 This set of rules, plus the <A href="#reportexample">position rules given  above</a>, produce the layout of boxes shown in the following<a
 above</A>, produce the layout of boxes shown in the following<A  href="#posdim">figure</a>.</p>
 href="#posdim">figure</A>.</P>  
   <div class="figure">
 <DIV class="figure">  <hr>
 <HR>  <pre>-------------------------------------------------------------
 <PRE>  
 -------------------------------------------------------------  
 | Window and Report           ^                             |  | Window and Report           ^                             |
 |                             | 1 line                      |  |                             | 1 line                      |
 |                             v                             |  |                             v                             |
Line 4757  href="#posdim">figure</A>.</P> Line 4824  href="#posdim">figure</A>.</P>
 |        ---------------------------------------------------|  |        ---------------------------------------------------|
 |  2 cm  |                                                  |  |  2 cm  |                                                  |
 |&lt;------>|                    Summary                       |  |&lt;------>|                    Summary                       |
 :        :                                                  :  :        :                                                  :</pre>
 </PRE>  <p align=center>
 <P align=center>  <em><a name="posdim">Box position and extent</a><em></em></em></p>
 <EM><A name="posdim">Box position and extent</A><EM></EM></EM></P>  <hr>
 <HR>  </div>
 </DIV>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42193>Elastic extents</A></H4>  
   
 <P>  <h4><a name="sectd42193">Elastic extents</a></h4>
   <p>
 The last type of extent is the elastic extent.  Either one or both extents can  The last type of extent is the elastic extent.  Either one or both extents can
 be elastic.  A box has an elastic extent when two opposite sides are linked by  be elastic.  A box has an elastic extent when two opposite sides are linked by
 distance constraints to two sides or axes of other boxes.</P>  distance constraints to two sides or axes of other boxes.</p>
 <P>  <p>
 One of the sides of the elastic box is linked by a position rule  One of the sides of the elastic box is linked by a position rule
 (<TT>VertPos</TT> or <TT>HorizPos</TT>) to a neighboring box.  The other side  (<tt>VertPos</tt> or <tt>HorizPos</tt>) to a neighboring box.  The other side
 is link to another box by a <TT>Height</TT> or <TT>Width</TT> rule, which  is link to another box by a <tt>Height</tt> or <tt>Width</tt> rule, which
 takes the same form as the position rule.  For the elastic box itself, the  takes the same form as the position rule.  For the elastic box itself, the
 notions of sides (left or right, top or bottom) are fuzzy, since the movement  notions of sides (left or right, top or bottom) are fuzzy, since the movement
 of either one of the two reference boxes can, for example, make the left side  of either one of the two reference boxes can, for example, make the left side
 of the elastic box move to the right of its right side.  This is not  of the elastic box move to the right of its right side.  This is not
 important.  The only requirement is that the two sides of the elastic box used  important.  The only requirement is that the two sides of the elastic box used
 in the position and extent rule are opposite sides of the box.</P>  in the position and extent rule are opposite sides of the box.</p>
 <PRE>  <pre>             'Height' ':' Extent
              'Height' ':' Extent  
              'Width' ':' Extent               'Width' ':' Extent
      Extent = HPos / VPos / ...       Extent = HPos / VPos / ...</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose we want to draw an elastic arrow or line between the middle of the  Suppose we want to draw an elastic arrow or line between the middle of the
 bottom side of box A and the upper left corner of box B.  To do this, we would  bottom side of box A and the upper left corner of box B.  To do this, we would
 define a graphics box whose upper left corner coincides with the middle of the  define a graphics box whose upper left corner coincides with the middle of the
 bottom side of A (a position rule) and whose lower right corner coincides with  bottom side of A (a position rule) and whose lower right corner coincides with
 with the upper left corner of B (dimension rules):</P>  with the upper left corner of B (dimension rules):</p>
 <PRE>  <pre>LinkedBox :
 LinkedBox :  
    BEGIN     BEGIN
    VertPos  : Top = A .Bottom;     VertPos  : Top = A .Bottom;
    HorizPos : Left = A . VMiddle;     HorizPos : Left = A . VMiddle;
    Height   : Bottom = B . Top;     Height   : Bottom = B . Top;
    Width    : Right = B . Left;     Width    : Right = B . Left;
    END;     END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 The element SectionTitle creates a presentation box called SectionNum which  The element SectionTitle creates a presentation box called SectionNum which
 contains the number of the section.  Suppose we want to align the SectionNum  contains the number of the section.  Suppose we want to align the SectionNum
 and SectionTitle horizontally, have the SectionNum take its width from its  and SectionTitle horizontally, have the SectionNum take its width from its
 contents (the section number), have the SectionTitle box begin 0.5 cm to the  contents (the section number), have the SectionTitle box begin 0.5 cm to the
 right of the SectionNum box and end at the right edge of its enclosing box.  right of the SectionNum box and end at the right edge of its enclosing box.
 This would make the SectionTitle box elastic, since its width is defined by the  This would make the SectionTitle box elastic, since its width is defined by
 position of its left and right sides.  The following rules produce this  the position of its left and right sides.  The following rules produce this
 effect:</P>  effect:</p>
 <PRE>  <pre>SectionNum :
 SectionNum :  
    BEGIN     BEGIN
    HorizPos : Left = Enclosing . Left;     HorizPos : Left = Enclosing . Left;
    Width : Enclosed . Width;     Width : Enclosed . Width;
Line 4832  SectionTitle : Line 4893  SectionTitle :
    HorizPos : Left = SectionNum . Right + 0.5 cm;     HorizPos : Left = SectionNum . Right + 0.5 cm;
    Width : Right = Enclosing . Right;     Width : Right = Enclosing . Right;
    ...     ...
    END;     END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name="sectc4220">Overflow</A></H3>  
   
 <P>  <h3><a name="sectc4220">Overflow</a></h3>
   <p>
 A boxes corresponding to a structural element normally contain all boxes  A boxes corresponding to a structural element normally contain all boxes
 corresponding to the elements of its subtree.  However, in some cases, it  corresponding to the elements of its subtree.  However, in some cases, it
 could be necessary to allow a box to jut out from its parent box. Two  could be necessary to allow a box to jut out from its parent box. Two
 presentation rules indicate that such an overflow is allowed, one for  presentation rules indicate that such an overflow is allowed, one for
 horizontal overflow, one for vertical overflow.</P>  horizontal overflow, one for vertical overflow.</p>
 <P>  <p>
 Each of these rules is expressed by a keyword followed by a colon and the  Each of these rules is expressed by a keyword followed by a colon and the
 keyword <TT>Yes</TT> or <TT>No</TT>.</P>  keyword <tt>Yes</tt> or <tt>No</tt>.</p>
 <PRE>  <pre>               'VertOverflow' ':' Boolean /
                'VertOverflow' ':' Boolean /  
                'HorizOverflow' ':' Boolean .                 'HorizOverflow' ':' Boolean .
      Boolean = 'Yes' / 'No' .       Boolean = 'Yes' / 'No' .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4221>Inheritance</A></H3>  
   
 <P>  <h3><a name="sectc4221">Inheritance</a></h3>
   <p>
 A presentation parameter can be defined by reference to the same parameter of  A presentation parameter can be defined by reference to the same parameter of
 another box in the tree of boxes.  These structural links are expressed by  another box in the tree of boxes.  These structural links are expressed by
 kinship.  The reference box can be that of the element immediately above in  kinship.  The reference box can be that of the element immediately above in
 the structure (<TT>Enclosing</TT>), two levels above (<TT>GrandFather</TT>),  the structure (<tt>Enclosing</tt>), two levels above (<tt>GrandFather</tt>),
 immediately below (<TT>Enclosed</TT>) or immediately before  immediately below (<tt>Enclosed</tt>) or immediately before
 (<TT>Previous</TT>).  In the case of a presentation box, and only in that  (<tt>Previous</tt>).  In the case of a presentation box, and only in that
 case, the reference box may be the element which created the presentation box  case, the reference box may be the element which created the presentation box
 (<TT>Creator</TT>).</P>  (<tt>Creator</tt>).</p>
 <P>  <p>
 Kinship is expressed in terms of the logical structure of the document and not  Kinship is expressed in terms of the logical structure of the document and not
 in terms of the tree of boxes.  The presentation box cannot transmit any of  in terms of the tree of boxes.  The presentation box cannot transmit any of
 their parameters by inheritance; only structured element boxes can do so. As  their parameters by inheritance; only structured element boxes can do so. As
 an example, consider an element B which follows an element A in the logical  an example, consider an element B which follows an element A in the logical
 structure.  The element B creates a presentation box P in front of itself,  structure.  The element B creates a presentation box P in front of itself,
 using the <TT>CreateBefore</TT> rule (see the <A href="#sectc4232">creation  using the <tt>CreateBefore</tt> rule (see the <a href="#sectc4232">creation
 rules</A>).  If element B's box inherits its character style using the  rules</a>).  If element B's box inherits its character style using the
 <TT>Previous</TT> kinship operation, it gets its character style from A's box,  <tt>Previous</tt> kinship operation, it gets its character style from A's box,
 not from P's box.  Inheritance works differently for positions and extents,  not from P's box.  Inheritance works differently for positions and extents,
 which can refer to presentation boxes.</P>  which can refer to presentation boxes.</p>
 <P>  <p>
 The inherited parameter value can be the same as that of the reference box.  The inherited parameter value can be the same as that of the reference box.
 This is indicated by an equals sign.  However, for numeric parameters, a  This is indicated by an equals sign.  However, for numeric parameters, a
 different value can be obtained by adding or subtracting a number from the  different value can be obtained by adding or subtracting a number from the
 reference box's parameter value.  Addition is indicated by a plus sign before  reference box's parameter value.  Addition is indicated by a plus sign before
 the number, while subtraction is specified with a minus sign.  The value of a  the number, while subtraction is specified with a minus sign.  The value of a
 parameter can also be given a maximum (if the sign is a plus) or minimum (if  parameter can also be given a maximum (if the sign is a plus) or minimum (if
 the sign is a minus).</P>  the sign is a minus).</p>
 <P>  <p>
 If the rule is being applied to a numeric attribute, the number to add or  If the rule is being applied to a numeric attribute, the number to add or
 subtract can be replaced by the attribute name.  The value of a maximum or  subtract can be replaced by the attribute name.  The value of a maximum or
 minimum may also be replaced by an attribute name.  In these cases, the value  minimum may also be replaced by an attribute name.  In these cases, the value
 of the attribute is used.</P>  of the attribute is used.</p>
 <PRE>  <pre>  Inheritance    = Kinship  InheritedValue .
   Inheritance    = Kinship  InheritedValue .  
   Kinship        ='Enclosing' / 'GrandFather' / 'Enclosed' /    Kinship        ='Enclosing' / 'GrandFather' / 'Enclosed' /
                   'Previous' / 'Creator' .                    'Previous' / 'Creator' .
   InheritedValue ='+' PosIntAttr [ 'Max' maximumA ] /    InheritedValue ='+' PosIntAttr [ 'Max' maximumA ] /
Line 4907  of the attribute is used.</P> Line 4964  of the attribute is used.</P>
   maximumA       = maximum / AttrID .    maximumA       = maximum / AttrID .
   maximum        = NUMBER .    maximum        = NUMBER .
   minimumA       = minimum / AttrID .    minimumA       = minimum / AttrID .
   minimum        = NUMBER .    minimum        = NUMBER .</pre>
 </PRE>  <p>
 <P>  
 The parameters which can be obtained by inheritance are justification,  The parameters which can be obtained by inheritance are justification,
 hyphenation, interline spacing, character font (font family), font style, font  hyphenation, interline spacing, character font (font family), font style, font
 size, visibility, indentation, underlining, alignment of text, stacking order  size, visibility, indentation, underlining, alignment of text, stacking order
 of objects, the style and thickness of lines, fill pattern and the colors of  of objects, the style and thickness of lines, fill pattern and the colors of
 lines and characters.</P>  lines and characters.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4222>Line breaking</A></H3>  
   
 <P>  <h3><a name="sectc4222">Line breaking</a></h3>
 The <TT>Line</TT> rule specifies that the contents of the box should be broken  <p>
   The <tt>Line</tt> rule specifies that the contents of the box should be broken
 into lines: the boxes included in the box to which this rule is attached are  into lines: the boxes included in the box to which this rule is attached are
 displayed one after the other, from left to right, with their horizontal  displayed one after the other, from left to right, with their horizontal
 reference axes aligned so that they form a series of lines.  The length of  reference axes aligned so that they form a series of lines.  The length of
 these lines is equal to the width of the box to which the <TT>Line</TT> rule  these lines is equal to the width of the box to which the <tt>Line</tt> rule
 is attached.</P>  is attached.</p>
 <P>  <p>
 When an included box overflows the current line, it is either carried forward  When an included box overflows the current line, it is either carried forward
 to the next line, cur, or left the way it is.  The <A  to the next line, cur, or left the way it is.  The <a
 href="#sectc4223"><TT>LineBreak</TT> rule</A> is used to allow or prevent the  href="#sectc4223"><tt>LineBreak</tt> rule</a> is used to allow or prevent the
 breaking of included boxes.  If the included box is not breakable but is  breaking of included boxes.  If the included box is not breakable but is
 longer than the space remaining on the line, it is left as is.  When a  longer than the space remaining on the line, it is left as is.  When a
 character string box is breakable, the line is broken between words or, if  character string box is breakable, the line is broken between words or, if
 necessary, by <A href="#sectd42225">hyphenating a word</A>.  When a  necessary, by <a href="#sectd42225">hyphenating a word</a>.  When a compound
 compound box is breakable, the box is transparent in regard to line breaking.  box is breakable, the box is transparent in regard to line breaking. The boxes
 The boxes included in the compound box are treated just like included boxes  included in the compound box are treated just like included boxes which have
 which have the <TT>LineBreak</TT> rule.  Thus, it is possible to traverse a  the <tt>LineBreak</tt> rule.  Thus, it is possible to traverse a complete
 complete subtree of boxes to line break the text leaves of a complex  subtree of boxes to line break the text leaves of a complex structure.</p>
 structure.</P>  <p>
 <P>  
 The relative position rules of the included boxes are ignored, since the boxes  The relative position rules of the included boxes are ignored, since the boxes
 will be placed according to the line breaking rules.</P>  will be placed according to the line breaking rules.</p>
 <P>  <p>
 The <TT>Line</TT> rule does not have a parameter.  The characteristics of the  The <tt>Line</tt> rule does not have a parameter.  The characteristics of the
 lines that will be constructed are determined by the <TT>LineSpacing</TT>,  lines that will be constructed are determined by the <tt>LineSpacing</tt>,
 <TT>Indent</TT>, <TT>Adjust</TT>, <TT>Justify</TT>, and <TT>Hyphenate</TT>  <tt>Indent</tt>, <tt>Adjust</tt>, <tt>Justify</tt>, and <tt>Hyphenate</tt>
 rules.  Moreover, the <A href="#insectd42226"><TT>Inline</TT> rule</A> permits  rules.  Moreover, the <a href="#insectd42226"><tt>Inline</tt> rule</a> permits
 the exclusion of certain elements from the line breaking process.</P>  the exclusion of certain elements from the line breaking process.</p>
 <P>  <p>
 When the <TT>Line</TT> rule appears in the rules sequence of a non-primary  When the <tt>Line</tt> rule appears in the rules sequence of a non-primary
 view, it applies only to that view, but when the <TT>Line</TT> rule appears in  view, it applies only to that view, but when the <tt>Line</tt> rule appears in
 the rules sequence of the primary view, it also applies to the other views by  the rules sequence of the primary view, it also applies to the other views by
 default, except for those views which explicitly invoke the <TT>NoLine</TT>  default, except for those views which explicitly invoke the <tt>NoLine</tt>
 rule.  Thus, the <TT>NoLine</TT> rule can be used in a non-primary view to  rule.  Thus, the <tt>NoLine</tt> rule can be used in a non-primary view to
 override the primary view's <TT>Line</TT> rule.  The <TT>NoLine</TT> rule must  override the primary view's <tt>Line</tt> rule.  The <tt>NoLine</tt> rule must
 not be used with the primary view because the absence of the <TT>Line</TT>  not be used with the primary view because the absence of the <tt>Line</tt>
 rule has the same effect. Like the <TT>Line</TT> rule, the <TT>NoLine</TT>  rule has the same effect. Like the <tt>Line</tt> rule, the <tt>NoLine</tt>
 rule does not take any parameters.</P>  rule does not take any parameters.</p>
 <PRE>  <pre>              'Line'
               'Line'                'NoLine'</pre>
               'NoLine'  
 </PRE>  <div class="subsubsection">
   
 <DIV class="subsubsection">  <h4><a name="sectd42221">Line spacing</a></h4>
 <H4><A name=sectd42221>Line spacing</A></H4>  <p>
   The <tt>LineSpacing</tt> rule defines the line spacing to be used in the line
 <P>  
 The <TT>LineSpacing</TT> rule defines the line spacing to be used in the line  
 breaking process.  The line spacing is the distance between the baselines  breaking process.  The line spacing is the distance between the baselines
 (horizontal reference axis) of the successive lines produced by the  (horizontal reference axis) of the successive lines produced by the
 <TT>Line</TT> rule.  The value of the line spacing can be specified as a  <tt>Line</tt> rule.  The value of the line spacing can be specified as a
 constant or by inheritance.  It is expressed in any of the available <A  constant or by inheritance.  It is expressed in any of the available <a
 href="#sectc4217">distance units</A>.</P>  href="#sectc4217">distance units</a>.</p>
 <P>  <p>
 Inheritance allows the value to be obtained from a relative in the structure  Inheritance allows the value to be obtained from a relative in the structure
 tree, either without change (an equals sign appears after the inheritance  tree, either without change (an equals sign appears after the inheritance
 keyword), with a positive difference (a plus sign), or a negative difference  keyword), with a positive difference (a plus sign), or a negative difference
 (a minus sign).  When the rule uses a difference, the value of the difference  (a minus sign).  When the rule uses a difference, the value of the difference
 follows the sign and is expressed as a <A href="#sectc4217">distance</A>.</P>  follows the sign and is expressed as a <a href="#sectc4217">distance</a>.</p>
 <PRE>  <pre>                     'LineSpacing' ':' DistOrInherit
                      'LineSpacing' ':' DistOrInherit  
      DistOrInherit =  Kinship InheritedDist / Distance .       DistOrInherit =  Kinship InheritedDist / Distance .
      InheritedDist = '=' / '+' AbsDist / '-' AbsDist .       InheritedDist = '=' / '+' AbsDist / '-' AbsDist .</pre>
 </PRE>  <p>
 <P>  
 When the line spacing value (or its difference from another element) is  When the line spacing value (or its difference from another element) is
 expressed in relative units, it changes with the size of the characters. Thus,  expressed in relative units, it changes with the size of the characters. Thus,
 when a larger font is chosen for a part of the document, the line spacing of  when a larger font is chosen for a part of the document, the line spacing of
Line 4993  that part expands proportionally.  In co Line 5044  that part expands proportionally.  In co
 expressed in absolute units (centimeters, inches, typographer's points), it is  expressed in absolute units (centimeters, inches, typographer's points), it is
 independent of the characters, which permits the maintenance of a consistent  independent of the characters, which permits the maintenance of a consistent
 line spacing, whatever the character font.  Either approach can be taken,  line spacing, whatever the character font.  Either approach can be taken,
 depending on the desired effect.</P>  depending on the desired effect.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42222>First line indentation</A></H4>  
   
 <P>  <h4><a name="sectd42222">First line indentation</a></h4>
 The <TT>Indent</TT> rule is used to specify the indentation of the first line  <p>
 of the elements broken into lines by the <TT>Line</TT> function. The  The <tt>Indent</tt> rule is used to specify the indentation of the first line
   of the elements broken into lines by the <tt>Line</tt> function. The
 indentation determines how far the first line of the element is shifted with  indentation determines how far the first line of the element is shifted with
 respect to the other lines of the same element.  It can be specified as a  respect to the other lines of the same element.  It can be specified as a
 constant or by inheritance.  The constant value is a positive integer (shifted  constant or by inheritance.  The constant value is a positive integer (shifted
 to the right; the sign is optional), a negative integer (shifted to the left)  to the right; the sign is optional), a negative integer (shifted to the left)
 or zero (no shift).  All available <A href="#sectc4217">units</A> can be  or zero (no shift).  All available <a href="#sectc4217">units</a> can be
 used.</P>  used.</p>
 <P>  <p>
 Indentation can be defined for any box, regardless of whether the box is line  Indentation can be defined for any box, regardless of whether the box is line
 broken, and transmitted by inheritance to elements that are line broken. The  broken, and transmitted by inheritance to elements that are line broken. The
 size of the indentation is specified in the same manner as the <A  size of the indentation is specified in the same manner as the <a
 href="#sectd42221">line spacing</A>.</P>  href="#sectd42221">line spacing</a>.</p>
 <PRE>  <pre>              'Indent' ':' DistOrInherit</pre>
               'Indent' ':' DistOrInherit  </div>
 </PRE>  
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42223>Alignment</A></H4>  
   
 <P>  <h4><a name="sectd42223">Alignment</a></h4>
   <p>
 The alignment style of the lines constructed during line breaking is defined  The alignment style of the lines constructed during line breaking is defined
 by the <TT>Adjust</TT> rule.  The alignment value can be a constant or  by the <tt>Adjust</tt> rule.  The alignment value can be a constant or
 inherited.  A constant value is specified by a keyword:</P>  inherited.  A constant value is specified by a keyword:</p>
 <UL>  <ul>
 <LI><TT>Left</TT>: at the left edge,  <li>
 <LI><TT>Right</TT>: at the right edge,  <tt>Left</tt>: at the left edge,
 <LI><TT>VMiddle</TT>: centered  <li>
 <LI><TT>LeftWithDots</TT>: at the left edge with a dotted line filling out the  <tt>Right</tt>: at the right edge,
   <li>
   <tt>VMiddle</tt>: centered
   <li>
   <tt>LeftWithDots</tt>: at the left edge with a dotted line filling out the
 last line up to the right edge of the line breaking box.  last line up to the right edge of the line breaking box.
 </UL>  </ul>
 <P>  <p>
 An inherited value can only be the same as that of the reference box and is  An inherited value can only be the same as that of the reference box and is
 specified by a kinship keyword followed by an equals sign.</P>  specified by a kinship keyword followed by an equals sign.</p>
 <PRE>  <pre>                      'Adjust' ':' AlignOrInherit
                       'Adjust' ':' AlignOrInherit  
      AlignOrInherit = Kinship '=' / Alignment .       AlignOrInherit = Kinship '=' / Alignment .
      Alignment      = 'Left' / 'Right' / 'VMiddle' /       Alignment      = 'Left' / 'Right' / 'VMiddle' /
                       'LeftWithDots' .                        'LeftWithDots' .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42224>Justification</A></H4>  
   
 <P>  <h4><a name="sectd42224">Justification</a></h4>
 The <TT>Justify</TT> rule indicates whether the lines contained in the box and  <p>
 produced by a <TT>Line</TT> rule should be extended horizontally to occupy the  The <tt>Justify</tt> rule indicates whether the lines contained in the box and
   produced by a <tt>Line</tt> rule should be extended horizontally to occupy the
 entire width of their enclosing box.  The first and last lines are treated  entire width of their enclosing box.  The first and last lines are treated
 specially: the position of the beginning of the first line is fixed by the  specially: the position of the beginning of the first line is fixed by the
 <TT>Indent</TT> rule and last line is not extended.  The justification  <tt>Indent</tt> rule and last line is not extended.  The justification
 parameter defined by this rule takes a boolean value, which can be a constant  parameter defined by this rule takes a boolean value, which can be a constant
 or inherited.  A constant boolean value is expressed by either the  or inherited.  A constant boolean value is expressed by either the
 <TT>Yes</TT> or the <TT>No</TT> keyword.  An inherited value can only be the  <tt>Yes</tt> or the <tt>No</tt> keyword.  An inherited value can only be the
 same as that of the reference box and is specified by a kinship keyword  same as that of the reference box and is specified by a kinship keyword
 followed by an equals sign.</P>  followed by an equals sign.</p>
 <PRE>  <pre>                  'Justify' ':' BoolInherit
                   'Justify' ':' BoolInherit  
      BoolInherit = Boolean / Kinship '=' .       BoolInherit = Boolean / Kinship '=' .
      Boolean     ='Yes' / 'No' .       Boolean     ='Yes' / 'No' .</pre>
 </PRE>  <p>
 <P>  
 When the lines are justified, the alignment parameter specified in the  When the lines are justified, the alignment parameter specified in the
 <TT>Adjust</TT> rule has no influence, other than on the last line produced.  <tt>Adjust</tt> rule has no influence, other than on the last line produced.
 This occurs because, when the other are extended to the limits of the box, the  This occurs because, when the other are extended to the limits of the box, the
 alignment style is no longer perceptible.</P>  alignment style is no longer perceptible.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 An important use of inheritance is to vary the characteristics of lines for an  An important use of inheritance is to vary the characteristics of lines for an
 element type (for example, Paragraph) according to the enclosing environment  element type (for example, Paragraph) according to the enclosing environment
 (for example, Summary or Section), and thus obtain different line breaking  (for example, Summary or Section), and thus obtain different line breaking
 styles for the same elements when they appear in different environments.  The  styles for the same elements when they appear in different environments.  The
 following rules specify that paragraphs inherit their alignment, justification,  following rules specify that paragraphs inherit their alignment,
 and line spacing:</P>  justification, and line spacing:</p>
 <PRE>  <pre>Paragraph :
 Paragraph :  
    BEGIN     BEGIN
    Justify : Enclosing = ;     Justify : Enclosing = ;
    LineSpacing : Enclosing = ;     LineSpacing : Enclosing = ;
    Adjust : Enclosing =;     Adjust : Enclosing =;
    Line;     Line;
    END;     END;</pre>
 </PRE>  <p>
 <P>  
 If the alignment, justification, and line spacing of the Section and Summary  If the alignment, justification, and line spacing of the Section and Summary
 elements is fixed:</P>  elements is fixed:</p>
 <PRE>  <pre>Section :
 Section :  
    BEGIN     BEGIN
    Adjust : Left;     Adjust : Left;
    Justify : Yes;     Justify : Yes;
Line 5101  Summary : Line 5147  Summary :
    Adjust : VMiddle;     Adjust : VMiddle;
    Justify : No;     Justify : No;
    LineSpacing : 1.3;     LineSpacing : 1.3;
    END;     END;</pre>
 </PRE>  <p>
 <P>  
 then the paragraphs appearing in sections are justified with a simple line  then the paragraphs appearing in sections are justified with a simple line
 spacing while those appearing in summaries are centered and not justified and  spacing while those appearing in summaries are centered and not justified and
 have a larger line spacing.  These are nevertheless the very same type of  have a larger line spacing.  These are nevertheless the very same type of
 paragraph defined in the logical structure schema.</P>  paragraph defined in the logical structure schema.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42225>Hyphenation</A></H4>  
   <h4><a name="sectd42225">Hyphenation</a></h4>
 <P>  <p>
 The <TT>Hyphenate</TT> rule indicates whether or not words should be broken by  The <tt>Hyphenate</tt> rule indicates whether or not words should be broken by
 hyphenation at the end of lines.  It affects the lines produced by the  hyphenation at the end of lines.  It affects the lines produced by the
 <TT>Line</TT> rule and contained in the box carrying the <TT>Hyphenate</TT>  <tt>Line</tt> rule and contained in the box carrying the <tt>Hyphenate</tt>
 rule.</P>  rule.</p>
 <P>  <p>
 The hyphenation parameter takes a boolean value, which can be either constant  The hyphenation parameter takes a boolean value, which can be either constant
 or inherited.  A constant boolean value is expressed by either the  or inherited.  A constant boolean value is expressed by either the
 <TT>Yes</TT> or the <TT>No</TT> keyword.  An inherited value can only be the  <tt>Yes</tt> or the <tt>No</tt> keyword.  An inherited value can only be the
 same as that of the reference box and is specified by a kinship keyword  same as that of the reference box and is specified by a kinship keyword
 followed by an equals sign.</P>  followed by an equals sign.</p>
 <PRE>  <pre>                   'Hyphenate' ':' BoolInherit
                    'Hyphenate' ':' BoolInherit  
      BoolInherit = Boolean / Kinship '=' .       BoolInherit = Boolean / Kinship '=' .
      Boolean     = 'Yes' / 'No' .       Boolean     = 'Yes' / 'No' .</pre>
 </PRE>  </div>
 </DIV>  
   <div class="subsubsection">
 <DIV class="subsubsection">  
 <H4><A name=sectd42226>Avoiding line breaking</A></H4>  <h4><a name="sectd42226">Avoiding line breaking</a></h4>
   <p>
 <P>  The <tt>InLine</tt> rule is used to specify that a box that would otherwise
 The <TT>InLine</TT> rule is used to specify that a box that would otherwise  participate in line breaking asked for by the <tt>Line</tt> rule of an
 participate in line breaking asked for by the <TT>Line</TT> rule of an  
 enclosing box, instead avoids the line breaking process and positions itself  enclosing box, instead avoids the line breaking process and positions itself
 according to the <TT>HorizPos</TT> and <TT>VertPos</TT> rules that apply to  according to the <tt>HorizPos</tt> and <tt>VertPos</tt> rules that apply to
 it.  When the <TT>InLine</TT> rule applies to a box which would not be line  it.  When the <tt>InLine</tt> rule applies to a box which would not be line
 broken, it has no effect.</P>  broken, it has no effect.</p>
 <P>  <p>
 The rule is expressed by the <TT>InLine</TT> keyword followed by a colon and  The rule is expressed by the <tt>InLine</tt> keyword followed by a colon and
 the keyword <TT>Yes</TT>, if the box should participate in line breaking, or  the keyword <tt>Yes</tt>, if the box should participate in line breaking, or
 the keyword <TT>No</TT>, if it should not.  This is the only form possible:  the keyword <tt>No</tt>, if it should not.  This is the only form possible:
 this rule cannot be inherited.  Moreover, it can only appear in the rules of  this rule cannot be inherited.  Moreover, it can only appear in the rules of
 the primary view and applies to all views defined in the presentation  the primary view and applies to all views defined in the presentation
 schema.</P>  schema.</p>
 <PRE>  <pre>               'InLine' ':' Boolean .
                'InLine' ':' Boolean .       Boolean = 'Yes' / 'No' .</pre>
      Boolean = 'Yes' / 'No' .  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  Suppose the structure schema defines a logical attribute called <tt>New</tt>
 <P>  which is used to identify the passages in a document which were recently
 Suppose the structure schema defines a logical attribute  modified.  It would be nice to have the presentation schema make a bar appear
 called <TT>New</TT> which is used to identify the passages in a document which  in the left margin next to each passage having the <tt>New</tt> attribute.  A
 were recently modified.  It would be nice to have the presentation schema make  new passage can be an entire element, such as a paragraph or section, or it
 a bar appear in the left margin next to each passage having  can be some words in the middle of a paragraph.  To produce the desired
 the <TT>New</TT> attribute.  A new passage can be an entire element, such as a  effect, the <tt>New</tt> attribute is given a creation rule which generates a
 paragraph or section, or it can be some words in the middle of a paragraph.  To  <tt>VerticalBar</tt> presentation box.</p>
 produce the desired effect, the <TT>New</TT> attribute is given a creation rule  <p>
 which generates a <TT>VerticalBar</TT> presentation box.</P>  When the <tt>New</tt> attribute is attached to a character string which is
 <P>  
 When the <TT>New</TT> attribute is attached to a character string which is  
 inside a line broken element (inside a paragraph, for example), the bar is one  inside a line broken element (inside a paragraph, for example), the bar is one
 of the elements which participates in line breaking and it is placed normally  of the elements which participates in line breaking and it is placed normally
 in the current line, at the end of the character string which has the  in the current line, at the end of the character string which has the
 attribute.  To avoid this, the <TT>InLine</TT> rule is used in the following  attribute.  To avoid this, the <tt>InLine</tt> rule is used in the following
 way:</P>  way:</p>
 <PRE>  <pre>BOXES
 BOXES  
   VerticalBar:    VerticalBar:
      BEGIN       BEGIN
      Content: Graphics 'l';       Content: Graphics 'l';
Line 5189  ATTRIBUTES Line 5229  ATTRIBUTES
   Nouveau:    Nouveau:
      BEGIN       BEGIN
      CreateAfter(VerticalBar);       CreateAfter(VerticalBar);
      END;       END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4223>Page breaking and line breaking conditions</A></H3>  
   
 <P>  <h3><a name="sectc4223">Page breaking and line breaking conditions</a></h3>
   <p>
 Pages are constructed by the editor in accordance with the model specified by  Pages are constructed by the editor in accordance with the model specified by
 a <A href="#sectc4233"><TT>Page</TT> rule</A>.  The page model describes only the  a <a href="#sectc4233"><tt>Page</tt> rule</a>.  The page model describes only
 composition of the pages but does not give any rules for breaking different  the composition of the pages but does not give any rules for breaking
 element types across pages.  Now, it is possible that certain elements must  different element types across pages.  Now, it is possible that certain
 not be cut by page breaks, while others can be cut anywhere. The  elements must not be cut by page breaks, while others can be cut anywhere. The
 <TT>PageBreak</TT>, <TT>NoBreak1</TT>, and <TT>NoBreak2</TT> rules are used to  <tt>PageBreak</tt>, <tt>NoBreak1</tt>, and <tt>NoBreak2</tt> rules are used to
 specify the conditions under which each element type can be cut.</P>  specify the conditions under which each element type can be cut.</p>
 <P>  <p>
 The <TT>PageBreak</TT> rule is used to indicate whether or not the box can be  The <tt>PageBreak</tt> rule is used to indicate whether or not the box can be
 cut during the construction of pages.  If cutting is authorized, the box can  cut during the construction of pages.  If cutting is authorized, the box can
 be cut, with one part appearing at the bottom of a page and the other part  be cut, with one part appearing at the bottom of a page and the other part
 appearing at the top of the next page. The rule is formed by the  appearing at the top of the next page. The rule is formed by the
 <TT>PageBreak</TT> keyword followed by a colon and a constant boolean value  <tt>PageBreak</tt> keyword followed by a colon and a constant boolean value
 (<TT>Yes</TT> or <TT>No</TT>).  This is the only form possible: this rule  (<tt>Yes</tt> or <tt>No</tt>).  This is the only form possible: this rule
 cannot be inherited.  Moreover, it can only appear in the rules of the primary  cannot be inherited.  Moreover, it can only appear in the rules of the primary
 view and applies to all views defined in the presentation schema.</P>  view and applies to all views defined in the presentation schema.</p>
 <P>  <p>
 Whether objects can be cut by line breaks can be controlled in a similar way  Whether objects can be cut by line breaks can be controlled in a similar way
 using the <TT>LineBreak</TT> rule.  This rule allows the specification of  using the <tt>LineBreak</tt> rule.  This rule allows the specification of
 whether or not the box can be cut during the construction of lines.  If  whether or not the box can be cut during the construction of lines.  If
 cutting is authorized, the box can be cut, with one part appearing at the end  cutting is authorized, the box can be cut, with one part appearing at the end
 of a line and the other part appearing at the beginning of the next line.  The  of a line and the other part appearing at the beginning of the next line.  The
 rule is formed by the <TT>LineBreak</TT> keyword followed by a colon and a  rule is formed by the <tt>LineBreak</tt> keyword followed by a colon and a
 constant boolean value (<TT>Yes</TT> or <TT>No</TT>).  This is the only form  constant boolean value (<tt>Yes</tt> or <tt>No</tt>).  This is the only form
 possible: this rule cannot be inherited.  Moreover, it can only appear in the  possible: this rule cannot be inherited.  Moreover, it can only appear in the
 rules of the primary view and applies to all views defined in the presentation  rules of the primary view and applies to all views defined in the presentation
 schema.</P>  schema.</p>
 <PRE>  <pre>               'PageBreak' ':' Boolean .
                'PageBreak' ':' Boolean .  
                'LineBreak' ':' Boolean .                 'LineBreak' ':' Boolean .
      Boolean = 'Yes' / 'No' .       Boolean = 'Yes' / 'No' .</pre>
 </PRE>  <p>
 <P>  
 When a box can be cut by a page break, it is possible that a page break will  When a box can be cut by a page break, it is possible that a page break will
 fall an inappropriate spot, creating, for example, a widow or orphan, or  fall an inappropriate spot, creating, for example, a widow or orphan, or
 separating the title of a section from the first paragraph of the section. The  separating the title of a section from the first paragraph of the section. The
 <TT>NoBreak1</TT> and <TT>NoBreak2</TT> rules are used to avoid this. They  <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules are used to avoid this. They
 specify that the box of the element to which they apply cannot be cut within  specify that the box of the element to which they apply cannot be cut within a
 a certain zone at the top (<TT>NoBreak1</TT> rule) or at the bottom  certain zone at the top (<tt>NoBreak1</tt> rule) or at the bottom
 (<TT>NoBreak2</TT> rule).  These two rules specify the height of the zones in  (<tt>NoBreak2</tt> rule).  These two rules specify the height of the zones in
 which page breaks are prohibited.</P>  which page breaks are prohibited.</p>
 <P>  <p>
 The <TT>NoBreak1</TT> and <TT>NoBreak2</TT> rules give the height of the zone  The <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules give the height of the zone
 in which page breaking is prohibited.  The height is given as a constant value  in which page breaking is prohibited.  The height is given as a constant value
 using any of the <A href="#sectc4217">available units</A>, absolute or  using any of the <a href="#sectc4217">available units</a>, absolute or
 relative.  The value may not be inherited.</P>  relative.  The value may not be inherited.</p>
 <PRE>  <pre>                   'NoBreak1' ':' AbsDist .
                    'NoBreak1' ':' AbsDist .                     'NoBreak2' ':' AbsDist .</pre>
                    'NoBreak2' ':' AbsDist .  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  The following rules prevent widows and orphans in a paragraph:</p>
 <P>  <pre>Paragraph :
 The following rules prevent widows and orphans in a paragraph:</P>  
 <PRE>  
 Paragraph :  
    BEGIN     BEGIN
    NoBreak1 : 2;     NoBreak1 : 2;
    NoBreak2 : 2;     NoBreak2 : 2;
    END;     END;</pre>
 </PRE>  <p>
 <P>  
 This rule prevents a section title from becoming separated from the first  This rule prevents a section title from becoming separated from the first
 paragraph of the section by prohibiting page breaks at the beginning of the  paragraph of the section by prohibiting page breaks at the beginning of the
 section rule:</P>  section rule:</p>
 <PRE>  <pre>Section :
 Section :     NoBreak1 : 1.5 cm;</pre>
    NoBreak1 : 1.5 cm;  <p>
 </PRE>  Finally, this rule prevents a figure from being page broken in any way:</p>
 <P>  <pre>Figure :
 Finally, this rule prevents a figure from being page broken in any way:</P>     PageBreak : No;</pre>
 <PRE>  </blockquote>
 Figure :  <p>
    PageBreak : No;  
 </PRE>  
 </BLOCKQUOTE>  
 <P>  
 The Thot editor constructs the document images displayed on the screen  The Thot editor constructs the document images displayed on the screen
 dynamically.  As the user moves in the document or makes the document scroll  dynamically.  As the user moves in the document or makes the document scroll
 in a window, the editor constructs the image to be displayed in little bits,  in a window, the editor constructs the image to be displayed in little bits,
Line 5287  possible that the image in incomplete, e Line 5316  possible that the image in incomplete, e
 reached.  For example, an element might need to be presented to the side of  reached.  For example, an element might need to be presented to the side of
 the last element displayed, but its image was not constructed.  The user will  the last element displayed, but its image was not constructed.  The user will
 not know whether the element is really absent or if its image has simply not  not know whether the element is really absent or if its image has simply not
 been constructed.</P>  been constructed.</p>
 <P>  <p>
 The <TT>Gather</TT> rule is used to remedy this problem.  When the rule  The <tt>Gather</tt> rule is used to remedy this problem.  When the rule
 <TT>Gather : Yes;</TT> is associated with an element type, the image of such  <tt>Gather : Yes;</tt> is associated with an element type, the image of such
 elements is constructed as a block by the editor: it is never split up.</P>  elements is constructed as a block by the editor: it is never split up.</p>
 <P>  <p>
 The <TT>Gather</TT> rule may not appear in the <A  The <tt>Gather</tt> rule may not appear in the <a href="#sectc427">default
 href="#sectc427">default rules</A>.  Elements which do not have the  rules</a>.  Elements which do not have the <tt>Gather</tt> rule are considered
 <TT>Gather</TT> rule are considered susceptible to being split up during  susceptible to being split up during display.  Thus, it is not necessary to
 display.  Thus, it is not necessary to use the <TT>Gather : No;</TT> form.  use the <tt>Gather : No;</tt> form. This rule must be used prudently and only
 This rule must be used prudently and only for those elements which truly need  for those elements which truly need it.  If used incorrectly, it can
 it.  If used incorrectly, it can pointlessly increase the size of the image  pointlessly increase the size of the image constructed by the editor and lead
 constructed by the editor and lead to excessive memory consumption by the  to excessive memory consumption by the editor.</p>
 editor.</P>  <p>
 <P>  Like the <tt>PageBreak</tt> and <tt>LineBreak</tt> rules, the <tt>Gather</tt>
 Like the <TT>PageBreak</TT> and <TT>LineBreak</TT> rules, the <TT>Gather</TT>  
 rule can only appear in rules of the primary view and applies to all views  rule can only appear in rules of the primary view and applies to all views
 defined in the presentation schema.</P>  defined in the presentation schema.</p>
 <PRE>  <pre>                   'Gather' ':' Boolean .</pre>
                    'Gather' ':' Boolean .  </div>
 </PRE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4224>Visibility</A></H3>  
   
 <P>  <h3><a name="sectc4224">Visibility</a></h3>
   <p>
 The visibility parameter is used to control which elements should or should  The visibility parameter is used to control which elements should or should
 not be displayed, based on context.  An element can have different  not be displayed, based on context.  An element can have different
 visibilities in different views.  If an element's visibility is zero for a  visibilities in different views.  If an element's visibility is zero for a
 view, that element is not displayed in that view and does not occupy any space  view, that element is not displayed in that view and does not occupy any space
 (its extents are zero).</P>  (its extents are zero).</p>
 <P>  <p>
 Visibility takes non-negative integer values (positive or zero).  If values  Visibility takes non-negative integer values (positive or zero).  If values
 greater than 1 are used, they allow the user to choose a degree of visibility  greater than 1 are used, they allow the user to choose a degree of visibility
 and, thus, to see only those boxes whose visibility parameter exceeds a  and, thus, to see only those boxes whose visibility parameter exceeds a
 certain threshold.  This gives the user control over the granularity of the  certain threshold.  This gives the user control over the granularity of the
 displayed pictures.</P>  displayed pictures.</p>
 <P>  <p>
 The visibility parameter can be defined as a constant or by inheritance. If  The visibility parameter can be defined as a constant or by inheritance. If
 defined by inheritance, it cannot be based on the value of the next or  defined by inheritance, it cannot be based on the value of the next or
 previous box.  Visibility can only be inherited from above.</P>  previous box.  Visibility can only be inherited from above.</p>
 <P>  <p>
 If it is a numeric attribute's presentation rule, the visibility can be  If it is a numeric attribute's presentation rule, the visibility can be
 specified by the attribute's name, in which case the value of the attribute is  specified by the attribute's name, in which case the value of the attribute is
 used.</P>  used.</p>
 <PRE>  <pre>                   'Visibility' ':' NumberInherit
                    'Visibility' ':' NumberInherit  
      NumberInherit = Integer / AttrID / Inheritance .       NumberInherit = Integer / AttrID / Inheritance .
      Integer       = NUMBER .       Integer       = NUMBER .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  Suppose that only <tt>Formula</tt> elements should be displayed in the
 Suppose that only <TT>Formula</TT> elements should be displayed in  <tt>MathView</tt> view.  Then, the default rules should include:</p>
 the <TT>MathView</TT> view.  Then, the default rules should include:</P>  <pre>DEFAULT
 <PRE>       IN MathView Visibility:0;</pre>
 DEFAULT  <p>
      IN MathView Visibility:0;  which makes all elements invisible in the <tt>MathView</tt> view.  However,
 </PRE>  the <tt>Formula</tt> element also has a <tt>Visibility</tt> rule:</p>
 <P>  <pre>Formula :
 which makes all elements invisible in the <TT>MathView</TT> view.  However, the       IN MathView Visibility:5;</pre>
 <TT>Formula</TT> element also has a <TT>Visibility</TT> rule:</P>  <p>
 <PRE>  which makes formulas, and only formulas, visible.</p>
 Formula :  </blockquote>
      IN MathView Visibility:5;  </div>
 </PRE>  
 <P>  
 which makes formulas, and only formulas, visible.</P>  
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4225>Character style parameters</A></H3>  
   
 <P>  <h3><a name="sectc4225">Character style parameters</a></h3>
   <p>
 Four parameters are used to determine which characters are used to display  Four parameters are used to determine which characters are used to display
 text.  They are size, font, style, and underlining.</P>  text.  They are size, font, style, and underlining.</p>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd42251>Character size</A></H4>  
   
 <P>  <h4><a name="sectd42251">Character size</a></h4>
   <p>
 The size parameter has two effects.  First, it is used to specify the actual  The size parameter has two effects.  First, it is used to specify the actual
 size and distance units for boxes defined in <A href="#sectc4217">relative  size and distance units for boxes defined in <a href="#sectc4217">relative
 units</A>.  Second, it defines the size of the characters contained in the  units</a>.  Second, it defines the size of the characters contained in the
 box.</P>  box.</p>
 <P>  <p>
 As a distance or length, the size can be expressed in abstract or absolute  As a distance or length, the size can be expressed in abstract or absolute
 units.  It can also be inherited.  If it is not inherited, it is expressed  units.  It can also be inherited.  If it is not inherited, it is expressed
 simply as an integer followed by the <TT>pt</TT> keyword, which indicates that  simply as an integer followed by the <tt>pt</tt> keyword, which indicates that
 the size is expressed in typographer's points. The absence of the <TT>pt</TT>  the size is expressed in typographer's points. The absence of the <tt>pt</tt>
 keyword indicates that it is in abstract units in which the value 1 represents  keyword indicates that it is in abstract units in which the value 1 represents
 the smallest size while the value 16 is the largest size.  The relationship  the smallest size while the value 16 is the largest size.  The relationship
 between these abstract sizes and the real character sizes is controlled by a  between these abstract sizes and the real character sizes is controlled by a
 table which can be modified statically or even dynamically during the  table which can be modified statically or even dynamically during the
 execution of the Thot editor.</P>  execution of the Thot editor.</p>
 <P>  <p>
 If it is a numeric attribute's presentation rule, the value of the size  If it is a numeric attribute's presentation rule, the value of the size
 parameter can be specified by the attribute's name, in which case the value of  parameter can be specified by the attribute's name, in which case the value of
 the attribute is used.</P>  the attribute is used.</p>
 <P>  <p>
 <STRONG>Note:</STRONG> the only unit available for  defining an absolute size  <strong>Note:</strong> the only unit available for  defining an absolute size
 is the typographer's point.  Centimeters and inches may not be used.</P>  is the typographer's point.  Centimeters and inches may not be used.</p>
 <P>  <p>
 If the size is inherited, the rule must specify the relative from which to  If the size is inherited, the rule must specify the relative from which to
 inherit and any difference from that relative's value.  The difference can be  inherit and any difference from that relative's value.  The difference can be
 expressed in either typographer's points or in abstract units.  The maximum or  expressed in either typographer's points or in abstract units.  The maximum or
 minimum size can also be specified, but without specifying the type of unit:  minimum size can also be specified, but without specifying the type of unit:
 it is the same as was specified for the difference.</P>  it is the same as was specified for the difference.</p>
 <P>  <p>
 In a numeric attribute's presentation rule, the difference in size can be  In a numeric attribute's presentation rule, the difference in size can be
 indicated by the attribute's name, which means that the attribute's value  indicated by the attribute's name, which means that the attribute's value
 should be used as the difference.  The attribute can also be used as the  should be used as the difference.  The attribute can also be used as the
 minimum or maximum size.</P>  minimum or maximum size.</p>
 <PRE>  <pre>                    'Size' ':' SizeInherit
                     'Size' ':' SizeInherit  
      SizeInherit   = SizeAttr [ 'pt' ] /       SizeInherit   = SizeAttr [ 'pt' ] /
                      Kinship InheritedSize .                       Kinship InheritedSize .
      InheritedSize ='+' SizeAttr [ 'pt' ]       InheritedSize ='+' SizeAttr [ 'pt' ]
Line 5417  minimum or maximum size.</P> Line 5436  minimum or maximum size.</P>
      MaxSizeAttr   = MaxSize / AttrID .       MaxSizeAttr   = MaxSize / AttrID .
      MaxSize       = NUMBER .       MaxSize       = NUMBER .
      MinSizeAttr   = MinSize / AttrID .       MinSizeAttr   = MinSize / AttrID .
      MinSize       = NUMBER .       MinSize       = NUMBER .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  The rule</p>
 The rule</P>  <pre>Size : Enclosing - 2 pt Min 7;</pre>
 <PRE>  <p>
 Size : Enclosing - 2 pt Min 7;  states that the character size is 2 points less than that of the enclosing
 </PRE>  box, but that it may not be less than 7 points, whatever the enclosing box's
 <P>  value.</p>
 states that the character size is 2 points less than that of the enclosing box,  <p>
 but that it may not be less than 7 points, whatever the enclosing box's  
 value.</P>  
 <P>  
 The following rules make the text of a report be displayed with medium-sized  The following rules make the text of a report be displayed with medium-sized
 characters (for example, size 5), while the title is displayed with larger  characters (for example, size 5), while the title is displayed with larger
 characters and the summary is displayed with smaller characters:</P>  characters and the summary is displayed with smaller characters:</p>
 <PRE>  <pre>Report :
 Report :  
      Size : 5;       Size : 5;
 Title :  Title :
      Size : Enclosing + 2;       Size : Enclosing + 2;
 Summary :  Summary :
      Size : Enclosing - 1;       Size : Enclosing - 1;</pre>
 </PRE>  <p>
 <P>  Thus, the character sizes in the entire document can be changed by changing
 Thus, the character sizes in the entire document can be changed by changing the  the size parameter of the Report element, while preserving the relationships
 size parameter of the Report element, while preserving the relationships  between the sizes of the different elements.</p>
 between the sizes of the different elements.</P>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsubsection">
 <DIV class="subsubsection">  
 <H4><A name=sectd42252>Font and character style</A></H4>  <h4><a name="sectd42252">Font and character style</a></h4>
   <p>
 <P>  The <tt>Font</tt> rule determines the font family to be used to display the
 The <TT>Font</TT> rule determines the font family to be used to display the  characters contained in the box, while the <tt>Style</tt> rule determines
 characters contained in the box, while the <TT>Style</TT> rule determines  
 their style.  Thot recognizes three character fonts (Times, Helvetica, and  their style.  Thot recognizes three character fonts (Times, Helvetica, and
 Courier) and six styles: Roman, Italics, Bold, BoldItalics, Oblique, and  Courier) and six styles: Roman, Italics, Bold, BoldItalics, Oblique, and
 BoldOblique.</P>  BoldOblique.</p>
 <P>  <p>
 The font family and style can specified by a named constant or can be  The font family and style can specified by a named constant or can be
 inherited.  For the name of the font family only the first character is  inherited.  For the name of the font family only the first character is
 used.</P>  used.</p>
 <P>  <p>
 Only identical inheritance is allowed: the box takes the same font or style as  Only identical inheritance is allowed: the box takes the same font or style as
 the box from which it inherits.  This is indicated by an equals sign after the  the box from which it inherits.  This is indicated by an equals sign after the
 kinship specification.</P>  kinship specification.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 To specify that the summary uses the font family of the rest of the document,  To specify that the summary uses the font family of the rest of the document,
 but in the italic style, the following rules are used:</P>  but in the italic style, the following rules are used:</p>
 <PRE>  <pre>Summary :
 Summary :  
    BEGIN     BEGIN
    Font : Enclosing =;     Font : Enclosing =;
    Style : Italics;     Style : Italics;
    END;     END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsubsection">
 <DIV class="subsubsection">  
 <H4><A name=sectd42253>Underlining</A></H4>  <h4><a name="sectd42253">Underlining</a></h4>
   <p>
 <P>  The <tt>Underline</tt> rule is used to specify if the characters contained in
 The <TT>Underline</TT> rule is used to specify if the characters contained in  
 a box should have lines drawn on or near them.  There are four underlining  a box should have lines drawn on or near them.  There are four underlining
 styles: <TT>Underlined</TT>, <TT>Overlined</TT>, <TT>CrossedOut</TT>, and  styles: <tt>Underlined</tt>, <tt>Overlined</tt>, <tt>CrossedOut</tt>, and
 <TT>NoUnderline</TT>.  The <TT>Thickness</TT> rule specifies the thickness of  <tt>NoUnderline</tt>.  The <tt>Thickness</tt> rule specifies the thickness of
 the line, <TT>Thin</TT> or <TT>Thick</TT>.</P>  the line, <tt>Thin</tt> or <tt>Thick</tt>.</p>
 <P>  <p>
 As with font family and style, only identical inheritance is allowed: the box  As with font family and style, only identical inheritance is allowed: the box
 has the same underlining type as the box from which it inherits the value.  has the same underlining type as the box from which it inherits the value.
 This is indicated by an equals sign after the kinship specification.</P>  This is indicated by an equals sign after the kinship specification.</p>
 <PRE>  <pre>                   'Underline' ':' UnderLineInherit /
                    'Underline' ':' UnderLineInherit /  
                    'Thickness' ':' ThicknessInherit /                     'Thickness' ':' ThicknessInherit /
   
 UnderLineInherit = Kinship '=' / 'NoUnderline' /  UnderLineInherit = Kinship '=' / 'NoUnderline' /
                    'Underlined' /                      'Underlined' / 
                    'Overlined' / 'CrossedOut' .                     'Overlined' / 'CrossedOut' .
 ThicknessInherit = Kinship '=' / 'Thick' / 'Thin' .  ThicknessInherit = Kinship '=' / 'Thick' / 'Thin' .</pre>
 </PRE>  </div>
 </DIV>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc4226>Stacking order</A></H3>  <h3><a name="sectc4226">Stacking order</a></h3>
   <p>
 <P>  The <tt>Depth</tt> rule is used to define the stacking order of terminal boxes
 The <TT>Depth</TT> rule is used to define the stacking order of terminal boxes  
 when multiple boxes at least partially overlap.  This rule defines how the  when multiple boxes at least partially overlap.  This rule defines how the
 depth parameter, which is zero or a positive integer, is calculated.  The  depth parameter, which is zero or a positive integer, is calculated.  The
 depth parameter has a value for all boxes.  For terminal boxes in the  depth parameter has a value for all boxes.  For terminal boxes in the
 structure and for presentation boxes, the depth value is used during display  structure and for presentation boxes, the depth value is used during display
 and printing: the boxes with the lowest value overlap those with higher  and printing: the boxes with the lowest value overlap those with higher
 depths.  For non-terminal boxes, the depth is not interpreted during display,  depths.  For non-terminal boxes, the depth is not interpreted during display,
 but it is used to calculate the depth of terminal boxes by inheritance.</P>  but it is used to calculate the depth of terminal boxes by inheritance.</p>
 <P>  <p>
 Like most other rules, the depth rule is defined in the <A  Like most other rules, the depth rule is defined in the <a
 href="#sectc427">default rules</A> of each presentation schema.  Thus,  href="#sectc427">default rules</a> of each presentation schema.  Thus, there
 there is always a depth value, even when it is not necessary because there is  is always a depth value, even when it is not necessary because there is no
 no overlapping.  To avoid useless operations, a zero value can be given to the  overlapping.  To avoid useless operations, a zero value can be given to the
 depth parameter, which signifies that overlapping is never a problem.</P>  depth parameter, which signifies that overlapping is never a problem.</p>
 <P>  <p>
 The depth rule has the same form as the <A href="#sectc4224">visibility rule</A>.  The depth rule has the same form as the <a href="#sectc4224">visibility
 It can be defined by inheritance or by a constant numeric value. When the rule  rule</a>. It can be defined by inheritance or by a constant numeric value.
 is attached to a numeric attribute, it can take the value of that  When the rule is attached to a numeric attribute, it can take the value of
 attribute.</P>  that attribute.</p>
 <PRE>  <pre>                'Depth' ':' NumberInherit</pre>
                 'Depth' ':' NumberInherit  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 For a purely textual document, in which overlapping never poses a problem, a  For a purely textual document, in which overlapping never poses a problem, a
 single default <TT>Depth</TT> rule in the presentation schema is  single default <tt>Depth</tt> rule in the presentation schema is
 sufficient:</P>  sufficient:</p>
 <PRE>  <pre>DEFAULT
 DEFAULT  
     Depth : 0;      Depth : 0;
     ...      ...</pre>
 </PRE>  <p>
 <P>  
 To make the text of examples appear on a light blue background, a presentation  To make the text of examples appear on a light blue background, a presentation
 box is defined:</P>  box is defined:</p>
 <PRE>  <pre>BOXES
 BOXES  
    BlueBG :     BlueBG :
       BEGIN        BEGIN
       Content : Graphics 'R';        Content : Graphics 'R';
Line 5558  BOXES Line 5563  BOXES
       FillPattern: backgroundcolor;        FillPattern: backgroundcolor;
       Depth : 2;        Depth : 2;
       ...        ...
       END;        END;</pre>
 </PRE>  <p>
 <P>  and is created by the <tt>Example</tt> element, which has the rules:</p>
 and is created by the <TT>Example</TT> element, which has the rules:</P>  <pre>RULES
 <PRE>  
 RULES  
    Example :     Example :
       BEGIN        BEGIN
       CreateFirst (BlueBG);        CreateFirst (BlueBG);
       Depth : 1;        Depth : 1;
       ...        ...
       END;        END;</pre>
 </PRE>  <p>
 <P>  In this way, the text of an example (if it inherits its depth from its
 In this way, the text of an example (if it inherits its depth from  ancestor) will be superimposed on a light blue background, and not the
 its ancestor) will be superimposed on a light blue background, and not  reverse).</p>
 the reverse).</P>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc4227>Line style</A></H3>  <h3><a name="sectc4227">Line style</a></h3>
   <p>
 <P>  The <tt>LineStyle</tt> rule determines the style of line which should be used
 The <TT>LineStyle</TT> rule determines the style of line which should be used  to draw all the elements contained in the box and the box itself, if it has a
 to draw all the elements contained in the box and the box itself, if it has  <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  The line style can be
 a <A href="#sectc4230a"><TT>ShowBox</TT> rule</A>.  The line style can be  indicated by a name (<tt>Solid</tt>, <tt>Dashed</tt>, <tt>Dotted</tt>) or it
 indicated by a name (<TT>Solid</TT>, <TT>Dashed</TT>, <TT>Dotted</TT>) or it  
 can be inherited.  All elements of the graphic base type are affected by this  can be inherited.  All elements of the graphic base type are affected by this
 rule, but it can be attached to any box and transmitted by inheritance to the  rule, but it can be attached to any box and transmitted by inheritance to the
 graphic elements.  The border of elements having a  graphic elements.  The border of elements having a <a
 <A href="#sectc4230a"><TT>ShowBox</TT> rule</A>  href="#sectc4230a"><tt>ShowBox</tt> rule</a> is drawn according to the line
 is drawn according to the line style specified by this rule.<P>  style specified by this rule.</p>
   <p>
 Only identical inheritance is allowed: the box takes the same line style as  Only identical inheritance is allowed: the box takes the same line style as
 the box from which it inherits.  This is indicated by an equals sign after the  the box from which it inherits.  This is indicated by an equals sign after the
 kinship specification.</P>  kinship specification.</p>
 <PRE>  <pre>                      'LineStyle' ':' LineStyleInherit
                       'LineStyle' ':' LineStyleInherit  
      LineStyleInherit = Kinship '=' /       LineStyleInherit = Kinship '=' /
                       'Solid' / 'Dashed' / 'Dotted' .                        'Solid' / 'Dashed' / 'Dotted' .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 To specify that, in Figures, the graphical parts should be drawn in solid  To specify that, in Figures, the graphical parts should be drawn in solid
 lines, the Figure element is given a rule using the <TT>Solid</TT> name:</P>  lines, the Figure element is given a rule using the <tt>Solid</tt> name:</p>
 <PRE>  <pre>Figure :
 Figure :     LineStyle : Solid;</pre>
    LineStyle : Solid;  <p>
 </PRE>  and the elements composing figures are given an inheritance rule:</p>
 <P>  <pre>   LineStyle : Enclosing =;</pre>
 and the elements composing figures are given an inheritance rule:</P>  </blockquote>
 <PRE>  </div>
    LineStyle : Enclosing =;  
 </PRE>  <div class="subsection">
 </BLOCKQUOTE>  
 </DIV>  <h3><a name="sectc4228">Line thickness</a></h3>
   <p>
 <DIV class="subsection">  The <tt>LineWeight</tt> rule determines the thickness of the lines  of all
 <H3><A name=sectc4228>Line thickness</A></H3>  
   
 <P>  
 The <TT>LineWeight</TT> rule determines the thickness of the lines  of all  
 graphical elements which appear in the box, no matter what their line style.  graphical elements which appear in the box, no matter what their line style.
 Line thickness can be specified by a constant value or by inheritance.  A  Line thickness can be specified by a constant value or by inheritance.  A
 constant value is a positive number followed by an optional unit specification  constant value is a positive number followed by an optional unit specification
 (which is absent when using relative units).  All available <A  (which is absent when using relative units).  All available <a
 href="#sectc4217">distance units</A> can be used.  Line thickness is expressed  href="#sectc4217">distance units</a> can be used.  Line thickness is expressed
 in the same way as <A href="#sectd42221">line spacing</A>.</P>  in the same way as <a href="#sectd42221">line spacing</a>.</p>
 <PRE>  <pre>                 'LineWeight' ':' DistOrInherit</pre>
                  'LineWeight' ':' DistOrInherit  <p>
 </PRE>  All elements of the graphic base type are affected by this rule, but it can be
 <P>  attached to any box and transmitted by inheritance to the graphic elements.
 All elements of the graphic base type are affected by this rule, but it can  The border of element having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>
 be attached to any box and transmitted by inheritance to the graphic  is also drawn according to the thickness specified by this rule.</p>
 elements. The border of element having a <A href="#sectc4230a"><TT>ShowBox</TT>  <blockquote class="example">
 rule</A> is also drawn according to the thickness specified by this rule.</P>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  To specify that, in Figures, the graphical parts should be drawn with lines
 <P>  0.3 pt thick, the Figure element is given this rule:</p>
 To specify that, in Figures, the graphical parts should be drawn with lines 0.3  <pre>Figure :
 pt thick, the Figure element is given this rule:</P>     LineWeight : 0.3 pt;</pre>
 <PRE>  <p>
 Figure :  and the elements composing figures are given an inheritance rule:</p>
    LineWeight : 0.3 pt;  <pre>   LineWeight : Enclosing =;</pre>
 </PRE>  </blockquote>
 <P>  </div>
 and the elements composing figures are given an inheritance rule:</P>  
 <PRE>  <div class="subsection">
    LineWeight : Enclosing =;  
 </PRE>  <h3><a name="sectc4229">Fill pattern</a></h3>
 </BLOCKQUOTE>  <p>
 </DIV>  The <tt>FillPattern</tt> rule determines the pattern used to fill closed
   
 <DIV class="subsection">  
 <H3><A name=sectc4229>Fill pattern</A></H3>  
   
 <P>  
 The <TT>FillPattern</TT> rule determines the pattern used to fill closed  
 graphical elements (circles, rectangles, etc.) which appear in the box.  This  graphical elements (circles, rectangles, etc.) which appear in the box.  This
 rule also specifies the pattern used to fill the box associated with  rule also specifies the pattern used to fill the box associated with elements
 elements having a <A href="#sectc4230a"><TT>ShowBox</TT> rule<A>.  This  having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a><a>.  This pattern can
 pattern can be indicated by a named constant or by inheritance.  The named  be indicated by a named constant or by inheritance.  The named constant
 constant identifies one of the patterns available in Thot.  The names of the  identifies one of the patterns available in Thot.  The names of the available
 available patterns are: nopattern, foregroundcolor, backgroundcolor, gray1,  patterns are: nopattern, foregroundcolor, backgroundcolor, gray1, gray2,
 gray2, gray3, gray4, gray5, gray6, gray7, horiz1, horiz2, horiz3, vert1,  gray3, gray4, gray5, gray6, gray7, horiz1, horiz2, horiz3, vert1, vert2,
 vert2, vert3, left1, left2, left3, right1, right2, right3, square1, square2,  vert3, left1, left2, left3, right1, right2, right3, square1, square2, square3,
 square3, lozenge, brick, tile, sea, basket.</P>  lozenge, brick, tile, sea, basket.</a></p>
 <P>  <p>
 Like the other rules peculiar to graphics, <TT>LineStyle</TT> and  Like the other rules peculiar to graphics, <tt>LineStyle</tt> and
 <TT>LineWeight</TT>, only elements of the graphic base type are affected by  <tt>LineWeight</tt>, only elements of the graphic base type are affected by
 the <TT>FillPattern</TT> rule, but the rule can be attached to any box and  the <tt>FillPattern</tt> rule, but the rule can be attached to any box and
 transmitted by inheritance to the graphic elements.  As with the other rules  transmitted by inheritance to the graphic elements.  As with the other rules
 specific to graphics, only identical inheritance is allowed.</P>  specific to graphics, only identical inheritance is allowed.</p>
 <P>  <p>
 The <TT>FillPattern</TT> rule can also be used to determine whether or not  The <tt>FillPattern</tt> rule can also be used to determine whether or not
 text characters, symbols and pictures should be colored.  For these element  text characters, symbols and pictures should be colored.  For these element
 types (text, symbols, and pictures), the only valid values are  types (text, symbols, and pictures), the only valid values are
 <TT>nopattern</TT>, <TT>foregroundcolor</TT>, and  <tt>nopattern</tt>, <tt>foregroundcolor</tt>, and <tt>backgroundcolor</tt>.
 <TT>backgroundcolor</TT>.  When <TT>FillPattern</TT> has the value  When <tt>FillPattern</tt> has the value <tt>backgroundcolor</tt>, text
 <TT>backgroundcolor</TT>, text characters, symbols, and bitmaps are given the  characters, symbols, and bitmaps are given the color specified by the <a
 color specified by the <A href="#sectc4230"><TT>Background</TT> rule</A> which  href="#sectc4230"><tt>Background</tt> rule</a> which applies to these
 applies to these elements.  When <TT>FillPattern</TT> has the value  elements.  When <tt>FillPattern</tt> has the value <tt>foregroundcolor</tt>,
 <TT>foregroundcolor</TT>, these same elements are given the color specified by  these same elements are given the color specified by the <a
 the <A href="#sectc4230"><TT>Foreground</TT> rule</A> which applies to these  href="#sectc4230"><tt>Foreground</tt> rule</a> which applies to these
 elements.  In all other case, text characters are not colored.</P>  elements.  In all other case, text characters are not colored.</p>
 <PRE>  <pre>                 'FillPattern' ':' NameInherit</pre>
                  'FillPattern' ':' NameInherit  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 To specify that, in Figures, the closed graphical elements should be filled  To specify that, in Figures, the closed graphical elements should be filled
 with a pattern resembling a brick wall, the Figure element is given this  with a pattern resembling a brick wall, the Figure element is given this
 rule:</P>  rule:</p>
 <PRE>  <pre>Figure :
 Figure :     FillPattern : brick;</pre>
    FillPattern : brick;  <p>
 </PRE>  and the elements composing figures are given an inheritance rule:</p>
 <P>  <pre>   FillPattern : Enclosing =;</pre>
 and the elements composing figures are given an inheritance rule:</P>  </blockquote>
 <PRE>  </div>
    FillPattern : Enclosing =;  
 </PRE>  <div class="subsection">
 </BLOCKQUOTE>  
 </DIV>  <h3><a name="sectc4230">Colors</a></h3>
   <p>
 <DIV class="subsection">  The <tt>Foreground</tt> and <tt>Background</tt> rules determine the foreground
 <H3><A name=sectc4230>Colors</A></H3>  
   
 <P>  
 The <TT>Foreground</TT> and <TT>Background</TT> rules determine the foreground  
 and background colors of the base elements which appear in the box. They also  and background colors of the base elements which appear in the box. They also
 control the color of boxes associated with elements having a  control the color of boxes associated with elements having a <a
 <A href="#sectc4230a"><TT>ShowBox</TT> rule</A>.  These  href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  These colors can be specified
 colors can be specified with a named constant or by inheritance.  The named  with a named constant or by inheritance.  The named constants specify one of
 constants specify one of the available colors in Thot.  The available color  the available colors in Thot.  The available color names can be found in the
 names can be found in the file <TT>thot.color</TT>.</P>  file <tt>thot.color</tt>.</p>
 <P>  <p>
 The color rules affect the same way all base elements and elements having a  The color rules affect the same way all base elements and elements having a <a
 <A href="#sectc4230a"><TT>ShowBox</TT> rule</A>,  href="#sectc4230a"><tt>ShowBox</tt> rule</a>, no matter what their type (text,
 no matter what their type (text, graphics, pictures,  graphics, pictures, symbols).  The color rules can be associated with any box
 symbols).  The color rules can be associated with any box and can be  and can be transmitted by inheritance to the base elements or the elements
 transmitted by inheritance to the base elements or the elements having  having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  Like the preceding
 a <A href="#sectc4230a"><TT>ShowBox</TT> rule</A>.  Like the preceding rules,  rules, only inheritance of the same value is allowed.</p>
 only inheritance of the same value is allowed.</P>  <pre>                 'Foreground' ':' NameInherit
 <PRE>                   'Background' ':' NameInherit</pre>
                  'Foreground' ':' NameInherit  <p>
                  'Background' ':' NameInherit  <strong>Note:</strong> text colors only appear for text elements whose <a
 </PRE>  href="#sectc4229">fill pattern</a> does not prevent the use of color.</p>
 <P>  <blockquote class="example">
 <STRONG>Note:</STRONG> text colors only appear for text elements whose <A  <p>
 href="#sectc4229">fill pattern</A> does not prevent the use of color.</P>  <strong>Example:</strong></p>
 <BLOCKQUOTE class="example">  <p>
 <P>  
 <STRONG>Example:</STRONG></P>  
 <P>  
 To specify that, in Figures, everything must be drawn in blue on a background  To specify that, in Figures, everything must be drawn in blue on a background
 of yellow, the Figure element is given these rules:</P>  of yellow, the Figure element is given these rules:</p>
 <PRE>  <pre>Figure :
 Figure :  
    BEGIN     BEGIN
    Foreground : Blue;     Foreground : Blue;
    Background : Yellow;     Background : Yellow;
    Fillpattern : backgroundcolor;     Fillpattern : backgroundcolor;
    END;     END;</pre>
 </PRE>  <p>
 <P>  and the elements composing figures are given inheritance rules:</p>
 and the elements composing figures are given inheritance rules:</P>  <pre>   Foreground : Enclosing =;
 <PRE>  
    Foreground : Enclosing =;  
    Background : Enclosing =;     Background : Enclosing =;
    FillPattern : Enclosing =;     FillPattern : Enclosing =;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc4230a>Background color and border</A></H3>  <h3><a name="sectc4230a">Background color and border</a></h3>
   <p>
 <P>  Boxes associated with structural elements are normally not visible, but it is
 Boxes associated with structural elements are normally not visible, but it  possible to draw their border and/or to paint their area when it is needed.
 is possible to draw their border and/or to paint their area when it is needed.  This is achieved by associating the <tt>ShowBox</tt> rule with the concerned
 This is achieved by associating the <TT>ShowBox</TT> rule with the concerned  
 element.  This rule has no parameter and no value. It is simply written  element.  This rule has no parameter and no value. It is simply written
 <TT>Showbox;</TT>. It is not inherited nor transmitted to any other element.  <tt>Showbox;</tt>. It is not inherited nor transmitted to any other element.
 It applies only to the element with which it is associated.</P>  It applies only to the element with which it is associated.</p>
 <PRE>  <pre>                 'ShowBox'</pre>
                  'ShowBox'  <p>
 </PRE>  When an element has a <tt>ShowBox</tt> rule, the border is drawn only if the
 <P>  <tt>LineWeight</tt> rule that applies to that element has a non-zero value
 When an element has a <TT>ShowBox</TT> rule, the border is drawn only if  (this value can be inherited).  The color, style and thickness of the border
 the <TT>LineWeight</TT> rule that applies to that element has a non-zero  are defined by the <tt>Foreground</tt>, <tt>LineStyle</tt>, and
 value (this value can be inherited).  The color, style and thickness of the  <tt>LineWeight</tt> rules that apply to the element.</p>
 border are defined by the <TT>Foreground</TT>, <TT>LineStyle</TT>, and  <p>
 <TT>LineWeight</TT> rules that apply to the element.</P>  When an element has a <tt>ShowBox</tt> rule, the background of this element is
 <P>  paint only if the value of the <tt>FillPattern</tt> rule that applies to that
 When an element has a <TT>ShowBox</TT> rule, the background of this element  element is not <tt>nopattern</tt>.  The pattern and color(s) of the background
 is paint only if the value of the <TT>FillPattern</TT> rule that applies to  are defined by the <tt>FillPattern</tt>, <tt>Background</tt>, and
 that element is not <TT>nopattern</TT>.  The pattern and color(s) of the  <tt>Foreground</tt> rules that apply to the element.</p>
 background are defined by the <TT>FillPattern</TT>, <TT>Background</TT>, and  </div>
 <TT>Foreground</TT> rules that apply to the element.</P>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc4230b">Background pictures</a></h3>
 <H3><A name=sectc4230b>Background pictures</A></H3>  <p>
   The <tt>BackgroundPicture</tt> rule allows to display a picture as the
 <P>  
 The <TT>BackgroundPicture</TT> rule allows to display a picture as the  
 background of an element.  It has a single parameter, the file name of the  background of an element.  It has a single parameter, the file name of the
 picture.  This is a string delimited by single quotes.  If the first  picture.  This is a string delimited by single quotes.  If the first character
 character in this string is '/', it is considered as an absolute path,  in this string is '/', it is considered as an absolute path, otherwise the
 otherwise the file is searched for along the schema directory  file is searched for along the schema directory path.  This file may contain a
 path.  This file may contain a picture in any format accepted by  picture in any format accepted by Thot (xbm, xpm, gif, jpeg, png, etc.)</p>
 Thot (xbm, xpm, gif, jpeg, png, etc.)</P>  <p>
 <P>  The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only to
 The <TT>BackgroundPicture</TT> and <TT>PictureMode</TT> rules apply only to  
 the element with which they are associated.  They are not inherited nor  the element with which they are associated.  They are not inherited nor
 transmitted to children elements.</P>  transmitted to children elements.</p>
 <P>  <p>
 The background picture has not always the same size as the element's box.  The background picture has not always the same size as the element's box.
 There are diffrent ways to fill the element box with the picture.  This is  There are diffrent ways to fill the element box with the picture.  This is
 specified by the <TT>PictureMode</TT> rule, which should be associated to  specified by the <tt>PictureMode</tt> rule, which should be associated to the
 the same element.  This rule may take one of the following values:</P>  same element.  This rule may take one of the following values:</p>
 <DL>  <dl>
 <DT><TT>NormalSize</TT>  <dt><tt>NormalSize</tt></dt>
 <DD>The picture is centered in the box, and clipped if it is too large.  <dd>
   The picture is centered in the box, and clipped if it is too large.
 <DT><TT>Scale</TT>  </dd>
 <DD>The picture is zoomed to fit the box size.  <dt><tt>Scale</tt></dt>
   <dd>
 <DT><TT>RepeatX</TT>  The picture is zoomed to fit the box size.
 <DD>The picture is repeated horizontally to fit the box width.  </dd>
   <dt><tt>RepeatX</tt></dt>
 <DT><TT>RepeatY</TT>  <dd>
 <DD>The picture is repeated vertically to fit the box height.  The picture is repeated horizontally to fit the box width.
   </dd>
 <DT><TT>RepeatXY</TT>  <dt><tt>RepeatY</tt></dt>
 <DD>The picture is repeated both horizontally and vertically to fill the box.  <dd>
 </DL>  The picture is repeated vertically to fit the box height.
 <P>  </dd>
 If an element has a <TT>BackgroundPicture</TT> rule and no <TT>PictureMode</TT>  <dt><tt>RepeatXY</tt></dt>
 rule, the <TT>NormalSize</TT> value is assumed.</P>  <dd>
 <PRE>  The picture is repeated both horizontally and vertically to fill the box.
                  'BackgroundPicture' ':' FileName /  </dd>
   </dl>
   <p>
   If an element has a <tt>BackgroundPicture</tt> rule and no
   <tt>PictureMode</tt> rule, the <tt>NormalSize</tt> value is assumed.</p>
   <pre>                 'BackgroundPicture' ':' FileName /
                  'PictureMode' ':' PictMode .                   'PictureMode' ':' PictMode .
     
       FileName = STRING .        FileName = STRING .
       PictMode = 'NormalSize' / 'Scale' / 'RepeatXY' / 'RepeatX' / 'RepeatY' .        PictMode = 'NormalSize' / 'Scale' / 'RepeatXY' / 'RepeatX' / 'RepeatY' .</pre>
 </PRE>  <p>
 <P>  The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only to
 The <TT>BackgroundPicture</TT> and <TT>PictureMode</TT> rules apply only to  
 the element with which they are associated.  They are not inherited nor  the element with which they are associated.  They are not inherited nor
 transmitted to children elements.</P>  transmitted to children elements.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4231>Presentation box content</A></H3>  
   
 <P>  <h3><a name="sectc4231">Presentation box content</a></h3>
 The <TT>Content</TT> rule applies to presentation boxes.  It indicates the  <p>
   The <tt>Content</tt> rule applies to presentation boxes.  It indicates the
 content given to a box.  This content is either a variable's value or a  content given to a box.  This content is either a variable's value or a
 constant value.  In the special case of <A href="#sectc4233">header or footer  constant value.  In the special case of <a href="#sectc4233">header or footer
 boxes</A>, the content can also be a structured element type.</P>  boxes</a>, the content can also be a structured element type.</p>
 <P>  <p>
 If the content is a constant, it can be specified, as in a variable  If the content is a constant, it can be specified, as in a variable
 declaration, either by the name of a constant declared in the <TT>CONST</TT>  declaration, either by the name of a constant declared in the <tt>CONST</tt>
 section or by direct specification of the type and value of the box's  section or by direct specification of the type and value of the box's
 content.</P>  content.</p>
 <P>  <p>
 Similarly, if it is a variable, the name of a variable declared in  Similarly, if it is a variable, the name of a variable declared in
 <TT>VAR</TT> section can be given or the variable may be defined within  <tt>VAR</tt> section can be given or the variable may be defined within
 parentheses.  The content inside the parentheses has the same syntax as a <A  parentheses.  The content inside the parentheses has the same syntax as a <a
 href="#sectc426">variable declaration</A>.</P>  href="#sectc426">variable declaration</a>.</p>
 <P>  <p>
 When the content is a structured element type, the name of the element type is  When the content is a structured element type, the name of the element type is
 given after the colon.  In this case,  the box's content is all elements of  given after the colon.  In this case,  the box's content is all elements of
 the named type which are designated by references which are part of the page  the named type which are designated by references which are part of the page
 on which the header or footer with this <TT>Content</TT> rule appears.  Only  on which the header or footer with this <tt>Content</tt> rule appears.  Only
 associated elements can appear in a <TT>Content</TT> rule and the structure  associated elements can appear in a <tt>Content</tt> rule and the structure
 must provide references to these elements.  Moreover, the box whose content  must provide references to these elements.  Moreover, the box whose content
 they are must be a header or footer box generated by a page box of the primary  they are must be a header or footer box generated by a page box of the primary
 view.</P>  view.</p>
 <PRE>  <pre>               'Content' ':' VarConst
                'Content' ':' VarConst  
      VarConst = ConstID / ConstType ConstValue /       VarConst = ConstID / ConstType ConstValue /
                 VarID / '(' FunctionSeq ')' /                  VarID / '(' FunctionSeq ')' /
                 ElemID .                  ElemID .</pre>
 </PRE>  <p>
 <P>  A presentation box can have only one <tt>Content</tt> rule, which means that
 A presentation box can have only one <TT>Content</TT> rule, which means that  
 the content of a presentation box cannot vary from view to view. However, such  the content of a presentation box cannot vary from view to view. However, such
 an effect can be achieved by creating several presentation boxes, each with  an effect can be achieved by creating several presentation boxes, each with
 different content and visible in different views.</P>  different content and visible in different views.</p>
 <P>  <p>
 The <TT>Content</TT> rule also applies to elements defined as references in  The <tt>Content</tt> rule also applies to elements defined as references in
 the structure schema.  In this case, the content defined by the rule  must be  the structure schema.  In this case, the content defined by the rule  must be
 a constant.  It is this content which appears on the screen or paper to  a constant.  It is this content which appears on the screen or paper to
 represent references of the type to which the rule applies.  A reference can  represent references of the type to which the rule applies.  A reference can
 have a <TT>Content</TT> rule or a <A href="#sectc4234"><TT>Copy</TT> rule</A>  have a <tt>Content</tt> rule or a <a href="#sectc4234"><tt>Copy</tt> rule</a>
 for each view.  If neither of these rules appears, the reference is displayed  for each view.  If neither of these rules appears, the reference is displayed
 as <TT>[*]</TT>, which is equivalent to the rule:</P>  as <tt>[*]</tt>, which is equivalent to the rule:</p>
 <PRE>  <pre>     Content: Text '[*]';</pre>
      Content: Text '[*]';  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 The content of the presentation box created to make the chapter number and  The content of the presentation box created to make the chapter number and
 section number appear before each section title can be defined by:</P>  section number appear before each section title can be defined by:</p>
 <PRE>  <pre>BOXES
 BOXES  
      SectionNumBox :       SectionNumBox :
           BEGIN            BEGIN
           Content : NumSection;            Content : NumSection;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  if the <tt>NumSection</tt> variable has been defined in the variable
 if the <TT>NumSection</TT> variable has been defined in the variable definition  definition section of the presentation schema.  Otherwise the <tt>Content</tt>
 section of the presentation schema.  Otherwise the <TT>Content</TT> would be  would be written:</p>
 written:</P>  <pre>BOXES
 <PRE>  
 BOXES  
      SectionNumBox :       SectionNumBox :
           BEGIN            BEGIN
           Content : (VALUE (ChapterCtr, Roman) TEXT '.'            Content : (VALUE (ChapterCtr, Roman) TEXT '.'
                      VALUE (SectionCtr, Arabic));                       VALUE (SectionCtr, Arabic));
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  To specify that a page footer should contain all elements of the <tt>Note</tt>
 To specify that a page footer should contain all elements of the <TT>Note</TT>  type are referred to in the page, the following rule is written:</p>
 type are referred to in the page, the following rule is written:</P>  <pre>BOXES
 <PRE>  
 BOXES  
      NotesFooterBox :       NotesFooterBox :
           BEGIN            BEGIN
           Content : Note;            Content : Note;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  <tt>Note</tt> is defined as an associated element in the structure schema and
 <TT>Note</TT> is defined as an associated element in the structure schema and  NotesFooterBox is created by a page box of the primary view.</p>
 NotesFooterBox is created by a page box of the primary view.</P>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4232>Presentation box creation</A></H3>  
   
 <P>  <h3><a name="sectc4232">Presentation box creation</a></h3>
   <p>
 A creation rule specifies that a presentation box should be created when an  A creation rule specifies that a presentation box should be created when an
 element of the type to which the rule is attached appears in the document.</P>  element of the type to which the rule is attached appears in the document.</p>
 <P>  <p>
 A keyword specifies the position, relative to the creating box, at which the  A keyword specifies the position, relative to the creating box, at which the
 created box will be placed in the structure:</P>  created box will be placed in the structure:</p>
 <DL>  <dl>
 <DT><TT>CreateFirst</TT></DT>  <dt><tt>CreateFirst</tt></dt>
 <DD>specifies that the box should be created as the first box of the next lower  <dd>
   specifies that the box should be created as the first box of the next lower
 level, before any already existing boxes, and only if the beginning of the  level, before any already existing boxes, and only if the beginning of the
 creating element is visible;  creating element is visible;
 </DD>  </dd>
 <DT><TT>CreateLast</TT></DT>  <dt><tt>CreateLast</tt></dt>
 <DD>specifies that the box should be created as the last box of the next lower  <dd>
 level, after any existing boxes, and only if the end of the creating element is  specifies that the box should be created as the last box of the next lower
 visible;  level, after any existing boxes, and only if the end of the creating element
 </DD>  is visible;
 <DT><TT>CreateBefore</TT></DT>  </dd>
 <DD>specifies that the box should be created before the creating box, on the  <dt><tt>CreateBefore</tt></dt>
 same level as the creating box, and only if the beginning of the creating  <dd>
 element is visible;  specifies that the box should be created before the creating box, on the same
 </DD>  level as the creating box, and only if the beginning of the creating element
 <DT><TT>CreateAfter</TT></DT>  is visible;
 <DD>specifies that the box should be created after the creating box, on the  </dd>
 same level as the creating box, and only if the beginning of the creating  <dt><tt>CreateAfter</tt></dt>
 element is visible;  <dd>
 </DD>  specifies that the box should be created after the creating box, on the same
 <DT><TT>CreateEnclosing</TT></DT>  level as the creating box, and only if the beginning of the creating element
 <DD>specifies that the box should be created at the upper level relatively to  is visible;
 the creating box, and that it must contain that creating box and all  </dd>
 presentation boxes created by the same creating box.  <dt><tt>CreateEnclosing</tt></dt>
 </DD>  <dd>
 </DL>  specifies that the box should be created at the upper level relatively to the
 <P>  creating box, and that it must contain that creating box and all presentation
 This keyword can be followed by the <TT>Repeated</TT> keyword to indicate that  boxes created by the same creating box.
   </dd>
   </dl>
   <p>
   This keyword can be followed by the <tt>Repeated</tt> keyword to indicate that
 the box must be created for each part of the creating element. These parts  the box must be created for each part of the creating element. These parts
 result from the division of the element by page breaks or column changes.  If  result from the division of the element by page breaks or column changes.  If
 the <TT>Repeated</TT> keyword is missing, the box is only created for the  the <tt>Repeated</tt> keyword is missing, the box is only created for the
 first part of the creating element (<TT>CreateFirst</TT> and  first part of the creating element (<tt>CreateFirst</tt> and
 <TT>CreateBefore</TT> rules) or for the last part (<TT>CreateLast</TT> and  <tt>CreateBefore</tt> rules) or for the last part (<tt>CreateLast</tt> and
 <TT>CreateAfter</TT> rules).</P>  <tt>CreateAfter</tt> rules).</p>
 <P>  <p>
 The type of presentation to be created is specified at the end of the rule  The type of presentation to be created is specified at the end of the rule
 between parentheses.</P>  between parentheses.</p>
 <P>  <p>
 Creation rules cannot appear in the <A href="#sectc427">default  Creation rules cannot appear in the <a href="#sectc427">default presentation
 presentation rules</A>.  The boxes being created should have a  rules</a>.  The boxes being created should have a <tt>Content</tt> rule which
 <TT>Content</TT> rule which indicates their <A  indicates their <a href="#sectc4231">content</a>.</p>
 href="#sectc4231">content</A>.</P>  <p>
 <P>  
 Creation rules can only appear in the block of rules for the primary view;  Creation rules can only appear in the block of rules for the primary view;
 creation is provoked by a document element for all views. However, for each  creation is provoked by a document element for all views. However, for each
 view, the presentation box is only created if the creating element is itself a  view, the presentation box is only created if the creating element is itself a
 box in the view. Moreover, the visibility parameter of the presentation box  box in the view. Moreover, the visibility parameter of the presentation box
 can be adjusted to control the creation of the box on a view-by-view  can be adjusted to control the creation of the box on a view-by-view
 basis.</P>  basis.</p>
 <PRE>  <pre>                     Creation '(' BoxID ')'
                      Creation '(' BoxID ')'  
      Creation      = Create [ 'Repeated' ] .       Creation      = Create [ 'Repeated' ] .
      Create        ='CreateFirst' / 'CreateLast' /       Create        ='CreateFirst' / 'CreateLast' /
                     'CreateBefore' / 'CreateAfter' /                      'CreateBefore' / 'CreateAfter' /
                     'CreateEnclosing' .                      'CreateEnclosing' .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Let us define an object type, called Table, which is composed of a sequence of  Let us define an object type, called Table, which is composed of a sequence of
 columns, all having the same fixed width, where the columns are separated by  columns, all having the same fixed width, where the columns are separated by
 vertical lines.  There is a line to the left of the first column and one to the  vertical lines.  There is a line to the left of the first column and one to
 right of the last.  Each column has a variable number of cells, placed one on  the right of the last.  Each column has a variable number of cells, placed one
 top of the other and separated by horizontal lines.  There are no horizontal  on top of the other and separated by horizontal lines.  There are no
 lines above the first cell or below the last cell.  The text contained in  horizontal lines above the first cell or below the last cell.  The text
 each cell is  broken into lines and these lines are centered horizontally in  contained in each cell is  broken into lines and these lines are centered
 the cell. The logical structure of this object is defined by:</P>  horizontally in the cell. The logical structure of this object is defined
 <PRE>  by:</p>
 Table   = LIST OF (Column);  <pre>Table   = LIST OF (Column);
 Column  = LIST OF (Cell = Text);  Column  = LIST OF (Cell = Text);</pre>
 </PRE>  
   <div class="figure">
 <DIV class="figure">  <hr>
 <HR>  <pre>|                |                |               |
 <PRE>  
 |                |                |               |  
 |  xx xxxx xxxx  |x xxxx xxx xxxxx|  x xxx x xxx  |  |  xx xxxx xxxx  |x xxxx xxx xxxxx|  x xxx x xxx  |
 | xxx xxx xxxx x |   x xx x xxx   | xxxxx xxxx xx |  | xxx xxx xxxx x |   x xx x xxx   | xxxxx xxxx xx |
 |   xxxxx xxxx   |----------------|  xxx xxxxx x  |  |   xxxxx xxxx   |----------------|  xxx xxxxx x  |
Line 6027  Column  = LIST OF (Cell = Text); Line 5996  Column  = LIST OF (Cell = Text);
 |  xxxx xxxx xx  |  xxxx xx x xx  |  xxx xx x xx  |  |  xxxx xxxx xx  |  xxxx xx x xx  |  xxx xx x xx  |
 |----------------| xxx xxxxx xxxx | xxxx xxxx xxx |  |----------------| xxx xxxxx xxxx | xxxx xxxx xxx |
 | xxxxx xxx xxxx |  xxxx xx x xx  |   xxxxx xxx   |  | xxxxx xxx xxxx |  xxxx xx x xx  |   xxxxx xxx   |
 |xxxx xx x xxxxxx| xxxx xx xxxxxx |  xxxxx xxxxx  |  |xxxx xx x xxxxxx| xxxx xx xxxxxx |  xxxxx xxxxx  |</pre>
 </PRE>  <p align=center>
 <P align=center>  <em><a name="table">The design of a table</a></em></p>
 <EM><A name="table">The design of a table</A></EM></P>  <hr>
 <HR>  </div>
 </DIV>  <p>
 <P>  The presentation of the table should resemble the design of the above <a
 The presentation of the table should resemble the design of the above <A  href="#table">figure</a>.  It is defined by the following presentation schema
 href="#table">figure</A>.  It is defined by the following presentation schema  fragment:</p>
 fragment:</P>  <pre>BOXES
 <PRE>  
 BOXES  
      VertLine : BEGIN       VertLine : BEGIN
                 Width : 0.3 cm;                  Width : 0.3 cm;
                 Height : Enclosing . Height;                  Height : Enclosing . Height;
Line 6073  RULES Line 6040  RULES
                 HorizPos : Left = Enclosing . Left;                  HorizPos : Left = Enclosing . Left;
                 Line;                  Line;
                 Adjust : VMiddle;                  Adjust : VMiddle;
                 END;                  END;</pre>
 </PRE>  <p>
 <P>  
 It is useful to note that the horizontal position rule of the first vertical  It is useful to note that the horizontal position rule of the first vertical
 line will not be applied, since there is no preceding box. In this case, the  line will not be applied, since there is no preceding box. In this case, the
 box is simply placed on the left side of the enclosing box.</P>  box is simply placed on the left side of the enclosing box.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc4233>Page layout</A></H3>  
   <h3><a name="sectc4233">Page layout</a></h3>
 <P>  <p>
 The page models specified in the <TT>Page</TT> rule are defined by boxes  The page models specified in the <tt>Page</tt> rule are defined by boxes
 declared in the <TT>BOXES</TT> section of the presentation schema.  Pages are  declared in the <tt>BOXES</tt> section of the presentation schema.  Pages are
 not described as frames which will be filled by the document's text, but as  not described as frames which will be filled by the document's text, but as
 element are inserted in the flow of the document and which mark the page  element are inserted in the flow of the document and which mark the page
 breaks.  Each of these page break elements contains presentation boxes which  breaks.  Each of these page break elements contains presentation boxes which
Line 6095  represent the footer boxes of a page fol Line 6061  represent the footer boxes of a page fol
 page.  The page box itself is the simple line which separates two pages on the  page.  The page box itself is the simple line which separates two pages on the
 screen.  Both the footer and header boxes placed themselves with respect to  screen.  Both the footer and header boxes placed themselves with respect to
 this page box, with the footer being placed above it and the header boxes  this page box, with the footer being placed above it and the header boxes
 being placed above it.</P>  being placed above it.</p>
 <P>  <p>
 The boxes created by a page box are headers and footers and can only place  The boxes created by a page box are headers and footers and can only place
 themselves vertically with respect to the page box itself (which is in fact  themselves vertically with respect to the page box itself (which is in fact
 the separation between two pages).  Besides, it is their vertical position  the separation between two pages).  Besides, it is their vertical position
 rule  which determines whether they are header or footer boxes.  Header and  rule  which determines whether they are header or footer boxes.  Header and
 footer boxes must have an explicit vertical position rule (they must not use  footer boxes must have an explicit vertical position rule (they must not use
 the default rule).</P>  the default rule).</p>
 <P>  <p>
 Footer boxes must have an absolute height or inherit the height of their  Footer boxes must have an absolute height or inherit the height of their
 contents:</P>  contents:</p>
 <PRE>  <pre>Height : Enclosed . Height;</pre>
 Height : Enclosed . Height;  <p>
 </PRE>  
 <P>  
 A page box must have height and width rules and these two rules must be  A page box must have height and width rules and these two rules must be
 specified with constant values, expressed in centimeters, inches, or  specified with constant values, expressed in centimeters, inches, or
 typographer's points.  These two rules are interpreted in a special way for  typographer's points.  These two rules are interpreted in a special way for
 page boxes:  they determine the width of the page and the vertical distance  page boxes:  they determine the width of the page and the vertical distance
 between two page separators, which is the height of the page and its header  between two page separators, which is the height of the page and its header
 and footer together.</P>  and footer together.</p>
 <P>  <p>
 A page box should also have vertical and horizontal position rules and these  A page box should also have vertical and horizontal position rules and these
 two rules should specify the position on the sheet of paper of the rectangle  two rules should specify the position on the sheet of paper of the rectangle
 enclosing the page's contents.  These two rules must position the upper left  enclosing the page's contents.  These two rules must position the upper left
 corner of the enclosing rectangle in relation to the upper left corner of the  corner of the enclosing rectangle in relation to the upper left corner of the
 sheet of paper, considered to be the enclosing element.  In both rules,  sheet of paper, considered to be the enclosing element.  In both rules,
 distances must be expressed in fixed units: centimeters (<TT>cm</TT>), inches  distances must be expressed in fixed units: centimeters (<tt>cm</tt>), inches
 (<TT>in</TT>), or typographer's points (<TT>pt</TT>).  Thus, rules similar to  (<tt>in</tt>), or typographer's points (<tt>pt</tt>).  Thus, rules similar to
 the following should be found in the rules for a page box:</P>  the following should be found in the rules for a page box:</p>
 <PRE>  <pre>BOXES
 BOXES  
    ThePage :     ThePage :
       BEGIN        BEGIN
       VertPos : Top = Enclosing . Top + 3 cm;        VertPos : Top = Enclosing . Top + 3 cm;
       HorizPos : Left = Enclosing . Left + 2.5 cm;        HorizPos : Left = Enclosing . Left + 2.5 cm;
       Width : 16 cm;        Width : 16 cm;
       Height : 22.5 cm;        Height : 22.5 cm;
       END;        END;</pre>
 </PRE>  <p>
 <P>  
 When a document must be page broken, the page models to be constructed are  When a document must be page broken, the page models to be constructed are
 defined in the <TT>BOXES</TT> section of the presentation schema by declaring  defined in the <tt>BOXES</tt> section of the presentation schema by declaring
 page boxes and header and footer boxes.  Also, the <TT>Page</TT> rule is used  page boxes and header and footer boxes.  Also, the <tt>Page</tt> rule is used
 to specify to which parts of the document and to which views each model should  to specify to which parts of the document and to which views each model should
 be applied.</P>  be applied.</p>
 <P>  <p>
 The <TT>Page</TT> rule has only one parameter, given between parentheses after  The <tt>Page</tt> rule has only one parameter, given between parentheses after
 the <TT>Page</TT> keyword.  This parameter is the name of the box which must  the <tt>Page</tt> keyword.  This parameter is the name of the box which must
 serve as the model for page construction.  When a <TT>Page</TT> rule is  serve as the model for page construction.  When a <tt>Page</tt> rule is
 attached to an element type, each time such an element appears in a document,  attached to an element type, each time such an element appears in a document,
 a page break takes place and the page model indicated in the rule is applied  a page break takes place and the page model indicated in the rule is applied
 to all following pages, until reaching the next element which has a  to all following pages, until reaching the next element which has a
 <TT>Page</TT> rule.</P>  <tt>Page</tt> rule.</p>
 <P>  <p>
 The <TT>Page</TT> rule applies to only one view; if it appears in the primary  The <tt>Page</tt> rule applies to only one view; if it appears in the primary
 view's block of rules, a <TT>Page</TT> rule applies only to that view. Thus,  view's block of rules, a <tt>Page</tt> rule applies only to that view. Thus,
 different page models can be defined for the full document and for its table  different page models can be defined for the full document and for its table
 of contents, which is another view of the same document. Some views can be  of contents, which is another view of the same document. Some views can be
 specified with pages, and other views of the same document can be specified  specified with pages, and other views of the same document can be specified
 without pages.</P>  without pages.</p>
 <PRE>  <pre>                   'Page' '(' BoxID ')'</pre>
                    'Page' '(' BoxID ')'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc4234">Box copies</a></h3>
 <H3><A name=sectc4234>Box copies</A></H3>  <p>
   The <tt>Copy</tt> rule can be used for an element which is defined as a
 <P>  
 The <TT>Copy</TT> rule can be used for an element which is defined as a  
 reference in the structure schema.  In this case, the rule specifies, between  reference in the structure schema.  In this case, the rule specifies, between
 parenthesis, the name of the box (declared in the <TT>BOXES</TT> section)  parenthesis, the name of the box (declared in the <tt>BOXES</tt> section)
 which must be produced when this reference appears in the structure of a  which must be produced when this reference appears in the structure of a
 document.  The box produced is a copy (same contents, but possible different  document.  The box produced is a copy (same contents, but possible different
 presentation) of the box type indicated by the parameter between parentheses,  presentation) of the box type indicated by the parameter between parentheses,
 and which is in the element designated by the reference.  The name of a box  and which is in the element designated by the reference.  The name of a box
 can be replaced by type name. Then what is copied is the contents of the  can be replaced by type name. Then what is copied is the contents of the
 element of this type which is inside the referenced element.</P>  element of this type which is inside the referenced element.</p>
 <P>  <p>
 Whether a box name or type name is given, it may be followed by the name of a  Whether a box name or type name is given, it may be followed by the name of a
 structure schema between parentheses.  This signifies that the box or type is  structure schema between parentheses.  This signifies that the box or type is
 defined in the indicated structure schema and not in the structure schema with  defined in the indicated structure schema and not in the structure schema with
 which the rule's presentation schema is associated.</P>  which the rule's presentation schema is associated.</p>
 <P>  <p>
 The <TT>Copy</TT> rule can also be applied to a presentation box.  If the  The <tt>Copy</tt> rule can also be applied to a presentation box.  If the
 presentation box was created by a reference attribute, the rule is applied as  presentation box was created by a reference attribute, the rule is applied as
 in the case of a reference element: the contents of the box having the  in the case of a reference element: the contents of the box having the
 <TT>Copy</TT> rule are based on the element designated by the reference  <tt>Copy</tt> rule are based on the element designated by the reference
 attribute.  For other presentation boxes, the <TT>Copy</TT> rule takes a type  attribute.  For other presentation boxes, the <tt>Copy</tt> rule takes a type
 name parameter which can be followed, between parentheses, by the name of the  name parameter which can be followed, between parentheses, by the name of the
 structure schema in which the type is defined, if it is not defined in the  structure schema in which the type is defined, if it is not defined in the
 same schema.  The contents of the box which has this rule are a copy of the  same schema.  The contents of the box which has this rule are a copy of the
 element of this type which is in the element creating the presentation box, or  element of this type which is in the element creating the presentation box, or
 by default, the box of this type which precedes the presentation box.  This  by default, the box of this type which precedes the presentation box.  This
 last facility is used, for example, to define the running titles in headers or  last facility is used, for example, to define the running titles in headers or
 footers.</P>  footers.</p>
 <PRE>  <pre>                  'Copy' '(' BoxTypeToCopy ')' .
                   'Copy' '(' BoxTypeToCopy ')' .  
   BoxTypeToCopy = BoxID [ ExtStruct ] /    BoxTypeToCopy = BoxID [ ExtStruct ] /
                   ElemID [ ExtStruct ] .                    ElemID [ ExtStruct ] .
   ExtStruct     = '(' ElemID ')' .    ExtStruct     = '(' ElemID ')' .</pre>
 </PRE>  <p>
 <P>  Like the creation rules, the <tt>Copy</tt> rule cannot appear in the <a
 Like the creation rules, the <TT>Copy</TT> rule cannot appear in the <A  href="#sectc427">default presentation rules</a>.  Moreover, this rule can only
 href="#sectc427">default presentation rules</A>.  Moreover, this rule  appear in the primary view's block of rules; the copy rule is applied to all
 can only appear in the primary view's block of rules; the copy rule is applied  views.</p>
 to all views.</P>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  If the following definitions are in the structure schema:</p>
 If the following definitions are in the structure schema:</P>  <pre>Body = LIST OF (Chapter =
 <PRE>  
 Body = LIST OF (Chapter =  
                      BEGIN                       BEGIN
                      ChapterTitle = Text;                       ChapterTitle = Text;
                      ChapterBody = SectionSeq;                       ChapterBody = SectionSeq;
                      END);                       END);
 RefChapter = REFERENCE (Chapter);  RefChapter = REFERENCE (Chapter);</pre>
 </PRE>  <p>
 <P>  then the following presentation rules (among many other rules in the
 then the following presentation rules (among many other rules in  presentation schema) can be specified:</p>
 the presentation schema) can be specified:</P>  <pre>COUNTERS
 <PRE>  
 COUNTERS  
    ChapterCtr : RANK OF Chapter;     ChapterCtr : RANK OF Chapter;
 BOXES  BOXES
    ChapterNumber :     ChapterNumber :
Line 6238  RULES Line 6193  RULES
       BEGIN        BEGIN
       Copy (ChapterNumber);        Copy (ChapterNumber);
       ...        ...
       END;        END;</pre>
 </PRE>  <p>
 <P>  
 which makes the number of the chapter designated by the reference appear in  which makes the number of the chapter designated by the reference appear in
 uppercase roman numerals, in place of the reference to a chapter itself.  uppercase roman numerals, in place of the reference to a chapter itself.
 Alternatively, the chapter title can be made to appear in place of the  Alternatively, the chapter title can be made to appear in place of the
 reference by writing this <TT>Copy</TT>rule:</P>  reference by writing this <tt>Copy</tt>rule:</p>
 <PRE>  <pre>      Copy (ChapterTitle);</pre>
       Copy (ChapterTitle);  <p>
 </PRE>  To define a header box, named <tt>RunningTitle</tt>, which contains the title
 <P>  of the current chapter, the box's contents are defined in this way:</p>
 To define a header box, named <TT>RunningTitle</TT>, which contains the title  <pre>BOXES
 of the current chapter, the box's contents are defined in this way:</P>  
 <PRE>  
 BOXES  
    RunningTitle :     RunningTitle :
       Copy (ChapterTitle);        Copy (ChapterTitle);</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  <hr>
 <HR>  </div>
 </DIV>  
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect5>The T language</A></H1>  
   
   <h1><a name="sect5">The T language</a></h1>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb51>Document translation</A></H2>  
   
 <P>  <h2><a name="sectb51">Document translation</a></h2>
   <p>
 Because of its document model, Thot can produce documents in a high-level  Because of its document model, Thot can produce documents in a high-level
 abstract form.  This form, called the <EM>canonical form</EM> is specific to  abstract form.  This form, called the <em>canonical form</em> is specific to
 Thot; it is well suited to the editor's manipulations, but it does not  Thot; it is well suited to the editor's manipulations, but it does not
 necessarily suit other operations which might be applied to documents. Because  necessarily suit other operations which might be applied to documents. Because
 of this, the Thot editor offers the choice of saving documents in its own form  of this, the Thot editor offers the choice of saving documents in its own form
 (the canonical form) or a format defined by the user.  In the latter case, the  (the canonical form) or a format defined by the user.  In the latter case, the
 Thot document is transformed by the translation program.  This facility can  Thot document is transformed by the translation program.  This facility can
 also be used to export documents from Thot to systems using other  also be used to export documents from Thot to systems using other
 formalisms.</P>  formalisms.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc511>Translation principles</A></H3>  
   
 <P>  <h3><a name="sectc511">Translation principles</a></h3>
   <p>
 Document translation allows the export of documents to other systems which do  Document translation allows the export of documents to other systems which do
 not accept Thot's canonical form.  Translation can be used to export document  not accept Thot's canonical form.  Translation can be used to export document
 to source-based formatters like T<SUB><BIG>E</BIG></SUB>X,  to source-based formatters like T<sub><big>E</big></sub>X,
 L<SUP>A</SUP>T<SUB><BIG>E</BIG></SUB>X, and <TT>troff</TT>.  It can also be  L<sup>A</sup>T<sub><big>E</big></sub>X, and <tt>troff</tt>.  It can also be
 used to translate documents into interchange formats like SGML or HTML.  To  used to translate documents into interchange formats like SGML or HTML.  To
 allow the widest range of possible exports, Thot does not limit the choice of  allow the widest range of possible exports, Thot does not limit the choice of
 translations, but rather allows the user to define the formalisms into which  translations, but rather allows the user to define the formalisms into which
 documents can be translated.</P>  documents can be translated.</p>
 <P>  <p>
 For each document or object class, a set of translation rules can be defined,  For each document or object class, a set of translation rules can be defined,
 specifying how the canonical form should be transformed into a given  specifying how the canonical form should be transformed into a given
 formalism.  These translation rules are grouped into <EM>translation  formalism.  These translation rules are grouped into <em>translation
 schemas</EM>, each schema containing the rules necessary to translate a  schemas</em>, each schema containing the rules necessary to translate a
 generic logical structure (document or object structure) into a particular  generic logical structure (document or object structure) into a particular
 formalism.  The same generic logical structure can have several different  formalism.  The same generic logical structure can have several different
 translation schemas, each defining translation rules for a different  translation schemas, each defining translation rules for a different
 formalism.</P>  formalism.</p>
 <P>  <p>
 Like presentation schemas, translation schemas are generic.  Thus, they apply  Like presentation schemas, translation schemas are generic.  Thus, they apply
 to an entire object or document class and permit translation of all documents  to an entire object or document class and permit translation of all documents
 or objects of that class.</P>  or objects of that class.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc512>Translation procedure</A></H3>  
   
 <P>  <h3><a name="sectc512">Translation procedure</a></h3>
   <p>
 The translator works on the specific logical structure of the document being  The translator works on the specific logical structure of the document being
 translated.  It traverses the primary tree of this logical structure in  translated.  It traverses the primary tree of this logical structure in
 pre-order and, at each node encountered, it applies the corresponding  pre-order and, at each node encountered, it applies the corresponding
 translation rules defined in the translation schema. Translation can be  translation rules defined in the translation schema. Translation can be
 associated:</P>  associated:</p>
 <UL>  <ul>
 <LI>with element types defined in the structure schema,  <li>
 <LI>with global or local attributes defined in the structure schema,  with element types defined in the structure schema,
 <LI>with specific presentation rules,  <li>
 <LI>with the content of the leaves of  the structure (characters, symbols and  with global or local attributes defined in the structure schema,
   <li>
   with specific presentation rules,
   <li>
   with the content of the leaves of  the structure (characters, symbols and
 graphical elements)  graphical elements)
 </UL>  </ul>
 <P>  <p>
 Thus, for each node, the translator applies all rules associated with the  Thus, for each node, the translator applies all rules associated with the
 element type, all rules associated with each attribute (local or global)  element type, all rules associated with each attribute (local or global)
 carried by the element, and if the element is a leaf of the tree, it also  carried by the element, and if the element is a leaf of the tree, it also
 applies translation rules for characters, symbols, or graphical elements,  applies translation rules for characters, symbols, or graphical elements,
 depending on the type of the leaf.</P>  depending on the type of the leaf.</p>
 <P>  <p>
 Rules associated with the content of leaves are different from all other  Rules associated with the content of leaves are different from all other
 rules: they specify only how to translate character strings, symbols, and  rules: they specify only how to translate character strings, symbols, and
 graphical elements.  All other rules, whether associated with element types,  graphical elements.  All other rules, whether associated with element types,
 with specific presentation rules or with attributes, are treated similarly.  with specific presentation rules or with attributes, are treated similarly.
 These rules primarily allow:</P>  These rules primarily allow:</p>
 <UL>  <ul>
 <LI>generation of a text constant or variable before or after the contents of  <li>
 an element,  generation of a text constant or variable before or after the contents of an
 <LI>modification of the order in which elements appear after translation,  element,
 <LI>removal of an element in the translated document,  <li>
 <LI>and writing messages on the user's terminal during translation.  modification of the order in which elements appear after translation,
 </UL>  <li>
 </DIV>  removal of an element in the translated document,
 </DIV>  <li>
   and writing messages on the user's terminal during translation.
   </ul>
   </div>
   </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb52>Translation definition language</A></H2>  
   
 <P>  <h2><a name="sectb52">Translation definition language</a></h2>
   <p>
 Translation schemas are written in a custom language, called T, which is  Translation schemas are written in a custom language, called T, which is
 described in the rest of this chapter.  The grammar of T is specified using  described in the rest of this chapter.  The grammar of T is specified using
 the same <A href="#sectc321">meta-language</A> as was used for the S and P  the same <a href="#sectc321">meta-language</a> as was used for the S and P
 languages and the translation schemas are written using the same conventions  languages and the translation schemas are written using the same conventions
 as the structure and presentation schemas.  In particular, the keywords of the  as the structure and presentation schemas.  In particular, the keywords of the
 T language (the stings between apostrophes in the following syntax rules) can  T language (the stings between apostrophes in the following syntax rules) can
 be written in any combination of upper-case and lower-case letters, but  be written in any combination of upper-case and lower-case letters, but
 identifiers created by the programmer must always be written in the same  identifiers created by the programmer must always be written in the same
 way.</P>  way.</p>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc521>Organization of a translation schema</A></H3>  
   
 <P>  <h3><a name="sectc521">Organization of a translation schema</a></h3>
 A translation schema is begun by the <TT>TRANSLATION</TT> keyword and is  <p>
 terminated by the <TT>END</TT> keyword.  The <TT>TRANSLATION</TT> keyword is  A translation schema is begun by the <tt>TRANSLATION</tt> keyword and is
   terminated by the <tt>END</tt> keyword.  The <tt>TRANSLATION</tt> keyword is
 followed by the name of the generic structure for which a translation is being  followed by the name of the generic structure for which a translation is being
 defined and a semicolon.  This name must be identical to the name which  defined and a semicolon.  This name must be identical to the name which
 appears after the <TT>STRUCTURE</TT> keyword in the corresponding structure  appears after the <tt>STRUCTURE</tt> keyword in the corresponding structure
 schema.</P>  schema.</p>
 <P>  <p>
 After this declaration of the structure, the following material appears in  After this declaration of the structure, the following material appears in
 order:</P>  order:</p>
 <UL>  <ul>
 <LI>the length of lines produced by the translation,  <li>
 <LI>the character delimiting the end of the line,  the length of lines produced by the translation,
 <LI>the character string which the translator will insert if it must  <li>
 line-break the translated text,  the character delimiting the end of the line,
 <LI>declarations of  <li>
 <UL>  the character string which the translator will insert if it must line-break
 <LI>buffers,  the translated text,
 <LI>counters,  <li>
 <LI>constants,  declarations of
 <LI>variables,  <ul>
 </UL>  <li>
 <LI>translation rules associated with element types,  buffers,
 <LI>translation rules associated with attributes,  <li>
 <LI>translation rules associated with specific presentation rules,  counters,
 <LI>translation rules associated with characters strings, symbols and  <li>
 graphical elements.  constants,
 </UL>  <li>
 <P>  variables,
   </ul>
   <li>
   translation rules associated with element types,
   <li>
   translation rules associated with attributes,
   <li>
   translation rules associated with specific presentation rules,
   <li>
   translation rules associated with characters strings, symbols and graphical
   elements.
   </ul>
   <p>
 Each of these sections is introduced by a keyword followed by a sequence of  Each of these sections is introduced by a keyword followed by a sequence of
 declarations.  All of these sections are optional, expect for the translation  declarations.  All of these sections are optional, expect for the translation
 rules associated with element types. Many <TT>TEXTTRANSLATE</TT> sections can  rules associated with element types. Many <tt>TEXTTRANSLATE</tt> sections can
 appear, each defining the rules for translating character strings of a  appear, each defining the rules for translating character strings of a
 particular alphabet.</P>  particular alphabet.</p>
 <PRE>  <pre>     TransSchema ='TRANSLATION' ElemID ';'
      TransSchema ='TRANSLATION' ElemID ';'  
                 [ 'LINELENGTH' LineLength ';' ]                  [ 'LINELENGTH' LineLength ';' ]
                 [ 'LINEEND' CHARACTER ';' ]                  [ 'LINEEND' CHARACTER ';' ]
                 [ 'LINEENDINSERT' STRING ';' ]                  [ 'LINEENDINSERT' STRING ';' ]
Line 6411  particular alphabet.</P> Line 6380  particular alphabet.</P>
                 &lt; 'TEXTTRANSLATE' TextTransSeq >                  &lt; 'TEXTTRANSLATE' TextTransSeq >
                 [ 'SYMBTRANSLATE' TransSeq ]                  [ 'SYMBTRANSLATE' TransSeq ]
                 [ 'GRAPHTRANSLATE' TransSeq ]                  [ 'GRAPHTRANSLATE' TransSeq ]
                   'END' .                    'END' .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc522>Line length</A></H3>  
   
 <P>  <h3><a name="sectc522">Line length</a></h3>
 If a <TT>LINELENGTH</TT> instruction is present after the structure  <p>
   If a <tt>LINELENGTH</tt> instruction is present after the structure
 declaration, the translator divides the text it produces into lines, each line  declaration, the translator divides the text it produces into lines, each line
 having a length less than or equal to the integer which follows the  having a length less than or equal to the integer which follows the
 <TT>LINELENGTH</TT> keyword.  This maximum line length is expressed as a  <tt>LINELENGTH</tt> keyword.  This maximum line length is expressed as a
 number of characters.  The end of the line is marked by the character defined  number of characters.  The end of the line is marked by the character defined
 by the <TT>LINEEND</TT> instruction.  When the translator breaks the lines on  by the <tt>LINEEND</tt> instruction.  When the translator breaks the lines on
 a space character in generated text, this space will be replaced by the  a space character in generated text, this space will be replaced by the
 character string defined by the <TT>LINEENDINSERT</TT> instruction.</P>  character string defined by the <tt>LINEENDINSERT</tt> instruction.</p>
 <P>  <p>
 If the <TT>LINEEND</TT> instruction is not defined then the linefeed character  If the <tt>LINEEND</tt> instruction is not defined then the linefeed character
 (octal code 12) is used as the default line end character. If the  (octal code 12) is used as the default line end character. If the
 <TT>LINEENDINSERT</TT> instruction is not defined, the linefeed character is  <tt>LINEENDINSERT</tt> instruction is not defined, the linefeed character is
 inserted at the end of the produced lines.  If there is no <TT>LINELENGTH</TT>  inserted at the end of the produced lines.  If there is no <tt>LINELENGTH</tt>
 instruction, the translated text is not divided into lines.  Otherwise, if the  instruction, the translated text is not divided into lines.  Otherwise, if the
 translation rules generate line end marks, these marks remain in the  translation rules generate line end marks, these marks remain in the
 translated text, but the length of the lines is not controlled by the  translated text, but the length of the lines is not controlled by the
 translator.</P>  translator.</p>
 <PRE>  <pre>     LineLength = NUMBER .</pre>
      LineLength = NUMBER .  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  To limit the lines produced by the translator to a length of 80 characters,
 <P>  the following rule is written at the beginning of the translation schema.</p>
 To limit the lines produced by the translator to a length of 80 characters, the  <pre>LineLength 80;</pre>
 following rule is written at the beginning of the translation schema.</P>  </blockquote>
 <PRE>  </div>
 LineLength 80;  
 </PRE>  
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc523>Buffers</A></H3>  
   
 <P>  <h3><a name="sectc523">Buffers</a></h3>
   <p>
 A buffer is a  unit of memory managed by the translator, which can either  A buffer is a  unit of memory managed by the translator, which can either
 contain text read from the terminal during the translation (see the <A  contain text read from the terminal during the translation (see the <a
 href="#sectc5212"><TT>Read</TT> rule</A>), or the name of the last picture  href="#sectc5212"><tt>Read</tt> rule</a>), or the name of the last picture
 (bit-map) encountered by the translator in its traversal of the document.  (bit-map) encountered by the translator in its traversal of the document.
 Remember the pictures are stored in files that are separate for the document  Remember the pictures are stored in files that are separate for the document
 files and that the canonical form contains only the names of the files in  files and that the canonical form contains only the names of the files in
 which the pictures are found.</P>  which the pictures are found.</p>
 <P>  <p>
 Thus, there are two types of buffers:  buffers for reading from the terminal  Thus, there are two types of buffers:  buffers for reading from the terminal
 (filled by the <TT>Read</TT> rule) and the buffer of picture names (containing  (filled by the <tt>Read</tt> rule) and the buffer of picture names (containing
 the name of the last picture encountered).  A translation schema can use  the name of the last picture encountered).  A translation schema can use
 either type, one or several read buffers and one (and only one) picture name  either type, one or several read buffers and one (and only one) picture name
 buffer.</P>  buffer.</p>
 <P>  <p>
 If any buffers are used, the <TT>BUFFERS</TT> keyword must be present,  If any buffers are used, the <tt>BUFFERS</tt> keyword must be present,
 followed by declarations of every buffer used in the translation schema.  Each  followed by declarations of every buffer used in the translation schema.  Each
 buffer declaration  is composed only of the name of the buffer, chosen freely  buffer declaration  is composed only of the name of the buffer, chosen freely
 by the programmer.  The picture name buffer is identified by the  by the programmer.  The picture name buffer is identified by the
 <TT>Picture</TT> keyword, between parentheses, following the buffer name.  The  <tt>Picture</tt> keyword, between parentheses, following the buffer name.  The
 <TT>Picture</TT> keyword may only appear once.  Each buffer declaration is  <tt>Picture</tt> keyword may only appear once.  Each buffer declaration is
 terminated by a semicolon.</P>  terminated by a semicolon.</p>
 <PRE>  <pre>     BufferSeq = Buffer &lt; Buffer > .
      BufferSeq = Buffer &lt; Buffer > .  
      Buffer    = BufferID [ '(' 'Picture' ')' ] ';' .       Buffer    = BufferID [ '(' 'Picture' ')' ] ';' .
      BufferID  = NAME .       BufferID  = NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 The following buffer declarations create a picture name buffer named  The following buffer declarations create a picture name buffer named
 <TT>pictureName</TT> and a read buffer named <A  <tt>pictureName</tt> and a read buffer named <a
 name="destname"><TT>DestName</TT></A>:</P>  name="destname"><tt>DestName</tt></a>:</p>
 <PRE>  <pre>BUFFERS
 BUFFERS       pictureName (Picture); DestName;</pre>
      pictureName (Picture); DestName;  </blockquote>
 </PRE>  </div>
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc524>Counters</A></H3>  
   
 <P>  <h3><a name="sectc524">Counters</a></h3>
   <p>
 Certain translation rules generate text that varies according to the context  Certain translation rules generate text that varies according to the context
 of the element to which the rules apply.  Variable text is defined either in  of the element to which the rules apply.  Variable text is defined either in
 the <A href="#sectc526"><TT>VAR</TT> section</A> of the translation schema or  the <a href="#sectc526"><tt>VAR</tt> section</a> of the translation schema or
 in the rule itself (see the <TT>Create</TT> and <TT>Write</TT> rules).  Both  in the rule itself (see the <tt>Create</tt> and <tt>Write</tt> rules).  Both
 types of definition rely on counters for the calculation of variable  types of definition rely on counters for the calculation of variable
 material.</P>  material.</p>
 <P>  <p>
 There are two types of counter: counters whose value is explicitely computed  There are two types of counter: counters whose value is explicitely computed
 by applying <A href="#sectc5221"><TT>Set</TT> and <TT>Add</TT> rules</A>, and  by applying <a href="#sectc5221"><tt>Set</tt> and <tt>Add</tt> rules</a>, and
 counters whose value is computed by a function associated with the counter.  counters whose value is computed by a function associated with the counter.
 Those functions allow the same calculations as can be used in presentation  Those functions allow the same calculations as can be used in presentation
 schemas. As in a presentation schema, counters must be defined in the  schemas. As in a presentation schema, counters must be defined in the
 <TT>COUNTERS</TT> section of the translation schema before they are used.</P>  <tt>COUNTERS</tt> section of the translation schema before they are used.</p>
 <P>  <p>
 When counters are used in a translation schema, the <TT>COUNTERS</TT> keyword  When counters are used in a translation schema, the <tt>COUNTERS</tt> keyword
 is followed by the declarations of every counter used.  Each declaration is  is followed by the declarations of every counter used.  Each declaration is
 composed of the counter's name possibly followed by a colon and the counting  composed of the counter's name possibly followed by a colon and the counting
 function to be used for the counter.  The declaration is terminated by a  function to be used for the counter.  The declaration is terminated by a
 semi-colon. If the counter is explicitely computed by <TT>Set</TT> and  semi-colon. If the counter is explicitely computed by <tt>Set</tt> and
 <TT>Add</TT> rules, no counting function is indicated. If a counting function  <tt>Add</tt> rules, no counting function is indicated. If a counting function
 is indicated, <TT>Set</TT> and <TT>Add</TT> rules cannot be applied to that  is indicated, <tt>Set</tt> and <tt>Add</tt> rules cannot be applied to that
 counter.</P>  counter.</p>
 <P>  <p>
 The counting function indicates how the counter's value will be computed.  The counting function indicates how the counter's value will be computed.
 Three functions are available: <TT>Rank</TT>, <TT>Rlevel</TT>, and  Three functions are available: <tt>Rank</tt>, <tt>Rlevel</tt>, and
 <TT>Set</TT>.</P>  <tt>Set</tt>.</p>
 <UL>  <ul>
 <LI><TT>Rank of ElemID</TT> indicates that the counter's value is the rank of  <li>
 the element of type <TT>ElemID</TT> which encloses the element for which the  <tt>Rank of ElemID</tt> indicates that the counter's value is the rank of the
   element of type <tt>ElemID</tt> which encloses the element for which the
 counter is being evaluated.  For the purposes of this function, an element of  counter is being evaluated.  For the purposes of this function, an element of
 type <TT>ElemID</TT> is considered to enclose itself.  This function is  type <tt>ElemID</tt> is considered to enclose itself.  This function is
 primarily used  when the element of type <TT>ElemID</TT> is part of an  primarily used  when the element of type <tt>ElemID</tt> is part of an
 aggregate or list, in which case the counter's value is the element's rank in  aggregate or list, in which case the counter's value is the element's rank in
 its list or aggregate.  Note that, unlike the <TT>Rank</TT> function for  its list or aggregate.  Note that, unlike the <tt>Rank</tt> function for
 presentation schemas, the <TT>Page</TT> keyword cannot be used in place of the  presentation schemas, the <tt>Page</tt> keyword cannot be used in place of the
 <TT>ElemID</TT>.  <tt>ElemID</tt>.
 <P>  <p>
 The type name <TT>ElemID</TT> can be followed by an integer.  That number  The type name <tt>ElemID</tt> can be followed by an integer.  That number
 represents the relative level, among the ancestors of the concerned element,  represents the relative level, among the ancestors of the concerned element,
 of the element whose rank is asked.  If that relative level <I>n</I> is  of the element whose rank is asked.  If that relative level <i>n</i> is
 unsigned, the <I>n<SUP>th</SUP></I> element of type <TT>ElemID</TT> encountered  unsigned, the <i>n<sup>th</sup></i> element of type <tt>ElemID</tt>
 when travelling the logical structure from the root to the concerned element is  encountered when travelling the logical structure from the root to the
 taken into account.  If the relative level is negative, the logical structure  concerned element is taken into account.  If the relative level is negative,
 is travelled in the other direction, from the concerned element to the  the logical structure is travelled in the other direction, from the concerned
 root.</P>  element to the root.</p>
 <LI><TT>Rlevel of ElemID</TT> indicates that the counter's values is the  <li>
 relative level in the tree of the element for which the counter is being  <tt>Rlevel of ElemID</tt> indicates that the counter's values is the relative
 evaluated.  The counter counts the number of elements of type <TT>ElemID</TT>  level in the tree of the element for which the counter is being evaluated. The
 which are found on the path between the root of the document's logical  counter counts the number of elements of type <tt>ElemID</tt> which are found
 structure tree and the element (inclusive).  on the path between the root of the document's logical structure tree and the
 <LI><TT>Set n on Type1 Add m on Type2</TT> indicates that the counter's value  element (inclusive).
 is calculated as follows:  in traversing the document from the beginning to  <li>
 the element for which the counter is being evaluated, the counter is set to  <tt>Set n on Type1 Add m on Type2</tt> indicates that the counter's value is
 the value <TT>n</TT> each time a <TT>Type1</TT> element is encountered and is  calculated as follows:  in traversing the document from the beginning to the
 incremented by the amount <TT>m</TT> each time a <TT>Type2</TT> element is  element for which the counter is being evaluated, the counter is set to the
 encountered.  The initial value <TT>n</TT> and the increment <TT>m</TT> are  value <tt>n</tt> each time a <tt>Type1</tt> element is encountered and is
   incremented by the amount <tt>m</tt> each time a <tt>Type2</tt> element is
   encountered.  The initial value <tt>n</tt> and the increment <tt>m</tt> are
 integers.  integers.
 </UL>  </ul>
 <P>  <p>
 As in a presentation schema, the <TT>Rank</TT> and <TT>Set</TT> functions can  As in a presentation schema, the <tt>Rank</tt> and <tt>Set</tt> functions can
 be modified by a numeric attribute which changes their initial value. This is  be modified by a numeric attribute which changes their initial value. This is
 indicated by the <TT>Init</TT> keyword followed by the numeric attribute's  indicated by the <tt>Init</tt> keyword followed by the numeric attribute's
 name.  The <TT>Set</TT> function takes the value of the attribute instead of  name.  The <tt>Set</tt> function takes the value of the attribute instead of
 the <TT>InitValue</TT> (<TT>n</TT>).  For the <TT>Rank</TT> function, the  the <tt>InitValue</tt> (<tt>n</tt>).  For the <tt>Rank</tt> function, the
 value of the attribute is considered to be the rank of the first element of  value of the attribute is considered to be the rank of the first element of
 the list (rather than the normal value of 1). Subsequent items in the list  the list (rather than the normal value of 1). Subsequent items in the list
 have their ranks shifted accordingly.  In both cases, the attribute must be  have their ranks shifted accordingly.  In both cases, the attribute must be
 numeric and must be a local attribute of the root of the document itself.</P>  numeric and must be a local attribute of the root of the document itself.</p>
 <PRE>  <pre>     CounterSeq  = Counter &lt; Counter > .
      CounterSeq  = Counter &lt; Counter > .  
      Counter     = CounterID [ ':' CounterFunc ] ';' .       Counter     = CounterID [ ':' CounterFunc ] ';' .
      CounterID   = NAME .       CounterID   = NAME .
      CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]       CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]
Line 6582  numeric and must be a local attribute of Line 6544  numeric and must be a local attribute of
      InitValue   = NUMBER .       InitValue   = NUMBER .
      Increment   = NUMBER .       Increment   = NUMBER .
      ElemID      = NAME .       ElemID      = NAME .
      AttrID      = NAME .       AttrID      = NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  If the body of a chapter is defined in the structure schema by:</p>
 If the body of a chapter is defined in the structure schema by:</P>  <pre>Chapter_Body = LIST OF
 <PRE>  
 Chapter_Body = LIST OF  
          (Section = BEGIN           (Section = BEGIN
                     Section_Title = Text;                      Section_Title = Text;
                     Section_Body  = BEGIN                      Section_Body  = BEGIN
Line 6598  Chapter_Body = LIST OF Line 6558  Chapter_Body = LIST OF
                                     Section;                                      Section;
                                     END;                                      END;
                     END                      END
          );           );</pre>
 </PRE>  <p>
 <P>  (sections are defined recursively), a counter can be defined giving the <a
 (sections are defined recursively), a counter can be defined giving the <A  name="sectnum">number of a section</a> within its level in the hierarchy:</p>
 name="sectnum">number of a section</A> within its level in the hierarchy:</P>  <pre>COUNTERS
 <PRE>     SectionNumber : Rank of Section;</pre>
 COUNTERS  <p>
    SectionNumber : Rank of Section;  A counter holding the hierarchic level of a section:</p>
 </PRE>  <pre>   SectionLevel : Rlevel of Section;</pre>
 <P>  <p>
 A counter holding the hierarchic level of a section:</P>  A <a name="uniquenum">counter</a> which sequentially numbers all the
 <PRE>  document's sections, whatever their hierarchic level:</p>
    SectionLevel : Rlevel of Section;  <pre>   UniqueSectNum : Set 0 on Document Add 1 on Section;</pre>
 </PRE>  </blockquote>
 <P>  </div>
 A <A name="uniquenum">counter</A> which sequentially numbers all the document's  
 sections, whatever their hierarchic level:</P>  
 <PRE>  
    UniqueSectNum : Set 0 on Document Add 1 on Section;  
 </PRE>  
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc525>Constants</A></H3>  
   
 <P>  <h3><a name="sectc525">Constants</a></h3>
   <p>
 A common feature of translation rules is the generation of constant text. This  A common feature of translation rules is the generation of constant text. This
 text can be defined in the rule that generates it (see for example the <A  text can be defined in the rule that generates it (see for example the <a
 href="#sectc5210"><TT>Create</TT></A> and <A href="#sectc5211"><TT>Write</TT></A>  href="#sectc5210"><tt>Create</tt></a> and <a
 rules); but it can also be defined once in the constant declaration section  href="#sectc5211"><tt>Write</tt></a> rules); but it can also be defined once
 and used many times in different rules.  The latter option is preferable when  in the constant declaration section and used many times in different rules.
 the same text is used in several rules or several <A  The latter option is preferable when the same text is used in several rules or
 href="#sectc526">variables</A>.</P>  several <a href="#sectc526">variables</a>.</p>
 <P>  <p>
 The <TT>CONST</TT> keyword begins the constant declaration section of the  The <tt>CONST</tt> keyword begins the constant declaration section of the
 translation schema.  It must be omitted if no constants are declared. Each  translation schema.  It must be omitted if no constants are declared. Each
 constant declaration is composed of the constant name, an equals sign, and the  constant declaration is composed of the constant name, an equals sign, and the
 constant's value, which is a character string between apostrophes.  A constant  constant's value, which is a character string between apostrophes.  A constant
 declaration is terminated by a semicolon.</P>  declaration is terminated by a semicolon.</p>
 <PRE>  <pre>     ConstSeq   = Const &lt; Const > .
      ConstSeq   = Const &lt; Const > .  
      Const      = ConstID '=' ConstValue ';' .       Const      = ConstID '=' ConstValue ';' .
      ConstID    = NAME .       ConstID    = NAME .
      ConstValue = STRING .       ConstValue = STRING .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong><a name="levelexample">Example:</a></strong></p>
 <STRONG><A name="levelexample">Example:</A></STRONG></P>  <p>
 <P>  The following rule assigns the name <tt>TxtLevel</tt> to the character string
 The following rule assigns the name <TT>TxtLevel</TT> to the character string  ``Level'':</p>
 ``Level'':</P>  <pre>CONST
 <PRE>       TxtLevel = 'Level';</pre>
 CONST  </blockquote>
      TxtLevel = 'Level';  </div>
 </PRE>  
 </BLOCKQUOTE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc526>Variables</A></H3>  
   
 <P>  <h3><a name="sectc526">Variables</a></h3>
   <p>
 Variables allow to define variable text which is generated by the  Variables allow to define variable text which is generated by the
 <TT>Create</TT> and <TT>Write</TT> rules.  They are also used to define  <tt>Create</tt> and <tt>Write</tt> rules.  They are also used to define file
 file names which are used in the <TT>Create</TT>, <TT>ChangeMainFile</TT>,  names which are used in the <tt>Create</tt>, <tt>ChangeMainFile</tt>,
 <TT>RemoveFile</TT>, and <TT>Indent</TT> rules.  Variables can be defined either  <tt>RemoveFile</tt>, and <tt>Indent</tt> rules.  Variables can be defined
 in the <TT>VAR</TT> section of the translation schema or directly in the rules  either in the <tt>VAR</tt> section of the translation schema or directly in
 which use them.  Variables that define file names must be declared in the  the rules which use them.  Variables that define file names must be declared
 <TT>VAR</TT> section, and when the same variable is used several times in the  in the <tt>VAR</tt> section, and when the same variable is used several times
 translation schema, it makes sense to define it globally in the <TT>VAR</TT>  in the translation schema, it makes sense to define it globally in the
 section.  This section is only present if at least one variable is defined  <tt>VAR</tt> section.  This section is only present if at least one variable
 globally.</P>  is defined globally.</p>
 <P>  <p>
 After the <TT>VAR</TT> keyword, each global variable is defined by its name, a  After the <tt>VAR</tt> keyword, each global variable is defined by its name, a
 colon separator and a sequence of functions (at least one function). Each  colon separator and a sequence of functions (at least one function). Each
 variable definition is terminated by a semicolon. Functions determine the  variable definition is terminated by a semicolon. Functions determine the
 different parts which together give the value of the variable.  The value is  different parts which together give the value of the variable.  The value is
 obtained by concatenating the strings produced by each of the functions. Seven  obtained by concatenating the strings produced by each of the functions. Seven
 types of functions are available.  Each variable definition may use any number  types of functions are available.  Each variable definition may use any number
 of functions of each type.</P>  of functions of each type.</p>
 <UL>  <ul>
 <LI>The function <TT>Value(Counter)</TT>returns a string representing the  <li>
 value taken by the counter when it is evaluated for the element in whose rule  The function <tt>Value(Counter)</tt>returns a string representing the value
 the variable is used.  The counter must have been declared in the  taken by the counter when it is evaluated for the element in whose rule the
 <TT>COUNTERS</TT> section of the translation schema.  When the counter is  variable is used.  The counter must have been declared in the
   <tt>COUNTERS</tt> section of the translation schema.  When the counter is
 expressed in arabic numerals, the counter name can be followed by a colon and  expressed in arabic numerals, the counter name can be followed by a colon and
 an integer indicating a minimum length (number of characters) for the string;  an integer indicating a minimum length (number of characters) for the string;
 if the counter's value is normally expressed with fewer characters than the  if the counter's value is normally expressed with fewer characters than the
 required minimum, zeroes are added to the front of the string to achieve the  required minimum, zeroes are added to the front of the string to achieve the
 minimum length.  minimum length.
 <P>  <p>
 By default, the counter value is written in arabic digits. If another  By default, the counter value is written in arabic digits. If another
 representation of that value is needed, the counter name must be followed by a  representation of that value is needed, the counter name must be followed by a
 comma and one of the following keywords:</P>  comma and one of the following keywords:</p>
 <UL>  <ul>
 <LI><TT>Arabic</TT>: arabic numerals (default value),  <li>
 <LI><TT>LRoman</TT>: lower-case roman numerals,  <tt>Arabic</tt>: arabic numerals (default value),
 <LI><TT>URoman</TT>: upper-case roman numerals,  <li>
 <LI><TT>Uppercase</TT>: upper-case letter,  <tt>LRoman</tt>: lower-case roman numerals,
 <LI><TT>Lowercase</TT>: lower-case letter.  <li>
 </UL>  <tt>URoman</tt>: upper-case roman numerals,
 <LI>The function <TT>FileDir</TT>, without parameter, returns a string  <li>
   <tt>Uppercase</tt>: upper-case letter,
   <li>
   <tt>Lowercase</tt>: lower-case letter.
   </ul>
   <li>
   The function <tt>FileDir</tt>, without parameter, returns a string
 representing the name of the directory of the output file that has been given  representing the name of the directory of the output file that has been given
 as a parameter to the translation program. The string includes a character '/'  as a parameter to the translation program. The string includes a character '/'
 at the end.  at the end.
 <LI>The function <TT>FileName</TT>, without parameter, returns a string  <li>
   The function <tt>FileName</tt>, without parameter, returns a string
 representing the name of the output file that has been given as a parameter to  representing the name of the output file that has been given as a parameter to
 the translation program. The file extension (the character string that  the translation program. The file extension (the character string that
 terminate the file name, after a dot) is not part of that string.  terminate the file name, after a dot) is not part of that string.
 <LI>The function <TT>Extension</TT>, without parameter, returns a string  <li>
   The function <tt>Extension</tt>, without parameter, returns a string
 representing the extension of the file name. That string is empty if the file  representing the extension of the file name. That string is empty if the file
 name that has been given as a parameter to the translation program has no  name that has been given as a parameter to the translation program has no
 extension. If there is an extension, its first character is a dot.  extension. If there is an extension, its first character is a dot.
 <LI>The function <TT>DocumentName</TT>, without parameter, returns a string  <li>
   The function <tt>DocumentName</tt>, without parameter, returns a string
 representing the name of the document being translated.  representing the name of the document being translated.
 <LI>The function <TT>DocumentDir</TT>, without parameter, returns a string  <li>
   The function <tt>DocumentDir</tt>, without parameter, returns a string
 representing the directory containing the document being translated.  representing the directory containing the document being translated.
 <LI>The function formed by the name of a constant returns that constant's  <li>
 value.  The function formed by the name of a constant returns that constant's value.
 <LI>The function formed by a character string between apostrophes returns that  <li>
   The function formed by a character string between apostrophes returns that
 string.  string.
 <LI>The function formed by the name of a buffer returns the contents of that  <li>
   The function formed by the name of a buffer returns the contents of that
 buffer.  If the named buffer is the picture buffer, then the name of the last  buffer.  If the named buffer is the picture buffer, then the name of the last
 picture encountered is returned.  Otherwise, the buffer is a read buffer and  picture encountered is returned.  Otherwise, the buffer is a read buffer and
 the value returned is text previously read from the terminal.  If the buffer  the value returned is text previously read from the terminal.  If the buffer
 is empty (no picture has been encountered or the <TT>Read</TT> rule has not  is empty (no picture has been encountered or the <tt>Read</tt> rule has not
 been executed for the buffer), then the empty string is returned.  been executed for the buffer), then the empty string is returned.
 <LI>The function formed by an attribute name takes the value of the indicated  <li>
   The function formed by an attribute name takes the value of the indicated
 attribute for the element to which the variable applies.  If the element does  attribute for the element to which the variable applies.  If the element does
 not have that attribute, then the element's ancestor are searched toward the  not have that attribute, then the element's ancestor are searched toward the
 root of the tree.  If one of the ancestors does have the attribute then its  root of the tree.  If one of the ancestors does have the attribute then its
 value is used.  If no ancestors have the attribute, then the value of the  value is used.  If no ancestors have the attribute, then the value of the
 function is the empty string.  function is the empty string.
 </UL>  </ul>
 <PRE>  <pre>     VariableSeq = Variable &lt; Variable > .
      VariableSeq = Variable &lt; Variable > .  
      Variable    = VarID ':' Function &lt; Function > ';' .       Variable    = VarID ':' Function &lt; Function > ';' .
      VarID       = NAME .       VarID       = NAME .
      Function    ='Value' '(' CounterID [ ':' Length ]       Function    ='Value' '(' CounterID [ ':' Length ]
Line 6746  function is the empty string. Line 6708  function is the empty string.
      Length      = NUMBER .       Length      = NUMBER .
      CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /       CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /
                    'Uppercase' / 'Lowercase' .                     'Uppercase' / 'Lowercase' .
      CharString  = STRING .       CharString  = STRING .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 To create, at the beginning of each section of the translated document, text  To create, at the beginning of each section of the translated document, text
 composed of the string ``Section'' followed by the section number, the  composed of the string ``Section'' followed by the section number, the
 following <A name="varsectexample">variable definition</A> might be used:</P>  following <a name="varsectexample">variable definition</a> might be used:</p>
 <PRE>  <pre>VAR
 VAR       SectionVar : 'Section' Value(SectionNumber);</pre>
      SectionVar : 'Section' Value(SectionNumber);  <p>
 </PRE>  (see the definition of <a href="#sectnum"><tt>SectionNumber</tt></a>).</p>
 <P>  <p>
 (see the definition of <A href="#sectnum"><TT>SectionNumber</TT></A>).</P>  
 <P>  
 The following variable definition can be used to create, at the beginning of  The following variable definition can be used to create, at the beginning of
 each section, the text ``Level'' followed by the hierarchical level of the  each section, the text ``Level'' followed by the hierarchical level of the
 section. It used the constant defined above.</P>  section. It used the constant defined above.</p>
 <PRE>  <pre>     LevelVar : TxtLevel Value(SectionLevel);</pre>
      LevelVar : TxtLevel Value(SectionLevel);  <p>
 </PRE>  (see the definitions of <a href="#sectnum"><tt>SectionLevel</tt></a> and of <a
 <P>  href="#levelexample"><tt>TxtLevel</tt></a>).</p>
 (see the definitions of <A href="#sectnum"><TT>SectionLevel</TT></A> and of  <p>
 <A href="#levelexample"><TT>TxtLevel</TT></A>).</P>  To generate the translation of each section in a different file (see <a
 <P>  href="#sectc5220">rule <tt>ChangeMainFile</tt></a>), the name of these files
 To generate the translation of each section in a different file (see  might be defined by the following variable:</p>
 <A href="#sectc5220">rule <TT>ChangeMainFile</TT></A>), the name of these  <pre>     VarOutpuFile : FileName Value(SectionNumber)
 files might be defined by the following variable:</P>                      Extension;</pre>
 <PRE>  <p>
      VarOutpuFile : FileName Value(SectionNumber)  If <tt>output.txt</tt> is the name of the <a name="varoutputfile">output
                     Extension;  file</a> specified when starting the translation program, translated sections
 </PRE>  are written in files <tt>output1.txt</tt>, <tt>output2.txt</tt>, etc.</p>
 <P>  </blockquote>
 If <TT>output.txt</TT> is the name of the <A name="varoutputfile">output  </div>
 file</A> specified when starting the translation program, translated sections  
 are written in files <TT>output1.txt</TT>, <TT>output2.txt</TT>, etc.</P>  <div class="subsection">
 </BLOCKQUOTE>  
 </DIV>  <h3><a name="sectc527">Translating structure elements</a></h3>
   <p>
 <DIV class="subsection">  The <tt>RULES</tt> keyword introduces the translation rules which will be
 <H3><A name=sectc527>Translating structure elements</A></H3>  
   
 <P>  
 The <TT>RULES</TT> keyword introduces the translation rules which will be  
 applied to the various structured element types.  Translation rules can be  applied to the various structured element types.  Translation rules can be
 specified for each element type defined in the structure schema, including the  specified for each element type defined in the structure schema, including the
 base types defined implicitly, whose names are <TT>TEXT_UNIT</TT>,  base types defined implicitly, whose names are <tt>TEXT_UNIT</tt>,
 <TT>PICTURE_UNIT</TT>, <TT>SYMBOL_UNIT</TT>, <TT>GRAPHIC_UNIT</TT> and  <tt>PICTURE_UNIT</tt>, <tt>SYMBOL_UNIT</tt>, <tt>GRAPHIC_UNIT</tt> and
 <TT>PAGE_UNIT</TT>.  But it is not necessary to specify rules for every  <tt>PAGE_UNIT</tt>.  But it is not necessary to specify rules for every
 defined type.</P>  defined type.</p>
 <P>  <p>
 If there are no translation rules for an element type, the elements that it  If there are no translation rules for an element type, the elements that it
 contains (and which may have rules themselves) will still be translated, but  contains (and which may have rules themselves) will still be translated, but
 the translator will produce nothing for the element itself.  To make the  the translator will produce nothing for the element itself.  To make the
 translator completely ignore the content of an element the <A  translator completely ignore the content of an element the <a
 href="#sectc5217"><TT>Remove</TT> rule</A> must be used.</P>  href="#sectc5217"><tt>Remove</tt> rule</a> must be used.</p>
 <P>  <p>
 The translation rules for an element type defined in the structure schema are  The translation rules for an element type defined in the structure schema are
 written using the name of the type followed by a colon and the list of  written using the name of the type followed by a colon and the list of
 applicable rules.  When the element  type is a <A href="#sectd3285">mark pair</A>,  applicable rules.  When the element  type is a <a href="#sectd3285">mark
 but only in this case, the type name must be preceded by the <TT>First</TT> or  pair</a>, but only in this case, the type name must be preceded by the
 <TT>Second</TT> keyword.  This keyword indicates whether the rules that follow  <tt>First</tt> or <tt>Second</tt> keyword.  This keyword indicates whether the
 apply to the first or second mark of the pair.</P>  rules that follow apply to the first or second mark of the pair.</p>
 <P>  <p>
 The list of rules can take several forms.  It may be a simple non-conditional  The list of rules can take several forms.  It may be a simple non-conditional
 rule.  It can also be formed by a condition followed by one or more simple  rule.  It can also be formed by a condition followed by one or more simple
 rules.  Or it can be a block of rules beginning with the <TT>BEGIN</TT>  rules.  Or it can be a block of rules beginning with the <tt>BEGIN</tt>
 keyword and ending with the <TT>END</TT> keyword and a semicolon.  This block  keyword and ending with the <tt>END</tt> keyword and a semicolon.  This block
 of rules can contain one or more simple rules and/or one or more conditions,  of rules can contain one or more simple rules and/or one or more conditions,
 each followed by one or more simple rules.</P>  each followed by one or more simple rules.</p>
 <PRE>  <pre>     ElemSeq        = TransType &lt; TransType > .
      ElemSeq        = TransType &lt; TransType > .  
      TransType      = [ FirstSec ] ElemID ':' RuleSeq .       TransType      = [ FirstSec ] ElemID ':' RuleSeq .
      FirstSec       = 'First' / 'Second' .       FirstSec       = 'First' / 'Second' .
      RuleSeq        = Rule / 'BEGIN' &lt; Rule > 'END' ';' .       RuleSeq        = Rule / 'BEGIN' &lt; Rule > 'END' ';' .
      Rule           = SimpleRule / ConditionBlock .       Rule           = SimpleRule / ConditionBlock .
      ConditionBlock = 'IF' ConditionSeq SimpleRuleSeq .       ConditionBlock = 'IF' ConditionSeq SimpleRuleSeq .
      SimpleRuleSeq  = 'BEGIN' &lt; SimpleRule > 'END' ';' /        SimpleRuleSeq  = 'BEGIN' &lt; SimpleRule > 'END' ';' / 
                       SimpleRule .                        SimpleRule .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc528>Conditional rules</A></H3>  
   
 <P>  <h3><a name="sectc528">Conditional rules</a></h3>
   <p>
 In a translation schema, the translation rules are either associated with  In a translation schema, the translation rules are either associated with
 element types or with attribute values or with a specific presentation.  They  element types or with attribute values or with a specific presentation.  They
 are applied by the translator each time an element of the corresponding type  are applied by the translator each time an element of the corresponding type
Line 6840  is encountered in the translated documen Line 6793  is encountered in the translated documen
 carried by an element or also, each time the specific translation is attached  carried by an element or also, each time the specific translation is attached
 to an element.  This systematic application of the rules can be relaxed: it is  to an element.  This systematic application of the rules can be relaxed: it is
 possible to add a condition to one or more rules, so that these rules are only  possible to add a condition to one or more rules, so that these rules are only
 applied when the condition is true.</P>  applied when the condition is true.</p>
 <P>  <p>
 A condition begins with the keyword <TT>IF</TT>, followed by a sequence of  A condition begins with the keyword <tt>IF</tt>, followed by a sequence of
 elementary conditions.  Elementary conditions are separated from each other by  elementary conditions.  Elementary conditions are separated from each other by
 the <TT>AND</TT> keyword.  If there is only one elementary condition, this  the <tt>AND</tt> keyword.  If there is only one elementary condition, this
 keyword is absent.  The rules are only applied if all the elementary  keyword is absent.  The rules are only applied if all the elementary
 conditions are true.  The elementary condition can be negative; it is then  conditions are true.  The elementary condition can be negative; it is then
 preceded by the <TT>NOT</TT> keyword.</P>  preceded by the <tt>NOT</tt> keyword.</p>
 <P>  <p>
 When the translation rule(s) controlled by the condition apply to a reference  When the translation rule(s) controlled by the condition apply to a reference
 element or a reference attribute, an elementary condition can also apply to  element or a reference attribute, an elementary condition can also apply to
 element referred by this reference.  The <TT>Target</TT> keyword is used for  element referred by this reference.  The <tt>Target</tt> keyword is used for
 that purpose.  It must appear before the keyword defining the condition  that purpose.  It must appear before the keyword defining the condition
 type.</P>  type.</p>
 <P>  <p>
 Depending on their type, some conditions may apply either to the element with  Depending on their type, some conditions may apply either to the element with
 which they are associated, or to one of its ancestor.  In the case of an  which they are associated, or to one of its ancestor.  In the case of an
 ancestor, the key word <TT>Ancestor</TT> must be used, followed by</P>  ancestor, the key word <tt>Ancestor</tt> must be used, followed by</p>
 <UL>  <ul>
 <LI>either an integer which represents the number of levels in the tree  <li>
 between the element and the ancestor of interest,  either an integer which represents the number of levels in the tree between
 <LI>or the type name of the ancestor of interest.  If that type is defined in  the element and the ancestor of interest,
 a separate structure schema, the name of that schema must follow between  <li>
   or the type name of the ancestor of interest.  If that type is defined in a
   separate structure schema, the name of that schema must follow between
 parentheses.  parentheses.
 </UL>  </ul>
 <P>  <p>
 There is a special case for the parent element, which can be simply written  There is a special case for the parent element, which can be simply written
 <TT>Parent</TT> instead of <TT>Ancestor 1</TT>.</P>  <tt>Parent</tt> instead of <tt>Ancestor 1</tt>.</p>
 <P>  <p>
 Only conditions <TT>First</TT>, <TT>Last</TT>, <TT>Referred</TT>,  Only conditions <tt>First</tt>, <tt>Last</tt>, <tt>Referred</tt>,
 <TT>Within</TT>, <TT>Attributes</TT>, <TT>Presentation</TT>, <TT>Comment</TT>  <tt>Within</tt>, <tt>Attributes</tt>, <tt>Presentation</tt>, <tt>Comment</tt>
 and those concerning an attribute or a specific presentation can apply to an  and those concerning an attribute or a specific presentation can apply to an
 ancestor. Conditions <TT>Defined</TT>, <TT>FirstRef</TT>, <TT>LastRef</TT>,  ancestor. Conditions <tt>Defined</tt>, <tt>FirstRef</tt>, <tt>LastRef</tt>,
 <TT>ExternalRef</TT>, <TT>Alphabet</TT>, <TT>FirstAttr</TT>,  <tt>ExternalRef</tt>, <tt>Alphabet</tt>, <tt>FirstAttr</tt>,
 <TT>LastAttr</TT>, <TT>ComputedPage</TT>, <TT>StartPage</TT>,  <tt>LastAttr</tt>, <tt>ComputedPage</tt>, <tt>StartPage</tt>,
 <TT>UserPage</TT>, <TT>ReminderPage</TT>, <TT>Empty</TT> cannot be preceded by  <tt>UserPage</tt>, <tt>ReminderPage</tt>, <tt>Empty</tt> cannot be preceded by
 keywords <TT>Parent</TT> or <TT>Ancestor</TT>.</P>  keywords <tt>Parent</tt> or <tt>Ancestor</tt>.</p>
 <P>  <p>
 In condition <TT>Referred</TT> and in the condition that applies to a named  In condition <tt>Referred</tt> and in the condition that applies to a named
 attribute, a symbol '<TT>*</TT>' can indicate that the condition is related  attribute, a symbol '<tt>*</tt>' can indicate that the condition is related
 only to the element itself. If this symbol is not present, not only the  only to the element itself. If this symbol is not present, not only the
 element is considered, but also its ancestor, at any level.</P>  element is considered, but also its ancestor, at any level.</p>
 <P>  <p>
 The form of an elementary condition varies according to the type of  The form of an elementary condition varies according to the type of
 condition.</P>  condition.</p>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5281>Conditions based on the logical position of the element</A></H4>  
   
 <P>  <h4><a name="sectd5281">Conditions based on the logical position of the
   element</a></h4>
   <p>
 The condition can be on the position of the element in the document's logical  The condition can be on the position of the element in the document's logical
 structure tree.  It is possible to test whether the element is the first  structure tree.  It is possible to test whether the element is the first
 (<TT>First</TT>) or last (<TT>Last</TT>) among its siblings or if it is not  (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is not
 the first (<TT>NOT First</TT>) or not the last (<TT>NOT Last</TT>).</P>  the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>).</p>
 <P>  <p>
 It is also possible to test if the element is contained in an element of a  It is also possible to test if the element is contained in an element of a
 given type (<TT>Within</TT>) or if it is not (<TT>NOT Within</TT>). If that  given type (<tt>Within</tt>) or if it is not (<tt>NOT Within</tt>). If that
 element type is defined in a structure schema which is not the one which  element type is defined in a structure schema which is not the one which
 corresponds to the translation schema, the type name of this element must be  corresponds to the translation schema, the type name of this element must be
 followed, between parentheses, by the name of the structure schema which  followed, between parentheses, by the name of the structure schema which
 defines it.</P>  defines it.</p>
 <P>  <p>
 If the keyword <TT>Within</TT> is preceded by <TT>Immediately</TT>, the  If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the
 condition is satisfied only if the <EM>parent</EM> element has the type  condition is satisfied only if the <em>parent</em> element has the type
 indicated. If the word <TT>Immediately</TT> is missing, the condition is  indicated. If the word <tt>Immediately</tt> is missing, the condition is
 satisfied if any <EM>ancestor</EM> has the type indicated.</P>  satisfied if any <em>ancestor</em> has the type indicated.</p>
 <P>  <p>
 An integer <I>n</I> can appear between the keyword <TT>Within</TT> and the  An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the
 type.  It specifies the number of ancestors of the indicated type that must be  type.  It specifies the number of ancestors of the indicated type that must be
 present for the condition to be satisfied.  If the keyword  present for the condition to be satisfied.  If the keyword
 <TT>Immediately</TT> is also present, the <I>n</I> immediate ancestors of the  <tt>Immediately</tt> is also present, the <i>n</i> immediate ancestors of the
 element must have the indicated type.  The integer <I>n</I> must be positive  element must have the indicated type.  The integer <i>n</i> must be positive
 or zero.  It can be preceded by <TT>&lt;</TT> or <TT>></TT> to indicate a  or zero.  It can be preceded by <tt>&lt;</tt> or <tt>></tt> to indicate a
 maximum or minimum number of ancestors.  If these symbols are missing, the  maximum or minimum number of ancestors.  If these symbols are missing, the
 condition is satisfied only if it exists exactly <I>n</I> ancestors.  When  condition is satisfied only if it exists exactly <i>n</i> ancestors.  When
 this number is missing, it is equivalent to > 0.</P>  this number is missing, it is equivalent to > 0.</p>
 <P>  <p>
 If the condition applies to translation rules associated with an attribute,  If the condition applies to translation rules associated with an attribute,
 i.e. if it is in the <TT>ATTRIBUTES</TT> section of the presentation schema,  i.e. if it is in the <tt>ATTRIBUTES</tt> section of the presentation schema,
 the condition can be simply an element name. Translation rules are then  the condition can be simply an element name. Translation rules are then
 executed only if the attribute is attached to an element of that type.  executed only if the attribute is attached to an element of that type. The
 The keyword <TT>NOT</TT> before the element name indicates that the  keyword <tt>NOT</tt> before the element name indicates that the translation
 translation rules must be executed only if the element is not of the type  rules must be executed only if the element is not of the type indicated.</p>
 indicated.</P>  </div>
 </DIV>  
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5282>Conditions on references</A></H4>  
   
 <P>  <h4><a name="sectd5282">Conditions on references</a></h4>
   <p>
 References may be taken into account in conditions, which can be based on the  References may be taken into account in conditions, which can be based on the
 fact that the element, or one of its ancestors (unless symbol <TT>*</TT> is  fact that the element, or one of its ancestors (unless symbol <tt>*</tt> is
 present), is designated by a at least one reference (<TT>Referred</TT>) or by  present), is designated by a at least one reference (<tt>Referred</tt>) or by
 none (<TT>NOT Referred</TT>).  If the element or attribute to which the  none (<tt>NOT Referred</tt>).  If the element or attribute to which the
 condition is attached is a reference, the condition can be based on the fact  condition is attached is a reference, the condition can be based on the fact
 that it acts as the first reference to the designated element  that it acts as the first reference to the designated element
 (<TT>FirstRef</TT>), or as the last (<TT>LastRef</TT>), or as a reference to  (<tt>FirstRef</tt>), or as the last (<tt>LastRef</tt>), or as a reference to
 an element located in another document (<TT>ExternalRef</TT>).  Like all  an element located in another document (<tt>ExternalRef</tt>).  Like all
 conditions, conditions on references can be inverted by the <TT>NOT</TT>  conditions, conditions on references can be inverted by the <tt>NOT</tt>
 keyword.</P>  keyword.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5283>Conditions on the parameters</A></H4>  
   <h4><a name="sectd5283">Conditions on the parameters</a></h4>
 <P>  <p>
 Elements which are <A href="#sectc326">parameters</A> can be given a particular  Elements which are <a href="#sectc326">parameters</a> can be given a
 condition which is based on whether or not the parameter is given a value in  particular condition which is based on whether or not the parameter is given a
 the document (<TT>Defined</TT> or <TT>NOT Defined</TT>, respectively).</P>  value in the document (<tt>Defined</tt> or <tt>NOT Defined</tt>,
 </DIV>  respectively).</p>
   </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5284>Conditions on the alphabets</A></H4>  
   
 <P>  <h4><a name="sectd5284">Conditions on the alphabets</a></h4>
   <p>
 The character string base type (and only this type) can use the condition  The character string base type (and only this type) can use the condition
 <TT>Alphabet = a</TT> which indicates that the translation rule(s) should only  <tt>Alphabet = a</tt> which indicates that the translation rule(s) should only
 apply if the alphabet of the character string is the one whose name appears  apply if the alphabet of the character string is the one whose name appears
 after the equals sign (or is not, if there is a preceding <TT>NOT</TT>  after the equals sign (or is not, if there is a preceding <tt>NOT</tt>
 keyword).  This condition cannot be applied to translation rules of an  keyword).  This condition cannot be applied to translation rules of an
 attribute.</P>  attribute.</p>
 <P>  <p>
 In the current implementation of Thot, the available alphabets are the  In the current implementation of Thot, the available alphabets are the
 <TT>Latin</TT> alphabet and the <TT>Greek</TT> alphabet.</P>  <tt>Latin</tt> alphabet and the <tt>Greek</tt> alphabet.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5285>Conditions on page breaks</A></H4>  
   
 <P>  <h4><a name="sectd5285">Conditions on page breaks</a></h4>
   <p>
 The page break base type (and only this type) can use the following  The page break base type (and only this type) can use the following
 conditions: <TT>ComputedPage</TT>, <TT>StartPage</TT>, <TT>UserPage</TT>, and  conditions: <tt>ComputedPage</tt>, <tt>StartPage</tt>, <tt>UserPage</tt>, and
 <TT>ReminderPage</TT>.  The <TT>ComputedPage</TT> condition indicates that the  <tt>ReminderPage</tt>.  The <tt>ComputedPage</tt> condition indicates that the
 translation rule(s) should apply if the page break was created automatically  translation rule(s) should apply if the page break was created automatically
 by Thot;  the <TT>StartPage</TT> condition is true if the page break is  by Thot;  the <tt>StartPage</tt> condition is true if the page break is
 generated before the element by the <TT>Page</TT> rule of the P language; the  generated before the element by the <tt>Page</tt> rule of the P language; the
 <TT>UserPage</TT> condition applies if the page break was inserted by the  <tt>UserPage</tt> condition applies if the page break was inserted by the
 user; and the <TT>ReminderPage</TT> is applied if the page break is a reminder  user; and the <tt>ReminderPage</tt> is applied if the page break is a reminder
 of page breaking.</P>  of page breaking.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5286>Conditions on the element's content</A></H4>  
   
 <P>  <h4><a name="sectd5286">Conditions on the element's content</a></h4>
   <p>
 The condition can be based on whether or not the element is empty.  An element  The condition can be based on whether or not the element is empty.  An element
 which has no children or whose leaves are all empty is considered to be empty  which has no children or whose leaves are all empty is considered to be empty
 itself.  This condition is expressed by the <TT>Empty</TT> keyword, optionally  itself.  This condition is expressed by the <tt>Empty</tt> keyword, optionally
 preceded by the <TT>NOT</TT> keyword.</P>  preceded by the <tt>NOT</tt> keyword.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5287>Conditions on the presence of comments</A></H4>  
   
 <P>  <h4><a name="sectd5287">Conditions on the presence of comments</a></h4>
   <p>
 The condition can be based on the presence or absence of comments associated  The condition can be based on the presence or absence of comments associated
 with the translated element.  This condition is expressed by the keyword  with the translated element.  This condition is expressed by the keyword
 <TT>Comment</TT>, optionally preceded by the keyword <TT>NOT</TT>.</P>  <tt>Comment</tt>, optionally preceded by the keyword <tt>NOT</tt>.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5288>Conditions on the presence of specific presentation rules</A></H4>  
   
 <P>  <h4><a name="sectd5288">Conditions on the presence of specific presentation
   rules</a></h4>
   <p>
 The condition can be based on the presence or absence of specific presentation  The condition can be based on the presence or absence of specific presentation
 rules associated with the translated element, whatever the rules, their value  rules associated with the translated element, whatever the rules, their value
 or their number.  This condition is expressed by the keyword  or their number.  This condition is expressed by the keyword
 <TT>Presentation</TT>, optionally preceded by the <TT>NOT</TT> keyword.</P>  <tt>Presentation</tt>, optionally preceded by the <tt>NOT</tt> keyword.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd5289>Conditions on the presence of logical attributes</A></H4>  
   
 <P>  <h4><a name="sectd5289">Conditions on the presence of logical
   attributes</a></h4>
   <p>
 In the same way, the condition can be based on the presence or absence of  In the same way, the condition can be based on the presence or absence of
 attributes associated with the translated elements, no matter what the  attributes associated with the translated elements, no matter what the
 attributes or their values.  The <TT>Attributes</TT> keyword expresses this  attributes or their values.  The <tt>Attributes</tt> keyword expresses this
 condition.</P>  condition.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd52810>Conditions on logical attributes</A></H4>  
   
 <P>  <h4><a name="sectd52810">Conditions on logical attributes</a></h4>
   <p>
 If the condition appears in the translation rules of an attribute, the  If the condition appears in the translation rules of an attribute, the
 <TT>FirstAttr</TT> and <TT>LastAttr</TT> keywords can be used to indicate that  <tt>FirstAttr</tt> and <tt>LastAttr</tt> keywords can be used to indicate that
 the rules must only be applied if this attribute is the first attribute for  the rules must only be applied if this attribute is the first attribute for
 the translated element or if it is the last (respectively).  These conditions  the translated element or if it is the last (respectively).  These conditions
 can also be inverted by the <TT>NOT</TT> keyword.</P>  can also be inverted by the <tt>NOT</tt> keyword.</p>
 <P>  <p>
 Another type of condition can only be applied to the translation rules when  Another type of condition can only be applied to the translation rules when
 the element being processed (or one of its ancestors if symbol <TT>*</TT> is  the element being processed (or one of its ancestors if symbol <tt>*</tt> is
 missing) has a certain attribute, perhaps with a certain value or, in  missing) has a certain attribute, perhaps with a certain value or, in
 contrast, when the element does not have this attribute with this value.  The  contrast, when the element does not have this attribute with this value.  The
 condition is specified by writing the name of the attribute after the keyword  condition is specified by writing the name of the attribute after the keyword
 <TT>IF</TT> or <TT>AND</TT>.  The <TT>NOT</TT> keyword can be used to invert  <tt>IF</tt> or <tt>AND</tt>.  The <tt>NOT</tt> keyword can be used to invert
 the condition.  If the translation rules must be applied to any element which  the condition.  If the translation rules must be applied to any element which
 has this attribute (or does not have it, if the condition is inverted) no  has this attribute (or does not have it, if the condition is inverted) no
 matter what the attribute's value, the condition is complete.  If, in  matter what the attribute's value, the condition is complete.  If, in
 contrast, the condition applies to one or more values of the attribute, these  contrast, the condition applies to one or more values of the attribute, these
 are indicated after the name of the attribute, except for reference attributes  are indicated after the name of the attribute, except for reference attributes
 which do not have values.</P>  which do not have values.</p>
 <P>  <p>
 The representation of the values of an <A name="relattr">attribute</A> in a  The representation of the values of an <a name="relattr">attribute</a> in a
 condition depends on the attribute's type.  For attributes with enumerated or  condition depends on the attribute's type.  For attributes with enumerated or
 textual types, the value (a name or character string between apostrophes,  textual types, the value (a name or character string between apostrophes,
 respectively) is simply preceded by an equals sign.  For numeric attributes,  respectively) is simply preceded by an equals sign.  For numeric attributes,
 the condition can be based on a single value or on a range of values.  In the  the condition can be based on a single value or on a range of values.  In the
 case of a unique value, this value (an integer) is simply preceded by an  case of a unique value, this value (an integer) is simply preceded by an
 equals sign.  Conditions based on ranges of values have several forms:</P>  equals sign.  Conditions based on ranges of values have several forms:</p>
 <UL>  <ul>
 <LI>all values less than a given value (the value is preceded by a ``less  <li>
   all values less than a given value (the value is preceded by a ``less than''
   sign).
   <li>
   all values greater than a given value (the value is preceded by a ``greater
 than'' sign).  than'' sign).
 <LI>all values greater than a given value (the value is preceded by a  <li>
 ``greater than'' sign).  all values falling in an interval, bounds included.  The range of values is
 <LI>all values falling in an interval, bounds included.  The range of values  then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where
 is then specified <TT>IN [</TT>Minimum <TT>..</TT>Maximum<TT>]</TT>, where  
 Minimum and Maximum are integers.  Minimum and Maximum are integers.
 </UL>  </ul>
 <P>  <p>
 All numeric values may be negative.  The integer is simply preceded by a minus  All numeric values may be negative.  The integer is simply preceded by a minus
 sign.</P>  sign.</p>
 <P>  <p>
 Both local and global attributes can be used in conditions.</P>  Both local and global attributes can be used in conditions.</p>
 </DIV>  </div>
   
 <DIV class="subsubsection">  <div class="subsubsection">
 <H4><A name=sectd52811>Conditions on specific presentation rules</A></H4>  
   
 <P>  <h4><a name="sectd52811">Conditions on specific presentation rules</a></h4>
   <p>
 It is possible to apply translation rules only when the element being  It is possible to apply translation rules only when the element being
 processed has or does not have a specific presentation rule, possibly with a  processed has or does not have a specific presentation rule, possibly with a
 certain value.  The condition is specified by writing the name of the  certain value.  The condition is specified by writing the name of the
 presentation rule after the keyword <TT>IF</TT> or <TT>AND</TT>.  The  presentation rule after the keyword <tt>IF</tt> or <tt>AND</tt>.  The
 <TT>NOT</TT> keyword can be used to invert the condition.  If the translation  <tt>NOT</tt> keyword can be used to invert the condition.  If the translation
 rules must be applied to any element which has this presentation rule (or does  rules must be applied to any element which has this presentation rule (or does
 not have it, if the condition is inverted) no matter what the rule's value,  not have it, if the condition is inverted) no matter what the rule's value,
 the condition is complete.  If, in contrast, the condition applies to one or  the condition is complete.  If, in contrast, the condition applies to one or
 more values of the rule, these are indicated after the name of the  more values of the rule, these are indicated after the name of the
 attribute.</P>  attribute.</p>
 <P>  <p>
 The representation of presentation rule values in a condition is similar to  The representation of presentation rule values in a condition is similar to
 that for attribute values.  The representation of these values depend on the  that for attribute values.  The representation of these values depend on the
 type of the presentation rule. There are three categories of presentation  type of the presentation rule. There are three categories of presentation
 rules:</P>  rules:</p>
 <UL>  <ul>
 <LI>those taking numeric values (<TT>Size, Indent, LineSpacing,  <li>
 LineWeight</TT>),  those taking numeric values (<tt>Size, Indent, LineSpacing, LineWeight</tt>),
 <LI>those with values taken from a predefined list (<TT>Adjust, Justify,  <li>
 Hyphenate, Style, Font, UnderLine, Thickness, LineStyle</TT>),  those with values taken from a predefined list (<tt>Adjust, Justify,
 <LI>those whose value is a name (<TT>FillPattern, Background,  Hyphenate, Style, Font, UnderLine, Thickness, LineStyle</tt>),
 Foreground</TT>).  <li>
 </UL>  those whose value is a name (<tt>FillPattern, Background, Foreground</tt>).
 <P>  </ul>
   <p>
 For presentation rules which take numeric values, the condition can take a  For presentation rules which take numeric values, the condition can take a
 unique value or a range of values.  In the case of a unique value, this value  unique value or a range of values.  In the case of a unique value, this value
 (an integer) is simply preceded by an equals sign. Conditions based on ranges  (an integer) is simply preceded by an equals sign. Conditions based on ranges
 of values have several forms:</P>  of values have several forms:</p>
 <UL>  <ul>
 <LI>all values less than a given value (the value is preceded by a ``less  <li>
   all values less than a given value (the value is preceded by a ``less than''
   sign).
   <li>
   all values greater than a given value (the value is preceded by a ``greater
 than'' sign).  than'' sign).
 <LI>all values greater than a given value (the value is preceded by a  <li>
 ``greater than'' sign).  all values falling in an interval, bounds included.  The range of values is
 <LI>all values falling in an interval, bounds included.  The range of values  then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where
 is then specified <TT>IN [</TT>Minimum <TT>..</TT>Maximum<TT>]</TT>, where  
 Minimum and Maximum are integers.  Minimum and Maximum are integers.
 </UL>  </ul>
 <P>  <p>
 Values for the <TT>Indent</TT>rule may be negative.  The integer is then  Values for the <tt>Indent</tt>rule may be negative.  The integer is then
 simply preceded by a minus sign and represents how far the first line starts  simply preceded by a minus sign and represents how far the first line starts
 to the left of the other lines.</P>  to the left of the other lines.</p>
 <P>  <p>
 For presentation rules whose values are taken from predefined lists, the value  For presentation rules whose values are taken from predefined lists, the value
 which satisfies the condition is indicated by an equals sign followed by the  which satisfies the condition is indicated by an equals sign followed by the
 name of the value.</P>  name of the value.</p>
 <P>  <p>
 For presentation rule whose values are names, the value which satisfies the  For presentation rule whose values are names, the value which satisfies the
 condition is indicated by the equals sign followed by the value's name. The  condition is indicated by the equals sign followed by the value's name. The
 names of fill patterns (the <TT>FillPattern</TT> rule) and of colors (the  names of fill patterns (the <tt>FillPattern</tt> rule) and of colors (the
 <TT>Foreground</TT> and <TT>Background</TT> rules) known to Thot are the same  <tt>Foreground</tt> and <tt>Background</tt> rules) known to Thot are the same
 as in the P language.</P>  as in the P language.</p>
 <P>  <p>
 The syntax of conditions based on the specific presentation is the same as the  The syntax of conditions based on the specific presentation is the same as the
 syntax used to express the <A href="#sectc5224">translation of specific  syntax used to express the <a href="#sectc5224">translation of specific
 presentation rules</A>.</P>  presentation rules</a>.</p>
 <P>  <p>
 When a condition has only one rule, the condition is simply followed by that  When a condition has only one rule, the condition is simply followed by that
 rule.  If it has several rules, they are placed after the condition between  rule.  If it has several rules, they are placed after the condition between
 the keywords <TT>BEGIN</TT> and <TT>END</TT>.</P>  the keywords <tt>BEGIN</tt> and <tt>END</tt>.</p>
 <PRE>  <pre>   ConditionSeq = Condition [ 'AND' Condition ] .
    ConditionSeq = Condition [ 'AND' Condition ] .  
    Condition    = [ 'NOT' ] [ 'Target' ] Cond .     Condition    = [ 'NOT' ] [ 'Target' ] Cond .
    Cond         = CondElem / CondAscend .     Cond         = CondElem / CondAscend .
    CondElem     ='FirstRef' / 'LastRef' /     CondElem     ='FirstRef' / 'LastRef' /
Line 7172  the keywords <TT>BEGIN</TT> and <TT>END< Line 7136  the keywords <TT>BEGIN</TT> and <TT>END<
    MaxInterval  = NUMBER .     MaxInterval  = NUMBER .
    IntegerVal   = NUMBER .     IntegerVal   = NUMBER .
    TextVal      = STRING .     TextVal      = STRING .
    AttrValue    = NAME .     AttrValue    = NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose that after each element of type Section_Title it is useful to produce  Suppose that after each element of type Section_Title it is useful to produce
 the text <TT>\label{SectX}</TT> where <TT>X</TT> represents the section number,  the text <tt>\label{SectX}</tt> where <tt>X</tt> represents the section
 but only if the section is designated by one or more references in the  number, but only if the section is designated by one or more references in the
 document.  The following conditional rule produces this effect:</P>  document.  The following conditional rule produces this effect:</p>
 <PRE>  <pre>RULES
 RULES  
   Section_Title :    Section_Title :
     IF Referred      IF Referred
       Create ('\label{Sect' Value(UniqueSectNum) '}\12') After;        Create ('\label{Sect' Value(UniqueSectNum) '}\12') After;</pre>
 </PRE>  <p>
 <P>  (the declaration of the <a href="#sectc5224"><tt>UniqueSectNum</tt>
 (the declaration of the <A href="#sectc5224"><TT>UniqueSectNum</TT>  counter</a> is given above).  The string <tt>\12</tt> represents a line
 counter</A> is given above).  The string <TT>\12</TT> represents a line  break.</p>
 break.</P>  </blockquote>
 </BLOCKQUOTE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose that for elements of the Elmnt type it would be useful to produce a  Suppose that for elements of the Elmnt type it would be useful to produce a
 character indicating the value of the numeric attribute Level associated with  character indicating the value of the numeric attribute Level associated with
 the element: an  ``A'' for all values of Level less than 3, a ``B'' for values  the element: an  ``A'' for all values of Level less than 3, a ``B'' for values
 between 3 and 10 and a ``C'' for values greater than 10.  This can be achieved  between 3 and 10 and a ``C'' for values greater than 10.  This can be achieved
 by writing the following rules for the Elmnt type:</P>  by writing the following rules for the Elmnt type:</p>
 <PRE>  <pre>RULES
 RULES  
   Elmnt :    Elmnt :
     BEGIN      BEGIN
     IF Level &lt; 3      IF Level &lt; 3
Line 7212  RULES Line 7172  RULES
       Create 'B';        Create 'B';
     IF Level > 10      IF Level > 10
       Create 'C';        Create 'C';
     END;      END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc529>Translation rules</A></H3>  
   
 <P>  <h3><a name="sectc529">Translation rules</a></h3>
   <p>
 Fifteen types of translation rules can be associated with element types and  Fifteen types of translation rules can be associated with element types and
 attribute values.  They are the <TT>Create</TT>, <TT>Write</TT>,  attribute values.  They are the <tt>Create</tt>, <tt>Write</tt>,
 <TT>Read</TT>, <TT>Include</TT>, <TT>Get</TT>, <TT>Copy</TT>, <TT>Use</TT>,  <tt>Read</tt>, <tt>Include</tt>, <tt>Get</tt>, <tt>Copy</tt>, <tt>Use</tt>,
 <TT>Remove</TT>, <TT>NoTranslation</TT>, <TT>NoLineBreak</TT>,  <tt>Remove</tt>, <tt>NoTranslation</tt>, <tt>NoLineBreak</tt>,
 <TT>ChangeMainFile</TT>, <TT>RemoveFile</TT>, <TT>Set</TT>, <TT>Add</TT>,  <tt>ChangeMainFile</tt>, <tt>RemoveFile</tt>, <tt>Set</tt>, <tt>Add</tt>,
 <TT>Indent</TT>, rules.  Each rule has its own syntax, although they are  <tt>Indent</tt>, rules.  Each rule has its own syntax, although they are all
 all based on very similar models.</P>  based on very similar models.</p>
 <PRE>  <pre>     SimpleRule = 'Create' [ 'IN' VarID ] Object
      SimpleRule = 'Create' [ 'IN' VarID ] Object  
                         [ Position ] ';' /                          [ Position ] ';' /
                   'Write' Object [ Position ] ';' /                    'Write' Object [ Position ] ';' /
                   'Read' BufferID [ Position ] ';' /                    'Read' BufferID [ Position ] ';' /
Line 7250  all based on very similar models.</P> Line 7208  all based on very similar models.</P>
                   'Set' CounterID InitValue [ Position ] ';' /                    'Set' CounterID InitValue [ Position ] ';' /
                   'Add' CounterID Increment [ Position ] ';' /                    'Add' CounterID Increment [ Position ] ';' /
                   'Indent' [ 'IN' VarID ] [ IndentSign ]                    'Indent' [ 'IN' VarID ] [ IndentSign ]
                            IndentValue [ Position ] ';' .                             IndentValue [ Position ] ';' .</pre>
 </PRE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5210>The <TT>Create</TT> rule</A></H3>  <h3><a name="sectc5210">The <tt>Create</tt> rule</a></h3>
   <p>
 <P>  The most frequently used rule is undoubtedly the <tt>Create</tt> rule, which
 The most frequently used rule is undoubtedly the <TT>Create</TT> rule, which  generates fixed or variable text (called an <em>object</em>) in the output
 generates fixed or variable text (called an <EM>object</EM>) in the output  
 file.  The generated text can be made to appear either before or after the  file.  The generated text can be made to appear either before or after the
 content of the element to which the rule applies. The rule begins with the  content of the element to which the rule applies. The rule begins with the
 <TT>Create</TT> keyword, followed by a specifier for the object and a keyword  <tt>Create</tt> keyword, followed by a specifier for the object and a keyword
 (<TT>Before</TT> or <TT>After</TT>) indicating the position of the generated  (<tt>Before</tt> or <tt>After</tt>) indicating the position of the generated
 text (<A href="#sectc5222">before or after</A> the element's content).  If the  text (<a href="#sectc5222">before or after</a> the element's content).  If the
 position is not indicated, the object will be generated before the element's  position is not indicated, the object will be generated before the element's
 content.  This rule, like all translation rules, is terminated by a  content.  This rule, like all translation rules, is terminated by a
 semicolon.</P>  semicolon.</p>
 <P>  <p>
 The <TT>Create</TT> keyword can be followed by the <TT>IN</TT> keyword and by  The <tt>Create</tt> keyword can be followed by the <tt>IN</tt> keyword and by
 the name of a variable.  This means that the text generated by the rule must  the name of a variable.  This means that the text generated by the rule must
 not be written in the main output file, but in the file whose name is  not be written in the main output file, but in the file whose name is
 specified by the variable.</P>  specified by the variable.</p>
 <P>  <p>
 This allows the translation program to generate text in different files during  This allows the translation program to generate text in different files during
 the same run. These files do not need to be explicitely declared or opened.  the same run. These files do not need to be explicitely declared or opened.
 They do not need to be closed either, but if they contain temporary data,  They do not need to be closed either, but if they contain temporary data, they
 they can be removed (see the <A href="#sectc5220a"><TT>RemoveFile</TT>  can be removed (see the <a href="#sectc5220a"><tt>RemoveFile</tt> rule</a>).
 rule</A>).  As soon as the translation program  As soon as the translation program executes a <tt>Create</tt> rule for a file
 executes a <TT>Create</TT> rule for a file that is not yet open, it opens the  that is not yet open, it opens the file. These files are closed when the
 file. These files are closed when the translation is finished.</P>  translation is finished.</p>
 <PRE>  <pre>               'Create' [ 'IN' VarID ] Object
                'Create' [ 'IN' VarID ] Object  
                         [ Position ] ';'                          [ Position ] ';'
      Object   = ConstID / CharString /       Object   = ConstID / CharString /
                 BufferID /                  BufferID /
Line 7308  file. These files are closed when the tr Line 7264  file. These files are closed when the tr
                 ElemID [ ExtStruct ] /                  ElemID [ ExtStruct ] /
                'RefId' /                 'RefId' /
                'DocumentName' /                 'DocumentName' /
                'DocumentDir' .                 'DocumentDir' .</pre>
 </PRE>  <p>
 <P>  The object to be generated can be:</p>
 The object to be generated can be:</P>  <ul>
 <UL>  <li>
 <LI>a constant string, specified by its name if it is declared in the schema's  a constant string, specified by its name if it is declared in the schema's
 <TT>CONST</TT> section, or given directly as a value between apostrophes;  <tt>CONST</tt> section, or given directly as a value between apostrophes;
 <LI>the contents of a buffer, designated by the name of the buffer;  <li>
 <LI>a variable, designated by its name if it is declared in the translation  the contents of a buffer, designated by the name of the buffer;
 schema's <TT>VAR</TT> section, or given directly between parentheses.  The text  <li>
 generated is the value of that variable evaluated for the element to which the  a variable, designated by its name if it is declared in the translation
 rule applies.  schema's <tt>VAR</tt> section, or given directly between parentheses.  The
 <LI>the value of an attribute, if the element being translated has this  text generated is the value of that variable evaluated for the element to
 attribute.  The attribute is specified by its name;  which the rule applies.
 <LI>the value of a specific presentation rule.  This object can only be  <li>
 generated if the translation rule is for a <A href="#prestransl">specific  the value of an attribute, if the element being translated has this attribute.
 presentation rule</A>.  It is specified by the <TT>Value</TT> keyword;  The attribute is specified by its name;
 <LI>the element's content.  That is, the content of the leaves of the subtree  <li>
 of the translated element.  This is specified by the <TT>Content</TT> keyword;  the value of a specific presentation rule.  This object can only be generated
 <LI>the comment attached to the element.  When the element doesn't have a  if the translation rule is for a <a href="#prestransl">specific presentation
 comment, nothing is generated.  This is indicated by the <TT>Comment</TT>  rule</a>.  It is specified by the <tt>Value</tt> keyword;
 keyword;  <li>
 <LI>the translation of all attributes of the element (which is primarily used  the element's content.  That is, the content of the leaves of the subtree of
 to apply the attribute translation rules <A href="#sectc5222">before</A> those of  the translated element.  This is specified by the <tt>Content</tt> keyword;
 the element type).  This is specified by the <TT>Attributes</TT> keyword.  <li>
 <LI>the translation of all of the element's specific presentation rules (which  the comment attached to the element.  When the element doesn't have a comment,
 is primarily used to apply the translation rules for the specific presentation  nothing is generated.  This is indicated by the <tt>Comment</tt> keyword;
 rules <A href="#sectc5222">before</A> those of the element or its attributes).   <li>
 This option is specified by the <TT>Presentation</TT> keyword;  the translation of all attributes of the element (which is primarily used to
 <LI>The value of the reference's identifier.<BR>Thot associates a unique  apply the attribute translation rules <a href="#sectc5222">before</a> those of
 identifier with each element in a document.  This identifier (called  the element type).  This is specified by the <tt>Attributes</tt> keyword.
 <EM>reference's identifier</EM> or <EM>label</EM>) is a character string  <li>
 containing the letter `L' followed by digits.  Thot uses it in references for  the translation of all of the element's specific presentation rules (which is
 identifying the referred element.<BR>The <TT>RefId</TT> keyword produces the  primarily used to apply the translation rules for the specific presentation
 reference's identifier of the element to which the translation rule is  rules <a href="#sectc5222">before</a> those of the element or its attributes).
 applied, or the reference's identifier of its first ancestor that is referred  This option is specified by the <tt>Presentation</tt> keyword;
 by a reference or that can be referred by a reference.  <li>
 <LI>the value of a mark pair's unique identifier.  This may only be used for  The value of the reference's identifier.<br>
 <A href="#sectd3285">mark pairs</A> and is indicated by the <TT>PairId</TT>  Thot associates a unique identifier with each element in a document.  This
 keyword.  identifier (called <em>reference's identifier</em> or <em>label</em>) is a
 <LI>the directory containing the file being generated (this string includes an  character string containing the letter `L' followed by digits.  Thot uses it
 ending '/', if it is not empty).  This is indicated by the <TT>FileDir</TT>  in references for identifying the referred element.<br>
   The <tt>RefId</tt> keyword produces the reference's identifier of the element
   to which the translation rule is applied, or the reference's identifier of its
   first ancestor that is referred by a reference or that can be referred by a
   reference.
   <li>
   the value of a mark pair's unique identifier.  This may only be used for <a
   href="#sectd3285">mark pairs</a> and is indicated by the <tt>PairId</tt>
 keyword.  keyword.
 <LI>the name of the file being generated (only the name, without the directory  <li>
 and without the extension). This is indicated by the <TT>FileName</TT>  the directory containing the file being generated (this string includes an
   ending '/', if it is not empty).  This is indicated by the <tt>FileDir</tt>
 keyword.  keyword.
 <LI>the extension of the file being generated (this string starts with a dot,  <li>
 if it is not empty).  This is indicated by the <TT>Extension</TT> keyword.  the name of the file being generated (only the name, without the directory and
 <LI>the name of the document being translated.  This is indicated by the  without the extension). This is indicated by the <tt>FileName</tt> keyword.
 <TT>DocumentName</TT> keyword.  <li>
 <LI>the directory containing the document being translated.  This is indicated  the extension of the file being generated (this string starts with a dot, if
 by the <TT>DocumentDir</TT> keyword.  it is not empty).  This is indicated by the <tt>Extension</tt> keyword.
 </UL>  <li>
 <P>  the name of the document being translated.  This is indicated by the
   <tt>DocumentName</tt> keyword.
   <li>
   the directory containing the document being translated.  This is indicated by
   the <tt>DocumentDir</tt> keyword.
   </ul>
   <p>
 When the rule applies to a reference (an element or an attribute defined as a  When the rule applies to a reference (an element or an attribute defined as a
 reference in the structure schema), it can generate a text related to the  reference in the structure schema), it can generate a text related to the
 element referred by that reference.  The rule name is then followed the  element referred by that reference.  The rule name is then followed the
 <TT>Referred</TT> keyword and a specification of the object to be generated  <tt>Referred</tt> keyword and a specification of the object to be generated
 for the referred element.  This specification can be:</P>  for the referred element.  This specification can be:</p>
 <UL>  <ul>
 <LI>the name of a variable.  The rule generates the value of that variable,  <li>
   the name of a variable.  The rule generates the value of that variable,
 computed for the referred element.  computed for the referred element.
 <LI>an element type.  The rule generates the translation of the element of  <li>
 that type, which is in the subtree of the referred element.  If this element  an element type.  The rule generates the translation of the element of that
 is not defined in the structure schema which corresponds to the translation  type, which is in the subtree of the referred element.  If this element is not
 schema (that is, an object defined in another schema), the element's type name  defined in the structure schema which corresponds to the translation schema
 must be followed by the name of its structure schema between parentheses.  (that is, an object defined in another schema), the element's type name must
 <LI>the <TT>RefId</TT> keyword.  The rule generates the reference's identifier  be followed by the name of its structure schema between parentheses.
 of the referred element.  <li>
 <LI>the <TT>DocumentName</TT> keyword.  The rule generates the name of the  the <tt>RefId</tt> keyword.  The rule generates the reference's identifier of
   the referred element.
   <li>
   the <tt>DocumentName</tt> keyword.  The rule generates the name of the
 document to which the referred element belongs.  document to which the referred element belongs.
 <LI>the <TT>DocumentDir</TT> keyword.  The rule generates the name of the  <li>
   the <tt>DocumentDir</tt> keyword.  The rule generates the name of the
 directory that contains the document of the referred element.  directory that contains the document of the referred element.
 </UL>  </ul>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5211>The <TT>Write</TT> rule</A></H3>  
   
 <P>  <h3><a name="sectc5211">The <tt>Write</tt> rule</a></h3>
 The <TT>Write</TT> has the same syntax as the <TT>Create</TT> rule.  It also  <p>
   The <tt>Write</tt> has the same syntax as the <tt>Create</tt> rule.  It also
 produces the same effect, but the generated text is displayed on the user's  produces the same effect, but the generated text is displayed on the user's
 terminal during the translation of the document, instead of being produced in  terminal during the translation of the document, instead of being produced in
 the translated document.  This is useful for helping the user keep track of  the translated document.  This is useful for helping the user keep track of
 the progress of the translation and for prompting the user on the terminal for  the progress of the translation and for prompting the user on the terminal for
 input required by the <TT>Read</TT> rule.</P>  input required by the <tt>Read</tt> rule.</p>
 <PRE>  <pre>               'Write' Object [ Position ] ';'</pre>
                'Write' Object [ Position ] ';'  <p>
 </PRE>  
 <P>  
 Notice: if the translator is launched by the editor (by the ``Save as''  Notice: if the translator is launched by the editor (by the ``Save as''
 command), messages produced by the <TT>Write</TT> rule are not displayed.</P>  command), messages produced by the <tt>Write</tt> rule are not displayed.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 To make the translator display the number of each section being translated on  To make the translator display the number of each section being translated on
 the user's terminal, the following rule is specified for the  the user's terminal, the following rule is specified for the <tt>Section</tt>
 <TT>Section</TT> element type:</P>  element type:</p>
 <PRE>  <pre>Section : BEGIN
 Section : BEGIN  
           Write VarSection;            Write VarSection;
           ...            ...
           END;            END;</pre>
 </PRE>  <p>
 <P>  (see <a href="#varsectexample">above</a> for the definition of the
 (see <A href="#varsectexample">above</A> for the definition of  <tt>VarSection</tt> variable).</p>
 the <TT>VarSection</TT> variable).</P>  <p>
 <P>  
 To display text on the terminal before issuing a read operation with the  To display text on the terminal before issuing a read operation with the
 <TT>Read</TT> rule, the following rule is used:</P>  <tt>Read</tt> rule, the following rule is used:</p>
 <PRE>  <pre>BEGIN
 BEGIN  
 Write 'Enter the name of the destination: ';  Write 'Enter the name of the destination: ';
 ...  ...
 END;  END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5212>The <TT>Read</TT> rule</A></H3>  <h3><a name="sectc5212">The <tt>Read</tt> rule</a></h3>
   <p>
 <P>  The <tt>Read</tt> rule reads text from the terminal during the translation of
 The <TT>Read</TT> rule reads text from the terminal during the translation of  
 the document and saves the text read in one of the buffers declared in the  the document and saves the text read in one of the buffers declared in the
 <TT>BUFFERS</TT> section of the schema.  The buffer to be used is indicated by  <tt>BUFFERS</tt> section of the schema.  The buffer to be used is indicated by
 its name, after the <TT>READ</TT> keyword.  This name can be followed, as in  its name, after the <tt>READ</tt> keyword.  This name can be followed, as in
 the <TT>Create</TT> and <TT>Write</TT> rules, by a keyword indicating if the  the <tt>Create</tt> and <tt>Write</tt> rules, by a keyword indicating if the
 read operation must be performed <TT>Before</TT> or <TT>After</TT> the  read operation must be performed <tt>Before</tt> or <tt>After</tt> the
 translation of the element's content.  If this keyword is absent, the read  translation of the element's content.  If this keyword is absent, the read
 operation is done beforehand.  The text is read into the buffer and remains  operation is done beforehand.  The text is read into the buffer and remains
 there until a rule using the same buffer - possibly the same rule - is  there until a rule using the same buffer - possibly the same rule - is
 applied.</P>  applied.</p>
 <PRE>  <pre>               'Read' BufferID [ Position ] ';'</pre>
                'Read' BufferID [ Position ] ';'  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 The following set of rules tells the user that the translator is waiting for  The following set of rules tells the user that the translator is waiting for
 the entry of some text, reads this text into a buffer and copies the text into  the entry of some text, reads this text into a buffer and copies the text into
 the translated document.</P>  the translated document.</p>
 <PRE>  <pre>BEGIN
 BEGIN  
 Write 'Enter the name of the destination: ';  Write 'Enter the name of the destination: ';
 Read DestName;  Read DestName;
 Create DestName;  Create DestName;
 ...  ...
 END;  END;</pre>
 </PRE>  <p>
 <P>  (see <a href="#destname">above</a> the definition of <tt>DestName</tt>).</p>
 (see <A href="#destname">above</A> the definition of <TT>DestName</TT>).</P>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5213>The <TT>Include</TT> rule</A></H3>  <h3><a name="sectc5213">The <tt>Include</tt> rule</a></h3>
   <p>
 <P>  The <tt>Include</tt> rule, like the <tt>Create</tt> rule, is used to produce
 The <TT>Include</TT> rule, like the <TT>Create</TT> rule, is used to produce  
 text in the translated document.  It inserts constant text which is not  text in the translated document.  It inserts constant text which is not
 defined in the translation schema, but is instead taken from a file.  The  defined in the translation schema, but is instead taken from a file.  The
 file's name  is specified after the <TT>Include</TT> keyword, either directly  file's name  is specified after the <tt>Include</tt> keyword, either directly
 as a character string between apostrophes or as the name of one of the buffers  as a character string between apostrophes or as the name of one of the buffers
 declared in the <TT>BUFFERS</TT> section of the schema.  In the latter case,  declared in the <tt>BUFFERS</tt> section of the schema.  In the latter case,
 the buffer is assumed to contain the file's name.  This can be used when the  the buffer is assumed to contain the file's name.  This can be used when the
 included file's name is known only at the moment of translation.  This only  included file's name is known only at the moment of translation.  This only
 requires that the <TT>Include</TT> rule is preceded by a <TT>Read</TT> rule  requires that the <tt>Include</tt> rule is preceded by a <tt>Read</tt> rule
 which puts the name of the file desired by the user into the buffer.</P>  which puts the name of the file desired by the user into the buffer.</p>
 <P>  <p>
 Like the other rules, it is possible to specify whether the inclusion will  Like the other rules, it is possible to specify whether the inclusion will
 occur before or after the element's content, with the default being before.  occur before or after the element's content, with the default being before.
 The file inclusion is only done at the moment of translation, not during the  The file inclusion is only done at the moment of translation, not during the
Line 7487  compilation of the translation schema. T Line 7452  compilation of the translation schema. T
 exist during the compilation, but it must be accessible at the time of  exist during the compilation, but it must be accessible at the time of
 translation.  Its contents can also be modified between two translations, thus  translation.  Its contents can also be modified between two translations, thus
 producing different results, even if neither the document or the translation  producing different results, even if neither the document or the translation
 schema are modified.</P>  schema are modified.</p>
 <P>  <p>
 During translation, the file to be included is searched for along the schema  During translation, the file to be included is searched for along the schema
 directory path (indicated by the environment variable <TT>THOTSCH</TT>).  The  directory path (indicated by the environment variable <tt>THOTSCH</tt>).  The
 file name is normally only composed of a simple name, without specification of  file name is normally only composed of a simple name, without specification of
 a complete file path.  However, if the filename starts with a '/', it is  a complete file path.  However, if the filename starts with a '/', it is
 considered as an absolute path.</P>  considered as an absolute path.</p>
 <PRE>  <pre>                'Include' File [ Position ] ';'
                 'Include' File [ Position ] ';'  
      File     = FileName / BufferID .       File     = FileName / BufferID .
      FileName = STRING .       FileName = STRING .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 Suppose that it is desirable to print documents of the Article class with a  Suppose that it is desirable to print documents of the Article class with a
 formatter which requires a number of declarations and definitions at the  formatter which requires a number of declarations and definitions at the
 beginning of the file.  The <TT>Include</TT>rule can be used to achieve this.  beginning of the file.  The <tt>Include</tt>rule can be used to achieve this.
 All the declarations and definitions a replaced in a file called  All the declarations and definitions a replaced in a file called
 <TT>DeclarArt</TT> and then the <TT>Article</TT> element type is given the  <tt>DeclarArt</tt> and then the <tt>Article</tt> element type is given the
 following rule:</P>  following rule:</p>
 <PRE>  <pre>Article : BEGIN
 Article : BEGIN  
           Include 'DeclarArt' Before;            Include 'DeclarArt' Before;
           ...            ...
           END;            END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5214>The <TT>Get</TT> rule</A></H3>  <h3><a name="sectc5214">The <tt>Get</tt> rule</a></h3>
   <p>
 <P>  The <tt>Get</tt> rule is used to change the order in which the elements appear
 The <TT>Get</TT> rule is used to change the order in which the elements appear  
 in the translated document.  More precisely, it produces  the translation of a  in the translated document.  More precisely, it produces  the translation of a
 specified element before or after the translation of the content of the  specified element before or after the translation of the content of the
 element to which the rule applies.  The <TT>Before</TT> and <TT>After</TT>  element to which the rule applies.  The <tt>Before</tt> and <tt>After</tt>
 keywords are placed at the end of the rule to specify whether the operation  keywords are placed at the end of the rule to specify whether the operation
 should be performed before or after translation of the rule's element (the  should be performed before or after translation of the rule's element (the
 default is before). The type of the element to be moved must be specified  default is before). The type of the element to be moved must be specified
 after the <TT>Get</TT> keyword, optionally preceded by a keyword indicating  after the <tt>Get</tt> keyword, optionally preceded by a keyword indicating
 where the element will be found in the logical structure of the document:</P>  where the element will be found in the logical structure of the document:</p>
 <DL>  <dl>
 <DT><TT>Included</TT></DT>  <dt><tt>Included</tt></dt>
 <DD>The element to be moved is the first element of the indicated type which is  <dd>
   The element to be moved is the first element of the indicated type which is
 found inside the element to which the rule applies.  found inside the element to which the rule applies.
 </DD>  </dd>
 <DT><TT>Referred</TT></DT>  <dt><tt>Referred</tt></dt>
 <DD>This keyword can only be used if the rule applies to a reference element.  <dd>
 The element to be moved is either the element designated by the reference (if  This keyword can only be used if the rule applies to a reference element. The
 that element is of the specified type), or the first element of the desired  element to be moved is either the element designated by the reference (if that
 type contained within the element designated by the reference.  element is of the specified type), or the first element of the desired type
 </DD>  contained within the element designated by the reference.
 <DT>no keyword</DT>  </dd>
 <DD>If the element to be moved is an associated element, defined in the <A  <dt>no keyword</dt>
 href="#sectc314"><TT>ASSOC</TT> section</A> of the structure schema, all  <dd>
   If the element to be moved is an associated element, defined in the <a
   href="#sectc314"><tt>ASSOC</tt> section</a> of the structure schema, all
 associated elements of this type which have not been translated yet are then  associated elements of this type which have not been translated yet are then
 translated.  Certain elements may in fact have already been translated by a  translated.  Certain elements may in fact have already been translated by a
 <TT>Get Referred</TT> rule.  <tt>Get Referred</tt> rule.
 <P>  <p>
 If the element to be moved is not an associated element, the translator takes  If the element to be moved is not an associated element, the translator takes
 the first element of the indicated type from among the siblings of the rule's  the first element of the indicated type from among the siblings of the rule's
 element.  This is primarily used to change the order of the components of an  element.  This is primarily used to change the order of the components of an
 aggregate.</P>  aggregate.</p>
 </DD>  </dd>
 </DL>  </dl>
 <P>  <p>
 If the element to be moved is defined in a structure schema which is not the  If the element to be moved is defined in a structure schema which is not the
 one which corresponds to the translation schema (in the case of an included  one which corresponds to the translation schema (in the case of an included
 object with a different schema), the type name of this element must be  object with a different schema), the type name of this element must be
 followed, between parentheses, by the name of the structure schema which  followed, between parentheses, by the name of the structure schema which
 defines it.</P>  defines it.</p>
 <PRE>  <pre>                   'Get' [ RelPosition ] ElemID 
                    'Get' [ RelPosition ] ElemID   
                          [ ExtStruct ]                           [ ExtStruct ]
                          [ Position ] ';' /                           [ Position ] ';' /
      RelPosition = 'Included' / 'Referred' .       RelPosition = 'Included' / 'Referred' .
      ExtStruct   = '(' ElemID ')' .       ExtStruct   = '(' ElemID ')' .</pre>
 </PRE>  <p>
 <P>  The <tt>Get</tt> rule has no effect if the element which it is supposed to
 The <TT>Get</TT> rule has no effect if the element which it is supposed to  
 move has already been translated.  Thus, the element will not be duplicated.  move has already been translated.  Thus, the element will not be duplicated.
 It is generally best to associate the rule with the first element which will  It is generally best to associate the rule with the first element which will
 be encountered by the translator in its traversal of the document.  Suppose an  be encountered by the translator in its traversal of the document.  Suppose an
 aggregate has two elements <TT>A</TT> and <TT>B</TT>, with <TT>A</TT>  aggregate has two elements <tt>A</tt> and <tt>B</tt>, with <tt>A</tt>
 appearing first in the logical structure.  To permute these two elements, a  appearing first in the logical structure.  To permute these two elements, a
 <TT>Get B before</TT> rule should be associated with the <TT>A</TT> element  <tt>Get B before</tt> rule should be associated with the <tt>A</tt> element
 type, not the inverse.  Similarly, a rule of the form <TT>Get Included X  type, not the inverse.  Similarly, a rule of the form <tt>Get Included X
 After</TT>, even though syntactically correct, makes no sense since, by the  After</tt>, even though syntactically correct, makes no sense since, by the
 time it will be applied, after the translation of the contents of the element  time it will be applied, after the translation of the contents of the element
 to which it is attached, the <TT>X</TT> element will already have been  to which it is attached, the <tt>X</tt> element will already have been
 translated.</P>  translated.</p>
 <P>  <p>
 The <TT>Get</TT> rule is the only way to obtain the translation of the  The <tt>Get</tt> rule is the only way to obtain the translation of the
 associated elements.  In fact, the translator only traverses the primary tree  associated elements.  In fact, the translator only traverses the primary tree
 of the document and thus does not translate the associated elements, except  of the document and thus does not translate the associated elements, except
 when the translation is explicitly required by a <TT>Get Referred Type</TT> or  when the translation is explicitly required by a <tt>Get Referred Type</tt> or
 <TT>Get Type</TT> rule where <TT>Type</TT> is an associated element type.</P>  <tt>Get Type</tt> rule where <tt>Type</tt> is an associated element type.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 The structure schema defined figures as associated element which are composed  The structure schema defined figures as associated element which are composed
 of some content and a caption.  Moreover, it is possible to make references to  of some content and a caption.  Moreover, it is possible to make references to
 figures, using elements of the <TT>RefFigure</TT> type:</P>  figures, using elements of the <tt>RefFigure</tt> type:</p>
 <PRE>  <pre>     ...
      ...  
      RefFigure = REFERENCE(Figure);       RefFigure = REFERENCE(Figure);
 ASSOC  ASSOC
      Figure    = BEGIN       Figure    = BEGIN
                  Content = NATURE;                   Content = NATURE;
                  Caption = Text;                   Caption = Text;
                  END;                   END;
      ...       ...</pre>
 </PRE>  <p>
 <P>  
 Suppose it would be useful to make a figure appear in the translated document  Suppose it would be useful to make a figure appear in the translated document
 at the place in the text where the first reference to the figure is made.  If  at the place in the text where the first reference to the figure is made.  If
 some figures are not referenced, then they would appear at the end of the  some figures are not referenced, then they would appear at the end of the
 document.  Also, each figure's caption should appear before the content.  The  document.  Also, each figure's caption should appear before the content.  The
 following rules in the translation schema will produce this result:</P>  following rules in the translation schema will produce this result:</p>
 <PRE>  <pre>Article :   BEGIN
 Article :   BEGIN  
             ...              ...
             Get Figures After;              Get Figures After;
             END;              END;
Line 7622  RefFigure : BEGIN Line 7581  RefFigure : BEGIN
 Content :   BEGIN  Content :   BEGIN
             Get Caption Before;              Get Caption Before;
             ...              ...
             END;              END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5215>The <TT>Copy</TT> rule</A></H3>  <h3><a name="sectc5215">The <tt>Copy</tt> rule</a></h3>
   <p>
 <P>  Like the <tt>Get</tt> rule, the <tt>Copy</tt> rule generates the translation
 Like the <TT>Get</TT> rule, the <TT>Copy</TT> rule generates the translation  
 of a specified element, but it acts even if the element has already been  of a specified element, but it acts even if the element has already been
 translated and it allows to copy it or to translate it later. Both rules have  translated and it allows to copy it or to translate it later. Both rules have
 the same syntax.</P>  the same syntax.</p>
 <PRE>  <pre>              'Copy' [ RelPosition ] ElemID 
               'Copy' [ RelPosition ] ElemID                        [ ExtStruct ] [ Position ] ';'</pre>
                      [ ExtStruct ] [ Position ] ';'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc5216">The <tt>Use</tt> rule</a></h3>
 <H3><A name=sectc5216>The <TT>Use</TT> rule</A></H3>  <p>
   The <tt>Use</tt> rule specifies the translation schema to be applied to
 <P>  
 The <TT>Use</TT> rule specifies the translation schema to be applied to  
 objects of a certain class that are part of the document.  This rule only  objects of a certain class that are part of the document.  This rule only
 appears in the rules for the root element of the document (the first type  appears in the rules for the root element of the document (the first type
 defined after the <TT>STRUCT</TT> keyword in the structure schema) or the  defined after the <tt>STRUCT</tt> keyword in the structure schema) or the
 rules of an element defined by an external structure (by another structure  rules of an element defined by an external structure (by another structure
 schema).  Also, the <TT>Use</TT> rule cannot be conditional.</P>  schema).  Also, the <tt>Use</tt> rule cannot be conditional.</p>
 <P>  <p>
 If the rule is applied to an element defined by an external structure, the  If the rule is applied to an element defined by an external structure, the
 <TT>Use</TT> keyword is simply followed by the name of the translation schema  <tt>Use</tt> keyword is simply followed by the name of the translation schema
 to be used for element constructed  according to that external structure.  If  to be used for element constructed  according to that external structure.  If
 the rule is applied to the document's root element, it is formed by the  the rule is applied to the document's root element, it is formed by the
 <TT>Use</TT> keyword followed by the translation schema's name, the  <tt>Use</tt> keyword followed by the translation schema's name, the
 <TT>For</TT> keyword and the name of the external structure to which the  <tt>For</tt> keyword and the name of the external structure to which the
 indicated translation schema should be applied.</P>  indicated translation schema should be applied.</p>
 <PRE>  <pre>               'Use' TrSchema [ 'For' ElemID ] ';'
                'Use' TrSchema [ 'For' ElemID ] ';'       TrSchema = NAME .</pre>
      TrSchema = NAME .  <p>
 </PRE>  If no <tt>Use</tt> rule defines the translation schema to be used for an
 <P>  
 If no <TT>Use</TT> rule defines the translation schema to be used for an  
 external structure which appears in a document, the translator asks the user,  external structure which appears in a document, the translator asks the user,
 during the translation process, which schema should be used. Thus, it is not  during the translation process, which schema should be used. Thus, it is not
 necessary to give the translation schema a <TT>Use</TT> rule for every  necessary to give the translation schema a <tt>Use</tt> rule for every
 external structure used, especially when the choice of translation schemas is  external structure used, especially when the choice of translation schemas is
 to be left to the user.</P>  to be left to the user.</p>
 <P>  <p>
 Notice: if the translator is launched by the editor (by the ``Save as''  Notice: if the translator is launched by the editor (by the ``Save as''
 command), prompts are not displayed.</P>  command), prompts are not displayed.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 The <TT>Article</TT> structure schema uses the  The <tt>Article</tt> structure schema uses the <tt>Formula</tt> external
 <TT>Formula</TT> external structure, defined by another structure schema, for  structure, defined by another structure schema, for mathematical formulas:</p>
 mathematical formulas:</P>  <pre>STRUCTURE Article;
 <PRE>  
 STRUCTURE Article;  
    ...     ...
 STRUCT  STRUCT
    Article = ...     Article = ...
Line 7689  STRUCT Line 7641  STRUCT
    Formula_in_text  = Formula;     Formula_in_text  = Formula;
    Isolated_formula = Formula;     Isolated_formula = Formula;
    ...     ...
 END  END</pre>
 </PRE>  <p>
 <P>  Suppose that it would be useful to use the <tt>FormulaT</tt> translation
 Suppose that it would be useful to use the <TT>FormulaT</TT> translation schema  schema for the formulas of an article.  This can be expressed in two different
 for the formulas of an article.  This can be expressed in two different ways in  ways in the <tt>Article</tt> class translation schema, using the rules:</p>
 the <TT>Article</TT> class translation schema, using the rules:</P>  <pre>RULES
 <PRE>  
 RULES  
     Article :      Article :
        Use FormulaT for Formula;         Use FormulaT for Formula;</pre>
 </PRE>  <p>
 <P>  or:</p>
 or:</P>  <pre>RULES
 <PRE>  
 RULES  
     ...      ...
     Formula :      Formula :
        Use FormulaT;         Use FormulaT;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   <div class="subsection">
 <DIV class="subsection">  
 <H3><A name=sectc5217>The <TT>Remove</TT> rule</A></H3>  <h3><a name="sectc5217">The <tt>Remove</tt> rule</a></h3>
   <p>
 <P>  The <tt>Remove</tt> rule indicates that nothing should be generated, in the
 The <TT>Remove</TT> rule indicates that nothing should be generated, in the  
 translated document, for the content of the element to which the rule applies.  translated document, for the content of the element to which the rule applies.
 The content of that element is simply ignored by the translator.  This does  The content of that element is simply ignored by the translator.  This does
 not prevent the generation of text for the element itself, using the  not prevent the generation of text for the element itself, using the
 <TT>Create</TT> or <TT>Include</TT> rules, for example.</P>  <tt>Create</tt> or <tt>Include</tt> rules, for example.</p>
 <P>  <p>
 The <TT>Remove</TT> rule is simply written with the <TT>Remove</TT> keyword.  The <tt>Remove</tt> rule is simply written with the <tt>Remove</tt> keyword.
 It is terminated, like all rules, by a semicolon.</P>  It is terminated, like all rules, by a semicolon.</p>
 <PRE>  <pre>               'Remove' ';'</pre>
                'Remove' ';'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc5218">The <tt>NoTranslation</tt> rule</a></h3>
 <H3><A name=sectc5218>The <TT>NoTranslation</TT> rule</A></H3>  <p>
   The <tt>NoTranslation</tt> rule indicates to the translator that it must not
 <P>  
 The <TT>NoTranslation</TT> rule indicates to the translator that it must not  
 translate the content of the leaves of the element to which it applies. In  translate the content of the leaves of the element to which it applies. In
 contrast to the <TT>Remove</TT> rule, it does not suppress the content of the  contrast to the <tt>Remove</tt> rule, it does not suppress the content of the
 element, but it inhibits the translation of character strings, symbols, and  element, but it inhibits the translation of character strings, symbols, and
 graphical elements contained in the element.  These are retrieved so that  graphical elements contained in the element.  These are retrieved so that
 after the translation of the document, the rules of the <A  after the translation of the document, the rules of the <a
 href="#sectc5225"><TT>TEXTTRANSLATE</TT>, <TT>SYMBTRANSLATE</TT> and  href="#sectc5225"><tt>TEXTTRANSLATE</tt>, <tt>SYMBTRANSLATE</tt> and
 <TT>GRAPHTRANSLATE</TT> sections</A> will not be applied to them.</P>  <tt>GRAPHTRANSLATE</tt> sections</a> will not be applied to them.</p>
 <P>  <p>
 The <TT>NoTranslation</TT> rule is written with the <TT>NoTranslation</TT>  The <tt>NoTranslation</tt> rule is written with the <tt>NoTranslation</tt>
 keyword followed by a semicolon.</P>  keyword followed by a semicolon.</p>
 <PRE>  <pre>               'NoTranslation' ';'</pre>
                'NoTranslation' ';'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc5219">The <tt>NoLineBreak</tt> rule</a></h3>
 <H3><A name=sectc5219>The <TT>NoLineBreak</TT> rule</A></H3>  <p>
   The <tt>NoLineBreak</tt> rule indicates to the translator that it must not
 <P>  
 The <TT>NoLineBreak</TT> rule indicates to the translator that it must not  
 generate additional line breaks in the output produced for the element to  generate additional line breaks in the output produced for the element to
 which it applies.  This is as if it was an <A href="#sectc522">instruction  which it applies.  This is as if it was an <a href="#sectc522">instruction
 <TT>LINELENGTH 0;</TT></A> at the beginning of the translation schema, but  <tt>LINELENGTH 0;</tt></a> at the beginning of the translation schema, but
 only for the current element.</P>  only for the current element.</p>
 <P>  <p>
 The <TT>NoLineBreak</TT> rule is written with the <TT>NoLineBreak</TT> keyword  The <tt>NoLineBreak</tt> rule is written with the <tt>NoLineBreak</tt> keyword
 followed by a semicolon.</P>  followed by a semicolon.</p>
 <PRE>  <pre>               'NoLineBreak' ';'</pre>
                'NoLineBreak' ';'  </div>
 </PRE>  
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5220>The <TT>ChangeMainFile</TT> rule</A></H3>  
   
 <P>  <h3><a name="sectc5220">The <tt>ChangeMainFile</tt> rule</a></h3>
   <p>
 When the translation program starts, it opens a main output file, whose name  When the translation program starts, it opens a main output file, whose name
 is given as a parameter of the translator.  All <A  is given as a parameter of the translator.  All <a
 href="#sectc5210"><TT>Create</TT> rules</A> without explicit indication of  href="#sectc5210"><tt>Create</tt> rules</a> without explicit indication of the
 the output file write sequentially in this file.  When a  output file write sequentially in this file.  When a <tt>ChangeMainFile</tt>
 <TT>ChangeMainFile</TT> rule is executed, the main output file is closed and  rule is executed, the main output file is closed and it is replaced by a new
 it is replaced by a new one, whose name is specified in the  one, whose name is specified in the <tt>ChangeMainFile</tt> rule.  The
 <TT>ChangeMainFile</TT> rule.  The <TT>Create</TT> rules without indication of  <tt>Create</tt> rules without indication of the output file that are then
 the output file that are then executed write in this new file.  Several  executed write in this new file.  Several <tt>ChangeMainFile</tt> rules can be
 <TT>ChangeMainFile</TT> rules can be executed during the same translation, for  executed during the same translation, for dividing the main output into
 dividing the main output into several files.</P>  several files.</p>
 <P>  <p>
 This rule is written with the <TT>ChangeMainFile</TT> keyword followed by the  This rule is written with the <tt>ChangeMainFile</tt> keyword followed by the
 name of a variable that specifies the name of the new main file. The keyword  name of a variable that specifies the name of the new main file. The keyword
 <TT>Before</TT> or <TT>After</TT> can be placed at the end of the rule to  <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule to
 specify whether the operation should be performed before or after translation  specify whether the operation should be performed before or after translation
 of the rule's element (the default is before). This rule, like all translation  of the rule's element (the default is before). This rule, like all translation
 rules, is terminated by a semicolon.</P>  rules, is terminated by a semicolon.</p>
 <PRE>  <pre>               'ChangeMainFile' VarID [ Position ] ';'</pre>
                'ChangeMainFile' VarID [ Position ] ';'  <blockquote class="example">
 </PRE>  <p>
 <BLOCKQUOTE class="example">  <strong>Example:</strong></p>
 <P>  <p>
 <STRONG>Example:</STRONG></P>  
 <P>  
 To generate the translation of each section in a different file, the following  To generate the translation of each section in a different file, the following
 rule can be associated with type <TT>Section</TT>.  That rule uses the <A  rule can be associated with type <tt>Section</tt>.  That rule uses the <a
 href="#varoutputfile"><TT>VarOutpuFile</TT> variable</A> defined above.</P>  href="#varoutputfile"><tt>VarOutpuFile</tt> variable</a> defined above.</p>
 <PRE>  <pre>     Section:
      Section:           ChangeMainFile VarOutpuFile Before;</pre>
          ChangeMainFile VarOutpuFile Before;  <p>
 </PRE>  If <tt>output.txt</tt> is the name of the output file specified when starting
 <P>  
 If <TT>output.txt</TT> is the name of the output file specified when starting  
 the translation program, translated sections are written in files  the translation program, translated sections are written in files
 <TT>output1.txt</TT>, <TT>output2.txt</TT>, etc.</P>  <tt>output1.txt</tt>, <tt>output2.txt</tt>, etc.</p>
 </BLOCKQUOTE>  </blockquote>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5220a>The <TT>RemoveFile</TT> rule</A></H3>  
   
 <P>  <h3><a name="sectc5220a">The <tt>RemoveFile</tt> rule</a></h3>
   <p>
 Files may be used for storing temporary data that are no longer needed when  Files may be used for storing temporary data that are no longer needed when
 the translation of a document is complete.  These files may be removed by  the translation of a document is complete.  These files may be removed by the
 the <TT>RemoveFile</TT> rule.</P>  <tt>RemoveFile</tt> rule.</p>
 <P>  <p>
 This rule is written with the <TT>RemoveFile</TT> keyword followed by the  This rule is written with the <tt>RemoveFile</tt> keyword followed by the name
 name of a variable that specifies the name of the file to be  of a variable that specifies the name of the file to be removed.  The keyword
 removed.  The keyword <TT>Before</TT> or <TT>After</TT> can be placed at the  <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule to
 end of the rule to specify whether the operation should be performed before  specify whether the operation should be performed before or after translation
 or after translation of the rule's element (the default is before).  This  of the rule's element (the default is before).  This rule, like all
 rule, like all translation rules, is terminated by a semicolon.</P>  translation rules, is terminated by a semicolon.</p>
 <PRE>  <pre>               'RemoveFile' VarID [ Position ] ';'</pre>
                'RemoveFile' VarID [ Position ] ';'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc5221">The <tt>Set</tt> and <tt>Add</tt> rules</a></h3>
 <H3><A name=sectc5221>The <TT>Set</TT> and <TT>Add</TT> rules</A></H3>  <p>
   The <tt>Set</tt> and <tt>Add</tt> rules are used for modifying the value of
 <P>  counters that have no <a href="#sectc524">counting function</a>.  Only this
 The <TT>Set</TT> and <TT>Add</TT> rules are used for modifying the value of  type of counter can be used in the <tt>Set</tt> and <tt>Add</tt> rules.</p>
 counters that have no <A href="#sectc524">counting function</A>.  Only this  <p>
 type of counter can be used in the <TT>Set</TT> and <TT>Add</TT> rules.</P>  Both rules have the same syntax: after the keyword <tt>Set</tt> or
 <P>  <tt>Add</tt> appear the counter name and the value to assign to the counter
 Both rules have the same syntax: after the keyword <TT>Set</TT> or  (<tt>Set</tt> rule) or the value to be added to the counter (<tt>Add</tt>
 <TT>Add</TT> appear the counter name and the value to assign to the counter  rule).  The keyword <tt>Before</tt> or <tt>After</tt> can follow that value to
 (<TT>Set</TT> rule) or the value to be added to the counter (<TT>Add</TT>  
 rule).  The keyword <TT>Before</TT> or <TT>After</TT> can follow that value to  
 indicate when the rule must be applied: before or after the element's content  indicate when the rule must be applied: before or after the element's content
 is translated. By default, <TT>Before</TT> is assumed.  A semicolon terminates  is translated. By default, <tt>Before</tt> is assumed.  A semicolon terminates
 the rule.</P>  the rule.</p>
 <PRE>  <pre>               'Set' CounterID InitValue [ Position ] ';' /
                'Set' CounterID InitValue [ Position ] ';' /                 'Add' CounterID Increment [ Position ] ';'</pre>
                'Add' CounterID Increment [ Position ] ';'  </div>
 </PRE>  
 </DIV>  <div class="subsection">
   
 <DIV class="subsection">  <h3><a name="sectc5221a">The <tt>Indent</tt> rule</a></h3>
 <H3><A name=sectc5221a>The <TT>Indent</TT> rule</A></H3>  <p>
   The <tt>Indent</tt> rule is used to modify the value of text indentation in
 <P>  the output files.</p>
 The <TT>Indent</TT> rule is used to modify the value of text indentation  <p>
 in the output files.</P>  Each time the translator creates a new line in an output file, it generates a
 <P>  variable number of space characters at the beginning of the new line.  By
 Each time the translator creates a new line in an output file, it generates  
 a variable number of space characters at the beginning of the new line.  By  
 default, the number of these characters (the indentation) is 0.  It can be  default, the number of these characters (the indentation) is 0.  It can be
 changed with the <TT>Indent</TT> rule.</P>  changed with the <tt>Indent</tt> rule.</p>
 <P>  <p>
 The rule begins with the <TT>Indent</TT> keyword, followed by the indentation  The rule begins with the <tt>Indent</tt> keyword, followed by the indentation
 sign (optional) and value and a keyword <TT>Before</TT> or <TT>After</TT>  sign (optional) and value and a keyword <tt>Before</tt> or <tt>After</tt>
 indicating that the indentation should be changed <A href="#sectc5222">before  indicating that the indentation should be changed <a href="#sectc5222">before
 or after</A> the element's content is generated.  If the position is not  or after</a> the element's content is generated.  If the position is not
 indicated, the indentation is changed before the element's content is  indicated, the indentation is changed before the element's content is
 generated.  This rule, like all translation rules, is terminated by a  generated.  This rule, like all translation rules, is terminated by a
 semicolon.</P>  semicolon.</p>
 <P>  <p>
 The indentation value is indicated by an integer, which is the number of  The indentation value is indicated by an integer, which is the number of space
 space characters to be generated at the beginning of each new line.  characters to be generated at the beginning of each new line. A sign
 A sign (<TT>+</TT> or <TT>-</TT>) can appear before the integer to indicate  (<tt>+</tt> or <tt>-</tt>) can appear before the integer to indicate that the
 that the value is relative: the current value of indentation is incremented  value is relative: the current value of indentation is incremented (if sign is
 (if sign is <TT>+</TT>) or decremented (if sign is <TT>-</TT>) by the  <tt>+</tt>) or decremented (if sign is <tt>-</tt>) by the specified value.</p>
 specified value.  <p>
 <P>  Like the <a href="#sectc5210"><tt>Create</tt> rule</a>, the <tt>Indent</tt>
 Like the <A href="#sectc5210"><TT>Create</TT> rule</A>, the <TT>Indent</TT>  keyword can be followed by the <tt>IN</tt> keyword and by the name of a <a
 keyword can be followed by the <TT>IN</TT> keyword and by the name of a  href="#sectc526">variable</a>.  This means that the rule must not change
 <A href="#sectc526">variable</A>.  This means that the rule must not change  
 indentation in the main output file, but in the file whose name is specified  indentation in the main output file, but in the file whose name is specified
 by the variable (by default, indentation is changed in the main output  by the variable (by default, indentation is changed in the main output
 file).</P>  file).</p>
 <PRE>  <pre>               'Indent' [ 'IN' VarID ] [ IndentSign ]
                'Indent' [ 'IN' VarID ] [ IndentSign ]  
                         IndentValue [ Position ] ';' .                          IndentValue [ Position ] ';' .
   
 IndentSign    = '+' / '-' .  IndentSign    = '+' / '-' .
 IndentValue   = NUMBER .  IndentValue   = NUMBER .</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5222>Rule application order</A></H3>  
   
 <P>  <h3><a name="sectc5222">Rule application order</a></h3>
   <p>
 The translator translates the elements which comprise the document in the  The translator translates the elements which comprise the document in the
 order induced by the tree structure, except when the <TT>Get</TT> rule is used  order induced by the tree structure, except when the <tt>Get</tt> rule is used
 to change the order of translation.  For each element, the translator first  to change the order of translation.  For each element, the translator first
 applies the rules specified for the element's type that must be applied before  applies the rules specified for the element's type that must be applied before
 translation of the element's content (rules ending with the <TT>Before</TT>  translation of the element's content (rules ending with the <tt>Before</tt>
 keyword or which have no position keyword).  If several rules meet these  keyword or which have no position keyword).  If several rules meet these
 criteria, the translator applies them in the order in where they appear in the  criteria, the translator applies them in the order in where they appear in the
 translation schema.</P>  translation schema.</p>
 <P>  <p>
 It then applies all <A href="#sectc5223">rules for the attributes</A> which  It then applies all <a href="#sectc5223">rules for the attributes</a> which
 the element has and which must be applied before the translation of the  the element has and which must be applied before the translation of the
 element's content (rules ending with the <TT>Before</TT> keyword or which have  element's content (rules ending with the <tt>Before</tt> keyword or which have
 no position keyword).  For one attribute value, the translator applies the  no position keyword).  For one attribute value, the translator applies the
 rules in the order in which they are defined in the translation schema.</P>  rules in the order in which they are defined in the translation schema.</p>
 <P>  <p>
 The same procedure is followed with translation rules for specific  The same procedure is followed with translation rules for specific
 presentations.</P>  presentations.</p>
 <P>  <p>
 Next, the element's content is translated, as long as a <TT>Remove</TT> rule  Next, the element's content is translated, as long as a <tt>Remove</tt> rule
 does not apply.</P>  does not apply.</p>
 <P>  <p>
 In the next step, the translator applies rules for the specific presentation  In the next step, the translator applies rules for the specific presentation
 of the element that are to be applied after translation of the content (rules  of the element that are to be applied after translation of the content (rules
 which end with the <TT>After</TT> keyword).  The rules for each type of  which end with the <tt>After</tt> keyword).  The rules for each type of
 presentation rule or each value are applied in the order in which the  presentation rule or each value are applied in the order in which the
 translation appear in the schema.</P>  translation appear in the schema.</p>
 <P>  <p>
 Then, the same procedure is followed for translation rules for attributes of  Then, the same procedure is followed for translation rules for attributes of
 the element.</P>  the element.</p>
 <P>  <p>
 Finally, the translator applies rules for the element which must be applied  Finally, the translator applies rules for the element which must be applied
 after translation of the element's content.  These rules are applied in the  after translation of the element's content.  These rules are applied in the
 order that they appear in the translation schema.  When the translation of an  order that they appear in the translation schema.  When the translation of an
 element is done, the translator procedes to translate the following  element is done, the translator procedes to translate the following
 element.</P>  element.</p>
 <P>  <p>
 This order can be changed with the <TT>Attributes</TT> and  This order can be changed with the <tt>Attributes</tt> and
 <TT>Presentation</TT> options of the <A href="#sectc5210"><TT>Create</TT>  <tt>Presentation</tt> options of the <a href="#sectc5210"><tt>Create</tt>
 rule</A>.</P>  rule</a>.</p>
 </DIV>  </div>
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5223>Translation of logical attributes</A></H3>  
   
 <P>  <h3><a name="sectc5223">Translation of logical attributes</a></h3>
   <p>
 After the rules for the element types, the translation schema defines rules  After the rules for the element types, the translation schema defines rules
 for attribute values.  This section begins with the <TT>ATTRIBUTES</TT>  for attribute values.  This section begins with the <tt>ATTRIBUTES</tt>
 keyword and is composed of a sequence of rule blocks each preceded by an  keyword and is composed of a sequence of rule blocks each preceded by an
 attribute name and an optional value or value range.</P>  attribute name and an optional value or value range.</p>
 <P>  <p>
 If the attribute's name appears alone before the rule block, the rule are  If the attribute's name appears alone before the rule block, the rule are
 applied to all element which have the attribute, no matter what value the  applied to all element which have the attribute, no matter what value the
 attribute has.  In this case, the attribute name is followed by a colon before  attribute has.  In this case, the attribute name is followed by a colon before
 the beginning of the rule block.</P>  the beginning of the rule block.</p>
 <P>  <p>
 The attribute's name can be followed by the name of an element type between  The attribute's name can be followed by the name of an element type between
 parentheses.  This says, as in presentation schemas, that the rule block which  parentheses.  This says, as in presentation schemas, that the rule block which
 follows applies not to the element which has the attribute, but to its  follows applies not to the element which has the attribute, but to its
 descendants of the type indicated between the parentheses.</P>  descendants of the type indicated between the parentheses.</p>
 <P>  <p>
 If values are given after the attribute name (or after the name of the element  If values are given after the attribute name (or after the name of the element
 type), the rules are applied only when the attribute has the indicated values.  type), the rules are applied only when the attribute has the indicated values.
 The same attribute can appear several times, with different values and  The same attribute can appear several times, with different values and
 different translation rules.  Attribute values are indicated in the same way  different translation rules.  Attribute values are indicated in the same way
 as in <A href="#sectc528">conditions</A> and are followed by a colon before  as in <a href="#sectc528">conditions</a> and are followed by a colon before
 the block of rules.</P>  the block of rules.</p>
 <P>  <p>
 The rule block associated with an attribute is either a simple rule or a  The rule block associated with an attribute is either a simple rule or a
 sequence of rules delimited by the <TT>BEGIN</TT> and <TT>END</TT> keywords.  sequence of rules delimited by the <tt>BEGIN</tt> and <tt>END</tt> keywords.
 Note that rules associated with attribute values cannot be conditional.</P>  Note that rules associated with attribute values cannot be conditional.</p>
 <P>  <p>
 Translation rules are not required for all attributes (or their values)  Translation rules are not required for all attributes (or their values)
 defined in a structure schema.  Only those attributes for which a particular  defined in a structure schema.  Only those attributes for which a particular
 action must be performed by the translator must have such rules.  The rules  action must be performed by the translator must have such rules.  The rules
 that can be used are those described above, from <A  that can be used are those described above, from <a
 href="#sectc5210"><TT>Create</TT></A> to <A  href="#sectc5210"><tt>Create</tt></a> to <a
 href="#sectc5218"><TT>NoTranslation</TT></A>.</P>  href="#sectc5218"><tt>NoTranslation</tt></a>.</p>
 <PRE>  <pre>     AttrSeq       = TransAttr &lt; TransAttr > .
      AttrSeq       = TransAttr &lt; TransAttr > .  
      TransAttr     = AttrID [ '(' ElemID ')' ]        TransAttr     = AttrID [ '(' ElemID ')' ] 
                      [ RelatAttr ] ':' RuleSeq .                       [ RelatAttr ] ':' RuleSeq .
      AttrID        = NAME .       AttrID        = NAME .
      ElemID        = NAME .       ElemID        = NAME .</pre>
 </PRE>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  
 The structure defined the ``Language'' attribute which can take the values  The structure defined the ``Language'' attribute which can take the values
 ``French'' and ``English''.  To have the French parts of the original document  ``French'' and ``English''.  To have the French parts of the original document
 removed and prevent the translation of the leaves of the English parts, the  removed and prevent the translation of the leaves of the English parts, the
 following rules would be used:</P>  following rules would be used:</p>
 <PRE>  <pre>ATTRIBUTES
 ATTRIBUTES  
    Language=French :     Language=French :
       Remove;        Remove;
    Language=English :     Language=English :
       NoTranslation;        NoTranslation;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5224>Translation of specific presentations</A></H3>  
   
 <P>  <h3><a name="sectc5224">Translation of specific presentations</a></h3>
   <p>
 After the rules for attributes, the translation schema defines rules for the  After the rules for attributes, the translation schema defines rules for the
 specific presentation.  This section begins with the <TT>PRESENTATION</TT>  specific presentation.  This section begins with the <tt>PRESENTATION</tt>
 keyword and is composed of a sequence of translation rule blocks each preceded  keyword and is composed of a sequence of translation rule blocks each preceded
 by a presentation rule name, optionally accompanied by a part which depends on  by a presentation rule name, optionally accompanied by a part which depends on
 the particular presentation rule.</P>  the particular presentation rule.</p>
 <P>  <p>
 Each of these translation rule blocks is applied when the translator operates  Each of these translation rule blocks is applied when the translator operates
 on an element which has a specific presentation rule of the type indicated at  on an element which has a specific presentation rule of the type indicated at
 the head of the block.  Depending on the type of the specific presentation  the head of the block.  Depending on the type of the specific presentation
 rule, it is possible to specify values of the presentation rule for which the  rule, it is possible to specify values of the presentation rule for which the
 translation rule block should be applied.</P>  translation rule block should be applied.</p>
 <P>  <p>
 There are three categories of the presentation rules:</P>  There are three categories of the presentation rules:</p>
 <UL>  <ul>
 <LI>rules taking numeric values: <TT>Size</TT>, <TT>Indent</TT>,  <li>
 <TT>LineSpacing</TT>, <TT>LineWeight</TT>,  rules taking numeric values: <tt>Size</tt>, <tt>Indent</tt>,
 <LI>rules whose values are taken from a predefined list (i.e. whose type is an  <tt>LineSpacing</tt>, <tt>LineWeight</tt>,
 enumeration): <TT>Adjust</TT>, <TT>Justify</TT>, <TT>Hyphenate,/TT>,  <li>
 <TT>Style</TT>, <TT>Font</TT>, <TT>UnderLine</TT>, <TT>Thickness</TT>,  rules whose values are taken from a predefined list (i.e. whose type is an
 <TT>LineStyle</TT>,</TT>  enumeration): <tt>Adjust</tt>, <tt>Justify</tt>, <tt>Hyphenate,/TT>,
 <LI>rules whose value is a name: <TT>FillPattern</TT>, <TT>Background</TT>,  <tt>Style</tt>, <tt>Font</tt>, <tt>UnderLine</tt>, <tt>Thickness</tt>,
 <TT>Foreground</TT>.  <tt>LineStyle</tt>,</tt>
 </UL>  <li>
 <P>  rules whose value is a name: <tt>FillPattern</tt>, <tt>Background</tt>,
   <tt>Foreground</tt>.
   </ul>
   <p>
 For presentation rules of the first category, the values which provoke  For presentation rules of the first category, the values which provoke
 application of the translation rules are indicated in the same manner as for  application of the translation rules are indicated in the same manner as for
 <A href="#relattr">numeric attributes</A>.  This can be either a unique value  <a href="#relattr">numeric attributes</a>.  This can be either a unique value
 or range of values.  For a unique value, the value (an integer) is simply  or range of values.  For a unique value, the value (an integer) is simply
 preceded by an equals sign.  Value ranges can be specified in one of three  preceded by an equals sign.  Value ranges can be specified in one of three
 ways:</P>  ways:</p>
 <UL>  <ul>
 <LI>all values less than a given value (this value is preceded by a ``less  <li>
 than'' sign '<TT>&lt;</TT>'),  all values less than a given value (this value is preceded by a ``less than''
 <LI>all values greater than a given value (this value is preceded by a`  sign '<tt>&lt;</tt>'),
 `greater than'' sign '<TT>></TT>'),  <li>
 <LI>all values falling in an interval, bounds included.  The range of values  all values greater than a given value (this value is preceded by a` `greater
 is then specified <TT>IN [</TT>Minimum<TT>..</TT>Maximum<TT>]</TT>, where  than'' sign '<tt>></tt>'),
 Minimum and Maximum are integers.  <li>
 </UL>  all values falling in an interval, bounds included.  The range of values is
 <P>  then specified <tt>IN [</tt>Minimum<tt>..</tt>Maximum<tt>]</tt>, where Minimum
   and Maximum are integers.
   </ul>
   <p>
 All numeric values can be negative, in which case the integer is preceded by a  All numeric values can be negative, in which case the integer is preceded by a
 minus sign.  All values must be given in typographers points.</P>  minus sign.  All values must be given in typographers points.</p>
 <P>  <p>
 For presentation rules whose values are taken from a predefined list, the  For presentation rules whose values are taken from a predefined list, the
 value which provokes application of the translation rules is simply indicated  value which provokes application of the translation rules is simply indicated
 by the equals sign followed by the name of the value.</P>  by the equals sign followed by the name of the value.</p>
 <P>  <p>
 For presentation rules whose values are names, the value which provokes the  For presentation rules whose values are names, the value which provokes the
 application of translation rules is simply indicated by the equals sign  application of translation rules is simply indicated by the equals sign
 followed by the name of the value.  The names of the fill patterns (the  followed by the name of the value.  The names of the fill patterns (the
 <TT>FillPattern</TT> rule) and of the colors (the <TT>Foreground</TT> and  <tt>FillPattern</tt> rule) and of the colors (the <tt>Foreground</tt> and
 <TT>Background</TT> rules) used in Thot are the same as in the P language.</P>  <tt>Background</tt> rules) used in Thot are the same as in the P language.</p>
 <PRE>  <pre>     PresSeq        = PresTrans &lt; PresTrans > .
      PresSeq        = PresTrans &lt; PresTrans > .  
      PresTrans      = PresRule ':' RuleSeq .       PresTrans      = PresRule ':' RuleSeq .
      PresRule       = 'Size' [ PresRelation ] /       PresRule       = 'Size' [ PresRelation ] /
                       'Indent' [ PresRelation ] /                        'Indent' [ PresRelation ] /
Line 8093  followed by the name of the value.  The Line 8024  followed by the name of the value.  The
      PresIntervalMin= NUMBER .       PresIntervalMin= NUMBER .
      PresIntervalMax= NUMBER .       PresIntervalMax= NUMBER .
      PresValue      = [ '-' ] PresVal .       PresValue      = [ '-' ] PresVal .
      PresVal        = NUMBER .       PresVal        = NUMBER .</pre>
 </PRE>  <p>
 <P>  The <a name="prestransl">translation rules associated with specific
 The <A name="prestransl">translation rules associated with specific  presentation rules</a> can use the value of the specific presentation rule
 presentation rules</A> can use the value of the specific presentation rule  
 that causes them to be applied.  This behavior is designated by the keyword  that causes them to be applied.  This behavior is designated by the keyword
 <TT>Value</TT>. For numerically-valued presentation rules, the numeric value  <tt>Value</tt>. For numerically-valued presentation rules, the numeric value
 is produced.  For other presentation rules, the name of the value is  is produced.  For other presentation rules, the name of the value is
 produced.</P>  produced.</p>
 <P>  <p>
 It should be noted that modifications to the layout of the document's elements  It should be noted that modifications to the layout of the document's elements
 that are made using the combination of the control key and a mouse button will  that are made using the combination of the control key and a mouse button will
 have no effect on the translation of the document.</P>  have no effect on the translation of the document.</p>
 <BLOCKQUOTE class="example">  <blockquote class="example">
 <P>  <p>
 <STRONG>Example:</STRONG></P>  <strong>Example:</strong></p>
 <P>  <p>
 Suppose that it is desirable to use the same font sizes as in the specific  Suppose that it is desirable to use the same font sizes as in the specific
 presentation, but the font size must be between 10 and 18 typographer's points.  presentation, but the font size must be between 10 and 18 typographer's
 If font size is set in the translated document by the string  points. If font size is set in the translated document by the string
 <TT>pointsize=n</TT> where <TT>n</TT> is the font size in typographer's points  <tt>pointsize=n</tt> where <tt>n</tt> is the font size in typographer's points
 then the following rules will suffice:</P>  then the following rules will suffice:</p>
 <PRE>  <pre>PRESENTATION
 PRESENTATION  
    Size &lt; 10 :     Size &lt; 10 :
         Create 'pointsize=10';          Create 'pointsize=10';
    Size in [10..18] :     Size in [10..18] :
Line 8125  PRESENTATION Line 8054  PRESENTATION
         Create Value;          Create Value;
         END;          END;
    Size > 18 :     Size > 18 :
         Create 'pointsize=18';          Create 'pointsize=18';</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  
   
 <DIV class="subsection">  <div class="subsection">
 <H3><A name=sectc5225>Recoding of characters, symbols and graphics</A></H3>  
   
 <P>  <h3><a name="sectc5225">Recoding of characters, symbols and graphics</a></h3>
   <p>
 The coding of characters, graphical elements and symbols as defined in Thot  The coding of characters, graphical elements and symbols as defined in Thot
 does not necessarily correspond to what is required by an application to which  does not necessarily correspond to what is required by an application to which
 a Thot document must be exported.  Because of this the translator can recode  a Thot document must be exported.  Because of this the translator can recode
 these terminal elements of the documents structure.  The last sections of a  these terminal elements of the documents structure.  The last sections of a
 translation schema are intended for this purpose, each specifying the recoding  translation schema are intended for this purpose, each specifying the recoding
 rules for one type of terminal element.</P>  rules for one type of terminal element.</p>
 <P>  <p>
 The recoding rules for character strings are grouped by alphabets. There is a  The recoding rules for character strings are grouped by alphabets. There is a
 group of rules for each alphabet of the Thot document that must be translated.  group of rules for each alphabet of the Thot document that must be translated.
 Each such group of rules begins with the <TT>TEXTTRANSLATE</TT> keyword,  Each such group of rules begins with the <tt>TEXTTRANSLATE</tt> keyword,
 followed by the specification of the alphabet to translate and the recoding  followed by the specification of the alphabet to translate and the recoding
 rules, between the <TT>BEGIN</TT> and <TT>END</TT> keywords unless there is  rules, between the <tt>BEGIN</tt> and <tt>END</tt> keywords unless there is
 only one recoding rule for the alphabet. The specification of the alphabet is  only one recoding rule for the alphabet. The specification of the alphabet is
 not required: by default it is assumed to the Latin alphabet (the ISO Latin-1  not required: by default it is assumed to the Latin alphabet (the ISO Latin-1
 character set).</P>  character set).</p>
 <P>  <p>
 Each recoding rule is formed by a source string between apostrophes and a  Each recoding rule is formed by a source string between apostrophes and a
 target string, also between apostrophes, the two strings being separated by  target string, also between apostrophes, the two strings being separated by
 the arrow symbol (<TT>-></TT>), formed by the ``minus'' and ``greater than''  the arrow symbol (<tt>-></tt>), formed by the ``minus'' and ``greater than''
 characters.  The rule is terminated by a semi-colon.</P>  characters.  The rule is terminated by a semi-colon.</p>
 <PRE>  <pre>     TextTransSeq = [ Alphabet ] TransSeq .
      TextTransSeq = [ Alphabet ] TransSeq .  
      Alphabet     = NAME .       Alphabet     = NAME .
      TransSeq     ='BEGIN' &lt; Translation > 'END' ';' /       TransSeq     ='BEGIN' &lt; Translation > 'END' ';' /
                     Translation .                      Translation .
      Translation  = Source [ '->' Target ] ';' .       Translation  = Source [ '->' Target ] ';' .
      Source       = STRING .       Source       = STRING .
      Target       = STRING .       Target       = STRING .</pre>
 </PRE>  <p>
 <P>  
 One such rule signifies that when the source string appears in a text leaf of  One such rule signifies that when the source string appears in a text leaf of
 the document being translated, the translator must replace it, in the  the document being translated, the translator must replace it, in the
 translated document, with the target string.  The source string and the target  translated document, with the target string.  The source string and the target
 string can have different lengths and the target string can be empty.  In this  string can have different lengths and the target string can be empty.  In this
 last case, the translator simply suppresses every occurrence of the source  last case, the translator simply suppresses every occurrence of the source
 string in the translated document.</P>  string in the translated document.</p>
 <P>  <p>
 For a given alphabet, the order of the rules is not important and has no  For a given alphabet, the order of the rules is not important and has no
 significance because the T language compiler reorders the rules in ways that  significance because the T language compiler reorders the rules in ways that
 speed up the translator's work.  The total number of recoding rules is limited  speed up the translator's work.  The total number of recoding rules is limited
 by the compiler as is the maximum length of the source and target strings.</P>  by the compiler as is the maximum length of the source and target strings.</p>
 <P>  <p>
 The recoding rules for symbols and graphical elements are written in the same  The recoding rules for symbols and graphical elements are written in the same
 manner as the recoding rules for character strings.  They are preceded,  manner as the recoding rules for character strings.  They are preceded,
 respectively, by the <TT>SYMBTRANSLATE</TT> and <TT>GRAPHTRANSLATE</TT> and so  respectively, by the <tt>SYMBTRANSLATE</tt> and <tt>GRAPHTRANSLATE</tt> and so
 not require a specification of the alphabet. Their source string is limited to  not require a specification of the alphabet. Their source string is limited to
 one character, since, in Thot, each symbol and each graphical element is  one character, since, in Thot, each symbol and each graphical element is
 represented by a single character.  The symbol and graphical element codes are  represented by a single character.  The symbol and graphical element codes are
 defined along with the <A href="#sect7">non-standard character  defined along with the <a href="#sect7">non-standard character codes</a>.</p>
 codes</A>.</P>  <blockquote class="example">
 <BLOCKQUOTE class="example">  <p>
 <P>  <strong>Example:</strong></p>
 <STRONG>Example:</STRONG></P>  <p>
 <P>  In a translation schema producing documents destined for use with the
 In a translation schema producing documents destined for use with  L<sup>A</sup>T<sub><big>E</big></sub>X formatter, the Latin
 the L<SUP>A</SUP>T<SUB><BIG>E</BIG></SUB>X formatter, the Latin  
 characters``&eacute;'' (octal code 351 in Thot) and ``&egrave;'' (octal code  characters``&eacute;'' (octal code 351 in Thot) and ``&egrave;'' (octal code
 350 in Thot)  must be converted to their representation  350 in Thot)  must be converted to their representation in
 in L<SUP>A</SUP>T<SUB><BIG>E</BIG></SUB>X:</P>  L<sup>A</sup>T<sub><big>E</big></sub>X:</p>
 <PRE>  <pre>TEXTTRANSLATE Latin
 TEXTTRANSLATE Latin  
      BEGIN       BEGIN
      '\350' -> '\`{e}';    { e grave }       '\350' -> '\`{e}';    { e grave }
      '\351' -> '\''{e}';   { e acute }       '\351' -> '\''{e}';   { e acute }
      END;       END;</pre>
 </PRE>  </blockquote>
 </BLOCKQUOTE>  </div>
 </DIV>  </div>
 </DIV>  <hr>
 <HR>  </div>
 </DIV>  
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect6>Language grammars</A></H1>  
   
 <P>  <h1><a name="sect6">Language grammars</a></h1>
   <p>
 This chapter gives the complete grammars of the languages of Thot. The  This chapter gives the complete grammars of the languages of Thot. The
 grammars were presented and described in the preceding chapters, which also  grammars were presented and described in the preceding chapters, which also
 specify the semantics of the languages.  This section gives only the  specify the semantics of the languages.  This section gives only the
 syntax.</P>  syntax.</p>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb61>The M meta-language</A></H2>  
   
 <P>  <h2><a name="sectb61">The M meta-language</a></h2>
   <p>
 The language grammars are all expressed in the same formalism, the M  The language grammars are all expressed in the same formalism, the M
 meta-language, which is defined in this section.</P>  meta-language, which is defined in this section.</p>
 <PRE>  <pre>{ Any text between braces is a comment. }
 { Any text between braces is a comment. }  
 Grammar      = Rule &lt; Rule > 'END' .  Grammar      = Rule &lt; Rule > 'END' .
                { The &lt; and > signs indicate zero }                 { The &lt; and > signs indicate zero }
                { or more repetitions. }                 { or more repetitions. }
Line 8244  Ident        = NAME . Line 8166  Ident        = NAME .
                { Identifier, sequence of characters                 { Identifier, sequence of characters
 KeyWord      = STRING .  KeyWord      = STRING .
                { Character string delimited by apostrophes }                 { Character string delimited by apostrophes }
 END  END</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb62>The S language</A></H2>  
   
 <P>  <h2><a name="sectb62">The S language</a></h2>
   <p>
 The S language is used to write structure schemas, which contain the generic  The S language is used to write structure schemas, which contain the generic
 logical structures of document and object classes.  It is described here in  logical structures of document and object classes.  It is described here in
 the M meta-language.</P>  the M meta-language.</p>
 <PRE>  <pre>StructSchema   = 'STRUCTURE' [ 'EXTENSION' ] ElemID ';'
 StructSchema   = 'STRUCTURE' [ 'EXTENSION' ] ElemID ';'  
                  'DEFPRES' PresID ';'                   'DEFPRES' PresID ';'
                [ 'ATTR' AttrSeq ]                 [ 'ATTR' AttrSeq ]
                [ 'PARAM' RulesSeq ]                 [ 'PARAM' RulesSeq ]
Line 8344  ExcValSeq      = ExcValue &lt; ',' ExcVa Line 8264  ExcValSeq      = ExcValue &lt; ',' ExcVa
 ExcValue       = 'NoCut' / 'NoCreate' /  ExcValue       = 'NoCut' / 'NoCreate' /
                  'NoHMove' / 'NoVMove' / 'NoMove' /                   'NoHMove' / 'NoVMove' / 'NoMove' /
                  'NoHResize' / 'NoVResize' / 'NoResize' /                   'NoHResize' / 'NoVResize' / 'NoResize' /
                  'MoveResize' /                   'MoveResize' /
                  'NewWidth' / 'NewHeight' /                   'NewWidth' / 'NewHeight' /
                  'NewHPos' / 'NewVPos' /                   'NewHPos' / 'NewVPos' /
                  'Invisible' / 'NoSelect' /                   'Invisible' / 'NoSelect' /
Line 8361  ExtensRule     = RootOrElem [ LocAttrSeq Line 8281  ExtensRule     = RootOrElem [ LocAttrSeq
                  [ 'WITH' FixedAttrSeq ] .                   [ 'WITH' FixedAttrSeq ] .
 RootOrElem     = 'Root' / ElemID .  RootOrElem     = 'Root' / ElemID .
   
 END  END</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb63>The P language</A></H2>  
   
 <P>  <h2><a name="sectb63">The P language</a></h2>
   <p>
 The P language is used to write presentation schemas, which define the  The P language is used to write presentation schemas, which define the
 graphical presentation rules to be applied to different classes of documents  graphical presentation rules to be applied to different classes of documents
 and objects.  It is described here in the M meta-language.</P>  and objects.  It is described here in the M meta-language.</p>
 <PRE>  <pre>PresSchema      = 'PRESENTATION' ElemID ';'
 PresSchema      = 'PRESENTATION' ElemID ';'  
                 [ 'VIEWS' ViewSeq ]                  [ 'VIEWS' ViewSeq ]
                 [ 'PRINT' PrintViewSeq ]                  [ 'PRINT' PrintViewSeq ]
                 [ 'COUNTERS' CounterSeq ]                  [ 'COUNTERS' CounterSeq ]
Line 8547  PresFunc        = Creation '(' BoxID ')' Line 8465  PresFunc        = Creation '(' BoxID ')'
                   'Page' '(' BoxID ')' /                    'Page' '(' BoxID ')' /
                   'Copy' '(' BoxTypeToCopy ')' /                    'Copy' '(' BoxTypeToCopy ')' /
                   'ShowBox' /                    'ShowBox' /
                   'BackgroundPicture' ':' FileName /                    'BackgroundPicture' ':' FileName /
                   'PictureMode' ':' PictMode .                    'PictureMode' ':' PictMode .
   
 BoxTypeToCopy   = BoxID [ ExtStruct ] /  BoxTypeToCopy   = BoxID [ ExtStruct ] /
                    ElemID [ ExtStruct ] .                     ElemID [ ExtStruct ] .
Line 8670  Transmit        = TypeOrCounter 'To' Ext Line 8588  Transmit        = TypeOrCounter 'To' Ext
 TypeOrCounter   = CounterID / ElemID .  TypeOrCounter   = CounterID / ElemID .
 ExternAttr      = NAME .  ExternAttr      = NAME .
   
 END  END</pre>
 </PRE>  </div>
 </DIV>  
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb64>The T language</A></H2>  
   
 <PRE>  <h2><a name="sectb64">The T language</a></h2>
 TransSchema   = 'TRANSLATION' ElemID ';'  <pre>TransSchema   = 'TRANSLATION' ElemID ';'
               [ 'LINELENGTH' LineLength ';' ]                [ 'LINELENGTH' LineLength ';' ]
               [ 'LINEEND' CHARACTER ';' ]                [ 'LINEEND' CHARACTER ';' ]
               [ 'LINEENDINSERT' STRING ';' ]                [ 'LINEENDINSERT' STRING ';' ]
Line 8754  CondElem      = 'FirstRef' / 'LastRef' / Line 8670  CondElem      = 'FirstRef' / 'LastRef' /
                 'ComputedPage' / 'StartPage' /                   'ComputedPage' / 'StartPage' / 
                 'UserPage' / 'ReminderPage' /                  'UserPage' / 'ReminderPage' /
                 'Empty' /                  'Empty' /
                 ElemID /                  ElemID /
                 'FirstAttr' / 'LastAttr' .                  'FirstAttr' / 'LastAttr' .
 CondAscend    = [ Ascend ] CondOnAscend .  CondAscend    = [ Ascend ] CondOnAscend .
 Ascend        = '*' / 'Parent' / 'Ancestor' LevelOrType .  Ascend        = '*' / 'Parent' / 'Ancestor' LevelOrType .
Line 8895  TransSeq      = 'BEGIN' &lt; Translation Line 8811  TransSeq      = 'BEGIN' &lt; Translation
                 Translation .                  Translation .
 Translation   = Source [ '->' Target ] ';' .  Translation   = Source [ '->' Target ] ';' .
 Source        = STRING .  Source        = STRING .
 Target        = STRING .  Target        = STRING .</pre>
 </PRE>  </div>
 </DIV>  <hr>
 <HR>  </div>
 </DIV>  
   
 <DIV class="chapter">  <div class="chapter">
 <H1><A name=sect7>Character coding</A></H1>  
   
   <h1><a name="sect7">Character coding</a></h1>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb71>Characters</A></H2>  
   
 <P>  <h2><a name="sectb71">Characters</a></h2>
   <p>
 The characters of the Latin alphabet follow the encoding defined in the ISO  The characters of the Latin alphabet follow the encoding defined in the ISO
 8859-1 (ISO Latin-1) standard.  The characters of the Greek alphabet follow  8859-1 (ISO Latin-1) standard.  The characters of the Greek alphabet follow
 the encoding defined by Adobe for its Symbol font (Adobe FontSpecific).</P>  the encoding defined by Adobe for its Symbol font (Adobe FontSpecific).</p>
 <P>  <p>
 Characters whose octal code is greater than 0200 are written in the form of  Characters whose octal code is greater than 0200 are written in the form of
 their octal code preceded by a backslash character (``\'').  For example, the  their octal code preceded by a backslash character (``\'').  For example, the
 French word 'R&eacute;sum&eacute;' is written <TT>R\351sum\351</TT>.</P>  French word 'R&eacute;sum&eacute;' is written <tt>R\351sum\351</tt>.</p>
 <P>  <p>
 To the ISO 8859-1 encoding four characters with the following codes have been  To the ISO 8859-1 encoding four characters with the following codes have been
 added:<BR><TT>212</TT>: line break<BR><TT>240</TT>: sticky  added:<br>
 space<BR><TT>201</TT>: thin space<BR><TT>202</TT>: en space</P>  <tt>212</tt>: line break<br>
 <P>  <tt>240</tt>: sticky space<br>
 The <TT>212</TT> character is a ``line break'' character which forces a line  <tt>201</tt>: thin space<br>
 break.  The <TT>240</TT> character is a ``sticky space'', which cannot be  <tt>202</tt>: en space</p>
 replaced by a line break.</P>  <p>
 </DIV>  The <tt>212</tt> character is a ``line break'' character which forces a line
   break.  The <tt>240</tt> character is a ``sticky space'', which cannot be
   replaced by a line break.</p>
   </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb72>Symbols</A></H2>  
   
 <P>  <h2><a name="sectb72">Symbols</a></h2>
   <p>
 The table below gives the codes for the symbols of Thot.  Symbols can be used  The table below gives the codes for the symbols of Thot.  Symbols can be used
 in presentation schemas constants and in transcoding rules of translation  in presentation schemas constants and in transcoding rules of translation
 schemas.  Each symbol is represented by a single character.</P>  schemas.  Each symbol is represented by a single character.</p>
 <UL>  <ul>
 <LI><TT>r</TT>: a radical  <li>
 <LI><TT>i</TT>: a simple integral  <tt>r</tt>: a radical
 <LI><TT>c</TT>: a curvilinear integral  <li>
 <LI><TT>d</TT>: a double integral  <tt>i</tt>: a simple integral
 <LI><TT>t</TT>: a triple integral  <li>
 <LI><TT>S</TT>: the summation symbol  <tt>c</tt>: a curvilinear integral
 <LI><TT>P</TT>: the product symbol  <li>
 <LI><TT>U</TT>: the union symbol  <tt>d</tt>: a double integral
 <LI><TT>I</TT>: the intersection symbol  <li>
 <LI><TT>></TT>: a right arrow  <tt>t</tt>: a triple integral
 <LI><TT>&lt;</TT>: a left arrow  <li>
 <LI><TT>^</TT>:  an up arrow  <tt>S</tt>: the summation symbol
 <LI><TT>V</TT>: a down arrow  <li>
 <LI><TT>(</TT>: an opening parenthesis  <tt>P</tt>: the product symbol
 <LI><TT>)</TT>: a closing parenthesis  <li>
 <LI><TT>{</TT>: an opening brace  <tt>U</tt>: the union symbol
 <LI><TT>}</TT>: a closing brace  <li>
 <LI><TT>[</TT>: an opening bracket  <tt>I</tt>: the intersection symbol
 <LI><TT>]</TT>: a closing bracket  <li>
 </UL>  <tt>></tt>: a right arrow
 </DIV>  <li>
   <tt>&lt;</tt>: a left arrow
   <li>
   <tt>^</tt>:  an up arrow
   <li>
   <tt>V</tt>: a down arrow
   <li>
   <tt>(</tt>: an opening parenthesis
   <li>
   <tt>)</tt>: a closing parenthesis
   <li>
   <tt>{</tt>: an opening brace
   <li>
   <tt>}</tt>: a closing brace
   <li>
   <tt>[</tt>: an opening bracket
   <li>
   <tt>]</tt>: a closing bracket
   </ul>
   </div>
   
 <DIV class="section">  <div class="section">
 <H2><A name=sectb73>Graphical elements</A></H2>  
   
 <P>  <h2><a name="sectb73">Graphical elements</a></h2>
   <p>
 The table below gives the codes for the graphical elements of Thot. These  The table below gives the codes for the graphical elements of Thot. These
 elements can be used in presentation schemas constants and in transcoding  elements can be used in presentation schemas constants and in transcoding
 rules of translation schemas.  Each graphical element is represented by a  rules of translation schemas.  Each graphical element is represented by a
 single character.</P>  single character.</p>
 <UL>  <ul>
 <LI><TT>c</TT>: an ellipse inscribed in the box  <li>
 <LI><TT>R</TT>: a rectangle which is the shape of the box  a: a circle
 <LI><TT>C</TT>: a rectangle with rounded corners  <li><p>
 <LI><TT>t</TT>: a horizontal line along the upper side of the box  <tt>A</tt>: an open curve with an arrow head at the end</p>
 <LI><TT>h</TT>: a horizontal line as wide as the box and placed in its middle  <li>
 <LI><TT>b</TT>: a horizontal line along the lower side of the box  <tt>b</tt>: a horizontal line along the lower side of the box
 <LI><TT>></TT>: a right arrow as long as the box's width and in its middle  <li>
 <LI><TT>></TT>: a left arrow as long as the box's width and in its middle  <tt>B</tt>: an open curve
 <LI><TT>l</TT>: a vertical line on the left side of the box  <li>
 <LI><TT>v</TT>: a vertical line as tall as the box and placed in its middle  <tt>c</tt>: an ellipse inscribed in the box
 <LI><TT>r</TT>: a vertical line on the right side of the box  <li>
 <LI><TT>^</TT>: an up arrow as tall as the box and in its middle  <tt>C</tt>: a rectangle with rounded corners
 <LI><TT>V</TT>: a down arrow as tall as the box and in its middle  <li>
 <LI><TT>/</TT>: The southwest/northeast diagonal of the box  <tt>D</tt>: an open curve with two arrow heads
 <LI><TT>\</TT>: the northwest/southeast diagonal of the box  <li>
 <LI><TT>O</TT>: The northwest/southeast diagonal of the box with an arrowhead  <tt>e</tt>: The northwest/southeast diagonal of the box with an arrowhead at
 at the top  the bottom
 <LI><TT>e</TT>: The northwest/southeast diagonal of the box with an arrowhead  <li>
 at the bottom  <tt>E</tt>: The southwest/northeast diagonal of the box with an arrowhead at
 <LI><TT>E</TT>: The southwest/northeast diagonal of the box with an arrowhead  the top
 at the top  <li>
 <LI><TT>o</TT>: The southwest/northeast diagonal of the box with an arrowhead  <tt>F</tt>: an open curve with an arrow head at start
 at the bottom  <li>
 <LI><TT>space</TT>: a transparent element  <tt>h</tt>: a horizontal line as wide as the box and placed in its middle
 <LI><TT>P</TT>: a rectangle with round corners and a horizontal bar at the top  <li>
 <LI><TT>Q</TT>: an ellipse with a horizontal bar at the top  <tt>l</tt>: a vertical line on the left side of the box
 <LI><TT>L</TT>: a lozenge  <li>
 <LI><TT>W</TT>: the upper right corner  <tt>L</tt>: a lozenge
 <LI><TT>X</TT>: the lower right corner  <li>
 <LI><TT>Y</TT>: the lower left corner  <tt>M</tt>: an open broken line with two arrow heads
 <LI><TT>Z</TT>: the upper left corner  <li>
 <LI><TT>p</TT>: a polygon  <tt>N</tt>: an open broken line with an arrow head at start
 <LI><TT>S</TT>: an open broken line  <li>
 <LI><TT>N</TT>: an open broken line with an arrow head at start  <tt>o</tt>: The southwest/northeast diagonal of the box with an arrowhead at
 <LI><TT>U</TT>: an open broken line with an arrow head at the end  the bottom
 <LI><TT>M</TT>: an open broken line with two arrow heads  <li>
 <LI><TT>s</TT>: a closed curve  <tt>O</tt>: The northwest/southeast diagonal of the box with an arrowhead at
 <LI><TT>B</TT>: an open curve  the top
 <LI><TT>F</TT>: an open curve with an arrow head at start  <li>
 <LI><TT>A</TT>: an open curve with an arrow head at the end  <tt>p</tt>: a polygon
 <LI><TT>D</TT>: an open curve with two arrow heads  <li>
 </UL>  <tt>P</tt>: a rectangle with round corners and a horizontal bar at the top
 <HR>  <li>
 </DIV>  <tt>Q</tt>: an ellipse with a horizontal bar at the top
 </DIV>  <li>
 </BODY>  <tt>r</tt>: a vertical line on the right side of the box
 </HTML>  <li>
   <tt>R</tt>: a rectangle which is the shape of the box
   <li>
   <tt>s</tt>: a closed curve
   <li>
   <tt>S</tt>: an open broken line
   <li>
   <tt>t</tt>: a horizontal line along the upper side of the box
   <li>
   <tt>U</tt>: an open broken line with an arrow head at the end
   <li>
   <tt>v</tt>: a vertical line as tall as the box and placed in its middle
   <li>
   <tt>V</tt>: a down arrow as tall as the box and in its middle
   <li>
   w: a segment (2 points)
   <li>
   <tt>W</tt>: the upper right corner
   <li>
   x: a segment (2 points) with an arrow head at the end
   <li>
   <tt>X</tt>: the lower right corner
   <li>
   y: a segment (2 points) with an arrow head at the end
   <li>
   <tt>Y</tt>: the lower left corner
   <li>
   z: a segment (2 points) with an arrow head at the end
   <li>
   <tt>Z</tt>: the upper left corner
   <li>
   <tt>space</tt>: a transparent element
   <li>
   <tt>^</tt>: an up arrow as tall as the box and in its middle
   <li>
   <tt>></tt>: a right arrow as long as the box's width and in its middle
   <li>
   <tt>></tt>: a left arrow as long as the box's width and in its middle
   <li>
   <tt>/</tt>: The southwest/northeast diagonal of the box
   <li>
   <tt>\</tt>: the northwest/southeast diagonal of the box
   </ul>
   <hr>
   </div>
   </div>
   </body>
   </html>

Removed from v.1.17  
changed lines
  Added in v.1.18


Webmaster