1 #ifndef RAPIDXML_HPP_INCLUDED     2 #define RAPIDXML_HPP_INCLUDED    10 #if !defined(RAPIDXML_NO_STDLIB)    20     #pragma warning(disable:4127)   // Conditional expression is constant    26 #if defined(RAPIDXML_NO_EXCEPTIONS)    28 #define RAPIDXML_PARSE_ERROR(what, where) { parse_error_handler(what, where); assert(0); }    48     void parse_error_handler(
const char *what, 
void *where);
    55 #define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)    85         virtual const char *
what() 
const throw()
    96             return reinterpret_cast<Ch *
>(
m_where);
   112 #ifndef RAPIDXML_STATIC_POOL_SIZE   116     #define RAPIDXML_STATIC_POOL_SIZE (64 * 1024)   119 #ifndef RAPIDXML_DYNAMIC_POOL_SIZE   123     #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)   126 #ifndef RAPIDXML_ALIGNMENT   131     #define RAPIDXML_ALIGNMENT sizeof(void *)   294             static const unsigned char lookup_whitespace[256];              
   295             static const unsigned char lookup_node_name[256];               
   296             static const unsigned char lookup_text[256];                    
   297             static const unsigned char lookup_text_pure_no_ws[256];         
   298             static const unsigned char lookup_text_pure_with_ws[256];       
   299             static const unsigned char lookup_attribute_name[256];          
   300             static const unsigned char lookup_attribute_data_1[256];        
   301             static const unsigned char lookup_attribute_data_1_pure[256];   
   302             static const unsigned char lookup_attribute_data_2[256];        
   303             static const unsigned char lookup_attribute_data_2_pure[256];   
   304             static const unsigned char lookup_digits[256];                  
   305             static const unsigned char lookup_upcase[256];                  
   310         inline std::size_t measure(
const Ch *
p)
   320         inline bool compare(
const Ch *p1, std::size_t size1, 
const Ch *p2, std::size_t size2, 
bool case_sensitive)
   326                 for (
const Ch *
end = p1 + size1; p1 < 
end; ++p1, ++p2)
   332                 for (
const Ch *
end = p1 + size1; p1 < 
end; ++p1, ++p2)
   333                     if (lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p1)] != lookup_tables<0>::lookup_upcase[static_cast<unsigned char>(*p2)])
   378     template<
class Ch = 
char>
   385         typedef void *(alloc_func)(std::size_t);       
   386         typedef void (free_func)(
void *);              
   417                                     std::size_t name_size = 0, std::size_t value_size = 0)
   448                                               std::size_t name_size = 0, std::size_t value_size = 0)
   481             Ch *result = 
static_cast<Ch *
>(allocate_aligned(
size * 
sizeof(Ch)));
   483                 for (std::size_t i = 0; i < 
size; ++i)
   502                 result->remove_all_attributes();
   503                 result->remove_all_nodes();
   504                 result->type(source->
type());
   507                 result = allocate_node(source->
type());
   515                 result->append_node(clone_node(child));
   517                 result->append_attribute(allocate_attribute(attr->name(), attr->value(), attr->name_size(), attr->value_size()));
   527             while (m_begin != m_static_memory)
   529                 char *previous_begin = 
reinterpret_cast<header *
>(align(m_begin))->previous_begin;
   531                     m_free_func(m_begin);
   534                 m_begin = previous_begin;
   554             assert(m_begin == m_static_memory && m_ptr == align(m_begin));    
   568             m_begin = m_static_memory;
   569             m_ptr = align(m_begin);
   570             m_end = m_static_memory + 
sizeof(m_static_memory);
   576             return ptr + alignment;
   585                 memory = m_alloc_func(size);
   590                 memory = 
new char[size];
   591 #ifdef RAPIDXML_NO_EXCEPTIONS   596             return static_cast<char *
