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

261 lines
11 KiB
Plaintext
Raw Permalink Normal View History

2011-08-28 15:59:50 +08:00
<TeXmacs|1.0.1.11>
<style|tmdoc>
<\body>
<expand|tmdoc-title|Cadres produits par l'outil typographique>
<section|Introduction>
L'outil de composition de <apply|TeXmacs> traduit un document repr<70>sent<6E>
par un arbre en un cadre graphique, qui peut <20>tre affich<63> sur l'<27>cran ou
imprim<69>. Contrairement <20> <apply|LaTeX>, le cadre graphique contient
beaucoup plus d'informations qu'il n'est n<>cessaire pour un rendu
graphique. En gros, ces informations peuvent <20>tre rang<6E>es dans les
cat<61>gories suivantes :
<\itemize>
<item>Cadres physique et logique.
<item>M<>thode de rendu graphique.
<item>Diverses donn<6E>es typographiques.
<item>Trace du sous-arbre source qui a conduit au cadre.
<item>Calcul des positions des curseurs et des s<>lections.
<item>Gestionnaires d'<27>v<EFBFBD>nements pour le contenu dynamique.
</itemize>
Le cadre logique est utilis<69>e par le composeur pour positionner le cadre
par rapport aux autres. D'autres informations, telle l'inclinaison du
cadre, sont aussi sauvegard<72>es pour que le composeur puisse en faire usage.
Le cadre physique contient la repr<70>sentation graphique du cadre. Cette
information sert <20> redessiner partiellement un cadre de mani<6E>re efficiente.
Pour positionner le curseur ou pour faire une s<>lection, il faut avoir une
correspondance entre les positions logiques dans l'arbre source et les
positions physiques dans les cadres compos<6F>s. En fait, les cadres et leurs
sous-cadres sont organis<69>s logiquement comme des arbres. Les cadres
fournissent des routines de traduction entre les chemins dans l'arbre du
cadre et l'arbre source, et pour trouver le chemin associ<63> <20> un point
graphique.
<section|Correspondance entre un cadre et son source>
<subsection|Probl<62>mes <20> r<>soudre>
Pour impl<70>menter la correspondance entre les chemins dans l'arbre source et
l'arbre du cadre, il faut surmonter plusieurs types de difficult<6C>s en m<>me
temps :
<\enumerate>
<item>La correspondance peut ne pas <20>tre directe <20> cause des sauts de
lignes, des notes en base de page et de l'expansion des macros.
<item>La correspondance doit <20>tre relativement efficiente du point de vue
de l'espace et du temps.
<item>Certains cadres, tels les en-t<>tes et les pieds de page ou le
r<>sultat de certains expansions de macros, peuvent ne pas <20>tre
<space|0.2spc>accessibles<space|0.2spc>. Bien qu'on puisse trouver une
position du curseur pour cliquer dessus, le contenu d'un tel cadre n'est
pas directement <20>ditable.
<item>La correspondance doit <20>tre relativement compl<70>te (voir section
suivante).
</enumerate>
La premi<6D>re difficult<6C> nous oblige <20> stocker dans l'arbre d'<27>dition un
chemin pour tout cadre. Pour gagner de la place, ce chemin est stock<63> en
ordre inverse de fa<66>on <20> ce que les sommets communs puissent <20>tre partag<61>s.
Ce partage des sommets communs est aussi n<>cessaire pour changer rapidement
les emplacements du source quand on modifie l'arbre source, par exemple
lorsqu'on ins<6E>re un nouveau paragraphe.
Pour surmonter la troisi<73>me difficult<6C>, le chemin inverse peut d<>buter par
un nombre n<>gatif qui indique que le cadre ne peut <20>tre <20>dit<69> directement
(on dit alors que le cadre est une d<>coration). Dans ce cas, la fin du
chemin inverse correspond <20> l'emplacement, dans l'arbre source, o<> le
curseur est positionn<6E> lorsque l'on clique sur le cadre. Le nombre n<>gatif
a une influence sur la fa<66>on dont ceci est r<>alis<69>.
<subsection|Trois sortes de chemins>
Il faut g<>rer trois sortes de chemins :
<\description>
<expand|item*|Chemins d'arbres.>Ces chemins correspondent aux chemins
dans l'arbre source. En fait, le chemin amput<75> de son dernier <20>l<EFBFBD>ment
pointer sur un sous-arbre de l'arbre source. Le dernier <20>l<EFBFBD>ment donne la
position dans ce sous-arbre : si le sous-arbre est une feuille,
c'est-<2D>-dire une cha<68>ne, c'est la position dans cette cha<68>ne. Autrement,
un 0 indique une position avant le sous-arbre, un 1 une position apr<70>s le
sous-arbre.
<expand|item*|Chemins inverses.>Ce sont les chemins construits en
inversant les chemins d'arbres (avec une fin de chemin commune) ; ils
peuvent avec une en-t<>te n<>gative. Une en-t<>te n<>gative indique que le
chemin d'arbre n'est pas accessible, c'est-<2D>-dire que le sous-arbre
correspondant ne repr<70>sente pas un contenu <20>ditable. Si les valeurs
n<>gatives sont <with|mode|math|-2>, <with|mode|math|-3> ou
<with|mode|math|-4>, alors il faut mettre un 0 ou un 1 derri<72>re le chemin
d'arbre suivant la valeur et la position du curseur.
<expand|item*|Chemins de cadres.>Ces chemins correspondent aux chemins
logiques dans l'arbre de cadre. Le chemin amput<75> de son dernier <20>l<EFBFBD>ment
pointe vers un sous-cadre du cadre principal. Le dernier <20>l<EFBFBD>ment donne la
position dans le sous-arbre : si le sous-cadre correspond <20> un cadre de
texte, c'est la position dans ce texte. Sinon, un 0 indique une position
avant le sous-cadre et un 1 une position apr<70>s le sous-cadre. Dans le cas
de cadres auxiliaires, un 2 ou un 3 peuvent aussi indiquer la position
apr<70>s un indice ou exposant <20> gauche, ou bien avant un indice ou exposant
<20> droite.
</description>
<subsection|Routines de conversion>
Pour impl<70>menter la conversion entre les trois sortes de chemins, chaque
cadre poss<73>de un chemin inverse de r<>f<EFBFBD>rence <verbatim|ip> dans l'arbre
source. Les cadres composites poss<73>dent en plus un chemin de r<>f<EFBFBD>rence
gauche <verbatim|lip> et droit <verbatim|rip>, qui correspondent aux
chemins accessibles juste <20> leur gauche ou juste <20> leur droite dans leurs
sous-cadres (s'il existe de tels sous-cadres).
La routine :
<\verbatim>
\ \ \ \ virtual path box_rep::find_tree_path (path bp)
</verbatim>
transforme un chemin de cadre en un chemin d'arbre. Cette routine (qui
n'utilise que <verbatim|ip>) est rapide et poss<73>de une complexit<69> en temps
lin<69>aire fonction de la longueur des chemins. La routine :
<\verbatim>
\ \ \ \ virtual path box_rep::find_box_path (path p)
</verbatim>
effectue la conversion inverse. Malheureusement, dans le pire des cas, il
peut <20>tre n<>cessaire de rechercher le chemin d'arbre dans tous les
sous-cadres. N<>anmoins, dans le meilleur des cas, un algorithme
dichotomique (qui utilise <verbatim|lip> et <verbatim|rip>) \ trouve la
branche <20> parcourir dans un temps logarithmique. Cet algorithme poss<73>de
aussi une complexit<69> quadratique du temps fonction de la longueur des
chemins, car il faut souvent inverser les chemins.
<section|Curseur et s<>lection>
Pour remplir son r<>le d'<13>diteur structur<75><space|0.2spc>, <apply|TeXmacs>
doit fournir une correspondance (relativement) compl<70>te entre les chemins
d'arbres logiques et les positions physiques du curseur. Ceci conduit <20> des
difficult<6C>s suppl<70>mentaires dans le cas de <space|0.2spc>changement
d'environnement<space|0.2spc>, tel un changement de police ou de couleur.
En effet, quand on se trouve <20> la fronti<74>re d'un tel changement, on ne sait
pas, <with|font shape|italic|a priori>, de fa<66>on pr<70>cise dans quel
environnement on se trouve.
C'est pourquoi, dans <apply|TeXmacs>, la position du curseur contient des
coordonn<6E>es <with|mode|math|x> et <with|mode|math|y>, ainsi qu'une abscisse
infinit<69>simale suppl<70>mentaire, appel<65>e <with|mode|math|\<delta\>>. Par
suite, un changement d'environnement est repr<70>sent<6E> par un cadre de largeur
infinit<69>simale. Bien que la position <with|mode|math|\<delta\>> du curseur
soit toujours 0 quand on utilise la souris pour effectuer une s<>lection,
elle peut ne pas <20>tre nulle quand on se d<>place <20> l'aide des fl<66>ches
directionnelles. La routine en temps lin<69>aire :
<\verbatim>
\ \ \ \ virtual path box_rep::find_box_path (SI x, SI y, SI delta)
</verbatim>
fonction de la longueur du chemin recherche le chemin du cadre qui
correspond <20> la position du curseur. Inversement, la routine :\
<\verbatim>
\ \ \ \ virtual cursor box_rep::find_cursor (box bp)
</verbatim>
m<>ne <20> une repr<70>sentation graphique du curseur pour un chemin de cadre
donn<6E>. Le curseur est d<>fini par ses coordonn<6E>es <with|mode|math|x>,
<with|mode|math|y> et <with|mode|math|\<delta\>> et un segment de ligne
relatif <20> cette origine, d<>fini par ses extr<74>mit<69>s
<with|mode|math|(x<rsub|1>,y<rsub|1>)> et
<with|mode|math|(x<rsub|2>,y<rsub|2>)>.
De m<>me, la routine :
<\verbatim>
\ \ \ \ virtual selection box_rep::find_selection (box lbp, box rbp)
</verbatim>
calcule la s<>lection entre deux chemins de cadres donn<6E>s. Cette s<>lection
comprend deux chemins d'arbre d<>limitant la s<>lection et une repr<70>sentation
graphique sous la forme d'une liste de rectangles.
<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|idx-2|<tuple|<uninit>|?>>
<associate|toc-2|<tuple|2|?>>
<associate|toc-3|<tuple|2.1|?>>
<associate|toc-4|<tuple|2.2|?>>
<associate|toc-5|<tuple|2.3|?>>
<associate|toc-6|<tuple|3|?>>
<associate|toc-7|<tuple|4.|?>>
</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>The correspondence between a box and
its source><value|toc-dots><pageref|toc-2><vspace|0.5fn>
2.1<space|2spc>Discussion of the problems being
encountered<value|toc-dots><pageref|toc-3>
2.2<space|2spc>The three kinds of paths<value|toc-dots><pageref|toc-4>
2.3<space|2spc>The conversion routines<value|toc-dots><pageref|toc-5>
<vspace*|1fn><with|font series|<quote|bold>|math font
series|<quote|bold>|3<space|2spc>The cursor and
selections><value|toc-dots><pageref|toc-6><vspace|0.5fn>
</associate>
</collection>
</auxiliary>