From: konn Date: Thu, 13 Mar 2008 02:05:50 +0000 (+0000) Subject: * X-Git-Tag: v0.12.20~854 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=496ca2e1a00a0f50a4668d3c33367a57b6b421b3;p=modchxj%2Fmod_chxj.git * git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/modchxj/mod_chxj/branches/RELEASE_0_8_0@1871 1a406e8e-add9-4483-a2c8-d8cac5b7c224 --- diff --git a/src/qs_parse_string.c b/src/qs_parse_string.c index 0e5fce04..eed91f27 100644 --- a/src/qs_parse_string.c +++ b/src/qs_parse_string.c @@ -44,6 +44,7 @@ static void qs_push_node(Doc* doc, Node *node, NodeStack stack); static Node *qs_pop_node(Doc* doc, NodeStack stack); static void qs_dump_node_stack(Doc *doc, NodeStack stack); static void qs_free_node_stack(Doc *doc, NodeStack stack); +static void s_error_check(Doc *doc, Node *node, NodeStack node_stack, NodeStack err_stack); Node* @@ -196,44 +197,7 @@ qs_parse_string(Doc* doc, const char* src, int srclen) doc->now_parent_node = doc->now_parent_node->parent; doc->parse_mode = PARSE_MODE_CHTML; } - Node *prevNode; - int err = 0; - for (prevNode = qs_pop_node(doc,node_stack); - prevNode; - prevNode = qs_pop_node(doc, node_stack)) { - if (prevNode && strcasecmp(prevNode->name, &node->name[1]) != 0) { - qs_push_node(doc, prevNode, err_stack); - err++; - continue; - } - break; - } - if (err) { - Node *tmpNode = qs_pop_node(doc,node_stack); - if (tmpNode == NULL && err != 1) { - if (doc->r) - ERR(doc->r, "tag parse error (perhaps, miss spell). tag_name:[%s] line:[%d]", &node->name[1], node->line); - else - fprintf(stderr, "error :tag parse error (perhaps, miss spell). tag_name:[%s] line:[%d]\n", &node->name[1], node->line); - for (prevNode = qs_pop_node(doc,err_stack); - prevNode; - prevNode = qs_pop_node(doc, err_stack)) { - qs_push_node(doc, prevNode, node_stack); - } - } - else { - for (prevNode = qs_pop_node(doc,err_stack); - prevNode; - prevNode = qs_pop_node(doc, err_stack)) { - if (doc->r) - ERR(doc->r, "tag parse error (perhaps, not close). tag_name:[%s] line:[%d]", prevNode->name, prevNode->line); - else - fprintf(stderr, "error :tag parse error (perhaps, not close). tag_name:[%s] line:[%d]\n", prevNode->name, prevNode->line); - } - qs_push_node(doc, tmpNode, node_stack); - } - err = 0; - } + s_error_check(doc, node, node_stack, err_stack); } else { continue; @@ -339,6 +303,50 @@ qs_parse_string(Doc* doc, const char* src, int srclen) static void +s_error_check(Doc *doc, Node *node, NodeStack node_stack, NodeStack err_stack) +{ + Node *prevNode; + int err = 0; + for (prevNode = qs_pop_node(doc,node_stack); + prevNode; + prevNode = qs_pop_node(doc, node_stack)) { + if (prevNode && strcasecmp(prevNode->name, &node->name[1]) != 0) { + qs_push_node(doc, prevNode, err_stack); + err++; + continue; + } + break; + } + if (err) { + Node *tmpNode = qs_pop_node(doc,node_stack); + if (tmpNode == NULL && err != 1) { + if (doc->r) + ERR(doc->r, "tag parse error (perhaps, miss spell). tag_name:[%s] line:[%d]", &node->name[1], node->line); + else + fprintf(stderr, "error :tag parse error (perhaps, miss spell). tag_name:[%s] line:[%d]\n", &node->name[1], node->line); + for (prevNode = qs_pop_node(doc,err_stack); + prevNode; + prevNode = qs_pop_node(doc, err_stack)) { + qs_push_node(doc, prevNode, node_stack); + } + } + else { + for (prevNode = qs_pop_node(doc,err_stack); + prevNode; + prevNode = qs_pop_node(doc, err_stack)) { + if (doc->r) + ERR(doc->r, "tag parse error (perhaps, not close). tag_name:[%s] line:[%d]", prevNode->name, prevNode->line); + else + fprintf(stderr, "error :tag parse error (perhaps, not close). tag_name:[%s] line:[%d]\n", prevNode->name, prevNode->line); + } + qs_push_node(doc, tmpNode, node_stack); + } + err = 0; + } +} + + +static void qs_dump_node(Doc* doc, Node* node, int indent) { Node* p = (Node*)qs_get_child_node(doc,node);