\documentstyle[11pt,times]{article}

\marginparwidth 0pt
\oddsidemargin  1 cm
\evensidemargin  1 cm
\marginparsep 0pt
\topmargin   0pt
\textwidth   14 cm
\textheight  22.5 cm

\begin{document}
\sloppy

\date{Version du 25 fe'vrier 1993}
\title{La repre'sentation pivot de Thot\\
       version 4}
\author{Vincent Quint}
\maketitle

Ce document de'crit la repre'sentation adopte'e pour le stockage des
documents produits par Thot.

\section{Notation}

La notation utilise'e pour de'crire la repre'sentation pivot est celle qui
a de'ja` e'te' utilise'e pour de'crire les langages de Thot. Rappelons que les
parties entre crochets {\tt [ ] } sont facultatives, que les parties entre
les signes {\tt < >} peuvent e^tre re'pe'te'es ou omises, que le caracte`re
{\tt /} repre'sente un choix entre plusieurs possibilite's, que la juxtaposition
des symbloles marque la concate'nation et que le point indique une fin de
re`gle. \`{A} ces conventions, on ajoute les suivantes~:

\begin{description}
\item{\tt OCTET}
repre'sente un octet quelconque.
\item{\tt CHAINEOCT}
repre'sente une chai^ne d'octets quelconques.
\item{\tt CHAINECAR}
repre'sente une chai^ne de caracte`res ISO-Latin-1 imprimables termine'e par un
octet nul. Une chai^ne vide ne comprend qu'un octet nul.
\item{\tt CARACTERE}
repre'sente un seul caracte`re ISO-Latin-1 imprimable, c'est a` dire un caracte`re dont
le code est supe'rieur ou e'gal a` 32 (de'cimal).
\item{\tt NUMERO}
repre'sente un entier positif ou nul code' sur deux octets (0-65535).
\item{\tt O}
suivi d'un ou deux chiffres repre'sente un octet ayant pour valeur le nombre
de'cimal repre'sente' par le (ou les) chiffre(s) qui sui(ven)t.
\item{\tt '~'}
un caracte`re entre apostrophes repre'sente ce caracte`re exprime' dans le code
ISO-Latin-1.
\end{description}

\section{Format pivot}

La repre'sentation pivot d'un document est forme'e de trois fichiers~:

\begin{itemize}
\item
{\it le fichier pivot} repre'sente la structure logique spe'cifique
et le contenu du document. Il comporte e'galement, le cas e'che'ant,
la pre'sentation spe'cifique du document. Son nom se termine par l'extension
{\tt .PIV}.

\item
{\it le fichier des re'fe'rences externes entrantes} repre'sente les liens
entre le document et d'autres documents, ou plus pre'cise'ment il repre'sente
les e'le'ments du document qui sont de'signe's par des re'fe'rences
appartenant a` d'autres documents. Ce fichier n'est pre'sent que si le
document comporte au moins un e'le'ment de'signe' depuis un autre document.
Son nom se termine par l'extension {\tt .EXT}.

\item
{\it le fichier des re'fe'rences a` modifier} repre'sente des modifications
a` effectuer dans le document. Ces modifications ont e'te' rendues
ne'cessaires par des ope'rations de destruction ou de de'placement
d'e'le'ments re'fe'rence's par le document, ope'rations
qui ont e'te' effectue'es sur d'autres documents lorsque le document auquel
est associe' le fichier n'e'tait pas charge'.
Les re'fe'rences du document qui de'signent ces e'le'ments de'truits ou
de'place's doivent e^tre mises a` jour selon ce qui est indique' dans le
fichier des re'fe'rences a` modifier.
Ce fichier n'est pre'sent que si le document comporte au moins une
refe'rence externe devant e^tre mise a` jour.
Le nom du fichier se termine par l'extension {\tt .REF}.
\end{itemize}

\section{Fichier des re'fe'rences externes entrantes}

Le fichier des re'fe'rences externes entrantes permet de connai^tre tous les
e'le'ments du document qui sont de'signe's par des re'fe'rences externes
(re'fe'rences appartenant a` d'autres documents), que ces re'fe'rences
repre'sentent des renvois ou des inclusions, avec ou sans expansion. Ce
fichier permet aussi de connai^tre tous les documents qui font re'fe'rence
a` chacun de ces e'le'ments.

Le fichier des re'fe'rences externes entrantes est forme' d'une suite
d'enregistrements repre'sentant chacun un e'le'ment de'signe'
par d'autres documents. Il y a au moins un tel enregistrement~: si aucun
e'le'ment du document n'est de'signe' par un autre document, le fichier
n'existe pas.
Le e'le'ments du document qui sont de'signe's par des re'fe'rences appartenant
au me^me document (re'fe'rences internes) ne figurent pas dans ce fichier
puisque les liens internes sont repre'sente's dans le fichier pivot (voir
page~\pageref{refer}).

Chaque enregistrement repre'sentant un e'le'ment de'signe' par d'autres
documents comporte le label qui identifie l'e'le'ment et la suite des
noms des documents comportant des re'fe'rences a` cet e'le'ment.
Il y a au moins un nom de document apre`s le label.
Le label est le me^me que celui qui identifie l'e'le'ment en question dans
le fichier pivot (voir page~\pageref{labelelem}).

\begin{verbatim}
Fichier-Ref-Ext =    Elem-Ref < Elem-Ref > .
Elem-Ref =           Label Doc-Externe < Doc-Externe > .
\end{verbatim}

\label{label}
Thot affecte un identificateur unique, appele' label, a` chaque e'le'ment
qu'il cre'e. Les labels engendre's par Thot sont de la forme {\tt Lnnn},
ou` nnn repre'sente un entier code' en ASCII, avec un nombre de
chiffres variable. Cet entier qui est appele' {\em nume'ro de label}.

Un label est donc une suite de caracte`res termine'e par un octet nul.
Dans les versions pre'ce'dentes de Thot, un label e'tait
un entier positif court (deux octets) ou long (quatre octets).

Dans les fichiers, un label est pre'ce'de' d'un octet qui identifie son type~:
{\tt Marque-Label-Chaine}. Dans les fichiers produits par d'anciennes
versions de Thot, on peut trouver aussi {\tt Marque-Label-Court} ou
{\tt Marque-Label-Long}, suivis d'un entier positif sur deux ou quatre
octets selon le type de label.

\begin{verbatim}
Label =              Marque-Label-Chaine CHAINECAR /
                     Marque-Label-Court Numero-Label-Court /
                     Marque-Label-Long Numero-Label-Long .
Marque-Label-Chaine = O11 .
Marque-Label-Court =  O12 .
Marque-Label-Long =   O13 .
Numero-Label-Court =  NUMERO .
Numero-Label-Long =   NUMERO NUMERO .
\end{verbatim}

Chaque nom de document externe est une simple suite de caracte`res termine'e
par un octet nul. Il est pre'ce'de' d'une marque de document externe.
\begin{verbatim}
Doc-Externe =        Marque-Doc-Ext Nom-Document .
Marque-Doc-Ext =     O15 .
Nom-Document =       CHAINECAR .
\end{verbatim}

\section{Fichier des re'fe'rences a` modifier}

Le fichier des re'fe'rences a` modifier indique tous les e'le'ments externes
(c'est a` dire appartenant a` d'autres documents) qui sont re'fe'rence's
par le document et qui ont change' de document ou ont e'te' de'truits.
Les re'fe'rences qui de'signent ces e'le'ments doivent e^tre mises a` jour,
que ces re'fe'rences repre'sentent des renvois ou des inclusions, avec ou
sans expansion.

Le fichier des re'fe'rences a` modifier est forme' d'une suite
d'enregistrements repre'sentant chacun un e'le'ment externe de'place' ou
de'truit. Il y a au moins un tel enregistrement~: si le document ne contient
aucune re'fe'rence a` modifier, le fichier n'existe pas.

Chaque enregistrement comporte dans l'ordre l'ancien label de l'e'le'ment,
le nouveau label de l'e'le'ment, le nom de l'ancien document auquel
appartenait cet e'le'ment et le nom du nouveau document auquel il appartient.
Les labels et noms de documents sont repre'sente's comme dans le fichier
des re'fe'rences externes entrantes.

\begin{verbatim}
Fichier-Ref-Modif = El-Ext-Modif < El-Ext-Modif > .
El-Ext-Modif =      Ancien-Label Nouveau-Label
                    Ancien-Doc Nouveau-Doc .
Ancien-Label =      Label .
Nouveau-Label =     Label .
Ancien-Doc =        Doc-Externe .
Nouveau-Doc =       Doc-Externe .
\end{verbatim}

L'ancien label peut e^tre nul. Dans ce cas, l'enregistrement ne repre'sente
pas la modification d'un e'le'ment externe, mais le changement de nom
d'un document. Le nouveau label, bien que pre'sent, n'est pas significatif.
Les deux noms repre'sentent l'ancien nom du document et le nouveau nom du
document. Ce type d'enregistrement doit e^tre traite' de la fac,on suivante~:
il faut rechercher dans le document auquel correspond le fichier toutes les
re'fe'rences sortantes qui de'signent des e'le'ments contenus dans le document
portant l'ancien nom et, pour chacune de ces re'fe'rences, il faut changer le
nom du document contenant l'e'le'ment de'signe' par la re'fe'rence.

