/* * html2hdml * * Coprygight (C) 2000-2003 Dino Co.,Ltd. * http://www.dino.co.jp/ */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "html2hdml.h" enum list_type { enum_OL, enum_UL, }; struct list_stack { enum list_type type; int index; struct list_stack *prev; }; struct list_stack gl_list_dummy = { enum_UL, -1, NULL, }; struct list_stack *gl_list_stack_top = &gl_list_dummy; static int gl_list_level = 0; struct list_stack *alloc_list_stack(enum list_type type, struct list_stack *prev); int free_list_stack(struct list_stack *node); int convert_OL(char *stago, char *elemname, char **attr, char *tagc); int convert_OL_(char *stago, char *elemname, char **attr, char *tagc); int convert_UL(char *stago, char *elemname, char **attr, char *tagc); int convert_UL_(char *stago, char *elemname, char **attr, char *tagc); struct list_stack *alloc_list_stack(enum list_type type, struct list_stack *prev) { struct list_stack *node; if (prev == NULL) return prev; /* not permited */ node = (struct list_stack *)my_malloc(sizeof(struct list_stack)); node->type = type; node->index = 1; node->prev = prev; return node; } int free_list_stack(struct list_stack *node) { if (node->prev == NULL) { /* this node is dummy */ } else { my_free(node); } return 0; } int convert_OL(char *stago, char *elemname, char **attr, char *tagc) { gl_list_stack_top = alloc_list_stack(enum_OL, gl_list_stack_top); return 0; } int convert_OL_(char *stago, char *elemname, char **attr, char *tagc) { struct list_stack *prev; prev = gl_list_stack_top->prev; if (prev) { my_free(gl_list_stack_top); gl_list_stack_top = prev; } /* add_piece(enum_current, "
\n"); */ return 0; } int convert_UL(char *stago, char *elemname, char **attr, char *tagc) { gl_list_stack_top = alloc_list_stack(enum_UL, gl_list_stack_top); return 0; } int convert_UL_(char *stago, char *elemname, char **attr, char *tagc) { struct list_stack *prev; prev = gl_list_stack_top->prev; if (prev) { my_free(gl_list_stack_top); gl_list_stack_top = prev; } /* add_piece(enum_current, "
\n"); */ return 0; } int convert_LI(char *stago, char *elemname, char **attr, char *tagc) { int index; char buf[BUFFER_SIZE]; index = gl_list_stack_top->index; if (gl_list_stack_top->prev == NULL || gl_list_stack_top->type == enum_UL) { sprintf(buf, "
\n* "); } else { sprintf(buf, "
\n%d. ", index); } add_piece(enum_current, buf); gl_list_stack_top->index++; return 0; }