6 <expand|tmdoc-title|Architecture générale de <TeXmacs>>
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 :
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
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
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>.
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
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 :
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
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
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.
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
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
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 :
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.
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".>
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>
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>|?>>
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>