Si l'ancien label n'est pas nul, il s'agit de la destruction ou du
de'placement d'un e'le'ment externe. Une destruction est indique'e par un
nouveau label nul. Dans ce cas, le nom du nouveau document n'est pas
significatif, bien qu'il soit pre'sent. Il faut rechercher dans le document
auquel correspond le fichier toutes les re'fe'rences sortantes qui de'signent
l'e'le'ment externe identifie' par l'ancien label et l'ancien document et
annuler toutes ces re'fe'rences.

Un de'placement d'e'le'ment est indique' par un ancien label non nul et
un nouveau label non nul e'galement. Les deux noms de documents sont
significatifs dans ce cas. Ce type d'enregistrement indique que l'e'le'ment
qui portait l'ancien label dans l'ancien document se trouve maintenant dans le
nouveau document et porte le nouveau label. Dans le document auquel
correspond le fichier, il faut prendre en compte cette modification dans
toutes les re'fe'rences sortantes qui de'signent cet e'le'ment de'place'.

\section{Organisation ge'ne'rale du fichier pivot}

Le fichier pivot d'un document contient en te^te une indication de version,
la valeur du plus grand label du document, la liste des langues utilise'es
dans le document puis, de fac,on
facultative, un commentaire associe' a` l'ensemble du document.
Il contient ensuite, obligatoirement, l'indication de la classe du document,
c'est a` dire le nom du sche'ma de structure d'apre`s lequel a e'te'
construit le document. Si le document comporte des objets de diffe'rentes
natures, les classes de ces objets sont indique'es apre`s la classe du
document. De me^me, si des extensions de sche'ma s'ajoutent au sche'ma du
document, ces extensions sont indique'es apre`s la classe du document, avec
les classes des objets.
Apre`s les classes, apparaissent les parame`tres, puis les e'le'ments
associe's et enfin l'arbre principal du document. Parame`tres et e'le'ments
associe's sont facultatifs, mais l'arbre principal du document doit e^tre
pre'sent.

\begin{verbatim}
Fichier-Pivot = [ Version ]
                [ Label ]
                < Marque-Langue Nom-Langue >
                [ Commentaire ]
                  Classe-Document
                < Classe-Objet >
                < Marque-Param Param >
                < Marque-Associe Suite-Associes >
                  Marque-Document  Le-Document  Marque-Fin-Document .
\end{verbatim}

\subsection{Version}
\label{versionpivot}

L'indication de version de la forme pivot peut e^tre absente pour les
fichiers produits par d'anciennes versions de Thot, mais elle doit e^tre
pre'sente dans les
fichiers produits par les versions 2 et suivantes. Elle comporte deux fois
l'octet {\tt Marque-Version} puis le nume'ro de la version de la forme
pivot, sur un octet. Le nume'ro de version courant est 4.

\begin{verbatim}
Version =        Marque-Version Marque-Version Numero-Version .
Marque-Version = O22 .
Numero-Version = OCTET .
\end{verbatim}

\subsection{Plus grand label}

De fac,on a` permettre l'affectation de labels uniques aux nouveaux e'le'ments
du document, la forme pivot comporte, apre`s l'identification de la version,
le nume'ro de label le plus grand qui ait e'te' attribue' par Thot a` un
e'le'ment du document.\footnote{Il ne s'agit pas ne'cessairement du plus grand
label qu'on rencontrera dans le document. En effet, un e'le'ment ayant un label
supe'rieur au plus grand label du document peut avoir e'te' de'truit et il
ne faut pas affecter son label a` un autre e'le'ment.}
Ce nume'ro est repre'sente' dans le fichier pivot de la me^me fac,on que tout
label (voir page~\pageref{label} pour la repre'sentation des labels).
Dans les fichiers pivots produits avec d'anciennes versions de Thot, ce
nume'ro de label peut e^tre absent, mais il doit e^tre pre'sent dans tous les
fichiers produits par les dernie`res versions de l'e'diteur.

\subsection{Liste des langues utilise'es dans le document}
\label{listelangues}

La liste de toutes les langues utilise'es dans le document apparai^t en te^te.
Elle est forme'e de la suite des noms de ces langues, chaque nom e'tant
pre'ce'de' d'un octet {\tt Marque-Langue}.

\begin{verbatim}
Marque-Langue = O8 .
Nom-Langue = CHAINECAR .
\end{verbatim}

La langue dans laquelle est e'crit chaque e'le'ment de texte du document est
indique'e par le rang de cette langue dans la liste des langues (voir
section~\ref{contenu}).

\subsection{Commentaires}
\label{comment}

Le commentaire attache' au document est repre'sente' de la me^me fac,on que
les commentaires attache's aux e'le'ments du document (voir page~\pageref{prescom}).
Un commentaire est repre'sente' par une {\tt Marque-Commentaire} suivie de la
longueur du commentaire (sur deux octets) et du contenu du commentaire,
qui est une suite d'octets quelconques, de la longueur indique'e.

Dans les premie`res versions de Thot, les commentaires e'taient repre'sente's
diffe'remment, par une {\tt Marque-Commentaire-Ancien} suivie d'une
{\tt Marque-Debut} et du texte du commentaire, qui e'tait une chai^ne
de caracte`res de longueur quelconque ne contenant pas d'octets nuls et
termine'e par un octet nul. Cette chai^ne e'tait suivie d'une
{\tt Marque-Fin}. De fac,on a` permettre la pre'sence d'octets nuls dans le
contenu du commentaire, cette repre'sentation a e'te' remplace'e par celle
qui est de'crite plus haut, qui doit de'sormais e^tre la seule produite.
Cependant, pour assurer la compatibilite' avec les versions pre'ce'dentes,
Thot accepte en lecture les deux formes de commentaires.

\begin{verbatim}
Commentaire =     Marque-Commentaire Longueur-Commentaire
                         Contenu-Commentaire /
                  Marque-Commentaire-Ancien Marque-Debut
                         Texte-Commentaire Marque-Fin .
Marque-Commentaire =        O5 .
Longueur-Commentaire =      NUMERO .
Contenu-Commentaire =       CHAINEOCT .
Marque-Commentaire-Ancien = O3 .
Marque-Debut =              O4 .
Texte-Commentaire =         CHAINECAR .
Marque-Fin =                O6 .
\end{verbatim}

Les commentaires sont ignore's par l'e'diteur Thot qui se contente de les
conserver intacts lorsqu'un document est lu puis de les e'crire sans
changement lorsque le document est sauve' dans un fichier. Chaque commentaire
est vu comme une suite d'octets quelconque et n'est pas interpre'te' par
l'e'diteur.

\subsection{Classes}

La classe du document, ses extensions et les classes des diffe'rentes natures
d'objets (classes externes) sont repre'sente'es de fac,on identique~: une
marque {\tt Marque-Classe} ou {\tt Marque-Extension} suivie du nom de sche'ma
de structure ou d'extension (ce nom est termine' par un octet nul), du code
de ce sche'ma et du nom du sche'ma de pre'sentation
a` utiliser pour ce sche'ma de structure ou d'extension. Le nom de sche'ma de
pre'sentation peut se re'duire a` un octet nul si aucun sche'ma de
pre'sentation particulier n'est requis.
Toutes les classes d'objets utilise'es dans le document
(et seulement celles qui sont re'ellement utilise'es dans ce document) sont
indique'es ainsi, qu'elles soient explicitement appele'es dans le sche'ma
de structure du document ou qu'elles aient e'te' appele'es gra^ce a` une
re`gle {\tt NATURE}.

Le rang d'une classe ou d'une extension dans cette liste est appele'
nume'ro de classe. On verra plus loin qu'il sert a` indiquer dans quel sche'ma
de structure est de'fini un attribut, ou a` quelle classe appartient un objet.
La classe du document porte le nume'ro 0 et les classes d'objets et d'extension
sont nume'rote'es a` partir de 1.

Le code qui figure apre`s le nom du sche'ma de structure ou d'extension est
obligatoire a` partir de la version 4 de la forme pivot. C'est un
identificateur unique code' sur deux octets qui est affecte' a` chaque
compilation du sche'ma.
Cela permet de ve'rifier que les sche'mas de structure charge's pour le
document qu'on lit sont bien ceux qui ont e'te' utilise's la derniere fois
que le document a e'te' sauve'. En cas de diffe'rence, la validite' de toute
la structure logique du document lu est ve'rifie'e par rapport au sche'ma
de structure. Cela e'vite de produire des documents de structure incorrecte
lorsque le sche'ma de structure a e'te' modifie'.

\begin{verbatim}
Classe-Document = Classe .
Classe-Objet =    Classe .
Classe =          Marque-ClassExt Nom-Schema-Struct
                  [ Code-Schema-Struct ] NomSchema-Pres .
Marque-ClassExt = Marque-Classe / Marque-Extension .
Marque-Classe =   O14 .
Marque-Extension =O10 .
Nom-Schema-Struct=CHAINECAR .
Code-Schema-Struc=NUMERO .
NomSchema-Pres =  CHAINECAR .
\end{verbatim}

\subsection{Parame`tres}

Si certains parame`tres ont une valeur dans le document, ces valeurs de
parame`tres suivent les noms des classes d'objets, ou le nom de la classe du
document s'il n'y a pas de classes d'objets. Chaque valeur de
parame`tre est pre'ce'de'e d'un octet {\tt Marque-Param} indiquant qu'il
s'agit d'une valeur de parame`tre. Les valeurs de parame`tres sont
repre'sente'es comme tout e'le'ment structure' (voir page~\pageref{elstruct}).
Pour un document,
les parame`tres possibles, qui sont de'finis dans le sche'ma de structure,
n'ont pas tous une valeur. Seuls ceux qui ont une valeur apparaissent ainsi
en te^te du fichier pivot du document. Si aucun parame`tre n'a de
valeur, ou si aucun parame`tre n'est de'fini dans le sche'ma de structure du
document, aucune valeur de parame`tre n'est pre'sente dans le fichier
pivot. En revanche, si un parame`tre a une valeur, il ne peut en avoir qu'une
pour un document et donc toutes les valeurs de parame`tres d'un document sont
de types diffe'rents.

\begin{verbatim}
Marque-Param =    O16 .
Param =           Element .
\end{verbatim}

\subsection{Ele'ments associe's}

Apre`s les valeurs des parame`tres viennent les e'le'ments associe's du document
(ces e'le'ments peuvent e^tre absents). Les e'le'ments associe's sont groupe's
par type~: un document peut avoir plusieurs e'le'ments associe's de me^me type.
Un octet {\tt Marque-Associe} pre'ce`de chaque suite d'e'le'ments du me^me
type. Dans ces suites, les e'le'ments associe's sont repre'sente's comme tout
e'le'ment structure'.

Pour chaque type d'e'le'ments associe's, il n'y a normalement qu'un e'le'ment
qui posse`de un ou plusieurs fils~; ce sont ces fils qui sont les e'le'ments
associe's au sens strict. Dans les documents produits par d'anciennes versions
de Thot, l'e'le'ment racine est absent et les e'le'ments associe's eux-me^mes
apparaissent directement apre`s la {\tt Marque-Associe}.

\begin{verbatim}
Marque-Associe =  O2 .
Suite-Associes =  Element < Element > .
\end{verbatim}

\subsection{Arbre principal}

Les e'le'ments associe's sont suivis du document lui-me^me, ou plus exactement
de la repre'sentation de son arbre principal. Cette repre'sentation de l'arbre
principal est pre'ce'de'e d'un octet {\tt Marque-Document} et suivie d'un octet
{\tt Marque-Fin-Document}. Le document est repre'sente' comme tout e'le'ment
structure'.

\begin{verbatim}
Marque-Document = O19 .
Le-Document =     Element .
Marque-Fin-Document = O26 .
\end{verbatim}

\section{Ele'ments structure's}
\label{elstruct}

Rappelons que tous les types d'e'le'ments de'finis par une structure logique
ge'ne'rique sont de'crits dans la table des types d'e'le'ments du sche'ma de
structure. Cette table contient, dans l'ordre, les types de base (chai^ne de
caracte`res, symbole mathe'matique, e'le'ment graphique, image, marque de
page...), puis les constantes, puis tous les e'le'ments structure's, y compris
les e'le'ments associe's et parame`tres. Quelle que soit sa cate'gorie, un type
d'e'le'ment peut e^tre repe're' par son rang dans cette table (le rang  est
e'galement appele' nume'ro du type). Ce rang indique la cate'gorie de l'e'le'ment~:
les premiers nume'ros sont ceux des types de base, les suivants sont ceux
des e'le'ments structure's.

Dans la table des types on trouve des constantes. Comme tous les autres types
d'e'le'ments, une constante porte un nom. De plus, elle a une valeur de'finie
dans le sche'ma de structure~: une chai^ne de caracte`res.

Les e'le'ments structure's (parame`tres, e'le'ments associe's, e'le'ments du
document) sont tous repre'sente's de la me^me fac,on.

\subsection{Type d'e'le'ment}

Chaque e'le'ment commence par une indication de son type. Le type est indique'
par un octet {\tt Marque-Type} suivi du nume'ro de type de l'e'le'ment
(un entier positif sur deux octets).
Dans le cas ou` le type de l'e'le'ment est de'fini dans un sche'ma de structure
diffe'rent de celui ou` est de'fini le type de l'e'le'ment dont il est le
descendant direct, le nouveau sche'ma de structure est indique', avant
la {\tt Marque-Type} et le nume'ro de type, par un octet {\tt Marque-Classe}
(me^me s'il s'agit d'une extension de sche'ma)
suivi du nume'ro de la nouvelle classe d'objets. Rappelons que le nume'ro de
classe est le rang du nom de la classe dans la liste des noms de classes et
des extensions qui se trouve en te^te du document.

\subsection{Inclusion}

Si l'e'le'ment repre'sente l'inclusion avec expansion ou semi-expansion d'un
autre e'le'ment,
l'indication de type est suivie d'une {\tt Marque-Inclus} et de
l'identification de l'e'le'ment inclus. Cette identification est compose'e,
comme dans un e'le'ment re'fe'rence (voir section~\ref{refer}), du type de
la re'fe'rence (dans ce cas c'est toujours une inclusion), et de la
de'signation de l'e'le'ment inclus.

Si l'e'le'ment repre'sente une inclusion avec semi-expansion, la de'signation
de l'e'le'ment inclus est suivie d'une {\tt Marque-SemiExpansion}.

\subsection{Label}
\label{labelelem}

Apre`s l'indication de type (et les e'ventuelles indications d'inclusion et
de protection), apparai^t un label qui identifie l'e'le'ment de fac,on unique
dans le document. Il s'agit d'une chaine de caracteres qui est utilise'e dans les
re'fe'rences qui de'signent l'e'le'ment et dans le fichier des re'fe'rences
externes entrantes.
Dans les versions pre'ce'dentes de Thot, seuls certains e'le'ments portaient
un label\footnote{Il s'agissait de l'e'le'ment racine du document, des
e'le'ments de'signe's par une re'fe'rence interne ou externe et des e'le'ments
exportables, me^me s'ils n'e'taient de'signe's par aucune re'fe'rence.}.
C'est pourquoi certains fichiers pivots peuvent ne pas comporter de label
pour tous les e'le'ments~; mais dans les fichiers pivots produits avec
les versions re'centes de l'e'diteur Thot, {\em tous} les e'le'ments du
document portent un label (voir page~\pageref{label} pour la repre'sentation
du label).

\subsection{Holophraste}

Si l'e'le'ment est holophraste'\footnote{Tout e'le'ment peut e^tre
holophraste'. Il est alors affiche' et imprime' de fac,on particulie`re~: son
image est remplace'e par le nom de son type, donnant ainsi une forme plus
compacte de l'e'le'ment.}, un octet {\tt Marque-Holophraste} apparai^t apre`s
le label et avant les attributs.

\subsection{Attributs}

Chaque e'le'ment peut e^tre affecte' d'un ou plusieurs attributs, qui portent sur
l'e'le'ment lui-me^me et tout son contenu. Seuls sont indique's dans le fichier
pivot les attributs qui ne sont pas impose's dans le sche'ma de structure par
une instruction {\tt WITH}. Cependant les attributs impose's de type re'fe'rence
apparaissent dans le fichier pivot. Dans un sche'ma de structure, un attribut
porte un nom, posse`de un type et a, selon son type, certaines valeurs
possibles. Il y a quatre types d'attributs~:
\begin{description}
\item[Entier~:]
l'attribut prend une valeur entie`re comprise entre -32000 et 32000.
\item[Texte~:]
l'attribut prend pour valeur une chai^ne de caracte`res.
\item[Re'fe'rence~:]
l'attribut prend pour valeur une re'fe'rence a` un e'le'ment d'un type donne'.
\item[Enume're'~:]
l'attribut prend sa valeur dans une liste donne'e des valeurs possibles.
Chacune de ces valeurs a un nume'ro d'ordre et un nom. La valeur d'un attribut
de type e'nume're' est de'signe'e par ce nume'ro d'ordre.
\end{description}

Un attribut est de'signe' par son rang dans la table des attributs du sche'ma
de structure (ce rang est e'galement appele' ``nume'ro de l'attribut''). Chaque
indication d'attribut comprend, dans l'ordre~:

\begin{itemize}
\item
un octet {\tt Marque-Attribut},
\item
le nume'ro de la classe ou` l'attribut est de'fini~: ze'ro pour la classe du
document ou le rang d'une classe d'objets dans la liste des classes figurant
en te^te du fichier pivot,
\item
le nume'ro de l'attribut dans le sche'ma de structure de la classe ou` il est
de'fini,
\item
la valeur de l'attribut, code'e selon le type de l'attribut~:
   \begin{description}
   \item[Entier~:]
   la valeur absolue de l'attribut, code'e sur deux octets, et suivie de son
   signe, un caracte`re {\tt '+'} ou {\tt '-'}.
   \item[Texte~:]
   la chai^ne de caracte`res qui repre'sente la valeur de l'attribut, termine'e
   par un octet nul, ou un simple octet nul si l'attribut n'a pas de valeur.
   \item[Re'fe'rence~:]
   l'e'le'ment de'signe' par l'attribut, repre'sente' de la me^me
   fac,on que dans un e'le'ment re'fe'rence (voir section~\ref{refer}),
   mais il ne comporte pas l'octet Marque-Refer.
   \item[Enume're'~:]
   le nume'ro de la valeur de l'attribut affecte'e a` l'e'le'ment.
   \end{description}
\end{itemize}

\subsection{Pre'sentation, commentaire et contenu}
\label{prescom}

Apre`s les attributs affecte's a` l'e'le'ment vient la liste des re`gles de
pre'sentation qui s'appliquent spe'cifiquement a` cet e'le'ment. Un e'le'ment
peut ne pas avoir de re`gle de pre'sentation spe'cifique, mais il peut aussi
en avoir une ou plusieurs. Les re`gles de pre'sentation sont de'crites plus
loin. Un commentaire associe' a` l'e'le'ment peut suivre les re`gles de
pre'sentation spe'cifiques. Il est repre'sente' de la me^me fac,on que le
commentaire du document (voir page~\pageref{comment}). Enfin vient le
contenu de l'e'le'ment (voir page~\pageref{contenu})~; dans le cas ou`
l'e'le'ment repre'sente l'inclusion d'un autre e'le'ment, il n'y a pas
de contenu.

\begin{verbatim}
Element =         Type-Element
                [ Marque-Inclus TypeReference
                          Designation [ Marque-SemiExpansion ] ]
                [ Label ]
                [ Marque-Holophraste ]
                < Marque-Attribut  Numero-Classe  Numero-Attribut
                  Valeur-Attribut >
                < Regle-Presentation >
                [ Commentaire ]
                [ Contenu ] .

Type-Element =  [ Marque-Classe Numero-Classe ]
                  Marque-Type Numero-Type .
Numero-Classe =   NUMERO .
Marque-Type =     O20 .
Numero-Type =     NUMERO .

Marque-Inclus =   O9 .
TypeReference =   Marque-Renvoi /
                  Marque-Inclusion /
                  Marque-Expansion .
Marque-Renvoi =   'r' .
Marque-Inclusion ='i' .
Marque-Expansion ='e' .
Marque-SemiExpansion = O21 .

Marque-Attribut = O1 .
Numero-Attribut = NUMERO .
Valeur-Attribut = Valeur-Absolue Signe /
                  Valeur-Texte /
                  TypeReference Designation /
                  Numero-Valeur .
Valeur-Absolue =  NUMERO .
Signe =           '+' / '-' .
Valeur-Texte =    CHAINECAR .
Numero-Valeur =   NUMERO .
\end{verbatim}

\section{Re`gles de pre'sentation spe'cifiques}

Dans chaque e'le'ment peuvent apparai^tre une ou plusieurs re`gles de
pre'sentation, ou me^me aucune. S'il n'y a pas de re`gle de pre'sentation,
l'e'le'ment sera affiche' ou imprime' selon toutes les re`gles de'finies dans le
sche'ma de pre'sentation. Si des re`gles de pre'sentation sont pre'sentes, chacune
sera applique'e a` l'e'le'ment a` la place de (ou modifiera) la re`gle de me^me
type de'finie dans le sche'ma de pre'sentation, seules les re`gles du sche'ma de
pre'sentation qui ne sont pas rede'finies dans l'e'le'ment lui e'tant applique'es
telles quelles.

Dans le fichier pivot chaque re`gle de pre'sentation spe'cifique commence par une
{\tt Marque-Regle}. Cette marque est suivie du nume'ro de la vue a` laquelle
se rapporte la re`gle, du type de la boi^te concerne'e et du contenu de la
re`gle. Le nume'ro de vue {\tt Numero-Vue} est le rang de la vue dans la table
des vues du sche'ma de pre'sentation. Le type de la boi^te {\tt Type-Boite}
vaut 0 si la re`gle s'applique a` la boi^te de l'e'le'ment lui-me^me. Si la re`gle
s'applique a` une boi^te de pre'sentation associe'e a` l'e'le'ment, {\tt Type-Boite}
est le nume'ro de cette boi^te de pre'sentation (rang dans la table des boi^tes
de pre'sentation, qui est une partie du sche'ma de pre'sentation). Le contenu de
la re`gle diffe`re selon le type de re`gle. Ce type est indique' par un caracte`re
au de'but du contenu.

\begin{verbatim}
Regle-Presentation= Marque-Regle Numero-Vue Type-Boite Contenu-Regle.
Marque-Regle =    O7 .
Numero-Vue =      NUMERO .
Type-Boite =      NUMERO .
Contenu-Regle =   Marque-Hauteur Dimension /
                  Marque-Largeur Dimension /
                  Marque-Position Distance Signe /
                  Marque-Corps Distance /
                  Marque-Style CARACTERE /
                  Marque-Famille CARACTERE /
                  Marque-NoBreak1 Distance /
                  Marque-NoBreak2 Distance /
                  Marque-Ajuste Alignement /
                  Marque-Justif Booleen /
                  Marque-CoupureMots Booleen /
                  Marque-Retrait Distance Signe /
                  Marque-Interligne Distance /
                  Marque-Souligne CARACTERE /
                  Marque-SoulEpaisseur CARACTERE /
                  Marque-StyleTrait CARACTERE /
                  Marque-EpaisseurTrait	Distance /
                  Marque-TrameRemplissage Indice /
                  Marque-CouleurFond Indice /
                  Marque-CouleurTrace Indice /
                  Marque-ImageDescriptor CroppingFrame 
                                         ImagePresentation 
                                         ImageType .
\end{verbatim}                  

\subsection{Dimensions}

Une re`gle de hauteur ou une re`gle de largeur peut e^tre absolue ou
relative. Ceci est indique' par le premier caracte`re ({\tt Type-Dimension})
qui suit la marque de hauteur ou de largeur.

Si la re`gle de hauteur ou de largeur est absolue, elle est applique'e
{\em a` la place} de la re`gle indique'e par le sche'ma de pre'sentation et les
parame`tres qui suivent le {\tt Type-Dimension} constituent cette re`gle de
hauteur (ou de largeur) a` appliquer a` l'e'le'ment. La {\tt Valeur}
(un entier sur deux octets) indique la hauteur (ou la largeur) de la boi^te
de l'e'le'ment~; l'{\tt Unite-Dimension} indique si cette hauteur (ou
largeur) est exprime'e en points typographiques ({\tt 'P'}) ou en dixie`mes
de caracte`res ({\tt 'C'}), le cas {\tt Pour-Cent} e'tant exclus~; enfin le
{\tt Signe} est toujours {\tt '+'}.

Si la re`gle de hauteur ou de largeur est relative, elle {\em modifie}
la re`gle indique'e par le sche'ma de pre'sentation~: la hauteur (ou la largeur)
de l'e'le'ment auquel s'applique la re`gle est relative a` celle de l'e'le'ment
(dit de re'fe'rence) indique' par la re`gle de hauteur (ou de largeur) du
sche'ma de pre'sentation.
Seule la relation qui lie ces dimensions est indique'e dans la re`gle
spe'cifique. Si l'{\tt Unite-Dimension} est {\tt Pour-Cent} (code' {\tt '\%'}),
la {\tt Valeur} indique le pourcentage de la hauteur (ou de la largeur)
de la boi^te a` laquelle s'applique la re`gle, par rapport a` la hauteur (ou la largeur) de la boi^te de l'e'le'ment de re'fe'rence~; et dans ce cas le
{\tt Signe} est toujours {\tt '+'}. Si l'{\tt Unite-Dimension} est
{\tt Point-Typo} ou {\tt Caracteres}, la {\tt Valeur} indique la diffe'rence
entre la hauteur de la boi^te de re'fe'rence et celle de l'e'le'ment auquel
s'applique la re`gle, cette diffe'rence e'tant exprime'e en points
typographiques ou en dixie`mes de caracte`res, selon l'{\tt Unite-Dimension}.
Le signe indique alors si la boi^te de l'e'le'ment auquel s'applique la
re`gle est plus petite (signe {\tt '-'}) ou plus grande (signe {\tt '+'})
que la boi^te de re'fe'rence.

Les deux unite's de longueur que sont le point typographique (1/72 pouce) et
le dixie`me de caracte`re permettent d'exprimer des distances absolues ou
relatives. La premie`re est une unite' absolue, la seconde est relative.
Avec cette unite' relative, un changement de corps provoque un
changement de la hauteur (ou de la largeur, selon le type de la re`gle),
alors que la hauteur (ou la largeur) reste fixe si l'unite' est le point
typographique.

\begin{verbatim}
Marque-Hauteur =  'H' .
Marque-Largeur =  'L' .
Dimension =       Type-Dimension Valeur Unite-Dimension Signe .
Type-Dimension =  Absolue / Relative .
Absolue =         'A' .
Relative =        'R' .
Valeur =          NUMERO .
Unite-Dimension=  Point-Typo / Caracteres / Pour-Cent .
Point-Typo =      'P' .
Caracteres =      'C' .
Pour-Cent =       '%' .
\end{verbatim}

\subsection{Position}
\label{position}

Deux types de re`gles permettent de changer la position horizontale ou
la position verticale de la boi^te associe'e a` l'e'le'ment qui porte la re`gle.
Comme pour une re`gle de hauteur ou de largeur relative, il s'agit d'une
modification de la re`gle de'finie dans le sche'ma de pre'sentation. La
re`gle de pre'sentation spe'cifique indique de quelle distance la boi^te
doit e^tre de'cale'e par rapport a` la position de'finie dans le sche'ma de
pre'sentation. Apre`s le type de la re`gle, apparaissent, dans l'ordre, cette
distance de de'calage et le signe (le sens) du de'calage.

\begin{verbatim}
Marque-Position =  Marque-Position-X / Marque-Position-Y .
Marque-Position-X = 'X' .
Marque-Position-Y = 'Y' .
Distance =        Valeur Unite .
Unite =           Point-Typo / Caracteres .
\end{verbatim}

\subsection{Polices de caracte`res}

Trois types de re`gles de pre'sentation permettent de de'terminer la police a`
utiliser pour afficher le texte contenu dans un e'le'ment. La force de corps
est indique'e par la re`gle Corps, qui est constitue'e d'une {\tt Marque-Corps}
suivie d'une distance~: une valeur entie`re et une unite'. Cette distance
est repre'sente'e, de la me^me fac,on que dans une re`gle de position
(voir section~\ref{position}), par un nombre (sur deux octets) et un caracte`re
indiquant l'unite'. Si l'unite' est le point typographique, le nombre indique
la force de corps en points~; si l'unite' est le caracte`re, le nombre indique
le niveau de taille (1=tout petit, 2=petit, etc.) et ce niveau de taille est
interpre'te' par le Me'diateur pour le choix du corps re'el, en fonction d'une
table de correspondance que l'utilisateur peut contro^ler.

La forme des caracte`res est de'termine'e par deux re`gles~: la re`gle de style
et la re`gle de famille. Chacune de ces re`gles n'a qu'un parame`tre, un
caracte`re. Selon la re`gle, ce caracte`re repre'sente le style de la police
a` utiliser ({\tt 'R'} = romain, {\tt 'B'} = gras, {\tt 'I'} = italique,
{\tt 'O'} = oblique, {\tt 'G'} = gras italique, {\tt 'Q'} = gras oblique...)
ou sa famille ({\tt 'T'} = Times, {\tt 'H'} = Helvetica, {\tt 'C'} =
Courier...).

\begin{verbatim}
Marque-Corps =    'T' .
Marque-Style =    'S' .
Marque-Famille =  'F' .
\end{verbatim}

\subsection{Coupures}

Une re`gle de hauteur minimum avant coupure ({\tt NoBreak1}) indique que
la boi^te de l'e'le'ment auquel elle se rapporte ne peut e^tre coupe'e par
un saut de page qu'au-dela` d'une certaine distance depuis le haut de la
boi^te. L'unique parame`tre apre`s la {\tt Marque-NoBreak1} identifiant
la re`gle est cette distance minimum avant coupure, qui est exprime'e de
la me^me fac,on que dans une re`gle de positionnement (voir section~\ref{position}).

De me^me, une re`gle de hauteur minimum apre`s coupure ({\tt NoBreak2})
indique que la boi^te de l'e'le'ment auquel elle se rapporte ne peut e^tre
coupe'e par un saut de page qu'avant une certaine distance du bas de la
boi^te. Cette hauteur minimum est exprime'e de la me^me fac,on que dans
la re`gle pre'ce'dente.

\begin{verbatim}
Marque-NoBreak1 =  '1' .
Marque-NoBreak2 =  '2' .
\end{verbatim}

\subsection{Mise en lignes}

Une re`gle d'alignement modifie le mode d'alignement des lignes de texte
contenues dans l'e'le'ment sur lequel elle porte. Ce type de re`gle n'a qu'un
parame`tre, le mode d'alignement, qui indique si les lignes de texte doivent
e^tre aligne'es sur le co^te' gauche de l'e'le'ment (fer a` gauche), sur son co^te'
droit (fer a` droite), si elles doivent e^tre centre'es dans l'e'le'ment ou encore
aligne'es a` gauche avec des pointille's pour comple'ter la dernie`re ligne.

\begin{verbatim}
Marque-Ajuste =   'A' .
Alignement =      Align-Gauche / Align-Droite / Centre / Pointille .
Align-Gauche =    'G' .
Align-Droite =    'D' .
Centre =          'C' .
Pointille =       'P' .
\end{verbatim}

Une re`gle de justification indique seulement si les lignes de texte contenues
dans l'e'le'ment doivent e^tre justifie'es, c'est a` dire e'tire'es de fac,on a`
atteindre les bords de leur boi^te englobante, ou si elles conservent leur
longueur propre, avec un espace fixe entre les mots. Dans le cas ou` les
lignes sont justifie'es, le mode d'alignement, spe'cifie' par une re`gle du type
pre'ce'dent, n'a d'utilite' que pour de'terminer la position horizontale de la
dernie`re ligne des boi^tes mises en lignes (par exemple les paragraphes),
puisque les autres lignes occupent toute la largeur de leur boi^te
englobante.
Dans une re`gle de justification, la marque identifiant le type de re`gle est
suivie d'un caracte`re qui indique si la justification doit e^tre faite
({\tt 'V'}) ou non ({\tt 'F'}).

\begin{verbatim}
Marque-Justif =   'J' .
Booleen =         Vrai / Faux .
Vrai =            'V' .
Faux =            'F' .
\end{verbatim}

Une re`gle de coupure des mots indique si les mots doivent e^tre coupe's en
fin de ligne ou non. Cette re`gle est forme'e comme une re`gle de
justification~: la marque identifiant le type de re`gle est suivie d'un
caracte`re qui indique si la coupure des mots doit e^tre faite
({\tt 'V'}) ou non ({\tt 'F'}).

\begin{verbatim}
Marque-CoupureMots = 'C' .
\end{verbatim}

Une re`gle retrait indique le de'calage horizontal du de'but de la premie`re
ligne des boi^tes mises en lignes. Si le de'calage est positif, la premie`re
ligne est de'cale'e a` droite, en retrait des autres~; si le de'calage est
ne'gatif, la premie`re ligne est de'cale'e a` gauche. Apre`s l'indication du type
de re`gle, le de'calage est repre'sente' par son amplitude (une distance
code'e comme dans une re`gle de positionnement, voir section~\ref{position})
et son signe (un caracte`re {\tt '+'} ou {\tt '-'}).

Une re`gle interligne donne la distance qui se'pare deux lignes conse'cutives
dans une boi^te mise en lignes. La marque indiquant le type de la re`gle est
suivie d'une distance, code'e comme dans une re`gle de positionnement
(voir section~\ref{position}), qui est la valeur de l'interligne.

\begin{verbatim}
Marque-Retrait =  'R' .
Marque-Interligne='I' .
\end{verbatim}

\subsection{Soulignement}

Une re`gle de soulignement modifie le mode de soulignement des lignes de texte
contenues dans l'e'le'ment sur lequel elle porte. Ce type de re`gle n'a qu'un
parame`tre, le mode de soulignement, qui indique si les lignes de texte doivent
e^tre souligne'es, surligne'es ou biffe'es. Dans une re`gle de soulignement, 
la marque identifiant le type de re`gle est suivie d'un caracte`re identifiant
le type de soulignement ({\tt 'U'} = souligne', {\tt 'O'} = surligne', 
{\tt 'C'} = biffe')

\begin{verbatim}
Marque-Souligne =  'U' .
\end{verbatim}

Une re`gle d'e'paisseur de soulignement modifie l'e'paisseur du trait de soulignement des lignes de texte
contenues dans l'e'le'ment sur lequel elle porte. Ce type de re`gle n'a qu'un
parame`tre, l'e'paisseur de soulignement, qui indique si le trait doit e^tre fin ou e'pais.
Dans une re`gle d'e'paisseur de soulignement, 
la marque identifiant le type de re`gle est suivie d'un caracte`re identifiant
le type d'e'paisseur ({\tt 'N'} = fin, {\tt 'T'} = e'pais) 

\begin{verbatim}
Marque-SoulEpaisseur =  'E' .
\end{verbatim}

\subsection{Style de trait}

Une re`gle de style de trait modifie le style du trace' des e'le'ments de base
graphiques contenus dans l'e'le'ment sur lequel porte la re`gle. Ce type de
re`gle n'a qu'un parame`tre qui indique si les traits doivent e^tre continus,
pointille's ou tirete's. La marque identifiant le type de re`gle est suivie
d'un caracte`re identifiant le style du trace' ({\tt 'S'} = continu',
{\tt '-'} = tirete', {\tt '.'} = pointille').

\begin{verbatim}
Marque-StyleTrait = 'l' .
\end{verbatim}

\subsection{Epaisseur des traits}

Une re`gle d'e'paisseur de trait modifie l'e'paisseur de trait des e'le'ments
de base graphiques contenus dans l'e'le'ment sur lequel porte la re`gle.
Ce type de re`gle n'a qu'un parame`tre qui indique l'e'paisseur des traits.
La marque identifiant le type de re`gle est suivie de ce parame`tre
exprime' de la me^me fac,on qu'une distance dans une re'gle de position
(voir section~\ref{position}).

\begin{verbatim}
Marque-EpaisseurTrait = 'W' .
\end{verbatim}

\subsection{Trame de remplissage}

Une re`gle trame de remplissage de'termine le motif a` utiliser pour remplir
la surface des e'le'ments de base graphiques contenus dans l'e'le'ment sur
lequel porte la re`gle. Ce type de re`gle n'a qu'un parame`tre qui indique
le motif a` utiliser. Celui-ci est repre'sente' par un entier code' sur deux
octets qui est l'indice dans la table des motifs de Thot. Cette table
se trouve dans le fichier {\tt thot.pattern}.
Par convention l'indice 0 indique qu'il n'y a pas de remplissage des surfaces.

\begin{verbatim}
Marque-TrameRemplissage = 'p' .
Indice = NUMERO .
\end{verbatim}

\subsection{Couleurs}

Deux re`gles diffe'rentes permettent de modifier la couleur de tous les
e'le'ments de base contenus dans un e'le'ment. L'une modifie la couleur de
fond, l'autre la couleur de trace'. Ces deux re'gles ont la me^me forme~:
la marque identifiant le type de re`gle ({\tt Marque-CouleurFond} ou
{\tt Marque-CouleurTrace}) est suivie d'un entier code' sur deux octets
qui repre'sente la couleur a` utiliser. Cet entier est le rang de la
couleur dans la table des couleurs de Thot qui se trouve dans le fichier
{\tt thot.color}.
Par convention, le rang 0 repre'sente le blanc et le rang 1 repre'sente
le noir.

\begin{verbatim}
Marque-CouleurFond = 'b' .
Marque-CouleurTrace = 't' .
\end{verbatim}

\subsection{Pre'sentation des images}

Une re`gle de pre'sentation des images ne peut e^tre associe'e qu'a` un
e'le'ment de base de type image. Elle indique le type de l'image auquel
fait re'fe'rence l'e'le'ment sur lequel elle porte, le fene^trage a` appliquer 
sur l'image externe a` laquelle on fait re'fe'rence et le type de cadrage
qu'on applique a` cette image pour la mettre dans le document.
Ce type de re`gle a` trois parame`tres :
\begin{itemize}
\item le fene^trage a` appliquer, qui de'finit la partie de l'image externe.
Cette fene^tre est de'finie par une origine, une hauteur et une largeur,
en points typographiques, dans un repe`re dont l'origine est en haut a`
gauche de l'image externe avec un axe des abscisses croissantes vers
la droite et un axe des ordonne'es croissantes vers le bas.
\item le cadrage a` appliquer a` la fene^tre de l'image. Le cadrage 
de'crit la manie`re dont on affiche la fene^tre pre'ce'demment de'finie dans
l'espace
de composition re'serve' a` l'e'le'ment logique IMAGE sur lequel porte la re`gle 
de pre'sentation. Ce cadrage est code' sur un caracte`re~: {\tt 'S'} = sans modifications,
{\tt 'M'} = me^mes proportions, {\tt 'P'} = plein cadre.
\item le type de l'image externe auquel fait re'fe'rence l'e'le'ment logique IMAGE sur lequel porte la re`gle 
de pre'sentation. Le type de l'image est code' dans la re`gle par un entier~:
\begin{itemize}
\item {\tt 1} = Bitmap (Xlib XReadBitmapFile format)
\item {\tt 2} = XDump (XWD format)
\item {\tt 3} = EPSF (Encapsulated PostScript file)
\item {\tt 5} = CGM (ISO 8632, codage clear text ou binary )
\item {\tt 6} = idraw (Idraw 1.15 format)
\item {\tt 7} = gidraw (Grif Idraw 1.15 format)
\item {\tt 8} = TIFF 5.0 (Tag Image File Format)
\item {\tt 9} = HPGL
\end{itemize}
\end{itemize}

\begin{verbatim}
Marque-ImageDescriptor = 'P' .
CroppingFrame =           X Y Largeur Hauteur .
ImagePresentation =       CARACTERE .
ImageType =               NUMERO .
X =                       NUMERO .
Y =                       NUMERO .
Largeur =                 NUMERO .
Hauteur =                 NUMERO .
\end{verbatim}

\section{Contenu d'un e'le'ment}
\label{contenu}

La repre'sentation du contenu des e'le'ments diffe`re selon que l'e'le'ment
repre'sente' est une feuille de la structure, une re'fe'rence, un e'le'ment
structure', un parame`tre ou une constante. Le sche'ma de structure permet
d'interpre'ter correctement la repre'sentation du contenu, puisque la
structure de chaque type d'e'le'ment y est de'finie.

\begin{verbatim}
Contenu =         Feuille / Reference / Constante /
                  Parametre / Elem-Struct .
\end{verbatim}

S'il s'agit d'une feuille, le contenu est constitue' d'une
indication e'ventuelle de l'alphabet ou de la langue, d'un octet
{\tt Marque-Debut} suivi du contenu de la feuille et d'un octet
{\tt Marque-Fin}.

\begin{verbatim}
Feuille =       [ Alphab-Langue ] Marque-Debut Contenu-Feuille
                  Marque-Fin .
Alphab-Langue =   Alphabet / Langue .
Alphabet =        CARACTERE .
Langue =          Marque-Langue Numero-Langue .
Numero-Langue =   OCTET .
Contenu-Feuille = CHAINECAR / CARACTERE /
                  Indic-Page / Ident-Paire .
\end{verbatim}

\subsection{Chai^nes de caracte`res, graphiques, symboles et images}

Si la feuille est du type chai^ne de caracte`res ou image (c'est indique'
dans le sche'ma de structure), le contenu de la feuille est une suite de
caracte`res termine'e par un octet nul. S'il s'agit d'un e'le'ment graphique
ou d'un symbole mathe'matique, le contenu est re'duit a` un seul caracte`re
repre'sentant l'e'le'ment graphique ou le symbole. Dans tous les cas, si la
feuille est vide, le contenu est re'duit a` un octet nul. Le codage des
symboles et e'le'ments graphiques est donne' page~\pageref{pagegraph}.

Dans le cas d'une chai^ne de caracte`res, la {\tt Marque-Debut} est
pre'ce'de'e d'une indication de l'alphabet ou de la langue. L'alphabet
n'est utilise' que dans les versions 3 et pre'ce'dentes de la forme
pivot (voir section~\ref{versionpivot}). A` partir de la version 4, c'est
la langue qui est indique'e.

Dans le cas de l'alphabet, un simple caracte`re indique l'alphabet utilise'
({\tt 'L'}=Latin, {\tt 'G'}=Grec,...). Ce caracte`re est facultatif, son
absence indiquant l'alphabet par de'faut, qui est l'alphabet latin.

Dans le cas de la langue, un octet {\tt Marque-Langue} pre'ce`de le nume'ro
de langue, code' sur un octet. Cette indication de la langue n'est pre'sente
que s'il ne s'agit pas de la premie`re langue. Le nume'ro de langue est le
rang - 1 de la langue dans la liste des langues qui figure en te^te du
document (voir section~\ref{listelangues}).

Le contenu d'une chai^ne de caracte`res est simplement la suite des codes
des caracte`res qui constituent la chai^ne. Le code des caracte`res est
de'fini par l'alphabet (ISO Latin-1 pour 'L' ou Symbol pour 'G') ou la langue.
Dans le cas d'une image, ce n'est pas l'image elle-me^me qui constitue le
contenu de la feuille, mais le nom du fichier qui la contient.

\subsection{Marques de page}

Si la feuille est du type marque de page (c'est indique' dans le sche'ma de
structure), son contenu, entre {\tt Marque-Debut} et {\tt Marque-Fin}, est
constitue', dans l'ordre, du nume'ro de page (un entier sur 2 octets), du
nume'ro de vue (un entier sur deux octets), du type de page (un caracte`re)
et de l'indicateur de modification de la page (un caracte`re). Ces quatre
e'le'ments sont toujours pre'sents.

\begin{verbatim}
Indic-Page =      Numero-Page Numero-Vue Type-Page Page-Modif .
Numero-Page =     NUMERO .
Type-Page =       Calcule / Debut / Utilisateur / Rappel .
Calcule =         'C' .
Debut =           'D' .
Utilisateur =     'U' .
Rappel =          'R' .
Page-Modif =      Booleen .
\end{verbatim}

Le de'coupage d'un document en pages est re'alise' pendant l'e'dition, sur
demande explicite de l'utilisateur. Il a principalement pour effet
d'introduire dans l'arbre abstrait du document (structure logique spe'cifique)
des e'le'ments spe'ciaux, appele's marques de page, qui sont place's
inde'pendemment des sche'mas de structure (structures logiques ge'ne'riques),
la` ou` tombe la frontie`re de page dans l'image du document.

Lors de la sauvegarde du document, ces marques de page sont conserve'es dans
le fichier pivot, comme tout e'le'ment de l'arbre abstrait. Ce sont des e'le'ments
feuilles de la structure qui contiennent quatre informations~: le nume'ro de
page, la vue concerne'e, le type de saut de page et l'indicateur de mise a`
jour de la page.

Le nume'ro de page e'vite de recompter les marques de page pre'ce'dentes lors
du chargement du document. La vue concerne'e est ne'cessaire puisque les
marques de page des diffe'rentes vues se retrouvent dans le fichier pivot
unique du document.

Trois types de sauts de page peuvent e^tre repre'sente's par une marque de
page~:

\begin{itemize}
\item
les sauts de page qui ont e'te' calcule's lors du de'coupage du document en
pages, en fonction de la hauteur des pages~;
\item
les sauts de page qui de'coulent de la structure logique du document et qui
sont lie's au de'but de certains e'le'ments (chapitre ou annexe par exemple)~;
\item
les sauts de page qui sont impose's par l'utilisateur pour des
raisons qui lui sont propres.
\item
les sauts de page qui rappellent un saut de page pre'ce'dent, lorsque celui-ci
traverse plusieurs e'le'ments.
\end{itemize}

Les premiers peuvent e^tre recalcule's par l'e'diteur et sont susceptibles de
se de'placer par rapport a` la structure logique spe'cifique et au contenu du
document lorsqu'il est modifie'. Les seconds sont e'galement place's par
l'e'diteur, mais ils occupent toujours la me^me place dans la structure logique
du document. Les derniers ne peuvent e^tre ni calcule's ni de'place's
automatiquement par l'e'diteur, qui ne peut que les inse'rer ou les supprimer
sur demande de l'utilisateur.

L'indicateur de mise a` jour de la page indique si le contenu de la page
(tout ce qui est compris entre cette marque de page et la suivante) a e'te'
modifie' depuis l'insertion de la marque de page dans le document. Lorsque
l'utilisateur demande de refaire le de'coupage en pages du document, il est
possible gra^ce a` cet indicateur de ne reformater que les pages qui le
ne'cessitent~: on reformate depuis une marque de page portant cet indicateur
(quel que soit le type du saut de page) jusqu'a` la prochaine marque
correspondant a` un saut de page de type utilisateur ou de'but d'e'le'ment.

\subsection{Paires de marques}
\label{paire}

Si la feuille est une marque appartenant a` une paire (c'est indique' dans
le sche'ma de structure), son contenu, entre {\tt Marque-Debut} et
{\tt Marque-Fin}, est un entier code' sur 4 octets qui identifie la paire
de marques de fac,on unique dans tout le document. Ces quatre octets
sont toujours pre'sents.

\begin{verbatim}
Ident-Paire =  NUMERO NUMERO .
\end{verbatim}

\subsection{Re'fe'rences}
\label{refer}

Si la feuille est une re'fe'rence, elle est repre'sente'e par un octet
{\tt Marque-Refer} suivi de l'indication du type de re'fe'rence.
Il y a trois types de re'fe'rences~:
\begin{itemize}
\item
les {\it renvois} qui de'signent simplement un e'le'ment d'un document,
\item
les {\it inclusions sans expansion} qui repre'sentent un document qui doit
e^tre inclus a` la position de cette re'fe'rence, mais sans copie a` l'e'cran
du document inclus.
\item
les {\it inclusions avec expansion} qui repre'sentent un e'le'ment qui doit
e^tre inclus a` la position de cette re'fe'rence, mais avec copie a` l'e'cran
de l'e'le'ment inclus.
\end{itemize}
Le type de re'fe'rence est repre'sente' par un octet ({\tt Marque-Renvoi},
{\tt Marque-Inclusion} ou {\tt Marque-Expansion}). Cet octet est suivi d'un
boole'en marquant s'il s'agit d'une re'fe'rence interne ({\tt Vrai}) ou
externe ({\tt Faux}).
Il y a en effet deux sortes de re'fe'rences, inde'pendemment\footnote{Notons
cependant que les inclusions sans expansion sont toujours des re'fe'rences
externes puisqu'elles de'signent tout un document.} de leur type~:
\begin{itemize}
\item
les re'fe'rences internes~: la re'fe'rence et l'e'le'ment qu'elle de'signe
appartiennent au me^me document,
\item
les re'fe'rence externes~: la re'fe'rence et l'e'le'ment qu'elle de'signe
appartiennent a` des documents diffe'rents.
\end{itemize}
Apre`s le boole'en vient le label de l'e'le'ment de'signe' par la re'fe'rence
(voir page~\pageref{label} pour la repre'sentation du label) et, dans le cas
des re'fe'rences externes, le nom du document contenant l'objet de'signe' par
la re'fe'rence. Ce nom est une simple suite de caracte`res termine'e par un
octet nul.

Notons que l'e'le'ment de'signe' peut se trouver aussi bien avant qu'apre`s
la re'fe'rence qui le de'signe. La re'fe'rence peut aussi ne pas e^tre
affecte'e~; dans ce cas le label est une chai^ne vide.

\begin{verbatim}
Reference =         Marque-Refer TypeReference Designation .
Marque-Refer =      O18 .
TypeReference =     Marque-Renvoi /
                    Marque-Inclusion /
                    Marque-Expansion .
Designation =       Vrai Label /
                    Faux Label Nom-Document .
Marque-Renvoi =     'r' .
Marque-Inclusion =  'i' .
Marque-Expansion =  'e' .
\end{verbatim}

\subsection{Constantes et parame`tres}

S'il s'agit d'une constante, il n'y a pas de contenu, puisque
le nume'ro de type permet de retrouver, dans le sche'ma de structure, la
valeur de la constante utilise'e.

\begin{verbatim}
Constante =       NIL .
\end{verbatim}

De me^me, s'il s'agit de l'utilisation d'un parame`tre dans le document
(et non de la de'finition de sa valeur, qui se trouve au de'but du fichier),
il n'y a pas de contenu, puisque la valeur, s'il y en a une, est unique et
a de'ja` e'te' indique'e au de'but du fichier pivot.

\begin{verbatim}
Parametre =       NIL .
\end{verbatim}

\subsection{Ele'ments structure's}

S'il s'agit d'un e'le'ment structure', le contenu est forme' d'un octet
{\tt Marque-Debut}, suivi de la suite des repre'sentations de chacun des
e'le'ments qu'il contient au niveau imme'diatement infe'rieur, et d'un
octet {\tt Marque-Fin}. Si cet e'le'ment est vide, son contenu est simplement
marque' par les deux octets {\tt Marque-Debut} et {\tt Marque-Fin}.

\begin{verbatim}
Elem-Struct =     Marque-Debut  Suite-Elem  Marque-Fin .
Suite-Elem =    < Element > .
\end{verbatim}

\section{Codage des e'le'ments graphiques et des symboles}

Dans le fichier pivot des documents Thot, les e'le'ments de base graphiques et
symboles sont repre'sente's par un caracte`re avec la convention suivante~: \\
Graphique~:
\label{pagegraph}

\begin{description}
\item{ {\tt 'C' } }un cercle inscrit dans la boi^te~: $\bigcirc$
\item{ {\tt 'R' } }un rectangle qui est le contour de la boi^te
\item{ {\tt 'c' } }un rectangle qui est le contour de la boi^te, avec les coins arondis
\item{ {\tt '0'..'9' } }une trame a` l'inte'rieur de la boi^te, le contour de
la boi^te est trace'
\item{ {\tt '\verb+\+260'..'\verb+\+270' } }une trame a` l'inte'rieur de la boi^te, 
le contour de la boi^te n'est pas trace'
\item{ {\tt 't' } }un trait horizontal~: le co^te' supe'rieur de la boi^te~: ---
\item{ {\tt 'h' } }un trait horizontal de la longueur de la boi^te, au milieu
de la boi^te~: ---
\item{ {\tt 'b' } }un trait horizontal~: le co^te' infe'rieur de la boi^te~: \_\_
\item{ {\tt '>' } }une fle`che vers la droite au milieu de la boi^te, de la longueur de la boi^te~: $\rightarrow$
\item{ {\tt '<' } }une fle`che vers la gauche au milieu de la boi^te, de la longueur de la boi^te~: $\leftarrow$
\item{ {\tt 'l' } }un trait vertical~: le co^te' gauche de la boi^te~: $\mid$
\item{ {\tt 'v' } }un trait vertical au milieu de la boi^te, de la hauteur de la boi^te~: $\mid$
\item{ {\tt 'r' } }un trait vertical~: le co^te' droit de la boi^te~: $\mid$
\item{ {\tt '\^{}'} } une fle`che vers le haut au milieu de la boi^te, de la hauteur de la boi^te~: $\uparrow$
\item{ {\tt 'V' } }une fle`che vers le bas au milieu de la boi^te, de la hauteur de la boi^te~: $\downarrow$
\item{ {\tt '/' } }la diagonale Sud-Ouest Nord-Est de la boi^te~: /
\item{ {\tt '} $\backslash$ {\tt '} } la diagonale Nord-Ouest Sud-Est de la boi^te~: $\backslash$
\item{ {\tt 'O' } }la diagonale Nord-Ouest Sud-Est de la boi^te, avec une fle`che en haut~: $\nwarrow$
\item{ {\tt 'e ' } }la diagonale Nord-Ouest Sud-Est de la boi^te, avec une fle`che en bas~: $\searrow$
\item{ {\tt 'E ' } }la diagonale Sud-Ouest Nord-Est de la boi^te, avec une fle`che en haut~: $\nearrow$
\item{ {\tt 'o' } }la diagonale Sud-Ouest Nord-Est de la boi^te, avec une fle`che en bas~: $\swarrow$
\item{ {\tt ' ' } }un e'le'ment transparent~:
\item{ {\tt 'P' }} un rectangle aux coins arrondis avec une barre horizontale en haut
\item{ {\tt 'Q' }} une ellipse avec une barre horizontale en haut~: $\bigcirc$
\item{ {\tt 'W' }} un coin sup\'{e}rieur droit~: $\rceil$
\item{ {\tt 'X' }} un coin inf\'{e}rieur droit~: $\rfloor$
\item{ {\tt 'Y' }} un coin inf\'{e}rieur gauche~: $\lfloor$
\item{ {\tt 'Z' }} un coin sup\'{e}rieur gauche~: $\lceil$
\end{description}

Symbole~:

\begin{description}
\item{ {\tt 'r' } }un radical de la taille de la boi^te~: $\surd$
\item{ {\tt 'i' } }une inte'grale simple de la hauteur de la boi^te~: $\int$
\item{ {\tt 'c' } }une inte'grale curviligne de la hauteur de la boi^te~: $\oint$
\item{ {\tt 'd' } }une inte'grale double de la hauteur de la boi^te~: $\int\int$
\item{ {\tt 't' } }une inte'grale triple de la hauteur de la boi^te~: $\int\int\int$
\item{ {\tt 'S' } }le symbole de la sommation, de la taille de la boi^te~: $\sum$
\item{ {\tt 'P' } }le symbole du produit de la taille de la boi^te~: $\prod$
\item{ {\tt 'U' } }le symbole de l'union de la taille de la boi^te~: $\cup$
\item{ {\tt 'I' } }le symbole de l'intersection de la taille de la boi^te~: $\cap$
\item{ {\tt '>' } }une fle`che a` droite, de la longueur de la boi^te~: $\rightarrow$
\item{ {\tt '<' } }une fle`che a` gauche, de la longueur de la boi^te~: $\leftarrow$
\item{ {\tt '\^{}'} } une fle`che vers le haut, de la hauteur de la boi^te~: $\uparrow$
\item{ {\tt 'V' } }une fle`che vers le bas, de la hauteur de la boi^te~: $\downarrow$
\item{ {\tt '(' } }une parenthe`se ouvrante, de la hauteur de la boi^te~: (
\item{ {\tt ')' } }une parenthe`se fermante, de la hauteur de la boi^te~: )
\item{ {\tt '\{' } }une accolade ouvrante, de la hauteur de la boi^te~: \{
\item{ {\tt '\}' } }une accolade fermante, de la hauteur de la boi^te~: \}
\item{ {\tt '[' } }un crochet ouvrant, de la hauteur de la boi^te~: [
\item{ {\tt ']' } }un crochet fermant, de la hauteur de la boi^te~: ]
\end{description}

\newpage
\section{Grammaire du format pivot}

Les re`gles suivantes de'finissent la structure d'un fichier de re'fe'rences
externes entrantes.

\begin{verbatim}
Fichier-Ref-Ext =    Elem-Ref < Elem-Ref > .
Elem-Ref =           Label Doc-Externe < Doc-Externe > .

Label =              Marque-Label-Chaine CHAINECAR /
                     Marque-Label-Court Numero-Label-Court /
                     Marque-Label-Long Numero-Label-Long .
Marque-Label-Chaine = O11 .
Marque-Label-Court = O12 .
Marque-Label-Long =  O13 .
Numero-Label-Court = NUMERO .
Numero-Label-Long =  NUMERO NUMERO .

Doc-Externe =        Marque-Doc-Ext Nom-Document .
Marque-Doc-Ext =     O15 .
Nom-Document =       CHAINECAR .
\end{verbatim}

Les re`gles suivantes de'finissent la structure d'un fichier de re'fe'rences
a` modifier.

\begin{verbatim}
Fichier-Ref-Modif = El-Ext-Modif < El-Ext-Modif > .
El-Ext-Modif =      Ancien-Label Nouveau-Label
                    Ancien-Doc Nouveau-Doc .
Ancien-Label =      Label .
Nouveau-Label =     Label .
Ancien-Doc =        Doc-Externe .
Nouveau-Doc =       Doc-Externe .
\end{verbatim}

Les re`gles suivantes de'finissent la structure d'un fichier pivot.

\begin{verbatim}
Fichier-Pivot = [ Version ]
                [ Label ]
                < Marque-Langue Nom-Langue >
                [ Commentaire ]
                  Classe-Document
                < Classe-Objet >
                < Marque-Param Param >
                < Marque-Associe Suite-Associes >
                  Marque-Document Le-Document Marque-Fin-Document .

Version =         Marque-Version Marque-Version Numero-Version .
Marque-Version =  O22 .
Numero-Version =  OCTET .

Marque-Langue =   O8 .
Nom-Langue =      CHAINECAR .

Commentaire =     Marque-Commentaire Longueur-Commentaire
                         Contenu-Commentaire /
                  Marque-Commentaire-Ancien Marque-Debut
                         Texte-Commentaire Marque-Fin .
Marque-Commentaire =        O5 .
Longueur-Commentaire =      NUMERO .
Contenu-Commentaire =       CHAINEOCT .
Marque-Commentaire-Ancien = O3 .
Marque-Debut =              O4 .
Texte-Commentaire =         CHAINECAR .
Marque-Fin =                O6 .

Classe-Document = Classe .
Classe-Objet =    Classe .
Classe =          Marque-ClassExt Nom-Schema-Struct
                  [ Code-Schema-Struct ] NomSchema-Pres .
Marque-ClassExt = Marque-Classe / Marque-Extension .
Marque-Classe =   O14 .
Marque-Extension =O10 .
Nom-Schema-Struct=CHAINECAR .
Code-Schema-Struc=NUMERO .
NomSchema-Pres =  CHAINECAR .

Marque-Param =    O16 .
Param =           Element .

Marque-Associe =  O2 .
Suite-Associes =  Element < Element > .

Marque-Document = O19 .
Le-Document =     Element .
Marque-Fin-Document = O26 .

Element =         Type-Element
                [ Marque-Inclus TypeReference
                          Designation [ Marque-SemiExpansion ] ]
                [ Label ]
                [ Marque-Holophraste ]
                < Marque-Attribut  Numero-Classe  Numero-Attribut
                  Valeur-Attribut >
                < Regle-Presentation >
                [ Commentaire ]
                [ Contenu ] .

Type-Element =  [ Marque-Classe Numero-Classe ]
                  Marque-Type Numero-Type.
Numero-Classe =   NUMERO .
Marque-Type =     O20 .
Numero-Type =     NUMERO .

Marque-Inclus =   O9 .
TypeReference =   Marque-Renvoi /
                  Marque-Inclusion /
                  Marque-Expansion .
Marque-Renvoi =   'r' .
Marque-Inclusion ='i' .
Marque-Expansion ='e' .
Marque-SemiExpansion = O21 .

Marque-Holophraste = O23 .

Marque-Attribut = O1 .
Numero-Attribut = NUMERO .
Valeur-Attribut = Valeur-Absolue Signe /
                  Valeur-Texte /
                  TypeReference Designation /
                  Numero-Valeur .
Valeur-Absolue =  NUMERO .
Signe =           '+' / '-' .
Valeur-Texte =    CHAINECAR .
Numero-Valeur =   NUMERO .

Regle-Presentation= Marque-Regle Numero-Vue
                  Type-Boite Contenu-Regle .
Marque-Regle =    O7 .
Numero-Vue =      NUMERO .
Type-Boite =      NUMERO .
Contenu-Regle =   Marque-Hauteur Dimension /
                  Marque-Largeur Dimension /
                  Marque-Position Distance Signe /
                  Marque-Corps Distance /
                  Marque-Style CARACTERE /
                  Marque-Famille CARACTERE /
                  Marque-NoBreak1 Distance /
                  Marque-NoBreak2 Distance /
                  Marque-Ajuste Alignement /
                  Marque-Justif Booleen /
                  Marque-CoupureMots Booleen /
                  Marque-Retrait Distance Signe /
                  Marque-Interligne Distance /
                  Marque-Souligne CARACTERE /
                  Marque-SoulEpaisseur CARACTERE /
                  Marque-StyleTrait CARACTERE /
                  Marque-EpaisseurTrait	Distance /
                  Marque-TrameRemplissage Indice /
                  Marque-CouleurFond Indice /
                  Marque-CouleurTrace Indice /
                  Marque-ImageDescriptor CroppingFrame 
                                         ImagePresentation 
                                         ImageType .

Marque-Hauteur =  'H' .
Marque-Largeur =  'L' .
Dimension =       Type-Dimension Valeur Unite-Dimension Signe .
Type-Dimension =  Absolue / Relative .
Absolue =         'A' .
Relative =        'R' .
Valeur =          NUMERO .
Unite-Dimension=  Point-Typo / Caracteres / Pour-Cent .
Point-Typo =      'P' .
Caracteres =      'C' .
Pour-Cent =       '%' .

Marque-Position =  Marque-Position-X / Marque-Position-Y .
Marque-Position-X = 'X' .
Marque-Position-Y = 'Y' .
Distance =        Valeur Unite .
Unite =           Point-Typo / Caracteres .

Marque-Corps =    'T' .
Marque-Style =    'S' .
Marque-Famille =  'F' .

Marque-NoBreak1 = '1' .
Marque-NoBreak2 = '2' .

Marque-Ajuste =   'A' .
Alignement =      Align-Gauche / Align-Droite / Centre / Pointille .
Align-Gauche =    'G' .
Align-Droite =    'D' .
Centre =          'C' .
Pointille =       'P' .

Marque-Justif =   'J' .
Booleen =         Vrai / Faux .
Vrai =            'V' .
Faux =            'F' .

Marque-CoupureMots =    'C' .
Marque-Retrait =        'R' .
Marque-Interligne =     'I' .
Marque-Souligne =       'U' .
Marque-SoulEpaisseur =  'E' .
Marque-StyleTrait =     'l' .
Marque-EpaisseurTrait = 'W' .
Marque-TrameRemplissage='p' .
Marque-CouleurFond =    'b' .
Marque-CouleurTrace =   't' .

Indice =           NUMERO .

Marque-ImageDescriptor = 'P' .
CroppingFrame =     X Y Largeur Hauteur .
ImagePresentation = CARACTERE .
ImageType =         NUMERO .
X =                 NUMERO .
Y =                 NUMERO .
Largeur =           NUMERO .
Hauteur =           NUMERO .

Contenu =         Feuille / Reference / Constante /
                  Parametre / Elem-Struct .

Feuille =       [ Alphab-Langue ] Marque-Debut Contenu-Feuille
                  Marque-Fin.
Alphab-Langue =   Alphabet / Langue .
Alphabet =        CARACTERE .
Langue =          Marque-Langue Numero-Langue .
Numero-Langue =   OCTET .
Contenu-Feuille = CHAINECAR / CARACTERE / Indic-Page / Ident-Paire .

Indic-Page =      Numero-Page Numero-Vue Type-Page Page-Modif .
Numero-Page =     NUMERO .
Type-Page =       Calcule / Debut / Utilisateur / Rappel .
Calcule =         'C' .
Debut =           'D' .
Utilisateur =     'U' .
Rappel =          'R' .
Page-Modif =      Booleen .

Ident-Paire =     NUMERO NUMERO .

Reference =         Marque-Refer TypeReference Designation .
Marque-Refer =      O18 .
Designation =       Vrai Label /
                    Faux Label Nom-Document .

Constante =       NIL .

Parametre =       NIL .

Elem-Struct =     Marque-Debut  Suite-Elem  Marque-Fin .
Suite-Elem =    < Element > .

END
\end{verbatim}

\newpage

\tableofcontents

\end{document}