>(memory);
   602             char *result = align(m_ptr);
   605             if (result + size > m_end)
   609                 if (pool_size < size)
   614                 char *raw_memory = allocate_raw(alloc_size);
   617                 char *pool = align(raw_memory);
   620                 m_begin = raw_memory;
   621                 m_ptr = pool + 
sizeof(
header);
   622                 m_end = raw_memory + alloc_size;
   625                 result = align(m_ptr);
   629             m_ptr = result + size;
   647     template<
class Ch = 
char>
   675             return m_name ? m_name : nullstr();
   683             return m_name ? m_name_size : 0;
   694             return m_value ? m_value : nullstr();
   702             return m_value ? m_value_size : 0;
   723             m_name = 
const_cast<Ch *
>(name);
   732             this->name(name, internal::measure(name));
   753             m_value = 
const_cast<Ch *
>(value);
   762             this->value(value, internal::measure(value));
   780             static Ch zero = Ch(
'\0');
   797     template<
class Ch = 
char>
   823                 while (node->parent())
   824                     node = node->parent();
   841                     name_size = internal::measure(
name);
   843                     if (internal::compare(attribute->name(), attribute->name_size(), 
name, name_size, case_sensitive))
   848                 return this->m_parent ? m_prev_attribute : 0;
   861                     name_size = internal::measure(
name);
   863                     if (internal::compare(attribute->name(), attribute->name_size(), 
name, name_size, case_sensitive))
   868                 return this->m_parent ? m_next_attribute : 0;
   889     template<
class Ch = 
char>
   904             , m_first_attribute(0)
   941                     name_size = internal::measure(
name);
   943                     if (internal::compare(child->name(), child->name_size(), 
name, name_size, case_sensitive))
   960             assert(m_first_node);  
   964                     name_size = internal::measure(
name);
   966                     if (internal::compare(child->name(), child->name_size(), 
name, name_size, case_sensitive))
   983             assert(this->m_parent);     
   987                     name_size = internal::measure(
name);
   989                     if (internal::compare(sibling->name(), sibling->name_size(), 
name, name_size, case_sensitive))
   994                 return m_prev_sibling;
  1006             assert(this->m_parent);     
  1010                     name_size = internal::measure(
name);
  1012                     if (internal::compare(sibling->name(), sibling->name_size(), 
name, name_size, case_sensitive))
  1017                 return m_next_sibling;
  1030                     name_size = internal::measure(
name);
  1032                     if (internal::compare(attribute->name(), attribute->name_size(), 
name, name_size, case_sensitive))
  1037                 return m_first_attribute;
  1050                     name_size = internal::measure(
name);
  1052                     if (internal::compare(attribute->name(), attribute->name_size(), 
name, name_size, case_sensitive))
  1057                 return m_first_attribute ? m_last_attribute : 0;
  1082                 m_first_node->m_prev_sibling = child;
  1087                 m_last_node = child;
  1089             m_first_node = child;
  1103                 m_last_node->m_next_sibling = child;
  1108                 m_first_node = child;
  1110             m_last_node = child;
  1121             assert(!where || where->
parent() == 
this);
  1123             if (where == m_first_node)
  1124                 prepend_node(child);
  1125             else if (where == 0)
  1142             assert(first_node());
  1157             assert(first_node());
  1173             assert(where && where->
parent() == 
this);
  1174             assert(first_node());
  1175             if (where == m_first_node)
  1176                 remove_first_node();
  1177             else if (where == m_last_node)
  1199             assert(attribute && !attribute->
parent());
  1200             if (first_attribute())
  1203                 m_first_attribute->m_prev_attribute = attribute;
  1208                 m_last_attribute = attribute;
  1210             m_first_attribute = attribute;
  1219             assert(attribute && !attribute->
parent());
  1220             if (first_attribute())
  1223                 m_last_attribute->m_next_attribute = attribute;
  1228                 m_first_attribute = attribute;
  1230             m_last_attribute = attribute;
  1241             assert(!where || where->
parent() == 
this);
  1242             assert(attribute && !attribute->
parent());
  1243             if (where == m_first_attribute)
  1244                 prepend_attribute(attribute);
  1245             else if (where == 0)
  1246                 append_attribute(attribute);
  1262             assert(first_attribute());
  1269                 m_last_attribute = 0;
  1279             assert(first_attribute());
  1287                 m_first_attribute = 0;
  1295             assert(first_attribute() && where->
parent() == 
this);
  1296             if (where == m_first_attribute)
  1297                 remove_first_attribute();
  1298             else if (where == m_last_attribute)
  1299                 remove_last_attribute();
  1312                 attribute->m_parent = 0;
  1313             m_first_attribute = 0;
  1357     template<
