mirror of https://github.com/texmacs/doc.git
261 lines
11 KiB
Plaintext
261 lines
11 KiB
Plaintext
|
<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>
|