Diff for /Amaya/doc/languages.html between versions 1.29 and 1.30

version 1.29, 2000/09/18 07:04:01 version 1.30, 2000/11/21 12:17:00
Line 1 Line 1
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/REC-html40/loose.dtd">      "http://www.w3.org/TR/html4/loose.dtd">
 <html>  <html>
 <head>  <head>
 <title>The Languages of Thot</title>    <title>The Languages of Thot</title>
     <meta http-equiv="Content-Type" content="text/html">
 </head>  </head>
   
 <body>  <body>
   
 <div class="frontmatter" align="center">  <div class="frontmatter" align="center">
   
 <h1>The Languages of Thot</h1>  <h1>The Languages of Thot</h1>
   
 <h3>Vincent Quint</h3>  <h3>Vincent Quint</h3>
   
 <h4>Translated from French by Ethan Munson</h4>  <h4>Translated from French by Ethan Munson</h4>
   
 <h4>Version of September 15, 2000</h4>  <h4>Version of November 21, 2000</h4>
 <p>  
 &copy; 1996-2000 INRIA</p>  
 <hr>  
   
   <p>© 1996-2000 INRIA</p>
   <hr>
 </div>  </div>
   
 <div class="tableofcontents">  <div class="tableofcontents">
   
 <h2><a href="languages.toc.html">Contents</a></h2>  <h2><a href="languages.toc.html">Contents</a></h2>
 <ul>  <ul>
 <li>    <li><big><a href="#sect2">The document model of Thot</a></big>
 <big><a href="#sect2">The document model of Thot</a></big>      <ul>
 <ul>        <li><strong><a href="#sectb21">The logical structure of
 <li>          documents</a></strong></li>
 <strong><a href="#sectb21">The logical structure of documents</a></strong>        <li><strong><a href="#sectb22">Generic and specific
 </li>          structures</a></strong></li>
 <li>        <li><strong><a href="#sectb23">Logical structure and physical
 <strong><a href="#sectb22">Generic and specific structures</a></strong>          structure</a></strong></li>
 </li>        <li><strong><a href="#sectb24">Document structures and object
 <li>          structures</a></strong></li>
 <strong><a href="#sectb23">Logical structure and physical      </ul>
 structure</a></strong>    </li>
 </li>    <li><big><a href="#sect3">The S language</a></big>
 <li>      <ul>
 <strong><a href="#sectb24">Document structures and object        <li><strong><a href="#sectb31">Document meta-structure</a></strong>
 structures</a></strong>          <ul>
 </li>            <li><a href="#sectc311">The basic types</a></li>
 </ul>            <li><a href="#sectc312">Constructed elements</a></li>
 </li>            <li><a href="#sectc313">Logical structure constructors</a>
 <li>              <ul>
 <big><a href="#sect3">The S language</a></big>                <li><small><a href="#sectd3131">Aggregate and
 <ul>                List</a></small></li>
 <li>                <li><small><a href="#sectd3132">Choice, Schema, and
 <strong><a href="#sectb31">Document meta-structure</a></strong>                  Unit</a></small></li>
 <ul>                <li><small><a href="#sectd3133">Reference and
 <li>                  Inclusion</a></small></li>
 <a href="#sectc311">The basic types</a>                <li><small><a href="#sectd3134">Mark pairs</a></small></li>
 </li>                <li><small><a href="#sectd3135">Restrictions and
 <li>                  Extensions</a></small></li>
 <a href="#sectc312">Constructed elements</a>                <li><small><a href="#sectd3136">Summary</a></small></li>
 </li>              </ul>
 <li>            </li>
 <a href="#sectc313">Logical structure constructors</a>            <li><a href="#sectc314">Associated Elements</a></li>
 <ul>            <li><a href="#sectc315">Attributes</a></li>
 <li>            <li><a href="#sectc316">Discussion of the model</a></li>
 <small><a href="#sectd3131">Aggregate and List</a></small>          </ul>
 </li>        </li>
 <li>        <li><strong><a href="#sectb32">The definition language for generic
 <small><a href="#sectd3132">Choice, Schema, and Unit</a></small>          structures</a></strong>
 </li>          <ul>
 <li>            <li><a href="#sectc321">Writing Conventions</a></li>
 <small><a href="#sectd3133">Reference and Inclusion</a></small>            <li><a href="#sectc322">Extension schemas</a></li>
 </li>            <li><a href="#sectc323">The general organization of structure
 <li>              schemas</a></li>
 <small><a href="#sectd3134">Mark pairs</a></small>            <li><a href="#sectc324">The default presentation</a></li>
 </li>            <li><a href="#sectc325">Global Attributes</a></li>
 <li>            <li><a href="#sectc326">Parameters</a></li>
 <small><a href="#sectd3135">Restrictions and Extensions</a></small>            <li><a href="#sectc327">Structured elements</a></li>
 </li>            <li><a href="#sectc328">Structure definitions</a>
 <li>              <ul>
 <small><a href="#sectd3136">Summary</a></small>                <li><small><a href="#sectd3281">List</a></small></li>
 </li>                <li><small><a href="#sectd3282">Aggregate</a></small></li>
 </ul>                <li><small><a href="#sectd3283">Choice</a></small></li>
 </li>                <li><small><a href="#sectd3284">Reference</a></small></li>
 <li>                <li><small><a href="#sectd3285">Mark pairs</a></small></li>
 <a href="#sectc314">Associated Elements</a>              </ul>
 </li>            </li>
 <li>            <li><a href="#sectc329">Imports</a></li>
 <a href="#sectc315">Attributes</a>            <li><a href="#sectc3210">Extension rules</a></li>
 </li>            <li><a href="#sectc3211">Associated elements</a></li>
 <li>            <li><a href="#sectc3212">Units</a></li>
 <a href="#sectc316">Discussion of the model</a>            <li><a href="#sectc3213">Skeleton elements</a></li>
 </li>            <li><a href="#sectc3214">Exceptions</a></li>
 </ul>          </ul>
 </li>        </li>
 <li>        <li><strong><a href="#sectb33">Some examples</a></strong>
 <strong><a href="#sectb32">The definition language for generic          <ul>
 structures</a></strong>            <li><a href="#sectc331">A class of documents: articles</a></li>
 <ul>            <li><a href="#sectc332">A class of objects: mathematical
 <li>              formulas</a></li>
 <a href="#sectc321">Writing Conventions</a>          </ul>
 </li>        </li>
 <li>      </ul>
 <a href="#sectc322">Extension schemas</a>    </li>
 </li>    <li><big><a href="#sect4">The P language</a></big>
 <li>      <ul>
 <a href="#sectc323">The general organization of structure schemas</a>        <li><strong><a href="#sectb41">Document presentation</a></strong>
 </li>          <ul>
 <li>            <li><a href="#sectc411">Two levels of presentation</a></li>
 <a href="#sectc324">The default presentation</a>            <li><a href="#sectc412">Boxes</a></li>
 </li>            <li><a href="#sectc413">Views and visibility</a></li>
 <li>            <li><a href="#sectc414">Pages</a></li>
 <a href="#sectc325">Global Attributes</a>            <li><a href="#sectc415">Numbering</a></li>
 </li>            <li><a href="#sectc416">Presentation parameters</a></li>
 <li>          </ul>
 <a href="#sectc326">Parameters</a>        </li>
 </li>        <li><strong><a href="#sectb42">Presentation description
 <li>          language</a></strong>
 <a href="#sectc327">Structured elements</a>          <ul>
 </li>            <li><a href="#sectc421">The organization of a presentation
 <li>              schema</a></li>
 <a href="#sectc328">Structure definitions</a>            <li><a href="#sectc422">Views</a></li>
 <ul>            <li><a href="#sectc423">Print Views</a></li>
 <li>            <li><a href="#sectc424">Counters</a></li>
 <small><a href="#sectd3281">List</a></small>            <li><a href="#sectc425">Presentation constants</a></li>
 </li>            <li><a href="#sectc426">Variables</a></li>
 <li>            <li><a href="#sectc427">Default presentation rules</a></li>
 <small><a href="#sectd3282">Aggregate</a></small>            <li><a href="#sectc428">Presentation and page layout boxes</a></li>
 </li>            <li><a href="#sectc429">Presentation of structured elements</a></li>
 <li>            <li><a href="#sectc4210">Logical attribute presentation</a></li>
 <small><a href="#sectd3283">Choice</a></small>            <li><a href="#sectc4212">Value transmission rules</a></li>
 </li>            <li><a href="#sectc4213">Presentation rules</a></li>
 <li>            <li><a href="#sectc4214">Conditions applying to presentation
 <small><a href="#sectd3284">Reference</a></small>              rules</a>
 </li>              <ul>
 <li>                <li><small><a href="#sectd42141">Conditions based on the logical
 <small><a href="#sectd3285">Mark pairs</a></small>                  position of the element</a></small></li>
 </li>                <li><small><a href="#sectd42142">Conditions on
 </ul>                  references</a></small></li>
 </li>                <li><small><a href="#sectd42143">Conditions on logical
 <li>                  attributes</a></small></li>
 <a href="#sectc329">Imports</a>                <li><small><a href="#sectd42144">Conditions on page
 </li>                  breaks</a></small></li>
 <li>                <li><small><a href="#sectd42145">Conditions on the element's
 <a href="#sectc3210">Extension rules</a>                  content</a></small></li>
 </li>                <li><small><a href="#sectd42146">Conditions on
 <li>                  counters</a></small></li>
 <a href="#sectc3211">Associated elements</a>              </ul>
 </li>            </li>
 <li>            <li><a href="#sectc4215">A presentation rule</a></li>
 <a href="#sectc3212">Units</a>            <li><a href="#sectc4216">Box axes</a></li>
 </li>            <li><a href="#sectc4217">Distance units</a></li>
 <li>            <li><a href="#sectc4218">Relative positions</a></li>
 <a href="#sectc3213">Skeleton elements</a>            <li><a href="#sectc4219">Box extents</a>
 </li>              <ul>
 <li>                <li><small><a href="#sectd42191">Fixed extents</a></small></li>
 <a href="#sectc3214">Exceptions</a>                <li><small><a href="#sectd42192">Relative
 </li>                extents</a></small></li>
 </ul>                <li><small><a href="#sectd42193">Elastic
 </li>                extents</a></small></li>
 <li>              </ul>
 <strong><a href="#sectb33">Some examples</a></strong>            </li>
 <ul>            <li><a href="#sectc4220">Overflow</a></li>
 <li>            <li><a href="#sectc4221">Inheritance</a></li>
 <a href="#sectc331">A class of documents: articles</a>            <li><a href="#sectc4222">Line breaking</a>
 </li>              <ul>
 <li>                <li><small><a href="#sectd42221">Line spacing</a></small></li>
 <a href="#sectc332">A class of objects: mathematical formulas</a>                <li><small><a href="#sectd42222">First line
 </li>                  indentation</a></small></li>
 </ul>                <li><small><a href="#sectd42223">Alignment</a></small></li>
 </li>                <li><small><a href="#sectd42224">Justification</a></small></li>
 </ul>                <li><small><a href="#sectd42225">Hyphenation</a></small></li>
 </li>                <li><small><a href="#sectd42226">Avoiding line
 <li>                  breaking</a></small></li>
 <big><a href="#sect4">The P language</a></big>              </ul>
 <ul>            </li>
 <li>            <li><a href="#sectc4223">Page breaking and line breaking
 <strong><a href="#sectb41">Document presentation</a></strong>              conditions</a></li>
 <ul>            <li><a href="#sectc4224">Visibility</a></li>
 <li>            <li><a href="#sectc4225">Character style parameters</a>
 <a href="#sectc411">Two levels of presentation</a>              <ul>
 </li>                <li><small><a href="#sectd42251">Character size</a></small></li>
 <li>                <li><small><a href="#sectd42252">Font and character
 <a href="#sectc412">Boxes</a>                  style</a></small></li>
 </li>                <li><small><a href="#sectd42253">Underlining</a></small></li>
 <li>              </ul>
 <a href="#sectc413">Views and visibility</a>            </li>
 </li>            <li><a href="#sectc4226">Stacking order</a></li>
 <li>            <li><a href="#sectc4227">Line style</a></li>
 <a href="#sectc414">Pages</a>            <li><a href="#sectc4228">Line thickness</a></li>
 </li>            <li><a href="#sectc4229">Fill pattern</a></li>
 <li>            <li><a href="#sectc4230">Colors</a></li>
 <a href="#sectc415">Numbering</a>            <li><a href="#sectc4230a">Background color and border</a></li>
 </li>            <li><a href="#sectc4230b">Background pictures</a></li>
 <li>            <li><a href="#sectc4231">Presentation box content</a></li>
 <a href="#sectc416">Presentation parameters</a>            <li><a href="#sectc4232">Presentation box creation</a></li>
 </li>            <li><a href="#sectc4233">Page layout</a></li>
 </ul>            <li><a href="#sectc4234">Box copies</a></li>
 </li>          </ul>
 <li>        </li>
 <strong><a href="#sectb42">Presentation description language</a></strong>      </ul>
 <ul>    </li>
 <li>    <li><big><a href="#sect5">The T language</a></big>
 <a href="#sectc421">The organization of a presentation schema</a>      <ul>
 </li>        <li><strong><a href="#sectb51">Document translation</a></strong>
 <li>          <ul>
 <a href="#sectc422">Views</a>            <li><a href="#sectc511">Translation principles</a></li>
 </li>            <li><a href="#sectc512">Translation procedure</a></li>
 <li>          </ul>
 <a href="#sectc423">Print Views</a>        </li>
 </li>        <li><strong><a href="#sectb52">Translation definition
 <li>          language</a></strong>
 <a href="#sectc424">Counters</a>          <ul>
 </li>            <li><a href="#sectc521">Organization of a translation
 <li>            schema</a></li>
 <a href="#sectc425">Presentation constants</a>            <li><a href="#sectc522">Line length</a></li>
 </li>            <li><a href="#sectc523">Buffers</a></li>
 <li>            <li><a href="#sectc524">Counters</a></li>
 <a href="#sectc426">Variables</a>            <li><a href="#sectc525">Constants</a></li>
 </li>            <li><a href="#sectc526">Variables</a></li>
 <li>            <li><a href="#sectc527">Translating structure elements</a></li>
 <a href="#sectc427">Default presentation rules</a>            <li><a href="#sectc528">Conditional rules</a>
 </li>              <ul>
 <li>                <li><small><a href="#sectd5281">Conditions based on the logical
 <a href="#sectc428">Presentation and page layout boxes</a>                  position of the element</a></small></li>
 </li>                <li><small><a href="#sectd5282">Conditions on
 <li>                  references</a></small></li>
 <a href="#sectc429">Presentation of structured elements</a>                <li><small><a href="#sectd5283">Conditions on the
 </li>                  parameters</a></small></li>
 <li>                <li><small><a href="#sectd5284">Conditions on the
 <a href="#sectc4210">Logical attribute presentation</a>                  alphabets</a></small></li>
 </li>                <li><small><a href="#sectd5285">Conditions on page
 <li>                  breaks</a></small></li>
 <a href="#sectc4212">Value transmission rules</a>                <li><small><a href="#sectd5286">Conditions on the element's
 </li>                  content</a></small></li>
 <li>                <li><small><a href="#sectd5287">Conditions on the presence of
 <a href="#sectc4213">Presentation rules</a>                  comments</a></small></li>
 </li>                <li><small><a href="#sectd5288">Conditions on the presence of
 <li>                  specific presentation rules</a></small></li>
 <a href="#sectc4214">Conditions applying to presentation rules</a>                <li><small><a href="#sectd5289">Conditions on the presence of
 <ul>                  logical attributes</a></small></li>
 <li>                <li><small><a href="#sectd52810">Conditions on logical
 <small><a href="#sectd42141">Conditions based on the logical position of the                  attributes</a></small></li>
 element</a></small>                <li><small><a href="#sectd52811">Conditions on specific
 </li>                  presentation rules</a></small></li>
 <li>              </ul>
 <small><a href="#sectd42142">Conditions on references</a></small>            </li>
 </li>            <li><a href="#sectc529">Translation rules</a></li>
 <li>            <li><a href="#sectc5210">The <tt>Create</tt> rule</a></li>
 <small><a href="#sectd42143">Conditions on logical attributes</a></small>            <li><a href="#sectc5211">The <tt>Write</tt> rule</a></li>
 </li>            <li><a href="#sectc5212">The <tt>Read</tt> rule</a></li>
 <li>            <li><a href="#sectc5213">The <tt>Include</tt> rule</a></li>
 <small><a href="#sectd42144">Conditions on page breaks</a></small>            <li><a href="#sectc5214">The <tt>Get</tt> rule</a></li>
 </li>            <li><a href="#sectc5215">The <tt>Copy</tt> rule</a></li>
 <li>            <li><a href="#sectc5216">The <tt>Use</tt> rule</a></li>
 <small><a href="#sectd42145">Conditions on the element's content</a></small>            <li><a href="#sectc5217">The <tt>Remove</tt> rule</a></li>
 </li>            <li><a href="#sectc5218">The <tt>NoTranslation</tt> rule</a></li>
 <li>            <li><a href="#sectc5219">The <tt>NoLineBreak</tt> rule</a></li>
 <small><a href="#sectd42146">Conditions on counters</a></small>            <li><a href="#sectc5220">The <tt>ChangeMainFile</tt> rule</a></li>
 </li>            <li><a href="#sectc5220a">The <tt>RemoveFile</tt> rule</a></li>
 </ul>            <li><a href="#sectc5221">The <tt>Set</tt> and <tt>Add</tt>
 </li>            rules</a></li>
 <li>            <li><a href="#sectc5221a">The <tt>Indent</tt> rule</a></li>
 <a href="#sectc4215">A presentation rule</a>            <li><a href="#sectc5222">Rule application order</a></li>
 </li>            <li><a href="#sectc5223">Translation of logical attributes</a></li>
 <li>            <li><a href="#sectc5224">Translation of specific
 <a href="#sectc4216">Box axes</a>            presentations</a></li>
 </li>            <li><a href="#sectc5225">Recoding of characters, symbols and
 <li>              graphics</a></li>
 <a href="#sectc4217">Distance units</a>          </ul>
 </li>        </li>
 <li>      </ul>
 <a href="#sectc4218">Relative positions</a>    </li>
 </li>    <li><big><a href="#sect6">Language grammars</a></big>
 <li>      <ul>
 <a href="#sectc4219">Box extents</a>        <li><strong><a href="#sectb61">The M meta-language</a></strong></li>
 <ul>        <li><strong><a href="#sectb62">The S language</a></strong></li>
 <li>        <li><strong><a href="#sectb63">The P language</a></strong></li>
 <small><a href="#sectd42191">Fixed extents</a></small>        <li><strong><a href="#sectb64">The T language</a></strong></li>
 </li>      </ul>
 <li>    </li>
 <small><a href="#sectd42192">Relative extents</a></small>    <li><big><a href="#sect7">Character coding</a></big>
 </li>      <ul>
 <li>        <li><strong><a href="#sectb71">Characters</a></strong></li>
 <small><a href="#sectd42193">Elastic extents</a></small>        <li><strong><a href="#sectb72">Symbols</a></strong></li>
 </li>        <li><strong><a href="#sectb73">Graphical elements</a></strong></li>
 </ul>      </ul>
 </li>    </li>
 <li>  
 <a href="#sectc4220">Overflow</a>  
 </li>  
 <li>  
 <a href="#sectc4221">Inheritance</a>  
 </li>  
 <li>  
 <a href="#sectc4222">Line breaking</a>  
 <ul>  
 <li>  
 <small><a href="#sectd42221">Line spacing</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42222">First line indentation</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42223">Alignment</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42224">Justification</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42225">Hyphenation</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42226">Avoiding line breaking</a></small>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <a href="#sectc4223">Page breaking and line breaking conditions</a>  
 </li>  
 <li>  
 <a href="#sectc4224">Visibility</a>  
 </li>  
 <li>  
 <a href="#sectc4225">Character style parameters</a>  
 <ul>  
 <li>  
 <small><a href="#sectd42251">Character size</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42252">Font and character style</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd42253">Underlining</a></small>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <a href="#sectc4226">Stacking order</a>  
 </li>  
 <li>  
 <a href="#sectc4227">Line style</a>  
 </li>  
 <li>  
 <a href="#sectc4228">Line thickness</a>  
 </li>  
 <li>  
 <a href="#sectc4229">Fill pattern</a>  
 </li>  
 <li>  
 <a href="#sectc4230">Colors</a>  
 </li>  
 <li>  
 <a href="#sectc4230a">Background color and border</a>  
 </li>  
 <li>  
 <a href="#sectc4230b">Background pictures</a>  
 </li>  
 <li>  
 <a href="#sectc4231">Presentation box content</a>  
 </li>  
 <li>  
 <a href="#sectc4232">Presentation box creation</a>  
 </li>  
 <li>  
 <a href="#sectc4233">Page layout</a>  
 </li>  
 <li>  
 <a href="#sectc4234">Box copies</a>  
 </li>  
 </ul>  
 </li>  
 </ul>  
 </li>  
 <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>  
 <li>  
 <a href="#sectc512">Translation procedure</a>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <strong><a href="#sectb52">Translation definition language</a></strong>  
 <ul>  
 <li>  
 <a href="#sectc521">Organization of a translation schema</a>  
 </li>  
 <li>  
 <a href="#sectc522">Line length</a>  
 </li>  
 <li>  
 <a href="#sectc523">Buffers</a>  
 </li>  
 <li>  
 <a href="#sectc524">Counters</a>  
 </li>  
 <li>  
 <a href="#sectc525">Constants</a>  
 </li>  
 <li>  
 <a href="#sectc526">Variables</a>  
 </li>  
 <li>  
 <a href="#sectc527">Translating structure elements</a>  
 </li>  
 <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>  
 <li>  
 <small><a href="#sectd5282">Conditions on references</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd5283">Conditions on the parameters</a></small>  
 </li>  
 <li>  
 <small><a href="#sectd5284">Conditions on the alphabets</a></small>  
 </li>  
 <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>  
 </li>  
 <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>  
 </li>  
 <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>  
 </li>  
 <li>  
 <small><a href="#sectd52811">Conditions on specific presentation  
 rules</a></small>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <a href="#sectc529">Translation rules</a>  
 </li>  
 <li>  
 <a href="#sectc5210">The <tt>Create</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5211">The <tt>Write</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5212">The <tt>Read</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5213">The <tt>Include</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5214">The <tt>Get</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5215">The <tt>Copy</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5216">The <tt>Use</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5217">The <tt>Remove</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5218">The <tt>NoTranslation</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5219">The <tt>NoLineBreak</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5220">The <tt>ChangeMainFile</tt> rule</a>  
 </li>  
 <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>  
 </li>  
 <li>  
 <a href="#sectc5221a">The <tt>Indent</tt> rule</a>  
 </li>  
 <li>  
 <a href="#sectc5222">Rule application order</a>  
 </li>  
 <li>  
 <a href="#sectc5223">Translation of logical attributes</a>  
 </li>  
 <li>  
 <a href="#sectc5224">Translation of specific presentations</a>  
 </li>  
 <li>  
 <a href="#sectc5225">Recoding of characters, symbols and graphics</a>  
 </li>  
 </ul>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <big><a href="#sect6">Language grammars</a></big>  
 <ul>  
 <li>  
 <strong><a href="#sectb61">The M meta-language</a></strong>  
 </li>  
 <li>  
 <strong><a href="#sectb62">The S language</a></strong>  
 </li>  
 <li>  
 <strong><a href="#sectb63">The P language</a></strong>  
 </li>  
 <li>  
 <strong><a href="#sectb64">The T language</a></strong>  
 </li>  
 </ul>  
 </li>  
 <li>  
 <big><a href="#sect7">Character coding</a></big>  
 <ul>  
 <li>  
 <strong><a href="#sectb71">Characters</a></strong>  
 </li>  
 <li>  
 <strong><a href="#sectb72">Symbols</a></strong>  
 </li>  
 <li>  
 <strong><a href="#sectb73">Graphical elements</a></strong>  
 </li>  
 </ul>  
 </li>  
 </ul>  </ul>
 <hr>  <hr>
   
 </div>  </div>
   
 <div class="chapter">  <div class="chapter">
   
 <h1><a name="sect2">The document model of Thot</a></h1>  <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  
 internal document representation.  This representation is itself derived from  
 the document model which underlies Thot.  The model is presented here, prior  
 to the description of the languages which permit the generic specification of  
 documents.</p>  
   
 <div class="section">  <p>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 the document model which underlies Thot.  The model is presented
   here, prior to the description of the languages which permit the generic
   specification of documents.</p>
   
   <div class="section">
 <h2><a name="sectb21">The logical structure of documents</a></h2>  <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  <p>The document model of Thot is primarily designed to allow the user to
 on those entities which s/he has in mind when s/he works on a document. The  operate on those entities which s/he has in mind when s/he works on a
 model makes no assumptions about the nature of these entities. It is  document. The model makes no assumptions about the nature of these entities.
 essentially these logical entities, such as paragraphs, sections, chapters,  It is essentially these logical entities, such as paragraphs, sections,
 notes, titles, and cross-references which give a document its logical  chapters, notes, titles, and cross-references which give a document its
 structure.</p>  logical structure.</p>
 <p>  
 Because of this model, the author can divide the document into chapters,  <p>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
 paragraphs, according to the content. In the writing phase, the lines, pages,  paragraphs, according to the content. In the writing phase, the lines, pages,
Line 576  if the system requires documents to be w Line 314  if the system requires documents to be w
 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>    <li>of the entities which can appear in the documents,</li>
 of the entities which can appear in the documents,    <li>and the relations between these entities.</li>
 </li>  
 <li>  
 and the relations between these entities.  
 </li>  
 </ul>  </ul>
 <p>  
 The choice of entities to include in the model can be subtle.  Some documents  <p>The choice of entities to include in the model can be subtle.  Some
 require chapters, while others only need various levels of sections. Certain  documents require chapters, while others only need various levels of sections.
 documents contain appendices, others don't.  In different documents the same  Certain documents contain appendices, others don't.  In different documents
 logical entity may go by different names (e.g. ``Conclusion'' and  the same 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>  
 The differences between documents result from more than just the entities that  <p>The differences between documents result from more than just the entities
 appear in them, but also from the relationships between these entities and the  that appear in them, but also from the relationships between these entities
 ways that they are linked.  In certain documents, notes are spread throughout  and the ways that they are linked.  In certain documents, notes are spread
 the document, for example at the bottom of the page containing the  throughout the document, for example at the bottom of the page containing the
 cross-reference to them, while in other documents they are collected at the  cross-reference to them, while in other documents they are collected at the
 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>  
 All of this makes it unlikely that a single model can describe any document at  <p>All of this makes it unlikely that a single model can describe any document
 a relatively high level.  It is obviously tempting to make up a list of widely  at a relatively high level.  It is obviously tempting to make up a list of
 used entities, such as chapters, sections, paragraphs, and titles, and then  widely used entities, such as chapters, sections, paragraphs, and titles, and
 map all other entities onto the available choices.  In this way, an  then map all other entities onto the available choices.  In this way, an
 introduction can be supported as a chapter and a contract clause supported as  introduction can be supported as a chapter and a contract clause supported as
 a paragraph or section. However, in trying to widen the range of usage of  a paragraph or section. However, in trying to widen the range of usage of
 certain entities, their meaning can be lost and the power of the model  certain entities, their meaning can be lost and the power of the model
Line 621  of widely used entities.</p> Line 355  of widely used entities.</p>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb22">Generic and specific structures</a></h2>  <h2><a name="sectb22">Generic and specific structures</a></h2>
 <p>  
 Thus, it is apparently impossible to construct an exhaustive inventory of all  <p>Thus, it is apparently impossible to construct an exhaustive inventory of
 those entities which are necessary and sufficient to precisely describe any  all those entities which are necessary and sufficient to precisely describe
 document. It also seems impossible to specify all possible arrangements of  any 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>  
 A <em>class</em> is a set of documents having very similar structure. Thus,  <p>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>  
 To give a more rigorous definition of classes, we must introduce the ideas of  <p>To give a more rigorous definition of classes, we must introduce the ideas
 <em>generic structure</em> and <em>specific structure</em>.  Each document has  of <em>generic structure</em> and <em>specific structure</em>.  Each document
 a <em>specific structure</em> which organizes the various parts which comprise  has a <em>specific structure</em> which organizes the various parts which
 it.  We illustrate this with the help of a simple example comparing two  comprise it.  We illustrate this with the help of a simple example comparing
 reports, A and B (<a href="#specstruct">see Figure</a>). The report A contains  two reports, A and B (<a href="#specstruct">see Figure</a>). The report A
 an introduction followed by three chapters and a conclusion.  The first  contains an introduction followed by three chapters and a conclusion.  The
 chapter contains two sections, the second, three sections.  That is the  first 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
Line 653  documents are thus different.</p> Line 386  documents are thus different.</p>
   
 <div class="figure">  <div class="figure">
 <hr>  <hr>
   
 <pre>        Report A                 Report B  <pre>        Report A                 Report B
              Introduction              Introduction               Introduction              Introduction
              Chapter 1                 Chapter 1               Chapter 1                 Chapter 1
Line 666  documents are thus different.</p> Line 398  documents are thus different.</p>
              Chapter 3                      Section 2.3               Chapter 3                      Section 2.3
              Conclusion                     Section 2.4               Conclusion                     Section 2.4
                                        Conclusion</pre>                                         Conclusion</pre>
 <p align="center">  
 <em><a name="specstruct">Two specific structures</a></em></p>  
 <hr>  
   
   <p align="center"><em><a name="specstruct">Two specific
   structures</a></em></p>
   <hr>
 </div>  </div>
 <p>  
 The <em>generic structure</em> defines the ways in which specific structures  <p>The <em>generic structure</em> defines the ways in which specific
 can be constructed.  It specifies how to generate specific structures.  The  structures can be constructed.  It specifies how to generate specific
 reports A and B, though different, are constructed in accordance with the same  structures.  The reports A and B, though different, are constructed in
 generic structure, which specifies that a report contains an introduction  accordance with the same generic structure, which specifies that a report
 followed by a variable number of chapters and a conclusion, with each chapter  contains an introduction followed by a variable number of chapters and a
 containing a variable number of sections.</p>  conclusion, with each chapter containing a variable number of sections.</p>
 <p>  
 There is a one-to-one correspondence between a class and a generic structure:  <p>There is a one-to-one correspondence between a class and a generic
 all the documents of a class are constructed in accordance with the same  structure: all the documents of a class are constructed in accordance with the
 generic structure.  Hence the definition of the class: a class is a set of  same generic structure.  Hence the definition of the class: a class is a set
 documents whose specific structure is constructed in accordance with the same  of documents whose specific structure is constructed in accordance with the
 generic structure.  A class is characterized by its generic structure.</p>  same generic structure.  A class is characterized by its generic
 <p>  structure.</p>
 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  <p>Thus, a generic structure can be considered to be a model at the level
 limited to a single class of documents, it is possible to define a model which  which interests us, but only for one class of documents.  When the definition
 does a good job of representing the documents of the class, including the  is limited to a single class of documents, it is possible to define a model
 necessary entities and unencumbered by useless entities.  The description of  which does a good job of representing the documents of the class, including
 the organization of the documents in the class can then be sufficiently  the necessary entities and unencumbered by useless entities.  The description
   of 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>  <h2><a name="sectb23">Logical structure and physical structure</a></h2>
 <p>  
 Generic structures only describe the <em>logical</em> organization of  <p>Generic structures only describe the <em>logical</em> organization of
 documents, not their <em>physical</em> presentation on a screen or on sheets  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>  
 An examination of current printed documents shows that the details of  <p>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
 independent of the logical organization of the text.  Moreover, the art of  independent of the logical organization of the text.  Moreover, the art of
Line 717  combined with the changes in the shapes Line 449  combined with the changes in the shapes
 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>  
 Since the model permits the description of all of the logical structure of the  <p>Since the model permits the description of all of the logical structure of
 document, the presentation can be derived from the model without being  the 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>  
 Just as one cannot define a unique generic logical structure for all document  <p>Just as one cannot define a unique generic logical structure for all
 classes, one cannot define universal presentation rules which can be applied  document classes, one cannot define universal presentation rules which can be
 to all document classes.  For certain types of documents the chapter titles  applied to all document classes.  For certain types of documents the chapter
 will be centered on the page and printed in large, bold type.  For other  titles will be centered on the page and printed in large, bold type.  For
 documents, the same chapter titles will be printed in small, italic type and  other documents, the same chapter titles will be printed in small, italic type
 aligned on the left margin.</p>  and aligned on the left margin.</p>
 <p>  
 Therefore, it is necessary to base the presentation specifications for  <p>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
 generic logical structure of the class.  Thus, it is possible to specify a  generic logical structure of the class.  Thus, it is possible to specify a
Line 740  similarly to specify titles for the sect Line 472  similarly to specify titles for the sect
 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>  
 There are several advantages derived from having a presentation linked to the  <p>There are several advantages derived from having a presentation linked to
 generic structure and described by a generic presentation. Homogeneity is the  the generic structure and described by a generic presentation. Homogeneity is
 first.  Since every document in a class corresponds to the same generic  the first.  Since every document in a class corresponds to the same generic
 logical structure, a homogenous presentation for different documents of the  logical structure, a homogenous presentation for different documents of the
 same class can be assured by applying the same generic presentation to all  same class can be assured by applying the same generic presentation to all
 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>  
 Another advantage of this approach to presentation is that it facilitates  <p>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>  
 If the presentation of the class does not have to be homogenous, then the  <p>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
Line 771  appearance at the time of editing or pri Line 503  appearance at the time of editing or pri
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb24">Document structures and object structures</a></h2>  <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  <p>So far, we have only discussed the global structure of documents and have
 considered the contents found in that structure.  We could limit ourselves to  not considered the contents found in that structure.  We could limit ourselves
 purely textual contents by assuming that a title or a paragraph contains a  to 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>  
 Just as with the whole of the document, the model takes into account the  <p>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
 formulas, in tables, and in certain types of diagrams.  On the other hand, it  formulas, in tables, and in certain types of diagrams.  On the other hand, it
Line 792  can represent every one of these types o Line 523  can represent every one of these types o
 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>  
 Thus, a mathematical class can be defined and have a generic logical structure  <p>Thus, a mathematical class can be defined and have a generic logical
 associated with it.  But even if a single generic structure can represent a  structure associated with it.  But even if a single generic structure can
 sufficient variety of mathematical formulas, for other objects with less  represent a sufficient variety of mathematical formulas, for other objects
 rigorous structure, multiple classes must be defined.  As for documents, using  with less rigorous structure, multiple classes must be defined.  As for
 multiple classes assures that the model can describe the full range of objects  documents, using multiple classes assures that the model can describe the full
 to be presented.  It also permits the system to support objects which were not  range of objects to be presented.  It also permits the system to support
 initially anticipated.  Moreover, this comment applies equally to mathematics:  objects which were not initially anticipated.  Moreover, this comment applies
 different classes of formulas can be described depending on the domain of  equally to mathematics: different classes of formulas can be described
 mathematics being described.</p>  depending on the domain of mathematics being described.</p>
 <p>  
 Since objects have the same level of logical representation as documents, they  <p>Since objects have the same level of logical representation as documents,
 gain the same advantages.  In particular, it is possible to define the  they 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
 class.  Thus, as for documents, objects of the same type have a uniform  class.  Thus, as for documents, objects of the same type have a uniform
 presentation and the presentation of every object in a given class can be  presentation and the presentation of every object in a given class can be
Line 812  changed simply by changing the generic p Line 543  changed simply by changing the generic p
 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>  
 It is clear that the documents in a class do not necessarily use the same  <p>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>  
 Thus, the object classes will be made commonplace and usable in every  <p>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>  
 Thus, the document model is not a single, general model describing every type  <p>Thus, the document model is not a single, general model describing every
 of document in one place.  Rather, it is a meta-model which can be used to  type of document in one place.  Rather, it is a meta-model which can be used
 describe many different models each of which represents either a class of  to 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>  <h2><a name="sectb31">Document meta-structure</a></h2>
 <p>  
 Since the concept of meta-structure is well suited to the task of describing  <p>Since the concept of meta-structure is well suited to the task of
 documents at a high level of abstraction, this meta-structure must be  describing documents at a high level of abstraction, this meta-structure must
 precisely defined.  Toward that end this section first presents the basic  be 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>  <h3><a name="sectc311">The basic types</a></h3>
 <p>  
 At the lowest level of a document's structure, the first atom considered is  <p>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>  
 If the structure of a document is not refined to go down to  the level of  <p>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>  
 If, instead, a very fine-grained representation for the structure of a  <p>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,
 in programs,  for which one wants to retain a structure very close to the  in programs,  for which one wants to retain a structure very close to the
Line 878  syntax of the programming language.  In Line 605  syntax of the programming language.  In
 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>  
 The character string is not the only atom necessary for representing those  <p>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>  
 Primitive <em>graphical elements</em> are used for tables and figures of  <p>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>  
 Photographs, though having very little structure, must still appear in  <p>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>  
 Finally, mathematical notations require certain elements which are  <p>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>  
 To summarize, the primitive elements which are used in the construction of  <p>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>    <li>character strings,</li>
 character strings,    <li>graphical elements,</li>
 </li>    <li>pictures,</li>
 <li>    <li>and mathematical symbols.</li>
 graphical elements,  
 </li>  
 <li>  
 pictures,  
 </li>  
 <li>  
 and mathematical symbols.  
 </li>  
 </ul>  </ul>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc312">Constructed elements</a></h3>  <h3><a name="sectc312">Constructed elements</a></h3>
 <p>  
 A document is evidently formed from primitive elements.  But the model of Thot  <p>A document is evidently formed from primitive elements.  But the model of
 also proposes higher level elements.  Thus, in a document composed of several  Thot also proposes higher level elements.  Thus, in a document composed of
 chapters, each chapter is an element, and in the chapters each section is also  several chapters, each chapter is an element, and in the chapters each section
 an element, and so on.  A document is thus an organized set of elements.</p>  is also an element, and so on.  A document is thus an organized set of
 <p>  elements.</p>
 In a document there are different sorts of elements.  Each element has a  
   <p>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
Line 938  elements of the type section, among othe Line 657  elements of the type section, among othe
 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>  
 The important difference between the primitive elements and the other elements  <p>The important difference between the primitive elements and the other
 of the document is that the primitive elements are atoms (they cannot be  elements of the document is that the primitive elements are atoms (they cannot
 decomposed), whereas the others, called <em>constructed elements</em>, are  be 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>  
 A document is also a constructed element.  This is an important point. In  <p>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
 document.  Thus, an article presented in a journal is treated by its author as  document.  Thus, an article presented in a journal is treated by its author as
Line 956  a document in itself, while the editor o Line 675  a document in itself, while the editor o
 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>  
 These thoughts about types and constructed elements apply just as well to  <p>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
Line 965  strings) and/or constructed elements lik Line 684  strings) and/or constructed elements lik
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc313">Logical structure constructors</a></h3>  <h3><a name="sectc313">Logical structure constructors</a></h3>
 <p>  
 Having defined the primitive elements and the constructed elements, it is now  <p>Having defined the primitive elements and the constructed elements, it is
 time to define the types of organization which allow the building of  now 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>  
 In defining the overall organization of documents, the first two constructors  
 considered are the aggregate and the list.</p>  
   
 <div class="subsubsection">  <p>In defining the overall organization of documents, the first two
   constructors considered are the aggregate and the list.</p>
   
   <div class="subsubsection">
 <h4><a name="sectd3131">Aggregate and List</a></h4>  <h4><a name="sectd3131">Aggregate and List</a></h4>
 <p>  
 The <em>aggregate</em> constructor is used to define constructed element types  <p>The <em>aggregate</em> constructor is used to define constructed element
 which are collections of a given number of other elements. These collections  types which are collections of a given number of other elements. These
 may or may not be ordered.  The elements may be either constructed or  collections may or may not be ordered.  The elements may be either constructed
 primitive and are specified by their type.  A report (that is, a constructed  or primitive and are specified by their type.  A report (that is, a
 element of the report type) has an aggregate structure.  It is formed from a  constructed element of the report type) has an aggregate structure.  It is
 title, an author's name, an introduction, a body, and a conclusion, making it  formed from a title, an author's name, an introduction, a body, and a
 a collection of five element types.  This type of constructor is found in  conclusion, making it a collection of five element types.  This type of
 practically every document, and generally at several levels in a document.</p>  constructor is found in practically every document, and generally at several
 <p>  levels in a document.</p>
 The <em>list</em> constructor is used to define constructed elements which are  
 ordered sequences of elements (constructed or primitive) having the same type.  <p>The <em>list</em> constructor is used to define constructed elements which
 The minimum and maximum numbers of elements for the sequence can be specified  are ordered sequences of elements (constructed or primitive) having the same
 in the list constructor or the number of elements can be left unconstrained.  type. The minimum and maximum numbers of elements for the sequence can be
 The body of a report is a list of chapters and is typically required to  specified in the list constructor or the number of elements can be left
 contain a minimum of two chapters (is a chapter useful if it is the only one  unconstrained. The body of a report is a list of chapters and is typically
 in the report?) The chapter itself can contain a list of sections, each  required to contain a minimum of two chapters (is a chapter useful if it is
 section containing a list of paragraphs.  In the same way as the aggregate,  the only one in the report?) The chapter itself can contain a list of
 the list is a very frequently used constructor in every type of document.  sections, each section containing a list of paragraphs.  In the same way as
 However, these two constructors are not sufficient to describe every document  the aggregate, the list is a very frequently used constructor in every type of
 structure; thus other constructors supplement them.</p>  document. However, these two constructors are not sufficient to describe every
   document 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>  <h4><a name="sectd3132">Choice, Schema, and Unit</a></h4>
 <p>  
 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
 type for which one alternative is chosen from several possibilities. Thus, a  element type for which one alternative is chosen from several possibilities.
 paragraph can be either a simple text paragraph, or an enumeration, or a  Thus, a paragraph can be either a simple text paragraph, or an enumeration, or
 citation.</p>  a citation.</p>
 <p>  
 The choice constructor indicates the complete list of possible options, which  <p>The choice constructor indicates the complete list of possible options,
 can be too restrictive in certain cases, the paragraph being one such case.  which can be too restrictive in certain cases, the paragraph being one such
 Two constructors, <em>unit</em> and <em>schema</em>, address this  case. 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 1025  paragraph as a sequence of units, which Line 742  paragraph as a sequence of units, which
 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>  
 The <em>schema</em> constructor represents an object defined by a generic  <p>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>  
 The <em>unit</em> constructor represents an element whose type can be either a  <p>The <em>unit</em> constructor represents an element whose type can be
 primitive type or an element type defined as a unit in the generic logical  either a primitive type or an element type defined as a unit in the generic
 structure of the document, or in another generic logical structure used in the  logical structure of the document, or in another generic logical structure
 document.  Such an element may be used in document objects constructed  used in the document.  Such an element may be used in document objects
 according to other generic structures.</p>  constructed according to other generic structures.</p>
 <p>  
 Thus, for example, if a cross-reference to a footnote is defined in the  <p>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
 they appear in an article.  In another type of document, a table defined by  they appear in an article.  In another type of document, a table defined by
Line 1048  environment into which they are inserted Line 765  environment into which they are inserted
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3133">Reference and Inclusion</a></h4>  <h4><a name="sectd3133">Reference and Inclusion</a></h4>
 <p>  
 The <em>reference</em> is used to define document elements that are  <p>The <em>reference</em> is used to define document elements that are
 cross-references to other elements, such as a section, a chapter, a  cross-references to other elements, such as a section, a chapter, a
 bibliographic citation, or a figure.  The reference is bi-directional.  It can  bibliographic citation, or a figure.  The reference is bi-directional.  It can
 be used to access both the element being cross-referenced and each of the  be used to access both the element being cross-referenced and each of the
 elements which make use of the cross-reference.</p>  elements which make use of the cross-reference.</p>
 <p>  
 References can be either <em>internal</em> or <em>external</em>.  That is,  <p>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>  
 The <em><a name="inclusion">inclusion</a></em> constructor is a special type  <p>The <em><a name="inclusion">inclusion</a></em> constructor is a special
 of reference.  Like the reference, it is an internal or external bidirectional  type of reference.  Like the reference, it is an internal or external
 link, but it is not a cross-reference.  This link represents the ``live''  bidirectional link, but it is not a cross-reference.  This link represents the
 inclusion of the designated element; it accesses the most recent version of  ``live'' inclusion of the designated element; it accesses the most recent
 that element and not a ``dead'' copy, fixed in the state in which it was found  version of that element and not a ``dead'' copy, fixed in the state in which
 at the moment the copy was made.  As soon as an element is modified, all of  it was found at the moment the copy was made.  As soon as an element is
 its inclusions are automatically brought up to date.  It must be noted that,  modified, all of its inclusions are automatically brought up to date.  It must
 in addition to inclusion, Thot permits the creation of ``dead'' copies.</p>  be noted that, in addition to inclusion, Thot permits the creation of ``dead''
 <p>  copies.</p>
 There are three types of inclusions: inclusions with full expansion,  
   <p>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
Line 1078  expansion (full or partial) are represen Line 795  expansion (full or partial) are represen
 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>  
 Inclusion with complete expansion can be used to include parts of the same  <p>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>  
 Inclusion without expansion or with partial expansion is used to include  <p>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,
 especially when there are many authors.  So, a book can include some chapters,  especially when there are many authors.  So, a book can include some chapters,
Line 1094  where each chapter is a different docume Line 811  where each chapter is a different docume
 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>  
 During printing, inclusions without expansion or with partial expansion can be  <p>During printing, inclusions without expansion or with partial expansion can
 represented either as they were shown on the screen or by a complete (and  be 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>  
 The inclusion constructor, whatever its type, respects the generic structure:  <p>The inclusion constructor, whatever its type, respects the generic
 only those elements authorized by the generic structure can be included at a  structure: only those elements authorized by the generic structure can be
 given position in a document.</p>  included at a given position in a document.</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3134">Mark pairs</a></h4>  <h4><a name="sectd3134">Mark pairs</a></h4>
 <p>  
 It is often useful to delimit certain parts of a document independently from  <p>It is often useful to delimit certain parts of a document independently
 the logical structure.  For example, one might wish to attach some information  from the logical structure.  For example, one might wish to attach some
 (in the form of an <a href="#sectc315">attribute</a>) or a particular  information (in the form of an <a href="#sectc315">attribute</a>) or a
 treatment to a group of words or a set of consecutive paragraphs. <em>Mark  particular treatment to a group of words or a set of consecutive paragraphs.
 pairs</em> are used to do this.</p>  <em>Mark pairs</em> are used to do this.</p>
 <p>  
 Mark pairs are elements which are always paired and are terminals in the  <p>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
Line 1122  section), they can be used quite freely. Line 838  section), they can be used quite freely.
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3135">Restrictions and Extensions</a></h4>  <h4><a name="sectd3135">Restrictions and Extensions</a></h4>
 <p>  
 The primitive types and the constructors presented so far permit the  <p>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>  
 A restriction associates with a particular element type <em>A</em>, a list of  <p>A restriction associates with a particular element type <em>A</em>, a list
 those element types which elements of type <em>A</em> may not contain, even if  of those element types which elements of type <em>A</em> may not contain, even
 the definition of type <em>A</em> and those of its components authorize them  if the definition of type <em>A</em> and those of its components authorize
 otherwise.  This simplifies the writing of generic logical structures and  them 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>  
 Extensions are the inverse of restrictions.  They identify a list of element  <p>Extensions are the inverse of restrictions.  They identify a list of
 types whose presence <em>is</em> permitted, even if its definition and those  element types whose presence <em>is</em> permitted, even if its definition and
 of its components do not authorize them otherwise.</p>  those 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>  
 Thus, four constructors are used to construct a document:</p>  <p>Thus, four constructors are used to construct a document:</p>
 <ul>  <ul>
 <li>    <li>the aggregate constructor (ordered or not),</li>
 the aggregate constructor (ordered or not),    <li>the list constructor,</li>
 </li>    <li>the choice constructor and its extensions, the unit and schema
 <li>      constructors,</li>
 the list constructor,    <li>the reference constructor and its variant, the inclusion.</li>
 </li>  </ul>
 <li>  
 the choice constructor and its extensions, the unit and schema constructors,  <p>These constructors are also sufficient for objects.  Thus, these
 </li>  constructors provide a homogenous meta-model which can describe both the
 <li>  organization of the document as a whole and that of the various types of
 the reference constructor and its variant, the inclusion.  objects which it contains.  After presenting the description language for
 </li>  generic structures, we will present several examples which illustrate the
 </ul>  appropriateness of the model.</p>
 <p>  
 These constructors are also sufficient for objects.  Thus, these constructors  <p>The first three constructors (aggregate, list and choice) lead to tree-like
 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  
 contains.  After presenting the description language for generic structures,  
 we will present several examples which illustrate the appropriateness of the  
 model.</p>  
 <p>  
 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
 constructor introduces other, non-hierarchical, relations which augment those  constructor introduces other, non-hierarchical, relations which augment those
Line 1183  documents, thus creating a hypertext str Line 890  documents, thus creating a hypertext str
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc314">Associated Elements</a></h3>  <h3><a name="sectc314">Associated Elements</a></h3>
 <p>  
 Thanks to the list, aggregate and choice constructors, the organization of the  <p>Thanks to the list, aggregate and choice constructors, the organization of
 document is specified rigorously, using constructed and primitive elements.  the document is specified rigorously, using constructed and primitive
 But a document is made up of more than just its elements; it clearly also  elements. But a document is made up of more than just its elements; it clearly
 contains links between them.  There exist elements whose position in the  also contains links between them.  There exist elements whose position in the
 document's structure is not determinable.  This is notably the case for  document's structure is not determinable.  This is notably the case for
 figures and notes.  A figure can be designated at many points in the same  figures and notes.  A figure can be designated at many points in the same
 document and its place in the physical document can vary over the life of the  document and its place in the physical document can vary over the life of the
Line 1205  documents that are broken into pages, bu Line 911  documents that are broken into pages, bu
 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>  
 Those elements whose position in the structure of the document is not fixed,  <p>Those elements whose position in the structure of the document is not
 even though they are definitely part of the document, are called  fixed, 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>  
 It can happen that the associated elements are totally disconnected from the  <p>It can happen that the associated elements are totally disconnected from
 structure of the document, as in a commentary or appraisal of the entire work.  the structure of the document, as in a commentary or appraisal of the entire
 But more often, the associated elements are linked to the content of the  work. 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>  
 Thus, associated elements introduce a new use for the reference constructor.  <p>Thus, associated elements introduce a new use for the reference
 It not only serves to create links between elements of the principal structure  constructor. It not only serves to create links between elements of the
 of the document, but also serves to link the associated elements to the  principal structure of the document, but also serves to link the associated
 primary structure.</p>  elements to the primary structure.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc315">Attributes</a></h3>  <h3><a name="sectc315">Attributes</a></h3>
 <p>  
 There remain logical aspects of documents that are not entirely described by  <p>There remain logical aspects of documents that are not entirely described
 the structure.  Certain types of semantic information, which are not stated  by 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
 information is shown by typographic effects which do not correspond to a  information is shown by typographic effects which do not correspond to a
 change between structural elements.  In fact, certain titles are set in bold  change between structural elements.  In fact, certain titles are set in bold
Line 1239  frequently appear in the middle of conti Line 944  frequently appear in the middle of conti
 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>  
 An attribute is a piece of information attached to a structural element which  <p>An attribute is a piece of information attached to a structural element
 augments the type of the element and clarifies its function in the document.  which augments the type of the element and clarifies its function in the
 Keywords, foreign language words, and titles of other works can all be  document. Keywords, foreign language words, and titles of other works can all
 represented by character strings with attached attributes.  Attributes may  be 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>  
 In fact, an attribute can be any piece of information which is linked to a  <p>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
 of characters used by an editor or formatter.  It also determines the  of characters used by an editor or formatter.  It also determines the
Line 1256  algorithm or hyphenation dictionary to b Line 961  algorithm or hyphenation dictionary to b
 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>  
 As with the types of constructed elements, the attributes and the values they  <p>As with the types of constructed elements, the attributes and the values
 can take are defined separately in each generic logical structure, not in the  they can take are defined separately in each generic logical structure, not in
 meta-model, according to the needs of the document class or the nature of the  the meta-model, according to the needs of the document class or the nature of
 object.</p>  the object.</p>
 <p>  
 Many types of attributes are offered: numeric, textual, references, and  <p>Many types of attributes are offered: numeric, textual, references, and
 enumerations:</p>  enumerations:</p>
 <ul>  <ul>
 <li>    <li><em>Numeric attributes</em> can take integer values (negative, positive,
 <em>Numeric attributes</em> can take integer values (negative, positive, or      or null).</li>
 null).    <li><em>Textual attributes</em> have as their values character strings.</li>
 </li>    <li><em>Reference attributes</em> designate an element of the logical
 <li>      structure.</li>
 <em>Textual attributes</em> have as their values character strings.    <li><em>Enumeration attributes</em> can take one value from a limited list
 </li>      of possible values, each value being a name.</li>
 <li>  
 <em>Reference attributes</em> designate an element of the logical structure.  
 </li>  
 <li>  
 <em>Enumeration attributes</em> can take one value from a limited list of  
 possible values, each value being a name.  
 </li>  
 </ul>  </ul>
 <p>  
 In a generic structure, there is a distinction between <em>global  <p>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
Line 1290  presented above is an example of a globa Line 988  presented above is an example of a globa
 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>  
 Attributes can be assigned to the elements which make up the document in many  <p>Attributes can be assigned to the elements which make up the document in
 different ways.  The author can freely and dynamically place them on any part  many different ways.  The author can freely and dynamically place them on any
 of the document in order to attach supplementary information of his/her  part of the document in order to attach supplementary information of his/her
 choice. However, attributes may only be assigned in accordance with the rules  choice. However, attributes may only be assigned in accordance with the rules
 of the generic structure; in particular, local attributes can only be assigned  of the generic structure; in particular, local attributes can only be assigned
 to those element types for which they are defined.</p>  to those element types for which they are defined.</p>
 <p>  
 In the generic structure, certain local attributes can be made mandatory for  <p>In the generic structure, certain local attributes can be made mandatory
 certain element types.  In this case, Thot automatically associates the  for 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>  
 Attributes can also be automatically assigned, with a given value, by every  <p>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>  
 In the case of mark pairs, attributes are logically associated with the pair  <p>In the case of mark pairs, attributes are logically associated with the
 as a whole, but are actually attached to the first mark.</p>  pair 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>  <h3><a name="sectc316">Discussion of the model</a></h3>
 <p>  
 The notions of attribute, constructor, structured element, and associated  <p>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
 fact, many types of elements and attributes can be found in a variety of  fact, many types of elements and attributes can be found in a variety of
Line 1333  many document classes.  This is the reas Line 1030  many document classes.  This is the reas
 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>  
 Structure, such as that presented here, can appear very rigid, and it is  <p>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>    <li>the generic structures are not fixed in the model itself,</li>
 the generic structures are not fixed in the model itself,    <li>the model takes the dynamics of documents into account,</li>
 </li>    <li>the constructors offer great flexibility.</li>
 <li>  
 the model takes the dynamics of documents into account,  
 </li>  
 <li>  
 the constructors offer great flexibility.  
 </li>  
 </ul>  </ul>
 <p>  
 When the generic structure of a document is not predefined, but rather is  <p>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
 a particular document of the class, it is always possible either to create a  a particular document of the class, it is always possible either to create a
Line 1359  new class with a generic structure well Line 1050  new class with a generic structure well
 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>  
 The model is sufficiently flexible to take into account all the phases of the  <p>The model is sufficiently flexible to take into account all the phases of
 life of the document.  When a generic structure specifies that a report must  the life of the document.  When a generic structure specifies that a report
 contain a title, an abstract, an introduction, at least two chapters, and a  must contain a title, an abstract, an introduction, at least two chapters, and
 conclusion, this means only that a report, <em>upon completion</em>, will have  a conclusion, this means only that a report, <em>upon completion</em>, will
 to contain all of these elements.  When the author begins writing, none of  have to contain all of these elements.  When the author begins writing, none
 these elements is present.  Thot uses this model.  Therefore, it tolerates  of 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>  
 In contrast, other applications may reject a document which does not conform  <p>In contrast, other applications may reject a document which does not
 strictly to its generic structure.  This is, for example, what is done by  conform strictly to its generic structure.  This is, for example, what is done
 compilers which refuse to generate code for a program which is not  by 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>  
 The constructors of the document model bring a great flexibility to the  <p>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
 constructor permits the addition of more elements of the same type.  Used  constructor permits the addition of more elements of the same type.  Used
Line 1384  together, these two constructors permit Line 1075  together, these two constructors permit
 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>  
 Another difficulty linked to the use of structure in the document model  <p>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>  
 However, the level of structure of the model is not imposed.  Each generic  <p>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
 edited and printed, a  relatively simple structure suffices.  If more  edited and printed, a  relatively simple structure suffices.  If more
Line 1405  expressions.  The document model of Thot Line 1096  expressions.  The document model of Thot
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb32">The definition language for generic structures</a></h2>  <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  <p>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>  
 Each generic structure, which defines a class of documents or objects, is  <p>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>  <h3><a name="sectc321">Writing Conventions</a></h3>
 <p>  
 The grammar of S, like those of the languages P and T presented later, is  <p>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>  
 In this meta-language each rule of the grammar is composed of a grammar symbol  <p>In this meta-language each rule of the grammar is composed of a grammar
 followed by an equals sign (`=') and the right part of the rule.  The equals  symbol followed by an equals sign (`=') and the right part of the rule.  The
 sign plays the same role as the traditional `::=' of BNF: it indicates that  equals sign plays the same role as the traditional `::=' of BNF: it indicates
 the right part defines the symbol of the left part.  In the right part,</p>  that the right part defines the symbol of the left part.  In the right
   part,</p>
 <dl>  <dl>
 <dt>concatenation</dt>    <dt>concatenation</dt>
 <dd>      <dd>is shown by the juxtaposition of symbols;</dd>
 is shown by the juxtaposition of symbols;    <dt>character strings</dt>
 </dd>      <dd>between apostrophes ' represent terminal symbols, that is, keywords in
 <dt>character strings</dt>        the language defined.  Keywords are written here in upper-case letters,
 <dd>        but can be written in any combination of upper and lower-case letters. 
 between apostrophes ' represent terminal symbols, that is, keywords in the        For example, the keyword <tt>DEFPRES</tt> of S can also be written as
 language defined.  Keywords are written here in upper-case letters, but can be        <tt>defpres</tt> or <tt>DefPres</tt>.</dd>
 written in any combination of upper and lower-case letters.  For example, the    <dt>material between brackets</dt>
 keyword <tt>DEFPRES</tt> of S can also be written as <tt>defpres</tt> or      <dd>(`[' and `]') is optional;</dd>
 <tt>DefPres</tt>.    <dt>material between angle brackets</dt>
 </dd>      <dd>(`&lt;' and `&gt;') can be repeated many times or omitted;</dd>
 <dt>material between brackets</dt>    <dt>the slash</dt>
 <dd>      <dd>(`/') indicates an alternative, a choice between the options separated
 (`[' and `]') is optional;        by the slash character;</dd>
 </dd>    <dt>the period</dt>
 <dt>material between angle brackets</dt>      <dd>marks the end of a rule;</dd>
 <dd>    <dt>text between braces</dt>
 (`&lt;' and `>') can be repeated many times or omitted;      <dd>(`{' and `}') is simply a comment.</dd>
 </dd>  
 <dt>the slash</dt>  
 <dd>  
 (`/') indicates an alternative, a choice between the options separated by the  
 slash character;  
 </dd>  
 <dt>the period</dt>  
 <dd>  
 marks the end of a rule;  
 </dd>  
 <dt>text between braces</dt>  
 <dd>  
 (`{' and `}') is simply a comment.  
 </dd>  
 </dl>  </dl>
 <p>  
 The M meta-language also uses the concepts of identifiers, strings, and  <p>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>      <dd>represents an identifier, a sequence of letters (upper or lower-case),
 represents an identifier, a sequence of letters (upper or lower-case), digits,        digits, and underline characters (`_'), beginning with a letter.  Also
 and underline characters (`_'), beginning with a letter.  Also considered a        considered a letter is the sequence of characters `<tt>\nnn</tt>' where
 letter is the sequence of characters `<tt>\nnn</tt>' where the letter        the letter <tt>n</tt> represents the ISO Latin-1 code of the letter in
 <tt>n</tt> represents the ISO Latin-1 code of the letter in octal.  It is thus        octal.  It is thus possible to use accented letters in identifiers.  The
 possible to use accented letters in identifiers.  The maximum length of        maximum length of identifiers is fixed by the compiler.  It is normally
 identifiers is fixed by the compiler.  It is normally 31 characters.        31 characters.
 <p>        <p>Unlike keywords, upper and lower-case letters are distinct in
 Unlike keywords, upper and lower-case letters are distinct in identifiers.        identifiers. Thus, <tt>Title</tt>, <tt>TITLE</tt>, and <tt>title</tt>
 Thus, <tt>Title</tt>, <tt>TITLE</tt>, and <tt>title</tt> are considered        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. 
 represents a string.  This is a string of characters delimited by apostrophes.        As with identifiers, strings can contain characters represented by their
 If an apostrophe must appear in a string, it is doubled.  As with identifiers,        octal code (after a backslash).  As with apostrophes, if a backslash
 strings can contain characters represented by their octal code (after a        must appear in a string, it is doubled.</dd>
 backslash).  As with apostrophes, if a backslash must appear in a string, it    <dt><tt>NUMBER</tt></dt>
 is doubled.      <dd>represents a positive integer or zero (without a sign), or said
 </dd>        another way, a sequence of decimal digits.</dd>
 <dt><tt>NUMBER</tt></dt>  
 <dd>  
 represents a positive integer or zero (without a sign), or said another way, a  
 sequence of decimal digits.  
 </dd>  
 </dl>  </dl>
 <p>  
 The M language can be used to define itself as follows:</p>  <p>The M language can be used to define itself as follows:</p>
 <pre>{ Any text between braces is a comment. }  <pre>{ Any text between braces is a comment. }
 Grammar      = Rule &lt; Rule > 'END' .  Grammar      = Rule &lt; Rule &gt; 'END' .
                { The &lt; and > signs indicate zero }                 { The &lt; and &gt; signs indicate zero }
                { or more repetitions. }                 { or more repetitions. }
                { END marks the end of the grammar. }                 { END marks the end of the grammar. }
 Rule         = Ident '=' RightPart '.' .  Rule         = Ident '=' RightPart '.' .
Line 1508  RightPart    = RtTerminal / RtIntermed . Line 1179  RightPart    = RtTerminal / RtIntermed .
                { The slash indicates a choice }                 { The slash indicates a choice }
 RtTerminal   ='NAME' / 'STRING' / 'NUMBER' .  RtTerminal   ='NAME' / 'STRING' / 'NUMBER' .
                { Right part of a terminal rule }                 { Right part of a terminal rule }
 RtIntermed   = Possibility &lt; '/' Possibility > .  RtIntermed   = Possibility &lt; '/' Possibility &gt; .
                { Right part of an intermediate rule }                 { Right part of an intermediate rule }
 Possibility  = ElemOpt &lt; ElemOpt > .  Possibility  = ElemOpt &lt; ElemOpt &gt; .
 ElemOpt      = Element / '[' Element &lt; Element > ']' /  ElemOpt      = Element / '[' Element &lt; Element &gt; ']' /
               '&lt;' Element &lt; Element > '>'  .                '&lt;' Element &lt; Element &gt; '&gt;'  .
                { Brackets delimit optional parts }                 { Brackets delimit optional parts }
 Element      = Ident / KeyWord .  Element      = Ident / KeyWord .
 Ident        = NAME .  Ident        = NAME .
Line 1523  END</pre> Line 1194  END</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc322">Extension schemas</a></h3>  <h3><a name="sectc322">Extension schemas</a></h3>
 <p>  
 A structure schema defines the generic logical structure of a class of  <p>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
 information to be represented by the structure for the documents that they  information to be represented by the structure for the documents that they
Line 1534  operate on.  Thus a document version man Line 1204  operate on.  Thus a document version man
 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>  
 Thus, many applications need to extend the generic structure of the documents  <p>Thus, many applications need to extend the generic structure of the
 on which they operate to introduce new attributes, associated elements or  documents on which they operate to introduce new attributes, associated
 element types.  These additions are specific to each application and must be  elements or element types.  These additions are specific to each application
 able to be applied to any generic structure: users will want to manage  and must be able to be applied to any generic structure: users will want to
 versions or construct indices for many types of documents.  Extension schemas  manage versions or construct indices for many types of documents.  Extension
 fulfill this role: they define attributes, elements, associated elements,  schemas fulfill this role: they define attributes, elements, associated
 units, etc., but they can only be used jointly with a structure schema that  elements, units, etc., but they can only be used jointly with a structure
 they complete. Otherwise, structure schemas can always be used without these  schema that they complete. Otherwise, structure schemas can always be used
 extensions when the corresponding applications are not available.</p>  without these 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>  <h3><a name="sectc323">The general organization of structure schemas</a></h3>
 <p>  
 Every structure schema begins with the keyword <tt>STRUCTURE</tt> and ends  <p>Every structure schema begins with the keyword <tt>STRUCTURE</tt> and ends
 with the keyword <tt>END</tt>.  The keyword <tt>STRUCTURE</tt> is followed by  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  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>  
 In the case of a complete schema (that is, a schema which is not an  <p>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
Line 1565  skeleton elements and the exceptions.  O Line 1235  skeleton elements and the exceptions.  O
 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>  
 In the case of an extension schema, there are neither parameters nor skeleton  <p>In the case of an extension schema, there are neither parameters nor
 elements and the <tt>STRUCT</tt> section is optional, while that section is  skeleton elements and the <tt>STRUCT</tt> section is optional, while that
 required in a schema that is not an extension.  On the other hand, extension  section is required in a schema that is not an extension.  On the other hand,
 schemas can contain an <tt>EXTENS</tt> section, which must not appear in a  extension schemas can contain an <tt>EXTENS</tt> section, which must not
 schema which is not an extension; this section defines the complements to  appear in a schema which is not an extension; this section defines the
 attach to the rules found in the schema to which the extension will be added.  complements to attach to the rules found in the schema to which the extension
 The sections <tt>ATTR</tt>, <tt>STRUCT</tt>, <tt>ASSOC</tt>, and  will be added. The sections <tt>ATTR</tt>, <tt>STRUCT</tt>, <tt>ASSOC</tt>,
 <tt>UNITS</tt> define new attributes, new elements, new associated elements,  and <tt>UNITS</tt> define new attributes, new elements, new associated
 and new units which add their definitions to the principal schema.</p>  elements, and new units which add their definitions to the principal
   schema.</p>
 <pre>     StructSchema ='STRUCTURE' ElemID ';'  <pre>     StructSchema ='STRUCTURE' ElemID ';'
                    'DEFPRES' PresID ';'                     'DEFPRES' PresID ';'
                  [ 'ATTR' AttrSeq ]                   [ 'ATTR' AttrSeq ]
Line 1586  and new units which add their definition Line 1257  and new units which add their definition
                  [ 'EXCEPT' ExceptSeq ]                   [ 'EXCEPT' ExceptSeq ]
                    'END' .                     'END' .
      ElemID       = NAME .</pre>       ElemID       = NAME .</pre>
 <p>  
 or</p>  <p>or</p>
 <pre>     ExtensSchema ='STRUCTURE' 'EXTENSION' ElemID ';'  <pre>     ExtensSchema ='STRUCTURE' 'EXTENSION' ElemID ';'
                    'DEFPRES' PresID ';'                     'DEFPRES' PresID ';'
                  [ 'ATTR' AttrSeq ]                   [ 'ATTR' AttrSeq ]
Line 1601  or</p> Line 1272  or</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc324">The default presentation</a></h3>  <h3><a name="sectc324">The default presentation</a></h3>
 <p>  
 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
Line 1618  another if s/he wishes.</p> Line 1288  another if s/he wishes.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc325">Global Attributes</a></h3>  <h3><a name="sectc325">Global Attributes</a></h3>
 <p>  
 If the generic structure includes global attributes of its own, they are  <p>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>  
 For attributes of the numeric, textual, or reference types, the type is  <p>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>  
 In the case of a reference attribute, the keyword <tt>REFERENCE</tt> is  <p>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
Line 1644  the case where the type is defined as <a Line 1313  the case where the type is defined as <a
 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>  
 In the case of an enumeration attribute, the equals sign is followed by the  <p>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>     AttrSeq   = Attribute &lt; Attribute > .  <pre>     AttrSeq   = Attribute &lt; Attribute &gt; .
      Attribute = AttrID '=' AttrType  ';' .       Attribute = AttrID '=' AttrType  ';' .
      AttrType  = 'INTEGER' / 'TEXT' /       AttrType  = 'INTEGER' / 'TEXT' /
                  'REFERENCE' '(' RefType ')' /                   'REFERENCE' '(' RefType ')' /
Line 1658  compiler for the S language.</p> Line 1327  compiler for the S language.</p>
      RefType   = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .       RefType   = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .
      FirstSec  = 'First' / 'Second' .       FirstSec  = 'First' / 'Second' .
      ExtStruct = '(' ElemID ')' .       ExtStruct = '(' ElemID ')' .
      ValueSeq  = AttrVal &lt; ',' AttrVal > .       ValueSeq  = AttrVal &lt; ',' AttrVal &gt; .
      AttrID    = NAME .       AttrID    = NAME .
      AttrVal   = NAME .</pre>       AttrVal   = NAME .</pre>
 <p>  
 There is a predefined global text attribute, the <em>language</em>, which is  <p>There is a predefined global text attribute, the <em>language</em>, which
 automatically added to every Thot structure schema.  This attribute allows  is 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>ATTR  <pre>ATTR
    Language = TEXT;</pre>     Language = TEXT;</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>The following specification defines the global enumeration attribute
 The following specification defines the global enumeration attribute    WordType.</p>
 WordType.</p>    <pre>ATTR
 <pre>ATTR  
    WordType = Definition, IndexWord, DocumentTitle;</pre>     WordType = Definition, IndexWord, DocumentTitle;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc326">Parameters</a></h3>  <h3><a name="sectc326">Parameters</a></h3>
 <p>  
 A parameter is a document element which can appear many times in the document,  <p>A parameter is a document element which can appear many times in the
 but always has the same value.  This value can only be modified in a  document, 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>  
 Parameters are not needed for every document class, but if the schema includes  <p>Parameters are not needed for every document class, but if the schema
 parameters they are declared after the keyword <tt>PARAM</tt>. Each parameter  includes parameters they are declared after the keyword <tt>PARAM</tt>. Each
 declaration is made in the same way as a <a href="#sectc327">structure element  parameter declaration is made in the same way as a <a
 declaration</a>.</p>  href="#sectc327">structure element declaration</a>.</p>
 <p>  
 During editing, Thot permits the insertion of parameters wherever the  <p>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
Line 1706  document.</p> Line 1374  document.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc327">Structured elements</a></h3>  <h3><a name="sectc327">Structured elements</a></h3>
 <p>  
 The rules for defining structured elements are required, except in an  <p>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>  
 The first structure rule after the keyword <tt>STRUCT</tt> must define the  <p>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>  
 The remaining rules may be placed in any order, since the language permits the  <p>The remaining rules may be placed in any order, since the language permits
 definition of element types before or after their use, or even in the same  the 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>  
 Each rule is composed of a name (the name of the element type whose structure  <p>Each rule is composed of a name (the name of the element type whose
 is being defined) followed by an equals sign and a structure definition.</p>  structure is being defined) followed by an equals sign and a structure
 <p>  definition.</p>
 If any local attributes are associated with the element type defined by the  
   <p>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
Line 1740  can be defined  as a local attribute for Line 1408  can be defined  as a local attribute for
 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>  
 If any <a href="#sectd3135">extensions</a> are defined for this element type,  <p>If any <a href="#sectd3135">extensions</a> are defined for this element
 a plus sign follows the structure definition and the names of the extension  type, a plus sign follows the structure definition and the names of the
 element types appear between parentheses after the plus.  If there are  extension element types appear between parentheses after the plus.  If there
 multiple extensions, they are separated by commas.  These types can either be  are multiple extensions, they are separated by commas.  These types can either
 defined in the same schema, defined in other schemas, or they may be base  be defined in the same schema, defined in other schemas, or they may be 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>  
 <a href="#sectd3135">Restrictions</a> are indicated in the same manner as  <p><a href="#sectd3135">Restrictions</a> are indicated in the same manner as
 extensions, but they are introduced by a minus sign and they come after the  extensions, but they are introduced by a minus sign and they come after the
 extensions, or if there are no extensions, after the structure definition.</p>  extensions, or if there are no extensions, after the structure definition.</p>
 <p>  
 If the values of attributes must be attached systematically to this element  <p>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>  
 The rule is terminated by a semicolon.</p>  <p>The rule is terminated by a semicolon.</p>
 <pre>  RuleSeq       = Rule &lt; Rule > .  <pre>  RuleSeq       = Rule &lt; Rule &gt; .
   Rule          = ElemID [ LocAttrSeq ] '=' DefWithAttr ';'.    Rule          = ElemID [ LocAttrSeq ] '=' DefWithAttr ';'.
   LocAttrSeq    = '(' 'ATTR' LocAttr &lt; ';' LocAttr > ')' .    LocAttrSeq    = '(' 'ATTR' LocAttr &lt; ';' LocAttr &gt; ')' .
   LocAttr       = [ '!' ] AttrID [ '=' AttrType ] .    LocAttr       = [ '!' ] AttrID [ '=' AttrType ] .
   DefWithAttr   = Definition    DefWithAttr   = Definition
                   [ '+' '(' ExtensionSeq ')' ]                    [ '+' '(' ExtensionSeq ')' ]
                   [ '-' '(' RestrictSeq ')' ]                    [ '-' '(' RestrictSeq ')' ]
                   [ 'WITH' FixedAttrSeq ] .                    [ 'WITH' FixedAttrSeq ] .
   ExtensionSeq  = ExtensionElem &lt; ',' ExtensionElem > .    ExtensionSeq  = ExtensionElem &lt; ',' ExtensionElem &gt; .
   ExtensionElem = ElemID / 'TEXT' / 'GRAPHICS' /    ExtensionElem = ElemID / 'TEXT' / 'GRAPHICS' /
                   'SYMBOL' / 'PICTURE' .                    'SYMBOL' / 'PICTURE' .
   RestrictSeq   = RestrictElem &lt; ',' RestrictElem > .    RestrictSeq   = RestrictElem &lt; ',' RestrictElem &gt; .
   RestrictElem  = ElemID / 'TEXT' / 'GRAPHICS' /    RestrictElem  = ElemID / 'TEXT' / 'GRAPHICS' /
                   'SYMBOL' / 'PICTURE' .</pre>                    'SYMBOL' / 'PICTURE' .</pre>
 <p>  
 The list of fixed-value attributes is composed of a sequence of  <p>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
 by an equals sign.  If the sign is preceded by a question mark the given value  by an equals sign.  If the sign is preceded by a question mark the given value
Line 1785  appears this indicates that this element Line 1453  appears this indicates that this element
 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>  
 Fixed-value attributes can either be <a href="#sectc325">global</a> or local  <p>Fixed-value attributes can either be <a href="#sectc325">global</a> or
 to the element type for which they are fixed, but they must be declared before  local to the element type for which they are fixed, but they must be declared
 they are used.</p>  before they are used.</p>
 <pre>    FixedAttrSeq    = FixedAttr &lt; ',' FixedAttr > .  <pre>    FixedAttrSeq    = FixedAttr &lt; ',' FixedAttr &gt; .
     FixedAttr       = AttrID [ FixedOrModifVal ] .      FixedAttr       = AttrID [ FixedOrModifVal ] .
     FixedOrModifVal = [ '?' ] '=' FixedValue .      FixedOrModifVal = [ '?' ] '=' FixedValue .
     FixedValue      = [ '-' ] NumValue / TextVal / AttrVal .      FixedValue      = [ '-' ] NumValue / TextVal / AttrVal .
Line 1798  they are used.</p> Line 1466  they are used.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc328">Structure definitions</a></h3>  <h3><a name="sectc328">Structure definitions</a></h3>
 <p>  
 The structure of an element type can be a simple base type or a constructed  <p>The structure of an element type can be a simple base type or a constructed
 type.</p>  type.</p>
 <p>  
 For constructed types, it is frequently the case that similar structures  <p>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
Line 1814  follows:</p> Line 1481  follows:</p>
 <pre>     Abstract           = Paragraph_sequence;  <pre>     Abstract           = Paragraph_sequence;
      Introduction       = Paragraph_sequence;       Introduction       = Paragraph_sequence;
      Section_contents   = Paragraph_sequence;</pre>       Section_contents   = Paragraph_sequence;</pre>
 <p>  
 The equals sign means ``has the same structure as''.</p>  <p>The equals sign means ``has the same structure as''.</p>
 <p>  
 If the element type defined is a simple base type, this is indicated by one of  <p>If the element type defined is a simple base type, this is indicated by one
 the keywords <tt>TEXT</tt>, <tt>GRAPHICS</tt>, <tt>SYMBOL</tt>, or  of 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>  
 In the case of an open choice, the type is indicated by the keyword  <p>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>  
 A unit represents one of the two following categories:</p>  <p>A unit represents one of the two following categories:</p>
 <ul>  <ul>
 <li>    <li>a base type: text, graphical element, symbol, picture,</li>
 a base type: text, graphical element, symbol, picture,    <li>an element whose type is chosen from among the types defined as units in
 </li>      the <tt>UNITS</tt> section of the document's structure schema.  It can
 <li>      also be chosen from among the types defined as <a
 an element whose type is chosen from among the types defined as units in the      href="#sectd3132">units</a> in the <a href="#sectc3212"><tt>UNITS</tt>
 <tt>UNITS</tt> section of the document's structure schema.  It can also be      section</a> of the structure schemas that defines the ancestors of the
 chosen from among the types defined as <a href="#sectd3132">units</a> in the      element to which the rule is applied.</li>
 <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.  
 </li>  
 </ul>  </ul>
 <p>  
 Before the creation of an element defined as a unit, Thot asks the user to  <p>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>  
 Thus, the contents of a paragraph can be specified as a sequence of units,  <p>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>  
 A schema object (keyword <tt>NATURE</tt>) represents an object defined by a  <p>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>  
 If the element type defined is a constructed type, the list, aggregate,  <p>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>  
 The local attribute definitions appear after the name of the element type  <p>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>   Definition = BaseType [ LocAttrSeq ] / Constr / Element .  <pre>   Definition = BaseType [ LocAttrSeq ] / Constr / Element .
Line 1877  attributes</a>.</p> Line 1541  attributes</a>.</p>
                 'PAIR' .</pre>                  'PAIR' .</pre>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3281">List</a></h4>  <h4><a name="sectd3281">List</a></h4>
 <p>  
 The list constructor permits the definition of an element type composed of a  <p>The list constructor permits the definition of an element type composed of
 list of elements, all of the same type.  A list definition begins with the  a 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
Line 1896  to specify any bound.</p> Line 1559  to specify any bound.</p>
      min     = Integer / '*' .       min     = Integer / '*' .
      max     = Integer / '*' .       max     = Integer / '*' .
      Integer = NUMBER .</pre>       Integer = NUMBER .</pre>
 <p>  
 Before the document is edited, Thot creates the minimum number of elements for  <p>Before the document is edited, Thot creates the minimum number of elements
 the list.  If no minimum was given, it creates a single element. If a maximum  for the list.  If no minimum was given, it creates a single element. If a
 number of elements is given and that number is attained, the editor refuses to  maximum number of elements is given and that number is attained, the editor
 create new elements for the list.</p>  refuses to create new elements for the list.</p>
 <blockquote class="example">  
 <p>  <blockquote class="example">
 <strong>Example:</strong></p>    <p><strong>Example:</strong></p>
 <p>  
 The following two instructions define the body of a document as a sequence of    <p>The following two instructions define the body of a document as a
 at least two chapters and the contents of a section as a sequence of    sequence of at least two chapters and the contents of a section as a
 paragraphs.  A single paragraph can be the entire contents of a section.</p>    sequence of paragraphs.  A single paragraph can be the entire contents of a
 <pre>Body             = LIST [2..*] OF (Chapter);    section.</p>
     <pre>Body             = LIST [2..*] OF (Chapter);
 Section_contents = LIST OF (Paragraph);</pre>  Section_contents = LIST OF (Paragraph);</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3282">Aggregate</a></h4>  <h4><a name="sectd3282">Aggregate</a></h4>
 <p>  
 The aggregate constructor is used to define an element type as a collection of  <p>The aggregate constructor is used to define an element type as a collection
 sub-elements, each having a fixed type.  The collection may be ordered or  of 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
Line 1926  aggregate, <tt>AGGREGATE</tt> for an uno Line 1589  aggregate, <tt>AGGREGATE</tt> for an uno
 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>  
 Before creating an aggregate, the Thot editor creates all the aggregate's  <p>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
 an unordered aggregate may be rearranged using operations of the Thot editor.  an unordered aggregate may be rearranged using operations of the Thot editor.
Line 1937  created by explicit request, possibly at Line 1600  created by explicit request, possibly at
 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>                 'BEGIN' DefOptSeq 'END'  <pre>                 'BEGIN' DefOptSeq 'END'
      DefOptSeq = DefOpt ';' &lt; DefOpt ';' > .       DefOptSeq = DefOpt ';' &lt; DefOpt ';' &gt; .
      DefOpt    = [ '?' ] DefWithAttr .</pre>       DefOpt    = [ '?' ] DefWithAttr .</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
 In a bilingual document, each paragraph has an English version and a French    French version.  In certain cases, the translator wants to add a marginal
 version.  In certain cases, the translator wants to add a marginal note, but    note, but this note is present in very few paragraphs.  Thus, it must not be
 this note is present in very few paragraphs.  Thus, it must not be created    created systematically for every paragraph.  A bilingual paragraph of this
 systematically for every paragraph.  A bilingual paragraph of this type is    type is declared:</p>
 declared:</p>    <pre>Bilingual_paragraph = BEGIN
 <pre>Bilingual_paragraph = BEGIN  
                       French_paragraph  = TEXT;                        French_paragraph  = TEXT;
                       English_paragraph = TEXT;                        English_paragraph = TEXT;
                       ? Note            = TEXT;                        ? Note            = TEXT;
Line 1957  declared:</p> Line 1620  declared:</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3283">Choice</a></h4>  <h4><a name="sectd3283">Choice</a></h4>
 <p>  
 The choice constructor permits the definition of an element type which is  <p>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>               'CASE' 'OF' DefSeq 'END'  <pre>               'CASE' 'OF' DefSeq 'END'
      DefSeq = DefWithAttr ';' &lt; DefWithAttr ';' > .</pre>       DefSeq = DefWithAttr ';' &lt; DefWithAttr ';' &gt; .</pre>
 <p>  
 Before the creation of an element defined as a choice, the Thot editor  <p>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>  
 The order of the type declarations is important.  It determines the order of  <p>The order of the type declarations is important.  It determines the order
 the list presented to the user before the creation of the element.  Also, when  of the list presented to the user before the creation of the element.  Also,
 a Choice element is being created automatically, the first type in the list is  when a Choice element is being created automatically, the first type in the
 used.  In fact, using the Thot editor, when an empty Choice element is  list 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>  
 The two special cases of the choice constructor, the <a  <p>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,
 structure is defined by another structure schema named Math, or a table, also    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>Paragraph = CASE OF
 <pre>Paragraph = CASE OF  
               Simple_text = TEXT;                Simple_text = TEXT;
               Formula     = Math;                Formula     = Math;
               Table_para  = Table;                Table_para  = Table;
Line 2001  paragraph:</p> Line 1663  paragraph:</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd3284">Reference</a></h4>  <h4><a name="sectd3284">Reference</a></h4>
 <p>  
 Like all elements in Thot, references are typed.  An element type defined as a  <p>Like all elements in Thot, references are typed.  An element type defined
 reference is a cross-reference to an element of some other given type. The  as a reference is a cross-reference to an element of some other given type.
 keyword <tt>REFERENCE</tt> is followed by the name of a type enclosed in  The 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>  
 When the designated element type is a <a href="#sectd3285">mark pair</a>, it  <p>When the designated element type is a <a href="#sectd3285">mark pair</a>,
 can be preceded by a <tt>FIRST</tt> or <tt>SECOND</tt> keyword.  These  it can be preceded by a <tt>FIRST</tt> or <tt>SECOND</tt> keyword.  These
 keywords indicate whether the reference points to the first or second mark of  keywords indicate whether the reference points to the first or second mark of
 the pair. If the reference points to a pair and neither of these two keywords  the pair. If the reference points to a pair and neither of these two keywords
 is 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>  
 There is an exception to the principle of typed references:  it is possible to  <p>There is an exception to the principle of typed references:  it is possible
 define a reference which designates an element of any type, which can either  to define a reference which designates an element of any type, which can
 be in the same document or another document. In this case, it suffices to put  either be in the same document or another document. In this case, it suffices
 the keyword <tt>ANY</tt> in the parentheses which indicate the referenced  to put the keyword <tt>ANY</tt> in the parentheses which indicate the
 element type.</p>  referenced element type.</p>
 <pre>             'REFERENCE' '(' RefType ')'  <pre>             'REFERENCE' '(' RefType ')'
    RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .</pre>     RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .</pre>
 <p>  
 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
Line 2035  complete object ( and not a part of an o Line 1696  complete object ( and not a part of an o
 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>  
 Before creating a cross-reference or an inclusion, the Thot editor asks the  <p>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
 If the types Note and Section are defined in the Article structure schema, it    schema, it is possible to define, in the same structure schema, a reference
 is possible to define, in the same structure schema, a reference to a note and    to a note and a reference to a section in this manner:</p>
 a reference to a section in this manner:</p>    <pre>Ref_note    = REFERENCE (Note);
 <pre>Ref_note    = REFERENCE (Note);  
 Ref_section = REFERENCE (Section);</pre>  Ref_section = REFERENCE (Section);</pre>
 <p>  
 It is also possible to define the generic structure of a collection of    <p>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
 and which possess an introduction which may include cross-references to    class and which possess an introduction which may include cross-references
 sections of the included articles.  In the Collection structure schema, the    to sections of the included articles.  In the Collection structure schema,
 definitions are:</p>    the definitions are:</p>
 <pre>Collection = BEGIN    <pre>Collection = BEGIN
              Collection_title = TEXT;               Collection_title = TEXT;
              Introduction = LIST OF (Elem = CASE OF               Introduction = LIST OF (Elem = CASE OF
                                            TEXT;                                             TEXT;
Line 2063  definitions are:</p> Line 1724  definitions are:</p>
              Body = LIST OF (Article INCLUDED);               Body = LIST OF (Article INCLUDED);
              END;               END;
 Ref_sect   = REFERENCE (Section (Article));</pre>  Ref_sect   = REFERENCE (Section (Article));</pre>
 <p>  
 Here we define a Folder document class which has a title and includes    <p>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>Folder   = BEGIN    <pre>Folder   = BEGIN
            Folder_title    = TEXT;             Folder_title    = TEXT;
            Folder_contents = LIST OF (Document);             Folder_contents = LIST OF (Document);
            END;             END;
Line 2076  Document = CASE OF Line 1737  Document = CASE OF
               Collection EXTERN;                Collection EXTERN;
               Folder EXTERN;                Folder EXTERN;
               END;</pre>                END;</pre>
 <p>  
 Under this definition, Folder represents either an aggregate which contains a    <p>Under this definition, Folder represents either an aggregate which
 folder title and the list of included documents or an included folder.  To    contains a folder title and the list of included documents or an included
 resolve this ambiguity, in the P language, the placement of a star character    folder.  To resolve this ambiguity, in the P language, the placement of a
 in front of the type name (here, Folder) indicates an included document.</p>    star character 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>  <h4><a name="sectd3285">Mark pairs</a></h4>
 <p>  
 Like other elements, mark pairs are typed.  The two marks of the pair have the  <p>Like other elements, mark pairs are typed.  The two marks of the pair have
 same type, but there exist two predefined subtypes which apply to all mark  the 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>  
 In the S language, a mark pair is noted simply by the <tt>PAIR</tt>  <p>In the S language, a mark pair is noted simply by the <tt>PAIR</tt>
 keyword.</p>  keyword.</p>
 <p>  
 In the Thot editor, marks are always moved or destroyed together.  The two  <p>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>  <h3><a name="sectc329">Imports</a></h3>
 <p>  
 Because of schema constructors, it is possible, before editing a document, to  <p>Because of schema constructors, it is possible, before editing a document,
 use classes defined by other structure schemas whenever they are needed. It is  to use classes defined by other structure schemas whenever they are needed. It
 also possible to assign specific document classes to certain element types. In  is also possible to assign specific document classes to certain element types.
 this case, these classes are simply designated by their name.  In fact, if a  In this case, these classes are simply designated by their name.  In fact, if
 type name is not defined in the structure schema, it is assumed that it  a 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
 If the types Math and Table don't appear in the left part of a structure rule    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>Formula    = Math;
 <pre>Formula    = Math;  
 Table_elem = Table;</pre>  Table_elem = Table;</pre>
 </blockquote>  </blockquote>
 </div>  </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>  
 These additions can be applied to the root rule of the primary schema,  <p>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>  
 Extension rules are separated from each other by a semicolon and each  <p>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>     ExtenRuleSeq = ExtensRule ';' &lt; ExtensRule ';' > .  <pre>     ExtenRuleSeq = ExtensRule ';' &lt; ExtensRule ';' &gt; .
      ExtensRule   = RootOrElem [ LocAttrSeq ]       ExtensRule   = RootOrElem [ LocAttrSeq ]
                     [ '+' '(' ExtensionSeq ')' ]                      [ '+' '(' ExtensionSeq ')' ]
                     [ '-' '(' RestrictSeq ')' ]                      [ '-' '(' RestrictSeq ')' ]
Line 2151  rule</a>, but the part which defines the Line 1810  rule</a>, but the part which defines the
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc3211">Associated elements</a></h3>  <h3><a name="sectc3211">Associated elements</a></h3>
 <p>  
 If associated elements are necessary, they must be declared in a specific  <p>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,
Line 2162  except in <tt>REFERENCE</tt> rules.</p> Line 1820  except in <tt>REFERENCE</tt> rules.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc3212">Units</a></h3>  <h3><a name="sectc3212">Units</a></h3>
 <p>  
 The <tt>UNITS</tt> section of the structure schema contains the declarations  <p>The <tt>UNITS</tt> section of the structure schema contains the
 of the element types which can be used in the external objects making up parts  declarations of the element types which can be used in the external objects
 of the document or in objects of the class defined by the schema.  As with  making up parts of the document or in objects of the class defined by the
 associated elements, these element types are defined just like other  schema.  As with associated elements, these element types are defined just
 structured element types. They can be used in the other element types of the  like other structured element types. They can be used in the other element
 schema, but they can also be used in any other rule of the schema.</p>  types of the schema, but they can also be used in any other rule of the
 <blockquote class="example">  schema.</p>
 <p>  
 <strong>Example:</strong></p>  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 If references to notes are declared as units:</p>  
 <pre>UNITS    <p>If references to notes are declared as units:</p>
     <pre>UNITS
    Ref_note = REFERENCE (Note);</pre>     Ref_note = REFERENCE (Note);</pre>
 <p>  
 then it is possible to use references to notes in a cell of a table, even when    <p>then it is possible to use references to notes in a cell of a table, even
 <tt>Table</tt> is an external structure schema.  The <tt>Table</tt> schema    when <tt>Table</tt> is an external structure schema.  The <tt>Table</tt>
 must declare a cell to be a sequence of units, which can then be base element    schema must declare a cell to be a sequence of units, which can then be base
 types (text, for example) or references to notes in the document.</p>    element types (text, for example) or references to notes in the
 <pre>Cell = LIST OF (UNITS);</pre>    document.</p>
     <pre>Cell = LIST OF (UNITS);</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc3213">Skeleton elements</a></h3>  <h3><a name="sectc3213">Skeleton elements</a></h3>
 <p>  
 When editing a document which contains or must contain external references to  <p>When editing a document which contains or must contain external references
 several other documents, it may be necessary to load a large number of  to 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
 the document while editing, or to access the source of included elements.  In  the document while editing, or to access the source of included elements.  In
 this case, the external documents are not modified and it is only necessary to  this case, the external documents are not modified and it is only necessary to
Line 2205  form has the advantage of being very com Line 1863  form has the advantage of being very com
 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>  
 Skeleton elements must be declared explicitly in the <tt>EXPORT</tt> section  <p>Skeleton elements must be declared explicitly in the <tt>EXPORT</tt>
 of the structure schema that defines them.  This section begins with the  section of the structure schema that defines them.  This section begins with
 keyword <tt>EXPORT</tt> followed by a comma-separated list of the element  the 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>  
 For each skeleton element type, the part of the contents which is loaded by  <p>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,
Line 2223  skeleton form not load the contents of a Line 1881  skeleton form not load the contents of a
 <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>                [ 'EXPORT' SkeletonSeq ]  <pre>                [ 'EXPORT' SkeletonSeq ]
   
      SkeletonSeq = SkelElem &lt; ',' SkelElem > ';' .       SkeletonSeq = SkelElem &lt; ',' SkelElem &gt; ';' .
      SkelElem    = ElemID [ 'WITH' Contents ] .       SkelElem    = ElemID [ 'WITH' Contents ] .
      Contents    = 'Nothing' / ElemID [ ExtStruct ] .</pre>       Contents    = 'Nothing' / ElemID [ ExtStruct ] .</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
 skeleton form in order to make it easier to create external references to them    them from other documents.  When loading an article in its skeleton form,
 from other documents.  When loading an article in its skeleton form, all of    all of these element types will be loaded except for paragraphs, but only
 these element types will be loaded except for paragraphs, but only the article    the article title will be loaded in its entirety.  For figures, the caption
 title will be loaded in its entirety.  For figures, the caption will be    will be loaded, while for sections, the title will be loaded, and for
 loaded, while for sections, the title will be loaded, and for bibliographic    bibliographic entries, only the title that they contain will be loaded. 
 entries, only the title that they contain will be loaded.  Note that    Note that bibliographic elements are defined in another structure schema,
 bibliographic elements are defined in another structure schema, RefBib.  To    RefBib.  To produce this result, the following declarations should be placed
 produce this result, the following declarations should be placed in the    in the Article structure schema:</p>
 Article structure schema:</p>    <pre>EXPORT
 <pre>EXPORT  
    Article_title,     Article_title,
    Figure With Caption,     Figure With Caption,
    Section With Section_title,     Section With Section_title,
Line 2251  Article structure schema:</p> Line 1909  Article structure schema:</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc3214">Exceptions</a></h3>  <h3><a name="sectc3214">Exceptions</a></h3>
 <p>  
 The behavior of the Thot editor and the actions that it performs are  <p>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>  
 Exceptions only inhibit or modify certain standard actions, but they can be  <p>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>  
 Each structure schema can contain a section defining exceptions.  It begins  <p>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
Line 2275  pair</a>, and only in this case, the typ Line 1932  pair</a>, and only in this case, the typ
 <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>  
 When placed in an <a href="#sectc322">extension schema</a>, the keyword  <p>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>                  [ 'EXCEPT' ExceptSeq ]  <pre>                  [ 'EXCEPT' ExceptSeq ]
   
      ExceptSeq     = Except ';' &lt; Except ';' > .       ExceptSeq     = Except ';' &lt; Except ';' &gt; .
      Except        = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr       Except        = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr
                      ':' ExcValSeq .                       ':' ExcValSeq .
      ExcTypeOrAttr = ElemID / AttrID .       ExcTypeOrAttr = ElemID / AttrID .
      ExcValSeq     = ExcValue &lt; ',' ExcValue > .       ExcValSeq     = ExcValue &lt; ',' ExcValue &gt; .
      ExcValue      ='NoCut' / 'NoCreate' / 'NoHMove' /        ExcValue      ='NoCut' / 'NoCreate' / 'NoHMove' / 
                     'NoVMove' / 'NoHResize' / 'NoVResize' /                      'NoVMove' / 'NoHResize' / 'NoVResize' /
                     'NoMove' / 'NoResize' / 'MoveResize' /                      'NoMove' / 'NoResize' / 'MoveResize' /
Line 2304  exceptions are indicated by a name.  The Line 1961  exceptions are indicated by a name.  The
                     'IsRow' / 'IsColHead' / 'IsCell' /                      'IsRow' / 'IsColHead' / 'IsCell' /
                     'NewPercentWidth' / 'ColRef' / 'ColSpan' /                      'NewPercentWidth' / 'ColRef' / 'ColSpan' /
                     'RowSpan' / 'SaveDocument' / 'Shadow' .</pre>                      'RowSpan' / 'SaveDocument' / 'Shadow' .</pre>
 <p>  
 The following are the available exceptions:</p>  <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
 This exception can only be applied to element types.  Elements of a type to        type to which this exception is applied cannot be deleted by the
 which this exception is applied cannot be deleted by the editor.      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
 <dd>        type to which this exception is applied cannot be created by ordinary
 This exception can only be applied to element types.  Elements of a type to        commands for creating new elements.  These elements are usually created
 which this exception is applied cannot be created by ordinary commands for        by special actions associated with other exceptions.</dd>
 creating new elements.  These elements are usually created by special actions    <dt><tt>NoHMove</tt></dt>
 associated with other exceptions.      <dd>This exception can only be applied to element types.  Elements of a
 </dd>        type to which this exception is applied cannot be moved horizontally
 <dt><tt>NoHMove</tt></dt>        with the mouse. Their children elements cannot be moved either.</dd>
 <dd>    <dt><tt>NoVMove</tt></dt>
 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
 which this exception is applied cannot be moved horizontally with the mouse.        type to which this exception is applied cannot be moved vertically with
 Their children elements cannot be moved either.        the mouse. Their children elements cannot be moved either.</dd>
 </dd>    <dt><tt>NoMove</tt></dt>
 <dt><tt>NoVMove</tt></dt>      <dd>This exception can only be applied to element types.  Elements of a
 <dd>        type to which this exception is applied cannot be moved in any direction
 This exception can only be applied to element types.  Elements of a type to        with the mouse.  Their children elements cannot be moved either.</dd>
 which this exception is applied cannot be moved vertically with the mouse.    <dt><tt>NoHResize</tt></dt>
 Their children elements cannot be moved either.      <dd>This exception can only be applied to element types.  Elements of a
 </dd>        type to which this exception is applied cannot be resized horizontally
 <dt><tt>NoMove</tt></dt>        with the mouse. Their children elements cannot be resized either.</dd>
 <dd>    <dt><tt>NoVResize</tt></dt>
 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
 which this exception is applied cannot be moved in any direction with the        type to which this exception is applied cannot be resized vertically
 mouse.  Their children elements cannot be moved either.        with the mouse. Their children elements cannot be resized either.</dd>
 </dd>    <dt><tt>NoResize</tt></dt>
 <dt><tt>NoHResize</tt></dt>      <dd>This exception can only be applied to element types.  Elements of a
 <dd>        type to which this exception is applied cannot be resized in any
 This exception can only be applied to element types.  Elements of a type to        direction with the mouse.  Their children elements cannot be resized
 which this exception is applied cannot be resized horizontally with the mouse.        either.</dd>
 Their children elements cannot be resized either.    <dt><tt>MoveResize</tt></dt>
 </dd>      <dd>This exception can only be applied to element types.  Elements of a
 <dt><tt>NoVResize</tt></dt>        type to which this exception is applied can be moved and resized in any
 <dd>        direction with the mouse, even if one of their ancestor element has an
 This exception can only be applied to element types.  Elements of a type to        exception that prevents moving or resizing.  Their children elements can
 which this exception is applied cannot be resized vertically with the mouse.        also be resized or moved.</dd>
 Their children elements cannot be resized either.    <dt><tt>NewWidth</tt></dt>
 </dd>      <dd>This exception can only be applied to numeric attributes.  If the
 <dt><tt>NoResize</tt></dt>        width of an element which has this attribute is modified with the mouse,
 <dd>        the value of the new width will be assigned to the attribute.</dd>
 This exception can only be applied to element types.  Elements of a type to    <dt><tt>NewHeight</tt></dt>
 which this exception is applied cannot be resized in any direction with the      <dd>This exception can only be applied to numeric attributes.  If the
 mouse.  Their children elements cannot be resized either.        height of an element which has this attribute is modified with the
 </dd>        mouse, the value of the new height will be assigned to the
 <dt><tt>MoveResize</tt></dt>      attribute.</dd>
 <dd>    <dt><tt>NewHPos</tt></dt>
 This exception can only be applied to element types.  Elements of a type to      <dd>This exception can only be applied to numeric attributes.  If the
 which this exception is applied can be moved and resized in any direction with        horizontal position of an element which has this attribute is modified
 the mouse, even if one of their ancestor element has an exception that        with the mouse, the value of the new horizontal position will be
 prevents moving or resizing.  Their children elements can also be resized or        assigned to the attribute.</dd>
 moved.    <dt><tt>NewVPos</tt></dt>
 </dd>      <dd>This exception can only be applied to numeric attributes.  If the
 <dt><tt>NewWidth</tt></dt>        vertical position of an element which has this attribute is modified
 <dd>        with the mouse, the value of the new vertical position will be assigned
 This exception can only be applied to numeric attributes.  If the width of an        to the attribute.</dd>
 element which has this attribute is modified with the mouse, the value of the    <dt><tt>Invisible</tt></dt>
 new width will be assigned to the attribute.      <dd>This exception can only be applied to attributes, but can be applied
 </dd>        to all attribute types.  It indicates that the attribute must not be
 <dt><tt>NewHeight</tt></dt>        seen by the user and that its value must not be changed directly.  This
 <dd>        exception is usually used when another exception manipulates the value
 This exception can only be applied to numeric attributes.  If the height of an        of an attribute.</dd>
 element which has this attribute is modified with the mouse, the value of the    <dt><tt>NoSelect</tt></dt>
 new height will be assigned to the attribute.      <dd>This exception can only be applied to element types.  Elements of a
 </dd>        type to which this exception is applied cannot  be selected directly
 <dt><tt>NewHPos</tt></dt>        with the mouse, but they can be selected by other methods provided by
 <dd>        the editor.</dd>
 This exception can only be applied to numeric attributes.  If the horizontal    <dt>NoSpellCheck</dt>
 position of an element which has this attribute is modified with the mouse,      <dd>This exception can only be applied to element types.  Elements of a
 the value of the new horizontal position will be assigned to the attribute.        type to which this exception is applied are not taken into account by
 </dd>        the spell checker.</dd>
 <dt><tt>NewVPos</tt></dt>    <dt><tt>Hidden</tt></dt>
 <dd>      <dd>This exception can only be applied to element types.  It indicates
 This exception can only be applied to numeric attributes.  If the vertical        that elements of this type, although present in the document's
 position of an element which has this attribute is modified with the mouse,        structure, must not be shown to the user of the editor.  In particular,
 the value of the new vertical position will be assigned to the attribute.        the creation menus must not propose this type and the selection message
 </dd>        must not pick it.</dd>
 <dt><tt>Invisible</tt></dt>    <dt><tt>ActiveRef</tt></dt>
 <dd>      <dd>This exception can only be applied to attributes of the reference
 This exception can only be applied to attributes, but can be applied to all        type.  It indicates that when the user of the editor makes a double
 attribute types.  It indicates that the attribute must not be seen by the user        click on an element which possesses a reference attribute having this
 and that its value must not be changed directly.  This exception is usually        exception, the element designated by the reference attribute will be
 used when another exception manipulates the value of an attribute.        selected.</dd>
 </dd>    <dt><tt>ImportLine</tt></dt>
 <dt><tt>NoSelect</tt></dt>      <dd>This exception can only be applied to element types.  It indicates
 <dd>        that elements of this type should receive the content of imported text
 This exception can only be applied to element types.  Elements of a type to        files.  An element is created for each line of the imported file.  A
 which this exception is applied cannot  be selected directly with the mouse,        structure schema cannot contain several exceptions <tt>ImportLine</tt>
 but they can be selected by other methods provided by the editor.        and, if it contains one, it should not contain any exception
 </dd>        <tt>ImportParagraph</tt>.</dd>
 <dt>NoSpellCheck</dt>    <dt><tt>ImportParagraph</tt></dt>
 <dd>      <dd>This exception can only be applied to element types.  It indicates
 This exception can only be applied to element types.  Elements of a type to        that elements of this type should receive the content of imported text
 which this exception is applied are not taken into account by the spell        files.  An element is created for each paragraph of the imported file. 
 checker.        A paragraph is a sequence of lines without any empty line.  A structure
 </dd>        schema cannot contain several exceptions <tt>ImportParagraph</tt> and,
 <dt><tt>Hidden</tt></dt>        if it contains one, it should not contain any exception
 <dd>        <tt>ImportLine</tt>.</dd>
 This exception can only be applied to element types.  It indicates that    <dt><tt>NoPaginate</tt></dt>
 elements of this type, although present in the document's structure, must not      <dd>This exception can only be applied to the root element, i.e. the name
 be shown to the user of the editor.  In particular, the creation menus must        that appear after the keyword <tt>STRUCTURE</tt> at the beginning of the
 not propose this type and the selection message must not pick it.        structure schema.  It indicates that the editor should not allow the
 </dd>        user to paginate documents of that type.</dd>
 <dt><tt>ActiveRef</tt></dt>    <dt><tt>ParagraphBreak</tt></dt>
 <dd>      <dd>This exception can only be applied to element types.  When the caret
 This exception can only be applied to attributes of the reference type.  It        is within an element of a type to which this exception is applied, it is
 indicates that when the user of the editor makes a double click on an element        that element that will be split when the user hits the Return key.</dd>
 which possesses a reference attribute having this exception, the element    <dt><tt>ReturnCreateNL</tt></dt>
 designated by the reference attribute will be selected.      <dd>This exception can only be applied to element types.  When the caret
 </dd>        is within an element of a type to which this exception is applied, the
 <dt><tt>ImportLine</tt></dt>        Return key simply inserts a New line character (code \212) at the
 <dd>        current position. The Return key does not create a new element; it does
 This exception can only be applied to element types.  It indicates that        not split the current element either.</dd>
 elements of this type should receive the content of imported text files.  An    <dt><tt>ReturnCreateWithin</tt></dt>
 element is created for each line of the imported file.  A structure schema      <dd>This exception can only be applied to element types.  When the caret
 cannot contain several exceptions <tt>ImportLine</tt> and, if it contains one,        is within an element of a type to which this exception is applied, the
 it should not contain any exception <tt>ImportParagraph</tt>.        Return key will create a new element within that element, not a sibling
 </dd>        after that element.</dd>
 <dt><tt>ImportParagraph</tt></dt>    <dt><tt>HighlightChildren</tt></dt>
 <dd>      <dd>This exception can only be applied to element types.  Elements of a
 This exception can only be applied to element types.  It indicates that        type to which this exception is applied are not highlighted themselves
 elements of this type should receive the content of imported text files.  An        when they are selected, but all their children are highlighted
 element is created for each paragraph of the imported file.  A paragraph is a      instead.</dd>
 sequence of lines without any empty line.  A structure schema cannot contain    <dt><tt>ExtendedSelection</tt></dt>
 several exceptions <tt>ImportParagraph</tt> and, if it contains one, it should      <dd>This exception can only be applied to element types.  The selection
 not contain any exception <tt>ImportLine</tt>.        extension command (middle button of the mouse) only add the clicked
 </dd>        element (if it has that exception) to the current selection, without
 <dt><tt>NoPaginate</tt></dt>        selecting other elements between the current selection and the clicked
 <dd>        element.</dd>
 This exception can only be applied to the root element, i.e. the name that    <dt>IsDraw, IsTable, IsColHead, IsRow, IsCell</dt>
 appear after the keyword <tt>STRUCTURE</tt> at the beginning of the structure      <dd>These exceptions can only be applied to element types.  Elements of a
 schema.  It indicates that the editor should not allow the user to paginate        type to which these exceptions are applied are identified as Draws,
 documents of that type.        Tables, Colheads, Rows or Cells and specific processing are applied to
 </dd>        them.</dd>
 <dt><tt>ParagraphBreak</tt></dt>    <dt>ColRef</dt>
 <dd>      <dd>This exception can only be applied to attributes of the reference
 This exception can only be applied to element types.  When the caret is within        type. It indicates that this attribute refers to the column head (see
 an element of a type to which this exception is applied, it is that element        exception IsColHead) which the element belongs to.</dd>
 that will be split when the user hits the Return key.    <dt>ColSpan, RowSpan</dt>
 </dd>      <dd>These exceptions can only be applied to numeric attributes of cells. 
 <dt><tt>ReturnCreateNL</tt></dt>        They indicate that attribute values give how many columns or rows the
 <dd>        element spans.</dd>
 This exception can only be applied to element types.  When the caret is within    <dt>Shadow</dt>
 an element of a type to which this exception is applied, the Return key simply      <dd>This exception can only be applied to element types.  Text of elements
 inserts a New line character (code \212) at the current position. The Return        of a type to which this exception is applied are displayed and printed
 key does not create a new element; it does not split the current element        as a set of stars ('*').</dd>
 either.  
 </dd>  
 <dt><tt>ReturnCreateWithin</tt></dt>  
 <dd>  
 This exception can only be applied to element types.  When the caret is within  
 an element of a type to which this exception is applied, the Return key will  
 create a new element within that element, not a sibling after that element.  
 </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  
 selected, but all their children are highlighted instead.  
 </dd>  
 <dt><tt>ExtendedSelection</tt></dt>  
 <dd>  
 This exception can only be applied to element types.  The selection extension  
 command (middle button of the mouse) only add the clicked element (if it has  
 that exception) to the current selection, without selecting other elements  
 between the current selection and the clicked element.  
 </dd>  
 <dt>IsDraw, IsTable, IsColHead, IsRow, IsCell</dt>  
 <dd>  
 These exceptions can only be applied to element types.  Elements of a type to  
 which these exceptions are applied are identified as Draws, Tables, Colheads,  
 Rows or Cells and specific processing are applied to them.  
 </dd>  
 <dt>ColRef</dt>  
 <dd>  
 This exception can only be applied to attributes of the reference type. It  
 indicates that this attribute refers to the column head (see exception  
 IsColHead) which the element belongs to.  
 </dd>  
 <dt>ColSpan, RowSpan</dt>  
 <dd>  
 These exceptions can only be applied to numeric attributes of cells.  They  
 indicate that attribute values give how many columns or rows the element  
 spans.  
 </dd>  
 <dt>Shadow</dt>  
 <dd>  
 This exception can only be applied to element types.  Text of elements of a  
 type to which this exception is applied are displayed and printed as a set of  
 stars ('*').  
 </dd>  
 </dl>  </dl>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <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 numeric
 Graphic_object element type with the associated Height and Weight numeric    attributes.  Suppose that we want documents of this class to have the
 attributes.  Suppose that we want documents of this class to have the    following qualities:</p>
 following qualities:</p>    <ul>
 <ul>      <li>Whenever the width or height of an object is changed using the mouse,
 <li>        the new values are stored in the object's Width and Height
 Whenever the width or height of an object is changed using the mouse, the new      attributes.</li>
 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
 </li>        Height attributes via the Attributes menu of the Thot editor.</li>
 <li>    </ul>
 The user should not be able to change the values of the Width and Height  
 attributes via the Attributes menu of the Thot editor.    <p>The following exceptions will produce this effect.</p>
 </li>    <pre>STRUCT
 </ul>  
 <p>  
 The following exceptions will produce this effect.</p>  
 <pre>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;
Line 2535  EXCEPT Line 2144  EXCEPT
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb33">Some examples</a></h2>  <h2><a name="sectb33">Some examples</a></h2>
 <p>  
 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  
 defines a class of documents, the other defines a class of objects.</p>  
   
 <div class="subsection">  <p>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 defines a class of documents, the other defines a class of objects.</p>
   
   <div class="subsection">
 <h3><a name="sectc331">A class of documents: articles</a></h3>  <h3><a name="sectc331">A class of documents: articles</a></h3>
 <p>  
 This example shows a possible structure for articles published in a journal.  <p>This example shows a possible structure for articles published in a
 Text between braces is comments.</p>  journal. Text between braces is comments.</p>
 <pre>STRUCTURE Article;  { This schema defines the Article class }  <pre>STRUCTURE Article;  { This schema defines the Article class }
 DEFPRES ArticleP;   { The default presentation schema is  DEFPRES ArticleP;   { The default presentation schema is
                       ArticleP }                        ArticleP }
Line 2658  EXPORT     { Skeleton elements } Line 2265  EXPORT     { Skeleton elements }
    Section With Section_title;     Section With Section_title;
   
 END           { End of the structure schema }</pre>  END           { End of the structure schema }</pre>
 <p>  
 This schema is very complete since it defines both paragraphs and  <p>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>  
 Generally, an article doesn't contain appendices, but it is possible to add  <p>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>  
 The Figure, Biblio_citation and Note elements are associated elements. Thus,  <p>The Figure, Biblio_citation and Note elements are associated elements.
 they are only used in <tt>REFERENCE</tt> statements.</p>  Thus, they are only used in <tt>REFERENCE</tt> statements.</p>
 <p>  
 Various types of cross-references can be put in paragraphs.  They can also be  <p>Various types of cross-references can be put in paragraphs.  They can also
 placed the objects which are part of the article, since the cross-references  be placed the objects which are part of the article, since the
 are defined as units (<tt>UNITS</tt>).</p>  cross-references are defined as units (<tt>UNITS</tt>).</p>
 <p>  
 There is a single restriction to prevent the creation of Ref_note elements  <p>There is a single restriction to prevent the creation of Ref_note elements
 within notes.</p>  within notes.</p>
 <p>  
 It is worth noting that the S language permits the definition of recursive  <p>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
Line 2688  elements, since a paragraph can contain Line 2295  elements, since a paragraph can contain
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc332">A class of objects: mathematical formulas</a></h3>  <h3><a name="sectc332">A class of objects: mathematical formulas</a></h3>
 <p>  
 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
 documents.  This class represents mathematical formulas  with a rather simple  Article documents.  This class represents mathematical formulas  with a rather
 structure, but sufficient to produce a correct rendition on the screen or  simple structure, but sufficient to produce a correct rendition on the screen
 printer.  To support more elaborate operations (formal or numeric  or 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>STRUCTURE Formula;  <pre>STRUCTURE Formula;
Line 2742  STRUCT Line 2348  STRUCT
                         END;                          END;
                   END;       { End of Choice Constructor }                    END;       { End of Choice Constructor }
 END                          { End of Structure Schema }</pre>  END                          { End of Structure Schema }</pre>
 <p>  
 This schema defines a single global attribute which allows functions and  <p>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>  
 A formula's structure is that of a mathematical expression, which is itself a  <p>A formula's structure is that of a mathematical expression, which is itself
 sequence of mathematical constructions.  A mathematical construction can be  a 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>  
 In most cases, the roots which appear in the formulas are square roots and  <p>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>  
 An integral is formed by an integration symbol, chosen by the user (simple  <p>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
Line 2769  etc.</p> Line 2375  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>  <h2><a name="sectb41">Document presentation</a></h2>
 <p>  
 Because of the model adopted for Thot, the presentation of documents is  <p>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
Line 2790  on paper.  Like logical structure, docum Line 2393  on paper.  Like logical structure, docum
 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>  <h3><a name="sectc411">Two levels of presentation</a></h3>
 <p>  
 The link between structure and presentation is clear: the logical organization  <p>The link between structure and presentation is clear: the logical
 of a document is used to carry out its presentation, since the purpose of the  organization of a document is used to carry out its presentation, since the
 presentation is to make evident the organization of the document.  But the  purpose of the presentation is to make evident the organization of the
 presentation is equally dependent on the device used to render the document.  document.  But the presentation is equally dependent on the device used to
 Certain presentation effects, notably changes of font or character set, cannot  render the document. Certain presentation effects, notably changes of font or
 be performed on all printers or on all screens.  This is why Thot uses a  character set, cannot be performed on all printers or on all screens.  This is
 two-level approach, where the presentation is first described in abstract  why Thot uses a two-level approach, where the presentation is first described
 terms, without taking into account each particular device, and then the  in abstract terms, without taking into account each particular device, and
 presentation is realized within the constraints of a given device.</p>  then the presentation is realized within the constraints of a given
 <p>  device.</p>
 Thus, presentation is only described as a function of the structure of the  
   <p>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>  
 A presentation description also defines a <em>generic presentation</em>, since  <p>A presentation description also defines a <em>generic presentation</em>,
 it describes the appearance of a class of documents or objects. This generic  since it describes the appearance of a class of documents or objects. This
 presentation must also be applied to document and object instances, each  generic presentation must also be applied to document and object instances,
 conforming to its generic logical structure, but with all the allowances that  each conforming to its generic logical structure, but with all the allowances
 were called to mind above: missing elements, constructed elements with other  that were called to mind above: missing elements, constructed elements with
 logical structures, etc.</p>  other logical structures, etc.</p>
 <p>  
 In order to preserve the homogeneity between documents and objects,  <p>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
 figure or mathematical formula.  This unity of presentation description tools  figure or mathematical formula.  This unity of presentation description tools
Line 2827  justification, font changes, etc.</p> Line 2430  justification, font changes, etc.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc412">Boxes</a></h3>  <h3><a name="sectc412">Boxes</a></h3>
 <p>  
 To assure the homogeneity of tools, all presentation in Thot, for documents as  <p>To assure the homogeneity of tools, all presentation in Thot, for documents
 well as for the objects which they contain, is based on the notion of the  as 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>  
 Corresponding to each element of the document is a box,  which is the  <p>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 <a  paper);  the outline of this rectangle is not visible, except when a <a
 href="#sectc4230a"><tt>ShowBox</tt> rule</a> applies to the element. The sides  href="#sectc4230a"><tt>ShowBox</tt> rule</a> applies to the element. The sides
 of the box are parallel to the sides of the screen or the sheet of paper.  By  of the box are parallel to the sides of the screen or the sheet of paper.  By
 way of example, a box is associated with a character string, a line of text, a  way 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>  
 Whatever element it corresponds to, each box possesses four sides and four  <p>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>      <dd>the upper side,</dd>
 the upper side,    <dt><tt>Bottom</tt></dt>
 </dd>      <dd>the lower side,</dd>
 <dt><tt>Bottom</tt></dt>    <dt><tt>Left</tt></dt>
 <dd>      <dd>the left side,</dd>
 the lower side,    <dt><tt>Right</tt></dt>
 </dd>      <dd>the right side,</dd>
 <dt><tt>Left</tt></dt>    <dt><tt>VMiddle</tt></dt>
 <dd>      <dd>the vertical axis passing through the center of the box,</dd>
 the left side,    <dt><tt>HMiddle</tt></dt>
 </dd>      <dd>the horizontal axis passing through the center of the box,</dd>
 <dt><tt>Right</tt></dt>    <dt><tt>VRef</tt></dt>
 <dd>      <dd>the vertical reference axis,</dd>
 the right side,    <dt><tt>HRef</tt></dt>
 </dd>      <dd>the horizontal reference axis.</dd>
 <dt><tt>VMiddle</tt></dt>  
 <dd>  
 the vertical axis passing through the center of the box,  
 </dd>  
 <dt><tt>HMiddle</tt></dt>  
 <dd>  
 the horizontal axis passing through the center of the box,  
 </dd>  
 <dt><tt>VRef</tt></dt>  
 <dd>  
 the vertical reference axis,  
 </dd>  
 <dt><tt>HRef</tt></dt>  
 <dd>  
 the horizontal reference axis.  
 </dd>  
 </dl>  </dl>
   
 <div class="figure">  <div class="figure">
 <hr>  <hr>
   
 <pre>        Left   VRef  VMiddle        Right  <pre>        Left   VRef  VMiddle        Right
                  :      :                   :      :
     Top   -----------------------------      Top   -----------------------------
Line 2898  HMiddle ..|...........................|. Line 2483  HMiddle ..|...........................|.
           |      :      :             |            |      :      :             |
   Bottom  -----------------------------    Bottom  -----------------------------
                  :      :</pre>                   :      :</pre>
 <p align="center">  
 <em><a name="boxes">The sides and axes of boxes</a><em></em></em></p>  
 <hr>  
   
   <p align="center"><em><a name="boxes">The sides and axes of
   boxes</a><em></em></em></p>
   <hr>
 </div>  </div>
 <p>  
 The principal role of boxes is to set the extent and position of the images of  <p>The principal role of boxes is to set the extent and position of the images
 the different elements of a document with respect to each other on the  of 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>  
 There are three types of boxes:</p>  <p>There are three types of boxes:</p>
 <ul>  <ul>
 <li>    <li>boxes corresponding to structural elements of the document,</li>
 boxes corresponding to structural elements of the document,    <li>presentation boxes,</li>
 </li>    <li>page layout boxes.</li>
 <li>  
 presentation boxes,  
 </li>  
 <li>  
 page layout boxes.  
 </li>  
 </ul>  </ul>
 <p>  
 <strong>Boxes corresponding to structural elements of the document</strong>  <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 <a  the element to which it corresponds (there is an exception: see <a
Line 2935  On the other hand, there are no predefin Line 2514  On the other hand, there are no predefin
 the included boxes.  If they are at the same level, they can overlap, be  the included boxes.  If they are at the same level, they can overlap, be
 contiguous, or be disjoint. The rules expressed in the generic presentation  contiguous, or be disjoint. The rules expressed in the generic presentation
 specify their relative positions.</p>  specify their relative positions.</p>
 <p>  
 <strong>Presentation boxes</strong> represent elements which are not found in  <p><strong>Presentation boxes</strong> represent elements which are not found
 the logical structure of the document but which are added to meet the needs of  in the logical structure of the document but which are added to meet the needs
 presentation.  These boxes are linked to the elements of the logical structure  of presentation.  These boxes are linked to the elements of the logical
 that are best suited to bringing them out. For example, they are used to add  structure that are best suited to bringing them out. For example, they are
 the character string ``Summary:'' before the summary in the presentation of a  used to add the character string ``Summary:'' before the summary in the
 report or to represent the fraction bar in a formula, or also to make the  presentation of a report or to represent the fraction bar in a formula, or
 title of a field in a form appear.  These elements have no role in the logical  also to make the title of a field in a form appear.  These elements have no
 structure of the document: the presence of a Summary element in the document  role in the logical structure of the document: the presence of a Summary
 does not require the creation of another structural object to hold the word  element in the document does not require the creation of another structural
 ``Summary''. Similarly, if a Fraction element contains both a Numerator  object to hold the word ``Summary''. Similarly, if a Fraction element contains
 element and a Denominator element, the fraction bar has no purpose  both a Numerator element and a Denominator element, the fraction bar has no
 structurally.  On the other hand, these elements of the presentation are  purpose structurally.  On the other hand, these elements of the presentation
 important for the reader of the reproduced document or for the user of an  are important for the reader of the reproduced document or for the user of an
 editor.  This is why they must appear in the document's image.  It is the  editor.  This is why they must appear in the document's image.  It is the
 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>  
 <strong>Page layout boxes</strong> are boxes created implicitly by the page  <p><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,
Line 2964  height and width of the window on the sc Line 2543  height and width of the window on the sc
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc413">Views and visibility</a></h3>  <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  <p>One of the operations that one might wish to perform on a document is to
 it is different ways.  For this reason, it is possible to define several  view 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
Line 2978  document.  Such a view could be called a Line 2556  document.  Such a view could be called a
 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>  
 Views, like presentation, are based on the generic logical structure. Each  <p>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
Line 2991  hierarchical level could be used to make Line 2569  hierarchical level could be used to make
 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>  
 Because views are especially useful for producing a synthetic image of the  <p>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>  
 <a name="views">Views</a> are also used, when editing documents, to display  <p><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
Line 3009  printed.</p> Line 2587  printed.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc414">Pages</a></h3>  <h3><a name="sectc414">Pages</a></h3>
 <p>  
 Presentation schemas can be defined which display the document as a long  <p>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
 would hinder composing and reading the document on a screen.  In this case,  would hinder composing and reading the document on a screen.  In this case,
Line 3021  page footer, are presented in a separate Line 2598  page footer, are presented in a separate
 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>  
 The P language permits the specification of the dimensions of pages as well as  <p>The P language permits the specification of the dimensions of pages as well
 their composition.  It is possible to generate running titles, page numbers,  as their composition.  It is possible to generate running titles, page
 zones at the bottom of the page for notes, etc.  The editor follows this model  numbers, zones at the bottom of the page for notes, etc.  The editor follows
 and inserts page break marks in the document which are used during printing,  this model and inserts page break marks in the document which are used during
 insuring that the pages on paper are the same as on the screen.</p>  printing, insuring that the pages on paper are the same as on the screen.</p>
 <p>  
 Once a document has been edited with a presentation schema defining pages, it  <p>Once a document has been edited with a presentation schema defining pages,
 contains page marks.  But it is always possible to edit the document using a  it contains page marks.  But it is always possible to edit the document using
 schema without pages.  In this case, the page marks are simply ignored by the  a schema without pages.  In this case, the page marks are simply ignored by
 editor.  They are considered again as soon as a schema with pages is used.  the 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>  
 Thot treats the page break, rather than the page itself, as a box. This page  <p>Thot treats the page break, rather than the page itself, as a box. This
 break box contains all the elements of one page's footer, a rule marking the  page break box contains all the elements of one page's footer, a rule marking
 edge of this page, and all the elements of the next page's header.  The  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
Line 3044  presentation.</p> Line 2621  presentation.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc415">Numbering</a></h3>  <h3><a name="sectc415">Numbering</a></h3>
 <p>  
 Many elements are numbered in documents: pages, chapters, sections, formulas,  <p>Many elements are numbered in documents: pages, chapters, sections,
 theorems, notes, figures, bibliographic references, exercises, examples,  formulas, theorems, notes, figures, bibliographic references, exercises,
 lemmas, etc.  Because Thot has a notion of logical structure, all of these  examples, lemmas, etc.  Because Thot has a notion of logical structure, all of
 numbers (with the exception of pages) are redundant with information implicit  these numbers (with the exception of pages) are redundant with information
 in the logical structure of the document.  Such numbers are simply a way to  implicit in the logical structure of the document.  Such numbers are simply a
 make the structure of the document more visible.  So, they are part of the  way to make the structure of the document more visible.  So, they are part of
 document's presentation and are calculated by the editor from the logical  the 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>  
 If the structure schema defines the body of a document as a sequence of at  <p>If the structure schema defines the body of a document as a sequence of at
 least two chapters:</p>  least two chapters:</p>
 <pre>Body = LIST [2..*] OF Chapter;</pre>  <pre>Body = LIST [2..*] OF Chapter;</pre>
 <p>  
 the sequence defined by the list constructor is ordered and each chapter can  <p>the sequence defined by the list constructor is ordered and each chapter
 be assigned a number based on its rank in the Body list.  Therefore, all  can be assigned a number based on its rank in the Body list.  Therefore, all
 elements contained in lists a the structure of a document can be numbered, but  elements contained in lists a the structure of a document can be numbered, but
 they are not the only ones.  The tree structure induced by the aggregate,  they are not the only ones.  The tree structure induced by the aggregate,
 list, and choice constructors (excluding references) defines a total order on  list, and choice constructors (excluding references) defines a total order on
Line 3075  a chapter in the same sequence of number Line 2651  a chapter in the same sequence of number
 same list constructor and appear at different levels of the document's tree.  same list constructor and appear at different levels of the document's tree.
 By changing the filter, they can be numbered separately: one sequence of  By changing the filter, they can be numbered separately: one sequence of
 numbers for theorems, another for the lemmas.</p>  numbers for theorems, another for the lemmas.</p>
 <p>  
 Associated elements pose a special problem, since they are not part of the  <p>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
 frequently numbered, precisely because the number is an effective way to  frequently numbered, precisely because the number is an effective way to
Line 3084  visualize the reference.  In order to re Line 2660  visualize the reference.  In order to re
 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>  
 Since they are calculated from the document's logical structure and only for  <p>Since they are calculated from the document's logical structure and only
 the needs of the presentation, numbers are presentation elements, described by  for the needs of the presentation, numbers are presentation elements,
 presentation boxes, just like the fraction bar or the word ``Summary''.  described by presentation boxes, just like the fraction bar or the word
 Nevertheless, numbers differ from these other boxes because their content  ``Summary''. Nevertheless, numbers differ from these other boxes because their
 varies from instance to instance, even though they are of the same type,  content varies from instance to instance, even though they are of the same
 whereas all fraction bars are horizontal lines and the same word ``Summary''  type, whereas all fraction bars are horizontal lines and the same word
 appears at the head of every document's summary.</p>  ``Summary'' 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>  <h3><a name="sectc416">Presentation parameters</a></h3>
 <p>  
 The principal parameters which determine document presentation are the  <p>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
Line 3106  less importance, it is possible to repre Line 2681  less importance, it is possible to repre
 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>  
 As we have already  seen, the positions of the boxes always respect the rule  <p>As we have already  seen, the positions of the boxes always respect the
 of enclosure: a box in the tree encloses all the boxes of the next lower level  rule of enclosure: a box in the tree encloses all the boxes of the next lower
 which are attached to it.  The positional parameters permit the specification  level which are attached to it.  The positional parameters permit the
 of the position of each box in relation to the enclosing box or to its sibling  specification of the position of each box in relation to the enclosing box or
 boxes (boxes directly attached to the same enclosing box in the tree of  to its sibling boxes (boxes directly attached to the same enclosing box in the
 boxes).</p>  tree of boxes).</p>
 <p>  
 The presentation parameters also provide control over the dimensions of the  <p>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>  
 Because of the position and dimension parameters, it is possible to do the  <p>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>  
 In contrast to the position and dimension parameters, the font, style, size,  <p>In contrast to the position and dimension parameters, the font, style,
 underlining, and color do not concern the box itself (the rectangle delimiting  size, underlining, and color do not concern the box itself (the rectangle
 the element), but its content.  These parameters indicate the typographic  delimiting the element), but its content.  These parameters indicate the
 attributes which must be applied to the text contained in the box, and by  typographic attributes which must be applied to the text contained in the box,
 extension, to all base elements.</p>  and by extension, to all base elements.</p>
 <p>  
 For text, the font parameter is used to change the family of characters  <p>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>  
 For graphics, the line style parameter can be either solid, dotted, or dashed;  <p>For graphics, the line style parameter can be either solid, dotted, or
 the line thickness parameter controls the width of the lines; the fill pattern  dashed; the line thickness parameter controls the width of the lines; the fill
 parameter determines how closed geometric figures must be filled.</p>  pattern parameter determines how closed geometric figures must be filled.</p>
 <p>  
 While some of the parameters which determine the appearance of a box's  <p>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>
Line 3148  indicate the color of lines and the back Line 2723  indicate the color of lines and the back
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb42">Presentation description language</a></h2>  <h2><a name="sectb42">Presentation description language</a></h2>
 <p>  
 A generic presentation defines the values of presentation parameters (or the  <p>A generic presentation defines the values of presentation parameters (or
 way to calculate those values) for a generic structure, or more precisely, for  the way to calculate those values) for a generic structure, or more precisely,
 all the element types and all the global and local attributes defined in that  for all the element types and all the global and local attributes defined in
 generic structure.  This definition of the presentation parameters is made  that generic structure.  This definition of the presentation parameters is
 with the P language.  A program written in this language, that is a generic  made with the P language.  A program written in this language, that is a
 presentation expressed in P, is call a <em>presentation schema</em>. This  generic presentation expressed in P, is call a <em>presentation schema</em>.
 section describes the syntax and semantics of the language, using the same <a  This section describes the syntax and semantics of the language, using the
 href="#sectc321">meta-language</a> as was used for the definition of the S  same <a href="#sectc321">meta-language</a> as was used for the definition of
 language.</p>  the S language.</p>
 <p>  
 Recall that it is possible to write many different presentation schemas for  <p>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>  <h3><a name="sectc421">The organization of a presentation schema</a></h3>
 <p>  
 A presentation schema begins with the word <tt>PRESENTATION</tt> and ends with  <p>A presentation schema begins with the word <tt>PRESENTATION</tt> and ends
 the word <tt>END</tt>.  The word <tt>PRESENTATION</tt> is followed by the name  with the word <tt>END</tt>.  The word <tt>PRESENTATION</tt> is followed by the
 of the generic structure to which the presentation will be applied.  This name  name of the generic structure to which the presentation will be applied.  This
 must be the same as that which follows the keyword <tt>STRUCTURE</tt> in the  name must be the same as that which follows the keyword <tt>STRUCTURE</tt> in
 structure schema associated with the presentation schema.</p>  the structure schema associated with the presentation schema.</p>
 <p>  
 After this declaration of the name of the structure, the following sections  <p>After this declaration of the name of the structure, the following sections
 appear (in order):</p>  appear (in order):</p>
 <ul>  <ul>
 <li>    <li>Declarations of
 Declarations of      <ul>
 <ul>        <li>all views,</li>
 <li>        <li>printed views,</li>
 all views,        <li>counters,</li>
 </li>        <li>presentation constants,</li>
 <li>        <li>variables,</li>
 printed views,      </ul>
 </li>    </li>
 <li>    <li>default presentation rules,</li>
 counters,    <li>presentation box and page layout box definitions,</li>
 </li>    <li>presentation rules for structured elements,</li>
 <li>    <li>presentation rules for attributes,</li>
 presentation constants,    <li>rules for transmitting values to attributes of included documents.</li>
 </li>  
 <li>  
 variables,  
 </li>  
 </ul>  
 </li>  
 <li>  
 default presentation rules,  
 </li>  
 <li>  
 presentation box and page layout box definitions,  
 </li>  
 <li>  
 presentation rules for structured elements,  
 </li>  
 <li>  
 presentation rules for attributes,  
 </li>  
 <li>  
 rules for transmitting values to attributes of included documents.  
 </li>  
 </ul>  </ul>
 <p>  
 Each of these sections is introduced by a keyword which is followed by a  <p>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>     SchemaPres ='PRESENTATION' ElemID ';'  <pre>     SchemaPres ='PRESENTATION' ElemID ';'
                [ 'VIEWS' ViewSeq ]                 [ 'VIEWS' ViewSeq ]
Line 3234  sequence of declarations.  Every section Line 2786  sequence of declarations.  Every section
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc422">Views</a></h3>  <h3><a name="sectc422">Views</a></h3>
 <p>  
 Each of the possible views must be declared in the presentation schema.  As  <p>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
Line 3246  definition of the view's contents are di Line 2797  definition of the view's contents are di
 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>  
 One of the view names (and only one) can be followed by the keyword  <p>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  of the document class in <a href="#sectc3213">skeleton form</a>.  The
 graphical appearance  and the content of this view is defined just as with  graphical appearance  and the content of this view is defined just as with
 other views, but it is useless to specify presentation rules concerning this  other views, but it is useless to specify presentation rules concerning this
 view for the elements which are not loaded in the skeleton form.</p>  view for the elements which are not loaded in the skeleton form.</p>
 <p>  
 It is not necessary to declare any views; in this case there is a single  <p>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>  
 The principal view is the the one which the editor presents on the screen when  <p>The principal view is the the one which the editor presents on the screen
 the user asks to create or edit a document.  Thus, it makes sense to put the  when the user asks to create or edit a document.  Thus, it makes sense to put
 most frequently used view at the head of the list.  But if the structure  the 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  schema contains <a href="#sectc3213">skeleton elements</a> and is loaded in
 its skeleton form, the view whose name is followed by the keyword  its skeleton form, the view whose name is followed by the keyword
 <tt>EXPORT</tt> 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>                      'VIEWS' ViewSeq  <pre>                      'VIEWS' ViewSeq
      ViewSeq         = ViewDeclaration       ViewSeq         = ViewDeclaration
                        &lt; ',' ViewDeclaration > ';' .                         &lt; ',' ViewDeclaration &gt; ';' .
      ViewDeclaration = ViewID [ 'EXPORT' ] .       ViewDeclaration = ViewID [ 'EXPORT' ] .
      ViewID          = NAME .</pre>       ViewID          = NAME .</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
 When editing a report, it might be useful have views of the table of contents    contents and of the mathematical formulas, in addition to the principal view
 and of the mathematical formulas, in addition to the principal view which    which shows the document in its entirety.  To achieve this, a presentation
 shows the document in its entirety.  To achieve this, a presentation schema    schema for the Report class would have the following <tt>VIEWS</tt>
 for the Report class would have the following <tt>VIEWS</tt> section:</p>    section:</p>
 <pre>VIEWS    <pre>VIEWS
      Full_text, Table_of_contents, Formulas;</pre>       Full_text, Table_of_contents, Formulas;</pre>
 <p>  
 The contents of these views are specified in the presentation rules of the    <p>The contents of these views are specified in the presentation rules of
 schema.</p>    the schema.</p>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc423">Print Views</a></h3>  <h3><a name="sectc423">Print Views</a></h3>
 <p>  
 When editing a document, each view is presented in a different window.  In  <p>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>  
 When printing a document, it is possible to print any number of views, chosen  <p>When printing a document, it is possible to print any number of views,
 from among all the views which the editor can display (views in the strict  chosen from among all the views which the editor can display (views in the
 sense or associated elements).  Print views, as well as the order in which  strict sense or associated elements).  Print views, as well as the order in
 they must be printed, are indicated by the <tt>PRINT</tt> instruction. It  which they must be printed, are indicated by the <tt>PRINT</tt> instruction.
 appears after the <tt>VIEWS</tt> instruction and is formed of the keyword  It 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
Line 3308  name of an associated element type (with Line 2859  name of an associated element type (with
 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>                    'PRINT' PrintViewSeq  <pre>                    'PRINT' PrintViewSeq
      PrintViewSeq = PrintView &lt; ',' PrintView > ';' .       PrintViewSeq = PrintView &lt; ',' PrintView &gt; ';' .
      PrintView    = ViewID / ElemID .</pre>       PrintView    = ViewID / ElemID .</pre>
 <p>  
 If the <tt>PRINT</tt> instruction is absent, the printing program will print  <p>If the <tt>PRINT</tt> instruction is absent, the printing program will
 only the principal view (the first view specified by the <tt>VIEWS</tt>  print 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
 Consider a Report presentation using the view declarations from the preceding    preceding example.  Suppose we want to print the full text and table of
 example.  Suppose we want to print the full text and table of contents views,    contents views, but not the Formulas view, which is only useful when
 but not the Formulas view, which is only useful when editing.  In addition,    editing.  In addition, suppose that we also want to print the bibliographic
 suppose that we also want to print the bibliographic citations, which are    citations, which are associated elements (of type <tt>Citation</tt>).  A
 associated elements (of type <tt>Citation</tt>).  A sensible printing order    sensible printing order would be to print the full text then the
 would be to print the full text then the bibliography and finally the table of    bibliography and finally the table of contents.  To obtain this result when
 contents.  To obtain this result when printing, the presentation schema would    printing, the presentation schema would say:</p>
 say:</p>    <pre>PRINT
 <pre>PRINT  
      Full_text, Citations, Table_of_contents;</pre>       Full_text, Citations, Table_of_contents;</pre>
 </blockquote>  </blockquote>
 </div>  </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>  
 Each counter declaration is composed of a name identifying the counter  <p>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>  
 The counting function indicates how the counter values will be calculated.  <p>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>RANK OF ElemID [ LevelAsc ] [ INIT AttrID ]  <pre>RANK OF ElemID [ LevelAsc ] [ INIT AttrID ]
         [ 'REINIT' AttrID ]</pre>          [ 'REINIT' AttrID ]</pre>
 <p>  
 indicates that when an element creates, by a creation rule (see the <a  <p>indicates that when an element creates, by a creation rule (see the <a
 href="#sectc4232"><tt>Create</tt> instructions</a>), a presentation box  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>  
 The type name can be preceded by a star in the special case where the  <p>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>  
 The type name <tt>ElemID</tt> can be followed by an integer.  That number  <p>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
Line 3373  travelling the logical structure from th Line 2923  travelling the logical structure from th
 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>  
 The function can end with the keyword <tt>INIT</tt> followed by the name of a  <p>The function can end with the keyword <tt>INIT</tt> followed by the name of
 numeric attribute (and only a numeric attribute).  Then, the rank of the first  a numeric attribute (and only a numeric attribute).  Then, the rank of the
 element of the list or aggregate is considered to be the value of this  first 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>  
 The function can end with the keyword <tt>REINIT</tt> followed by the name of  <p>The function can end with the keyword <tt>REINIT</tt> followed by the name
 a numeric attribute (and only a numeric attribute).  Then, if an element to be  of a numeric attribute (and only a numeric attribute).  Then, if an element to
 counted has this attribute, the counter value for this element is the  be 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>  
 When the <tt>RANK</tt> function is written</p>  <p>When the <tt>RANK</tt> function is written</p>
 <pre>RANK OF Page [ ViewID ] [ INIT AttrID ]</pre>  <pre>RANK OF Page [ ViewID ] [ INIT AttrID ]</pre>
 <p>  
 (<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
 the number of the page on which the element which creates the presentation box  value the number of the page on which the element which creates the
 containing the number appears.  This is done as if the pages of the document  presentation box containing the number appears.  This is done as if the pages
 form a list for each view.  The counter only takes into account the pages of  of the document form a list for each view.  The counter only takes into
 the relevant view, that is the view displaying the presentation box whose  account the pages of the relevant view, that is the view displaying the
 contents take the value of the number.  However, if the keyword <tt>Page</tt>  presentation box whose contents take the value of the number.  However, if the
 is followed by the name of a view (between parentheses), it is the pages of  keyword <tt>Page</tt> is followed by the name of a view (between parentheses),
 that view that are taken into account.  As in the preceding form, the  it is the pages of that view that are taken into account.  As in the preceding
 <tt>RANK</tt> function applied to pages can end with the <tt>INIT</tt> keyword  form, the <tt>RANK</tt> function applied to pages can end with the
 followed by the name of a numeric attribute which sets the value of the first  <tt>INIT</tt> keyword followed by the name of a numeric attribute which sets
 page's number.  This attribute must be a local attribute of the document  the value of the first page's number.  This attribute must be a local
 itself, and not of one of its components.</p>  attribute of the document itself, and not of one of its components.</p>
 <p>  
 The second counting function is used to count the occurrences of a certain  <p>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>SET n ON Type1 ADD m ON Type2 [ INIT AttrID ]</pre>  <pre>SET n ON Type1 ADD m ON Type2 [ INIT AttrID ]</pre>
 <p>  
 says that when the document is traversed from beginning to end (in the order  <p>says that when the document is traversed from beginning to end (in the
 induced by the logical structure), the counter is assigned the value  order induced by the logical structure), the counter is assigned the value
 <tt>n</tt> each time an element of type <tt>Type1</tt> is encountered, no  <tt>n</tt> each time an element of type <tt>Type1</tt> is encountered, no
 matter what the current value of the counter, and the value <tt>m</tt> is  matter what the current value of the counter, and the value <tt>m</tt> is
 added to the current value of the counter each time an element of type  added to the current value of the counter each time an element of type
 <tt>Type2</tt> is encountered.</p>  <tt>Type2</tt> is encountered.</p>
 <p>  
 As with the <tt>RANK</tt> function, the type names can be preceded by a star  <p>As with the <tt>RANK</tt> function, the type names can be preceded by a
 to resolve the ambiguity of included elements.</p>  star to resolve the ambiguity of included elements.</p>
 <p>  
 If the function ends with the keyword <tt>INIT</tt> followed by the name of an  <p>If the function ends with the keyword <tt>INIT</tt> followed by the name of
 attribute and if the document possesses this attribute, the value of this  an 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>  
 This function can also be used with the <tt>Page</tt> keyword in the place of  <p>This function can also be used with the <tt>Page</tt> keyword in the place
 <tt>Type1</tt> or <tt>Type2</tt>.  In the first case, the counter is  of <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>  
 The definition of a counter can contain several <tt>SET</tt> functions and  <p>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>  
 The third counting function is used to count the elements of a certain type  <p>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>RLEVEL OF Type</pre>  <pre>RLEVEL OF Type</pre>
 <p>  
 where <tt>Type</tt> represents the type of the elements to be counted.</p>  <p>where <tt>Type</tt> represents the type of the elements to be counted.</p>
 <p>  
 The formal definition of counter declarations is:</p>  <p>The formal definition of counter declarations is:</p>
 <pre>                    'COUNTERS' CounterSeq  <pre>                    'COUNTERS' CounterSeq
      CounterSeq   = Counter &lt; Counter > .       CounterSeq   = Counter &lt; Counter &gt; .
      Counter      = CounterID ':' CounterFunc ';' .       Counter      = CounterID ':' CounterFunc ';' .
      CounterID    = NAME .       CounterID    = NAME .
      CounterFunc  = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]       CounterFunc  = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]
                     [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /                      [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /
                     SetFunction &lt; SetFunction >                      SetFunction &lt; SetFunction &gt;
                     AddFunction &lt; AddFunction >                      AddFunction &lt; AddFunction &gt;
                     [ 'INIT' AttrID ] /                      [ 'INIT' AttrID ] /
                     'RLEVEL' 'OF' ElemID .                      'RLEVEL' 'OF' ElemID .
      SLevelAsc    = [ '-' ] LevelAsc .       SLevelAsc    = [ '-' ] LevelAsc .
Line 3460  The formal definition of counter declara Line 3010  The formal definition of counter declara
      TypeOrPage   = 'Page' [ '(' ViewID ')' ] /        TypeOrPage   = 'Page' [ '(' ViewID ')' ] / 
                     [ '*' ] ElemID .                      [ '*' ] ElemID .
      CounterValue = NUMBER .</pre>       CounterValue = NUMBER .</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
 If the body of a chapter is defined as a sequence of sections in the structure    structure schema:</p>
 schema:</p>    <pre>Chapter_body = LIST OF (Section = 
 <pre>Chapter_body = LIST OF (Section =   
                             BEGIN                              BEGIN
                             Section_Title = Text;                              Section_Title = Text;
                             Section_Body  = Paragraphs;                              Section_Body  = Paragraphs;
                             END                              END
                          );</pre>                           );</pre>
 <p>  
 the section counter is declared:</p>    <p>the section counter is declared:</p>
 <pre>SectionCtr : RANK OF Section;</pre>    <pre>SectionCtr : RANK OF Section;</pre>
 <p>  
 and the display of the section number before the section title is obtained by    <p>and the display of the section number before the section title is
 a <a href="#sectc4232"><tt>CreateBefore</tt> rule</a> attached the    obtained by a <a href="#sectc4232"><tt>CreateBefore</tt> rule</a> attached
 <tt>Section_Title</tt> type, which creates a presentation box whose content is    the <tt>Section_Title</tt> type, which creates a presentation box whose
 the value of the <tt>SectionCtr</tt> counter (see the <a    content is the value of the <tt>SectionCtr</tt> counter (see the <a
 href="#sectc4231"><tt>Content</tt> instruction</a>).</p>    href="#sectc4231"><tt>Content</tt> instruction</a>).</p>
 <p>  
 In order to number the formulas separately within each chapter, the formula    <p>In order to number the formulas separately within each chapter, the
 counter is declared:</p>    formula counter is declared:</p>
 <pre>FormulaCtr : SET 0 ON Chapter ADD 1 ON Formula;</pre>    <pre>FormulaCtr : SET 0 ON Chapter ADD 1 ON Formula;</pre>
 <p>  
 and the display of the formula number in the right margin, alongside each    <p>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>  
 To number the page chapter by chapter, with the first page of each chapter    <p>To number the page chapter by chapter, with the first page of each
 having the number 1, the counter definition would be</p>    chapter having the number 1, the counter definition would be</p>
 <pre>ChapterPageCtr : SET 0 ON Chapter ADD 1 ON Page;</pre>    <pre>ChapterPageCtr : SET 0 ON Chapter ADD 1 ON Page;</pre>
 <p>  
 If there is also a chapter counter</p>    <p>If there is also a chapter counter</p>
 <pre>ChapterCtr : RANK OF Chapter;</pre>    <pre>ChapterCtr : RANK OF Chapter;</pre>
 <p>  
 the <a href="#sectc4231">content</a> of a presentation box created at the top    <p>the <a href="#sectc4231">content</a> of a presentation box created at the
 of each page could be defined as:</p>    top of each page could be defined as:</p>
 <pre>Content : (VALUE(ChapterCtr, URoman) TEXT '-'    <pre>Content : (VALUE(ChapterCtr, URoman) TEXT '-'
            VALUE(ChapterPageCtr, Arabic));</pre>             VALUE(ChapterPageCtr, Arabic));</pre>
 <p>  
 Thus, the presentation box contains the number of the chapter in upper-case    <p>Thus, the presentation box contains the number of the chapter in
 roman numerals followed by a hyphen and the number of the page within the    upper-case roman numerals followed by a hyphen and the number of the page
 chapter in arabic numerals.</p>    within the 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>CommonCtr : SET 0 ON Chapter ADD 1 ON Table
 <pre>CommonCtr : SET 0 ON Chapter ADD 1 ON Table  
             ADD 1 ON Figure;</pre>              ADD 1 ON Figure;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc425">Presentation constants</a></h3>  <h3><a name="sectc425">Presentation constants</a></h3>
 <p>  
 Presentation constants are used in the definition of the content of  <p>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>  
 Constants can be defined directly in the variables or presentation boxes  <p>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>  
 The constant declarations appear after the keyword <tt>CONST</tt>.  Each  <p>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>  
 In the case of a character string, the keyword <tt>Text</tt> can be followed  <p>In the case of a character string, the keyword <tt>Text</tt> can be
 by the name of an alphabet (for example, <tt>Greek</tt> or <tt>Latin</tt>) in  followed by the name of an alphabet (for example, <tt>Greek</tt> or
 which the constant's text should be expressed.  If the alphabet name is  <tt>Latin</tt>) in which the constant's text should be expressed.  If the
 absent, the Latin alphabet is used.  When the alphabet name is present, only  alphabet name is absent, the Latin alphabet is used.  When the alphabet name
 the first letter of the alphabet name is interpreted.  Thus, the words  is present, only the first letter of the alphabet name is interpreted.  Thus,
 <tt>Greek</tt> and <tt>Grec</tt> designate the same alphabet.  In current  the words <tt>Greek</tt> and <tt>Grec</tt> designate the same alphabet.  In
 versions of Thot, only the Greek and Latin alphabets are available.</p>  current versions of Thot, only the Greek and Latin alphabets are
   available.</p>
 <pre>                 'CONST' ConstSeq  <pre>                 'CONST' ConstSeq
      ConstSeq   = Const &lt; Const > .       ConstSeq   = Const &lt; Const &gt; .
      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 .</pre>       Alphabet   = NAME .</pre>
 <p>  
 For character strings in the Latin alphabet (ISO Latin-1 character set),  <p>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>  
 In the case of a symbol or graphical element, the value only contains a single  <p>In the case of a symbol or graphical element, the value only contains a
 character, between apostrophes, which indicates the form of the element which  single character, between apostrophes, which indicates the form of the element
 must be drawn in the box whose content is the constant.  The symbol or  which 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
 The constants ``Summary:'' and fraction bar, which were described earlier, are    earlier, are declared:</p>
 declared:</p>    <pre>CONST
 <pre>CONST  
      SummaryConst = Text 'Summary:';       SummaryConst = Text 'Summary:';
      Bar          = Graphics 'h';</pre>       Bar          = Graphics 'h';</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc426">Variables</a></h3>  <h3><a name="sectc426">Variables</a></h3>
 <p>  
 Variables permit the definition of computed content for presentation boxes. A  <p>Variables permit the definition of computed content for presentation boxes.
 variable is associated with a presentation box by a <tt>Content</tt> rule; but  A variable is associated with a presentation box by a <tt>Content</tt> rule;
 before being used in a <tt>Content</tt> rule, a variable can be defined in the  but before being used in a <tt>Content</tt> rule, a variable can be defined in
 <tt>VAR</tt> section.  It is also possible to define a variable at the time of  the <tt>VAR</tt> section.  It is also possible to define a variable at the
 its use in a <tt>Content</tt> rule, as can be done with a constant.</p>  time of its use in a <tt>Content</tt> rule, as can be done with a
 <p>  constant.</p>
 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  <p>A variable has a name and a value which is a character string resulting
 declaration is composed of the variable name followed by a colon and the  from the concatenation of the values of a sequence of functions.  Each
 sequence of functions which produces its value, separated by spaces.  Each  variable declaration is composed of the variable name followed by a colon and
   the 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>                  'VAR' VarSeq  <pre>                  'VAR' VarSeq
      VarSeq      = Variable &lt; Variable > .       VarSeq      = Variable &lt; Variable &gt; .
      Variable    = VarID ':' FunctionSeq ';' .       Variable    = VarID ':' FunctionSeq ';' .
      VarID       = NAME .       VarID       = NAME .
      FunctionSeq = Function &lt; Function > .</pre>       FunctionSeq = Function &lt; Function &gt; .</pre>
 <p>  
 Several functions are available.  The first two return, in the form of a  <p>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>  
 Two other functions, <tt>DocName</tt> and <tt>DirName</tt>, return the  <p>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>  
 Function <tt>ElemName</tt> returns the type of the element which created the  <p>Function <tt>ElemName</tt> returns the type of the element which created
 presentation box whose contents are the variable.</p>  the presentation box whose contents are the variable.</p>
 <p>  
 Another function simply returns the value of a presentation constant. For any  <p>Another function simply returns the value of a presentation constant. For
 constant declared in the <tt>CONST</tt> section, it is sufficient to give the  any constant declared in the <tt>CONST</tt> section, it is sufficient to give
 name of the constant.  Otherwise, the type and value of the constant must be  the name of the constant.  Otherwise, the type and value of the constant must
 given, using the same form as in a <a href="#sectc425">constant  be 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>  
 It is also possible to obtain the value of an attribute, simply by mentioning  <p>It is also possible to obtain the value of an attribute, simply by
 the attribute's name.  The value of this function is the value of the  mentioning the attribute's name.  The value of this function is the value of
 attribute for the element which created the presentation box whose contents  the attribute for the element which created the presentation box whose
 are the variable.  If the creating element does not have the indicated  contents are the variable.  If the creating element does not have the
 attribute, the value is an empty string.  In the case of a numeric attribute,  indicated attribute, the value is an empty string.  In the case of a numeric
 the attribute is translated into a decimal number in arabic numerals.  If  attribute, the attribute is translated into a decimal number in arabic
 another form is desired, the <tt>VALUE</tt> function must be used.</p>  numerals.  If another form is desired, the <tt>VALUE</tt> function must be
 <p>  used.</p>
 The last available function returns, as a character string, the value of a  
   <p>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
Line 3639  value should be presented in arabic nume Line 3190  value should be presented in arabic nume
 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>  
 For a page counter, the keyword <tt>PageNumber</tt> can be followed, between  <p>For a page counter, the keyword <tt>PageNumber</tt> can be followed,
 parentheses, by the name of the view from which to obtain the page number.  By  between parentheses, by the name of the view from which to obtain the page
 default, the first view declared in the <tt>VIEWS</tt> section is used.  The  number.  By default, the first view declared in the <tt>VIEWS</tt> section is
 value obtained is the number of the page on which is found the element that is  used.  The value obtained is the number of the page on which is found the
 using the variable in a <tt>Content</tt> rule.</p>  element that is using the variable in a <tt>Content</tt> rule.</p>
 <p>  
 For an ordinary counter, the name of the counter can be preceded by the  <p>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
Line 3663  concerned by the function.</p> Line 3214  concerned by the function.</p>
      CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /       CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /
                     'Uppercase' / 'Lowercase' .                      'Uppercase' / 'Lowercase' .
      MinMax       = 'MaxRangeVal' / 'MinRangeVal' .</pre>       MinMax       = 'MaxRangeVal' / 'MinRangeVal' .</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
 To make today's date appear at the top of the first page of a report, a <a    <a href="#sectc4232"><tt>CREATE</tt> rule</a> associated with the
 href="#sectc4232"><tt>CREATE</tt> rule</a> associated with the Report_Title    Report_Title element type generates a presentation box whose content
 element type generates a presentation box whose content (specified by the    (specified by the <tt>Content</tt> rule of that presentation box) is the
 <tt>Content</tt> rule of that presentation box) is the variable:</p>    variable:</p>
 <pre>VAR    <pre>VAR
      Todays_date : TEXT 'Version of ' DATE;</pre>       Todays_date : TEXT 'Version of ' DATE;</pre>
 <p>  
 To produce, before each section title, the chapter number (in upper-case roman    <p>To produce, before each section title, the chapter number (in upper-case
 numerals) followed by the section number (in arabic numerals), two counters    roman numerals) followed by the section number (in arabic numerals), two
 must be defined:</p>    counters must be defined:</p>
 <pre>COUNTERS    <pre>COUNTERS
      ChapterCtr : RANK OF Chapter;       ChapterCtr : RANK OF Chapter;
      SectionCtr : RANK OF Section;</pre>       SectionCtr : RANK OF Section;</pre>
 <p>  
 and the Section_Title element must create a presentation box whose content is    <p>and the Section_Title element must create a presentation box whose
 the variable</p>    content is the variable</p>
 <pre>VAR    <pre>VAR
      SectionNum : VALUE (ChapterCtr, URoman) TEXT '-'       SectionNum : VALUE (ChapterCtr, URoman) TEXT '-'
                   VALUE (SectionCtr, Arabic);</pre>                    VALUE (SectionCtr, Arabic);</pre>
 <p>  
 In order to make the page number on which each section begins appear in the    <p>In order to make the page number on which each section begins appear in
 table of contents view next to the section title, each Section_Title element    the table of contents view next to the section title, each Section_Title
 must create a presentation box, visible only in the table of contents view,    element must create a presentation box, visible only in the table of
 whose content is the variable:</p>    contents view, whose content is the variable:</p>
 <pre>VAR    <pre>VAR
      TitlePageNume :       TitlePageNume :
            VALUE (PageNumber(Full_text), Arabic);</pre>             VALUE (PageNumber(Full_text), Arabic);</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc427">Default presentation rules</a></h3>  <h3><a name="sectc427">Default presentation rules</a></h3>
 <p>  
 In order to avoid having to specify, for each element type defined in the  <p>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>  
 For the primary view, the default rules can define every presentation  <p>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>  
 In a presentation schema, the default presentation rules section is optional;  <p>In a presentation schema, the default presentation rules section is
 in this case, the <tt>DEFAULT</tt> keyword is also absent and the following  optional; in this case, the <tt>DEFAULT</tt> keyword is also absent and the
 rules are considered to be the default rules:</p>  following rules are considered to be the default rules:</p>
 <pre>   Visibility:        Enclosing =;  <pre>   Visibility:        Enclosing =;
    VertRef:           * . Left;     VertRef:           * . Left;
    HorizRef:          Enclosed . HRef;     HorizRef:          Enclosed . HRef;
Line 3766  rules are considered to be the default r Line 3317  rules are considered to be the default r
    FillPattern:       Enclosing =;     FillPattern:       Enclosing =;
    Background:        Enclosing =;     Background:        Enclosing =;
    Foreground:        Enclosing =;</pre>     Foreground:        Enclosing =;</pre>
 <p>  
 If other values are desired for the default rules, they must be defined  <p>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>  
 Default rules for views other than the primary  view can also be specified.  <p>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>  
 Default rules are expressed in the same way as <a href="#sectc4215">explicit  <p>Default rules are expressed in the same way as <a
 rules for document elements</a>.</p>  href="#sectc4215">explicit 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>  <h3><a name="sectc428">Presentation and page layout boxes</a></h3>
 <p>  
 The presentation process uses elements which are not part of the logical  <p>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>  
 After the word <tt>BOXES</tt>, each presentation or page layout box is defined  <p>After the word <tt>BOXES</tt>, each presentation or page layout box is
 by its name and a sequence of presentation rules which indicate how they must  defined by its name and a sequence of presentation rules which indicate how
 be displayed.  These rules are the same as those which define the boxes  they must be displayed.  These rules are the same as those which define the
 associated with element of the logical structure of the document, with a  boxes 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>  
 Among the rules which define a presentation box, certain ones can refer to  <p>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>             'BOXES' BoxSeq  <pre>             'BOXES' BoxSeq
      BoxSeq = Box &lt; Box > .       BoxSeq = Box &lt; Box &gt; .
      Box    ='FORWARD' BoxID ';' /       Box    ='FORWARD' BoxID ';' /
               BoxID ':' ViewRuleSeq .                BoxID ':' ViewRuleSeq .
      BoxID  = NAME .</pre>       BoxID  = NAME .</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc429">Presentation of structured elements</a></h3>  <h3><a name="sectc429">Presentation of structured elements</a></h3>
 <p>  
 After the words <tt>RULES</tt>, the presentation schema gives the presentation  <p>After the words <tt>RULES</tt>, the presentation schema gives the
 rules that apply to the elements whose types are defined in the structure  presentation rules that apply to the elements whose types are defined in the
 schema.  Only those rules which differ from the <a  structure 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>  
 The rule definitions for each element type are composed of the name of the  <p>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>  
 The type name can be preceded by a star in the special case where the  <p>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>  
 In the case where the element is a <a href="#sectd3285">mark pair</a>, but  <p>In the case where the element is a <a href="#sectd3285">mark pair</a>, but
 only in this case, the type name can be preceded by the keywords  only 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  <tt>First</tt> or <tt>Second</tt>.  These keywords indicate whether the rules
 that follow apply to the first or second mark of the pair.</p>  that follow apply to the first or second mark of the pair.</p>
 <pre>                 'RULES' PresentSeq  <pre>                 'RULES' PresentSeq
      PresentSeq = Present &lt; Present > .       PresentSeq = Present &lt; Present &gt; .
      Present    = [ '*' ] [ FirstSec ] ElemID ':'       Present    = [ '*' ] [ FirstSec ] ElemID ':'
                   ViewRuleSeq .                    ViewRuleSeq .
      FirstSec   = 'First' / 'Second' .</pre>       FirstSec   = 'First' / 'Second' .</pre>
 <p>  
 A presentation schema can define presentation rules for base elements, which  <p>A presentation schema can define presentation rules for base elements,
 are defined implicitly in the structure schemas.  In the English version of  which are defined implicitly in the structure schemas.  In the English version
 the presentation schema compiler, the base type names are the same as in the S  of the presentation schema compiler, the base type names are the same as in
 language, but they are terminated by the <tt>_UNIT</tt> suffix:  the S 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>  
 After the keyword <tt>ATTRIBUTES</tt>, all attributes which are to have some  <p>After the keyword <tt>ATTRIBUTES</tt>, all attributes which are to have
 effect on the presentation of the element to which they are attached must be  some effect on the presentation of the element to which they are attached must
 mentioned, along with the corresponding presentation rules.  This is true for  be mentioned, along with the corresponding presentation rules.  This is true
 both global attributes (which can be attached to all element types) and local  for both global attributes (which can be attached to all element types) and
 attributes (which can only be attached to certain element types).</p>  local attributes (which can only be attached to certain element types).</p>
 <p>  
 Also mentioned in this section are attributes which imply an effect on  <p>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>  
 The specification for each attribute includes the attribute's name, followed  <p>The specification for each attribute includes the attribute's name,
 by an optional value specification and, after a colon, a set of rules.  The  followed by an optional value specification and, after a colon, a set of
 set of rules must contain at least one rule.</p>  rules.  The set of rules must contain at least one rule.</p>
 <p>  
 When there is no value specification, the rules are applied to all elements  <p>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>  
 To specify that the presentation rules apply to some of the descendants of the  <p>To specify that the presentation rules apply to some of the descendants of
 element having the attribute, the name of the affected element type is given,  the element having the attribute, the name of the affected element type is
 between parentheses, after the attribute name.  This way, the presentation  given, between parentheses, after the attribute name.  This way, the
 rules for the attribute will be applied to the element having the attribute,  presentation rules for the attribute will be applied to the element having the
 if it is of the given type, and to all of its descendants of the given type.  attribute, if it is of the given type, and to all of its descendants of the
 In the case where this type is a <a href="#sectd3285">mark pair</a>, but only  given type. In the case where this type is a <a href="#sectd3285">mark
 in this case, the type name can be preceded by the keywords <tt>First</tt> or  pair</a>, but 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. If the rule must apply to several  that follow apply to the first or second mark of the pair. If the rule must
 different element types, the specification must be repeated for each element  apply to several different element types, the specification must be repeated
 type.</p>  for each element type.</p>
 <p>  
 The specification of values for which the presentation rules will be applied  <p>The specification of values for which the presentation rules will be
 varies according to the type of the attribute:</p>  applied varies according to the type of the attribute:</p>
 <dl>  <dl>
 <dt>numeric attribute</dt>    <dt>numeric attribute</dt>
 <dd>      <dd>If the rules are to apply for one value of the attribute, then the
 If the rules are to apply for one value of the attribute, then the attribute        attribute name is followed by an equals sign and this value.  If the
 name is followed by an equals sign and this value.  If the rules are to apply        rules are to apply for all values less than (or greater than) a
 for all values less than (or greater than) a threshold value, non-inclusive,        threshold value, non-inclusive, the attribute name followed by a '&lt;'
 the attribute name followed by a '&lt;' sign (or a '>' sign, respectively) and        sign (or a '&gt;' sign, respectively) and the threshold value.  If the
 the threshold value.  If the rules must apply to a range of values, the        rules must apply to a range of values, the attribute name is followed by
 attribute name is followed by the word '<tt>IN</tt>' and the two bounds of the        the word '<tt>IN</tt>' and the two bounds of the range, enclosed in
 range, enclosed in brackets and separated by two periods ('<tt>..</tt>').  In        brackets and separated by two periods ('<tt>..</tt>').  In the case of
 the case of ranges, the values of the bounds are included in the range.        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
 The threshold value in the comparisons can be the value of an attribute        attribute attached to an ancestor element.  In this case, the attribute
 attached to an ancestor element.  In this case, the attribute name is given        name is given instead of a constant value.</p>
 instead of a constant value.</p>        <p>It is also possible to write rules which apply only when a comparison
 <p>        between two different attributes of the element's ancestors is true. In
 It is also possible to write rules which apply only when a comparison between        this case, the first attribute name is followed by a comparison keyword
 two different attributes of the element's ancestors is true. In this case, the        and the name of the second attribute.  The comparison keywords are
 first attribute name is followed by a comparison keyword and the name of the        <tt>EQUAL</tt> (simple equality), <tt>LESS</tt> (non-inclusive less
 second attribute.  The comparison keywords are <tt>EQUAL</tt> (simple        than), and <tt>GREATER</tt> (non-inclusive greater than).</p>
 equality), <tt>LESS</tt> (non-inclusive less than), and <tt>GREATER</tt>      </dd>
 (non-inclusive greater than).</p>    <dt>text attribute</dt>
 </dd>      <dd>If the rules are to apply for one value of the attribute, then the
 <dt>text attribute</dt>        attribute name is followed by an equals sign and this value.</dd>
 <dd>    <dt>reference attribute</dt>
 If the rules are to apply for one value of the attribute, then the attribute      <dd>There is never a value specification; the rules apply no matter what
 name is followed by an equals sign and this value.        element is designated by the attribute.</dd>
 </dd>    <dt>enumerated attribute</dt>
 <dt>reference 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.</dd>
 There is never a value specification; the rules apply no matter what element  
 is designated by the attribute.  
 </dd>  
 <dt>enumerated attribute</dt>  
 <dd>  
 If the rules are to apply for one value of the attribute, then the attribute  
 name is followed by an equals sign and this value.  
 </dd>  
 </dl>  </dl>
 <p>  
 The order in which the rules associated with a numeric attribute are defined  <p>The order in which the rules associated with a numeric attribute are
 is important.  When multiple sets of rules can be applied, the first set  defined is important.  When multiple sets of rules can be applied, the first
 declared is the one used.</p>  set declared is the one used.</p>
 <p>  
 Rules for attributes have priority over both default rules and rules  <p>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>                    'ATTRIBUTES' PresAttrSeq  <pre>                    'ATTRIBUTES' PresAttrSeq
      PresAttrSeq  = PresAttr &lt; PresAttr > .       PresAttrSeq  = PresAttr &lt; PresAttr &gt; .
      PresAttr     = AttrID [ '(' [ FirstSec ] ElemID ')' ]       PresAttr     = AttrID [ '(' [ FirstSec ] ElemID ')' ]
                     [ AttrRelation ] ':' ViewRuleSeq .                      [ AttrRelation ] ':' ViewRuleSeq .
      AttrID       = NAME .       AttrID       = NAME .
      AttrRelation ='=' AttrVal /       AttrRelation ='=' AttrVal /
                     '>' [ '-' ] MinValue /                      '&gt;' [ '-' ] MinValue /
                     '&lt;' [ '-' ] MaxValue /                      '&lt;' [ '-' ] MaxValue /
                     'IN' '[' [ '-' ] LowerBound '..'                      'IN' '[' [ '-' ] LowerBound '..'
                     [ '-' ] UpperBound ']' /                      [ '-' ] UpperBound ']' /
Line 3964  terminal elements of the structure).</p> Line 3504  terminal elements of the structure).</p>
      EqualNum     = NUMBER .       EqualNum     = NUMBER .
      EqualText    = STRING .       EqualText    = STRING .
      AttrValue    = NAME .</pre>       AttrValue    = NAME .</pre>
 <p>  
 In presentation rules associated with a numeric attribute (and only in such  <p>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,
 the attribute can represent a relation between the size of two boxes, the  the attribute can represent a relation between the size of two boxes, the
Line 3973  height and width of a box, the height of Line 3513  height and width of a box, the height of
 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>  
 The presentation rules associated with reference attributes, it is possible to  <p>The presentation rules associated with reference attributes, it is possible
 use the element designated by the attribute as a reference box in a positional  to use the element designated by the attribute as a reference box in a
 or extent rule.  This element is represented in the <a  positional 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>ATTR
 <pre>ATTR  
      Language = TEXT;</pre>       Language = TEXT;</pre>
 <p>  
 The following rules would make French text be displayed in roman characters    <p>The following rules would make French text be displayed in roman
 and English text be displayed in italics:</p>    characters and English text be displayed in italics:</p>
 <pre>ATTRIBUTES    <pre>ATTRIBUTES
      Language = 'French' :       Language = 'French' :
                 Style : Roman;                  Style : Roman;
      Language = 'English' :       Language = 'English' :
                 Style : Italics;</pre>                  Style : Italics;</pre>
 <p>  
 Using these rules, when the user puts the Language attribute with the value    <p>Using these rules, when the user puts the Language attribute with the
 'English' on the summary of a document, every character string (terminal    value 'English' on the summary of a document, every character string
 elements) contained in the summary are displayed in italics.  See the <a    (terminal elements) contained in the summary are displayed in italics.  See
 href="#sectd42252"><tt>Style</tt> rule</a>.</p>    the <a 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
 A numeric attribute representing the importance of the part of the document to    document to which it is attached can be defined:</p>
 which it is attached can be defined:</p>    <pre>ATTR
 <pre>ATTR  
      Importance = INTEGER;</pre>       Importance = INTEGER;</pre>
 <p>  
 In the presentation schema, the importance of an element is reflected in the    <p>In the presentation schema, the importance of an element is reflected in
 choice of character size, using the following rules.</p>    the choice of character size, using the following rules.</p>
 <pre>ATTRIBUTES    <pre>ATTRIBUTES
      Importance &lt; 2 :       Importance &lt; 2 :
               Size : 1;                Size : 1;
      Importance IN [2..4] :       Importance IN [2..4] :
               Size : Importance;                Size : Importance;
      Importance = 10 :       Importance = 10 :
               Size : 5;                Size : 5;
      Importance > 4 :       Importance &gt; 4 :
               Size : 4;</pre>                Size : 4;</pre>
 <p>  
 Thus, the character size corresponds to the value of the Importance attribute;    <p>Thus, the character size corresponds to the value of the Importance
 its value is</p>    attribute; its value is</p>
 <ul>    <ul>
 <li>      <li>the value of the Importance attribute when the value is between 2 and
 the value of the Importance attribute when the value is between 2 and 4        4 (inclusive),</li>
 (inclusive),      <li>1, when the value of the Importance attribute is less than 2,</li>
 </li>      <li>4, when the value of the Importance attribute is greater than 4,</li>
 <li>      <li>5, when the value of the Importance attribute is 10.</li>
 1, when the value of the Importance attribute is less than 2,    </ul>
 </li>  
 <li>    <p>The last case (value 5) must be defined before the case which handles all
 4, when the value of the Importance attribute is greater than 4,    Importance values greater than 4, because the two rules are not disjoint and
 </li>    the first one defined will have priority.  Otherwise, when the Importance
 <li>    attribute has value 10, the font size will be 4.</p>
 5, when the value of the Importance attribute is 10.  
 </li>  
 </ul>  
 <p>  
 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  
 the first one defined will have priority.  Otherwise, when the Importance  
 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>STRUCT
 <pre>STRUCT  
     list (ATTR list_type = enumeration, dash)      list (ATTR list_type = enumeration, dash)
          = LIST OF (list_item = TEXT);</pre>           = LIST OF (list_item = TEXT);</pre>
 <p>  
 Then, the presentation schema could use the attribute placed on the list    <p>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>ATTRIBUTES    <pre>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);</pre>          CreateBefore (DashBox);</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
 Suppose that two attributes are defined in the structure schema.  The first is    first is a numeric global attribute called ``version''.  The other is a
 a numeric global attribute called ``version''.  The other is a local attribute    local attribute defined on the root of the document called
 defined on the root of the document called ``Document_version'':</p>    ``Document_version'':</p>
 <pre>STRUCTURE Document    <pre>STRUCTURE Document
 ATTR  ATTR
     version = INTEGER;      version = INTEGER;
 STRUCT  STRUCT
Line 4082  STRUCT Line 3615  STRUCT
         SomeOtherElement ;          SomeOtherElement ;
         END ;          END ;
 ...</pre>  ...</pre>
 <p>  
 These attributes can be used in the presentation schema to place change bars    <p>These attributes can be used in the presentation schema to place change
 in the margin next to elements whose version attribute has a value equal to    bars in the margin next to elements whose version attribute has a value
 the Document_version attribute of the root and to place a star in margin of    equal to the Document_version attribute of the root and to place a star in
 elements whose version attribute is less than the value of the root's    margin of elements whose version attribute is less than the value of the
 Document_version attribute:</p>    root's Document_version attribute:</p>
 <pre>ATTRIBUTES    <pre>ATTRIBUTES
     version EQUAL Document_version :      version EQUAL Document_version :
         CreateBefore (ChangeBarBox) ;          CreateBefore (ChangeBarBox) ;
     version LESS Document_version :      version LESS Document_version :
Line 4097  Document_version attribute:</p> Line 3630  Document_version attribute:</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4212">Value transmission rules</a></h3>  <h3><a name="sectc4212">Value transmission rules</a></h3>
 <p>  
 The last section of a presentation schema, which is optional, serves to  <p>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>  
 The sub-documents receive these values in attributes which must be defined in  <p>The sub-documents receive these values in attributes which must be defined
 their structure schema as local attributes of the root element.  The types of  in their structure schema as local attributes of the root element.  The types
 these attributes must correspond to the type of the value which they receive:  of these attributes must correspond to the type of the value which they
 numeric attributes for receiving the value of a counter, textual attributes  receive: numeric attributes for receiving the value of a counter, textual
 for receiving the content of an element.</p>  attributes for receiving the content of an element.</p>
 <p>  
 In the structure schema of the primary document, there appears at the end,  <p>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
Line 4122  keyword <tt>To</tt> and the name of the Line 3654  keyword <tt>To</tt> and the name of the
 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>     TransmitSeq   =  Transmit &lt; Transmit > .  <pre>     TransmitSeq   =  Transmit &lt; Transmit &gt; .
      Transmit      =  TypeOrCounter 'To' ExternAttr       Transmit      =  TypeOrCounter 'To' ExternAttr
                       '(' ElemID ')' ';' .                        '(' ElemID ')' ';' .
      TypeOrCounter =  CounterID / ElemID .       TypeOrCounter =  CounterID / ElemID .
      ExternAttr    =  NAME .</pre>       ExternAttr    =  NAME .</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 class.  These classes might have the following schemas:</p>
 document 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 4151  STRUCT Line 3683  STRUCT
           ...            ...
           END;            END;
    ...</pre>     ...</pre>
 <p>  
 Then the presentation schema for books could define chapter and page counters.    <p>Then the presentation schema for books could define chapter and page
 The following transmission rules in the book presentation schema would    counters. The following transmission rules in the book presentation schema
 transmit values for the three attributes defined at the root of each chapter    would transmit values for the three attributes defined at the root of each
 sub-document.</p>    chapter sub-document.</p>
 <pre>PRESENTATION Book;    <pre>PRESENTATION Book;
 VIEWS  VIEWS
    Full_text;     Full_text;
 COUNTERS  COUNTERS
Line 4168  TRANSMIT Line 3700  TRANSMIT
    ChapterCtr TO ChapterNum(Chapter);     ChapterCtr TO ChapterNum(Chapter);
    Title TO CurrentTitle(Chapter);     Title TO CurrentTitle(Chapter);
 END</pre>  END</pre>
 <p>  
 Thus, each chapter included in a book can number its pages as a function of    <p>Thus, each chapter included in a book can number its pages as a function
 the number of pages preceding it in the book, can make the chapter's number    of the number of pages preceding it in the book, can make the chapter's
 appear before the number of each of its sections, or can place the title of    number appear before the number of each of its sections, or can place the
 the book at the top of each page.</p>    title of 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>  <h3><a name="sectc4213">Presentation rules</a></h3>
 <p>  
 Whether defining the appearance of a presentation or page layout box, an  <p>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>  
 Normally, a set of presentation rules is placed between the keywords  <p>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
Line 4194  satisfactory.  If the default rules are Line 3725  satisfactory.  If the default rules are
 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>  
 For each view, it is only necessary to specify those rules which differ from  <p>For each view, it is only necessary to specify those rules which differ
 the default rules for the view, so that for certain views (or even all views),  from the default rules for the view, so that for certain views (or even all
 there may be no specific rules.</p>  views), there may be no specific rules.</p>
 <p>  
 The specific rules for a non-primary view are introduced by the <a  <p>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>  
 <strong>Note:</strong> the view name which follows the <tt>IN</tt> keyword  <p><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>  
 Within each block concerning a view, other blocks can appear, delimited by the  <p>Within each block concerning a view, other blocks can appear, delimited by
 same keywords <tt>BEGIN</tt> and <tt>END</tt>.  Each of these blocks gathers  the same keywords <tt>BEGIN</tt> and <tt>END</tt>.  Each of these blocks
 the presentation rules that apply, for a given view, only when a given  gathers 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>  
 Although the syntax allows any presentation rule to appear in a conditional  <p>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>  
 For a given view, the rules that apply without any condition must appear  <p>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>     ViewRuleSeq  = 'BEGIN' &lt; RulesAndCond > &lt; ViewRules >  <pre>     ViewRuleSeq  = 'BEGIN' &lt; RulesAndCond &gt; &lt; ViewRules &gt;
                     'END' ';' /                      'END' ';' /
                     ViewRules / CondRules / Rule .                      ViewRules / CondRules / Rule .
      RulesAndCond = CondRules / Rule .       RulesAndCond = CondRules / Rule .
      ViewRules    = 'IN' ViewID CondRuleSeq .       ViewRules    = 'IN' ViewID CondRuleSeq .
      CondRuleSeq  = 'BEGIN' &lt; RulesAndCond > 'END' ';' /       CondRuleSeq  = 'BEGIN' &lt; RulesAndCond &gt; 'END' ';' /
                     CondRules / Rule .                      CondRules / Rule .
      CondRules    = CondRule &lt; CondRule >       CondRules    = CondRule &lt; CondRule &gt;
                     [ 'Otherwise' RuleSeq ] .                      [ 'Otherwise' RuleSeq ] .
      CondRule     = 'IF' ConditionSeq RuleSeq .       CondRule     = 'IF' ConditionSeq RuleSeq .
      RulesSeq     = 'BEGIN' Rule &lt; Rule > 'END' ';' /       RulesSeq     = 'BEGIN' Rule &lt; Rule &gt; 'END' ';' /
                     Rule .</pre>                      Rule .</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
 The following rules for a report's title make the title visible in the primary    primary view and invisible in the table of contents and in the formula views
 view and invisible in the table of contents and in the formula views (see the    (see the <a href="#sectc4224"><tt>Visibility</tt> rule</a>).</p>
 <a href="#sectc4224"><tt>Visibility</tt> rule</a>).</p>    <pre>Title : BEGIN
 <pre>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
Line 4257  view and invisible in the table of conte Line 3788  view and invisible in the table of conte
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4214">Conditions applying to presentation rules</a></h3>  <h3><a name="sectc4214">Conditions applying to presentation rules</a></h3>
 <p>  
 Many conditions can be applied to presentation rules.  Conditions allow  <p>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>  
 It is possible to specify several conditions which must all be true for the  <p>It is possible to specify several conditions which must all be true for the
 rules to apply.</p>  rules to apply.</p>
 <p>  
 A set of conditions is specified by the <tt>IF</tt> keyword.  This keyword is  <p>A set of conditions is specified by the <tt>IF</tt> keyword.  This keyword
 followed by the sequence of conditions, separated by the <tt>AND</tt> keyword.  is followed by the sequence of conditions, separated by the <tt>AND</tt>
 Each condition is specified by a keyword which defines the condition type. In  keyword. Each condition is specified by a keyword which defines the condition
 some cases, the keyword is followed by other data, which specify the condition  type. In some cases, the keyword is followed by other data, which specify the
 more precisely.</p>  condition more precisely.</p>
 <p>  
 An elementary condition can be negative; it is then preceded by the  <p>An elementary condition can be negative; it is then preceded by the
 <tt>NOT</tt> keyword.</p>  <tt>NOT</tt> keyword.</p>
 <p>  
 When the presentation rule(s) controlled by the condition apply to a reference  <p>When the presentation rule(s) controlled by the condition apply to a
 element or a reference attribute, an elementary condition can also apply to  reference element or a reference attribute, an elementary condition can also
 element referred by this reference.  The <tt>Target</tt> keyword is used for  apply to element referred by this reference.  The <tt>Target</tt> keyword is
 that purpose.  It must appear before the keyword defining the condition  used for that purpose.  It must appear before the keyword defining the
 type.</p>  condition type.</p>
 <pre>     CondRule      ='IF' ConditionSeq RuleSeq .  <pre>     CondRule      ='IF' ConditionSeq RuleSeq .
      ConditionSeq  = Condition &lt; 'AND' Condition > .       ConditionSeq  = Condition &lt; 'AND' Condition &gt; .
      Condition     = [ 'NOT' ] [ 'Target' ] ConditionElem .       Condition     = [ 'NOT' ] [ 'Target' ] ConditionElem .
      ConditionElem ='First' / 'Last' /       ConditionElem ='First' / 'Last' /
                      [ 'Immediately' ] 'Within' [ NumParent ]                       [ 'Immediately' ] 'Within' [ NumParent ]
Line 4299  type.</p> Line 3829  type.</p>
                     '(' [ MinMax ] CounterName CounterCond ')' /                      '(' [ MinMax ] CounterName CounterCond ')' /
                      CondPage '(' CounterID ')' .                       CondPage '(' CounterID ')' .
      NumParent     = [ GreaterLess ] NParent .       NumParent     = [ GreaterLess ] NParent .
      GreaterLess   ='>' / '&lt;' .       GreaterLess   ='&gt;' / '&lt;' .
      NParent       = NUMBER.       NParent       = NUMBER.
      ExtStruct     ='(' ElemID ')' .       ExtStruct     ='(' ElemID ')' .
      CounterCond   ='&lt;' MaxCtrVal / '>' MinCtrVal /       CounterCond   ='&lt;' MaxCtrVal / '&gt;' MinCtrVal /
                     '=' EqCtrVal /                       '=' EqCtrVal / 
                     'IN' '[' ['-'] MinCtrBound '.' '.'                      'IN' '[' ['-'] MinCtrBound '.' '.'
                      ['-'] MaxCtrBound ']' .                       ['-'] MaxCtrBound ']' .
Line 4314  type.</p> Line 3844  type.</p>
      MinCtrBound   = NUMBER .</pre>       MinCtrBound   = NUMBER .</pre>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42141">Conditions based on the logical position of the  <h4><a name="sectd42141">Conditions based on the logical position of the
 element</a></h4>  element</a></h4>
 <p>  
 The condition can be on the position of the element in the document's logical  <p>The condition can be on the position of the element in the document's
 structure tree.  It is possible to test whether the element is the first  logical structure tree.  It is possible to test whether the element is the
 (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is not  first (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is
 the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>). These  not 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>  
 It is also possible to test if the element is contained in an element of a  <p>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>  
 If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the  <p>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>  
 An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the  <p>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>&gt;</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 &gt; 0.</p>
 <p>  
 If the condition applies to presentation rules associated with an attribute,  <p>If the condition applies to presentation rules associated with an
 in the <tt>ATTRIBUTES</tt> section of the presentation schema, the condition  attribute, in the <tt>ATTRIBUTES</tt> section of the presentation schema, the
 can be simply an element name. Presentation rules are then executed only if  condition can be simply an element name. Presentation rules are then executed
 the attribute is attached to an element of that type. The keyword <tt>NOT</tt>  only if the attribute is attached to an element of that type. The keyword
 before the element name indicates that the presentation rules must be executed  <tt>NOT</tt> before the element name indicates that the presentation rules
 only if the element is not of the type indicated.</p>  must be executed 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>  <h4><a name="sectd42142">Conditions on references</a></h4>
 <p>  
 References may be taken into account in conditions, which can be based on the  <p>References may be taken into account in conditions, which can be based on
 fact that the element, or one of its ancestors, is designated by a at least  the fact that the element, or one of its ancestors, is designated by a at
 one reference (<tt>Referred</tt>) or by none (<tt>NOT Referred</tt>).</p>  least one reference (<tt>Referred</tt>) or by none (<tt>NOT
 <p>  Referred</tt>).</p>
 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  <p>If the element or attribute to which the condition is attached is a
 the designated element (<tt>FirstRef</tt>), or as the last (<tt>LastRef</tt>),  reference, the condition can be based on the fact that it acts as the first
 or as a reference to an element located in another document  reference to the designated element (<tt>FirstRef</tt>), or as the last
 (<tt>ExternalRef</tt>) or in the same document (<tt>InternalRef</tt>).</p>  (<tt>LastRef</tt>), or as a reference to an element located in another
 <p>  document (<tt>ExternalRef</tt>) or in the same document
 The condition can also be based on the fact that the element is an <a  (<tt>InternalRef</tt>).</p>
   
   <p>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>  
 Like all conditions, conditions on references can be inverted by the  <p>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>  <h4><a name="sectd42143">Conditions on logical attributes</a></h4>
 <p>  
 The condition can be based on the presence or absence of attributes associated  <p>The condition can be based on the presence or absence of attributes
 with the element, no matter what the attributes or their values. The  associated with the element, no matter what the attributes or their values.
 <tt>AnyAttributes</tt> keyword expresses this condition.</p>  The <tt>AnyAttributes</tt> keyword expresses this condition.</p>
 <p>  
 If the condition appears in the presentation rules of an attribute, the  <p>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>  
 It is also possible to apply certain presentation rules only when the element  <p>It is also possible to apply certain presentation rules only when the
 being processed or one of its ancestors has a certain attribute, perhaps with  element being processed or one of its ancestors has a certain attribute,
 a certain value.  This can be done in the <a  perhaps with 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>  <h4><a name="sectd42144">Conditions on page breaks</a></h4>
 <p>  
 The page break base type (and only this type) can use the following  <p>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>  
 These conditions can be associated only with <a href="#sectc4232">creation  <p>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>  <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  <p>The condition can be based on whether or not the element is empty.  An
 which has no children or whose leaves are all empty is considered to be empty  element which has no children or whose leaves are all empty is considered to
 itself.  This condition is expressed by the <tt>Empty</tt> keyword, optionally  be empty itself.  This condition is expressed by the <tt>Empty</tt> keyword,
 preceded by the <tt>NOT</tt> keyword. This condition can be associated only  optionally preceded by the <tt>NOT</tt> keyword. This condition can be
 with <a href="#sectc4232">creation rules</a>.</p>  associated only 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>  <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,  <p>Presentation rules can apply when the counter's value is one, is even or
 is equal, greater than or less than a given value or falls in a range of  odd, 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>  
 To compare the value of a counter to a given value, a comparison is given  <p>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
Line 4443  in a range also appears within parenthes Line 3969  in a range also appears within parenthes
 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>  
 The list of possible conditions on counters is:</p>  <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>      <dd>the box is created only if the counter has an even value.</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.</dd>
 <dt><tt>Odd (Counter)</tt></dt>    <dt><tt>One (Counter)</tt></dt>
 <dd>      <dd>the box is created only the counter's value is 1.</dd>
 the box is created only if the counter has an odd value.    <dt><tt>NOT One (Counter)</tt></dt>
 </dd>      <dd>the box is created, unless the counter's value is 1.</dd>
 <dt><tt>One (Counter)</tt></dt>    <dt><tt>(Counter &lt; Value)</tt></dt>
 <dd>      <dd>the box is created only if the counter's value is less than
 the box is created only the counter's value is 1.      Value.</dd>
 </dd>    <dt><tt>(Counter &gt; Value)</tt></dt>
 <dt><tt>NOT One (Counter)</tt></dt>      <dd>the box is created only if the counter's value is greater than
 <dd>      Value.</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 equal to Value.</dd>
 <dt><tt>(Counter &lt; Value)</tt></dt>    <dt><tt>NOT (Counter = Value)</tt></dt>
 <dd>      <dd>the is created only if the counter's value is different than
 the box is created only if the counter's value is less than Value.      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
 <dd>        bounded by MinValue and MaxValue (inclusive).</dd>
 the box is created only if the counter's value is greater than Value.    <dt><tt>NOT (Counter IN [MinValue..MaxValue])</tt></dt>
 </dd>      <dd>the box is created only if the value of the counter does not fall in
 <dt><tt>(Counter = Value)</tt></dt>        the range bounded by MinValue and MaxValue (inclusive).</dd>
 <dd>  
 the box is created only if the counter's value is equal to Value.  
 </dd>  
 <dt><tt>NOT (Counter = Value)</tt></dt>  
 <dd>  
 the is created only if the counter's value is different than Value.  
 </dd>  
 <dt><tt>(Counter IN [MinValue..MaxValue])</tt></dt>  
 <dd>  
 the box is created only if the counter's value falls in the range bounded by  
 MinValue and MaxValue (inclusive).  
 </dd>  
 <dt><tt>NOT (Counter IN [MinValue..MaxValue])</tt></dt>  
 <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>  </dl>
 <p>  
 <strong>Note:</strong> the <tt>NOT Even</tt> and <tt>NOT Odd</tt> conditions  <p><strong>Note:</strong> the <tt>NOT Even</tt> and <tt>NOT Odd</tt>
 are syntactically correct but can be expressed more simply by <tt>Odd</tt> and  conditions are syntactically correct but can be expressed more simply by
 <tt>Even</tt>, respectively.</p>  <tt>Odd</tt> and <tt>Even</tt>, respectively.</p>
 </div>  </div>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4215">A presentation rule</a></h3>  <h3><a name="sectc4215">A presentation rule</a></h3>
 <p>  
 A presentation rule defines either a presentation parameter or presentation  <p>A presentation rule defines either a presentation parameter or presentation
 function.  The parameters are:</p>  function.  The parameters are:</p>
 <ul>  <ul>
 <li>    <li>the position of the vertical and horizontal reference axes of the
 the position of the vertical and horizontal reference axes of the box,    box,</li>
 </li>    <li>the position of the box in relation to other boxes,</li>
 <li>    <li>the height or width of the box, with overflow exceptions,</li>
 the position of the box in relation to other boxes,    <li>the margins, padding and borders of the box,</li>
 </li>    <li>the characteristics of the lines contained in the box: linespacing,
 <li>      indentation of the first line, justification, hyphenation,</li>
 the height or width of the box, with overflow exceptions,    <li>the conditions for breaking the box across pages,</li>
 </li>    <li>the characteristics of the characters contained in the box: size, font,
 <li>      style, underlining,</li>
 the margins, padding and borders of the box,    <li>the depth of the box among overlapping boxes (often called stacking
 </li>      order),</li>
 <li>    <li>the characteristics of graphic elements contained in the box: style and
 the characteristics of the lines contained in the box: linespacing,      thickness of lines, fill pattern for closed objects,</li>
 indentation of the first line, justification, hyphenation,    <li>the colors in text, graphics, pictures, and symbols contained in the box
 </li>      are displayed or printed,</li>
 <li>    <li>for presentation boxes only, the contents of the box.</li>
 the conditions for breaking the box across pages,  </ul>
 </li>  
 <li>  <p>The <a name="presfunct">presentation functions</a> are:</p>
 the characteristics of the characters contained in the box: size, font, style,  <ul>
 underlining,    <li>the creation of a presentation box</li>
 </li>    <li>the line-breaking or page-breaking style,</li>
 <li>    <li>the copying of another box,</li>
 the depth of the box among overlapping boxes (often called stacking order),    <li>the display of the box background and border,</li>
 </li>    <li>the display of a background picture and its aspect.</li>
 <li>  </ul>
 the characteristics of graphic elements contained in the box: style and  
 thickness of lines, fill pattern for closed objects,  <p>For each box and each view, every presentation parameter is defined once
 </li>  and only once, either explicitly or by the <a href="#sectc427">default
 <li>  rules</a>. In contrast, presentation functions are not obligatory and can
 the colors in text, graphics, pictures, and symbols contained in the box are  appear many times for the same element.  for example an element can create
 displayed or printed,  many presentation boxes.  Another element may not use any presentation
 </li>  
 <li>  
 for presentation boxes only, the contents of the box.  
 </li>  
 </ul>  
 <p>  
 The <a name="presfunct">presentation functions</a> are:</p>  
 <ul>  
 <li>  
 the creation of a presentation box  
 </li>  
 <li>  
 the line-breaking or page-breaking style,  
 </li>  
 <li>  
 the copying of another box,  
 </li>  
 <li>  
 the display of the box background and border,  
 </li>  
 <li>  
 the display of a background picture and its aspect.  
 </li>  
 </ul>  
 <p>  
 For each box and each view, every presentation parameter is defined once and  
 only once, either explicitly or by the <a href="#sectc427">default rules</a>.  
 In contrast, presentation functions are not obligatory and can appear many  
 times for the same element.  for example an element can create many  
 presentation boxes.  Another element may not use any presentation  
 functions.</p>  functions.</p>
 <p>  
 Each rule defining a presentation parameter begins with a keyword followed by  <p>Each rule defining a presentation parameter begins with a keyword followed
 a colon.  The keyword indicates the parameter which is the subject of the  by a colon.  The keyword indicates the parameter which is the subject of the
 rule. After the keyword and the colon, the remainder of the rule varies.  All  rule. After the keyword and the colon, the remainder of the rule varies.  All
 rules are terminated by a semicolon.</p>  rules are terminated by a semicolon.</p>
 <pre>     Rule      = PresParam ';' / PresFunc ';' .  <pre>     Rule      = PresParam ';' / PresFunc ';' .
Line 4637  rules are terminated by a semicolon.</p> Line 4115  rules are terminated by a semicolon.</p>
 </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>  
 The position of the middle axes <tt>VMiddle</tt> and <tt>HMiddle</tt> in  <p>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>  
 The reference axes of a box are also used to position their box in relation to  <p>The reference axes of a box are also used to position their box in relation
 another, but in contrast to the middle axes, the presentation schema must make  to another, but in contrast to the middle axes, the presentation schema must
 their position explicit, either in relation to a side or the middle axis of  make their position explicit, either in relation to a side or the middle axis
 the box itself, or in relation to an axis of an enclosed box.</p>  of the box itself, or in relation to an axis of an enclosed box.</p>
 <p>  
 Only boxes of base elements have predefined reference axes.  For character  <p>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>  
 The positions of a box's reference axes are defined by the <tt>VertRef</tt>  <p>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>               'VertRef'  ':' PositionHoriz  <pre>               'VertRef'  ':' PositionHoriz
                'HorizRef' ':' PositionVert</pre>                 'HorizRef' ':' PositionVert</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>If, in the structure schema for mathematical formulas, the fraction
 If, in the structure schema for mathematical formulas, the fraction element is    element is defined by</p>
 defined by</p>    <pre>Fraction = BEGIN
 <pre>Fraction = BEGIN  
            Numerator   = Expression;             Numerator   = Expression;
            Denominator = Expression;             Denominator = Expression;
            END;</pre>             END;</pre>
 <p>  
 then the horizontal reference axis of the fraction can be positioned on top of    <p>then the horizontal reference axis of the fraction can be positioned on
 the denominator by the rule:</p>    top of the denominator by the rule:</p>
 <pre>Fraction :    <pre>Fraction :
      BEGIN       BEGIN
      HorizRef : Enclosed Denominator . Top;       HorizRef : Enclosed Denominator . Top;
      ...       ...
      END;</pre>       END;</pre>
 <p>  
 To put the horizontal reference axis of a column at its middle:</p>    <p>To put the horizontal reference axis of a column at its middle:</p>
 <pre>Column :    <pre>Column :
      BEGIN       BEGIN
      HorizRef : * . HMiddle;       HorizRef : * . HMiddle;
      ...       ...
Line 4694  To put the horizontal reference axis of Line 4171  To put the horizontal reference axis of
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4217">Distance units</a></h3>  <h3><a name="sectc4217">Distance units</a></h3>
 <p>  
 Some distances and dimensions appear in many rules of a presentation schema,  <p>Some distances and dimensions appear in many rules of a presentation
 especially in position rules (<tt>VertPos, HorizPos</tt>), in extent rules for  schema, especially in position rules (<tt>VertPos, HorizPos</tt>), in extent
 boxes (<tt>Height, Width</tt>), in rules defining lines (<tt>LineSpacing,  rules for boxes (<tt>Height, Width</tt>), in rules defining lines
 Indent</tt>), in rules controlling pagination (<tt>NoBreak1, NoBreak2</tt>)  (<tt>LineSpacing, Indent</tt>), in rules controlling pagination (<tt>NoBreak1,
 and in rules specifying the thickness of strokes (<tt>LineWeight</tt>).</p>  NoBreak2</tt>) and in rules specifying the thickness of strokes
 <p>  (<tt>LineWeight</tt>).</p>
 In all these rules, the distance or extent can be expressed</p>  
 <ul>  <p>In all these rules, the distance or extent can be expressed</p>
 <li>  <ul>
 either in relative units, which depend on the size of the characters in the    <li>either in relative units, which depend on the size of the characters in
 current font: height of the element's font or height of the letter 'x',      the current font: height of the element's font or height of the letter
 </li>      'x',</li>
 <li>    <li>or in absolute units: centimeter, millimeter, inch, typographer's point,
 or in absolute units: centimeter, millimeter, inch, typographer's point, pica      pica or pixel.</li>
 or pixel.  </ul>
 </li>  
 </ul>  <p>Units can be chosen freely.  Thus, it is possible to use relative units in
 <p>  one rule, centimeters in the next rule, and typographer's points in
 Units can be chosen freely.  Thus, it is possible to use relative units in one  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.
 Absolute units are used to set rigid rules for the appearance of documents. In  In contrast, relative units allow changes of scale.  The editor lets the value
 contrast, relative units allow changes of scale.  The editor lets the value of  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>  
 A <a name="distance">distance</a> or extent is specified by a number, which  <p>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>    <li><tt>em</tt>: height of the element's font,</li>
 <tt>em</tt>: height of the element's font,    <li><tt>ex</tt>: height of the letter 'x',</li>
 </li>    <li><tt>cm</tt>: centimeter,</li>
 <li>    <li><tt>mm</tt>: millimeter,</li>
 <tt>ex</tt>: height of the letter 'x',    <li><tt>in</tt>: inch (1 in = 2.54 cm),</li>
 </li>    <li><tt>pt</tt>: point (1 pt = 1/72 in),</li>
 <li>    <li><tt>pc</tt>: pica (1 pc = 12 pt),</li>
 <tt>cm</tt>: centimeter,    <li><tt>px</tt>: pixel.</li>
 </li>  
 <li>  
 <tt>mm</tt>: millimeter,  
 </li>  
 <li>  
 <tt>in</tt>: inch (1 in = 2.54 cm),  
 </li>  
 <li>  
 <tt>pt</tt>: point (1 pt = 1/72 in),  
 </li>  
 <li>  
 <tt>pc</tt>: pica (1 pc = 12 pt),  
 </li>  
 <li>  
 <tt>px</tt>: pixel.  
 </li>  
 </ul>  </ul>
 <p>  
 Whatever the chosen unit, relative or absolute, the number is not necessarily  <p>Whatever the chosen unit, relative or absolute, the number is not
 an integer and may be expressed in fixed point notation (using the American  necessarily an integer and may be expressed in fixed point notation (using the
 convention of a period to express the decimal point).</p>  American convention of a period to express the decimal point).</p>
 <p>  
 If the distance appears in a presentation rule for a numeric attribute, the  <p>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.
Line 4776  However, the choice of units is limited Line 4235  However, the choice of units is limited
      DecimalPart   = NUMBER .       DecimalPart   = NUMBER .
      Unit          ='em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /       Unit          ='em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /
                     'pc' / 'px' / '%' .</pre>                      'pc' / 'px' / '%' .</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
 The following rules specify that a box has a height of 10.5 centimeters and a    and a width of 5.3 ems:</p>
 width of 5.3 ems:</p>    <pre>Height : 10.5 cm;
 <pre>Height : 10.5 cm;  
 Width  : 5.3;</pre>  Width  : 5.3;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4218">Relative positions</a></h3>  <h3><a name="sectc4218">Relative positions</a></h3>
 <p>  
 The positioning of boxes uses the eight axes and sides, the sides generally  <p>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>  
 Two rules allow a box to be placed relative to other boxes.  The  <p>Two rules allow a box to be placed relative to other boxes.  The
 <tt>VertPos</tt> rule positions the box vertically.  The <tt>HorizPos</tt>  <tt>VertPos</tt> rule positions the box vertically.  The <tt>HorizPos</tt>
 rule positions the box horizontally.  It is possible that a box's position  rule positions the box horizontally.  It is possible that a box's position
 could be entirely determined by other boxes positioned relative to it. In this  could be entirely determined by other boxes positioned relative to it. In this
Line 4815  box.</p> Line 4273  box.</p>
                  [ 'UserSpecified' ].                   [ 'UserSpecified' ].
      VertAxis  = 'Left' / 'VMiddle' / 'VRef' / 'Right' .       VertAxis  = 'Left' / 'VMiddle' / 'VRef' / 'Right' .
      HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .</pre>       HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .</pre>
 <p>  
 The reference box is an adjacent box: enclosing, enclosed or adjacent. When a  <p>The reference box is an adjacent box: enclosing, enclosed or adjacent. When
 rule is associated with a reference type attribute (and only in this case), it  a rule is associated with a reference type attribute (and only in this case),
 can be a box of the element designated by the attribute.  The reference box  it 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>  
 The structural position of the reference box (relative to the box for which  <p>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
Line 4832  which the reference points to.  The keyw Line 4290  which the reference points to.  The keyw
 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>  
 When the keyword is ambiguous, it is followed by the name of an element type  <p>When the keyword is ambiguous, it is followed by the name of an element
 or presentation box which resolves the ambiguity (the <tt>Creator</tt> and  type or presentation box which resolves the ambiguity (the <tt>Creator</tt>
 <tt>Root</tt> keywords are never ambiguous).  If this name is not given, then  and <tt>Root</tt> keywords are never ambiguous).  If this name is not given,
 the first box encountered is used as the reference box. It is also possible to  then the first box encountered is used as the reference box. It is also
 use just the name of an element type or presentation box without an initial  possible to use just the name of an element type or presentation box without
 keyword. In this case, a sibling having that name will be used.  If the name  an initial keyword. In this case, a sibling having that name will be used.  If
 is preceded by the keyword <tt>NOT</tt>, then the reference box will be the  the name is preceded by the keyword <tt>NOT</tt>, then the reference box will
 first box whose type is not the named one.</p>  be the first box whose type is not the named one.</p>
 <p>  
 In place of the box or type name, the keywords <tt>AnyElem</tt>,  <p>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>.</p>  <tt>ElemWithAttr</tt>.</p>
 <p>  
 A type name may be preceded by a star in order to resolve the ambiguity in the  <p>A type name may be preceded by a star in order to resolve the ambiguity in
 special case where the structure schema defines an <a  the 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  href="#sectd3285">mark pairs</a>) the type name <em>must</em> be preceded by
 the <tt>First</tt> or <tt>Second</tt> keyword, which indicates which of the  the <tt>First</tt> or <tt>Second</tt> keyword, which indicates which of the
 two 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>  
 The star character ('<tt>*</tt>') used alone designates the box to which the  <p>The star character ('<tt>*</tt>') used alone designates the box to which
 rule applies (in this case, it is obviously useless to specify the type of the  the rule applies (in this case, it is obviously useless to specify the type of
 reference box).</p>  the reference box).</p>
 <p>  
 The keywords <tt>Enclosing</tt> and <tt>Enclosed</tt> can be used no matter  <p>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
Line 4871  aggregate.  It can also be used to desig Line 4329  aggregate.  It can also be used to desig
 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>  
 In the position rule, the structural position relative to the reference box is  <p>In the position rule, the structural position relative to the reference box
 followed, after a period, by the name of an axis or side.  The rule specifies  is followed, after a period, by the name of an axis or side.  The rule
 its node's position as being some distance from this axis or side of the  specifies its node's position as being some distance from this axis or side of
 reference box.  If this distance is zero, then the distance does not appear in  the reference box.  If this distance is zero, then the distance does not
 the rule.  Otherwise, it does appear as a positive or negative number (the  appear in the rule.  Otherwise, it does appear as a positive or negative
 sign is required for negative numbers). The sign takes into account the  number (the sign is required for negative numbers). The sign takes into
 orientation of the coordinate axes: for top to bottom for the vertical axis  account the orientation of the coordinate axes: for top to bottom for the
 and from left to right for the horizontal axis.  Thus, a negative distance in  vertical axis and from left to right for the horizontal axis.  Thus, a
 a vertical position indicates that the side or axis specified in the rule is  negative distance in a vertical position indicates that the side or axis
 above the side or axis of the reference box.</p>  specified in the rule is above the side or axis of the reference box.</p>
 <p>  
 The distance can be followed by the <tt>UserSpecified</tt> keyword (even if  <p>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,
Line 4907  rule, the horizontal position rule, or b Line 4365  rule, the horizontal position rule, or b
                     'AnyElem' / 'AnyBox' /                      'AnyElem' / 'AnyBox' /
                     'ElemWithAttr' AttrID .                      'ElemWithAttr' AttrID .
      BoxTypeNot    = [ 'NOT' ] BoxOrType .</pre>       BoxTypeNot    = [ 'NOT' ] BoxOrType .</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 structure    schema:</p>
 schema:</p>    <pre>Report = BEGIN
 <pre>Report = BEGIN  
          Title  = Text;           Title  = Text;
          Summary = Text;           Summary = Text;
          Keywords = Text;           Keywords = Text;
          ...           ...
          END;</pre>           END;</pre>
 <p>  
 then the presentation schema could contain the rules:</p>    <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;</pre>           END;</pre>
 <p>  
 These rules place the <a name="reportexample">report</a> in the upper left    <p>These rules place the <a name="reportexample">report</a> in the upper
 corner of the enclosing box, which is the window in which the document is    left corner of the enclosing box, which is the window in which the document
 being edited.</p>    is being 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;</pre>           END;</pre>
 <p>  
 The top of the title is one line (a line has the height of the characters of    <p>The top of the title is one line (a line has the height of the characters
 the title) from the top of the report, which is also the top of the editing    of the title) from the top of the report, which is also the top of the
 window.  The title is centered horizontally in the window (see <a    editing window.  The title is centered horizontally in the window (see <a
 href="#posdim">figure</a>).</p>    href="#posdim">figure</a>).</p>
 <pre>Summary : BEGIN    <pre>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;</pre>            END;</pre>
 <p>  
 The top of the summary is place a line and a half below the bottom of the    <p>The top of the summary is place a line and a half below the bottom of the
 title and is shifted two centimeters from the side of the window.</p>    title 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 graphical elements:</p>
 contains graphical elements:</p>    <pre>Design = LIST OF (ElemGraph = GRAPHICS);</pre>
 <pre>Design = LIST OF (ElemGraph = GRAPHICS);</pre>  
 <p>    <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>ElemGraph =
 <pre>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;</pre>     END;</pre>
 <p>  
 Thus, when a graphical element is created, its default placement is at the    <p>Thus, when a graphical element is created, its default placement is at
 left of the window and 1 cm from the top, but the user can move it    the left of the window and 1 cm from the top, but the user can move it
 immediately, simply by moving the mouse.</p>    immediately, simply by moving the mouse.</p>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4219">Box extents</a></h3>  <h3><a name="sectc4219">Box extents</a></h3>
 <p>  
 The extents (height and width) of each box are defined by the two rules  <p>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>  <h4><a name="sectd42191">Fixed extents</a></h4>
 <p>  
 A fixed dimension sets the height or width of the box independently of all  <p>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
Line 4992  will ask the user to specify the extent Line 4448  will ask the user to specify the extent
 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>  
 A fixed extent rule can be ended by the <tt>Min</tt> keyword, which signifies  <p>A fixed extent rule can be ended by the <tt>Min</tt> keyword, which
 that the indicated value is a minimum, and that, if the contents of the box  signifies that the indicated value is a minimum, and that, if the contents of
 require it, a larger extent is possible.</p>  the box require it, a larger extent is possible.</p>
 <pre>                'Height' ':' Dimension  <pre>                '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
 Continuing with the <a href="#expos2">previous example</a>, it is possible to    possible to allow the user to choose the size of each graphical element as
 allow the user to choose the size of each graphical element as it is    it is created:</p>
 created:</p>    <pre>ElemGraph : BEGIN
 <pre>ElemGraph : BEGIN  
             Width :  2 cm UserSpecified;              Width :  2 cm UserSpecified;
             Height : 1 cm UserSpecified;              Height : 1 cm UserSpecified;
             ...              ...
             END;</pre>              END;</pre>
 <p>  
 Thus, when a graphical element is create, it is drawn by default with a width    <p>Thus, when a graphical element is create, it is drawn by default with a
 of 2 cm and a height of 1 cm, but the user is free to resize it immediately    width of 2 cm and a height of 1 cm, but the user is free to resize it
 with the mouse.</p>    immediately with the mouse.</p>
 <pre>Summary :  BEGIN    <pre>Summary :  BEGIN
            Height : 5 cm Min;             Height : 5 cm Min;
            ...             ...
            END;             END;
Line 5028  Keywords : BEGIN Line 4484  Keywords : BEGIN
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42192">Relative extents</a></h4>  <h4><a name="sectd42192">Relative extents</a></h4>
 <p>  
 A relative extent determines the extent as a function of the extent of another  <p>A relative extent determines the extent as a function of the extent of
 box, just as a relative position places a box in relation to another. The  another box, just as a relative position places a box in relation to another.
 reference box in an extent rule is designated using the same syntax as is used  The reference box in an extent rule is designated using the same syntax as is
 in a relative position rule.  It is followed by a period and a <tt>Height</tt>  used in a relative position rule.  It is followed by a period and a
 or <tt>Width</tt> keyword, depending on the extent being referred to.  Next  <tt>Height</tt> or <tt>Width</tt> keyword, depending on the extent being
 comes the relation between the extent being defined and the extent of the  referred to.  Next comes the relation between the extent being defined and the
 reference box.  This relation can be either a percentage or a difference.</p>  extent of the reference box.  This relation can be either a percentage or a
 <p>  difference.</p>
 A percentage is indicated by a star (the multiplication symbol) followed by  
   <p>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>  
 If the rule appears in the presentation rules of a numeric attribute, the  <p>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>  
 Just as with a fixed extent, a relative extent rule can end with the  <p>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>  
 A special case of relative extent rules is:</p>  <p>A special case of relative extent rules is:</p>
 <pre>Height : Enclosed . Height;</pre>  <pre>Height : Enclosed . Height;</pre>
 <p>  
 or</p>  <p>or</p>
 <pre>Width  : Enclosed . Width;</pre>  <pre>Width  : Enclosed . Width;</pre>
 <p>  
 which specifies that the box has a height (or width) such that it encloses all  <p>which specifies that the box has a height (or width) such that it encloses
 the boxes which it contains, excluding boxes having a rule <tt>VertOverflow:  all the boxes which it contains, excluding boxes having a rule
 Yes;</tt> or <tt>HorizOverflow: Yes;</tt>.</p>  <tt>VertOverflow: Yes;</tt> or <tt>HorizOverflow: Yes;</tt>.</p>
 <p>  
 <strong>Note:</strong> character strings (type <tt>TEXT_UNIT</tt>) generally  <p><strong>Note:</strong> character strings (type <tt>TEXT_UNIT</tt>)
 must use the sum of the widths of the characters which compose them as their  generally must use the sum of the widths of the characters which compose them
 width, which is expressed by the rule:</p>  as their width, which is expressed by the rule:</p>
 <pre>TEXT_UNIT :  <pre>TEXT_UNIT :
      Width : Enclosed . Width;</pre>       Width : Enclosed . Width;</pre>
 <p>  
 If this rule is not the default <tt>Width</tt> rule, it must be given  <p>If this rule is not the default <tt>Width</tt> rule, it must be given
 explicitly in the <tt>RULES</tt> section which defines the presentation rules  explicitly in the <tt>RULES</tt> section which defines the presentation rules
 of the logical elements.</p>  of the logical elements.</p>
 <pre>                  'Height' ':' Extent  <pre>                  'Height' ':' Extent
Line 5080  of the logical elements.</p> Line 4536  of the logical elements.</p>
      Relation    ='*' ExtentAttr '%' / Distance .       Relation    ='*' ExtentAttr '%' / Distance .
      ExtentAttr  = ExtentVal / AttrID .       ExtentAttr  = ExtentVal / AttrID .
      ExtentVal   = NUMBER .</pre>       ExtentVal   = NUMBER .</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
 Completing the <a href="#expos1">above example</a>, it is possible to specify    specify that the report takes its width from the editing window and its
 that the report takes its width from the editing window and its height from    height from the size of its contents (this can obviously be greater than
 the size of its contents (this can obviously be greater than that of the    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;</pre>            END;</pre>
 <p>  
 Then, the following rules make the title occupy 60% of the width of the report    <p>Then, the following rules make the title occupy 60% of the width of the
 (which is that of the window) and is broken into centered lines of this width    report (which is that of the window) and is broken into centered lines of
 (see the <a href="#sectc4222"><tt>Line</tt> rule</a>).</p>    this width (see the <a href="#sectc4222"><tt>Line</tt> rule</a>).</p>
 <pre>Title :   BEGIN    <pre>Title :   BEGIN
           Width : Enclosing . Width * 60%;            Width : Enclosing . Width * 60%;
           Height : Enclosed . Height;            Height : Enclosed . Height;
           Line;            Line;
           Adjust : VMiddle;            Adjust : VMiddle;
           ...            ...
           END;</pre>            END;</pre>
 <p>  
 The summary occupy the entire width of the window, with the exception of a 2    <p>The summary occupy the entire width of the window, with the exception of
 cm margin reserved by the horizontal position rule:</p>    a 2 cm 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;</pre>            END;</pre>
 <p>  
 This set of rules, plus the <a href="#reportexample">position rules given  
 above</a>, produce the layout of boxes shown in the following<a  
 href="#posdim">figure</a>.</p>  
   
 <div class="figure">  
 <hr>  
   
 <pre>-------------------------------------------------------------    <p>This set of rules, plus the <a href="#reportexample">position rules given
     above</a>, produce the layout of boxes shown in the following<a
     href="#posdim">figure</a>.</p>
   
     <div class="figure">
     <hr>
     <pre>-------------------------------------------------------------
 | Window and Report           ^                             |  | Window and Report           ^                             |
 |                             | 1 line                      |  |                             | 1 line                      |
 |                             v                             |  |                             v                             |
 |           -------------------------------------           |  |           -------------------------------------           |
 |           |                                   |           |  |           |                                   |           |
 :    20%    :               Title               :    20%    :  :    20%    :               Title               :    20%    :
 :&lt;--------->:                                   :&lt;--------->:  :&lt;---------&gt;:                                   :&lt;---------&gt;:
 :           :                60%                :           :  :           :                60%                :           :
 :           :&lt;--------------------------------->:           :  :           :&lt;---------------------------------&gt;:           :
 |           |                                   |           |  |           |                                   |           |
 |           -------------------------------------           |  |           -------------------------------------           |
 |                             ^                             |  |                             ^                             |
Line 5138  href="#posdim">figure</a>.</p> Line 4593  href="#posdim">figure</a>.</p>
 |                             v                             |  |                             v                             |
 |        ---------------------------------------------------|  |        ---------------------------------------------------|
 |  2 cm  |                                                  |  |  2 cm  |                                                  |
 |&lt;------>|                    Summary                       |  |&lt;------&gt;|                    Summary                       |
 :        :                                                  :</pre>  :        :                                                  :</pre>
 <p align="center">  
 <em><a name="posdim">Box position and extent</a><em></em></em></p>  
 <hr>  
   
 </div>    <p align="center"><em><a name="posdim">Box position and
     extent</a><em></em></em></p>
     <hr>
     </div>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42193">Elastic extents</a></h4>  <h4><a name="sectd42193">Elastic extents</a></h4>
 <p>  
 The last type of extent is the elastic extent.  Either one or both extents can  <p>The last type of extent is the elastic extent.  Either one or both extents
 be elastic.  A box has an elastic extent when two opposite sides are linked by  can be elastic.  A box has an elastic extent when two opposite sides are
 distance constraints to two sides or axes of other boxes.</p>  linked by distance constraints to two sides or axes of other boxes.</p>
 <p>  
 One of the sides of the elastic box is linked by a position rule  <p>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
Line 5168  in the position and extent rule are oppo Line 4622  in the position and extent rule are oppo
 <pre>             'Height' ':' Extent  <pre>             'Height' ':' Extent
              'Width' ':' Extent               'Width' ':' Extent
      Extent = HPos / VPos / ...</pre>       Extent = HPos / VPos / ...</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
 Suppose we want to draw an elastic arrow or line between the middle of the    the bottom side of box A and the upper left corner of box B.  To do this, we
 bottom side of box A and the upper left corner of box B.  To do this, we would    would define a graphics box whose upper left corner coincides with the
 define a graphics box whose upper left corner coincides with the middle of the    middle of the bottom side of A (a position rule) and whose lower right
 bottom side of A (a position rule) and whose lower right corner coincides with    corner coincides with with the upper left corner of B (dimension rules):</p>
 with the upper left corner of B (dimension rules):</p>    <pre>LinkedBox :
 <pre>LinkedBox :  
    BEGIN     BEGIN
    VertPos  : Top = A .Bottom;     VertPos  : Top = A .Bottom;
    HorizPos : Left = A . VMiddle;     HorizPos : Left = A . VMiddle;
Line 5185  with the upper left corner of B (dimensi Line 4639  with the upper left corner of B (dimensi
    Width    : Right = B . Left;     Width    : Right = B . Left;
    END;</pre>     END;</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
 The element SectionTitle creates a presentation box called SectionNum which    which contains the number of the section.  Suppose we want to align the
 contains the number of the section.  Suppose we want to align the SectionNum    SectionNum and SectionTitle horizontally, have the SectionNum take its width
 and SectionTitle horizontally, have the SectionNum take its width from its    from its contents (the section number), have the SectionTitle box begin 0.5
 contents (the section number), have the SectionTitle box begin 0.5 cm to the    cm to the right of the SectionNum box and end at the right edge of its
 right of the SectionNum box and end at the right edge of its enclosing box.    enclosing box. This would make the SectionTitle box elastic, since its width
 This would make the SectionTitle box elastic, since its width is defined by    is defined by the position of its left and right sides.  The following rules
 the position of its left and right sides.  The following rules produce this    produce this effect:</p>
 effect:</p>    <pre>SectionNum :
 <pre>SectionNum :  
    BEGIN     BEGIN
    HorizPos : Left = Enclosing . Left;     HorizPos : Left = Enclosing . Left;
    Width : Enclosed . Width;     Width : Enclosed . Width;
Line 5215  SectionTitle : Line 4669  SectionTitle :
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4220">Overflow</a></h3>  <h3><a name="sectc4220">Overflow</a></h3>
 <p>  
 A boxes corresponding to a structural element normally contain all boxes  <p>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>  
 Each of these rules is expressed by a keyword followed by a colon and the  <p>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>               'VertOverflow' ':' Boolean /  <pre>               'VertOverflow' ':' Boolean /
                'HorizOverflow' ':' Boolean .                 'HorizOverflow' ':' Boolean .
      Boolean = 'Yes' / 'No' .</pre>       Boolean = 'Yes' / 'No' .</pre>
 </div>  </div>
   
 <p>@@@@@ ****** </p>  <p>@@@@@ ******</p>
   
 <p>Explain Margin, Padding and Border. Refer to CSS2.</p>  <p>Explain Margin, Padding and Border. Refer to CSS2.</p>
 <pre>                'MarginTop' ':' MarginWidth /  <pre>                'MarginTop' ':' MarginWidth /
                 'MarginRight' ':' MarginWidth /                  'MarginRight' ':' MarginWidth /
Line 5264  BorderStyle   = InheritParent / Line 4718  BorderStyle   = InheritParent /
                 'Double' / 'Groove' / 'Ridge' / 'Inset' / 'Outset' .                  'Double' / 'Groove' / 'Ridge' / 'Inset' / 'Outset' .
 InheritParent = 'Enclosing' '=' / 'Creator' '=' .  InheritParent = 'Enclosing' '=' / 'Creator' '=' .
 ColorName     =  NAME .</pre>  ColorName     =  NAME .</pre>
 <p>@@@@@ ****** </p>  
   
 <div class="subsection">  <p>@@@@@ ******</p>
   
   <div class="subsection">
 <h3><a name="sectc4221">Inheritance</a></h3>  <h3><a name="sectc4221">Inheritance</a></h3>
 <p>  
 A presentation parameter can be defined by reference to the same parameter of  <p>A presentation parameter can be defined by reference to the same parameter
 another box in the tree of boxes.  These structural links are expressed by  of 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>  
 Kinship is expressed in terms of the logical structure of the document and not  <p>Kinship is expressed in terms of the logical structure of the document and
 in terms of the tree of boxes.  The presentation box cannot transmit any of  not in terms of the tree of boxes.  The presentation box cannot transmit any
 their parameters by inheritance; only structured element boxes can do so. As  of their parameters by inheritance; only structured element boxes can do so.
 an example, consider an element B which follows an element A in the logical  As 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>  
 The inherited parameter value can be the same as that of the reference box.  <p>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>  
 If the rule is being applied to a numeric attribute, the number to add or  <p>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>
Line 5316  of the attribute is used.</p> Line 4770  of the attribute is used.</p>
   maximum        = NUMBER .    maximum        = NUMBER .
   minimumA       = minimum / AttrID .    minimumA       = minimum / AttrID .
   minimum        = NUMBER .</pre>    minimum        = NUMBER .</pre>
 <p>  
 The parameters which can be obtained by inheritance are justification,  <p>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
Line 5325  lines and characters.</p> Line 4779  lines and characters.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4222">Line breaking</a></h3>  <h3><a name="sectc4222">Line breaking</a></h3>
 <p>  
 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
 into lines: the boxes included in the box to which this rule is attached are  broken into lines: the boxes included in the box to which this rule is
 displayed one after the other, from left to right, with their horizontal  attached are displayed one after the other, from left to right, with their
 reference axes aligned so that they form a series of lines.  The length of  horizontal reference axes aligned so that they form a series of lines.  The
 these lines is equal to the width of the box to which the <tt>Line</tt> rule  length of these lines is equal to the width of the box to which the
 is attached.</p>  <tt>Line</tt> rule is attached.</p>
 <p>  
 When an included box overflows the current line, it is either carried forward  <p>When an included box overflows the current line, it is either carried
 to the next line, cur, or left the way it is.  The <a  forward 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
Line 5346  box is breakable, the box is transparent Line 4799  box is breakable, the box is transparent
 included in the compound box are treated just like included boxes which have  included in the compound box are treated just like included boxes which have
 the <tt>LineBreak</tt> rule.  Thus, it is possible to traverse a complete  the <tt>LineBreak</tt> rule.  Thus, it is possible to traverse a complete
 subtree of boxes to line break the text leaves of a complex structure.</p>  subtree of boxes to line break the text leaves of a complex structure.</p>
 <p>  
 The relative position rules of the included boxes are ignored, since the boxes  <p>The relative position rules of the included boxes are ignored, since the
 will be placed according to the line breaking rules.</p>  boxes will be placed according to the line breaking rules.</p>
 <p>  
 The <tt>Line</tt> rule does not have a parameter.  The characteristics of the  <p>The <tt>Line</tt> rule does not have a parameter.  The characteristics of
 lines that will be constructed are determined by the <tt>LineSpacing</tt>,  the 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>  
 When the <tt>Line</tt> rule appears in the rules sequence of a non-primary  <p>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>
Line 5369  rule does not take any parameters.</p> Line 4822  rule does not take any parameters.</p>
               '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
 breaking process.  The line spacing is the distance between the baselines  line 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>  
 Inheritance allows the value to be obtained from a relative in the structure  <p>Inheritance allows the value to be obtained from a relative in the
 tree, either without change (an equals sign appears after the inheritance  structure tree, either without change (an equals sign appears after the
 keyword), with a positive difference (a plus sign), or a negative difference  inheritance keyword), with a positive difference (a plus sign), or a negative
 (a minus sign).  When the rule uses a difference, the value of the difference  difference (a minus sign).  When the rule uses a difference, the value of the
 follows the sign and is expressed as a <a href="#sectc4217">distance</a>.</p>  difference follows the sign and is expressed as a <a
   href="#sectc4217">distance</a>.</p>
 <pre>                     'LineSpacing' ':' DistOrInherit  <pre>                     'LineSpacing' ':' DistOrInherit
      DistOrInherit =  Kinship InheritedDist / Distance .       DistOrInherit =  Kinship InheritedDist / Distance .
      InheritedDist = '=' / '+' AbsDist / '-' AbsDist .</pre>       InheritedDist = '=' / '+' AbsDist / '-' AbsDist .</pre>
 <p>  
 When the line spacing value (or its difference from another element) is  <p>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
 that part expands proportionally.  In contrast, when the line spacing value is  that part expands proportionally.  In contrast, when the line spacing value is
Line 5399  depending on the desired effect.</p> Line 4852  depending on the desired effect.</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42222">First line indentation</a></h4>  <h4><a name="sectd42222">First line indentation</a></h4>
 <p>  
 The <tt>Indent</tt> rule is used to specify the indentation of the first line  <p>The <tt>Indent</tt> rule is used to specify the indentation of the first
 of the elements broken into lines by the <tt>Line</tt> function. The  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>  
 Indentation can be defined for any box, regardless of whether the box is line  <p>Indentation can be defined for any box, regardless of whether the box is
 broken, and transmitted by inheritance to elements that are line broken. The  line broken, and transmitted by inheritance to elements that are line broken.
 size of the indentation is specified in the same manner as the <a  The 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>              'Indent' ':' DistOrInherit</pre>  <pre>              'Indent' ':' DistOrInherit</pre>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42223">Alignment</a></h4>  <h4><a name="sectd42223">Alignment</a></h4>
 <p>  
 The alignment style of the lines constructed during line breaking is defined  <p>The alignment style of the lines constructed during line breaking is
 by the <tt>Adjust</tt> rule.  The alignment value can be a constant or  defined 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>    <li><tt>Left</tt>: at the left edge,</li>
 <tt>Left</tt>: at the left edge,    <li><tt>Right</tt>: at the right edge,</li>
 </li>    <li><tt>VMiddle</tt>: centered</li>
 <li>    <li><tt>LeftWithDots</tt>: at the left edge with a dotted line filling out
 <tt>Right</tt>: at the right edge,      the last line up to the right edge of the line breaking box.</li>
 </li>  
 <li>  
 <tt>VMiddle</tt>: centered  
 </li>  
 <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.  
 </li>  
 </ul>  </ul>
 <p>  
 An inherited value can only be the same as that of the reference box and is  <p>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>                      'Adjust' ':' AlignOrInherit  <pre>                      'Adjust' ':' AlignOrInherit
      AlignOrInherit = Kinship '=' / Alignment .       AlignOrInherit = Kinship '=' / Alignment .
Line 5450  specified by a kinship keyword followed Line 4893  specified by a kinship keyword followed
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42224">Justification</a></h4>  <h4><a name="sectd42224">Justification</a></h4>
 <p>  
 The <tt>Justify</tt> rule indicates whether the lines contained in the box and  <p>The <tt>Justify</tt> rule indicates whether the lines contained in the box
 produced by a <tt>Line</tt> rule should be extended horizontally to occupy the  and produced by a <tt>Line</tt> rule should be extended horizontally to occupy
 entire width of their enclosing box.  The first and last lines are treated  the 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
Line 5466  followed by an equals sign.</p> Line 4908  followed by an equals sign.</p>
 <pre>                  'Justify' ':' BoolInherit  <pre>                  'Justify' ':' BoolInherit
      BoolInherit = Boolean / Kinship '=' .       BoolInherit = Boolean / Kinship '=' .
      Boolean     ='Yes' / 'No' .</pre>       Boolean     ='Yes' / 'No' .</pre>
 <p>  
 When the lines are justified, the alignment parameter specified in the  <p>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
 An important use of inheritance is to vary the characteristics of lines for an    for an element type (for example, Paragraph) according to the enclosing
 element type (for example, Paragraph) according to the enclosing environment    environment (for example, Summary or Section), and thus obtain different
 (for example, Summary or Section), and thus obtain different line breaking    line breaking styles for the same elements when they appear in different
 styles for the same elements when they appear in different environments.  The    environments.  The following rules specify that paragraphs inherit their
 following rules specify that paragraphs inherit their alignment,    alignment, justification, and line spacing:</p>
 justification, and line spacing:</p>    <pre>Paragraph :
 <pre>Paragraph :  
    BEGIN     BEGIN
    Justify : Enclosing = ;     Justify : Enclosing = ;
    LineSpacing : Enclosing = ;     LineSpacing : Enclosing = ;
    Adjust : Enclosing =;     Adjust : Enclosing =;
    Line;     Line;
    END;</pre>     END;</pre>
 <p>  
 If the alignment, justification, and line spacing of the Section and Summary    <p>If the alignment, justification, and line spacing of the Section and
 elements is fixed:</p>    Summary elements is fixed:</p>
 <pre>Section :    <pre>Section :
    BEGIN     BEGIN
    Adjust : Left;     Adjust : Left;
    Justify : Yes;     Justify : Yes;
Line 5503  Summary : Line 4945  Summary :
    Justify : No;     Justify : No;
    LineSpacing : 1.3;     LineSpacing : 1.3;
    END;</pre>     END;</pre>
 <p>  
 then the paragraphs appearing in sections are justified with a simple line    <p>then the paragraphs appearing in sections are justified with a simple
 spacing while those appearing in summaries are centered and not justified and    line spacing while those appearing in summaries are centered and not
 have a larger line spacing.  These are nevertheless the very same type of    justified and have a larger line spacing.  These are nevertheless the very
 paragraph defined in the logical structure schema.</p>    same type of 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>  
 The <tt>Hyphenate</tt> rule indicates whether or not words should be broken by  <p>The <tt>Hyphenate</tt> rule indicates whether or not words should be broken
 hyphenation at the end of lines.  It affects the lines produced by the  by 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>  
 The hyphenation parameter takes a boolean value, which can be either constant  <p>The hyphenation parameter takes a boolean value, which can be either
 or inherited.  A constant boolean value is expressed by either the  constant 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>
Line 5531  followed by an equals sign.</p> Line 4972  followed by an equals sign.</p>
 </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>  
 The <tt>InLine</tt> rule is used to specify that a box that would otherwise  <p>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>  
 The rule is expressed by the <tt>InLine</tt> keyword followed by a colon and  <p>The rule is expressed by the <tt>InLine</tt> keyword followed by a colon
 the keyword <tt>Yes</tt>, if the box should participate in line breaking, or  and the keyword <tt>Yes</tt>, if the box should participate in line breaking,
 the keyword <tt>No</tt>, if it should not.  This is the only form possible:  or 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>               'InLine' ':' Boolean .  <pre>               'InLine' ':' Boolean .
      Boolean = 'Yes' / 'No' .</pre>       Boolean = 'Yes' / 'No' .</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>Suppose the structure schema defines a logical attribute called
 Suppose the structure schema defines a logical attribute called <tt>New</tt>    <tt>New</tt> which is used to identify the passages in a document which were
 which is used to identify the passages in a document which were recently    recently modified.  It would be nice to have the presentation schema make a
 modified.  It would be nice to have the presentation schema make a bar appear    bar appear in the left margin next to each passage having the <tt>New</tt>
 in the left margin next to each passage having the <tt>New</tt> attribute.  A    attribute.  A new passage can be an entire element, such as a paragraph or
 new passage can be an entire element, such as a paragraph or section, or it    section, or it can be some words in the middle of a paragraph.  To produce
 can be some words in the middle of a paragraph.  To produce the desired    the desired effect, the <tt>New</tt> attribute is given a creation rule
 effect, the <tt>New</tt> attribute is given a creation rule which generates a    which generates a <tt>VerticalBar</tt> presentation box.</p>
 <tt>VerticalBar</tt> presentation box.</p>  
 <p>    <p>When the <tt>New</tt> attribute is attached to a character string which
 When the <tt>New</tt> attribute is attached to a character string which is    is inside a line broken element (inside a paragraph, for example), the bar
 inside a line broken element (inside a paragraph, for example), the bar is one    is one of the elements which participates in line breaking and it is placed
 of the elements which participates in line breaking and it is placed normally    normally in the current line, at the end of the character string which has
 in the current line, at the end of the character string which has the    the attribute.  To avoid this, the <tt>InLine</tt> rule is used in the
 attribute.  To avoid this, the <tt>InLine</tt> rule is used in the following    following way:</p>
 way:</p>    <pre>BOXES
 <pre>BOXES  
   VerticalBar:    VerticalBar:
      BEGIN       BEGIN
      Content: Graphics 'l';       Content: Graphics 'l';
Line 5590  ATTRIBUTES Line 5030  ATTRIBUTES
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4223">Page breaking and line breaking conditions</a></h3>  <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  <p>Pages are constructed by the editor in accordance with the model specified
 a <a href="#sectc4233"><tt>Page</tt> rule</a>.  The page model describes only  by a <a href="#sectc4233"><tt>Page</tt> rule</a>.  The page model describes
 the composition of the pages but does not give any rules for breaking  only the composition of the pages but does not give any rules for breaking
 different element types across pages.  Now, it is possible that certain  different element types across pages.  Now, it is possible that certain
 elements must 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>  
 The <tt>PageBreak</tt> rule is used to indicate whether or not the box can be  <p>The <tt>PageBreak</tt> rule is used to indicate whether or not the box can
 cut during the construction of pages.  If cutting is authorized, the box can  be cut during the construction of pages.  If cutting is authorized, the box
 be cut, with one part appearing at the bottom of a page and the other part  can 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>  
 Whether objects can be cut by line breaks can be controlled in a similar way  <p>Whether objects can be cut by line breaks can be controlled in a similar
 using the <tt>LineBreak</tt> rule.  This rule allows the specification of  way 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
Line 5623  schema.</p> Line 5062  schema.</p>
 <pre>               'PageBreak' ':' Boolean .  <pre>               'PageBreak' ':' Boolean .
                'LineBreak' ':' Boolean .                 'LineBreak' ':' Boolean .
      Boolean = 'Yes' / 'No' .</pre>       Boolean = 'Yes' / 'No' .</pre>
 <p>  
 When a box can be cut by a page break, it is possible that a page break will  <p>When a box can be cut by a page break, it is possible that a page break
 fall an inappropriate spot, creating, for example, a widow or orphan, or  will 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 a  specify that the box of the element to which they apply cannot be cut within 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>  
 The <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules give the height of the zone  <p>The <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules give the height of the
 in which page breaking is prohibited.  The height is given as a constant value  zone in which page breaking is prohibited.  The height is given as a constant
 using any of the <a href="#sectc4217">available units</a>, absolute or  value 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>                   'NoBreak1' ':' AbsDist .  <pre>                   'NoBreak1' ':' AbsDist .
                    'NoBreak2' ':' AbsDist .</pre>                     'NoBreak2' ':' AbsDist .</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>The following rules prevent widows and orphans in a paragraph:</p>
 The following rules prevent widows and orphans in a paragraph:</p>    <pre>Paragraph :
 <pre>Paragraph :  
    BEGIN     BEGIN
    NoBreak1 : 2;     NoBreak1 : 2;
    NoBreak2 : 2;     NoBreak2 : 2;
    END;</pre>     END;</pre>
 <p>  
 This rule prevents a section title from becoming separated from the first    <p>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>Section :    <pre>Section :
    NoBreak1 : 1.5 cm;</pre>     NoBreak1 : 1.5 cm;</pre>
 <p>  
 Finally, this rule prevents a figure from being page broken in any way:</p>    <p>Finally, this rule prevents a figure from being page broken in any
 <pre>Figure :    way:</p>
     <pre>Figure :
    PageBreak : No;</pre>     PageBreak : No;</pre>
 </blockquote>  </blockquote>
 <p>  
 The Thot editor constructs the document images displayed on the screen  <p>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,
 filling the gaps which are produced in the course of these operations.  It  filling the gaps which are produced in the course of these operations.  It
Line 5672  reached.  For example, an element might Line 5112  reached.  For example, an element might
 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>  
 The <tt>Gather</tt> rule is used to remedy this problem.  When the rule  <p>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>  
 The <tt>Gather</tt> rule may not appear in the <a href="#sectc427">default  <p>The <tt>Gather</tt> rule may not appear in the <a href="#sectc427">default
 rules</a>.  Elements which do not have the <tt>Gather</tt> rule are considered  rules</a>.  Elements which do not have the <tt>Gather</tt> rule are considered
 susceptible to being split up during display.  Thus, it is not necessary to  susceptible to being split up during display.  Thus, it is not necessary to
 use the <tt>Gather : No;</tt> form. This rule must be used prudently and only  use the <tt>Gather : No;</tt> form. This rule must be used prudently and only
 for those elements which truly need it.  If used incorrectly, it can  for those elements which truly need it.  If used incorrectly, it can
 pointlessly increase the size of the image constructed by the editor and lead  pointlessly increase the size of the image constructed by the editor and lead
 to excessive memory consumption by the editor.</p>  to excessive memory consumption by the editor.</p>
 <p>  
 Like the <tt>PageBreak</tt> and <tt>LineBreak</tt> rules, the <tt>Gather</tt>  <p>Like the <tt>PageBreak</tt> and <tt>LineBreak</tt> rules, the
 rule can only appear in rules of the primary view and applies to all views  <tt>Gather</tt> rule can only appear in rules of the primary view and applies
 defined in the presentation schema.</p>  to all views defined in the presentation schema.</p>
 <pre>                   'Gather' ':' Boolean .</pre>  <pre>                   'Gather' ':' Boolean .</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4224">Visibility</a></h3>  <h3><a name="sectc4224">Visibility</a></h3>
 <p>  
 The visibility parameter is used to control which elements should or should  <p>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>  
 Visibility takes non-negative integer values (positive or zero).  If values  <p>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>  
 The visibility parameter can be defined as a constant or by inheritance. If  <p>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>  
 If it is a numeric attribute's presentation rule, the visibility can be  <p>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>                   'Visibility' ':' NumberInherit  <pre>                   'Visibility' ':' NumberInherit
      NumberInherit = Integer / AttrID / Inheritance .       NumberInherit = Integer / AttrID / Inheritance .
      Integer       = NUMBER .</pre>       Integer       = NUMBER .</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 the    <tt>MathView</tt> view.  Then, the default rules should include:</p>
 <tt>MathView</tt> view.  Then, the default rules should include:</p>    <pre>DEFAULT
 <pre>DEFAULT  
      IN MathView Visibility:0;</pre>       IN MathView Visibility:0;</pre>
 <p>  
 which makes all elements invisible in the <tt>MathView</tt> view.  However,    <p>which makes all elements invisible in the <tt>MathView</tt> view. 
 the <tt>Formula</tt> element also has a <tt>Visibility</tt> rule:</p>    However, the <tt>Formula</tt> element also has a <tt>Visibility</tt>
 <pre>Formula :    rule:</p>
     <pre>Formula :
      IN MathView Visibility:5;</pre>       IN MathView Visibility:5;</pre>
 <p>  
 which makes formulas, and only formulas, visible.</p>    <p>which makes formulas, and only formulas, visible.</p>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4225">Character style parameters</a></h3>  <h3><a name="sectc4225">Character style parameters</a></h3>
 <p>  
 Four parameters are used to determine which characters are used to display  <p>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>  <h4><a name="sectd42251">Character size</a></h4>
 <p>  
 The size parameter has two effects.  First, it is used to specify the actual  <p>The size parameter has two effects.  First, it is used to specify the
 size and distance units for boxes defined in <a href="#sectc4217">relative  actual size and distance units for boxes defined in <a
 units</a>.  Second, it defines the size of the characters contained in the  href="#sectc4217">relative units</a>.  Second, it defines the size of the
 box.</p>  characters contained in the box.</p>
 <p>  
 As a distance or length, the size can be expressed in abstract or absolute  <p>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>
Line 5760  the smallest size while the value 16 is Line 5198  the smallest size while the value 16 is
 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>  
 If the <tt>Size</tt> rule is a numeric attribute's presentation rule, the  <p>If the <tt>Size</tt> rule is a numeric attribute's presentation rule, the
 value of the size parameter can be specified by the attribute's name, in  value of the size parameter can be specified by the attribute's name, in which
 which case the value of the attribute is used.</p>  case the value of the attribute is used.</p>
 <p>  
 <strong>Note:</strong> the only unit available for  defining an absolute size  <p><strong>Note:</strong> the only unit available for  defining an absolute
 is the typographer's point.  Centimeters and inches may not be used.</p>  size is the typographer's point.  Centimeters and inches may not be used.</p>
 <p>  
 If the size is inherited, the rule must specify the relative from which to  <p>If the size is inherited, the rule must specify the relative from which to
 inherit and any percentage or difference from that relative's value.  inherit and any percentage or difference from that relative's value. A
 A percentage is indicated by a <tt>*</tt> followed by the value of the  percentage is indicated by a <tt>*</tt> followed by the value of the
 percentage and a <tt>%</tt>.  percentage and a <tt>%</tt>. A difference can be expressed in either
 A difference can be expressed in either typographer's points or in abstract  typographer's points or in abstract units and the maximum or minimum size can
 units and the maximum or minimum size can be specified, but without  be specified, but without specifying the unit: it is the same as was specified
 specifying the unit: it is the same as was specified for the difference.</p>  for the difference.</p>
 <p>  
 In a numeric attribute's presentation rule, the difference in size or the  <p>In a numeric attribute's presentation rule, the difference in size or the
 percentage can be indicated by the attribute's name instead of the numeric  percentage can be indicated by the attribute's name instead of the numeric
 value, which means that the attribute's value should be used as the difference  value, which means that the attribute's value should be used as the difference
 or percentage.  The attribute can also be used as the minimum or maximum size  or percentage.  The attribute can also be used as the minimum or maximum size
Line 5798  for a difference.</p> Line 5236  for a difference.</p>
      MinSize         = NUMBER .       MinSize         = NUMBER .
      PercentSizeAttr = PercentSize / AttrID .       PercentSizeAttr = PercentSize / AttrID .
      PercentSize     = NUMBER .</pre>       PercentSize     = NUMBER .</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>Size : Enclosing - 2 pt Min 7;</pre>  
 <p>    <p>states that the character size is 2 points less than that of the
 states that the character size is 2 points less than that of the enclosing    enclosing box, but that it may not be less than 7 points, whatever the
 box, but that it may not be less than 7 points, whatever the enclosing box's    enclosing box's value.</p>
 value.</p>  
 <p>    <p>The following rules make the text of a report be displayed with
 The following rules make the text of a report be displayed with medium-sized    medium-sized characters (for example, size 5), while the title is displayed
 characters (for example, size 5), while the title is displayed with larger    with larger characters and the summary is displayed with smaller
 characters and the summary is displayed with smaller characters:</p>    characters:</p>
 <pre>Report :    <pre>Report :
      Size : 5;       Size : 5;
 Title :  Title :
      Size : Enclosing + 2;       Size : Enclosing + 2;
 Summary :  Summary :
      Size : Enclosing - 1;</pre>       Size : Enclosing - 1;</pre>
 <p>  
 Thus, the character sizes in the entire document can be changed by changing    <p>Thus, the character sizes in the entire document can be changed by
 the size parameter of the Report element, while preserving the relationships    changing the size parameter of the Report element, while preserving the
 between the sizes of the different elements.</p>    relationships 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>  
 The <tt>Font</tt> rule determines the font family to be used to display the  <p>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 and the <tt>Weight</tt> rule determines their weight.  Thot  their style and the <tt>Weight</tt> rule determines their weight.  Thot
 recognizes three character fonts (Times, Helvetica, and Courier), three  recognizes three character fonts (Times, Helvetica, and Courier), three
 styles: Roman, Italics, and Oblique, and two weights: Normal and Bold.</p>  styles: Roman, Italics, and Oblique, and two weights: Normal and Bold.</p>
 <p>  
 The font family, style and weight can be specified by a named constant or  <p>The font family, style and weight can be specified by a named constant or
 can be inherited.  For the name of the font family only the first character  can be inherited.  For the name of the font family only the first character is
 is used.</p>  used.</p>
 <p>  
 Only identical inheritance is allowed: the box takes the same font, style or  <p>Only identical inheritance is allowed: the box takes the same font, style
 weight as the box from which it inherits.  This is indicated by an equals  or weight as the box from which it inherits.  This is indicated by an equals
 sign after the kinship specification.</p>  sign after the kinship specification.</p>
 <pre>               'Font' ':'          NameInherit /  <pre>               'Font' ':'          NameInherit /
                'Style' ':'         StyleInherit /                 'Style' ':'         StyleInherit /
Line 5852  StyleInherit  = Kinship '=' / Line 5290  StyleInherit  = Kinship '=' /
                 'Roman' / 'Italics' / 'Oblique' .                  'Roman' / 'Italics' / 'Oblique' .
 WeightInherit = Kinship '=' /  WeightInherit = Kinship '=' /
                 'Normal' / 'Bold' .</pre>                  'Normal' / 'Bold' .</pre>
   
 <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
 To specify that the summary uses the font family of the rest of the document,    document, but in the italic style, the following rules are used:</p>
 but in the italic style, the following rules are used:</p>    <pre>Summary :
 <pre>Summary :  
    BEGIN     BEGIN
    Font : Enclosing =;     Font : Enclosing =;
    Style : Italics;     Style : Italics;
Line 5867  but in the italic style, the following r Line 5305  but in the italic style, the following r
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd42253">Underlining</a></h4>  <h4><a name="sectd42253">Underlining</a></h4>
 <p>  
 The <tt>Underline</tt> rule is used to specify if the characters contained in  <p>The <tt>Underline</tt> rule is used to specify if the characters contained
 a box should have lines drawn on or near them.  There are four underlining  in 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>  
 As with font family and style, only identical inheritance is allowed: the box  <p>As with font family and style, only identical inheritance is allowed: the
 has the same underlining type as the box from which it inherits the value.  box 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>                   'Underline' ':' UnderLineInherit /  <pre>                   'Underline' ':' UnderLineInherit /
                    'Thickness' ':' ThicknessInherit /                     'Thickness' ':' ThicknessInherit /
Line 5890  ThicknessInherit = Kinship '=' / 'Thick' Line 5327  ThicknessInherit = Kinship '=' / 'Thick'
 </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>  
 The <tt>Depth</tt> rule is used to define the stacking order of terminal boxes  <p>The <tt>Depth</tt> rule is used to define the stacking order of terminal
 when multiple boxes at least partially overlap.  This rule defines how the  boxes when multiple boxes at least partially overlap.  This rule defines how
 depth parameter, which is zero or a positive integer, is calculated.  The  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>  
 Like most other rules, the depth rule is defined in the <a  <p>Like most other rules, the depth rule is defined in the <a
 href="#sectc427">default rules</a> of each presentation schema.  Thus, there  href="#sectc427">default rules</a> of each presentation schema.  Thus, there
 is always a depth value, even when it is not necessary because there is no  is always a depth value, even when it is not necessary because there is 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>  
 The depth rule has the same form as the <a href="#sectc4224">visibility  <p>The depth rule has the same form as the <a href="#sectc4224">visibility
 rule</a>. It can be defined by inheritance or by a constant numeric value.  rule</a>. It can be defined by inheritance or by a constant numeric value.
 When the rule is attached to a numeric attribute, it can take the value of  When the rule is attached to a numeric attribute, it can take the value of
 that attribute.</p>  that attribute.</p>
 <pre>                'Depth' ':' NumberInherit</pre>  <pre>                'Depth' ':' NumberInherit</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>For a purely textual document, in which overlapping never poses a
 For a purely textual document, in which overlapping never poses a problem, 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>DEFAULT
 <pre>DEFAULT  
     Depth : 0;      Depth : 0;
     ...</pre>      ...</pre>
 <p>  
 To make the text of examples appear on a light blue background, a presentation    <p>To make the text of examples appear on a light blue background, a
 box is defined:</p>    presentation box is defined:</p>
 <pre>BOXES    <pre>BOXES
    BlueBG :     BlueBG :
       BEGIN        BEGIN
       Content : Graphics 'R';        Content : Graphics 'R';
Line 5935  box is defined:</p> Line 5371  box is defined:</p>
       Depth : 2;        Depth : 2;
       ...        ...
       END;</pre>        END;</pre>
 <p>  
 and is created by the <tt>Example</tt> element, which has the rules:</p>    <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;</pre>        END;</pre>
 <p>  
 In this way, the text of an example (if it inherits its depth from its    <p>In this way, the text of an example (if it inherits its depth from its
 ancestor) will be superimposed on a light blue background, and not the    ancestor) will be superimposed on a light blue background, and not the
 reverse).</p>    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>  
 The <tt>LineStyle</tt> rule determines the style of line which should be used  <p>The <tt>LineStyle</tt> rule determines the style of line which should be
 to draw all the elements contained in the box and the box itself, if it has a  used to draw all the elements contained in the box and the box itself, if it
 <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  The line style can be  has 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 <a  graphic elements.  The border of elements having a <a
 href="#sectc4230a"><tt>ShowBox</tt> rule</a> is drawn according to the line  href="#sectc4230a"><tt>ShowBox</tt> rule</a> 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  <p>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>                      'LineStyle' ':' LineStyleInherit  <pre>                      'LineStyle' ':' LineStyleInherit
      LineStyleInherit = Kinship '=' /       LineStyleInherit = Kinship '=' /
                       'Solid' / 'Dashed' / 'Dotted' .</pre>                        'Solid' / 'Dashed' / 'Dotted' .</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>Figure :
 <pre>Figure :  
    LineStyle : Solid;</pre>     LineStyle : Solid;</pre>
 <p>  
 and the elements composing figures are given an inheritance rule:</p>    <p>and the elements composing figures are given an inheritance rule:</p>
 <pre>   LineStyle : Enclosing =;</pre>    <pre>   LineStyle : Enclosing =;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4228">Line thickness</a></h3>  <h3><a name="sectc4228">Line thickness</a></h3>
 <p>  
 The <tt>LineWeight</tt> rule determines the thickness of the lines  of all  <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
Line 5997  constant value is a positive number foll Line 5431  constant value is a positive number foll
 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>                 'LineWeight' ':' DistOrInherit</pre>  <pre>                 'LineWeight' ':' DistOrInherit</pre>
 <p>  
 All elements of the graphic base type are affected by this rule, but it can be  <p>All elements of the graphic base type are affected by this rule, but it can
 attached to any box and transmitted by inheritance to the graphic elements.  be attached to any box and transmitted by inheritance to the graphic elements.
 The border of element having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>  The border of element having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>
 is also drawn according to the thickness specified by this rule.</p>  is also drawn according to the thickness specified by this rule.</p>
   
 <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 with
 To specify that, in Figures, the graphical parts should be drawn with lines    lines 0.3 pt thick, the Figure element is given this rule:</p>
 0.3 pt thick, the Figure element is given this rule:</p>    <pre>Figure :
 <pre>Figure :  
    LineWeight : 0.3 pt;</pre>     LineWeight : 0.3 pt;</pre>
 <p>  
 and the elements composing figures are given an inheritance rule:</p>    <p>and the elements composing figures are given an inheritance rule:</p>
 <pre>   LineWeight : Enclosing =;</pre>    <pre>   LineWeight : Enclosing =;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4229">Fill pattern</a></h3>  <h3><a name="sectc4229">Fill pattern</a></h3>
 <p>  
 The <tt>FillPattern</tt> rule determines the pattern used to fill closed  <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 elements  rule also specifies the pattern used to fill the box associated with elements
 having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a><a>.  This pattern can  having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a><a>.  This pattern can
Line 6030  patterns are: nopattern, foregroundcolor Line 5463  patterns are: nopattern, foregroundcolor
 gray3, gray4, gray5, gray6, gray7, horiz1, horiz2, horiz3, vert1, vert2,  gray3, gray4, gray5, gray6, gray7, horiz1, horiz2, horiz3, vert1, vert2,
 vert3, left1, left2, left3, right1, right2, right3, square1, square2, square3,  vert3, left1, left2, left3, right1, right2, right3, square1, square2, square3,
 lozenge, brick, tile, sea, basket.</a></p>  lozenge, brick, tile, sea, basket.</a></p>
 <p>  
 Like the other rules peculiar to graphics, <tt>LineStyle</tt> and  <p>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>  
 The <tt>FillPattern</tt> rule can also be used to determine whether or not  <p>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>backgroundcolor</tt>.  <tt>nopattern</tt>, <tt>foregroundcolor</tt>, and <tt>backgroundcolor</tt>.
Line 6049  these same elements are given the color Line 5482  these same elements are given the color
 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>                 'FillPattern' ':' NameInherit</pre>  <pre>                 'FillPattern' ':' NameInherit</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 closed graphical elements should be
 To specify that, in Figures, the closed graphical elements should be filled    filled with a pattern resembling a brick wall, the Figure element is given
 with a pattern resembling a brick wall, the Figure element is given this    this rule:</p>
 rule:</p>    <pre>Figure :
 <pre>Figure :  
    FillPattern : brick;</pre>     FillPattern : brick;</pre>
 <p>  
 and the elements composing figures are given an inheritance rule:</p>    <p>and the elements composing figures are given an inheritance rule:</p>
 <pre>   FillPattern : Enclosing =;</pre>    <pre>   FillPattern : Enclosing =;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc4230">Colors</a></h3>  <h3><a name="sectc4230">Colors</a></h3>
 <p>  
 The <tt>Foreground</tt> and <tt>Background</tt> rules determine the foreground  <p>The <tt>Foreground</tt> and <tt>Background</tt> rules determine the
 and background colors of the base elements which appear in the box. They also  foreground and background colors of the base elements which appear in the box.
 control the color of boxes associated with elements having a <a  They also control the color of boxes associated with elements having a <a
 href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  These colors can be specified  href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  These colors can be specified
 with a named constant or by inheritance.  The named constants specify one of  with a named constant or by inheritance.  The named constants specify one of
 the available colors in Thot.  The available color names can be found in the  the available colors in Thot.  The available color names can be found in the
 file <tt>thot.color</tt>.</p>  file <tt>thot.color</tt>. In addition to those names, you can use the keyword
 <p>  <code>Transparent</code>, to not draw anything.</p>
 The color rules affect the same way all base elements and elements having a <a  
 href="#sectc4230a"><tt>ShowBox</tt> rule</a>, no matter what their type (text,  <p>The color rules affect the same way all base elements and elements having a
 graphics, pictures, symbols).  The color rules can be associated with any box  <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>, no matter what their type
 and can be transmitted by inheritance to the base elements or the elements  (text, graphics, pictures, symbols).  The color rules can be associated with
 having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  Like the preceding  any box and can be transmitted by inheritance to the base elements or the
 rules, only inheritance of the same value is allowed.</p>  elements having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>.  Like the
 <pre>                 'Foreground' ':' NameInherit  preceding rules, only inheritance of the same value is allowed.</p>
                  'Background' ':' NameInherit</pre>  <pre>                 'Foreground' ':' Color
 <p>                   'Background' ':' Color
 <strong>Note:</strong> text colors only appear for text elements whose <a        Color = 'Transparent' / Link '=' / FontColorName .</pre>
   
   <p><strong>Note:</strong> text colors only appear for text elements whose <a
 href="#sectc4229">fill pattern</a> does not prevent the use of color.</p>  href="#sectc4229">fill pattern</a> does not prevent the use of color.</p>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>To specify that, in Figures, everything must be drawn in blue on a
 To specify that, in Figures, everything must be drawn in blue on a background    background of yellow, the Figure element is given these rules:</p>
 of yellow, the Figure element is given these rules:</p>    <pre>Figure :
 <pre>Figure :  
    BEGIN     BEGIN
    Foreground : Blue;     Foreground : Blue;
    Background : Yellow;     Background : Yellow;
    Fillpattern : backgroundcolor;     Fillpattern : backgroundcolor;
    END;</pre>     END;</pre>
 <p>  
 and the elements composing figures are given inheritance rules:</p>    <p>and the elements composing figures are given inheritance rules:</p>
 <pre>   Foreground : Enclosing =;    <pre>   Foreground : Enclosing =;
    Background : Enclosing =;     Background : Enclosing =;
    FillPattern : Enclosing =;</pre>     FillPattern : Enclosing =;</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>  
 Boxes associated with structural elements are normally not visible, but it is  <p>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>                 'ShowBox'</pre>  <pre>                 'ShowBox'</pre>
 <p>  
 When an element has a <tt>ShowBox</tt> rule, the border is drawn only if the  <p>When an element has a <tt>ShowBox</tt> rule, the border is drawn only if
 <tt>LineWeight</tt> rule that applies to that element has a non-zero value  the <tt>LineWeight</tt> rule that applies to that element has a non-zero value
 (this value can be inherited).  The color, style and thickness of the border  (this value can be inherited).  The color, style and thickness of the border
 are defined by the <tt>Foreground</tt>, <tt>LineStyle</tt>, and  are defined by the <tt>Foreground</tt>, <tt>LineStyle</tt>, and
 <tt>LineWeight</tt> rules that apply to the element.</p>  <tt>LineWeight</tt> rules that apply to the element.</p>
 <p>  
 When an element has a <tt>ShowBox</tt> rule, the background of this element is  <p>When an element has a <tt>ShowBox</tt> rule, the background of this element
 paint only if the value of the <tt>FillPattern</tt> rule that applies to that  is paint only if the value of the <tt>FillPattern</tt> rule that applies to
 element is not <tt>nopattern</tt>.  The pattern and color(s) of the background  that element is not <tt>nopattern</tt>.  The pattern and color(s) of the
 are defined by the <tt>FillPattern</tt>, <tt>Background</tt>, and  background are defined by the <tt>FillPattern</tt>, <tt>Background</tt>, and
 <tt>Foreground</tt> rules that apply to the element.</p>  <tt>Foreground</tt> rules that apply to the element.</p>
 </div>  </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 character  picture.  This is a string delimited by single quotes.  If the first character
 in this string is '/', it is considered as an absolute path, otherwise the  in this string is '/', it is considered as an absolute path, otherwise the
 file is searched for along the schema directory path.  This file may contain a  file is searched for along the schema directory path.  This file may contain a
 picture in any format accepted by Thot (xbm, xpm, gif, jpeg, png, etc.)</p>  picture in any format accepted by Thot (xbm, xpm, gif, jpeg, png, etc.)</p>
 <p>  
 The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only to  <p>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>  
 The background picture has not always the same size as the element's box.  <p>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 the  specified by the <tt>PictureMode</tt> rule, which should be associated to 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>    <dt><tt>NormalSize</tt></dt>
 <dd>      <dd>The picture is centered in the box, and clipped if it is too
 The picture is centered in the box, and clipped if it is too large.      large.</dd>
 </dd>    <dt><tt>Scale</tt></dt>
 <dt><tt>Scale</tt></dt>      <dd>The picture is zoomed to fit the box size.</dd>
 <dd>    <dt><tt>RepeatX</tt></dt>
 The picture is zoomed to fit the box size.      <dd>The picture is repeated horizontally to fit the box width.</dd>
 </dd>    <dt><tt>RepeatY</tt></dt>
 <dt><tt>RepeatX</tt></dt>      <dd>The picture is repeated vertically to fit the box height.</dd>
 <dd>    <dt><tt>RepeatXY</tt></dt>
 The picture is repeated horizontally to fit the box width.      <dd>The picture is repeated both horizontally and vertically to fill the
 </dd>        box.</dd>
 <dt><tt>RepeatY</tt></dt>  
 <dd>  
 The picture is repeated vertically to fit the box height.  
 </dd>  
 <dt><tt>RepeatXY</tt></dt>  
 <dd>  
 The picture is repeated both horizontally and vertically to fill the box.  
 </dd>  
 </dl>  </dl>
 <p>  
 If an element has a <tt>BackgroundPicture</tt> rule and no  <p>If an element has a <tt>BackgroundPicture</tt> rule and no
 <tt>PictureMode</tt> rule, the <tt>NormalSize</tt> value is assumed.</p>  <tt>PictureMode</tt> rule, the <tt>NormalSize</tt> value is assumed.</p>
 <pre>                 'BackgroundPicture' ':' FileName /  <pre>                 'BackgroundPicture' ':' FileName /
                  'PictureMode' ':' PictMode .                   'PictureMode' ':' PictMode .
     
       FileName = STRING .        FileName = STRING .
       PictMode = 'NormalSize' / 'Scale' / 'RepeatXY' / 'RepeatX' / 'RepeatY' .</pre>        PictMode = 'NormalSize' / 'Scale' / 'RepeatXY' / 'RepeatX' / 'RepeatY' .</pre>
 <p>  
 The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only to  <p>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>  <h3><a name="sectc4231">Presentation box content</a></h3>
 <p>  
 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>  
 If the content is a constant, it can be specified, as in a variable  <p>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>  
 Similarly, if it is a variable, the name of a variable declared in  <p>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>  
 When the content is a structured element type, the name of the element type is  <p>When the content is a structured element type, the name of the element type
 given after the colon.  In this case,  the box's content is all elements of  is 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
Line 6218  view.</p> Line 5641  view.</p>
      VarConst = ConstID / ConstType ConstValue /       VarConst = ConstID / ConstType ConstValue /
                 VarID / '(' FunctionSeq ')' /                  VarID / '(' FunctionSeq ')' /
                 ElemID .</pre>                  ElemID .</pre>
 <p>  
 A presentation box can have only one <tt>Content</tt> rule, which means that  <p>A presentation box can have only one <tt>Content</tt> rule, which means
 the content of a presentation box cannot vary from view to view. However, such  that the content of a presentation box cannot vary from view to view. However,
 an effect can be achieved by creating several presentation boxes, each with  such an effect can be achieved by creating several presentation boxes, each
 different content and visible in different views.</p>  with different content and visible in different views.</p>
 <p>  
 The <tt>Content</tt> rule also applies to elements defined as references in  <p>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
Line 6232  have a <tt>Content</tt> rule or a <a hre Line 5655  have a <tt>Content</tt> rule or a <a hre
 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>     Content: Text '[*]';</pre>  <pre>     Content: Text '[*]';</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>The content of the presentation box created to make the chapter number
 The content of the presentation box created to make the chapter number and    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>BOXES
 <pre>BOXES  
      SectionNumBox :       SectionNumBox :
           BEGIN            BEGIN
           Content : NumSection;            Content : NumSection;
           ...            ...
           END;</pre>            END;</pre>
 <p>  
 if the <tt>NumSection</tt> variable has been defined in the variable    <p>if the <tt>NumSection</tt> variable has been defined in the variable
 definition section of the presentation schema.  Otherwise the <tt>Content</tt>    definition section of the presentation schema.  Otherwise the
 would be written:</p>    <tt>Content</tt> would be 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;</pre>            END;</pre>
 <p>  
 To specify that a page footer should contain all elements of the <tt>Note</tt>    <p>To specify that a page footer should contain all elements of the
 type are referred to in the page, the following rule is written:</p>    <tt>Note</tt> type are referred to in the page, the following rule is
 <pre>BOXES    written:</p>
     <pre>BOXES
      NotesFooterBox :       NotesFooterBox :
           BEGIN            BEGIN
           Content : Note;            Content : Note;
           ...            ...
           END;</pre>            END;</pre>
 <p>  
 <tt>Note</tt> is defined as an associated element in the structure schema and    <p><tt>Note</tt> is defined as an associated element in the structure schema
 NotesFooterBox is created by a page box of the primary view.</p>    and 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>  <h3><a name="sectc4232">Presentation box creation</a></h3>
 <p>  
 A creation rule specifies that a presentation box should be created when an  <p>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>  
 A keyword specifies the position, relative to the creating box, at which the  <p>A keyword specifies the position, relative to the creating box, at which
 created box will be placed in the structure:</p>  the created box will be placed in the structure:</p>
 <dl>  <dl>
 <dt><tt>CreateFirst</tt></dt>    <dt><tt>CreateFirst</tt></dt>
 <dd>      <dd>specifies that the box should be created as the first box of the next
 specifies that the box should be created as the first box of the next lower        lower level, before any already existing boxes, and only if the
 level, before any already existing boxes, and only if the beginning of the        beginning of the creating element is visible;</dd>
 creating element is visible;    <dt><tt>CreateLast</tt></dt>
 </dd>      <dd>specifies that the box should be created as the last box of the next
 <dt><tt>CreateLast</tt></dt>        lower level, after any existing boxes, and only if the end of the
 <dd>        creating element is visible;</dd>
 specifies that the box should be created as the last box of the next lower    <dt><tt>CreateBefore</tt></dt>
 level, after any existing boxes, and only if the end of the creating element      <dd>specifies that the box should be created before the creating box, on
 is visible;        the same level as the creating box, and only if the beginning of the
 </dd>        creating element is visible;</dd>
 <dt><tt>CreateBefore</tt></dt>    <dt><tt>CreateAfter</tt></dt>
 <dd>      <dd>specifies that the box should be created after the creating box, on
 specifies that the box should be created before the creating box, on the same        the same level as the creating box, and only if the beginning of the
 level as the creating box, and only if the beginning of the creating element        creating element is visible;</dd>
 is visible;    <dt><tt>CreateEnclosing</tt></dt>
 </dd>      <dd>specifies that the box should be created at the upper level relatively
 <dt><tt>CreateAfter</tt></dt>        to the creating box, and that it must contain that creating box and all
 <dd>        presentation boxes created by the same creating box.</dd>
 specifies that the box should be created after the creating box, on the same  
 level as the creating box, and only if the beginning of the creating element  
 is visible;  
 </dd>  
 <dt><tt>CreateEnclosing</tt></dt>  
 <dd>  
 specifies that the box should be created at the upper level relatively to the  
 creating box, and that it must contain that creating box and all presentation  
 boxes created by the same creating box.  
 </dd>  
 </dl>  </dl>
 <p>  
 This keyword can be followed by the <tt>Repeated</tt> keyword to indicate that  <p>This keyword can be followed by the <tt>Repeated</tt> keyword to indicate
 the box must be created for each part of the creating element. These parts  that the box must be created for each part of the creating element. These
 result from the division of the element by page breaks or column changes.  If  parts result from the division of the element by page breaks or column
 the <tt>Repeated</tt> keyword is missing, the box is only created for the  changes.  If the <tt>Repeated</tt> keyword is missing, the box is only created
 first part of the creating element (<tt>CreateFirst</tt> and  for the 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>  
 The type of presentation to be created is specified at the end of the rule  <p>The type of presentation to be created is specified at the end of the rule
 between parentheses.</p>  between parentheses.</p>
 <p>  
 Creation rules cannot appear in the <a href="#sectc427">default presentation  <p>Creation rules cannot appear in the <a href="#sectc427">default
 rules</a>.  The boxes being created should have a <tt>Content</tt> rule which  presentation rules</a>.  The boxes being created should have a
 indicates their <a href="#sectc4231">content</a>.</p>  <tt>Content</tt> rule which indicates their <a
 <p>  href="#sectc4231">content</a>.</p>
 Creation rules can only appear in the block of rules for the primary view;  
   <p>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
Line 6338  basis.</p> Line 5752  basis.</p>
      Create        ='CreateFirst' / 'CreateLast' /       Create        ='CreateFirst' / 'CreateLast' /
                     'CreateBefore' / 'CreateAfter' /                      'CreateBefore' / 'CreateAfter' /
                     'CreateEnclosing' .</pre>                      'CreateEnclosing' .</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>  
 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  
 vertical lines.  There is a line to the left of the first column and one to  
 the right of the last.  Each column has a variable number of cells, placed one  
 on top of the other and separated by horizontal lines.  There are no  
 horizontal lines above the first cell or below the last cell.  The text  
 contained in each cell is  broken into lines and these lines are centered  
 horizontally in the cell. The logical structure of this object is defined  
 by:</p>  
 <pre>Table   = LIST OF (Column);  
 Column  = LIST OF (Cell = Text);</pre>  
   
 <div class="figure">    <p>Let us define an object type, called Table, which is composed of a
 <hr>    sequence of 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 right of the last.  Each column has a variable number
     of cells, placed one on top of the other and separated by horizontal lines. 
     There are no horizontal lines above the first cell or below the last cell. 
     The text contained in each cell is  broken into lines and these lines are
     centered horizontally in the cell. The logical structure of this object is
     defined by:</p>
     <pre>Table   = LIST OF (Column);
   Column  = LIST OF (Cell = Text);</pre>
   
 <pre>|                |                |               |    <div class="figure">
     <hr>
     <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 6369  Column  = LIST OF (Cell = Text);</pre> Line 5782  Column  = LIST OF (Cell = Text);</pre>
 |----------------| 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  |</pre>  |xxxx xx x xxxxxx| xxxx xx xxxxxx |  xxxxx xxxxx  |</pre>
 <p align="center">  
 <em><a name="table">The design of a table</a></em></p>  
 <hr>  
   
 </div>    <p align="center"><em><a name="table">The design of a table</a></em></p>
 <p>    <hr>
 The presentation of the table should resemble the design of the above <a    </div>
 href="#table">figure</a>.  It is defined by the following presentation schema  
 fragment:</p>    <p>The presentation of the table should resemble the design of the above <a
 <pre>BOXES    href="#table">figure</a>.  It is defined by the following presentation
     schema fragment:</p>
     <pre>BOXES
      VertLine : BEGIN       VertLine : BEGIN
                 Width : 0.3 cm;                  Width : 0.3 cm;
                 Height : Enclosing . Height;                  Height : Enclosing . Height;
Line 6414  RULES Line 5826  RULES
                 Line;                  Line;
                 Adjust : VMiddle;                  Adjust : VMiddle;
                 END;</pre>                  END;</pre>
 <p>  
 It is useful to note that the horizontal position rule of the first vertical    <p>It is useful to note that the horizontal position rule of the first
 line will not be applied, since there is no preceding box. In this case, the    vertical line will not be applied, since there is no preceding box. In this
 box is simply placed on the left side of the enclosing box.</p>    case, the 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>  
 The page models specified in the <tt>Page</tt> rule are defined by boxes  <p>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
Line 6435  page.  The page box itself is the simple Line 5846  page.  The page box itself is the simple
 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>  
 The boxes created by a page box are headers and footers and can only place  <p>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>  
 Footer boxes must have an absolute height or inherit the height of their  <p>Footer boxes must have an absolute height or inherit the height of their
 contents:</p>  contents:</p>
 <pre>Height : Enclosed . Height;</pre>  <pre>Height : Enclosed . Height;</pre>
 <p>  
 A page box must have height and width rules and these two rules must be  <p>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>  
 A page box should also have vertical and horizontal position rules and these  <p>A page box should also have vertical and horizontal position rules and
 two rules should specify the position on the sheet of paper of the rectangle  these two rules should specify the position on the sheet of paper of the
 enclosing the page's contents.  These two rules must position the upper left  rectangle enclosing the page's contents.  These two rules must position the
 corner of the enclosing rectangle in relation to the upper left corner of the  upper left corner of the enclosing rectangle in relation to the upper left
 sheet of paper, considered to be the enclosing element.  In both rules,  corner of the sheet of paper, considered to be the enclosing element.  In both
 distances must be expressed in fixed units: centimeters (<tt>cm</tt>), inches  rules, distances must be expressed in fixed units: centimeters (<tt>cm</tt>),
 (<tt>in</tt>), or typographer's points (<tt>pt</tt>).  Thus, rules similar to  inches (<tt>in</tt>), or typographer's points (<tt>pt</tt>).  Thus, rules
 the following should be found in the rules for a page box:</p>  similar to the following should be found in the rules for a page box:</p>
 <pre>BOXES  <pre>BOXES
    ThePage :     ThePage :
       BEGIN        BEGIN
Line 6470  the following should be found in the rul Line 5881  the following should be found in the rul
       Width : 16 cm;        Width : 16 cm;
       Height : 22.5 cm;        Height : 22.5 cm;
       END;</pre>        END;</pre>
 <p>  
 When a document must be page broken, the page models to be constructed are  <p>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>  
 The <tt>Page</tt> rule has only one parameter, given between parentheses after  <p>The <tt>Page</tt> rule has only one parameter, given between parentheses
 the <tt>Page</tt> keyword.  This parameter is the name of the box which must  after the <tt>Page</tt> keyword.  This parameter is the name of the box which
 serve as the model for page construction.  When a <tt>Page</tt> rule is  must 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>  
 The <tt>Page</tt> rule applies to only one view; if it appears in the primary  <p>The <tt>Page</tt> rule applies to only one view; if it appears in the
 view's block of rules, a <tt>Page</tt> rule applies only to that view. Thus,  primary view's block of rules, a <tt>Page</tt> rule applies only to that view.
 different page models can be defined for the full document and for its table  Thus, different page models can be defined for the full document and for its
 of contents, which is another view of the same document. Some views can be  table of contents, which is another view of the same document. Some views can
 specified with pages, and other views of the same document can be specified  be specified with pages, and other views of the same document can be specified
 without pages.</p>  without pages.</p>
 <pre>                   'Page' '(' BoxID ')'</pre>  <pre>                   'Page' '(' BoxID ')'</pre>
 </div>  </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
Line 6507  presentation) of the box type indicated Line 5917  presentation) of the box type indicated
 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>  
 Whether a box name or type name is given, it may be followed by the name of a  <p>Whether a box name or type name is given, it may be followed by the name of
 structure schema between parentheses.  This signifies that the box or type is  a structure schema between parentheses.  This signifies that the box or type
 defined in the indicated structure schema and not in the structure schema with  is defined in the indicated structure schema and not in the structure schema
 which the rule's presentation schema is associated.</p>  with which the rule's presentation schema is associated.</p>
 <p>  
 The <tt>Copy</tt> rule can also be applied to a presentation box.  If the  <p>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
Line 6529  footers.</p> Line 5939  footers.</p>
   BoxTypeToCopy = BoxID [ ExtStruct ] /    BoxTypeToCopy = BoxID [ ExtStruct ] /
                   ElemID [ ExtStruct ] .                    ElemID [ ExtStruct ] .
   ExtStruct     = '(' ElemID ')' .</pre>    ExtStruct     = '(' ElemID ')' .</pre>
 <p>  
 Like the creation rules, the <tt>Copy</tt> rule cannot appear in the <a  <p>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 can only
 appear in the primary view's block of rules; the copy rule is applied to all  appear in the primary view's block of rules; the copy rule is applied to all
 views.</p>  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);</pre>  RefChapter = REFERENCE (Chapter);</pre>
 <p>  
 then the following presentation rules (among many other rules in the    <p>then the following presentation rules (among many other rules in the
 presentation schema) can be specified:</p>    presentation schema) can be specified:</p>
 <pre>COUNTERS    <pre>COUNTERS
    ChapterCtr : RANK OF Chapter;     ChapterCtr : RANK OF Chapter;
 BOXES  BOXES
    ChapterNumber :     ChapterNumber :
Line 6567  RULES Line 5977  RULES
       Copy (ChapterNumber);        Copy (ChapterNumber);
       ...        ...
       END;</pre>        END;</pre>
 <p>  
 which makes the number of the chapter designated by the reference appear in    <p>which makes the number of the chapter designated by the reference appear
 uppercase roman numerals, in place of the reference to a chapter itself.    in 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>      Copy (ChapterTitle);</pre>    <pre>      Copy (ChapterTitle);</pre>
 <p>  
 To define a header box, named <tt>RunningTitle</tt>, which contains the title    <p>To define a header box, named <tt>RunningTitle</tt>, which contains the
 of the current chapter, the box's contents are defined in this way:</p>    title of the current chapter, the box's contents are defined in this
 <pre>BOXES    way:</p>
     <pre>BOXES
    RunningTitle :     RunningTitle :
       Copy (ChapterTitle);</pre>        Copy (ChapterTitle);</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>  <h2><a name="sectb51">Document translation</a></h2>
 <p>  
 Because of its document model, Thot can produce documents in a high-level  <p>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
Line 6605  also be used to export documents from Th Line 6013  also be used to export documents from Th
 formalisms.</p>  formalisms.</p>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc511">Translation principles</a></h3>  <h3><a name="sectc511">Translation principles</a></h3>
 <p>  
 Document translation allows the export of documents to other systems which do  <p>Document translation allows the export of documents to other systems which
 not accept Thot's canonical form.  Translation can be used to export document  do not accept Thot's canonical form.  Translation can be used to export
 to source-based formatters like T<sub><big>E</big></sub>X,  document 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>  
 For each document or object class, a set of translation rules can be defined,  <p>For each document or object class, a set of translation rules can be
 specifying how the canonical form should be transformed into a given  defined, 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>  
 Like presentation schemas, translation schemas are generic.  Thus, they apply  <p>Like presentation schemas, translation schemas are generic.  Thus, they
 to an entire object or document class and permit translation of all documents  apply to an entire object or document class and permit translation of all
 or objects of that class.</p>  documents or objects of that class.</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc512">Translation procedure</a></h3>  <h3><a name="sectc512">Translation procedure</a></h3>
 <p>  
 The translator works on the specific logical structure of the document being  <p>The translator works on the specific logical structure of the document
 translated.  It traverses the primary tree of this logical structure in  being 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>    <li>with element types defined in the structure schema,</li>
 with element types defined in the structure schema,    <li>with global or local attributes defined in the structure schema,</li>
 </li>    <li>with specific presentation rules,</li>
 <li>    <li>with the content of the leaves of  the structure (characters, symbols
 with global or local attributes defined in the structure schema,      and graphical elements)</li>
 </li>  
 <li>  
 with specific presentation rules,  
 </li>  
 <li>  
 with the content of the leaves of  the structure (characters, symbols and  
 graphical elements)  
 </li>  
 </ul>  </ul>
 <p>  
 Thus, for each node, the translator applies all rules associated with the  <p>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>  
 Rules associated with the content of leaves are different from all other  <p>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>    <li>generation of a text constant or variable before or after the contents
 generation of a text constant or variable before or after the contents of an      of an element,</li>
 element,    <li>modification of the order in which elements appear after
 </li>    translation,</li>
 <li>    <li>removal of an element in the translated document,</li>
 modification of the order in which elements appear after translation,    <li>and writing messages on the user's terminal during translation.</li>
 </li>  
 <li>  
 removal of an element in the translated document,  
 </li>  
 <li>  
 and writing messages on the user's terminal during translation.  
 </li>  
 </ul>  </ul>
 </div>  </div>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb52">Translation definition language</a></h2>  <h2><a name="sectb52">Translation definition language</a></h2>
 <p>  
 Translation schemas are written in a custom language, called T, which is  <p>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
Line 6700  identifiers created by the programmer mu Line 6090  identifiers created by the programmer mu
 way.</p>  way.</p>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc521">Organization of a translation schema</a></h3>  <h3><a name="sectc521">Organization of a translation schema</a></h3>
 <p>  
 A translation schema is begun by the <tt>TRANSLATION</tt> keyword and is  <p>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  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>  
 After this declaration of the structure, the following material appears in  <p>After this declaration of the structure, the following material appears in
 order:</p>  order:</p>
 <ul>  <ul>
 <li>    <li>the length of lines produced by the translation,</li>
 the length of lines produced by the translation,    <li>the character delimiting the end of the line,</li>
 </li>    <li>the character string which the translator will insert if it must
 <li>      line-break the translated text,</li>
 the character delimiting the end of the line,    <li>declarations of
 </li>      <ul>
 <li>        <li>buffers,</li>
 the character string which the translator will insert if it must line-break        <li>counters,</li>
 the translated text,        <li>constants,</li>
 </li>        <li>variables,</li>
 <li>      </ul>
 declarations of    </li>
 <ul>    <li>translation rules associated with element types,</li>
 <li>    <li>translation rules associated with attributes,</li>
 buffers,    <li>translation rules associated with specific presentation rules,</li>
 </li>    <li>translation rules associated with characters strings, symbols and
 <li>      graphical elements.</li>
 counters,  
 </li>  
 <li>  
 constants,  
 </li>  
 <li>  
 variables,  
 </li>  
 </ul>  </ul>
 </li>  
 <li>  <p>Each of these sections is introduced by a keyword followed by a sequence of
 translation rules associated with element types,  
 </li>  
 <li>  
 translation rules associated with attributes,  
 </li>  
 <li>  
 translation rules associated with specific presentation rules,  
 </li>  
 <li>  
 translation rules associated with characters strings, symbols and graphical  
 elements.  
 </li>  
 </ul>  
 <p>  
 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
Line 6771  particular alphabet.</p> Line 6137  particular alphabet.</p>
                   'RULES' ElemSeq                    'RULES' ElemSeq
                 [ 'ATTRIBUTES' AttrSeq ]                  [ 'ATTRIBUTES' AttrSeq ]
                 [ 'PRESENTATION' PresSeq ]                  [ 'PRESENTATION' PresSeq ]
                 &lt; 'TEXTTRANSLATE' TextTransSeq >                  &lt; 'TEXTTRANSLATE' TextTransSeq &gt;
                 [ 'SYMBTRANSLATE' TransSeq ]                  [ 'SYMBTRANSLATE' TransSeq ]
                 [ 'GRAPHTRANSLATE' TransSeq ]                  [ 'GRAPHTRANSLATE' TransSeq ]
                   'END' .</pre>                    'END' .</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc522">Line length</a></h3>  <h3><a name="sectc522">Line length</a></h3>
 <p>  
 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
Line 6789  number of characters.  The end of the li Line 6154  number of characters.  The end of the li
 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>  
 If the <tt>LINEEND</tt> instruction is not defined then the linefeed character  <p>If the <tt>LINEEND</tt> instruction is not defined then the linefeed
 (octal code 12) is used as the default line end character. If the  character (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
Line 6799  translation rules generate line end mark Line 6164  translation rules generate line end mark
 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>     LineLength = NUMBER .</pre>  <pre>     LineLength = NUMBER .</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>To limit the lines produced by the translator to a length of 80
 To limit the lines produced by the translator to a length of 80 characters,    characters, the following rule is written at the beginning of the
 the following rule is written at the beginning of the translation schema.</p>    translation schema.</p>
 <pre>LineLength 80;</pre>    <pre>LineLength 80;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc523">Buffers</a></h3>  <h3><a name="sectc523">Buffers</a></h3>
 <p>  
 A buffer is a  unit of memory managed by the translator, which can either  <p>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>  
 Thus, there are two types of buffers:  buffers for reading from the terminal  <p>Thus, there are two types of buffers:  buffers for reading from the
 (filled by the <tt>Read</tt> rule) and the buffer of picture names (containing  terminal (filled by the <tt>Read</tt> rule) and the buffer of picture names
 the name of the last picture encountered).  A translation schema can use  (containing the name of the last picture encountered).  A translation schema
 either type, one or several read buffers and one (and only one) picture name  can use either type, one or several read buffers and one (and only one)
 buffer.</p>  picture name buffer.</p>
 <p>  
 If any buffers are used, the <tt>BUFFERS</tt> keyword must be present,  <p>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>     BufferSeq = Buffer &lt; Buffer > .  <pre>     BufferSeq = Buffer &lt; Buffer &gt; .
      Buffer    = BufferID [ '(' 'Picture' ')' ] ';' .       Buffer    = BufferID [ '(' 'Picture' ')' ] ';' .
      BufferID  = NAME .</pre>       BufferID  = NAME .</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>BUFFERS
 <pre>BUFFERS  
      pictureName (Picture); DestName;</pre>       pictureName (Picture); DestName;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc524">Counters</a></h3>  <h3><a name="sectc524">Counters</a></h3>
 <p>  
 Certain translation rules generate text that varies according to the context  <p>Certain translation rules generate text that varies according to the
 of the element to which the rules apply.  Variable text is defined either in  context of the element to which the rules apply.  Variable text is defined
 the <a href="#sectc526"><tt>VAR</tt> section</a> of the translation schema or  either in the <a href="#sectc526"><tt>VAR</tt> section</a> of the translation
 in the rule itself (see the <tt>Create</tt> and <tt>Write</tt> rules).  Both  schema or in the rule itself (see the <tt>Create</tt> and <tt>Write</tt>
 types of definition rely on counters for the calculation of variable  rules).  Both types of definition rely on counters for the calculation of
 material.</p>  variable material.</p>
 <p>  
 There are two types of counter: counters whose value is explicitely computed  <p>There are two types of counter: counters whose value is explicitely
 by applying <a href="#sectc5221"><tt>Set</tt> and <tt>Add</tt> rules</a>, and  computed by applying <a href="#sectc5221"><tt>Set</tt> and <tt>Add</tt>
 counters whose value is computed by a function associated with the counter.  rules</a>, and counters whose value is computed by a function associated with
 Those functions allow the same calculations as can be used in presentation  the counter. Those functions allow the same calculations as can be used in
 schemas. As in a presentation schema, counters must be defined in the  presentation schemas. As in a presentation schema, counters must be defined in
 <tt>COUNTERS</tt> section of the translation schema before they are used.</p>  the <tt>COUNTERS</tt> section of the translation schema before they are
 <p>  used.</p>
 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  <p>When counters are used in a translation schema, the <tt>COUNTERS</tt>
 composed of the counter's name possibly followed by a colon and the counting  keyword is followed by the declarations of every counter used.  Each
 function to be used for the counter.  The declaration is terminated by a  declaration is composed of the counter's name possibly followed by a colon and
 semi-colon. If the counter is explicitely computed by <tt>Set</tt> and  the counting function to be used for the counter.  The declaration is
 <tt>Add</tt> rules, no counting function is indicated. If a counting function  terminated by a semi-colon. If the counter is explicitely computed by
 is indicated, <tt>Set</tt> and <tt>Add</tt> rules cannot be applied to that  <tt>Set</tt> and <tt>Add</tt> rules, no counting function is indicated. If a
 counter.</p>  counting function is indicated, <tt>Set</tt> and <tt>Add</tt> rules cannot be
 <p>  applied to that counter.</p>
 The counting function indicates how the counter's value will be computed.  
   <p>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>    <li><tt>Rank of ElemID</tt> indicates that the counter's value is the rank
 <tt>Rank of ElemID</tt> indicates that the counter's value is the rank of the      of the element of type <tt>ElemID</tt> which encloses the element for
 element of type <tt>ElemID</tt> which encloses the element for which the      which the counter is being evaluated.  For the purposes of this function,
 counter is being evaluated.  For the purposes of this function, an element of      an element of type <tt>ElemID</tt> is considered to enclose itself.  This
 type <tt>ElemID</tt> is considered to enclose itself.  This function is      function is primarily used  when the element of type <tt>ElemID</tt> is
 primarily used  when the element of type <tt>ElemID</tt> is part of an      part of an aggregate or list, in which case the counter's value is the
 aggregate or list, in which case the counter's value is the element's rank in      element's rank in its list or aggregate.  Note that, unlike the
 its list or aggregate.  Note that, unlike the <tt>Rank</tt> function for      <tt>Rank</tt> function for presentation schemas, the <tt>Page</tt> keyword
 presentation schemas, the <tt>Page</tt> keyword cannot be used in place of the      cannot be used in place of the <tt>ElemID</tt>.
 <tt>ElemID</tt>.      <p>The type name <tt>ElemID</tt> can be followed by an integer.  That
 <p>      number represents the relative level, among the ancestors of the concerned
 The type name <tt>ElemID</tt> can be followed by an integer.  That number      element, of the element whose rank is asked.  If that relative level
 represents the relative level, among the ancestors of the concerned element,      <i>n</i> is unsigned, the <i>n<sup>th</sup></i> element of type
 of the element whose rank is asked.  If that relative level <i>n</i> is      <tt>ElemID</tt> encountered when travelling the logical structure from the
 unsigned, the <i>n<sup>th</sup></i> element of type <tt>ElemID</tt>      root to the concerned element is taken into account.  If the relative
 encountered when travelling the logical structure from the root to the      level is negative, the logical structure is travelled in the other
 concerned element is taken into account.  If the relative level is negative,      direction, from the concerned element to the root.</p>
 the logical structure is travelled in the other direction, from the concerned    </li>
 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
 <li>      evaluated. The counter counts the number of elements of type
 <tt>Rlevel of ElemID</tt> indicates that the counter's values is the relative      <tt>ElemID</tt> which are found on the path between the root of the
 level in the tree of the element for which the counter is being evaluated. The      document's logical structure tree and the element (inclusive).</li>
 counter counts the number of elements of type <tt>ElemID</tt> which are found    <li><tt>Set n on Type1 Add m on Type2</tt> indicates that the counter's
 on the path between the root of the document's logical structure tree and the      value is calculated as follows:  in traversing the document from the
 element (inclusive).      beginning to the element for which the counter is being evaluated, the
 </li>      counter is set to the value <tt>n</tt> each time a <tt>Type1</tt> element
 <li>      is encountered and is incremented by the amount <tt>m</tt> each time a
 <tt>Set n on Type1 Add m on Type2</tt> indicates that the counter's value is      <tt>Type2</tt> element is encountered.  The initial value <tt>n</tt> and
 calculated as follows:  in traversing the document from the beginning to the      the increment <tt>m</tt> are integers.</li>
 element for which the counter is being evaluated, the counter is set to the  </ul>
 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  <p>As in a presentation schema, the <tt>Rank</tt> and <tt>Set</tt> functions
 encountered.  The initial value <tt>n</tt> and the increment <tt>m</tt> are  can be modified by a numeric attribute which changes their initial value. This
 integers.  is indicated by the <tt>Init</tt> keyword followed by the numeric attribute's
 </li>  
 </ul>  
 <p>  
 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  
 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>     CounterSeq  = Counter &lt; Counter > .  <pre>     CounterSeq  = Counter &lt; Counter &gt; .
      Counter     = CounterID [ ':' CounterFunc ] ';' .       Counter     = CounterID [ ':' CounterFunc ] ';' .
      CounterID   = NAME .       CounterID   = NAME .
      CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]       CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]
Line 6942  numeric and must be a local attribute of Line 6301  numeric and must be a local attribute of
      Increment   = NUMBER .       Increment   = NUMBER .
      ElemID      = NAME .       ElemID      = NAME .
      AttrID      = NAME .</pre>       AttrID      = NAME .</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 6956  If the body of a chapter is defined in t Line 6315  If the body of a chapter is defined in t
                                     END;                                      END;
                     END                      END
          );</pre>           );</pre>
 <p>  
 (sections are defined recursively), a counter can be defined giving the <a    <p>(sections are defined recursively), a counter can be defined giving the
 name="sectnum">number of a section</a> within its level in the hierarchy:</p>    <a name="sectnum">number of a section</a> within its level in the
 <pre>COUNTERS    hierarchy:</p>
     <pre>COUNTERS
    SectionNumber : Rank of Section;</pre>     SectionNumber : Rank of Section;</pre>
 <p>  
 A counter holding the hierarchic level of a section:</p>    <p>A counter holding the hierarchic level of a section:</p>
 <pre>   SectionLevel : Rlevel of Section;</pre>    <pre>   SectionLevel : Rlevel of Section;</pre>
 <p>  
 A <a name="uniquenum">counter</a> which sequentially numbers all the    <p>A <a name="uniquenum">counter</a> which sequentially numbers all the
 document's sections, whatever their hierarchic level:</p>    document's sections, whatever their hierarchic level:</p>
 <pre>   UniqueSectNum : Set 0 on Document Add 1 on Section;</pre>    <pre>   UniqueSectNum : Set 0 on Document Add 1 on Section;</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc525">Constants</a></h3>  <h3><a name="sectc525">Constants</a></h3>
 <p>  
 A common feature of translation rules is the generation of constant text. This  <p>A common feature of translation rules is the generation of constant text.
 text can be defined in the rule that generates it (see for example the <a  This text can be defined in the rule that generates it (see for example the <a
 href="#sectc5210"><tt>Create</tt></a> and <a  href="#sectc5210"><tt>Create</tt></a> and <a
 href="#sectc5211"><tt>Write</tt></a> rules); but it can also be defined once  href="#sectc5211"><tt>Write</tt></a> rules); but it can also be defined once
 in the constant declaration section and used many times in different rules.  in the constant declaration section and used many times in different rules.
 The latter option is preferable when the same text is used in several rules or  The latter option is preferable when the same text is used in several rules or
 several <a href="#sectc526">variables</a>.</p>  several <a href="#sectc526">variables</a>.</p>
 <p>  
 The <tt>CONST</tt> keyword begins the constant declaration section of the  <p>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>     ConstSeq   = Const &lt; Const > .  <pre>     ConstSeq   = Const &lt; Const &gt; .
      Const      = ConstID '=' ConstValue ';' .       Const      = ConstID '=' ConstValue ';' .
      ConstID    = NAME .       ConstID    = NAME .
      ConstValue = STRING .</pre>       ConstValue = STRING .</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
 The following rule assigns the name <tt>TxtLevel</tt> to the character string    string ``Level'':</p>
 ``Level'':</p>    <pre>CONST
 <pre>CONST  
      TxtLevel = 'Level';</pre>       TxtLevel = 'Level';</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc526">Variables</a></h3>  <h3><a name="sectc526">Variables</a></h3>
 <p>  
 Variables allow to define variable text which is generated by the  <p>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 file  <tt>Create</tt> and <tt>Write</tt> rules.  They are also used to define 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  <tt>RemoveFile</tt>, and <tt>Indent</tt> rules.  Variables can be defined
Line 7017  in the <tt>VAR</tt> section, and when th Line 6375  in the <tt>VAR</tt> section, and when th
 in the translation schema, it makes sense to define it globally in the  in the translation schema, it makes sense to define it globally in the
 <tt>VAR</tt> section.  This section is only present if at least one variable  <tt>VAR</tt> section.  This section is only present if at least one variable
 is defined globally.</p>  is defined globally.</p>
 <p>  
 After the <tt>VAR</tt> keyword, each global variable is defined by its name, a  <p>After the <tt>VAR</tt> keyword, each global variable is defined by its
 colon separator and a sequence of functions (at least one function). Each  name, a colon separator and a sequence of functions (at least one function).
 variable definition is terminated by a semicolon. Functions determine the  Each 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>    <li>The function <tt>Value(Counter)</tt>returns a string representing the
 The function <tt>Value(Counter)</tt>returns a string representing the value      value taken by the counter when it is evaluated for the element in whose
 taken by the counter when it is evaluated for the element in whose rule the      rule the variable is used.  The counter must have been declared in the
 variable is used.  The counter must have been declared in the      <tt>COUNTERS</tt> section of the translation schema.  When the counter is
 <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
 expressed in arabic numerals, the counter name can be followed by a colon and      and an integer indicating a minimum length (number of characters) for the
 an integer indicating a minimum length (number of characters) for the string;      string; if the counter's value is normally expressed with fewer characters
 if the counter's value is normally expressed with fewer characters than the      than the required minimum, zeroes are added to the front of the string to
 required minimum, zeroes are added to the front of the string to achieve the      achieve the minimum length.
 minimum length.      <p>By default, the counter value is written in arabic digits. If another
 <p>      representation of that value is needed, the counter name must be followed
 By default, the counter value is written in arabic digits. If another      by a comma and one of the following keywords:</p>
 representation of that value is needed, the counter name must be followed by a      <ul>
 comma and one of the following keywords:</p>        <li><tt>Arabic</tt>: arabic numerals (default value),</li>
 <ul>        <li><tt>LRoman</tt>: lower-case roman numerals,</li>
 <li>        <li><tt>URoman</tt>: upper-case roman numerals,</li>
 <tt>Arabic</tt>: arabic numerals (default value),        <li><tt>Uppercase</tt>: upper-case letter,</li>
 </li>        <li><tt>Lowercase</tt>: lower-case letter.</li>
 <li>      </ul>
 <tt>LRoman</tt>: lower-case roman numerals,    </li>
 </li>    <li>The function <tt>FileDir</tt>, without parameter, returns a string
 <li>      representing the name of the directory of the output file that has been
 <tt>URoman</tt>: upper-case roman numerals,      given as a parameter to the translation program. The string includes a
 </li>      character '/' at the end.</li>
 <li>    <li>The function <tt>FileName</tt>, without parameter, returns a string
 <tt>Uppercase</tt>: upper-case letter,      representing the name of the output file that has been given as a
 </li>      parameter to the translation program. The file extension (the character
 <li>      string that terminate the file name, after a dot) is not part of that
 <tt>Lowercase</tt>: lower-case letter.      string.</li>
 </li>    <li>The function <tt>Extension</tt>, without parameter, returns a string
 </ul>      representing the extension of the file name. That string is empty if the
 </li>      file name that has been given as a parameter to the translation program
 <li>      has no extension. If there is an extension, its first character is a
 The function <tt>FileDir</tt>, without parameter, returns a string    dot.</li>
 representing the name of the directory of the output file that has been given    <li>The function <tt>DocumentName</tt>, without parameter, returns a string
 as a parameter to the translation program. The string includes a character '/'      representing the name of the document being translated.</li>
 at the end.    <li>The function <tt>DocumentDir</tt>, without parameter, returns a string
 </li>      representing the directory containing the document being translated.</li>
 <li>    <li>The function formed by the name of a constant returns that constant's
 The function <tt>FileName</tt>, without parameter, returns a string      value.</li>
 representing the name of the output file that has been given as a parameter to    <li>The function formed by a character string between apostrophes returns
 the translation program. The file extension (the character string that      that string.</li>
 terminate the file name, after a dot) is not part of that string.    <li>The function formed by the name of a buffer returns the contents of that
 </li>      buffer.  If the named buffer is the picture buffer, then the name of the
 <li>      last picture encountered is returned.  Otherwise, the buffer is a read
 The function <tt>Extension</tt>, without parameter, returns a string      buffer and the value returned is text previously read from the terminal. 
 representing the extension of the file name. That string is empty if the file      If the buffer is empty (no picture has been encountered or the
 name that has been given as a parameter to the translation program has no      <tt>Read</tt> rule has not been executed for the buffer), then the empty
 extension. If there is an extension, its first character is a dot.      string is returned.</li>
 </li>    <li>The function formed by an attribute name takes the value of the
 <li>      indicated attribute for the element to which the variable applies.  If the
 The function <tt>DocumentName</tt>, without parameter, returns a string      element does not have that attribute, then the element's ancestor are
 representing the name of the document being translated.      searched toward the root of the tree.  If one of the ancestors does have
 </li>      the attribute then its value is used.  If no ancestors have the attribute,
 <li>      then the value of the function is the empty string.</li>
 The function <tt>DocumentDir</tt>, without parameter, returns a string  
 representing the directory containing the document being translated.  
 </li>  
 <li>  
 The function formed by the name of a constant returns that constant's value.  
 </li>  
 <li>  
 The function formed by a character string between apostrophes returns that  
 string.  
 </li>  
 <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  
 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  
 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.  
 </li>  
 <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  
 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  
 value is used.  If no ancestors have the attribute, then the value of the  
 function is the empty string.  
 </li>  
 </ul>  </ul>
 <pre>     VariableSeq = Variable &lt; Variable > .  <pre>     VariableSeq = Variable &lt; Variable &gt; .
      Variable    = VarID ':' Function &lt; Function > ';' .       Variable    = VarID ':' Function &lt; Function &gt; ';' .
      VarID       = NAME .       VarID       = NAME .
      Function    ='Value' '(' CounterID [ ':' Length ]       Function    ='Value' '(' CounterID [ ':' Length ]
                             [ ',' CounterStyle ] ')' /                              [ ',' CounterStyle ] ')' /
Line 7121  function is the empty string. Line 6453  function is the empty string.
      CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /       CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /
                    'Uppercase' / 'Lowercase' .                     'Uppercase' / 'Lowercase' .
      CharString  = STRING .</pre>       CharString  = STRING .</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,
 To create, at the beginning of each section of the translated document, text    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
 following <a name="varsectexample">variable definition</a> might be used:</p>    used:</p>
 <pre>VAR    <pre>VAR
      SectionVar : 'Section' Value(SectionNumber);</pre>       SectionVar : 'Section' Value(SectionNumber);</pre>
 <p>  
 (see the definition of <a href="#sectnum"><tt>SectionNumber</tt></a>).</p>    <p>(see the definition of <a
 <p>    href="#sectnum"><tt>SectionNumber</tt></a>).</p>
 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    <p>The following variable definition can be used to create, at the beginning
 section. It used the constant defined above.</p>    of each section, the text ``Level'' followed by the hierarchical level of
 <pre>     LevelVar : TxtLevel Value(SectionLevel);</pre>    the section. It used the constant defined above.</p>
 <p>    <pre>     LevelVar : TxtLevel Value(SectionLevel);</pre>
 (see the definitions of <a href="#sectnum"><tt>SectionLevel</tt></a> and of <a  
 href="#levelexample"><tt>TxtLevel</tt></a>).</p>    <p>(see the definitions of <a href="#sectnum"><tt>SectionLevel</tt></a> and
 <p>    of <a href="#levelexample"><tt>TxtLevel</tt></a>).</p>
 To generate the translation of each section in a different file (see <a  
 href="#sectc5220">rule <tt>ChangeMainFile</tt></a>), the name of these files    <p>To generate the translation of each section in a different file (see <a
 might be defined by the following variable:</p>    href="#sectc5220">rule <tt>ChangeMainFile</tt></a>), the name of these files
 <pre>     VarOutpuFile : FileName Value(SectionNumber)    might be defined by the following variable:</p>
     <pre>     VarOutpuFile : FileName Value(SectionNumber)
                     Extension;</pre>                      Extension;</pre>
 <p>  
 If <tt>output.txt</tt> is the name of the <a name="varoutputfile">output    <p>If <tt>output.txt</tt> is the name of the <a name="varoutputfile">output
 file</a> specified when starting the translation program, translated sections    file</a> specified when starting the translation program, translated
 are written in files <tt>output1.txt</tt>, <tt>output2.txt</tt>, etc.</p>    sections are written in files <tt>output1.txt</tt>, <tt>output2.txt</tt>,
     etc.</p>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc527">Translating structure elements</a></h3>  <h3><a name="sectc527">Translating structure elements</a></h3>
 <p>  
 The <tt>RULES</tt> keyword introduces the translation rules which will be  <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>  
 If there are no translation rules for an element type, the elements that it  <p>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>  
 The translation rules for an element type defined in the structure schema are  <p>The translation rules for an element type defined in the structure schema
 written using the name of the type followed by a colon and the list of  are 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  applicable rules.  When the element  type is a <a href="#sectd3285">mark
 pair</a>, but only in this case, the type name must be preceded by the  pair</a>, but only in this case, the type name must be preceded by the
 <tt>First</tt> or <tt>Second</tt> keyword.  This keyword indicates whether the  <tt>First</tt> or <tt>Second</tt> keyword.  This keyword indicates whether the
 rules that follow 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>  
 The list of rules can take several forms.  It may be a simple non-conditional  <p>The list of rules can take several forms.  It may be a simple
 rule.  It can also be formed by a condition followed by one or more simple  non-conditional rule.  It can also be formed by a condition followed by one or
 rules.  Or it can be a block of rules beginning with the <tt>BEGIN</tt>  more simple rules.  Or it can be a block of rules beginning with the
 keyword and ending with the <tt>END</tt> keyword and a semicolon.  This block  <tt>BEGIN</tt> keyword and ending with the <tt>END</tt> keyword and a
 of rules can contain one or more simple rules and/or one or more conditions,  semicolon.  This block of rules can contain one or more simple rules and/or
 each followed by one or more simple rules.</p>  one or more conditions, each followed by one or more simple rules.</p>
 <pre>     ElemSeq        = TransType &lt; TransType > .  <pre>     ElemSeq        = TransType &lt; TransType &gt; .
      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 &gt; 'END' ';' .
      Rule           = SimpleRule / ConditionBlock .       Rule           = SimpleRule / ConditionBlock .
      ConditionBlock = 'IF' ConditionSeq SimpleRuleSeq .       ConditionBlock = 'IF' ConditionSeq SimpleRuleSeq .
      SimpleRuleSeq  = 'BEGIN' &lt; SimpleRule > 'END' ';' /        SimpleRuleSeq  = 'BEGIN' &lt; SimpleRule &gt; 'END' ';' / 
                       SimpleRule .</pre>                        SimpleRule .</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc528">Conditional rules</a></h3>  <h3><a name="sectc528">Conditional rules</a></h3>
 <p>  
 In a translation schema, the translation rules are either associated with  <p>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
 is encountered in the translated document or each time the attribute value is  is encountered in the translated document or each time the attribute value is
Line 7206  carried by an element or also, each time Line 6539  carried by an element or also, each time
 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>  
 A condition begins with the keyword <tt>IF</tt>, followed by a sequence of  <p>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>  
 When the translation rule(s) controlled by the condition apply to a reference  <p>When the translation rule(s) controlled by the condition apply to a
 element or a reference attribute, an elementary condition can also apply to  reference element or a reference attribute, an elementary condition can also
 element referred by this reference.  The <tt>Target</tt> keyword is used for  apply to element referred by this reference.  The <tt>Target</tt> keyword is
 that purpose.  It must appear before the keyword defining the condition  used for that purpose.  It must appear before the keyword defining the
 type.</p>  condition type.</p>
 <p>  
 Depending on their type, some conditions may apply either to the element with  <p>Depending on their type, some conditions may apply either to the element
 which they are associated, or to one of its ancestor.  In the case of an  with 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>    <li>either an integer which represents the number of levels in the tree
 either an integer which represents the number of levels in the tree between      between the element and the ancestor of interest,</li>
 the element and the ancestor of interest,    <li>or the type name of the ancestor of interest.  If that type is defined
 </li>      in a separate structure schema, the name of that schema must follow
 <li>      between parentheses.</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.  
 </li>  
 </ul>  </ul>
 <p>  
 There is a special case for the parent element, which can be simply written  <p>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>  
 Only conditions <tt>First</tt>, <tt>Last</tt>, <tt>Referred</tt>,  <p>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>,
Line 7246  ancestor. Conditions <tt>Defined</tt>, < Line 6575  ancestor. Conditions <tt>Defined</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>  
 In condition <tt>Referred</tt> and in the condition that applies to a named  <p>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>  
 The form of an elementary condition varies according to the type of  <p>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  <h4><a name="sectd5281">Conditions based on the logical position of the
 element</a></h4>  element</a></h4>
 <p>  
 The condition can be on the position of the element in the document's logical  <p>The condition can be on the position of the element in the document's
 structure tree.  It is possible to test whether the element is the first  logical structure tree.  It is possible to test whether the element is the
 (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is not  first (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is
 the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>).</p>  not the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>).</p>
 <p>  
 It is also possible to test if the element is contained in an element of a  <p>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>  
 If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the  <p>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>  
 An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the  <p>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>&gt;</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 &gt; 0.</p>
 <p>  
 If the condition applies to translation rules associated with an attribute,  <p>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. The  executed only if the attribute is attached to an element of that type. The
Line 7296  rules must be executed only if the eleme Line 6624  rules must be executed only if the eleme
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd5282">Conditions on references</a></h4>  <h4><a name="sectd5282">Conditions on references</a></h4>
 <p>  
 References may be taken into account in conditions, which can be based on the  <p>References may be taken into account in conditions, which can be based on
 fact that the element, or one of its ancestors (unless symbol <tt>*</tt> is  the fact that the element, or one of its ancestors (unless symbol <tt>*</tt>
 present), is designated by a at least one reference (<tt>Referred</tt>) or by  is present), is designated by a at least one reference (<tt>Referred</tt>) or
 none (<tt>NOT Referred</tt>).  If the element or attribute to which the  by 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
Line 7312  keyword.</p> Line 6639  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>  
 Elements which are <a href="#sectc326">parameters</a> can be given a  <p>Elements which are <a href="#sectc326">parameters</a> can be given a
 particular condition which is based on whether or not the parameter is given a  particular condition which is based on whether or not the parameter is given a
 value in the document (<tt>Defined</tt> or <tt>NOT Defined</tt>,  value in the document (<tt>Defined</tt> or <tt>NOT Defined</tt>,
 respectively).</p>  respectively).</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd5284">Conditions on the alphabets</a></h4>  <h4><a name="sectd5284">Conditions on the alphabets</a></h4>
 <p>  
 The character string base type (and only this type) can use the condition  <p>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>  
 In the current implementation of Thot, the available alphabets are the  <p>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>  <h4><a name="sectd5285">Conditions on page breaks</a></h4>
 <p>  
 The page break base type (and only this type) can use the following  <p>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
Line 7352  of page breaking.</p> Line 6676  of page breaking.</p>
 </div>  </div>
   
 <div class="subsubsection">  <div class="subsubsection">
   
 <h4><a name="sectd5286">Conditions on the element's content</a></h4>  <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  <p>The condition can be based on whether or not the element is empty.  An
 which has no children or whose leaves are all empty is considered to be empty  element which has no children or whose leaves are all empty is considered to
 itself.  This condition is expressed by the <tt>Empty</tt> keyword, optionally  be empty itself.  This condition is expressed by the <tt>Empty</tt> keyword,
 preceded by the <tt>NOT</tt> keyword.</p>  optionally 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>  <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  <p>The condition can be based on the presence or absence of comments
 with the translated element.  This condition is expressed by the keyword  associated with the translated element.  This condition is expressed by the
 <tt>Comment</tt>, optionally preceded by the keyword <tt>NOT</tt>.</p>  keyword <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  <h4><a name="sectd5288">Conditions on the presence of specific presentation
 rules</a></h4>  rules</a></h4>
 <p>  
 The condition can be based on the presence or absence of specific presentation  <p>The condition can be based on the presence or absence of specific
 rules associated with the translated element, whatever the rules, their value  presentation rules associated with the translated element, whatever the rules,
 or their number.  This condition is expressed by the keyword  their value 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  <h4><a name="sectd5289">Conditions on the presence of logical
 attributes</a></h4>  attributes</a></h4>
 <p>  
 In the same way, the condition can be based on the presence or absence of  <p>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>  <h4><a name="sectd52810">Conditions on logical attributes</a></h4>
 <p>  
 If the condition appears in the translation rules of an attribute, the  <p>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>  
 Another type of condition can only be applied to the translation rules when  <p>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
Line 7414  matter what the attribute's value, the c Line 6733  matter what the attribute's value, the c
 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>  
 The representation of the values of an <a name="relattr">attribute</a> in a  <p>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,
Line 7423  the condition can be based on a single v Line 6742  the condition can be based on a single v
 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>    <li>all values less than a given value (the value is preceded by a ``less
 all values less than a given value (the value is preceded by a ``less than''      than'' sign).</li>
 sign).    <li>all values greater than a given value (the value is preceded by a
 </li>      ``greater than'' sign).</li>
 <li>    <li>all values falling in an interval, bounds included.  The range of values
 all values greater than a given value (the value is preceded by a ``greater      is then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where
 than'' sign).      Minimum and Maximum are integers.</li>
 </li>  
 <li>  
 all values falling in an interval, bounds included.  The range of values is  
 then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where  
 Minimum and Maximum are integers.  
 </li>  
 </ul>  </ul>
 <p>  
 All numeric values may be negative.  The integer is simply preceded by a minus  <p>All numeric values may be negative.  The integer is simply preceded by a
 sign.</p>  minus sign.</p>
 <p>  
 Both local and global attributes can be used in conditions.</p>  <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>  <h4><a name="sectd52811">Conditions on specific presentation rules</a></h4>
 <p>  
 It is possible to apply translation rules only when the element being  <p>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
Line 7458  not have it, if the condition is inverte Line 6770  not have it, if the condition is inverte
 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>  
 The representation of presentation rule values in a condition is similar to  <p>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>    <li>those taking numeric values (<tt>Size, Indent, LineSpacing,
 those taking numeric values (<tt>Size, Indent, LineSpacing, LineWeight</tt>),      LineWeight</tt>),</li>
 </li>    <li>those with values taken from a predefined list (<tt>Adjust, Justify,
 <li>      Hyphenate, Style, Weight, Font, UnderLine, Thickness,
 those with values taken from a predefined list (<tt>Adjust, Justify,    LineStyle</tt>),</li>
 Hyphenate, Style, Weight, Font, UnderLine, Thickness, LineStyle</tt>),    <li>those whose value is a name (<tt>FillPattern, Background,
 </li>      Foreground</tt>).</li>
 <li>  
 those whose value is a name (<tt>FillPattern, Background, Foreground</tt>).  
 </li>  
 </ul>  </ul>
 <p>  
 For presentation rules which take numeric values, the condition can take a  <p>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>    <li>all values less than a given value (the value is preceded by a ``less
 all values less than a given value (the value is preceded by a ``less than''      than'' sign).</li>
 sign).    <li>all values greater than a given value (the value is preceded by a
 </li>      ``greater than'' sign).</li>
 <li>    <li>all values falling in an interval, bounds included.  The range of values
 all values greater than a given value (the value is preceded by a ``greater      is then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where
 than'' sign).      Minimum and Maximum are integers.</li>
 </li>  
 <li>  
 all values falling in an interval, bounds included.  The range of values is  
 then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>, where  
 Minimum and Maximum are integers.  
 </li>  
 </ul>  </ul>
 <p>  
 Values for the <tt>Indent</tt>rule may be negative.  The integer is then  <p>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>  
 For presentation rules whose values are taken from predefined lists, the value  <p>For presentation rules whose values are taken from predefined lists, the
 which satisfies the condition is indicated by an equals sign followed by the  value which satisfies the condition is indicated by an equals sign followed by
 name of the value.</p>  the name of the value.</p>
 <p>  
 For presentation rule whose values are names, the value which satisfies the  <p>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>  
 The syntax of conditions based on the specific presentation is the same as the  <p>The syntax of conditions based on the specific presentation is the same as
 syntax used to express the <a href="#sectc5224">translation of specific  the syntax used to express the <a href="#sectc5224">translation of specific
 presentation rules</a>.</p>  presentation rules</a>.</p>
 <p>  
 When a condition has only one rule, the condition is simply followed by that  <p>When a condition has only one rule, the condition is simply followed by
 rule.  If it has several rules, they are placed after the condition between  that rule.  If it has several rules, they are placed after the condition
 the keywords <tt>BEGIN</tt> and <tt>END</tt>.</p>  between the keywords <tt>BEGIN</tt> and <tt>END</tt>.</p>
 <pre>   ConditionSeq = Condition [ 'AND' Condition ] .  <pre>   ConditionSeq = Condition [ 'AND' Condition ] .
    Condition    = [ 'NOT' ] [ 'Target' ] Cond .     Condition    = [ 'NOT' ] [ 'Target' ] Cond .
    Cond         = CondElem / CondAscend .     Cond         = CondElem / CondAscend .
Line 7543  the keywords <tt>BEGIN</tt> and <tt>END< Line 6846  the keywords <tt>BEGIN</tt> and <tt>END<
                   PresRule /                    PresRule /
                  'Comment' .                                     'Comment' .                  
    NumParent    = [ GreaterLess ] NParent .     NumParent    = [ GreaterLess ] NParent .
    GreaterLess  = '>' / '&lt;' .     GreaterLess  = '&gt;' / '&lt;' .
    NParent      = NUMBER.     NParent      = NUMBER.
    ExtStruct    = '(' ElemID ')' .     ExtStruct    = '(' ElemID ')' .
    Alphabet     = NAME .     Alphabet     = NAME .
    RelatAttr    ='=' Value /     RelatAttr    ='=' Value /
                  '>' [ '-' ] Minimum /                   '&gt;' [ '-' ] Minimum /
                  '&lt;' [ '-' ] Maximum /                   '&lt;' [ '-' ] Maximum /
                  'IN' '[' [ '-' ] MinInterval '..'                   'IN' '[' [ '-' ] MinInterval '..'
                           [ '-' ] MaxInterval ']' .                            [ '-' ] MaxInterval ']' .
Line 7560  the keywords <tt>BEGIN</tt> and <tt>END< Line 6863  the keywords <tt>BEGIN</tt> and <tt>END<
    IntegerVal   = NUMBER .     IntegerVal   = NUMBER .
    TextVal      = STRING .     TextVal      = STRING .
    AttrValue    = NAME .</pre>     AttrValue    = NAME .</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
 Suppose that after each element of type Section_Title it is useful to produce    produce the text <tt>\label{SectX}</tt> where <tt>X</tt> represents the
 the text <tt>\label{SectX}</tt> where <tt>X</tt> represents the section    section number, but only if the section is designated by one or more
 number, but only if the section is designated by one or more references in the    references in the document.  The following conditional rule produces this
 document.  The following conditional rule produces this effect:</p>    effect:</p>
 <pre>RULES    <pre>RULES
   Section_Title :    Section_Title :
     IF Referred      IF Referred
       Create ('\label{Sect' Value(UniqueSectNum) '}\12') After;</pre>        Create ('\label{Sect' Value(UniqueSectNum) '}\12') After;</pre>
 <p>  
 (the declaration of the <a href="#sectc5224"><tt>UniqueSectNum</tt>    <p>(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
 Suppose that for elements of the Elmnt type it would be useful to produce a    a character indicating the value of the numeric attribute Level associated
 character indicating the value of the numeric attribute Level associated with    with the element: an  ``A'' for all values of Level less than 3, a ``B'' for
 the element: an  ``A'' for all values of Level less than 3, a ``B'' for values    values between 3 and 10 and a ``C'' for values greater than 10.  This can be
 between 3 and 10 and a ``C'' for values greater than 10.  This can be achieved    achieved by writing the following rules for the Elmnt type:</p>
 by writing the following rules for the Elmnt type:</p>    <pre>RULES
 <pre>RULES  
   Elmnt :    Elmnt :
     BEGIN      BEGIN
     IF Level &lt; 3      IF Level &lt; 3
       Create 'A';        Create 'A';
     IF Level IN [3..10]      IF Level IN [3..10]
       Create 'B';        Create 'B';
     IF Level > 10      IF Level &gt; 10
       Create 'C';        Create 'C';
     END;</pre>      END;</pre>
 </blockquote>  </blockquote>
Line 7601  by writing the following rules for the E Line 6905  by writing the following rules for the E
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc529">Translation rules</a></h3>  <h3><a name="sectc529">Translation rules</a></h3>
 <p>  
 Fifteen types of translation rules can be associated with element types and  <p>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>,
Line 7634  based on very similar models.</p> Line 6937  based on very similar models.</p>
 </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>  
 The most frequently used rule is undoubtedly the <tt>Create</tt> rule, which  <p>The most frequently used rule is undoubtedly the <tt>Create</tt> rule,
 generates fixed or variable text (called an <em>object</em>) in the output  which generates fixed or variable text (called an <em>object</em>) in the
 file.  The generated text can be made to appear either before or after the  output file.  The generated text can be made to appear either before or after
 content of the element to which the rule applies. The rule begins with the  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>  
 The <tt>Create</tt> keyword can be followed by the <tt>IN</tt> keyword and by  <p>The <tt>Create</tt> keyword can be followed by the <tt>IN</tt> keyword and
 the name of a variable.  This means that the text generated by the rule must  by the name of a variable.  This means that the text generated by the rule
 not be written in the main output file, but in the file whose name is  must 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>  
 This allows the translation program to generate text in different files during  <p>This allows the translation program to generate text in different files
 the same run. These files do not need to be explicitely declared or opened.  during the same run. These files do not need to be explicitely declared or
 They do not need to be closed either, but if they contain temporary data, they  opened. They do not need to be closed either, but if they contain temporary
 can be removed (see the <a href="#sectc5220a"><tt>RemoveFile</tt> rule</a>).  data, they can be removed (see the <a href="#sectc5220a"><tt>RemoveFile</tt>
 As soon as the translation program executes a <tt>Create</tt> rule for a file  rule</a>). As soon as the translation program executes a <tt>Create</tt> rule
 that is not yet open, it opens the file. These files are closed when the  for a file that is not yet open, it opens the file. These files are closed
 translation is finished.</p>  when the translation is finished.</p>
 <pre>               'Create' [ 'IN' VarID ] Object  <pre>               'Create' [ 'IN' VarID ] Object
                         [ Position ] ';'                          [ Position ] ';'
      Object   = ConstID / CharString /       Object   = ConstID / CharString /
                 BufferID /                  BufferID /
                 VarID /                  VarID /
                '(' Function &lt; Function > ')' /                 '(' Function &lt; Function &gt; ')' /
                 [ 'Translated' ] AttrID /                  [ 'Translated' ] AttrID /
                'Value' /                 'Value' /
                'Content' /                 'Content' /
Line 7687  translation is finished.</p> Line 6989  translation is finished.</p>
                'RefId' /                 'RefId' /
                'DocumentName' /                 'DocumentName' /
                'DocumentDir' .</pre>                 'DocumentDir' .</pre>
 <p>  
 The object to be generated can be:</p>  <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
 a constant string, specified by its name if it is declared in the schema's      schema's <tt>CONST</tt> section, or given directly as a value between
 <tt>CONST</tt> section, or given directly as a value between apostrophes;      apostrophes;</li>
 </li>    <li>the contents of a buffer, designated by the name of the buffer;</li>
 <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
 </li>      text generated is the value of that variable evaluated for the element to
 <li>      which the rule applies.</li>
 a variable, designated by its name if it is declared in the translation    <li>the value of an attribute, if the element being translated has this
 schema's <tt>VAR</tt> section, or given directly between parentheses.  The      attribute. The attribute is specified by its name. If it's a text
 text generated is the value of that variable evaluated for the element to      attribute, it can be preceded by the <code>Translated</code> keyword,
 which the rule applies.      which causes the attribute value to be recoded using the text translation
 </li>      table defined by section <code><a
 <li>      href="#sectc5225">TEXTTRANSLATE</a></code>;</li>
 the value of an attribute, if the element being translated has this attribute.    <li>the value of a specific presentation rule.  This object can only be
 The attribute is specified by its name. If it's a text attribute, it can be      generated if the translation rule is for a <a href="#prestransl">specific
 preceded by the <code>Translated</code> keyword, which causes the attribute      presentation rule</a>.  It is specified by the <tt>Value</tt>
 value to be recoded using the text translation table defined by section    keyword;</li>
 <code><a href="#sectc5225">TEXTTRANSLATE</a></code>;    <li>the element's content.  That is, the content of the leaves of the
 </li>      subtree of the translated element.  This is specified by the
 <li>      <tt>Content</tt> keyword;</li>
 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>    <li>the translation of all attributes of the element (which is primarily
 <li>      used to apply the attribute translation rules <a
 the element's content.  That is, the content of the leaves of the subtree of      href="#sectc5222">before</a> those of the element type).  This is
 the translated element.  This is specified by the <tt>Content</tt> keyword;      specified by the <tt>Attributes</tt> keyword.</li>
 </li>    <li>the translation of all of the element's specific presentation rules
 <li>      (which is primarily used to apply the translation rules for the specific
 the comment attached to the element.  When the element doesn't have a comment,      presentation rules <a href="#sectc5222">before</a> those of the element or
 nothing is generated.  This is indicated by the <tt>Comment</tt> keyword;      its attributes). This option is specified by the <tt>Presentation</tt>
 </li>      keyword;</li>
 <li>    <li>The value of the reference's identifier.<br>
 the translation of all attributes of the element (which is primarily used to      Thot associates a unique identifier with each element in a document.  This
 apply the attribute translation rules <a href="#sectc5222">before</a> those of      identifier (called <em>reference's identifier</em> or <em>label</em>) is a
 the element type).  This is specified by the <tt>Attributes</tt> keyword.      character string containing the letter `L' followed by digits.  Thot uses
 </li>      it in references for identifying the referred element.<br>
 <li>      The <tt>RefId</tt> keyword produces the reference's identifier of the
 the translation of all of the element's specific presentation rules (which is      element to which the translation rule is applied, or the reference's
 primarily used to apply the translation rules for the specific presentation      identifier of its first ancestor that is referred by a reference or that
 rules <a href="#sectc5222">before</a> those of the element or its attributes).      can be referred by a reference.</li>
 This option is specified by the <tt>Presentation</tt> keyword;    <li>the value of a mark pair's unique identifier.  This may only be used for
 </li>      <a href="#sectd3285">mark pairs</a> and is indicated by the
 <li>      <tt>PairId</tt> keyword.</li>
 The value of the reference's identifier.<br>    <li>the directory containing the file being generated (this string includes
 Thot associates a unique identifier with each element in a document.  This      an ending '/', if it is not empty).  This is indicated by the
 identifier (called <em>reference's identifier</em> or <em>label</em>) is a      <tt>FileDir</tt> keyword.</li>
 character string containing the letter `L' followed by digits.  Thot uses it    <li>the name of the file being generated (only the name, without the
 in references for identifying the referred element.<br>      directory and without the extension). This is indicated by the
 The <tt>RefId</tt> keyword produces the reference's identifier of the element      <tt>FileName</tt> keyword.</li>
 to which the translation rule is applied, or the reference's identifier of its    <li>the extension of the file being generated (this string starts with a
 first ancestor that is referred by a reference or that can be referred by a      dot, if it is not empty).  This is indicated by the <tt>Extension</tt>
 reference.      keyword.</li>
 </li>    <li>the name of the document being translated.  This is indicated by the
 <li>      <tt>DocumentName</tt> keyword.</li>
 the value of a mark pair's unique identifier.  This may only be used for <a    <li>the directory containing the document being translated.  This is
 href="#sectd3285">mark pairs</a> and is indicated by the <tt>PairId</tt>      indicated by the <tt>DocumentDir</tt> keyword.</li>
 keyword.  
 </li>  
 <li>  
 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.  
 </li>  
 <li>  
 the name of the file being generated (only the name, without the directory and  
 without the extension). This is indicated by the <tt>FileName</tt> keyword.  
 </li>  
 <li>  
 the extension of the file being generated (this string starts with a dot, if  
 it is not empty).  This is indicated by the <tt>Extension</tt> keyword.  
 </li>  
 <li>  
 the name of the document being translated.  This is indicated by the  
 <tt>DocumentName</tt> keyword.  
 </li>  
 <li>  
 the directory containing the document being translated.  This is indicated by  
 the <tt>DocumentDir</tt> keyword.  
 </li>  
 </ul>  </ul>
 <p>  
 When the rule applies to a reference (an element or an attribute defined as a  <p>When the rule applies to a reference (an element or an attribute defined as
 reference in the structure schema), it can generate a text related to the  a reference in the structure schema), it can generate a text related to the
 element referred by that reference.  The rule name is then followed by the  element referred by that reference.  The rule name is then followed by 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>    <li>the name of a variable.  The rule generates the value of that variable,
 the name of a variable.  The rule generates the value of that variable,      computed for the referred element.</li>
 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
 <li>      element is not defined in the structure schema which corresponds to the
 an element type.  The rule generates the translation of the element of that      translation schema (that is, an object defined in another schema), the
 type, which is in the subtree of the referred element.  If this element is not      element's type name must be followed by the name of its structure schema
 defined in the structure schema which corresponds to the translation schema      between parentheses.</li>
 (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
 be followed by the name of its structure schema between parentheses.      identifier of the referred element.</li>
 </li>    <li>the <tt>DocumentName</tt> keyword.  The rule generates the name of the
 <li>      document to which the referred element belongs.</li>
 the <tt>RefId</tt> keyword.  The rule generates the reference's identifier of    <li>the <tt>DocumentDir</tt> keyword.  The rule generates the name of the
 the referred element.      directory that contains the document of the referred element.</li>
 </li>  
 <li>  
 the <tt>DocumentName</tt> keyword.  The rule generates the name of the  
 document to which the referred element belongs.  
 </li>  
 <li>  
 the <tt>DocumentDir</tt> keyword.  The rule generates the name of the  
 directory that contains the document of the referred element.  
 </li>  
 </ul>  </ul>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc5211">The <tt>Write</tt> rule</a></h3>  <h3><a name="sectc5211">The <tt>Write</tt> rule</a></h3>
 <p>  
 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
 produces the same effect, but the generated text is displayed on the user's  also produces the same effect, but the generated text is displayed on the
 terminal during the translation of the document, instead of being produced in  user's terminal during the translation of the document, instead of being
 the translated document.  This is useful for helping the user keep track of  produced in the translated document.  This is useful for helping the user keep
 the progress of the translation and for prompting the user on the terminal for  track of the progress of the translation and for prompting the user on the
 input required by the <tt>Read</tt> rule.</p>  terminal for input required by the <tt>Read</tt> rule.</p>
 <pre>               'Write' Object [ Position ] ';'</pre>  <pre>               'Write' Object [ Position ] ';'</pre>
 <p>  
 Notice: if the translator is launched by the editor (by the ``Save as''  <p>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
 To make the translator display the number of each section being translated on    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>Section : BEGIN
 <pre>Section : BEGIN  
           Write VarSection;            Write VarSection;
           ...            ...
           END;</pre>            END;</pre>
 <p>  
 (see <a href="#varsectexample">above</a> for the definition of the    <p>(see <a href="#varsectexample">above</a> for the definition of the
 <tt>VarSection</tt> variable).</p>    <tt>VarSection</tt> variable).</p>
 <p>  
 To display text on the terminal before issuing a read operation with the    <p>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>BEGIN    <pre>BEGIN
 Write 'Enter the name of the destination: ';  Write 'Enter the name of the destination: ';
 ...  ...
 END;</pre>  END;</pre>
Line 7844  END;</pre> Line 7113  END;</pre>
 </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>  
 The <tt>Read</tt> rule reads text from the terminal during the translation of  <p>The <tt>Read</tt> rule reads text from the terminal during the translation
 the document and saves the text read in one of the buffers declared in the  of 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
Line 7858  operation is done beforehand.  The text Line 7126  operation is done beforehand.  The text
 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>               'Read' BufferID [ Position ] ';'</pre>  <pre>               'Read' BufferID [ Position ] ';'</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>The following set of rules tells the user that the translator is waiting
 The following set of rules tells the user that the translator is waiting for    for the entry of some text, reads this text into a buffer and copies the
 the entry of some text, reads this text into a buffer and copies the text into    text into the translated document.</p>
 the translated document.</p>    <pre>BEGIN
 <pre>BEGIN  
 Write 'Enter the name of the destination: ';  Write 'Enter the name of the destination: ';
 Read DestName;  Read DestName;
 Create DestName;  Create DestName;
 ...  ...
 END;</pre>  END;</pre>
 <p>  
 (see <a href="#destname">above</a> the definition of <tt>DestName</tt>).</p>    <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>  
 The <tt>Include</tt> rule, like the <tt>Create</tt> rule, is used to produce  <p>The <tt>Include</tt> rule, like the <tt>Create</tt> rule, is used to
 text in the translated document.  It inserts constant text which is not  produce text in the translated document.  It inserts constant text which is
 defined in the translation schema, but is instead taken from a file.  The  not 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,
Line 7890  the buffer is assumed to contain the fil Line 7158  the buffer is assumed to contain the fil
 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>  
 Like the other rules, it is possible to specify whether the inclusion will  <p>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
 compilation of the translation schema. Thus, the file to be included need not  compilation of the translation schema. Thus, the file to be included need not
Line 7899  exist during the compilation, but it mus Line 7167  exist during the compilation, but it mus
 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>  
 During translation, the file to be included is searched for along the schema  <p>During translation, the file to be included is searched for along the
 directory path (indicated by the environment variable <tt>THOTSCH</tt>).  The  schema directory path (indicated by the environment variable
 file name is normally only composed of a simple name, without specification of  <tt>THOTSCH</tt>).  The file name is normally only composed of a simple name,
 a complete file path.  However, if the filename starts with a '/', it is  without specification of a complete file path.  However, if the filename
 considered as an absolute path.</p>  starts with a '/', it is considered as an absolute path.</p>
 <pre>                'Include' File [ Position ] ';'  <pre>                'Include' File [ Position ] ';'
      File     = FileName / BufferID .       File     = FileName / BufferID .
      FileName = STRING .</pre>       FileName = STRING .</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
 Suppose that it is desirable to print documents of the Article class with a    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
 beginning of the file.  The <tt>Include</tt>rule can be used to achieve this.    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>Article : BEGIN
 <pre>Article : BEGIN  
           Include 'DeclarArt' Before;            Include 'DeclarArt' Before;
           ...            ...
           END;</pre>            END;</pre>
Line 7926  following rule:</p> Line 7194  following rule:</p>
 </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>  
 The <tt>Get</tt> rule is used to change the order in which the elements appear  <p>The <tt>Get</tt> rule is used to change the order in which the elements
 in the translated document.  More precisely, it produces  the translation of a  appear in the translated document.  More precisely, it produces  the
 specified element before or after the translation of the content of the  translation of a specified element before or after the translation of the
 element to which the rule applies.  The <tt>Before</tt> and <tt>After</tt>  content of the element to which the rule applies.  The <tt>Before</tt> and
 keywords are placed at the end of the rule to specify whether the operation  <tt>After</tt> keywords are placed at the end of the rule to specify whether
 should be performed before or after translation of the rule's element (the  the operation should be performed before or after translation of the rule's
 default is before). The type of the element to be moved must be specified  element (the default is before). The type of the element to be moved must be
 after the <tt>Get</tt> keyword, optionally preceded by a keyword indicating  specified after the <tt>Get</tt> keyword, optionally preceded by a keyword
 where the element will be found in the logical structure of the document:</p>  indicating 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>      <dd>The element to be moved is the first element of the indicated type
 The element to be moved is the first element of the indicated type which is        which is found inside the element to which the rule applies.</dd>
 found inside the element to which the rule applies.    <dt><tt>Referred</tt></dt>
 </dd>      <dd>This keyword can only be used if the rule applies to a reference
 <dt><tt>Referred</tt></dt>        element. The element to be moved is either the element designated by the
 <dd>        reference (if that element is of the specified type), or the first
 This keyword can only be used if the rule applies to a reference element. The        element of the desired type contained within the element designated by
 element to be moved is either the element designated by the reference (if that        the reference.</dd>
 element is of the specified type), or the first element of the desired type    <dt>no keyword</dt>
 contained within the element designated by the reference.      <dd>If the element to be moved is an associated element, defined in the <a
 </dd>        href="#sectc314"><tt>ASSOC</tt> section</a> of the structure schema, all
 <dt>no keyword</dt>        associated elements of this type which have not been translated yet are
 <dd>        then translated.  Certain elements may in fact have already been
 If the element to be moved is an associated element, defined in the <a        translated by a <tt>Get Referred</tt> rule.
 href="#sectc314"><tt>ASSOC</tt> section</a> of the structure schema, all        <p>If the element to be moved is not an associated element, the
 associated elements of this type which have not been translated yet are then        translator takes the first element of the indicated type from among the
 translated.  Certain elements may in fact have already been translated by a        siblings of the rule's element.  This is primarily used to change the
 <tt>Get Referred</tt> rule.        order of the components of an aggregate.</p>
 <p>      </dd>
 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  
 element.  This is primarily used to change the order of the components of an  
 aggregate.</p>  
 </dd>  
 </dl>  </dl>
 <p>  
 If the element to be moved is defined in a structure schema which is not the  <p>If the element to be moved is defined in a structure schema which is not
 one which corresponds to the translation schema (in the case of an included  the one which corresponds to the translation schema (in the case of an
 object with a different schema), the type name of this element must be  included object with a different schema), the type name of this element must
 followed, between parentheses, by the name of the structure schema which  be followed, between parentheses, by the name of the structure schema which
 defines it.</p>  defines it.</p>
 <pre>                   'Get' [ RelPosition ] ElemID   <pre>                   'Get' [ RelPosition ] ElemID 
                          [ ExtStruct ]                           [ ExtStruct ]
                          [ Position ] ';' /                           [ Position ] ';' /
      RelPosition = 'Included' / 'Referred' .       RelPosition = 'Included' / 'Referred' .
      ExtStruct   = '(' ElemID ')' .</pre>       ExtStruct   = '(' ElemID ')' .</pre>
 <p>  
 The <tt>Get</tt> rule has no effect if the element which it is supposed to  <p>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
Line 7989  After</tt>, even though syntactically co Line 7252  After</tt>, even though syntactically co
 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>  
 The <tt>Get</tt> rule is the only way to obtain the translation of the  <p>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
 The structure schema defined figures as associated element which are composed    composed of some content and a caption.  Moreover, it is possible to make
 of some content and a caption.  Moreover, it is possible to make references to    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
Line 8010  ASSOC Line 7273  ASSOC
                  Caption = Text;                   Caption = Text;
                  END;                   END;
      ...</pre>       ...</pre>
 <p>  
 Suppose it would be useful to make a figure appear in the translated document    <p>Suppose it would be useful to make a figure appear in the translated
 at the place in the text where the first reference to the figure is made.  If    document at the place in the text where the first reference to the figure is
 some figures are not referenced, then they would appear at the end of the    made.  If some figures are not referenced, then they would appear at the end
 document.  Also, each figure's caption should appear before the content.  The    of the document.  Also, each figure's caption should appear before the
 following rules in the translation schema will produce this result:</p>    content.  The following rules in the translation schema will produce this
 <pre>Article :   BEGIN    result:</p>
     <pre>Article :   BEGIN
             ...              ...
             Get Figures After;              Get Figures After;
             END;              END;
Line 8032  Content :   BEGIN Line 7296  Content :   BEGIN
 </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>  
 Like the <tt>Get</tt> rule, the <tt>Copy</tt> rule generates the translation  <p>Like the <tt>Get</tt> rule, the <tt>Copy</tt> rule generates the
 of a specified element, but it acts even if the element has already been  translation of a specified element, but it acts even if the element has
 translated and it allows to copy it or to translate it later. Both rules have  already been translated and it allows to copy it or to translate it later.
 the same syntax.</p>  Both rules have the same syntax.</p>
 <pre>              'Copy' [ RelPosition ] ElemID   <pre>              'Copy' [ RelPosition ] ElemID 
                      [ ExtStruct ] [ Position ] ';'</pre>                       [ ExtStruct ] [ Position ] ';'</pre>
 </div>  </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>  
 If the rule is applied to an element defined by an external structure, the  <p>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
Line 8063  the rule is applied to the document's ro Line 7325  the rule is applied to the document's ro
 indicated translation schema should be applied.</p>  indicated translation schema should be applied.</p>
 <pre>               'Use' TrSchema [ 'For' ElemID ] ';'  <pre>               'Use' TrSchema [ 'For' ElemID ] ';'
      TrSchema = NAME .</pre>       TrSchema = NAME .</pre>
 <p>  
 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>  
 Notice: if the translator is launched by the editor (by the ``Save as''  <p>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 <tt>Formula</tt> external
 The <tt>Article</tt> structure schema uses the <tt>Formula</tt> external    structure, defined by another structure schema, for mathematical
 structure, defined by another structure schema, for mathematical formulas:</p>    formulas:</p>
 <pre>STRUCTURE Article;    <pre>STRUCTURE Article;
    ...     ...
 STRUCT  STRUCT
    Article = ...     Article = ...
Line 8088  STRUCT Line 7351  STRUCT
    Isolated_formula = Formula;     Isolated_formula = Formula;
    ...     ...
 END</pre>  END</pre>
 <p>  
 Suppose that it would be useful to use the <tt>FormulaT</tt> translation    <p>Suppose that it would be useful to use the <tt>FormulaT</tt> translation
 schema for the formulas of an article.  This can be expressed in two different    schema for the formulas of an article.  This can be expressed in two
 ways in the <tt>Article</tt> class translation schema, using the rules:</p>    different ways in the <tt>Article</tt> class translation schema, using the
 <pre>RULES    rules:</p>
     <pre>RULES
     Article :      Article :
        Use FormulaT for Formula;</pre>         Use FormulaT for Formula;</pre>
 <p>  
 or:</p>    <p>or:</p>
 <pre>RULES    <pre>RULES
     ...      ...
     Formula :      Formula :
        Use FormulaT;</pre>         Use FormulaT;</pre>
Line 8105  or:</p> Line 7369  or:</p>
 </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>  
 The <tt>Remove</tt> rule indicates that nothing should be generated, in the  <p>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>  
 The <tt>Remove</tt> rule is simply written with the <tt>Remove</tt> keyword.  <p>The <tt>Remove</tt> rule is simply written with the <tt>Remove</tt>
 It is terminated, like all rules, by a semicolon.</p>  keyword. It is terminated, like all rules, by a semicolon.</p>
 <pre>               'Remove' ';'</pre>  <pre>               'Remove' ';'</pre>
 </div>  </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
 translate the content of the leaves of the element to which it applies. In  not 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>  
 The <tt>NoTranslation</tt> rule is written with the <tt>NoTranslation</tt>  <p>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>               'NoTranslation' ';'</pre>  <pre>               'NoTranslation' ';'</pre>
 </div>  </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>  
 The <tt>NoLineBreak</tt> rule is written with the <tt>NoLineBreak</tt> keyword  <p>The <tt>NoLineBreak</tt> rule is written with the <tt>NoLineBreak</tt>
 followed by a semicolon.</p>  keyword followed by a semicolon.</p>
 <pre>               'NoLineBreak' ';'</pre>  <pre>               'NoLineBreak' ';'</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc5220">The <tt>ChangeMainFile</tt> rule</a></h3>  <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  <p>When the translation program starts, it opens a main output file, whose
 is given as a parameter of the translator.  All <a  name is given as a parameter of the translator.  All <a
 href="#sectc5210"><tt>Create</tt> rules</a> without explicit indication of the  href="#sectc5210"><tt>Create</tt> rules</a> without explicit indication of the
 output file write sequentially in this file.  When a <tt>ChangeMainFile</tt>  output file write sequentially in this file.  When a <tt>ChangeMainFile</tt>
 rule is executed, the main output file is closed and it is replaced by a new  rule is executed, the main output file is closed and it is replaced by a new
Line 8166  one, whose name is specified in the <tt> Line 7426  one, whose name is specified in the <tt>
 executed write in this new file.  Several <tt>ChangeMainFile</tt> rules can be  executed write in this new file.  Several <tt>ChangeMainFile</tt> rules can be
 executed during the same translation, for dividing the main output into  executed during the same translation, for dividing the main output into
 several files.</p>  several files.</p>
 <p>  
 This rule is written with the <tt>ChangeMainFile</tt> keyword followed by the  <p>This rule is written with the <tt>ChangeMainFile</tt> keyword followed by
 name of a variable that specifies the name of the new main file. The keyword  the name of a variable that specifies the name of the new main file. The
 <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule to  keyword <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule
 specify whether the operation should be performed before or after translation  to specify whether the operation should be performed before or after
 of the rule's element (the default is before). This rule, like all translation  translation of the rule's element (the default is before). This rule, like all
 rules, is terminated by a semicolon.</p>  translation rules, is terminated by a semicolon.</p>
 <pre>               'ChangeMainFile' VarID [ Position ] ';'</pre>  <pre>               'ChangeMainFile' VarID [ Position ] ';'</pre>
   
 <blockquote class="example">  <blockquote class="example">
 <p>    <p><strong>Example:</strong></p>
 <strong>Example:</strong></p>  
 <p>    <p>To generate the translation of each section in a different file, the
 To generate the translation of each section in a different file, the following    following rule can be associated with type <tt>Section</tt>.  That rule uses
 rule can be associated with type <tt>Section</tt>.  That rule uses the <a    the <a href="#varoutputfile"><tt>VarOutpuFile</tt> variable</a> defined
 href="#varoutputfile"><tt>VarOutpuFile</tt> variable</a> defined above.</p>    above.</p>
 <pre>     Section:    <pre>     Section:
          ChangeMainFile VarOutpuFile Before;</pre>           ChangeMainFile VarOutpuFile Before;</pre>
 <p>  
 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
 the translation program, translated sections are written in files    starting 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>  <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  <p>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  the translation of a document is complete.  These files may be removed by the
 <tt>RemoveFile</tt> rule.</p>  <tt>RemoveFile</tt> rule.</p>
 <p>  
 This rule is written with the <tt>RemoveFile</tt> keyword followed by the name  <p>This rule is written with the <tt>RemoveFile</tt> keyword followed by the
 of a variable that specifies the name of the file to be removed.  The keyword  name of a variable that specifies the name of the file to be removed.  The
 <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule to  keyword <tt>Before</tt> or <tt>After</tt> can be placed at the end of the rule
 specify whether the operation should be performed before or after translation  to specify whether the operation should be performed before or after
 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
 translation rules, is terminated by a semicolon.</p>  all translation rules, is terminated by a semicolon.</p>
 <pre>               'RemoveFile' VarID [ Position ] ';'</pre>  <pre>               'RemoveFile' VarID [ Position ] ';'</pre>
 </div>  </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>The <tt>Set</tt> and <tt>Add</tt> rules are used for modifying the value of
 counters that have no <a href="#sectc524">counting function</a>.  Only this  counters that have no <a href="#sectc524">counting function</a>.  Only this
 type of counter can be used in the <tt>Set</tt> and <tt>Add</tt> rules.</p>  type of counter can be used in the <tt>Set</tt> and <tt>Add</tt> rules.</p>
 <p>  
 Both rules have the same syntax: after the keyword <tt>Set</tt> or  <p>Both rules have the same syntax: after the keyword <tt>Set</tt> or
 <tt>Add</tt> appear the counter name and the value to assign to the counter  <tt>Add</tt> appear the counter name and the value to assign to the counter
 (<tt>Set</tt> rule) or the value to be added to the counter (<tt>Add</tt>  (<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  rule).  The keyword <tt>Before</tt> or <tt>After</tt> can follow that value to
Line 8227  the rule.</p> Line 7486  the rule.</p>
 </div>  </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 <tt>Indent</tt> rule is used to modify the value of text indentation in
 the output files.</p>  the output files.</p>
 <p>  
 Each time the translator creates a new line in an output file, it generates a  <p>Each time the translator creates a new line in an output file, it generates
 variable number of space characters at the beginning of the new line.  By  a variable number of space characters at the beginning of the new line.  By
 default, the number of these characters (the indentation value) is 0.  It can  default, the number of these characters (the indentation value) is 0.  It can
 be changed with the <tt>Indent</tt> rule.</p>  be changed with the <tt>Indent</tt> rule.</p>
 <p>  
 In its simple form, the rule begins with the <tt>Indent</tt> keyword,  <p>In its simple form, the rule begins with the <tt>Indent</tt> keyword,
 followed by the indentation sign (optional) and value and a keyword  followed by the indentation sign (optional) and value and a keyword
 <tt>Before</tt> or <tt>After</tt> indicating that the indentation should  <tt>Before</tt> or <tt>After</tt> indicating that the indentation should be
 be changed <a href="#sectc5222">before or after</a> the element's content  changed <a href="#sectc5222">before or after</a> the element's content is
 is generated.  If the position is not indicated, the indentation is changed  generated.  If the position is not indicated, the indentation is changed
 before the element's content is generated.  This rule, like all translation  before the element's content is generated.  This rule, like all translation
 rules, is terminated by a semicolon.</p>  rules, is terminated by a semicolon.</p>
 <p>  
 The indentation value is indicated by an integer, which is the number of space  <p>The indentation value is indicated by an integer, which is the number of
 characters to be generated at the beginning of each new line. A sign  space characters to be generated at the beginning of each new line. A sign
 (<tt>+</tt> or <tt>-</tt>) can appear before the integer to indicate that the  (<tt>+</tt> or <tt>-</tt>) can appear before the integer to indicate that the
 value is relative: the current value of indentation is incremented (if sign is  value is relative: the current value of indentation is incremented (if sign is
 <tt>+</tt>) or decremented (if sign is <tt>-</tt>) by the specified value.</p>  <tt>+</tt>) or decremented (if sign is <tt>-</tt>) by the specified value.</p>
 <p>  
 Keyword <tt>Suspend</tt> or <tt>Resume</tt> can appear instead of the  <p>Keyword <tt>Suspend</tt> or <tt>Resume</tt> can appear instead of the
 (possibly signed) identation value.  <tt>Suspend</tt> means that the new  (possibly signed) identation value.  <tt>Suspend</tt> means that the new
 indentation value to be used is zero until another <tt>Indent</tt> rule  indentation value to be used is zero until another <tt>Indent</tt> rule is
 is executed and changes the indentation value. <tt>Resume</tt> means that  executed and changes the indentation value. <tt>Resume</tt> means that the
 the indentation value that was used before the last <tt>Indent Suspend</tt>  indentation value that was used before the last <tt>Indent Suspend</tt> was
 was executed becomes the new value.  Only one <tt>Suspend</tt> can be used  executed becomes the new value.  Only one <tt>Suspend</tt> can be used before
 before a <tt>Resume</tt>; <tt>Supend</tt>-<tt>Resume</tt> pairs can not be  a <tt>Resume</tt>; <tt>Supend</tt>-<tt>Resume</tt> pairs can not be
 nested.  nested.</p>
 <p>  
 Like the <a href="#sectc5210"><tt>Create</tt> rule</a>, the <tt>Indent</tt>  <p>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 <a
 href="#sectc526">variable</a>.  This means that the rule must not change  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
Line 8275  IndentValue   = NUMBER .</pre> Line 7533  IndentValue   = NUMBER .</pre>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc5222">Rule application order</a></h3>  <h3><a name="sectc5222">Rule application order</a></h3>
 <p>  
 The translator translates the elements which comprise the document in the  <p>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
Line 8286  translation of the element's content (ru Line 7543  translation of the element's content (ru
 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>  
 It then applies all <a href="#sectc5223">rules for the attributes</a> which  <p>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>  
 The same procedure is followed with translation rules for specific  <p>The same procedure is followed with translation rules for specific
 presentations.</p>  presentations.</p>
 <p>  
 Next, the element's content is translated, as long as a <tt>Remove</tt> rule  <p>Next, the element's content is translated, as long as a <tt>Remove</tt>
 does not apply.</p>  rule does not apply.</p>
 <p>  
 In the next step, the translator applies rules for the specific presentation  <p>In the next step, the translator applies rules for the specific
 of the element that are to be applied after translation of the content (rules  presentation of the element that are to be applied after translation of the
 which end with the <tt>After</tt> keyword).  The rules for each type of  content (rules which end with the <tt>After</tt> keyword).  The rules for each
 presentation rule or each value are applied in the order in which the  type of 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>  
 Then, the same procedure is followed for translation rules for attributes of  <p>Then, the same procedure is followed for translation rules for attributes
 the element.</p>  of the element.</p>
 <p>  
 Finally, the translator applies rules for the element which must be applied  <p>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>  
 This order can be changed with the <tt>Attributes</tt> and  <p>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>  <h3><a name="sectc5223">Translation of logical attributes</a></h3>
 <p>  
 After the rules for the element types, the translation schema defines rules  <p>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>  
 If the attribute's name appears alone before the rule block, the rule are  <p>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>  
 The attribute's name can be followed by the name of an element type between  <p>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>  
 If values are given after the attribute name (or after the name of the element  <p>If values are given after the attribute name (or after the name of the
 type), the rules are applied only when the attribute has the indicated values.  element type), the rules are applied only when the attribute has the indicated
 The same attribute can appear several times, with different values and  values. 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>  
 The rule block associated with an attribute is either a simple rule or a  <p>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>  
 Translation rules are not required for all attributes (or their values)  <p>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>     AttrSeq       = TransAttr &lt; TransAttr > .  <pre>     AttrSeq       = TransAttr &lt; TransAttr &gt; .
      TransAttr     = AttrID [ '(' ElemID ')' ]        TransAttr     = AttrID [ '(' ElemID ')' ] 
                      [ RelatAttr ] ':' RuleSeq .                       [ RelatAttr ] ':' RuleSeq .
      AttrID        = NAME .       AttrID        = NAME .
      ElemID        = NAME .</pre>       ElemID        = NAME .</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
 The structure defined the ``Language'' attribute which can take the values    values ``French'' and ``English''.  To have the French parts of the original
 ``French'' and ``English''.  To have the French parts of the original document    document removed and prevent the translation of the leaves of the English
 removed and prevent the translation of the leaves of the English parts, the    parts, the following rules would be used:</p>
 following rules would be used:</p>    <pre>ATTRIBUTES
 <pre>ATTRIBUTES  
    Language=French :     Language=French :
       Remove;        Remove;
    Language=English :     Language=English :
Line 8377  following rules would be used:</p> Line 7633  following rules would be used:</p>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc5224">Translation of specific presentations</a></h3>  <h3><a name="sectc5224">Translation of specific presentations</a></h3>
 <p>  
 After the rules for attributes, the translation schema defines rules for the  <p>After the rules for attributes, the translation schema defines rules for
 specific presentation.  This section begins with the <tt>PRESENTATION</tt>  the 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>  
 Each of these translation rule blocks is applied when the translator operates  <p>Each of these translation rule blocks is applied when the translator
 on an element which has a specific presentation rule of the type indicated at  operates on an element which has a specific presentation rule of the type
 the head of the block.  Depending on the type of the specific presentation  indicated at the head of the block.  Depending on the type of the specific
 rule, it is possible to specify values of the presentation rule for which the  presentation rule, it is possible to specify values of the presentation rule
 translation rule block should be applied.</p>  for which the translation rule block should be applied.</p>
 <p>  
 There are three categories of the presentation rules:</p>  <p>There are three categories of the presentation rules:</p>
 <ul>  <ul>
 <li>    <li>rules taking numeric values: <tt>Size</tt>, <tt>Indent</tt>,
 rules taking numeric values: <tt>Size</tt>, <tt>Indent</tt>,      <tt>LineSpacing</tt>, <tt>LineWeight</tt>,</li>
 <tt>LineSpacing</tt>, <tt>LineWeight</tt>,    <li>rules whose values are taken from a predefined list (i.e. whose type is
 </li>      an enumeration): <tt>Adjust</tt>, <tt>Justify</tt>, <tt>Hyphenate,/TT&gt;,
 <li>      <tt>Style</tt>, <tt>Weight</tt>, <tt>Font</tt>, <tt>UnderLine</tt>,
 rules whose values are taken from a predefined list (i.e. whose type is an      <tt>Thickness</tt>, <tt>LineStyle</tt>,</tt></li>
 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>Weight</tt>, <tt>Font</tt>, <tt>UnderLine</tt>,      <tt>Foreground</tt>.</li>
 <tt>Thickness</tt>, <tt>LineStyle</tt>,</tt>  
 </li>  
 <li>  
 rules whose value is a name: <tt>FillPattern</tt>, <tt>Background</tt>,  
 <tt>Foreground</tt>.  
 </li>  
 </ul>  </ul>
 <p>  
 For presentation rules of the first category, the values which provoke  <p>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>    <li>all values less than a given value (this value is preceded by a ``less
 all values less than a given value (this value is preceded by a ``less than''      than'' sign '<tt>&lt;</tt>'),</li>
 sign '<tt>&lt;</tt>'),    <li>all values greater than a given value (this value is preceded by a`
 </li>      `greater than'' sign '<tt>&gt;</tt>'),</li>
 <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>
 </li>  
 <li>  
 all values falling in an interval, bounds included.  The range of values is  
 then specified <tt>IN [</tt>Minimum<tt>..</tt>Maximum<tt>]</tt>, where Minimum  
 and Maximum are integers.  
 </li>  
 </ul>  </ul>
 <p>  
 All numeric values can be negative, in which case the integer is preceded by a  <p>All numeric values can be negative, in which case the integer is preceded
 minus sign.  All values must be given in typographers points.</p>  by a minus sign.  All values must be given in typographers points.</p>
 <p>  
 For presentation rules whose values are taken from a predefined list, the  <p>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>  
 For presentation rules whose values are names, the value which provokes the  <p>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>     PresSeq        = PresTrans &lt; PresTrans > .  <pre>     PresSeq        = PresTrans &lt; PresTrans &gt; .
      PresTrans      = PresRule ':' RuleSeq .       PresTrans      = PresRule ':' RuleSeq .
      PresRule       = 'Size' [ PresRelation ] /       PresRule       = 'Size' [ PresRelation ] /
                       'Indent' [ PresRelation ] /                        'Indent' [ PresRelation ] /
Line 8464  followed by the name of the value.  The Line 7707  followed by the name of the value.  The
                       'Foreground' [ '=' Color ] .                        'Foreground' [ '=' Color ] .
   
      PresRelation   = '=' PresValue /       PresRelation   = '=' PresValue /
                       '>' [ '-' ] PresMinimum /                        '&gt;' [ '-' ] PresMinimum /
                       '&lt;' [ '-' ] PresMaximum /                        '&lt;' [ '-' ] PresMaximum /
                       'IN' '[' [ '-' ] PresIntervalMin '..'                        'IN' '[' [ '-' ] PresIntervalMin '..'
                               [ '-' ] PresIntervalMax ']' .                                [ '-' ] PresIntervalMax ']' .
Line 8486  followed by the name of the value.  The Line 7729  followed by the name of the value.  The
      PresIntervalMax= NUMBER .       PresIntervalMax= NUMBER .
      PresValue      = [ '-' ] PresVal .       PresValue      = [ '-' ] PresVal .
      PresVal        = NUMBER .</pre>       PresVal        = NUMBER .</pre>
 <p>  
 The <a name="prestransl">translation rules associated with specific  <p>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>  
 It should be noted that modifications to the layout of the document's elements  <p>It should be noted that modifications to the layout of the document's
 that are made using the combination of the control key and a mouse button will  elements that are made using the combination of the control key and a mouse
 have no effect on the translation of the document.</p>  button will have no effect on the translation of the document.</p>
 <blockquote class="example">  
 <p>  <blockquote class="example">
 <strong>Example:</strong></p>    <p><strong>Example:</strong></p>
 <p>  
 Suppose that it is desirable to use the same font sizes as in the specific    <p>Suppose that it is desirable to use the same font sizes as in the
 presentation, but the font size must be between 10 and 18 typographer's    specific presentation, but the font size must be between 10 and 18
 points. If font size is set in the translated document by the string    typographer's points. If font size is set in the translated document by the
 <tt>pointsize=n</tt> where <tt>n</tt> is the font size in typographer's points    string <tt>pointsize=n</tt> where <tt>n</tt> is the font size in
 then the following rules will suffice:</p>    typographer's points then the following rules will suffice:</p>
 <pre>PRESENTATION    <pre>PRESENTATION
    Size &lt; 10 :     Size &lt; 10 :
         Create 'pointsize=10';          Create 'pointsize=10';
    Size in [10..18] :     Size in [10..18] :
Line 8514  then the following rules will suffice:</ Line 7757  then the following rules will suffice:</
         Create 'pointsize=';          Create 'pointsize=';
         Create Value;          Create Value;
         END;          END;
    Size > 18 :     Size &gt; 18 :
         Create 'pointsize=18';</pre>          Create 'pointsize=18';</pre>
 </blockquote>  </blockquote>
 </div>  </div>
   
 <div class="subsection">  <div class="subsection">
   
 <h3><a name="sectc5225">Recoding of characters, symbols and graphics</a></h3>  <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  <p>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>  
 The recoding rules for character strings are grouped by alphabets. There is a  <p>The recoding rules for character strings are grouped by alphabets. There is
 group of rules for each alphabet of the Thot document that must be translated.  a group of rules for each alphabet of the Thot document that must be
 Each such group of rules begins with the <tt>TEXTTRANSLATE</tt> keyword,  translated. Each such group of rules begins with the <tt>TEXTTRANSLATE</tt>
 followed by the specification of the alphabet to translate and the recoding  keyword, followed by the specification of the alphabet to translate and the
 rules, between the <tt>BEGIN</tt> and <tt>END</tt> keywords unless there is  recoding rules, between the <tt>BEGIN</tt> and <tt>END</tt> keywords unless
 only one recoding rule for the alphabet. The specification of the alphabet is  there is only one recoding rule for the alphabet. The specification of the
 not required: by default it is assumed to the Latin alphabet (the ISO Latin-1  alphabet is not required: by default it is assumed to the Latin alphabet (the
 character set).</p>  ISO Latin-1 character set).</p>
 <p>  
 Each recoding rule is formed by a source string between apostrophes and a  <p>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>-&gt;</tt>), formed by the ``minus'' and ``greater
 characters.  The rule is terminated by a semi-colon.</p>  than'' characters.  The rule is terminated by a semi-colon.</p>
 <pre>     TextTransSeq = [ Alphabet ] TransSeq .  <pre>     TextTransSeq = [ Alphabet ] TransSeq .
      Alphabet     = NAME .       Alphabet     = NAME .
      TransSeq     ='BEGIN' &lt; Translation > 'END' ';' /       TransSeq     ='BEGIN' &lt; Translation &gt; 'END' ';' /
                     Translation .                      Translation .
      Translation  = Source [ '->' Target ] ';' .       Translation  = Source [ '-&gt;' Target ] ';' .
      Source       = STRING .       Source       = STRING .
      Target       = STRING .</pre>       Target       = STRING .</pre>
 <p>  
 One such rule signifies that when the source string appears in a text leaf of  <p>One such rule signifies that when the source string appears in a text leaf
 the document being translated, the translator must replace it, in the  of 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>  
 For a given alphabet, the order of the rules is not important and has no  <p>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>  
 The recoding rules for symbols and graphical elements are written in the same  <p>The recoding rules for symbols and graphical elements are written in the
 manner as the recoding rules for character strings.  They are preceded,  same 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 codes</a>.</p>  defined along with the <a href="#sect7">non-standard character 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 the    L<sup>A</sup>T<sub><big>E</big></sub>X formatter, the Latin characters``é''
 L<sup>A</sup>T<sub><big>E</big></sub>X formatter, the Latin    (octal code 351 in Thot) and ``č'' (octal code 350 in Thot)  must be
 characters``&eacute;'' (octal code 351 in Thot) and ``&egrave;'' (octal code    converted to their representation in
 350 in Thot)  must be converted to their representation 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>TEXTTRANSLATE Latin
 <pre>TEXTTRANSLATE Latin  
      BEGIN       BEGIN
      '\350' -> '\`{e}';    { e grave }       '\350' -&gt; '\`{e}';    { e grave }
      '\351' -> '\''{e}';   { e acute }       '\351' -&gt; '\''{e}';   { e acute }
      END;</pre>       END;</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>  <h1><a name="sect6">Language grammars</a></h1>
 <p>  
 This chapter gives the complete grammars of the languages of Thot. The  <p>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>  <h2><a name="sectb61">The M meta-language</a></h2>
 <p>  
 The language grammars are all expressed in the same formalism, the M  <p>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>{ Any text between braces is a comment. }  <pre>{ Any text between braces is a comment. }
 Grammar      = Rule &lt; Rule > 'END' .  Grammar      = Rule &lt; Rule &gt; 'END' .
                { The &lt; and > signs indicate zero }                 { The &lt; and &gt; signs indicate zero }
                { or more repetitions. }                 { or more repetitions. }
                { END marks the end of the grammar. }                 { END marks the end of the grammar. }
 Rule         = Ident '=' RightPart '.' .  Rule         = Ident '=' RightPart '.' .
Line 8617  RightPart    = RtTerminal / RtIntermed . Line 7856  RightPart    = RtTerminal / RtIntermed .
                { The slash indicates a choice }                 { The slash indicates a choice }
 RtTerminal   ='NAME' / 'STRING' / 'NUMBER' .  RtTerminal   ='NAME' / 'STRING' / 'NUMBER' .
                { Right part of a terminal rule }                 { Right part of a terminal rule }
 RtIntermed   = Possibility &lt; '/' Possibility > .  RtIntermed   = Possibility &lt; '/' Possibility &gt; .
                { Right part of an intermediate rule }                 { Right part of an intermediate rule }
 Possibility  = ElemOpt &lt; ElemOpt > .  Possibility  = ElemOpt &lt; ElemOpt &gt; .
 ElemOpt      = Element / '[' Element &lt; Element > ']' /  ElemOpt      = Element / '[' Element &lt; Element &gt; ']' /
               '&lt;' Element &lt; Element > '>'  .                '&lt;' Element &lt; Element &gt; '&gt;'  .
                { Brackets delimit optional parts }                 { Brackets delimit optional parts }
 Element      = Ident / KeyWord .  Element      = Ident / KeyWord .
 Ident        = NAME .  Ident        = NAME .
Line 8632  END</pre> Line 7871  END</pre>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb62">The S language</a></h2>  <h2><a name="sectb62">The S language</a></h2>
 <p>  
 The S language is used to write structure schemas, which contain the generic  <p>The S language is used to write structure schemas, which contain the
 logical structures of document and object classes.  It is described here in  generic logical structures of document and object classes.  It is described
 the M meta-language.</p>  here in the M meta-language.</p>
 <pre>StructSchema   = 'STRUCTURE' [ 'EXTENSION' ] ElemID ';'  <pre>StructSchema   = 'STRUCTURE' [ 'EXTENSION' ] ElemID ';'
                  'DEFPRES' PresID ';'                   'DEFPRES' PresID ';'
                [ 'ATTR' AttrSeq ]                 [ 'ATTR' AttrSeq ]
Line 8653  the M meta-language.</p> Line 7891  the M meta-language.</p>
 ElemID         = NAME .  ElemID         = NAME .
 PresID         = NAME .  PresID         = NAME .
   
 AttrSeq        = Attribute &lt; Attribute > .  AttrSeq        = Attribute &lt; Attribute &gt; .
 Attribute      = AttrID '=' AttrType ';' .  Attribute      = AttrID '=' AttrType ';' .
 AttrType       = 'INTEGER' / 'TEXT' /  AttrType       = 'INTEGER' / 'TEXT' /
                  'REFERENCE' '(' RefType ')' /                   'REFERENCE' '(' RefType ')' /
                  ValueSeq .                   ValueSeq .
 RefType        = 'ANY' /  RefType        = 'ANY' /
                  [ FirstSec ] ElemID [ ExtStruct ] .                   [ FirstSec ] ElemID [ ExtStruct ] .
 ValueSeq       = AttrVal &lt; ',' AttrVal > .  ValueSeq       = AttrVal &lt; ',' AttrVal &gt; .
 AttrID         = NAME .  AttrID         = NAME .
 FirstSec       = 'First' / 'Second' .  FirstSec       = 'First' / 'Second' .
 ExtStruct      = '(' ElemID ')' .  ExtStruct      = '(' ElemID ')' .
 AttrVal        = NAME .  AttrVal        = NAME .
   
 RulesSeq       = Rule &lt; Rule > .  RulesSeq       = Rule &lt; Rule &gt; .
 Rule           = ElemID [ LocAttrSeq ] '='  Rule           = ElemID [ LocAttrSeq ] '='
                  DefWithAttr ';' .                   DefWithAttr ';' .
 LocAttrSeq     = '(' 'ATTR' LocalAttr  LocAttrSeq     = '(' 'ATTR' LocalAttr
                       &lt; ';' LocalAttr > ')' .                        &lt; ';' LocalAttr &gt; ')' .
 LocalAttr      = [ '!' ] AttrID [ '=' AttrType ] .  LocalAttr      = [ '!' ] AttrID [ '=' AttrType ] .
 DefWithAttr    = Definition  DefWithAttr    = Definition
                  [ '+' '(' ExtensionSeq ')' ]                   [ '+' '(' ExtensionSeq ')' ]
                  [ '-' '(' RestrictSeq ')' ]                   [ '-' '(' RestrictSeq ')' ]
                  [ 'WITH' FixedAttrSeq ] .                   [ 'WITH' FixedAttrSeq ] .
 ExtensionSeq   = ExtensionElem &lt; ',' ExtensionElem > .  ExtensionSeq   = ExtensionElem &lt; ',' ExtensionElem &gt; .
 ExtensionElem  = ElemID / 'TEXT' / 'GRAPHICS' /  ExtensionElem  = ElemID / 'TEXT' / 'GRAPHICS' /
                  'SYMBOL' / 'PICTURE' .                   'SYMBOL' / 'PICTURE' .
 RestrictSeq    = RestrictElem &lt; ',' RestrictElem > .  RestrictSeq    = RestrictElem &lt; ',' RestrictElem &gt; .
 RestrictElem   = ElemID / 'TEXT' / 'GRAPHICS' /  RestrictElem   = ElemID / 'TEXT' / 'GRAPHICS' /
                  'SYMBOL' / 'PICTURE' .                   'SYMBOL' / 'PICTURE' .
 FixedAttrSeq   = FixedAttr &lt; ',' FixedAttr > .  FixedAttrSeq   = FixedAttr &lt; ',' FixedAttr &gt; .
 FixedAttr      = AttrID [ FixedOrModifVal ] .  FixedAttr      = AttrID [ FixedOrModifVal ] .
 FixedOrModifVal= [ '?' ] '=' FixedValue .  FixedOrModifVal= [ '?' ] '=' FixedValue .
 FixedValue     = [ '-' ] NumValue / TextValue / AttrVal .  FixedValue     = [ '-' ] NumValue / TextValue / AttrVal .
Line 8709  min            = Integer / '*' . Line 7947  min            = Integer / '*' .
 max            = Integer / '*' .  max            = Integer / '*' .
 Integer        = NUMBER .  Integer        = NUMBER .
   
 DefOptSeq      = DefOpt ';' &lt; DefOpt ';' > .  DefOptSeq      = DefOpt ';' &lt; DefOpt ';' &gt; .
 DefOpt         = [ '?' ] DefWithAttr .  DefOpt         = [ '?' ] DefWithAttr .
   
 DefSeq         = DefWithAttr ';' &lt; DefWithAttr ';' > .  DefSeq         = DefWithAttr ';' &lt; DefWithAttr ';' &gt; .
   
 SkeletonSeq    = SkeletonElem &lt; ',' SkeletonElem > ';' .  SkeletonSeq    = SkeletonElem &lt; ',' SkeletonElem &gt; ';' .
 SkeletonElem   = ElemID [ 'WITH' Contents ] .  SkeletonElem   = ElemID [ 'WITH' Contents ] .
 Contents       = 'Nothing' / ElemID [ ExtStruct ] .  Contents       = 'Nothing' / ElemID [ ExtStruct ] .
   
 ExceptSeq      = Except ';' &lt; Except ';' > .  ExceptSeq      = Except ';' &lt; Except ';' &gt; .
 Except         = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr ':'  Except         = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr ':'
                  ExcValSeq .                   ExcValSeq .
 ExcTypeOrAttr  = ElemID / AttrID .  ExcTypeOrAttr  = ElemID / AttrID .
 ExcValSeq      = ExcValue &lt; ',' ExcValue > .  ExcValSeq      = ExcValue &lt; ',' ExcValue &gt; .
 ExcValue       = 'NoCut' / 'NoCreate' /  ExcValue       = 'NoCut' / 'NoCreate' /
                  'NoHMove' / 'NoVMove' / 'NoMove' /                   'NoHMove' / 'NoVMove' / 'NoMove' /
                  'NoHResize' / 'NoVResize' / 'NoResize' /                   'NoHResize' / 'NoVResize' / 'NoResize' /
Line 8736  ExcValue       = 'NoCut' / 'NoCreate' / Line 7974  ExcValue       = 'NoCut' / 'NoCreate' /
                  'HighlightChildren' / 'ExtendedSelection' /                   'HighlightChildren' / 'ExtendedSelection' /
                  'ReturnCreateNL' / 'ReturnCreateWithin' .                   'ReturnCreateNL' / 'ReturnCreateWithin' .
   
 ExtensRuleSeq  = ExtensRule ';' &lt; ExtensRule ';' > .  ExtensRuleSeq  = ExtensRule ';' &lt; ExtensRule ';' &gt; .
 ExtensRule     = RootOrElem [ LocAttrSeq ]  ExtensRule     = RootOrElem [ LocAttrSeq ]
                  [ '+' '(' ExtensionSeq ')' ]                   [ '+' '(' ExtensionSeq ')' ]
                  [ '-' '(' RestrictSeq ')' ]                   [ '-' '(' RestrictSeq ')' ]
Line 8747  END</pre> Line 7985  END</pre>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb63">The P language</a></h2>  <h2><a name="sectb63">The P language</a></h2>
 <p>  
 The P language is used to write presentation schemas, which define the  <p>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>PresSchema      = 'PRESENTATION' ElemID ';'  <pre>PresSchema      = 'PRESENTATION' ElemID ';'
Line 8769  and objects.  It is described here in th Line 8006  and objects.  It is described here in th
 ElemID          = NAME .  ElemID          = NAME .
   
 ViewSeq         = ViewDeclaration  ViewSeq         = ViewDeclaration
                   &lt; ',' ViewDeclaration > ';' .                    &lt; ',' ViewDeclaration &gt; ';' .
 ViewDeclaration = ViewID [ 'EXPORT' ] .  ViewDeclaration = ViewID [ 'EXPORT' ] .
 ViewID          = NAME .  ViewID          = NAME .
   
 PrintViewSeq    = PrintView &lt; ',' PrintView > ';' .  PrintViewSeq    = PrintView &lt; ',' PrintView &gt; ';' .
 PrintView       = ViewID / ElemID .  PrintView       = ViewID / ElemID .
   
 CounterSeq      = Counter &lt; Counter > .  CounterSeq      = Counter &lt; Counter &gt; .
 Counter         = CounterID ':' CounterFunc ';' .  Counter         = CounterID ':' CounterFunc ';' .
 CounterID       = NAME .  CounterID       = NAME .
 CounterFunc     = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]  CounterFunc     = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]
                   [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /                    [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /
                   SetFunction &lt; SetFunction >                    SetFunction &lt; SetFunction &gt;
                   AddFunction &lt; AddFunction >                    AddFunction &lt; AddFunction &gt;
                   [ 'INIT' AttrID ] /                    [ 'INIT' AttrID ] /
                   'RLEVEL' 'OF' ElemID .                    'RLEVEL' 'OF' ElemID .
 SLevelAsc       = [ '-' ] LevelAsc .  SLevelAsc       = [ '-' ] LevelAsc .
Line 8793  TypeOrPage      = 'Page' [ '(' ViewID ') Line 8030  TypeOrPage      = 'Page' [ '(' ViewID ')
                   [ '*' ] ElemID .                    [ '*' ] ElemID .
 CounterValue    = NUMBER .  CounterValue    = NUMBER .
   
 ConstSeq        = Const &lt; Const > .  ConstSeq        = Const &lt; Const &gt; .
 Const           = ConstID '=' ConstType ConstValue ';' .  Const           = ConstID '=' ConstType ConstValue ';' .
 ConstID         = NAME .  ConstID         = NAME .
 ConstType       = 'Text' [ Alphabet ] / 'Symbol' /  ConstType       = 'Text' [ Alphabet ] / 'Symbol' /
Line 8801  ConstType       = 'Text' [ Alphabet ] / Line 8038  ConstType       = 'Text' [ Alphabet ] /
 ConstValue      = STRING .  ConstValue      = STRING .
 Alphabet        = NAME .  Alphabet        = NAME .
   
 VarSeq          = Variable &lt; Variable > .  VarSeq          = Variable &lt; Variable &gt; .
 Variable        = VarID ':' FunctionSeq ';' .  Variable        = VarID ':' FunctionSeq ';' .
 VarID           = NAME .  VarID           = NAME .
 FunctionSeq     = Function &lt; Function > .  FunctionSeq     = Function &lt; Function &gt; .
 Function        = 'DATE' / 'FDATE' /  Function        = 'DATE' / 'FDATE' /
                   'DocName' / 'DirName' /                    'DocName' / 'DirName' /
                   'ElemName' / 'AttributeName' /                    'ElemName' / 'AttributeName' /
Line 8818  CounterStyle    = 'Arabic' / 'LRoman' / Line 8055  CounterStyle    = 'Arabic' / 'LRoman' /
                   'Uppercase' / 'Lowercase' .                    'Uppercase' / 'Lowercase' .
 MinMax          = 'MaxRangeVal' / 'MinRangeVal' .  MinMax          = 'MaxRangeVal' / 'MinRangeVal' .
   
 BoxSeq          = Box &lt; Box > .  BoxSeq          = Box &lt; Box &gt; .
 Box             = 'FORWARD' BoxID ';' /  Box             = 'FORWARD' BoxID ';' /
                   BoxID ':' ViewRuleSeq .                    BoxID ':' ViewRuleSeq .
 BoxID           = NAME .  BoxID           = NAME .
   
 PresentSeq      = Present &lt; Present > .  PresentSeq      = Present &lt; Present &gt; .
 Present         = [ '*' ] [ FirstSec ] ElemID ':'  Present         = [ '*' ] [ FirstSec ] ElemID ':'
                   ViewRuleSeq .                    ViewRuleSeq .
 FirstSec        = 'First' / 'Second' .  FirstSec        = 'First' / 'Second' .
   
 PresAttrSeq     = PresAttr &lt; PresAttr > .  PresAttrSeq     = PresAttr &lt; PresAttr &gt; .
 PresAttr        = AttrID [ '(' [ FirstSec ] ElemID ')' ]   PresAttr        = AttrID [ '(' [ FirstSec ] ElemID ')' ] 
                   [ AttrRelation ] ':' ViewRuleSeq .                    [ AttrRelation ] ':' ViewRuleSeq .
 AttrID          = NAME .  AttrID          = NAME .
 AttrRelation    = '=' AttrVal /  AttrRelation    = '=' AttrVal /
                   '>' [ '-' ] MinValue /                    '&gt;' [ '-' ] MinValue /
                   '&lt;' [ '-' ] MaxValue /                    '&lt;' [ '-' ] MaxValue /
                   'IN' '[' [ '-' ] LowerBound '..'                     'IN' '[' [ '-' ] LowerBound '..' 
                   [ '-' ] UpperBound ']' /                    [ '-' ] UpperBound ']' /
Line 8849  EqualNum        = NUMBER . Line 8086  EqualNum        = NUMBER .
 EqualText       = STRING .  EqualText       = STRING .
 AttrValue       = NAME .  AttrValue       = NAME .
   
 ViewRuleSeq     = 'BEGIN' &lt; RulesAndCond > &lt; ViewRules >  ViewRuleSeq     = 'BEGIN' &lt; RulesAndCond &gt; &lt; ViewRules &gt;
                   'END' ';' /                    'END' ';' /
                   ViewRules / CondRules / Rule .                    ViewRules / CondRules / Rule .
 RulesAndCond    = CondRules / Rule .  RulesAndCond    = CondRules / Rule .
 ViewRules       = 'IN' ViewID CondRuleSeq .  ViewRules       = 'IN' ViewID CondRuleSeq .
 CondRuleSeq     = 'BEGIN' &lt; RulesAndCond > 'END' ';' /  CondRuleSeq     = 'BEGIN' &lt; RulesAndCond &gt; 'END' ';' /
                   CondRules / Rule .                    CondRules / Rule .
 CondRules       = CondRule &lt; CondRule >  CondRules       = CondRule &lt; CondRule &gt;
                   [ 'Otherwise' RuleSeq ] .                    [ 'Otherwise' RuleSeq ] .
 CondRule        = 'IF' ConditionSeq RuleSeq .  CondRule        = 'IF' ConditionSeq RuleSeq .
 RulesSeq        = 'BEGIN' Rule &lt; Rule > 'END' ';' / Rule .  RulesSeq        = 'BEGIN' Rule &lt; Rule &gt; 'END' ';' / Rule .
   
 ConditionSeq    = Condition &lt; 'AND' Condition > .  ConditionSeq    = Condition &lt; 'AND' Condition &gt; .
 Condition       = [ 'NOT' ] [ 'Target' ] ConditionElem .  Condition       = [ 'NOT' ] [ 'Target' ] ConditionElem .
 ConditionElem   = 'First' / 'Last' /  ConditionElem   = 'First' / 'Last' /
                   [ 'Immediately' ] 'Within' [ NumParent ]                    [ 'Immediately' ] 'Within' [ NumParent ]
Line 8875  ConditionElem   = 'First' / 'Last' / Line 8112  ConditionElem   = 'First' / 'Last' /
                   '(' [ MinMax ] CounterName CounterCond ')' /                    '(' [ MinMax ] CounterName CounterCond ')' /
                   CondPage '(' CounterID ')' .                    CondPage '(' CounterID ')' .
 NumParent       = [ GreaterLess ] NParent .  NumParent       = [ GreaterLess ] NParent .
 GreaterLess     = '>' / '&lt;' .  GreaterLess     = '&gt;' / '&lt;' .
 NParent         = NUMBER.  NParent         = NUMBER.
 CounterCond     = '&lt;' MaxCtrVal / '>' MinCtrVal /  CounterCond     = '&lt;' MaxCtrVal / '&gt;' MinCtrVal /
                   '=' EqCtrVal /                     '=' EqCtrVal / 
                   'IN' '[' ['-'] MinCtrBound '..'                     'IN' '[' ['-'] MinCtrBound '..' 
                   ['-'] MaxCtrBound ']' .                    ['-'] MaxCtrBound ']' .
Line 8939  PresParam       = 'VertRef' ':' HorizPos Line 8176  PresParam       = 'VertRef' ':' HorizPos
                   'LineStyle' ':' LineStyleInherit /                    'LineStyle' ':' LineStyleInherit /
                   'LineWeight' ':' DistOrInherit /                    'LineWeight' ':' DistOrInherit /
                   'FillPattern' ':' NameInherit /                    'FillPattern' ':' NameInherit /
                   'Background' ':' NameInherit /                    'Background' ':' Color /
                   'Foreground' ':' NameInherit /                    'Foreground' ':' Color /
                   'Content' ':' VarConst .                    'Content' ':' VarConst .
 PresFunc        = Creation '(' BoxID ')' /  PresFunc        = Creation '(' BoxID ')' /
                   'Line' /                    'Line' /
Line 9058  PercentSize     = NUMBER . Line 8295  PercentSize     = NUMBER .
   
 NameInherit     = Kinship '=' / FontName .  NameInherit     = Kinship '=' / FontName .
 FontName        = NAME .  FontName        = NAME .
   Color           = 'Transparent' / Kinship '=' / FontName .
 StyleInherit    = Kinship '=' /  StyleInherit    = Kinship '=' /
                   'Roman' / 'Italics' / 'Oblique' .                    'Roman' / 'Italics' / 'Oblique' .
 WeightInherit   = Kinship '=' /  WeightInherit   = Kinship '=' /
Line 9080  Create          = 'CreateFirst' / 'Creat Line 8318  Create          = 'CreateFirst' / 'Creat
                   'CreateBefore' / 'CreateAfter' /                    'CreateBefore' / 'CreateAfter' /
                   'CreateEnclosing' .                    'CreateEnclosing' .
   
 TransmitSeq     = Transmit &lt; Transmit > .  TransmitSeq     = Transmit &lt; Transmit &gt; .
 Transmit        = TypeOrCounter 'To' ExternAttr  Transmit        = TypeOrCounter 'To' ExternAttr
                   '(' ElemID ')' ';' .                    '(' ElemID ')' ';' .
 TypeOrCounter   = CounterID / ElemID .  TypeOrCounter   = CounterID / ElemID .
Line 9090  END</pre> Line 8328  END</pre>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb64">The T language</a></h2>  <h2><a name="sectb64">The T language</a></h2>
 <pre>TransSchema   = 'TRANSLATION' ElemID ';'  <pre>TransSchema   = 'TRANSLATION' ElemID ';'
               [ 'LINELENGTH' LineLength ';' ]                [ 'LINELENGTH' LineLength ';' ]
Line 9103  END</pre> Line 8340  END</pre>
                 'RULES' ElemSeq                  'RULES' ElemSeq
               [ 'ATTRIBUTES' AttrSeq ]                [ 'ATTRIBUTES' AttrSeq ]
               [ 'PRESENTATION' PresSeq ]                [ 'PRESENTATION' PresSeq ]
               &lt; 'TEXTTRANSLATE' TextTransSeq >                &lt; 'TEXTTRANSLATE' TextTransSeq &gt;
               [ 'SYMBTRANSLATE' TransSeq ]                [ 'SYMBTRANSLATE' TransSeq ]
               [ 'GRAPHTRANSLATE' TransSeq ]                [ 'GRAPHTRANSLATE' TransSeq ]
                 'END' .                  'END' .
   
 LineLength    = NUMBER .  LineLength    = NUMBER .
   
 BufferSeq     = Buffer &lt; Buffer > .  BufferSeq     = Buffer &lt; Buffer &gt; .
 Buffer        = BufferID [ '(' 'Picture' ')' ] ';' .  Buffer        = BufferID [ '(' 'Picture' ')' ] ';' .
 BufferID      = NAME .  BufferID      = NAME .
   
 CounterSeq    = Counter &lt; Counter > .  CounterSeq    = Counter &lt; Counter &gt; .
 Counter       = CounterID [ ':' CounterFunc ] ';' .  Counter       = CounterID [ ':' CounterFunc ] ';' .
 CounterID     = NAME .  CounterID     = NAME .
 CounterFunc   = 'Rank' 'of' ElemID [ SLevelAsc ]  CounterFunc   = 'Rank' 'of' ElemID [ SLevelAsc ]
Line 9130  Increment     = NUMBER . Line 8367  Increment     = NUMBER .
 ElemID        = NAME .  ElemID        = NAME .
 AttrID        = NAME .  AttrID        = NAME .
   
 ConstSeq      = Const &lt; Const > .  ConstSeq      = Const &lt; Const &gt; .
 Const         = ConstID '=' ConstValue ';' .  Const         = ConstID '=' ConstValue ';' .
 ConstID       = NAME .  ConstID       = NAME .
 ConstValue    = STRING .  ConstValue    = STRING .
   
 VariableSeq   = Variable &lt; Variable > .  VariableSeq   = Variable &lt; Variable &gt; .
 Variable      = VarID ':' Function &lt; Function > ';' .  Variable      = VarID ':' Function &lt; Function &gt; ';' .
 VarID         = NAME .  VarID         = NAME .
 Function      = 'Value' '(' CounterID [ ':' Length ]  Function      = 'Value' '(' CounterID [ ':' Length ]
                           [ ',' CounterStyle ]  ')' /                            [ ',' CounterStyle ]  ')' /
Line 9149  CounterStyle=   'Arabic' / 'LRoman' / 'U Line 8386  CounterStyle=   'Arabic' / 'LRoman' / 'U
                 'Uppercase' / 'Lowercase' .                  'Uppercase' / 'Lowercase' .
 CharString    = STRING .  CharString    = STRING .
   
 ElemSeq       = TransType &lt; TransType > .  ElemSeq       = TransType &lt; TransType &gt; .
 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 &gt; 'END' ';' .
 Rule          = SimpleRule / ConditionBlock .  Rule          = SimpleRule / ConditionBlock .
 ConditionBlock= 'IF' ConditionSeq SimpleRuleSeq .  ConditionBlock= 'IF' ConditionSeq SimpleRuleSeq .
 SimpleRuleSeq = 'BEGIN' &lt; SimpleRule > 'END' ';' /   SimpleRuleSeq = 'BEGIN' &lt; SimpleRule &gt; 'END' ';' / 
                 SimpleRule .                  SimpleRule .
   
 ConditionSeq  = Condition [ 'AND' Condition ] .  ConditionSeq  = Condition [ 'AND' Condition ] .
Line 9184  CondOnAscend  = 'First' / 'Last' / Line 8421  CondOnAscend  = 'First' / 'Last' /
                 PresRule /                  PresRule /
                 'Comment' .                                    'Comment' .                  
 NumParent     = [ GreaterLess ] NParent .  NumParent     = [ GreaterLess ] NParent .
 GreaterLess   = '>' / '&lt;' .  GreaterLess   = '&gt;' / '&lt;' .
 NParent       = NUMBER.  NParent       = NUMBER.
 Alphabet      = NAME .  Alphabet      = NAME .
 RelatAttr     = '=' Value /  RelatAttr     = '=' Value /
                  '>' [ '-' ] Minimum /                   '&gt;' [ '-' ] Minimum /
                  '&lt;' [ '-' ] Maximum /                   '&lt;' [ '-' ] Maximum /
                  'IN' '[' [ '-' ] MinInterval '..'                   'IN' '[' [ '-' ] MinInterval '..'
                           [ '-' ] MaxInterval ']' .                            [ '-' ] MaxInterval ']' .
Line 9229  IndentValue   = NUMBER . Line 8466  IndentValue   = NUMBER .
 Object        = ConstID / CharString /  Object        = ConstID / CharString /
                 BufferID /                  BufferID /
                 VarID /                  VarID /
                 '(' Function &lt; Function > ')' /                  '(' Function &lt; Function &gt; ')' /
                  [ 'Translated' ] AttrID /                   [ 'Translated' ] AttrID /
                 'Value' /                  'Value' /
                 'Content' /                  'Content' /
Line 9256  ExtStruct     = '(' ElemID ')' . Line 8493  ExtStruct     = '(' ElemID ')' .
   
 TrSchema      = NAME .  TrSchema      = NAME .
   
 AttrSeq       = TransAttr &lt; TransAttr > .  AttrSeq       = TransAttr &lt; TransAttr &gt; .
 TransAttr     = AttrID [ '(' ElemID ')' ]   TransAttr     = AttrID [ '(' ElemID ')' ] 
                 [ RelatAttr ] ':' RuleSeq .                  [ RelatAttr ] ':' RuleSeq .
   
 PresSeq       = PresTrans &lt; PresTrans > .  PresSeq       = PresTrans &lt; PresTrans &gt; .
 PresTrans     = PresRule ':' RuleSeq .  PresTrans     = PresRule ':' RuleSeq .
 PresRule      = 'Size' [ PresRelation ] /  PresRule      = 'Size' [ PresRelation ] /
                 'Indent' [ PresRelation ] /                  'Indent' [ PresRelation ] /
Line 9280  PresRule      = 'Size' [ PresRelation ] Line 8517  PresRule      = 'Size' [ PresRelation ]
                 'Foreground' [ '=' Color ] .                  'Foreground' [ '=' Color ] .
   
 PresRelation  = '=' PresValue /  PresRelation  = '=' PresValue /
                 '>' [ '-' ] PresMinimum /                  '&gt;' [ '-' ] PresMinimum /
                 '&lt;' [ '-' ] PresMaximum /                  '&lt;' [ '-' ] PresMaximum /
                 'IN' '[' [ '-' ] PresIntervalMin '..'                  'IN' '[' [ '-' ] PresIntervalMin '..'
                          [ '-' ] PresIntervalMax ']' .                           [ '-' ] PresIntervalMax ']' .
Line 9305  PresVal       = NUMBER . Line 8542  PresVal       = NUMBER .
   
 TextTransSeq  = [ Alphabet ] TransSeq .  TextTransSeq  = [ Alphabet ] TransSeq .
 Alphabet      = NAME .  Alphabet      = NAME .
 TransSeq      = 'BEGIN' &lt; Translation > 'END' ';' /  TransSeq      = 'BEGIN' &lt; Translation &gt; 'END' ';' /
                 Translation .                  Translation .
 Translation   = Source [ '->' Target ] ';' .  Translation   = Source [ '-&gt;' Target ] ';' .
 Source        = STRING .  Source        = STRING .
 Target        = STRING .</pre>  Target        = STRING .</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>  <h2><a name="sectb71">Characters</a></h2>
 <p>  
 The characters of the Latin alphabet follow the encoding defined in the ISO  <p>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>  
 Characters whose octal code is greater than 0200 are written in the form of  <p>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ésumé' is written <tt>R\351sum\351</tt>.</p>
 <p>  
 To the ISO 8859-1 encoding four characters with the following codes have been  <p>To the ISO 8859-1 encoding four characters with the following codes have
 added:<br>  been added:<br>
 <tt>212</tt>: line break<br>  <tt>212</tt>: line break<br>
 <tt>240</tt>: sticky space<br>  <tt>240</tt>: sticky space<br>
 <tt>201</tt>: thin space<br>  <tt>201</tt>: thin space<br>
 <tt>202</tt>: en space</p>  <tt>202</tt>: en space</p>
 <p>  
 The <tt>212</tt> character is a ``line break'' character which forces a line  <p>The <tt>212</tt> character is a ``line break'' character which forces a
 break.  The <tt>240</tt> character is a ``sticky space'', which cannot be  line break.  The <tt>240</tt> character is a ``sticky space'', which cannot be
 replaced by a line break.</p>  replaced by a line break.</p>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb72">Symbols</a></h2>  <h2><a name="sectb72">Symbols</a></h2>
 <p>  
 The table below gives the codes for the symbols of Thot.  Symbols can be used  <p>The table below gives the codes for the symbols of Thot.  Symbols can be
 in presentation schemas constants and in transcoding rules of translation  used 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>    <li><tt>r</tt>: a radical</li>
 <tt>r</tt>: a radical    <li><tt>i</tt>: a simple integral</li>
 </li>    <li><tt>c</tt>: a curvilinear integral</li>
 <li>    <li><tt>d</tt>: a double integral</li>
 <tt>i</tt>: a simple integral    <li><tt>t</tt>: a triple integral</li>
 </li>    <li><tt>S</tt>: the summation symbol</li>
 <li>    <li><tt>P</tt>: the product symbol</li>
 <tt>c</tt>: a curvilinear integral    <li><tt>U</tt>: the union symbol</li>
 </li>    <li><tt>I</tt>: the intersection symbol</li>
 <li>    <li><tt>&gt;</tt>: a right arrow</li>
 <tt>d</tt>: a double integral    <li><tt>&lt;</tt>: a left arrow</li>
 </li>    <li><tt>^</tt>:  an up arrow</li>
 <li>    <li><tt>V</tt>: a down arrow</li>
 <tt>t</tt>: a triple integral    <li><tt>(</tt>: an opening parenthesis</li>
 </li>    <li><tt>)</tt>: a closing parenthesis</li>
 <li>    <li><tt>{</tt>: an opening brace</li>
 <tt>S</tt>: the summation symbol    <li><tt>}</tt>: a closing brace</li>
 </li>    <li><tt>[</tt>: an opening bracket</li>
 <li>    <li><tt>]</tt>: a closing bracket</li>
 <tt>P</tt>: the product symbol  
 </li>  
 <li>  
 <tt>U</tt>: the union symbol  
 </li>  
 <li>  
 <tt>I</tt>: the intersection symbol  
 </li>  
 <li>  
 <tt>></tt>: a right arrow  
 </li>  
 <li>  
 <tt>&lt;</tt>: a left arrow  
 </li>  
 <li>  
 <tt>^</tt>:  an up arrow  
 </li>  
 <li>  
 <tt>V</tt>: a down arrow  
 </li>  
 <li>  
 <tt>(</tt>: an opening parenthesis  
 </li>  
 <li>  
 <tt>)</tt>: a closing parenthesis  
 </li>  
 <li>  
 <tt>{</tt>: an opening brace  
 </li>  
 <li>  
 <tt>}</tt>: a closing brace  
 </li>  
 <li>  
 <tt>[</tt>: an opening bracket  
 </li>  
 <li>  
 <tt>]</tt>: a closing bracket  
 </li>  
 </ul>  </ul>
 </div>  </div>
   
 <div class="section">  <div class="section">
   
 <h2><a name="sectb73">Graphical elements</a></h2>  <h2><a name="sectb73">Graphical elements</a></h2>
 <p>  
 The table below gives the codes for the graphical elements of Thot. These  <p>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>    <li>a: a circle</li>
 a: a circle    <li><p><tt>A</tt>: an open curve with an arrow head at the end</p>
 </li>    </li>
 <li><p>    <li><tt>b</tt>: a horizontal line along the lower side of the box</li>
 <tt>A</tt>: an open curve with an arrow head at the end</p>    <li><tt>B</tt>: an open curve</li>
 </li>    <li><tt>c</tt>: an ellipse inscribed in the box</li>
 <li>    <li><tt>C</tt>: a rectangle with rounded corners</li>
 <tt>b</tt>: a horizontal line along the lower side of the box    <li><tt>D</tt>: an open curve with two arrow heads</li>
 </li>    <li><tt>e</tt>: The northwest/southeast diagonal of the box with an
 <li>      arrowhead at the bottom</li>
 <tt>B</tt>: an open curve    <li><tt>E</tt>: The southwest/northeast diagonal of the box with an
 </li>      arrowhead at the top</li>
 <li>    <li><tt>F</tt>: an open curve with an arrow head at start</li>
 <tt>c</tt>: an ellipse inscribed in the box    <li><tt>g</tt>: a line from the origin of the box to its opposite
 </li>    corner</li>
 <li>    <li><tt>h</tt>: a horizontal line as wide as the box and placed in its
 <tt>C</tt>: a rectangle with rounded corners      middle</li>
 </li>    <li><tt>l</tt>: a vertical line on the left side of the box</li>
 <li>    <li><tt>L</tt>: a lozenge</li>
 <tt>D</tt>: an open curve with two arrow heads    <li><tt>M</tt>: an open broken line with two arrow heads</li>
 </li>    <li><tt>N</tt>: an open broken line with an arrow head at start</li>
 <li>    <li><tt>o</tt>: The southwest/northeast diagonal of the box with an
 <tt>e</tt>: The northwest/southeast diagonal of the box with an arrowhead at      arrowhead at the bottom</li>
 the bottom    <li><tt>O</tt>: The northwest/southeast diagonal of the box with an
 </li>      arrowhead at the top</li>
 <li>    <li><tt>p</tt>: a polygon</li>
 <tt>E</tt>: The southwest/northeast diagonal of the box with an arrowhead at    <li><tt>P</tt>: a rectangle with round corners and a horizontal bar at the
 the top      top</li>
 </li>    <li><tt>Q</tt>: an ellipse with a horizontal bar at the top</li>
 <li>    <li><tt>r</tt>: a vertical line on the right side of the box</li>
 <tt>F</tt>: an open curve with an arrow head at start    <li><tt>R</tt>: a rectangle which is the shape of the box</li>
 </li>    <li><tt>s</tt>: a closed curve</li>
 <li>    <li><tt>S</tt>: an open broken line</li>
 <tt>g</tt>: a line from the origin of the box to its opposite corner    <li><tt>t</tt>: a horizontal line along the upper side of the box</li>
 </li>    <li><tt>U</tt>: an open broken line with an arrow head at the end</li>
 <li>    <li><tt>v</tt>: a vertical line as tall as the box and placed in its
 <tt>h</tt>: a horizontal line as wide as the box and placed in its middle    middle</li>
 </li>    <li><tt>V</tt>: a down arrow as tall as the box and in its middle</li>
 <li>    <li>w: a segment (2 points)</li>
 <tt>l</tt>: a vertical line on the left side of the box    <li><tt>W</tt>: the upper right corner</li>
 </li>    <li>x: a segment (2 points) with an arrow head at the end</li>
 <li>    <li><tt>X</tt>: the lower right corner</li>
 <tt>L</tt>: a lozenge    <li>y: a segment (2 points) with an arrow head at the end</li>
 </li>    <li><tt>Y</tt>: the lower left corner</li>
 <li>    <li>z: a segment (2 points) with an arrow head at the end</li>
 <tt>M</tt>: an open broken line with two arrow heads    <li><tt>Z</tt>: the upper left corner</li>
 </li>    <li><tt>space</tt>: a transparent element</li>
 <li>    <li><tt>^</tt>: an up arrow as tall as the box and in its middle</li>
 <tt>N</tt>: an open broken line with an arrow head at start    <li><tt>&gt;</tt>: a right arrow as long as the box's width and in its
 </li>      middle</li>
 <li>    <li><tt>&gt;</tt>: a left arrow as long as the box's width and in its
 <tt>o</tt>: The southwest/northeast diagonal of the box with an arrowhead at    middle</li>
 the bottom    <li><tt>/</tt>: The southwest/northeast diagonal of the box</li>
 </li>    <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 at  
 the top  
 </li>  
 <li>  
 <tt>p</tt>: a polygon  
 </li>  
 <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  
 </li>  
 <li>  
 <tt>r</tt>: a vertical line on the right side of the box  
 </li>  
 <li>  
 <tt>R</tt>: a rectangle which is the shape of the box  
 </li>  
 <li>  
 <tt>s</tt>: a closed curve  
 </li>  
 <li>  
 <tt>S</tt>: an open broken line  
 </li>  
 <li>  
 <tt>t</tt>: a horizontal line along the upper side of the box  
 </li>  
 <li>  
 <tt>U</tt>: an open broken line with an arrow head at the end  
 </li>  
 <li>  
 <tt>v</tt>: a vertical line as tall as the box and placed in its middle  
 </li>  
 <li>  
 <tt>V</tt>: a down arrow as tall as the box and in its middle  
 </li>  
 <li>  
 w: a segment (2 points)  
 </li>  
 <li>  
 <tt>W</tt>: the upper right corner  
 </li>  
 <li>  
 x: a segment (2 points) with an arrow head at the end  
 </li>  
 <li>  
 <tt>X</tt>: the lower right corner  
 </li>  
 <li>  
 y: a segment (2 points) with an arrow head at the end  
 </li>  
 <li>  
 <tt>Y</tt>: the lower left corner  
 </li>  
 <li>  
 z: a segment (2 points) with an arrow head at the end  
 </li>  
 <li>  
 <tt>Z</tt>: the upper left corner  
 </li>  
 <li>  
 <tt>space</tt>: a transparent element  
 </li>  
 <li>  
 <tt>^</tt>: an up arrow as tall as the box and in its middle  
 </li>  
 <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  
 </li>  
 <li>  
 <tt>/</tt>: The southwest/northeast diagonal of the box  
 </li>  
 <li>  
 <tt>\</tt>: the northwest/southeast diagonal of the box  
 </li>  
 </ul>  </ul>
 <hr>  <hr>
   
 </div>  </div>
 </div>  </div>
 </body>  </body>

Removed from v.1.29  
changed lines
  Added in v.1.30


Webmaster