class Ch = 
char>
  1386             this->remove_all_nodes();
  1387             this->remove_all_attributes();
  1390             parse_bom<Flags>(text);
  1396                 skip<whitespace_pred, Flags>(text);
  1401                 if (*text == Ch(
'<'))
  1405                         this->append_node(node);
  1417             this->remove_all_nodes();
  1418             this->remove_all_attributes();
  1432                 return internal::lookup_tables<0>::lookup_whitespace[
static_cast<unsigned char>(ch)];
  1441                 return internal::lookup_tables<0>::lookup_node_name[
static_cast<unsigned char>(ch)];
  1450                 return internal::lookup_tables<0>::lookup_attribute_name[
static_cast<unsigned char>(ch)];
  1459                 return internal::lookup_tables<0>::lookup_text[
static_cast<unsigned char>(ch)];
  1468                 return internal::lookup_tables<0>::lookup_text_pure_no_ws[
static_cast<unsigned char>(ch)];
  1477                 return internal::lookup_tables<0>::lookup_text_pure_with_ws[
static_cast<unsigned char>(ch)];
  1487                 if (Quote == Ch(
'\''))
  1488                     return internal::lookup_tables<0>::lookup_attribute_data_1[
static_cast<unsigned char>(ch)];
  1489                 if (Quote == Ch(
'\"'))
  1490                     return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
  1501                 if (Quote == Ch(
'\''))
  1502                     return internal::lookup_tables<0>::lookup_attribute_data_1_pure[
static_cast<unsigned char>(ch)];
  1503                 if (Quote == Ch(
'\"'))
  1504                     return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
  1513             if (Flags & parse_no_utf8)
  1517                 text[0] = 
static_cast<unsigned char>(code);
  1525                         text[0] = 
static_cast<unsigned char>(code);
  1528                 else if (code < 0x800)  
  1530                         text[1] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1531                         text[0] = 
static_cast<unsigned char>(code | 0xC0);
  1534                     else if (code < 0x10000)    
  1536                         text[2] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1537                         text[1] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1538                         text[0] = 
static_cast<unsigned char>(code | 0xE0);
  1541                     else if (code < 0x110000)   
  1543                         text[3] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1544                         text[2] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1545                         text[1] = 
static_cast<unsigned char>((code | 0x80) & 0xBF); code >>= 6;
  1546                         text[0] = 
static_cast<unsigned char>(code | 0xF0);
  1557         template<
class StopPred, 
int Flags>
  1561             while (StopPred::test(*tmp))
  1569         template<
