#ifndef _TRANS_H__ #define _TRANS_H__ /* definition des types utilises par la transformation de structure */ /* Stephane Bonhomme Apr 96 */ #define MaxSizePat 500 #define MaxWidthPat 50 #define MaxPatterns 50 #define MAXSTACK 500 #define LGBUFFER 5000 #ifndef PPSTANDALONE /* definition de la structure de l'arbre sujet */ /* liste chainee des symboles correspondant a chaque fils */ typedef struct _strmatchchild { struct _SymbDesc *patsymb; /* symbole de la pattern matche */ struct _Tagnode *node; /* noeud de l'arbre sujet */ struct _strmatchchild *next; } strmatchchildren; typedef struct _strmatch { struct _SymbDesc *patsymb; /* symbole de la pattern matche */ struct _Tagnode *node; /* noeud de l'arbre sujet */ strmatchchildren *childmatches; struct _strmatch *next; } strmatch; /* definition d'un noeud de l'arbre sujet */ typedef struct _Tagnode { char *tag; Element element; struct _Tagnode *parent; struct _Tagnode *child; struct _Tagnode *next; struct _Tagnode *prev; boolean isTrans; struct _SymbDesc *transsymb; strmatch *matches; /* tableau des symboles candidats au resultat, associes aux symboles */ /*correspondant a un ss ensemble des fils du noeud */ struct _ListSymb *inter; int depth; } Tagnode; typedef Tagnode *TagTree; #endif /* environnement de transformation */ typedef struct _AttrDesc { char *NameAttr; int ThotAttr; boolean IsInt; boolean IsTransf; union { char *_TextVal; int _IntVal; struct _s0 { char *_Tag; char *_Attr; } s0; } u; struct _AttrDesc *next; } AttrDesc; #define TextVal u._TextVal #define IntVal u._IntVal #define AttrTag u.s0._Tag #define AttrAttr u.s0._Attr /* definition des structures internes des regles de transformation */ typedef struct _NodeDesc { char *Tag; AttrDesc *Attributes; struct _NodeDesc *next; } NodeDesc; typedef struct _RuleDesc { char *RName; NodeDesc *OptNodes; NodeDesc *NewNodes; struct _RuleDesc *next; } RuleDesc; #ifndef PPSTANDALONE typedef struct _ListElem { Element element; int id; int rank; struct _ListElem *next; } ListElem; #endif typedef struct _ListSymb { struct _SymbDesc *symb; struct _ListSymb *next; } ListSymb; typedef struct _SymbDesc { char *SName; char *Tag; RuleDesc *Rule; boolean Optional; boolean ActiveSymb; boolean OptChild; int depth; AttrDesc *Attributes; ListSymb *Children; ListSymb *Nexts; struct _SymbDesc *next; } SymbDesc; /* descripteurs de transformation */ typedef struct _TransDesc { char *NameTrans; int nbPatSymb; int nbRules; int patdepth; ListSymb *First; SymbDesc *rootdesc; SymbDesc *PatSymbs; RuleDesc *Rules; boolean ActiveTrans; char *TagDest; struct _TransDesc *next; } TransDesc; struct _match_env { #ifndef PPSTANDALONE TagTree subjecttree; ListElem *listSubTrees; #endif /* nombre de transformations */ int nbTrans; /* porfondeur max des patterns */ int maxdepth; /* descripteurs de transformations */ TransDesc *Transformations; } match_env; #ifndef PPSTANDALONE /* document auquel est applique la transformation */ Document TransDoc; /* elements de dialogue et messages */ int TransBaseDialog; int TRANSDIAL; #define TR_TRANSFORM 0 #define TRANS_MSG_MAX 1 #define TransMenu 1 #define MAX_TRANS_DLG 2 /*date de derniere modif du fichier de transformations */ time_t timeLastWrite; #endif #endif /* _TRANS_H__ */