Minor improvement for correct handling of sectional tags
[texmacs.git] / doc / devel / source / architecture.fr.tm
blob913201d96d9c537cb82de77e8d8a5afe9639e6d3
1 <TeXmacs|1.0.1.11>
3 <style|tmdoc>
5 <\body>
6   <expand|tmdoc-title|Architecture générale de <TeXmacs>>
8   <section|Introduction>
10   Le programme <apply|TeXmacs> a été écrit en C++. Vous devez utiliser
11   <verbatim|g++> et l'utilitaire <verbatim|makefile> pour compiler
12   <apply|TeXmacs>. À l'heure actuelle, le source (situé dans le répertoire
13   <verbatim|src>) de <apply|TeXmacs> est ventilé en plusieurs parties dans
14   différents répertoires :
16   <\itemize>
17     <item>Un jeu de structures de données de base et génériques dans le
18     répertoire <verbatim|Basic>.
20     <item>Des ressources standards pour <apply|TeXmacs>, tels les polices
21     <apply|TeX>, les langages, encodages et dictionnaires dans le répertoire
22     <verbatim|Resource>.
24     <item>Une boîte à outils graphiques (avec sa documentation pas très à
25     jour) dans le répertoire <verbatim|Window>.
27     <item>Le langage d'extension pour <apply|TeXmacs> dans le répertoire
28     <verbatim|Prg>.
30     <item>La partie typographique de l'éditeur dans le répertoire
31     <verbatim|src/Typeset>.
33     <item>L'éditeur dans le répertoire <verbatim|src/Edit>.
35     <item>Le serveur <apply|TeXmacs> dans le répertoire
36     <verbatim|src/Server>.
37   </itemize>
39   Toutes ces parties utilisent les structures de données définies dans
40   <verbatim|Basic>. La boîte à outils graphiques dépend de
41   <verbatim|Resource> en ce qui concerne les polices <apply|TeX>. Le langage
42   d'extension est indépendant de <verbatim|Resource> et de <verbatim|Window>.
43   La partie typographique s'appuie sur toutes les autres parties, sauf
44   <verbatim|Prg>. L'éditeur et le serveur <apply|TeXmacs> utilisent toutes
45   les autres parties.
47   Les données de <apply|TeXmacs> sont contenues dans le répertoire
48   <verbatim|edit> qui correspond à la distribution <apply|TeXmacs> sans code
49   source. En gros, on a les types de données suivantes :
51   <\itemize>
52     <item>Données concernant les polices dans <verbatim|fonts> (encodage,
53     fichiers<verbatim|.pk>, etc...).
55     <item>Données concernant les langages dans <verbatim|languages> (modèles
56     de césure, dictionnaires, etc...).
58     <item>Styles de document dans <verbatim|style>.
60     <item>Initialisation et autres programmes <apply|scheme> dans
61     <verbatim|progs>.
62   </itemize>
64   Le répertoire <verbatim|misc> contient diverses données, telle l'icône
65   d'édition (<verbatim|misc/pixmaps/edit.xpm>).
67   <section|Représentation interne des textes>
69   <apply|TeXmacs> représente tous les textes par des arbres (pour un texte
70   donnée, l'arbre correspondant est appelé <em|arbre d'édition>). Les noeuds
71   d'un tel arbre sont étiquetés par des <em|opérateurs> standards dont la
72   liste figure dans les fichiers <verbatim|Basic/Data/tree.hpp> et
73   <verbatim|Basic/Data/tree.cpp>. Les étiquettes des feuilles des arbres sont
74   des chaînes, qui sont visibles (le texte réel) ou invisibles (telles les
75   longueurs ou les définitions de macros).
77   Le sens du texte et la manière dont il est typographié dépendent
78   essentiellement de l'environnement actif. L'environnement consiste
79   principalement en une table de hachage de type
80   <verbatim|rel_hashmap\<less\>string,tree\<gtr\>>, c'est-à-dire une table de
81   correspondance entre les variables d'environnement et leur valeur dans
82   l'arbre. Le langage actif et la police courante sont des exemples de
83   variables d'environnement ; de nouvelles variables peuvent être définies
84   par l'utilisateur.
86   <subsection|Texte>
88   Dans <apply|TeXmacs>, toutes les chaînes de texte sont constituées de
89   suites de symboles universels ou spéciaux. Un symbole spécial est un
90   caractère, différent de <verbatim|'\\0'>, <verbatim|'\<less\>'> ou
91   <verbatim|'\<gtr\>'>. Son sens peut varier en fonction de la police avec
92   laquelle il est utilisé. Un symbole universel est une chaîne commençant par
93   <verbatim|'\<less\>'>, suivi d'une suite arbitraire de caractères différent
94   de <verbatim|'\\0'>, <verbatim|'\<less\>'> ou <verbatim|'\<gtr\>'>, et se
95   terminant par <verbatim|'\<gtr\>'>. Le sens des caractères universels ne
96   dépend pas de la police avec laquelle ils sont utilisés, mais des polices
97   différentes peuvent les rendre de façon différente.
99   <subsection|langage>
101   Le langage d'un texte est capable de fournir une analyse sémantique
102   détaillée d'une phrase du texte. Il peut, au minimum, découper la phrase en
103   <em|mots> (qui sont de plus petites phrases) et donner à l'outil
104   typographique des informations sur les espaces désirées entre les mots et
105   sur les césures à appliquer. Plus tard, il se peut qu'on ajoute d'autres
106   sémantiques aux langages. Par exemple, on pourrait implémenter des
107   correcteurs orthographiques pour les langages naturels et des analyseurs
108   syntaxiques pour les formules mathématiques et les langages de
109   programmation.
111   <section|Composition des textes>
113   En gros, l'outil typographique de <apply|TeXmacs> prend un arbre en entrée
114   et renvoie un cadre en accédant et en modifiant l'environnement
115   typographique. La classe <verbatim|box> est multifonctionnelle. Sa méthode
116   principale est utilisée pour afficher le cadre sur un périphérique
117   PostScript (soit l'écran, soit une imprimante). Mais elle contient aussi de
118   nombreuses données de composition, tels les cadres logiques et les cadres
119   d'encre, la position des scripts, etc...
121   Les cadres servent aussi à passer d'un curseur physique (position sur
122   l'écran) à un curseur logique (chemin dans l'arbre d'édition). En fait, les
123   cadres sont, eux aussi, organisés sous forme d'arbre, ce qui facilite la
124   conversion. Néanmoins, les routines de conversion peuvent être très
125   complexes du fait de l'expansion des macros et des sauts de ligne et de
126   page. Notez également qu'en plus d'une position horizontale et verticale le
127   curseur physique possède aussi une position horizontale infinitésimale. En
128   gros, cette coordonnée infinitésimale est utilisée dans certains cadres
129   (par exemple pour les changements de couleur) pour ajouter une largeur
130   infinitésimale.
132   <section|Modification du texte>
134   Vous trouverez dans le répertoire <verbatim|Edit/Modify> différentes
135   routines de modification de l'arbre d'édition. Les modifications se
136   déroulent en plusieurs étapes :
138   <\enumerate>
139     <item>Un événement en entrée déclenche une action, comme par exemple
140     <verbatim|make_fraction>, qui tente de modifier l'arbre d'édition.
142     <item>Toutes les modifications que <verbatim|make_fraction> ou ses
143     sous-routines appliquent à l'arbre d'édition sont, en fait, décomposées
144     en sept routines de modification élémentaires : <verbatim|assign>,
145     <verbatim|insert>, <verbatim|remove>, <verbatim|split>, <verbatim|join>,
146     <verbatim|ins_unary> et <verbatim|rem_unary>.
148     <item>Avant d'exécuter la modification demandée, la routine de
149     modification élémentaire envoie à toutes les vues du texte une
150     notification concernant la modification.
152     <item>Lors de la notification, chaque vue met à jour plusieurs éléments,
153     comme la position du curseur. Une notification est aussi envoyée à
154     l'outil de composition du texte, car il maintient une liste des
155     paragraphes déjà composés.
157     <item>Lorsque toutes les vues ont reçu notification de la modification,
158     elle est alors réellement exécutée.
160     <item>Chaque action utilisateur, tels la frappe sur une touche ou un clic
161     de souris, est responsable de l'insertion de <em|points d'annulation>
162     entre les suites de modifications élémentaires. Lorsqu'une modification
163     est annulée, l'édition revient au point d'annulation précédent.
164   </enumerate>
166   <apply|tmdoc-copyright|1998--2003|Joris van der Hoeven|Michèle Garoche>
168   <expand|tmdoc-license|Permission is granted to copy, distribute and/or
169   modify this document under the terms of the GNU Free Documentation License,
170   Version 1.1 or any later version published by the Free Software Foundation;
171   with no Invariant Sections, with no Front-Cover Texts, and with no
172   Back-Cover Texts. A copy of the license is included in the section entitled
173   "GNU Free Documentation License".>
174 </body>
176 <\initial>
177   <\collection>
178     <associate|paragraph width|150mm>
179     <associate|odd page margin|30mm>
180     <associate|shrinking factor|4>
181     <associate|page right margin|30mm>
182     <associate|page top margin|30mm>
183     <associate|reduction page right margin|25mm>
184     <associate|page type|a4>
185     <associate|reduction page bottom margin|15mm>
186     <associate|even page margin|30mm>
187     <associate|reduction page left margin|25mm>
188     <associate|page bottom margin|30mm>
189     <associate|reduction page top margin|15mm>
190     <associate|language|french>
191   </collection>
192 </initial>
194 <\references>
195   <\collection>
196     <associate|idx-1|<tuple|<uninit>|?>>
197     <associate|toc-1|<tuple|1|?>>
198     <associate|toc-2|<tuple|2|?>>
199     <associate|idx-2|<tuple|<uninit>|?>>
200     <associate|toc-3|<tuple|2.1|?>>
201     <associate|toc-4|<tuple|2.2|?>>
202     <associate|toc-5|<tuple|3|?>>
203     <associate|toc-6|<tuple|4|?>>
204     <associate|toc-7|<tuple|<uninit>|?>>
205   </collection>
206 </references>
208 <\auxiliary>
209   <\collection>
210     <\associate|toc>
211       <vspace*|1fn><with|font series|<quote|bold>|math font
212       series|<quote|bold>|1<space|2spc>Introduction><value|toc-dots><pageref|toc-1><vspace|0.5fn>
214       <vspace*|1fn><with|font series|<quote|bold>|math font
215       series|<quote|bold>|2<space|2spc>Intern representation of
216       texts><value|toc-dots><pageref|toc-2><vspace|0.5fn>
218       2.1<space|2spc>Text<value|toc-dots><pageref|toc-3>
220       2.2<space|2spc>The language<value|toc-dots><pageref|toc-4>
222       <vspace*|1fn><with|font series|<quote|bold>|math font
223       series|<quote|bold>|3<space|2spc>Typesetting
224       texts><value|toc-dots><pageref|toc-5><vspace|0.5fn>
226       <vspace*|1fn><with|font series|<quote|bold>|math font
227       series|<quote|bold>|4<space|2spc>Making modifications in
228       texts><value|toc-dots><pageref|toc-6><vspace|0.5fn>
229     </associate>
230   </collection>
231 </auxiliary>