class StopPred, 
class StopPredPure, 
int Flags>
  1573             if (Flags & parse_no_entity_translation && 
  1574                 !(Flags & parse_normalize_whitespace) &&
  1575                 !(Flags & parse_trim_whitespace))
  1577                 skip<StopPred, Flags>(text);
  1582             skip<StopPredPure, Flags>(text);
  1587             while (StopPred::test(*src))
  1590                 if (!(Flags & parse_no_entity_translation))
  1593                     if (src[0] == Ch(
'&'))
  1600                             if (src[2] == Ch(
'm') && src[3] == Ch(
'p') && src[4] == Ch(
';'))
  1607                             if (src[2] == Ch(
'p') && src[3] == Ch(
'o') && src[4] == Ch(
's') && src[5] == Ch(
';'))
  1618                             if (src[2] == Ch(
'u') && src[3] == Ch(
'o') && src[4] == Ch(
't') && src[5] == Ch(
';'))
  1629                             if (src[2] == Ch(
't') && src[3] == Ch(
';'))
  1640                             if (src[2] == Ch(
't') && src[3] == Ch(
';'))
  1651                             if (src[2] == Ch(
'x'))
  1653                                 unsigned long code = 0;
  1657                                     unsigned char digit = internal::lookup_tables<0>::lookup_digits[
static_cast<unsigned char>(*src)];
  1660                                     code = code * 16 + digit;
  1663                                 insert_coded_character<Flags>(dest, code);    
  1667                                 unsigned long code = 0;
  1671                                     unsigned char digit = internal::lookup_tables<0>::lookup_digits[
static_cast<unsigned char>(*src)];
  1674                                     code = code * 10 + digit;
  1677                                 insert_coded_character<Flags>(dest, code);    
  1679                             if (*src == Ch(
';'))
  1695                 if (Flags & parse_normalize_whitespace)
  1698                     if (whitespace_pred::test(*src))
  1700                         *dest = Ch(
' '); ++dest;    
  1703                         while (whitespace_pred::test(*src))
  1728             if (static_cast<unsigned char>(text[0]) == 0xEF && 
  1729                 static_cast<unsigned char>(text[1]) == 0xBB && 
  1730                 static_cast<unsigned char>(text[2]) == 0xBF)
  1741             if (!(Flags & parse_declaration_node))
  1744                 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
  1758             skip<whitespace_pred, Flags>(text);
  1761             parse_node_attributes<Flags>(text, declaration);
  1764             if (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
  1776             if (!(Flags & parse_comment_nodes))
  1779                 while (text[0] != Ch(
'-') || text[1] != Ch(
'-') || text[2] != Ch(
'>'))
  1793             while (text[0] != Ch(
'-') || text[1] != Ch(
'-') || text[2] != Ch(
'>'))
  1802             comment->
value(value, text - value);
  1805             if (!(Flags & parse_no_string_terminators))
  1820             while (*text != Ch(
'>'))
  1836                             case Ch(
'['): ++depth; 
break;
  1837                             case Ch(
']'): --depth; 
break;
  1857             if (Flags & parse_doctype_node)
  1861                 doctype->
value(value, text - value);
  1864                 if (!(Flags & parse_no_string_terminators))
  1883             if (Flags & parse_pi_nodes)
  1890                 skip<node_name_pred, Flags>(text);
  1893                 pi->
name(name, text - name);
  1896                 skip<whitespace_pred, Flags>(text);
  1902                 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
  1904                     if (*text == Ch(
'\0'))
  1910                 pi->
value(value, text - value);     
  1913                 if (!(Flags & parse_no_string_terminators))
  1925                 while (text[0] != Ch(
'?') || text[1] != Ch(
'>'))
  1927                     if (*text == Ch(
'\0'))
  1943             if (!(Flags & parse_trim_whitespace))
  1944                 text = contents_start;     
  1948             if (Flags & parse_normalize_whitespace)
  1949                 end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
  1951                 end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
  1954             if (Flags & parse_trim_whitespace)
  1956                 if (Flags & parse_normalize_whitespace)
  1959                     if (*(end - 1) == Ch(
' '))
  1965                     while (whitespace_pred::test(*(end - 1)))
  1972             if (!(Flags & parse_no_data_nodes))
  1975                 data->
value(value, end - value);
  1980             if (!(Flags & parse_no_element_values)) 
  1981                 if (*node->
value() == Ch(
'\0'))
  1982                     node->
value(value, end - value);
  1985             if (!(Flags & parse_no_string_terminators))
  2001             if (Flags & parse_no_data_nodes)
  2004                 while (text[0] != Ch(
']') || text[1] != Ch(
']') || text[2] != Ch(
'>'))
  2016             while (text[0] != Ch(
']') || text[1] != Ch(
']') || text[2] != Ch(
'>'))
  2025             cdata->
value(value, text - value);
  2028             if (!(Flags & parse_no_string_terminators))
  2044             skip<node_name_pred, Flags>(text);
  2047             element->
name(name, text - name);
  2050             skip<whitespace_pred, Flags>(text);
  2053             parse_node_attributes<Flags>(text, element);
  2056             if (*text == Ch(
'>'))
  2059                 parse_node_contents<Flags>(text, element);
  2061             else if (*text == Ch(
'/'))
  2064                 if (*text != Ch(
'>'))
  2072             if (!(Flags & parse_no_string_terminators))
  2090                 return parse_element<Flags>(text);
  2095                 if ((text[0] == Ch(
'x') || text[0] == Ch(
'X')) &&
  2096                     (text[1] == Ch(
'm') || text[1] == Ch(
'M')) && 
  2097                     (text[2] == Ch(
'l') || text[2] == Ch(
'L')) &&
  2098                     whitespace_pred::test(text[3]))
  2102                     return parse_xml_declaration<Flags>(text);
  2107                     return parse_pi<Flags>(text);
  2119                     if (text[2] == Ch(
'-'))
  2123                         return parse_comment<Flags>(text);
  2129                     if (text[2] == Ch(
'C') && text[3] == Ch(
'D') && text[4] == Ch(
'A') && 
  2130                         text[5] == Ch(
'T') && text[6] == Ch(
'A') && text[7] == Ch(
'['))
  2134                         return parse_cdata<Flags>(text);
  2140                     if (text[2] == Ch(
'O') && text[3] == Ch(
'C') && text[4] == Ch(
'T') && 
  2141                         text[5] == Ch(
'Y') && text[6] == Ch(
'P') && text[7] == Ch(
'E') && 
  2142                         whitespace_pred::test(text[8]))
  2146                         return parse_doctype<Flags>(text);
  2153                 while (*text != Ch(
'>'))
  2173                 Ch *contents_start = text;      
  2174                 skip<whitespace_pred, Flags>(text);
  2175                 Ch next_char = *text;
  2189                     if (text[1] == Ch(
'/'))
  2193                         if (Flags & parse_validate_closing_tags)
  2196                             Ch *closing_name = text;
  2197                             skip<node_name_pred, Flags>(text);
  2198                             if (!internal::compare(node->
name(), node->
name_size(), closing_name, text - closing_name, 
true))
  2204                             skip<node_name_pred, Flags>(text);
  2207                         skip<whitespace_pred, Flags>(text);
  2208                         if (*text != Ch(
'>'))
  2228                     next_char = parse_and_append_data<Flags>(node, text, contents_start);
  2229                     goto after_data_node;   
  2240             while (attribute_name_pred::test(*text))
  2245                 skip<attribute_name_pred, Flags>(text);
  2251                 attribute->
name(name, text - name);
  2255                 skip<whitespace_pred, Flags>(text);
  2258                 if (*text != Ch(
'='))
  2263                 if (!(Flags & parse_no_string_terminators))
  2267                 skip<whitespace_pred, Flags>(text);
  2271                 if (quote != Ch(
'\'') && quote != Ch(
'"'))
  2277                 const int AttFlags = Flags & ~parse_normalize_whitespace;   
  2278                 if (quote == Ch(
'\''))
  2284                 attribute->
value(value, end - value);
  2292                 if (!(Flags & parse_no_string_terminators))
  2296                 skip<whitespace_pred, Flags>(text);
  2308         const unsigned char lookup_tables<Dummy>::lookup_whitespace[256] = 
  2311              0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  0,  1,  0,  0,  
  2312              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2313              1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2314              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2315              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2316              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2317              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2318              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2319              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2320              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2321              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2322              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2323              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2324              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2325              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  2326              0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0   
  2331         const unsigned char lookup_tables<Dummy>::lookup_node_name[256] = 
  2334              0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  
  2335              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2336              0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  
  2337              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  
  2338              1,  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,  1,  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   
  2354         const unsigned char lookup_tables<Dummy>::lookup_text[256] = 
  2357              0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2358              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2359              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2360              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  
  2361              1,  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,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2364              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  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   
  2378         const unsigned char lookup_tables<Dummy>::lookup_text_pure_no_ws[256] = 
  2381              0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2382              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2383              1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2384              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  
  2385              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2386              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2387              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  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   
  2402         const unsigned char lookup_tables<Dummy>::lookup_text_pure_with_ws[256] = 
  2405              0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  
  2406              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2407              0,  1,  1,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2408              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  1,  1,  1,  
  2409              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  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   
  2425         const unsigned char lookup_tables<Dummy>::lookup_attribute_name[256] = 
  2428              0,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1,  1,  
  2429              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2430              0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  
  2431              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0,  
  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   
  2448         const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1[256] = 
  2451              0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2452              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2453              1,  1,  1,  1,  1,  1,  1,  0,  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,  
  2466              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   
  2471         const unsigned char lookup_tables<Dummy>::lookup_attribute_data_1_pure[256] = 
  2474              0,  1,  1,  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,  0,  0,  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,  
  2488              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2489              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   
  2494         const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2[256] = 
  2497              0,  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,  0,  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,  
  2510              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2511              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2512              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   
  2517         const unsigned char lookup_tables<Dummy>::lookup_attribute_data_2_pure[256] = 
  2520              0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2521              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2522              1,  1,  0,  1,  1,  1,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2523              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2524              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2525              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2526              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2527              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2528              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2529              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2530              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2531              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2532              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2533              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2534              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  
  2535              1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1   
  2540         const unsigned char lookup_tables<Dummy>::lookup_digits[256] = 
  2543            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2544            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2545            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2546              0,  1,  2,  3,  4,  5,  6,  7,  8,  9,255,255,255,255,255,255,  
  2547            255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255,  
  2548            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2549            255, 10, 11, 12, 13, 14, 15,255,255,255,255,255,255,255,255,255,  
  2550            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2551            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2552            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2553            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2554            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2555            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2556            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2557            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,  
  2558            255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255   
  2563         const unsigned char lookup_tables<Dummy>::lookup_upcase[256] = 
  2566            0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15,   
  2567            16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,   
  2568            32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,   
  2569            48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,   
  2570            64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,   
  2571            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,   
  2572            96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,   
  2573            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 123,124,125,126,127,  
  2574            128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,  
  2575            144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,  
  2576            160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,  
  2577            176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,  
  2578            192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,  
  2579            208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,  
  2580            224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,  
  2581            240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255   
  2589 #undef RAPIDXML_PARSE_ERROR  2593     #pragma warning(pop) #define RAPIDXML_DYNAMIC_POOL_SIZE
xml_node< Ch > * clone_node(const xml_node< Ch > *source, xml_node< Ch > *result=0)
A comment node. Name is empty. Value contains comment text. 
xml_node< Ch > * previous_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
static unsigned char test(Ch ch)
GLint GLint GLsizei GLsizei GLsizei depth
void name(const Ch *name, std::size_t size)
#define RAPIDXML_ALIGNMENT
xml_node< Ch > * m_next_sibling
#define RAPIDXML_PARSE_ERROR(what, where)
void prepend_attribute(xml_attribute< Ch > *attribute)
const int parse_no_element_values
const int parse_no_entity_translation
xml_node< Ch > * parse_pi(Ch *&text)
void value(const Ch *value, std::size_t size)
const int parse_no_data_nodes
static unsigned char test(Ch ch)
std::size_t name_size() const 
void parse_node_contents(Ch *&text, xml_node< Ch > *node)
Ch * allocate_string(const Ch *source=0, std::size_t size=0)
static Ch * skip_and_expand_character_refs(Ch *&text)
xml_attribute< Ch > * next_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
xml_document< Ch > * document() const 
A CDATA node. Name is empty. Value contains data text. 
void parse_bom(Ch *&text)
void set_allocator(alloc_func *af, free_func *ff)
xml_document()
Constructs empty XML document. 
An element node. Name contains element name. Value contains text of first data node. 
#define RAPIDXML_STATIC_POOL_SIZE
const int parse_validate_closing_tags
void append_attribute(xml_attribute< Ch > *attribute)
xml_node< Ch > * parse_doctype(Ch *&text)
A document node. Name and value are empty. 
xml_node< Ch > * last_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
xml_node< Ch > * m_last_node
memory_pool()
Constructs empty pool with default allocator functions. 
static unsigned char test(Ch ch)
void parse_node_attributes(Ch *&text, xml_node< Ch > *node)
static unsigned char test(Ch ch)
xml_node< Ch > * parent() const 
void remove_all_nodes()
Removes all child nodes (but not attributes). 
xml_node< Ch > * first_node(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
void remove_last_attribute()
GLsizei const GLfloat * value
void remove_first_attribute()
static unsigned char test(Ch ch)
char * allocate_raw(std::size_t size)
void insert_node(xml_node< Ch > *where, xml_node< Ch > *child)
void remove_attribute(xml_attribute< Ch > *where)
xml_attribute< Ch > * previous_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
xml_node< Ch > * parse_xml_declaration(Ch *&text)
const int parse_comment_nodes
static void skip(Ch *&text)
Ch parse_and_append_data(xml_node< Ch > *node, Ch *&text, Ch *contents_start)
static unsigned char test(Ch ch)
void name(const Ch *name)
const int parse_non_destructive
xml_node< Ch > * parse_element(Ch *&text)
GLuint const GLchar * name
GLint GLenum GLsizei GLint GLsizei const GLvoid * data
const int parse_declaration_node
virtual const char * what() const 
xml_attribute< Ch > * first_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
void remove_node(xml_node< Ch > *where)
Removes specified child from the node. 
const int parse_trim_whitespace
static unsigned char test(Ch ch)
A data node. Name is empty. Value contains data text. 
A DOCTYPE node. Name is empty. Value contains DOCTYPE text. 
xml_node< Ch > * parse_node(Ch *&text)
xml_node< Ch > * m_parent
A PI node. Name contains target. Value contains instructions. 
A declaration node. Name and value are empty. Declaration parameters (version, encoding and standalon...
xml_attribute< Ch > * last_attribute(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
xml_node< Ch > * next_sibling(const Ch *name=0, std::size_t name_size=0, bool case_sensitive=true) const 
void append_node(xml_node< Ch > *child)
xml_attribute< Ch > * m_last_attribute
const int parse_normalize_whitespace
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)
void type(node_type type)
const int parse_no_string_terminators
xml_node< Ch > * parse_comment(Ch *&text)
void * allocate_aligned(std::size_t size)
GLuint GLuint GLsizei GLenum type
xml_node< Ch > * parse_cdata(Ch *&text)
xml_attribute< Ch > * m_first_attribute
static void insert_coded_character(Ch *&text, unsigned long code)
xml_node< Ch > * m_prev_sibling
xml_node< Ch > * m_first_node
xml_document< Ch > * document() const 
void prepend_node(xml_node< Ch > *child)
static unsigned char test(Ch ch)
void insert_attribute(xml_attribute< Ch > *where, xml_attribute< Ch > *attribute)
xml_attribute< Ch > * m_prev_attribute
alloc_func * m_alloc_func
parse_error(const char *what, void *where)
Constructs parse error. 
void remove_all_attributes()
Removes all attributes of node. 
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)
GLsizei GLsizei GLchar * source
xml_attribute< Ch > * m_next_attribute
std::size_t value_size() const 
void value(const Ch *value)
const int parse_doctype_node