#include #include #include "dtd.h" #include "tag.h" DTDObj* dtdobj_new(void) { DTDObj *p; if ((p = malloc(sizeof(*p))) == NULL) { perror("dtdobj_new"); exit(1); } p->next = p->end = NULL; p->repeat = DTD_REPEAT_1; return p; } void dtdobj_delete(DTDObj *p) { if (p) free(p); } void dtdobjlist_delete(DTDObjList l) { DTDObj *p = l, *q; while (l != NULL) { q = p; p = p->next; dtdobj_delete(q); } } DTDCur* dtdcur_new(void) { DTDCur *p; if ((p = malloc(sizeof(*p))) == NULL) { perror("dtdcur_new"); exit(1); } p->cur = NULL; p->mached = 0; p->allmached = 0; p->childmached = 0; p->afterpop = 0; return p; } void dtdcur_delete(DTDCur *p) { if (p) free(p); } DTDName* dtdname_new(void) { DTDName *p; if ((p = malloc(sizeof(*p))) == NULL) { perror("dtdname_new"); exit(1); } p->next = NULL; p->name = NULL; return p; } void dtdname_delete(DTDName *p) { if (p) { if (p->name) free(p->name); free(p); } } void dtdnamelist_delete(DTDNameList l) { DTDName *p = l, *q; while (p != NULL) { q = p; p = p->next; dtdname_delete(q); } } void dtdobjlist_show(DTDObjList l) { DTDObj *p = l; TagInfo *ti; while (p != NULL) { switch (p->type) { case (DTD_NORMAL): ti = p->data; fprintf(stderr, "[%s]%c", ti->name, (p->next == p->end)?',':'|'); break; case (DTD_KAKKO): fprintf(stderr, "("); dtdobjlist_show(p->data); fprintf(stderr, ")%c", (p->next == p->end)?',':'|'); } p = p->next; } }