2 * Copyright (C) 2005 QSDN,Inc. All rights reserved.
3 * Copyright (C) 2005 Atsushi Konno All rights reserved.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 #include "qs_parse_string.h"
20 #include "qs_parse_attr.h"
21 #include "qs_parse_tag.h"
23 static char* s_get_tag_name(Doc* doc, const char* s, int len) ;
28 qs_parse_tag(Doc* doc, const char* s, int len)
40 QX_LOGGER_DEBUG("start parse_tag()");
43 /* s[0] == '<' && s[len-1] == '>' */
44 tag_name = (char *)s_get_tag_name(doc, ++s, --ll);
45 QX_LOGGER_DEBUG_INT("ll",ll);
47 node = (Node*)qs_new_tag(doc);
48 node->name = tag_name;
49 node->otext = apr_palloc(doc->pool,len+2);
50 memset(node->otext, 0, len+2);
51 memcpy(node->otext, sp, len+1);
53 QX_LOGGER_DEBUG(tag_name);
55 ll -= (strlen(tag_name));
56 QX_LOGGER_DEBUG_INT("ll",ll);
57 sp += (strlen(tag_name)+1);
59 Attr* attr = qs_parse_attr(doc,sp, ll, &next_point);
61 QX_LOGGER_DEBUG("End of QS_PARSE_ATTR()");
64 QX_LOGGER_DEBUG(attr->name);
65 QX_LOGGER_DEBUG(attr->value);
68 QX_LOGGER_DEBUG_INT(sp, ll);
69 node = (Node*)qs_add_attr(doc,node, attr);
72 QX_LOGGER_DEBUG("end parse_tag()");
80 s_get_tag_name(Doc* doc, const char* s, int len)
85 char* return_value = NULL;
88 for (ii = 0; ii < len; ii++) {
89 if (is_white_space(s[ii]))
96 if (is_white_space(s[ii]))
102 return_value = (char*)apr_palloc(doc->pool, size+1);
104 memset(return_value, 0, size+1);
105 memcpy(return_value, &s[sp], size);
107 QX_LOGGER_DEBUG(return_value);
116 Node* node = (Node*)apr_palloc(doc->pool, sizeof(Node));
120 node->child_tail= NULL;
122 node->attr_tail = NULL;
133 qs_add_attr(Doc* doc, Node* node, Attr* attr)
136 QX_LOGGER_FATAL("qs_add_attr() node is null");
141 if (node->attr == NULL) {
143 node->attr_tail = attr;
147 node->attr_tail->next = attr;
148 node->attr_tail = attr;