1#ifndef RAPIDXML_HPP_INCLUDED
2#define RAPIDXML_HPP_INCLUDED
10#if !defined(RAPIDXML_NO_STDLIB)
20#pragma warning(disable : 4127)
26#if defined(RAPIDXML_NO_EXCEPTIONS)
28#define RAPIDXML_PARSE_ERROR(what, where) \
30 parse_error_handler(what, where); \
52 void parse_error_handler(
const char* what,
void* where);
59#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
86 virtual const char*
what()
const throw()
94 template <
class Ch> Ch*
where()
const
96 return reinterpret_cast<Ch*
>(
m_where);
110#ifndef RAPIDXML_STATIC_POOL_SIZE
114#define RAPIDXML_STATIC_POOL_SIZE (64 * 1024)
117#ifndef RAPIDXML_DYNAMIC_POOL_SIZE
121#define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
124#ifndef RAPIDXML_ALIGNMENT
129#define RAPIDXML_ALIGNMENT sizeof(void*)
135 template <
class Ch>
class xml_node;
136 template <
class Ch>
class xml_attribute;
137 template <
class Ch>
class xml_document;
289 template <
int Dummy>
struct lookup_tables
291 static const unsigned char lookup_whitespace[256];
292 static const unsigned char lookup_node_name[256];
293 static const unsigned char lookup_text[256];
294 static const unsigned char lookup_text_pure_no_ws[256];
295 static const unsigned char lookup_text_pure_with_ws[256];
296 static const unsigned char lookup_attribute_name[256];
297 static const unsigned char lookup_attribute_data_1[256];
298 static const unsigned char lookup_attribute_data_1_pure[256];
299 static const unsigned char lookup_attribute_data_2[256];
300 static const unsigned char lookup_attribute_data_2_pure[256];
301 static const unsigned char lookup_digits[256];
302 static const unsigned char lookup_upcase[256];
306 template <
class Ch>
inline std::size_t measure(
const Ch*
p)
316 inline bool compare(
const Ch* p1, std::size_t size1,
const Ch* p2, std::size_t size2,
bool case_sensitive)
322 for (
const Ch* end = p1 + size1; p1 < end; ++p1, ++p2)
328 for (
const Ch* end = p1 + size1; p1 < end; ++p1, ++p2)
329 if (lookup_tables<0>::lookup_upcase[
static_cast<unsigned char>(*p1)] !=
330 lookup_tables<0>::lookup_upcase[
static_cast<unsigned char>(*p2)])
370 typedef void*(alloc_func)(std::size_t);
371 typedef void(free_func)(
void*);
401 std::size_t name_size = 0,
402 std::size_t value_size = 0)
434 std::size_t name_size = 0,
435 std::size_t value_size = 0)
468 size = internal::measure(
source) + 1;
471 for (std::size_t
i = 0;
i < size; ++
i)
490 result->remove_all_attributes();
491 result->remove_all_nodes();
492 result->type(
source->type());
505 result->append_attribute(
506 allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size()));
563 std::size_t alignment =
565 return ptr + alignment;
581 memory =
new char[size];
582#ifdef RAPIDXML_NO_EXCEPTIONS
588 return static_cast<char*
>(memory);
597 if (result + size >
m_end)
601 if (pool_size < size)
605 std::size_t alloc_size =
611 char* pool =
align(raw_memory);
616 m_end = raw_memory + alloc_size;
623 m_ptr = result + size;
719 this->
name(name, internal::measure(
name));
767 static Ch zero = Ch(
'\0');
807 while (node->parent())
808 node = node->parent();
823 bool case_sensitive =
true)
const
831 if (internal::compare(attribute->name(), attribute->name_size(),
name,
name_size, case_sensitive))
847 bool case_sensitive =
true)
const
855 if (internal::compare(attribute->name(), attribute->name_size(),
name,
name_size, case_sensitive))
931 if (internal::compare(child->name(), child->name_size(),
name,
name_size, case_sensitive))
955 if (internal::compare(child->name(), child->name_size(),
name,
name_size, case_sensitive))
979 if (internal::compare(sibling->name(), sibling->name_size(),
name,
name_size, case_sensitive))
1003 if (internal::compare(sibling->name(), sibling->name_size(),
name,
name_size, case_sensitive))
1019 bool case_sensitive =
true)
const
1027 if (internal::compare(attribute->name(), attribute->name_size(),
name,
name_size, case_sensitive))
1043 bool case_sensitive =
true)
const
1051 if (internal::compare(attribute->name(), attribute->name_size(),
name,
name_size, case_sensitive))
1120 assert(!where || where->
parent() ==
this);
1124 else if (where == 0)
1172 assert(where && where->
parent() ==
this);
1198 assert(attribute && !attribute->
parent());
1218 assert(attribute && !attribute->
parent());
1240 assert(!where || where->
parent() ==
this);
1241 assert(attribute && !attribute->
parent());
1244 else if (where == 0)
1311 attribute->m_parent = 0;
1379 template <
int Flags>
void parse(Ch* text)
1388 parse_bom<Flags>(text);
1394 skip<whitespace_pred, Flags>(text);
1399 if (*text == Ch(
'<'))
1428 return internal::lookup_tables<0>::lookup_whitespace[
static_cast<unsigned char>(ch)];
1437 return internal::lookup_tables<0>::lookup_node_name[
static_cast<unsigned char>(ch)];
1446 return internal::lookup_tables<0>::lookup_attribute_name[
static_cast<unsigned char>(ch)];
1455 return internal::lookup_tables<0>::lookup_text[
static_cast<unsigned char>(ch)];
1464 return internal::lookup_tables<0>::lookup_text_pure_no_ws[
static_cast<unsigned char>(ch)];
1473 return internal::lookup_tables<0>::lookup_text_pure_with_ws[
static_cast<unsigned char>(ch)];
1482 if (Quote == Ch(
'\''))
1483 return internal::lookup_tables<0>::lookup_attribute_data_1[
static_cast<unsigned char>(ch)];
1484 if (Quote == Ch(
'\"'))
1485 return internal::lookup_tables<0>::lookup_attribute_data_2[
static_cast<unsigned char>(ch)];
1495 if (Quote == Ch(
'\''))
1496 return internal::lookup_tables<0>::lookup_attribute_data_1_pure[
static_cast<unsigned char>(ch)];
1497 if (Quote == Ch(
'\"'))
1498 return internal::lookup_tables<0>::lookup_attribute_data_2_pure[
static_cast<unsigned char>(ch)];
1510 text[0] =
static_cast<unsigned char>(
code);
1518 text[0] =
static_cast<unsigned char>(
code);
1521 else if (
code < 0x800)
1523 text[1] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1525 text[0] =
static_cast<unsigned char>(
code | 0xC0);
1528 else if (
code < 0x10000)
1530 text[2] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1532 text[1] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1534 text[0] =
static_cast<unsigned char>(
code | 0xE0);
1537 else if (
code < 0x110000)
1539 text[3] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1541 text[2] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1543 text[1] =
static_cast<unsigned char>((
code | 0x80) & 0xBF);
1545 text[0] =
static_cast<unsigned char>(
code | 0xF0);
1556 template <
class StopPred,
int Flags>
static void skip(Ch*& text)
1559 while (StopPred::test(*tmp))
1573 skip<StopPred, Flags>(text);
1578 skip<StopPredPure, Flags>(text);
1583 while (StopPred::test(*src))
1589 if (src[0] == Ch(
'&'))
1596 if (src[2] == Ch(
'm') && src[3] == Ch(
'p') && src[4] == Ch(
';'))
1603 if (src[2] == Ch(
'p') && src[3] == Ch(
'o') && src[4] == Ch(
's') && src[5] == Ch(
';'))
1614 if (src[2] == Ch(
'u') && src[3] == Ch(
'o') && src[4] == Ch(
't') && src[5] == Ch(
';'))
1625 if (src[2] == Ch(
't') && src[3] == Ch(
';'))
1636 if (src[2] == Ch(
't') && src[3] == Ch(
';'))
1647 if (src[2] == Ch(
'x'))
1649 unsigned long code = 0;
1653 unsigned char digit =
1654 internal::lookup_tables<0>::lookup_digits[
static_cast<unsigned char>(*src)];
1660 insert_coded_character<Flags>(dest,
code);
1664 unsigned long code = 0;
1668 unsigned char digit =
1669 internal::lookup_tables<0>::lookup_digits[
static_cast<unsigned char>(*src)];
1675 insert_coded_character<Flags>(dest,
code);
1677 if (*src == Ch(
';'))
1723 if (
static_cast<unsigned char>(text[0]) == 0xEF &&
static_cast<unsigned char>(text[1]) == 0xBB &&
1724 static_cast<unsigned char>(text[2]) == 0xBF)
1737 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
1751 skip<whitespace_pred, Flags>(text);
1754 parse_node_attributes<Flags>(text, declaration);
1757 if (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
1771 while (text[0] != Ch(
'-') || text[1] != Ch(
'-') || text[2] != Ch(
'>'))
1785 while (text[0] != Ch(
'-') || text[1] != Ch(
'-') || text[2] != Ch(
'>'))
1811 while (*text != Ch(
'>'))
1882 skip<node_name_pred, Flags>(text);
1888 skip<whitespace_pred, Flags>(text);
1894 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
1896 if (*text == Ch(
'\0'))
1907 pi->name()[pi->name_size()] = Ch(
'\0');
1908 pi->value()[pi->value_size()] = Ch(
'\0');
1917 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
1919 if (*text == Ch(
'\0'))
1935 text = contents_start;
1938 Ch *
value = text, *end;
1940 end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);
1942 end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
1951 if (*(end - 1) == Ch(
' '))
1973 if (*node->
value() == Ch(
'\0'))
1995 while (text[0] != Ch(
']') || text[1] != Ch(
']') || text[2] != Ch(
'>'))
2007 while (text[0] != Ch(
']') || text[1] != Ch(
']') || text[2] != Ch(
'>'))
2034 skip<node_name_pred, Flags>(text);
2040 skip<whitespace_pred, Flags>(text);
2043 parse_node_attributes<Flags>(text, element);
2046 if (*text == Ch(
'>'))
2049 parse_node_contents<Flags>(text, element);
2051 else if (*text == Ch(
'/'))
2054 if (*text != Ch(
'>'))
2079 return parse_element<Flags>(text);
2084 if ((text[0] == Ch(
'x') || text[0] == Ch(
'X')) && (text[1] == Ch(
'm') || text[1] == Ch(
'M')) &&
2089 return parse_xml_declaration<Flags>(text);
2094 return parse_pi<Flags>(text);
2106 if (text[2] == Ch(
'-'))
2110 return parse_comment<Flags>(text);
2116 if (text[2] == Ch(
'C') && text[3] == Ch(
'D') && text[4] == Ch(
'A') && text[5] == Ch(
'T') &&
2117 text[6] == Ch(
'A') && text[7] == Ch(
'['))
2121 return parse_cdata<Flags>(text);
2127 if (text[2] == Ch(
'O') && text[3] == Ch(
'C') && text[4] == Ch(
'T') && text[5] == Ch(
'Y') &&
2132 return parse_doctype<Flags>(text);
2139 while (*text != Ch(
'>'))
2157 Ch* contents_start = text;
2158 skip<whitespace_pred, Flags>(text);
2159 Ch next_char = *text;
2173 if (text[1] == Ch(
'/'))
2180 Ch* closing_name = text;
2181 skip<node_name_pred, Flags>(text);
2182 if (!internal::compare(node->
name(), node->
name_size(), closing_name, text - closing_name,
2189 skip<node_name_pred, Flags>(text);
2192 skip<whitespace_pred, Flags>(text);
2193 if (*text != Ch(
'>'))
2213 next_char = parse_and_append_data<Flags>(node, text, contents_start);
2214 goto after_data_node;
2228 skip<attribute_name_pred, Flags>(text);
2238 skip<whitespace_pred, Flags>(text);
2241 if (*text != Ch(
'='))
2250 skip<whitespace_pred, Flags>(text);
2254 if (quote != Ch(
'\'') && quote != Ch(
'"'))
2259 Ch *
value = text, *end;
2260 const int AttFlags = Flags & ~parse_normalize_whitespace;
2261 if (quote == Ch(
'\''))
2281 skip<whitespace_pred, Flags>(text);
2291 template <
int Dummy>
2292 const unsigned char lookup_tables<Dummy>::lookup_whitespace[256] = {
2294 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
2295 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2296 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2298 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2300 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2302 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2304 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2306 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2307 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2308 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2309 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
2313 template <
int Dummy>
2314 const unsigned char lookup_tables<Dummy>::lookup_node_name[256] = {
2316 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1,
2317 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2318 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
2319 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
2320 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2321 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2322 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2323 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2324 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2325 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2326 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2327 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2328 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2329 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2330 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2331 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2335 template <
int Dummy>
2336 const unsigned char lookup_tables<Dummy>::lookup_text[256] = {
2338 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2339 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2340 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2341 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
2342 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2343 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2344 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2345 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2346 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2347 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2348 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2349 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2350 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2351 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2352 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2353 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2358 template <
int Dummy>
2359 const unsigned char lookup_tables<Dummy>::lookup_text_pure_no_ws[256] = {
2361 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2362 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2363 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2364 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
2365 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2366 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2367 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2368 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2369 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2370 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2371 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2372 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2373 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2374 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2375 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2376 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2381 template <
int Dummy>
2382 const unsigned char lookup_tables<Dummy>::lookup_text_pure_with_ws[256] = {
2384 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1,
2385 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2386 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2387 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
2388 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2389 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2390 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2391 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2392 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2393 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2394 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2395 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2396 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2397 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2398 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2399 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2403 template <
int Dummy>
2404 const unsigned char lookup_tables<Dummy>::lookup_attribute_name[256] = {
2406 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1,
2407 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2408 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
2409 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
2410 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2411 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2412 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2413 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2414 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2415 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2416 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2417 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2418 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2419 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2420 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2421 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2425 template <
int Dummy>
2426 const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1[256] = {
2428 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2429 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2430 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
2431 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2432 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2433 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2434 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2435 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2436 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2437 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2438 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2439 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2440 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2441 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2442 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2443 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2447 template <
int Dummy>
2448 const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1_pure[256] = {
2450 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2451 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2452 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
2453 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2454 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2455 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2456 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2457 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2458 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2459 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2460 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2461 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2462 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2463 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2464 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2465 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2469 template <
int Dummy>
2470 const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2[256] = {
2472 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2473 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2474 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2475 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2476 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2477 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2478 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2479 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2480 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2481 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2482 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2483 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2484 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2485 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2486 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2487 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2491 template <
int Dummy>
2492 const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2_pure[256] = {
2494 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2495 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2496 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2497 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2498 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2499 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2500 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2501 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2502 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2503 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2504 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2505 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2506 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2507 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2508 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2509 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
2513 template <
int Dummy>
2514 const unsigned char lookup_tables<Dummy>::lookup_digits[256] = {
2516 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2517 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2518 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2519 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 255, 255, 255, 255, 255, 255,
2520 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2521 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2522 255, 10, 11, 12, 13, 14, 15, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2523 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2524 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2525 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2526 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2527 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2528 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2529 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2530 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
2531 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
2535 template <
int Dummy>
2536 const unsigned char lookup_tables<Dummy>::lookup_upcase[256] = {
2538 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
2539 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
2540 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
2541 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
2542 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2543 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
2544 96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2545 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123, 124, 125, 126, 127,
2546 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2547 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
2548 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
2549 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
2550 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
2551 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
2552 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
2553 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
2561#undef RAPIDXML_PARSE_ERROR
Definition rapidxml.hpp:366
~memory_pool()
Definition rapidxml.hpp:383
memory_pool()
Constructs empty pool with default allocator functions.
Definition rapidxml.hpp:375
void init()
Definition rapidxml.hpp:554
xml_node< Ch > * clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0)
Definition rapidxml.hpp:485
char * m_ptr
Definition rapidxml.hpp:628
char * allocate_raw(std::size_t size)
Definition rapidxml.hpp:568
char * m_end
Definition rapidxml.hpp:629
void * allocate_aligned(std::size_t size)
Definition rapidxml.hpp:591
char * m_begin
Definition rapidxml.hpp:627
xml_node< Ch > * allocate_node(node_type type, const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
Definition rapidxml.hpp:398
void set_allocator(alloc_func *af, free_func *ff)
Definition rapidxml.hpp:541
Ch * allocate_string(const Ch *source=0, std::size_t size=0)
Definition rapidxml.hpp:464
char * align(char *ptr)
Definition rapidxml.hpp:561
char m_static_memory[RAPIDXML_STATIC_POOL_SIZE]
Definition rapidxml.hpp:630
void clear()
Definition rapidxml.hpp:514
xml_attribute< Ch > * allocate_attribute(const Ch *name=0, const Ch *value=0, std::size_t name_size=0, std::size_t value_size=0)
Definition rapidxml.hpp:432
alloc_func * m_alloc_func
Definition rapidxml.hpp:631
free_func * m_free_func
Definition rapidxml.hpp:632
Definition rapidxml.hpp:76
const char * m_what
Definition rapidxml.hpp:100
virtual const char * what() const
Definition rapidxml.hpp:86
void * m_where
Definition rapidxml.hpp:101
Ch * where() const
Definition rapidxml.hpp:94
parse_error(const char *what, void *where)
Constructs parse error.
Definition rapidxml.hpp:80
Definition rapidxml.hpp:784
xml_attribute< Ch > * next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:845
xml_attribute< Ch > * previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:821
xml_attribute< Ch > * m_prev_attribute
Definition rapidxml.hpp:864
xml_attribute()
Definition rapidxml.hpp:794
xml_attribute< Ch > * m_next_attribute
Definition rapidxml.hpp:867
xml_document< Ch > * document() const
Definition rapidxml.hpp:803
Definition rapidxml.hpp:642
std::size_t name_size() const
Definition rapidxml.hpp:669
xml_base()
Definition rapidxml.hpp:649
Ch * m_value
Definition rapidxml.hpp:772
std::size_t value_size() const
Definition rapidxml.hpp:687
void value(const Ch *value, std::size_t size)
Definition rapidxml.hpp:739
void name(const Ch *name)
Definition rapidxml.hpp:717
std::size_t m_name_size
Definition rapidxml.hpp:773
Ch * name() const
Definition rapidxml.hpp:661
void value(const Ch *value)
Definition rapidxml.hpp:748
xml_node< Ch > * m_parent
Definition rapidxml.hpp:775
std::size_t m_value_size
Definition rapidxml.hpp:774
static Ch * nullstr()
Definition rapidxml.hpp:765
xml_node< Ch > * parent() const
Definition rapidxml.hpp:758
void name(const Ch *name, std::size_t size)
Definition rapidxml.hpp:708
Ch * value() const
Definition rapidxml.hpp:679
Ch * m_name
Definition rapidxml.hpp:771
Definition rapidxml.hpp:1361
xml_node< Ch > * parse_element(Ch *&text)
Definition rapidxml.hpp:2027
xml_node< Ch > * parse_cdata(Ch *&text)
Definition rapidxml.hpp:1989
static void skip(Ch *&text)
Definition rapidxml.hpp:1556
void clear()
Definition rapidxml.hpp:1412
void parse_bom(Ch *&text)
Definition rapidxml.hpp:1720
void parse_node_contents(Ch *&text, xml_node< Ch > *node)
Definition rapidxml.hpp:2151
xml_document()
Constructs empty XML document.
Definition rapidxml.hpp:1365
static Ch * skip_and_expand_character_refs(Ch *&text)
Definition rapidxml.hpp:1567
xml_node< Ch > * parse_pi(Ch *&text)
Definition rapidxml.hpp:1872
void parse_node_attributes(Ch *&text, xml_node< Ch > *node)
Definition rapidxml.hpp:2220
void parse(Ch *text)
Definition rapidxml.hpp:1379
xml_node< Ch > * parse_xml_declaration(Ch *&text)
Definition rapidxml.hpp:1731
xml_node< Ch > * parse_node(Ch *&text)
Definition rapidxml.hpp:2070
static void insert_coded_character(Ch *&text, unsigned long code)
Definition rapidxml.hpp:1504
Ch parse_and_append_data(xml_node< Ch > *node, Ch *&text, Ch *contents_start)
Definition rapidxml.hpp:1931
xml_node< Ch > * parse_doctype(Ch *&text)
Definition rapidxml.hpp:1805
xml_node< Ch > * parse_comment(Ch *&text)
Definition rapidxml.hpp:1765
Definition rapidxml.hpp:882
void remove_last_attribute()
Definition rapidxml.hpp:1276
xml_node< Ch > * m_next_sibling
Definition rapidxml.hpp:1346
node_type m_type
Definition rapidxml.hpp:1337
void append_attribute(xml_attribute< Ch > *attribute)
Definition rapidxml.hpp:1216
xml_node< Ch > * m_first_node
Definition rapidxml.hpp:1338
void type(node_type type)
Definition rapidxml.hpp:1064
xml_node< Ch > * m_prev_sibling
Definition rapidxml.hpp:1344
xml_attribute< Ch > * m_first_attribute
Definition rapidxml.hpp:1341
node_type type() const
Definition rapidxml.hpp:900
void remove_first_node()
Definition rapidxml.hpp:1139
void insert_node(xml_node< Ch > *where, xml_node< Ch > *child)
Definition rapidxml.hpp:1118
void remove_attribute(xml_attribute< Ch > *where)
Definition rapidxml.hpp:1292
void append_node(xml_node< Ch > *child)
Definition rapidxml.hpp:1096
void prepend_attribute(xml_attribute< Ch > *attribute)
Definition rapidxml.hpp:1196
xml_node(node_type type)
Definition rapidxml.hpp:891
xml_attribute< Ch > * last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:1041
void remove_last_node()
Definition rapidxml.hpp:1154
void remove_all_nodes()
Removes all child nodes (but not attributes).
Definition rapidxml.hpp:1187
void remove_node(xml_node< Ch > *where)
Removes specified child from the node.
Definition rapidxml.hpp:1170
xml_attribute< Ch > * first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:1017
void insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute)
Definition rapidxml.hpp:1238
xml_document< Ch > * document() const
Definition rapidxml.hpp:910
void remove_all_attributes()
Removes all attributes of node.
Definition rapidxml.hpp:1308
void operator=(const xml_node &)
void remove_first_attribute()
Definition rapidxml.hpp:1259
xml_node< Ch > * next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:995
xml_node< Ch > * previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:971
xml_attribute< Ch > * m_last_attribute
Definition rapidxml.hpp:1342
xml_node< Ch > * m_last_node
Definition rapidxml.hpp:1339
void prepend_node(xml_node< Ch > *child)
Definition rapidxml.hpp:1075
xml_node< Ch > * first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:924
xml_node(const xml_node &)
xml_node< Ch > * last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const
Definition rapidxml.hpp:947
type
Definition core.h:681
Definition rapidxml.hpp:62
const int parse_no_element_values
Definition rapidxml.hpp:170
const int parse_pi_nodes
Definition rapidxml.hpp:218
const int parse_no_utf8
Definition rapidxml.hpp:191
const int parse_normalize_whitespace
Definition rapidxml.hpp:243
const int parse_doctype_node
Definition rapidxml.hpp:211
const int parse_non_destructive
Definition rapidxml.hpp:265
const int parse_trim_whitespace
Definition rapidxml.hpp:234
const int parse_fastest
Definition rapidxml.hpp:270
const int parse_validate_closing_tags
Definition rapidxml.hpp:226
const int parse_no_entity_translation
Definition rapidxml.hpp:184
const int parse_declaration_node
Definition rapidxml.hpp:198
node_type
Definition rapidxml.hpp:142
@ node_comment
A comment node. Name is empty. Value contains comment text.
Definition rapidxml.hpp:147
@ node_document
A document node. Name and value are empty.
Definition rapidxml.hpp:143
@ node_element
An element node. Name contains element name. Value contains text of first data node.
Definition rapidxml.hpp:144
@ node_data
A data node. Name is empty. Value contains data text.
Definition rapidxml.hpp:145
@ node_cdata
A CDATA node. Name is empty. Value contains data text.
Definition rapidxml.hpp:146
@ node_doctype
A DOCTYPE node. Name is empty. Value contains DOCTYPE text.
Definition rapidxml.hpp:150
@ node_pi
A PI node. Name contains target. Value contains instructions.
Definition rapidxml.hpp:151
@ node_declaration
Definition rapidxml.hpp:148
const int parse_full
Definition rapidxml.hpp:276
const int parse_no_data_nodes
Definition rapidxml.hpp:162
const int parse_default
Definition rapidxml.hpp:255
const int parse_comment_nodes
Definition rapidxml.hpp:205
const int parse_no_string_terminators
Definition rapidxml.hpp:177
#define RAPIDXML_STATIC_POOL_SIZE
Definition rapidxml.hpp:114
#define RAPIDXML_PARSE_ERROR(what, where)
Definition rapidxml.hpp:59
#define RAPIDXML_DYNAMIC_POOL_SIZE
Definition rapidxml.hpp:121
#define RAPIDXML_ALIGNMENT
Definition rapidxml.hpp:129
Definition rapidxml.hpp:1443
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1444
Definition rapidxml.hpp:1479
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1480
Definition rapidxml.hpp:1492
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1493
Definition rapidxml.hpp:1434
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1435
Definition rapidxml.hpp:1452
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1453
Definition rapidxml.hpp:1461
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1462
Definition rapidxml.hpp:1470
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1471
Definition rapidxml.hpp:1425
static unsigned char test(Ch ch)
Definition rapidxml.hpp:1426
source
Definition tag_strings.h:83
i
Definition tag_strings.h:60
p
Definition tag_strings.h:29
code
Definition tag_strings.h:54