%{ /* Declarations en C */ #include #include #define YYDEBUG 1 #include /*#define fprintf if(!FLAG_DebutTeX) {;} else fprintf*/ #define ifDTfprintf if(!FLAG_DebutTeX) {;} else fprintf #define LF_FNIL 1 #define LF_FROMAN 2 #define LF_FSWISS 3 #define LF_FMODERN 4 #define LF_FSCRIPT 5 #define LF_FDECOR 6 #define LF_FTECH 7 #define LF_FBIDI 8 #define CENTER 1 #define LEFT 2 #define RIGHT 3 #define JUST 0 #define INTINT 0 #define INTSUM 1 #define INTPROD 2 #define BRParentheseO '(' #define BRAccoladeO '{' #define BRSupInfO '<' #define BRCrochetO '[' #define BRParentheseF ')' #define BRAccoladeF '}' #define BRSupInfF '>' #define BRCrochetF ']' #define BRPoint '.' #include "rtf.ascii.c" char calutemp; char pzIntermStd[]="\\end{minipage}\n\\begin{minipage}"; char pzIntermFrame[]="\\end{minipage}}\n\\fbox{\\begin{minipage}"; char * pzIntermDef=pzIntermStd; char pzEndStd[]="\\end{minipage}\n"; char * pzEndDef=pzEndStd; char pzEndFrame[]="\\end{minipage}}\n"; char pzStartStd[]="\n\\begin{minipage}"; char * pzStartDef=pzStartStd; char pzStartFrame[]="\n\\fbox{\\begin{minipage}"; FILE * entree; FILE * sortie; FILE * auxiliaire; FILE * filetemp; FILE * SORT; int FLAG_Underline=0; int FLAG_Bold=0; int FLAG_DebutTeX=0; int FLAG_Italique=0; int FLAG_FlushLeft=0; int FLAG_FlushRight=0; int FLAG_Equation=0; int FLAG_Center=0; int FLAG_Dollars=0; int FLAG_FI=0; int FLAG_RI=0; int FLAG_LI=0; int FLAG_Indice=0; int FLAG_Exposant=0; int FLAG_Integrale=0; int FLAG_Symbol=0; int FLAG_Suscript=0; int FLAG_bracketleft='.'; int FLAG_bracketright='.'; int FLAG_SusTab=0; int FLAG_CompteTableau=0; int FLAG_Tableau=0; int FLAG_MatrixAlign=CENTER; int FLAG_MatrixCols=1; int FLAG_InMatrix=0; int FLAG_MatrixColCour=1; int FLAG_PICTLargeur=0; int FLAG_PICTHauteur=0; int FLAG_BorderBot=0; int FLAG_Footer=0; int FLAG_InPict=0; int FLAG_WMetafile=0; int FLAG_NIT=1; int FLAG_ERROR=0; int FLAG_FIRST_ERROR=1; int FLAG_EndTeX=0; char TAB_PosTabMatrix[]={ ' ', 'c', 'l', 'r' }; int Num_Col_Tabular=0; int ASCII_TABLE=2; int lengthLCT=1024; int Largeur_Cols[512]; int cpt,cpt2,cpt3; int Num_Max_Col=0; int Inter_Col=0; char * Ligne_Courante_Tabular; typedef struct t_formatDocument { int FDDEFTAB; int FDPAPERW; int FDPAPERH; int FDPSZ; int FDMARGL; int FDMARGR; int FDMARGT; int FDMARGB; int FDFACINGP; int FDGUTTER; int FDMARGMIRROR; int FDLANDSCAPE; int FDPGNSTART; int FDWIDOWCTRL; } t_FormatDocument; t_FormatDocument PZ_FD; typedef struct t_lfonte { int LF_Fontnum; /* Numero de fonte : Le meme que dans l'ordre de la liste en general */ int LF_Fontfamily; /* Famille de fonte: cf les defines */ int LF_Fcharset; /* Jeu de caracteres dans la table des polices */ int LF_Fprq; /* 'Pitch' de la police dans la table de caracteres */ char * LF_Fontname; /* Nom de la fonte */ char * LF_TexEquiv; /* Equivalent TeX */ struct t_lfonte * suiv;/* Maillon suivant */ } t_LFonte, *p_LFonte; typedef struct t_ConTeXte { int EtatTexte; /* CENTER ou RIGHT ou LEFT */ struct t_ConTeXte * suiv; struct t_ConTeXte * prec; /* Pour l'instant ca nous suffit */ } t_contexte, * p_contexte; p_contexte DebLisContextes=NULL; p_contexte ContextActuel=NULL; p_contexte ContextInitTab=NULL; p_LFonte DebLisFontes=NULL; p_LFonte FonteActuelle=NULL; #include "rtf.fonts.c" #include "rtf.context.c" %} /* Declarations YACC - BISON */ %expect 12179 %union { char calu; int numo; char* motcomm; char carcomm; char* pcdata; } %token NUM /* INCLURE ICI TOUS LES MOTS DE COMMANDE EN TANT QUE TYPES DE TOKENS TERMINAUX. */ %token PC %token PCA %token DEFF %token FONTTBL %token ANSI %token RTF %token MAC %token F %token FNIL %token FROMAN %token FSWISS %token FMODERN %token FSCRIPT %token FDECOR %token FTECH %token FBIDI %token FCHARSET %token FPQR %token ETOILE /* represente le caractere de commande '/''*' */ %token FONTFI_LE %token FTNIL %token FTTRUETYPE %token CPG %token FI_LETBL %token FI_LE %token FID %token FRELATIVE %token FOSNUM %token FVALIDMAC %token FVALIDDOS %token FVALIDNTFS %token FVALIDHPFS %token FNETWORK %token RED %token BLUE %token GREEN %token STYLESHEET %token S %token CS %token DS %token KEYCODE %token ADDITIVE %token SBASEDON %token SHIFT %token CTRL %token ALT %token FN %token INFO %token SECT %token HEADER %token FOOTER %token HEADERL %token HEADERR %token HEADERF %token FOOTERL %token FOOTERR %token FOOTERF %token PAR %token ROW %token CELL %token FONTEMB %token COLORTBL %token SUBDOCUMENT %token TX %token TB %token TQR %token TQC %token TQDEC %token TLDOT %token TLHYPH %token TLUL %token TITH %token TLEQ %token BIN %token BDATA %token SDATA %token PCDATA %token SNEXT %token ABSH %token ABSW %token B %token BGBDIAG %token BGCROSS %token BGDCROSS %token BGDKBDIAG %token BGDKCROSS %token BGDKDCROSS %token BGDKFDIAG %token BGDKHORIZ %token BGDKVERT %token BGFDIAG %token BGHORIZ %token BGVERT %token BINFSXN %token BINSXN %token BOX %token BRDRB %token BRDRBAR %token BRDRBTW %token BRDRCF %token BRDRDASH %token BRDRDB %token BRDRDOT %token BRDRHAIR %token BRDRL %token BRDRR %token BRDRS %token BRDRSH %token BRDRT %token BRDRTH %token BRDRW %token BRSP %token BULLET %token CAPS %token CB %token CBPAT %token CCHS %token CELLX %token CF %token CFPAT %token CHATN %token CHDATE %token CHDPA %token CHDPL %token CHFTN %token CHFTNSEP %token CHFTNSEPC %token CHPGN %token CHTIME %token CLBGBDIAG %token CLBGCROSS %token CLBGDCROSS %token CLBGDKBDIAG %token CLBGDKCROSS %token CLBGDKFDIAG %token CLBGDKHOR %token CLBGDKRCDCROSS %token CLBGDKVERT %token CLBGFDIAG %token CLBGHORIZ %token CLBGVERT %token CLBRDRB %token CLBRDRL %token CLBRDRR %token CLBRDRT %token CLCBPAT %token CLCFPAT %token CLMGF %token CLMGR %token CLSHDNG %token COLNO %token COLS %token COLSR %token COLSX %token COLUMN %token COLW %token DELETED %token DEUXPOINTS %token DFRMTXTX %token DFRMTXTY %token DN %token DROPCAPLI %token DROPCAPT %token DXFRTEXT %token EMDASH %token EMSPACE %token ENDASH %token ENDNHERE %token ENSPACE %token EXPND %token EXPNDTW %token FI %token FOOTERY %token FS %token GUTTERSXN %token HEADERY %token HYPHPAR %token I %token INTBL %token KEEP %token KEEPN %token KERNING %token LANG %token LDBLQUOTE %token LEVEL %token LI %token LINE %token LINEBETCOL %token LINECONT %token LINEMOD %token LINEPPAGE %token LINERESTART %token LINESTARTS %token LINEX %token LNDSCPSXN %token LQUOTE %token LTRCH %token LTRMARK %token LTRPAR %token LTRROW %token LTRSECT %token MARGBSXN %token MARGLSXN %token MARGRSXN %token MARGTSXN %token MOINS %token NOLINE %token NOSUPERSUB %token NOWIDCLTPAR %token NOWRAP %token OUTL %token PAGE %token PAGEBB %token PARD %token PGHSXN %token PGNCONT %token PGNDEC %token PGNGNSH %token PGNHN %token PGNHNSC %token PGNHNSM %token PGNHNSN %token PGNHNSP %token PGNLCLTR %token PGNLCRM %token PGNRESTART %token PGNSTARTS %token PGNUCLTR %token PGNUCRM %token PGNX %token PGNY %token PGWSXN %token PHCOL %token PHMRG %token PHPG %token PIPE %token PLAIN %token PN %token PNACROSS %token PNB %token PNCAPS %token PNCARD %token PNCF %token PNDEC %token PNF %token PNFS %token PNHANG %token PNI %token PNINDENT %token PNLCLTR %token PNLCRM %token PNLVL %token PNLVLBODY %token PNLVLCONT %token PNNUMONCE %token PNORD %token PNORDT %token PNPREV %token PNQC %token PNQL %token PNQR %token PNRESTART %token PNSCAPS %token PNSECLVL %token PNSP %token PNSTART %token PNSTRIKE %token PNTEXT %token PNTXTA %token PNTXTB %token PNUCLTR %token PNUCRM %token PNUL %token PNULD %token PNULDB %token PNULNONE %token PNULW %token PNVLBT %token POSNEGX %token POSNEGY %token POSX %token POSXC %token POSXI %token POSXL %token POSXO %token POSXR %token POSY %token POSYB %token POSYC %token POSYIL %token POSYT %token PVMRG %token PVPARA %token PVPG %token QC %token QJ %token QL %token QR %token RDBLQUOTE %token REVAUTH %token REVDTTM %token REVISED %token RI %token RQUOTE %token RTLCH %token RTLMARK %token RTLPAR %token RTLROW %token RTLSECT %token SA %token SB %token SBKCOL %token SBKEVEN %token SBKNONE %token SBKODD %token SBKPAGE %token SBYS %token SCAPS %token SECTNUM %token SECTD %token SETUNLOCKED %token SHAD %token SHADING %token SL %token SLMULT %token SOFTCOL %token SOFTLHEIGHT %token SOFTLINE %token SOFTPAGE %token STRIKE %token SUB %token SUPER %token TAB %token TILDE %token TITLEPG %token TRBRDRB %token TRBRDRH %token TRBRDRL %token TRBRDRR %token TRBRDRT %token TRBRDRV %token TRGAPH %token TRHDR %token TRKEEP %token TRLEFT %token TROWD %token TRQC %token TRQL %token TRQR %token TRRH %token UL %token ULD %token ULDB %token ULNONE %token ULW %token UNDERSCORE %token UP %token V %token VERTALB %token VERTALC %token VERTALJ %token VERTALT %token ZWJ %token ZWNJ %token AENDDOC %token AENDNOTES %token AFTNBJ %token AFTNCN %token AFTNNALC %token AFTNNAR %token AFTNNAUC %token AFTNNCHI %token AFTNNRLC %token AFTNNRUC %token AFTNRESTART %token AFTNRSTCONT %token AFTNSEP %token AFTNSEPC %token AFTNSTART %token AFTNTJ %token ALLPROT %token ANNOTPROT %token BRKFRM %token CVMME %token DEFFORMAT %token DEFLANG %token DEFTAB %token DOCTEMP %token ENDDOC %token ENDNOTES %token FACINGP %token FET %token FORMDISP %token FORMPROT %token FORMSHADE %token FRACWIDTH %token FTNBJ %token FTNCN %token FTNNALC %token FTNNAR %token FTNNAUC %token FTNNCHI %token FTNNRLC %token FTNNRUC %token FTNRESTART %token FTNRSTCONT %token FTNRSTPG %token FTNSEP %token FTNSEPC %token FTNSTART %token FTNTJ %token GUTTER %token HYPHAUTO %token HYPHCAPS %token HYPHCONSEC %token HYPHHOTZ %token LANDSCAPE %token LINESTART %token LINKSTYLES %token LTRDOC %token MAKEBACKUP %token MARGB %token MARGL %token MARGMIRROR %token MARGR %token MARGT %token NEXTFILE %token NOCOLBAL %token NOEXTRASPRL %token NOTABIND %token OTBLRUL %token PAPERH %token PAPERW %token PGNSTART %token PRCOLBL %token PRINTDATA %token PSOVER %token PSZ %token REVBAR %token REVISIONS %token REVPROP %token REVPROT %token RTLDOC %token SPRSSPBF %token SPRSTSP %token SWPBDR %token TEMPLATE %token TRANSMF %token WIDOWCTRL %token WRAPTRSP %token APOSTROPHE %token FIELD %token FLDDIRTY %token FLDEDIT %token FLDLOCK %token FLDPRIV %token FLDINST %token FLDALT %token FLDRSLT %token PICT %token PZINTEGRALE %token PZRACINE %token PZFRACTION %token PZMATRIX %token PZBOX %token PZBRACKET %token PZLIST %token PZOVERSTRIKE %token PZSUSCRIPT %token EQLC %token EQRC %token EQBC %token EQAL %token EQAC %token EQAR %token EQCO %token EQVS %token EQHS %token EQSU %token EQPR %token EQIN %token EQFC %token EQVC %token EQAI %token EQUP %token EQDI %token EQDO %token EQCROCHETO %token EQCROCHETF %token EQPARENTHO %token EQPARENTHF %token EQACCOLADO %token EQACCOLADF %token EQSUPINFO %token EQSUPINFF %token FOOTNOTE %token PZPEQ %token BKMKSTART %token BKMKEND %token BKMKCOLF %token BKMKCOLL %token MACPICT %token PMMETAFILE %token WMETAFILE %token DIBITMAP %token WBITMAP %token WBMBITSPIXEL %token WBMPLANES %token WBMWIDTHBYTES %token PICBMP %token PICBPP %token YR %token MO %token DY %token HR %token MIN %token SEC %token OBJECT %token OBJTOPICT %token BKMKPUB %token PUBAUTO %token PICW %token PICH %token PICWGOAL %token PICHGOAL %token PICSCALEX %token PICSCALEY %token PICSCALED %token PICCROPT %token PICCROPB %token PICCROPR %token PICCROPL %token OBJEMB %token OBJLINK %token OBJAUTLINK %token OBJSUB %token OBJPUB %token ONJICEMB %token LINKSELF %token OBJLOCK %token OBJUPDATE %token OBJCLASS %token OBJNAME %token OBJTIME %token RSLTMERGE %token RSLTRTF %token RSLTTXT %token RSLTPICT %token RSLTBMP %token OBJSETSIZE %token OBJALIGN %token OBJTRANSY %token OBJCROPT %token OBJCROPB %token OBJCROPL %token OBJCROPR %token OBJSCALEY %token OBJSCALEX %token OBJH %token OBJW %token OBJDATA %token OBJALIAS %token OBJSECT %token RESULT %token PZPAUTREFIELD %token ATRFSTART %token ATRFEND %token ATNTIME %token ATNICN %token ANNOTATION %token ATNREF %token ATNID %token ATNAUTHOR %token PZPENDEQ %token XE %token TC %token DO %token PZERROR %type num %type input %type Entete %type pzdeflang %type ppentete %type pentete %type charset %type deffont %type pfontinfo %type fontinfo %type fontfamily %type fcharset %type fpqr %type fontaltname %type fontemb %type fonttype %type fontfname %type codepage %type filetbl %type pfileinfo %type fileinfo %type pfilesource %type relpath %type osnum %type filesource %type colortbl %type pcolordef %type colordef %type red %type blue %type green %type stylesheet %type pstyle %type style %type styledef %type keycode %type pformatting %type formatting %type additive %type based %type next %type stylename %type keys %type shift %type alt %type ctrl %type key %type revtbl %type Document %type pdocfmtpsection %type info %type docfmt %type section %type psecfmt %type secfmt %type hdrftr %type hdrctl %type ppara %type ppar %type para %type pzpn %type pnlevel %type pndesc %type pnnstyle %type pnchrfmt %type pnul %type pnfmt %type pnjust %type pntxtb %type pntxta %type brdrdef %type brdrseg %type pbrdr %type brdrk %type brdr %type psubdoc %type pchar %type pcell %type pznvpparfmt %type parfmt %type pznvpapoctl %type apoctl %type framesize %type horzpos %type vertpos %type txtwrap %type dropcap %type hframe %type hdist %type vframe %type vdist %type pznvshading %type pshading %type pat %type pznvtabdef %type tabkind %type tablead %type zpcelldef %type ptbldef %type pptbldef %type ppptbldef %type rowjust %type rowwrite %type pcelldef %type pcellshad %type cellpat %type charr %type pznvcharr %type pchrfmt %type pdata %type pznvpdata %type data %type chrfmt %type atext %type spec %type picttype %type bitmapinfo %type pictsize %type metafileinfo %type do %type annot %type fieldmod %type fieldinst %type fieldrslt %type idx %type toc %type pzpvpcdata %type ppvformule %type pzpcdata %type pzpict %type pzpictsize %type ppzpictsize %type pppzpictsize %type accopzpn %type pznvnum %type etfinpznvcharr %type endpict %% /* Regles de Grammaire */ input: /* Vide */ | '{' Entete { FLAG_DebutTeX=1; fprintf(SORT,"%%\n%% This document was generated using\n%% "); fprintf(SORT,"w2LaTeX\n%% Bug Reports: jgarmend@cyberspace.org\n%%\n\n"); fprintf(SORT,"\\documentstyle[a4]{article}\n"); fprintf(SORT,"\n\\parindent = %d pt \n",0/*(PZ_FD.FDDEFTAB)*/); fprintf(SORT,"\n\\oddsidemargin0cm\n"); fprintf(SORT,"\n\\evensidemargin0cm\n"); fprintf(SORT,"\n\\hoffset%dpt \n",(int)(-72+(PZ_FD.FDMARGL))); fprintf(SORT,"\n\\textwidth%dpt \n", (int)(614-(PZ_FD.FDMARGL)-(PZ_FD.FDMARGR))); fprintf(SORT,"\n\\vsize=%dpt\n",(int)(644-(PZ_FD.FDMARGT))); fprintf(SORT,"\n\\font\\mathex=cmex10\n"); fprintf(SORT,"\n\\font\\pzrm=cmr10\n"); fprintf(SORT,"\n\\pagestyle{myheadings}\n"); fprintf(SORT,"\n\\begin{document}\n"); /*parcoursfontes();*/ } Document '}' { ifDTfprintf(SORT,"\n\\end{document}\n"); /*parcourscontexts();*/ FLAG_EndTeX=1;} | PZERROR section ; Entete: /* Vide */ | RTF num charset deffont /*?*/ pzdeflang '{' FONTTBL pfontinfo '}' ppentete | RTF num charset pzdeflang deffont /*?*/ '{' FONTTBL pfontinfo '}' ppentete | RTF num DEFFORMAT charset deffont /*?*/ pzdeflang '{' FONTTBL pfontinfo '}' ppentete | RTF num pzdeflang charset deffont /*?*/ pzdeflang '{' FONTTBL pfontinfo '}' ppentete | RTF num pzdeflang DEFFORMAT charset deffont /*?*/ pzdeflang '{' FONTTBL pfontinfo '}' ppentete /* Cette derniere regle a ete imposee par la pratique car certains documents generes avec WORD pour MAC ne suivent pas les conventions.... (sic) */ /* Note: Ce document se refere aux specifications de la version 1.2 notee simplement 1. Il s'agit en realite des specifications fournies par Microsoft pour la version de WORD 6.0. Nous essayerons de faire de notre mieux pour assurer la compatibilite avec les formats precedents, qui ne sont pas assures de suivre la norme..(sic) .. Note: deffN definit la fonte a utiliser par defaut dans tout le document. */ /* Note: les 2 dernieres lignes ont ete rajoutees pour la compatibilite Applix */ ; pzdeflang: /* Vide */ | DEFLANG num /* Ceci est necessaire pour des raisons de compatibilite avec les versions anterieures de WORD */ ; ppentete: /* Vide */ | '{' pentete '}' ppentete ; pentete: /* Vide */ | filetbl | colortbl | stylesheet | revtbl | INFO info ; charset: ANSI | MAC { ASCII_TABLE=1; } | PC { ASCII_TABLE=2; } | PCA ; deffont: /* Vide */ | DEFF num ; num: /* Vide */ { $$ = 1; } | NUM { $$ = $1; } ; pznvnum: NUM { $$=$1; } ; pzpcdata: PCDATA { $$ = $1; } | ';' { $$ = ";"; } | 'e' { $$ = "e"; } | 'q' { $$ = "q"; } | ' ' { $$ = " "; } | ' ' { $$ = " "; } ; pzpvpcdata: PCDATA { $$ = $1; } | ';' { $$ = ";"; } | 'e' { $$ = "e"; } | 'q' { $$ = "q"; } | ' ' { $$ = " "; } | ' ' { $$ = " "; } | ',' { $$ = ","; } ; pfontinfo: fontinfo | '{' fontinfo '}' | fontinfo pfontinfo | '{' fontinfo '}' pfontinfo ; fontinfo: F num fontfamily fcharset fpqr fontemb codepage pzpcdata { nouvfonte($2,$3,$4,$5,$8); } fontaltname /*?*/ ';' ; fontfamily: FNIL { $$=LF_FNIL; } | FROMAN { $$=LF_FROMAN; } | FSWISS { $$=LF_FSWISS; } | FMODERN { $$=LF_FMODERN; } | FSCRIPT { $$=LF_FSCRIPT; } | FDECOR { $$=LF_FDECOR; } | FTECH { $$=LF_FTECH; } | FBIDI { $$=LF_FBIDI; } ; /* Note: L'interet de la famille defontes reside dans le fait que l'aplication recevant le document (et c'est notre cas) pourrait ne pas disposer de toutes les fontes, et en particulier de celle demandee par le texte en RTF. On pourra, en connaissant la famille de la police demandee, trouver la plus proche disponible... */ fcharset: /* Vide */ { $$=-1; } | FCHARSET num { $$=$2; } ; /* Note: fcharsetN determine le jeux de caracteres de la table choisie. */ fpqr: /* Vide */ { $$=-1; } | FPQR num { $$=$2; } ; /* Note: Specifies the pitch of a font in the font table. (see Spec for values) */ fontaltname: /* Vide */ | '{' ETOILE FONTFI_LE codepage /*?*/ pzpcdata '}' ; fontemb: /* Vide */ | '{' ETOILE FONTEMB fonttype fontfname /*?*/ data /*?*/ '}' ; /* Note: Il et necessaire d'avoir au moins l'un des deux champs Note: deux types de fontes utilisant cette option: \ftnil (Default) et \fttruetype */ fonttype: FTNIL | FTTRUETYPE ; fontfname: /* Vide */ | '{' ETOILE FONTFI_LE codepage /*?*/ pzpcdata '}' ; codepage: /* Vide */ | CPG num ; /* NOTES: \falt determine une police de 'secours' si celle demandee n'est pas disponible. Syntaxe: '{\*' \falt '}' NOTES: \cpg determine la correspondance entre les tables de codes et les fontes. (voir spec pour liste de valeurs). */ filetbl: /* Vide */ | ETOILE FI_LETBL pfileinfo ; pfileinfo: '{' fileinfo '}' | pfileinfo '{' fileinfo '}' ; fileinfo: FI_LE FID num relpath /*?*/ osnum /*?*/ pfilesource pzpcdata ; pfilesource: filesource | pfilesource filesource ; relpath: /* Vide */ | FRELATIVE num ; osnum: /* Vide */ | FOSNUM num ; filesource: FVALIDMAC | FVALIDDOS | FVALIDNTFS | FVALIDHPFS | FNETWORK ; colortbl: /* Vide */ | COLORTBL ';' pcolordef | COLORTBL pcolordef /* Pour les besoins de la cause (specifications non specifiees) */ ; pcolordef: colordef ';' | pcolordef colordef ';' ; colordef: red blue green | red green blue | blue red green | blue green red | green red blue | green blue red ; red: /* Vide */ | RED num ; blue: /* Vide */ | BLUE num ; green: /* Vide */ | GREEN num ; stylesheet: /* Vide */ | STYLESHEET pstyle ; pstyle: /* Vide */ | style pstyle ; style: '{' styledef /*?*/ keycode /*?*/ pformatting additive /*?*/ based /*?*/ next /*?*/ stylename /*?*/ ';' '}' | '{' styledef /*?*/ keycode /*?*/ additive /*?*/ based /*?*/ next /*?*/ stylename /*?*/ ';' '}' ; styledef: /* Vide */ | S num | CS num | DS num ; /* Note: \csN determine le style de caractere Note: \sN determine le style du paragraphe Note: \dsN determine le style de la section */ keycode: /* Vide */ | '{' KEYCODE keys '}' ; pformatting: formatting | pformatting formatting ; formatting: brdrdef | pznvpparfmt | pznvpapoctl | pznvtabdef | pznvshading | chrfmt ; additive: /* Vide */ | ADDITIVE num ; /* Note: \additive (utilise lors de la definition de styles avec '{\*\cs .... } ) indique que les attributs de style doivent etre supperposes aux attributs courrants. */ based: /* Vide */ | SBASEDON num ; /* Note: \sbasedonN definit le numero du style qui a servi de reference au style actuel. */ next: /* Vide */ | SNEXT num ; /* Note: \snextN definit le prochain style associe avec le style courrant. S'il est omis on conserve le style courrant */ stylename: /* Vide */ | pzpcdata ; keys: shift ctrl alt key | shift alt ctrl key | alt shift ctrl key | alt ctrl shift key | ctrl alt shift key | ctrl shift alt key ; shift: /* Vide */ | SHIFT ; alt: /* Vide */ | ALT ; ctrl: /* Vide */ | CTRL ; key: FN num | pzpcdata ; /* Note: \fnN determine une touche de fonction (numero N) */ revtbl: /* Vide */ ; /* Note: reference tous les auteurs et modifications effectuees sur les documents en question. Il suffit de l'ignorer pour la lecture du texte. */ time: YR num | MO num | DY num | HR num | MIN num | SEC num | time YR num | time MO num | time DY num | time HR num | time MIN num | time SEC num ; /*****************************************************************************************************************/ Document: /*pinfo: On le metra dans l'entete*/ pdocfmtpsection /* | psection */ ; pdocfmtpsection: docfmt pdocfmtpsection | section | pdocfmtpsection section | '{' ETOILE NEXTFILE pzpcdata '}' pdocfmtpsection | '{' ETOILE TEMPLATE pzpcdata '}'pdocfmtpsection ; info: /* Vide */ | '{' '}' ; /* POUR L'INSTANT CE CHAMP LA SERA IGNORE. L'ANALYSEUR LEXICAL NE TRANSMETTRA QUE LES ACCOLADES. PAR LA SUITE NOUS TENTERONS DE L'IMPLEMENTER */ docfmt: DEFTAB num { PZ_FD.FDDEFTAB=($2/20); } | HYPHHOTZ num | HYPHCONSEC num | HYPHCAPS | HYPHAUTO | LINESTART num | FRACWIDTH /* | '{' ETOILE NEXTFILE pzpcdata '}' | '{' ETOILE TEMPLATE pzpcdata '}' */ | MAKEBACKUP | DEFFORMAT | PSOVER | DOCTEMP | DEFLANG num /* FOOTNOTES AND ENDNOTES */ | FET num | FTNSEP | FTNSEPC | FTNCN | AFTNSEP | AFTNSEPC | AFTNCN | ENDNOTES | ENDDOC | FTNTJ | FTNBJ | AENDNOTES | AENDDOC | AFTNBJ | AFTNTJ | FTNSTART num | AFTNSTART num | FTNRSTPG | FTNRESTART | FTNRSTCONT | AFTNRESTART | AFTNRSTCONT | FTNNAR | FTNNALC | FTNNAUC | FTNNRLC | FTNNRUC | FTNNCHI | AFTNNAR | AFTNNALC | AFTNNAUC | AFTNNRLC | AFTNNRUC | AFTNNCHI /* PAGE INFORMATION */ | PAPERW num { PZ_FD.FDPAPERW=($2/20); } | PAPERH num { PZ_FD.FDPAPERH=($2/20); } | PSZ num { PZ_FD.FDPSZ=($2/20); } | MARGL num { PZ_FD.FDMARGL=($2/20); } | MARGR num { PZ_FD.FDMARGR=($2/20); } | MARGT num { PZ_FD.FDMARGT=($2/20); } | MARGB num { PZ_FD.FDMARGB=($2/20); } | FACINGP { PZ_FD.FDFACINGP=1; } | GUTTER num { PZ_FD.FDGUTTER=($2/20); } | MARGMIRROR { PZ_FD.FDMARGMIRROR=1; } | LANDSCAPE { PZ_FD.FDLANDSCAPE=1; } | PGNSTART num { PZ_FD.FDPGNSTART=($2/20); } | WIDOWCTRL { PZ_FD.FDWIDOWCTRL=1; } /* LINKED STYLES */ | LINKSTYLES /* COMPATIBILITY OPTIONS */ | NOTABIND | WRAPTRSP | PRCOLBL | NOEXTRASPRL | NOCOLBAL | CVMME | SPRSTSP | SPRSSPBF | OTBLRUL | TRANSMF | SWPBDR | BRKFRM /* FORMS */ | FORMPROT | ALLPROT | FORMSHADE | FORMDISP | PRINTDATA /* REVISION MARKS */ | REVPROT | REVISIONS | REVPROP num | REVBAR num /* ANNOTATIONS */ | ANNOTPROT /* BIDIRECTIONAL CONTROLS */ | RTLDOC | LTRDOC ; section: psecfmt '{' hdrftr '}' { if (FLAG_Footer) ifDTfprintf(SORT,"}%%\n"); FLAG_Footer=0; } pzhdrftretfin | psecfmt ppara SECT section | '{' hdrftr '}' { if (FLAG_Footer) ifDTfprintf(SORT,"}%%\n"); FLAG_Footer=0; } pzhdrftretfin | ppara SECT section | psecfmt ppara | ppara ; /* REMARQUE: Avant, c'etaient des ppara */ psecfmt: secfmt | psecfmt secfmt ; secfmt: SECT | SECTD | ENDNHERE | BINFSXN num | BINSXN num | DS num | PNSECLVL num | SETUNLOCKED /* Section Break Command Words */ | SBKNONE | SBKCOL | SBKPAGE | SBKEVEN | SBKODD /* Columns Command Words */ | COLS num | COLSX num | COLNO num | COLSR num | COLW num | LINEBETCOL /* Line Numbering Command Words */ | LINEMOD num | LINEX num | LINESTARTS num | LINERESTART | LINEPPAGE | LINECONT /* Page Information Command Words */ | PGWSXN num | PGHSXN num | MARGLSXN num | MARGRSXN num | MARGTSXN num | MARGBSXN num | GUTTERSXN num | LNDSCPSXN | TITLEPG | HEADERY num | FOOTERY num /* Page Numbers Command Words */ | PGNSTARTS num | PGNCONT | PGNRESTART | PGNX num | PGNY num | PGNDEC | PGNUCRM | PGNLCRM | PGNUCLTR | PGNLCLTR | PGNHN num | PGNGNSH num | PGNHNSP | PGNHNSC | PGNHNSM | PGNHNSN /* Vertical Alignment Command Words */ | VERTALT | VERTALB | VERTALC | VERTALJ /* Bidirectional Controls */ | RTLSECT | LTRSECT ; /* Definition des proprietes de formatage des sections. POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ hdrftr: hdrctl ppara | hdrctl ppara '{' hdrftr '}' { if (FLAG_Footer) ifDTfprintf(SORT,"}%%\n"); FLAG_Footer=0; } ; hdrctl: HEADER | FOOTER { FLAG_Footer=1; ifDTfprintf(SORT,"\\markright{");} | HEADERL | HEADERR | HEADERF | FOOTERL | FOOTERR | FOOTERF ; /* Note: Definissent les entetes et les pieds de pages pour les pages de gauche, droite, toutes les pages, ou simplement la premiere. */ ppara: para | ppara para ; declpara: pzmultdeclpara | declpara pzmultdeclpara ; pzmultdeclpara: accopzpn brdrdef pznvpparfmt | accopzpn pznvpparfmt brdrdef | brdrdef pznvpparfmt accopzpn | brdrdef accopzpn pznvpparfmt | pznvpparfmt brdrdef accopzpn | pznvpparfmt accopzpn brdrdef | accopzpn brdrdef | brdrdef accopzpn | accopzpn pznvpparfmt | pznvpparfmt accopzpn | brdrdef pznvpparfmt | pznvpparfmt brdrdef | accopzpn | brdrdef | pznvpparfmt ; declbispara: pznvpapoctl pznvtabdef pznvshading | pznvpapoctl pznvtabdef | pznvpapoctl pznvshading | pznvtabdef pznvshading | pznvpapoctl | pznvtabdef | pznvshading ; pzmottrowd: TROWD { Num_Max_Col=0; Inter_Col=0; FLAG_NIT=0 ;} ; para: pzsubquapara | declpara | pzsubquipara | pzsubpara | declbispara psubdoc pzsubterpara | psubdoc pzsubterpara ; pzsubquapara: declbispara pzsubpara /* Il semblerait que d'anciennes versions de RTF aient ommis les TRGAPH (sic) */ ; pzsubquipara: pzsubquapara | pzsubpara | declbispara psubdoc pzsubterpara | psubdoc pzsubterpara ; pzsubpara: psubdoc | pzmottrowd pzsubbispara ; pzsubbispara: TRGAPH num { Inter_Col=$2/10; } pzpsubpar | pzpsubpar ; pzsubterpara: motcell pcell | ppar motcell pcell ; pzpsubpar: ptbldef pptbldef ppptbldef zpcelldef pcell /* Avant: row */ | pptbldef ppptbldef zpcelldef pcell | ptbldef ppptbldef zpcelldef pcell | ptbldef pptbldef zpcelldef pcell | ppptbldef zpcelldef pcell | pptbldef zpcelldef pcell | ptbldef zpcelldef pcell | zpcelldef pcell ; ppar: PAR { if (FLAG_BorderBot) ifDTfprintf(SORT,"\\hline%%\n"); FLAG_BorderBot=0; if (!FLAG_Footer && !FLAG_Equation) { ifDTfprintf(SORT,"\n\\par %%\n"); }; if (FLAG_LI!=0) ifDTfprintf(SORT,"\n\\leftskip = %d pt ",FLAG_LI); if (FLAG_RI!=0) ifDTfprintf(SORT,"\n\\rightskip = %d pt ",FLAG_RI); if (FLAG_FI!=0) ifDTfprintf(SORT,"\n\\parindent = %d pt \n",FLAG_FI); FLAG_Dollars=0; } para { $$=$3; } ; /* Bullets and Numbering */ accopzpn: '{' { ifDTfprintf(SORT,"{%%\n"); if (FLAG_DebutTeX) ContextActuel=nouvcontext(JUST); } pzpn '}' { if (FLAG_Indice) { FLAG_Indice--; if (FLAG_Equation==-1 && !FLAG_Indice) { FLAG_Equation=0; ifDTfprintf(SORT,"}$%%\n"); } else ifDTfprintf(SORT,"}%%\n"); } if (FLAG_Exposant) { FLAG_Exposant--; if (FLAG_Equation==-1 && !FLAG_Exposant) { FLAG_Equation=0; ifDTfprintf(SORT,"}$%%\n"); } else ifDTfprintf(SORT,"}%%\n"); } if (FLAG_Symbol==1) FLAG_Symbol=0; $$=""; if (FLAG_DebutTeX) contextback();ifDTfprintf(SORT,"}%%\n"); FLAG_Bold=0; FLAG_Italique=0; } ; pzpn: ETOILE PNSECLVL num pndesc | ETOILE PNSECLVL num | PNTEXT charr '}' '{' ETOILE PN pnlevel pndesc | PNTEXT charr '}' '{' ETOILE PN pnlevel | psubdoc ; pnlevel: PNLVL num | PNVLBT | PNLVLBODY | PNLVLCONT ; pndesc: pnnstyle | pnchrfmt | pntxtb | pntxta | pnfmt | pnnstyle pndesc | pnchrfmt pndesc | pntxtb pndesc | pntxta pndesc | pnfmt pndesc ; pnnstyle: PNCARD | PNDEC | PNUCLTR | PNUCRM | PNLCLTR | PNLCRM | PNORD | PNORDT ; pnchrfmt: PNF num | PNFS num | PNCF num | PNB | PNI | PNCAPS | PNSCAPS | pnul | PNSTRIKE | PNF num pnchrfmt | PNFS num pnchrfmt | PNCF num pnchrfmt | PNB pnchrfmt | PNI pnchrfmt | PNCAPS pnchrfmt | PNSCAPS pnchrfmt | pnul pnchrfmt | PNSTRIKE pnchrfmt ; pnul: PNUL | PNULD | PNULDB | PNULNONE | PNULW ; pnfmt: PNNUMONCE | PNACROSS | PNINDENT num | PNSP num | PNPREV | pnjust | PNSTART num | PNHANG | PNRESTART | PNNUMONCE pnfmt | PNACROSS pnfmt | PNINDENT num pnfmt | PNSP num pnfmt | PNPREV pnfmt | pnjust pnfmt | PNSTART num pnfmt | PNHANG pnfmt | PNRESTART pnfmt ; pnjust: PNQC | PNQL | PNQR ; pntxtb: '{' PNTXTB pzpcdata '}' ; pntxta: '{' PNTXTA pzpcdata '}' ; brdrdef: brdrseg brdrk | brdrseg brdrk pbrdr | brdrdef brdrseg brdrk | brdrdef brdrseg brdrk pbrdr ; brdrseg: BRDRT { /*ifDTfprintf(SORT,"\\hline %%\n");*/ } | BRDRB { /*FLAG_BorderBot=1;*/ } | BRDRL | BRDRR | BRDRBTW | BRDRBAR | BOX ; brdr: brdrk | brdrk pbrdr ; pbrdr: BRDRW num | BRSP num | BRDRCF num | pbrdr BRDRW num | pbrdr BRSP num | pbrdr BRDRCF num ; brdrk: BRDRS | BRDRTH | BRDRSH | BRDRDB | BRDRDOT | BRDRDASH | BRDRHAIR ; psubdoc: SUBDOCUMENT { $$=""; } | pchar { $$=$1; } ; pchar: charr { $$=$1; } | pchar charr { $$ = (char * ) malloc (strlen($1) + strlen($2) + 1); strcpy($$,$1); strcat($$,$2); } ; motrow: ROW {Num_Col_Tabular=0; FLAG_Tableau=0; FLAG_NIT=1;} ; pcell: pzsubterpcell | declpara pzsubquapcell | declbispara pzsubterpcell | declbispara ; pzsubpcell: pzsubbispcell | ppar pzsubbispcell ; pzsubbispcell: motcell pcell | pcell ; pzsubterpcell: motrow | psubdoc pzsubpcell | motcell pcell /* Pour les cases de tableaux vides... */ ; pzsubquapcell: pzsubterpcell | declbispara pzsubterpcell | declbispara pcell /* L'etrange format Mac */ ; motcell: CELL { if (Num_Col_TabularEtatTexte=JUST; } | S num | HYPHPAR | INTBL { if (FLAG_Tableau==0 && Num_Col_Tabular==0 /* && Num_Col_TabularEtatTexte=LEFT; if( FLAG_DebutTeX && !FLAG_Footer) FLAG_FlushLeft=1; } | QR { if (FLAG_Center==1) { FLAG_Center=0; ifDTfprintf(SORT,"\n\\end{center}\n"); FLAG_Dollars=0; } if (FLAG_FlushLeft==1) { FLAG_FlushLeft=0; ifDTfprintf(SORT,"\n\\end{flushleft}\n"); } if (!FLAG_Footer && FLAG_NIT) { ifDTfprintf(SORT,"\n\\begin{flushright}\n"); }; if (ContextActuel==NULL && FLAG_DebutTeX) ContextActuel=nouvcontext(JUST); if( FLAG_DebutTeX ) ContextActuel->EtatTexte=RIGHT; if( FLAG_DebutTeX && !FLAG_Footer) FLAG_FlushRight=1; } | QJ { if (FLAG_Center==1) { FLAG_Center=0; ifDTfprintf(SORT,"\n\\end{center}\n"); FLAG_Dollars=0; } if (FLAG_FlushLeft==1) { FLAG_FlushLeft=0; ifDTfprintf(SORT,"\n\\end{flushleft}\n"); } if (FLAG_FlushRight==1) { FLAG_FlushRight=0; ifDTfprintf(SORT,"\n\\end{flushright}\n"); } if (ContextActuel==NULL && FLAG_DebutTeX) ContextActuel=nouvcontext(JUST); if( FLAG_DebutTeX ) ContextActuel->EtatTexte=JUST; } | QC { if (FLAG_FlushLeft==1) { FLAG_FlushLeft=0; ifDTfprintf(SORT,"\n\\end{flushleft}\n"); } if (FLAG_FlushRight==1) { FLAG_FlushRight=0; ifDTfprintf(SORT,"\n\\end{flushright}\n"); } if (!FLAG_Footer && FLAG_NIT) { ifDTfprintf(SORT,"\n\\begin{center}\n"); } if (FLAG_Footer) { ifDTfprintf(SORT," \\centerline "); }; if (ContextActuel==NULL && FLAG_DebutTeX) ContextActuel=nouvcontext(JUST); if( FLAG_DebutTeX && !FLAG_Footer) ContextActuel->EtatTexte=CENTER; if( FLAG_DebutTeX && !FLAG_Footer) FLAG_Center=1; if( FLAG_DebutTeX && !FLAG_Footer) FLAG_Dollars=1; } | FI num { if (FLAG_FlushRight==0 && FLAG_FlushLeft==0 && FLAG_Center==0) { FLAG_FI=(int)($2/20); ifDTfprintf(SORT,"\n\\parindent = %d pt\n",FLAG_FI); } } | LI num { if (FLAG_FlushRight==0 && FLAG_FlushLeft==0 && FLAG_Center==0) { FLAG_LI=(int)($2/20); ifDTfprintf(SORT,"\n\\leftskip = %d pt ",FLAG_LI); } } | RI num { if (FLAG_FlushRight==0 && FLAG_FlushLeft==0 && FLAG_Center==0) { FLAG_RI=(int)($2/20); ifDTfprintf(SORT,"\n\\rightskip = %d pt ",FLAG_RI); } } /* Spacing Command Words */ | SB num | SA num | SL num | SLMULT num /* Subdocuments Command Words */ | SUBDOCUMENT num /* Bidirectionnal Controls */ | RTLPAR | LTRPAR ; /* Definition des proprietes de formatage des paragraphes. Si le mot de commande \pard n'est pas specifie, le paragraphe recupere les proprietes de son precedent. POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ pznvpapoctl: apoctl | apoctl pznvpapoctl ; apoctl: framesize | horzpos | vertpos | txtwrap | dropcap | apoctl framesize | apoctl horzpos | apoctl vertpos | apoctl txtwrap | apoctl dropcap ; framesize: framesize ABSW num | framesize ABSH num | ABSW num | ABSH num ; horzpos: hframe horzpos | hdist horzpos | hframe | hdist ; vertpos: vframe vertpos | vdist vertpos | vframe | vdist ; txtwrap: NOWRAP txtwrap | DXFRTEXT num txtwrap | DFRMTXTX num txtwrap | DFRMTXTY num txtwrap | NOWRAP | DXFRTEXT num | DFRMTXTX num | DFRMTXTY num ; dropcap: DROPCAPLI num dropcap | DROPCAPT num dropcap | DROPCAPLI num | DROPCAPT num ; hframe: PHMRG | PHPG | PHCOL ; hdist: POSX num | POSNEGX num | POSXC | POSXI | POSXO | POSXL | POSXR ; vframe: PVMRG | PVPG | PVPARA ; vdist: POSY num | POSNEGY num | POSYT | POSYIL | POSYB | POSYC ; pznvshading: SHADING num | pat | pshading SHADING num | pshading pat | SHADING num pshading | pat pshading ; pshading: CFPAT num | CBPAT num | pshading CFPAT num | pshading CBPAT num ; pat: BGHORIZ | BGVERT | BGFDIAG | BGBDIAG | BGCROSS | BGDCROSS | BGDKHORIZ | BGDKVERT | BGDKFDIAG | BGDKBDIAG | BGDKCROSS | BGDKDCROSS ; pznvtabdef: tabkind tablead TX num | tabkind tablead TB num | tabkind TX num /* Ajoute a posteriori */ | tabkind TB num /* Ajoute a posteriori */ | tablead TB num /* Ajoute a posteriori */ | tablead TX num /* Ajoute a posteriori */ | TX num /* Pour les besoins de la cause... */ | pznvtabdef tabkind tablead TX num | pznvtabdef tabkind tablead TB num | pznvtabdef tabkind TX num /* Ajoute a posteriori */ | pznvtabdef tabkind TB num /* Ajoute a posteriori */ | pznvtabdef tablead TB num /* Ajoute a posteriori */ | pznvtabdef tablead TX num /* Ajoute a posteriori */ | pznvtabdef TX num /* Pour les besoins de la cause... */ ; tabkind: TQR | TQC | TQDEC ; /* Note: \tqr : Flush Right Tab Note: \tqc : Centered Tab Note: \tqdes : Decimal Tab */ tablead: TLDOT | TLHYPH | TLUL | TITH | TLEQ ; /* Note: \tldot : Leader dots Note: \tlhyph : Leader Hyphens Note: \tlul : Leader underline Note: \tith : Leader thick line Note: \tleq :Leader equal sign */ zpcelldef: pcelldef motcellxnum | motcellxnum | pcelldef motcellxnum zpcelldef | motcellxnum zpcelldef ; motcellxnum: CELLX num { if (Num_Max_Col==0) Largeur_Cols[Num_Max_Col]=($2/20); if (Num_Max_Col!=0) { cpt=1; Largeur_Cols[Num_Max_Col]=($2/20); while(cpt<=Num_Max_Col) Largeur_Cols[Num_Max_Col]-=Largeur_Cols[Num_Max_Col-(cpt++)]; } Num_Max_Col++;} ; ptbldef: rowjust | rowwrite | ptbldef rowjust | ptbldef rowwrite ; pptbldef: TRBRDRT brdr | TRBRDRB brdr | TRBRDRL brdr | TRBRDRR brdr | TRBRDRH brdr | TRBRDRV brdr | TRLEFT num | TRRH num | pptbldef TRBRDRT brdr | pptbldef TRBRDRB brdr | pptbldef TRBRDRL brdr | pptbldef TRBRDRR brdr | pptbldef TRBRDRH brdr | pptbldef TRBRDRV brdr | pptbldef TRLEFT num | pptbldef TRRH num ; ppptbldef: TRHDR | TRKEEP | ppptbldef TRHDR | ppptbldef TRKEEP ; rowjust: TRQL | TRQR | TRQC ; rowwrite: LTRROW | RTLROW ; pcelldef: CLMGF | CLMGR | CLBRDRT brdr | CLBRDRL brdr | CLBRDRB brdr | CLBRDRR brdr | cellpat pcellshad | pcellshad | CLMGF pcelldef | CLMGR pcelldef | CLBRDRT brdr pcelldef | CLBRDRL brdr pcelldef | CLBRDRB brdr pcelldef | CLBRDRR brdr pcelldef | cellpat pcellshad pcelldef | pcellshad pcelldef ; pcellshad: CLSHDNG num /* Ou Vide ? Cette ligne n'est pas tres claire dans la Spec. */ | CLCFPAT num pcellshad | CLCBPAT num pcellshad | CLCFPAT num | CLCBPAT num | CLSHDNG num pcellshad ; cellpat: CLBGHORIZ | CLBGVERT | CLBGFDIAG | CLBGBDIAG | CLBGCROSS | CLBGDCROSS | CLBGDKHOR | CLBGDKVERT | CLBGDKFDIAG | CLBGDKBDIAG | CLBGDKCROSS | CLBGDKRCDCROSS ; /*............................................................................................ TEXTE ET CARACTERES ----------------- */ charr: '{' { ifDTfprintf(SORT,"{%%\n"); if (FLAG_DebutTeX) ContextActuel=nouvcontext(JUST); } pzincharr '}' { if (FLAG_Indice) { FLAG_Indice--; if (FLAG_Equation==-1 && !FLAG_Indice) { FLAG_Equation=0; ifDTfprintf(SORT,"}$%%\n"); } else ifDTfprintf(SORT,"}%%\n"); } if (FLAG_Exposant) { FLAG_Exposant--; if (FLAG_Equation==-1 && !FLAG_Exposant) { FLAG_Equation=0; ifDTfprintf(SORT,"}$%%\n"); } else ifDTfprintf(SORT,"}%%\n"); } if (FLAG_Symbol==1) FLAG_Symbol=0; $$=""; if (FLAG_DebutTeX) contextback();ifDTfprintf(SORT,"}%%\n"); FLAG_Bold=0; FLAG_Italique=0; } | psecfmt '{' hdrftr '}' { if (FLAG_Footer) ifDTfprintf(SORT,"}%%\n"); FLAG_Footer=0; } pzhdrftretfin | psecfmt ppara SECT section | '{' hdrftr '}' { if (FLAG_Footer) ifDTfprintf(SORT,"}%%\n"); FLAG_Footer=0; } pzhdrftretfin | psecfmt ppara /*| atext ; Non traite pour l'instant*/ | pchrfmt pdata { if (FLAG_Underline==1) { FLAG_Underline=0; ifDTfprintf(SORT,"}%%\n"); } $$=$2; } | pznvpdata { if (FLAG_Underline==1) { FLAG_Underline=0; ifDTfprintf(SORT,"}%%\n"); } $$=$1; } | pchrfmt pdata charr { if (FLAG_Underline==1) { FLAG_Underline=0; ifDTfprintf(SORT,"}%%\n"); } $$=$2; } | pznvpdata charr { if (FLAG_Underline==1) { FLAG_Underline=0; ifDTfprintf(SORT,"}%%\n"); } $$=$1; } | BKMKEND pzpcdata { $$=""; } | BKMKEND pzpcdata charr { $$=""; } | BKMKSTART bkmkcol pzpcdata { $$=""; } | BKMKSTART bkmkcol pzpcdata charr { $$=""; } | BKMKSTART pzpcdata { $$=""; } | BKMKSTART pzpcdata bkmkcol { $$=""; } | BKMKSTART pzpcdata bkmkcol charr { $$=""; } | BKMKSTART pzpcdata charr { $$=""; } | ETOILE BKMKEND pzpcdata { $$=""; } | ETOILE BKMKEND pzpcdata charr { $$=""; } | ETOILE BKMKSTART BKMKPUB PUBAUTO pzpubobject pzpcdata { $$=""; } | ETOILE BKMKSTART BKMKPUB PUBAUTO pzpubobject pzpcdata charr { $$=""; } | ETOILE BKMKSTART BKMKPUB pzpubobject pzpcdata { $$=""; } | ETOILE BKMKSTART BKMKPUB pzpubobject pzpcdata charr { $$=""; } | ETOILE BKMKSTART bkmkcol pzpcdata { $$=""; } | ETOILE BKMKSTART bkmkcol pzpcdata charr { $$=""; } | ETOILE BKMKSTART pzpcdata { $$=""; } | ETOILE BKMKSTART pzpcdata charr { $$=""; } | ETOILE BKMKSTART pzpcdata bkmkcol { $$=""; } | ETOILE BKMKSTART pzpcdata bkmkcol charr { $$=""; } | ETOILE pzmotfootnote pzetfincharr { $$=""; } | pzmotfootnote pzetfincharr { $$=""; } | FIELD fieldinst fieldrslt { $$=""; } | FIELD fieldinst fieldrslt charr { $$=""; } | FIELD fieldmod /*?*/ fieldinst fieldrslt { $$=""; } | FIELD fieldmod /*?*/ fieldinst fieldrslt charr { $$=""; } | OBJECT /*pzobj objdata result */ { $$=""; } | PICT { FLAG_InPict=1; FLAG_WMetafile=0; } endpict | ETOILE ATNID pzpcdata { $$=""; } | ETOILE ATNAUTHOR pzpcdata { $$=""; } | ETOILE ATNTIME time { $$=""; } | CHATN { $$=""; } charr | ETOILE ATNICN pict charr { $$=""; } | ETOILE ANNOTATION '{' ETOILE ATNREF num '}' ppara { $$=""; } | ETOILE DO { $$=""; } | DO { $$=""; } | XE { $$=""; } | TC { $$=""; } ; endpict: pzpict datadata charr { $$=""; if (FLAG_WMetafile) ifDTfprintf(SORT,"%%\n\\framebox(%d,%d){}\n", FLAG_PICTLargeur,FLAG_PICTHauteur); else ifDTfprintf(SORT,"%%\n\\framebox(%d,%d){}\n", (int)(FLAG_PICTLargeur*20), (int)(FLAG_PICTHauteur*20)); FLAG_PICTHauteur=0; FLAG_PICTLargeur=0; FLAG_InPict=0; FLAG_WMetafile=0; } | pzpict datadata { $$=""; if (FLAG_WMetafile) ifDTfprintf(SORT,"%%\n\\framebox(%d,%d){}\n", FLAG_PICTLargeur,FLAG_PICTHauteur); else ifDTfprintf(SORT,"%%\n\\framebox(%d,%d){}\n", (int)(FLAG_PICTLargeur*20), (int)(FLAG_PICTHauteur*20)); FLAG_PICTHauteur=0; FLAG_PICTLargeur=0; FLAG_InPict=0; FLAG_WMetafile=0; } ; pzhdrftretfin: ppara SECT section | ppara ; pzetfincharr: ppara { /*ifDTfprintf(SORT,"}%%\n");*/ } | ppara { ifDTfprintf(SORT,"}%%\n"); } charr ; pzmotfootnote: FOOTNOTE { FLAG_Exposant=0; FLAG_Indice=0; /* fseek(SORT,-strlen("$^{"),1); */ ifDTfprintf(SORT,"\\footnote{%%\n"); } ; pzincharr: /* Vide: Pour une fois il semblerait bon. */ | charr | ppara SECT section | ppara ; pchrfmt: chrfmt | chrfmt pchrfmt ; pdata: /*data*/ {$$="";} /* Avant: data . Pb avec les specifications */ | pdata data { $$ = (char * ) malloc (strlen($1) + strlen($2) + 1); strcpy($$,$1); strcat($$,$2); } ; /* La regle suivante s'applique aux champs de donees ne pouvant pas etre vides */ pznvpdata: data { $$ = (char * ) malloc (strlen($1) + 1); strcpy($$,$1); } | pznvpdata data { $$ = (char * ) malloc (strlen($1) + strlen($2) + 1); strcpy($$,$1); strcat($$,$2); } ; data: pzpcdata { $$=$1; if (FLAG_Symbol==0) { printText($1); } if (FLAG_Symbol!=0) { if (FLAG_Equation==0) { ifDTfprintf(SORT,"$"); printSymbol($1); ifDTfprintf(SORT,"$"); } if (FLAG_Equation!=0) printSymbol($1); } } | pznvnum { $$=""; ifDTfprintf(SORT,"%d",$1); } | spec { $$=""; /*FLAG_Equation=0;*/ } ; chrfmt: PLAIN | B num { if ($2==1) { ifDTfprintf(SORT,"\\bf "); FLAG_Bold=1; } if ($2!=1) { if ($2==0) ifDTfprintf(SORT,"\t\t\t ****** Fin de bold \n"); if ($2!=0) ifDTfprintf(SORT,"\t\t\t !!!!!! Erreur dans le bold \n"); } } | CAPS num | DELETED num | DN num { if (FLAG_DebutTeX) { if (FLAG_Equation==0) {FLAG_Equation=-1; ifDTfprintf(SORT,"$_{"); } else { ifDTfprintf(SORT,"_{"); } FLAG_Indice++; } } | SUB | NOSUPERSUB | EXPND num | EXPNDTW num | KERNING num | F num { FonteActuelle=DebLisFontes; while(FonteActuelle!=NULL && FonteActuelle->LF_Fontnum!=$2) FonteActuelle=FonteActuelle->suiv; if (FonteActuelle!=NULL) { if (!strcmp(FonteActuelle->LF_Fontname,"Symbol")) FLAG_Symbol=1; if (strcmp(FonteActuelle->LF_Fontname,"Symbol")) { ifDTfprintf(SORT,"%s",FonteActuelle->LF_TexEquiv); FLAG_Symbol=0; } } else FLAG_Symbol=0; if (FLAG_Bold) ifDTfprintf(SORT,"\\bf "); if (FLAG_Italique) ifDTfprintf(SORT,"\\it "); } /* On a besoin de faire une mise a jour de l'aspect (Bold, Italique) car le changement de fonte le detruit (justement)*/ | FS num { if (FLAG_DebutTeX && FLAG_Equation==0) ifDTfprintf(SORT,"%s",EqTeXTaille($2)); FonteActuelle=DebLisFontes; while(FonteActuelle!=NULL && FonteActuelle->LF_Fontnum!=$2) FonteActuelle=FonteActuelle->suiv; if (FonteActuelle!=NULL) { if (!strcmp(FonteActuelle->LF_Fontname,"Symbol")) FLAG_Symbol=1; if (strcmp(FonteActuelle->LF_Fontname,"Symbol")) { ifDTfprintf(SORT,"%s",FonteActuelle->LF_TexEquiv); FLAG_Symbol=0; } } else FLAG_Symbol=0; /* On est obliges de repositionner les parametres de la fonte... */ if (FLAG_Bold) ifDTfprintf(SORT,"\\bf "); if (FLAG_Italique) ifDTfprintf(SORT,"\\it "); } | I num { if ($2==1) { ifDTfprintf(SORT,"\\it "); FLAG_Italique=1; } else if ($2==0) ifDTfprintf(SORT,"\t\t\t ****** Fin de italique \n"); else ifDTfprintf(SORT,"\t\t\t !!!!!! Erreur dans le italique \n"); } | OUTL num | REVISED | REVAUTH num | REVDTTM num | SCAPS num | SHAD num | STRIKE num | UL num { if (FLAG_DebutTeX) { if ($2==1) { ifDTfprintf(SORT,"\\underline {"); FLAG_Underline=1; } else if ($2==0) { ifDTfprintf(SORT,"\t\t\t ****** Fin de underline \n"); FLAG_Underline=0; } else ifDTfprintf(SORT,"\t\t\t !!!!!! Erreur dans le underline \n"); } } | ULD num | ULDB num | ULNONE | ULW | UP num { if (FLAG_DebutTeX) { if (FLAG_Equation==0) {FLAG_Equation=-1; ifDTfprintf(SORT,"$^{%%\n"); } else { ifDTfprintf(SORT,"^{%%\n"); } FLAG_Exposant++; } } | SUPER | V num | CF num | CB num | RTLCH | LTRCH | CS num | CCHS num | LANG num ; /* Proprietes de formatage du texte */ atext: 'z' /* Code qui ne sera jamais passe par l'analyseur lexical */ /* Vide POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ ; /* Proprietes des characteres associes (pour les langues Arabe et Hebreux) */ spec: CHDATE { ifDTfprintf(SORT,"\\today "); } | CHDPL { ifDTfprintf(SORT,"\\today "); } | CHDPA { ifDTfprintf(SORT,"\\today "); } | CHTIME | CHPGN | SECTNUM | CHFTN | CHATN | CHFTNSEP | CHFTNSEPC /* | motcell | motrow*/ | PAR { if (FLAG_BorderBot) ifDTfprintf(SORT,"\\hline%%\n"); FLAG_BorderBot=0; if (FLAG_Underline==1) { FLAG_Underline=0; ifDTfprintf(SORT,"}%%\n"); } if (!FLAG_Footer && !FLAG_Equation) { ifDTfprintf(SORT,"\n\\par "); }; if (FLAG_LI!=0) ifDTfprintf(SORT,"\n\\leftskip = %d pt ",FLAG_LI); if (FLAG_RI!=0) ifDTfprintf(SORT,"\n\\rightskip = %d pt ",FLAG_RI); if (FLAG_FI!=0) ifDTfprintf(SORT,"\n\\parindent = %d pt\n",FLAG_FI); FLAG_Dollars=0; } | SECT | PAGE { ifDTfprintf(SORT,"\\newpage ");} | COLUMN | LINE { ifDTfprintf(SORT,"\\newline ");} | SOFTPAGE | SOFTCOL | SOFTLINE | SOFTLHEIGHT num | TAB { ifDTfprintf(SORT,"\n\\hspace{%dpt}", PZ_FD.FDDEFTAB);} | EMDASH { ifDTfprintf(SORT,"--"); } | ENDASH { ifDTfprintf(SORT,"-"); } | EMSPACE { ifDTfprintf(SORT,"\\,\\,"); } | ENSPACE { ifDTfprintf(SORT,"\\, "); } | BULLET { if (FLAG_Equation) ifDTfprintf(SORT,"\\bullet "); if (!FLAG_Equation) ifDTfprintf(SORT,"$\\bullet $"); } | LQUOTE { ifDTfprintf(SORT,"`"); } | RQUOTE { ifDTfprintf(SORT,"'"); } | LDBLQUOTE { ifDTfprintf(SORT,"\""); } | RDBLQUOTE { ifDTfprintf(SORT,"\""); } | PIPE { FLAG_Equation=1; } equation | TILDE { ifDTfprintf(SORT,"\\ "); } | MOINS /* Optional Hyphen: Cesure */ | UNDERSCORE /* Nonbreaking Hyphen: Cesure */ | DEUXPOINTS /* Sous-Entree dans un index */ /* | ETOILE /* Nouvelles commandes */ | APOSTROPHE /* ' : APOSTROPHE plus valeur hexa */ { { unsigned long ullu; ullu=strtol($1,NULL,16); if (FLAG_Symbol) printApostrophe(ullu); if (!FLAG_Symbol) { if (ASCII_TABLE==2 && !FLAG_Equation) ifDTfprintf(SORT,"%s",ASCII_PC[ullu-DEBASCII_PC]); if (ASCII_TABLE==1 && !FLAG_Equation) ifDTfprintf(SORT,"%s",ASCII_MAC[ullu-DEBASCII_MAC]); if (ASCII_TABLE==2 && FLAG_Equation) ifDTfprintf(SORT,"%s",ASCII_PC_MATH[ullu-DEBASCII_PC]); if (ASCII_TABLE==1 && FLAG_Equation) ifDTfprintf(SORT,"%s",ASCII_MAC_MATH[ullu-DEBASCII_MAC]); } } } | LTRMARK | RTLMARK | ZWJ | ZWNJ ; /* Caracteres Speciaux */ picttype: MACPICT | PMMETAFILE num | WMETAFILE { FLAG_WMetafile=1; } num | DIBITMAP num bitmapinfo | WBITMAP num ; bitmapinfo: WBMBITSPIXEL num | WBMPLANES num | WBMWIDTHBYTES num | bitmapinfo WBMBITSPIXEL num | bitmapinfo WBMPLANES num | bitmapinfo WBMWIDTHBYTES num ; pict: '{' PICT pzpict datadata '}' ; pictsize: pzpictsize ppzpictsize pppzpictsize | pzpictsize ppzpictsize | pzpictsize pppzpictsize | pzpictsize ; pzpict: brdr | pznvshading | picttype | pictsize | metafileinfo | pzpict brdr | pzpict pznvshading | pzpict picttype | pzpict pictsize | pzpict metafileinfo ; pzpictsize: PICW num { FLAG_PICTLargeur=$2/20; } | PICH num { FLAG_PICTHauteur=$2/20; } | pzpictsize PICW num { FLAG_PICTLargeur=$3/20; } | pzpictsize PICH num { FLAG_PICTHauteur=$3/20; } ; ppzpictsize: PICWGOAL num { FLAG_PICTLargeur=$2/20; } | PICHGOAL num { FLAG_PICTHauteur=$2/20; } | ppzpictsize PICWGOAL num { FLAG_PICTLargeur=$3/20; } | ppzpictsize PICHGOAL num { FLAG_PICTHauteur=$3/20; } ; pppzpictsize: PICSCALEX num | PICSCALEY num | PICSCALED num | PICCROPT num | PICCROPB num | PICCROPR num | PICCROPL num | pppzpictsize PICSCALEX num | pppzpictsize PICSCALEY num | pppzpictsize PICSCALED num | pppzpictsize PICCROPT num | pppzpictsize PICCROPB num | pppzpictsize PICCROPR num | pppzpictsize PICCROPL num ; metafileinfo: PICBMP | PICBPP | metafileinfo PICBMP | metafileinfo PICBPP ; datadata: BIN BDATA | SDATA | pzpcdata ; pzobj: objtype | objmod | objclass | objname | objtime | objsize | rsltmod | pzobj objtype | pzobj objmod | pzobj objclass | pzobj objname | pzobj objtime | pzobj objsize | pzobj rsltmod ; objtype: OBJEMB | OBJLINK | OBJAUTLINK | OBJSUB | OBJPUB | ONJICEMB ; objmod: LINKSELF | OBJLOCK | OBJUPDATE ; objclass: '{' ETOILE OBJCLASS pzpcdata '}' ; objname: '{' ETOILE OBJNAME pzpcdata '}' ; objtime: '{' ETOILE OBJTIME time '}' ; rsltmod: RSLTMERGE | rsltmod RSLTMERGE | rslttype | rsltmod rslttype ; rslttype: RSLTRTF | RSLTTXT | RSLTPICT | RSLTBMP ; objsize: OBJSETSIZE | OBJALIGN num | OBJTRANSY num | objhw | OBJCROPT num | OBJCROPB num | OBJCROPL num | OBJCROPR num | OBJSCALEY num | OBJSCALEX num | objsize OBJSETSIZE | objsize OBJALIGN num | objsize OBJTRANSY num | objsize objhw | objsize OBJCROPT num | objsize OBJCROPB num | objsize OBJCROPL num | objsize OBJCROPR num | objsize OBJSCALEY num | objsize OBJSCALEX num ; objhw: OBJH num | OBJW num | objhw OBJH num | objhw OBJW num ; objdata: '{' ETOILE OBJDATA pzobjdata data '}' | '{' ETOILE OBJDATA data '}' ; pzobjdata: objalias | objsect | pzobjdata objalias | pzobjdata objsect ; objalias: '{' ETOILE OBJALIAS data '}' ; objsect: '{' ETOILE OBJSECT data '}' ; result: '{' RESULT ppara '}' ; pzpubobject: objalias | objsect | pzpubobject objalias | pzpubobject objsect ; /* Objets crees par Microsoft OLE links et Macintosh Edition Manager*/ do: 'z' /* Code qui ne sera jamais passe par l'analyseur lexical */ /* Vide POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ ; /* Drawing Objects */ atrfstart: '{' ETOILE ATRFSTART num '}' | '{' ATRFSTART num '}' ; atrfend: '{' ETOILE ATRFEND num '}' | '{' ATRFEND num '}' ; annot: atnidauthor '{' ETOILE ATNTIME time '}' CHATN '{' ETOILE ATNICN pict '}' '{' ETOILE ANNOTATION '{' ETOILE ATNREF num '}' ppara '}' | atnidauthor CHATN '{' ETOILE ATNICN pict '}' '{' ETOILE ANNOTATION '{' ETOILE ATNREF num '}' ppara '}' | atnidauthor '{' ETOILE ATNTIME time '}' CHATN '{' ETOILE ANNOTATION '{' ETOILE ATNREF num '}' ppara '}' | atnidauthor CHATN '{' ETOILE ANNOTATION '{' ETOILE ATNREF num '}' ppara '}' ; atnidauthor: '{' ETOILE ATNID pzpcdata '}' '{' ETOILE ATNAUTHOR pzpcdata '}' ; /* Annotations */ fieldmod: FLDDIRTY /* TROUVER UN MOYEN DE GERER LE DIRTY !!!!!! */ | FLDEDIT | FLDLOCK | FLDPRIV | FLDDIRTY fieldmod /* TROUVER UN MOYEN DE GERER LE DIRTY !!!!!! */ | FLDEDIT fieldmod | FLDLOCK fieldmod | FLDPRIV fieldmod ; fieldinst: '{' ETOILE FLDINST pzeqalt '}' ; pzeqalt: equation | equation FLDALT | PZPAUTREFIELD pzpcdata ; fieldrslt: '{' ETOILE FLDRSLT ppara '}' | '{' FLDRSLT ppara '}' /* Ecart entre la theorie RTF et la pratique :-( */ | '{' FLDRSLT '}' /* Ecart entre la theorie RTF et la pratique :-( */ ; idx: 'z' /* Code qui ne sera jamais passe par l'analyseur lexical */ /* Vide POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ ; /* Index Entries */ toc: 'z' /* Code qui ne sera jamais passe par l'analyseur lexical */ /* Vide POUR L'INSTANT CE CHAMP LA SERA IGNORE. */ ; /* Table Of Contents Entries */ bkmkcol: BKMKCOLF num | BKMKCOLL num | BKMKCOLF num bkmkcol | BKMKCOLL num bkmkcol ; /* Regles de Grammaire pour les formules mathematiques */ equation: /* Vide */ | PZPEQ { FLAG_Equation=1; /*if (FLAG_Dollars==1) ifDTfprintf(SORT,"$$ "); if (FLAG_Dollars!=1) */ifDTfprintf(SORT,"$ "); } pformule PZPENDEQ { FLAG_Equation=0; /*if (FLAG_Dollars==1) ifDTfprintf(SORT," $$"); if (FLAG_Dollars!=1) */ifDTfprintf(SORT," $"); FLAG_Dollars=0; } ; pformule: formule | pformule formule ; ppvformule: formule | pzpvpcdata { $$=$1; if (FLAG_Symbol==0) { ifDTfprintf(SORT,"{%%\n\\rm "); printText($1); ifDTfprintf(SORT,"}%%\n"); } else { printSymbol($1); } } | ppvformule formule | ppvformule pzpvpcdata { $$=$2; if (FLAG_Symbol==0) { ifDTfprintf(SORT,"{%%\n\\rm "); printText($2); ifDTfprintf(SORT,"}%%\n"); } else { printSymbol($2); } } ; formule: integrale | racine | fraction | matrix | box | bracket | list | overstrike | suscript | texte ; integrale: PZINTEGRALE { FLAG_Integrale=INTINT; } integralesw '(' {if (FLAG_Integrale==INTINT) ifDTfprintf(SORT,"\\int_{"); if (FLAG_Integrale==INTSUM) ifDTfprintf(SORT,"\\sum_{"); if (FLAG_Integrale==INTPROD) ifDTfprintf(SORT,"\\prod_{"); } pformule ',' {ifDTfprintf(SORT,"}^{"); } pformule ',' {ifDTfprintf(SORT,"}{"); } pformule ')' {ifDTfprintf(SORT,"}%%\n"); } | PZINTEGRALE { FLAG_Integrale=INTINT; } '(' {if (FLAG_Integrale==INTINT) ifDTfprintf(SORT,"\\int_{"); if (FLAG_Integrale==INTSUM) ifDTfprintf(SORT,"\\sum_{"); if (FLAG_Integrale==INTPROD) ifDTfprintf(SORT,"\\prod_{"); } pformule ',' {ifDTfprintf(SORT,"}^{"); } pformule ',' {ifDTfprintf(SORT,"}{"); } pformule ')' {ifDTfprintf(SORT,"}%%\n"); } ; racine: PZRACINE '(' {ifDTfprintf(SORT,"\\sqrt[{"); } pformule ',' {ifDTfprintf(SORT,"}]{"); } pformule ')' {ifDTfprintf(SORT,"}%%\n"); } ; fraction: PZFRACTION '(' {ifDTfprintf(SORT,"\\frac{"); } pformule ',' {ifDTfprintf(SORT,"}{"); } pformule ')' {ifDTfprintf(SORT,"}%%\n"); } ; matrix: PZMATRIX '(' {ifDTfprintf(SORT,"\\begin{array}{c}\n"); FLAG_InMatrix=1; FLAG_MatrixColCour=1; } colones ')' {ifDTfprintf(SORT,"\n\\end{array}\n"); FLAG_InMatrix=0; } | PZMATRIX matrixsw '(' {ifDTfprintf(SORT,"\\begin{array}{"); for(cpt3=0;cpt3