Annotation of Amaya/doc/languages.html, revision 1.45
1.37 cvs 1: <?xml version="1.0" encoding="iso-8859-1"?>
2: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4: <html xmlns="http://www.w3.org/1999/xhtml">
1.18 cvs 5: <head>
1.30 cvs 6: <title>The Languages of Thot</title>
1.37 cvs 7: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
1.18 cvs 8: </head>
1.30 cvs 9:
1.18 cvs 10: <body>
11:
1.19 cvs 12: <div class="frontmatter" align="center">
1.18 cvs 13: <h1>The Languages of Thot</h1>
14:
15: <h3>Vincent Quint</h3>
16:
17: <h4>Translated from French by Ethan Munson</h4>
18:
1.44 quint 19: <h4>Version of March 5, 2002</h4>
1.30 cvs 20:
1.42 quint 21: <p>© 1996-2002 INRIA</p>
1.37 cvs 22: <hr />
1.18 cvs 23: </div>
24:
25: <div class="tableofcontents">
26: <h2><a href="languages.toc.html">Contents</a></h2>
27: <ul>
1.40 quint 28: <li><big><a href="#sect2">The document model of Thot</a></big>
1.30 cvs 29: <ul>
30: <li><strong><a href="#sectb21">The logical structure of
31: documents</a></strong></li>
32: <li><strong><a href="#sectb22">Generic and specific
33: structures</a></strong></li>
34: <li><strong><a href="#sectb23">Logical structure and physical
35: structure</a></strong></li>
36: <li><strong><a href="#sectb24">Document structures and object
37: structures</a></strong></li>
38: </ul>
39: </li>
1.40 quint 40: <li><big><a href="#sect3">The S language</a></big>
1.30 cvs 41: <ul>
1.40 quint 42: <li><strong><a href="#sectb31">Document meta-structure</a></strong>
1.30 cvs 43: <ul>
44: <li><a href="#sectc311">The basic types</a></li>
45: <li><a href="#sectc312">Constructed elements</a></li>
1.40 quint 46: <li><a href="#sectc313">Logical structure constructors</a>
1.30 cvs 47: <ul>
48: <li><small><a href="#sectd3131">Aggregate and
49: List</a></small></li>
50: <li><small><a href="#sectd3132">Choice, Schema, and
51: Unit</a></small></li>
52: <li><small><a href="#sectd3133">Reference and
53: Inclusion</a></small></li>
54: <li><small><a href="#sectd3134">Mark pairs</a></small></li>
55: <li><small><a href="#sectd3135">Restrictions and
56: Extensions</a></small></li>
57: <li><small><a href="#sectd3136">Summary</a></small></li>
58: </ul>
59: </li>
60: <li><a href="#sectc315">Attributes</a></li>
61: <li><a href="#sectc316">Discussion of the model</a></li>
62: </ul>
63: </li>
64: <li><strong><a href="#sectb32">The definition language for generic
1.40 quint 65: structures</a></strong>
1.30 cvs 66: <ul>
67: <li><a href="#sectc321">Writing Conventions</a></li>
68: <li><a href="#sectc322">Extension schemas</a></li>
69: <li><a href="#sectc323">The general organization of structure
70: schemas</a></li>
71: <li><a href="#sectc324">The default presentation</a></li>
72: <li><a href="#sectc325">Global Attributes</a></li>
73: <li><a href="#sectc327">Structured elements</a></li>
1.40 quint 74: <li><a href="#sectc328">Structure definitions</a>
1.30 cvs 75: <ul>
76: <li><small><a href="#sectd3281">List</a></small></li>
77: <li><small><a href="#sectd3282">Aggregate</a></small></li>
78: <li><small><a href="#sectd3283">Choice</a></small></li>
79: <li><small><a href="#sectd3284">Reference</a></small></li>
80: <li><small><a href="#sectd3285">Mark pairs</a></small></li>
81: </ul>
82: </li>
83: <li><a href="#sectc329">Imports</a></li>
84: <li><a href="#sectc3210">Extension rules</a></li>
85: <li><a href="#sectc3212">Units</a></li>
86: <li><a href="#sectc3213">Skeleton elements</a></li>
87: <li><a href="#sectc3214">Exceptions</a></li>
88: </ul>
89: </li>
1.40 quint 90: <li><strong><a href="#sectb33">Some examples</a></strong>
1.30 cvs 91: <ul>
92: <li><a href="#sectc331">A class of documents: articles</a></li>
93: <li><a href="#sectc332">A class of objects: mathematical
94: formulas</a></li>
95: </ul>
96: </li>
97: </ul>
98: </li>
1.40 quint 99: <li><big><a href="#sect4">The P language</a></big>
1.30 cvs 100: <ul>
1.40 quint 101: <li><strong><a href="#sectb41">Document presentation</a></strong>
1.30 cvs 102: <ul>
103: <li><a href="#sectc411">Two levels of presentation</a></li>
104: <li><a href="#sectc412">Boxes</a></li>
105: <li><a href="#sectc413">Views and visibility</a></li>
106: <li><a href="#sectc414">Pages</a></li>
107: <li><a href="#sectc415">Numbering</a></li>
1.34 cvs 108: <li><a href="#sectc416">Presentation properties</a></li>
1.30 cvs 109: </ul>
110: </li>
111: <li><strong><a href="#sectb42">Presentation description
1.40 quint 112: language</a></strong>
1.30 cvs 113: <ul>
114: <li><a href="#sectc421">The organization of a presentation
115: schema</a></li>
116: <li><a href="#sectc422">Views</a></li>
117: <li><a href="#sectc423">Print Views</a></li>
118: <li><a href="#sectc424">Counters</a></li>
119: <li><a href="#sectc425">Presentation constants</a></li>
120: <li><a href="#sectc426">Variables</a></li>
121: <li><a href="#sectc427">Default presentation rules</a></li>
122: <li><a href="#sectc428">Presentation and page layout boxes</a></li>
123: <li><a href="#sectc429">Presentation of structured elements</a></li>
124: <li><a href="#sectc4210">Logical attribute presentation</a></li>
125: <li><a href="#sectc4212">Value transmission rules</a></li>
126: <li><a href="#sectc4213">Presentation rules</a></li>
127: <li><a href="#sectc4214">Conditions applying to presentation
1.40 quint 128: rules</a>
1.30 cvs 129: <ul>
1.37 cvs 130: <li><small><a href="#sectd42141">Conditions based on the
131: logical position of the element</a></small></li>
1.42 quint 132: <li><small><a href="#sectd421411">Conditions based on the
133: element type</a></small></li>
1.30 cvs 134: <li><small><a href="#sectd42142">Conditions on
135: references</a></small></li>
136: <li><small><a href="#sectd42143">Conditions on logical
137: attributes</a></small></li>
138: <li><small><a href="#sectd42144">Conditions on page
139: breaks</a></small></li>
140: <li><small><a href="#sectd42145">Conditions on the element's
141: content</a></small></li>
142: <li><small><a href="#sectd42146">Conditions on
143: counters</a></small></li>
144: </ul>
145: </li>
146: <li><a href="#sectc4215">A presentation rule</a></li>
147: <li><a href="#sectc4216">Box axes</a></li>
148: <li><a href="#sectc4217">Distance units</a></li>
149: <li><a href="#sectc4218">Relative positions</a></li>
1.40 quint 150: <li><a href="#sectc4219">Box extents</a>
1.30 cvs 151: <ul>
152: <li><small><a href="#sectd42191">Fixed extents</a></small></li>
153: <li><small><a href="#sectd42192">Relative
154: extents</a></small></li>
155: <li><small><a href="#sectd42193">Elastic
156: extents</a></small></li>
157: </ul>
158: </li>
159: <li><a href="#sectc4220">Overflow</a></li>
160: <li><a href="#sectc4221">Inheritance</a></li>
1.40 quint 161: <li><a href="#sectc4222">Line breaking</a>
1.30 cvs 162: <ul>
163: <li><small><a href="#sectd42221">Line spacing</a></small></li>
164: <li><small><a href="#sectd42222">First line
165: indentation</a></small></li>
166: <li><small><a href="#sectd42223">Alignment</a></small></li>
167: <li><small><a href="#sectd42225">Hyphenation</a></small></li>
1.40 quint 168: <li><small><a href="#sectd422251">Writing
169: direction</a></small></li>
1.30 cvs 170: <li><small><a href="#sectd42226">Avoiding line
171: breaking</a></small></li>
172: </ul>
173: </li>
174: <li><a href="#sectc4223">Page breaking and line breaking
175: conditions</a></li>
176: <li><a href="#sectc4224">Visibility</a></li>
1.40 quint 177: <li><a href="#sectc4225">Character style properties</a>
1.30 cvs 178: <ul>
179: <li><small><a href="#sectd42251">Character size</a></small></li>
180: <li><small><a href="#sectd42252">Font and character
181: style</a></small></li>
182: <li><small><a href="#sectd42253">Underlining</a></small></li>
183: </ul>
184: </li>
185: <li><a href="#sectc4226">Stacking order</a></li>
186: <li><a href="#sectc4227">Line style</a></li>
187: <li><a href="#sectc4228">Line thickness</a></li>
188: <li><a href="#sectc4229">Fill pattern</a></li>
189: <li><a href="#sectc4230">Colors</a></li>
190: <li><a href="#sectc4230a">Background color and border</a></li>
191: <li><a href="#sectc4230b">Background pictures</a></li>
192: <li><a href="#sectc4231">Presentation box content</a></li>
193: <li><a href="#sectc4232">Presentation box creation</a></li>
194: <li><a href="#sectc4233">Page layout</a></li>
195: <li><a href="#sectc4234">Box copies</a></li>
196: </ul>
197: </li>
198: </ul>
199: </li>
1.40 quint 200: <li><big><a href="#sect5">The T language</a></big>
1.30 cvs 201: <ul>
1.40 quint 202: <li><strong><a href="#sectb51">Document translation</a></strong>
1.30 cvs 203: <ul>
204: <li><a href="#sectc511">Translation principles</a></li>
205: <li><a href="#sectc512">Translation procedure</a></li>
206: </ul>
207: </li>
208: <li><strong><a href="#sectb52">Translation definition
1.40 quint 209: language</a></strong>
1.30 cvs 210: <ul>
211: <li><a href="#sectc521">Organization of a translation
212: schema</a></li>
213: <li><a href="#sectc522">Line length</a></li>
214: <li><a href="#sectc523">Buffers</a></li>
215: <li><a href="#sectc524">Counters</a></li>
216: <li><a href="#sectc525">Constants</a></li>
217: <li><a href="#sectc526">Variables</a></li>
218: <li><a href="#sectc527">Translating structure elements</a></li>
1.40 quint 219: <li><a href="#sectc528">Conditional rules</a>
1.30 cvs 220: <ul>
221: <li><small><a href="#sectd5281">Conditions based on the logical
222: position of the element</a></small></li>
223: <li><small><a href="#sectd5282">Conditions on
224: references</a></small></li>
225: <li><small><a href="#sectd5284">Conditions on the
1.41 vatton 226: scripts</a></small></li>
1.30 cvs 227: <li><small><a href="#sectd5285">Conditions on page
228: breaks</a></small></li>
229: <li><small><a href="#sectd5286">Conditions on the element's
230: content</a></small></li>
231: <li><small><a href="#sectd5288">Conditions on the presence of
232: specific presentation rules</a></small></li>
233: <li><small><a href="#sectd5289">Conditions on the presence of
234: logical attributes</a></small></li>
235: <li><small><a href="#sectd52810">Conditions on logical
236: attributes</a></small></li>
237: <li><small><a href="#sectd52811">Conditions on specific
238: presentation rules</a></small></li>
239: </ul>
240: </li>
241: <li><a href="#sectc529">Translation rules</a></li>
242: <li><a href="#sectc5210">The <tt>Create</tt> rule</a></li>
243: <li><a href="#sectc5211">The <tt>Write</tt> rule</a></li>
244: <li><a href="#sectc5212">The <tt>Read</tt> rule</a></li>
245: <li><a href="#sectc5213">The <tt>Include</tt> rule</a></li>
246: <li><a href="#sectc5214">The <tt>Get</tt> rule</a></li>
247: <li><a href="#sectc5215">The <tt>Copy</tt> rule</a></li>
248: <li><a href="#sectc5216">The <tt>Use</tt> rule</a></li>
249: <li><a href="#sectc5217">The <tt>Remove</tt> rule</a></li>
1.31 cvs 250: <li><a href="#sectc5217a">The <code>Ignore</code> rule</a></li>
1.30 cvs 251: <li><a href="#sectc5218">The <tt>NoTranslation</tt> rule</a></li>
252: <li><a href="#sectc5219">The <tt>NoLineBreak</tt> rule</a></li>
253: <li><a href="#sectc5220">The <tt>ChangeMainFile</tt> rule</a></li>
254: <li><a href="#sectc5220a">The <tt>RemoveFile</tt> rule</a></li>
255: <li><a href="#sectc5221">The <tt>Set</tt> and <tt>Add</tt>
256: rules</a></li>
257: <li><a href="#sectc5221a">The <tt>Indent</tt> rule</a></li>
258: <li><a href="#sectc5222">Rule application order</a></li>
259: <li><a href="#sectc5223">Translation of logical attributes</a></li>
260: <li><a href="#sectc5224">Translation of specific
261: presentations</a></li>
262: <li><a href="#sectc5225">Recoding of characters, symbols and
263: graphics</a></li>
264: </ul>
265: </li>
266: </ul>
267: </li>
1.40 quint 268: <li><big><a href="#sect6">Language grammars</a></big>
1.30 cvs 269: <ul>
270: <li><strong><a href="#sectb61">The M meta-language</a></strong></li>
271: <li><strong><a href="#sectb62">The S language</a></strong></li>
272: <li><strong><a href="#sectb63">The P language</a></strong></li>
273: <li><strong><a href="#sectb64">The T language</a></strong></li>
274: </ul>
275: </li>
1.40 quint 276: <li><big><a href="#sect7">Character coding</a></big>
1.30 cvs 277: <ul>
278: <li><strong><a href="#sectb71">Characters</a></strong></li>
279: <li><strong><a href="#sectb72">Symbols</a></strong></li>
280: <li><strong><a href="#sectb73">Graphical elements</a></strong></li>
281: </ul>
282: </li>
1.18 cvs 283: </ul>
1.37 cvs 284: <hr />
1.18 cvs 285: </div>
1.1 cvs 286:
1.18 cvs 287: <div class="chapter">
1.37 cvs 288: <h1><a name="sect2" id="sect2">The document model of Thot</a></h1>
1.1 cvs 289:
1.30 cvs 290: <p>All of the services which Thot provides to the user are based on the
1.37 cvs 291: system's internal document representation. This representation is itself
292: derived from the document model which underlies Thot. The model is presented
1.30 cvs 293: here, prior to the description of the languages which permit the generic
294: specification of documents.</p>
1.1 cvs 295:
1.18 cvs 296: <div class="section">
1.37 cvs 297: <h2><a name="sectb21" id="sectb21">The logical structure of documents</a></h2>
1.1 cvs 298:
1.30 cvs 299: <p>The document model of Thot is primarily designed to allow the user to
300: operate on those entities which s/he has in mind when s/he works on a
301: document. The model makes no assumptions about the nature of these entities.
302: It is essentially these logical entities, such as paragraphs, sections,
303: chapters, notes, titles, and cross-references which give a document its
304: logical structure.</p>
305:
306: <p>Because of this model, the author can divide the document into chapters,
1.37 cvs 307: giving each one a title. The content of these chapters can be further divided
308: into sections, subsections, etc. The text is organized into successive
1.2 cvs 309: paragraphs, according to the content. In the writing phase, the lines, pages,
1.37 cvs 310: margins, spacing, fonts, and character styles are not very important. In
311: fact, if the system requires documents to be written in these terms, it gets
312: in the way. So, Thot's model is primarily based on the logical aspect of
313: documents. The creation of a model of this type essentially requires the
314: definition :</p>
1.18 cvs 315: <ul>
1.30 cvs 316: <li>of the entities which can appear in the documents,</li>
317: <li>and the relations between these entities.</li>
1.18 cvs 318: </ul>
1.30 cvs 319:
1.37 cvs 320: <p>The choice of entities to include in the model can be subtle. Some
321: documents require chapters, while others only need various levels of
322: sections. Certain documents contain appendices, others don't. In different
323: documents the same logical entity may go by different names (e.g.
324: ``Conclusion'' and ``Summary''). Certain entities which are absolutely
325: necessary in some documents, such as clauses in a contract or the address of
326: the recipient in a letter, are useless in most other cases.</p>
1.30 cvs 327:
328: <p>The differences between documents result from more than just the entities
329: that appear in them, but also from the relationships between these entities
1.37 cvs 330: and the ways that they are linked. In certain documents, notes are spread
1.30 cvs 331: throughout the document, for example at the bottom of the page containing the
1.1 cvs 332: cross-reference to them, while in other documents they are collected at the
1.37 cvs 333: end of each chapter or even at the end of the work. As another example, the
1.1 cvs 334: introduction of some documents can contain many sections, while in other
335: documents, the introduction is restricted to be a short sequence of
1.18 cvs 336: paragraphs.</p>
1.30 cvs 337:
1.37 cvs 338: <p>All of this makes it unlikely that a single model can describe any
339: document at a relatively high level. It is obviously tempting to make up a
340: list of widely used entities, such as chapters, sections, paragraphs, and
341: titles, and then map all other entities onto the available choices. In this
342: way, an introduction can be supported as a chapter and a contract clause
343: supported as a paragraph or section. However, in trying to widen the range of
344: usage of certain entities, their meaning can be lost and the power of the
345: model reduced. In addition, while this widening partially solves the problem
346: of choosing entities, it does not solve the problem of their organization:
347: when a chapter must be composed of sections, how does one indicate that an
348: introduction has none when it is merely another chapter? One solution is to
1.1 cvs 349: include introductions in the list of supported entities. But then, how does
350: one distinguish those introductions which are allowed to have sections from
1.37 cvs 351: those which are not. Perhaps this could be done by defining two types of
1.1 cvs 352: introduction. Clearly, this approach risks an infinite expansion of the list
1.18 cvs 353: of widely used entities.</p>
354: </div>
1.1 cvs 355:
1.18 cvs 356: <div class="section">
1.37 cvs 357: <h2><a name="sectb22" id="sectb22">Generic and specific structures</a></h2>
1.1 cvs 358:
1.30 cvs 359: <p>Thus, it is apparently impossible to construct an exhaustive inventory of
360: all those entities which are necessary and sufficient to precisely describe
1.37 cvs 361: any document. It also seems impossible to specify all possible arrangements
362: of these entities in a document. This is why Thot uses a <em>meta-model</em>
1.18 cvs 363: instead, which permits the description of numerous <em>models</em>, each one
364: describing a <em>class</em> of documents.</p>
1.30 cvs 365:
1.37 cvs 366: <p>A <em>class</em> is a set of documents having very similar structure.
367: Thus, the collection of research reports published by a laboratory
368: constitutes a class; the set of commercial proposals by the sales department
369: of a company constitutes another class; the set of articles published by a
370: journal constitutes a third class. Clearly, it is not possible to enumerate
371: every possible document class. It is also clear that new document classes
372: must be created to satisfy new needs and applications.</p>
1.30 cvs 373:
374: <p>To give a more rigorous definition of classes, we must introduce the ideas
1.37 cvs 375: of <em>generic structure</em> and <em>specific structure</em>. Each document
1.30 cvs 376: has a <em>specific structure</em> which organizes the various parts which
1.37 cvs 377: comprise it. We illustrate this with the help of a simple example comparing
1.30 cvs 378: two reports, A and B (<a href="#specstruct">see Figure</a>). The report A
1.37 cvs 379: contains an introduction followed by three chapters and a conclusion. The
380: first chapter contains two sections, the second, three sections. That is the
1.18 cvs 381: <em>specific</em> structure of document A. Similarly, the structure of
1.1 cvs 382: document B is: an introduction, two chapters, a conclusion; Chapter 1 has
1.37 cvs 383: three sections while Chapter 2 has four. The specific structures of these two
1.18 cvs 384: documents are thus different.</p>
1.1 cvs 385:
1.18 cvs 386: <div class="figure">
1.37 cvs 387: <hr />
1.18 cvs 388: <pre> Report A Report B
1.1 cvs 389: Introduction Introduction
390: Chapter 1 Chapter 1
391: Section 1.1 Section 1.1
392: Section 1.2 Section 1.2
393: Chapter 2 Section 1.3
394: Section 2.1 Chapter 2
395: Section 2.2 Section 2.1
396: Section 2.3 Section 2.2
397: Chapter 3 Section 2.3
398: Conclusion Section 2.4
1.18 cvs 399: Conclusion</pre>
1.30 cvs 400:
1.37 cvs 401: <p align="center"><em><a name="specstruct" id="specstruct">Two specific
1.30 cvs 402: structures</a></em></p>
1.37 cvs 403: <hr />
1.30 cvs 404: </div>
405:
406: <p>The <em>generic structure</em> defines the ways in which specific
1.37 cvs 407: structures can be constructed. It specifies how to generate specific
408: structures. The reports A and B, though different, are constructed in
1.30 cvs 409: accordance with the same generic structure, which specifies that a report
410: contains an introduction followed by a variable number of chapters and a
411: conclusion, with each chapter containing a variable number of sections.</p>
412:
413: <p>There is a one-to-one correspondence between a class and a generic
1.37 cvs 414: structure: all the documents of a class are constructed in accordance with
415: the same generic structure. Hence the definition of the class: a class is a
416: set of documents whose specific structure is constructed in accordance with
417: the same generic structure. A class is characterized by its generic
1.30 cvs 418: structure.</p>
1.19 cvs 419:
1.30 cvs 420: <p>Thus, a generic structure can be considered to be a model at the level
1.37 cvs 421: which interests us, but only for one class of documents. When the definition
1.30 cvs 422: is limited to a single class of documents, it is possible to define a model
423: which does a good job of representing the documents of the class, including
1.37 cvs 424: the necessary entities and unencumbered by useless entities. The description
1.30 cvs 425: of the organization of the documents in the class can then be sufficiently
1.18 cvs 426: precise.</p>
427: </div>
1.1 cvs 428:
1.18 cvs 429: <div class="section">
1.37 cvs 430: <h2><a name="sectb23" id="sectb23">Logical structure and physical
431: structure</a></h2>
1.1 cvs 432:
1.30 cvs 433: <p>Generic structures only describe the <em>logical</em> organization of
1.18 cvs 434: documents, not their <em>physical</em> presentation on a screen or on sheets
1.37 cvs 435: of paper. However, for a document to be displayed or printed, its graphic
1.18 cvs 436: presentation must be taken into account.</p>
1.30 cvs 437:
438: <p>An examination of current printed documents shows that the details of
1.1 cvs 439: presentation essentially serve to bring out their logical structure. Outside
440: of some particular domains, notably advertising, the presentation is rarely
1.37 cvs 441: independent of the logical organization of the text. Moreover, the art of
1.1 cvs 442: typography consists of enhancing the organization of the text being set,
1.37 cvs 443: without catching the eye of the reader with overly pronounced effects. Thus,
444: italic and boldface type are used to emphasize words or expressions which
445: have greater significance than the rest of the text: keywords, new ideas,
446: citations, book titles, etc. Other effects highlight the organization of the
1.1 cvs 447: text: vertical space, margin changes, page breaks, centering, eventually
448: combined with the changes in the shapes or weight of the characters. These
449: effects serve to indicate the transitions between paragraphs, sections, or
450: chapters: an object's level in the logical structure of the document is shown
1.18 cvs 451: by the markedness of the effects.</p>
1.30 cvs 452:
453: <p>Since the model permits the description of all of the logical structure of
454: the document, the presentation can be derived from the model without being
1.37 cvs 455: submerged in the document itself. It suffices to use the logical structure of
1.1 cvs 456: the document to make the desired changes in its presentation: changes in type
1.18 cvs 457: size, type style, spacing, margin, centering, etc.</p>
1.30 cvs 458:
459: <p>Just as one cannot define a unique generic logical structure for all
460: document classes, one cannot define universal presentation rules which can be
1.37 cvs 461: applied to all document classes. For certain types of documents the chapter
462: titles will be centered on the page and printed in large, bold type. For
463: other documents, the same chapter titles will be printed in small, italic
464: type and aligned on the left margin.</p>
1.30 cvs 465:
466: <p>Therefore, it is necessary to base the presentation specifications for
1.37 cvs 467: documents on their class. Such a specification can be very fine-grained,
1.1 cvs 468: because the presentation is expressed in terms of the entities defined in the
1.37 cvs 469: generic logical structure of the class. Thus, it is possible to specify a
1.1 cvs 470: different presentation for the chapter titles and the section titles, and
471: similarly to specify titles for the sections according to their level in the
1.37 cvs 472: section hierarchy. The set of rules which specify the presentation of all the
1.18 cvs 473: elements defined in a generic logical structure is called a <em>generic
474: presentation</em>.</p>
1.30 cvs 475:
476: <p>There are several advantages derived from having a presentation linked to
477: the generic structure and described by a generic presentation. Homogeneity is
1.37 cvs 478: the first. Since every document in a class corresponds to the same generic
1.1 cvs 479: logical structure, a homogenous presentation for different documents of the
480: same class can be assured by applying the same generic presentation to all
1.37 cvs 481: documents of the class. Homogeneity of presentation can also be found among
482: the entities of a single document: every section heading will be presented in
483: the same way, the first line of every paragraph of the same type will have
484: the same indentation, etc.</p>
1.30 cvs 485:
486: <p>Another advantage of this approach to presentation is that it facilitates
1.37 cvs 487: changes to the graphical aspect of documents. A change to the generic
488: presentation rules attached to each type of entity will alter the
489: presentation of the entire document, and will do so homogenously. In this
490: case, the internal homogeneity of the class is no longer assured, but the way
491: to control it is simple. It suffices to adopt a single generic presentation
492: for the entire class.</p>
1.30 cvs 493:
494: <p>If the presentation of the class does not have to be homogenous, then the
1.37 cvs 495: appearance of the document can be adapted to the way it will be used or to
496: the device used to render it. This quality is sufficient to allow the
497: existence of <a name="mulpres" id="mulpres">many generic presentations</a>
498: for the same document class. By applying one or the other of these
499: presentations to it, the document can be seen under different graphical
500: aspects. It must be emphasized that this type of modification of the
501: presentation is not a change to the document itself (in its specific logical
502: structure or its content), but only in its appearance at the time of editing
503: or printing.</p>
1.18 cvs 504: </div>
1.1 cvs 505:
1.18 cvs 506: <div class="section">
1.37 cvs 507: <h2><a name="sectb24" id="sectb24">Document structures and object
508: structures</a></h2>
1.1 cvs 509:
1.30 cvs 510: <p>So far, we have only discussed the global structure of documents and have
1.37 cvs 511: not considered the contents found in that structure. We could limit ourselves
1.30 cvs 512: to purely textual contents by assuming that a title or a paragraph contains a
1.37 cvs 513: simple linear text. But this model would be too restrictive. In fact, certain
514: documents contain not only text, but also contain tables, diagrams,
515: photographs, mathematical formulas, and program fragments. The model must
1.18 cvs 516: permit the representation of such <em>objects</em>.</p>
1.30 cvs 517:
518: <p>Just as with the whole of the document, the model takes into account the
1.37 cvs 519: logical structure of objects of this type. Some are clearly structured,
520: others are less so. Logical structure can be recognized in mathematical
521: formulas, in tables, and in certain types of diagrams. On the other hand, it
522: is difficult to define the structure of a photograph or of some drawings. But
1.1 cvs 523: in any case, it does not seem possible to define one unique structure which
1.37 cvs 524: can represent every one of these types of objects. The approach taken in the
1.1 cvs 525: definition of meta-structure and document classes also applies to objects.
526: Object classes can be defined which put together objects of similar type,
1.18 cvs 527: constructed from the same generic logical structure.</p>
1.30 cvs 528:
529: <p>Thus, a mathematical class can be defined and have a generic logical
1.37 cvs 530: structure associated with it. But even if a single generic structure can
1.30 cvs 531: represent a sufficient variety of mathematical formulas, for other objects
1.37 cvs 532: with less rigorous structure, multiple classes must be defined. As for
533: documents, using multiple classes assures that the model can describe the
534: full range of objects to be presented. It also permits the system to support
535: objects which were not initially anticipated. Moreover, this comment applies
1.30 cvs 536: equally to mathematics: different classes of formulas can be described
537: depending on the domain of mathematics being described.</p>
538:
539: <p>Since objects have the same level of logical representation as documents,
1.37 cvs 540: they gain the same advantages. In particular, it is possible to define the
1.1 cvs 541: presentation separately from the objects themselves and attach it to the
1.37 cvs 542: class. Thus, as for documents, objects of the same type have a uniform
1.1 cvs 543: presentation and the presentation of every object in a given class can be
1.37 cvs 544: changed simply by changing the generic presentation of the class. Another
1.1 cvs 545: advantage of using this document model is that the system does not bother the
546: user with the details of presentation, but rather allows the user to
1.18 cvs 547: concentrate on the logical aspect of the document and the objects.</p>
1.30 cvs 548:
549: <p>It is clear that the documents in a class do not necessarily use the same
1.1 cvs 550: classes of objects: one technical report will contain tables while another
551: report will have no tables but will use mathematical formulas. The usable
1.2 cvs 552: object classes are not always mentioned in a limiting way in the generic
1.37 cvs 553: logical structure of documents. Rather, they can be chosen freely from a
1.18 cvs 554: large set, independent of the document class.</p>
1.30 cvs 555:
556: <p>Thus, the object classes will be made commonplace and usable in every
1.1 cvs 557: document. The notion of ``object'' can be enlarged to include not only
558: non-textual elements, but also certain types of textual elements which can
1.37 cvs 559: appear in practically every document, whatever their class. Among these
1.2 cvs 560: textual elements, one can mention enumerations, descriptions, examples,
1.18 cvs 561: quotations, even paragraphs.</p>
1.30 cvs 562:
563: <p>Thus, the document model is not a single, general model describing every
1.37 cvs 564: type of document in one place. Rather, it is a meta-model which can be used
1.30 cvs 565: to describe many different models each of which represents either a class of
1.1 cvs 566: similar documents or a class of similar objects which every document can
1.18 cvs 567: include.</p>
568: </div>
1.37 cvs 569: <hr />
1.18 cvs 570: </div>
1.1 cvs 571:
1.18 cvs 572: <div class="chapter">
1.37 cvs 573: <h1><a name="sect3" id="sect3">The S language</a></h1>
1.1 cvs 574:
1.18 cvs 575: <div class="section">
1.37 cvs 576: <h2><a name="sectb31" id="sectb31">Document meta-structure</a></h2>
1.1 cvs 577:
1.30 cvs 578: <p>Since the concept of meta-structure is well suited to the task of
579: describing documents at a high level of abstraction, this meta-structure must
1.37 cvs 580: be precisely defined. Toward that end this section first presents the basic
1.1 cvs 581: elements from which documents and structured objects are composed and then
1.37 cvs 582: specifies the ways in which these basic elements are assembled into
583: structures representing complete documents and objects.</p>
1.1 cvs 584:
1.18 cvs 585: <div class="subsection">
1.37 cvs 586: <h3><a name="sectc311" id="sectc311">The basic types</a></h3>
1.1 cvs 587:
1.37 cvs 588: <p>At the lowest level of a document's structure, the first atom considered
589: is the character. However, since characters are seldom isolated, usually
1.1 cvs 590: appearing as part of a linear sequence, and in order to reduce the complexity
1.18 cvs 591: of the document structure, <em>character strings</em> are used as atoms and
1.37 cvs 592: consecutive characters belonging to the same structural element are grouped
593: in the same character string.</p>
1.30 cvs 594:
1.37 cvs 595: <p>If the structure of a document is not refined to go down to the level of
596: words or phrases, the contents of a simple paragraph can be considered to be
597: a single character string. On the other hand, the title of a chapter, the
598: title of the first section of that chapter, and the text of the first
599: paragraph of that section constitute three different character strings,
600: because they belong to distinct structural elements.</p>
1.30 cvs 601:
602: <p>If, instead, a very fine-grained representation for the structure of a
1.1 cvs 603: document is sought, character strings could be defined to contain only a
1.37 cvs 604: single word, or even just a single character. This is the case, for example,
605: in programs, for which one wants to retain a structure very close to the
606: syntax of the programming language. In this case, an assignment statement
1.1 cvs 607: initializing a simple variable to zero would be composed of two structural
608: elements, the identifier of the variable (a short character string) and the
1.18 cvs 609: assigned value (a string of a single character, `0').</p>
1.30 cvs 610:
611: <p>The character string is not the only atom necessary for representing those
1.37 cvs 612: documents that interest us. It suffices for purely textual documents, but as
1.1 cvs 613: soon as the non-textual objects which we have considered arise, there must be
614: other atoms; the number of objects which are to be represented determines the
1.18 cvs 615: number of types of atoms that are necessary.</p>
1.30 cvs 616:
617: <p>Primitive <em>graphical elements</em> are used for tables and figures of
1.37 cvs 618: different types. These elements are simple geometric shapes like horizontal
1.1 cvs 619: or vertical lines, which are sufficient for tables, or even oblique lines,
1.2 cvs 620: arrows, rectangles, circles, polygons, and curves for use in figures. From
621: these elements and character strings, graphical objects and tables can be
1.18 cvs 622: constructed.</p>
1.30 cvs 623:
624: <p>Photographs, though having very little structure, must still appear in
1.37 cvs 625: documents. They are supported by <em>picture</em> elements, which are
1.18 cvs 626: represented as matrices of pixels.</p>
1.30 cvs 627:
628: <p>Finally, mathematical notations require certain elements which are
1.37 cvs 629: simultaneously characters and graphical elements, the <em>symbols</em>. By
630: way of example, radicals, integration signs, or even large parentheses are
631: examples of this type of atom. The size of each of these symbols is
1.1 cvs 632: determined by its environment, that is to say, by the expression to which it
1.18 cvs 633: is attached.</p>
1.30 cvs 634:
635: <p>To summarize, the primitive elements which are used in the construction of
1.18 cvs 636: documents and structured objects are:</p>
637: <ul>
1.30 cvs 638: <li>character strings,</li>
639: <li>graphical elements,</li>
640: <li>pictures,</li>
641: <li>and mathematical symbols.</li>
1.18 cvs 642: </ul>
643: </div>
1.1 cvs 644:
1.18 cvs 645: <div class="subsection">
1.37 cvs 646: <h3><a name="sectc312" id="sectc312">Constructed elements</a></h3>
1.30 cvs 647:
1.37 cvs 648: <p>A document is evidently formed from primitive elements. But the model of
649: Thot also proposes higher level elements. Thus, in a document composed of
650: several chapters, each chapter is an element, and in the chapters each
651: section is also an element, and so on. A document is thus an organized set of
1.30 cvs 652: elements.</p>
1.1 cvs 653:
1.37 cvs 654: <p>In a document there are different sorts of elements. Each element has a
655: <em>type</em> which indicates the role of the element within the document as
656: a whole. Thus, we have, for example, the chapter and section types. The
1.1 cvs 657: document is made up of typed elements: elements of the type chapter and
1.37 cvs 658: elements of the type section, among others, but also character string
659: elements and graphical elements: the primitive elements are typed elements
660: just as well. At the other extreme, the document itself is also considered to
661: be a typed element.</p>
1.30 cvs 662:
663: <p>The important difference between the primitive elements and the other
1.37 cvs 664: elements of the document is that the primitive elements are atoms (they
665: cannot be decomposed), whereas the others, called <em>constructed
666: elements</em>, are composed of other elements, which can either be primitive
667: elements or constructed elements. A constructed element of type chapter (or
668: more simply, ``a chapter'') is composed of sections, which are also
669: constructed elements. A paragraph, a constructed element, can be made up of
670: character strings, which are primitive elements, and of equations, which are
671: constructed elements.</p>
1.30 cvs 672:
1.37 cvs 673: <p>A document is also a constructed element. This is an important point. In
1.1 cvs 674: particular, it allows a document to be treated as part of another document,
675: and conversely, permits a part of a document to be treated as a complete
1.37 cvs 676: document. Thus, an article presented in a journal is treated by its author as
1.1 cvs 677: a document in itself, while the editor of the journal considers it to be part
1.37 cvs 678: of an issue. A table or a figure appearing in a document can be extracted and
1.1 cvs 679: treated as a complete document, for example to prepare transparencies for a
1.18 cvs 680: conference.</p>
1.30 cvs 681:
682: <p>These thoughts about types and constructed elements apply just as well to
1.37 cvs 683: objects as they do to documents. A table is a constructed element made up of
684: other constructed elements, rows and columns. A row is formed of cells, which
1.1 cvs 685: are also constructed elements which contain primitive elements (character
1.18 cvs 686: strings) and/or constructed elements like equations.</p>
687: </div>
1.1 cvs 688:
1.18 cvs 689: <div class="subsection">
1.37 cvs 690: <h3><a name="sectc313" id="sectc313">Logical structure constructors</a></h3>
1.1 cvs 691:
1.30 cvs 692: <p>Having defined the primitive elements and the constructed elements, it is
693: now time to define the types of organization which allow the building of
1.37 cvs 694: structures. For this, we rely on the notion of the <em>constructor</em>. A
695: constructor defines a way of assembling certain elements in a structure. It
1.1 cvs 696: resides at the level of the meta-structure: it does not describe the existing
1.37 cvs 697: relations in a given structure, but rather defines how elements are assembled
1.18 cvs 698: to build a structure that conforms to a model.</p>
1.30 cvs 699:
700: <p>In defining the overall organization of documents, the first two
701: constructors considered are the aggregate and the list.</p>
1.1 cvs 702:
1.18 cvs 703: <div class="subsubsection">
1.37 cvs 704: <h4><a name="sectd3131" id="sectd3131">Aggregate and List</a></h4>
1.1 cvs 705:
1.30 cvs 706: <p>The <em>aggregate</em> constructor is used to define constructed element
707: types which are collections of a given number of other elements. These
1.37 cvs 708: collections may or may not be ordered. The elements may be either constructed
709: or primitive and are specified by their type. A report (that is, a
710: constructed element of the report type) has an aggregate structure. It is
1.30 cvs 711: formed from a title, an author's name, an introduction, a body, and a
1.37 cvs 712: conclusion, making it a collection of five element types. This type of
1.30 cvs 713: constructor is found in practically every document, and generally at several
714: levels in a document.</p>
715:
716: <p>The <em>list</em> constructor is used to define constructed elements which
717: are ordered sequences of elements (constructed or primitive) having the same
718: type. The minimum and maximum numbers of elements for the sequence can be
719: specified in the list constructor or the number of elements can be left
720: unconstrained. The body of a report is a list of chapters and is typically
721: required to contain a minimum of two chapters (is a chapter useful if it is
722: the only one in the report?) The chapter itself can contain a list of
1.37 cvs 723: sections, each section containing a list of paragraphs. In the same way as
724: the aggregate, the list is a very frequently used constructor in every type
725: of document. However, these two constructors are not sufficient to describe
726: every document structure; thus other constructors supplement them.</p>
1.18 cvs 727: </div>
1.1 cvs 728:
1.18 cvs 729: <div class="subsubsection">
1.37 cvs 730: <h4><a name="sectd3132" id="sectd3132">Choice, Schema, and Unit</a></h4>
1.1 cvs 731:
1.30 cvs 732: <p>The <em>choice</em> constructor is used to define the structure of an
733: element type for which one alternative is chosen from several possibilities.
1.37 cvs 734: Thus, a paragraph can be either a simple text paragraph, or an enumeration,
735: or a citation.</p>
1.30 cvs 736:
737: <p>The choice constructor indicates the complete list of possible options,
738: which can be too restrictive in certain cases, the paragraph being one such
739: case. Two constructors, <em>unit</em> and <em>schema</em>, address this
1.37 cvs 740: inconvenience. They allow more freedom in the choice of an element type. If a
741: paragraph is defined by a schema constructor, it is possible to put in the
1.1 cvs 742: place of a paragraph a table, an equation, a drawing or any other object
1.37 cvs 743: defined by another generic logical structure. It is also possible to define a
1.1 cvs 744: paragraph as a sequence of units, which could be character strings, symbols,
1.37 cvs 745: or pictures. The choice constructor alone defines a generic logical structure
1.1 cvs 746: that is relatively constrained; in contrast, using units and schemas, a very
1.18 cvs 747: open structure can be defined.</p>
1.30 cvs 748:
749: <p>The <em>schema</em> constructor represents an object defined by a generic
1.18 cvs 750: logical structure chosen freely from among those available.</p>
1.30 cvs 751:
752: <p>The <em>unit</em> constructor represents an element whose type can be
753: either a primitive type or an element type defined as a unit in the generic
754: logical structure of the document, or in another generic logical structure
1.37 cvs 755: used in the document. Such an element may be used in document objects
1.30 cvs 756: constructed according to other generic structures.</p>
757:
758: <p>Thus, for example, if a cross-reference to a footnote is defined in the
1.37 cvs 759: generic logical structure ``Article'' as a unit, a table (an object defined
760: by another generic structure) can contain cross-references to footnotes, when
761: they appear in an article. In another type of document, a table defined by
1.1 cvs 762: the same generic structure can contain other types of elements, depending on
1.37 cvs 763: the type of document into which the table is inserted. All that is needed is
1.1 cvs 764: to declare, in the generic structure for tables, that the contents of cells
1.37 cvs 765: are units. In this way, the generic structure of objects is divided up
766: between different types of documents which are able to adapt themselves to
767: the environment into which they are inserted.</p>
1.18 cvs 768: </div>
1.1 cvs 769:
1.18 cvs 770: <div class="subsubsection">
1.37 cvs 771: <h4><a name="sectd3133" id="sectd3133">Reference and Inclusion</a></h4>
1.1 cvs 772:
1.30 cvs 773: <p>The <em>reference</em> is used to define document elements that are
1.18 cvs 774: cross-references to other elements, such as a section, a chapter, a
1.37 cvs 775: bibliographic citation, or a figure. The reference is bi-directional. It can
1.18 cvs 776: be used to access both the element being cross-referenced and each of the
777: elements which make use of the cross-reference.</p>
1.30 cvs 778:
1.37 cvs 779: <p>References can be either <em>internal</em> or <em>external</em>. That is,
1.1 cvs 780: they can designate elements which appear in the same document or in another
1.18 cvs 781: document.</p>
1.30 cvs 782:
1.37 cvs 783: <p>The <em><a name="inclusion" id="inclusion">inclusion</a></em> constructor
784: is a special type of reference. Like the reference, it is an internal or
785: external bidirectional link, but it is not a cross-reference. This link
786: represents the ``live'' inclusion of the designated element; it accesses the
787: most recent version of that element and not a ``dead'' copy, fixed in the
788: state in which it was found at the moment the copy was made. As soon as an
789: element is modified, all of its inclusions are automatically brought up to
790: date. It must be noted that, in addition to inclusion, Thot permits the
791: creation of ``dead'' copies.</p>
1.30 cvs 792:
793: <p>There are three types of inclusions: inclusions with full expansion,
1.1 cvs 794: inclusions with partial expansion, and inclusions without expansion. During
795: editing, inclusions without expansion are represented on the screen by the
796: name of the included document, in a special color, while inclusions with
1.37 cvs 797: expansion (full or partial) are represented by a copy (full or partial) of
798: the included element (also in a special color). The on-screen representation
799: of a partial inclusion is a <a href="#sectc3213">``skeleton''</a> image of
800: the included document.</p>
1.30 cvs 801:
802: <p>Inclusion with complete expansion can be used to include parts of the same
1.37 cvs 803: document or of other documents. Thus, it can be either an internal or an
804: external link. It can be used to include certain bibliographic entries of a
1.1 cvs 805: scientific article in another article, or to copy part of a mathematical
806: formula into another formula of the same document, thus assuring that both
1.18 cvs 807: copies will remain synchronized.</p>
1.30 cvs 808:
809: <p>Inclusion without expansion or with partial expansion is used to include
1.37 cvs 810: complete documents. It is always an external link. It is used primarily to
1.1 cvs 811: divide very large documents into sub-documents that are easier to manipulate,
1.37 cvs 812: especially when there are many authors. So, a book can include some chapters,
1.1 cvs 813: where each chapter is a different document which can be edited separately.
814: When viewing the book on the screen, it might be desirable to see only the
1.37 cvs 815: titles of the chapters and sections. This can be achieved using inclusion
1.18 cvs 816: with partial expansion.</p>
1.30 cvs 817:
1.37 cvs 818: <p>During printing, inclusions without expansion or with partial expansion
819: can be represented either as they were shown on the screen or by a complete
820: (and up-to-date) copy of the included element or document.</p>
1.30 cvs 821:
822: <p>The inclusion constructor, whatever its type, respects the generic
823: structure: only those elements authorized by the generic structure can be
824: included at a given position in a document.</p>
1.18 cvs 825: </div>
1.1 cvs 826:
1.18 cvs 827: <div class="subsubsection">
1.37 cvs 828: <h4><a name="sectd3134" id="sectd3134">Mark pairs</a></h4>
1.1 cvs 829:
1.30 cvs 830: <p>It is often useful to delimit certain parts of a document independently
1.37 cvs 831: from the logical structure. For example, one might wish to attach some
1.30 cvs 832: information (in the form of an <a href="#sectc315">attribute</a>) or a
833: particular treatment to a group of words or a set of consecutive paragraphs.
834: <em>Mark pairs</em> are used to do this.</p>
835:
836: <p>Mark pairs are elements which are always paired and are terminals in the
1.37 cvs 837: logical structure of the document. Their position in the structure of the
838: document is defined in the generic structure. It is important to note that
1.18 cvs 839: when the terminals of a mark pair are <em>extensions</em> (see the next
840: section), they can be used quite freely.</p>
841: </div>
1.1 cvs 842:
1.18 cvs 843: <div class="subsubsection">
1.37 cvs 844: <h4><a name="sectd3135" id="sectd3135">Restrictions and Extensions</a></h4>
1.1 cvs 845:
1.30 cvs 846: <p>The primitive types and the constructors presented so far permit the
1.1 cvs 847: definition of the logical structure of documents and objects in a rigorous
1.37 cvs 848: way. But this definition can be very cumbersome in certain cases, notably
1.1 cvs 849: when trying to constrain or extend the authorized element types in a
1.37 cvs 850: particular context. <em>Restrictions</em> and <em>extensions</em> are used to
1.18 cvs 851: cope with these cases.</p>
1.30 cvs 852:
853: <p>A restriction associates with a particular element type <em>A</em>, a list
1.37 cvs 854: of those element types which elements of type <em>A</em> may not contain,
855: even if the definition of type <em>A</em> and those of its components
856: authorize them otherwise. This simplifies the writing of generic logical
857: structures and allows limitations to be placed, when necessary, on the
858: choices offered by the schema and unit constructors.</p>
859:
860: <p>Extensions are the inverse of restrictions. They identify a list of
861: element types whose presence <em>is</em> permitted, even if its definition
862: and those of its components do not authorize them otherwise.</p>
1.18 cvs 863: </div>
864:
865: <div class="subsubsection">
1.37 cvs 866: <h4><a name="sectd3136" id="sectd3136">Summary</a></h4>
1.18 cvs 867:
1.30 cvs 868: <p>Thus, four constructors are used to construct a document:</p>
1.18 cvs 869: <ul>
1.30 cvs 870: <li>the aggregate constructor (ordered or not),</li>
871: <li>the list constructor,</li>
872: <li>the choice constructor and its extensions, the unit and schema
873: constructors,</li>
874: <li>the reference constructor and its variant, the inclusion.</li>
875: </ul>
876:
1.37 cvs 877: <p>These constructors are also sufficient for objects. Thus, these
1.30 cvs 878: constructors provide a homogenous meta-model which can describe both the
879: organization of the document as a whole and that of the various types of
1.37 cvs 880: objects which it contains. After presenting the description language for
1.30 cvs 881: generic structures, we will present several examples which illustrate the
882: appropriateness of the model.</p>
883:
1.37 cvs 884: <p>The first three constructors (aggregate, list and choice) lead to
885: tree-like structures for documents and objects, the objects being simply the
886: subtrees of the tree of a document (or even of other objects' subtrees). The
887: reference constructor introduces other, non-hierarchical, relations which
888: augment those of the tree: when a paragraph makes reference to a chapter or a
889: section, that relation leaves the purely tree-like structure. Moreover,
890: external reference and inclusion constructors permit the establishment of
891: links between different documents, thus creating a hypertext structure.</p>
1.18 cvs 892: </div>
893: </div>
1.1 cvs 894:
1.18 cvs 895: <div class="subsection">
1.37 cvs 896: <h3><a name="sectc315" id="sectc315">Attributes</a></h3>
1.1 cvs 897:
1.30 cvs 898: <p>There remain logical aspects of documents that are not entirely described
1.37 cvs 899: by the structure. Certain types of semantic information, which are not stated
900: explicitly in the text, must also be taken into account. In particular, such
1.1 cvs 901: information is shown by typographic effects which do not correspond to a
1.37 cvs 902: change between structural elements. In fact, certain titles are set in bold
1.1 cvs 903: or italic or are printed in a different typeface from the rest of the text in
1.37 cvs 904: order to mark them as structurally distinct. But these same effects
1.1 cvs 905: frequently appear in the middle of continuous text (e.g. in the interior of a
1.37 cvs 906: paragraph). In this case, there is no change between structural elements; the
907: effect serves to highlight a word, expression, or phrase. The notion of an
1.18 cvs 908: <em>attribute</em> is used to express this type of information.</p>
1.30 cvs 909:
910: <p>An attribute is a piece of information attached to a structural element
911: which augments the type of the element and clarifies its function in the
912: document. Keywords, foreign language words, and titles of other works can all
1.37 cvs 913: be represented by character strings with attached attributes. Attributes may
914: also be attached to constructed elements. Thus, an attribute indicating the
1.1 cvs 915: language can be attached to a single word or to a large part of a
1.18 cvs 916: document.</p>
1.30 cvs 917:
918: <p>In fact, an attribute can be any piece of information which is linked to a
1.37 cvs 919: part of a document and which can be used by agents which work on the
920: document. For example, the language in which the document is written
921: determines the set of characters used by an editor or formatter. It also
922: determines the algorithm or hyphenation dictionary to be used. The attribute
923: ``keyword'' facilitates the work of an information retrieval system. The
924: attribute ``index word'' allows a formatter to automatically construct an
925: index at the end of the document.</p>
1.30 cvs 926:
927: <p>As with the types of constructed elements, the attributes and the values
1.37 cvs 928: they can take are defined separately in each generic logical structure, not
929: in the meta-model, according to the needs of the document class or the nature
930: of the object.</p>
1.30 cvs 931:
932: <p>Many types of attributes are offered: numeric, textual, references, and
1.18 cvs 933: enumerations:</p>
934: <ul>
1.40 quint 935: <li><em>Numeric attributes</em> can take integer values (negative,
936: positive, or null).</li>
937: <li><em>Textual attributes</em> have as their values character strings.</li>
938: <li><em>Reference attributes</em> designate an element of the logical
939: structure.</li>
940: <li><em>Enumeration attributes</em> can take one value from a limited list
941: of possible values, each value being a name.</li>
1.18 cvs 942: </ul>
1.30 cvs 943:
944: <p>In a generic structure, there is a distinction between <em>global
1.37 cvs 945: attributes</em> and <em>local attributes</em>. A global attribute can be
1.1 cvs 946: applied to every element type defined in the generic structure where it is
1.37 cvs 947: specified. In contrast, a local attribute can only be applied to certain
948: types of elements, even only a single type. The ``language'' attribute
949: presented above is an example of a global attribute. An example of a local
1.1 cvs 950: attribute is the rank of an author (principal author of the document or
951: secondary author): this attribute can only be applied sensibly to an element
1.18 cvs 952: of the ``author'' type.</p>
1.30 cvs 953:
954: <p>Attributes can be assigned to the elements which make up the document in
1.37 cvs 955: many different ways. The author can freely and dynamically place them on any
1.30 cvs 956: part of the document in order to attach supplementary information of his/her
1.18 cvs 957: choice. However, attributes may only be assigned in accordance with the rules
1.37 cvs 958: of the generic structure; in particular, local attributes can only be
959: assigned to those element types for which they are defined.</p>
1.30 cvs 960:
961: <p>In the generic structure, certain local attributes can be made mandatory
1.37 cvs 962: for certain element types. In this case, Thot automatically associates the
963: attribute with the elements of this type and it requires the user to provide
964: a value for this attribute.</p>
965:
966: <p>Attributes can also be automatically assigned, with a given value, by
967: every application processing the document in order to systematically add a
968: piece of information to certain predefined elements of the document. By way
969: of example, in a report containing a French abstract and an English abstract,
970: each of the two abstracts is defined as a sequence of paragraphs. The first
1.1 cvs 971: abstract has a value of ``French'' for the ``language'' attribute while the
1.18 cvs 972: second abstract's ``language'' attribute has a value of ``English''.</p>
1.30 cvs 973:
974: <p>In the case of mark pairs, attributes are logically associated with the
975: pair as a whole, but are actually attached to the first mark.</p>
1.18 cvs 976: </div>
1.1 cvs 977:
1.18 cvs 978: <div class="subsection">
1.37 cvs 979: <h3><a name="sectc316" id="sectc316">Discussion of the model</a></h3>
1.1 cvs 980:
1.37 cvs 981: <p>The notions of attribute, constructor, and structured element are used in
982: the definition of generic logical structures of documents and objects. The
983: problem is to assemble them to form generic structures. In fact, many types
984: of elements and attributes can be found in a variety of generic structures.
985: Rather than redefine them for each structure in which they appear, it is best
986: to share them between structures. The object classes already fill this
987: sharing function. If a mathematical class is defined, its formulas can be
988: used in many different document classes, without redefining the structure of
989: each class. This problem arises not only for the objects considered here; it
990: also arises for the commonplace textual elements found in many document
991: classes. This is the reason why the notion of object is so broad and why
992: paragraphs and enumerations are also considered to be objects. These object
993: classes not only permit the sharing of the structures of elements, but also
994: of the attributes defined in the generic structures.</p>
1.30 cvs 995:
996: <p>Structure, such as that presented here, can appear very rigid, and it is
1.1 cvs 997: possible to imagine that a document editing system based on this model could
1.37 cvs 998: prove very constraining to the user. This is, in fact, a common criticism of
999: syntax-directed editors. This defect can be avoided with Thot, primarily for
1.18 cvs 1000: three reasons:</p>
1001: <ul>
1.30 cvs 1002: <li>the generic structures are not fixed in the model itself,</li>
1003: <li>the model takes the dynamics of documents into account,</li>
1004: <li>the constructors offer great flexibility.</li>
1.18 cvs 1005: </ul>
1.30 cvs 1006:
1007: <p>When the generic structure of a document is not predefined, but rather is
1.1 cvs 1008: constructed specifically for each document class, it can be carefully adapted
1.37 cvs 1009: to the current needs. In cases where the generic structure is inadequate for
1.1 cvs 1010: a particular document of the class, it is always possible either to create a
1011: new class with a generic structure well suited to the new case or to extend
1.37 cvs 1012: the generic structure of the existing class to take into account the
1013: specifics of the document which poses the problem. These two solutions can
1014: also be applied to objects whose structures prove to be poorly designed.</p>
1.30 cvs 1015:
1016: <p>The model is sufficiently flexible to take into account all the phases of
1.37 cvs 1017: the life of the document. When a generic structure specifies that a report
1018: must contain a title, an abstract, an introduction, at least two chapters,
1019: and a conclusion, this means only that a report, <em>upon completion</em>,
1020: will have to contain all of these elements. When the author begins writing,
1021: none of these elements is present. Thot uses this model. Therefore, it
1022: tolerates documents which do not conform strictly to the generic structure of
1023: their class; it also considers the generic logical structure to be a way of
1024: helping the user in the construction of a complex document.</p>
1.30 cvs 1025:
1026: <p>In contrast, other applications may reject a document which does not
1.37 cvs 1027: conform strictly to its generic structure. This is, for example, what is done
1.30 cvs 1028: by compilers which refuse to generate code for a program which is not
1.37 cvs 1029: syntactically correct. This might also occur when using a document
1.18 cvs 1030: application for a report which does not have an abstract or title.</p>
1.30 cvs 1031:
1032: <p>The constructors of the document model bring a great flexibility to the
1.37 cvs 1033: generic structures. A choice constructor (and even more, a unit or schema
1034: constructor) can represent several, very different elements. The list
1035: constructor permits the addition of more elements of the same type. Used
1.1 cvs 1036: together, these two constructors permit any series of elements of different
1.37 cvs 1037: types. Of course, this flexibility can be reduced wherever necessary since a
1.1 cvs 1038: generic structure can limit the choices or the number of elements in a
1.18 cvs 1039: list.</p>
1.30 cvs 1040:
1041: <p>Another difficulty linked to the use of structure in the document model
1.37 cvs 1042: resides in the choice of the level of the structure. The structure of a
1.1 cvs 1043: discussion could be extracted from the text itself via linguistic analysis.
1044: Some studies are exploring this approach, but the model of Thot excludes this
1.37 cvs 1045: type of structure. It only takes into account the logical structure provided
1.18 cvs 1046: explicitly by the author.</p>
1.30 cvs 1047:
1.37 cvs 1048: <p>However, the level of structure of the model is not imposed. Each generic
1049: structure defines its own level of structure, adapted to the document class
1050: or object and to the ways in which it will be processed. If it will only be
1051: edited and printed, a relatively simple structure suffices. If more
1052: specialized processing will be applied to it, the structure must represent
1053: the element types on which this processing must act. By way of example, a
1054: simple structure is sufficient for printing formulas, but a more complex
1055: structure is required to perform symbolic or numeric calculations on the
1056: mathematical expressions. The document model of Thot allows both types of
1057: structure.</p>
1.18 cvs 1058: </div>
1059: </div>
1.1 cvs 1060:
1.18 cvs 1061: <div class="section">
1.37 cvs 1062: <h2><a name="sectb32" id="sectb32">The definition language for generic
1063: structures</a></h2>
1.1 cvs 1064:
1.37 cvs 1065: <p>Generic structures, which form the basis of the document model of Thot,
1066: are specified using a special language. This definition language, called S,
1067: is described in this section.</p>
1.30 cvs 1068:
1069: <p>Each generic structure, which defines a class of documents or objects, is
1.2 cvs 1070: specified by a file, written in the S language, which is called a
1.37 cvs 1071: <em>structure schema</em>. Structure schemas are compiled into tables, called
1.18 cvs 1072: structure tables, which are used by Thot and which determine its behavior.</p>
1.1 cvs 1073:
1.18 cvs 1074: <div class="subsection">
1.37 cvs 1075: <h3><a name="sectc321" id="sectc321">Writing Conventions</a></h3>
1.1 cvs 1076:
1.30 cvs 1077: <p>The grammar of S, like those of the languages P and T presented later, is
1.1 cvs 1078: described using the meta-language M, derived from the Backus-Naur Form
1.18 cvs 1079: (BNF).</p>
1.30 cvs 1080:
1081: <p>In this meta-language each rule of the grammar is composed of a grammar
1.37 cvs 1082: symbol followed by an equals sign (`=') and the right part of the rule. The
1.30 cvs 1083: equals sign plays the same role as the traditional `::=' of BNF: it indicates
1.37 cvs 1084: that the right part defines the symbol of the left part. In the right
1.30 cvs 1085: part,</p>
1.18 cvs 1086: <dl>
1.30 cvs 1087: <dt>concatenation</dt>
1088: <dd>is shown by the juxtaposition of symbols;</dd>
1089: <dt>character strings</dt>
1.37 cvs 1090: <dd>between apostrophes ' represent terminal symbols, that is, keywords
1091: in the language defined. Keywords are written here in upper-case
1092: letters, but can be written in any combination of upper and lower-case
1093: letters. For example, the keyword <tt>DEFPRES</tt> of S can also be
1094: written as <tt>defpres</tt> or <tt>DefPres</tt>.</dd>
1.30 cvs 1095: <dt>material between brackets</dt>
1096: <dd>(`[' and `]') is optional;</dd>
1097: <dt>material between angle brackets</dt>
1098: <dd>(`<' and `>') can be repeated many times or omitted;</dd>
1099: <dt>the slash</dt>
1.37 cvs 1100: <dd>(`/') indicates an alternative, a choice between the options
1101: separated by the slash character;</dd>
1.30 cvs 1102: <dt>the period</dt>
1103: <dd>marks the end of a rule;</dd>
1104: <dt>text between braces</dt>
1105: <dd>(`{' and `}') is simply a comment.</dd>
1.18 cvs 1106: </dl>
1.30 cvs 1107:
1108: <p>The M meta-language also uses the concepts of identifiers, strings, and
1.18 cvs 1109: integers:</p>
1110: <dl>
1.30 cvs 1111: <dt><tt>NAME</tt></dt>
1.37 cvs 1112: <dd>represents an identifier, a sequence of letters (upper or
1113: lower-case), digits, and underline characters (`_'), beginning with a
1114: letter. Also considered a letter is the sequence of characters
1115: `<tt>\nnn</tt>' where the letter <tt>n</tt> represents the ISO Latin-1
1116: code of the letter in octal. It is thus possible to use accented
1117: letters in identifiers. The maximum length of identifiers is fixed by
1118: the compiler. It is normally 31 characters.
1.30 cvs 1119: <p>Unlike keywords, upper and lower-case letters are distinct in
1120: identifiers. Thus, <tt>Title</tt>, <tt>TITLE</tt>, and <tt>title</tt>
1121: are considered different identifiers.</p>
1122: </dd>
1123: <dt><tt>STRING</tt></dt>
1.37 cvs 1124: <dd>represents a string. This is a string of characters delimited by
1125: apostrophes. If an apostrophe must appear in a string, it is doubled.
1126: As with identifiers, strings can contain characters represented by
1127: their octal code (after a backslash). As with apostrophes, if a
1128: backslash must appear in a string, it is doubled.</dd>
1.30 cvs 1129: <dt><tt>NUMBER</tt></dt>
1130: <dd>represents a positive integer or zero (without a sign), or said
1131: another way, a sequence of decimal digits.</dd>
1.18 cvs 1132: </dl>
1.30 cvs 1133:
1134: <p>The M language can be used to define itself as follows:</p>
1.18 cvs 1135: <pre>{ Any text between braces is a comment. }
1.30 cvs 1136: Grammar = Rule < Rule > 'END' .
1137: { The < and > signs indicate zero }
1.1 cvs 1138: { or more repetitions. }
1139: { END marks the end of the grammar. }
1140: Rule = Ident '=' RightPart '.' .
1141: { The period indicates the end of a rule }
1142: RightPart = RtTerminal / RtIntermed .
1143: { The slash indicates a choice }
1144: RtTerminal ='NAME' / 'STRING' / 'NUMBER' .
1145: { Right part of a terminal rule }
1.30 cvs 1146: RtIntermed = Possibility < '/' Possibility > .
1.1 cvs 1147: { Right part of an intermediate rule }
1.30 cvs 1148: Possibility = ElemOpt < ElemOpt > .
1149: ElemOpt = Element / '[' Element < Element > ']' /
1150: '<' Element < Element > '>' .
1.1 cvs 1151: { Brackets delimit optional parts }
1152: Element = Ident / KeyWord .
1153: Ident = NAME .
1154: { Identifier, sequence of characters }
1155: KeyWord = STRING .
1156: { Character string delimited by apostrophes }
1.18 cvs 1157: END</pre>
1158: </div>
1.1 cvs 1159:
1.18 cvs 1160: <div class="subsection">
1.37 cvs 1161: <h3><a name="sectc322" id="sectc322">Extension schemas</a></h3>
1.1 cvs 1162:
1.30 cvs 1163: <p>A structure schema defines the generic logical structure of a class of
1.1 cvs 1164: documents or objects, independent of the operations which can be performed on
1.37 cvs 1165: the documents. However, certain applications may require particular
1.1 cvs 1166: information to be represented by the structure for the documents that they
1.37 cvs 1167: operate on. Thus a document version manager will need to indicate in the
1168: document the parts which belong to one version or another. An indexing system
1.1 cvs 1169: will add highly-structured index tables as well as the links between these
1.18 cvs 1170: tables and the rest of the document.</p>
1.30 cvs 1171:
1172: <p>Thus, many applications need to extend the generic structure of the
1.37 cvs 1173: documents on which they operate to introduce new attributes or element types.
1174: These additions are specific to each application and must be able to be
1175: applied to any generic structure: users will want to manage versions or
1176: construct indices for many types of documents. Extension schemas fulfill this
1177: role: they define attributes, elements, units, etc., but they can only be
1178: used jointly with a structure schema that they complete. Otherwise, structure
1179: schemas can always be used without these extensions when the corresponding
1180: applications are not available.</p>
1.18 cvs 1181: </div>
1.1 cvs 1182:
1.18 cvs 1183: <div class="subsection">
1.37 cvs 1184: <h3><a name="sectc323" id="sectc323">The general organization of structure
1185: schemas</a></h3>
1.1 cvs 1186:
1.30 cvs 1187: <p>Every structure schema begins with the keyword <tt>STRUCTURE</tt> and ends
1.37 cvs 1188: with the keyword <tt>END</tt>. The keyword <tt>STRUCTURE</tt> is followed by
1.18 cvs 1189: the keyword <tt>EXTENSION</tt> in the case where the schema defines an
1.1 cvs 1190: extension, then by the name of the generic structure which the schema defines
1.37 cvs 1191: (the name of the document or object class). The name of the structure is
1.18 cvs 1192: followed by a semicolon.</p>
1.30 cvs 1193:
1194: <p>In the case of a complete schema (that is, a schema which is not an
1.1 cvs 1195: extension), the definition of the name of the structure is followed by the
1196: declarations of the default presentation schema, the global attributes, the
1.37 cvs 1197: structure rules, the units, the skeleton elements and the exceptions. Only
1198: the definition of the structure rules is required. Each series of
1199: declarations begins with a keyword: <tt>DEFPRES</tt>, <tt>ATTR</tt>,
1200: <tt>STRUCT</tt>, <tt>UNITS</tt>, <tt>EXPORT</tt>, <tt>EXCEPT</tt>.</p>
1.34 cvs 1201:
1202: <p>In the case of an extension schema, there are no skeleton elements and the
1203: <tt>STRUCT</tt> section is optional, while that section is required in a
1.37 cvs 1204: schema that is not an extension. On the other hand, extension schemas can
1205: contain an <tt>EXTENS</tt> section, which must not appear in a schema which
1206: is not an extension; this section defines the complements to attach to the
1207: rules found in the schema to which the extension will be added. The sections
1208: <tt>ATTR</tt>, <tt>STRUCT</tt>, and <tt>UNITS</tt> define new attributes, new
1209: elements, and new units which add their definitions to the principal
1210: schema.</p>
1.18 cvs 1211: <pre> StructSchema ='STRUCTURE' ElemID ';'
1.1 cvs 1212: 'DEFPRES' PresID ';'
1213: [ 'ATTR' AttrSeq ]
1214: 'STRUCT' RulesSeq
1215: [ 'UNITS' RulesSeq ]
1216: [ 'EXPORT' SkeletonSeq ]
1217: [ 'EXCEPT' ExceptSeq ]
1218: 'END' .
1.18 cvs 1219: ElemID = NAME .</pre>
1.30 cvs 1220:
1221: <p>or</p>
1.18 cvs 1222: <pre> ExtensSchema ='STRUCTURE' 'EXTENSION' ElemID ';'
1.1 cvs 1223: 'DEFPRES' PresID ';'
1224: [ 'ATTR' AttrSeq ]
1225: [ 'STRUCT' RulesSeq ]
1226: [ 'EXTENS' ExtensRuleSeq ]
1227: [ 'UNITS' RulesSeq ]
1228: [ 'EXCEPT' ExceptSeq ]
1229: 'END' .
1.18 cvs 1230: ElemID = NAME .</pre>
1231: </div>
1.1 cvs 1232:
1.18 cvs 1233: <div class="subsection">
1.37 cvs 1234: <h3><a name="sectc324" id="sectc324">The default presentation</a></h3>
1.1 cvs 1235:
1.37 cvs 1236: <p>It was shown <a href="#mulpres">above</a> that many different
1237: presentations are possible for documents and objects of the same class. The
1238: structure schema defines a preferred presentation for the class, called the
1239: <em>default presentation</em>. Like generic structures, presentations are
1240: described by programs, called <em>presentation schemas</em>, which are
1241: written in a specific language, P, presented <a href="#sectb42">later</a> in
1242: this document. The name appearing after the keyword <tt>DEFPRES</tt> is the
1243: name of the default presentation schema. When a new document is created, Thot
1244: will use this presentation schema by default, but the user remains free to
1245: choose another if s/he wishes.</p>
1.18 cvs 1246: <pre> PresID = NAME .</pre>
1247: </div>
1.1 cvs 1248:
1.18 cvs 1249: <div class="subsection">
1.37 cvs 1250: <h3><a name="sectc325" id="sectc325">Global Attributes</a></h3>
1.1 cvs 1251:
1.30 cvs 1252: <p>If the generic structure includes global attributes of its own, they are
1.37 cvs 1253: declared after the keyword <tt>ATTR</tt>. Each global attribute is defined by
1254: its name, followed by an equals sign and the definition of its type. The
1.18 cvs 1255: declaration of a global attribute is terminated by a semi-colon.</p>
1.30 cvs 1256:
1257: <p>For attributes of the numeric, textual, or reference types, the type is
1.37 cvs 1258: indicated by a keyword, <tt>INTEGER</tt>, <tt>TEXT</tt>, or
1259: <tt>REFERENCE</tt> respectively.</p>
1.30 cvs 1260:
1261: <p>In the case of a reference attribute, the keyword <tt>REFERENCE</tt> is
1.37 cvs 1262: followed by the type of the referenced element in parentheses. It can refer
1.18 cvs 1263: to any type at all, specified by using the keyword <tt>ANY</tt>, or to a
1.37 cvs 1264: specific type. In the latter case, the element type designated by the
1.18 cvs 1265: reference can be defined either in the <a href="#sectc327"><tt>STRUCT</tt>
1266: section</a> of the same structure schema or in the <tt>STRUCT</tt> section of
1.37 cvs 1267: another structure schema. When the type is defined in another schema, the
1.1 cvs 1268: element type is followed by the name of the structure schema (within
1.37 cvs 1269: parentheses) in which it is defined. The name of the designated element type
1.18 cvs 1270: can be preceded by the keyword <tt>First</tt> or <tt>Second</tt>, but only in
1.37 cvs 1271: the case where the type is defined as <a href="#sectd3285">a pair</a>. These
1.1 cvs 1272: keywords indicate whether the attribute must designate the first mark of the
1.37 cvs 1273: pair or the second. If the reference refers to a pair and neither of these
1.18 cvs 1274: two keywords is present, then the first mark is used.</p>
1.30 cvs 1275:
1.37 cvs 1276: <p>In the case of an enumeration attribute, the equals sign is followed by
1277: the list of names representing the possible values of the attribute, the
1278: names being separated from each other by commas. An enumeration attribute has
1279: at least one possible value; the maximum number of values is defined by the
1.18 cvs 1280: compiler for the S language.</p>
1.30 cvs 1281: <pre> AttrSeq = Attribute < Attribute > .
1.1 cvs 1282: Attribute = AttrID '=' AttrType ';' .
1283: AttrType = 'INTEGER' / 'TEXT' /
1284: 'REFERENCE' '(' RefType ')' /
1285: ValueSeq .
1286: RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .
1287: FirstSec = 'First' / 'Second' .
1288: ExtStruct = '(' ElemID ')' .
1.30 cvs 1289: ValueSeq = AttrVal < ',' AttrVal > .
1.1 cvs 1290: AttrID = NAME .
1.18 cvs 1291: AttrVal = NAME .</pre>
1.30 cvs 1292:
1293: <p>There is a predefined global text attribute, the <em>language</em>, which
1.37 cvs 1294: is automatically added to every Thot structure schema. This attribute allows
1295: Thot to perform certain actions, such as hyphenation and spell-checking,
1296: which cannot be performed without knowing the language in which each part of
1297: the document is written. This attribute can be used just like any explicitly
1.18 cvs 1298: declared attribute: the system acts as if every structure schema contains</p>
1299: <pre>ATTR
1300: Language = TEXT;</pre>
1.30 cvs 1301:
1.18 cvs 1302: <blockquote class="example">
1.30 cvs 1303: <p><strong>Example:</strong></p>
1304:
1305: <p>The following specification defines the global enumeration attribute
1306: WordType.</p>
1307: <pre>ATTR
1.18 cvs 1308: WordType = Definition, IndexWord, DocumentTitle;</pre>
1309: </blockquote>
1310: </div>
1.1 cvs 1311:
1.18 cvs 1312: <div class="subsection">
1.37 cvs 1313: <h3><a name="sectc327" id="sectc327">Structured elements</a></h3>
1.1 cvs 1314:
1.30 cvs 1315: <p>The rules for defining structured elements are required, except in an
1.1 cvs 1316: extension schema: they constitute the core of a structure schema, since they
1317: define the structure of the different types of elements that occur in a
1.18 cvs 1318: document or object of the class defined by the schema.</p>
1.30 cvs 1319:
1320: <p>The first structure rule after the keyword <tt>STRUCT</tt> must define the
1.1 cvs 1321: structure of the class whose name appears in the first instruction
1.37 cvs 1322: (<tt>STRUCTURE</tt>) of the schema. This is the root rule of the schema,
1.18 cvs 1323: defining the root of the document tree or object tree.</p>
1.30 cvs 1324:
1325: <p>The remaining rules may be placed in any order, since the language permits
1.37 cvs 1326: the definition of element types before or after their use, or even in the
1327: same instruction in which they are used. This last case allows the definition
1328: of recursive structures.</p>
1.30 cvs 1329:
1330: <p>Each rule is composed of a name (the name of the element type whose
1331: structure is being defined) followed by an equals sign and a structure
1332: definition.</p>
1333:
1.37 cvs 1334: <p>If any local attributes are associated with the element type defined by
1335: the rule, they appear between parentheses after the type name and before the
1336: equals sign. The parentheses contain, first, the keyword <tt>ATTR</tt>, then
1337: the list of local attributes, separated by commas. Each local attribute is
1.2 cvs 1338: composed of the name of the attribute followed by an equals sign and the
1.18 cvs 1339: definition of the attribute's type, just as in the definition of <a
1.37 cvs 1340: href="#sectc325">global attributes</a>. The name of the attribute can be
1341: preceded by an exclamation point to indicate that the attribute must always
1342: be present for this element type. The same attribute, identified by its name,
1343: can be defined as a local attribute for multiple element types. In this case,
1344: the equals sign and definition of the attribute type need only appear in the
1345: first occurrence of the attribute. It should be noted that global attributes
1346: cannot also be defined as local attributes.</p>
1.30 cvs 1347:
1348: <p>If any <a href="#sectd3135">extensions</a> are defined for this element
1349: type, a plus sign follows the structure definition and the names of the
1.37 cvs 1350: extension element types appear between parentheses after the plus. If there
1351: are multiple extensions, they are separated by commas. These types can either
1.30 cvs 1352: be defined in the same schema, defined in other schemas, or they may be base
1.18 cvs 1353: types identified by the keywords <tt>TEXT</tt>, <tt>GRAPHICS</tt>,
1354: <tt>SYMBOL</tt>, or <tt>PICTURE</tt>.</p>
1.30 cvs 1355:
1356: <p><a href="#sectd3135">Restrictions</a> are indicated in the same manner as
1.18 cvs 1357: extensions, but they are introduced by a minus sign and they come after the
1358: extensions, or if there are no extensions, after the structure definition.</p>
1.30 cvs 1359:
1.37 cvs 1360: <p>If the values of attributes must be attached systematically to this
1361: element type, they are introduced by the keyword <tt>WITH</tt> and declared
1362: in the form of a list of fixed-value attributes. When such definitions of
1363: fixed attribute values appear, they are always the last part of the rule.</p>
1.30 cvs 1364:
1365: <p>The rule is terminated by a semicolon.</p>
1366: <pre> RuleSeq = Rule < Rule > .
1.1 cvs 1367: Rule = ElemID [ LocAttrSeq ] '=' DefWithAttr ';'.
1.30 cvs 1368: LocAttrSeq = '(' 'ATTR' LocAttr < ';' LocAttr > ')' .
1.1 cvs 1369: LocAttr = [ '!' ] AttrID [ '=' AttrType ] .
1370: DefWithAttr = Definition
1371: [ '+' '(' ExtensionSeq ')' ]
1372: [ '-' '(' RestrictSeq ')' ]
1373: [ 'WITH' FixedAttrSeq ] .
1.30 cvs 1374: ExtensionSeq = ExtensionElem < ',' ExtensionElem > .
1.1 cvs 1375: ExtensionElem = ElemID / 'TEXT' / 'GRAPHICS' /
1376: 'SYMBOL' / 'PICTURE' .
1.30 cvs 1377: RestrictSeq = RestrictElem < ',' RestrictElem > .
1.1 cvs 1378: RestrictElem = ElemID / 'TEXT' / 'GRAPHICS' /
1.18 cvs 1379: 'SYMBOL' / 'PICTURE' .</pre>
1.30 cvs 1380:
1381: <p>The list of fixed-value attributes is composed of a sequence of
1.37 cvs 1382: attribute-value pairs separated by commas. Each pair contains the name of the
1.1 cvs 1383: attribute and the fixed value for this element type, the two being separated
1.37 cvs 1384: by an equals sign. If the sign is preceded by a question mark the given value
1.1 cvs 1385: is only an initial value that may be modified later rather than a value fixed
1.37 cvs 1386: for all time. Reference attributes are an exception to this norm. They cannot
1387: be assigned a fixed value, but when the name of such an attribute appears
1388: this indicates that this element type must have a valid value for the
1389: attribute. For the other attribute types, the fixed value is indicated by a
1.1 cvs 1390: signed integer (numeric attributes), a character string between apostrophes
1.18 cvs 1391: (textual attributes) or the name of a value (enumeration attributes).</p>
1.30 cvs 1392:
1393: <p>Fixed-value attributes can either be <a href="#sectc325">global</a> or
1394: local to the element type for which they are fixed, but they must be declared
1395: before they are used.</p>
1396: <pre> FixedAttrSeq = FixedAttr < ',' FixedAttr > .
1.1 cvs 1397: FixedAttr = AttrID [ FixedOrModifVal ] .
1398: FixedOrModifVal = [ '?' ] '=' FixedValue .
1399: FixedValue = [ '-' ] NumValue / TextVal / AttrVal .
1400: NumValue = NUMBER .
1.18 cvs 1401: TextVal = STRING .</pre>
1402: </div>
1.1 cvs 1403:
1.18 cvs 1404: <div class="subsection">
1.37 cvs 1405: <h3><a name="sectc328" id="sectc328">Structure definitions</a></h3>
1.1 cvs 1406:
1.37 cvs 1407: <p>The structure of an element type can be a simple base type or a
1408: constructed type.</p>
1.30 cvs 1409:
1410: <p>For constructed types, it is frequently the case that similar structures
1.37 cvs 1411: appear in many places in a document. For example the contents of the
1.1 cvs 1412: abstract, of the introduction, and of a section can have the same structure,
1.37 cvs 1413: that of a sequence of paragraphs. In this case, a single, common structure
1.1 cvs 1414: can be defined (the paragraph sequence in this example), and the schema is
1415: written to indicate that each element type possesses this structure, as
1.18 cvs 1416: follows:</p>
1417: <pre> Abstract = Paragraph_sequence;
1.1 cvs 1418: Introduction = Paragraph_sequence;
1.18 cvs 1419: Section_contents = Paragraph_sequence;</pre>
1.30 cvs 1420:
1421: <p>The equals sign means ``has the same structure as''.</p>
1422:
1.37 cvs 1423: <p>If the element type defined is a simple base type, this is indicated by
1424: one of the keywords <tt>TEXT</tt>, <tt>GRAPHICS</tt>, <tt>SYMBOL</tt>, or
1425: <tt>PICTURE</tt>. If some local attributes must be associated with a base
1426: type, the keyword of the base type is followed by the declaration of the
1427: local attributes using the syntax <a href="#sectc327">presented above.</a></p>
1.30 cvs 1428:
1429: <p>In the case of an open choice, the type is indicated by the keyword
1.18 cvs 1430: <tt>UNIT</tt> for units or the keyword <tt>NATURE</tt> for objects having a
1431: structure defined by any other schema.</p>
1.30 cvs 1432:
1433: <p>A unit represents one of the two following categories:</p>
1.18 cvs 1434: <ul>
1.30 cvs 1435: <li>a base type: text, graphical element, symbol, picture,</li>
1.37 cvs 1436: <li>an element whose type is chosen from among the types defined as units
1437: in the <tt>UNITS</tt> section of the document's structure schema. It can
1.30 cvs 1438: also be chosen from among the types defined as <a
1439: href="#sectd3132">units</a> in the <a href="#sectc3212"><tt>UNITS</tt>
1440: section</a> of the structure schemas that defines the ancestors of the
1441: element to which the rule is applied.</li>
1.18 cvs 1442: </ul>
1.30 cvs 1443:
1444: <p>Before the creation of an element defined as a unit, Thot asks the user to
1.18 cvs 1445: choose between the categories of elements.</p>
1.30 cvs 1446:
1447: <p>Thus, the contents of a paragraph can be specified as a sequence of units,
1.1 cvs 1448: which will permit the inclusion in the paragraphs of character strings,
1449: symbols, and various elements, such as cross-references, if these are defined
1.18 cvs 1450: as units.</p>
1.30 cvs 1451:
1.37 cvs 1452: <p>A schema object (keyword <tt>NATURE</tt>) represents an object defined by
1453: a structure schema freely chosen from among the available schemas; in the
1454: case the element type is defined by the first rule (the root rule) of the
1455: chosen schema.</p>
1.30 cvs 1456:
1457: <p>If the element type defined is a constructed type, the list, aggregate,
1.37 cvs 1458: choice, and reference constructors are used. In this case the definition
1459: begins with a keyword identifying the constructor. This keyword is followed
1.18 cvs 1460: by a syntax specific to each constructor.</p>
1.30 cvs 1461:
1462: <p>The local attribute definitions appear after the name of the element type
1.18 cvs 1463: being defined, if this element type has <a href="#sectc327">local
1464: attributes</a>.</p>
1465: <pre> Definition = BaseType [ LocAttrSeq ] / Constr / Element .
1.1 cvs 1466: BaseType = 'TEXT' / 'GRAPHICS' / 'SYMBOL' / 'PICTURE' /
1467: 'UNIT' / 'NATURE' .
1468: Element = ElemID [ ExtOrDef ] .
1469: ExtOrDef = 'EXTERN' / 'INCLUDED' /
1470: [ LocAttrSeq ] '=' Definition .
1471: Constr = 'LIST' [ '[' min '..' max ']' ] 'OF'
1472: '(' DefWithAttr ')' /
1473: 'BEGIN' DefOptSeq 'END' /
1474: 'AGGREGATE' DefOptSeq 'END' /
1475: 'CASE' 'OF' DefSeq 'END' /
1476: 'REFERENCE' '(' RefType ')' /
1.18 cvs 1477: 'PAIR' .</pre>
1.1 cvs 1478:
1.18 cvs 1479: <div class="subsubsection">
1.37 cvs 1480: <h4><a name="sectd3281" id="sectd3281">List</a></h4>
1.1 cvs 1481:
1.30 cvs 1482: <p>The list constructor permits the definition of an element type composed of
1.37 cvs 1483: a list of elements, all of the same type. A list definition begins with the
1.18 cvs 1484: <tt>LIST</tt> keyword followed by an optional range, the keyword <tt>OF</tt>,
1.1 cvs 1485: and the definition, between parentheses, of the element type which must
1.37 cvs 1486: compose the list. The optional range is composed of the minimum and maximum
1.1 cvs 1487: number of elements for the list separated by two periods and enclosed by
1.37 cvs 1488: brackets. If the range is not present, the number of list elements is
1489: unconstrained. When only one of the two bounds of the range is unconstrained,
1490: it is represented by a star ('*') character. Even when both bounds are
1491: unconstrained, they can be specified by <tt>[*..*]</tt>, but it is simpler
1492: not to specify any bound.</p>
1.18 cvs 1493: <pre> 'LIST' [ '[' min '..' max ']' ]
1.1 cvs 1494: 'OF' '(' DefWithAttr ')'
1495: min = Integer / '*' .
1496: max = Integer / '*' .
1.18 cvs 1497: Integer = NUMBER .</pre>
1.30 cvs 1498:
1499: <p>Before the document is edited, Thot creates the minimum number of elements
1.37 cvs 1500: for the list. If no minimum was given, it creates a single element. If a
1.30 cvs 1501: maximum number of elements is given and that number is attained, the editor
1502: refuses to create new elements for the list.</p>
1503:
1504: <blockquote class="example">
1505: <p><strong>Example:</strong></p>
1506:
1507: <p>The following two instructions define the body of a document as a
1508: sequence of at least two chapters and the contents of a section as a
1.37 cvs 1509: sequence of paragraphs. A single paragraph can be the entire contents of a
1.30 cvs 1510: section.</p>
1511: <pre>Body = LIST [2..*] OF (Chapter);
1.18 cvs 1512: Section_contents = LIST OF (Paragraph);</pre>
1513: </blockquote>
1514: </div>
1.1 cvs 1515:
1.18 cvs 1516: <div class="subsubsection">
1.37 cvs 1517: <h4><a name="sectd3282" id="sectd3282">Aggregate</a></h4>
1.1 cvs 1518:
1.37 cvs 1519: <p>The aggregate constructor is used to define an element type as a
1520: collection of sub-elements, each having a fixed type. The collection may be
1521: ordered or unordered. The elements composing the collection are called
1522: <em>components</em>. In the definition of an aggregate, a keyword indicates
1.18 cvs 1523: whether or not the aggregate is ordered: <tt>BEGIN</tt> for an ordered
1524: aggregate, <tt>AGGREGATE</tt> for an unordered aggregate. This keyword is
1.1 cvs 1525: followed by the list of component type definitions which is terminated by the
1.37 cvs 1526: <tt>END</tt> keyword. The component type definitions are separated by
1.18 cvs 1527: commas.</p>
1.30 cvs 1528:
1529: <p>Before creating an aggregate, the Thot editor creates all the aggregate's
1.1 cvs 1530: components in the order they appear in the structure schema, even for
1.37 cvs 1531: unordered aggregates. However, unlike ordered aggregates, the components of
1.1 cvs 1532: an unordered aggregate may be rearranged using operations of the Thot editor.
1533: The exceptions to the rule are any components whose name was preceded by a
1.37 cvs 1534: question mark character ('?'). These components, which are optional, can be
1.1 cvs 1535: created by explicit request, possibly at the time the aggregate is created,
1.18 cvs 1536: but they are not created automatically <em>prior</em> to the creation of the
1537: aggregate.</p>
1538: <pre> 'BEGIN' DefOptSeq 'END'
1.30 cvs 1539: DefOptSeq = DefOpt ';' < DefOpt ';' > .
1.18 cvs 1540: DefOpt = [ '?' ] DefWithAttr .</pre>
1.30 cvs 1541:
1.18 cvs 1542: <blockquote class="example">
1.30 cvs 1543: <p><strong>Example:</strong></p>
1544:
1545: <p>In a bilingual document, each paragraph has an English version and a
1.37 cvs 1546: French version. In certain cases, the translator wants to add a marginal
1547: note, but this note is present in very few paragraphs. Thus, it must not be
1548: created systematically for every paragraph. A bilingual paragraph of this
1.30 cvs 1549: type is declared:</p>
1550: <pre>Bilingual_paragraph = BEGIN
1.1 cvs 1551: French_paragraph = TEXT;
1552: English_paragraph = TEXT;
1553: ? Note = TEXT;
1.18 cvs 1554: END;</pre>
1555: </blockquote>
1556: </div>
1.1 cvs 1557:
1.18 cvs 1558: <div class="subsubsection">
1.37 cvs 1559: <h4><a name="sectd3283" id="sectd3283">Choice</a></h4>
1.1 cvs 1560:
1.30 cvs 1561: <p>The choice constructor permits the definition of an element type which is
1.37 cvs 1562: chosen from among a set of possible types. The keywords <tt>CASE</tt> and
1563: <tt>OF</tt> are followed by a list of definitions of possible types, which
1564: are separated by semicolons and terminated by the <tt>END</tt> keyword.</p>
1.18 cvs 1565: <pre> 'CASE' 'OF' DefSeq 'END'
1.30 cvs 1566: DefSeq = DefWithAttr ';' < DefWithAttr ';' > .</pre>
1567:
1568: <p>Before the creation of an element defined as a choice, the Thot editor
1.37 cvs 1569: presents the list of possible types for the element to the user. The user has
1.18 cvs 1570: only to select the element type that s/he wants to create from this list.</p>
1.30 cvs 1571:
1.37 cvs 1572: <p>The order of the type declarations is important. It determines the order
1573: of the list presented to the user before the creation of the element. Also,
1.30 cvs 1574: when a Choice element is being created automatically, the first type in the
1.37 cvs 1575: list is used. In fact, using the Thot editor, when an empty Choice element is
1.1 cvs 1576: selected, it is possible to select this element and to enter its text from
1577: keyboard. In this case, the editor uses the first element type which can
1.18 cvs 1578: contain an atom of the character string type.</p>
1.30 cvs 1579:
1580: <p>The two special cases of the choice constructor, the <a
1.18 cvs 1581: href="#sectc328"><em>schema</em></a> and the <a
1582: href="#sectc3212"><em>unit</em></a> are discussed elsewhere.</p>
1.30 cvs 1583:
1.18 cvs 1584: <blockquote class="example">
1.30 cvs 1585: <p><strong>Example:</strong></p>
1586:
1587: <p>It is common in documents to treat a variety of objects as if they were
1.37 cvs 1588: ordinary paragraphs. Thus, a ``Paragraph'' might actually be composed of a
1.30 cvs 1589: block of text (an ordinary paragraph), or a mathematical formula whose
1590: structure is defined by another structure schema named Math, or a table,
1.37 cvs 1591: also defined by another structure schema. Here is a definition of such a
1.30 cvs 1592: paragraph:</p>
1593: <pre>Paragraph = CASE OF
1.1 cvs 1594: Simple_text = TEXT;
1595: Formula = Math;
1596: Table_para = Table;
1.18 cvs 1597: END;</pre>
1598: </blockquote>
1599: </div>
1.1 cvs 1600:
1.18 cvs 1601: <div class="subsubsection">
1.37 cvs 1602: <h4><a name="sectd3284" id="sectd3284">Reference</a></h4>
1.1 cvs 1603:
1.37 cvs 1604: <p>Like all elements in Thot, references are typed. An element type defined
1.30 cvs 1605: as a reference is a cross-reference to an element of some other given type.
1606: The keyword <tt>REFERENCE</tt> is followed by the name of a type enclosed in
1.37 cvs 1607: parentheses. When the type which is being cross-referenced is defined in
1.1 cvs 1608: another structure schema, the type name is itself followed by the name of the
1.18 cvs 1609: external structure schema in which it is defined.</p>
1.30 cvs 1610:
1611: <p>When the designated element type is a <a href="#sectd3285">mark pair</a>,
1.37 cvs 1612: it can be preceded by a <tt>FIRST</tt> or <tt>SECOND</tt> keyword. These
1.18 cvs 1613: keywords indicate whether the reference points to the first or second mark of
1614: the pair. If the reference points to a pair and neither of these two keywords
1615: is present, the reference is considered to point to the first mark of the
1616: pair.</p>
1.30 cvs 1617:
1.37 cvs 1618: <p>There is an exception to the principle of typed references: it is possible
1.30 cvs 1619: to define a reference which designates an element of any type, which can
1620: either be in the same document or another document. In this case, it suffices
1621: to put the keyword <tt>ANY</tt> in the parentheses which indicate the
1622: referenced element type.</p>
1.18 cvs 1623: <pre> 'REFERENCE' '(' RefType ')'
1624: RefType = 'ANY' / [ FirstSec ] ElemID [ ExtStruct ] .</pre>
1.30 cvs 1625:
1626: <p>When defining an inclusion, the <tt>REFERENCE</tt> keyword is not used.
1.1 cvs 1627: Inclusions with complete expansion are not declared as such in the structure
1.37 cvs 1628: schemas, since any element defined in a structure schema can be replaced by
1629: an element of the same type. Instead, inclusions without expansion or with
1.1 cvs 1630: partial expansion must be declared explicitly whenever they will include a
1.37 cvs 1631: complete object ( and not a part of an object). In this case, the object type
1.1 cvs 1632: to be included (that is, the name of its structure schema) is followed by a
1.37 cvs 1633: keyword: <tt>EXTERN</tt> for inclusion without expansion and
1634: <tt>INCLUDED</tt> for partial expansion.</p>
1.30 cvs 1635:
1.37 cvs 1636: <p>Before creating a cross-reference or an inclusion, the Thot editor asks
1637: the user to choose, from the document images displayed, the referenced or
1638: included element.</p>
1.30 cvs 1639:
1.18 cvs 1640: <blockquote class="example">
1.30 cvs 1641: <p><strong>Example:</strong></p>
1642:
1643: <p>If the types Note and Section are defined in the Article structure
1644: schema, it is possible to define, in the same structure schema, a reference
1645: to a note and a reference to a section in this manner:</p>
1646: <pre>Ref_note = REFERENCE (Note);
1.18 cvs 1647: Ref_section = REFERENCE (Section);</pre>
1.30 cvs 1648:
1649: <p>It is also possible to define the generic structure of a collection of
1650: articles, which include (with partial expansion) objects of the Article
1651: class and which possess an introduction which may include cross-references
1.37 cvs 1652: to sections of the included articles. In the Collection structure schema,
1.30 cvs 1653: the definitions are:</p>
1654: <pre>Collection = BEGIN
1.6 cvs 1655: Collection_title = TEXT;
1656: Introduction = LIST OF (Elem = CASE OF
1.1 cvs 1657: TEXT;
1658: Ref_sect;
1659: END);
1.6 cvs 1660: Body = LIST OF (Article INCLUDED);
1661: END;
1.18 cvs 1662: Ref_sect = REFERENCE (Section (Article));</pre>
1.30 cvs 1663:
1664: <p>Here we define a Folder document class which has a title and includes
1665: documents of different types, particularly Folders:</p>
1666: <pre>Folder = BEGIN
1.6 cvs 1667: Folder_title = TEXT;
1668: Folder_contents = LIST OF (Document);
1669: END;
1.1 cvs 1670:
1671: Document = CASE OF
1672: Article EXTERN;
1673: Collection EXTERN;
1674: Folder EXTERN;
1.18 cvs 1675: END;</pre>
1.30 cvs 1676:
1677: <p>Under this definition, Folder represents either an aggregate which
1678: contains a folder title and the list of included documents or an included
1.37 cvs 1679: folder. To resolve this ambiguity, in the P language, the placement of a
1.30 cvs 1680: star character in front of the type name (here, Folder) indicates an
1681: included document.</p>
1.18 cvs 1682: </blockquote>
1683: </div>
1.1 cvs 1684:
1.18 cvs 1685: <div class="subsubsection">
1.37 cvs 1686: <h4><a name="sectd3285" id="sectd3285">Mark pairs</a></h4>
1.1 cvs 1687:
1.37 cvs 1688: <p>Like other elements, mark pairs are typed. The two marks of the pair have
1689: the same type, but there exist two predefined subtypes which apply to all
1690: mark pairs: the first mark of the pair (called <tt>First</tt> in the P and T
1.18 cvs 1691: languages) and the second mark (called <tt>Second</tt>).</p>
1.30 cvs 1692:
1693: <p>In the S language, a mark pair is noted simply by the <tt>PAIR</tt>
1.18 cvs 1694: keyword.</p>
1.30 cvs 1695:
1.37 cvs 1696: <p>In the Thot editor, marks are always moved or destroyed together. The two
1.1 cvs 1697: marks of a pair have the same identifier, unique within the document, which
1.18 cvs 1698: permits intertwining mark pairs without risk of ambiguity.</p>
1699: </div>
1700: </div>
1.1 cvs 1701:
1.18 cvs 1702: <div class="subsection">
1.37 cvs 1703: <h3><a name="sectc329" id="sectc329">Imports</a></h3>
1.1 cvs 1704:
1.30 cvs 1705: <p>Because of schema constructors, it is possible, before editing a document,
1.37 cvs 1706: to use classes defined by other structure schemas whenever they are needed.
1707: It is also possible to assign specific document classes to certain element
1708: types. In this case, these classes are simply designated by their name. In
1709: fact, if a type name is not defined in the structure schema, it is assumed
1710: that it specifies a structure defined by another structure schema.</p>
1.30 cvs 1711:
1.18 cvs 1712: <blockquote class="example">
1.30 cvs 1713: <p><strong>Example:</strong></p>
1714:
1715: <p>If the types Math and Table don't appear in the left part of a structure
1716: rule in the schema, the following two rules indicate that a formula has the
1.37 cvs 1717: structure of an object defined by the structure schema Math and that a
1718: table element has the structure of an object defined by the Table
1719: schema.</p>
1.30 cvs 1720: <pre>Formula = Math;
1.18 cvs 1721: Table_elem = Table;</pre>
1722: </blockquote>
1723: </div>
1724:
1725: <div class="subsection">
1.37 cvs 1726: <h3><a name="sectc3210" id="sectc3210">Extension rules</a></h3>
1.18 cvs 1727:
1.30 cvs 1728: <p>The <tt>EXTENS</tt> section, which can only appear in an extension schema,
1.1 cvs 1729: defines complements to the rules in the primary schema (i.e. the structure
1730: schema to which the extension schema will be applied). More precisely, this
1731: section permits the addition to an existing type of local attributes,
1.18 cvs 1732: extensions, restrictions and fixed-value attributes.</p>
1.30 cvs 1733:
1734: <p>These additions can be applied to the root rule of the primary schema,
1.18 cvs 1735: designated by the keyword <tt>Root</tt>, or to any other explicitly named
1736: rule.</p>
1.30 cvs 1737:
1738: <p>Extension rules are separated from each other by a semicolon and each
1.18 cvs 1739: extension rule has the same syntax as a <a href="#sectc327">structure
1740: rule</a>, but the part which defines the constructor is absent.</p>
1.30 cvs 1741: <pre> ExtenRuleSeq = ExtensRule ';' < ExtensRule ';' > .
1.6 cvs 1742: ExtensRule = RootOrElem [ LocAttrSeq ]
1743: [ '+' '(' ExtensionSeq ')' ]
1744: [ '-' '(' RestrictSeq ')' ]
1745: [ 'WITH' FixedAttrSeq ] .
1.18 cvs 1746: RootOrElem = 'Root' / ElemID .</pre>
1747: </div>
1.1 cvs 1748:
1.18 cvs 1749: <div class="subsection">
1.37 cvs 1750: <h3><a name="sectc3212" id="sectc3212">Units</a></h3>
1.30 cvs 1751:
1752: <p>The <tt>UNITS</tt> section of the structure schema contains the
1753: declarations of the element types which can be used in the external objects
1754: making up parts of the document or in objects of the class defined by the
1.37 cvs 1755: schema. These element types are defined just like other structured element
1756: types. They can be used in the other element types of the schema, but they
1757: can also be used in any other rule of the schema.</p>
1.30 cvs 1758:
1759: <blockquote class="example">
1760: <p><strong>Example:</strong></p>
1.1 cvs 1761:
1.30 cvs 1762: <p>If references to notes are declared as units:</p>
1763: <pre>UNITS
1.18 cvs 1764: Ref_note = REFERENCE (Note);</pre>
1.30 cvs 1765:
1.37 cvs 1766: <p>then it is possible to use references to notes in a cell of a table,
1767: even when <tt>Table</tt> is an external structure schema. The
1768: <tt>Table</tt> schema must declare a cell to be a sequence of units, which
1769: can then be base element types (text, for example) or references to notes
1770: in the document.</p>
1.30 cvs 1771: <pre>Cell = LIST OF (UNITS);</pre>
1.18 cvs 1772: </blockquote>
1773: </div>
1.1 cvs 1774:
1.18 cvs 1775: <div class="subsection">
1.37 cvs 1776: <h3><a name="sectc3213" id="sectc3213">Skeleton elements</a></h3>
1.1 cvs 1777:
1.30 cvs 1778: <p>When editing a document which contains or must contain external references
1779: to several other documents, it may be necessary to load a large number of
1.1 cvs 1780: documents, simply to see the parts designated by the external references of
1.37 cvs 1781: the document while editing, or to access the source of included elements. In
1782: this case, the external documents are not modified and it is only necessary
1783: to see the elements of these documents which could be referenced. Because of
1.1 cvs 1784: this, the editor will suggest that the documents be loaded in ``skeleton''
1.37 cvs 1785: form. This form contains only the elements of the document explicitly
1.18 cvs 1786: mentioned in the <tt>EXPORT</tt> section of their structure schema and, for
1.1 cvs 1787: these elements, only the part of the contents specified in that section. This
1788: form has the advantage of being very compact, thus requiring very few
1.37 cvs 1789: resources from the editor. This is also the skeleton form which constitutes
1.18 cvs 1790: the expanded form of <a href="#inclusion">inclusions</a> with partial
1791: expansion.</p>
1.30 cvs 1792:
1793: <p>Skeleton elements must be declared explicitly in the <tt>EXPORT</tt>
1.37 cvs 1794: section of the structure schema that defines them. This section begins with
1.30 cvs 1795: the keyword <tt>EXPORT</tt> followed by a comma-separated list of the element
1.1 cvs 1796: types which must appear in the skeleton form and ending with a semicolon.
1.18 cvs 1797: These types must have been previously declared in the schema.</p>
1.30 cvs 1798:
1.37 cvs 1799: <p>For each skeleton element type, the part of the contents which is loaded
1800: by the editor, and therefore displayable, can be specified by putting the
1801: keyword <tt>WITH</tt> and the name of the contained element type to be loaded
1802: after the name of the skeleton element type. In this case only that named
1803: element, among all the elements contained in the exportable element type,
1804: will be loaded. If the <tt>WITH</tt> is absent, the entire contents of the
1805: skeleton element will be loaded by the editor. If instead, it is better that
1806: the skeleton form not load the contents of a particular element type, the
1807: keyword <tt>WITH</tt> must be followed by the word <tt>Nothing</tt>.</p>
1.18 cvs 1808: <pre> [ 'EXPORT' SkeletonSeq ]
1.1 cvs 1809:
1.30 cvs 1810: SkeletonSeq = SkelElem < ',' SkelElem > ';' .
1.1 cvs 1811: SkelElem = ElemID [ 'WITH' Contents ] .
1.18 cvs 1812: Contents = 'Nothing' / ElemID [ ExtStruct ] .</pre>
1.30 cvs 1813:
1.18 cvs 1814: <blockquote class="example">
1.30 cvs 1815: <p><strong>Example:</strong></p>
1816:
1817: <p>Suppose that, in documents of the article class, the element types
1818: Article_title, Figure, Section, Paragraph, and Biblio should appear in the
1819: skeleton form in order to make it easier to create external references to
1.37 cvs 1820: them from other documents. When loading an article in its skeleton form,
1.30 cvs 1821: all of these element types will be loaded except for paragraphs, but only
1.37 cvs 1822: the article title will be loaded in its entirety. For figures, the caption
1.30 cvs 1823: will be loaded, while for sections, the title will be loaded, and for
1.37 cvs 1824: bibliographic entries, only the title that they contain will be loaded.
1825: Note that bibliographic elements are defined in another structure schema,
1826: RefBib. To produce this result, the following declarations should be placed
1827: in the Article structure schema:</p>
1.30 cvs 1828: <pre>EXPORT
1.1 cvs 1829: Article_title,
1.5 cvs 1830: Figure With Caption,
1.1 cvs 1831: Section With Section_title,
1832: Paragraph With Nothing,
1.18 cvs 1833: Biblio With Biblio_title(RefBib);</pre>
1834: </blockquote>
1835: </div>
1.1 cvs 1836:
1.18 cvs 1837: <div class="subsection">
1.37 cvs 1838: <h3><a name="sectc3214" id="sectc3214">Exceptions</a></h3>
1.1 cvs 1839:
1.30 cvs 1840: <p>The behavior of the Thot editor and the actions that it performs are
1.37 cvs 1841: determined by the structure schemas. These actions are applied to all
1842: document and object types in accordance with their generic structure. For
1.1 cvs 1843: certain object types, such as tables and graphics, these actions are not
1844: sufficient or are poorly adapted and some special actions must be added to or
1.37 cvs 1845: substituted for certain standard actions. These special actions are called
1.18 cvs 1846: <em>exceptions</em>.</p>
1.30 cvs 1847:
1.37 cvs 1848: <p>Exceptions only inhibit or modify certain standard actions, but they can
1849: be used freely in every structure schema.</p>
1.30 cvs 1850:
1.37 cvs 1851: <p>Each structure schema can contain a section defining exceptions. It begins
1.18 cvs 1852: with the keyword <tt>EXCEPT</tt> and is composed of a sequence of exception
1.37 cvs 1853: declarations, separated by semicolons. Each declaration of an exception
1854: begins with the name of an element type or attribute followed by a colon.
1855: This indicates the element type or attribute to which the following
1856: exceptions apply. When the given element type name is a <a
1857: href="#sectd3285">mark pair</a>, and only in this case, the type name can be
1858: preceded by the keyword <tt>First</tt> or <tt>Second</tt>, to indicate if the
1859: exceptions which follow are associated with the first mark of the pair or the
1860: second. In the absence of this keyword, the first mark is used.</p>
1.30 cvs 1861:
1862: <p>When placed in an <a href="#sectc322">extension schema</a>, the keyword
1.18 cvs 1863: <tt>EXTERN</tt> indicates that the type name which follows is found in the
1.37 cvs 1864: principal schema (the schema being extended by the extension schema). The
1865: exceptions are indicated by a name. They are separated by semicolons.</p>
1.18 cvs 1866: <pre> [ 'EXCEPT' ExceptSeq ]
1.1 cvs 1867:
1.30 cvs 1868: ExceptSeq = Except ';' < Except ';' > .
1.1 cvs 1869: Except = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr
1870: ':' ExcValSeq .
1871: ExcTypeOrAttr = ElemID / AttrID .
1.30 cvs 1872: ExcValSeq = ExcValue < ',' ExcValue > .
1.19 cvs 1873: ExcValue ='NoCut' / 'NoCreate' / 'NoHMove' /
1874: 'NoVMove' / 'NoHResize' / 'NoVResize' /
1875: 'NoMove' / 'NoResize' / 'MoveResize' /
1876: 'NewWidth' / 'NewHeight' / 'NewHPos' /
1877: 'NewVPos' / 'Invisible' /
1.28 cvs 1878: 'NoSelect' / 'NoSpellCheck' /
1.1 cvs 1879: 'Hidden' / 'ActiveRef' /
1880: 'ImportLine' / 'ImportParagraph' /
1881: 'NoPaginate' / 'ParagraphBreak' /
1.19 cvs 1882: 'PageBreak' / 'PageBreakAllowed' / 'PageBreakPlace' /
1883: 'PageBreakRepetition' / 'PageBreakRepBefore' /
1.9 cvs 1884: 'HighlightChildren' / 'ExtendedSelection' /
1.36 cvs 1885: 'SelectParent' / 'ClickableSurface' /
1.29 cvs 1886: 'ReturnCreateNL' / 'ReturnCreateWithin' /
1887: 'IsDraw' / 'IsTable' /
1.19 cvs 1888: 'IsRow' / 'IsColHead' / 'IsCell' /
1889: 'NewPercentWidth' / 'ColRef' / 'ColSpan' /
1890: 'RowSpan' / 'SaveDocument' / 'Shadow' .</pre>
1.30 cvs 1891:
1892: <p>The following are the available exceptions:</p>
1.18 cvs 1893: <dl>
1.30 cvs 1894: <dt><tt>NoCut</tt></dt>
1.37 cvs 1895: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1896: type to which this exception is applied cannot be deleted by the
1897: editor.</dd>
1898: <dt><tt>NoCreate</tt></dt>
1.37 cvs 1899: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1900: type to which this exception is applied cannot be created by ordinary
1.37 cvs 1901: commands for creating new elements. These elements are usually created
1.30 cvs 1902: by special actions associated with other exceptions.</dd>
1903: <dt><tt>NoHMove</tt></dt>
1.37 cvs 1904: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1905: type to which this exception is applied cannot be moved horizontally
1906: with the mouse. Their children elements cannot be moved either.</dd>
1907: <dt><tt>NoVMove</tt></dt>
1.37 cvs 1908: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1909: type to which this exception is applied cannot be moved vertically with
1910: the mouse. Their children elements cannot be moved either.</dd>
1911: <dt><tt>NoMove</tt></dt>
1.37 cvs 1912: <dd>This exception can only be applied to element types. Elements of a
1913: type to which this exception is applied cannot be moved in any
1914: direction with the mouse. Their children elements cannot be moved
1915: either.</dd>
1.30 cvs 1916: <dt><tt>NoHResize</tt></dt>
1.37 cvs 1917: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1918: type to which this exception is applied cannot be resized horizontally
1919: with the mouse. Their children elements cannot be resized either.</dd>
1920: <dt><tt>NoVResize</tt></dt>
1.37 cvs 1921: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1922: type to which this exception is applied cannot be resized vertically
1923: with the mouse. Their children elements cannot be resized either.</dd>
1924: <dt><tt>NoResize</tt></dt>
1.37 cvs 1925: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1926: type to which this exception is applied cannot be resized in any
1.37 cvs 1927: direction with the mouse. Their children elements cannot be resized
1.30 cvs 1928: either.</dd>
1929: <dt><tt>MoveResize</tt></dt>
1.37 cvs 1930: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1931: type to which this exception is applied can be moved and resized in any
1932: direction with the mouse, even if one of their ancestor element has an
1.37 cvs 1933: exception that prevents moving or resizing. Their children elements can
1.30 cvs 1934: also be resized or moved.</dd>
1935: <dt><tt>NewWidth</tt></dt>
1.37 cvs 1936: <dd>This exception can only be applied to numeric attributes. If the
1937: width of an element which has this attribute is modified with the
1938: mouse, the value of the new width will be assigned to the
1939: attribute.</dd>
1.30 cvs 1940: <dt><tt>NewHeight</tt></dt>
1.37 cvs 1941: <dd>This exception can only be applied to numeric attributes. If the
1.30 cvs 1942: height of an element which has this attribute is modified with the
1943: mouse, the value of the new height will be assigned to the
1944: attribute.</dd>
1945: <dt><tt>NewHPos</tt></dt>
1.37 cvs 1946: <dd>This exception can only be applied to numeric attributes. If the
1.30 cvs 1947: horizontal position of an element which has this attribute is modified
1948: with the mouse, the value of the new horizontal position will be
1949: assigned to the attribute.</dd>
1950: <dt><tt>NewVPos</tt></dt>
1.37 cvs 1951: <dd>This exception can only be applied to numeric attributes. If the
1.30 cvs 1952: vertical position of an element which has this attribute is modified
1953: with the mouse, the value of the new vertical position will be assigned
1954: to the attribute.</dd>
1955: <dt><tt>Invisible</tt></dt>
1956: <dd>This exception can only be applied to attributes, but can be applied
1.37 cvs 1957: to all attribute types. It indicates that the attribute must not be
1958: seen by the user and that its value must not be changed directly. This
1.30 cvs 1959: exception is usually used when another exception manipulates the value
1960: of an attribute.</dd>
1961: <dt><tt>NoSelect</tt></dt>
1.37 cvs 1962: <dd>This exception can only be applied to element types. Elements of a
1963: type to which this exception is applied cannot be selected directly
1.30 cvs 1964: with the mouse, but they can be selected by other methods provided by
1965: the editor.</dd>
1966: <dt>NoSpellCheck</dt>
1.37 cvs 1967: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 1968: type to which this exception is applied are not taken into account by
1969: the spell checker.</dd>
1970: <dt><tt>Hidden</tt></dt>
1.37 cvs 1971: <dd>This exception can only be applied to element types. It indicates
1.30 cvs 1972: that elements of this type, although present in the document's
1.37 cvs 1973: structure, must not be shown to the user of the editor. In particular,
1.30 cvs 1974: the creation menus must not propose this type and the selection message
1975: must not pick it.</dd>
1976: <dt><tt>ActiveRef</tt></dt>
1977: <dd>This exception can only be applied to attributes of the reference
1.37 cvs 1978: type. It indicates that when the user of the editor makes a double
1.30 cvs 1979: click on an element which possesses a reference attribute having this
1980: exception, the element designated by the reference attribute will be
1981: selected.</dd>
1982: <dt><tt>ImportLine</tt></dt>
1.37 cvs 1983: <dd>This exception can only be applied to element types. It indicates
1.30 cvs 1984: that elements of this type should receive the content of imported text
1.37 cvs 1985: files. An element is created for each line of the imported file. A
1.30 cvs 1986: structure schema cannot contain several exceptions <tt>ImportLine</tt>
1987: and, if it contains one, it should not contain any exception
1988: <tt>ImportParagraph</tt>.</dd>
1989: <dt><tt>ImportParagraph</tt></dt>
1.37 cvs 1990: <dd>This exception can only be applied to element types. It indicates
1.30 cvs 1991: that elements of this type should receive the content of imported text
1.37 cvs 1992: files. An element is created for each paragraph of the imported file. A
1993: paragraph is a sequence of lines without any empty line. A structure
1.30 cvs 1994: schema cannot contain several exceptions <tt>ImportParagraph</tt> and,
1995: if it contains one, it should not contain any exception
1996: <tt>ImportLine</tt>.</dd>
1997: <dt><tt>NoPaginate</tt></dt>
1998: <dd>This exception can only be applied to the root element, i.e. the name
1.37 cvs 1999: that appear after the keyword <tt>STRUCTURE</tt> at the beginning of
2000: the structure schema. It indicates that the editor should not allow the
1.30 cvs 2001: user to paginate documents of that type.</dd>
2002: <dt><tt>ParagraphBreak</tt></dt>
1.37 cvs 2003: <dd>This exception can only be applied to element types. When the caret
2004: is within an element of a type to which this exception is applied, it
2005: is that element that will be split when the user hits the Return
2006: key.</dd>
1.30 cvs 2007: <dt><tt>ReturnCreateNL</tt></dt>
1.37 cvs 2008: <dd>This exception can only be applied to element types. When the caret
1.30 cvs 2009: is within an element of a type to which this exception is applied, the
2010: Return key simply inserts a New line character (code \212) at the
2011: current position. The Return key does not create a new element; it does
2012: not split the current element either.</dd>
2013: <dt><tt>ReturnCreateWithin</tt></dt>
1.37 cvs 2014: <dd>This exception can only be applied to element types. When the caret
1.30 cvs 2015: is within an element of a type to which this exception is applied, the
2016: Return key will create a new element within that element, not a sibling
2017: after that element.</dd>
2018: <dt><tt>HighlightChildren</tt></dt>
1.37 cvs 2019: <dd>This exception can only be applied to element types. Elements of a
1.30 cvs 2020: type to which this exception is applied are not highlighted themselves
1.32 cvs 2021: when they are selected in the main view, but all their children are
1.37 cvs 2022: highlighted instead. If children have this exception too, the process
2023: is applied recursively. Only the main view defined in the presentation
1.32 cvs 2024: schema is concerned. Tee exception is ignored for other views.</dd>
1.30 cvs 2025: <dt><tt>ExtendedSelection</tt></dt>
1.37 cvs 2026: <dd>This exception can only be applied to element types. The selection
1.30 cvs 2027: extension command (middle button of the mouse) only add the clicked
2028: element (if it has that exception) to the current selection, without
2029: selecting other elements between the current selection and the clicked
2030: element.</dd>
1.36 cvs 2031: <dt><code>SelectParent</code></dt>
2032: <dd>This exception can only be applied to element types. When the user
1.37 cvs 2033: clicks on an element of that type, the parent of the element is
2034: selected instead of the element itself.</dd>
1.36 cvs 2035: <dt><code>ClickableSurface</code></dt>
2036: <dd>This exception can only be applied to element types. When the user
1.37 cvs 2037: clicks within a child of an element of that type, this child is
2038: selected even if it is a graphic leaf that is not filled.</dd>
1.36 cvs 2039: <dt><code>IsDraw</code>, <code>IsTable</code>, <code>IsColHead</code>,
2040: <code>IsRow</code>, <code>IsCell</code></dt>
1.37 cvs 2041: <dd>These exceptions can only be applied to element types. Elements of a
1.30 cvs 2042: type to which these exceptions are applied are identified as Draws,
2043: Tables, Colheads, Rows or Cells and specific processing are applied to
2044: them.</dd>
1.36 cvs 2045: <dt><code>ColRef</code></dt>
1.30 cvs 2046: <dd>This exception can only be applied to attributes of the reference
2047: type. It indicates that this attribute refers to the column head (see
2048: exception IsColHead) which the element belongs to.</dd>
1.36 cvs 2049: <dt><code>ColSpan</code>, <code>RowSpan</code></dt>
1.31 cvs 2050: <dd>These exceptions can only be applied to numeric attributes of cells.
1.30 cvs 2051: They indicate that attribute values give how many columns or rows the
2052: element spans.</dd>
1.36 cvs 2053: <dt><code>Shadow</code></dt>
1.37 cvs 2054: <dd>This exception can only be applied to element types. Text of elements
1.30 cvs 2055: of a type to which this exception is applied are displayed and printed
2056: as a set of stars ('*').</dd>
1.18 cvs 2057: </dl>
1.30 cvs 2058:
1.18 cvs 2059: <blockquote class="example">
1.30 cvs 2060: <p><strong>Example:</strong></p>
2061:
2062: <p>Consider a structure schema for object-style graphics which defines the
2063: Graphic_object element type with the associated Height and Weight numeric
1.37 cvs 2064: attributes. Suppose that we want documents of this class to have the
1.30 cvs 2065: following qualities:</p>
2066: <ul>
2067: <li>Whenever the width or height of an object is changed using the mouse,
2068: the new values are stored in the object's Width and Height
2069: attributes.</li>
2070: <li>The user should not be able to change the values of the Width and
2071: Height attributes via the Attributes menu of the Thot editor.</li>
2072: </ul>
2073:
2074: <p>The following exceptions will produce this effect.</p>
2075: <pre>STRUCT
1.1 cvs 2076: ...
1.5 cvs 2077: Graphics_object (ATTR Height = Integer; Width = Integer)
1.1 cvs 2078: = GRAPHICS with Height ?= 10, Width ?= 10;
2079: ...
2080: EXCEPT
2081: Height: NewHeight, Invisible;
1.18 cvs 2082: Width: NewWidth, Invisible;</pre>
2083: </blockquote>
2084: </div>
2085: </div>
1.1 cvs 2086:
1.18 cvs 2087: <div class="section">
1.37 cvs 2088: <h2><a name="sectb33" id="sectb33">Some examples</a></h2>
1.1 cvs 2089:
1.30 cvs 2090: <p>In order to illustrate the principles of the document model and the syntax
2091: of the S language, this section presents two examples of structure schemas.
2092: One defines a class of documents, the other defines a class of objects.</p>
1.1 cvs 2093:
1.18 cvs 2094: <div class="subsection">
1.37 cvs 2095: <h3><a name="sectc331" id="sectc331">A class of documents: articles</a></h3>
1.1 cvs 2096:
1.30 cvs 2097: <p>This example shows a possible structure for articles published in a
2098: journal. Text between braces is comments.</p>
1.18 cvs 2099: <pre>STRUCTURE Article; { This schema defines the Article class }
1.1 cvs 2100: DEFPRES ArticleP; { The default presentation schema is
2101: ArticleP }
2102: ATTR { Global attribute definitions }
2103: WordType = Definition, IndexWord, DocumentTitle;
2104: { A single global attribute is defined, with three values }
2105: STRUCT { Definition of the generic structure }
2106: Article = BEGIN { The Article class has an aggregate
2107: structure }
2108: Title = BEGIN { The title is an aggregate }
2109: French_title =
2110: Text WITH Language='Fran\347ais';
2111: English_title =
2112: Text WITH Language='English';
2113: END;
2114: Authors =
2115: LIST OF (Author
2116: (ATTR Author_type=principal,secondary)
2117: { The Author type has a local attribute }
2118: = BEGIN
2119: Author_name = Text;
2120: Info = Paragraphs ;
2121: { Paragraphs is defined later }
2122: Address = Text;
2123: END
2124: );
2125: Keywords = Text;
2126: { The journal's editor introduces the article
2127: with a short introduction, in French and
2128: in English }
2129: Introduction =
2130: BEGIN
2131: French_intr = Paragraphs WITH
2132: Language='Fran\347ais';
2133: English_intr = Paragraphs WITH
2134: Language='English';
2135: END;
2136: Body = Sections; { Sections are defined later }
2137: { Appendixes are only created on demand }
2138: ? Appendices =
2139: LIST OF (Appendix =
2140: BEGIN
2141: Appendix_Title = Text;
2142: Appendix_Contents = Paragraphs;
2143: END
2144: );
1.37 cvs 2145: ? Figures = LIST OF (Figure);
2146: ? Bibliography = LIST OF (Biblio_citation);
2147: ? Notes = LIST OF (Note);
1.1 cvs 2148: END; { End of the Article aggregate }
2149:
2150: Sections = LIST [2..*] OF (
2151: Section = { At least 2 sections }
2152: BEGIN
2153: Section_title = Text;
2154: Section_contents =
2155: BEGIN
2156: Paragraphs;
2157: Sections; { Sections at a lower level }
2158: END;
2159: END
2160: );
2161:
2162: Paragraphs = LIST OF (Paragraph = CASE OF
2163: Enumeration =
2164: LIST [2..*] OF
2165: (Item = Paragraphs);
2166: Isolated_formula = Formula;
2167: LIST OF (UNIT);
2168: END
2169: );
2170:
2171: Figure = BEGIN
1.5 cvs 2172: Figure_caption = Text;
1.1 cvs 2173: Illustration = NATURE;
2174: END;
2175:
2176: Biblio_citation = CASE OF
2177: Ref_Article =
2178: BEGIN
2179: Authors_Bib = Text;
2180: Article_Title = Text;
2181: Journal = Text;
2182: Page_Numbers = Text;
2183: Date = Text;
2184: END;
2185: Ref_Livre =
2186: BEGIN
2187: Authors_Bib; { Defined above }
2188: Book_Title = Text;
2189: Editor = Text;
2190: Date; { Defined above }
2191: END;
2192: END;
2193:
2194: Note = Paragraphs - (Ref_note);
2195:
2196: UNITS { Elements which can be used in objects }
2197:
2198: Ref_note = REFERENCE (Note);
2199: Ref_biblio = REFERENCE (Biblio_citation);
2200: Ref_figure = REFERENCE (Figure);
2201: Ref_formula = REFERENCE (Isolated_formula);
2202:
2203: EXPORT { Skeleton elements }
2204:
2205: Title,
1.5 cvs 2206: Figure with Figure_caption,
1.1 cvs 2207: Section With Section_title;
2208:
1.18 cvs 2209: END { End of the structure schema }</pre>
1.30 cvs 2210:
2211: <p>This schema is very complete since it defines both paragraphs and
1.37 cvs 2212: bibliographic citations. These element types could just as well be defined in
2213: other structure schemas, as is the case with the <tt>Formula</tt> class. All
2214: sorts of other elements can be inserted into an article, since a paragraph
2215: can contain any type of unit. Similarly, figures can be any class of document
2216: or object that the user chooses.</p>
2217:
2218: <p>Generally, an article doesn't contain appendices, but it is possible to
2219: add them on explicit request: this is the effect of the question mark before
2220: the word Appendices.</p>
1.30 cvs 2221:
1.37 cvs 2222: <p>Various types of cross-references can be put in paragraphs. They can also
1.30 cvs 2223: be placed the objects which are part of the article, since the
2224: cross-references are defined as units (<tt>UNITS</tt>).</p>
2225:
2226: <p>There is a single restriction to prevent the creation of Ref_note elements
1.18 cvs 2227: within notes.</p>
1.30 cvs 2228:
2229: <p>It is worth noting that the S language permits the definition of recursive
1.37 cvs 2230: structures like sections: a section can contain other sections (which are
2231: thus at the next lower level of the document tree). Paragraphs are also
2232: recursive elements, since a paragraph can contain an enumeration in which
2233: each element (<tt>Item</tt>) is composed of paragraphs.</p>
1.18 cvs 2234: </div>
1.1 cvs 2235:
1.18 cvs 2236: <div class="subsection">
1.37 cvs 2237: <h3><a name="sectc332" id="sectc332">A class of objects: mathematical
2238: formulas</a></h3>
1.1 cvs 2239:
1.30 cvs 2240: <p>The example below defines the <tt>Formula</tt> class which is used in
1.37 cvs 2241: Article documents. This class represents mathematical formulas with a rather
1.30 cvs 2242: simple structure, but sufficient to produce a correct rendition on the screen
1.37 cvs 2243: or printer. To support more elaborate operations (formal or numeric
2244: calculations), a finer structure should be defined. This class doesn't use
2245: any other class and doesn't define any units.</p>
1.18 cvs 2246: <pre>STRUCTURE Formula;
1.1 cvs 2247: DEFPRES FormulaP;
2248:
2249: ATTR
2250: String_type = Function_name, Variable_name;
2251:
2252: STRUCT
2253: Formula = Expression;
2254: Expression = LIST OF (Construction);
2255: Construction = CASE OF
2256: TEXT; { Simple character string }
2257: Index = Expression;
2258: Exponent = Expression;
2259: Fraction =
2260: BEGIN
1.6 cvs 2261: Numerator = Expression;
1.1 cvs 2262: Denominator = Expression;
2263: END;
2264: Root =
2265: BEGIN
2266: ? Order = TEXT;
2267: Root_Contents = Expression;
2268: END;
2269: Integral =
2270: BEGIN
2271: Integration_Symbol = SYMBOL;
2272: Lower_Bound = Expression;
2273: Upper_Bound = Expression;
2274: END;
2275: Triple =
2276: BEGIN
2277: Princ_Expression = Expression;
2278: Lower_Expression = Expression;
2279: Upper_Expression = Expression;
2280: END;
2281: Column = LIST [2..*] OF
2282: (Element = Expression);
2283: Parentheses_Block =
2284: BEGIN
2285: Opening = SYMBOL;
2286: Contents = Expression;
2287: Closing = SYMBOL;
2288: END;
2289: END; { End of Choice Constructor }
1.18 cvs 2290: END { End of Structure Schema }</pre>
1.30 cvs 2291:
2292: <p>This schema defines a single global attribute which allows functions and
1.37 cvs 2293: variables to be distinguished. In the presentation schema, this attribute can
1.1 cvs 2294: be used to choose between roman (for functions) and italic characters (for
1.18 cvs 2295: variables).</p>
1.30 cvs 2296:
1.37 cvs 2297: <p>A formula's structure is that of a mathematical expression, which is
2298: itself a sequence of mathematical constructions. A mathematical construction
2299: can be either a simple character string, an index, an exponent, a fraction, a
2300: root, etc. Each of these mathematical constructions has a sensible structure
2301: which generally includes one or more expressions, thus making the formula
2302: class's structure definition recursive.</p>
1.30 cvs 2303:
2304: <p>In most cases, the roots which appear in the formulas are square roots and
1.37 cvs 2305: their order (2) is not specified. This is why the Order component is marked
2306: optional by a question mark. When explicitly requested, it is possible to add
1.18 cvs 2307: an order to a root, for example for cube roots (order = 3).</p>
1.30 cvs 2308:
2309: <p>An integral is formed by an integration symbol, chosen by the user (simple
1.37 cvs 2310: integral, double, curvilinear, etc.), and two bounds. A more fine-grained
1.1 cvs 2311: schema would add components for the integrand and the integration variable.
1.37 cvs 2312: Similarly, the Block_Parentheses construction leaves the choice of opening
2313: and closing symbols to the user. They can be brackets, braces, parentheses,
1.18 cvs 2314: etc.</p>
2315: </div>
2316: </div>
1.37 cvs 2317: <hr />
1.18 cvs 2318: </div>
1.1 cvs 2319:
1.18 cvs 2320: <div class="chapter">
1.37 cvs 2321: <h1><a name="sect4" id="sect4">The P Language</a></h1>
1.1 cvs 2322:
1.18 cvs 2323: <div class="section">
1.37 cvs 2324: <h2><a name="sectb41" id="sectb41">Document presentation</a></h2>
1.1 cvs 2325:
1.30 cvs 2326: <p>Because of the model adopted for Thot, the presentation of documents is
1.37 cvs 2327: clearly separated from their structure and content. After having presented
1.1 cvs 2328: the logical structure of documents, we now detail the principles implemented
1.37 cvs 2329: for their presentation. The concept of <em>presentation</em> encompasses what
2330: is often called the page layout, the composition, or the document style. It
1.18 cvs 2331: is the set of operations which display the document on the screen or print it
1.37 cvs 2332: on paper. Like logical structure, document presentation is defined
1.18 cvs 2333: generically with the help of a language, called P.</p>
1.1 cvs 2334:
1.18 cvs 2335: <div class="subsection">
1.37 cvs 2336: <h3><a name="sectc411" id="sectc411">Two levels of presentation</a></h3>
1.1 cvs 2337:
1.30 cvs 2338: <p>The link between structure and presentation is clear: the logical
2339: organization of a document is used to carry out its presentation, since the
2340: purpose of the presentation is to make evident the organization of the
1.37 cvs 2341: document. But the presentation is equally dependent on the device used to
1.30 cvs 2342: render the document. Certain presentation effects, notably changes of font or
1.37 cvs 2343: character set, cannot be performed on all printers or on all screens. This is
1.30 cvs 2344: why Thot uses a two-level approach, where the presentation is first described
2345: in abstract terms, without taking into account each particular device, and
2346: then the presentation is realized within the constraints of a given
2347: device.</p>
2348:
2349: <p>Thus, presentation is only described as a function of the structure of the
1.37 cvs 2350: documents and the image that would be produced on an idealized device. For
1.1 cvs 2351: this reason, presentation descriptions do not refer to any device
1.18 cvs 2352: characteristics: they describe <em>abstract presentations</em> which can be
2353: concretized on different devices.</p>
1.30 cvs 2354:
2355: <p>A presentation description also defines a <em>generic presentation</em>,
2356: since it describes the appearance of a class of documents or objects. This
2357: generic presentation must also be applied to document and object instances,
2358: each conforming to its generic logical structure, but with all the allowances
2359: that were called to mind above: missing elements, constructed elements with
2360: other logical structures, etc.</p>
2361:
2362: <p>In order to preserve the homogeneity between documents and objects,
1.1 cvs 2363: presentation is described with a single set of tools which support the layout
2364: of a large document as well as the composition of objects like a graphical
1.37 cvs 2365: figure or mathematical formula. This unity of presentation description tools
1.1 cvs 2366: contrasts with the traditional approach, which focuses more on documents than
2367: objects and thus is based on the usual typographic conventions, such as the
2368: placement of margins, indentations, vertical spaces, line lengths,
1.18 cvs 2369: justification, font changes, etc.</p>
2370: </div>
1.1 cvs 2371:
1.18 cvs 2372: <div class="subsection">
1.37 cvs 2373: <h3><a name="sectc412" id="sectc412">Boxes</a></h3>
1.1 cvs 2374:
1.37 cvs 2375: <p>To assure the homogeneity of tools, all presentation in Thot, for
2376: documents as well as for the objects which they contain, is based on the
2377: notion of the <em>box</em>, such as was implemented in
2378: T<sub><big>E</big></sub>X.</p>
1.30 cvs 2379:
1.37 cvs 2380: <p>Corresponding to each element of the document is a box, which is the
1.1 cvs 2381: rectangle enclosing the element on the display device (screen or sheet of
1.37 cvs 2382: paper); the outline of this rectangle is not visible, except when a <a
2383: href="#sectc4230a"><tt>ShowBox</tt> rule</a> applies to the element. The
2384: sides of the box are parallel to the sides of the screen or the sheet of
2385: paper. By way of example, a box is associated with a character string, a line
2386: of text, a page, a paragraph, a title, a mathematical formula, or a table
2387: cell.</p>
1.30 cvs 2388:
2389: <p>Whatever element it corresponds to, each box possesses four sides and four
1.18 cvs 2390: axes, which we designate as follows (<a href="#boxes">see figure</a>):</p>
2391: <dl>
1.30 cvs 2392: <dt><tt>Top</tt></dt>
2393: <dd>the upper side,</dd>
2394: <dt><tt>Bottom</tt></dt>
2395: <dd>the lower side,</dd>
2396: <dt><tt>Left</tt></dt>
2397: <dd>the left side,</dd>
2398: <dt><tt>Right</tt></dt>
2399: <dd>the right side,</dd>
2400: <dt><tt>VMiddle</tt></dt>
2401: <dd>the vertical axis passing through the center of the box,</dd>
2402: <dt><tt>HMiddle</tt></dt>
2403: <dd>the horizontal axis passing through the center of the box,</dd>
2404: <dt><tt>VRef</tt></dt>
2405: <dd>the vertical reference axis,</dd>
2406: <dt><tt>HRef</tt></dt>
2407: <dd>the horizontal reference axis.</dd>
1.18 cvs 2408: </dl>
2409:
2410: <div class="figure">
1.37 cvs 2411: <hr />
1.18 cvs 2412: <pre> Left VRef VMiddle Right
1.1 cvs 2413: : :
2414: Top -----------------------------
2415: | : : |
2416: | : : |
2417: | : : |
2418: | : : |
2419: | : : |
2420: HMiddle ..|...........................|..
2421: | : : |
2422: | : : |
2423: HRef ..|...........................|..
2424: | : : |
2425: | : : |
2426: Bottom -----------------------------
1.18 cvs 2427: : :</pre>
1.30 cvs 2428:
1.37 cvs 2429: <p align="center"><em><a name="boxes" id="boxes">The sides and axes of
1.30 cvs 2430: boxes</a><em></em></em></p>
1.37 cvs 2431: <hr />
1.30 cvs 2432: </div>
1.19 cvs 2433:
1.37 cvs 2434: <p>The principal role of boxes is to set the extent and position of the
2435: images of the different elements of a document with respect to each other on
2436: the reproduction device. This is done by defining relations between the boxes
2437: of different elements which give relative extents and positions to these
1.18 cvs 2438: boxes.</p>
1.30 cvs 2439:
2440: <p>There are three types of boxes:</p>
1.18 cvs 2441: <ul>
1.30 cvs 2442: <li>boxes corresponding to structural elements of the document,</li>
2443: <li>presentation boxes,</li>
2444: <li>page layout boxes.</li>
1.18 cvs 2445: </ul>
1.30 cvs 2446:
1.37 cvs 2447: <p><strong>Boxes corresponding to structural elements of the
2448: document</strong> are those which linked to each of the elements (base or
2449: structured) of the logical structure of the document. Such a box contains all
2450: the contents of the element to which it corresponds (there is an exception:
2451: see <a href="#sectc4220">rules <tt>VertOverflow</tt> and
2452: <tt>HorizOverflow</tt></a>). These boxes form a tree-like structure,
2453: identical to that of the structural elements to which they correspond. This
2454: tree expresses the inclusion relationships between the boxes: a box includes
2455: all the boxes of its subtree. On the other hand, there are no predefined
2456: rules for the relative positions of the included boxes. If they are at the
2457: same level, they can overlap, be contiguous, or be disjoint. The rules
2458: expressed in the generic presentation specify their relative positions.</p>
1.30 cvs 2459:
2460: <p><strong>Presentation boxes</strong> represent elements which are not found
1.37 cvs 2461: in the logical structure of the document but which are added to meet the
2462: needs of presentation. These boxes are linked to the elements of the logical
1.30 cvs 2463: structure that are best suited to bringing them out. For example, they are
2464: used to add the character string ``Summary:'' before the summary in the
2465: presentation of a report or to represent the fraction bar in a formula, or
1.37 cvs 2466: also to make the title of a field in a form appear. These elements have no
1.30 cvs 2467: role in the logical structure of the document: the presence of a Summary
2468: element in the document does not require the creation of another structural
1.37 cvs 2469: object to hold the word ``Summary''. Similarly, if a Fraction element
2470: contains both a Numerator element and a Denominator element, the fraction bar
2471: has no purpose structurally. On the other hand, these elements of the
2472: presentation are important for the reader of the reproduced document or for
2473: the user of an editor. This is why they must appear in the document's image.
2474: It is the generic presentation which specifies the presentation boxes to add
2475: by indicating their content (a base element for which the value is specified)
2476: and the position that they must take in the tree of boxes. During editing,
2477: these boxes cannot be modified by the user.</p>
2478:
2479: <p><strong>Page layout boxes</strong> are boxes created implicitly by the
2480: page layout rules. These rules indicate how the contents of a structured
2481: element must be broken into lines and pages. In contrast to presentation
2482: boxes, these line and page boxes do not depend on the logical structure of
2483: the document, but rather on the physical constraints of the output devices:
2484: character size, height and width of the window on the screen or of the sheet
2485: of paper.</p>
1.18 cvs 2486: </div>
1.1 cvs 2487:
1.18 cvs 2488: <div class="subsection">
1.37 cvs 2489: <h3><a name="sectc413" id="sectc413">Views and visibility</a></h3>
1.1 cvs 2490:
1.30 cvs 2491: <p>One of the operations that one might wish to perform on a document is to
1.37 cvs 2492: view it is different ways. For this reason, it is possible to define several
1.18 cvs 2493: <em>views</em> for the same document, or better yet, for all documents of the
1.37 cvs 2494: same class. A view is not a different presentation of the document, but
1.1 cvs 2495: rather a filter which only allows the display of certain parts of the
1.37 cvs 2496: document. For example, it might be desirable to see only the titles of
1.1 cvs 2497: chapters and sections in order to be able to move rapidly through the
1.37 cvs 2498: document. Such a view could be called a ``table of contents''. It might also
1.1 cvs 2499: be desirable to see only the mathematical formulas of a document in order to
1.37 cvs 2500: avoid being distracted by the non-mathematical aspects of the document. A
1.18 cvs 2501: ``mathematics'' view could provide this service.</p>
1.30 cvs 2502:
2503: <p>Views, like presentation, are based on the generic logical structure. Each
1.1 cvs 2504: document class, and each generic presentation, can be provided with views
1.37 cvs 2505: which are particularly useful for that class or presentation. For each view,
1.18 cvs 2506: the <em>visibility</em> of elements is defined, indicated whether or not the
1.37 cvs 2507: elements must be presented to the user. The visibility is calculated as a
1.1 cvs 2508: function of the type of the elements or their hierarchical position in the
1.37 cvs 2509: structure of the document. Thus, for a table of contents, all the ``Chapter
2510: Title'' and ``Section Title'' elements are made visible. However, the
1.1 cvs 2511: hierarchical level could be used to make the section titles invisible below a
1.37 cvs 2512: certain threshold level. By varying this threshold, the granularity of the
2513: view can be varied. In the ``mathematics'' view, only Formula elements would
1.18 cvs 2514: be made visible, no matter what their hierarchical level.</p>
1.30 cvs 2515:
2516: <p>Because views are especially useful for producing a synthetic image of the
1.1 cvs 2517: document, it is necessary to adapt the presentation of the elements to the
1.37 cvs 2518: view in which they appear. For example, it is inappropriate to have a page
2519: break before every chapter title in the table of contents. Thus, generic
1.1 cvs 2520: presentations take into account the possible views and permit each element
1.18 cvs 2521: type's presentation to vary according the view in which its image appears.</p>
2522: </div>
1.1 cvs 2523:
1.18 cvs 2524: <div class="subsection">
1.37 cvs 2525: <h3><a name="sectc414" id="sectc414">Pages</a></h3>
1.1 cvs 2526:
1.30 cvs 2527: <p>Presentation schemas can be defined which display the document as a long
1.37 cvs 2528: scroll, without page breaks. This type of schema is particularly well-suited
1.1 cvs 2529: to the initial phase of work on a document, where jumps from page to page
1.37 cvs 2530: would hinder composing and reading the document on a screen. But, once the
2531: document is written, it may be desirable to display the document on the
2532: screen in the same manner in which it will be printed. So, the presentation
2533: schema must define pages.</p>
2534:
2535: <p>The P language permits the specification of the dimensions of pages as
2536: well as their composition. It is possible to generate running titles, page
2537: numbers, zones at the bottom of the page for notes, etc. The editor follows
1.30 cvs 2538: this model and inserts page break marks in the document which are used during
2539: printing, insuring that the pages on paper are the same as on the screen.</p>
2540:
2541: <p>Once a document has been edited with a presentation schema defining pages,
1.37 cvs 2542: it contains page marks. But it is always possible to edit the document using
2543: a schema without pages. In this case, the page marks are simply ignored by
2544: the editor. They are considered again as soon as a schema with pages is used.
1.18 cvs 2545: Thus, the user is free to choose between schemas with and without pages.</p>
1.30 cvs 2546:
2547: <p>Thot treats the page break, rather than the page itself, as a box. This
2548: page break box contains all the elements of one page's footer, a rule marking
1.37 cvs 2549: the edge of this page, and all the elements of the next page's header. The
2550: elements of the header and footer can be running titles, page number, notes,
2551: etc. All these elements, as well as their content and graphical appearance,
2552: are defined by the generic presentation.</p>
1.18 cvs 2553: </div>
1.1 cvs 2554:
1.18 cvs 2555: <div class="subsection">
1.37 cvs 2556: <h3><a name="sectc415" id="sectc415">Numbering</a></h3>
1.1 cvs 2557:
1.30 cvs 2558: <p>Many elements are numbered in documents: pages, chapters, sections,
2559: formulas, theorems, notes, figures, bibliographic references, exercises,
1.37 cvs 2560: examples, lemmas, etc. Because Thot has a notion of logical structure, all of
1.30 cvs 2561: these numbers (with the exception of pages) are redundant with information
1.37 cvs 2562: implicit in the logical structure of the document. Such numbers are simply a
2563: way to make the structure of the document more visible. So, they are part of
1.30 cvs 2564: the document's presentation and are calculated by the editor from the logical
1.37 cvs 2565: structure. The structure does not contain numbers as such; it only defines
1.1 cvs 2566: relative structural positions between elements, which serve as ordering
1.18 cvs 2567: relations on these elements.</p>
1.30 cvs 2568:
2569: <p>If the structure schema defines the body of a document as a sequence of at
1.18 cvs 2570: least two chapters:</p>
2571: <pre>Body = LIST [2..*] OF Chapter;</pre>
1.30 cvs 2572:
2573: <p>the sequence defined by the list constructor is ordered and each chapter
1.37 cvs 2574: can be assigned a number based on its rank in the Body list. Therefore, all
2575: elements contained in lists a the structure of a document can be numbered,
2576: but they are not the only ones. The tree structure induced by the aggregate,
1.18 cvs 2577: list, and choice constructors (excluding references) defines a total order on
1.37 cvs 2578: the elements of the document's primary structure. So, it is possible to
1.18 cvs 2579: define a numbering which uses this order, filtering elements according to
2580: their type so that only certain element types are taken into account in the
1.37 cvs 2581: numbering. In this way, it possible to number all the theorems and lemmas of
1.18 cvs 2582: a chapter in the same sequence of numbers, even when they are not part of the
2583: same list constructor and appear at different levels of the document's tree.
2584: By changing the filter, they can be numbered separately: one sequence of
2585: numbers for theorems, another for the lemmas.</p>
1.30 cvs 2586:
2587: <p>Since they are calculated from the document's logical structure and only
2588: for the needs of the presentation, numbers are presentation elements,
2589: described by presentation boxes, just like the fraction bar or the word
1.37 cvs 2590: ``Summary''. Nevertheless, numbers differ from these other boxes because
2591: their content varies from instance to instance, even though they are of the
2592: same type, whereas all fraction bars are horizontal lines and the same word
1.30 cvs 2593: ``Summary'' appears at the head of every document's summary.</p>
1.18 cvs 2594: </div>
1.1 cvs 2595:
1.18 cvs 2596: <div class="subsection">
1.37 cvs 2597: <h3><a name="sectc416" id="sectc416">Presentation properties</a></h3>
1.1 cvs 2598:
1.34 cvs 2599: <p>The principal properties which determine document presentation are the
1.18 cvs 2600: <em>positions</em> and <em>dimensions</em> of boxes, the <em>font</em>, the
2601: <em>style</em>, the <em>size</em>, the <em>underlining</em> and the
1.37 cvs 2602: <em>color</em> of their content. From these properties, and some others of
1.34 cvs 2603: less importance, it is possible to represent the usual typographic properties
1.37 cvs 2604: for the textual parts of the document. These same properties can be used to
1.1 cvs 2605: describe the geometry of the non-textual elements, even though they are
1.18 cvs 2606: two-dimensional elements unlike the text, which is linear.</p>
1.30 cvs 2607:
1.37 cvs 2608: <p>As we have already seen, the positions of the boxes always respect the
1.30 cvs 2609: rule of enclosure: a box in the tree encloses all the boxes of the next lower
1.37 cvs 2610: level which are attached to it. The positional properties permit the
1.30 cvs 2611: specification of the position of each box in relation to the enclosing box or
1.37 cvs 2612: to its sibling boxes (boxes directly attached to the same enclosing box in
2613: the tree of boxes).</p>
1.30 cvs 2614:
1.37 cvs 2615: <p>The presentation properties also provide control over the dimensions of
2616: the boxes. The dimensions of a box can depend either on its content or on its
1.1 cvs 2617: context (its sibling boxes and the enclosing box). Each dimension (height or
1.18 cvs 2618: width) can be defined independently of the other.</p>
1.30 cvs 2619:
1.34 cvs 2620: <p>Because of the position and dimension properties, it is possible to do the
1.1 cvs 2621: same things that are normally done in typography by changing margins, line
1.37 cvs 2622: lengths, and vertical or horizontal skips. This approach can also align or
1.18 cvs 2623: center elements and groups of elements.</p>
1.30 cvs 2624:
1.34 cvs 2625: <p>In contrast to the position and dimension properties, the font, style,
1.30 cvs 2626: size, underlining, and color do not concern the box itself (the rectangle
1.37 cvs 2627: delimiting the element), but its content. These properties indicate the
2628: typographic attributes which must be applied to the text contained in the
2629: box, and by extension, to all base elements.</p>
1.30 cvs 2630:
1.34 cvs 2631: <p>For text, the font property is used to change the family of characters
1.1 cvs 2632: (Times, Helvetica, Courier, etc.); the style is used to obtain italic or
1.37 cvs 2633: roman, bold or light characters; the size determines the point size of the
1.1 cvs 2634: characters; underlining defines the type and thickness of the lines drawn
1.18 cvs 2635: above, below, or through the characters.</p>
1.30 cvs 2636:
1.34 cvs 2637: <p>For graphics, the line style property can be either solid, dotted, or
2638: dashed; the line thickness property controls the width of the lines; the fill
2639: pattern property determines how closed geometric figures must be filled.</p>
1.30 cvs 2640:
1.34 cvs 2641: <p>While some of the properties which determine the appearance of a box's
1.1 cvs 2642: contents make sense only for one content type (text or graphic), other
1.34 cvs 2643: properties apply to all content types: these are the color properties. These
1.18 cvs 2644: indicate the color of lines and the background color.</p>
2645: </div>
2646: </div>
1.1 cvs 2647:
1.18 cvs 2648: <div class="section">
1.37 cvs 2649: <h2><a name="sectb42" id="sectb42">Presentation description language</a></h2>
1.30 cvs 2650:
1.34 cvs 2651: <p>A generic presentation defines the values of presentation properties (or
1.37 cvs 2652: the way to calculate those values) for a generic structure, or more
2653: precisely, for all the element types and all the global and local attributes
2654: defined in that generic structure. This definition of the presentation
2655: properties is made with the P language. A program written in this language,
2656: that is a generic presentation expressed in P, is call a <em>presentation
2657: schema</em>. This section describes the syntax and semantics of the language,
2658: using the same <a href="#sectc321">meta-language</a> as was used for the
2659: definition of the S language.</p>
2660:
2661: <p>Recall that it is possible to write many different presentation schemas
2662: for the same class of documents or objects. This allows users to choose for a
2663: document the graphical appearance which best suits their type of work or
1.18 cvs 2664: their personal taste.</p>
1.1 cvs 2665:
1.18 cvs 2666: <div class="subsection">
1.37 cvs 2667: <h3><a name="sectc421" id="sectc421">The organization of a presentation
2668: schema</a></h3>
1.1 cvs 2669:
1.30 cvs 2670: <p>A presentation schema begins with the word <tt>PRESENTATION</tt> and ends
1.37 cvs 2671: with the word <tt>END</tt>. The word <tt>PRESENTATION</tt> is followed by the
2672: name of the generic structure to which the presentation will be applied. This
1.30 cvs 2673: name must be the same as that which follows the keyword <tt>STRUCTURE</tt> in
2674: the structure schema associated with the presentation schema.</p>
2675:
1.37 cvs 2676: <p>After this declaration of the name of the structure, the following
2677: sections appear (in order):</p>
1.18 cvs 2678: <ul>
1.37 cvs 2679: <li>Declarations of
1.30 cvs 2680: <ul>
2681: <li>all views,</li>
2682: <li>printed views,</li>
2683: <li>counters,</li>
2684: <li>presentation constants,</li>
2685: <li>variables,</li>
2686: </ul>
2687: </li>
2688: <li>default presentation rules,</li>
2689: <li>presentation box and page layout box definitions,</li>
2690: <li>presentation rules for structured elements,</li>
2691: <li>presentation rules for attributes,</li>
2692: <li>rules for transmitting values to attributes of included documents.</li>
1.18 cvs 2693: </ul>
1.30 cvs 2694:
2695: <p>Each of these sections is introduced by a keyword which is followed by a
1.37 cvs 2696: sequence of declarations. Every section is optional.</p>
1.18 cvs 2697: <pre> SchemaPres ='PRESENTATION' ElemID ';'
1.1 cvs 2698: [ 'VIEWS' ViewSeq ]
2699: [ 'PRINT' PrintViewSeq ]
2700: [ 'COUNTERS' CounterSeq ]
2701: [ 'CONST' ConstSeq ]
2702: [ 'VAR' VarSeq ]
2703: [ 'DEFAULT' ViewRuleSeq ]
2704: [ 'BOXES' BoxSeq ]
2705: [ 'RULES' PresentSeq ]
2706: [ 'ATTRIBUTES' PresAttrSeq ]
2707: [ 'TRANSMIT' TransmitSeq ]
2708: 'END' .
1.18 cvs 2709: ElemID = NAME .</pre>
2710: </div>
1.1 cvs 2711:
1.18 cvs 2712: <div class="subsection">
1.37 cvs 2713: <h3><a name="sectc422" id="sectc422">Views</a></h3>
1.1 cvs 2714:
1.37 cvs 2715: <p>Each of the possible views must be declared in the presentation schema. As
2716: has <a href="#views">already been described</a>, the presentation rules for
2717: an element type can vary according to the view in which the element appears.
2718: The name of the view is used to designate the view to which the presentation
2719: rules apply (see the <a href="#inkeyword"><tt>IN</tt> instruction</a>). The
1.1 cvs 2720: definition of the view's contents are dispersed throughout the presentation
1.37 cvs 2721: rules attached to the different element types and attributes. The
1.18 cvs 2722: <tt>VIEWS</tt> section is simply a sequence of view names separated by commas
2723: and terminated by a semi-colon.</p>
1.30 cvs 2724:
2725: <p>One of the view names (and only one) can be followed by the keyword
1.37 cvs 2726: <tt>EXPORT</tt>. This keyword identifies the view which presents the members
2727: of the document class in <a href="#sectc3213">skeleton form</a>. The
2728: graphical appearance and the content of this view is defined just as with
1.18 cvs 2729: other views, but it is useless to specify presentation rules concerning this
2730: view for the elements which are not loaded in the skeleton form.</p>
1.30 cvs 2731:
2732: <p>It is not necessary to declare any views; in this case there is a single
1.37 cvs 2733: unnamed view. If many views are declared, the first view listed is considered
2734: the principal view. The principal view is the one to which all rules that are
1.18 cvs 2735: not preceded by an indication of a view will apply (see the <a
2736: href="#inkeyword">instruction <tt>IN</tt></a>).</p>
1.30 cvs 2737:
2738: <p>The principal view is the the one which the editor presents on the screen
1.37 cvs 2739: when the user asks to create or edit a document. Thus, it makes sense to put
2740: the most frequently used view at the head of the list. But if the structure
1.18 cvs 2741: schema contains <a href="#sectc3213">skeleton elements</a> and is loaded in
2742: its skeleton form, the view whose name is followed by the keyword
2743: <tt>EXPORT</tt> will be opened and no other views can be opened.</p>
2744: <pre> 'VIEWS' ViewSeq
1.1 cvs 2745: ViewSeq = ViewDeclaration
1.30 cvs 2746: < ',' ViewDeclaration > ';' .
1.1 cvs 2747: ViewDeclaration = ViewID [ 'EXPORT' ] .
1.18 cvs 2748: ViewID = NAME .</pre>
1.30 cvs 2749:
1.18 cvs 2750: <blockquote class="example">
1.30 cvs 2751: <p><strong>Example:</strong></p>
2752:
2753: <p>When editing a report, it might be useful have views of the table of
1.37 cvs 2754: contents and of the mathematical formulas, in addition to the principal
2755: view which shows the document in its entirety. To achieve this, a
2756: presentation schema for the Report class would have the following
2757: <tt>VIEWS</tt> section:</p>
1.30 cvs 2758: <pre>VIEWS
1.18 cvs 2759: Full_text, Table_of_contents, Formulas;</pre>
1.30 cvs 2760:
2761: <p>The contents of these views are specified in the presentation rules of
2762: the schema.</p>
1.18 cvs 2763: </blockquote>
2764: </div>
1.1 cvs 2765:
1.18 cvs 2766: <div class="subsection">
1.37 cvs 2767: <h3><a name="sectc423" id="sectc423">Print Views</a></h3>
1.1 cvs 2768:
1.37 cvs 2769: <p>When editing a document, each view specified by the <tt>VIEWS</tt>
2770: instruction is presented in a different window.</p>
1.30 cvs 2771:
2772: <p>When printing a document, it is possible to print any number of views,
1.37 cvs 2773: chosen from among all the views which the editor can display. Print views, as
2774: well as the order in which they must be printed, are indicated by the
2775: <tt>PRINT</tt> instruction. It appears after the <tt>VIEWS</tt> instruction
2776: and is formed of the keyword <tt>PRINT</tt> followed by the ordered list of
2777: print view names. The print view names are separated by commas and followed
2778: by a semi-colon. A print view name is a view name declared in the
2779: <tt>VIEWS</tt> instruction.</p>
1.18 cvs 2780: <pre> 'PRINT' PrintViewSeq
1.30 cvs 2781: PrintViewSeq = PrintView < ',' PrintView > ';' .
1.37 cvs 2782: PrintView = ViewID .</pre>
1.30 cvs 2783:
2784: <p>If the <tt>PRINT</tt> instruction is absent, the printing program will
2785: print only the principal view (the first view specified by the <tt>VIEWS</tt>
1.18 cvs 2786: instruction or the single, unnamed view when there is no <tt>VIEWS</tt>
2787: instruction).</p>
1.30 cvs 2788:
1.18 cvs 2789: <blockquote class="example">
1.30 cvs 2790: <p><strong>Example:</strong></p>
2791:
2792: <p>Consider a Report presentation using the view declarations from the
1.37 cvs 2793: preceding example. Suppose we want to print the full text and table of
1.30 cvs 2794: contents views, but not the Formulas view, which is only useful when
1.37 cvs 2795: editing. A sensible printing order would be to print the full text followed
2796: by the table of contents. To obtain this result when printing, the
2797: presentation schema would say:</p>
1.30 cvs 2798: <pre>PRINT
1.37 cvs 2799: Full_text, Table_of_contents;</pre>
1.18 cvs 2800: </blockquote>
2801: </div>
2802:
2803: <div class="subsection">
1.37 cvs 2804: <h3><a name="sectc424" id="sectc424">Counters</a></h3>
1.18 cvs 2805:
1.30 cvs 2806: <p>A presentation has a <em>counter</em> for each type of number in the
1.37 cvs 2807: presentation. All counters, and therefore all types of numbers, used in the
1.18 cvs 2808: schema must be declared after the <tt>COUNTERS</tt> keyword.</p>
1.30 cvs 2809:
2810: <p>Each counter declaration is composed of a name identifying the counter
1.1 cvs 2811: followed by a colon and the counting function to be applied to the counter.
1.18 cvs 2812: The counter declaration ends with a semi-colon.</p>
1.30 cvs 2813:
2814: <p>The counting function indicates how the counter values will be calculated.
1.37 cvs 2815: Three types of counting functions are available. The first type is used to
1.16 cvs 2816: count the elements of a list or aggregate: it assigns to the counter the rank
1.37 cvs 2817: of the element in the list or aggregate. More precisely, the function</p>
1.18 cvs 2818: <pre>RANK OF ElemID [ LevelAsc ] [ INIT AttrID ]
2819: [ 'REINIT' AttrID ]</pre>
1.30 cvs 2820:
2821: <p>indicates that when an element creates, by a creation rule (see the <a
1.18 cvs 2822: href="#sectc4232"><tt>Create</tt> instructions</a>), a presentation box
1.37 cvs 2823: containing the counter value, this value is the rank of the creating element,
1.18 cvs 2824: if it is of type <tt>ElemID</tt>, otherwise the rank of the first element of
2825: type <tt>ElemID</tt> which encloses the creating element in the logical
2826: structure of the document.</p>
1.30 cvs 2827:
2828: <p>The type name can be preceded by a star in the special case where the
1.18 cvs 2829: structure schema defines an element of whose <tt>ElemID</tt> is the same as
2830: that of an <a href="#sectd3284">inclusion</a> without expansion or with
1.37 cvs 2831: partial expansion. To resolve this ambiguity, the <tt>ElemID</tt> alone
1.18 cvs 2832: refers to the type defined in the structure schema while the <tt>ElemID</tt>
2833: preceded by a star refers to the included type.</p>
1.30 cvs 2834:
1.37 cvs 2835: <p>The type name <tt>ElemID</tt> can be followed by an integer. That number
2836: represents the relative level, among the ancestors of the creating element,
2837: of the element whose rank is asked. If that relative level <i>n</i> is
2838: unsigned, the <i>n</i><sup>th</sup> element of type <tt>ElemID</tt>
2839: encountered when travelling the logical structure from the root to the
2840: creating element is taken into account. If the relative level is negative,
2841: the logical structure is travelled in the other direction, from the creating
2842: element to the root.</p>
1.30 cvs 2843:
1.37 cvs 2844: <p>The function can end with the keyword <tt>INIT</tt> followed by the name
2845: of a numeric attribute (and only a numeric attribute). Then, the rank of the
1.30 cvs 2846: first element of the list or aggregate is considered to be the value of this
1.1 cvs 2847: attribute, rather than the default value of 1, and the rank of the other
1.37 cvs 2848: elements is shifted accordingly. The attribute which determines the initial
1.18 cvs 2849: value is searched on the element itself and on its ancestors.</p>
1.30 cvs 2850:
2851: <p>The function can end with the keyword <tt>REINIT</tt> followed by the name
1.37 cvs 2852: of a numeric attribute (and only a numeric attribute). Then, if an element to
1.30 cvs 2853: be counted has this attribute, the counter value for this element is the
1.1 cvs 2854: attribute value and the following elements are numbered starting from this
1.18 cvs 2855: value.</p>
1.30 cvs 2856:
2857: <p>When the <tt>RANK</tt> function is written</p>
1.18 cvs 2858: <pre>RANK OF Page [ ViewID ] [ INIT AttrID ]</pre>
1.30 cvs 2859:
2860: <p>(<tt>Page</tt>is a keyword of the P language), the counter takes as its
2861: value the number of the page on which the element which creates the
1.37 cvs 2862: presentation box containing the number appears. This is done as if the pages
2863: of the document form a list for each view. The counter only takes into
1.30 cvs 2864: account the pages of the relevant view, that is the view displaying the
1.37 cvs 2865: presentation box whose contents take the value of the number. However, if the
2866: keyword <tt>Page</tt> is followed by the name of a view (between
2867: parentheses), it is the pages of that view that are taken into account. As in
2868: the preceding form, the <tt>RANK</tt> function applied to pages can end with
2869: the <tt>INIT</tt> keyword followed by the name of a numeric attribute which
2870: sets the value of the first page's number. This attribute must be a local
1.30 cvs 2871: attribute of the document itself, and not of one of its components.</p>
2872:
2873: <p>The second counting function is used to count the occurrences of a certain
1.37 cvs 2874: element type in a specified context. The instruction</p>
1.18 cvs 2875: <pre>SET n ON Type1 ADD m ON Type2 [ INIT AttrID ]</pre>
1.30 cvs 2876:
2877: <p>says that when the document is traversed from beginning to end (in the
2878: order induced by the logical structure), the counter is assigned the value
1.18 cvs 2879: <tt>n</tt> each time an element of type <tt>Type1</tt> is encountered, no
2880: matter what the current value of the counter, and the value <tt>m</tt> is
2881: added to the current value of the counter each time an element of type
2882: <tt>Type2</tt> is encountered.</p>
1.30 cvs 2883:
2884: <p>As with the <tt>RANK</tt> function, the type names can be preceded by a
2885: star to resolve the ambiguity of included elements.</p>
2886:
1.37 cvs 2887: <p>If the function ends with the keyword <tt>INIT</tt> followed by the name
2888: of an attribute and if the document possesses this attribute, the value of
2889: this attribute is used in place of <tt>n</tt>. The attribute must be numeric.
2890: It is searched on the element itself and on its ancestors.</p>
1.30 cvs 2891:
2892: <p>This function can also be used with the <tt>Page</tt> keyword in the place
1.37 cvs 2893: of <tt>Type1</tt> or <tt>Type2</tt>. In the first case, the counter is
1.18 cvs 2894: reinitialized on each page with the value <tt>n</tt>, while in the second
1.37 cvs 2895: case, it is incremented by <tt>m</tt> on each page. As with the preceding
1.18 cvs 2896: counting function, the word <tt>Page</tt> can be followed by a name between
1.37 cvs 2897: parentheses. In this case, the name specifies a view whose pages are taken
1.18 cvs 2898: into account.</p>
1.30 cvs 2899:
2900: <p>The definition of a counter can contain several <tt>SET</tt> functions and
1.37 cvs 2901: several <tt>ADD</tt> functions, each with a different value. The total number
1.18 cvs 2902: of counting functions must not be greater than 6.</p>
1.30 cvs 2903:
1.37 cvs 2904: <p>The third counting function is used to count the elements of a certain
2905: type encountered when travelling from the creating element to the root of the
2906: logical structure. The creating element is included if it is of that type.
1.18 cvs 2907: That function is written</p>
2908: <pre>RLEVEL OF Type</pre>
1.30 cvs 2909:
2910: <p>where <tt>Type</tt> represents the type of the elements to be counted.</p>
2911:
2912: <p>The formal definition of counter declarations is:</p>
1.18 cvs 2913: <pre> 'COUNTERS' CounterSeq
1.30 cvs 2914: CounterSeq = Counter < Counter > .
1.1 cvs 2915: Counter = CounterID ':' CounterFunc ';' .
2916: CounterID = NAME .
2917: CounterFunc = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]
1.16 cvs 2918: [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /
1.30 cvs 2919: SetFunction < SetFunction >
2920: AddFunction < AddFunction >
1.16 cvs 2921: [ 'INIT' AttrID ] /
2922: 'RLEVEL' 'OF' ElemID .
1.1 cvs 2923: SLevelAsc = [ '-' ] LevelAsc .
2924: LevelAsc = NUMBER .
2925: SetFunction = 'SET' CounterValue 'ON' TypeOrPage .
2926: AddFunction = 'ADD' CounterValue 'ON' TypeOrPage .
2927: TypeOrPage = 'Page' [ '(' ViewID ')' ] /
1.16 cvs 2928: [ '*' ] ElemID .
1.18 cvs 2929: CounterValue = NUMBER .</pre>
1.30 cvs 2930:
1.18 cvs 2931: <blockquote class="example">
1.30 cvs 2932: <p><strong>Example:</strong></p>
2933:
2934: <p>If the body of a chapter is defined as a sequence of sections in the
2935: structure schema:</p>
2936: <pre>Chapter_body = LIST OF (Section =
1.1 cvs 2937: BEGIN
2938: Section_Title = Text;
2939: Section_Body = Paragraphs;
2940: END
1.18 cvs 2941: );</pre>
1.30 cvs 2942:
2943: <p>the section counter is declared:</p>
2944: <pre>SectionCtr : RANK OF Section;</pre>
2945:
2946: <p>and the display of the section number before the section title is
2947: obtained by a <a href="#sectc4232"><tt>CreateBefore</tt> rule</a> attached
2948: the <tt>Section_Title</tt> type, which creates a presentation box whose
2949: content is the value of the <tt>SectionCtr</tt> counter (see the <a
2950: href="#sectc4231"><tt>Content</tt> instruction</a>).</p>
2951:
2952: <p>In order to number the formulas separately within each chapter, the
2953: formula counter is declared:</p>
2954: <pre>FormulaCtr : SET 0 ON Chapter ADD 1 ON Formula;</pre>
2955:
1.37 cvs 2956: <p>and the display of the formula number in the right margin, alongside
2957: each formula, is obtained by a <tt>CreateAfter</tt> instruction attached to
2958: the <tt>Formula</tt> type, which creates a presentation box whose content
2959: is the value of the <tt>FormulaCtr</tt> counter.</p>
1.30 cvs 2960:
2961: <p>To number the page chapter by chapter, with the first page of each
2962: chapter having the number 1, the counter definition would be</p>
2963: <pre>ChapterPageCtr : SET 0 ON Chapter ADD 1 ON Page;</pre>
2964:
2965: <p>If there is also a chapter counter</p>
2966: <pre>ChapterCtr : RANK OF Chapter;</pre>
2967:
1.37 cvs 2968: <p>the <a href="#sectc4231">content</a> of a presentation box created at
2969: the top of each page could be defined as:</p>
1.30 cvs 2970: <pre>Content : (VALUE(ChapterCtr, URoman) TEXT '-'
1.18 cvs 2971: VALUE(ChapterPageCtr, Arabic));</pre>
1.30 cvs 2972:
2973: <p>Thus, the presentation box contains the number of the chapter in
2974: upper-case roman numerals followed by a hyphen and the number of the page
2975: within the chapter in arabic numerals.</p>
1.18 cvs 2976: </blockquote>
1.30 cvs 2977:
1.18 cvs 2978: <blockquote class="example">
1.30 cvs 2979: <p><strong>Example:</strong></p>
2980:
1.37 cvs 2981: <p>To count tables and figures together in a document of the chapter type,
2982: a counter could be defined using:</p>
1.30 cvs 2983: <pre>CommonCtr : SET 0 ON Chapter ADD 1 ON Table
1.18 cvs 2984: ADD 1 ON Figure;</pre>
2985: </blockquote>
2986: </div>
1.1 cvs 2987:
1.18 cvs 2988: <div class="subsection">
1.37 cvs 2989: <h3><a name="sectc425" id="sectc425">Presentation constants</a></h3>
1.1 cvs 2990:
1.30 cvs 2991: <p>Presentation constants are used in the definition of the content of
1.37 cvs 2992: presentation boxes. This content is used in <a href="#sectc426">variable
2993: definitions</a> and in the <a href="#sectc4231"><tt>Content</tt> rule</a>.
2994: The only presentation constants which can be used are character strings,
1.2 cvs 2995: mathematical symbols, graphical elements, and pictures, that is to say, base
1.18 cvs 2996: elements.</p>
1.30 cvs 2997:
2998: <p>Constants can be defined directly in the variables or presentation boxes
1.37 cvs 2999: (<tt>Content</tt> rule) which use them. But it is only necessary them to
1.1 cvs 3000: declare once, in the constant declaration section, even though they are used
1.37 cvs 3001: in many variables or boxes. Thus, each declared constant has a name, which
1.1 cvs 3002: allows it to be designated whenever it is used, a type (one of the four base
3003: types) and a value (a character string or a single character for mathematical
1.18 cvs 3004: symbols and graphical elements).</p>
1.30 cvs 3005:
1.37 cvs 3006: <p>The constant declarations appear after the keyword <tt>CONST</tt>. Each
3007: declaration is composed of the name of the constant, an equals sign, a
3008: keyword representing its type (<tt>Text</tt>, <tt>Symbol</tt>,
3009: <tt>Graphics</tt> or <tt>Picture</tt>) and the string representing its value.
3010: A semi-colon terminates each declaration.</p>
1.30 cvs 3011:
3012: <p>In the case of a character string, the keyword <tt>Text</tt> can be
1.41 vatton 3013: followed by the name of an script (for example, <tt>Greek</tt> or
1.37 cvs 3014: <tt>Latin</tt>) in which the constant's text should be expressed. If the
1.43 quint 3015: script name is absent, the Latin script is used. When the script name is
3016: present, only the first letter of the script name is interpreted. Thus, the
3017: words <tt>Greek</tt> and <tt>Grec</tt> designate the same script. In current
3018: versions of Thot, only the Greek and Latin scripts are available.</p>
1.18 cvs 3019: <pre> 'CONST' ConstSeq
1.30 cvs 3020: ConstSeq = Const < Const > .
1.1 cvs 3021: Const = ConstID '=' ConstType ConstValue ';' .
3022: ConstID = NAME .
1.41 vatton 3023: ConstType ='Text' [ Script ] / 'Symbol' /
1.1 cvs 3024: 'Graphics' / 'Picture' .
3025: ConstValue = STRING .
1.41 vatton 3026: Script = NAME .</pre>
1.30 cvs 3027:
1.41 vatton 3028: <p>For character strings in the Latin script (ISO Latin-1 character set),
1.1 cvs 3029: characters having codes higher than 127 (decimal) are represented by their
1.18 cvs 3030: code in octal.</p>
1.30 cvs 3031:
3032: <p>In the case of a symbol or graphical element, the value only contains a
1.37 cvs 3033: single character, between apostrophes, which indicates the form of the
3034: element which must be drawn in the box whose content is the constant. The
3035: symbol or graphical element takes the dimensions of the box, which are
3036: determined by the <tt>Height</tt> and <tt>Width</tt> rules. See <a
3037: href="#sectb72">table of codes</a> for the symbols and graphical elements.</p>
1.30 cvs 3038:
1.18 cvs 3039: <blockquote class="example">
1.30 cvs 3040: <p><strong>Example:</strong></p>
3041:
3042: <p>The constants ``Summary:'' and fraction bar, which were described
3043: earlier, are declared:</p>
3044: <pre>CONST
1.1 cvs 3045: SummaryConst = Text 'Summary:';
1.18 cvs 3046: Bar = Graphics 'h';</pre>
3047: </blockquote>
3048: </div>
1.1 cvs 3049:
1.18 cvs 3050: <div class="subsection">
1.37 cvs 3051: <h3><a name="sectc426" id="sectc426">Variables</a></h3>
1.1 cvs 3052:
1.37 cvs 3053: <p>Variables permit the definition of computed content for presentation
3054: boxes. A variable is associated with a presentation box by a <tt>Content</tt>
3055: rule; but before being used in a <tt>Content</tt> rule, a variable can be
3056: defined in the <tt>VAR</tt> section. It is also possible to define a variable
3057: at the time of its use in a <tt>Content</tt> rule, as can be done with a
1.30 cvs 3058: constant.</p>
3059:
3060: <p>A variable has a name and a value which is a character string resulting
1.37 cvs 3061: from the concatenation of the values of a sequence of functions. Each
1.30 cvs 3062: variable declaration is composed of the variable name followed by a colon and
1.37 cvs 3063: the sequence of functions which produces its value, separated by spaces. Each
1.18 cvs 3064: declaration is terminated by a semi-colon.</p>
3065: <pre> 'VAR' VarSeq
1.30 cvs 3066: VarSeq = Variable < Variable > .
1.1 cvs 3067: Variable = VarID ':' FunctionSeq ';' .
3068: VarID = NAME .
1.30 cvs 3069: FunctionSeq = Function < Function > .</pre>
3070:
1.37 cvs 3071: <p>Several functions are available. The first two return, in the form of a
3072: character string, the current date. <tt>DATE</tt> returns the date in
1.18 cvs 3073: English, while <tt>FDATE</tt> returns the date in french.</p>
1.30 cvs 3074:
3075: <p>Two other functions, <tt>DocName</tt> and <tt>DirName</tt>, return the
1.18 cvs 3076: document name and the directory where the document is stored.</p>
1.30 cvs 3077:
1.38 cvs 3078: <p>Function <tt>ElemName</tt> returns the name of the element which created
1.30 cvs 3079: the presentation box whose contents are the variable.</p>
3080:
1.38 cvs 3081: <p>Function <tt>AttributeName</tt> returns the name of the attribute which
3082: created the presentation box whose contents are the variable. The
3083: presentation box must be created by an attribute.</p>
3084:
3085: <p>Function <tt>AttributeValue</tt> returns the value of the attribute which
3086: created the presentation box whose contents are the variable. The
3087: presentation box must be created by an attribute.</p>
3088:
1.30 cvs 3089: <p>Another function simply returns the value of a presentation constant. For
3090: any constant declared in the <tt>CONST</tt> section, it is sufficient to give
1.37 cvs 3091: the name of the constant. Otherwise, the type and value of the constant must
1.30 cvs 3092: be given, using the same form as in a <a href="#sectc425">constant
1.18 cvs 3093: declaration</a>. If the constant is not of type text, (types <tt>Symbol</tt>,
3094: <tt>Graphics</tt> or <tt>Picture</tt>), it must be alone in the variable
3095: definition; only constants of type <tt>Text</tt> can be mixed with other
3096: functions.</p>
1.30 cvs 3097:
3098: <p>It is also possible to obtain the value of an attribute, simply by
1.37 cvs 3099: mentioning the attribute's name. The value of this function is the value of
1.30 cvs 3100: the attribute for the element which created the presentation box whose
1.37 cvs 3101: contents are the variable. If the creating element does not have the
3102: indicated attribute, the value is an empty string. In the case of a numeric
1.30 cvs 3103: attribute, the attribute is translated into a decimal number in arabic
1.37 cvs 3104: numerals. If another form is desired, the <tt>VALUE</tt> function must be
1.30 cvs 3105: used.</p>
3106:
3107: <p>The last available function returns, as a character string, the value of a
1.1 cvs 3108: counter, an attribute or a page number. This value can be presented in
1.37 cvs 3109: different styles. The keyword <tt>VALUE</tt> is followed (between
1.1 cvs 3110: parentheses) by the name of the counter, the name of the attribute, or the
1.18 cvs 3111: keyword <tt>PageNumber</tt> and the desired style, the two parameters being
1.37 cvs 3112: separated by a comma. The style is a keyword which indicates whether the
1.18 cvs 3113: value should be presented in arabic numerals (<tt>Arabic</tt>), lower-case
3114: roman numerals (<tt>LRoman</tt>), or upper-case roman numerals
3115: (<tt>URoman</tt>), or by an upper-case letter (<tt>Uppercase</tt>) or
3116: lower-case letter (<tt>Lowercase</tt>).</p>
1.30 cvs 3117:
3118: <p>For a page counter, the keyword <tt>PageNumber</tt> can be followed,
3119: between parentheses, by the name of the view from which to obtain the page
1.37 cvs 3120: number. By default, the first view declared in the <tt>VIEWS</tt> section is
3121: used. The value obtained is the number of the page on which is found the
1.30 cvs 3122: element that is using the variable in a <tt>Content</tt> rule.</p>
3123:
3124: <p>For an ordinary counter, the name of the counter can be preceded by the
1.37 cvs 3125: keyword <tt>MaxRangeVal</tt> or <tt>MinRangeVal</tt>. These keywords mean
1.1 cvs 3126: that the value returned by the function is the maximum (minimum resp.) value
3127: taken by the counter in the whole document, not the value for the element
1.18 cvs 3128: concerned by the function.</p>
3129: <pre> Function = 'DATE' / 'FDATE' /
1.1 cvs 3130: 'DocName' / 'DirName' /
1.38 cvs 3131: 'ElemName' / 'AttributeName' / 'AttributeValue' /
1.1 cvs 3132: ConstID / ConstType ConstValue /
3133: AttrID /
3134: 'VALUE' '(' PageAttrCtr ','
3135: CounterStyle ')' .
1.6 cvs 3136: PageAttrCtr = 'PageNumber' [ '(' ViewID ')' ] /
1.1 cvs 3137: [ MinMax ] CounterID / AttrID .
3138: CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /
3139: 'Uppercase' / 'Lowercase' .
1.18 cvs 3140: MinMax = 'MaxRangeVal' / 'MinRangeVal' .</pre>
1.30 cvs 3141:
1.18 cvs 3142: <blockquote class="example">
1.30 cvs 3143: <p><strong>Example:</strong></p>
3144:
3145: <p>To make today's date appear at the top of the first page of a report, a
3146: <a href="#sectc4232"><tt>CREATE</tt> rule</a> associated with the
3147: Report_Title element type generates a presentation box whose content
3148: (specified by the <tt>Content</tt> rule of that presentation box) is the
3149: variable:</p>
3150: <pre>VAR
1.18 cvs 3151: Todays_date : TEXT 'Version of ' DATE;</pre>
1.30 cvs 3152:
3153: <p>To produce, before each section title, the chapter number (in upper-case
3154: roman numerals) followed by the section number (in arabic numerals), two
3155: counters must be defined:</p>
3156: <pre>COUNTERS
1.1 cvs 3157: ChapterCtr : RANK OF Chapter;
1.18 cvs 3158: SectionCtr : RANK OF Section;</pre>
1.30 cvs 3159:
3160: <p>and the Section_Title element must create a presentation box whose
3161: content is the variable</p>
3162: <pre>VAR
1.1 cvs 3163: SectionNum : VALUE (ChapterCtr, URoman) TEXT '-'
1.18 cvs 3164: VALUE (SectionCtr, Arabic);</pre>
1.30 cvs 3165:
3166: <p>In order to make the page number on which each section begins appear in
3167: the table of contents view next to the section title, each Section_Title
3168: element must create a presentation box, visible only in the table of
3169: contents view, whose content is the variable:</p>
3170: <pre>VAR
1.1 cvs 3171: TitlePageNume :
1.18 cvs 3172: VALUE (PageNumber(Full_text), Arabic);</pre>
3173: </blockquote>
3174: </div>
1.1 cvs 3175:
1.18 cvs 3176: <div class="subsection">
1.37 cvs 3177: <h3><a name="sectc427" id="sectc427">Default presentation rules</a></h3>
1.1 cvs 3178:
1.30 cvs 3179: <p>In order to avoid having to specify, for each element type defined in the
1.1 cvs 3180: structure schema, values for every one of the numerous presentation
1.34 cvs 3181: properties, the presentation schema allows the definition of a set of default
1.37 cvs 3182: presentation rules. These rules apply to all the boxes of the elements
1.1 cvs 3183: defined in the structure schema and to the presentation boxes and page layout
1.37 cvs 3184: boxes defined in the presentation schema. Only rules which differ from these
1.18 cvs 3185: default need to be specified in other sections of the presentation schema.</p>
1.30 cvs 3186:
3187: <p>For the primary view, the default rules can define every presentation
1.34 cvs 3188: property, but not the <a href="#presfunct">presentation functions</a> or the
1.18 cvs 3189: <a href="#sectc4223">linebreaking conditions</a> (the <tt>NoBreak1</tt>,
3190: <tt>NoBreak2</tt>, and <tt>Gather</tt> rules).</p>
1.30 cvs 3191:
3192: <p>In a presentation schema, the default presentation rules section is
3193: optional; in this case, the <tt>DEFAULT</tt> keyword is also absent and the
3194: following rules are considered to be the default rules:</p>
1.26 cvs 3195: <pre> Visibility: Enclosing =;
3196: VertRef: * . Left;
3197: HorizRef: Enclosed . HRef;
3198: Height: Enclosed . Height;
3199: Width: Enclosed . Width;
3200: VertPos: Top = Previous . Bottom;
3201: HorizPos: Left = Enclosing . Left;
3202: MarginTop: 0;
3203: MarginRight: 0;
3204: MarginBottom: 0;
3205: MarginLeft: 0;
3206: PaddingTop: 0;
3207: PaddingRight: 0;
3208: PaddingBottom: 0;
3209: PaddingLeft: 0;
3210: BorderTopWidth: 0;
3211: BorderRightWidth: 0;
3212: BorderBottomWidth: 0;
3213: BorderLeftWidth: 0;
3214: BorderTopColor: Foreground;
3215: BorderRightColor: Foreground;
3216: BorderBottomColor: Foreground;
3217: BorderLeftColor: Foreground;
3218: BorderTopStyle: None;
3219: BorderRightStyle: None;
3220: BorderBottomStyle: None;
3221: BorderLeftStyle: None;
3222: VertOverflow: No;
3223: HorizOverflow: No;
3224: Size: Enclosing =;
3225: Style: Enclosing =;
3226: Weight: Enclosing =;
3227: Font: Enclosing =;
3228: Underline: Enclosing =;
3229: Thickness: Enclosing =;
3230: Indent: Enclosing =;
3231: LineSpacing: Enclosing =;
3232: Adjust: Enclosing =;
3233: Hyphenate: Enclosing =;
1.40 quint 3234: Direction: Enclosing =;
1.43 quint 3235: UnicodeBidi: Enclosing =;
1.26 cvs 3236: PageBreak: Yes;
3237: LineBreak: Yes;
3238: InLine: Yes;
3239: Depth: 0;
3240: LineStyle: Enclosing =;
3241: LineWeight: Enclosing =;
3242: FillPattern: Enclosing =;
3243: Background: Enclosing =;
3244: Foreground: Enclosing =;</pre>
1.30 cvs 3245:
3246: <p>If other values are desired for the default rules, they must be defined
1.37 cvs 3247: explicitly in the default rules section. In fact, it is only necessary to
1.1 cvs 3248: define those default rules which differ from the ones above, since the rules
1.18 cvs 3249: above will be used whenever a rule is not explicitly named.</p>
1.30 cvs 3250:
1.37 cvs 3251: <p>Default rules for views other than the primary view can also be specified.
1.1 cvs 3252: Otherwise, the default rules for the primary views are applied to the other
1.18 cvs 3253: views.</p>
1.30 cvs 3254:
3255: <p>Default rules are expressed in the same way as <a
3256: href="#sectc4215">explicit rules for document elements</a>.</p>
1.18 cvs 3257: </div>
1.1 cvs 3258:
1.18 cvs 3259: <div class="subsection">
1.37 cvs 3260: <h3><a name="sectc428" id="sectc428">Presentation and page layout
3261: boxes</a></h3>
1.1 cvs 3262:
1.30 cvs 3263: <p>The presentation process uses elements which are not part of the logical
1.1 cvs 3264: structure of the document, such as pages (which are the page layout boxes) or
3265: alternatively, rules, numbers, or words introducing certain parts of the
3266: document, such as ``Summary'', ``Appendices'', ``Bibliography'', etc. (which
1.18 cvs 3267: are presentation boxes).</p>
1.30 cvs 3268:
3269: <p>After the word <tt>BOXES</tt>, each presentation or page layout box is
3270: defined by its name and a sequence of presentation rules which indicate how
1.37 cvs 3271: they must be displayed. These rules are the same as those which define the
3272: boxes associated with element of the logical structure of the document, with
3273: a single exception, the <a href="#sectc4231"><tt>Content</tt> rule</a> which
3274: is used only to specify the content of presentation boxes. The content of
3275: boxes associated with elements of the document structure is defined in each
3276: document or object and thus is not specified in the presentation schema,
3277: which applies to all documents or objects of a class.</p>
1.30 cvs 3278:
3279: <p>Among the rules which define a presentation box, certain ones can refer to
1.37 cvs 3280: another presentation box (for example, in their positional rules). If the
1.1 cvs 3281: designated box is defined after the box which designates it, a
1.18 cvs 3282: <tt>FORWARD</tt> instruction followed by the name of the designated box must
3283: appear before the designation.</p>
3284: <pre> 'BOXES' BoxSeq
1.30 cvs 3285: BoxSeq = Box < Box > .
1.1 cvs 3286: Box ='FORWARD' BoxID ';' /
3287: BoxID ':' ViewRuleSeq .
1.18 cvs 3288: BoxID = NAME .</pre>
3289: </div>
1.1 cvs 3290:
1.18 cvs 3291: <div class="subsection">
1.37 cvs 3292: <h3><a name="sectc429" id="sectc429">Presentation of structured
3293: elements</a></h3>
1.1 cvs 3294:
1.30 cvs 3295: <p>After the words <tt>RULES</tt>, the presentation schema gives the
3296: presentation rules that apply to the elements whose types are defined in the
1.37 cvs 3297: structure schema. Only those rules which differ from the <a
1.18 cvs 3298: href="#sectc427">default</a> must be specified in the <tt>RULES</tt>
3299: section.</p>
1.30 cvs 3300:
3301: <p>The rule definitions for each element type are composed of the name of the
1.1 cvs 3302: element type (as specified in the structure schema) followed by a colon and
1.18 cvs 3303: the set of rules specific to that type.</p>
1.30 cvs 3304:
3305: <p>The type name can be preceded by a star in the special case where the
1.18 cvs 3306: structure schema defines an <a href="#sectd3284">inclusion</a> without
1.1 cvs 3307: expansion (or with partial expansion) of a type with the same name as an
1.18 cvs 3308: element of defined in the structure schema.</p>
1.30 cvs 3309:
3310: <p>In the case where the element is a <a href="#sectd3285">mark pair</a>, but
1.18 cvs 3311: only in this case, the type name can be preceded by the keywords
1.37 cvs 3312: <tt>First</tt> or <tt>Second</tt>. These keywords indicate whether the rules
1.18 cvs 3313: that follow apply to the first or second mark of the pair.</p>
3314: <pre> 'RULES' PresentSeq
1.30 cvs 3315: PresentSeq = Present < Present > .
1.6 cvs 3316: Present = [ '*' ] [ FirstSec ] ElemID ':'
3317: ViewRuleSeq .
1.18 cvs 3318: FirstSec = 'First' / 'Second' .</pre>
1.30 cvs 3319:
3320: <p>A presentation schema can define presentation rules for base elements,
1.37 cvs 3321: which are defined implicitly in the structure schemas. In the English version
1.30 cvs 3322: of the presentation schema compiler, the base type names are the same as in
3323: the S language, but they are terminated by the <tt>_UNIT</tt> suffix:
1.18 cvs 3324: <tt>TEXT_UNIT</tt>, <tt>PICTURE_UNIT</tt>, <tt>SYMBOL_UNIT</tt>,
1.37 cvs 3325: <tt>GRAPHICS_UNIT</tt>. The base type names are written in upper-case
1.18 cvs 3326: letters.</p>
3327: </div>
3328:
3329: <div class="subsection">
1.37 cvs 3330: <h3><a name="sectc4210" id="sectc4210">Logical attribute presentation</a></h3>
1.18 cvs 3331:
1.30 cvs 3332: <p>After the keyword <tt>ATTRIBUTES</tt>, all attributes which are to have
1.37 cvs 3333: some effect on the presentation of the element to which they are attached
3334: must be mentioned, along with the corresponding presentation rules. This is
3335: true for both global attributes (which can be attached to all element types)
3336: and local attributes (which can only be attached to certain element
3337: types).</p>
1.30 cvs 3338:
3339: <p>Also mentioned in this section are attributes which imply an effect on
1.1 cvs 3340: elements in the subtree of the element to which they are attached. The
1.37 cvs 3341: presentation of these descendants can be modified as a function of the value
1.1 cvs 3342: of the attribute which they inherit, just as if it was attached to them
1.18 cvs 3343: directly.</p>
1.30 cvs 3344:
3345: <p>The specification for each attribute includes the attribute's name,
3346: followed by an optional value specification and, after a colon, a set of
1.37 cvs 3347: rules. The set of rules must contain at least one rule.</p>
1.30 cvs 3348:
1.37 cvs 3349: <p>When there is no value specification, the rules are applied to all
3350: elements which carry the attribute, no matter what their value. When the
3351: rules must only apply when the attribute has certain values, these values
3352: must be specified. Thus, the same attribute can appear in the
3353: <tt>ATTRIBUTES</tt> section several times, with each appearance having a
3354: different value specification. However, reference attributes never have a
3355: value specification and, as a result, can only appear once in the
3356: <tt>ATTRIBUTES</tt> section.</p>
1.30 cvs 3357:
3358: <p>To specify that the presentation rules apply to some of the descendants of
3359: the element having the attribute, the name of the affected element type is
1.37 cvs 3360: given, between parentheses, after the attribute name. This way, the
3361: presentation rules for the attribute will be applied to the element having
3362: the attribute, if it is of the given type, and to all of its descendants of
3363: the given type. In the case where this type is a <a href="#sectd3285">mark
3364: pair</a>, but only in this case, the type name can be preceded by the
3365: keywords <tt>First</tt> or <tt>Second</tt>. These keywords indicate whether
3366: the rules that follow apply to the first or second mark of the pair. If the
3367: rule must apply to several different element types, the specification must be
3368: repeated for each element type.</p>
1.30 cvs 3369:
3370: <p>The specification of values for which the presentation rules will be
3371: applied varies according to the type of the attribute:</p>
1.18 cvs 3372: <dl>
1.30 cvs 3373: <dt>numeric attribute</dt>
3374: <dd>If the rules are to apply for one value of the attribute, then the
1.37 cvs 3375: attribute name is followed by an equals sign and this value. If the
1.30 cvs 3376: rules are to apply for all values less than (or greater than) a
3377: threshold value, non-inclusive, the attribute name followed by a '<'
1.37 cvs 3378: sign (or a '>' sign, respectively) and the threshold value. If the
3379: rules must apply to a range of values, the attribute name is followed
3380: by the word '<tt>IN</tt>' and the two bounds of the range, enclosed in
3381: brackets and separated by two periods ('<tt>..</tt>'). In the case of
3382: ranges, the values of the bounds are included in the range.
1.30 cvs 3383: <p>The threshold value in the comparisons can be the value of an
1.37 cvs 3384: attribute attached to an ancestor element. In this case, the attribute
1.30 cvs 3385: name is given instead of a constant value.</p>
1.37 cvs 3386: <p>It is also possible to write rules which apply only when a
3387: comparison between two different attributes of the element's ancestors
3388: is true. In this case, the first attribute name is followed by a
3389: comparison keyword and the name of the second attribute. The comparison
3390: keywords are <tt>EQUAL</tt> (simple equality), <tt>LESS</tt>
3391: (non-inclusive less than), and <tt>GREATER</tt> (non-inclusive greater
3392: than).</p>
1.30 cvs 3393: </dd>
3394: <dt>text attribute</dt>
3395: <dd>If the rules are to apply for one value of the attribute, then the
3396: attribute name is followed by an equals sign and this value.</dd>
3397: <dt>reference attribute</dt>
3398: <dd>There is never a value specification; the rules apply no matter what
3399: element is designated by the attribute.</dd>
3400: <dt>enumerated attribute</dt>
3401: <dd>If the rules are to apply for one value of the attribute, then the
3402: attribute name is followed by an equals sign and this value.</dd>
1.18 cvs 3403: </dl>
1.30 cvs 3404:
3405: <p>The order in which the rules associated with a numeric attribute are
1.37 cvs 3406: defined is important. When multiple sets of rules can be applied, the first
1.30 cvs 3407: set declared is the one used.</p>
3408:
3409: <p>Rules for attributes have priority over both default rules and rules
1.37 cvs 3410: associated with element types. The attribute rules apply to the element to
3411: which the attribute is attached. It is the rules which apply to the
1.1 cvs 3412: surrounding elements (and especially to the descendants) which determine the
3413: effect of the attribute rules on the environment ( and especially on the
1.18 cvs 3414: terminal elements of the structure).</p>
3415: <pre> 'ATTRIBUTES' PresAttrSeq
1.30 cvs 3416: PresAttrSeq = PresAttr < PresAttr > .
1.1 cvs 3417: PresAttr = AttrID [ '(' [ FirstSec ] ElemID ')' ]
3418: [ AttrRelation ] ':' ViewRuleSeq .
3419: AttrID = NAME .
3420: AttrRelation ='=' AttrVal /
1.30 cvs 3421: '>' [ '-' ] MinValue /
1.1 cvs 3422: '<' [ '-' ] MaxValue /
3423: 'IN' '[' [ '-' ] LowerBound '..'
3424: [ '-' ] UpperBound ']' /
3425: 'GREATER' AttrID /
3426: 'EQUAL' AttrID /
3427: 'LESS' AttrID .
3428: AttrVal = [ '-' ] EqualNum / EqualText /
3429: AttrValue .
3430: MinValue = NUMBER .
3431: MaxValue = NUMBER .
3432: LowerBound = NUMBER .
3433: UpperBound = NUMBER.
3434: EqualNum = NUMBER .
3435: EqualText = STRING .
1.18 cvs 3436: AttrValue = NAME .</pre>
1.30 cvs 3437:
1.37 cvs 3438: <p>In presentation rules associated with a numeric attribute (and only in
3439: such rules), the attribute name can be used in place of a numeric value. In
3440: this case, the value of the attribute is used in the application of the rule.
3441: Thus, the attribute can represent a relation between the size of two boxes,
3442: the height and width of a box, the height of an area where page breaks are
3443: prohibited, the distance between two boxes, the position of the reference
3444: axis of a box, the interline spacing, the indentation of the first line, the
1.18 cvs 3445: visibility, the depth (z-order), or the character set.</p>
1.30 cvs 3446:
1.37 cvs 3447: <p>The presentation rules associated with reference attributes, it is
3448: possible to use the element designated by the attribute as a reference box in
3449: a positional or extent rule. This element is represented in the <a
1.18 cvs 3450: href="#sectc4218">position</a> or <a href="#sectc4219">extent</a> rule by the
3451: keyword <tt>Referred</tt>.</p>
1.30 cvs 3452:
1.18 cvs 3453: <blockquote class="example">
1.30 cvs 3454: <p><strong>Example:</strong></p>
3455:
1.37 cvs 3456: <p>In all structure schemas, there is a global Language attribute defined
3457: as follows:</p>
1.30 cvs 3458: <pre>ATTR
1.18 cvs 3459: Language = TEXT;</pre>
1.30 cvs 3460:
3461: <p>The following rules would make French text be displayed in roman
3462: characters and English text be displayed in italics:</p>
3463: <pre>ATTRIBUTES
1.1 cvs 3464: Language = 'French' :
1.6 cvs 3465: Style : Roman;
1.1 cvs 3466: Language = 'English' :
1.18 cvs 3467: Style : Italics;</pre>
1.30 cvs 3468:
3469: <p>Using these rules, when the user puts the Language attribute with the
3470: value 'English' on the summary of a document, every character string
1.37 cvs 3471: (terminal elements) contained in the summary are displayed in italics. See
1.30 cvs 3472: the <a href="#sectd42252"><tt>Style</tt> rule</a>.</p>
1.18 cvs 3473: </blockquote>
1.30 cvs 3474:
1.18 cvs 3475: <blockquote class="example">
1.30 cvs 3476: <p><strong>Example:</strong></p>
3477:
3478: <p>A numeric attribute representing the importance of the part of the
3479: document to which it is attached can be defined:</p>
3480: <pre>ATTR
1.18 cvs 3481: Importance = INTEGER;</pre>
1.30 cvs 3482:
3483: <p>In the presentation schema, the importance of an element is reflected in
3484: the choice of character size, using the following rules.</p>
3485: <pre>ATTRIBUTES
1.1 cvs 3486: Importance < 2 :
3487: Size : 1;
3488: Importance IN [2..4] :
3489: Size : Importance;
3490: Importance = 10 :
3491: Size : 5;
1.30 cvs 3492: Importance > 4 :
1.18 cvs 3493: Size : 4;</pre>
1.30 cvs 3494:
3495: <p>Thus, the character size corresponds to the value of the Importance
3496: attribute; its value is</p>
3497: <ul>
3498: <li>the value of the Importance attribute when the value is between 2 and
3499: 4 (inclusive),</li>
3500: <li>1, when the value of the Importance attribute is less than 2,</li>
3501: <li>4, when the value of the Importance attribute is greater than 4,</li>
3502: <li>5, when the value of the Importance attribute is 10.</li>
3503: </ul>
3504:
1.37 cvs 3505: <p>The last case (value 5) must be defined before the case which handles
3506: all Importance values greater than 4, because the two rules are not
3507: disjoint and the first one defined will have priority. Otherwise, when the
3508: Importance attribute has value 10, the font size will be 4.</p>
1.18 cvs 3509: </blockquote>
1.30 cvs 3510:
1.18 cvs 3511: <blockquote class="example">
1.30 cvs 3512: <p><strong>Example:</strong></p>
3513:
3514: <p>Suppose the structure defines a list element which can have an attribute
3515: defining the type of list (numbered or not):</p>
3516: <pre>STRUCT
1.1 cvs 3517: list (ATTR list_type = enumeration, dash)
1.18 cvs 3518: = LIST OF (list_item = TEXT);</pre>
1.30 cvs 3519:
3520: <p>Then, the presentation schema could use the attribute placed on the list
3521: element to put either a dash or a number before the each element of the
3522: list:</p>
3523: <pre>ATTRIBUTES
1.1 cvs 3524: list_type (list_item) = enumeration :
3525: CreateBefore (NumberBox);
3526: list_type (list_item) = dash :
1.18 cvs 3527: CreateBefore (DashBox);</pre>
3528: </blockquote>
1.30 cvs 3529:
1.18 cvs 3530: <blockquote class="example">
1.30 cvs 3531: <p><strong>Example:</strong></p>
3532:
1.37 cvs 3533: <p>Suppose that two attributes are defined in the structure schema. The
3534: first is a numeric global attribute called ``version''. The other is a
1.30 cvs 3535: local attribute defined on the root of the document called
3536: ``Document_version'':</p>
3537: <pre>STRUCTURE Document
1.1 cvs 3538: ATTR
3539: version = INTEGER;
3540: STRUCT
3541: Document (ATTR Document_version = INTEGER) =
3542: BEGIN
3543: SomeElement ;
3544: ...
3545: SomeOtherElement ;
3546: END ;
1.18 cvs 3547: ...</pre>
1.30 cvs 3548:
3549: <p>These attributes can be used in the presentation schema to place change
3550: bars in the margin next to elements whose version attribute has a value
3551: equal to the Document_version attribute of the root and to place a star in
3552: margin of elements whose version attribute is less than the value of the
3553: root's Document_version attribute:</p>
3554: <pre>ATTRIBUTES
1.1 cvs 3555: version EQUAL Document_version :
3556: CreateBefore (ChangeBarBox) ;
3557: version LESS Document_version :
1.18 cvs 3558: CreateBefore (StarBox) ;</pre>
3559: </blockquote>
3560: </div>
1.1 cvs 3561:
1.18 cvs 3562: <div class="subsection">
1.37 cvs 3563: <h3><a name="sectc4212" id="sectc4212">Value transmission rules</a></h3>
1.1 cvs 3564:
1.30 cvs 3565: <p>The last section of a presentation schema, which is optional, serves to
1.1 cvs 3566: defines the way in which a document transmits certain values to its
1.37 cvs 3567: sub-documents. A sub-document is an document <a
1.18 cvs 3568: href="#inclusion">included</a> without expansion or with partial expansion.
1.1 cvs 3569: The primary document can transmit to its sub-documents the values of certain
3570: counters or the textual content of certain of its elements, as a function of
1.18 cvs 3571: their type.</p>
1.30 cvs 3572:
3573: <p>The sub-documents receive these values in attributes which must be defined
1.37 cvs 3574: in their structure schema as local attributes of the root element. The types
1.30 cvs 3575: of these attributes must correspond to the type of the value which they
3576: receive: numeric attributes for receiving the value of a counter, textual
3577: attributes for receiving the content of an element.</p>
3578:
3579: <p>In the structure schema of the primary document, there appears at the end,
1.37 cvs 3580: after the <tt>TRANSMIT</tt> keyword, a sequence of transmission rules. Each
1.1 cvs 3581: rule begins with the name of the counter to transmit or of the element type
1.37 cvs 3582: whose textual content will be transmitted. This name is followed by the
3583: keyword <tt>To</tt> and the name of the attribute of the sub-document to
3584: which the value is transmitted. The sub-document class is indicated between
3585: parentheses after the name of the attribute. The transmission rule ends with
1.18 cvs 3586: a semicolon.</p>
1.30 cvs 3587: <pre> TransmitSeq = Transmit < Transmit > .
1.1 cvs 3588: Transmit = TypeOrCounter 'To' ExternAttr
3589: '(' ElemID ')' ';' .
3590: TypeOrCounter = CounterID / ElemID .
1.18 cvs 3591: ExternAttr = NAME .</pre>
1.30 cvs 3592:
1.18 cvs 3593: <blockquote class="example">
1.30 cvs 3594: <p><strong>Example:</strong></p>
3595:
3596: <p>Consider a Book document class which includes instances of the Chapter
1.37 cvs 3597: document class. These classes might have the following schemas:</p>
1.30 cvs 3598: <pre>STRUCTURE Book
1.1 cvs 3599: STRUCT
3600: Book = BEGIN
3601: Title = Text;
3602: Body = LIST OF (Chapter INCLUDED);
3603: END;
3604: ...
3605:
3606: STRUCTURE Chapter
3607: STRUCT
3608: Chapter (ATTR FirstPageNum = Integer;
3609: ChapterNum = Integer;
3610: CurrentTitle = Text) =
1.6 cvs 3611: BEGIN
3612: ChapterTitle = Text;
3613: ...
3614: END;
1.18 cvs 3615: ...</pre>
1.30 cvs 3616:
3617: <p>Then the presentation schema for books could define chapter and page
3618: counters. The following transmission rules in the book presentation schema
3619: would transmit values for the three attributes defined at the root of each
3620: chapter sub-document.</p>
3621: <pre>PRESENTATION Book;
1.1 cvs 3622: VIEWS
3623: Full_text;
3624: COUNTERS
3625: ChapterCtr: Rank of Chapter;
3626: PageCtr: Rank of Page(Full_text);
3627: ...
3628: TRANSMIT
3629: PageCtr TO FirstPageNum(Chapter);
3630: ChapterCtr TO ChapterNum(Chapter);
3631: Title TO CurrentTitle(Chapter);
1.18 cvs 3632: END</pre>
1.30 cvs 3633:
3634: <p>Thus, each chapter included in a book can number its pages as a function
3635: of the number of pages preceding it in the book, can make the chapter's
3636: number appear before the number of each of its sections, or can place the
3637: title of the book at the top of each page.</p>
1.18 cvs 3638: </blockquote>
3639: </div>
1.1 cvs 3640:
1.18 cvs 3641: <div class="subsection">
1.37 cvs 3642: <h3><a name="sectc4213" id="sectc4213">Presentation rules</a></h3>
1.1 cvs 3643:
1.30 cvs 3644: <p>Whether defining the appearance of a presentation or page layout box, an
1.1 cvs 3645: element type, or an attribute value, the set of presentation rules that apply
1.18 cvs 3646: is always defined in the same way.</p>
1.30 cvs 3647:
3648: <p>Normally, a set of presentation rules is placed between the keywords
1.18 cvs 3649: <tt>BEGIN</tt> and <tt>END</tt>, the keyword <tt>END</tt> being followed by a
1.37 cvs 3650: semicolon. The first section of this block defines the rules that apply to
1.18 cvs 3651: the primary view, if the <a href="#sectc427">default rules</a> are not
1.37 cvs 3652: completely suitable. Next comes the rules which apply to specific other
1.1 cvs 3653: views, with a rule sequence for each view for which the default rules are not
1.37 cvs 3654: satisfactory. If the default rules are suitable for the non-primary views,
3655: there will not be any specific rules for these views. If there is only one
1.18 cvs 3656: rule which applies to all views then the keywords <tt>BEGIN</tt> and
3657: <tt>END</tt> need not appear.</p>
1.30 cvs 3658:
3659: <p>For each view, it is only necessary to specify those rules which differ
3660: from the default rules for the view, so that for certain views (or even all
3661: views), there may be no specific rules.</p>
3662:
3663: <p>The specific rules for a non-primary view are introduced by the <a
1.37 cvs 3664: name="inkeyword" id="inkeyword"><tt>IN</tt> keyword</a>, followed by the view
3665: name. The rules for that view follow, delimited by the keywords
3666: <tt>BEGIN</tt> and <tt>END</tt>, or without these two keywords when there is
3667: only one rule.</p>
1.30 cvs 3668:
3669: <p><strong>Note:</strong> the view name which follows the <tt>IN</tt> keyword
1.1 cvs 3670: must not be the name of the primary view, since the rules for that view are
1.18 cvs 3671: found before the rules for the other views.</p>
1.30 cvs 3672:
3673: <p>Within each block concerning a view, other blocks can appear, delimited by
1.37 cvs 3674: the same keywords <tt>BEGIN</tt> and <tt>END</tt>. Each of these blocks
3675: gathers the presentation rules that apply, for a given view, only when a
3676: given condition is satisfied. Each block is preceded by a condition
3677: introduced by the <tt>IF</tt> keyword. If such a conditional block contains
3678: only one rule, the keywords <tt>BEGIN</tt> and <tt>END</tt> can be
3679: omitted.</p>
3680:
3681: <p>Although the syntax allows any presentation rule to appear in a
3682: conditional block, only <a href="#sectc4232">creation rules</a> are allowed
3683: after any condition; other rules are allowed only after conditions
3684: <tt>Within</tt> and ElemID. In addition, the following rules cannot be
3685: conditional: <tt>PageBreak, LineBreak, Inline, Gather</tt>.</p>
1.30 cvs 3686:
3687: <p>For a given view, the rules that apply without any condition must appear
1.37 cvs 3688: before the first conditional block. If some rules apply only when none of the
3689: specified condition holds, they are grouped in a block preceded by the
3690: keyword <tt>Otherwise</tt>, and that block must appear after the last
3691: conditionnal block concerning the same view.</p>
1.30 cvs 3692: <pre> ViewRuleSeq = 'BEGIN' < RulesAndCond > < ViewRules >
1.1 cvs 3693: 'END' ';' /
3694: ViewRules / CondRules / Rule .
3695: RulesAndCond = CondRules / Rule .
3696: ViewRules = 'IN' ViewID CondRuleSeq .
1.30 cvs 3697: CondRuleSeq = 'BEGIN' < RulesAndCond > 'END' ';' /
1.1 cvs 3698: CondRules / Rule .
1.30 cvs 3699: CondRules = CondRule < CondRule >
1.1 cvs 3700: [ 'Otherwise' RuleSeq ] .
3701: CondRule = 'IF' ConditionSeq RuleSeq .
1.30 cvs 3702: RulesSeq = 'BEGIN' Rule < Rule > 'END' ';' /
1.18 cvs 3703: Rule .</pre>
1.30 cvs 3704:
1.18 cvs 3705: <blockquote class="example">
1.30 cvs 3706: <p><strong>Example:</strong></p>
3707:
3708: <p>The following rules for a report's title make the title visible in the
1.37 cvs 3709: primary view and invisible in the table of contents and in the formula
3710: views (see the <a href="#sectc4224"><tt>Visibility</tt> rule</a>).</p>
1.30 cvs 3711: <pre>Title : BEGIN
1.1 cvs 3712: Visibility : 1;
3713: ... {Other rules for the primary view}
3714: IN Table_of_contents
3715: Visibility : 0;
3716: IN Formulas
3717: Visibility : 0;
1.18 cvs 3718: END;</pre>
3719: </blockquote>
3720: </div>
1.1 cvs 3721:
1.18 cvs 3722: <div class="subsection">
1.37 cvs 3723: <h3><a name="sectc4214" id="sectc4214">Conditions applying to presentation
3724: rules</a></h3>
1.1 cvs 3725:
1.37 cvs 3726: <p>Many conditions can be applied to presentation rules. Conditions allow
3727: certain presentation rules to apply only in certain cases. These conditions
3728: can be based on the structural position of the element. They can be based on
1.1 cvs 3729: whether the element has references, and what type of references, whether the
1.42 quint 3730: element has attributes, possibly with certains values, whether the element is
3731: empty or not, whether the element is the root of its document or not. They
3732: can also be based on the value of a counter.</p>
1.30 cvs 3733:
1.37 cvs 3734: <p>It is possible to specify several conditions which must all be true for
3735: the rules to apply.</p>
1.30 cvs 3736:
1.37 cvs 3737: <p>A set of conditions is specified by the <tt>IF</tt> keyword. This keyword
1.30 cvs 3738: is followed by the sequence of conditions, separated by the <tt>AND</tt>
3739: keyword. Each condition is specified by a keyword which defines the condition
3740: type. In some cases, the keyword is followed by other data, which specify the
1.42 quint 3741: condition more precisely. The keyword is not present if the condition depends
3742: on the element type or an attribute associated with the element.</p>
1.30 cvs 3743:
3744: <p>An elementary condition can be negative; it is then preceded by the
1.18 cvs 3745: <tt>NOT</tt> keyword.</p>
1.30 cvs 3746:
3747: <p>When the presentation rule(s) controlled by the condition apply to a
3748: reference element or a reference attribute, an elementary condition can also
1.37 cvs 3749: apply to element referred by this reference. The <tt>Target</tt> keyword is
3750: used for that purpose. It must appear before the keyword defining the
1.30 cvs 3751: condition type.</p>
1.18 cvs 3752: <pre> CondRule ='IF' ConditionSeq RuleSeq .
1.30 cvs 3753: ConditionSeq = Condition < 'AND' Condition > .
1.1 cvs 3754: Condition = [ 'NOT' ] [ 'Target' ] ConditionElem .
3755: ConditionElem ='First' / 'Last' /
3756: [ 'Immediately' ] 'Within' [ NumParent ]
3757: ElemID [ ExtStruct ] /
3758: ElemID /
3759: 'Referred' / 'FirstRef' / 'LastRef' /
3760: 'ExternalRef' / 'InternalRef' / 'CopyRef' /
1.44 quint 3761: [ 'Inherited' ] AttrID [ '=' Value ] /
1.1 cvs 3762: 'AnyAttributes' / 'FirstAttr' / 'LastAttr' /
3763: 'UserPage' / 'StartPage' / 'ComputedPage' /
1.33 cvs 3764: 'Empty' / 'Root' /
1.1 cvs 3765: '(' [ MinMax ] CounterName CounterCond ')' /
3766: CondPage '(' CounterID ')' .
3767: NumParent = [ GreaterLess ] NParent .
1.30 cvs 3768: GreaterLess ='>' / '<' .
1.1 cvs 3769: NParent = NUMBER.
1.6 cvs 3770: ExtStruct ='(' ElemID ')' .
1.42 quint 3771: Value = [ '-' ] IntegerVal / TextVal / AttrValue .
1.30 cvs 3772: CounterCond ='<' MaxCtrVal / '>' MinCtrVal /
1.1 cvs 3773: '=' EqCtrVal /
3774: 'IN' '[' ['-'] MinCtrBound '.' '.'
3775: ['-'] MaxCtrBound ']' .
3776: PageCond ='Even' / 'Odd' / 'One' .
3777: MaxCtrVal = NUMBER .
3778: MinCtrVal = NUMBER .
3779: EqCtrVal = NUMBER .
3780: MaxCtrBound = NUMBER .
1.18 cvs 3781: MinCtrBound = NUMBER .</pre>
1.1 cvs 3782:
1.18 cvs 3783: <div class="subsubsection">
1.37 cvs 3784: <h4><a name="sectd42141" id="sectd42141">Conditions based on the logical
3785: position of the element</a></h4>
1.30 cvs 3786:
3787: <p>The condition can be on the position of the element in the document's
1.37 cvs 3788: logical structure tree. It is possible to test whether the element is the
1.30 cvs 3789: first (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is
3790: not the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>). These
1.18 cvs 3791: conditions can be associated only with <a href="#sectc4232">creation
3792: rules</a>.</p>
1.30 cvs 3793:
1.33 cvs 3794: <p>It is possible to test if the element is the root of its document (keyword
3795: <code>Root</code>).</p>
3796:
1.30 cvs 3797: <p>It is also possible to test if the element is contained in an element of a
1.18 cvs 3798: given type (<tt>Within</tt>) or if it is not (<tt>NOT Within</tt>). The type
3799: is indicated after the keyword <tt>Within</tt>. If that element type is
1.1 cvs 3800: defined in a structure schema which is not the one which corresponds to the
3801: presentation schema, the type name of this element must be followed, between
1.18 cvs 3802: parentheses, by the name of the structure schema which defines it.</p>
1.30 cvs 3803:
3804: <p>If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the
1.18 cvs 3805: condition is satisfied only if the <em>parent</em> element has the type
3806: indicated. If the word <tt>Immediately</tt> is missing, the condition is
3807: satisfied if any <em>ancestor</em> has the type indicated.</p>
1.30 cvs 3808:
3809: <p>An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the
1.37 cvs 3810: type. It specifies the number of ancestors of the indicated type that must be
3811: present for the condition to be satisfied. If the keyword
1.18 cvs 3812: <tt>Immediately</tt> is also present, the <i>n</i> immediate ancestors of the
1.37 cvs 3813: element must have the indicated type. The integer <i>n</i> must be positive
3814: or zero. It can be preceded by <tt><</tt> or <tt>></tt> to indicate a
3815: maximum or minimum number of ancestors. If these symbols are missing, the
3816: condition is satisfied only if it exists exactly <i>n</i> ancestors. When
1.30 cvs 3817: this number is missing, it is equivalent to > 0.</p>
1.42 quint 3818: </div>
3819:
3820: <div class="subsubsection">
3821: <h4><a name="sectd421411" id="sectd421411">Conditions based on the element
3822: type</a></h4>
1.30 cvs 3823:
3824: <p>If the condition applies to presentation rules associated with an
3825: attribute, in the <tt>ATTRIBUTES</tt> section of the presentation schema, the
3826: condition can be simply an element name. Presentation rules are then executed
3827: only if the attribute is attached to an element of that type. The keyword
3828: <tt>NOT</tt> before the element name indicates that the presentation rules
3829: must be executed only if the element is not of the type indicated.</p>
1.18 cvs 3830: </div>
1.1 cvs 3831:
1.18 cvs 3832: <div class="subsubsection">
1.37 cvs 3833: <h4><a name="sectd42142" id="sectd42142">Conditions on references</a></h4>
1.30 cvs 3834:
3835: <p>References may be taken into account in conditions, which can be based on
3836: the fact that the element, or one of its ancestors, is designated by a at
3837: least one reference (<tt>Referred</tt>) or by none (<tt>NOT
3838: Referred</tt>).</p>
3839:
3840: <p>If the element or attribute to which the condition is attached is a
3841: reference, the condition can be based on the fact that it acts as the first
3842: reference to the designated element (<tt>FirstRef</tt>), or as the last
3843: (<tt>LastRef</tt>), or as a reference to an element located in another
3844: document (<tt>ExternalRef</tt>) or in the same document
3845: (<tt>InternalRef</tt>).</p>
1.1 cvs 3846:
1.30 cvs 3847: <p>The condition can also be based on the fact that the element is an <a
1.37 cvs 3848: href="#inclusion">inclusion</a>. This is noted (<tt>CopyRef</tt>).</p>
1.30 cvs 3849:
3850: <p>Like all conditions, conditions on references can be inverted by the
1.18 cvs 3851: <tt>NOT</tt> keyword. These conditions can be associated only with <a
3852: href="#sectc4232">creation rules</a>.</p>
3853: </div>
1.1 cvs 3854:
1.18 cvs 3855: <div class="subsubsection">
1.37 cvs 3856: <h4><a name="sectd42143" id="sectd42143">Conditions on logical
3857: attributes</a></h4>
1.30 cvs 3858:
3859: <p>The condition can be based on the presence or absence of attributes
3860: associated with the element, no matter what the attributes or their values.
3861: The <tt>AnyAttributes</tt> keyword expresses this condition.</p>
1.1 cvs 3862:
1.42 quint 3863: <p>A condition can also be based on the presence or absence of a given
3864: attribute associated with the element. This condition is simply expressed by
1.44 quint 3865: the name of the attribute. The condition may also be based on the presence of
3866: a given attribute associated with a parent of the element. This condition is
3867: expressed by the <code>Inherited</code> keyword, followed by the name of the
3868: attribute.</p>
1.42 quint 3869:
3870: <p>The condition can be based on the value of a given attribute. It is then
3871: expressed by the name of the attribute, followed by the '=' sign and the
3872: value to be tested. Depending on the type of attribute, the value is simply
3873: an integer (possibly negative), the name of one of the possible values of the
1.44 quint 3874: attribute or a quoted character string. If the attribute with the specified
3875: value has to be checked on the ancestors of the element, this condition
3876: starts with the keyword <code>Inherited.</code></p>
1.42 quint 3877:
1.30 cvs 3878: <p>If the condition appears in the presentation rules of an attribute, the
1.37 cvs 3879: <tt>FirstAttr</tt> and <tt>LastAttr</tt> keywords can be used to indicate
3880: that the rules must only be applied if this attribute is the first attribute
3881: for the element or if it is the last (respectively). These conditions can
3882: also be inverted by the <tt>NOT</tt> keyword. These conditions can be
3883: associated only with <a href="#sectc4232">creation rules</a>.</p>
1.30 cvs 3884:
3885: <p>It is also possible to apply certain presentation rules only when the
3886: element being processed or one of its ancestors has a certain attribute,
1.37 cvs 3887: perhaps with a certain value. This can be done in the <a
1.18 cvs 3888: href="#sectc4210"><tt>ATTRIBUTES</tt> section</a>.</p>
3889: </div>
1.1 cvs 3890:
1.18 cvs 3891: <div class="subsubsection">
1.37 cvs 3892: <h4><a name="sectd42144" id="sectd42144">Conditions on page breaks</a></h4>
1.1 cvs 3893:
1.30 cvs 3894: <p>The page break base type (and only this type) can use the following
1.18 cvs 3895: conditions: <tt>ComputedPage</tt>, <tt>StartPage</tt>, and <tt>UserPage</tt>.
3896: The <tt>ComputedPage</tt> condition indicates that the presentation rule(s)
1.37 cvs 3897: should apply if the page break was created automatically by Thot; the
3898: <tt>StartPage</tt> condition is true if the page break is generated before
3899: the element by the <tt>Page</tt> rule; and the <tt>UserPage</tt> condition
3900: applies if the page break was inserted by the user.</p>
1.30 cvs 3901:
3902: <p>These conditions can be associated only with <a href="#sectc4232">creation
1.18 cvs 3903: rules</a>.</p>
3904: </div>
1.1 cvs 3905:
1.18 cvs 3906: <div class="subsubsection">
1.37 cvs 3907: <h4><a name="sectd42145" id="sectd42145">Conditions on the element's
3908: content</a></h4>
1.1 cvs 3909:
1.37 cvs 3910: <p>The condition can be based on whether or not the element is empty. An
1.30 cvs 3911: element which has no children or whose leaves are all empty is considered to
1.37 cvs 3912: be empty itself. This condition is expressed by the <tt>Empty</tt> keyword,
1.30 cvs 3913: optionally preceded by the <tt>NOT</tt> keyword. This condition can be
3914: associated only with <a href="#sectc4232">creation rules</a>.</p>
1.18 cvs 3915: </div>
1.1 cvs 3916:
1.18 cvs 3917: <div class="subsubsection">
1.37 cvs 3918: <h4><a name="sectd42146" id="sectd42146">Conditions on counters</a></h4>
1.1 cvs 3919:
1.30 cvs 3920: <p>Presentation rules can apply when the counter's value is one, is even or
3921: odd, is equal, greater than or less than a given value or falls in a range of
1.37 cvs 3922: values. This is particularly useful for creating header and footer boxes.
1.18 cvs 3923: These conditions can be associated only with <a href="#sectc4232">creation
3924: rules</a>.</p>
1.30 cvs 3925:
3926: <p>To compare the value of a counter to a given value, a comparison is given
1.1 cvs 3927: between parentheses. The comparison is composed of the counter name followed
3928: by an equals, greater than, or less than sign and the value to which the
1.37 cvs 3929: counter will be compared. A test for whether or not a counter's value falls
3930: in a range also appears within parentheses. In this case, the counter name is
1.18 cvs 3931: followed by the <tt>IN</tt> keyword and the range definition within brackets.
3932: The <tt>Even</tt>, <tt>Odd</tt> and <tt>One</tt> are used to test a counter's
3933: value and are followed by the counter name between parentheses.</p>
1.30 cvs 3934:
3935: <p>The list of possible conditions on counters is:</p>
1.18 cvs 3936: <dl>
1.30 cvs 3937: <dt><tt>Even (Counter)</tt></dt>
3938: <dd>the box is created only if the counter has an even value.</dd>
3939: <dt><tt>Odd (Counter)</tt></dt>
3940: <dd>the box is created only if the counter has an odd value.</dd>
3941: <dt><tt>One (Counter)</tt></dt>
3942: <dd>the box is created only the counter's value is 1.</dd>
3943: <dt><tt>NOT One (Counter)</tt></dt>
3944: <dd>the box is created, unless the counter's value is 1.</dd>
3945: <dt><tt>(Counter < Value)</tt></dt>
3946: <dd>the box is created only if the counter's value is less than
3947: Value.</dd>
3948: <dt><tt>(Counter > Value)</tt></dt>
3949: <dd>the box is created only if the counter's value is greater than
3950: Value.</dd>
3951: <dt><tt>(Counter = Value)</tt></dt>
3952: <dd>the box is created only if the counter's value is equal to Value.</dd>
3953: <dt><tt>NOT (Counter = Value)</tt></dt>
3954: <dd>the is created only if the counter's value is different than
3955: Value.</dd>
3956: <dt><tt>(Counter IN [MinValue..MaxValue])</tt></dt>
3957: <dd>the box is created only if the counter's value falls in the range
3958: bounded by MinValue and MaxValue (inclusive).</dd>
3959: <dt><tt>NOT (Counter IN [MinValue..MaxValue])</tt></dt>
3960: <dd>the box is created only if the value of the counter does not fall in
3961: the range bounded by MinValue and MaxValue (inclusive).</dd>
1.18 cvs 3962: </dl>
1.30 cvs 3963:
3964: <p><strong>Note:</strong> the <tt>NOT Even</tt> and <tt>NOT Odd</tt>
3965: conditions are syntactically correct but can be expressed more simply by
3966: <tt>Odd</tt> and <tt>Even</tt>, respectively.</p>
1.18 cvs 3967: </div>
3968: </div>
1.1 cvs 3969:
1.18 cvs 3970: <div class="subsection">
1.37 cvs 3971: <h3><a name="sectc4215" id="sectc4215">A presentation rule</a></h3>
1.1 cvs 3972:
1.34 cvs 3973: <p>A presentation rule defines either a presentation property or presentation
1.37 cvs 3974: function. The properties are:</p>
1.18 cvs 3975: <ul>
1.30 cvs 3976: <li>the position of the vertical and horizontal reference axes of the
3977: box,</li>
3978: <li>the position of the box in relation to other boxes,</li>
3979: <li>the height or width of the box, with overflow exceptions,</li>
3980: <li>the margins, padding and borders of the box,</li>
3981: <li>the characteristics of the lines contained in the box: linespacing,
1.40 quint 3982: indentation of the first line, hyphenation, writing direction</li>
1.30 cvs 3983: <li>the conditions for breaking the box across pages,</li>
3984: <li>the characteristics of the characters contained in the box: size, font,
3985: style, underlining,</li>
3986: <li>the depth of the box among overlapping boxes (often called stacking
3987: order),</li>
3988: <li>the characteristics of graphic elements contained in the box: style and
3989: thickness of lines, fill pattern for closed objects,</li>
1.37 cvs 3990: <li>the colors in text, graphics, pictures, and symbols contained in the
3991: box are displayed or printed,</li>
1.30 cvs 3992: <li>for presentation boxes only, the contents of the box.</li>
3993: </ul>
3994:
1.37 cvs 3995: <p>The <a name="presfunct" id="presfunct">presentation functions</a> are:</p>
1.30 cvs 3996: <ul>
3997: <li>the creation of a presentation box</li>
3998: <li>the line-breaking or page-breaking style,</li>
3999: <li>the copying of another box,</li>
4000: <li>the display of the box background and border,</li>
4001: <li>the display of a background picture and its aspect.</li>
4002: </ul>
4003:
1.37 cvs 4004: <p>For each box and each view, every presentation property is defined once
4005: and only once, either explicitly or by the <a href="#sectc427">default
4006: rules</a>. In contrast, presentation functions are not obligatory and can
4007: appear many times for the same element. for example an element can create
4008: many presentation boxes. Another element may not use any presentation
1.18 cvs 4009: functions.</p>
1.30 cvs 4010:
1.34 cvs 4011: <p>Each rule defining a presentation property begins with a keyword followed
1.37 cvs 4012: by a colon. The keyword indicates the property which is the subject of the
4013: rule. After the keyword and the colon, the remainder of the rule varies. All
1.18 cvs 4014: rules are terminated by a semicolon.</p>
1.34 cvs 4015: <pre> Rule = Property ';' / PresFunc ';' .
4016: Property ='VertRef' ':' PositionHoriz /
1.6 cvs 4017: 'HorizRef' ':' PositionVert /
4018: 'VertPos' ':' VPos /
4019: 'HorizPos' ':' HPos /
4020: 'Height' ':' Dimension /
4021: 'Width' ':' Dimension /
4022: 'VertOverflow' ':' Boolean /
1.1 cvs 4023: 'HorizOverflow' ':' Boolean /
1.26 cvs 4024: 'MarginTop' ':' MarginWidth /
4025: 'MarginRight' ':' MarginWidth /
4026: 'MarginBottom' ':' MarginWidth /
4027: 'MarginLeft' ':' MarginWidth /
4028: 'PaddingTop' ':' PaddingWidth /
4029: 'PaddingRight' ':' PaddingWidth /
4030: 'PaddingBottom' ':' PaddingWidth /
4031: 'PaddingLeft' ':' PaddingWidth /
4032: 'BorderTopWidth' ':' BorderWidth /
4033: 'BorderRightWidth' ':' BorderWidth /
4034: 'BorderBottomWidth' ':' BorderWidth /
4035: 'BorderLeftWidth' ':' BorderWidth /
4036: 'BorderTopColor' ':' BorderColor /
4037: 'BorderRightColor' ':' BorderColor /
4038: 'BorderBottomColor' ':' BorderColor /
4039: 'BorderLeftColor' ':' BorderColor /
4040: 'BorderTopStyle' ':' BorderStyle /
4041: 'BorderRightStyle' ':' BorderStyle /
4042: 'BorderBottomStyle' ':' BorderStyle /
4043: 'BorderLeftStyle' ':' BorderStyle .
1.6 cvs 4044: 'LineSpacing' ':' DistanceInherit /
4045: 'Indent' ':' DistanceInherit /
4046: 'Adjust' ':' AdjustInherit /
4047: 'Hyphenate' ':' BoolInherit /
1.40 quint 4048: 'Direction' ':' DirInherit /
1.43 quint 4049: 'UnicodeBidi' ':' BidiInherit /
1.6 cvs 4050: 'PageBreak' ':' Boolean /
4051: 'LineBreak' ':' Boolean /
4052: 'InLine' ':' Boolean /
4053: 'NoBreak1' ':' AbsDist /
4054: 'NoBreak2' ':' AbsDist /
4055: 'Gather' ':' Boolean /
4056: 'Visibility' ':' NumberInherit /
4057: 'Size' ':' SizeInherit /
4058: 'Font' ':' NameInherit /
4059: 'Style' ':' StyleInherit /
1.23 cvs 4060: 'Weight' ':' WeightInherit /
1.6 cvs 4061: 'Underline' ':' UnderLineInherit /
4062: 'Thickness' ':' ThicknessInherit /
4063: 'Depth' ':' NumberInherit /
4064: 'LineStyle' ':' LineStyleInherit /
4065: 'LineWeight' ':' DistanceInherit /
4066: 'FillPattern' ':' NameInherit /
4067: 'Background' ':' NameInherit /
1.13 cvs 4068: 'Foreground' ':' NameInherit /
1.6 cvs 4069: 'Content' ':' VarConst .
1.1 cvs 4070: PresFunc = Creation '(' BoxID ')' /
4071: 'Line' /
4072: 'NoLine' /
4073: 'Page' '(' BoxID ')' /
1.13 cvs 4074: 'Copy' '(' BoxTypeToCopy ')' /
4075: 'ShowBox' /
1.18 cvs 4076: 'BackgroundPicture' ':' FileName /
4077: 'PictureMode' ':' PictMode /</pre>
4078: </div>
4079:
4080: <div class="subsection">
1.37 cvs 4081: <h3><a name="sectc4216" id="sectc4216">Box axes</a></h3>
1.18 cvs 4082:
1.30 cvs 4083: <p>The position of the middle axes <tt>VMiddle</tt> and <tt>HMiddle</tt> in
1.1 cvs 4084: relation to their box is always calculated automatically as a function of the
1.37 cvs 4085: height and width of the box and is not specified by the presentation rules.
4086: In the presentation schema, these middle axes are used only to position their
4087: box with respect to another by specifying the distance between the middle
4088: axis and an axis or a side of another box (see the <a
4089: href="#sectc4218">relative position</a>).</p>
4090:
4091: <p>The reference axes of a box are also used to position their box in
4092: relation to another, but in contrast to the middle axes, the presentation
4093: schema must make their position explicit, either in relation to a side or the
4094: middle axis of the box itself, or in relation to an axis of an enclosed
4095: box.</p>
1.30 cvs 4096:
1.37 cvs 4097: <p>Only boxes of base elements have predefined reference axes. For character
1.1 cvs 4098: string boxes, the horizontal reference axis is the baseline of the characters
4099: (the line which passes immediately under the upper-case letters, ignoring the
4100: letter Q) and the vertical reference axis is at the left edge of the first
1.18 cvs 4101: character of the string.</p>
1.30 cvs 4102:
1.37 cvs 4103: <p>The positions of a box's reference axes are defined by the
4104: <tt>VertRef</tt> and <tt>HorizRef</tt> rules which specify the <a
4105: href="#distance">distance</a> between the reference axis and an axis or
4106: parallel side of the same box or of an enclosed box.</p>
1.18 cvs 4107: <pre> 'VertRef' ':' PositionHoriz
4108: 'HorizRef' ':' PositionVert</pre>
1.30 cvs 4109:
1.18 cvs 4110: <blockquote class="example">
1.30 cvs 4111: <p><strong>Example:</strong></p>
4112:
4113: <p>If, in the structure schema for mathematical formulas, the fraction
4114: element is defined by</p>
4115: <pre>Fraction = BEGIN
1.1 cvs 4116: Numerator = Expression;
4117: Denominator = Expression;
1.18 cvs 4118: END;</pre>
1.30 cvs 4119:
4120: <p>then the horizontal reference axis of the fraction can be positioned on
4121: top of the denominator by the rule:</p>
4122: <pre>Fraction :
1.1 cvs 4123: BEGIN
4124: HorizRef : Enclosed Denominator . Top;
4125: ...
1.18 cvs 4126: END;</pre>
1.30 cvs 4127:
4128: <p>To put the horizontal reference axis of a column at its middle:</p>
4129: <pre>Column :
1.1 cvs 4130: BEGIN
4131: HorizRef : * . HMiddle;
4132: ...
1.18 cvs 4133: END;</pre>
4134: </blockquote>
4135: </div>
1.1 cvs 4136:
1.18 cvs 4137: <div class="subsection">
1.37 cvs 4138: <h3><a name="sectc4217" id="sectc4217">Distance units</a></h3>
1.1 cvs 4139:
1.30 cvs 4140: <p>Some distances and dimensions appear in many rules of a presentation
4141: schema, especially in position rules (<tt>VertPos, HorizPos</tt>), in extent
4142: rules for boxes (<tt>Height, Width</tt>), in rules defining lines
1.37 cvs 4143: (<tt>LineSpacing, Indent</tt>), in rules controlling pagination
4144: (<tt>NoBreak1, NoBreak2</tt>) and in rules specifying the thickness of
4145: strokes (<tt>LineWeight</tt>).</p>
1.30 cvs 4146:
4147: <p>In all these rules, the distance or extent can be expressed</p>
4148: <ul>
4149: <li>either in relative units, which depend on the size of the characters in
4150: the current font: height of the element's font or height of the letter
4151: 'x',</li>
1.37 cvs 4152: <li>or in absolute units: centimeter, millimeter, inch, typographer's
4153: point, pica or pixel.</li>
1.30 cvs 4154: </ul>
4155:
1.37 cvs 4156: <p>Units can be chosen freely. Thus, it is possible to use relative units in
1.30 cvs 4157: one rule, centimeters in the next rule, and typographer's points in
4158: another.</p>
4159:
1.37 cvs 4160: <p>Absolute units are used to set rigid rules for the appearance of
4161: documents. In contrast, relative units allow changes of scale. The editor
4162: lets the value of relative units be changed dynamically. Such changes affect
4163: every box using relative units simultaneously and in the same proportion.
4164: Changing the value of the relative units affects the size of the characters
4165: and graphical elements, and the size of the boxes and the distances between
4166: them.</p>
4167:
4168: <p>A <a name="distance" id="distance">distance</a> or extent is specified by
4169: a number, which may be followed by one or more spaces and a units keyword.
4170: When there is no units keyword, the number specifies the number of relative
4171: units, where a relative unit is the height of a character in the current font
4172: (an em). When the number is followed by a units keyword, the keyword
4173: indicates the type of absolute units:</p>
1.18 cvs 4174: <ul>
1.40 quint 4175: <li><tt>em</tt> : height of the element's font,</li>
4176: <li><tt>ex</tt> : height of the letter 'x',</li>
4177: <li><tt>cm</tt> : centimeter,</li>
4178: <li><tt>mm</tt> : millimeter,</li>
4179: <li><tt>in</tt> : inch (1 in = 2.54 cm),</li>
4180: <li><tt>pt</tt> : point (1 pt = 1/72 in),</li>
4181: <li><tt>pc</tt> : pica (1 pc = 12 pt),</li>
4182: <li><tt>px</tt> : pixel.</li>
1.18 cvs 4183: </ul>
1.30 cvs 4184:
4185: <p>Whatever the chosen unit, relative or absolute, the number is not
1.37 cvs 4186: necessarily an integer and may be expressed in fixed point notation (using
4187: the American convention of a period to express the decimal point).</p>
1.30 cvs 4188:
1.37 cvs 4189: <p>If the distance appears in a presentation rule for a numeric attribute,
4190: the number can be replaced by the name of an attribute. In this case, the
4191: value of the attribute is used. Obviously, the attribute name cannot be
4192: followed by a decimal point and a fractional part, but it can be followed a
4193: units keyword. However, the choice of units is limited to em, ex, pt and
4194: px.</p>
1.18 cvs 4195: <pre> Distance = [ Sign ] AbsDist .
1.1 cvs 4196: Sign ='+' / '-' .
4197: AbsDist = IntegerOrAttr [ '.' DecimalPart ]
4198: [ Unit ].
4199: IntegerOrAttr = IntegerPart / AttrID .
4200: IntegerPart = NUMBER .
4201: DecimalPart = NUMBER .
4202: Unit ='em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /
1.18 cvs 4203: 'pc' / 'px' / '%' .</pre>
1.30 cvs 4204:
1.18 cvs 4205: <blockquote class="example">
1.30 cvs 4206: <p><strong>Example:</strong></p>
4207:
4208: <p>The following rules specify that a box has a height of 10.5 centimeters
4209: and a width of 5.3 ems:</p>
4210: <pre>Height : 10.5 cm;
1.18 cvs 4211: Width : 5.3;</pre>
4212: </blockquote>
4213: </div>
1.1 cvs 4214:
1.18 cvs 4215: <div class="subsection">
1.37 cvs 4216: <h3><a name="sectc4218" id="sectc4218">Relative positions</a></h3>
1.1 cvs 4217:
1.37 cvs 4218: <p>The positioning of boxes uses the eight axes and sides, the sides
4219: generally being used to define the juxtapositioning (vertical or horizontal)
4220: of boxes, the middle axes being used to define centering, and the reference
4221: axes being used for alignment.</p>
4222:
4223: <p>Two rules allow a box to be placed relative to other boxes. The
4224: <tt>VertPos</tt> rule positions the box vertically. The <tt>HorizPos</tt>
4225: rule positions the box horizontally. It is possible that a box's position
4226: could be entirely determined by other boxes positioned relative to it. In
4227: this case, the position is implicit and the word <tt>nil</tt> can be used to
4228: specify that no position rule is needed. Otherwise, an explicit rule must be
1.18 cvs 4229: given by indicating the axis or side which defines the position of the box,
4230: followed by an equals sign and the distance between between this axis or side
1.37 cvs 4231: and a parallel axis or side of another box, called the reference box. The box
1.18 cvs 4232: for which the rule is written will be positioned relative to the reference
4233: box.</p>
4234: <pre> 'VertPos' ':' VPos
1.6 cvs 4235: 'HorizPos' ':' HPos
4236: HPos = 'nil' / VertAxis '=' HorizPosition
4237: [ 'UserSpecified' ].
4238: VPos = 'nil' / HorizAxis '=' VertPosition
4239: [ 'UserSpecified' ].
1.1 cvs 4240: VertAxis = 'Left' / 'VMiddle' / 'VRef' / 'Right' .
1.18 cvs 4241: HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .</pre>
1.30 cvs 4242:
1.37 cvs 4243: <p>The reference box is an adjacent box: enclosing, enclosed or adjacent.
4244: When a rule is associated with a reference type attribute (and only in this
4245: case), it can be a box of the element designated by the attribute. The
4246: reference box can be either a presentation box previously defined in the
4247: <tt>BOXES</tt> section of the schema and created by a creation function, or
4248: the box associated with a structured element.</p>
4249:
4250: <p>The structural position of the reference box (relative to the box for
4251: which the rule is being written) is indicated by a keyword:
4252: <tt>Enclosing</tt>, <tt>Enclosed</tt>, or, for sibling boxes,
4253: <tt>Previous</tt> or <tt>Next</tt>. The reference attributes, or presentation
4254: boxes created by a reference attribute, the <tt>Referred</tt> keyword may be
4255: used to designate the element which the reference points to. The keyword
4256: <tt>Creator</tt> can be used in rules for presentation boxes to designate the
4257: box of the element which created the presentation box. Finally, the
4258: <tt>Root</tt> keyword can be used to designate the root of the document.</p>
1.30 cvs 4259:
4260: <p>When the keyword is ambiguous, it is followed by the name of an element
4261: type or presentation box which resolves the ambiguity (the <tt>Creator</tt>
1.37 cvs 4262: and <tt>Root</tt> keywords are never ambiguous). If this name is not given,
1.30 cvs 4263: then the first box encountered is used as the reference box. It is also
4264: possible to use just the name of an element type or presentation box without
1.37 cvs 4265: an initial keyword. In this case, a sibling having that name will be used. If
1.30 cvs 4266: the name is preceded by the keyword <tt>NOT</tt>, then the reference box will
4267: be the first box whose type is not the named one.</p>
4268:
4269: <p>In place of the box or type name, the keywords <tt>AnyElem</tt>,
1.18 cvs 4270: <tt>AnyBox</tt> and <tt>ElemWithAttr</tt> can be used, representing
1.17 cvs 4271: respectively, any structured element box, any presentation box, and the box
4272: corresponding to any structured element having a particular attribute,
4273: whatever its value; the name of this attribute must follow the keyword
1.18 cvs 4274: <tt>ElemWithAttr</tt>.</p>
1.30 cvs 4275:
4276: <p>A type name may be preceded by a star in order to resolve the ambiguity in
4277: the special case where the structure schema defines an <a
1.18 cvs 4278: href="#sectd3284">inclusion</a> without expansion (or with partial expansion)
1.37 cvs 4279: of the same type as an element of the scheme. For mark pairs (and only for <a
1.18 cvs 4280: href="#sectd3285">mark pairs</a>) the type name <em>must</em> be preceded by
4281: the <tt>First</tt> or <tt>Second</tt> keyword, which indicates which of the
1.37 cvs 4282: two marks of the pair should be used as the reference box.</p>
1.30 cvs 4283:
4284: <p>The star character ('<tt>*</tt>') used alone designates the box to which
1.37 cvs 4285: the rule applies (in this case, it is obviously useless to specify the type
4286: of the reference box).</p>
1.30 cvs 4287:
1.37 cvs 4288: <p>The keywords <tt>Enclosing</tt> and <tt>Enclosed</tt> can be used no
4289: matter what constructor defines the type to which the rule applies. When
4290: applied to the element which represents the entire document,
4291: <tt>Enclosing</tt> designates the window or page in which the document's
4292: image is displayed for the view to which the rule applies. A box or type name
4293: without a keyword is used for aggregate elements and designates another
4294: element of the same aggregate. It can also be used to designate a
4295: presentation or page layout box. The keywords <tt>Previous</tt> and
4296: <tt>Next</tt> are primarily used to denote list elements, but can also be
4297: used to denote elements of an aggregate.</p>
4298:
4299: <p>In the position rule, the structural position relative to the reference
4300: box is followed, after a period, by the name of an axis or side. The rule
4301: specifies its node's position as being some distance from this axis or side
4302: of the reference box. If this distance is zero, then the distance does not
4303: appear in the rule. Otherwise, it does appear as a positive or negative
1.30 cvs 4304: number (the sign is required for negative numbers). The sign takes into
4305: account the orientation of the coordinate axes: for top to bottom for the
1.37 cvs 4306: vertical axis and from left to right for the horizontal axis. Thus, a
1.30 cvs 4307: negative distance in a vertical position indicates that the side or axis
4308: specified in the rule is above the side or axis of the reference box.</p>
4309:
1.37 cvs 4310: <p>The distance can be followed by the <tt>UserSpecified</tt> keyword (even
4311: if the distance is nil and does not appear, the <tt>UserSpecified</tt>
4312: keyword can be used). It indicates that when the element to which the rule
4313: applies is being created, the editor will ask the user to specify the
4314: distance himself, using the mouse. In this case, the distance specified in
4315: the rule is a default distance which is suggested to the user but can be
4316: modified. The <tt>UserSpecified</tt> keyword can be used either in the
4317: vertical position rule, the horizontal position rule, or both.</p>
1.18 cvs 4318: <pre> VertPosition = Reference '.' HorizAxis [ Distance ] .
1.1 cvs 4319: HorizPosition = Reference '.' VertAxis [ Distance ] .
4320: Reference ='Enclosing' [ BoxTypeNot ] /
4321: 'Enclosed' [ BoxTypeNot ] /
4322: 'Previous' [ BoxTypeNot ] /
4323: 'Next' [ BoxTypeNot ] /
4324: 'Referred' [ BoxTypeNot ] /
4325: 'Creator' /
4326: 'Root' /
4327: '*' /
4328: BoxOrType .
4329: BoxOrType = BoxID /
4330: [ '*' ] [ FirstSec ] ElemID /
1.17 cvs 4331: 'AnyElem' / 'AnyBox' /
4332: 'ElemWithAttr' AttrID .
1.18 cvs 4333: BoxTypeNot = [ 'NOT' ] BoxOrType .</pre>
1.30 cvs 4334:
1.18 cvs 4335: <blockquote class="example">
1.30 cvs 4336: <p><strong>Example:</strong></p>
4337:
1.37 cvs 4338: <p>If a <a name="expos1" id="expos1">report</a> is defined by the following
4339: structure schema:</p>
1.30 cvs 4340: <pre>Report = BEGIN
1.6 cvs 4341: Title = Text;
4342: Summary = Text;
4343: Keywords = Text;
4344: ...
1.18 cvs 4345: END;</pre>
1.30 cvs 4346:
4347: <p>then the presentation schema could contain the rules:</p>
4348: <pre>Report : BEGIN
1.6 cvs 4349: VertPos : Top = Enclosing . Top;
4350: HorizPos : Left = Enclosing . Left;
4351: ...
1.18 cvs 4352: END;</pre>
1.30 cvs 4353:
1.37 cvs 4354: <p>These rules place the <a name="reportexample"
4355: id="reportexample">report</a> in the upper left corner of the enclosing
4356: box, which is the window in which the document is being edited.</p>
1.30 cvs 4357: <pre>Title : BEGIN
1.6 cvs 4358: VertPos : Top = Enclosing . Top + 1;
4359: HorizPos : VMiddle = Enclosing . VMiddle;
4360: ...
1.18 cvs 4361: END;</pre>
1.30 cvs 4362:
1.37 cvs 4363: <p>The top of the title is one line (a line has the height of the
4364: characters of the title) from the top of the report, which is also the top
4365: of the editing window. The title is centered horizontally in the window
4366: (see <a href="#posdim">figure</a>).</p>
1.30 cvs 4367: <pre>Summary : BEGIN
1.1 cvs 4368: VertPos : Top = Title . Bottom + 1.5;
4369: HorizPos : Left = Enclosing . Left + 2 cm;
4370: ...
1.18 cvs 4371: END;</pre>
1.30 cvs 4372:
1.37 cvs 4373: <p>The top of the summary is place a line and a half below the bottom of
4374: the title and is shifted two centimeters from the side of the window.</p>
1.18 cvs 4375: </blockquote>
1.30 cvs 4376:
1.18 cvs 4377: <blockquote class="example">
1.30 cvs 4378: <p><strong>Example:</strong></p>
4379:
1.37 cvs 4380: <p>Suppose there is a <a name="expos2" id="expos2">Design</a> logical
4381: structure which contains graphical elements:</p>
1.30 cvs 4382: <pre>Design = LIST OF (ElemGraph = GRAPHICS);</pre>
4383:
4384: <p>The following rules allow the user to freely choose the position of each
4385: element when it is created:</p>
4386: <pre>ElemGraph =
1.1 cvs 4387: BEGIN
4388: VertPos : Top = Enclosing . Top + 1 cm UserSpecified;
4389: HorizPos: Left = Enclosing . Left UserSpecified;
4390: ...
1.18 cvs 4391: END;</pre>
1.30 cvs 4392:
4393: <p>Thus, when a graphical element is created, its default placement is at
4394: the left of the window and 1 cm from the top, but the user can move it
4395: immediately, simply by moving the mouse.</p>
1.18 cvs 4396: </blockquote>
4397: </div>
1.1 cvs 4398:
1.18 cvs 4399: <div class="subsection">
1.37 cvs 4400: <h3><a name="sectc4219" id="sectc4219">Box extents</a></h3>
1.1 cvs 4401:
1.30 cvs 4402: <p>The extents (height and width) of each box are defined by the two rules
1.37 cvs 4403: <tt>Height</tt> and <tt>Width</tt>. There are three types of extents: fixed,
1.18 cvs 4404: relative, and elastic.</p>
1.1 cvs 4405:
1.18 cvs 4406: <div class="subsubsection">
1.37 cvs 4407: <h4><a name="sectd42191" id="sectd42191">Fixed extents</a></h4>
1.1 cvs 4408:
1.30 cvs 4409: <p>A fixed dimension sets the height or width of the box independently of all
1.37 cvs 4410: other boxes. It is expressed in <a href="#sectc4217">distance units</a>. The
1.18 cvs 4411: extent can be followed by the <tt>UserSpecified</tt> keyword which indicates
1.1 cvs 4412: that when the element to which the rule applies is being created, the editor
1.37 cvs 4413: will ask the user to specify the extent himself, using the mouse. In this
1.1 cvs 4414: case, the extent specified in the rule is a default extent which is suggested
1.37 cvs 4415: to the user but can be modified. The <tt>UserSpecified</tt> keyword can be
1.18 cvs 4416: used either in the <tt>Height</tt> rule, the <tt>Width</tt> rule, or both.</p>
1.30 cvs 4417:
4418: <p>A fixed extent rule can be ended by the <tt>Min</tt> keyword, which
4419: signifies that the indicated value is a minimum, and that, if the contents of
4420: the box require it, a larger extent is possible.</p>
1.18 cvs 4421: <pre> 'Height' ':' Dimension
1.1 cvs 4422: 'Width' ':' Dimension
4423: Dimension = AbsDist [ 'UserSpecified' ] [ 'Min' ] /
1.18 cvs 4424: ...</pre>
1.30 cvs 4425:
1.18 cvs 4426: <blockquote class="example">
1.30 cvs 4427: <p><strong>Example:</strong></p>
4428:
4429: <p>Continuing with the <a href="#expos2">previous example</a>, it is
4430: possible to allow the user to choose the size of each graphical element as
4431: it is created:</p>
4432: <pre>ElemGraph : BEGIN
1.6 cvs 4433: Width : 2 cm UserSpecified;
1.1 cvs 4434: Height : 1 cm UserSpecified;
4435: ...
1.18 cvs 4436: END;</pre>
1.30 cvs 4437:
4438: <p>Thus, when a graphical element is create, it is drawn by default with a
4439: width of 2 cm and a height of 1 cm, but the user is free to resize it
4440: immediately with the mouse.</p>
4441: <pre>Summary : BEGIN
1.1 cvs 4442: Height : 5 cm Min;
4443: ...
4444: END;
4445: Keywords : BEGIN
4446: VertPos : Top = Summary . Bottom;
4447: ...
1.18 cvs 4448: END;</pre>
4449: </blockquote>
4450: </div>
1.1 cvs 4451:
1.18 cvs 4452: <div class="subsubsection">
1.37 cvs 4453: <h4><a name="sectd42192" id="sectd42192">Relative extents</a></h4>
1.30 cvs 4454:
4455: <p>A relative extent determines the extent as a function of the extent of
4456: another box, just as a relative position places a box in relation to another.
4457: The reference box in an extent rule is designated using the same syntax as is
1.37 cvs 4458: used in a relative position rule. It is followed by a period and a
1.30 cvs 4459: <tt>Height</tt> or <tt>Width</tt> keyword, depending on the extent being
1.37 cvs 4460: referred to. Next comes the relation between the extent being defined and the
4461: extent of the reference box. This relation can be either a percentage or a
1.30 cvs 4462: difference.</p>
1.1 cvs 4463:
1.37 cvs 4464: <p>A percentage is indicated by a star (the multiplication symbol) followed
4465: by the numeric percentage value (which may be greater than or less than 100)
4466: and the percent (`%') character. A difference is simply indicated by a signed
1.18 cvs 4467: difference.</p>
1.30 cvs 4468:
4469: <p>If the rule appears in the presentation rules of a numeric attribute, the
1.1 cvs 4470: percentage value can be replaced by the name of the attribute. This attribute
1.37 cvs 4471: is then used as a percentage. The attribute can also be used as part of a <a
1.18 cvs 4472: href="#distance">difference</a>.</p>
1.30 cvs 4473:
4474: <p>Just as with a fixed extent, a relative extent rule can end with the
1.18 cvs 4475: <tt>Min</tt> keyword, which signifies that the extent is a minimum and that,
4476: if the contents of the box require it, a larger extent is possible.</p>
1.30 cvs 4477:
4478: <p>A special case of relative extent rules is:</p>
1.18 cvs 4479: <pre>Height : Enclosed . Height;</pre>
1.30 cvs 4480:
4481: <p>or</p>
1.18 cvs 4482: <pre>Width : Enclosed . Width;</pre>
1.30 cvs 4483:
4484: <p>which specifies that the box has a height (or width) such that it encloses
4485: all the boxes which it contains, excluding boxes having a rule
4486: <tt>VertOverflow: Yes;</tt> or <tt>HorizOverflow: Yes;</tt>.</p>
4487:
4488: <p><strong>Note:</strong> character strings (type <tt>TEXT_UNIT</tt>)
4489: generally must use the sum of the widths of the characters which compose them
4490: as their width, which is expressed by the rule:</p>
1.18 cvs 4491: <pre>TEXT_UNIT :
4492: Width : Enclosed . Width;</pre>
1.30 cvs 4493:
4494: <p>If this rule is not the default <tt>Width</tt> rule, it must be given
1.18 cvs 4495: explicitly in the <tt>RULES</tt> section which defines the presentation rules
4496: of the logical elements.</p>
4497: <pre> 'Height' ':' Extent
1.1 cvs 4498: 'Width' ':' Extent
4499: Extent = Reference '.' HeightWidth [ Relation ]
4500: [ 'Min' ] / ...
4501: HeightWidth ='Height' / 'Width' .
4502: Relation ='*' ExtentAttr '%' / Distance .
4503: ExtentAttr = ExtentVal / AttrID .
1.18 cvs 4504: ExtentVal = NUMBER .</pre>
1.30 cvs 4505:
1.18 cvs 4506: <blockquote class="example">
1.30 cvs 4507: <p><strong>Example:</strong></p>
4508:
4509: <p>Completing the <a href="#expos1">above example</a>, it is possible to
4510: specify that the report takes its width from the editing window and its
4511: height from the size of its contents (this can obviously be greater than
4512: that of the window):</p>
4513: <pre>Report : BEGIN
1.1 cvs 4514: Width : Enclosing . Width;
4515: Height : Enclosed . Height;
4516: ...
1.18 cvs 4517: END;</pre>
1.30 cvs 4518:
4519: <p>Then, the following rules make the title occupy 60% of the width of the
4520: report (which is that of the window) and is broken into centered lines of
4521: this width (see the <a href="#sectc4222"><tt>Line</tt> rule</a>).</p>
4522: <pre>Title : BEGIN
1.1 cvs 4523: Width : Enclosing . Width * 60%;
4524: Height : Enclosed . Height;
4525: Line;
4526: Adjust : VMiddle;
4527: ...
1.18 cvs 4528: END;</pre>
1.30 cvs 4529:
4530: <p>The summary occupy the entire width of the window, with the exception of
4531: a 2 cm margin reserved by the horizontal position rule:</p>
4532: <pre>Summary : BEGIN
1.1 cvs 4533: Width : Enclosing . Width - 2 cm;
4534: Height : Enclosed . Height;
4535: ...
1.18 cvs 4536: END;</pre>
4537:
1.37 cvs 4538: <p>This set of rules, plus the <a href="#reportexample">position rules
4539: given above</a>, produce the layout of boxes shown in the following<a
1.30 cvs 4540: href="#posdim">figure</a>.</p>
4541:
4542: <div class="figure">
1.37 cvs 4543: <hr />
1.30 cvs 4544: <pre>-------------------------------------------------------------
1.1 cvs 4545: | Window and Report ^ |
4546: | | 1 line |
4547: | v |
4548: | ------------------------------------- |
4549: | | | |
4550: : 20% : Title : 20% :
1.30 cvs 4551: :<--------->: :<--------->:
1.1 cvs 4552: : : 60% : :
1.30 cvs 4553: : :<--------------------------------->: :
1.1 cvs 4554: | | | |
4555: | ------------------------------------- |
4556: | ^ |
4557: | | 1.5 line |
4558: | | |
4559: | v |
4560: | ---------------------------------------------------|
4561: | 2 cm | |
1.30 cvs 4562: |<------>| Summary |
1.18 cvs 4563: : : :</pre>
1.19 cvs 4564:
1.37 cvs 4565: <p align="center"><em><a name="posdim" id="posdim">Box position and
1.30 cvs 4566: extent</a><em></em></em></p>
1.37 cvs 4567: <hr />
1.30 cvs 4568: </div>
1.18 cvs 4569: </blockquote>
4570: </div>
1.1 cvs 4571:
1.18 cvs 4572: <div class="subsubsection">
1.37 cvs 4573: <h4><a name="sectd42193" id="sectd42193">Elastic extents</a></h4>
1.1 cvs 4574:
1.37 cvs 4575: <p>The last type of extent is the elastic extent. Either one or both extents
4576: can be elastic. A box has an elastic extent when two opposite sides are
1.30 cvs 4577: linked by distance constraints to two sides or axes of other boxes.</p>
4578:
4579: <p>One of the sides of the elastic box is linked by a position rule
1.37 cvs 4580: (<tt>VertPos</tt> or <tt>HorizPos</tt>) to a neighboring box. The other side
1.18 cvs 4581: is link to another box by a <tt>Height</tt> or <tt>Width</tt> rule, which
1.37 cvs 4582: takes the same form as the position rule. For the elastic box itself, the
1.1 cvs 4583: notions of sides (left or right, top or bottom) are fuzzy, since the movement
4584: of either one of the two reference boxes can, for example, make the left side
1.37 cvs 4585: of the elastic box move to the right of its right side. This is not
4586: important. The only requirement is that the two sides of the elastic box used
1.18 cvs 4587: in the position and extent rule are opposite sides of the box.</p>
4588: <pre> 'Height' ':' Extent
1.6 cvs 4589: 'Width' ':' Extent
1.18 cvs 4590: Extent = HPos / VPos / ...</pre>
1.30 cvs 4591:
1.18 cvs 4592: <blockquote class="example">
1.30 cvs 4593: <p><strong>Example:</strong></p>
4594:
4595: <p>Suppose we want to draw an elastic arrow or line between the middle of
1.37 cvs 4596: the bottom side of box A and the upper left corner of box B. To do this, we
1.30 cvs 4597: would define a graphics box whose upper left corner coincides with the
4598: middle of the bottom side of A (a position rule) and whose lower right
4599: corner coincides with with the upper left corner of B (dimension rules):</p>
4600: <pre>LinkedBox :
1.1 cvs 4601: BEGIN
1.6 cvs 4602: VertPos : Top = A .Bottom;
1.1 cvs 4603: HorizPos : Left = A . VMiddle;
1.6 cvs 4604: Height : Bottom = B . Top;
4605: Width : Right = B . Left;
1.18 cvs 4606: END;</pre>
4607: </blockquote>
1.30 cvs 4608:
1.18 cvs 4609: <blockquote class="example">
1.30 cvs 4610: <p><strong>Example:</strong></p>
4611:
4612: <p>The element SectionTitle creates a presentation box called SectionNum
1.37 cvs 4613: which contains the number of the section. Suppose we want to align the
4614: SectionNum and SectionTitle horizontally, have the SectionNum take its
4615: width from its contents (the section number), have the SectionTitle box
4616: begin 0.5 cm to the right of the SectionNum box and end at the right edge
4617: of its enclosing box. This would make the SectionTitle box elastic, since
4618: its width is defined by the position of its left and right sides. The
4619: following rules produce this effect:</p>
1.30 cvs 4620: <pre>SectionNum :
1.1 cvs 4621: BEGIN
4622: HorizPos : Left = Enclosing . Left;
4623: Width : Enclosed . Width;
4624: ...
4625: END;
4626:
4627: SectionTitle :
4628: BEGIN
4629: HorizPos : Left = SectionNum . Right + 0.5 cm;
4630: Width : Right = Enclosing . Right;
4631: ...
1.18 cvs 4632: END;</pre>
4633: </blockquote>
4634: </div>
4635: </div>
1.1 cvs 4636:
1.18 cvs 4637: <div class="subsection">
1.37 cvs 4638: <h3><a name="sectc4220" id="sectc4220">Overflow</a></h3>
1.1 cvs 4639:
1.30 cvs 4640: <p>A boxes corresponding to a structural element normally contain all boxes
1.37 cvs 4641: corresponding to the elements of its subtree. However, in some cases, it
1.1 cvs 4642: could be necessary to allow a box to jut out from its parent box. Two
4643: presentation rules indicate that such an overflow is allowed, one for
1.18 cvs 4644: horizontal overflow, one for vertical overflow.</p>
1.30 cvs 4645:
4646: <p>Each of these rules is expressed by a keyword followed by a colon and the
1.18 cvs 4647: keyword <tt>Yes</tt> or <tt>No</tt>.</p>
4648: <pre> 'VertOverflow' ':' Boolean /
1.1 cvs 4649: 'HorizOverflow' ':' Boolean .
1.18 cvs 4650: Boolean = 'Yes' / 'No' .</pre>
4651: </div>
1.1 cvs 4652:
1.30 cvs 4653: <p>@@@@@ ******</p>
4654:
1.26 cvs 4655: <p>Explain Margin, Padding and Border. Refer to CSS2.</p>
4656: <pre> 'MarginTop' ':' MarginWidth /
4657: 'MarginRight' ':' MarginWidth /
4658: 'MarginBottom' ':' MarginWidth /
4659: 'MarginLeft' ':' MarginWidth /
4660: 'PaddingTop' ':' PaddingWidth /
4661: 'PaddingRight' ':' PaddingWidth /
4662: 'PaddingBottom' ':' PaddingWidth /
4663: 'PaddingLeft' ':' PaddingWidth /
4664: 'BorderTopWidth' ':' BorderWidth /
4665: 'BorderRightWidth' ':' BorderWidth /
4666: 'BorderBottomWidth' ':' BorderWidth /
4667: 'BorderLeftWidth' ':' BorderWidth /
4668: 'BorderTopColor' ':' BorderColor /
4669: 'BorderRightColor' ':' BorderColor /
4670: 'BorderBottomColor' ':' BorderColor /
4671: 'BorderLeftColor' ':' BorderColor /
4672: 'BorderTopStyle' ':' BorderStyle /
4673: 'BorderRightStyle' ':' BorderStyle /
4674: 'BorderBottomStyle' ':' BorderStyle /
4675: 'BorderLeftStyle' ':' BorderStyle .
4676:
4677: MarginWidth = InheritParent / 'Auto' / Distance .
4678: PaddingWidth = InheritParent / Distance .
4679: BorderWidth = InheritParent / 'Thin' / 'Medium' / 'Thick' / Distance .
4680: BorderColor = InheritParent / 'Transparent' / 'Foreground' /
4681: ColorName .
4682: BorderStyle = InheritParent /
4683: 'None' / 'Hidden' / 'Dotted' / 'Dashed' / 'Solid' /
4684: 'Double' / 'Groove' / 'Ridge' / 'Inset' / 'Outset' .
1.27 cvs 4685: InheritParent = 'Enclosing' '=' / 'Creator' '=' .
1.26 cvs 4686: ColorName = NAME .</pre>
1.30 cvs 4687:
4688: <p>@@@@@ ******</p>
1.26 cvs 4689:
1.18 cvs 4690: <div class="subsection">
1.37 cvs 4691: <h3><a name="sectc4221" id="sectc4221">Inheritance</a></h3>
1.1 cvs 4692:
1.37 cvs 4693: <p>A presentation property can be defined by reference to the same property
4694: of another box in the tree of boxes. These structural links are expressed by
4695: kinship. The reference box can be that of the element immediately above in
1.18 cvs 4696: the structure (<tt>Enclosing</tt>), two levels above (<tt>GrandFather</tt>),
4697: immediately below (<tt>Enclosed</tt>) or immediately before
1.37 cvs 4698: (<tt>Previous</tt>). In the case of a presentation box, and only in that
1.1 cvs 4699: case, the reference box may be the element which created the presentation box
1.18 cvs 4700: (<tt>Creator</tt>).</p>
1.30 cvs 4701:
4702: <p>Kinship is expressed in terms of the logical structure of the document and
1.37 cvs 4703: not in terms of the tree of boxes. The presentation box cannot transmit any
1.34 cvs 4704: of their properties by inheritance; only structured element boxes can do so.
1.37 cvs 4705: As an example, consider an element B which follows an element A in the
4706: logical structure. The element B creates a presentation box P in front of
4707: itself, using the <tt>CreateBefore</tt> rule (see the <a
4708: href="#sectc4232">creation rules</a>). If element B's box inherits its
4709: character style using the <tt>Previous</tt> kinship operation, it gets its
4710: character style from A's box, not from P's box. Inheritance works differently
4711: for positions and extents, which can refer to presentation boxes.</p>
1.30 cvs 4712:
1.34 cvs 4713: <p>The inherited property value can be the same as that of the reference box.
1.37 cvs 4714: This is indicated by an equals sign. However, for numeric properties, a
1.1 cvs 4715: different value can be obtained by adding or subtracting a number from the
1.37 cvs 4716: reference box's property value. Addition is indicated by a plus sign before
4717: the number, while subtraction is specified with a minus sign. The value of a
1.34 cvs 4718: property can also be given a maximum (if the sign is a plus) or minimum (if
1.18 cvs 4719: the sign is a minus).</p>
1.30 cvs 4720:
4721: <p>If the rule is being applied to a numeric attribute, the number to add or
1.37 cvs 4722: subtract can be replaced by the attribute name. The value of a maximum or
4723: minimum may also be replaced by an attribute name. In these cases, the value
1.18 cvs 4724: of the attribute is used.</p>
4725: <pre> Inheritance = Kinship InheritedValue .
1.6 cvs 4726: Kinship ='Enclosing' / 'GrandFather' / 'Enclosed' /
4727: 'Previous' / 'Creator' .
1.1 cvs 4728: InheritedValue ='+' PosIntAttr [ 'Max' maximumA ] /
1.6 cvs 4729: '-' NegIntAttr [ 'Min' minimumA ] /
4730: '=' .
4731: PosIntAttr = PosInt / AttrID .
4732: PosInt = NUMBER .
4733: NegIntAttr = NegInt / AttrID .
4734: NegInt = NUMBER .
4735: maximumA = maximum / AttrID .
4736: maximum = NUMBER .
4737: minimumA = minimum / AttrID .
1.18 cvs 4738: minimum = NUMBER .</pre>
1.30 cvs 4739:
1.36 cvs 4740: <p>The properties which can be obtained by inheritance are hyphenation,
1.43 quint 4741: writing direction, Unicode-bidi, interline spacing, character font (font
4742: family), font style, font size, visibility, indentation, underlining,
4743: alignment of text, stacking order of objects, the style and thickness of
4744: lines, fill pattern and the colors of lines and characters.</p>
1.18 cvs 4745: </div>
1.1 cvs 4746:
1.18 cvs 4747: <div class="subsection">
1.37 cvs 4748: <h3><a name="sectc4222" id="sectc4222">Line breaking</a></h3>
1.1 cvs 4749:
1.30 cvs 4750: <p>The <tt>Line</tt> rule specifies that the contents of the box should be
4751: broken into lines: the boxes included in the box to which this rule is
4752: attached are displayed one after the other, from left to right, with their
1.37 cvs 4753: horizontal reference axes aligned so that they form a series of lines. The
1.30 cvs 4754: length of these lines is equal to the width of the box to which the
4755: <tt>Line</tt> rule is attached.</p>
4756:
4757: <p>When an included box overflows the current line, it is either carried
1.45 ! quint 4758: forward to the next line, broken, or left the way it is. The <a
1.18 cvs 4759: href="#sectc4223"><tt>LineBreak</tt> rule</a> is used to allow or prevent the
1.37 cvs 4760: breaking of included boxes. If the included box is not breakable but is
4761: longer than the space remaining on the line, it is left as is. When a
1.1 cvs 4762: character string box is breakable, the line is broken between words or, if
1.37 cvs 4763: necessary, by <a href="#sectd42225">hyphenating a word</a>. When a compound
4764: box is breakable, the box is transparent in regard to line breaking. The
4765: boxes included in the compound box are treated just like included boxes which
4766: have the <tt>LineBreak</tt> rule. Thus, it is possible to traverse a complete
1.18 cvs 4767: subtree of boxes to line break the text leaves of a complex structure.</p>
1.30 cvs 4768:
4769: <p>The relative position rules of the included boxes are ignored, since the
4770: boxes will be placed according to the line breaking rules.</p>
4771:
1.37 cvs 4772: <p>The <tt>Line</tt> rule does not have a parameter. The characteristics of
4773: the lines that will be constructed are determined by the
1.43 quint 4774: <tt>LineSpacing</tt>, <tt>Indent</tt>, <tt>Adjust</tt>, <tt>Hyphenate</tt>,
4775: <code>Direction</code> and <code>UnicodeBidi</code> rules. Moreover, the <a
1.37 cvs 4776: href="#insectd42226"><tt>Inline</tt> rule</a> permits the exclusion of
1.36 cvs 4777: certain elements from the line breaking process.</p>
1.30 cvs 4778:
4779: <p>When the <tt>Line</tt> rule appears in the rules sequence of a non-primary
1.37 cvs 4780: view, it applies only to that view, but when the <tt>Line</tt> rule appears
4781: in the rules sequence of the primary view, it also applies to the other views
4782: by default, except for those views which explicitly invoke the
4783: <tt>NoLine</tt> rule. Thus, the <tt>NoLine</tt> rule can be used in a
4784: non-primary view to override the primary view's <tt>Line</tt> rule. The
4785: <tt>NoLine</tt> rule must not be used with the primary view because the
4786: absence of the <tt>Line</tt> rule has the same effect. Like the <tt>Line</tt>
4787: rule, the <tt>NoLine</tt> rule does not take any parameters.</p>
1.18 cvs 4788: <pre> 'Line'
4789: 'NoLine'</pre>
4790:
4791: <div class="subsubsection">
1.37 cvs 4792: <h4><a name="sectd42221" id="sectd42221">Line spacing</a></h4>
1.18 cvs 4793:
1.30 cvs 4794: <p>The <tt>LineSpacing</tt> rule defines the line spacing to be used in the
1.37 cvs 4795: line breaking process. The line spacing is the distance between the baselines
1.1 cvs 4796: (horizontal reference axis) of the successive lines produced by the
1.37 cvs 4797: <tt>Line</tt> rule. The value of the line spacing can be specified as a
4798: constant or by inheritance. It is expressed in any of the available <a
1.18 cvs 4799: href="#sectc4217">distance units</a>.</p>
1.30 cvs 4800:
4801: <p>Inheritance allows the value to be obtained from a relative in the
4802: structure tree, either without change (an equals sign appears after the
4803: inheritance keyword), with a positive difference (a plus sign), or a negative
1.37 cvs 4804: difference (a minus sign). When the rule uses a difference, the value of the
1.30 cvs 4805: difference follows the sign and is expressed as a <a
4806: href="#sectc4217">distance</a>.</p>
1.18 cvs 4807: <pre> 'LineSpacing' ':' DistOrInherit
1.6 cvs 4808: DistOrInherit = Kinship InheritedDist / Distance .
1.18 cvs 4809: InheritedDist = '=' / '+' AbsDist / '-' AbsDist .</pre>
1.30 cvs 4810:
4811: <p>When the line spacing value (or its difference from another element) is
1.37 cvs 4812: expressed in relative units, it changes with the size of the characters.
4813: Thus, when a larger font is chosen for a part of the document, the line
4814: spacing of that part expands proportionally. In contrast, when the line
4815: spacing value is expressed in absolute units (centimeters, inches,
4816: typographer's points), it is independent of the characters, which permits the
4817: maintenance of a consistent line spacing, whatever the character font. Either
4818: approach can be taken, depending on the desired effect.</p>
1.18 cvs 4819: </div>
1.1 cvs 4820:
1.18 cvs 4821: <div class="subsubsection">
1.37 cvs 4822: <h4><a name="sectd42222" id="sectd42222">First line indentation</a></h4>
1.1 cvs 4823:
1.30 cvs 4824: <p>The <tt>Indent</tt> rule is used to specify the indentation of the first
4825: line of the elements broken into lines by the <tt>Line</tt> function. The
1.1 cvs 4826: indentation determines how far the first line of the element is shifted with
1.37 cvs 4827: respect to the other lines of the same element. It can be specified as a
4828: constant or by inheritance. The constant value is a positive integer (shifted
1.1 cvs 4829: to the right; the sign is optional), a negative integer (shifted to the left)
1.37 cvs 4830: or zero (no shift). All available <a href="#sectc4217">units</a> can be
1.18 cvs 4831: used.</p>
1.30 cvs 4832:
4833: <p>Indentation can be defined for any box, regardless of whether the box is
4834: line broken, and transmitted by inheritance to elements that are line broken.
4835: The size of the indentation is specified in the same manner as the <a
1.18 cvs 4836: href="#sectd42221">line spacing</a>.</p>
4837: <pre> 'Indent' ':' DistOrInherit</pre>
4838: </div>
1.1 cvs 4839:
1.18 cvs 4840: <div class="subsubsection">
1.37 cvs 4841: <h4><a name="sectd42223" id="sectd42223">Alignment</a></h4>
1.1 cvs 4842:
1.30 cvs 4843: <p>The alignment style of the lines constructed during line breaking is
1.37 cvs 4844: defined by the <tt>Adjust</tt> rule. The alignment value can be a constant or
4845: inherited. A constant value is specified by a keyword:</p>
1.18 cvs 4846: <ul>
1.40 quint 4847: <li><tt>Left</tt> : at the left edge,</li>
4848: <li><tt>Right</tt> : at the right edge,</li>
4849: <li><tt>VMiddle</tt> : centered</li>
4850: <li><tt>Justify</tt> : justified</li>
4851: <li><tt>LeftWithDots</tt> : at the left edge with a dotted line filling out
4852: the last line up to the right edge of the line breaking box.</li>
1.18 cvs 4853: </ul>
1.30 cvs 4854:
1.37 cvs 4855: <p>An inherited value can only be the same as that of the reference box and
4856: is specified by a kinship keyword followed by an equals sign.</p>
1.18 cvs 4857: <pre> 'Adjust' ':' AlignOrInherit
1.1 cvs 4858: AlignOrInherit = Kinship '=' / Alignment .
1.35 cvs 4859: Alignment = 'Left' / 'Right' / 'VMiddle' / 'Justify' /
1.18 cvs 4860: 'LeftWithDots' .</pre>
4861: </div>
1.1 cvs 4862:
1.18 cvs 4863: <div class="subsubsection">
1.37 cvs 4864: <h4><a name="sectd42225" id="sectd42225">Hyphenation</a></h4>
1.18 cvs 4865:
1.37 cvs 4866: <p>The <tt>Hyphenate</tt> rule indicates whether or not words should be
4867: broken by hyphenation at the end of lines. It affects the lines produced by
4868: the <tt>Line</tt> rule and contained in the box carrying the
4869: <tt>Hyphenate</tt> rule.</p>
1.30 cvs 4870:
1.34 cvs 4871: <p>The hyphenation property takes a boolean value, which can be either
1.37 cvs 4872: constant or inherited. A constant boolean value is expressed by either the
4873: <tt>Yes</tt> or the <tt>No</tt> keyword. An inherited value can only be the
1.1 cvs 4874: same as that of the reference box and is specified by a kinship keyword
1.18 cvs 4875: followed by an equals sign.</p>
4876: <pre> 'Hyphenate' ':' BoolInherit
1.1 cvs 4877: BoolInherit = Boolean / Kinship '=' .
1.18 cvs 4878: Boolean = 'Yes' / 'No' .</pre>
4879: </div>
4880:
4881: <div class="subsubsection">
1.40 quint 4882: <h4><a name="sectd422251" id="sectd422251">Writing direction</a></h4>
4883:
4884: <p>The <tt>Direction</tt> rule indicates the directionality of text: from
4885: left to right, as for latin scripts, or from right to left, as for the Arabic
1.43 quint 4886: or Hebrew scripts. This is used by the Unicode bidirectional algorithm.</p>
1.40 quint 4887:
4888: <p>The writing direction property takes either a constant value
4889: (<code>ltr</code> for left to right, or <code>rtl</code> for right to left)
4890: or it is inherited. If it is inherited, it can only be the same as that of
4891: the reference box and is specified by a kinship keyword followed by an equals
4892: sign.</p>
4893: <pre> 'Direction' ':' DirInherit
4894: DirInherit = 'ltr' / 'rtl' / Kinship '=' .</pre>
4895: </div>
4896:
1.43 quint 4897: <p>The <code>UnicodeBidi</code> rule is the equivalent of the CSS2
4898: <code>unicode-bidi</code> property. It takes the same values and acts in the
4899: same way.</p>
4900: <pre> 'Direction' ':' BidiInherit
4901: BidiInherit = 'Normal' / 'Embed' / 'Override' / Kinship '=' .</pre>
1.40 quint 4902:
4903: <div class="subsubsection">
1.37 cvs 4904: <h4><a name="sectd42226" id="sectd42226">Avoiding line breaking</a></h4>
1.18 cvs 4905:
1.37 cvs 4906: <p>The <tt>InLine</tt> rule is used to specify that a box that would
4907: otherwise participate in line breaking asked for by the <tt>Line</tt> rule of
4908: an enclosing box, instead avoids the line breaking process and positions
4909: itself according to the <tt>HorizPos</tt> and <tt>VertPos</tt> rules that
4910: apply to it. When the <tt>InLine</tt> rule applies to a box which would not
4911: be line broken, it has no effect.</p>
1.30 cvs 4912:
4913: <p>The rule is expressed by the <tt>InLine</tt> keyword followed by a colon
4914: and the keyword <tt>Yes</tt>, if the box should participate in line breaking,
1.37 cvs 4915: or the keyword <tt>No</tt>, if it should not. This is the only form possible:
4916: this rule cannot be inherited. Moreover, it can only appear in the rules of
1.1 cvs 4917: the primary view and applies to all views defined in the presentation
1.18 cvs 4918: schema.</p>
4919: <pre> 'InLine' ':' Boolean .
4920: Boolean = 'Yes' / 'No' .</pre>
1.30 cvs 4921:
1.18 cvs 4922: <blockquote class="example">
1.30 cvs 4923: <p><strong>Example:</strong></p>
4924:
4925: <p>Suppose the structure schema defines a logical attribute called
1.37 cvs 4926: <tt>New</tt> which is used to identify the passages in a document which
4927: were recently modified. It would be nice to have the presentation schema
4928: make a bar appear in the left margin next to each passage having the
4929: <tt>New</tt> attribute. A new passage can be an entire element, such as a
4930: paragraph or section, or it can be some words in the middle of a paragraph.
4931: To produce the desired effect, the <tt>New</tt> attribute is given a
4932: creation rule which generates a <tt>VerticalBar</tt> presentation box.</p>
1.30 cvs 4933:
4934: <p>When the <tt>New</tt> attribute is attached to a character string which
4935: is inside a line broken element (inside a paragraph, for example), the bar
4936: is one of the elements which participates in line breaking and it is placed
4937: normally in the current line, at the end of the character string which has
1.37 cvs 4938: the attribute. To avoid this, the <tt>InLine</tt> rule is used in the
1.30 cvs 4939: following way:</p>
4940: <pre>BOXES
1.1 cvs 4941: VerticalBar:
4942: BEGIN
4943: Content: Graphics 'l';
4944: HorizPos: Left = Root . Left;
4945: VertPos: Top = Creator . Top;
4946: Height: Bottom = Creator . Bottom;
4947: Width: 1 pt;
4948: InLine: No;
4949: ...
4950: END;
4951: ...
4952: ATTRIBUTES
4953: Nouveau:
4954: BEGIN
4955: CreateAfter(VerticalBar);
1.18 cvs 4956: END;</pre>
4957: </blockquote>
4958: </div>
4959: </div>
1.1 cvs 4960:
1.18 cvs 4961: <div class="subsection">
1.37 cvs 4962: <h3><a name="sectc4223" id="sectc4223">Page breaking and line breaking
4963: conditions</a></h3>
1.1 cvs 4964:
1.30 cvs 4965: <p>Pages are constructed by the editor in accordance with the model specified
1.37 cvs 4966: by a <a href="#sectc4233"><tt>Page</tt> rule</a>. The page model describes
1.30 cvs 4967: only the composition of the pages but does not give any rules for breaking
1.37 cvs 4968: different element types across pages. Now, it is possible that certain
4969: elements must not be cut by page breaks, while others can be cut anywhere.
4970: The <tt>PageBreak</tt>, <tt>NoBreak1</tt>, and <tt>NoBreak2</tt> rules are
4971: used to specify the conditions under which each element type can be cut.</p>
1.30 cvs 4972:
4973: <p>The <tt>PageBreak</tt> rule is used to indicate whether or not the box can
1.37 cvs 4974: be cut during the construction of pages. If cutting is authorized, the box
4975: can be cut, with one part appearing at the bottom of a page and the other
4976: part appearing at the top of the next page. The rule is formed by the
1.18 cvs 4977: <tt>PageBreak</tt> keyword followed by a colon and a constant boolean value
1.37 cvs 4978: (<tt>Yes</tt> or <tt>No</tt>). This is the only form possible: this rule
4979: cannot be inherited. Moreover, it can only appear in the rules of the primary
1.18 cvs 4980: view and applies to all views defined in the presentation schema.</p>
1.30 cvs 4981:
4982: <p>Whether objects can be cut by line breaks can be controlled in a similar
1.37 cvs 4983: way using the <tt>LineBreak</tt> rule. This rule allows the specification of
4984: whether or not the box can be cut during the construction of lines. If
1.1 cvs 4985: cutting is authorized, the box can be cut, with one part appearing at the end
1.37 cvs 4986: of a line and the other part appearing at the beginning of the next line. The
1.18 cvs 4987: rule is formed by the <tt>LineBreak</tt> keyword followed by a colon and a
1.37 cvs 4988: constant boolean value (<tt>Yes</tt> or <tt>No</tt>). This is the only form
4989: possible: this rule cannot be inherited. Moreover, it can only appear in the
4990: rules of the primary view and applies to all views defined in the
4991: presentation schema.</p>
1.18 cvs 4992: <pre> 'PageBreak' ':' Boolean .
1.1 cvs 4993: 'LineBreak' ':' Boolean .
1.18 cvs 4994: Boolean = 'Yes' / 'No' .</pre>
1.30 cvs 4995:
4996: <p>When a box can be cut by a page break, it is possible that a page break
4997: will fall an inappropriate spot, creating, for example, a widow or orphan, or
1.37 cvs 4998: separating the title of a section from the first paragraph of the section.
4999: The <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules are used to avoid this.
5000: They specify that the box of the element to which they apply cannot be cut
5001: within a certain zone at the top (<tt>NoBreak1</tt> rule) or at the bottom
5002: (<tt>NoBreak2</tt> rule). These two rules specify the height of the zones in
1.18 cvs 5003: which page breaks are prohibited.</p>
1.30 cvs 5004:
5005: <p>The <tt>NoBreak1</tt> and <tt>NoBreak2</tt> rules give the height of the
1.37 cvs 5006: zone in which page breaking is prohibited. The height is given as a constant
1.30 cvs 5007: value using any of the <a href="#sectc4217">available units</a>, absolute or
1.37 cvs 5008: relative. The value may not be inherited.</p>
1.18 cvs 5009: <pre> 'NoBreak1' ':' AbsDist .
5010: 'NoBreak2' ':' AbsDist .</pre>
1.30 cvs 5011:
1.18 cvs 5012: <blockquote class="example">
1.30 cvs 5013: <p><strong>Example:</strong></p>
5014:
5015: <p>The following rules prevent widows and orphans in a paragraph:</p>
5016: <pre>Paragraph :
1.1 cvs 5017: BEGIN
5018: NoBreak1 : 2;
5019: NoBreak2 : 2;
1.18 cvs 5020: END;</pre>
1.30 cvs 5021:
1.37 cvs 5022: <p>This rule prevents a section title from becoming separated from the
5023: first paragraph of the section by prohibiting page breaks at the beginning
5024: of the section rule:</p>
1.30 cvs 5025: <pre>Section :
1.18 cvs 5026: NoBreak1 : 1.5 cm;</pre>
1.30 cvs 5027:
5028: <p>Finally, this rule prevents a figure from being page broken in any
5029: way:</p>
5030: <pre>Figure :
1.18 cvs 5031: PageBreak : No;</pre>
5032: </blockquote>
1.30 cvs 5033:
5034: <p>The Thot editor constructs the document images displayed on the screen
1.37 cvs 5035: dynamically. As the user moves in the document or makes the document scroll
1.1 cvs 5036: in a window, the editor constructs the image to be displayed in little bits,
1.37 cvs 5037: filling the gaps which are produced in the course of these operations. It
1.1 cvs 5038: stops filling in the image when an element reaches the edge of the window in
1.37 cvs 5039: which the gap appears. If the appearance of the document is complex, it is
1.1 cvs 5040: possible that the image in incomplete, even though the edge of the window was
1.37 cvs 5041: reached. For example, an element might need to be presented to the side of
5042: the last element displayed, but its image was not constructed. The user will
1.1 cvs 5043: not know whether the element is really absent or if its image has simply not
1.18 cvs 5044: been constructed.</p>
1.30 cvs 5045:
1.37 cvs 5046: <p>The <tt>Gather</tt> rule is used to remedy this problem. When the rule
1.18 cvs 5047: <tt>Gather : Yes;</tt> is associated with an element type, the image of such
5048: elements is constructed as a block by the editor: it is never split up.</p>
1.30 cvs 5049:
5050: <p>The <tt>Gather</tt> rule may not appear in the <a href="#sectc427">default
1.37 cvs 5051: rules</a>. Elements which do not have the <tt>Gather</tt> rule are considered
5052: susceptible to being split up during display. Thus, it is not necessary to
1.18 cvs 5053: use the <tt>Gather : No;</tt> form. This rule must be used prudently and only
1.37 cvs 5054: for those elements which truly need it. If used incorrectly, it can
1.18 cvs 5055: pointlessly increase the size of the image constructed by the editor and lead
5056: to excessive memory consumption by the editor.</p>
1.30 cvs 5057:
5058: <p>Like the <tt>PageBreak</tt> and <tt>LineBreak</tt> rules, the
5059: <tt>Gather</tt> rule can only appear in rules of the primary view and applies
5060: to all views defined in the presentation schema.</p>
1.18 cvs 5061: <pre> 'Gather' ':' Boolean .</pre>
5062: </div>
1.1 cvs 5063:
1.18 cvs 5064: <div class="subsection">
1.37 cvs 5065: <h3><a name="sectc4224" id="sectc4224">Visibility</a></h3>
1.1 cvs 5066:
1.34 cvs 5067: <p>The visibility property is used to control which elements should or should
1.37 cvs 5068: not be displayed, based on context. An element can have different
5069: visibilities in different views. If an element's visibility is zero for a
5070: view, that element is not displayed in that view and does not occupy any
5071: space (its extents are zero).</p>
1.30 cvs 5072:
1.37 cvs 5073: <p>Visibility takes non-negative integer values (positive or zero). If values
1.1 cvs 5074: greater than 1 are used, they allow the user to choose a degree of visibility
1.37 cvs 5075: and, thus, to see only those boxes whose visibility property exceeds a
5076: certain threshold. This gives the user control over the granularity of the
5077: displayed pictures.</p>
1.30 cvs 5078:
1.34 cvs 5079: <p>The visibility property can be defined as a constant or by inheritance. If
1.1 cvs 5080: defined by inheritance, it cannot be based on the value of the next or
1.37 cvs 5081: previous box. Visibility can only be inherited from above.</p>
1.30 cvs 5082:
5083: <p>If it is a numeric attribute's presentation rule, the visibility can be
1.37 cvs 5084: specified by the attribute's name, in which case the value of the attribute
5085: is used.</p>
1.18 cvs 5086: <pre> 'Visibility' ':' NumberInherit
1.1 cvs 5087: NumberInherit = Integer / AttrID / Inheritance .
1.18 cvs 5088: Integer = NUMBER .</pre>
1.30 cvs 5089:
1.18 cvs 5090: <blockquote class="example">
1.30 cvs 5091: <p><strong>Example:</strong></p>
5092:
5093: <p>Suppose that only <tt>Formula</tt> elements should be displayed in the
1.37 cvs 5094: <tt>MathView</tt> view. Then, the default rules should include:</p>
1.30 cvs 5095: <pre>DEFAULT
1.18 cvs 5096: IN MathView Visibility:0;</pre>
1.30 cvs 5097:
1.31 cvs 5098: <p>which makes all elements invisible in the <tt>MathView</tt> view.
1.30 cvs 5099: However, the <tt>Formula</tt> element also has a <tt>Visibility</tt>
5100: rule:</p>
5101: <pre>Formula :
1.18 cvs 5102: IN MathView Visibility:5;</pre>
1.30 cvs 5103:
5104: <p>which makes formulas, and only formulas, visible.</p>
1.18 cvs 5105: </blockquote>
5106: </div>
1.1 cvs 5107:
1.18 cvs 5108: <div class="subsection">
1.37 cvs 5109: <h3><a name="sectc4225" id="sectc4225">Character style properties</a></h3>
1.1 cvs 5110:
1.34 cvs 5111: <p>Four properties are used to determine which characters are used to display
1.37 cvs 5112: text. They are size, font, style, and underlining.</p>
1.1 cvs 5113:
1.18 cvs 5114: <div class="subsubsection">
1.37 cvs 5115: <h4><a name="sectd42251" id="sectd42251">Character size</a></h4>
1.30 cvs 5116:
1.37 cvs 5117: <p>The size property has two effects. First, it is used to specify the actual
1.34 cvs 5118: size and distance units for boxes defined in <a href="#sectc4217">relative
1.37 cvs 5119: units</a>. Second, it defines the size of the characters contained in the
1.34 cvs 5120: box.</p>
1.1 cvs 5121:
1.30 cvs 5122: <p>As a distance or length, the size can be expressed in abstract or absolute
1.37 cvs 5123: units. It can also be inherited. If it is not inherited, it is expressed
5124: simply as an integer followed by the <tt>pt</tt> keyword, which indicates
5125: that the size is expressed in typographer's points. The absence of the
5126: <tt>pt</tt> keyword indicates that it is in abstract units in which the value
5127: 1 represents the smallest size while the value 16 is the largest size. The
5128: relationship between these abstract sizes and the real character sizes is
5129: controlled by a table which can be modified statically or even dynamically
5130: during the execution of the Thot editor.</p>
1.30 cvs 5131:
5132: <p>If the <tt>Size</tt> rule is a numeric attribute's presentation rule, the
1.34 cvs 5133: value of the size property can be specified by the attribute's name, in which
1.30 cvs 5134: case the value of the attribute is used.</p>
5135:
1.37 cvs 5136: <p><strong>Note:</strong> the only unit available for defining an absolute
5137: size is the typographer's point. Centimeters and inches may not be used.</p>
1.30 cvs 5138:
5139: <p>If the size is inherited, the rule must specify the relative from which to
5140: inherit and any percentage or difference from that relative's value. A
5141: percentage is indicated by a <tt>*</tt> followed by the value of the
5142: percentage and a <tt>%</tt>. A difference can be expressed in either
5143: typographer's points or in abstract units and the maximum or minimum size can
1.37 cvs 5144: be specified, but without specifying the unit: it is the same as was
5145: specified for the difference.</p>
1.30 cvs 5146:
5147: <p>In a numeric attribute's presentation rule, the difference in size or the
1.22 cvs 5148: percentage can be indicated by the attribute's name instead of the numeric
1.37 cvs 5149: value, which means that the attribute's value should be used as the
5150: difference or percentage. The attribute can also be used as the minimum or
5151: maximum size for a difference.</p>
1.22 cvs 5152: <pre> 'Size' ':' SizeInherit
5153: SizeInherit = SizeAttr [ 'pt' ] /
5154: Kinship InheritedSize .
5155: InheritedSize ='+' SizeAttr [ 'pt' ]
5156: [ 'Max' MaxSizeAttr ] /
5157: '-' SizeAttr [ 'pt' ]
5158: [ 'Min' MinSizeAttr ] /
5159: '*' PercentSizeAttr '%' /
5160: '=' .
5161: SizeAttr = Size / AttrID .
5162: Size = NUMBER .
5163: MaxSizeAttr = MaxSize / AttrID .
5164: MaxSize = NUMBER .
5165: MinSizeAttr = MinSize / AttrID .
5166: MinSize = NUMBER .
5167: PercentSizeAttr = PercentSize / AttrID .
5168: PercentSize = NUMBER .</pre>
1.30 cvs 5169:
1.18 cvs 5170: <blockquote class="example">
1.30 cvs 5171: <p><strong>Example:</strong></p>
5172:
5173: <p>The rule</p>
5174: <pre>Size : Enclosing - 2 pt Min 7;</pre>
5175:
5176: <p>states that the character size is 2 points less than that of the
5177: enclosing box, but that it may not be less than 7 points, whatever the
5178: enclosing box's value.</p>
5179:
5180: <p>The following rules make the text of a report be displayed with
5181: medium-sized characters (for example, size 5), while the title is displayed
5182: with larger characters and the summary is displayed with smaller
5183: characters:</p>
5184: <pre>Report :
1.1 cvs 5185: Size : 5;
5186: Title :
5187: Size : Enclosing + 2;
5188: Summary :
1.18 cvs 5189: Size : Enclosing - 1;</pre>
1.30 cvs 5190:
5191: <p>Thus, the character sizes in the entire document can be changed by
1.34 cvs 5192: changing the size property of the Report element, while preserving the
1.30 cvs 5193: relationships between the sizes of the different elements.</p>
1.18 cvs 5194: </blockquote>
5195: </div>
5196:
5197: <div class="subsubsection">
1.37 cvs 5198: <h4><a name="sectd42252" id="sectd42252">Font and character style</a></h4>
1.18 cvs 5199:
1.37 cvs 5200: <p>The <tt>Font</tt> rule determines the font family to be used to display
5201: the characters contained in the box, while the <tt>Style</tt> rule determines
5202: their style and the <tt>Weight</tt> rule determines their weight. Thot
1.23 cvs 5203: recognizes three character fonts (Times, Helvetica, and Courier), three
5204: styles: Roman, Italics, and Oblique, and two weights: Normal and Bold.</p>
1.30 cvs 5205:
5206: <p>The font family, style and weight can be specified by a named constant or
1.37 cvs 5207: can be inherited. For the name of the font family only the first character is
1.30 cvs 5208: used.</p>
5209:
5210: <p>Only identical inheritance is allowed: the box takes the same font, style
1.37 cvs 5211: or weight as the box from which it inherits. This is indicated by an equals
1.23 cvs 5212: sign after the kinship specification.</p>
5213: <pre> 'Font' ':' NameInherit /
5214: 'Style' ':' StyleInherit /
5215: 'Weight' ':' WeightInherit /
5216:
5217: NameInherit = Kinship '=' / FontName .
5218: FontName = NAME .
5219: StyleInherit = Kinship '=' /
5220: 'Roman' / 'Italics' / 'Oblique' .
5221: WeightInherit = Kinship '=' /
5222: 'Normal' / 'Bold' .</pre>
1.30 cvs 5223:
1.18 cvs 5224: <blockquote class="example">
1.30 cvs 5225: <p><strong>Example:</strong></p>
5226:
5227: <p>To specify that the summary uses the font family of the rest of the
5228: document, but in the italic style, the following rules are used:</p>
5229: <pre>Summary :
1.1 cvs 5230: BEGIN
5231: Font : Enclosing =;
5232: Style : Italics;
1.18 cvs 5233: END;</pre>
5234: </blockquote>
5235: </div>
5236:
5237: <div class="subsubsection">
1.37 cvs 5238: <h4><a name="sectd42253" id="sectd42253">Underlining</a></h4>
1.18 cvs 5239:
1.30 cvs 5240: <p>The <tt>Underline</tt> rule is used to specify if the characters contained
1.37 cvs 5241: in a box should have lines drawn on or near them. There are four underlining
1.18 cvs 5242: styles: <tt>Underlined</tt>, <tt>Overlined</tt>, <tt>CrossedOut</tt>, and
1.37 cvs 5243: <tt>NoUnderline</tt>. The <tt>Thickness</tt> rule specifies the thickness of
1.18 cvs 5244: the line, <tt>Thin</tt> or <tt>Thick</tt>.</p>
1.30 cvs 5245:
5246: <p>As with font family and style, only identical inheritance is allowed: the
1.37 cvs 5247: box has the same underlining type as the box from which it inherits the
5248: value. This is indicated by an equals sign after the kinship
5249: specification.</p>
1.18 cvs 5250: <pre> 'Underline' ':' UnderLineInherit /
1.1 cvs 5251: 'Thickness' ':' ThicknessInherit /
5252:
5253: UnderLineInherit = Kinship '=' / 'NoUnderline' /
5254: 'Underlined' /
5255: 'Overlined' / 'CrossedOut' .
1.18 cvs 5256: ThicknessInherit = Kinship '=' / 'Thick' / 'Thin' .</pre>
5257: </div>
5258: </div>
5259:
5260: <div class="subsection">
1.37 cvs 5261: <h3><a name="sectc4226" id="sectc4226">Stacking order</a></h3>
1.18 cvs 5262:
1.30 cvs 5263: <p>The <tt>Depth</tt> rule is used to define the stacking order of terminal
1.37 cvs 5264: boxes when multiple boxes at least partially overlap. This rule defines how
5265: the depth property, which is zero or a positive integer, is calculated. The
5266: depth property has a value for all boxes. For terminal boxes in the structure
1.34 cvs 5267: and for presentation boxes, the depth value is used during display and
5268: printing: the boxes with the lowest value overlap those with higher depths.
1.37 cvs 5269: For non-terminal boxes, the depth is not interpreted during display, but it
5270: is used to calculate the depth of terminal boxes by inheritance.</p>
1.30 cvs 5271:
5272: <p>Like most other rules, the depth rule is defined in the <a
1.37 cvs 5273: href="#sectc427">default rules</a> of each presentation schema. Thus, there
1.18 cvs 5274: is always a depth value, even when it is not necessary because there is no
1.37 cvs 5275: overlapping. To avoid useless operations, a zero value can be given to the
1.34 cvs 5276: depth property, which signifies that overlapping is never a problem.</p>
1.30 cvs 5277:
5278: <p>The depth rule has the same form as the <a href="#sectc4224">visibility
1.18 cvs 5279: rule</a>. It can be defined by inheritance or by a constant numeric value.
5280: When the rule is attached to a numeric attribute, it can take the value of
5281: that attribute.</p>
5282: <pre> 'Depth' ':' NumberInherit</pre>
1.30 cvs 5283:
1.18 cvs 5284: <blockquote class="example">
1.30 cvs 5285: <p><strong>Example:</strong></p>
5286:
5287: <p>For a purely textual document, in which overlapping never poses a
5288: problem, a single default <tt>Depth</tt> rule in the presentation schema is
5289: sufficient:</p>
5290: <pre>DEFAULT
1.1 cvs 5291: Depth : 0;
1.18 cvs 5292: ...</pre>
1.30 cvs 5293:
5294: <p>To make the text of examples appear on a light blue background, a
5295: presentation box is defined:</p>
5296: <pre>BOXES
1.1 cvs 5297: BlueBG :
5298: BEGIN
5299: Content : Graphics 'R';
5300: Background : LightBlue3;
5301: FillPattern: backgroundcolor;
5302: Depth : 2;
5303: ...
1.18 cvs 5304: END;</pre>
1.30 cvs 5305:
5306: <p>and is created by the <tt>Example</tt> element, which has the rules:</p>
5307: <pre>RULES
1.1 cvs 5308: Example :
5309: BEGIN
5310: CreateFirst (BlueBG);
5311: Depth : 1;
5312: ...
1.18 cvs 5313: END;</pre>
1.30 cvs 5314:
5315: <p>In this way, the text of an example (if it inherits its depth from its
5316: ancestor) will be superimposed on a light blue background, and not the
5317: reverse).</p>
1.18 cvs 5318: </blockquote>
5319: </div>
5320:
5321: <div class="subsection">
1.37 cvs 5322: <h3><a name="sectc4227" id="sectc4227">Line style</a></h3>
1.18 cvs 5323:
1.30 cvs 5324: <p>The <tt>LineStyle</tt> rule determines the style of line which should be
5325: used to draw all the elements contained in the box and the box itself, if it
1.37 cvs 5326: has a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>. The line style can be
1.18 cvs 5327: indicated by a name (<tt>Solid</tt>, <tt>Dashed</tt>, <tt>Dotted</tt>) or it
1.37 cvs 5328: can be inherited. All elements of the graphic base type are affected by this
1.1 cvs 5329: rule, but it can be attached to any box and transmitted by inheritance to the
1.37 cvs 5330: graphic elements. The border of elements having a <a
1.18 cvs 5331: href="#sectc4230a"><tt>ShowBox</tt> rule</a> is drawn according to the line
5332: style specified by this rule.</p>
1.30 cvs 5333:
1.37 cvs 5334: <p>Only identical inheritance is allowed: the box takes the same line style
5335: as the box from which it inherits. This is indicated by an equals sign after
5336: the kinship specification.</p>
1.18 cvs 5337: <pre> 'LineStyle' ':' LineStyleInherit
1.1 cvs 5338: LineStyleInherit = Kinship '=' /
1.18 cvs 5339: 'Solid' / 'Dashed' / 'Dotted' .</pre>
1.30 cvs 5340:
1.18 cvs 5341: <blockquote class="example">
1.30 cvs 5342: <p><strong>Example:</strong></p>
5343:
1.37 cvs 5344: <p>To specify that, in Figures, the graphical parts should be drawn in
5345: solid lines, the Figure element is given a rule using the <tt>Solid</tt>
5346: name:</p>
1.30 cvs 5347: <pre>Figure :
1.18 cvs 5348: LineStyle : Solid;</pre>
1.30 cvs 5349:
5350: <p>and the elements composing figures are given an inheritance rule:</p>
5351: <pre> LineStyle : Enclosing =;</pre>
1.18 cvs 5352: </blockquote>
5353: </div>
5354:
5355: <div class="subsection">
1.37 cvs 5356: <h3><a name="sectc4228" id="sectc4228">Line thickness</a></h3>
1.18 cvs 5357:
1.37 cvs 5358: <p>The <tt>LineWeight</tt> rule determines the thickness of the lines of all
1.1 cvs 5359: graphical elements which appear in the box, no matter what their line style.
1.37 cvs 5360: Line thickness can be specified by a constant value or by inheritance. A
5361: constant value is a positive number followed by an optional unit
5362: specification (which is absent when using relative units). All available <a
5363: href="#sectc4217">distance units</a> can be used. Line thickness is expressed
1.18 cvs 5364: in the same way as <a href="#sectd42221">line spacing</a>.</p>
5365: <pre> 'LineWeight' ':' DistOrInherit</pre>
1.30 cvs 5366:
1.37 cvs 5367: <p>All elements of the graphic base type are affected by this rule, but it
5368: can be attached to any box and transmitted by inheritance to the graphic
5369: elements. The border of element having a <a
5370: href="#sectc4230a"><tt>ShowBox</tt> rule</a> is also drawn according to the
5371: thickness specified by this rule.</p>
1.30 cvs 5372:
1.18 cvs 5373: <blockquote class="example">
1.30 cvs 5374: <p><strong>Example:</strong></p>
5375:
5376: <p>To specify that, in Figures, the graphical parts should be drawn with
5377: lines 0.3 pt thick, the Figure element is given this rule:</p>
5378: <pre>Figure :
1.18 cvs 5379: LineWeight : 0.3 pt;</pre>
1.30 cvs 5380:
5381: <p>and the elements composing figures are given an inheritance rule:</p>
5382: <pre> LineWeight : Enclosing =;</pre>
1.18 cvs 5383: </blockquote>
5384: </div>
5385:
5386: <div class="subsection">
1.37 cvs 5387: <h3><a name="sectc4229" id="sectc4229">Fill pattern</a></h3>
1.18 cvs 5388:
1.30 cvs 5389: <p>The <tt>FillPattern</tt> rule determines the pattern used to fill closed
1.37 cvs 5390: graphical elements (circles, rectangles, etc.) which appear in the box. This
1.18 cvs 5391: rule also specifies the pattern used to fill the box associated with elements
1.37 cvs 5392: having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a><a>. This pattern can
5393: be indicated by a named constant or by inheritance. The named constant
5394: identifies one of the patterns available in Thot. The names of the available
1.18 cvs 5395: patterns are: nopattern, foregroundcolor, backgroundcolor, gray1, gray2,
5396: gray3, gray4, gray5, gray6, gray7, horiz1, horiz2, horiz3, vert1, vert2,
1.37 cvs 5397: vert3, left1, left2, left3, right1, right2, right3, square1, square2,
5398: square3, lozenge, brick, tile, sea, basket.</a></p>
1.30 cvs 5399:
5400: <p>Like the other rules peculiar to graphics, <tt>LineStyle</tt> and
1.18 cvs 5401: <tt>LineWeight</tt>, only elements of the graphic base type are affected by
5402: the <tt>FillPattern</tt> rule, but the rule can be attached to any box and
1.37 cvs 5403: transmitted by inheritance to the graphic elements. As with the other rules
1.18 cvs 5404: specific to graphics, only identical inheritance is allowed.</p>
1.30 cvs 5405:
5406: <p>The <tt>FillPattern</tt> rule can also be used to determine whether or not
1.37 cvs 5407: text characters, symbols and pictures should be colored. For these element
1.12 cvs 5408: types (text, symbols, and pictures), the only valid values are
1.18 cvs 5409: <tt>nopattern</tt>, <tt>foregroundcolor</tt>, and <tt>backgroundcolor</tt>.
5410: When <tt>FillPattern</tt> has the value <tt>backgroundcolor</tt>, text
5411: characters, symbols, and bitmaps are given the color specified by the <a
5412: href="#sectc4230"><tt>Background</tt> rule</a> which applies to these
1.37 cvs 5413: elements. When <tt>FillPattern</tt> has the value <tt>foregroundcolor</tt>,
1.18 cvs 5414: these same elements are given the color specified by the <a
5415: href="#sectc4230"><tt>Foreground</tt> rule</a> which applies to these
1.37 cvs 5416: elements. In all other case, text characters are not colored.</p>
1.18 cvs 5417: <pre> 'FillPattern' ':' NameInherit</pre>
1.30 cvs 5418:
1.18 cvs 5419: <blockquote class="example">
1.30 cvs 5420: <p><strong>Example:</strong></p>
5421:
5422: <p>To specify that, in Figures, the closed graphical elements should be
5423: filled with a pattern resembling a brick wall, the Figure element is given
5424: this rule:</p>
5425: <pre>Figure :
1.18 cvs 5426: FillPattern : brick;</pre>
1.30 cvs 5427:
5428: <p>and the elements composing figures are given an inheritance rule:</p>
5429: <pre> FillPattern : Enclosing =;</pre>
1.18 cvs 5430: </blockquote>
5431: </div>
5432:
5433: <div class="subsection">
1.37 cvs 5434: <h3><a name="sectc4230" id="sectc4230">Colors</a></h3>
1.18 cvs 5435:
1.30 cvs 5436: <p>The <tt>Foreground</tt> and <tt>Background</tt> rules determine the
1.37 cvs 5437: foreground and background colors of the base elements which appear in the
5438: box. They also control the color of boxes associated with elements having a
5439: <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>. These colors can be
5440: specified with a named constant or by inheritance. The named constants
5441: specify one of the available colors in Thot. The available color names can be
5442: found in the file <tt>thot.color</tt>. In addition to those names, you can
5443: use the keyword <code>Transparent</code>, to not draw anything.</p>
5444:
5445: <p>The color rules affect the same way all base elements and elements having
5446: a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>, no matter what their type
5447: (text, graphics, pictures, symbols). The color rules can be associated with
1.30 cvs 5448: any box and can be transmitted by inheritance to the base elements or the
1.37 cvs 5449: elements having a <a href="#sectc4230a"><tt>ShowBox</tt> rule</a>. Like the
1.30 cvs 5450: preceding rules, only inheritance of the same value is allowed.</p>
5451: <pre> 'Foreground' ':' Color
5452: 'Background' ':' Color
5453: Color = 'Transparent' / Link '=' / FontColorName .</pre>
5454:
5455: <p><strong>Note:</strong> text colors only appear for text elements whose <a
1.18 cvs 5456: href="#sectc4229">fill pattern</a> does not prevent the use of color.</p>
1.30 cvs 5457:
1.18 cvs 5458: <blockquote class="example">
1.30 cvs 5459: <p><strong>Example:</strong></p>
5460:
5461: <p>To specify that, in Figures, everything must be drawn in blue on a
5462: background of yellow, the Figure element is given these rules:</p>
5463: <pre>Figure :
1.1 cvs 5464: BEGIN
5465: Foreground : Blue;
5466: Background : Yellow;
5467: Fillpattern : backgroundcolor;
1.18 cvs 5468: END;</pre>
1.30 cvs 5469:
5470: <p>and the elements composing figures are given inheritance rules:</p>
5471: <pre> Foreground : Enclosing =;
1.1 cvs 5472: Background : Enclosing =;
1.18 cvs 5473: FillPattern : Enclosing =;</pre>
5474: </blockquote>
5475: </div>
5476:
5477: <div class="subsection">
1.37 cvs 5478: <h3><a name="sectc4230a" id="sectc4230a">Background color and border</a></h3>
1.18 cvs 5479:
1.30 cvs 5480: <p>Boxes associated with structural elements are normally not visible, but it
1.37 cvs 5481: is possible to draw their border and/or to paint their area when it is
5482: needed. This is achieved by associating the <tt>ShowBox</tt> rule with the
5483: concerned element. This rule has no parameter and no value. It is simply
5484: written <tt>Showbox;</tt>. It is not inherited nor transmitted to any other
5485: element. It applies only to the element with which it is associated.</p>
1.18 cvs 5486: <pre> 'ShowBox'</pre>
1.30 cvs 5487:
5488: <p>When an element has a <tt>ShowBox</tt> rule, the border is drawn only if
1.37 cvs 5489: the <tt>LineWeight</tt> rule that applies to that element has a non-zero
5490: value (this value can be inherited). The color, style and thickness of the
5491: border are defined by the <tt>Foreground</tt>, <tt>LineStyle</tt>, and
1.18 cvs 5492: <tt>LineWeight</tt> rules that apply to the element.</p>
1.30 cvs 5493:
1.37 cvs 5494: <p>When an element has a <tt>ShowBox</tt> rule, the background of this
5495: element is paint only if the value of the <tt>FillPattern</tt> rule that
5496: applies to that element is not <tt>nopattern</tt>. The pattern and color(s)
5497: of the background are defined by the <tt>FillPattern</tt>,
5498: <tt>Background</tt>, and <tt>Foreground</tt> rules that apply to the
5499: element.</p>
1.18 cvs 5500: </div>
5501:
5502: <div class="subsection">
1.37 cvs 5503: <h3><a name="sectc4230b" id="sectc4230b">Background pictures</a></h3>
1.18 cvs 5504:
1.30 cvs 5505: <p>The <tt>BackgroundPicture</tt> rule allows to display a picture as the
1.37 cvs 5506: background of an element. It has a single parameter, the file name of the
5507: picture. This is a string delimited by single quotes. If the first character
1.18 cvs 5508: in this string is '/', it is considered as an absolute path, otherwise the
1.37 cvs 5509: file is searched for along the schema directory path. This file may contain a
1.18 cvs 5510: picture in any format accepted by Thot (xbm, xpm, gif, jpeg, png, etc.)</p>
1.30 cvs 5511:
1.37 cvs 5512: <p>The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only
5513: to the element with which they are associated. They are not inherited nor
1.18 cvs 5514: transmitted to children elements.</p>
1.30 cvs 5515:
5516: <p>The background picture has not always the same size as the element's box.
1.37 cvs 5517: There are diffrent ways to fill the element box with the picture. This is
1.18 cvs 5518: specified by the <tt>PictureMode</tt> rule, which should be associated to the
1.37 cvs 5519: same element. This rule may take one of the following values:</p>
1.18 cvs 5520: <dl>
1.30 cvs 5521: <dt><tt>NormalSize</tt></dt>
5522: <dd>The picture is centered in the box, and clipped if it is too
5523: large.</dd>
5524: <dt><tt>Scale</tt></dt>
5525: <dd>The picture is zoomed to fit the box size.</dd>
5526: <dt><tt>RepeatX</tt></dt>
5527: <dd>The picture is repeated horizontally to fit the box width.</dd>
5528: <dt><tt>RepeatY</tt></dt>
5529: <dd>The picture is repeated vertically to fit the box height.</dd>
5530: <dt><tt>RepeatXY</tt></dt>
5531: <dd>The picture is repeated both horizontally and vertically to fill the
5532: box.</dd>
1.18 cvs 5533: </dl>
1.30 cvs 5534:
5535: <p>If an element has a <tt>BackgroundPicture</tt> rule and no
1.18 cvs 5536: <tt>PictureMode</tt> rule, the <tt>NormalSize</tt> value is assumed.</p>
5537: <pre> 'BackgroundPicture' ':' FileName /
1.13 cvs 5538: 'PictureMode' ':' PictMode .
5539:
5540: FileName = STRING .
1.18 cvs 5541: PictMode = 'NormalSize' / 'Scale' / 'RepeatXY' / 'RepeatX' / 'RepeatY' .</pre>
1.30 cvs 5542:
1.37 cvs 5543: <p>The <tt>BackgroundPicture</tt> and <tt>PictureMode</tt> rules apply only
5544: to the element with which they are associated. They are not inherited nor
1.18 cvs 5545: transmitted to children elements.</p>
5546: </div>
1.13 cvs 5547:
1.18 cvs 5548: <div class="subsection">
1.37 cvs 5549: <h3><a name="sectc4231" id="sectc4231">Presentation box content</a></h3>
1.1 cvs 5550:
1.37 cvs 5551: <p>The <tt>Content</tt> rule applies to presentation boxes. It indicates the
5552: content given to a box. This content is either a variable's value or a
5553: constant value.</p>
1.30 cvs 5554:
5555: <p>If the content is a constant, it can be specified, as in a variable
1.18 cvs 5556: declaration, either by the name of a constant declared in the <tt>CONST</tt>
1.1 cvs 5557: section or by direct specification of the type and value of the box's
1.18 cvs 5558: content.</p>
1.30 cvs 5559:
5560: <p>Similarly, if it is a variable, the name of a variable declared in
1.18 cvs 5561: <tt>VAR</tt> section can be given or the variable may be defined within
1.37 cvs 5562: parentheses. The content inside the parentheses has the same syntax as a <a
1.18 cvs 5563: href="#sectc426">variable declaration</a>.</p>
5564: <pre> 'Content' ':' VarConst
1.1 cvs 5565: VarConst = ConstID / ConstType ConstValue /
1.38 cvs 5566: VarID / '(' FunctionSeq ')' .</pre>
1.30 cvs 5567:
5568: <p>A presentation box can have only one <tt>Content</tt> rule, which means
1.37 cvs 5569: that the content of a presentation box cannot vary from view to view.
5570: However, such an effect can be achieved by creating several presentation
5571: boxes, each with different content and visible in different views.</p>
5572:
5573: <p>The <tt>Content</tt> rule also applies to elements defined as references
5574: in the structure schema. In this case, the content defined by the rule must
5575: be a constant. It is this content which appears on the screen or paper to
5576: represent references of the type to which the rule applies. A reference can
1.18 cvs 5577: have a <tt>Content</tt> rule or a <a href="#sectc4234"><tt>Copy</tt> rule</a>
1.37 cvs 5578: for each view. If neither of these rules appears, the reference is displayed
1.18 cvs 5579: as <tt>[*]</tt>, which is equivalent to the rule:</p>
5580: <pre> Content: Text '[*]';</pre>
1.30 cvs 5581:
1.18 cvs 5582: <blockquote class="example">
1.30 cvs 5583: <p><strong>Example:</strong></p>
5584:
5585: <p>The content of the presentation box created to make the chapter number
5586: and section number appear before each section title can be defined by:</p>
5587: <pre>BOXES
1.1 cvs 5588: SectionNumBox :
5589: BEGIN
5590: Content : NumSection;
5591: ...
1.18 cvs 5592: END;</pre>
1.30 cvs 5593:
5594: <p>if the <tt>NumSection</tt> variable has been defined in the variable
1.37 cvs 5595: definition section of the presentation schema. Otherwise the
1.30 cvs 5596: <tt>Content</tt> would be written:</p>
5597: <pre>BOXES
1.1 cvs 5598: SectionNumBox :
5599: BEGIN
5600: Content : (VALUE (ChapterCtr, Roman) TEXT '.'
5601: VALUE (SectionCtr, Arabic));
5602: ...
1.18 cvs 5603: END;</pre>
5604: </blockquote>
5605: </div>
1.1 cvs 5606:
1.18 cvs 5607: <div class="subsection">
1.37 cvs 5608: <h3><a name="sectc4232" id="sectc4232">Presentation box creation</a></h3>
1.1 cvs 5609:
1.37 cvs 5610: <p>A creation rule specifies that a presentation box should be created when
5611: an element of the type to which the rule is attached appears in the
5612: document.</p>
1.30 cvs 5613:
5614: <p>A keyword specifies the position, relative to the creating box, at which
5615: the created box will be placed in the structure:</p>
1.18 cvs 5616: <dl>
1.30 cvs 5617: <dt><tt>CreateFirst</tt></dt>
5618: <dd>specifies that the box should be created as the first box of the next
5619: lower level, before any already existing boxes, and only if the
5620: beginning of the creating element is visible;</dd>
5621: <dt><tt>CreateLast</tt></dt>
5622: <dd>specifies that the box should be created as the last box of the next
5623: lower level, after any existing boxes, and only if the end of the
5624: creating element is visible;</dd>
5625: <dt><tt>CreateBefore</tt></dt>
5626: <dd>specifies that the box should be created before the creating box, on
5627: the same level as the creating box, and only if the beginning of the
5628: creating element is visible;</dd>
5629: <dt><tt>CreateAfter</tt></dt>
5630: <dd>specifies that the box should be created after the creating box, on
5631: the same level as the creating box, and only if the beginning of the
5632: creating element is visible;</dd>
5633: <dt><tt>CreateEnclosing</tt></dt>
1.37 cvs 5634: <dd>specifies that the box should be created at the upper level
5635: relatively to the creating box, and that it must contain that creating
5636: box and all presentation boxes created by the same creating box.</dd>
1.18 cvs 5637: </dl>
1.30 cvs 5638:
5639: <p>This keyword can be followed by the <tt>Repeated</tt> keyword to indicate
5640: that the box must be created for each part of the creating element. These
5641: parts result from the division of the element by page breaks or column
1.37 cvs 5642: changes. If the <tt>Repeated</tt> keyword is missing, the box is only created
1.30 cvs 5643: for the first part of the creating element (<tt>CreateFirst</tt> and
1.18 cvs 5644: <tt>CreateBefore</tt> rules) or for the last part (<tt>CreateLast</tt> and
5645: <tt>CreateAfter</tt> rules).</p>
1.30 cvs 5646:
5647: <p>The type of presentation to be created is specified at the end of the rule
1.18 cvs 5648: between parentheses.</p>
1.30 cvs 5649:
5650: <p>Creation rules cannot appear in the <a href="#sectc427">default
1.37 cvs 5651: presentation rules</a>. The boxes being created should have a
1.30 cvs 5652: <tt>Content</tt> rule which indicates their <a
5653: href="#sectc4231">content</a>.</p>
5654:
5655: <p>Creation rules can only appear in the block of rules for the primary view;
1.1 cvs 5656: creation is provoked by a document element for all views. However, for each
1.37 cvs 5657: view, the presentation box is only created if the creating element is itself
5658: a box in the view. Moreover, the visibility property of the presentation box
5659: can be adjusted to control the creation of the box on a view-by-view
5660: basis.</p>
1.18 cvs 5661: <pre> Creation '(' BoxID ')'
1.1 cvs 5662: Creation = Create [ 'Repeated' ] .
5663: Create ='CreateFirst' / 'CreateLast' /
5664: 'CreateBefore' / 'CreateAfter' /
1.18 cvs 5665: 'CreateEnclosing' .</pre>
1.30 cvs 5666:
1.18 cvs 5667: <blockquote class="example">
1.30 cvs 5668: <p><strong>Example:</strong></p>
5669:
5670: <p>Let us define an object type, called Table, which is composed of a
5671: sequence of columns, all having the same fixed width, where the columns are
1.37 cvs 5672: separated by vertical lines. There is a line to the left of the first
5673: column and one to the right of the last. Each column has a variable number
1.31 cvs 5674: of cells, placed one on top of the other and separated by horizontal lines.
5675: There are no horizontal lines above the first cell or below the last cell.
1.37 cvs 5676: The text contained in each cell is broken into lines and these lines are
1.30 cvs 5677: centered horizontally in the cell. The logical structure of this object is
5678: defined by:</p>
5679: <pre>Table = LIST OF (Column);
1.18 cvs 5680: Column = LIST OF (Cell = Text);</pre>
5681:
1.30 cvs 5682: <div class="figure">
1.37 cvs 5683: <hr />
1.30 cvs 5684: <pre>| | | |
1.1 cvs 5685: | xx xxxx xxxx |x xxxx xxx xxxxx| x xxx x xxx |
5686: | xxx xxx xxxx x | x xx x xxx | xxxxx xxxx xx |
5687: | xxxxx xxxx |----------------| xxx xxxxx x |
5688: | xxxxx xxx xxxx | xxxx xx xx xxx | xx xx |
5689: | xxx xxxx x xxx | xxxx x xxx x |---------------|
5690: |----------------| xxx xxxx xxxxx | xxxxx xxxxx |
5691: | xxx xxx xxxxxx |----------------| xxx xxxx xxxx |
5692: | xxxx xxxx xx | xxxx xx x xx | xxx xx x xx |
5693: |----------------| xxx xxxxx xxxx | xxxx xxxx xxx |
5694: | xxxxx xxx xxxx | xxxx xx x xx | xxxxx xxx |
1.18 cvs 5695: |xxxx xx x xxxxxx| xxxx xx xxxxxx | xxxxx xxxxx |</pre>
1.19 cvs 5696:
1.37 cvs 5697: <p align="center"><em><a name="table" id="table">The design of a
5698: table</a></em></p>
5699: <hr />
1.30 cvs 5700: </div>
5701:
5702: <p>The presentation of the table should resemble the design of the above <a
1.37 cvs 5703: href="#table">figure</a>. It is defined by the following presentation
1.30 cvs 5704: schema fragment:</p>
5705: <pre>BOXES
1.1 cvs 5706: VertLine : BEGIN
5707: Width : 0.3 cm;
5708: Height : Enclosing . Height;
5709: VertPos : Top = Enclosing . Top;
5710: HorizPos : Left = Previous . Right;
5711: Content : Graphics 'v';
5712: END;
5713:
5714: HorizLine: BEGIN
5715: Width : Enclosing . Width;
5716: Height : 0.3 cm;
5717: VertPos : Top = Previous . Bottom;
5718: HorizPos : Left = Enclosing . Left;
5719: Content : Graphics 'h';
5720: END;
5721:
5722: RULES
1.6 cvs 5723: Column : BEGIN
5724: CreateBefore (VertLine);
5725: IF LAST CreateAfter (VertLine);
5726: Width : 2.8 cm;
5727: Height : Enclosed . Height;
5728: VertPos : Top = Enclosing . Top;
5729: HorizPos : Left = Previous . Right;
5730: END;
5731:
5732: Cell : BEGIN
5733: IF NOT FIRST CreateBefore (HorizLine);
5734: Width : Enclosing . Width;
5735: Height : Enclosed . Height;
5736: VertPos : Top = Previous . Bottom;
5737: HorizPos : Left = Enclosing . Left;
5738: Line;
5739: Adjust : VMiddle;
1.18 cvs 5740: END;</pre>
1.30 cvs 5741:
5742: <p>It is useful to note that the horizontal position rule of the first
5743: vertical line will not be applied, since there is no preceding box. In this
5744: case, the box is simply placed on the left side of the enclosing box.</p>
1.18 cvs 5745: </blockquote>
5746: </div>
5747:
5748: <div class="subsection">
1.37 cvs 5749: <h3><a name="sectc4233" id="sectc4233">Page layout</a></h3>
1.18 cvs 5750:
1.30 cvs 5751: <p>The page models specified in the <tt>Page</tt> rule are defined by boxes
1.37 cvs 5752: declared in the <tt>BOXES</tt> section of the presentation schema. Pages are
1.1 cvs 5753: not described as frames which will be filled by the document's text, but as
5754: element are inserted in the flow of the document and which mark the page
1.37 cvs 5755: breaks. Each of these page break elements contains presentation boxes which
1.1 cvs 5756: represent the footer boxes of a page followed by header boxes of the next
1.37 cvs 5757: page. The page box itself is the simple line which separates two pages on the
5758: screen. Both the footer and header boxes placed themselves with respect to
1.1 cvs 5759: this page box, with the footer being placed above it and the header boxes
1.18 cvs 5760: being placed above it.</p>
1.30 cvs 5761:
5762: <p>The boxes created by a page box are headers and footers and can only place
1.1 cvs 5763: themselves vertically with respect to the page box itself (which is in fact
1.37 cvs 5764: the separation between two pages). Besides, it is their vertical position
5765: rule which determines whether they are header or footer boxes. Header and
1.1 cvs 5766: footer boxes must have an explicit vertical position rule (they must not use
1.18 cvs 5767: the default rule).</p>
1.30 cvs 5768:
5769: <p>Footer boxes must have an absolute height or inherit the height of their
1.18 cvs 5770: contents:</p>
5771: <pre>Height : Enclosed . Height;</pre>
1.30 cvs 5772:
5773: <p>A page box must have height and width rules and these two rules must be
1.1 cvs 5774: specified with constant values, expressed in centimeters, inches, or
1.37 cvs 5775: typographer's points. These two rules are interpreted in a special way for
5776: page boxes: they determine the width of the page and the vertical distance
1.1 cvs 5777: between two page separators, which is the height of the page and its header
1.18 cvs 5778: and footer together.</p>
1.30 cvs 5779:
5780: <p>A page box should also have vertical and horizontal position rules and
5781: these two rules should specify the position on the sheet of paper of the
1.37 cvs 5782: rectangle enclosing the page's contents. These two rules must position the
1.30 cvs 5783: upper left corner of the enclosing rectangle in relation to the upper left
1.37 cvs 5784: corner of the sheet of paper, considered to be the enclosing element. In both
1.30 cvs 5785: rules, distances must be expressed in fixed units: centimeters (<tt>cm</tt>),
1.37 cvs 5786: inches (<tt>in</tt>), or typographer's points (<tt>pt</tt>). Thus, rules
1.30 cvs 5787: similar to the following should be found in the rules for a page box:</p>
1.18 cvs 5788: <pre>BOXES
1.1 cvs 5789: ThePage :
5790: BEGIN
5791: VertPos : Top = Enclosing . Top + 3 cm;
5792: HorizPos : Left = Enclosing . Left + 2.5 cm;
5793: Width : 16 cm;
5794: Height : 22.5 cm;
1.18 cvs 5795: END;</pre>
1.30 cvs 5796:
5797: <p>When a document must be page broken, the page models to be constructed are
1.18 cvs 5798: defined in the <tt>BOXES</tt> section of the presentation schema by declaring
1.37 cvs 5799: page boxes and header and footer boxes. Also, the <tt>Page</tt> rule is used
5800: to specify to which parts of the document and to which views each model
5801: should be applied.</p>
1.30 cvs 5802:
5803: <p>The <tt>Page</tt> rule has only one parameter, given between parentheses
1.37 cvs 5804: after the <tt>Page</tt> keyword. This parameter is the name of the box which
5805: must serve as the model for page construction. When a <tt>Page</tt> rule is
1.1 cvs 5806: attached to an element type, each time such an element appears in a document,
5807: a page break takes place and the page model indicated in the rule is applied
5808: to all following pages, until reaching the next element which has a
1.18 cvs 5809: <tt>Page</tt> rule.</p>
1.30 cvs 5810:
5811: <p>The <tt>Page</tt> rule applies to only one view; if it appears in the
1.37 cvs 5812: primary view's block of rules, a <tt>Page</tt> rule applies only to that
5813: view. Thus, different page models can be defined for the full document and
5814: for its table of contents, which is another view of the same document. Some
5815: views can be specified with pages, and other views of the same document can
5816: be specified without pages.</p>
1.18 cvs 5817: <pre> 'Page' '(' BoxID ')'</pre>
5818: </div>
5819:
5820: <div class="subsection">
1.37 cvs 5821: <h3><a name="sectc4234" id="sectc4234">Box copies</a></h3>
1.18 cvs 5822:
1.30 cvs 5823: <p>The <tt>Copy</tt> rule can be used for an element which is defined as a
1.37 cvs 5824: reference in the structure schema. In this case, the rule specifies, between
1.18 cvs 5825: parenthesis, the name of the box (declared in the <tt>BOXES</tt> section)
1.1 cvs 5826: which must be produced when this reference appears in the structure of a
1.37 cvs 5827: document. The box produced is a copy (same contents, but possible different
1.1 cvs 5828: presentation) of the box type indicated by the parameter between parentheses,
1.37 cvs 5829: and which is in the element designated by the reference. The name of a box
1.1 cvs 5830: can be replaced by type name. Then what is copied is the contents of the
1.18 cvs 5831: element of this type which is inside the referenced element.</p>
1.30 cvs 5832:
1.37 cvs 5833: <p>Whether a box name or type name is given, it may be followed by the name
5834: of a structure schema between parentheses. This signifies that the box or
5835: type is defined in the indicated structure schema and not in the structure
5836: schema with which the rule's presentation schema is associated.</p>
1.30 cvs 5837:
1.37 cvs 5838: <p>The <tt>Copy</tt> rule can also be applied to a presentation box. If the
1.1 cvs 5839: presentation box was created by a reference attribute, the rule is applied as
5840: in the case of a reference element: the contents of the box having the
1.18 cvs 5841: <tt>Copy</tt> rule are based on the element designated by the reference
1.37 cvs 5842: attribute. For other presentation boxes, the <tt>Copy</tt> rule takes a type
1.1 cvs 5843: name parameter which can be followed, between parentheses, by the name of the
5844: structure schema in which the type is defined, if it is not defined in the
1.37 cvs 5845: same schema. The contents of the box which has this rule are a copy of the
5846: element of this type which is in the element creating the presentation box,
5847: or by default, the box of this type which precedes the presentation box. This
5848: last facility is used, for example, to define the running titles in headers
5849: or footers.</p>
1.18 cvs 5850: <pre> 'Copy' '(' BoxTypeToCopy ')' .
1.1 cvs 5851: BoxTypeToCopy = BoxID [ ExtStruct ] /
1.6 cvs 5852: ElemID [ ExtStruct ] .
1.18 cvs 5853: ExtStruct = '(' ElemID ')' .</pre>
1.30 cvs 5854:
5855: <p>Like the creation rules, the <tt>Copy</tt> rule cannot appear in the <a
1.37 cvs 5856: href="#sectc427">default presentation rules</a>. Moreover, this rule can only
1.18 cvs 5857: appear in the primary view's block of rules; the copy rule is applied to all
5858: views.</p>
1.30 cvs 5859:
1.18 cvs 5860: <blockquote class="example">
1.30 cvs 5861: <p><strong>Example:</strong></p>
5862:
5863: <p>If the following definitions are in the structure schema:</p>
5864: <pre>Body = LIST OF (Chapter =
1.1 cvs 5865: BEGIN
5866: ChapterTitle = Text;
5867: ChapterBody = SectionSeq;
5868: END);
1.18 cvs 5869: RefChapter = REFERENCE (Chapter);</pre>
1.30 cvs 5870:
5871: <p>then the following presentation rules (among many other rules in the
5872: presentation schema) can be specified:</p>
5873: <pre>COUNTERS
1.1 cvs 5874: ChapterCtr : RANK OF Chapter;
5875: BOXES
5876: ChapterNumber :
5877: BEGIN
5878: Content : (VALUE (ChapterCtr, URoman));
5879: ...
5880: END;
5881: RULES
5882: Chapter :
5883: BEGIN
5884: CreateFirst (ChapterNumber);
5885: ...
5886: END;
5887: RefChapter :
5888: BEGIN
5889: Copy (ChapterNumber);
5890: ...
1.18 cvs 5891: END;</pre>
1.30 cvs 5892:
5893: <p>which makes the number of the chapter designated by the reference appear
5894: in uppercase roman numerals, in place of the reference to a chapter itself.
5895: Alternatively, the chapter title can be made to appear in place of the
5896: reference by writing this <tt>Copy</tt>rule:</p>
5897: <pre> Copy (ChapterTitle);</pre>
5898:
5899: <p>To define a header box, named <tt>RunningTitle</tt>, which contains the
5900: title of the current chapter, the box's contents are defined in this
5901: way:</p>
5902: <pre>BOXES
1.1 cvs 5903: RunningTitle :
1.18 cvs 5904: Copy (ChapterTitle);</pre>
5905: </blockquote>
5906: </div>
5907: </div>
1.37 cvs 5908: <hr />
1.18 cvs 5909: </div>
1.1 cvs 5910:
1.18 cvs 5911: <div class="chapter">
1.37 cvs 5912: <h1><a name="sect5" id="sect5">The T language</a></h1>
1.1 cvs 5913:
1.18 cvs 5914: <div class="section">
1.37 cvs 5915: <h2><a name="sectb51" id="sectb51">Document translation</a></h2>
1.1 cvs 5916:
1.30 cvs 5917: <p>Because of its document model, Thot can produce documents in a high-level
1.37 cvs 5918: abstract form. This form, called the <em>canonical form</em> is specific to
1.1 cvs 5919: Thot; it is well suited to the editor's manipulations, but it does not
1.37 cvs 5920: necessarily suit other operations which might be applied to documents.
5921: Because of this, the Thot editor offers the choice of saving documents in its
5922: own form (the canonical form) or a format defined by the user. In the latter
5923: case, the Thot document is transformed by the translation program. This
5924: facility can also be used to export documents from Thot to systems using
5925: other formalisms.</p>
1.1 cvs 5926:
1.18 cvs 5927: <div class="subsection">
1.37 cvs 5928: <h3><a name="sectc511" id="sectc511">Translation principles</a></h3>
1.1 cvs 5929:
1.30 cvs 5930: <p>Document translation allows the export of documents to other systems which
1.37 cvs 5931: do not accept Thot's canonical form. Translation can be used to export
1.30 cvs 5932: document to source-based formatters like T<sub><big>E</big></sub>X,
1.37 cvs 5933: L<sup>A</sup>T<sub><big>E</big></sub>X, and <tt>troff</tt>. It can also be
5934: used to translate documents into interchange formats like SGML or HTML. To
1.1 cvs 5935: allow the widest range of possible exports, Thot does not limit the choice of
5936: translations, but rather allows the user to define the formalisms into which
1.18 cvs 5937: documents can be translated.</p>
1.30 cvs 5938:
5939: <p>For each document or object class, a set of translation rules can be
5940: defined, specifying how the canonical form should be transformed into a given
1.37 cvs 5941: formalism. These translation rules are grouped into <em>translation
1.18 cvs 5942: schemas</em>, each schema containing the rules necessary to translate a
1.1 cvs 5943: generic logical structure (document or object structure) into a particular
1.37 cvs 5944: formalism. The same generic logical structure can have several different
1.1 cvs 5945: translation schemas, each defining translation rules for a different
1.18 cvs 5946: formalism.</p>
1.30 cvs 5947:
1.37 cvs 5948: <p>Like presentation schemas, translation schemas are generic. Thus, they
1.30 cvs 5949: apply to an entire object or document class and permit translation of all
5950: documents or objects of that class.</p>
1.18 cvs 5951: </div>
1.1 cvs 5952:
1.18 cvs 5953: <div class="subsection">
1.37 cvs 5954: <h3><a name="sectc512" id="sectc512">Translation procedure</a></h3>
1.1 cvs 5955:
1.30 cvs 5956: <p>The translator works on the specific logical structure of the document
1.37 cvs 5957: being translated. It traverses the primary tree of this logical structure in
1.1 cvs 5958: pre-order and, at each node encountered, it applies the corresponding
5959: translation rules defined in the translation schema. Translation can be
1.18 cvs 5960: associated:</p>
5961: <ul>
1.30 cvs 5962: <li>with element types defined in the structure schema,</li>
5963: <li>with global or local attributes defined in the structure schema,</li>
5964: <li>with specific presentation rules,</li>
1.37 cvs 5965: <li>with the content of the leaves of the structure (characters, symbols
1.30 cvs 5966: and graphical elements)</li>
1.18 cvs 5967: </ul>
1.30 cvs 5968:
5969: <p>Thus, for each node, the translator applies all rules associated with the
1.1 cvs 5970: element type, all rules associated with each attribute (local or global)
5971: carried by the element, and if the element is a leaf of the tree, it also
1.10 cvs 5972: applies translation rules for characters, symbols, or graphical elements,
1.18 cvs 5973: depending on the type of the leaf.</p>
1.30 cvs 5974:
5975: <p>Rules associated with the content of leaves are different from all other
1.1 cvs 5976: rules: they specify only how to translate character strings, symbols, and
1.37 cvs 5977: graphical elements. All other rules, whether associated with element types,
1.1 cvs 5978: with specific presentation rules or with attributes, are treated similarly.
1.18 cvs 5979: These rules primarily allow:</p>
5980: <ul>
1.30 cvs 5981: <li>generation of a text constant or variable before or after the contents
5982: of an element,</li>
5983: <li>modification of the order in which elements appear after
5984: translation,</li>
5985: <li>removal of an element in the translated document,</li>
5986: <li>and writing messages on the user's terminal during translation.</li>
1.18 cvs 5987: </ul>
5988: </div>
5989: </div>
1.1 cvs 5990:
1.18 cvs 5991: <div class="section">
1.37 cvs 5992: <h2><a name="sectb52" id="sectb52">Translation definition language</a></h2>
1.1 cvs 5993:
1.30 cvs 5994: <p>Translation schemas are written in a custom language, called T, which is
1.37 cvs 5995: described in the rest of this chapter. The grammar of T is specified using
1.18 cvs 5996: the same <a href="#sectc321">meta-language</a> as was used for the S and P
1.1 cvs 5997: languages and the translation schemas are written using the same conventions
1.37 cvs 5998: as the structure and presentation schemas. In particular, the keywords of the
1.1 cvs 5999: T language (the stings between apostrophes in the following syntax rules) can
6000: be written in any combination of upper-case and lower-case letters, but
6001: identifiers created by the programmer must always be written in the same
1.18 cvs 6002: way.</p>
1.1 cvs 6003:
1.18 cvs 6004: <div class="subsection">
1.37 cvs 6005: <h3><a name="sectc521" id="sectc521">Organization of a translation
6006: schema</a></h3>
1.1 cvs 6007:
1.30 cvs 6008: <p>A translation schema is begun by the <tt>TRANSLATION</tt> keyword and is
1.37 cvs 6009: terminated by the <tt>END</tt> keyword. The <tt>TRANSLATION</tt> keyword is
6010: followed by the name of the generic structure for which a translation is
6011: being defined and a semicolon. This name must be identical to the name which
1.18 cvs 6012: appears after the <tt>STRUCTURE</tt> keyword in the corresponding structure
6013: schema.</p>
1.30 cvs 6014:
6015: <p>After this declaration of the structure, the following material appears in
1.18 cvs 6016: order:</p>
6017: <ul>
1.30 cvs 6018: <li>the length of lines produced by the translation,</li>
6019: <li>the character delimiting the end of the line,</li>
6020: <li>the character string which the translator will insert if it must
6021: line-break the translated text,</li>
1.37 cvs 6022: <li>declarations of
1.30 cvs 6023: <ul>
6024: <li>buffers,</li>
6025: <li>counters,</li>
6026: <li>constants,</li>
6027: <li>variables,</li>
6028: </ul>
6029: </li>
6030: <li>translation rules associated with element types,</li>
6031: <li>translation rules associated with attributes,</li>
6032: <li>translation rules associated with specific presentation rules,</li>
6033: <li>translation rules associated with characters strings, symbols and
6034: graphical elements.</li>
1.18 cvs 6035: </ul>
1.30 cvs 6036:
1.37 cvs 6037: <p>Each of these sections is introduced by a keyword followed by a sequence
6038: of declarations. All of these sections are optional, expect for the
6039: translation rules associated with element types. Many <tt>TEXTTRANSLATE</tt>
6040: sections can appear, each defining the rules for translating character
1.41 vatton 6041: strings of a particular script.</p>
1.18 cvs 6042: <pre> TransSchema ='TRANSLATION' ElemID ';'
1.1 cvs 6043: [ 'LINELENGTH' LineLength ';' ]
6044: [ 'LINEEND' CHARACTER ';' ]
6045: [ 'LINEENDINSERT' STRING ';' ]
6046: [ 'BUFFERS' BufferSeq ]
6047: [ 'COUNTERS' CounterSeq ]
6048: [ 'CONST' ConstSeq ]
6049: [ 'VAR' VariableSeq ]
6050: 'RULES' ElemSeq
6051: [ 'ATTRIBUTES' AttrSeq ]
6052: [ 'PRESENTATION' PresSeq ]
1.30 cvs 6053: < 'TEXTTRANSLATE' TextTransSeq >
1.1 cvs 6054: [ 'SYMBTRANSLATE' TransSeq ]
6055: [ 'GRAPHTRANSLATE' TransSeq ]
1.18 cvs 6056: 'END' .</pre>
6057: </div>
1.1 cvs 6058:
1.18 cvs 6059: <div class="subsection">
1.37 cvs 6060: <h3><a name="sectc522" id="sectc522">Line length</a></h3>
1.1 cvs 6061:
1.30 cvs 6062: <p>If a <tt>LINELENGTH</tt> instruction is present after the structure
1.37 cvs 6063: declaration, the translator divides the text it produces into lines, each
6064: line having a length less than or equal to the integer which follows the
6065: <tt>LINELENGTH</tt> keyword. This maximum line length is expressed as a
6066: number of characters. The end of the line is marked by the character defined
6067: by the <tt>LINEEND</tt> instruction. When the translator breaks the lines on
1.1 cvs 6068: a space character in generated text, this space will be replaced by the
1.18 cvs 6069: character string defined by the <tt>LINEENDINSERT</tt> instruction.</p>
1.30 cvs 6070:
6071: <p>If the <tt>LINEEND</tt> instruction is not defined then the linefeed
6072: character (octal code 12) is used as the default line end character. If the
1.18 cvs 6073: <tt>LINEENDINSERT</tt> instruction is not defined, the linefeed character is
1.37 cvs 6074: inserted at the end of the produced lines. If there is no <tt>LINELENGTH</tt>
6075: instruction, the translated text is not divided into lines. Otherwise, if the
1.1 cvs 6076: translation rules generate line end marks, these marks remain in the
6077: translated text, but the length of the lines is not controlled by the
1.18 cvs 6078: translator.</p>
6079: <pre> LineLength = NUMBER .</pre>
1.30 cvs 6080:
1.18 cvs 6081: <blockquote class="example">
1.30 cvs 6082: <p><strong>Example:</strong></p>
6083:
6084: <p>To limit the lines produced by the translator to a length of 80
6085: characters, the following rule is written at the beginning of the
6086: translation schema.</p>
6087: <pre>LineLength 80;</pre>
1.18 cvs 6088: </blockquote>
6089: </div>
1.1 cvs 6090:
1.18 cvs 6091: <div class="subsection">
1.37 cvs 6092: <h3><a name="sectc523" id="sectc523">Buffers</a></h3>
1.1 cvs 6093:
1.37 cvs 6094: <p>A buffer is a unit of memory managed by the translator, which can either
1.18 cvs 6095: contain text read from the terminal during the translation (see the <a
6096: href="#sectc5212"><tt>Read</tt> rule</a>), or the name of the last picture
1.1 cvs 6097: (bit-map) encountered by the translator in its traversal of the document.
1.2 cvs 6098: Remember the pictures are stored in files that are separate for the document
1.1 cvs 6099: files and that the canonical form contains only the names of the files in
1.18 cvs 6100: which the pictures are found.</p>
1.30 cvs 6101:
1.37 cvs 6102: <p>Thus, there are two types of buffers: buffers for reading from the
1.30 cvs 6103: terminal (filled by the <tt>Read</tt> rule) and the buffer of picture names
1.37 cvs 6104: (containing the name of the last picture encountered). A translation schema
1.30 cvs 6105: can use either type, one or several read buffers and one (and only one)
6106: picture name buffer.</p>
6107:
6108: <p>If any buffers are used, the <tt>BUFFERS</tt> keyword must be present,
1.37 cvs 6109: followed by declarations of every buffer used in the translation schema. Each
6110: buffer declaration is composed only of the name of the buffer, chosen freely
6111: by the programmer. The picture name buffer is identified by the
6112: <tt>Picture</tt> keyword, between parentheses, following the buffer name. The
6113: <tt>Picture</tt> keyword may only appear once. Each buffer declaration is
1.18 cvs 6114: terminated by a semicolon.</p>
1.30 cvs 6115: <pre> BufferSeq = Buffer < Buffer > .
1.1 cvs 6116: Buffer = BufferID [ '(' 'Picture' ')' ] ';' .
1.18 cvs 6117: BufferID = NAME .</pre>
1.30 cvs 6118:
1.18 cvs 6119: <blockquote class="example">
1.30 cvs 6120: <p><strong>Example:</strong></p>
6121:
6122: <p>The following buffer declarations create a picture name buffer named
1.37 cvs 6123: <tt>pictureName</tt> and a read buffer named <a name="destname"
6124: id="destname"><tt>DestName</tt></a>:</p>
1.30 cvs 6125: <pre>BUFFERS
1.18 cvs 6126: pictureName (Picture); DestName;</pre>
6127: </blockquote>
6128: </div>
1.1 cvs 6129:
1.18 cvs 6130: <div class="subsection">
1.37 cvs 6131: <h3><a name="sectc524" id="sectc524">Counters</a></h3>
1.30 cvs 6132:
6133: <p>Certain translation rules generate text that varies according to the
1.37 cvs 6134: context of the element to which the rules apply. Variable text is defined
1.30 cvs 6135: either in the <a href="#sectc526"><tt>VAR</tt> section</a> of the translation
6136: schema or in the rule itself (see the <tt>Create</tt> and <tt>Write</tt>
1.37 cvs 6137: rules). Both types of definition rely on counters for the calculation of
1.30 cvs 6138: variable material.</p>
6139:
6140: <p>There are two types of counter: counters whose value is explicitely
6141: computed by applying <a href="#sectc5221"><tt>Set</tt> and <tt>Add</tt>
6142: rules</a>, and counters whose value is computed by a function associated with
6143: the counter. Those functions allow the same calculations as can be used in
1.37 cvs 6144: presentation schemas. As in a presentation schema, counters must be defined
6145: in the <tt>COUNTERS</tt> section of the translation schema before they are
1.30 cvs 6146: used.</p>
6147:
6148: <p>When counters are used in a translation schema, the <tt>COUNTERS</tt>
1.37 cvs 6149: keyword is followed by the declarations of every counter used. Each
6150: declaration is composed of the counter's name possibly followed by a colon
6151: and the counting function to be used for the counter. The declaration is
1.30 cvs 6152: terminated by a semi-colon. If the counter is explicitely computed by
6153: <tt>Set</tt> and <tt>Add</tt> rules, no counting function is indicated. If a
6154: counting function is indicated, <tt>Set</tt> and <tt>Add</tt> rules cannot be
6155: applied to that counter.</p>
1.1 cvs 6156:
1.30 cvs 6157: <p>The counting function indicates how the counter's value will be computed.
1.18 cvs 6158: Three functions are available: <tt>Rank</tt>, <tt>Rlevel</tt>, and
6159: <tt>Set</tt>.</p>
6160: <ul>
1.40 quint 6161: <li><tt>Rank of ElemID</tt> indicates that the counter's value is the rank
6162: of the element of type <tt>ElemID</tt> which encloses the element for
6163: which the counter is being evaluated. For the purposes of this function,
6164: an element of type <tt>ElemID</tt> is considered to enclose itself. This
6165: function is primarily used when the element of type <tt>ElemID</tt> is
6166: part of an aggregate or list, in which case the counter's value is the
6167: element's rank in its list or aggregate. Note that, unlike the
6168: <tt>Rank</tt> function for presentation schemas, the <tt>Page</tt>
6169: keyword cannot be used in place of the <tt>ElemID</tt>.
1.37 cvs 6170: <p>The type name <tt>ElemID</tt> can be followed by an integer. That
6171: number represents the relative level, among the ancestors of the
6172: concerned element, of the element whose rank is asked. If that relative
6173: level <i>n</i> is unsigned, the <i>n<sup>th</sup></i> element of type
6174: <tt>ElemID</tt> encountered when travelling the logical structure from
6175: the root to the concerned element is taken into account. If the relative
1.30 cvs 6176: level is negative, the logical structure is travelled in the other
6177: direction, from the concerned element to the root.</p>
6178: </li>
1.40 quint 6179: <li><tt>Rlevel of ElemID</tt> indicates that the counter's values is the
6180: relative level in the tree of the element for which the counter is being
6181: evaluated. The counter counts the number of elements of type
6182: <tt>ElemID</tt> which are found on the path between the root of the
6183: document's logical structure tree and the element (inclusive).</li>
6184: <li><tt>Set n on Type1 Add m on Type2</tt> indicates that the counter's
6185: value is calculated as follows: in traversing the document from the
6186: beginning to the element for which the counter is being evaluated, the
6187: counter is set to the value <tt>n</tt> each time a <tt>Type1</tt> element
6188: is encountered and is incremented by the amount <tt>m</tt> each time a
6189: <tt>Type2</tt> element is encountered. The initial value <tt>n</tt> and
6190: the increment <tt>m</tt> are integers.</li>
1.30 cvs 6191: </ul>
6192:
6193: <p>As in a presentation schema, the <tt>Rank</tt> and <tt>Set</tt> functions
1.37 cvs 6194: can be modified by a numeric attribute which changes their initial value.
6195: This is indicated by the <tt>Init</tt> keyword followed by the numeric
6196: attribute's name. The <tt>Set</tt> function takes the value of the attribute
6197: instead of the <tt>InitValue</tt> (<tt>n</tt>). For the <tt>Rank</tt>
6198: function, the value of the attribute is considered to be the rank of the
6199: first element of the list (rather than the normal value of 1). Subsequent
6200: items in the list have their ranks shifted accordingly. In both cases, the
6201: attribute must be numeric and must be a local attribute of the root of the
6202: document itself.</p>
1.30 cvs 6203: <pre> CounterSeq = Counter < Counter > .
1.1 cvs 6204: Counter = CounterID [ ':' CounterFunc ] ';' .
6205: CounterID = NAME .
6206: CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]
6207: [ 'Init' AttrID ] /
6208: 'Rlevel' 'of' ElemID /
6209: 'Set' InitValue 'On' ElemID
6210: 'Add' Increment 'On' ElemID
6211: [ 'Init' AttrID ] .
6212: SLevelAsc = [ '-' ] LevelAsc .
6213: LevelAsc = NUMBER .
6214: InitValue = NUMBER .
6215: Increment = NUMBER .
6216: ElemID = NAME .
1.18 cvs 6217: AttrID = NAME .</pre>
1.30 cvs 6218:
1.18 cvs 6219: <blockquote class="example">
1.30 cvs 6220: <p><strong>Example:</strong></p>
6221:
6222: <p>If the body of a chapter is defined in the structure schema by:</p>
6223: <pre>Chapter_Body = LIST OF
1.1 cvs 6224: (Section = BEGIN
6225: Section_Title = Text;
6226: Section_Body = BEGIN
6227: Paragraphs;
6228: Section;
6229: END;
6230: END
1.18 cvs 6231: );</pre>
1.30 cvs 6232:
6233: <p>(sections are defined recursively), a counter can be defined giving the
1.37 cvs 6234: <a name="sectnum" id="sectnum">number of a section</a> within its level in
6235: the hierarchy:</p>
1.30 cvs 6236: <pre>COUNTERS
1.18 cvs 6237: SectionNumber : Rank of Section;</pre>
1.30 cvs 6238:
6239: <p>A counter holding the hierarchic level of a section:</p>
6240: <pre> SectionLevel : Rlevel of Section;</pre>
6241:
1.37 cvs 6242: <p>A <a name="uniquenum" id="uniquenum">counter</a> which sequentially
6243: numbers all the document's sections, whatever their hierarchic level:</p>
1.30 cvs 6244: <pre> UniqueSectNum : Set 0 on Document Add 1 on Section;</pre>
1.18 cvs 6245: </blockquote>
6246: </div>
1.1 cvs 6247:
1.18 cvs 6248: <div class="subsection">
1.37 cvs 6249: <h3><a name="sectc525" id="sectc525">Constants</a></h3>
1.1 cvs 6250:
1.30 cvs 6251: <p>A common feature of translation rules is the generation of constant text.
1.37 cvs 6252: This text can be defined in the rule that generates it (see for example the
6253: <a href="#sectc5210"><tt>Create</tt></a> and <a
1.18 cvs 6254: href="#sectc5211"><tt>Write</tt></a> rules); but it can also be defined once
6255: in the constant declaration section and used many times in different rules.
1.37 cvs 6256: The latter option is preferable when the same text is used in several rules
6257: or several <a href="#sectc526">variables</a>.</p>
1.30 cvs 6258:
6259: <p>The <tt>CONST</tt> keyword begins the constant declaration section of the
1.37 cvs 6260: translation schema. It must be omitted if no constants are declared. Each
6261: constant declaration is composed of the constant name, an equals sign, and
6262: the constant's value, which is a character string between apostrophes. A
6263: constant declaration is terminated by a semicolon.</p>
1.30 cvs 6264: <pre> ConstSeq = Const < Const > .
1.1 cvs 6265: Const = ConstID '=' ConstValue ';' .
6266: ConstID = NAME .
1.18 cvs 6267: ConstValue = STRING .</pre>
1.30 cvs 6268:
1.18 cvs 6269: <blockquote class="example">
1.37 cvs 6270: <p><strong><a name="levelexample"
6271: id="levelexample">Example:</a></strong></p>
1.30 cvs 6272:
6273: <p>The following rule assigns the name <tt>TxtLevel</tt> to the character
6274: string ``Level'':</p>
6275: <pre>CONST
1.18 cvs 6276: TxtLevel = 'Level';</pre>
6277: </blockquote>
6278: </div>
1.1 cvs 6279:
1.18 cvs 6280: <div class="subsection">
1.37 cvs 6281: <h3><a name="sectc526" id="sectc526">Variables</a></h3>
1.1 cvs 6282:
1.30 cvs 6283: <p>Variables allow to define variable text which is generated by the
1.37 cvs 6284: <tt>Create</tt> and <tt>Write</tt> rules. They are also used to define file
1.18 cvs 6285: names which are used in the <tt>Create</tt>, <tt>ChangeMainFile</tt>,
1.37 cvs 6286: <tt>RemoveFile</tt>, and <tt>Indent</tt> rules. Variables can be defined
1.18 cvs 6287: either in the <tt>VAR</tt> section of the translation schema or directly in
1.37 cvs 6288: the rules which use them. Variables that define file names must be declared
1.18 cvs 6289: in the <tt>VAR</tt> section, and when the same variable is used several times
6290: in the translation schema, it makes sense to define it globally in the
1.37 cvs 6291: <tt>VAR</tt> section. This section is only present if at least one variable
1.18 cvs 6292: is defined globally.</p>
1.30 cvs 6293:
6294: <p>After the <tt>VAR</tt> keyword, each global variable is defined by its
6295: name, a colon separator and a sequence of functions (at least one function).
1.37 cvs 6296: Each variable definition is terminated by a semicolon. Functions determine
6297: the different parts which together give the value of the variable. The value
6298: is obtained by concatenating the strings produced by each of the functions.
6299: Seven types of functions are available. Each variable definition may use any
6300: number of functions of each type.</p>
1.18 cvs 6301: <ul>
1.30 cvs 6302: <li>The function <tt>Value(Counter)</tt>returns a string representing the
6303: value taken by the counter when it is evaluated for the element in whose
1.37 cvs 6304: rule the variable is used. The counter must have been declared in the
6305: <tt>COUNTERS</tt> section of the translation schema. When the counter is
1.30 cvs 6306: expressed in arabic numerals, the counter name can be followed by a colon
6307: and an integer indicating a minimum length (number of characters) for the
1.37 cvs 6308: string; if the counter's value is normally expressed with fewer
6309: characters than the required minimum, zeroes are added to the front of
6310: the string to achieve the minimum length.
1.30 cvs 6311: <p>By default, the counter value is written in arabic digits. If another
6312: representation of that value is needed, the counter name must be followed
6313: by a comma and one of the following keywords:</p>
6314: <ul>
1.40 quint 6315: <li><tt>Arabic</tt> : arabic numerals (default value),</li>
6316: <li><tt>LRoman</tt> : lower-case roman numerals,</li>
6317: <li><tt>URoman</tt> : upper-case roman numerals,</li>
6318: <li><tt>Uppercase</tt> : upper-case letter,</li>
6319: <li><tt>Lowercase</tt> : lower-case letter.</li>
1.30 cvs 6320: </ul>
6321: </li>
6322: <li>The function <tt>FileDir</tt>, without parameter, returns a string
6323: representing the name of the directory of the output file that has been
6324: given as a parameter to the translation program. The string includes a
6325: character '/' at the end.</li>
6326: <li>The function <tt>FileName</tt>, without parameter, returns a string
6327: representing the name of the output file that has been given as a
6328: parameter to the translation program. The file extension (the character
6329: string that terminate the file name, after a dot) is not part of that
6330: string.</li>
6331: <li>The function <tt>Extension</tt>, without parameter, returns a string
6332: representing the extension of the file name. That string is empty if the
6333: file name that has been given as a parameter to the translation program
6334: has no extension. If there is an extension, its first character is a
6335: dot.</li>
6336: <li>The function <tt>DocumentName</tt>, without parameter, returns a string
6337: representing the name of the document being translated.</li>
6338: <li>The function <tt>DocumentDir</tt>, without parameter, returns a string
6339: representing the directory containing the document being translated.</li>
6340: <li>The function formed by the name of a constant returns that constant's
6341: value.</li>
6342: <li>The function formed by a character string between apostrophes returns
6343: that string.</li>
1.37 cvs 6344: <li>The function formed by the name of a buffer returns the contents of
6345: that buffer. If the named buffer is the picture buffer, then the name of
6346: the last picture encountered is returned. Otherwise, the buffer is a read
1.31 cvs 6347: buffer and the value returned is text previously read from the terminal.
1.30 cvs 6348: If the buffer is empty (no picture has been encountered or the
6349: <tt>Read</tt> rule has not been executed for the buffer), then the empty
6350: string is returned.</li>
6351: <li>The function formed by an attribute name takes the value of the
1.37 cvs 6352: indicated attribute for the element to which the variable applies. If the
1.30 cvs 6353: element does not have that attribute, then the element's ancestor are
1.37 cvs 6354: searched toward the root of the tree. If one of the ancestors does have
6355: the attribute then its value is used. If no ancestors have the attribute,
1.30 cvs 6356: then the value of the function is the empty string.</li>
1.18 cvs 6357: </ul>
1.30 cvs 6358: <pre> VariableSeq = Variable < Variable > .
6359: Variable = VarID ':' Function < Function > ';' .
1.1 cvs 6360: VarID = NAME .
6361: Function ='Value' '(' CounterID [ ':' Length ]
6362: [ ',' CounterStyle ] ')' /
6363: 'FileDir' / 'FileName' / 'Extension' /
6364: 'DocumentName' / 'DocumentDir' /
6365: ConstID / CharString /
6366: BufferID / AttrID .
6367: Length = NUMBER .
6368: CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /
6369: 'Uppercase' / 'Lowercase' .
1.18 cvs 6370: CharString = STRING .</pre>
1.30 cvs 6371:
1.18 cvs 6372: <blockquote class="example">
1.30 cvs 6373: <p><strong>Example:</strong></p>
6374:
6375: <p>To create, at the beginning of each section of the translated document,
6376: text composed of the string ``Section'' followed by the section number, the
1.37 cvs 6377: following <a name="varsectexample" id="varsectexample">variable
6378: definition</a> might be used:</p>
1.30 cvs 6379: <pre>VAR
1.18 cvs 6380: SectionVar : 'Section' Value(SectionNumber);</pre>
1.30 cvs 6381:
6382: <p>(see the definition of <a
6383: href="#sectnum"><tt>SectionNumber</tt></a>).</p>
6384:
1.37 cvs 6385: <p>The following variable definition can be used to create, at the
6386: beginning of each section, the text ``Level'' followed by the hierarchical
6387: level of the section. It used the constant defined above.</p>
1.30 cvs 6388: <pre> LevelVar : TxtLevel Value(SectionLevel);</pre>
6389:
6390: <p>(see the definitions of <a href="#sectnum"><tt>SectionLevel</tt></a> and
6391: of <a href="#levelexample"><tt>TxtLevel</tt></a>).</p>
6392:
6393: <p>To generate the translation of each section in a different file (see <a
1.37 cvs 6394: href="#sectc5220">rule <tt>ChangeMainFile</tt></a>), the name of these
6395: files might be defined by the following variable:</p>
1.30 cvs 6396: <pre> VarOutpuFile : FileName Value(SectionNumber)
1.18 cvs 6397: Extension;</pre>
1.30 cvs 6398:
1.37 cvs 6399: <p>If <tt>output.txt</tt> is the name of the <a name="varoutputfile"
6400: id="varoutputfile">output file</a> specified when starting the translation
6401: program, translated sections are written in files <tt>output1.txt</tt>,
6402: <tt>output2.txt</tt>, etc.</p>
1.18 cvs 6403: </blockquote>
6404: </div>
6405:
6406: <div class="subsection">
1.37 cvs 6407: <h3><a name="sectc527" id="sectc527">Translating structure elements</a></h3>
1.18 cvs 6408:
1.30 cvs 6409: <p>The <tt>RULES</tt> keyword introduces the translation rules which will be
1.37 cvs 6410: applied to the various structured element types. Translation rules can be
6411: specified for each element type defined in the structure schema, including
6412: the base types defined implicitly, whose names are <tt>TEXT_UNIT</tt>,
1.18 cvs 6413: <tt>PICTURE_UNIT</tt>, <tt>SYMBOL_UNIT</tt>, <tt>GRAPHIC_UNIT</tt> and
1.37 cvs 6414: <tt>PAGE_UNIT</tt>. But it is not necessary to specify rules for every
1.18 cvs 6415: defined type.</p>
1.30 cvs 6416:
1.37 cvs 6417: <p>If there are no translation rules for an element type, the elements that
6418: it contains (and which may have rules themselves) will still be translated,
6419: but the translator will produce nothing for the element itself. To make the
1.18 cvs 6420: translator completely ignore the content of an element the <a
6421: href="#sectc5217"><tt>Remove</tt> rule</a> must be used.</p>
1.30 cvs 6422:
6423: <p>The translation rules for an element type defined in the structure schema
6424: are written using the name of the type followed by a colon and the list of
1.37 cvs 6425: applicable rules. When the element type is a <a href="#sectd3285">mark
1.18 cvs 6426: pair</a>, but only in this case, the type name must be preceded by the
1.37 cvs 6427: <tt>First</tt> or <tt>Second</tt> keyword. This keyword indicates whether the
1.18 cvs 6428: rules that follow apply to the first or second mark of the pair.</p>
1.30 cvs 6429:
1.37 cvs 6430: <p>The list of rules can take several forms. It may be a simple
6431: non-conditional rule. It can also be formed by a condition followed by one or
6432: more simple rules. Or it can be a block of rules beginning with the
1.30 cvs 6433: <tt>BEGIN</tt> keyword and ending with the <tt>END</tt> keyword and a
1.37 cvs 6434: semicolon. This block of rules can contain one or more simple rules and/or
1.30 cvs 6435: one or more conditions, each followed by one or more simple rules.</p>
6436: <pre> ElemSeq = TransType < TransType > .
1.1 cvs 6437: TransType = [ FirstSec ] ElemID ':' RuleSeq .
6438: FirstSec = 'First' / 'Second' .
1.30 cvs 6439: RuleSeq = Rule / 'BEGIN' < Rule > 'END' ';' .
1.1 cvs 6440: Rule = SimpleRule / ConditionBlock .
6441: ConditionBlock = 'IF' ConditionSeq SimpleRuleSeq .
1.30 cvs 6442: SimpleRuleSeq = 'BEGIN' < SimpleRule > 'END' ';' /
1.18 cvs 6443: SimpleRule .</pre>
6444: </div>
1.1 cvs 6445:
1.18 cvs 6446: <div class="subsection">
1.37 cvs 6447: <h3><a name="sectc528" id="sectc528">Conditional rules</a></h3>
1.1 cvs 6448:
1.30 cvs 6449: <p>In a translation schema, the translation rules are either associated with
1.37 cvs 6450: element types or with attribute values or with a specific presentation. They
1.1 cvs 6451: are applied by the translator each time an element of the corresponding type
6452: is encountered in the translated document or each time the attribute value is
6453: carried by an element or also, each time the specific translation is attached
1.37 cvs 6454: to an element. This systematic application of the rules can be relaxed: it is
6455: possible to add a condition to one or more rules, so that these rules are
6456: only applied when the condition is true.</p>
1.30 cvs 6457:
6458: <p>A condition begins with the keyword <tt>IF</tt>, followed by a sequence of
1.37 cvs 6459: elementary conditions. Elementary conditions are separated from each other by
6460: the <tt>AND</tt> keyword. If there is only one elementary condition, this
6461: keyword is absent. The rules are only applied if all the elementary
6462: conditions are true. The elementary condition can be negative; it is then
1.18 cvs 6463: preceded by the <tt>NOT</tt> keyword.</p>
1.30 cvs 6464:
6465: <p>When the translation rule(s) controlled by the condition apply to a
6466: reference element or a reference attribute, an elementary condition can also
1.37 cvs 6467: apply to element referred by this reference. The <tt>Target</tt> keyword is
6468: used for that purpose. It must appear before the keyword defining the
1.30 cvs 6469: condition type.</p>
6470:
6471: <p>Depending on their type, some conditions may apply either to the element
1.37 cvs 6472: with which they are associated, or to one of its ancestor. In the case of an
1.18 cvs 6473: ancestor, the key word <tt>Ancestor</tt> must be used, followed by</p>
6474: <ul>
1.30 cvs 6475: <li>either an integer which represents the number of levels in the tree
6476: between the element and the ancestor of interest,</li>
1.37 cvs 6477: <li>or the type name of the ancestor of interest. If that type is defined
1.30 cvs 6478: in a separate structure schema, the name of that schema must follow
6479: between parentheses.</li>
1.18 cvs 6480: </ul>
1.30 cvs 6481:
1.37 cvs 6482: <p>There is a special case for the parent element, which can be simply
6483: written <tt>Parent</tt> instead of <tt>Ancestor 1</tt>.</p>
1.30 cvs 6484:
6485: <p>Only conditions <tt>First</tt>, <tt>Last</tt>, <tt>Referred</tt>,
1.34 cvs 6486: <tt>Within</tt>, <tt>Attributes</tt>, <tt>Presentation</tt>, and those
6487: concerning an attribute or a specific presentation can apply to an ancestor.
6488: Conditions <tt>FirstRef</tt>, <tt>LastRef</tt>, <tt>ExternalRef</tt>,
1.41 vatton 6489: <tt>Script</tt>, <tt>FirstAttr</tt>, <tt>LastAttr</tt>,
1.34 cvs 6490: <tt>ComputedPage</tt>, <tt>StartPage</tt>, <tt>UserPage</tt>,
6491: <tt>ReminderPage</tt>, <tt>Empty</tt> cannot be preceded by keywords
6492: <tt>Parent</tt> or <tt>Ancestor</tt>.</p>
1.30 cvs 6493:
1.37 cvs 6494: <p>In condition <tt>Referred</tt> and in the condition that applies to a
6495: named attribute, a symbol '<tt>*</tt>' can indicate that the condition is
6496: related only to the element itself. If this symbol is not present, not only
6497: the element is considered, but also its ancestor, at any level.</p>
1.30 cvs 6498:
6499: <p>The form of an elementary condition varies according to the type of
1.18 cvs 6500: condition.</p>
1.1 cvs 6501:
1.18 cvs 6502: <div class="subsubsection">
1.37 cvs 6503: <h4><a name="sectd5281" id="sectd5281">Conditions based on the logical
6504: position of the element</a></h4>
1.30 cvs 6505:
6506: <p>The condition can be on the position of the element in the document's
1.37 cvs 6507: logical structure tree. It is possible to test whether the element is the
1.30 cvs 6508: first (<tt>First</tt>) or last (<tt>Last</tt>) among its siblings or if it is
6509: not the first (<tt>NOT First</tt>) or not the last (<tt>NOT Last</tt>).</p>
6510:
6511: <p>It is also possible to test if the element is contained in an element of a
1.18 cvs 6512: given type (<tt>Within</tt>) or if it is not (<tt>NOT Within</tt>). If that
1.1 cvs 6513: element type is defined in a structure schema which is not the one which
6514: corresponds to the translation schema, the type name of this element must be
6515: followed, between parentheses, by the name of the structure schema which
1.18 cvs 6516: defines it.</p>
1.30 cvs 6517:
6518: <p>If the keyword <tt>Within</tt> is preceded by <tt>Immediately</tt>, the
1.18 cvs 6519: condition is satisfied only if the <em>parent</em> element has the type
6520: indicated. If the word <tt>Immediately</tt> is missing, the condition is
6521: satisfied if any <em>ancestor</em> has the type indicated.</p>
1.30 cvs 6522:
6523: <p>An integer <i>n</i> can appear between the keyword <tt>Within</tt> and the
1.37 cvs 6524: type. It specifies the number of ancestors of the indicated type that must be
6525: present for the condition to be satisfied. If the keyword
1.18 cvs 6526: <tt>Immediately</tt> is also present, the <i>n</i> immediate ancestors of the
1.37 cvs 6527: element must have the indicated type. The integer <i>n</i> must be positive
6528: or zero. It can be preceded by <tt><</tt> or <tt>></tt> to indicate a
6529: maximum or minimum number of ancestors. If these symbols are missing, the
6530: condition is satisfied only if it exists exactly <i>n</i> ancestors. When
1.30 cvs 6531: this number is missing, it is equivalent to > 0.</p>
6532:
1.37 cvs 6533: <p>If the condition applies to translation rules associated with an
6534: attribute, i.e. if it is in the <tt>ATTRIBUTES</tt> section of the
6535: presentation schema, the condition can be simply an element name. Translation
6536: rules are then executed only if the attribute is attached to an element of
6537: that type. The keyword <tt>NOT</tt> before the element name indicates that
6538: the translation rules must be executed only if the element is not of the type
6539: indicated.</p>
1.18 cvs 6540: </div>
1.1 cvs 6541:
1.18 cvs 6542: <div class="subsubsection">
1.37 cvs 6543: <h4><a name="sectd5282" id="sectd5282">Conditions on references</a></h4>
1.1 cvs 6544:
1.30 cvs 6545: <p>References may be taken into account in conditions, which can be based on
6546: the fact that the element, or one of its ancestors (unless symbol <tt>*</tt>
6547: is present), is designated by a at least one reference (<tt>Referred</tt>) or
1.37 cvs 6548: by none (<tt>NOT Referred</tt>). If the element or attribute to which the
1.1 cvs 6549: condition is attached is a reference, the condition can be based on the fact
6550: that it acts as the first reference to the designated element
1.18 cvs 6551: (<tt>FirstRef</tt>), or as the last (<tt>LastRef</tt>), or as a reference to
1.37 cvs 6552: an element located in another document (<tt>ExternalRef</tt>). Like all
1.18 cvs 6553: conditions, conditions on references can be inverted by the <tt>NOT</tt>
6554: keyword.</p>
6555: </div>
6556:
6557: <div class="subsubsection">
1.41 vatton 6558: <h4><a name="sectd5284" id="sectd5284">Conditions on the scripts</a></h4>
1.1 cvs 6559:
1.30 cvs 6560: <p>The character string base type (and only this type) can use the condition
1.43 quint 6561: <tt>Script = a</tt> which indicates that the translation rule(s) should only
6562: apply if the script of the character string is the one whose name appears
6563: after the equals sign (or is not, if there is a preceding <tt>NOT</tt>
6564: keyword). This condition cannot be applied to translation rules of an
6565: attribute.</p>
1.30 cvs 6566:
1.41 vatton 6567: <p>In the current implementation of Thot, the available scripts are the
6568: <tt>Latin</tt> script and the <tt>Greek</tt> script.</p>
1.18 cvs 6569: </div>
1.1 cvs 6570:
1.18 cvs 6571: <div class="subsubsection">
1.37 cvs 6572: <h4><a name="sectd5285" id="sectd5285">Conditions on page breaks</a></h4>
1.1 cvs 6573:
1.30 cvs 6574: <p>The page break base type (and only this type) can use the following
1.18 cvs 6575: conditions: <tt>ComputedPage</tt>, <tt>StartPage</tt>, <tt>UserPage</tt>, and
1.37 cvs 6576: <tt>ReminderPage</tt>. The <tt>ComputedPage</tt> condition indicates that the
1.1 cvs 6577: translation rule(s) should apply if the page break was created automatically
1.37 cvs 6578: by Thot; the <tt>StartPage</tt> condition is true if the page break is
1.18 cvs 6579: generated before the element by the <tt>Page</tt> rule of the P language; the
6580: <tt>UserPage</tt> condition applies if the page break was inserted by the
1.37 cvs 6581: user; and the <tt>ReminderPage</tt> is applied if the page break is a
6582: reminder of page breaking.</p>
1.18 cvs 6583: </div>
1.1 cvs 6584:
1.18 cvs 6585: <div class="subsubsection">
1.37 cvs 6586: <h4><a name="sectd5286" id="sectd5286">Conditions on the element's
6587: content</a></h4>
1.1 cvs 6588:
1.37 cvs 6589: <p>The condition can be based on whether or not the element is empty. An
1.30 cvs 6590: element which has no children or whose leaves are all empty is considered to
1.37 cvs 6591: be empty itself. This condition is expressed by the <tt>Empty</tt> keyword,
1.30 cvs 6592: optionally preceded by the <tt>NOT</tt> keyword.</p>
1.18 cvs 6593: </div>
1.1 cvs 6594:
1.18 cvs 6595: <div class="subsubsection">
1.37 cvs 6596: <h4><a name="sectd5288" id="sectd5288">Conditions on the presence of specific
6597: presentation rules</a></h4>
1.30 cvs 6598:
6599: <p>The condition can be based on the presence or absence of specific
1.37 cvs 6600: presentation rules associated with the translated element, whatever the
6601: rules, their value or their number. This condition is expressed by the
6602: keyword <tt>Presentation</tt>, optionally preceded by the <tt>NOT</tt>
6603: keyword.</p>
1.18 cvs 6604: </div>
1.1 cvs 6605:
1.18 cvs 6606: <div class="subsubsection">
1.37 cvs 6607: <h4><a name="sectd5289" id="sectd5289">Conditions on the presence of logical
1.18 cvs 6608: attributes</a></h4>
1.30 cvs 6609:
6610: <p>In the same way, the condition can be based on the presence or absence of
1.1 cvs 6611: attributes associated with the translated elements, no matter what the
1.37 cvs 6612: attributes or their values. The <tt>Attributes</tt> keyword expresses this
1.18 cvs 6613: condition.</p>
6614: </div>
1.1 cvs 6615:
1.18 cvs 6616: <div class="subsubsection">
1.37 cvs 6617: <h4><a name="sectd52810" id="sectd52810">Conditions on logical
6618: attributes</a></h4>
1.1 cvs 6619:
1.30 cvs 6620: <p>If the condition appears in the translation rules of an attribute, the
1.37 cvs 6621: <tt>FirstAttr</tt> and <tt>LastAttr</tt> keywords can be used to indicate
6622: that the rules must only be applied if this attribute is the first attribute
6623: for the translated element or if it is the last (respectively). These
6624: conditions can also be inverted by the <tt>NOT</tt> keyword.</p>
6625:
6626: <p>Another type of condition can only be applied to the translation rules
6627: when the element being processed (or one of its ancestors if symbol
6628: <tt>*</tt> is missing) has a certain attribute, perhaps with a certain value
6629: or, in contrast, when the element does not have this attribute with this
6630: value. The condition is specified by writing the name of the attribute after
6631: the keyword <tt>IF</tt> or <tt>AND</tt>. The <tt>NOT</tt> keyword can be used
6632: to invert the condition. If the translation rules must be applied to any
6633: element which has this attribute (or does not have it, if the condition is
6634: inverted) no matter what the attribute's value, the condition is complete.
6635: If, in contrast, the condition applies to one or more values of the
6636: attribute, these are indicated after the name of the attribute, except for
6637: reference attributes which do not have values.</p>
6638:
6639: <p>The representation of the values of an <a name="relattr"
6640: id="relattr">attribute</a> in a condition depends on the attribute's type.
6641: For attributes with enumerated or textual types, the value (a name or
6642: character string between apostrophes, respectively) is simply preceded by an
6643: equals sign. For numeric attributes, the condition can be based on a single
6644: value or on a range of values. In the case of a unique value, this value (an
6645: integer) is simply preceded by an equals sign. Conditions based on ranges of
6646: values have several forms:</p>
1.18 cvs 6647: <ul>
1.30 cvs 6648: <li>all values less than a given value (the value is preceded by a ``less
6649: than'' sign).</li>
6650: <li>all values greater than a given value (the value is preceded by a
6651: ``greater than'' sign).</li>
1.37 cvs 6652: <li>all values falling in an interval, bounds included. The range of values
6653: is then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>,
6654: where Minimum and Maximum are integers.</li>
1.18 cvs 6655: </ul>
1.30 cvs 6656:
1.37 cvs 6657: <p>All numeric values may be negative. The integer is simply preceded by a
1.30 cvs 6658: minus sign.</p>
6659:
6660: <p>Both local and global attributes can be used in conditions.</p>
1.18 cvs 6661: </div>
1.1 cvs 6662:
1.18 cvs 6663: <div class="subsubsection">
1.37 cvs 6664: <h4><a name="sectd52811" id="sectd52811">Conditions on specific presentation
6665: rules</a></h4>
1.1 cvs 6666:
1.30 cvs 6667: <p>It is possible to apply translation rules only when the element being
1.1 cvs 6668: processed has or does not have a specific presentation rule, possibly with a
1.37 cvs 6669: certain value. The condition is specified by writing the name of the
6670: presentation rule after the keyword <tt>IF</tt> or <tt>AND</tt>. The
6671: <tt>NOT</tt> keyword can be used to invert the condition. If the translation
6672: rules must be applied to any element which has this presentation rule (or
6673: does not have it, if the condition is inverted) no matter what the rule's
6674: value, the condition is complete. If, in contrast, the condition applies to
6675: one or more values of the rule, these are indicated after the name of the
1.18 cvs 6676: attribute.</p>
1.30 cvs 6677:
1.37 cvs 6678: <p>The representation of presentation rule values in a condition is similar
6679: to that for attribute values. The representation of these values depend on
6680: the type of the presentation rule. There are three categories of presentation
1.18 cvs 6681: rules:</p>
6682: <ul>
1.30 cvs 6683: <li>those taking numeric values (<tt>Size, Indent, LineSpacing,
6684: LineWeight</tt>),</li>
1.36 cvs 6685: <li>those with values taken from a predefined list (<tt>Adjust, Hyphenate,
1.43 quint 6686: Direction, UnicodeBidi, Style, Weight, Font, UnderLine, Thickness,
6687: LineStyle</tt>),</li>
1.30 cvs 6688: <li>those whose value is a name (<tt>FillPattern, Background,
6689: Foreground</tt>).</li>
1.18 cvs 6690: </ul>
1.30 cvs 6691:
6692: <p>For presentation rules which take numeric values, the condition can take a
1.37 cvs 6693: unique value or a range of values. In the case of a unique value, this value
1.1 cvs 6694: (an integer) is simply preceded by an equals sign. Conditions based on ranges
1.18 cvs 6695: of values have several forms:</p>
6696: <ul>
1.30 cvs 6697: <li>all values less than a given value (the value is preceded by a ``less
6698: than'' sign).</li>
6699: <li>all values greater than a given value (the value is preceded by a
6700: ``greater than'' sign).</li>
1.37 cvs 6701: <li>all values falling in an interval, bounds included. The range of values
6702: is then specified <tt>IN [</tt>Minimum <tt>..</tt>Maximum<tt>]</tt>,
6703: where Minimum and Maximum are integers.</li>
1.18 cvs 6704: </ul>
1.30 cvs 6705:
1.37 cvs 6706: <p>Values for the <tt>Indent</tt>rule may be negative. The integer is then
1.2 cvs 6707: simply preceded by a minus sign and represents how far the first line starts
1.18 cvs 6708: to the left of the other lines.</p>
1.30 cvs 6709:
6710: <p>For presentation rules whose values are taken from predefined lists, the
1.37 cvs 6711: value which satisfies the condition is indicated by an equals sign followed
6712: by the name of the value.</p>
1.30 cvs 6713:
1.37 cvs 6714: <p>For presentation rule whose values are names, the value which satisfies
6715: the condition is indicated by the equals sign followed by the value's name.
6716: The names of fill patterns (the <tt>FillPattern</tt> rule) and of colors (the
1.18 cvs 6717: <tt>Foreground</tt> and <tt>Background</tt> rules) known to Thot are the same
6718: as in the P language.</p>
1.30 cvs 6719:
6720: <p>The syntax of conditions based on the specific presentation is the same as
6721: the syntax used to express the <a href="#sectc5224">translation of specific
1.18 cvs 6722: presentation rules</a>.</p>
1.30 cvs 6723:
6724: <p>When a condition has only one rule, the condition is simply followed by
1.37 cvs 6725: that rule. If it has several rules, they are placed after the condition
1.30 cvs 6726: between the keywords <tt>BEGIN</tt> and <tt>END</tt>.</p>
1.18 cvs 6727: <pre> ConditionSeq = Condition [ 'AND' Condition ] .
1.1 cvs 6728: Condition = [ 'NOT' ] [ 'Target' ] Cond .
6729: Cond = CondElem / CondAscend .
6730: CondElem ='FirstRef' / 'LastRef' /
6731: 'ExternalRef' /
1.41 vatton 6732: 'Script' '=' Script /
1.1 cvs 6733: 'ComputedPage' / 'StartPage' /
6734: 'UserPage' / 'ReminderPage' /
6735: 'Empty' /
1.11 cvs 6736: ElemID /
1.1 cvs 6737: 'FirstAttr' / 'LastAttr' .
6738: CondAscend = [ Ascend ] CondOnAscend .
6739: Ascend = '*' / 'Parent' / 'Ancestor' LevelOrType .
6740: LevelOrType = CondRelLevel / ElemID [ ExtStruct ] .
6741: CondRelLevel = NUMBER .
6742: CondOnAscend ='First' / 'Last' /
6743: 'Referred' /
6744: [ 'Immediately' ] 'Within' [ NumParent ]
6745: ElemID [ ExtStruct ] /
6746: 'Attributes' /
6747: AttrID [ RelatAttr ] /
6748: 'Presentation' /
1.34 cvs 6749: PresRule .
1.1 cvs 6750: NumParent = [ GreaterLess ] NParent .
1.30 cvs 6751: GreaterLess = '>' / '<' .
1.1 cvs 6752: NParent = NUMBER.
6753: ExtStruct = '(' ElemID ')' .
1.41 vatton 6754: Script = NAME .
1.1 cvs 6755: RelatAttr ='=' Value /
1.30 cvs 6756: '>' [ '-' ] Minimum /
1.1 cvs 6757: '<' [ '-' ] Maximum /
6758: 'IN' '[' [ '-' ] MinInterval '..'
6759: [ '-' ] MaxInterval ']' .
6760: Value = [ '-' ] IntegerVal / TextVal / AttrValue .
6761: Minimum = NUMBER .
6762: Maximum = NUMBER .
6763: MinInterval = NUMBER .
6764: MaxInterval = NUMBER .
6765: IntegerVal = NUMBER .
6766: TextVal = STRING .
1.18 cvs 6767: AttrValue = NAME .</pre>
1.30 cvs 6768:
1.18 cvs 6769: <blockquote class="example">
1.30 cvs 6770: <p><strong>Example:</strong></p>
6771:
6772: <p>Suppose that after each element of type Section_Title it is useful to
6773: produce the text <tt>\label{SectX}</tt> where <tt>X</tt> represents the
6774: section number, but only if the section is designated by one or more
1.37 cvs 6775: references in the document. The following conditional rule produces this
1.30 cvs 6776: effect:</p>
6777: <pre>RULES
1.1 cvs 6778: Section_Title :
6779: IF Referred
1.18 cvs 6780: Create ('\label{Sect' Value(UniqueSectNum) '}\12') After;</pre>
1.30 cvs 6781:
6782: <p>(the declaration of the <a href="#sectc5224"><tt>UniqueSectNum</tt>
1.37 cvs 6783: counter</a> is given above). The string <tt>\12</tt> represents a line
1.30 cvs 6784: break.</p>
1.18 cvs 6785: </blockquote>
1.30 cvs 6786:
1.18 cvs 6787: <blockquote class="example">
1.30 cvs 6788: <p><strong>Example:</strong></p>
6789:
1.37 cvs 6790: <p>Suppose that for elements of the Elmnt type it would be useful to
6791: produce a character indicating the value of the numeric attribute Level
6792: associated with the element: an ``A'' for all values of Level less than 3,
6793: a ``B'' for values between 3 and 10 and a ``C'' for values greater than 10.
6794: This can be achieved by writing the following rules for the Elmnt type:</p>
1.30 cvs 6795: <pre>RULES
1.1 cvs 6796: Elmnt :
6797: BEGIN
6798: IF Level < 3
6799: Create 'A';
6800: IF Level IN [3..10]
6801: Create 'B';
1.30 cvs 6802: IF Level > 10
1.1 cvs 6803: Create 'C';
1.18 cvs 6804: END;</pre>
6805: </blockquote>
6806: </div>
6807: </div>
1.1 cvs 6808:
1.18 cvs 6809: <div class="subsection">
1.37 cvs 6810: <h3><a name="sectc529" id="sectc529">Translation rules</a></h3>
1.1 cvs 6811:
1.37 cvs 6812: <p>Fifteen types of translation rules can be associated with element types
6813: and attribute values. They are the <tt>Create</tt>, <tt>Write</tt>,
1.18 cvs 6814: <tt>Read</tt>, <tt>Include</tt>, <tt>Get</tt>, <tt>Copy</tt>, <tt>Use</tt>,
1.31 cvs 6815: <tt>Remove</tt>, <tt>Ignore</tt>, <tt>NoTranslation</tt>,
6816: <tt>NoLineBreak</tt>, <tt>ChangeMainFile</tt>, <tt>RemoveFile</tt>,
1.37 cvs 6817: <tt>Set</tt>, <tt>Add</tt>, <tt>Indent</tt>, rules. Each rule has its own
1.31 cvs 6818: syntax, although they are all based on very similar models.</p>
1.18 cvs 6819: <pre> SimpleRule = 'Create' [ 'IN' VarID ] Object
1.1 cvs 6820: [ Position ] ';' /
6821: 'Write' Object [ Position ] ';' /
6822: 'Read' BufferID [ Position ] ';' /
6823: 'Include' File [ Position ] ';' /
6824: 'Get' [ RelPosition ] ElemID
6825: [ ExtStruct ]
6826: [ Position ] ';' /
6827: 'Copy' [ RelPosition ] ElemID
6828: [ ExtStruct ]
6829: [ Position ] ';' /
6830: 'Use' TrSchema [ 'For' ElemID ] ';' /
6831: 'Remove' ';' /
1.31 cvs 6832: 'Ignore' ';' /
1.1 cvs 6833: 'NoTranslation' ';' /
6834: 'NoLineBreak' ';' /
6835: 'ChangeMainFile' VarID [ Position ] ';' /
1.14 cvs 6836: 'RemoveFile' VarID [ Position ] ';' /
1.10 cvs 6837: 'Set' CounterID InitValue [ Position ] ';' /
6838: 'Add' CounterID Increment [ Position ] ';' /
1.25 cvs 6839: 'Indent' [ 'IN' VarID ] Indent [ Position ] ';' .</pre>
1.18 cvs 6840: </div>
6841:
6842: <div class="subsection">
1.37 cvs 6843: <h3><a name="sectc5210" id="sectc5210">The <tt>Create</tt> rule</a></h3>
1.18 cvs 6844:
1.30 cvs 6845: <p>The most frequently used rule is undoubtedly the <tt>Create</tt> rule,
6846: which generates fixed or variable text (called an <em>object</em>) in the
1.37 cvs 6847: output file. The generated text can be made to appear either before or after
6848: the content of the element to which the rule applies. The rule begins with
6849: the <tt>Create</tt> keyword, followed by a specifier for the object and a
6850: keyword (<tt>Before</tt> or <tt>After</tt>) indicating the position of the
6851: generated text (<a href="#sectc5222">before or after</a> the element's
6852: content). If the position is not indicated, the object will be generated
6853: before the element's content. This rule, like all translation rules, is
6854: terminated by a semicolon.</p>
1.30 cvs 6855:
6856: <p>The <tt>Create</tt> keyword can be followed by the <tt>IN</tt> keyword and
1.37 cvs 6857: by the name of a variable. This means that the text generated by the rule
1.30 cvs 6858: must not be written in the main output file, but in the file whose name is
1.18 cvs 6859: specified by the variable.</p>
1.30 cvs 6860:
6861: <p>This allows the translation program to generate text in different files
6862: during the same run. These files do not need to be explicitely declared or
6863: opened. They do not need to be closed either, but if they contain temporary
6864: data, they can be removed (see the <a href="#sectc5220a"><tt>RemoveFile</tt>
6865: rule</a>). As soon as the translation program executes a <tt>Create</tt> rule
6866: for a file that is not yet open, it opens the file. These files are closed
6867: when the translation is finished.</p>
1.18 cvs 6868: <pre> 'Create' [ 'IN' VarID ] Object
1.1 cvs 6869: [ Position ] ';'
6870: Object = ConstID / CharString /
6871: BufferID /
6872: VarID /
1.30 cvs 6873: '(' Function < Function > ')' /
1.21 cvs 6874: [ 'Translated' ] AttrID /
1.1 cvs 6875: 'Value' /
6876: 'Content' /
6877: 'Attributes' /
6878: 'Presentation' /
6879: 'RefId' /
6880: 'PairId' /
6881: 'FileDir' /
6882: 'FileName' /
6883: 'Extension' /
6884: 'DocumentName' /
6885: 'DocumentDir' /
6886: [ 'Referred' ] ReferredObject .
6887: Position ='After' / 'Before' .
6888:
6889: ReferredObject = VarID /
6890: ElemID [ ExtStruct ] /
6891: 'RefId' /
6892: 'DocumentName' /
1.18 cvs 6893: 'DocumentDir' .</pre>
1.30 cvs 6894:
6895: <p>The object to be generated can be:</p>
1.18 cvs 6896: <ul>
1.30 cvs 6897: <li>a constant string, specified by its name if it is declared in the
6898: schema's <tt>CONST</tt> section, or given directly as a value between
6899: apostrophes;</li>
6900: <li>the contents of a buffer, designated by the name of the buffer;</li>
6901: <li>a variable, designated by its name if it is declared in the translation
1.37 cvs 6902: schema's <tt>VAR</tt> section, or given directly between parentheses. The
1.30 cvs 6903: text generated is the value of that variable evaluated for the element to
6904: which the rule applies.</li>
6905: <li>the value of an attribute, if the element being translated has this
6906: attribute. The attribute is specified by its name. If it's a text
6907: attribute, it can be preceded by the <code>Translated</code> keyword,
6908: which causes the attribute value to be recoded using the text translation
6909: table defined by section <code><a
6910: href="#sectc5225">TEXTTRANSLATE</a></code>;</li>
1.37 cvs 6911: <li>the value of a specific presentation rule. This object can only be
1.30 cvs 6912: generated if the translation rule is for a <a href="#prestransl">specific
1.37 cvs 6913: presentation rule</a>. It is specified by the <tt>Value</tt> keyword;</li>
6914: <li>the element's content. That is, the content of the leaves of the
6915: subtree of the translated element. This is specified by the
1.30 cvs 6916: <tt>Content</tt> keyword;</li>
6917: <li>the translation of all attributes of the element (which is primarily
6918: used to apply the attribute translation rules <a
1.37 cvs 6919: href="#sectc5222">before</a> those of the element type). This is
1.30 cvs 6920: specified by the <tt>Attributes</tt> keyword.</li>
6921: <li>the translation of all of the element's specific presentation rules
6922: (which is primarily used to apply the translation rules for the specific
1.37 cvs 6923: presentation rules <a href="#sectc5222">before</a> those of the element
6924: or its attributes). This option is specified by the <tt>Presentation</tt>
1.30 cvs 6925: keyword;</li>
1.37 cvs 6926: <li>The value of the reference's identifier.<br />
6927: Thot associates a unique identifier with each element in a document. This
6928: identifier (called <em>reference's identifier</em> or <em>label</em>) is
6929: a character string containing the letter `L' followed by digits. Thot
6930: uses it in references for identifying the referred element.<br />
1.30 cvs 6931: The <tt>RefId</tt> keyword produces the reference's identifier of the
6932: element to which the translation rule is applied, or the reference's
6933: identifier of its first ancestor that is referred by a reference or that
6934: can be referred by a reference.</li>
1.37 cvs 6935: <li>the value of a mark pair's unique identifier. This may only be used for
1.30 cvs 6936: <a href="#sectd3285">mark pairs</a> and is indicated by the
6937: <tt>PairId</tt> keyword.</li>
6938: <li>the directory containing the file being generated (this string includes
1.37 cvs 6939: an ending '/', if it is not empty). This is indicated by the
1.30 cvs 6940: <tt>FileDir</tt> keyword.</li>
6941: <li>the name of the file being generated (only the name, without the
6942: directory and without the extension). This is indicated by the
6943: <tt>FileName</tt> keyword.</li>
6944: <li>the extension of the file being generated (this string starts with a
1.37 cvs 6945: dot, if it is not empty). This is indicated by the <tt>Extension</tt>
1.30 cvs 6946: keyword.</li>
1.37 cvs 6947: <li>the name of the document being translated. This is indicated by the
1.30 cvs 6948: <tt>DocumentName</tt> keyword.</li>
1.37 cvs 6949: <li>the directory containing the document being translated. This is
1.30 cvs 6950: indicated by the <tt>DocumentDir</tt> keyword.</li>
1.18 cvs 6951: </ul>
1.30 cvs 6952:
1.37 cvs 6953: <p>When the rule applies to a reference (an element or an attribute defined
6954: as a reference in the structure schema), it can generate a text related to
6955: the element referred by that reference. The rule name is then followed by the
1.18 cvs 6956: <tt>Referred</tt> keyword and a specification of the object to be generated
1.37 cvs 6957: for the referred element. This specification can be:</p>
1.18 cvs 6958: <ul>
1.37 cvs 6959: <li>the name of a variable. The rule generates the value of that variable,
1.30 cvs 6960: computed for the referred element.</li>
1.37 cvs 6961: <li>an element type. The rule generates the translation of the element of
6962: that type, which is in the subtree of the referred element. If this
1.30 cvs 6963: element is not defined in the structure schema which corresponds to the
6964: translation schema (that is, an object defined in another schema), the
6965: element's type name must be followed by the name of its structure schema
6966: between parentheses.</li>
1.37 cvs 6967: <li>the <tt>RefId</tt> keyword. The rule generates the reference's
1.30 cvs 6968: identifier of the referred element.</li>
1.37 cvs 6969: <li>the <tt>DocumentName</tt> keyword. The rule generates the name of the
1.30 cvs 6970: document to which the referred element belongs.</li>
1.37 cvs 6971: <li>the <tt>DocumentDir</tt> keyword. The rule generates the name of the
1.30 cvs 6972: directory that contains the document of the referred element.</li>
1.18 cvs 6973: </ul>
6974: </div>
1.1 cvs 6975:
1.18 cvs 6976: <div class="subsection">
1.37 cvs 6977: <h3><a name="sectc5211" id="sectc5211">The <tt>Write</tt> rule</a></h3>
1.1 cvs 6978:
1.37 cvs 6979: <p>The <tt>Write</tt> has the same syntax as the <tt>Create</tt> rule. It
1.30 cvs 6980: also produces the same effect, but the generated text is displayed on the
6981: user's terminal during the translation of the document, instead of being
1.37 cvs 6982: produced in the translated document. This is useful for helping the user keep
1.30 cvs 6983: track of the progress of the translation and for prompting the user on the
6984: terminal for input required by the <tt>Read</tt> rule.</p>
1.18 cvs 6985: <pre> 'Write' Object [ Position ] ';'</pre>
1.30 cvs 6986:
6987: <p>Notice: if the translator is launched by the editor (by the ``Save as''
1.18 cvs 6988: command), messages produced by the <tt>Write</tt> rule are not displayed.</p>
1.30 cvs 6989:
1.18 cvs 6990: <blockquote class="example">
1.30 cvs 6991: <p><strong>Example:</strong></p>
6992:
6993: <p>To make the translator display the number of each section being
6994: translated on the user's terminal, the following rule is specified for the
6995: <tt>Section</tt> element type:</p>
6996: <pre>Section : BEGIN
1.1 cvs 6997: Write VarSection;
6998: ...
1.18 cvs 6999: END;</pre>
1.30 cvs 7000:
7001: <p>(see <a href="#varsectexample">above</a> for the definition of the
7002: <tt>VarSection</tt> variable).</p>
7003:
7004: <p>To display text on the terminal before issuing a read operation with the
7005: <tt>Read</tt> rule, the following rule is used:</p>
7006: <pre>BEGIN
1.1 cvs 7007: Write 'Enter the name of the destination: ';
7008: ...
1.18 cvs 7009: END;</pre>
7010: </blockquote>
7011: </div>
7012:
7013: <div class="subsection">
1.37 cvs 7014: <h3><a name="sectc5212" id="sectc5212">The <tt>Read</tt> rule</a></h3>
1.18 cvs 7015:
1.30 cvs 7016: <p>The <tt>Read</tt> rule reads text from the terminal during the translation
7017: of the document and saves the text read in one of the buffers declared in the
1.37 cvs 7018: <tt>BUFFERS</tt> section of the schema. The buffer to be used is indicated by
7019: its name, after the <tt>READ</tt> keyword. This name can be followed, as in
1.18 cvs 7020: the <tt>Create</tt> and <tt>Write</tt> rules, by a keyword indicating if the
7021: read operation must be performed <tt>Before</tt> or <tt>After</tt> the
1.37 cvs 7022: translation of the element's content. If this keyword is absent, the read
7023: operation is done beforehand. The text is read into the buffer and remains
1.5 cvs 7024: there until a rule using the same buffer - possibly the same rule - is
1.18 cvs 7025: applied.</p>
7026: <pre> 'Read' BufferID [ Position ] ';'</pre>
1.30 cvs 7027:
1.18 cvs 7028: <blockquote class="example">
1.30 cvs 7029: <p><strong>Example:</strong></p>
7030:
7031: <p>The following set of rules tells the user that the translator is waiting
7032: for the entry of some text, reads this text into a buffer and copies the
7033: text into the translated document.</p>
7034: <pre>BEGIN
1.1 cvs 7035: Write 'Enter the name of the destination: ';
7036: Read DestName;
7037: Create DestName;
7038: ...
1.18 cvs 7039: END;</pre>
1.30 cvs 7040:
7041: <p>(see <a href="#destname">above</a> the definition of
7042: <tt>DestName</tt>).</p>
1.18 cvs 7043: </blockquote>
7044: </div>
7045:
7046: <div class="subsection">
1.37 cvs 7047: <h3><a name="sectc5213" id="sectc5213">The <tt>Include</tt> rule</a></h3>
1.18 cvs 7048:
1.30 cvs 7049: <p>The <tt>Include</tt> rule, like the <tt>Create</tt> rule, is used to
1.37 cvs 7050: produce text in the translated document. It inserts constant text which is
7051: not defined in the translation schema, but is instead taken from a file. The
7052: file's name is specified after the <tt>Include</tt> keyword, either directly
7053: as a character string between apostrophes or as the name of one of the
7054: buffers declared in the <tt>BUFFERS</tt> section of the schema. In the latter
7055: case, the buffer is assumed to contain the file's name. This can be used when
7056: the included file's name is known only at the moment of translation. This
7057: only requires that the <tt>Include</tt> rule is preceded by a <tt>Read</tt>
7058: rule which puts the name of the file desired by the user into the buffer.</p>
1.30 cvs 7059:
7060: <p>Like the other rules, it is possible to specify whether the inclusion will
1.1 cvs 7061: occur before or after the element's content, with the default being before.
7062: The file inclusion is only done at the moment of translation, not during the
7063: compilation of the translation schema. Thus, the file to be included need not
7064: exist during the compilation, but it must be accessible at the time of
1.37 cvs 7065: translation. Its contents can also be modified between two translations, thus
1.1 cvs 7066: producing different results, even if neither the document or the translation
1.18 cvs 7067: schema are modified.</p>
1.30 cvs 7068:
7069: <p>During translation, the file to be included is searched for along the
7070: schema directory path (indicated by the environment variable
1.37 cvs 7071: <tt>THOTSCH</tt>). The file name is normally only composed of a simple name,
7072: without specification of a complete file path. However, if the filename
1.30 cvs 7073: starts with a '/', it is considered as an absolute path.</p>
1.18 cvs 7074: <pre> 'Include' File [ Position ] ';'
1.6 cvs 7075: File = FileName / BufferID .
1.18 cvs 7076: FileName = STRING .</pre>
1.30 cvs 7077:
1.18 cvs 7078: <blockquote class="example">
1.30 cvs 7079: <p><strong>Example:</strong></p>
7080:
1.37 cvs 7081: <p>Suppose that it is desirable to print documents of the Article class
7082: with a formatter which requires a number of declarations and definitions at
7083: the beginning of the file. The <tt>Include</tt>rule can be used to achieve
1.30 cvs 7084: this. All the declarations and definitions a replaced in a file called
7085: <tt>DeclarArt</tt> and then the <tt>Article</tt> element type is given the
7086: following rule:</p>
7087: <pre>Article : BEGIN
1.1 cvs 7088: Include 'DeclarArt' Before;
7089: ...
1.18 cvs 7090: END;</pre>
7091: </blockquote>
7092: </div>
7093:
7094: <div class="subsection">
1.37 cvs 7095: <h3><a name="sectc5214" id="sectc5214">The <tt>Get</tt> rule</a></h3>
1.18 cvs 7096:
1.30 cvs 7097: <p>The <tt>Get</tt> rule is used to change the order in which the elements
1.37 cvs 7098: appear in the translated document. More precisely, it produces the
1.30 cvs 7099: translation of a specified element before or after the translation of the
1.37 cvs 7100: content of the element to which the rule applies. The <tt>Before</tt> and
1.30 cvs 7101: <tt>After</tt> keywords are placed at the end of the rule to specify whether
7102: the operation should be performed before or after translation of the rule's
7103: element (the default is before). The type of the element to be moved must be
7104: specified after the <tt>Get</tt> keyword, optionally preceded by a keyword
7105: indicating where the element will be found in the logical structure of the
7106: document:</p>
1.18 cvs 7107: <dl>
1.30 cvs 7108: <dt><tt>Included</tt></dt>
7109: <dd>The element to be moved is the first element of the indicated type
7110: which is found inside the element to which the rule applies.</dd>
7111: <dt><tt>Referred</tt></dt>
7112: <dd>This keyword can only be used if the rule applies to a reference
1.37 cvs 7113: element. The element to be moved is either the element designated by
7114: the reference (if that element is of the specified type), or the first
1.30 cvs 7115: element of the desired type contained within the element designated by
7116: the reference.</dd>
7117: <dt>no keyword</dt>
1.37 cvs 7118: <dd><p>The translator takes the first element of the indicated type from
7119: among the siblings of the rule's element. This is primarily used to
7120: change the order of the components of an aggregate.</p>
1.30 cvs 7121: </dd>
1.18 cvs 7122: </dl>
1.30 cvs 7123:
7124: <p>If the element to be moved is defined in a structure schema which is not
7125: the one which corresponds to the translation schema (in the case of an
7126: included object with a different schema), the type name of this element must
7127: be followed, between parentheses, by the name of the structure schema which
1.18 cvs 7128: defines it.</p>
7129: <pre> 'Get' [ RelPosition ] ElemID
1.6 cvs 7130: [ ExtStruct ]
7131: [ Position ] ';' /
7132: RelPosition = 'Included' / 'Referred' .
1.18 cvs 7133: ExtStruct = '(' ElemID ')' .</pre>
1.30 cvs 7134:
7135: <p>The <tt>Get</tt> rule has no effect if the element which it is supposed to
1.37 cvs 7136: move has already been translated. Thus, the element will not be duplicated.
1.1 cvs 7137: It is generally best to associate the rule with the first element which will
1.37 cvs 7138: be encountered by the translator in its traversal of the document. Suppose an
1.18 cvs 7139: aggregate has two elements <tt>A</tt> and <tt>B</tt>, with <tt>A</tt>
1.37 cvs 7140: appearing first in the logical structure. To permute these two elements, a
1.18 cvs 7141: <tt>Get B before</tt> rule should be associated with the <tt>A</tt> element
1.37 cvs 7142: type, not the inverse. Similarly, a rule of the form <tt>Get Included X
1.18 cvs 7143: After</tt>, even though syntactically correct, makes no sense since, by the
1.1 cvs 7144: time it will be applied, after the translation of the contents of the element
1.18 cvs 7145: to which it is attached, the <tt>X</tt> element will already have been
7146: translated.</p>
7147: </div>
7148:
7149: <div class="subsection">
1.37 cvs 7150: <h3><a name="sectc5215" id="sectc5215">The <tt>Copy</tt> rule</a></h3>
1.18 cvs 7151:
1.30 cvs 7152: <p>Like the <tt>Get</tt> rule, the <tt>Copy</tt> rule generates the
7153: translation of a specified element, but it acts even if the element has
7154: already been translated and it allows to copy it or to translate it later.
7155: Both rules have the same syntax.</p>
1.18 cvs 7156: <pre> 'Copy' [ RelPosition ] ElemID
7157: [ ExtStruct ] [ Position ] ';'</pre>
7158: </div>
7159:
7160: <div class="subsection">
1.37 cvs 7161: <h3><a name="sectc5216" id="sectc5216">The <tt>Use</tt> rule</a></h3>
1.18 cvs 7162:
1.30 cvs 7163: <p>The <tt>Use</tt> rule specifies the translation schema to be applied to
1.37 cvs 7164: objects of a certain class that are part of the document. This rule only
1.1 cvs 7165: appears in the rules for the root element of the document (the first type
1.18 cvs 7166: defined after the <tt>STRUCT</tt> keyword in the structure schema) or the
1.1 cvs 7167: rules of an element defined by an external structure (by another structure
1.37 cvs 7168: schema). Also, the <tt>Use</tt> rule cannot be conditional.</p>
1.30 cvs 7169:
7170: <p>If the rule is applied to an element defined by an external structure, the
1.18 cvs 7171: <tt>Use</tt> keyword is simply followed by the name of the translation schema
1.37 cvs 7172: to be used for element constructed according to that external structure. If
1.1 cvs 7173: the rule is applied to the document's root element, it is formed by the
1.18 cvs 7174: <tt>Use</tt> keyword followed by the translation schema's name, the
7175: <tt>For</tt> keyword and the name of the external structure to which the
7176: indicated translation schema should be applied.</p>
7177: <pre> 'Use' TrSchema [ 'For' ElemID ] ';'
7178: TrSchema = NAME .</pre>
1.30 cvs 7179:
7180: <p>If no <tt>Use</tt> rule defines the translation schema to be used for an
1.1 cvs 7181: external structure which appears in a document, the translator asks the user,
7182: during the translation process, which schema should be used. Thus, it is not
1.18 cvs 7183: necessary to give the translation schema a <tt>Use</tt> rule for every
1.1 cvs 7184: external structure used, especially when the choice of translation schemas is
1.18 cvs 7185: to be left to the user.</p>
1.30 cvs 7186:
7187: <p>Notice: if the translator is launched by the editor (by the ``Save as''
1.18 cvs 7188: command), prompts are not displayed.</p>
1.30 cvs 7189:
1.18 cvs 7190: <blockquote class="example">
1.30 cvs 7191: <p><strong>Example:</strong></p>
7192:
7193: <p>The <tt>Article</tt> structure schema uses the <tt>Formula</tt> external
7194: structure, defined by another structure schema, for mathematical
7195: formulas:</p>
7196: <pre>STRUCTURE Article;
1.1 cvs 7197: ...
7198: STRUCT
7199: Article = ...
7200: ...
7201: Formula_in_text = Formula;
7202: Isolated_formula = Formula;
7203: ...
1.18 cvs 7204: END</pre>
1.30 cvs 7205:
7206: <p>Suppose that it would be useful to use the <tt>FormulaT</tt> translation
1.37 cvs 7207: schema for the formulas of an article. This can be expressed in two
1.30 cvs 7208: different ways in the <tt>Article</tt> class translation schema, using the
7209: rules:</p>
7210: <pre>RULES
1.1 cvs 7211: Article :
1.18 cvs 7212: Use FormulaT for Formula;</pre>
1.30 cvs 7213:
7214: <p>or:</p>
7215: <pre>RULES
1.1 cvs 7216: ...
7217: Formula :
1.18 cvs 7218: Use FormulaT;</pre>
7219: </blockquote>
7220: </div>
7221:
7222: <div class="subsection">
1.37 cvs 7223: <h3><a name="sectc5217" id="sectc5217">The <tt>Remove</tt> rule</a></h3>
1.18 cvs 7224:
1.37 cvs 7225: <p>The <tt>Remove</tt> rule indicates that nothing should be generated, in
7226: the translated document, for the content of the element to which the rule
7227: applies. The content of that element is simply ignored by the translator.
7228: This does not prevent the generation of text for the element itself, using
7229: the <tt>Create</tt> or <tt>Include</tt> rules, for example.</p>
1.30 cvs 7230:
7231: <p>The <tt>Remove</tt> rule is simply written with the <tt>Remove</tt>
7232: keyword. It is terminated, like all rules, by a semicolon.</p>
1.18 cvs 7233: <pre> 'Remove' ';'</pre>
7234: </div>
7235:
7236: <div class="subsection">
1.37 cvs 7237: <h3><a name="sectc5217a" id="sectc5217a">The <tt>Ignore</tt> rule</a></h3>
1.31 cvs 7238:
1.37 cvs 7239: <p>The <tt>Ignore</tt> rule indicates that nothing should be generated, in
7240: the translated document, for the element to which the rule applies. The whole
1.32 cvs 7241: element is simply ignored by the translator.</p>
1.31 cvs 7242:
7243: <p>The <tt>Ignore</tt> rule is simply written with the <tt>Ignore</tt>
7244: keyword. It is terminated, like all rules, by a semicolon.</p>
7245: <pre> 'Ignore' ';'</pre>
7246: </div>
7247:
7248: <div class="subsection">
1.37 cvs 7249: <h3><a name="sectc5218" id="sectc5218">The <tt>NoTranslation</tt>
7250: rule</a></h3>
1.18 cvs 7251:
1.30 cvs 7252: <p>The <tt>NoTranslation</tt> rule indicates to the translator that it must
1.37 cvs 7253: not translate the content of the leaves of the element to which it applies.
7254: In contrast to the <tt>Remove</tt> rule, it does not suppress the content of
7255: the element, but it inhibits the translation of character strings, symbols,
7256: and graphical elements contained in the element. These are retrieved so that
1.18 cvs 7257: after the translation of the document, the rules of the <a
7258: href="#sectc5225"><tt>TEXTTRANSLATE</tt>, <tt>SYMBTRANSLATE</tt> and
7259: <tt>GRAPHTRANSLATE</tt> sections</a> will not be applied to them.</p>
1.30 cvs 7260:
7261: <p>The <tt>NoTranslation</tt> rule is written with the <tt>NoTranslation</tt>
1.18 cvs 7262: keyword followed by a semicolon.</p>
7263: <pre> 'NoTranslation' ';'</pre>
7264: </div>
7265:
7266: <div class="subsection">
1.37 cvs 7267: <h3><a name="sectc5219" id="sectc5219">The <tt>NoLineBreak</tt> rule</a></h3>
1.18 cvs 7268:
1.30 cvs 7269: <p>The <tt>NoLineBreak</tt> rule indicates to the translator that it must not
1.1 cvs 7270: generate additional line breaks in the output produced for the element to
1.37 cvs 7271: which it applies. This is as if it was an <a href="#sectc522">instruction
1.18 cvs 7272: <tt>LINELENGTH 0;</tt></a> at the beginning of the translation schema, but
7273: only for the current element.</p>
1.30 cvs 7274:
7275: <p>The <tt>NoLineBreak</tt> rule is written with the <tt>NoLineBreak</tt>
7276: keyword followed by a semicolon.</p>
1.18 cvs 7277: <pre> 'NoLineBreak' ';'</pre>
7278: </div>
1.1 cvs 7279:
1.18 cvs 7280: <div class="subsection">
1.37 cvs 7281: <h3><a name="sectc5220" id="sectc5220">The <tt>ChangeMainFile</tt>
7282: rule</a></h3>
1.1 cvs 7283:
1.30 cvs 7284: <p>When the translation program starts, it opens a main output file, whose
1.37 cvs 7285: name is given as a parameter of the translator. All <a
7286: href="#sectc5210"><tt>Create</tt> rules</a> without explicit indication of
7287: the output file write sequentially in this file. When a
7288: <tt>ChangeMainFile</tt> rule is executed, the main output file is closed and
7289: it is replaced by a new one, whose name is specified in the
7290: <tt>ChangeMainFile</tt> rule. The <tt>Create</tt> rules without indication of
7291: the output file that are then executed write in this new file. Several
7292: <tt>ChangeMainFile</tt> rules can be executed during the same translation,
7293: for dividing the main output into several files.</p>
1.30 cvs 7294:
7295: <p>This rule is written with the <tt>ChangeMainFile</tt> keyword followed by
7296: the name of a variable that specifies the name of the new main file. The
1.37 cvs 7297: keyword <tt>Before</tt> or <tt>After</tt> can be placed at the end of the
7298: rule to specify whether the operation should be performed before or after
7299: translation of the rule's element (the default is before). This rule, like
7300: all translation rules, is terminated by a semicolon.</p>
1.18 cvs 7301: <pre> 'ChangeMainFile' VarID [ Position ] ';'</pre>
1.30 cvs 7302:
1.18 cvs 7303: <blockquote class="example">
1.30 cvs 7304: <p><strong>Example:</strong></p>
7305:
7306: <p>To generate the translation of each section in a different file, the
1.37 cvs 7307: following rule can be associated with type <tt>Section</tt>. That rule uses
1.30 cvs 7308: the <a href="#varoutputfile"><tt>VarOutpuFile</tt> variable</a> defined
7309: above.</p>
7310: <pre> Section:
1.18 cvs 7311: ChangeMainFile VarOutpuFile Before;</pre>
1.30 cvs 7312:
7313: <p>If <tt>output.txt</tt> is the name of the output file specified when
7314: starting the translation program, translated sections are written in files
7315: <tt>output1.txt</tt>, <tt>output2.txt</tt>, etc.</p>
1.18 cvs 7316: </blockquote>
7317: </div>
1.1 cvs 7318:
1.18 cvs 7319: <div class="subsection">
1.37 cvs 7320: <h3><a name="sectc5220a" id="sectc5220a">The <tt>RemoveFile</tt> rule</a></h3>
1.14 cvs 7321:
1.37 cvs 7322: <p>Files may be used for storing temporary data that are no longer needed
7323: when the translation of a document is complete. These files may be removed by
7324: the <tt>RemoveFile</tt> rule.</p>
1.30 cvs 7325:
7326: <p>This rule is written with the <tt>RemoveFile</tt> keyword followed by the
1.37 cvs 7327: name of a variable that specifies the name of the file to be removed. The
7328: keyword <tt>Before</tt> or <tt>After</tt> can be placed at the end of the
7329: rule to specify whether the operation should be performed before or after
7330: translation of the rule's element (the default is before). This rule, like
1.30 cvs 7331: all translation rules, is terminated by a semicolon.</p>
1.18 cvs 7332: <pre> 'RemoveFile' VarID [ Position ] ';'</pre>
7333: </div>
7334:
7335: <div class="subsection">
1.37 cvs 7336: <h3><a name="sectc5221" id="sectc5221">The <tt>Set</tt> and <tt>Add</tt>
7337: rules</a></h3>
1.18 cvs 7338:
1.37 cvs 7339: <p>The <tt>Set</tt> and <tt>Add</tt> rules are used for modifying the value
7340: of counters that have no <a href="#sectc524">counting function</a>. Only this
1.18 cvs 7341: type of counter can be used in the <tt>Set</tt> and <tt>Add</tt> rules.</p>
1.30 cvs 7342:
7343: <p>Both rules have the same syntax: after the keyword <tt>Set</tt> or
1.18 cvs 7344: <tt>Add</tt> appear the counter name and the value to assign to the counter
7345: (<tt>Set</tt> rule) or the value to be added to the counter (<tt>Add</tt>
1.37 cvs 7346: rule). The keyword <tt>Before</tt> or <tt>After</tt> can follow that value to
1.1 cvs 7347: indicate when the rule must be applied: before or after the element's content
1.37 cvs 7348: is translated. By default, <tt>Before</tt> is assumed. A semicolon terminates
1.18 cvs 7349: the rule.</p>
7350: <pre> 'Set' CounterID InitValue [ Position ] ';' /
7351: 'Add' CounterID Increment [ Position ] ';'</pre>
7352: </div>
7353:
7354: <div class="subsection">
1.37 cvs 7355: <h3><a name="sectc5221a" id="sectc5221a">The <tt>Indent</tt> rule</a></h3>
1.18 cvs 7356:
1.37 cvs 7357: <p>The <tt>Indent</tt> rule is used to modify the value of text indentation
7358: in the output files.</p>
1.30 cvs 7359:
1.37 cvs 7360: <p>Each time the translator creates a new line in an output file, it
7361: generates a variable number of space characters at the beginning of the new
7362: line. By default, the number of these characters (the indentation value) is
7363: 0. It can be changed with the <tt>Indent</tt> rule.</p>
1.30 cvs 7364:
7365: <p>In its simple form, the rule begins with the <tt>Indent</tt> keyword,
1.25 cvs 7366: followed by the indentation sign (optional) and value and a keyword
1.30 cvs 7367: <tt>Before</tt> or <tt>After</tt> indicating that the indentation should be
7368: changed <a href="#sectc5222">before or after</a> the element's content is
1.37 cvs 7369: generated. If the position is not indicated, the indentation is changed
7370: before the element's content is generated. This rule, like all translation
1.25 cvs 7371: rules, is terminated by a semicolon.</p>
1.30 cvs 7372:
7373: <p>The indentation value is indicated by an integer, which is the number of
7374: space characters to be generated at the beginning of each new line. A sign
1.18 cvs 7375: (<tt>+</tt> or <tt>-</tt>) can appear before the integer to indicate that the
1.37 cvs 7376: value is relative: the current value of indentation is incremented (if sign
7377: is <tt>+</tt>) or decremented (if sign is <tt>-</tt>) by the specified
7378: value.</p>
1.30 cvs 7379:
7380: <p>Keyword <tt>Suspend</tt> or <tt>Resume</tt> can appear instead of the
1.37 cvs 7381: (possibly signed) identation value. <tt>Suspend</tt> means that the new
1.30 cvs 7382: indentation value to be used is zero until another <tt>Indent</tt> rule is
7383: executed and changes the indentation value. <tt>Resume</tt> means that the
7384: indentation value that was used before the last <tt>Indent Suspend</tt> was
1.37 cvs 7385: executed becomes the new value. Only one <tt>Suspend</tt> can be used before
1.30 cvs 7386: a <tt>Resume</tt>; <tt>Supend</tt>-<tt>Resume</tt> pairs can not be
7387: nested.</p>
7388:
1.37 cvs 7389: <p>Like the <a href="#sectc5210"><tt>Create</tt> rule</a>, the
7390: <tt>Indent</tt> keyword can be followed by the <tt>IN</tt> keyword and by the
7391: name of a <a href="#sectc526">variable</a>. This means that the rule must not
7392: change indentation in the main output file, but in the file whose name is
7393: specified by the variable (by default, indentation is changed in the main
7394: output file).</p>
1.25 cvs 7395: <pre> 'Indent' [ 'IN' VarID ] Indent [ Position ] ';' .
1.10 cvs 7396:
1.25 cvs 7397: Indent = 'Suspend' / 'Resume' / [ IndentSign ] IndentValue .
1.10 cvs 7398: IndentSign = '+' / '-' .
1.18 cvs 7399: IndentValue = NUMBER .</pre>
7400: </div>
1.10 cvs 7401:
1.18 cvs 7402: <div class="subsection">
1.37 cvs 7403: <h3><a name="sectc5222" id="sectc5222">Rule application order</a></h3>
1.1 cvs 7404:
1.30 cvs 7405: <p>The translator translates the elements which comprise the document in the
1.37 cvs 7406: order induced by the tree structure, except when the <tt>Get</tt> rule is
7407: used to change the order of translation. For each element, the translator
7408: first applies the rules specified for the element's type that must be applied
7409: before translation of the element's content (rules ending with the
7410: <tt>Before</tt> keyword or which have no position keyword). If several rules
7411: meet these criteria, the translator applies them in the order in where they
7412: appear in the translation schema.</p>
7413:
7414: <p>It then applies all <a href="#sectc5223">rules for the attributes</a>
7415: which the element has and which must be applied before the translation of the
7416: element's content (rules ending with the <tt>Before</tt> keyword or which
7417: have no position keyword). For one attribute value, the translator applies
7418: the rules in the order in which they are defined in the translation
7419: schema.</p>
1.30 cvs 7420:
7421: <p>The same procedure is followed with translation rules for specific
1.18 cvs 7422: presentations.</p>
1.30 cvs 7423:
1.31 cvs 7424: <p>Next, the element's content is translated, as long as a <tt>Remove</tt> or
7425: <code>Ignore</code> rule does not apply.</p>
1.30 cvs 7426:
7427: <p>In the next step, the translator applies rules for the specific
7428: presentation of the element that are to be applied after translation of the
1.37 cvs 7429: content (rules which end with the <tt>After</tt> keyword). The rules for each
1.30 cvs 7430: type of presentation rule or each value are applied in the order in which the
1.18 cvs 7431: translation appear in the schema.</p>
1.30 cvs 7432:
7433: <p>Then, the same procedure is followed for translation rules for attributes
7434: of the element.</p>
7435:
1.37 cvs 7436: <p>Finally, the translator applies rules for the element which must be
7437: applied after translation of the element's content. These rules are applied
7438: in the order that they appear in the translation schema. When the translation
7439: of an element is done, the translator procedes to translate the following
1.18 cvs 7440: element.</p>
1.30 cvs 7441:
7442: <p>This order can be changed with the <tt>Attributes</tt> and
1.18 cvs 7443: <tt>Presentation</tt> options of the <a href="#sectc5210"><tt>Create</tt>
7444: rule</a>.</p>
7445: </div>
1.1 cvs 7446:
1.18 cvs 7447: <div class="subsection">
1.37 cvs 7448: <h3><a name="sectc5223" id="sectc5223">Translation of logical
7449: attributes</a></h3>
1.1 cvs 7450:
1.37 cvs 7451: <p>After the rules for the element types, the translation schema defines
7452: rules for attribute values. This section begins with the <tt>ATTRIBUTES</tt>
1.1 cvs 7453: keyword and is composed of a sequence of rule blocks each preceded by an
1.18 cvs 7454: attribute name and an optional value or value range.</p>
1.30 cvs 7455:
7456: <p>If the attribute's name appears alone before the rule block, the rule are
1.1 cvs 7457: applied to all element which have the attribute, no matter what value the
1.37 cvs 7458: attribute has. In this case, the attribute name is followed by a colon before
1.18 cvs 7459: the beginning of the rule block.</p>
1.30 cvs 7460:
1.37 cvs 7461: <p>The attribute's name can be followed by the name of an element type
7462: between parentheses. This says, as in presentation schemas, that the rule
7463: block which follows applies not to the element which has the attribute, but
7464: to its descendants of the type indicated between the parentheses.</p>
1.30 cvs 7465:
7466: <p>If values are given after the attribute name (or after the name of the
1.37 cvs 7467: element type), the rules are applied only when the attribute has the
7468: indicated values. The same attribute can appear several times, with different
7469: values and different translation rules. Attribute values are indicated in the
7470: same way as in <a href="#sectc528">conditions</a> and are followed by a colon
7471: before the block of rules.</p>
1.30 cvs 7472:
7473: <p>The rule block associated with an attribute is either a simple rule or a
1.18 cvs 7474: sequence of rules delimited by the <tt>BEGIN</tt> and <tt>END</tt> keywords.
7475: Note that rules associated with attribute values cannot be conditional.</p>
1.30 cvs 7476:
7477: <p>Translation rules are not required for all attributes (or their values)
1.37 cvs 7478: defined in a structure schema. Only those attributes for which a particular
7479: action must be performed by the translator must have such rules. The rules
1.18 cvs 7480: that can be used are those described above, from <a
7481: href="#sectc5210"><tt>Create</tt></a> to <a
7482: href="#sectc5218"><tt>NoTranslation</tt></a>.</p>
1.30 cvs 7483: <pre> AttrSeq = TransAttr < TransAttr > .
1.1 cvs 7484: TransAttr = AttrID [ '(' ElemID ')' ]
7485: [ RelatAttr ] ':' RuleSeq .
7486: AttrID = NAME .
1.18 cvs 7487: ElemID = NAME .</pre>
1.30 cvs 7488:
1.18 cvs 7489: <blockquote class="example">
1.30 cvs 7490: <p><strong>Example:</strong></p>
7491:
7492: <p>The structure defined the ``Language'' attribute which can take the
1.37 cvs 7493: values ``French'' and ``English''. To have the French parts of the original
1.30 cvs 7494: document removed and prevent the translation of the leaves of the English
7495: parts, the following rules would be used:</p>
7496: <pre>ATTRIBUTES
1.1 cvs 7497: Language=French :
7498: Remove;
7499: Language=English :
1.18 cvs 7500: NoTranslation;</pre>
7501: </blockquote>
7502: </div>
1.1 cvs 7503:
1.18 cvs 7504: <div class="subsection">
1.37 cvs 7505: <h3><a name="sectc5224" id="sectc5224">Translation of specific
7506: presentations</a></h3>
1.1 cvs 7507:
1.30 cvs 7508: <p>After the rules for attributes, the translation schema defines rules for
1.37 cvs 7509: the specific presentation. This section begins with the <tt>PRESENTATION</tt>
7510: keyword and is composed of a sequence of translation rule blocks each
7511: preceded by a presentation rule name, optionally accompanied by a part which
7512: depends on the particular presentation rule.</p>
1.30 cvs 7513:
7514: <p>Each of these translation rule blocks is applied when the translator
7515: operates on an element which has a specific presentation rule of the type
1.37 cvs 7516: indicated at the head of the block. Depending on the type of the specific
1.30 cvs 7517: presentation rule, it is possible to specify values of the presentation rule
7518: for which the translation rule block should be applied.</p>
7519:
7520: <p>There are three categories of the presentation rules:</p>
7521: <ul>
7522: <li>rules taking numeric values: <tt>Size</tt>, <tt>Indent</tt>,
7523: <tt>LineSpacing</tt>, <tt>LineWeight</tt>,</li>
7524: <li>rules whose values are taken from a predefined list (i.e. whose type is
1.43 quint 7525: an enumeration): <tt>Adjust</tt>, <tt>Hyphenate,Direction, UnicodeBidi,
1.40 quint 7526: <tt>Style</tt>, <tt>Weight</tt>, <tt>Font</tt>, <tt>UnderLine</tt>,
7527: <tt>Thickness</tt>, <tt>LineStyle</tt>,</tt></li>
1.30 cvs 7528: <li>rules whose value is a name: <tt>FillPattern</tt>, <tt>Background</tt>,
7529: <tt>Foreground</tt>.</li>
1.18 cvs 7530: </ul>
1.30 cvs 7531:
7532: <p>For presentation rules of the first category, the values which provoke
1.1 cvs 7533: application of the translation rules are indicated in the same manner as for
1.37 cvs 7534: <a href="#relattr">numeric attributes</a>. This can be either a unique value
7535: or range of values. For a unique value, the value (an integer) is simply
7536: preceded by an equals sign. Value ranges can be specified in one of three
1.18 cvs 7537: ways:</p>
7538: <ul>
1.30 cvs 7539: <li>all values less than a given value (this value is preceded by a ``less
7540: than'' sign '<tt><</tt>'),</li>
7541: <li>all values greater than a given value (this value is preceded by a`
7542: `greater than'' sign '<tt>></tt>'),</li>
1.37 cvs 7543: <li>all values falling in an interval, bounds included. The range of values
1.30 cvs 7544: is then specified <tt>IN [</tt>Minimum<tt>..</tt>Maximum<tt>]</tt>, where
7545: Minimum and Maximum are integers.</li>
1.18 cvs 7546: </ul>
1.30 cvs 7547:
7548: <p>All numeric values can be negative, in which case the integer is preceded
1.37 cvs 7549: by a minus sign. All values must be given in typographers points.</p>
1.30 cvs 7550:
7551: <p>For presentation rules whose values are taken from a predefined list, the
1.1 cvs 7552: value which provokes application of the translation rules is simply indicated
1.18 cvs 7553: by the equals sign followed by the name of the value.</p>
1.30 cvs 7554:
1.37 cvs 7555: <p>For presentation rules whose values are names, the value which provokes
7556: the application of translation rules is simply indicated by the equals sign
7557: followed by the name of the value. The names of the fill patterns (the
1.18 cvs 7558: <tt>FillPattern</tt> rule) and of the colors (the <tt>Foreground</tt> and
7559: <tt>Background</tt> rules) used in Thot are the same as in the P language.</p>
1.30 cvs 7560: <pre> PresSeq = PresTrans < PresTrans > .
1.1 cvs 7561: PresTrans = PresRule ':' RuleSeq .
7562: PresRule = 'Size' [ PresRelation ] /
7563: 'Indent' [ PresRelation ] /
7564: 'LineSpacing' [ PresRelation ] /
7565: 'Adjust' [ '=' AdjustVal ] /
7566: 'Hyphenate' [ '=' BoolVal ] /
7567: 'Style' [ '=' StyleVal ] /
1.24 cvs 7568: 'Weight' [ '=' WeightVal ] /
1.1 cvs 7569: 'Font' [ '=' FontVal ] /
7570: 'UnderLine' [ '=' UnderLineVal ] /
7571: 'Thickness' [ '=' ThicknessVal ] /
7572: 'LineStyle' [ '=' LineStyleVal ] /
7573: 'LineWeight' [ PresRelation ] /
7574: 'FillPattern' [ '=' Pattern ] /
7575: 'Background' [ '=' Color ] /
7576: 'Foreground' [ '=' Color ] .
7577:
7578: PresRelation = '=' PresValue /
1.30 cvs 7579: '>' [ '-' ] PresMinimum /
1.1 cvs 7580: '<' [ '-' ] PresMaximum /
7581: 'IN' '[' [ '-' ] PresIntervalMin '..'
7582: [ '-' ] PresIntervalMax ']' .
1.35 cvs 7583: AdjustVal = 'Left' / 'Right' / 'VMiddle' / 'Justify' /
1.1 cvs 7584: 'LeftWithDots' .
7585: BoolVal = 'Yes' / 'No' .
1.24 cvs 7586: StyleVal = 'Roman' / 'Italics' / 'Oblique' .
7587: WeightVal = 'Normal' / 'Bold' .
1.1 cvs 7588: FontVal = 'Times' / 'Helvetica' / 'Courier' .
7589: UnderLineVal = 'NoUnderline' / 'UnderLined' /
7590: 'OverLined' / 'CrossedOut' .
7591: ThicknessVal = 'Thick' / 'Thin' .
1.6 cvs 7592: LineStyleVal = 'Solid' / 'Dashed' / 'Dotted' .
1.1 cvs 7593: Pattern = NAME .
7594: Color = NAME .
7595: PresMinimum = NUMBER .
7596: PresMaximum = NUMBER .
7597: PresIntervalMin= NUMBER .
7598: PresIntervalMax= NUMBER .
7599: PresValue = [ '-' ] PresVal .
1.18 cvs 7600: PresVal = NUMBER .</pre>
1.30 cvs 7601:
1.37 cvs 7602: <p>The <a name="prestransl" id="prestransl">translation rules associated with
7603: specific presentation rules</a> can use the value of the specific
7604: presentation rule that causes them to be applied. This behavior is designated
7605: by the keyword <tt>Value</tt>. For numerically-valued presentation rules, the
7606: numeric value is produced. For other presentation rules, the name of the
7607: value is produced.</p>
1.30 cvs 7608:
7609: <p>It should be noted that modifications to the layout of the document's
7610: elements that are made using the combination of the control key and a mouse
7611: button will have no effect on the translation of the document.</p>
7612:
7613: <blockquote class="example">
7614: <p><strong>Example:</strong></p>
7615:
7616: <p>Suppose that it is desirable to use the same font sizes as in the
7617: specific presentation, but the font size must be between 10 and 18
7618: typographer's points. If font size is set in the translated document by the
7619: string <tt>pointsize=n</tt> where <tt>n</tt> is the font size in
7620: typographer's points then the following rules will suffice:</p>
7621: <pre>PRESENTATION
1.1 cvs 7622: Size < 10 :
7623: Create 'pointsize=10';
7624: Size in [10..18] :
7625: BEGIN
7626: Create 'pointsize=';
7627: Create Value;
7628: END;
1.30 cvs 7629: Size > 18 :
1.18 cvs 7630: Create 'pointsize=18';</pre>
7631: </blockquote>
7632: </div>
1.1 cvs 7633:
1.18 cvs 7634: <div class="subsection">
1.37 cvs 7635: <h3><a name="sectc5225" id="sectc5225">Recoding of characters, symbols and
7636: graphics</a></h3>
1.1 cvs 7637:
1.37 cvs 7638: <p>The coding of characters, graphical elements and symbols as defined in
7639: Thot does not necessarily correspond to what is required by an application to
7640: which a Thot document must be exported. Because of this the translator can
7641: recode these terminal elements of the documents structure. The last sections
7642: of a translation schema are intended for this purpose, each specifying the
7643: recoding rules for one type of terminal element.</p>
1.30 cvs 7644:
1.43 quint 7645: <p>The recoding rules for character strings are grouped by scripts. There is
7646: a group of rules for each script of the Thot document that must be
1.30 cvs 7647: translated. Each such group of rules begins with the <tt>TEXTTRANSLATE</tt>
1.41 vatton 7648: keyword, followed by the specification of the script to translate and the
1.30 cvs 7649: recoding rules, between the <tt>BEGIN</tt> and <tt>END</tt> keywords unless
1.41 vatton 7650: there is only one recoding rule for the script. The specification of the
1.43 quint 7651: script is not required: by default it is assumed to the Latin script (the ISO
7652: Latin-1 character set).</p>
1.30 cvs 7653:
7654: <p>Each recoding rule is formed by a source string between apostrophes and a
1.1 cvs 7655: target string, also between apostrophes, the two strings being separated by
1.30 cvs 7656: the arrow symbol (<tt>-></tt>), formed by the ``minus'' and ``greater
1.37 cvs 7657: than'' characters. The rule is terminated by a semi-colon.</p>
1.41 vatton 7658: <pre> TextTransSeq = [ Script ] TransSeq .
7659: Script = NAME .
1.30 cvs 7660: TransSeq ='BEGIN' < Translation > 'END' ';' /
1.1 cvs 7661: Translation .
1.30 cvs 7662: Translation = Source [ '->' Target ] ';' .
1.1 cvs 7663: Source = STRING .
1.18 cvs 7664: Target = STRING .</pre>
1.30 cvs 7665:
7666: <p>One such rule signifies that when the source string appears in a text leaf
7667: of the document being translated, the translator must replace it, in the
1.37 cvs 7668: translated document, with the target string. The source string and the target
7669: string can have different lengths and the target string can be empty. In this
1.1 cvs 7670: last case, the translator simply suppresses every occurrence of the source
1.18 cvs 7671: string in the translated document.</p>
1.30 cvs 7672:
1.41 vatton 7673: <p>For a given script, the order of the rules is not important and has no
1.1 cvs 7674: significance because the T language compiler reorders the rules in ways that
1.37 cvs 7675: speed up the translator's work. The total number of recoding rules is limited
1.18 cvs 7676: by the compiler as is the maximum length of the source and target strings.</p>
1.30 cvs 7677:
7678: <p>The recoding rules for symbols and graphical elements are written in the
1.37 cvs 7679: same manner as the recoding rules for character strings. They are preceded,
7680: respectively, by the <tt>SYMBTRANSLATE</tt> and <tt>GRAPHTRANSLATE</tt> and
1.43 quint 7681: so not require a specification of the script. Their source string is limited
7682: to one character, since, in Thot, each symbol and each graphical element is
7683: represented by a single character. The symbol and graphical element codes are
7684: defined along with the <a href="#sect7">non-standard character codes</a>.</p>
1.30 cvs 7685:
1.18 cvs 7686: <blockquote class="example">
1.30 cvs 7687: <p><strong>Example:</strong></p>
7688:
7689: <p>In a translation schema producing documents destined for use with the
7690: L<sup>A</sup>T<sub><big>E</big></sub>X formatter, the Latin characters``é''
1.37 cvs 7691: (octal code 351 in Thot) and ``č'' (octal code 350 in Thot) must be
1.30 cvs 7692: converted to their representation in
7693: L<sup>A</sup>T<sub><big>E</big></sub>X:</p>
7694: <pre>TEXTTRANSLATE Latin
1.1 cvs 7695: BEGIN
1.30 cvs 7696: '\350' -> '\`{e}'; { e grave }
7697: '\351' -> '\''{e}'; { e acute }
1.18 cvs 7698: END;</pre>
7699: </blockquote>
7700: </div>
7701: </div>
1.37 cvs 7702: <hr />
1.18 cvs 7703: </div>
1.1 cvs 7704:
1.18 cvs 7705: <div class="chapter">
1.37 cvs 7706: <h1><a name="sect6" id="sect6">Language grammars</a></h1>
1.1 cvs 7707:
1.30 cvs 7708: <p>This chapter gives the complete grammars of the languages of Thot. The
1.1 cvs 7709: grammars were presented and described in the preceding chapters, which also
1.37 cvs 7710: specify the semantics of the languages. This section gives only the
1.18 cvs 7711: syntax.</p>
1.1 cvs 7712:
1.18 cvs 7713: <div class="section">
1.37 cvs 7714: <h2><a name="sectb61" id="sectb61">The M meta-language</a></h2>
1.1 cvs 7715:
1.30 cvs 7716: <p>The language grammars are all expressed in the same formalism, the M
1.18 cvs 7717: meta-language, which is defined in this section.</p>
7718: <pre>{ Any text between braces is a comment. }
1.30 cvs 7719: Grammar = Rule < Rule > 'END' .
7720: { The < and > signs indicate zero }
1.1 cvs 7721: { or more repetitions. }
7722: { END marks the end of the grammar. }
7723: Rule = Ident '=' RightPart '.' .
7724: { The period indicates the end of a rule }
7725: RightPart = RtTerminal / RtIntermed .
7726: { The slash indicates a choice }
7727: RtTerminal ='NAME' / 'STRING' / 'NUMBER' .
7728: { Right part of a terminal rule }
1.30 cvs 7729: RtIntermed = Possibility < '/' Possibility > .
1.1 cvs 7730: { Right part of an intermediate rule }
1.30 cvs 7731: Possibility = ElemOpt < ElemOpt > .
7732: ElemOpt = Element / '[' Element < Element > ']' /
7733: '<' Element < Element > '>' .
1.1 cvs 7734: { Brackets delimit optional parts }
7735: Element = Ident / KeyWord .
7736: Ident = NAME .
7737: { Identifier, sequence of characters
7738: KeyWord = STRING .
7739: { Character string delimited by apostrophes }
1.18 cvs 7740: END</pre>
7741: </div>
1.1 cvs 7742:
1.18 cvs 7743: <div class="section">
1.37 cvs 7744: <h2><a name="sectb62" id="sectb62">The S language</a></h2>
1.1 cvs 7745:
1.30 cvs 7746: <p>The S language is used to write structure schemas, which contain the
1.37 cvs 7747: generic logical structures of document and object classes. It is described
1.30 cvs 7748: here in the M meta-language.</p>
1.18 cvs 7749: <pre>StructSchema = 'STRUCTURE' [ 'EXTENSION' ] ElemID ';'
1.1 cvs 7750: 'DEFPRES' PresID ';'
7751: [ 'ATTR' AttrSeq ]
7752: [ 'STRUCT' RulesSeq ]
7753: [ 'EXTENS' ExtensRuleSeq ]
7754: [ 'UNITS' RulesSeq ]
7755: [ 'EXPORT' SkeletonSeq ]
7756: [ 'EXCEPT' ExceptSeq ]
7757: 'END' .
7758:
7759: ElemID = NAME .
7760: PresID = NAME .
7761:
1.30 cvs 7762: AttrSeq = Attribute < Attribute > .
1.1 cvs 7763: Attribute = AttrID '=' AttrType ';' .
7764: AttrType = 'INTEGER' / 'TEXT' /
7765: 'REFERENCE' '(' RefType ')' /
7766: ValueSeq .
7767: RefType = 'ANY' /
7768: [ FirstSec ] ElemID [ ExtStruct ] .
1.30 cvs 7769: ValueSeq = AttrVal < ',' AttrVal > .
1.1 cvs 7770: AttrID = NAME .
7771: FirstSec = 'First' / 'Second' .
7772: ExtStruct = '(' ElemID ')' .
7773: AttrVal = NAME .
7774:
1.30 cvs 7775: RulesSeq = Rule < Rule > .
1.1 cvs 7776: Rule = ElemID [ LocAttrSeq ] '='
7777: DefWithAttr ';' .
7778: LocAttrSeq = '(' 'ATTR' LocalAttr
1.30 cvs 7779: < ';' LocalAttr > ')' .
1.1 cvs 7780: LocalAttr = [ '!' ] AttrID [ '=' AttrType ] .
7781: DefWithAttr = Definition
7782: [ '+' '(' ExtensionSeq ')' ]
7783: [ '-' '(' RestrictSeq ')' ]
7784: [ 'WITH' FixedAttrSeq ] .
1.30 cvs 7785: ExtensionSeq = ExtensionElem < ',' ExtensionElem > .
1.1 cvs 7786: ExtensionElem = ElemID / 'TEXT' / 'GRAPHICS' /
7787: 'SYMBOL' / 'PICTURE' .
1.30 cvs 7788: RestrictSeq = RestrictElem < ',' RestrictElem > .
1.1 cvs 7789: RestrictElem = ElemID / 'TEXT' / 'GRAPHICS' /
7790: 'SYMBOL' / 'PICTURE' .
1.30 cvs 7791: FixedAttrSeq = FixedAttr < ',' FixedAttr > .
1.1 cvs 7792: FixedAttr = AttrID [ FixedOrModifVal ] .
7793: FixedOrModifVal= [ '?' ] '=' FixedValue .
7794: FixedValue = [ '-' ] NumValue / TextValue / AttrVal .
7795: NumValue = NUMBER .
7796: TextValue = STRING .
7797:
7798: Definition = BaseType [ LocAttrSeq ] / Constr /
7799: Element .
7800: BaseType = 'TEXT' / 'GRAPHICS' / 'SYMBOL' /
7801: 'PICTURE' / 'UNIT' / 'NATURE' .
7802: Element = ElemID [ ExtOrDef ] .
7803: ExtOrDef = 'EXTERN' / 'INCLUDED' /
7804: [ LocAttrSeq ] '=' Definition .
7805:
7806: Constr = 'LIST' [ '[' min '..' max ']' ] 'OF'
7807: '(' DefWithAttr ')' /
7808: 'BEGIN' DefOptSeq 'END' /
7809: 'AGGREGATE' DefOptSeq 'END' /
7810: 'CASE' 'OF' DefSeq 'END' /
7811: 'REFERENCE' '(' RefType ')' /
7812: 'PAIR' .
7813:
7814: min = Integer / '*' .
7815: max = Integer / '*' .
7816: Integer = NUMBER .
7817:
1.30 cvs 7818: DefOptSeq = DefOpt ';' < DefOpt ';' > .
1.1 cvs 7819: DefOpt = [ '?' ] DefWithAttr .
7820:
1.30 cvs 7821: DefSeq = DefWithAttr ';' < DefWithAttr ';' > .
1.1 cvs 7822:
1.30 cvs 7823: SkeletonSeq = SkeletonElem < ',' SkeletonElem > ';' .
1.1 cvs 7824: SkeletonElem = ElemID [ 'WITH' Contents ] .
7825: Contents = 'Nothing' / ElemID [ ExtStruct ] .
7826:
1.30 cvs 7827: ExceptSeq = Except ';' < Except ';' > .
1.1 cvs 7828: Except = [ 'EXTERN' ] [ FirstSec ] ExcTypeOrAttr ':'
7829: ExcValSeq .
7830: ExcTypeOrAttr = ElemID / AttrID .
1.30 cvs 7831: ExcValSeq = ExcValue < ',' ExcValue > .
1.1 cvs 7832: ExcValue = 'NoCut' / 'NoCreate' /
7833: 'NoHMove' / 'NoVMove' / 'NoMove' /
7834: 'NoHResize' / 'NoVResize' / 'NoResize' /
1.18 cvs 7835: 'MoveResize' /
1.1 cvs 7836: 'NewWidth' / 'NewHeight' /
7837: 'NewHPos' / 'NewVPos' /
7838: 'Invisible' / 'NoSelect' /
7839: 'Hidden' / 'ActiveRef' /
7840: 'ImportLine' / 'ImportParagraph' /
1.9 cvs 7841: 'NoPaginate' / 'ParagraphBreak' /
7842: 'HighlightChildren' / 'ExtendedSelection' /
1.36 cvs 7843: 'SelectParent' / 'ClickableSurface' /
1.29 cvs 7844: 'ReturnCreateNL' / 'ReturnCreateWithin' .
1.1 cvs 7845:
1.30 cvs 7846: ExtensRuleSeq = ExtensRule ';' < ExtensRule ';' > .
1.1 cvs 7847: ExtensRule = RootOrElem [ LocAttrSeq ]
7848: [ '+' '(' ExtensionSeq ')' ]
7849: [ '-' '(' RestrictSeq ')' ]
7850: [ 'WITH' FixedAttrSeq ] .
7851: RootOrElem = 'Root' / ElemID .
7852:
1.18 cvs 7853: END</pre>
7854: </div>
1.1 cvs 7855:
1.18 cvs 7856: <div class="section">
1.37 cvs 7857: <h2><a name="sectb63" id="sectb63">The P language</a></h2>
1.1 cvs 7858:
1.30 cvs 7859: <p>The P language is used to write presentation schemas, which define the
1.1 cvs 7860: graphical presentation rules to be applied to different classes of documents
1.37 cvs 7861: and objects. It is described here in the M meta-language.</p>
1.18 cvs 7862: <pre>PresSchema = 'PRESENTATION' ElemID ';'
1.1 cvs 7863: [ 'VIEWS' ViewSeq ]
7864: [ 'PRINT' PrintViewSeq ]
7865: [ 'COUNTERS' CounterSeq ]
7866: [ 'CONST' ConstSeq ]
7867: [ 'VAR' VarSeq ]
7868: [ 'DEFAULT' ViewRuleSeq ]
7869: [ 'BOXES' BoxSeq ]
7870: [ 'RULES' PresentSeq ]
7871: [ 'ATTRIBUTES' PresAttrSeq ]
7872: [ 'TRANSMIT' TransmitSeq ]
7873: 'END' .
7874:
7875: ElemID = NAME .
7876:
7877: ViewSeq = ViewDeclaration
1.30 cvs 7878: < ',' ViewDeclaration > ';' .
1.1 cvs 7879: ViewDeclaration = ViewID [ 'EXPORT' ] .
7880: ViewID = NAME .
7881:
1.30 cvs 7882: PrintViewSeq = PrintView < ',' PrintView > ';' .
1.37 cvs 7883: PrintView = ViewID .
1.1 cvs 7884:
1.30 cvs 7885: CounterSeq = Counter < Counter > .
1.1 cvs 7886: Counter = CounterID ':' CounterFunc ';' .
7887: CounterID = NAME .
7888: CounterFunc = 'RANK' 'OF' TypeOrPage [ SLevelAsc ]
7889: [ 'INIT' AttrID ] [ 'REINIT' AttrID ] /
1.30 cvs 7890: SetFunction < SetFunction >
7891: AddFunction < AddFunction >
1.1 cvs 7892: [ 'INIT' AttrID ] /
1.16 cvs 7893: 'RLEVEL' 'OF' ElemID .
1.1 cvs 7894: SLevelAsc = [ '-' ] LevelAsc .
7895: LevelAsc = NUMBER .
7896: SetFunction = 'SET' CounterValue 'ON' TypeOrPage .
7897: AddFunction = 'ADD' CounterValue 'ON' TypeOrPage .
7898: TypeOrPage = 'Page' [ '(' ViewID ')' ] /
1.16 cvs 7899: [ '*' ] ElemID .
1.1 cvs 7900: CounterValue = NUMBER .
7901:
1.30 cvs 7902: ConstSeq = Const < Const > .
1.1 cvs 7903: Const = ConstID '=' ConstType ConstValue ';' .
7904: ConstID = NAME .
1.41 vatton 7905: ConstType = 'Text' [ Script ] / 'Symbol' /
1.1 cvs 7906: 'Graphics' / 'Picture' .
7907: ConstValue = STRING .
1.41 vatton 7908: Script = NAME .
1.1 cvs 7909:
1.30 cvs 7910: VarSeq = Variable < Variable > .
1.1 cvs 7911: Variable = VarID ':' FunctionSeq ';' .
7912: VarID = NAME .
1.30 cvs 7913: FunctionSeq = Function < Function > .
1.1 cvs 7914: Function = 'DATE' / 'FDATE' /
7915: 'DocName' / 'DirName' /
1.38 cvs 7916: 'ElemName' / 'AttributeName' / 'AttributeValue' /
1.1 cvs 7917: ConstID / ConstType ConstValue /
7918: AttrID /
7919: 'VALUE' '(' PageAttrCtr ','
7920: CounterStyle ')' .
7921: PageAttrCtr = 'PageNumber' [ '(' ViewID ')' ] /
7922: [ MinMax ] CounterID / AttrID .
7923: CounterStyle = 'Arabic' / 'LRoman' / 'URoman' /
7924: 'Uppercase' / 'Lowercase' .
7925: MinMax = 'MaxRangeVal' / 'MinRangeVal' .
7926:
1.30 cvs 7927: BoxSeq = Box < Box > .
1.1 cvs 7928: Box = 'FORWARD' BoxID ';' /
7929: BoxID ':' ViewRuleSeq .
7930: BoxID = NAME .
7931:
1.30 cvs 7932: PresentSeq = Present < Present > .
1.1 cvs 7933: Present = [ '*' ] [ FirstSec ] ElemID ':'
7934: ViewRuleSeq .
7935: FirstSec = 'First' / 'Second' .
7936:
1.30 cvs 7937: PresAttrSeq = PresAttr < PresAttr > .
1.1 cvs 7938: PresAttr = AttrID [ '(' [ FirstSec ] ElemID ')' ]
7939: [ AttrRelation ] ':' ViewRuleSeq .
7940: AttrID = NAME .
7941: AttrRelation = '=' AttrVal /
1.30 cvs 7942: '>' [ '-' ] MinValue /
1.1 cvs 7943: '<' [ '-' ] MaxValue /
7944: 'IN' '[' [ '-' ] LowerBound '..'
7945: [ '-' ] UpperBound ']' /
7946: 'GREATER' AttrID /
7947: 'EQUAL' AttrID /
7948: 'LESS' AttrID .
7949: AttrVal = [ '-' ] EqualNum / EqualText / AttrValue .
7950: MinValue = NUMBER .
7951: MaxValue = NUMBER .
7952: LowerBound = NUMBER .
7953: UpperBound = NUMBER.
7954: EqualNum = NUMBER .
7955: EqualText = STRING .
7956: AttrValue = NAME .
7957:
1.30 cvs 7958: ViewRuleSeq = 'BEGIN' < RulesAndCond > < ViewRules >
1.1 cvs 7959: 'END' ';' /
7960: ViewRules / CondRules / Rule .
7961: RulesAndCond = CondRules / Rule .
7962: ViewRules = 'IN' ViewID CondRuleSeq .
1.30 cvs 7963: CondRuleSeq = 'BEGIN' < RulesAndCond > 'END' ';' /
1.1 cvs 7964: CondRules / Rule .
1.30 cvs 7965: CondRules = CondRule < CondRule >
1.1 cvs 7966: [ 'Otherwise' RuleSeq ] .
7967: CondRule = 'IF' ConditionSeq RuleSeq .
1.30 cvs 7968: RulesSeq = 'BEGIN' Rule < Rule > 'END' ';' / Rule .
1.1 cvs 7969:
1.30 cvs 7970: ConditionSeq = Condition < 'AND' Condition > .
1.6 cvs 7971: Condition = [ 'NOT' ] [ 'Target' ] ConditionElem .
7972: ConditionElem = 'First' / 'Last' /
7973: [ 'Immediately' ] 'Within' [ NumParent ]
7974: ElemID [ ExtStruct ] /
7975: ElemID /
7976: 'Referred' / 'FirstRef' / 'LastRef' /
7977: 'ExternalRef' / 'InternalRef' / 'CopyRef' /
1.44 quint 7978: [ 'Inherited' ] AttrID [ '=' Value ] /
1.6 cvs 7979: 'AnyAttributes' / 'FirstAttr' / 'LastAttr' /
7980: 'UserPage' / 'StartPage' / 'ComputedPage' /
1.33 cvs 7981: 'Empty' / 'Root' /
1.6 cvs 7982: '(' [ MinMax ] CounterName CounterCond ')' /
7983: CondPage '(' CounterID ')' .
7984: NumParent = [ GreaterLess ] NParent .
1.30 cvs 7985: GreaterLess = '>' / '<' .
1.6 cvs 7986: NParent = NUMBER.
1.30 cvs 7987: CounterCond = '<' MaxCtrVal / '>' MinCtrVal /
1.6 cvs 7988: '=' EqCtrVal /
7989: 'IN' '[' ['-'] MinCtrBound '..'
7990: ['-'] MaxCtrBound ']' .
7991: PageCond = 'Even' / 'Odd' / 'One' .
7992: MaxCtrVal = NUMBER .
7993: MinCtrVal = NUMBER .
7994: EqCtrVal = NUMBER .
7995: MaxCtrBound = NUMBER .
7996: MinCtrBound = NUMBER .
1.1 cvs 7997:
1.34 cvs 7998: Rule = Property ';' / PresFunc ';' .
7999: Property = 'VertRef' ':' HorizPosition /
1.1 cvs 8000: 'HorizRef' ':' VertPosition /
8001: 'VertPos' ':' VPos /
8002: 'HorizPos' ':' HPos /
8003: 'Height' ':' Extent /
8004: 'Width' ':' Extent /
8005: 'VertOverflow' ':' Boolean /
8006: 'HorizOverflow' ':' Boolean /
1.26 cvs 8007: 'MarginTop' ':' MarginWidth /
8008: 'MarginRight' ':' MarginWidth /
8009: 'MarginBottom' ':' MarginWidth /
8010: 'MarginLeft' ':' MarginWidth /
8011: 'PaddingTop' ':' PaddingWidth /
8012: 'PaddingRight' ':' PaddingWidth /
8013: 'PaddingBottom' ':' PaddingWidth /
8014: 'PaddingLeft' ':' PaddingWidth /
8015: 'BorderTopWidth' ':' BorderWidth /
8016: 'BorderRightWidth' ':' BorderWidth /
8017: 'BorderBottomWidth' ':' BorderWidth /
8018: 'BorderLeftWidth' ':' BorderWidth /
8019: 'BorderTopColor' ':' BorderColor /
8020: 'BorderRightColor' ':' BorderColor /
8021: 'BorderBottomColor' ':' BorderColor /
8022: 'BorderLeftColor' ':' BorderColor /
8023: 'BorderTopStyle' ':' BorderStyle /
8024: 'BorderRightStyle' ':' BorderStyle /
8025: 'BorderBottomStyle' ':' BorderStyle /
8026: 'BorderLeftStyle' ':' BorderStyle .
1.1 cvs 8027: 'LineSpacing' ':' DistOrInherit /
8028: 'Indent' ':' DistOrInherit /
8029: 'Adjust' ':' AlignOrInherit /
8030: 'Hyphenate' ':' BoolInherit /
1.40 quint 8031: 'Direction' ':' DirInherit /
1.43 quint 8032: 'UnicodeBidi' ':' BidiInherit /
1.1 cvs 8033: 'PageBreak' ':' Boolean /
8034: 'LineBreak' ':' Boolean /
8035: 'InLine' ':' Boolean /
8036: 'NoBreak1' ':' AbsDist /
8037: 'NoBreak2' ':' AbsDist /
8038: 'Gather' ':' Boolean /
8039: 'Visibility' ':' NumberInherit /
8040: 'Size' ':' SizeInherit /
8041: 'Font' ':' NameInherit /
8042: 'Style' ':' StyleInherit /
1.23 cvs 8043: 'Weight' ':' WeightInherit /
1.1 cvs 8044: 'Underline' ':' UnderLineInherit /
8045: 'Thickness' ':' ThicknessInherit /
8046: 'Depth' ':' NumberInherit /
8047: 'LineStyle' ':' LineStyleInherit /
8048: 'LineWeight' ':' DistOrInherit /
8049: 'FillPattern' ':' NameInherit /
1.30 cvs 8050: 'Background' ':' Color /
8051: 'Foreground' ':' Color /
1.1 cvs 8052: 'Content' ':' VarConst .
8053: PresFunc = Creation '(' BoxID ')' /
8054: 'Line' /
8055: 'NoLine' /
8056: 'Page' '(' BoxID ')' /
1.13 cvs 8057: 'Copy' '(' BoxTypeToCopy ')' /
8058: 'ShowBox' /
1.18 cvs 8059: 'BackgroundPicture' ':' FileName /
8060: 'PictureMode' ':' PictMode .
1.1 cvs 8061:
8062: BoxTypeToCopy = BoxID [ ExtStruct ] /
8063: ElemID [ ExtStruct ] .
8064: ExtStruct = '(' ElemID ')' .
8065:
8066: Distance = [ Sign ] AbsDist .
8067: Sign = '+' / '-' .
8068: AbsDist = IntegerOrAttr [ '.' DecimalPart ]
8069: [ Unit ] .
8070: IntegerOrAttr = IntegerPart / AttrID .
8071: IntegerPart = NUMBER .
8072: DecimalPart = NUMBER .
8073: Unit = 'em' / 'ex' / 'cm' / 'mm' / 'in' / 'pt' /
8074: 'pc' / 'px' / '%' .
8075:
8076: HPos = 'nil' / VertAxis '=' HorizPosition
8077: [ 'UserSpecified' ] .
8078: VPos = 'nil' / HorizAxis '=' VertPosition
8079: [ 'UserSpecified' ] .
8080: VertAxis = 'Left' / 'VMiddle' / 'VRef' / 'Right' .
8081: HorizAxis = 'Top' / 'HMiddle' / 'HRef' / 'Bottom' .
8082:
1.6 cvs 8083: VertPosition = Reference '.' HorizAxis [ Distance ] .
8084: HorizPosition = Reference '.' VertAxis [ Distance ] .
8085: Reference = 'Enclosing' [ BoxTypeNot ] /
8086: 'Enclosed' [ BoxTypeNot ] /
8087: 'Previous' [ BoxTypeNot ] /
8088: 'Next' [ BoxTypeNot ] /
8089: 'Referred' [ BoxTypeNot ] /
8090: 'Creator' /
8091: 'Root' /
8092: '*' /
8093: BoxOrType .
8094: BoxOrType = BoxID /
8095: [ '*' ] [ FirstSec ] ElemID /
1.17 cvs 8096: 'AnyElem' / 'AnyBox' /
8097: 'ElemWithAttr' AttrID .
1.6 cvs 8098: BoxTypeNot = [ 'NOT' ] BoxOrType .
8099:
8100: Extent = Reference '.' HeightWidth
8101: [ Relation ] [ 'Min' ] /
8102: AbsDist [ 'UserSpecified' ] [ 'Min' ] /
8103: HPos / VPos .
8104: HeightWidth = 'Height' / 'Width' .
8105: Relation = '*' ExtentAttr '%' / Distance .
8106: ExtentAttr = ExtentVal / AttrID .
8107: ExtentVal = NUMBER .
1.26 cvs 8108:
8109: MarginWidth = InheritParent / 'Auto' / Distance .
8110: PaddingWidth = InheritParent / Distance .
8111: BorderWidth = InheritParent / 'Thin' / 'Medium' / 'Thick' / Distance .
8112: BorderColor = InheritParent / 'Transparent' / 'Foreground' /
8113: ColorName .
8114: BorderStyle = InheritParent /
8115: 'None' / 'Hidden' / 'Dotted' / 'Dashed' / 'Solid' /
8116: 'Double' / 'Groove' / 'Ridge' / 'Inset' / 'Outset' .
1.27 cvs 8117: InheritParent = 'Enclosing' '=' / 'Creator' '=' .
1.26 cvs 8118: ColorName = NAME .
1.6 cvs 8119:
8120: Inheritance = Kinship InheritedValue .
8121: Kinship = 'Enclosing' / 'GrandFather'/ 'Enclosed' /
8122: 'Previous' / 'Creator' .
8123: InheritedValue = '+' PosIntAttr [ 'Max' maximumA ] /
8124: '-' NegIntAttr [ 'Min' minimumA ] /
8125: '=' .
8126: PosIntAttr = PosInt / AttrID .
8127: PosInt = NUMBER .
8128: NegIntAttr = NegInt / AttrID .
8129: NegInt = NUMBER .
8130: maximumA = maximum / AttrID .
8131: maximum = NUMBER .
8132: minimumA = minimum / AttrID .
8133: minimum = NUMBER .
8134:
8135: AlignOrInherit = Kinship '=' / Alignment .
8136: Alignment = 'Left' / 'Right' / 'VMiddle' /
8137: 'LeftWithDots' .
1.1 cvs 8138:
1.40 quint 8139: DirInherit = 'ltr' / 'rtl' / Kinship '=' .
1.43 quint 8140: BidiInherit = 'Normal' / 'Embed' / 'Override' / Kinship '=' .
1.40 quint 8141:
1.6 cvs 8142: DistOrInherit = Kinship InheritedDist / Distance .
8143: InheritedDist = '=' / '+' AbsDist / '-' AbsDist .
1.1 cvs 8144:
1.6 cvs 8145: BoolInherit = Boolean / Kinship '=' .
8146: Boolean = 'Yes' / 'No' .
1.1 cvs 8147:
1.6 cvs 8148: NumberInherit = Integer / AttrID / Inheritance .
8149: Integer = NUMBER .
1.1 cvs 8150:
8151: LineStyleInherit= Kinship '=' / 'Solid' / 'Dashed' /
8152: 'Dotted' .
8153:
1.6 cvs 8154: SizeInherit = SizeAttr [ 'pt' ] / Kinship InheritedSize .
8155: InheritedSize = '+' SizeAttr [ 'pt' ]
8156: [ 'Max' MaxSizeAttr ] /
8157: '-' SizeAttr [ 'pt' ]
8158: [ 'Min' MinSizeAttr ] /
1.22 cvs 8159: '*' PercentSizeAttr '%' /
1.6 cvs 8160: '=' .
8161: SizeAttr = Size / AttrID .
8162: Size = NUMBER .
8163: MaxSizeAttr = MaxSize / AttrID .
8164: MaxSize = NUMBER .
8165: MinSizeAttr = MinSize / AttrID .
8166: MinSize = NUMBER .
1.22 cvs 8167: PercentSizeAttr = PercentSize / AttrID .
8168: PercentSize = NUMBER .
1.6 cvs 8169:
8170: NameInherit = Kinship '=' / FontName .
8171: FontName = NAME .
1.30 cvs 8172: Color = 'Transparent' / Kinship '=' / FontName .
1.6 cvs 8173: StyleInherit = Kinship '=' /
1.23 cvs 8174: 'Roman' / 'Italics' / 'Oblique' .
8175: WeightInherit = Kinship '=' /
8176: 'Normal' / 'Bold' .
1.1 cvs 8177: UnderLineInherit= Kinship '=' /
1.6 cvs 8178: 'NoUnderline' / 'Underlined' /
8179: 'Overlined' / 'CrossedOut' .
1.1 cvs 8180: ThicknessInherit= Kinship '=' / 'Thick' / 'Thin' .
1.13 cvs 8181:
8182: FileName = STRING .
8183: PictMode = 'NormalSize' / 'Scale' /
8184: 'RepeatXY' / 'RepeatX' / 'RepeatY' .
1.1 cvs 8185:
1.6 cvs 8186: VarConst = ConstID / ConstType ConstValue /
8187: VarID / '(' FunctionSeq ')' /
8188: ElemID .
8189:
8190: Creation = Create [ 'Repeated' ] .
8191: Create = 'CreateFirst' / 'CreateLast' /
8192: 'CreateBefore' / 'CreateAfter' /
8193: 'CreateEnclosing' .
8194:
1.30 cvs 8195: TransmitSeq = Transmit < Transmit > .
1.6 cvs 8196: Transmit = TypeOrCounter 'To' ExternAttr
8197: '(' ElemID ')' ';' .
8198: TypeOrCounter = CounterID / ElemID .
8199: ExternAttr = NAME .
1.1 cvs 8200:
1.18 cvs 8201: END</pre>
8202: </div>
1.1 cvs 8203:
1.18 cvs 8204: <div class="section">
1.37 cvs 8205: <h2><a name="sectb64" id="sectb64">The T language</a></h2>
1.18 cvs 8206: <pre>TransSchema = 'TRANSLATION' ElemID ';'
1.1 cvs 8207: [ 'LINELENGTH' LineLength ';' ]
8208: [ 'LINEEND' CHARACTER ';' ]
8209: [ 'LINEENDINSERT' STRING ';' ]
8210: [ 'BUFFERS' BufferSeq ]
8211: [ 'COUNTERS' CounterSeq ]
8212: [ 'CONST' ConstSeq ]
8213: [ 'VAR' VariableSeq ]
8214: 'RULES' ElemSeq
8215: [ 'ATTRIBUTES' AttrSeq ]
8216: [ 'PRESENTATION' PresSeq ]
1.30 cvs 8217: < 'TEXTTRANSLATE' TextTransSeq >
1.1 cvs 8218: [ 'SYMBTRANSLATE' TransSeq ]
8219: [ 'GRAPHTRANSLATE' TransSeq ]
8220: 'END' .
8221:
8222: LineLength = NUMBER .
8223:
1.30 cvs 8224: BufferSeq = Buffer < Buffer > .
1.1 cvs 8225: Buffer = BufferID [ '(' 'Picture' ')' ] ';' .
8226: BufferID = NAME .
8227:
1.30 cvs 8228: CounterSeq = Counter < Counter > .
1.1 cvs 8229: Counter = CounterID [ ':' CounterFunc ] ';' .
8230: CounterID = NAME .
8231: CounterFunc = 'Rank' 'of' ElemID [ SLevelAsc ]
8232: [ 'Init' AttrID ] /
8233: 'Rlevel' 'of' ElemID /
8234: 'Set' InitValue 'On' ElemID
8235: 'Add' Increment 'On' ElemID
8236: [ 'Init' AttrID ] .
8237: SLevelAsc = [ '-' ] LevelAsc .
8238: LevelAsc = NUMBER .
8239: InitValue = NUMBER .
8240: Increment = NUMBER .
8241: ElemID = NAME .
8242: AttrID = NAME .
8243:
1.30 cvs 8244: ConstSeq = Const < Const > .
1.1 cvs 8245: Const = ConstID '=' ConstValue ';' .
8246: ConstID = NAME .
8247: ConstValue = STRING .
8248:
1.30 cvs 8249: VariableSeq = Variable < Variable > .
8250: Variable = VarID ':' Function < Function > ';' .
1.1 cvs 8251: VarID = NAME .
8252: Function = 'Value' '(' CounterID [ ':' Length ]
8253: [ ',' CounterStyle ] ')' /
8254: 'FileDir' / 'FileName' / 'Extension' /
8255: 'DocumentName' / 'DocumentDir' /
8256: ConstID / CharString /
8257: BufferID / AttrID .
8258: Length = NUMBER .
8259: CounterStyle= 'Arabic' / 'LRoman' / 'URoman' /
8260: 'Uppercase' / 'Lowercase' .
8261: CharString = STRING .
8262:
1.30 cvs 8263: ElemSeq = TransType < TransType > .
1.1 cvs 8264: TransType = [ FirstSec ] ElemID ':' RuleSeq .
8265: FirstSec = 'First' / 'Second' .
1.30 cvs 8266: RuleSeq = Rule / 'BEGIN' < Rule > 'END' ';' .
1.1 cvs 8267: Rule = SimpleRule / ConditionBlock .
8268: ConditionBlock= 'IF' ConditionSeq SimpleRuleSeq .
1.30 cvs 8269: SimpleRuleSeq = 'BEGIN' < SimpleRule > 'END' ';' /
1.1 cvs 8270: SimpleRule .
8271:
8272: ConditionSeq = Condition [ 'AND' Condition ] .
8273: Condition = [ 'NOT' ] [ 'Target' ] Cond .
8274: Cond = CondElem / CondAscend .
8275: CondElem = 'FirstRef' / 'LastRef' /
8276: 'ExternalRef' /
1.41 vatton 8277: 'Script' '=' Script /
1.1 cvs 8278: 'ComputedPage' / 'StartPage' /
8279: 'UserPage' / 'ReminderPage' /
8280: 'Empty' /
1.18 cvs 8281: ElemID /
1.1 cvs 8282: 'FirstAttr' / 'LastAttr' .
8283: CondAscend = [ Ascend ] CondOnAscend .
8284: Ascend = '*' / 'Parent' / 'Ancestor' LevelOrType .
8285: LevelOrType = CondRelLevel / ElemID [ ExtStruct ] .
8286: CondRelLevel = NUMBER .
8287: CondOnAscend = 'First' / 'Last' /
8288: 'Referred' /
8289: [ 'Immediately' ] 'Within' [ NumParent ]
8290: ElemID [ ExtStruct ] /
8291: 'Attributes' /
8292: AttrID [ RelatAttr ] /
8293: 'Presentation' /
1.34 cvs 8294: PresRule .
1.1 cvs 8295: NumParent = [ GreaterLess ] NParent .
1.30 cvs 8296: GreaterLess = '>' / '<' .
1.1 cvs 8297: NParent = NUMBER.
1.41 vatton 8298: Script = NAME .
1.1 cvs 8299: RelatAttr = '=' Value /
1.30 cvs 8300: '>' [ '-' ] Minimum /
1.1 cvs 8301: '<' [ '-' ] Maximum /
8302: 'IN' '[' [ '-' ] MinInterval '..'
8303: [ '-' ] MaxInterval ']' .
8304: Value = [ '-' ] IntegerVal / TextVal / AttrValue .
8305: Minimum = NUMBER .
8306: Maximum = NUMBER .
8307: MinInterval = NUMBER .
8308: MaxInterval = NUMBER .
8309: IntegerVal = NUMBER .
8310: TextVal = STRING .
8311: AttrValue = NAME .
8312:
8313: SimpleRule = 'Create' [ 'IN' VarID ] Object
8314: [ Position ] ';' /
8315: 'Write' Object [ Position ] ';' /
8316: 'Read' BufferID [ Position ] ';' /
8317: 'Include' File [ Position ] ';' /
1.6 cvs 8318: 'Get' [ RelPosition ] ElemID
8319: [ ExtStruct ]
8320: [ Position ] ';' /
1.1 cvs 8321: 'Copy' [ RelPosition ] ElemID
8322: [ ExtStruct ]
8323: [ Position ] ';' /
8324: 'Use' TrSchema [ 'For' ElemID ] ';' /
8325: 'Remove' ';' /
1.31 cvs 8326: 'Ignore' ';' /
1.1 cvs 8327: 'NoTranslation' ';' /
8328: 'NoLineBreak' ';' /
8329: 'ChangeMainFile' VarID [ Position ] ';' /
1.14 cvs 8330: 'RemoveFile' VarID [ Position ] ';' /
1.10 cvs 8331: 'Set' CounterID InitValue [ Position ] ';' /
8332: 'Add' CounterID Increment [ Position ] ';' /
1.25 cvs 8333: 'Indent' [ 'IN' VarID ] Indent [ Position ] ';' .
1.10 cvs 8334:
1.25 cvs 8335: Indent = 'Suspend' / 'Resume' / [ IndentSign ] IndentValue .
1.10 cvs 8336: IndentSign = '+' / '-' .
8337: IndentValue = NUMBER .
1.1 cvs 8338:
8339: Object = ConstID / CharString /
8340: BufferID /
8341: VarID /
1.30 cvs 8342: '(' Function < Function > ')' /
1.21 cvs 8343: [ 'Translated' ] AttrID /
1.1 cvs 8344: 'Value' /
8345: 'Content' /
8346: 'Attributes' /
8347: 'Presentation' /
8348: 'RefId' /
8349: 'PairId' /
8350: 'FileDir' / 'FileName' / 'Extension' /
8351: 'DocumentName' / 'DocumentDir' /
8352: [ 'Referred' ] ReferredObject .
8353: Position = 'After' / 'Before' .
8354:
1.6 cvs 8355: ReferredObject= VarID /
8356: ElemID [ ExtStruct ] /
8357: 'RefId' /
8358: 'DocumentName' / 'DocumentDir' .
1.1 cvs 8359:
1.6 cvs 8360: File = FileName / BufferID .
8361: FileName = STRING .
1.1 cvs 8362:
1.6 cvs 8363: RelPosition = 'Included' / 'Referred' .
8364: ExtStruct = '(' ElemID ')' .
1.1 cvs 8365:
1.6 cvs 8366: TrSchema = NAME .
8367:
1.30 cvs 8368: AttrSeq = TransAttr < TransAttr > .
1.6 cvs 8369: TransAttr = AttrID [ '(' ElemID ')' ]
8370: [ RelatAttr ] ':' RuleSeq .
8371:
1.30 cvs 8372: PresSeq = PresTrans < PresTrans > .
1.6 cvs 8373: PresTrans = PresRule ':' RuleSeq .
8374: PresRule = 'Size' [ PresRelation ] /
8375: 'Indent' [ PresRelation ] /
8376: 'LineSpacing' [ PresRelation ] /
8377: 'Adjust' [ '=' AdjustVal ] /
8378: 'Hyphenate' [ '=' BoolVal ] /
8379: 'Style' [ '=' StyleVal ] /
1.24 cvs 8380: 'Weight' [ '=' WeightVal ] /
1.6 cvs 8381: 'Font' [ '=' FontVal ] /
8382: 'UnderLine' [ '=' UnderLineVal ] /
8383: 'Thickness' [ '=' ThicknessVal ] /
8384: 'LineStyle' [ '=' LineStyleVal ] /
8385: 'LineWeight' [ PresRelation ] /
8386: 'FillPattern' [ '=' Pattern ] /
8387: 'Background' [ '=' Color ] /
8388: 'Foreground' [ '=' Color ] .
8389:
8390: PresRelation = '=' PresValue /
1.30 cvs 8391: '>' [ '-' ] PresMinimum /
1.6 cvs 8392: '<' [ '-' ] PresMaximum /
8393: 'IN' '[' [ '-' ] PresIntervalMin '..'
8394: [ '-' ] PresIntervalMax ']' .
1.35 cvs 8395: AdjustVal = 'Left' / 'Right' / 'VMiddle' / 'Justify' /
1.6 cvs 8396: 'LeftWithDots' .
8397: BoolVal = 'Yes' / 'No' .
1.24 cvs 8398: StyleVal = 'Roman' / 'Italics' / 'Oblique' .
8399: WeightVal = 'Normal' / 'Bold' .
1.6 cvs 8400: FontVal = 'Times' / 'Helvetica' / 'Courier' .
8401: UnderLineVal = 'NoUnderline' / 'UnderLined' /
8402: 'OverLined' / 'CrossedOut' .
8403: ThicknessVal = 'Thick' / 'Thin' .
8404: LineStyleVal = 'Solid' / 'Dashed' / 'Dotted' .
8405: Pattern = NAME .
8406: Color = NAME .
8407: PresMinimum = NUMBER .
8408: PresMaximum = NUMBER .
1.1 cvs 8409: PresIntervalMin= NUMBER .
8410: PresIntervalMax= NUMBER .
1.6 cvs 8411: PresValue = [ '-' ] PresVal .
8412: PresVal = NUMBER .
1.1 cvs 8413:
1.41 vatton 8414: TextTransSeq = [ Script ] TransSeq .
8415: Script = NAME .
1.30 cvs 8416: TransSeq = 'BEGIN' < Translation > 'END' ';' /
1.6 cvs 8417: Translation .
1.30 cvs 8418: Translation = Source [ '->' Target ] ';' .
1.6 cvs 8419: Source = STRING .
1.18 cvs 8420: Target = STRING .</pre>
8421: </div>
1.37 cvs 8422: <hr />
1.18 cvs 8423: </div>
1.1 cvs 8424:
1.18 cvs 8425: <div class="chapter">
1.37 cvs 8426: <h1><a name="sect7" id="sect7">Character coding</a></h1>
1.1 cvs 8427:
1.18 cvs 8428: <div class="section">
1.37 cvs 8429: <h2><a name="sectb71" id="sectb71">Characters</a></h2>
1.1 cvs 8430:
1.43 quint 8431: <p>The characters of the Latin script follow the encoding defined in the ISO
8432: 8859-1 (ISO Latin-1) standard. The characters of the Greek script follow the
8433: encoding defined by Adobe for its Symbol font (Adobe FontSpecific).</p>
1.37 cvs 8434:
8435: <p>Characters whose octal code is greater than 0200 are written in the form
8436: of their octal code preceded by a backslash character (``\''). For example,
8437: the French word 'Résumé' is written <tt>R\351sum\351</tt>.</p>
1.30 cvs 8438:
8439: <p>To the ISO 8859-1 encoding four characters with the following codes have
1.37 cvs 8440: been added:<br />
8441: <tt>212</tt>: line break<br />
8442: <tt>240</tt>: sticky space<br />
8443: <tt>201</tt>: thin space<br />
1.18 cvs 8444: <tt>202</tt>: en space</p>
1.30 cvs 8445:
8446: <p>The <tt>212</tt> character is a ``line break'' character which forces a
1.37 cvs 8447: line break. The <tt>240</tt> character is a ``sticky space'', which cannot be
1.18 cvs 8448: replaced by a line break.</p>
8449: </div>
1.1 cvs 8450:
1.18 cvs 8451: <div class="section">
1.37 cvs 8452: <h2><a name="sectb72" id="sectb72">Symbols</a></h2>
1.1 cvs 8453:
1.37 cvs 8454: <p>The table below gives the codes for the symbols of Thot. Symbols can be
8455: used in presentation schemas constants and in transcoding rules of
8456: translation schemas. Each symbol is represented by a single character.</p>
1.18 cvs 8457: <ul>
1.40 quint 8458: <li><tt>r</tt> : a radical</li>
8459: <li><tt>i</tt> : a simple integral</li>
8460: <li><tt>c</tt> : a curvilinear integral</li>
8461: <li><tt>d</tt> : a double integral</li>
8462: <li><tt>t</tt> : a triple integral</li>
1.39 cvs 8463: <li><code>o</code>: an over brace</li>
8464: <li><code>u</code>: an under brace</li>
1.40 quint 8465: <li><tt>S</tt> : the summation symbol</li>
8466: <li><tt>P</tt> : the product symbol</li>
8467: <li><tt>U</tt> : the union symbol</li>
8468: <li><tt>I</tt> : the intersection symbol</li>
8469: <li><tt>R</tt> : a right arrow</li>
8470: <li><tt>L</tt> : a left arrow</li>
8471: <li><tt><</tt> : an opening pointy bracket</li>
8472: <li><tt>></tt> : a closing pointy bracket</li>
8473: <li><tt>^</tt> : an up arrow</li>
8474: <li><tt>V</tt> : a down arrow</li>
8475: <li><tt>(</tt> : an opening parenthesis</li>
8476: <li><tt>)</tt> : a closing parenthesis</li>
8477: <li><tt>{</tt> : an opening brace</li>
8478: <li><tt>}</tt> : a closing brace</li>
8479: <li><tt>[</tt> : an opening square bracket</li>
8480: <li><tt>]</tt> : a closing square bracket</li>
1.18 cvs 8481: </ul>
8482: </div>
1.1 cvs 8483:
1.18 cvs 8484: <div class="section">
1.37 cvs 8485: <h2><a name="sectb73" id="sectb73">Graphical elements</a></h2>
1.1 cvs 8486:
1.30 cvs 8487: <p>The table below gives the codes for the graphical elements of Thot. These
1.1 cvs 8488: elements can be used in presentation schemas constants and in transcoding
1.37 cvs 8489: rules of translation schemas. Each graphical element is represented by a
1.18 cvs 8490: single character.</p>
8491: <ul>
1.30 cvs 8492: <li>a: a circle</li>
8493: <li><p><tt>A</tt>: an open curve with an arrow head at the end</p>
8494: </li>
1.40 quint 8495: <li><tt>b</tt> : a horizontal line along the lower side of the box</li>
8496: <li><tt>B</tt> : an open curve</li>
8497: <li><tt>c</tt> : an ellipse inscribed in the box</li>
8498: <li><tt>C</tt> : a rectangle with rounded corners</li>
8499: <li><tt>D</tt> : an open curve with two arrow heads</li>
8500: <li><tt>e</tt> : The northwest/southeast diagonal of the box with an
8501: arrowhead at the bottom</li>
8502: <li><tt>E</tt> : The southwest/northeast diagonal of the box with an
8503: arrowhead at the top</li>
8504: <li><tt>F</tt> : an open curve with an arrow head at start</li>
8505: <li><tt>g</tt> : a line from the origin of the box to its opposite
8506: corner</li>
8507: <li><tt>h</tt> : a horizontal line as wide as the box and placed in its
8508: middle</li>
8509: <li><tt>l</tt> : a vertical line on the left side of the box</li>
8510: <li><tt>L</tt> : a lozenge</li>
8511: <li><tt>M</tt> : an open broken line with two arrow heads</li>
8512: <li><tt>N</tt> : an open broken line with an arrow head at start</li>
8513: <li><tt>o</tt> : The southwest/northeast diagonal of the box with an
8514: arrowhead at the bottom</li>
8515: <li><tt>O</tt> : The northwest/southeast diagonal of the box with an
8516: arrowhead at the top</li>
8517: <li><tt>p</tt> : a polygon</li>
8518: <li><tt>P</tt> : a rectangle with round corners and a horizontal bar at the
8519: top</li>
8520: <li><tt>Q</tt> : an ellipse with a horizontal bar at the top</li>
8521: <li><tt>r</tt> : a vertical line on the right side of the box</li>
8522: <li><tt>R</tt> : a rectangle which is the shape of the box</li>
8523: <li><tt>s</tt> : a closed curve</li>
8524: <li><tt>S</tt> : an open broken line</li>
8525: <li><tt>t</tt> : a horizontal line along the upper side of the box</li>
8526: <li><tt>U</tt> : an open broken line with an arrow head at the end</li>
8527: <li><tt>v</tt> : a vertical line as tall as the box and placed in its
8528: middle</li>
8529: <li><tt>V</tt> : a down arrow as tall as the box and in its middle</li>
1.30 cvs 8530: <li>w: a segment (2 points)</li>
1.40 quint 8531: <li><tt>W</tt> : the upper right corner</li>
1.30 cvs 8532: <li>x: a segment (2 points) with an arrow head at the end</li>
1.40 quint 8533: <li><tt>X</tt> : the lower right corner</li>
1.30 cvs 8534: <li>y: a segment (2 points) with an arrow head at the end</li>
1.40 quint 8535: <li><tt>Y</tt> : the lower left corner</li>
1.30 cvs 8536: <li>z: a segment (2 points) with an arrow head at the end</li>
1.40 quint 8537: <li><tt>Z</tt> : the upper left corner</li>
8538: <li><tt>space</tt> : a transparent element</li>
8539: <li><tt>^</tt> : an up arrow as tall as the box and in its middle</li>
8540: <li><tt>></tt> : a right arrow as long as the box's width and in its
8541: middle</li>
8542: <li><tt>></tt> : a left arrow as long as the box's width and in its
8543: middle</li>
8544: <li><tt>/</tt> : The southwest/northeast diagonal of the box</li>
8545: <li><tt>\</tt> : the northwest/southeast diagonal of the box</li>
1.18 cvs 8546: </ul>
1.37 cvs 8547: <hr />
1.18 cvs 8548: </div>
8549: </div>
8550: </body>
8551: </html>
Webmaster