<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\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 $&lt;$char *$&gt;$ 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}
		$&gt;$ 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 \&gt;: \&gt;{\tt valdefFD }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Attribue les valeurs par defaut aux differents champs 
	de formatage du document \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt puretext }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt getcode }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt Avance\_Champ }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e  
\end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt Avance\_Sauve\_Champ }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt Avance\_Sauve\_ChampMAC }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt yylex }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Analyseur Lexical d'un fichier RTF. Fournit les Tokens \`a 
yyparse.  \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt yyerror }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt main }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt moulineFormule }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt moulineFormuleMAC }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt nouvfonte }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Cr\'ee un nouveau maillon avec la description d'une fonte  \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt cherchefonte }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}A partir du num\'ero de fonte, cherche une fonte donn\'ee. \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt parcoursfontes }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}fonction de debuggage. \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt chercheEqTeX }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Cherche un equivalent \LaTeX\ pour un nom de fonte RTF \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt EqTeXTaille }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt printSymbol }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Imprime un Symbole, en fonction de l'environnement dans lequel on se trouve. \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt printText }\\
Description   \&gt;: \&gt;\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt printApostrophe }\\
Description   \&gt;: \&gt;\\
\end{tabbing}



\subsubsection{ rtf.context.c }
\begin{tabbing}
xxxxxxxxxxxxxx\=xxx\=\kill
Function name \&gt;: \&gt;{\tt nouvcontext }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt contextback }\\
Description   \&gt;: \&gt;\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt parcourscontexts }\\
Description   \&gt;: \&gt;\begin{minipage}[t]{10cm}Parcours de la liste chain\'ee de contextes. (Debuggage); \end{minipage}\\
%**************************************************************************************************
Function name \&gt;: \&gt;{\tt endkeepcontext }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt showcontext }\\
Description   \&gt;: \&gt;\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 \&gt;: \&gt;{\tt filtrefields }\\
Description   \&gt;: \&gt;\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}
	$&gt;$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}


</pre></body></html>