2 * Copyright (C) 2005-2011 Atsushi Konno All rights reserved.
3 * Copyright (C) 2005 QSDN,Inc. 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"
19 #include "qs_parse_attr.h"
21 #include "qs_ignore_sp.h"
25 qs_parse_attr(Doc *doc, const char *s, int len, int *pos)
39 QX_LOGGER_FATAL("runtime exception: qs_parse_attr(): doc is null");
43 QX_LOGGER_FATAL("runtime exception: qs_parse_attr(): doc->pool is null");
52 QX_LOGGER_DEBUG("start qs_parse_attr()");
55 ii = start_pos = qs_ignore_sp_and_quote(doc, s, len);
56 QX_LOGGER_DEBUG_INT("len",len);
60 if (is_white_space(s[ii]))
67 size = ii - start_pos;
68 QX_LOGGER_DEBUG_INT("size", size);
78 name = (char *)apr_palloc(doc->pool,size+1);
79 memset(name, 0, size+1);
80 memcpy(name, &s[start_pos], size);
82 QX_LOGGER_DEBUG((char *)name);
87 if (is_white_space(s[ii]))
107 ii += qs_ignore_sp(doc, &s[ii], len-ii);
110 for (;ii<len; ii++) {
125 if (!is_white_space(s[ii]))
130 if (backslash && ii + 2 < len)
137 for (;ii<len; ii++) {
138 if (is_sjis_kanji(s[ii])) {
143 if (is_sjis_kana(s[ii]))
146 if (is_white_space(s[ii])) {
147 if (! use_quote_sq && ! use_quote_dq)
156 if (s[ii] == '"' && use_quote_dq)
159 if (s[ii] == '\'' && use_quote_sq)
162 size = ii - start_pos;
164 QX_LOGGER_DEBUG_INT("size",size);
167 value = (char *)apr_palloc(doc->pool, size+1);
168 memset(value, 0, size+1);
170 memcpy(value, &s[start_pos], size);
172 attr = qs_new_attr(doc);
177 QX_LOGGER_DEBUG("end qs_parse_attr()");
185 qs_new_attr(Doc *doc)
190 QX_LOGGER_FATAL("runtime exception: qs_new_attr(): doc is null");
194 QX_LOGGER_FATAL("runtime exception: qs_new_attr(): doc->pool is null");
198 attr = (Attr *)apr_palloc(doc->pool,sizeof(Attr));
200 QX_LOGGER_FATAL("Out Of Memory");