#ifndef __dtd_h_ #define __dtd_h_ #include /* dtd infomation */ typedef enum { DTD_REPEAT_1, DTD_REPEAT_0or1, DTD_REPEAT_over0, DTD_REPEAT_over1 } DTDRepeatType; typedef enum { DTD_NORMAL, DTD_KAKKO } DTDObjType; /* DTD 情報 */ typedef struct DTDObj { struct DTDObj *next; /* とばすときの移動先 */ struct DTDObj *end; /* 完了時の移動先 */ DTDObjType type; /* 通常タグ or 括弧 */ DTDRepeatType repeat; void *data; /* NORMAL: TagInfo* DTD_KAKKO: DTDObjList */ } DTDObj, *DTDObjList; /* パース情報保持 */ typedef struct DTDCur { struct DTDCur *next; DTDObj *cur; int mached; int allmached; int childmached; int afterpop; } DTDCur; typedef struct DTDName { struct DTDName *next; char *name; } DTDName, *DTDNameList; /* dtd.c */ DTDObj* dtdobj_new(void); void dtdobj_delete(DTDObj *p); void dtdobjlist_delete(DTDObjList l); DTDCur* dtdcur_new(void); void dtdcur_delete(DTDCur *p); DTDName* dtdname_new(void); void dtdname_delete(DTDName *p); void dtdnamelist_delete(DTDNameList l); void dtdobjlist_show(DTDObjList l); /* dtd_y.y */ int dtd_readdtd(FILE *fp); #endif