1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
|
\documentstyle[twoside,french]{article}
\pagestyle{headings}
\begin{titlepage}
\title{\bf W2\LaTeX : Traducteur de Formats Descripteurs de Texte}
\author{{Javier Garmendia} \\ {\scriptsize jgarmend@cyberspace.org}\\
{Pour le Centre International de Rencontres Math\'ematiques} \\
{Jean-Louis Maltret} \\ {\scriptsize jlm@cirm.univ-mrs.fr}}
\date{Juin-Juillet 1994}
\end{titlepage}
\begin{document}
\maketitle
\begin{abstract}
W2\LaTeX\ est un outil de conversion entre deux formats descripteurs de texte,
permettant de traduire un document r\'edig\'e sous certaines versions de Word\copyright pour
obtenir du code \LaTeX . Le document source pour W2\LaTeX\ devra \^etre, afin de faciliter la
portabilit\'e, en RTF (Rich Text Format), un format propri\'etaire de
Microsoft\copyright .
\par
W2\LaTeX\ n'utilise pas les fonctions cr\'e\'ees par Paul Dubois pour r\'ealiser des lecteurs RTF.
Ceci pr\'esente en partie l'avantage d'avoir une reconnaissance propre du document d'origine en
suivant les sp\'ecifications de Microsoft pour Word 6.0.
Il est constitu\'e
d'un seul programme executable, sans feuilles de style, sans lybraries \`a installer. On peut attendre
de W2\LaTeX\ une conversion de documents contenant des param\`etres de pr\'esentation et de mise en page, mais
aussi de formules math\'ematiques, et de certains types de tableaux.
\par
Ce document contient des informations techniques sur le programme.
\end{abstract}
\newpage
\pagebreak
\tableofcontents
\newpage
\section{Consid\'erations G\'en\'erales}
\subsection{Les diff\'erents types de tokens}
\par Le but de l'analyseur lexical est de d\'ecouper le texte \`a analyser en tokens
qui seront transmis \`a la fonction r\'ealisant l'analyse gramaticale (que nous appellerons
yyparse). Cette fonction v\'erifie la correction syntaxique du texte original, et d\'etermine \`a
chaque instant
quelle construction a \'et\'e r\'ealis\'ee, et ce que cela repr\'esente.
\par
Nous avons declar\'e plusieurs sortes de tokens, car le type de leur valeur s\'emantique
variera pour certains d'entre eux. Bison (et bien s\^ur Yacc aussi) imposent la limitation suivante au
niveau de l'analyse semantique des tokens: \begin{quote} Seuls les tokens de type char pourront avoir
une valeur s\'emantique permettant de les diff\'erentier gramaticalement. \end{quote}
Ainsi, nous pourrons d\'eclarer des r\`egles
de grammaire du style:
\begin{quote}
expression: terme operateur terme;
\end{quote}
O\`u op\'erateur est un {\bf +} ou un {\bf-}; Mais il est aussi possible de faire:
\begin{quote}
expression: terme '+' terme $|$ terme '-' terme ;
\end{quote}
\par
Cette derni\`ere r\`egle prendra en compte la valeur du token interm\'ediaire pour d\'eterminer s'il s'agit
d'une addition ou d'une soustraction. Par contre, il n'est pas possible de passer un mot de commande
compos\'e de plusieurs caract\`eres ou ayant une structure plus complexe. Par exemple:
\begin{quote}
racine: 'sqrt' expression;
\end{quote}
n'est pas une r\`egle valable.
\par
Il faut donc avoir un analyseur lexical qui fasse la relation entre les chaines de caract\`eres
et des entiers, qui seront des tokens typ\'es comme des chaines de charact\`eres. Ceci afin de
r\'ecup\'erer la valeur
s\'emantique pour un traitement ult\'erieur. En reprenant l'exemple pr\'ec\'edent, on d\'eclarerait:
\begin{quote}
\%token $<$char *$>$ SQRT\\
racine: SQRT expression;
\end{quote}
et l'analyseur lexical attriburait:
\begin{quote}
yylval="sqrt";\\
return SQRT;
\end{quote}
\par
Dans notre cas, nous aurons besoin de plusieurs types de tokens. Un type pour les mots de commande.
Un autre pour les valeurs num\'eriques, ainsi qu'un type pour le texte. Nous rajouterons en plus un type
pour les caract\`eres individuels, et un type pour les caract\`eres qui sont un mot de commande.
Cette declaration
Bison se fait de la fa\c{c}on suivante:
\begin{quote}
\%union \{ char calu; int numo; char* motcomm; char carcomm; char* pcdata; \}
\end{quote}
dans le fichier de grammaire.
Ensuite il faudra typer les tokens.
\subsection{La structure d'un mot de commande RTF}
Un mot de commande RTF est compos\'e des \'el\'ements suivants:
\begin{itemize}
\item Le caract\`ere "$\backslash$".
\item Des caract\`eres alphab\'ethiques minuscules.
\item Un \'eventuel param\`etre chiffr\'e.
\item Un s\'eparateur.
\begin{itemize}
\item Dans le cas o\`u un param\`etre num\'erique est pr\'esent, il n'est pas n\'ecessaire d'avoir de
s\'eparateur.
\item Dans les autres cas, le s\'eparateur peut \^etre: "$\backslash$", "\{", "\}, ";", " ".
\item Si le s\'eparateur est un espace " ", il sera ignor\'e. Sinon, le s\'eparateur sera transmis
comme token \`a la prochaine analyse.
\end{itemize}
\end{itemize}
\subsection{Les diff\'erents \'etats}
Lors de l'analyse du code RTF, il faut tenir compte de l'etat contextuel pour
effectuer l'analyse lexicale differemment. Il y a plusieurs etats:
\begin{enumerate}
\item RTF:
\begin{quote}
C'est le cas standard. On analyse et reconnait les mots de commande
et les passages de texte. On tiens compte aussi des caract\`eres de
commande comme d\`ecrit plus bas.
\end{quote}
\item Equation:
\begin{quote}
Si on se trouve dans ce mode, il faut tenir en compte le fait que
l'on a modifi\'e le fichier d'entr\'ee, et qu'il s'agit maintenant du
fichier auxiliaire. Les caract\`eres de commande prennent une
signification particuliaire.
\end{quote}
\item Erreur:
\begin{quote}
On a d\'etect\'e une erreur, et on analyse de fa\c{c}on \`a pouvoir la corriger.
Il faut alors sauter des morceaux de RTF (et donc perdre des informations)
mais de fa\c{c}on \`a en conserver le maximun.
\end{quote}
\end{enumerate}
\subsection{L'analyseur lexical}
La structure de l'analyseur lexical est la suivante:
\begin{enumerate}
\item Si on est en \'etat de traitement des erreurs:
\begin{enumerate}
\item Si c'est le premier token demand\'e juste apr\`es la d\'etection de l'erreur:
\begin{quote}
On avance jusqu'au debut du paragraphe suivant, et
on retourne le token PZERROR apr\`es avoir ins\'er\'e dans le fichier de sortie
le message d'erreur en \LaTeX .
\end{quote}
\item Si c'est le deuxi\`eme:
\begin{quote}
On retourne PAR, et on anule l'\'etat de traitement des erreurs.
\end{quote}
\end{enumerate}
\item On lit un caract\`ere dans le fichier d'entr\'ee:
\item Si on est en mode Equation et si c'est un d\'elimiteur d'\'equation:
\begin{quote}
On le retourne.
\end{quote}
\item Si on a trouv\'e la fin du fichier d'entr\'ee:
\begin{enumerate}
\item Si on \'etait en mode Equation (fichier d'entr\'ee auxiliaire), on replace le bon
fichier d'entr\'ee pour la suite.
\item Sinon, on a termin\'e l'analyse.
\end{enumerate}
\item S'il s'agit d'un retour \`a la ligne:
\begin{quote}
On l'ignore: RTF coupe les lignes comme il veut.
\end{quote}
\item S'il s'agit d'un caract\`ere d\'elimiteur: '\{' '\}' ';'
\begin{quote}
On le retourne.
\end{quote}
\item S'il s'agit d'un d\'ebut de mot de commande: '$\backslash$'
\begin{enumerate}
\item On lit le reste de la commande.
\item En tenant compte des caract\`eres sp\'eciaux: '\{' '\}' '$\backslash$' ';'
et en v\'erifiant que le mot de commande existe.
\item Si le mot de commande n'existe pas ou n'est pas connu,
il est ignor\'e.
\item S'il s'agit d'un caract\`ere de contr\^ole, on lit le param\`etre et on le passe a yyparse.
\item On \'elimine les espaces utilis\'es comme d\'elimiteurs.
\item Il faut tenir compte aussi des particularit\'es du mode \'equation.
\end{enumerate}
\item S'il s'agit d'un nombre et que le mot de commande lu pr\'ec\'edemment acceptait un param\`etre chiffr\'e:
\begin{quote}
On lit les caract\`eres composant le nombre et on le passe a yyparse.
\end{quote}
\item Si ce n'est ni un mot de commande, ni un entier, ni un caract\`ere de contr\^ole simple, c'est du texte.
\begin{enumerate}
\item On le range dans un tampon, et on passe a yyparse un token PCDATA avec pour valeur s\'emantique
le pointeur sur le tampon.
\item Il faut tenir compte aussi des particularit\'es du mode \'equation.
\end{enumerate}
\end{enumerate}
\subsection{Le texte}
Les portions de texte pur 7bits sont consid\'er\'ees comme des tokens a part entiere et d'un seul bloc.
Le programme W2\LaTeX\ poss\`ede des instructions permettant de v\'erifier que l'on n'exc\`ede pas la taille des tampons alloues,
auquel cas le tampon est rallong\'e. Ceci permet de traiter les blocs de texte en suivant les sp\'ecifications, et o\`u la
seule limitation de place serait due \`a un manque de m\'emoire de la machine (ou de m\'emoire allou\'ee par process). Ce texte sera
transcrit tel quel dans le fichier \LaTeX\ de destination.
\par
Une seule limitation est pr\'evue \`a cet effet: certains caract\`eres 7 bits ont une signification particuliaire pour
\LaTeX . Ils seront traduits en leur equivalent par la fonction {\tt puretext}. (e.g.: \$ \_ / ...).
\subsection{Les environnements}
La traduction des differents environnements est faite d\`es la reconnaissance d'un d\'ebut d'environnement. C'est \`a dire,
que l'on n'attend pas la fin d'un paragraphe, ou d'une portion de texte dans un environnement particulier pour le transcrire.
Ceci facilite le traitement Bison, mais se montre probl\'ematique parfois. Pour faciliter la t\^ache, nous avons implement\'e de nombreuses
variables globales, \`a titre de FLAGS, qui sont lev\'ees au moment de l'\'etablissement d'un envirronnement, et qui sont baiss\'ees lors
de la fermeture du mode en question.
\par
Par exemple, d\`es que l'on trouve le mot de commande RTF 'qc' qui signifie que le paragraphe suivant va \^etre centr\'e, W2\LaTeX\
produit sur le fichier de sortie l'equivalent \LaTeX : '\verb+\begin{center}+'. Ensuite, lors de la fin du paragraphe, il faut v\'erifier le
contexte. Si RTF ne le pr\'ecise pas autrement, les paragraphes suivants seront aussi centr\'es, et donc on n'a rien \`a faire.
Mais si on retrouve la commande RTF 'pard', il faut remettre tous les flags a 0, et fermer tous les environnements. Heureusement,
le systeme de drapeaux fonctionne car en RTF on ne peut pas imbriquer deux environnements conflictifs. Et dans le cas o\`u des
environnements de nature diff\'erente seraient pr\'esents simultan\'ement, ils seront hi\'erarchis\'es, et leur ordre de priorit\'e sera
invers\'e lors de la fermeture. A titre d'exemple, le typage des caracteres (bold, italique ...) est moins prioritaire que le
typage des paragraphes (centr\'e ...).
\subsection{Les formules}
Les formules ne font pas partie de RTF lui-m\^eme, et les sp\'ecifications correspondantes sont fonction de l'aplication
qui a g\'en\'er\'e le document. En cons\'equence, il faudra re-programmer les fonctions de traitement de ces champs pour des documents g\'en\'er\'es
par d'autres aplications que Word 6.0 et que les versions 5.0 pour Mac et 2.0 pour PC qui sont celles qui ont d\'ej\`a \'et\'e impl\'ement\'ees.
\par
Les formules font partie d'un ensemble de champs nom\'es a juste titre 'fields' dans les specifications RTF. Nous disposons
des sp\'ecifications des fields de Word 6.0, qui ressemblent fortement (aux majuscules, symboles delimiteurs, et quelques mots de
commande pr\`es) aux versions pr\'ec\'edentes de Word pour Mac et PC.
\par
Remarquons qu'il existe toute une panoplie de 'fields' propres a Word qui n'ont pas \'et\'e consid\'er\'es dans la version
actuelle de W2\LaTeX .
\subsection{Les Fontes}
Nous n'avons pas tent\'e d'impl\'ementer de nouvelles polices de caract\`eres pour ne pas rentrer en conflict avec des configurations
o\`u elles ne seraient pas pr\'esentes. Donc, toutes les polices sont transform\'ees en cmr, aux exceptions suivantes:
\begin{enumerate}
\item La police Symbol (Microsoft garanti (?) que cette police aura la m\^eme structure sur Mac que sur PC). Elle est enti\`erement
retranscrite avec les \'equivalents \LaTeX\ lorsque ces \'equivalences ou approximations existent. Sinon, un symbole @ sera utilis\'e.
\item Les polices non proportionelles (Courier...) qui seront transcrites en 'tt'.
\begin{quote}
Cette correspondance entre les polices se trouve dans le fichier rtf.fonts.c dans le tableau EqFontsRTF\_TeX. Toute
personalisation est ais\'ee par edition de ce fichier et recompilation. Les correspondances entre les symboles se font dans
le m\^eme fichier au sein du tableau FontSymboles.
\end{quote}
\end{enumerate}
Dans le cas o\`u W2\LaTeX\ serait port\`e pour une utilisation sur un systeme avec d'autres polices ou symboles (cf AMS), l'\'edition
de ces tableaux et des constantes d\'efinissant les tailles des dits tableaux devrait \^etre ais\'ee.
\par
Il fallait se fixer une police par defaut. Et surtout une taille de police. Le choix a \'et\'e port\'e sur la valeur
prise par Word par defaut lors de l'installation premi\`ere du logiciel: 10pt. Une table se trouvant dans ce m\^eme fichier (rtf.fonts.c)
d\'ecrit la correspondance entre les tailles des polices en nombre de points et les param\`etres \LaTeX\ (\verb+\small, \Huge, ...+). Notons que cette table a \'et\'e
\'etablie \`a partir des donn\'ees trouv\'ees dans le manuel de \LaTeX , correspondant au style 10pt.
\subsection{L'ent\^ete \LaTeX}
La taille de la page par defaut est supos\'ee A4. La feuille de style \LaTeX\ correspondante \'etant un standard, ca nous a sembl\'e le
plus judicieux. Toute modification peut se faire dans la grammaire (rtf.y) \`a la ligne decrivant la regle {\tt input}.
\par
Les marges sont fix\'ees en fonction des param\`etres fournis par le fichier RTF, ainsi que les tailles des indentations,
et quelques red\'efinitions de noms de polices standard.
\par
Cette red\'efinition des polices est due \`a la mauvaise d\'ecoupe en blocs de RTF. En effet, certains parametres RTF sont donn\'es
en plein milieu d'un bloc, et on ne sait pas quand est-ce qu'ils vont avoir fin. Ainsi, il est possible de transcrire des blocs sans
d\'elimiteurs de d\'ebut et de fin de bloc. Pour faire en sorte que \LaTeX\ accepte ces changements, il faut forcer un changement de
police compl\`etement. Vous trouverez une nouvelle instruction (la seule) introduite par W2\LaTeX\ qui d\'efinit simplement la police cmr10.
Il s'agit de la commande '\verb+\pzrm+'.
\subsection{Les tableaux}
Le c\^ot\'e le plus flou de W2\LaTeX\ se situe certainement au niveau des tableaux. S'ils sont traduits, leur structure de
tableau n'est pas conserv\'ee. Ils ne seront pas encadr\'es (du moins proprement). Mais le {\em look} \LaTeX\ sera conserv\'e.
\par
Ceci est du \`a la libert\'e suivante permise en RTF et pas en \LaTeX . En RTF on peut avoir une cellule d'un tableau qui
soit compos\'ee de plusieurs paragraphes, ce qui (sauf erreur de ma part), n'est pas possible directment en \LaTeX\ . A moins de...
transformer le contenu des tableaux en {\em minipages}. C'est ce que nous avons fait. Chaque cellule d'un tableau est une minipage.
Ces minipages sont juxtapos\'ees sur une meme ligne pour former une ligne du tableau. Heureusement, lorsque \LaTeX\ centre toutes ces
minipages (par defaut; on peut demander autre chose aussi :-) sur la ligne en cours, ce qui fait que l'aspect du tableau, hormis
les cadres, sera le m\^eme.
\par
De notables am\'eliorations sont \`a aporter sur ce point l\`a. Nous avons essay\'e de mettre ces minipages dans un tableau,
mais le resulat n'\'etait pas celui esp\'er\'e, car les cellules dans RTF sont donn\'ees par leur largeur, et ca fait en g\'eneral
d\'eborder le tableau de la page. Nous avons quand m\^eme laiss\'e l'option d'encadrer chacune des minipages \`a l'aide d'une fbox.
Le resultat n'est pas beau. Pour l'obtenir, il suffit d'inclure \`a la fin de la ligne de commande l'option '-uglyframes':
\begin{quote}
$>$ w2latex inputfile.rtf -uglyframes
\end{quote}
\subsection{Autres objets}
Toutes les r\`egles de grammaire (sauf ommission) correspondant \`a des objets OLE ou aux images,
ont \'et\'e cod\'ees dans le fichier
de grammaire: rtf.y. Ils ne sont pas trait\'es pour l'instant. Certains sont irr\'ealisables
(inclusion de documents g\'en\'er\'es par des tableurs...).
\par
Les formats \'etant extr\`emement nombreux, il faudrait toute une panoplie de convertisseurs.
\subsection{Images}
Les images peuvent \^etre cod\'ees de nombreuses fa\c{c}ons, et sous diff\'erents formats.
Les plus courrants sont le Windows Metafile
et le format de MacDraw. Ne possedant pas les sp\'ecifications de ces formats d'images, nous laisserons
un cadre blanc de la taille
(approch\'ee) de l'image dans le document \LaTeX\ g\'en\'er\'e.
\par
La taille des images \'etant cod\'ee parfois en points, parfois en twips, parfois en pixels...
il est possible que pour des images
g\'en\'er\'ees avec des logiciels de dessin particuliers, il y ait un probl\`eme de taille des cadres blancs.
\subsection{Am\'eliorations \`a r\'ealiser}
Certains points restent sans doute \`a am\'eliorer. En particulier le traitement des tableaux,
les nouveaux fields, et d'\'eventuels nouveaux formats de formules pour des documents g\'en\'er\'es
par d'autres applications ou d'autres versions de Word.
\par
Il serait int\'eressant de pouvoir disposer de traducteurs de formats d'images pour obtenir
du post-script inclus dans le fichier \LaTeX\ obtenu. Ceci serait possible, car les images (quel
que soit leur format, sont transcrites en hexad\'ecimal dans le fichier RTF. Il est donc possible
d'en faire un fichier de sortie binaire.
\subsection{Comment r\'ealiser des extensions}
En ce qui concerne les formules, il suffit de voir le formatage diff\'erent des formules MAC ou PC.
Ces deux formats ont \'et\'e trait\'es en parall\`ele, et un troisi\`eme format s'inserrerait de la
m\^eme fa\c{c}on.
\par
Pour les tableaux, il faudrait peut-\^etre repartir de la grammaire. Et surtout trouver une astuce
pour pouvoir tenir compte des encadrements et autres param\`etres de formatage.
\par
Les {\em fields} sont enti\`erement trait\'es dans le fichier {\tt rtf.fields.c}, qu'il suffirait
de completer par de nouvelles fonctions les traitant, ainsi que leur d\'etection au m\^eme point que
se fait celle des \'equations.
\newpage
\section{Fichiers sources et fonctions incluses.}
\subsubsection{ rtf.lex.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \>: \>{\tt valdefFD }\\
Description \>: \>\begin{minipage}[t]{10cm}Attribue les valeurs par defaut aux differents champs
de formatage du document \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt puretext }\\
Description \>: \>\begin{minipage}[t]{10cm}Lorsque l'on trouve une chaine de caract\`eres pure, il faut
enlever les
retours \`a la ligne. En effet WORD coupe les lignes trop longues en plein milieu des mots !!
De m\^eme, il y a des caract\`eres ASCII 7 bits que \LaTeX\ consid\`ere comme des mots de commande. Il faut les
transformer dans son propre format. Ceci ne peut etre fait \`a l'interieur de la grammaire, car
le texte 7 bits est un token \`a part enti\`ere. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt getcode }\\
Description \>: \>\begin{minipage}[t]{10cm}A partir de la chaine de caract\`eres d'un mot de commande
renvoie son type et
l\`eve un flag en cas de non reconnaissance. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt Avance\_Champ }\\
Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e
\end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt Avance\_Sauve\_Champ }\\
Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e et
le sauve dans un fichier auxiliaire \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt Avance\_Sauve\_ChampMAC }\\
Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e et
le sauve dans un fichier auxiliaire.
Mais pour le MAC. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt yylex }\\
Description \>: \>\begin{minipage}[t]{10cm}Analyseur Lexical d'un fichier RTF. Fournit les Tokens \`a
yyparse. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt yyerror }\\
Description \>: \>\begin{minipage}[t]{10cm}Fonction de traitement des erreurs. Elle est apell\'ee
automatiquement par yyparse,
gener\'ee par Bision, lorsqu'une erreur s'est produite. Si on est au sein de l'ent\^ete,
on positionne le flag de
pr\'esence de \LaTeX . Si on est dans le corps du texte, on positionne le flag d'Erreur,
pour que l'analyseur
lexical ignore tout jusqu'au debut du prochain paragraphe. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt main }\\
Description \>: \>\begin{minipage}[t]{10cm}Fonction Principale: Analyse les param\`etres, ouvre les
flux, et apelle yyparse(). \end{minipage}\\
\end{tabbing}
\subsubsection{ rtf.formule.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \>: \>{\tt moulineFormule }\\
Description \>: \>\begin{minipage}[t]{10cm}Apr\`es d\'etection d'une formule, on la mouline de facon \`a rectifier les
absurdit\'es de formatage de RTF-Fields. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt moulineFormuleMAC }\\
Description \>: \>\begin{minipage}[t]{10cm}Apr\`es detection d'une formule MAC, on la mouline de facon \`a rectifier les
absurdit\'es de formatage de RTF-Fields. Mais pour le Mac.\end{minipage}\\
\end{tabbing}
\subsubsection{ rtf.fonts.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \>: \>{\tt nouvfonte }\\
Description \>: \>\begin{minipage}[t]{10cm}Cr\'ee un nouveau maillon avec la description d'une fonte \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt cherchefonte }\\
Description \>: \>\begin{minipage}[t]{10cm}A partir du num\'ero de fonte, cherche une fonte donn\'ee. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt parcoursfontes }\\
Description \>: \>\begin{minipage}[t]{10cm}fonction de debuggage. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt chercheEqTeX }\\
Description \>: \>\begin{minipage}[t]{10cm}Cherche un equivalent \LaTeX\ pour un nom de fonte RTF \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt EqTeXTaille }\\
Description \>: \>\begin{minipage}[t]{10cm}D\'etermine la taille de police \`a utiliser, \`a partir de la donn\'ee RTF,
et retourne la chaine de caract\`eres \'equivalente TeX. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt printSymbol }\\
Description \>: \>\begin{minipage}[t]{10cm}Imprime un Symbole, en fonction de l'environnement dans lequel on se trouve. \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt printText }\\
Description \>: \>\\
%**************************************************************************************************
Function name \>: \>{\tt printApostrophe }\\
Description \>: \>\\
\end{tabbing}
\subsubsection{ rtf.context.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \>: \>{\tt nouvcontext }\\
Description \>: \>\begin{minipage}[t]{10cm}Cr\'ee un nouveau maillon contexte \`a partir de sa description et retourne un
pointeur sur ce maillon \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt contextback }\\
Description \>: \>\\
%**************************************************************************************************
Function name \>: \>{\tt parcourscontexts }\\
Description \>: \>\begin{minipage}[t]{10cm}Parcours de la liste chain\'ee de contextes. (Debuggage); \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt endkeepcontext }\\
Description \>: \>\begin{minipage}[t]{10cm}Termine le contexte courrant mais le garde en tant que contexte courrant.
Utile pour les Tableaux, car \LaTeX\ impose de terminer les environnements
avant de sortir de la minipage, alors que RTF ne le fait pas.
A utiliser suivi immediatement de showcontext... \end{minipage}\\
%**************************************************************************************************
Function name \>: \>{\tt showcontext }\\
Description \>: \>\begin{minipage}[t]{10cm}Exprime les caracteristiques du contexte courrant. A utiliser en particulier
pour les tableaux apr\`es endkeepcontext \end{minipage}\\
\end{tabbing}
\subsubsection{ rtf.ascii }
Ce fichier contient les tables de correspondance ASCII entre MAC, PC et \LaTeX .
\subsubsection{ rtf.fields.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \>: \>{\tt filtrefields }\\
Description \>: \>\begin{minipage}[t]{10cm}Recup\`ere un champ field et le pr\'epare \`a \^etre analyse par yylex \end{minipage}\\
\end{tabbing}
\subsubsection{ rtf.output }
Le fichier {\tt rtf.output} est g\'en\'er\'e par Bison si on l'ex\'ecute avec l'option {\tt -v}.
Il d\'etaille l'\'etat de la grammaire et de ses r\`egles. Les conflicts qui existent actuellement
sont dus au fait que la grammaire RTF n'est pas LALR1. Ils ne devraient pas causer de probl\`eme.
Lors de l'impl\'ementattion de nouvelles r\`egles, il faudra veiller \`a ce que ce nombre n'augmente
pas.
\subsubsection{ rtf.tab.c }
Il s'agit du fichier g\'en\'er\'e par Bison, et qui sera lui compil\'e pour obtenir l'ex\'ecutable.
Pour le compiler:
\begin{quote}
$>$cc -o w2latex rtf.tab.c
\end{quote}
et \c{c}a y est!
\subsubsection{ rtf.motcom.h }
Ce fichier contient la table de correspondance entre les mots de commande RTF et les tokens. Il s'agit des
m\^emes mots, mais en majuscules. Lors de l'impl\'ementation de nouvelles r\`egles demandant de nouveaux
tokens, il ne faut pas oublier de les r\'epertorier ici (et d'augmenter le nombre des \'el\'ements du tableau
d\'efini dans l'ent\^ete du fichier.
\newpage
\section{Documents de R\'ef\'erence}
\begin{itemize}
\item BISON: The Yacc compatible Parser Generator
\begin{quote}
Bison Version 1.20\\
By Charles Donnelly and Richard Stallman
\end{quote}
\item A Gentle Introduction to \TeX .
\begin{quote}
Michael Doob\\
University of Manitoba
\end{quote}
\item Notes de Cous \LaTeX .
\begin{quote}
Claude Gomez\\
INRIA
\end{quote}
\item Essential \LaTeX .
\begin{quote}
Jon Warbrick
\end{quote}
\item \LaTeX : user's guide and Reference Manual
\begin{quote}
Leslie Lamport\\
Addison-Wesley
\end{quote}
\item Microsoft Rich Text Format (RTF) Specification
\begin{quote}
Microsoft\copyright \\
Application Note\\
RTF VErsion 1.3 1994
\end{quote}
\item Fields Reference
\begin{quote}
Microsoft\copyright\ Word\copyright \\
Version 6.0
\end{quote}
\end{itemize}
\newpage
\section{Disclaimer}
Ce document se rapporte au programme W2\LaTeX , r\'ealis\'e par Javier
Garmendia\footnote{jgarmend@cyberspace.org}, et a \'et\'e r\'ealis\'e pour le Centre International de
Rencontres Math\'ematiques de Luminy (Marseille), sous la direction de Jean-Louis
Maltret\footnote{jlm@cirm.univ-mrs.fr}.
\end{document}
|