1
0
Fork 0
doc/devel/source/architecture.fr.tm

232 lines
9.7 KiB
Plaintext
Raw Normal View History

2011-08-28 15:59:50 +08:00
<TeXmacs|1.0.1.11>
<style|tmdoc>
<\body>
<expand|tmdoc-title|Architecture g<>n<EFBFBD>rale de <TeXmacs>>
<section|Introduction>
Le programme <apply|TeXmacs> a <20>t<EFBFBD> <20>crit en C++. Vous devez utiliser
<verbatim|g++> et l'utilitaire <verbatim|makefile> pour compiler
<apply|TeXmacs>. <20> l'heure actuelle, le source (situ<74> dans le r<>pertoire
<verbatim|src>) de <apply|TeXmacs> est ventil<69> en plusieurs parties dans
diff<66>rents r<>pertoires :
<\itemize>
<item>Un jeu de structures de donn<6E>es de base et g<>n<EFBFBD>riques dans le
r<>pertoire <verbatim|Basic>.
<item>Des ressources standards pour <apply|TeXmacs>, tels les polices
<apply|TeX>, les langages, encodages et dictionnaires dans le r<>pertoire
<verbatim|Resource>.
<item>Une bo<62>te <20> outils graphiques (avec sa documentation pas tr<74>s <20>
jour) dans le r<>pertoire <verbatim|Window>.
<item>Le langage d'extension pour <apply|TeXmacs> dans le r<>pertoire
<verbatim|Prg>.
<item>La partie typographique de l'<27>diteur dans le r<>pertoire
<verbatim|src/Typeset>.
<item>L'<27>diteur dans le r<>pertoire <verbatim|src/Edit>.
<item>Le serveur <apply|TeXmacs> dans le r<>pertoire
<verbatim|src/Server>.
</itemize>
Toutes ces parties utilisent les structures de donn<6E>es d<>finies dans
<verbatim|Basic>. La bo<62>te <20> outils graphiques d<>pend de
<verbatim|Resource> en ce qui concerne les polices <apply|TeX>. Le langage
d'extension est ind<6E>pendant de <verbatim|Resource> et de <verbatim|Window>.
La partie typographique s'appuie sur toutes les autres parties, sauf
<verbatim|Prg>. L'<27>diteur et le serveur <apply|TeXmacs> utilisent toutes
les autres parties.
Les donn<6E>es de <apply|TeXmacs> sont contenues dans le r<>pertoire
<verbatim|edit> qui correspond <20> la distribution <apply|TeXmacs> sans code
source. En gros, on a les types de donn<6E>es suivantes :
<\itemize>
<item>Donn<6E>es concernant les polices dans <verbatim|fonts> (encodage,
fichiers<verbatim|.pk>, etc...).
<item>Donn<6E>es concernant les langages dans <verbatim|languages> (mod<6F>les
de c<>sure, dictionnaires, etc...).
<item>Styles de document dans <verbatim|style>.
<item>Initialisation et autres programmes <apply|scheme> dans
<verbatim|progs>.
</itemize>
Le r<>pertoire <verbatim|misc> contient diverses donn<6E>es, telle l'ic<69>ne
d'<27>dition (<verbatim|misc/pixmaps/traditional/--x17/edit.xpm>).
<section|Repr<70>sentation interne des textes>
<apply|TeXmacs> repr<70>sente tous les textes par des arbres (pour un texte
donn<6E>e, l'arbre correspondant est appel<65> <em|arbre d'<27>dition>). Les noeuds
d'un tel arbre sont <20>tiquet<65>s par des <em|op<6F>rateurs> standards dont la
liste figure dans les fichiers <verbatim|Basic/Data/tree.hpp> et
<verbatim|Basic/Data/tree.cpp>. Les <20>tiquettes des feuilles des arbres sont
des cha<68>nes, qui sont visibles (le texte r<>el) ou invisibles (telles les
longueurs ou les d<>finitions de macros).
Le sens du texte et la mani<6E>re dont il est typographi<68> d<>pendent
essentiellement de l'environnement actif. L'environnement consiste
principalement en une table de hachage de type
<verbatim|rel_hashmap\<less\>string,tree\<gtr\>>, c'est-<2D>-dire une table de
correspondance entre les variables d'environnement et leur valeur dans
l'arbre. Le langage actif et la police courante sont des exemples de
variables d'environnement ; de nouvelles variables peuvent <20>tre d<>finies
par l'utilisateur.
<subsection|Texte>
Dans <apply|TeXmacs>, toutes les cha<68>nes de texte sont constitu<74>es de
suites de symboles universels ou sp<73>ciaux. Un symbole sp<73>cial est un
caract<63>re, diff<66>rent de <verbatim|'\\0'>, <verbatim|'\<less\>'> ou
<verbatim|'\<gtr\>'>. Son sens peut varier en fonction de la police avec
laquelle il est utilis<69>. Un symbole universel est une cha<68>ne commen<65>ant par
<verbatim|'\<less\>'>, suivi d'une suite arbitraire de caract<63>res diff<66>rent
de <verbatim|'\\0'>, <verbatim|'\<less\>'> ou <verbatim|'\<gtr\>'>, et se
terminant par <verbatim|'\<gtr\>'>. Le sens des caract<63>res universels ne
d<>pend pas de la police avec laquelle ils sont utilis<69>s, mais des polices
diff<66>rentes peuvent les rendre de fa<66>on diff<66>rente.
<subsection|langage>
Le langage d'un texte est capable de fournir une analyse s<>mantique
d<>taill<6C>e d'une phrase du texte. Il peut, au minimum, d<>couper la phrase en
<em|mots> (qui sont de plus petites phrases) et donner <20> l'outil
typographique des informations sur les espaces d<>sir<69>es entre les mots et
sur les c<>sures <20> appliquer. Plus tard, il se peut qu'on ajoute d'autres
s<>mantiques aux langages. Par exemple, on pourrait impl<70>menter des
correcteurs orthographiques pour les langages naturels et des analyseurs
syntaxiques pour les formules math<74>matiques et les langages de
programmation.
<section|Composition des textes>
En gros, l'outil typographique de <apply|TeXmacs> prend un arbre en entr<74>e
et renvoie un cadre en acc<63>dant et en modifiant l'environnement
typographique. La classe <verbatim|box> est multifonctionnelle. Sa m<>thode
principale est utilis<69>e pour afficher le cadre sur un p<>riph<70>rique
PostScript (soit l'<27>cran, soit une imprimante). Mais elle contient aussi de
nombreuses donn<6E>es de composition, tels les cadres logiques et les cadres
d'encre, la position des scripts, etc...
Les cadres servent aussi <20> passer d'un curseur physique (position sur
l'<27>cran) <20> un curseur logique (chemin dans l'arbre d'<27>dition). En fait, les
cadres sont, eux aussi, organis<69>s sous forme d'arbre, ce qui facilite la
conversion. N<>anmoins, les routines de conversion peuvent <20>tre tr<74>s
complexes du fait de l'expansion des macros et des sauts de ligne et de
page. Notez <20>galement qu'en plus d'une position horizontale et verticale le
curseur physique poss<73>de aussi une position horizontale infinit<69>simale. En
gros, cette coordonn<6E>e infinit<69>simale est utilis<69>e dans certains cadres
(par exemple pour les changements de couleur) pour ajouter une largeur
infinit<69>simale.
<section|Modification du texte>
Vous trouverez dans le r<>pertoire <verbatim|Edit/Modify> diff<66>rentes
routines de modification de l'arbre d'<27>dition. Les modifications se
d<>roulent en plusieurs <20>tapes :
<\enumerate>
<item>Un <20>v<EFBFBD>nement en entr<74>e d<>clenche une action, comme par exemple
<verbatim|make_fraction>, qui tente de modifier l'arbre d'<27>dition.
<item>Toutes les modifications que <verbatim|make_fraction> ou ses
sous-routines appliquent <20> l'arbre d'<27>dition sont, en fait, d<>compos<6F>es
en sept routines de modification <20>l<EFBFBD>mentaires : <verbatim|assign>,
<verbatim|insert>, <verbatim|remove>, <verbatim|split>, <verbatim|join>,
<verbatim|ins_unary> et <verbatim|rem_unary>.
<item>Avant d'ex<65>cuter la modification demand<6E>e, la routine de
modification <20>l<EFBFBD>mentaire envoie <20> toutes les vues du texte une
notification concernant la modification.
<item>Lors de la notification, chaque vue met <20> jour plusieurs <20>l<EFBFBD>ments,
comme la position du curseur. Une notification est aussi envoy<6F>e <20>
l'outil de composition du texte, car il maintient une liste des
paragraphes d<>j<EFBFBD> compos<6F>s.
<item>Lorsque toutes les vues ont re<72>u notification de la modification,
elle est alors r<>ellement ex<65>cut<75>e.
<item>Chaque action utilisateur, tels la frappe sur une touche ou un clic
de souris, est responsable de l'insertion de <em|points d'annulation>
entre les suites de modifications <20>l<EFBFBD>mentaires. Lorsqu'une modification
est annul<75>e, l'<27>dition revient au point d'annulation pr<70>c<EFBFBD>dent.
</enumerate>
<apply|tmdoc-copyright|1998--2003|Joris van der Hoeven|Mich<63>le Garoche>
<expand|tmdoc-license|Permission is granted to copy, distribute and/or
modify this document under the terms of the GNU Free Documentation License,
Version 1.1 or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included in the section entitled
"GNU Free Documentation License".>
</body>
<\initial>
<\collection>
<associate|paragraph width|150mm>
<associate|odd page margin|30mm>
<associate|shrinking factor|4>
<associate|page right margin|30mm>
<associate|page top margin|30mm>
<associate|reduction page right margin|25mm>
<associate|page type|a4>
<associate|reduction page bottom margin|15mm>
<associate|even page margin|30mm>
<associate|reduction page left margin|25mm>
<associate|page bottom margin|30mm>
<associate|reduction page top margin|15mm>
<associate|language|french>
</collection>
</initial>
<\references>
<\collection>
<associate|idx-1|<tuple|<uninit>|?>>
<associate|toc-1|<tuple|1|?>>
<associate|toc-2|<tuple|2|?>>
<associate|idx-2|<tuple|<uninit>|?>>
<associate|toc-3|<tuple|2.1|?>>
<associate|toc-4|<tuple|2.2|?>>
<associate|toc-5|<tuple|3|?>>
<associate|toc-6|<tuple|4|?>>
<associate|toc-7|<tuple|<uninit>|?>>
</collection>
</references>
<\auxiliary>
<\collection>
<\associate|toc>
<vspace*|1fn><with|font series|<quote|bold>|math font
series|<quote|bold>|1<space|2spc>Introduction><value|toc-dots><pageref|toc-1><vspace|0.5fn>
<vspace*|1fn><with|font series|<quote|bold>|math font
series|<quote|bold>|2<space|2spc>Intern representation of
texts><value|toc-dots><pageref|toc-2><vspace|0.5fn>
2.1<space|2spc>Text<value|toc-dots><pageref|toc-3>
2.2<space|2spc>The language<value|toc-dots><pageref|toc-4>
<vspace*|1fn><with|font series|<quote|bold>|math font
series|<quote|bold>|3<space|2spc>Typesetting
texts><value|toc-dots><pageref|toc-5><vspace|0.5fn>
<vspace*|1fn><with|font series|<quote|bold>|math font
series|<quote|bold>|4<space|2spc>Making modifications in
texts><value|toc-dots><pageref|toc-6><vspace|0.5fn>
</associate>
</collection>
</auxiliary>