LLVMFuzzerTestOneInput:
   19|  2.58k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   20|       |
   21|  2.58k|    if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   16|  5.16k|#define kMinInputLength 10
  ------------------
                  if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   17|  2.57k|#define kMaxInputLength 5120
  ------------------
  |  Branch (21:9): [True: 6, False: 2.57k]
  |  Branch (21:35): [True: 8, False: 2.56k]
  ------------------
   22|     14|        return 1;
   23|     14|    }
   24|       |
   25|  2.56k|    std::string data(Data, Data + Size);
   26|  2.56k|    std::vector<char> text(data.begin(), data.end());
   27|  2.56k|    text.push_back('\0');
   28|       |
   29|  2.56k|    try {
   30|  2.56k|        Wt::rapidxml::xml_document<> doc;
   31|  2.56k|        doc.parse<0>(&text[0]);
   32|  2.56k|        Wt::Utils::fixSelfClosingTags(&doc);
   33|  2.56k|    } catch( ... ) {/*...*/}
   34|       |
   35|  2.56k|    return 0;
   36|  2.56k|}

_ZN2Wt4Json5ArrayC2Ev:
   15|      2|  : Impl()
   16|      2|{ }

_ZN2Wt4Json6ObjectC2Ev:
   17|      2|{ }

_ZN2Wt4Json5ValueC2Ev:
   87|      2|{ }
_ZN2Wt4Json5ValueC2Eb:
   90|      4|  : v_(value)
   91|      4|{ }

_ZN2WtorENS_11OrientationES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_11OrientationEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_11OrientationEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZN2WtorENS_4SideES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_4SideEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_4SideEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZN2WtorENS_13AlignmentFlagES0_:
  370|    692|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    692|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    692|  retval |= r;                                                          \
  373|    692|  return retval;                                                        \
  374|    692|}                                                                       \
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2ES1_:
  187|    692|  flags_(static_cast<unsigned int>(flag))
  188|    692|{
  189|    692|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEEoRES1_:
  327|    692|{
  328|    692|  flags_ |= static_cast<unsigned int>(other);
  329|    692|  return *this;
  330|    692|}
_ZN2WtorENS_9MatchFlagES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_9MatchFlagEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_9MatchFlagEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZNK2Wt6WFlagsINS_4SideEEorES1_:
  313|    692|{
  314|    692|  return WFlags<EnumType>::createFromInt
  315|    692|    (flags_ | static_cast<unsigned int>(other));
  316|    692|}
_ZN2Wt6WFlagsINS_4SideEE13createFromIntEi:
  173|    692|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|    692|    return WFlags(flags, false);
  175|    692|  }
_ZN2Wt6WFlagsINS_4SideEEC2Eib:
  172|    692|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_13AlignmentFlagEEorES1_:
  313|  2.76k|{
  314|  2.76k|  return WFlags<EnumType>::createFromInt
  315|  2.76k|    (flags_ | static_cast<unsigned int>(other));
  316|  2.76k|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEE13createFromIntEi:
  173|  2.76k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  2.76k|    return WFlags(flags, false);
  175|  2.76k|  }
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2Eib:
  172|  2.76k|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_9MatchFlagEEorES1_:
  313|  1.38k|{
  314|  1.38k|  return WFlags<EnumType>::createFromInt
  315|  1.38k|    (flags_ | static_cast<unsigned int>(other));
  316|  1.38k|}
_ZN2Wt6WFlagsINS_9MatchFlagEE13createFromIntEi:
  173|  1.38k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  1.38k|    return WFlags(flags, false);
  175|  1.38k|  }
_ZN2Wt6WFlagsINS_9MatchFlagEEC2Eib:
  172|  1.38k|  WFlags(int flags, bool): flags_(flags) {}
_ZN2WtorENS_19ValidationStyleFlagES0_:
  370|     58|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|     58|  Wt::WFlags<EnumType> retval(l);                                       \
  372|     58|  retval |= r;                                                          \
  373|     58|  return retval;                                                        \
  374|     58|}                                                                       \
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEC2ES1_:
  187|     58|  flags_(static_cast<unsigned int>(flag))
  188|     58|{
  189|     58|}
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEoRES1_:
  327|     58|{
  328|     58|  flags_ |= static_cast<unsigned int>(other);
  329|     58|  return *this;
  330|     58|}
_ZN2WtorENS_7WSlider12TickPositionES1_:
  370|      2|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|      2|  Wt::WFlags<EnumType> retval(l);                                       \
  372|      2|  retval |= r;                                                          \
  373|      2|  return retval;                                                        \
  374|      2|}                                                                       \
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEoRES2_:
  327|      2|{
  328|      2|  flags_ |= static_cast<unsigned int>(other);
  329|      2|  return *this;
  330|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ES2_:
  187|      2|  flags_(static_cast<unsigned int>(flag))
  188|      2|{
  189|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ENS_11NoFlagsTypeE:
  193|      2|  : flags_(0)
  194|      2|{ }

_ZN2Wt26WJavaScriptExposableObjectC2Ev:
   17|      2|  : clientBinding_(nullptr)
   18|      2|{ }
_ZNK2Wt26WJavaScriptExposableObject17isJavaScriptBoundEv:
   46|      2|{
   47|      2|  return clientBinding_;
   48|      2|}
_ZNK2Wt26WJavaScriptExposableObject15checkModifiableEv:
   93|      2|{
   94|      2|  if (isJavaScriptBound()) {
  ------------------
  |  Branch (94:7): [True: 0, False: 2]
  ------------------
   95|      0|    throw WException("Trying to modify a JavaScript bound object!");
   96|      0|  }
   97|      2|}

_ZN2Wt7WLengthC2Ev:
   24|      2|  : auto_(true),
   25|      2|    unit_(LengthUnit::Pixel),
   26|      2|    value_(-1)
   27|      2|{ }

_ZN2Wt7WLocaleC2Ev:
   16|      2|  : decimalPoint_("."),
   17|      2|    groupSeparator_(""),
   18|      2|    dateFormat_("yyyy-MM-dd"),
   19|      2|    timeFormat_("HH:mm:ss"),
   20|      2|    dateTimeFormat_("yyyy-MM-dd HH:mm:ss"),
   21|      2|    timeZone_(nullptr)
   22|      2|{ }

_ZN2Wt7WLoggerC2Ev:
  236|      2|  : o_(&std::cerr),
  237|      2|    ownStream_(false),
  238|      2|    useLock_(true)
  239|      2|{
  240|      2|  Rule r;
  241|      2|  r.type = "*";
  242|      2|  r.scope = "*";
  243|      2|  r.include = true;
  244|      2|  rules_.push_back(r);
  245|      2|  r.type = "debug";
  246|      2|  r.include = false;
  247|      2|  rules_.push_back(r);
  248|      2|}

_ZN2Wt7WStringC2Ev:
   28|      2|  : impl_(nullptr)
   29|      2|{ }
_ZN2Wt7WStringC2EPKcNS_12CharEncodingE:
   71|      6|  : impl_(nullptr)
   72|      6|{
   73|      6|  if (value) {
  ------------------
  |  Branch (73:7): [True: 6, False: 0]
  ------------------
   74|      6|    if (realEncoding(encoding) == CharEncoding::UTF8)
  ------------------
  |  Branch (74:9): [True: 6, False: 0]
  ------------------
   75|      6|      utf8_ = value;
   76|      0|    else
   77|      0|      utf8_ = Wt::toUTF8(value);
   78|      6|  }
   79|      6|}
_ZN2Wt7WString12realEncodingENS_12CharEncodingE:
  611|      6|{
  612|      6|  return encoding == CharEncoding::Default
  ------------------
  |  Branch (612:10): [True: 6, False: 0]
  ------------------
  613|      6|    ? defaultEncoding_ : encoding;
  614|      6|}

_ZN2Wt10WTransformC2Ev:
   29|      2|{
   30|      2|  reset();
   31|      2|}
_ZN2Wt10WTransform5resetEv:
  105|      2|{
  106|      2|  checkModifiable();
  107|      2|  m_[M11] = m_[M22] = 1;
  108|      2|  m_[M21] = m_[M12] = m_[M13] = m_[M23] = 0;
  109|      2|}

_ZN4linb3anyC2Ev:
   40|      2|        vtable(nullptr)
   41|      2|    {
   42|      2|    }
_ZN4linb3any15vtable_for_typeIbEEPNS0_11vtable_typeEv:
  285|      4|    {
  286|      4|        using VTableType = typename std::conditional<requires_allocation<T>::value, vtable_dynamic<T>, vtable_stack<T>>::type;
  287|      4|        static vtable_type table = {
  288|      4|            VTableType::type, VTableType::destroy,
  289|      4|            VTableType::copy, VTableType::move,
  290|      4|            VTableType::swap,
  291|      4|        };
  292|      4|        return &table;
  293|      4|    }
_ZN4linb3anyC2IRbvEEOT_:
   78|      4|    {
   79|      4|        static_assert(std::is_copy_constructible<typename std::decay<ValueType>::type>::value,
   80|      4|            "T shall satisfy the CopyConstructible requirements.");
   81|      4|        this->construct(std::forward<ValueType>(value));
   82|      4|    }
_ZN4linb3any9constructIRbEEvOT_:
  362|      4|    {
  363|      4|        using T = typename std::decay<ValueType>::type;
  364|       |
  365|      4|        this->vtable = vtable_for_type<T>();
  366|       |
  367|      4|        do_construct<ValueType, T>(std::forward<ValueType>(value));
  368|      4|    }
_ZN4linb3any12do_constructIRbbEENSt9enable_ifIXntsr19requires_allocationIT0_EE5valueEvE4typeEOT_:
  354|      4|    {
  355|      4|        new (&storage.stack) T(std::forward<ValueType>(value));
  356|      4|    }

_ZN2Wt8rapidxml11memory_poolIcED2Ev:
  416|  2.56k|        {
  417|  2.56k|            clear();
  418|  2.56k|        }
_ZN2Wt8rapidxml11memory_poolIcE5clearEv:
  541|  2.56k|        {
  542|  2.62k|            while (m_begin != m_static_memory)
  ------------------
  |  Branch (542:20): [True: 52, False: 2.56k]
  ------------------
  543|     52|            {
  544|     52|                char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
  545|     52|                if (m_free_func)
  ------------------
  |  Branch (545:21): [True: 0, False: 52]
  ------------------
  546|      0|                    m_free_func(m_begin);
  547|     52|                else
  548|     52|                    delete[] m_begin;
  549|     52|                m_begin = previous_begin;
  550|     52|            }
  551|  2.56k|            init();
  552|  2.56k|        }
_ZN2Wt8rapidxml11memory_poolIcE5alignEPc:
  589|  61.9k|        {
  590|  61.9k|            std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  61.9k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  61.9k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  61.9k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  591|  61.9k|            return ptr + alignment;
  592|  61.9k|        }
_ZN2Wt8rapidxml11memory_poolIcE4initEv:
  582|  5.13k|        {
  583|  5.13k|            m_begin = m_static_memory;
  584|  5.13k|            m_ptr = align(m_begin);
  585|  5.13k|            m_end = m_static_memory + sizeof(m_static_memory);
  586|  5.13k|        }
_ZN2Wt8rapidxml12xml_documentIcEC2Ev:
 1380|  2.56k|            : xml_node<Ch>(node_document)
 1381|  2.56k|        {
 1382|  2.56k|        }
_ZN2Wt8rapidxml8xml_nodeIcEC2ENS0_9node_typeE:
  917|  56.9k|            : m_type(type)
  918|  56.9k|            , m_first_node(0)
  919|  56.9k|            , m_first_attribute(0)
  920|  56.9k|        {
  921|  56.9k|        }
_ZN2Wt8rapidxml8xml_baseIcEC2Ev:
  673|  59.1k|            : m_name(0)
  674|  59.1k|            , m_value(0)
  675|  59.1k|            , m_parent(0)
  676|  59.1k|        {
  677|  59.1k|        }
_ZN2Wt8rapidxml11memory_poolIcEC2Ev:
  406|  2.56k|            : m_alloc_func(0)
  407|  2.56k|            , m_free_func(0)
  408|  2.56k|        {
  409|  2.56k|            init();
  410|  2.56k|        }
_ZN2Wt8rapidxml12xml_documentIcE5parseILi0EEEvPc:
 1397|  2.56k|        {
 1398|  2.56k|            assert(text);
 1399|       |            
 1400|       |            // Remove current contents
 1401|  2.56k|            this->remove_all_nodes();
 1402|  2.56k|            this->remove_all_attributes();
 1403|       |            
 1404|       |            // Parse BOM, if any
 1405|  2.56k|            parse_bom<Flags>(text);
 1406|       |            
 1407|       |            // Parse children
 1408|  12.8k|            while (1)
  ------------------
  |  Branch (1408:20): [True: 10.7k, Folded]
  ------------------
 1409|  10.7k|            {
 1410|       |                // Skip whitespace before node
 1411|  10.7k|                skip<whitespace_pred, Flags>(text);
 1412|  10.7k|                if (*text == 0)
  ------------------
  |  Branch (1412:21): [True: 353, False: 10.3k]
  ------------------
 1413|    353|                    break;
 1414|       |
 1415|       |                // Parse and append new child
 1416|  10.3k|                if (*text == Ch('<'))
  ------------------
  |  Branch (1416:21): [True: 10.3k, False: 57]
  ------------------
 1417|  10.3k|                {
 1418|  10.3k|                    ++text;     // Skip '<'
 1419|  10.3k|                    if (xml_node<Ch> *node = parse_node<Flags>(text))
  ------------------
  |  Branch (1419:39): [True: 2.88k, False: 7.43k]
  ------------------
 1420|  2.88k|                        this->append_node(node);
 1421|  10.3k|                }
 1422|     57|                else
 1423|     57|                    RAPIDXML_PARSE_ERROR("expected <", text);
  ------------------
  |  |   60|     57|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1424|  10.3k|            }
 1425|       |
 1426|  2.56k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16remove_all_nodesEv:
 1204|  2.56k|        {
 1205|  2.56k|            for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
  ------------------
  |  Branch (1205:53): [True: 0, False: 2.56k]
  ------------------
 1206|      0|                node->m_parent = 0;
 1207|  2.56k|            m_first_node = 0;
 1208|  2.56k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE10first_nodeEPKcmb:
  952|  46.5k|        {
  953|  46.5k|            if (name)
  ------------------
  |  Branch (953:17): [True: 0, False: 46.5k]
  ------------------
  954|      0|            {
  955|      0|                if (name_size == 0)
  ------------------
  |  Branch (955:21): [True: 0, False: 0]
  ------------------
  956|      0|                    name_size = internal::measure(name);
  957|      0|                for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
  ------------------
  |  Branch (957:58): [True: 0, False: 0]
  ------------------
  958|      0|                    if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|                        return child;
  960|      0|                return 0;
  961|      0|            }
  962|  46.5k|            else
  963|  46.5k|                return m_first_node;
  964|  46.5k|        }
_ZNK2Wt8rapidxml8xml_baseIcE4nameEv:
  689|  14.6k|        {
  690|  14.6k|            return m_name ? m_name : nullstr();
  ------------------
  |  Branch (690:20): [True: 14.3k, False: 251]
  ------------------
  691|  14.6k|        }
_ZN2Wt8rapidxml8xml_baseIcE7nullstrEv:
  794|  11.0k|        {
  795|  11.0k|            static Ch zero = Ch('\0');
  796|  11.0k|            return &zero;
  797|  11.0k|        }
_ZNK2Wt8rapidxml8xml_baseIcE9name_sizeEv:
  697|  14.6k|        {
  698|  14.6k|            return m_name ? m_name_size : 0;
  ------------------
  |  Branch (698:20): [True: 14.3k, False: 251]
  ------------------
  699|  14.6k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE12next_siblingEPKcmb:
 1020|  9.02k|        {
 1021|  9.02k|            assert(this->m_parent);     // Cannot query for siblings if node has no parent
 1022|  9.02k|            if (name)
  ------------------
  |  Branch (1022:17): [True: 0, False: 9.02k]
  ------------------
 1023|      0|            {
 1024|      0|                if (name_size == 0)
  ------------------
  |  Branch (1024:21): [True: 0, False: 0]
  ------------------
 1025|      0|                    name_size = internal::measure(name);
 1026|      0|                for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
  ------------------
  |  Branch (1026:62): [True: 0, False: 0]
  ------------------
 1027|      0|                    if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        return sibling;
 1029|      0|                return 0;
 1030|      0|            }
 1031|  9.02k|            else
 1032|  9.02k|                return m_next_sibling;
 1033|  9.02k|        }
_ZN2Wt8rapidxml8xml_nodeIcE21remove_all_attributesEv:
 1325|  2.56k|        {
 1326|  2.56k|            for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1326:68): [True: 0, False: 2.56k]
  ------------------
 1327|      0|                attribute->m_parent = 0;
 1328|  2.56k|            m_first_attribute = 0;
 1329|  2.56k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE15first_attributeEPKcmb:
 1041|  4.79k|        {
 1042|  4.79k|            if (name)
  ------------------
  |  Branch (1042:17): [True: 0, False: 4.79k]
  ------------------
 1043|      0|            {
 1044|      0|                if (name_size == 0)
  ------------------
  |  Branch (1044:21): [True: 0, False: 0]
  ------------------
 1045|      0|                    name_size = internal::measure(name);
 1046|      0|                for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1046:72): [True: 0, False: 0]
  ------------------
 1047|      0|                    if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1047:25): [True: 0, False: 0]
  ------------------
 1048|      0|                        return attribute;
 1049|      0|                return 0;
 1050|      0|            }
 1051|  4.79k|            else
 1052|  4.79k|                return m_first_attribute;
 1053|  4.79k|        }
_ZN2Wt8rapidxml12xml_documentIcE9parse_bomILi0EEEvRPc:
 1883|  2.56k|        {
 1884|       |            // UTF-8?
 1885|  2.56k|            if (static_cast<unsigned char>(text[0]) == 0xEF && 
  ------------------
  |  Branch (1885:17): [True: 27, False: 2.54k]
  ------------------
 1886|     27|                static_cast<unsigned char>(text[1]) == 0xBB && 
  ------------------
  |  Branch (1886:17): [True: 14, False: 13]
  ------------------
 1887|     14|                static_cast<unsigned char>(text[2]) == 0xBF)
  ------------------
  |  Branch (1887:17): [True: 1, False: 13]
  ------------------
 1888|      1|            {
 1889|      1|                text += 3;      // Skup utf-8 bom
 1890|      1|            }
 1891|  2.56k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_15whitespace_predELi0EEEvRPc:
 1711|  53.1k|        {
 1712|  53.1k|            Ch *tmp = text;
 1713|  56.1k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 3.01k, False: 53.1k]
  ------------------
 1714|  3.01k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  53.1k|            text = tmp;
 1717|  53.1k|        }
_ZN2Wt8rapidxml12xml_documentIcE15whitespace_pred4testEc:
 1446|  57.3k|            {
 1447|  57.3k|                return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)];
 1448|  57.3k|            }
_ZN2Wt8rapidxml12xml_documentIcE9next_charILi0EEEvRPc:
 1700|  75.1k|        {
 1701|  75.1k|	  if (Flags & parse_validate_utf8) {
  ------------------
  |  Branch (1701:8): [Folded, False: 75.1k]
  ------------------
 1702|      0|	    Ch *dest = 0;
 1703|      0|	    copy_check_utf8(const_cast<const Ch *&>(text), dest);
 1704|      0|	  } else
 1705|  75.1k|	    ++text;
 1706|  75.1k|	}
_ZN2Wt8rapidxml12xml_documentIcE10parse_nodeILi0EEEPNS0_8xml_nodeIcEERPc:
 2239|  42.9k|        {
 2240|       |            // Parse proper node type
 2241|  42.9k|            switch (text[0])
 2242|  42.9k|            {
 2243|       |
 2244|       |            // <...
 2245|  35.8k|            default: 
  ------------------
  |  Branch (2245:13): [True: 35.8k, False: 7.06k]
  ------------------
 2246|       |                // Parse and append element node
 2247|  35.8k|                return parse_element<Flags>(text);
 2248|       |
 2249|       |            // <?...
 2250|  1.79k|            case Ch('?'): 
  ------------------
  |  Branch (2250:13): [True: 1.79k, False: 41.1k]
  ------------------
 2251|  1.79k|                ++text;     // Skip ?
 2252|  1.79k|                if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
  ------------------
  |  Branch (2252:22): [True: 999, False: 794]
  |  Branch (2252:44): [True: 380, False: 414]
  ------------------
 2253|  1.37k|                    (text[1] == Ch('m') || text[1] == Ch('M')) && 
  ------------------
  |  Branch (2253:22): [True: 744, False: 635]
  |  Branch (2253:44): [True: 226, False: 409]
  ------------------
 2254|    970|                    (text[2] == Ch('l') || text[2] == Ch('L')) &&
  ------------------
  |  Branch (2254:22): [True: 406, False: 564]
  |  Branch (2254:44): [True: 205, False: 359]
  ------------------
 2255|    611|                    whitespace_pred::test(text[3]))
  ------------------
  |  Branch (2255:21): [True: 222, False: 389]
  ------------------
 2256|    222|                {
 2257|       |                    // '<?xml ' - xml declaration
 2258|    222|                    text += 4;      // Skip 'xml '
 2259|    222|                    return parse_xml_declaration<Flags>(text);
 2260|    222|                }
 2261|  1.57k|                else
 2262|  1.57k|                {
 2263|       |                    // Parse PI
 2264|  1.57k|                    return parse_pi<Flags>(text);
 2265|  1.57k|                }
 2266|       |            
 2267|       |            // <!...
 2268|  5.27k|            case Ch('!'): 
  ------------------
  |  Branch (2268:13): [True: 5.27k, False: 37.6k]
  ------------------
 2269|       |
 2270|       |                // Parse proper subset of <! node
 2271|  5.27k|                switch (text[1])    
  ------------------
  |  Branch (2271:25): [True: 4.09k, False: 1.18k]
  ------------------
 2272|  5.27k|                {
 2273|       |                
 2274|       |                // <!-
 2275|    449|                case Ch('-'):
  ------------------
  |  Branch (2275:17): [True: 449, False: 4.82k]
  ------------------
 2276|    449|                    if (text[2] == Ch('-'))
  ------------------
  |  Branch (2276:25): [True: 231, False: 218]
  ------------------
 2277|    231|                    {
 2278|       |                        // '<!--' - xml comment
 2279|    231|                        text += 3;     // Skip '!--'
 2280|    231|                        return parse_comment<Flags>(text);
 2281|    231|                    }
 2282|    218|                    break;
 2283|       |
 2284|       |                // <![
 2285|  1.58k|                case Ch('['):
  ------------------
  |  Branch (2285:17): [True: 1.58k, False: 3.69k]
  ------------------
 2286|  1.58k|                    if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && 
  ------------------
  |  Branch (2286:25): [True: 1.36k, False: 217]
  |  Branch (2286:47): [True: 1.16k, False: 204]
  |  Branch (2286:69): [True: 945, False: 217]
  ------------------
 2287|    945|                        text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
  ------------------
  |  Branch (2287:25): [True: 737, False: 208]
  |  Branch (2287:47): [True: 528, False: 209]
  |  Branch (2287:69): [True: 331, False: 197]
  ------------------
 2288|    331|                    {
 2289|       |                        // '<![CDATA[' - cdata
 2290|    331|                        text += 8;     // Skip '![CDATA['
 2291|    331|                        return parse_cdata<Flags>(text);
 2292|    331|                    }
 2293|  1.25k|                    break;
 2294|       |
 2295|       |                // <!D
 2296|  2.06k|                case Ch('D'):
  ------------------
  |  Branch (2296:17): [True: 2.06k, False: 3.21k]
  ------------------
 2297|  2.06k|                    if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && 
  ------------------
  |  Branch (2297:25): [True: 1.67k, False: 384]
  |  Branch (2297:47): [True: 1.44k, False: 238]
  |  Branch (2297:69): [True: 1.22k, False: 215]
  ------------------
 2298|  1.22k|                        text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && 
  ------------------
  |  Branch (2298:25): [True: 984, False: 241]
  |  Branch (2298:47): [True: 770, False: 214]
  |  Branch (2298:69): [True: 567, False: 203]
  ------------------
 2299|    567|                        whitespace_pred::test(text[8]))
  ------------------
  |  Branch (2299:25): [True: 308, False: 259]
  ------------------
 2300|    308|                    {
 2301|       |                        // '<!DOCTYPE ' - doctype
 2302|    308|                        text += 9;      // skip '!DOCTYPE '
 2303|    308|                        return parse_doctype<Flags>(text);
 2304|    308|                    }
 2305|       |
 2306|  5.27k|                }   // switch
 2307|       |
 2308|       |                // Attempt to skip other, unrecognized node types starting with <!
 2309|  4.40k|                ++text;     // Skip !
 2310|  18.5k|                while (*text != Ch('>'))
  ------------------
  |  Branch (2310:24): [True: 14.3k, False: 4.18k]
  ------------------
 2311|  14.3k|                {
 2312|  14.3k|                    if (*text == 0)
  ------------------
  |  Branch (2312:25): [True: 220, False: 14.1k]
  ------------------
 2313|    220|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    220|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2314|  14.1k|		    next_char<Flags>(text);
 2315|  14.1k|                }
 2316|  4.18k|                ++text;     // Skip '>'
 2317|  4.18k|                return 0;   // No node recognized
 2318|       |
 2319|  42.9k|            }
 2320|  42.9k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_elementILi0EEEPNS0_8xml_nodeIcEERPc:
 2195|  35.8k|        {
 2196|       |            // Create element node
 2197|  35.8k|            xml_node<Ch> *element = this->allocate_node(node_element);
 2198|       |
 2199|       |            // Extract element name
 2200|  35.8k|            Ch *name = text;
 2201|  35.8k|            skip<node_name_pred, Flags>(text);
 2202|  35.8k|            if (text == name)
  ------------------
  |  Branch (2202:17): [True: 19, False: 35.8k]
  ------------------
 2203|     19|                RAPIDXML_PARSE_ERROR("expected element name", text);
  ------------------
  |  |   60|     19|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2204|  35.8k|            element->name(name, text - name);
 2205|       |            
 2206|       |            // Skip whitespace between element name and attributes or >
 2207|  35.8k|            skip<whitespace_pred, Flags>(text);
 2208|       |
 2209|       |            // Parse attributes, if any
 2210|  35.8k|            parse_node_attributes<Flags>(text, element);
 2211|       |
 2212|       |            // Determine ending type
 2213|  35.8k|            if (*text == Ch('>'))
  ------------------
  |  Branch (2213:17): [True: 29.0k, False: 6.78k]
  ------------------
 2214|  29.0k|            {
 2215|  29.0k|                ++text;
 2216|  29.0k|                parse_node_contents<Flags>(text, element);
 2217|  29.0k|            }
 2218|  6.78k|            else if (*text == Ch('/'))
  ------------------
  |  Branch (2218:22): [True: 5.97k, False: 806]
  ------------------
 2219|  5.97k|            {
 2220|  5.97k|                ++text;
 2221|  5.97k|                if (*text != Ch('>'))
  ------------------
  |  Branch (2221:21): [True: 13, False: 5.96k]
  ------------------
 2222|     13|                    RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     13|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2223|  5.96k|                ++text;
 2224|  5.96k|            }
 2225|    806|            else
 2226|    806|                RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|    806|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2227|       |
 2228|       |            // Place zero terminator after name
 2229|  35.0k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2229:17): [True: 6.66k, Folded]
  ------------------
 2230|  6.66k|                element->name()[element->name_size()] = Ch('\0');
 2231|       |
 2232|       |            // Return parsed element
 2233|  35.0k|            return element;
 2234|  35.8k|        }
_ZN2Wt8rapidxml11memory_poolIcE13allocate_nodeENS0_9node_typeEPKcS5_mm:
  433|  54.3k|        {
  434|  54.3k|            void *memory = allocate_aligned(sizeof(xml_node<Ch>));
  435|  54.3k|            xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
  436|  54.3k|            if (name)
  ------------------
  |  Branch (436:17): [True: 0, False: 54.3k]
  ------------------
  437|      0|            {
  438|      0|                if (name_size > 0)
  ------------------
  |  Branch (438:21): [True: 0, False: 0]
  ------------------
  439|      0|                    node->name(name, name_size);
  440|      0|                else
  441|      0|                    node->name(name);
  442|      0|            }
  443|  54.3k|            if (value)
  ------------------
  |  Branch (443:17): [True: 0, False: 54.3k]
  ------------------
  444|      0|            {
  445|      0|                if (value_size > 0)
  ------------------
  |  Branch (445:21): [True: 0, False: 0]
  ------------------
  446|      0|                    node->value(value, value_size);
  447|      0|                else
  448|      0|                    node->value(value);
  449|      0|            }
  450|  54.3k|            return node;
  451|  54.3k|        }
_ZN2Wt8rapidxml11memory_poolIcE16allocate_alignedEm:
  615|  56.6k|        {
  616|       |            // Calculate aligned pointer
  617|  56.6k|            char *result = align(m_ptr);
  618|       |
  619|       |            // If not enough memory left in current pool, allocate a new pool
  620|  56.6k|            if (result + size > m_end)
  ------------------
  |  Branch (620:17): [True: 52, False: 56.5k]
  ------------------
  621|     52|            {
  622|       |                // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE)
  623|     52|                std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE;
  ------------------
  |  |  130|     52|    #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
  ------------------
  624|     52|                if (pool_size < size)
  ------------------
  |  Branch (624:21): [True: 0, False: 52]
  ------------------
  625|      0|                    pool_size = size;
  626|       |                
  627|       |                // Allocate
  628|     52|                std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size;     // 2 alignments required in worst case: one for header, one for actual allocation
  ------------------
  |  |  138|     52|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  629|     52|                char *raw_memory = allocate_raw(alloc_size);
  630|       |                    
  631|       |                // Setup new pool in allocated memory
  632|     52|                char *pool = align(raw_memory);
  633|     52|                header *new_header = reinterpret_cast<header *>(pool);
  634|     52|                new_header->previous_begin = m_begin;
  635|     52|                m_begin = raw_memory;
  636|     52|                m_ptr = pool + sizeof(header);
  637|     52|                m_end = raw_memory + alloc_size;
  638|       |
  639|       |                // Calculate aligned pointer again using new pool
  640|     52|                result = align(m_ptr);
  641|     52|            }
  642|       |
  643|       |            // Update pool and return aligned pointer
  644|  56.6k|            m_ptr = result + size;
  645|  56.6k|            return result;
  646|  56.6k|        }
_ZN2Wt8rapidxml11memory_poolIcE12allocate_rawEm:
  595|     52|        {
  596|       |            // Allocate
  597|     52|            void *memory;   
  598|     52|            if (m_alloc_func)   // Allocate memory using either user-specified allocation function or global operator new[]
  ------------------
  |  Branch (598:17): [True: 0, False: 52]
  ------------------
  599|      0|            {
  600|      0|                memory = m_alloc_func(size);
  601|      0|                assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp
  602|      0|            }
  603|     52|            else
  604|     52|            {
  605|     52|                memory = new char[size];
  606|       |#ifdef RAPIDXML_NO_EXCEPTIONS
  607|       |                if (!memory)            // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc
  608|       |                    RAPIDXML_PARSE_ERROR("out of memory", 0);
  609|       |#endif
  610|     52|            }
  611|     52|            return static_cast<char *>(memory);
  612|     52|        }
_ZN2Wt8rapidxml8xml_baseIcE5valueEPKcm:
  767|  27.2k|        {
  768|  27.2k|            m_value = const_cast<Ch *>(value);
  769|  27.2k|            m_value_size = size;
  770|  27.2k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_14node_name_predELi0EEEvRPc:
 1711|  36.5k|        {
 1712|  36.5k|            Ch *tmp = text;
 1713|  86.4k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 49.8k, False: 36.5k]
  ------------------
 1714|  49.8k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  36.5k|            text = tmp;
 1717|  36.5k|        }
_ZN2Wt8rapidxml12xml_documentIcE14node_name_pred4testEc:
 1455|  86.4k|            {
 1456|  86.4k|                return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)];
 1457|  86.4k|            }
_ZN2Wt8rapidxml8xml_baseIcE4nameEPKcm:
  737|  38.0k|        {
  738|  38.0k|            m_name = const_cast<Ch *>(name);
  739|  38.0k|            m_name_size = size;
  740|  38.0k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_node_attributesILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2396|  35.8k|        {
 2397|       |            // For all attributes 
 2398|  37.4k|            while (attribute_name_pred::test(*text))
  ------------------
  |  Branch (2398:20): [True: 2.22k, False: 35.2k]
  ------------------
 2399|  2.22k|            {
 2400|       |                // Extract attribute name
 2401|  2.22k|                Ch *name = text;
 2402|  2.22k|                ++text;     // Skip first character of attribute name
 2403|  2.22k|                skip<attribute_name_pred, Flags>(text);
 2404|  2.22k|                if (text == name)
  ------------------
  |  Branch (2404:21): [True: 0, False: 2.22k]
  ------------------
 2405|      0|                    RAPIDXML_PARSE_ERROR("expected attribute name", name);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2406|       |
 2407|       |                // Create new attribute
 2408|  2.22k|                xml_attribute<Ch> *attribute = this->allocate_attribute();
 2409|  2.22k|                attribute->name(name, text - name);
 2410|  2.22k|                node->append_attribute(attribute);
 2411|       |
 2412|       |                // Skip whitespace after attribute name
 2413|  2.22k|                skip<whitespace_pred, Flags>(text);
 2414|       |
 2415|       |                // Skip =
 2416|  2.22k|                if (*text != Ch('='))
  ------------------
  |  Branch (2416:21): [True: 49, False: 2.17k]
  ------------------
 2417|     49|                    RAPIDXML_PARSE_ERROR("expected =", text);
  ------------------
  |  |   60|     49|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2418|  2.17k|                ++text;
 2419|       |
 2420|       |                // Add terminating zero after name
 2421|  2.17k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2421:21): [True: 2.17k, Folded]
  ------------------
 2422|  2.17k|                    attribute->name()[attribute->name_size()] = 0;
 2423|       |
 2424|       |                // Skip whitespace after =
 2425|  2.17k|                skip<whitespace_pred, Flags>(text);
 2426|       |
 2427|       |                // Skip quote and remember if it was ' or "
 2428|  2.17k|                Ch quote = *text;
 2429|  2.17k|                if (quote != Ch('\'') && quote != Ch('"'))
  ------------------
  |  Branch (2429:21): [True: 1.39k, False: 780]
  |  Branch (2429:42): [True: 24, False: 1.37k]
  ------------------
 2430|     24|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|     24|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2431|  2.15k|                ++text;
 2432|       |
 2433|       |                // Extract attribute value and expand char refs in it
 2434|  2.15k|                Ch *value = text, *end;
 2435|  2.15k|                const int AttFlags = Flags & ~parse_normalize_whitespace;   // No whitespace normalization in attributes
 2436|  2.15k|                if (quote == Ch('\''))
  ------------------
  |  Branch (2436:21): [True: 780, False: 1.37k]
  ------------------
 2437|    780|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
 2438|  1.37k|                else
 2439|  1.37k|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
 2440|       |                
 2441|       |                // Set attribute value
 2442|  2.15k|                attribute->value(value, end - value);
 2443|       |                
 2444|       |                // Make sure that end quote is present
 2445|  2.15k|                if (*text != quote)
  ------------------
  |  Branch (2445:21): [True: 555, False: 1.59k]
  ------------------
 2446|    555|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|    555|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2447|  1.59k|                ++text;     // Skip quote
 2448|       |
 2449|       |                // Add terminating zero after value
 2450|  1.59k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2450:21): [True: 1.47k, Folded]
  ------------------
 2451|  1.47k|                    attribute->value()[attribute->value_size()] = 0;
 2452|       |
 2453|       |                // Skip whitespace after attribute value
 2454|  1.59k|                skip<whitespace_pred, Flags>(text);
 2455|  1.59k|            }
 2456|  35.8k|        }
_ZN2Wt8rapidxml12xml_documentIcE19attribute_name_pred4testEc:
 1464|  39.8k|            {
 1465|  39.8k|                return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)];
 1466|  39.8k|            }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_19attribute_name_predELi0EEEvRPc:
 1711|  2.22k|        {
 1712|  2.22k|            Ch *tmp = text;
 1713|  2.56k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 337, False: 2.22k]
  ------------------
 1714|    337|	      next_char<Flags>(tmp);
 1715|       |
 1716|  2.22k|            text = tmp;
 1717|  2.22k|        }
_ZN2Wt8rapidxml11memory_poolIcE18allocate_attributeEPKcS4_mm:
  464|  2.22k|        {
  465|  2.22k|            void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
  466|  2.22k|            xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
  467|  2.22k|            if (name)
  ------------------
  |  Branch (467:17): [True: 0, False: 2.22k]
  ------------------
  468|      0|            {
  469|      0|                if (name_size > 0)
  ------------------
  |  Branch (469:21): [True: 0, False: 0]
  ------------------
  470|      0|                    attribute->name(name, name_size);
  471|      0|                else
  472|      0|                    attribute->name(name);
  473|      0|            }
  474|  2.22k|            if (value)
  ------------------
  |  Branch (474:17): [True: 0, False: 2.22k]
  ------------------
  475|      0|            {
  476|      0|                if (value_size > 0)
  ------------------
  |  Branch (476:21): [True: 0, False: 0]
  ------------------
  477|      0|                    attribute->value(value, value_size);
  478|      0|                else
  479|      0|                    attribute->value(value);
  480|      0|            }
  481|  2.22k|            return attribute;
  482|  2.22k|        }
_ZN2Wt8rapidxml13xml_attributeIcEC2Ev:
  826|  2.22k|        {
  827|  2.22k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16append_attributeEPNS0_13xml_attributeIcEE:
 1233|  2.22k|        {
 1234|  2.22k|            assert(attribute && !attribute->parent());
 1235|  2.22k|            if (first_attribute())
  ------------------
  |  Branch (1235:17): [True: 1.05k, False: 1.16k]
  ------------------
 1236|  1.05k|            {
 1237|  1.05k|                attribute->m_prev_attribute = m_last_attribute;
 1238|  1.05k|                m_last_attribute->m_next_attribute = attribute;
 1239|  1.05k|            }
 1240|  1.16k|            else
 1241|  1.16k|            {
 1242|  1.16k|                attribute->m_prev_attribute = 0;
 1243|  1.16k|                m_first_attribute = attribute;
 1244|  1.16k|            }
 1245|  2.22k|            m_last_attribute = attribute;
 1246|  2.22k|            attribute->m_parent = this;
 1247|  2.22k|            attribute->m_next_attribute = 0;
 1248|  2.22k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc39EEENS2_25attribute_value_pure_predILc39EEELi0EEEPcRS8_:
 1724|    780|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|    780|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 780]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|    780|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|    780|            Ch *src = text;
 1739|    780|            Ch *dest = src;
 1740|  22.4k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 21.7k, False: 730]
  ------------------
 1741|  21.7k|            {
 1742|       |                // If entity translation is enabled    
 1743|  21.7k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 21.7k, Folded]
  ------------------
 1744|  21.7k|                {
 1745|       |                    // Test if replacement is needed
 1746|  21.7k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 7.05k, False: 14.6k]
  ------------------
 1747|  7.05k|                    {
 1748|  7.05k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 6.01k, False: 1.03k]
  ------------------
 1749|  7.05k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.43k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.43k, False: 4.61k]
  ------------------
 1753|  2.43k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.01k, False: 1.42k]
  |  Branch (1753:54): [True: 654, False: 361]
  |  Branch (1753:75): [True: 236, False: 418]
  ------------------
 1754|    236|                            {
 1755|    236|                                *dest = Ch('&');
 1756|    236|                                ++dest;
 1757|    236|                                src += 5;
 1758|    236|                                continue;
 1759|    236|                            }
 1760|  2.20k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.06k, False: 1.13k]
  |  Branch (1760:54): [True: 847, False: 217]
  |  Branch (1760:75): [True: 551, False: 296]
  |  Branch (1760:96): [True: 237, False: 314]
  ------------------
 1761|    237|                            {
 1762|    237|                                *dest = Ch('\'');
 1763|    237|                                ++dest;
 1764|    237|                                src += 6;
 1765|    237|                                continue;
 1766|    237|                            }
 1767|  1.96k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.96k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.24k, False: 5.80k]
  ------------------
 1771|  1.24k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 927, False: 321]
  |  Branch (1771:54): [True: 643, False: 284]
  |  Branch (1771:75): [True: 421, False: 222]
  |  Branch (1771:96): [True: 217, False: 204]
  ------------------
 1772|    217|                            {
 1773|    217|                                *dest = Ch('"');
 1774|    217|                                ++dest;
 1775|    217|                                src += 6;
 1776|    217|                                continue;
 1777|    217|                            }
 1778|  1.03k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.03k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 786, False: 6.26k]
  ------------------
 1782|    786|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 562, False: 224]
  |  Branch (1782:54): [True: 198, False: 364]
  ------------------
 1783|    198|                            {
 1784|    198|                                *dest = Ch('>');
 1785|    198|                                ++dest;
 1786|    198|                                src += 4;
 1787|    198|                                continue;
 1788|    198|                            }
 1789|    588|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    675|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 675, False: 6.37k]
  ------------------
 1793|    675|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 432, False: 243]
  |  Branch (1793:54): [True: 196, False: 236]
  ------------------
 1794|    196|                            {
 1795|    196|                                *dest = Ch('<');
 1796|    196|                                ++dest;
 1797|    196|                                src += 4;
 1798|    196|                                continue;
 1799|    196|                            }
 1800|    479|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|    871|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 871, False: 6.18k]
  ------------------
 1804|    871|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 399, False: 472]
  ------------------
 1805|    399|                            {
 1806|    399|                                unsigned long code = 0;
 1807|    399|                                src += 3;   // Skip &#x
 1808|    796|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 796, Folded]
  ------------------
 1809|    796|                                {
 1810|    796|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|    796|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 399, False: 397]
  ------------------
 1812|    399|                                        break;
 1813|    397|                                    code = code * 16 + digit;
 1814|    397|                                    ++src;
 1815|    397|                                }
 1816|    399|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    399|                            }
 1818|    472|                            else
 1819|    472|                            {
 1820|    472|                                unsigned long code = 0;
 1821|    472|                                src += 2;   // Skip &#
 1822|    919|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 919, Folded]
  ------------------
 1823|    919|                                {
 1824|    919|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    919|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 472, False: 447]
  ------------------
 1826|    472|                                        break;
 1827|    447|                                    code = code * 10 + digit;
 1828|    447|                                    ++src;
 1829|    447|                                }
 1830|    472|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    472|                            }
 1832|    871|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 821, False: 50]
  ------------------
 1833|    821|                                ++src;
 1834|     50|                            else
 1835|     50|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     50|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|    821|                            continue;
 1837|  7.05k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  5.09k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 5.09k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  5.09k|                    }
 1847|  21.7k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  19.7k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 19.7k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  19.7k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 19.7k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  19.7k|		else
 1868|  19.7k|		  *dest++ = *src++;
 1869|  19.7k|            }
 1870|       |
 1871|       |            // Return new end
 1872|    730|            text = src;
 1873|    730|            return dest;
 1874|       |
 1875|    780|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc39EEELi0EEEvRPc:
 1711|    780|        {
 1712|    780|            Ch *tmp = text;
 1713|  1.07k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 292, False: 780]
  ------------------
 1714|    292|	      next_char<Flags>(tmp);
 1715|       |
 1716|    780|            text = tmp;
 1717|    780|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc39EE4testEc:
 1515|  1.07k|            {
 1516|  1.07k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [True: 1.07k, Folded]
  ------------------
 1517|  1.07k|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [Folded, False: 0]
  ------------------
 1519|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc39EE4testEc:
 1501|  22.4k|            {
 1502|  22.4k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [True: 22.4k, Folded]
  ------------------
 1503|  22.4k|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [Folded, False: 0]
  ------------------
 1505|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE22insert_coded_characterILi0EEEvRPcm:
 1528|  3.84k|        {
 1529|  3.84k|            if (Flags & parse_no_utf8)
  ------------------
  |  Branch (1529:17): [Folded, False: 3.84k]
  ------------------
 1530|      0|            {
 1531|       |                // Insert 8-bit ASCII character
 1532|       |                // Todo: possibly verify that code is less than 256 and use replacement char otherwise?
 1533|      0|                text[0] = static_cast<unsigned char>(code);
 1534|      0|                text += 1;
 1535|      0|            }
 1536|  3.84k|            else
 1537|  3.84k|            {
 1538|       |                // Insert UTF8 sequence
 1539|  3.84k|                if (code < 0x80)    // 1 byte sequence
  ------------------
  |  Branch (1539:21): [True: 2.82k, False: 1.01k]
  ------------------
 1540|  2.82k|                {
 1541|  2.82k|		    text[0] = static_cast<unsigned char>(code);
 1542|  2.82k|                    text += 1;
 1543|  2.82k|                }
 1544|  1.01k|                else if (code < 0x800)  // 2 byte sequence
  ------------------
  |  Branch (1544:26): [True: 228, False: 790]
  ------------------
 1545|    228|                {
 1546|    228|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1547|    228|		    code >>= 6;
 1548|    228|		    text[0] = static_cast<unsigned char>(code | 0xC0);
 1549|    228|                    text += 2;
 1550|    228|                }
 1551|    790|	            else if (code < 0x10000)    // 3 byte sequence
  ------------------
  |  Branch (1551:23): [True: 228, False: 562]
  ------------------
 1552|    228|                {
 1553|    228|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1554|    228|		    code >>= 6;
 1555|    228|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1556|    228|		    code >>= 6;
 1557|    228|		    text[0] = static_cast<unsigned char>(code | 0xE0);
 1558|    228|                    text += 3;
 1559|    228|                }
 1560|    562|	            else if (code < 0x110000)   // 4 byte sequence
  ------------------
  |  Branch (1560:23): [True: 228, False: 334]
  ------------------
 1561|    228|                {
 1562|    228|		    text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1563|    228|		    code >>= 6;
 1564|    228|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1565|    228|		    code >>= 6;
 1566|    228|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1567|    228|		    code >>= 6;
 1568|    228|		    text[0] = static_cast<unsigned char>(code | 0xF0);
 1569|    228|                    text += 4;
 1570|    228|                }
 1571|    334|                else    // Invalid, only codes up to 0x10FFFF are allowed in Unicode
 1572|    334|                {
 1573|    334|                    RAPIDXML_PARSE_ERROR
  ------------------
  |  |   60|    334|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1574|    334|		      (("invalid numeric character entity: "
 1575|    334|			+ std::to_string(code)).c_str(), 0);
 1576|    334|                }
 1577|  3.84k|            }
 1578|  3.84k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc34EEENS2_25attribute_value_pure_predILc34EEELi0EEEPcRS8_:
 1724|  1.37k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  1.37k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 1.37k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  1.37k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  1.37k|            Ch *src = text;
 1739|  1.37k|            Ch *dest = src;
 1740|  22.1k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 20.8k, False: 1.30k]
  ------------------
 1741|  20.8k|            {
 1742|       |                // If entity translation is enabled    
 1743|  20.8k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 20.8k, Folded]
  ------------------
 1744|  20.8k|                {
 1745|       |                    // Test if replacement is needed
 1746|  20.8k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 6.22k, False: 14.6k]
  ------------------
 1747|  6.22k|                    {
 1748|  6.22k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 5.73k, False: 492]
  ------------------
 1749|  6.22k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.11k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.11k, False: 4.10k]
  ------------------
 1753|  2.11k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 868, False: 1.24k]
  |  Branch (1753:54): [True: 607, False: 261]
  |  Branch (1753:75): [True: 340, False: 267]
  ------------------
 1754|    340|                            {
 1755|    340|                                *dest = Ch('&');
 1756|    340|                                ++dest;
 1757|    340|                                src += 5;
 1758|    340|                                continue;
 1759|    340|                            }
 1760|  1.77k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 908, False: 869]
  |  Branch (1760:54): [True: 697, False: 211]
  |  Branch (1760:75): [True: 437, False: 260]
  |  Branch (1760:96): [True: 201, False: 236]
  ------------------
 1761|    201|                            {
 1762|    201|                                *dest = Ch('\'');
 1763|    201|                                ++dest;
 1764|    201|                                src += 6;
 1765|    201|                                continue;
 1766|    201|                            }
 1767|  1.57k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.57k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.24k, False: 4.98k]
  ------------------
 1771|  1.24k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 954, False: 288]
  |  Branch (1771:54): [True: 701, False: 253]
  |  Branch (1771:75): [True: 421, False: 280]
  |  Branch (1771:96): [True: 214, False: 207]
  ------------------
 1772|    214|                            {
 1773|    214|                                *dest = Ch('"');
 1774|    214|                                ++dest;
 1775|    214|                                src += 6;
 1776|    214|                                continue;
 1777|    214|                            }
 1778|  1.02k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.02k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 620, False: 5.60k]
  ------------------
 1782|    620|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 408, False: 212]
  |  Branch (1782:54): [True: 194, False: 214]
  ------------------
 1783|    194|                            {
 1784|    194|                                *dest = Ch('>');
 1785|    194|                                ++dest;
 1786|    194|                                src += 4;
 1787|    194|                                continue;
 1788|    194|                            }
 1789|    426|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    648|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 648, False: 5.57k]
  ------------------
 1793|    648|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 412, False: 236]
  |  Branch (1793:54): [True: 200, False: 212]
  ------------------
 1794|    200|                            {
 1795|    200|                                *dest = Ch('<');
 1796|    200|                                ++dest;
 1797|    200|                                src += 4;
 1798|    200|                                continue;
 1799|    200|                            }
 1800|    448|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.10k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.10k, False: 5.11k]
  ------------------
 1804|  1.10k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 633, False: 472]
  ------------------
 1805|    633|                            {
 1806|    633|                                unsigned long code = 0;
 1807|    633|                                src += 3;   // Skip &#x
 1808|  1.42k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 1.42k, Folded]
  ------------------
 1809|  1.42k|                                {
 1810|  1.42k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  1.42k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 633, False: 796]
  ------------------
 1812|    633|                                        break;
 1813|    796|                                    code = code * 16 + digit;
 1814|    796|                                    ++src;
 1815|    796|                                }
 1816|    633|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    633|                            }
 1818|    472|                            else
 1819|    472|                            {
 1820|    472|                                unsigned long code = 0;
 1821|    472|                                src += 2;   // Skip &#
 1822|    901|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 901, Folded]
  ------------------
 1823|    901|                                {
 1824|    901|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    901|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 472, False: 429]
  ------------------
 1826|    472|                                        break;
 1827|    429|                                    code = code * 10 + digit;
 1828|    429|                                    ++src;
 1829|    429|                                }
 1830|    472|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    472|                            }
 1832|  1.10k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.03k, False: 70]
  ------------------
 1833|  1.03k|                                ++src;
 1834|     70|                            else
 1835|     70|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     70|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.03k|                            continue;
 1837|  6.22k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  3.97k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 3.97k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  3.97k|                    }
 1847|  20.8k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  18.5k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 18.5k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  18.5k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 18.5k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  18.5k|		else
 1868|  18.5k|		  *dest++ = *src++;
 1869|  18.5k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  1.30k|            text = src;
 1873|  1.30k|            return dest;
 1874|       |
 1875|  1.37k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc34EEELi0EEEvRPc:
 1711|  1.37k|        {
 1712|  1.37k|            Ch *tmp = text;
 1713|  1.67k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 301, False: 1.37k]
  ------------------
 1714|    301|	      next_char<Flags>(tmp);
 1715|       |
 1716|  1.37k|            text = tmp;
 1717|  1.37k|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc34EE4testEc:
 1515|  1.67k|            {
 1516|  1.67k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [Folded, False: 1.67k]
  ------------------
 1517|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|  1.67k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [True: 1.67k, Folded]
  ------------------
 1519|  1.67k|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|  1.67k|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc34EE4testEc:
 1501|  22.1k|            {
 1502|  22.1k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [Folded, False: 22.1k]
  ------------------
 1503|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|  22.1k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [True: 22.1k, Folded]
  ------------------
 1505|  22.1k|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|  22.1k|            }
_ZNK2Wt8rapidxml8xml_baseIcE5valueEv:
  708|  15.6k|        {
  709|  15.6k|            return m_value ? m_value : nullstr();
  ------------------
  |  Branch (709:20): [True: 4.92k, False: 10.7k]
  ------------------
  710|  15.6k|        }
_ZNK2Wt8rapidxml8xml_baseIcE10value_sizeEv:
  716|  10.1k|        {
  717|  10.1k|            return m_value ? m_value_size : 0;
  ------------------
  |  Branch (717:20): [True: 4.54k, False: 5.58k]
  ------------------
  718|  10.1k|        }
_ZN2Wt8rapidxml12xml_documentIcE19parse_node_contentsILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2325|  29.0k|        {
 2326|       |            // For all children and text
 2327|  34.1k|            while (1)
  ------------------
  |  Branch (2327:20): [True: 34.1k, Folded]
  ------------------
 2328|  34.1k|            {
 2329|       |                // Skip whitespace between > and node contents
 2330|  34.1k|                Ch *contents_start = text;      // Store start of node contents before whitespace is skipped
 2331|  34.1k|		if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2331:7): [Folded, False: 34.1k]
  ------------------
 2332|      0|		  skip<whitespace_pred, Flags>(text);
 2333|  34.1k|                Ch next_char = *text;
 2334|       |
 2335|       |            // After data nodes, instead of continuing the loop, control jumps here.
 2336|       |            // This is because zero termination inside parse_and_append_data() function
 2337|       |            // would wreak havoc with the above code.
 2338|       |            // Also, skipping whitespace after data nodes is unnecessary.
 2339|  48.3k|            after_data_node:    
 2340|       |                
 2341|       |                // Determine what comes next: node closing, child node, data node, or 0?
 2342|  48.3k|                switch (next_char)
 2343|  48.3k|                {
 2344|       |                
 2345|       |                // Node closing or child node
 2346|  33.3k|                case Ch('<'):
  ------------------
  |  Branch (2346:17): [True: 33.3k, False: 15.0k]
  ------------------
 2347|  33.3k|                    if (text[1] == Ch('/'))
  ------------------
  |  Branch (2347:25): [True: 727, False: 32.6k]
  ------------------
 2348|    727|                    {
 2349|       |                        // Node closing
 2350|    727|                        text += 2;      // Skip '</'
 2351|    727|                        if (Flags & parse_validate_closing_tags)
  ------------------
  |  Branch (2351:29): [Folded, False: 727]
  ------------------
 2352|      0|                        {
 2353|       |                            // Skip and validate closing tag name
 2354|      0|                            Ch *closing_name = text;
 2355|      0|                            skip<node_name_pred, Flags>(text);
 2356|      0|                            if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
  ------------------
  |  Branch (2356:33): [True: 0, False: 0]
  ------------------
 2357|      0|                                RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2358|      0|                        }
 2359|    727|                        else
 2360|    727|                        {
 2361|       |                            // No validation, just skip name
 2362|    727|                            skip<node_name_pred, Flags>(text);
 2363|    727|                        }
 2364|       |                        // Skip remaining whitespace after node name
 2365|    727|                        skip<whitespace_pred, Flags>(text);
 2366|    727|                        if (*text != Ch('>'))
  ------------------
  |  Branch (2366:29): [True: 22, False: 705]
  ------------------
 2367|     22|                            RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     22|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2368|    705|                        ++text;     // Skip '>'
 2369|    705|                        return;     // Node closed, finished parsing contents
 2370|    727|                    }
 2371|  32.6k|                    else
 2372|  32.6k|                    {
 2373|       |                        // Child node
 2374|  32.6k|                        ++text;     // Skip '<'
 2375|  32.6k|                        if (xml_node<Ch> *child = parse_node<Flags>(text))
  ------------------
  |  Branch (2375:43): [True: 4.04k, False: 28.5k]
  ------------------
 2376|  4.04k|                            node->append_node(child);
 2377|  32.6k|                    }
 2378|  32.6k|                    break;
 2379|       |
 2380|       |                // End of data - error
 2381|  32.6k|                case Ch('\0'):
  ------------------
  |  Branch (2381:17): [True: 359, False: 47.9k]
  ------------------
 2382|    359|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    359|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2383|       |
 2384|       |                // Data node
 2385|  14.6k|                default:
  ------------------
  |  Branch (2385:17): [True: 14.6k, False: 33.6k]
  ------------------
 2386|  14.6k|                    next_char = parse_and_append_data<Flags>(node, text, contents_start);
 2387|  14.6k|                    goto after_data_node;   // Bypass regular processing after data nodes
 2388|       |
 2389|  48.3k|                }
 2390|  48.3k|            }
 2391|  29.0k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_and_append_dataILi0EEEcPNS0_8xml_nodeIcEERPcS7_:
 2098|  14.6k|        {
 2099|       |            // Backup to contents start if whitespace trimming is disabled
 2100|  14.6k|            if (!(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (2100:17): [True: 14.6k, Folded]
  ------------------
 2101|  14.6k|                text = contents_start;     
 2102|       |            
 2103|       |            // Skip until end of data
 2104|  14.6k|            Ch *value = text, *end;
 2105|  14.6k|            if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2105:17): [Folded, False: 14.6k]
  ------------------
 2106|      0|                end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
 2107|  14.6k|            else
 2108|  14.6k|                end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
 2109|       |
 2110|       |            // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after >
 2111|  14.6k|            if (Flags & parse_trim_whitespace)
  ------------------
  |  Branch (2111:17): [Folded, False: 14.6k]
  ------------------
 2112|      0|            {
 2113|      0|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2113:21): [Folded, False: 0]
  ------------------
 2114|      0|                {
 2115|       |                    // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end
 2116|      0|                    if (*(end - 1) == Ch(' '))
  ------------------
  |  Branch (2116:25): [True: 0, False: 0]
  ------------------
 2117|      0|                        --end;
 2118|      0|                }
 2119|      0|                else
 2120|      0|                {
 2121|       |                    // Backup until non-whitespace character is found
 2122|      0|                    while (whitespace_pred::test(*(end - 1)))
  ------------------
  |  Branch (2122:28): [True: 0, False: 0]
  ------------------
 2123|      0|                        --end;
 2124|      0|                }
 2125|      0|            }
 2126|       |            
 2127|       |            // If characters are still left between end and value (this test is only necessary if normalization is enabled)
 2128|       |            // Create new data node
 2129|  14.6k|            if (!(Flags & parse_no_data_nodes))
  ------------------
  |  Branch (2129:17): [True: 14.2k, Folded]
  ------------------
 2130|  14.2k|            {
 2131|  14.2k|                xml_node<Ch> *data = this->allocate_node(node_data);
 2132|  14.2k|                data->value(value, end - value);
 2133|  14.2k|                node->append_node(data);
 2134|  14.2k|            }
 2135|       |
 2136|       |            // Add data to parent node if no data exists yet
 2137|  14.6k|            if (!(Flags & parse_no_element_values)) 
  ------------------
  |  Branch (2137:17): [True: 14.2k, Folded]
  ------------------
 2138|  14.2k|                if (*node->value() == Ch('\0'))
  ------------------
  |  Branch (2138:21): [True: 10.7k, False: 3.44k]
  ------------------
 2139|  10.7k|                    node->value(value, end - value);
 2140|       |
 2141|       |            // Place zero terminator after value
 2142|  14.6k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2142:17): [True: 14.2k, Folded]
  ------------------
 2143|  14.2k|            {
 2144|  14.2k|                Ch ch = *text;
 2145|  14.2k|                *end = Ch('\0');
 2146|  14.2k|                return ch;      // Return character that ends data; this is required because zero terminator overwritten it
 2147|  14.2k|            }
 2148|       |
 2149|       |            // Return character that ends data
 2150|    444|            return *text;
 2151|  14.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_9text_predENS2_20text_pure_no_ws_predELi0EEEPcRS6_:
 1724|  14.6k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  14.6k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 14.6k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  14.6k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  14.6k|            Ch *src = text;
 1739|  14.6k|            Ch *dest = src;
 1740|  63.3k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 49.1k, False: 14.2k]
  ------------------
 1741|  49.1k|            {
 1742|       |                // If entity translation is enabled    
 1743|  49.1k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 49.1k, Folded]
  ------------------
 1744|  49.1k|                {
 1745|       |                    // Test if replacement is needed
 1746|  49.1k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 19.8k, False: 29.2k]
  ------------------
 1747|  19.8k|                    {
 1748|  19.8k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 7.79k, False: 12.0k]
  ------------------
 1749|  19.8k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.63k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.63k, False: 17.2k]
  ------------------
 1753|  2.63k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 1.05k, False: 1.58k]
  |  Branch (1753:54): [True: 697, False: 353]
  |  Branch (1753:75): [True: 400, False: 297]
  ------------------
 1754|    400|                            {
 1755|    400|                                *dest = Ch('&');
 1756|    400|                                ++dest;
 1757|    400|                                src += 5;
 1758|    400|                                continue;
 1759|    400|                            }
 1760|  2.23k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.22k, False: 1.01k]
  |  Branch (1760:54): [True: 976, False: 250]
  |  Branch (1760:75): [True: 702, False: 274]
  |  Branch (1760:96): [True: 259, False: 443]
  ------------------
 1761|    259|                            {
 1762|    259|                                *dest = Ch('\'');
 1763|    259|                                ++dest;
 1764|    259|                                src += 6;
 1765|    259|                                continue;
 1766|    259|                            }
 1767|  1.98k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.98k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.88k, False: 17.9k]
  ------------------
 1771|  1.88k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.52k, False: 359]
  |  Branch (1771:54): [True: 1.07k, False: 447]
  |  Branch (1771:75): [True: 661, False: 418]
  |  Branch (1771:96): [True: 210, False: 451]
  ------------------
 1772|    210|                            {
 1773|    210|                                *dest = Ch('"');
 1774|    210|                                ++dest;
 1775|    210|                                src += 6;
 1776|    210|                                continue;
 1777|    210|                            }
 1778|  1.67k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.67k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 671, False: 19.1k]
  ------------------
 1782|    671|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 455, False: 216]
  |  Branch (1782:54): [True: 229, False: 226]
  ------------------
 1783|    229|                            {
 1784|    229|                                *dest = Ch('>');
 1785|    229|                                ++dest;
 1786|    229|                                src += 4;
 1787|    229|                                continue;
 1788|    229|                            }
 1789|    442|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    730|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 730, False: 19.1k]
  ------------------
 1793|    730|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 452, False: 278]
  |  Branch (1793:54): [True: 238, False: 214]
  ------------------
 1794|    238|                            {
 1795|    238|                                *dest = Ch('<');
 1796|    238|                                ++dest;
 1797|    238|                                src += 4;
 1798|    238|                                continue;
 1799|    238|                            }
 1800|    492|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.86k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.86k, False: 17.9k]
  ------------------
 1804|  1.86k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 744, False: 1.12k]
  ------------------
 1805|    744|                            {
 1806|    744|                                unsigned long code = 0;
 1807|    744|                                src += 3;   // Skip &#x
 1808|  4.41k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 4.41k, Folded]
  ------------------
 1809|  4.41k|                                {
 1810|  4.41k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  4.41k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 744, False: 3.66k]
  ------------------
 1812|    744|                                        break;
 1813|  3.66k|                                    code = code * 16 + digit;
 1814|  3.66k|                                    ++src;
 1815|  3.66k|                                }
 1816|    744|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    744|                            }
 1818|  1.12k|                            else
 1819|  1.12k|                            {
 1820|  1.12k|                                unsigned long code = 0;
 1821|  1.12k|                                src += 2;   // Skip &#
 1822|  3.38k|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 3.38k, Folded]
  ------------------
 1823|  3.38k|                                {
 1824|  3.38k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|  3.38k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 1.12k, False: 2.25k]
  ------------------
 1826|  1.12k|                                        break;
 1827|  2.25k|                                    code = code * 10 + digit;
 1828|  2.25k|                                    ++src;
 1829|  2.25k|                                }
 1830|  1.12k|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|  1.12k|                            }
 1832|  1.86k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.42k, False: 444]
  ------------------
 1833|  1.42k|                                ++src;
 1834|    444|                            else
 1835|    444|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|    444|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.42k|                            continue;
 1837|  19.8k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  16.6k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 16.6k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  16.6k|                    }
 1847|  49.1k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  45.9k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 45.9k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  45.9k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 45.9k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  45.9k|		else
 1868|  45.9k|		  *dest++ = *src++;
 1869|  45.9k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  14.2k|            text = src;
 1873|  14.2k|            return dest;
 1874|       |
 1875|  14.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_20text_pure_no_ws_predELi0EEEvRPc:
 1711|  14.6k|        {
 1712|  14.6k|            Ch *tmp = text;
 1713|  21.0k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 6.42k, False: 14.6k]
  ------------------
 1714|  6.42k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  14.6k|            text = tmp;
 1717|  14.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE20text_pure_no_ws_pred4testEc:
 1482|  21.0k|            {
 1483|  21.0k|                return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)];
 1484|  21.0k|            }
_ZN2Wt8rapidxml12xml_documentIcE9text_pred4testEc:
 1473|  63.3k|            {
 1474|  63.3k|                return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)];
 1475|  63.3k|            }
_ZN2Wt8rapidxml12xml_documentIcE21parse_xml_declarationILi0EEEPNS0_8xml_nodeIcEERPc:
 1896|    222|        {
 1897|       |            // If parsing of declaration is disabled
 1898|    222|            if (!(Flags & parse_declaration_node))
  ------------------
  |  Branch (1898:17): [True: 222, Folded]
  ------------------
 1899|    222|            {
 1900|       |                // Skip until end of declaration
 1901|    695|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1901:24): [True: 253, False: 442]
  |  Branch (1901:46): [True: 246, False: 196]
  ------------------
 1902|    499|                {
 1903|    499|                    if (!text[0])
  ------------------
  |  Branch (1903:25): [True: 26, False: 473]
  ------------------
 1904|     26|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     26|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1905|    473|                    ++text;
 1906|    473|                }
 1907|    196|                text += 2;    // Skip '?>'
 1908|    196|                return 0;
 1909|    222|            }
 1910|       |
 1911|       |            // Create declaration
 1912|      0|            xml_node<Ch> *declaration = this->allocate_node(node_declaration);
 1913|       |
 1914|       |            // Skip whitespace before attributes or ?>
 1915|      0|            skip<whitespace_pred, Flags>(text);
 1916|       |
 1917|       |            // Parse declaration attributes
 1918|      0|            parse_node_attributes<Flags>(text, declaration);
 1919|       |            
 1920|       |            // Skip ?>
 1921|      0|            if (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1921:17): [True: 0, False: 0]
  |  Branch (1921:39): [True: 0, False: 0]
  ------------------
 1922|      0|                RAPIDXML_PARSE_ERROR("expected ?>", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1923|      0|            text += 2;
 1924|       |            
 1925|      0|            return declaration;
 1926|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE8parse_piILi0EEEPNS0_8xml_nodeIcEERPc:
 2038|  1.57k|        {
 2039|       |            // If creation of PI nodes is enabled
 2040|  1.57k|            if (Flags & parse_pi_nodes)
  ------------------
  |  Branch (2040:17): [Folded, False: 1.57k]
  ------------------
 2041|      0|            {
 2042|       |                // Create pi node
 2043|      0|                xml_node<Ch> *pi = this->allocate_node(node_pi);
 2044|       |
 2045|       |                // Extract PI target name
 2046|      0|                Ch *name = text;
 2047|      0|                skip<node_name_pred, Flags>(text);
 2048|      0|                if (text == name)
  ------------------
  |  Branch (2048:21): [True: 0, False: 0]
  ------------------
 2049|      0|                    RAPIDXML_PARSE_ERROR("expected PI target", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2050|      0|                pi->name(name, text - name);
 2051|       |                
 2052|       |                // Skip whitespace between pi target and pi
 2053|      0|                skip<whitespace_pred, Flags>(text);
 2054|       |
 2055|       |                // Remember start of pi
 2056|      0|                Ch *value = text;
 2057|       |                
 2058|       |                // Skip to '?>'
 2059|      0|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2059:24): [True: 0, False: 0]
  |  Branch (2059:46): [True: 0, False: 0]
  ------------------
 2060|      0|                {
 2061|      0|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2061:25): [True: 0, False: 0]
  ------------------
 2062|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2063|      0|                    ++text;
 2064|      0|                }
 2065|       |
 2066|       |                // Set pi value (verbatim, no entity expansion or whitespace normalization)
 2067|      0|                pi->value(value, text - value);     
 2068|       |                
 2069|       |                // Place zero terminator after name and value
 2070|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2070:21): [True: 0, Folded]
  ------------------
 2071|      0|                {
 2072|      0|                    pi->name()[pi->name_size()] = Ch('\0');
 2073|      0|                    pi->value()[pi->value_size()] = Ch('\0');
 2074|      0|                }
 2075|       |                
 2076|      0|                text += 2;                          // Skip '?>'
 2077|      0|                return pi;
 2078|      0|            }
 2079|  1.57k|            else
 2080|  1.57k|            {
 2081|       |                // Skip to '?>'
 2082|  5.14k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2082:24): [True: 3.45k, False: 1.69k]
  |  Branch (2082:46): [True: 227, False: 1.46k]
  ------------------
 2083|  3.67k|                {
 2084|  3.67k|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2084:25): [True: 104, False: 3.57k]
  ------------------
 2085|    104|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    104|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2086|  3.57k|                    ++text;
 2087|  3.57k|                }
 2088|  1.46k|                text += 2;    // Skip '?>'
 2089|  1.46k|                return 0;
 2090|  1.57k|            }
 2091|  1.57k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_commentILi0EEEPNS0_8xml_nodeIcEERPc:
 1931|    231|        {
 1932|       |            // If parsing of comments is disabled
 1933|    231|            if (!(Flags & parse_comment_nodes))
  ------------------
  |  Branch (1933:17): [True: 231, Folded]
  ------------------
 1934|    231|            {
 1935|       |                // Skip until end of comment
 1936|  1.12k|                while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1936:24): [True: 494, False: 629]
  |  Branch (1936:46): [True: 230, False: 399]
  |  Branch (1936:68): [True: 205, False: 194]
  ------------------
 1937|    929|                {
 1938|    929|                    if (!text[0])
  ------------------
  |  Branch (1938:25): [True: 37, False: 892]
  ------------------
 1939|     37|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     37|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1940|    892|                    ++text;
 1941|    892|                }
 1942|    194|                text += 3;     // Skip '-->'
 1943|    194|                return 0;      // Do not produce comment node
 1944|    231|            }
 1945|       |
 1946|       |            // Remember value start
 1947|      0|            Ch *value = text;
 1948|       |
 1949|       |            // Skip until end of comment
 1950|      0|            while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1950:20): [True: 0, False: 0]
  |  Branch (1950:42): [True: 0, False: 0]
  |  Branch (1950:64): [True: 0, False: 0]
  ------------------
 1951|      0|            {
 1952|      0|                if (!text[0])
  ------------------
  |  Branch (1952:21): [True: 0, False: 0]
  ------------------
 1953|      0|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1954|      0|                ++text;
 1955|      0|            }
 1956|       |
 1957|       |            // Create comment node
 1958|      0|            xml_node<Ch> *comment = this->allocate_node(node_comment);
 1959|      0|            comment->value(value, text - value);
 1960|       |            
 1961|       |            // Place zero terminator after comment value
 1962|      0|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (1962:17): [True: 0, Folded]
  ------------------
 1963|      0|                *text = Ch('\0');
 1964|       |            
 1965|      0|            text += 3;     // Skip '-->'
 1966|      0|            return comment;
 1967|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE11parse_cdataILi0EEEPNS0_8xml_nodeIcEERPc:
 2156|    331|        {
 2157|       |            // If CDATA is disabled
 2158|    331|            if (Flags & parse_no_data_nodes)
  ------------------
  |  Branch (2158:17): [Folded, False: 331]
  ------------------
 2159|      0|            {
 2160|       |                // Skip until end of cdata
 2161|      0|                while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2161:24): [True: 0, False: 0]
  |  Branch (2161:46): [True: 0, False: 0]
  |  Branch (2161:68): [True: 0, False: 0]
  ------------------
 2162|      0|                {
 2163|      0|                    if (!text[0])
  ------------------
  |  Branch (2163:25): [True: 0, False: 0]
  ------------------
 2164|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2165|      0|		    next_char<Flags>(text);
 2166|      0|                }
 2167|      0|                text += 3;      // Skip ]]>
 2168|      0|                return 0;       // Do not produce CDATA node
 2169|      0|            }
 2170|       |
 2171|       |            // Skip until end of cdata
 2172|    331|            Ch *value = text;
 2173|  1.23k|            while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2173:20): [True: 524, False: 712]
  |  Branch (2173:42): [True: 228, False: 484]
  |  Branch (2173:64): [True: 217, False: 267]
  ------------------
 2174|    969|            {
 2175|    969|                if (!text[0])
  ------------------
  |  Branch (2175:21): [True: 64, False: 905]
  ------------------
 2176|     64|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     64|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2177|    905|		next_char<Flags>(text);
 2178|    905|            }
 2179|       |
 2180|       |            // Create new cdata node
 2181|    267|            xml_node<Ch> *cdata = this->allocate_node(node_cdata);
 2182|    267|            cdata->value(value, text - value);
 2183|       |
 2184|       |            // Place zero terminator after value
 2185|    267|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2185:17): [True: 267, Folded]
  ------------------
 2186|    267|                *text = Ch('\0');
 2187|       |
 2188|    267|            text += 3;      // Skip ]]>
 2189|    267|            return cdata;
 2190|    331|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_doctypeILi0EEEPNS0_8xml_nodeIcEERPc:
 1972|    308|        {
 1973|       |            // Remember value start
 1974|    308|            Ch *value = text;
 1975|       |
 1976|       |            // Skip to >
 1977|    712|            while (*text != Ch('>'))
  ------------------
  |  Branch (1977:20): [True: 449, False: 263]
  ------------------
 1978|    449|            {
 1979|       |                // Determine character type
 1980|    449|                switch (*text)
 1981|    449|                {
 1982|       |                
 1983|       |                // If '[' encountered, scan for matching ending ']' using naive algorithm with depth
 1984|       |                // This works for all W3C test files except for 2 most wicked
 1985|    219|                case Ch('['):
  ------------------
  |  Branch (1985:17): [True: 219, False: 230]
  ------------------
 1986|    219|                {
 1987|    219|                    ++text;     // Skip '['
 1988|    219|                    int depth = 1;
 1989|  1.03k|                    while (depth > 0)
  ------------------
  |  Branch (1989:28): [True: 835, False: 199]
  ------------------
 1990|    835|                    {
 1991|    835|                        switch (*text)
  ------------------
  |  Branch (1991:33): [True: 495, False: 340]
  ------------------
 1992|    835|                        {
 1993|    255|                            case Ch('['): ++depth; break;
  ------------------
  |  Branch (1993:29): [True: 255, False: 580]
  ------------------
 1994|    220|                            case Ch(']'): --depth; break;
  ------------------
  |  Branch (1994:29): [True: 220, False: 615]
  ------------------
 1995|     20|                            case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     20|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
  |  Branch (1995:29): [True: 20, False: 815]
  ------------------
 1996|    835|                        }
 1997|    815|                        ++text;
 1998|    815|                    }
 1999|    199|                    break;
 2000|    219|                }
 2001|       |                
 2002|       |                // Error on end of text
 2003|    199|                case Ch('\0'):
  ------------------
  |  Branch (2003:17): [True: 25, False: 424]
  ------------------
 2004|     25|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     25|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2005|       |                
 2006|       |                // Other character, skip it
 2007|    205|                default:
  ------------------
  |  Branch (2007:17): [True: 205, False: 244]
  ------------------
 2008|    205|                    ++text;
 2009|       |
 2010|    449|                }
 2011|    449|            }
 2012|       |            
 2013|       |            // If DOCTYPE nodes enabled
 2014|    263|            if (Flags & parse_doctype_node)
  ------------------
  |  Branch (2014:17): [Folded, False: 263]
  ------------------
 2015|      0|            {
 2016|       |                // Create a new doctype node
 2017|      0|                xml_node<Ch> *doctype = this->allocate_node(node_doctype);
 2018|      0|                doctype->value(value, text - value);
 2019|       |                
 2020|       |                // Place zero terminator after value
 2021|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2021:21): [True: 0, Folded]
  ------------------
 2022|      0|                    *text = Ch('\0');
 2023|       |
 2024|      0|                text += 1;      // skip '>'
 2025|      0|                return doctype;
 2026|      0|            }
 2027|    263|            else
 2028|    263|            {
 2029|    263|                text += 1;      // skip '>'
 2030|    263|                return 0;
 2031|    263|            }
 2032|       |
 2033|    263|        }
_ZN2Wt8rapidxml8xml_nodeIcE11append_nodeEPS2_:
 1113|  25.1k|        {
 1114|  25.1k|            assert(child && !child->parent() && child->type() != node_document);
 1115|  25.1k|            if (first_node())
  ------------------
  |  Branch (1115:17): [True: 9.52k, False: 15.6k]
  ------------------
 1116|  9.52k|            {
 1117|  9.52k|                child->m_prev_sibling = m_last_node;
 1118|  9.52k|                m_last_node->m_next_sibling = child;
 1119|  9.52k|            }
 1120|  15.6k|            else
 1121|  15.6k|            {
 1122|  15.6k|                child->m_prev_sibling = 0;
 1123|  15.6k|                m_first_node = child;
 1124|  15.6k|            }
 1125|  25.1k|            m_last_node = child;
 1126|  25.1k|            child->m_parent = this;
 1127|  25.1k|            child->m_next_sibling = 0;
 1128|  25.1k|        }
_ZN2Wt8rapidxml11parse_errorC2EPKcPv:
   84|  2.21k|            : m_what(what)
   85|  2.21k|            , m_where(location)
   86|  2.21k|        {
   87|  2.21k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE8documentEv:
  939|  4.04k|        {
  940|  4.04k|            xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
  941|  12.0k|            while (node->parent())
  ------------------
  |  Branch (941:20): [True: 7.96k, False: 4.04k]
  ------------------
  942|  7.96k|                node = node->parent();
  943|  4.04k|            return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
  ------------------
  |  Branch (943:20): [True: 4.04k, False: 0]
  ------------------
  944|  4.04k|        }
_ZNK2Wt8rapidxml8xml_baseIcE6parentEv:
  786|  19.9k|        {
  787|  19.9k|            return m_parent;
  788|  19.9k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE4typeEv:
  929|  4.04k|        {
  930|  4.04k|            return m_type;
  931|  4.04k|        }

_ZN2Wt10DomElement16isSelfClosingTagERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE:
 1934|  5.77k|{
 1935|  5.77k|  return (   (tag == "br")
  ------------------
  |  Branch (1935:14): [True: 228, False: 5.54k]
  ------------------
 1936|  5.54k|          || (tag == "hr")
  ------------------
  |  Branch (1936:14): [True: 202, False: 5.34k]
  ------------------
 1937|  5.34k|          || (tag == "img")
  ------------------
  |  Branch (1937:14): [True: 335, False: 5.01k]
  ------------------
 1938|  5.01k|          || (tag == "area")
  ------------------
  |  Branch (1938:14): [True: 200, False: 4.81k]
  ------------------
 1939|  4.81k|          || (tag == "col")
  ------------------
  |  Branch (1939:14): [True: 321, False: 4.48k]
  ------------------
 1940|  4.48k|          || (tag == "input")
  ------------------
  |  Branch (1940:14): [True: 195, False: 4.29k]
  ------------------
 1941|  4.29k|          || (tag == "link")
  ------------------
  |  Branch (1941:14): [True: 246, False: 4.04k]
  ------------------
 1942|  4.04k|          || (tag == "meta"));
  ------------------
  |  Branch (1942:14): [True: 1, False: 4.04k]
  ------------------
 1943|  5.77k|}
DomElement.C:_ZN12_GLOBAL__N_117createCssNamesMapB5cxx11Ev:
  117|      2|{
  118|      2|  CssPropertyMap cssNames;
  119|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePosition, std::string("position"));
  120|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZIndex,std::string("z-index"));
  121|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFloat,std::string("float"));
  122|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleClear,std::string("clear"));
  123|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWidth,std::string("width"));
  124|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleHeight,std::string("height"));
  125|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLineHeight,std::string("line-height"));
  126|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinWidth,std::string("min-width"));
  127|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinHeight,std::string("min-height"));
  128|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxWidth,std::string("max-width"));
  129|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxHeight,std::string("max-height"));
  130|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLeft,std::string("left"));
  131|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleRight,std::string("right"));
  132|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTop,std::string("top"));
  133|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBottom,std::string("bottom"));
  134|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVerticalAlign,std::string("vertical-align"));
  135|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextAlign,std::string("text-align"));
  136|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePadding,std::string("padding"));
  137|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingTop,std::string("padding-top"));
  138|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingRight,std::string("padding-right"));
  139|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBottom,std::string("padding-bottom"));
  140|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingLeft,std::string("padding-left"));
  141|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMargin,std::string("margin"));
  142|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginTop,std::string("margin-top"));
  143|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginRight,std::string("margin-right"));
  144|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBottom,std::string("margin-bottom"));
  145|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginLeft,std::string("margin-left"));
  146|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleCursor,std::string("cursor"));
  147|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderTop,std::string("border-top"));
  148|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderRight,std::string("border-right"));
  149|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBottom,std::string("border-bottom"));
  150|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderLeft,std::string("border-left"));
  151|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorTop,std::string("border-color-top"));
  152|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorRight,std::string("border-color-right"));
  153|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorBottom,std::string("border-color-bottom"));
  154|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorLeft,std::string("border-color-left"));
  155|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthTop,std::string("border-width-top"));
  156|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthRight,std::string("border-width-right"));
  157|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthBottom,std::string("border-width-bottom"));
  158|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthLeft,std::string("border-width-left"));
  159|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleColor,std::string("color"));
  160|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowX,std::string("overflow-x"));
  161|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowY,std::string("overflow-y"));
  162|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOpacity,std::string("opacity"));
  163|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontFamily,std::string("font-family"));
  164|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontStyle,std::string("font-style"));
  165|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontVariant,std::string("font-variant"));
  166|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontWeight,std::string("font-weight"));
  167|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontSize,std::string("font-size"));
  168|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundColor,std::string("background-color"));
  169|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundImage,std::string("background-image"));
  170|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundRepeat,std::string("background-repeat"));
  171|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundAttachment,std::string("background-attachment"));
  172|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundPosition,std::string("background-position"));
  173|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextDecoration,std::string("text-decoration"));
  174|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWhiteSpace,std::string("white-space"));
  175|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTableLayout,std::string("table-layout"));
  176|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderSpacing,std::string("border-spacing"));
  177|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  178|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakBefore,std::string("page-break-before"));
  179|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakAfter,std::string("page-break-after"));
  180|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZoom,std::string("zoom"));
  181|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVisibility,std::string("visibility"));
  182|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleDisplay,std::string("display"));
  183|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWebkitAppearance,std::string("-webkit-appearance"));
  184|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBoxSizing,std::string("box-sizing"));
  185|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlex,std::string("flex"));
  186|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexDirection,std::string("flex-direction"));
  187|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexFlow,std::string("flex-flow"));
  188|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleAlignSelf,std::string("align-self"));
  189|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleJustifyContent,std::string("justify-content"));
  190|      2|  return cssNames;
  191|      2|}
DomElement.C:_ZN12_GLOBAL__N_122createCssCamelNamesMapB5cxx11Ev:
  196|      2|{
  197|      2|  CssPropertyMap cssCamelNames;
  198|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::Style,std::string("cssText"));
  199|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePosition,std::string("position"));
  200|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZIndex,std::string("zIndex"));
  201|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFloat,std::string("cssFloat"));
  202|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleClear,std::string("clear"));
  203|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWidth,std::string("width"));
  204|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleHeight,std::string("height"));
  205|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLineHeight,std::string("lineHeight"));
  206|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinWidth,std::string("minWidth"));
  207|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinHeight,std::string("minHeight"));
  208|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxWidth,std::string("maxWidth"));
  209|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxHeight,std::string("maxHeight"));
  210|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLeft,std::string("left"));
  211|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleRight,std::string("right"));
  212|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTop,std::string("top"));
  213|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBottom,std::string("bottom"));
  214|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVerticalAlign,std::string("verticalAlign"));
  215|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextAlign,std::string("textAlign"));
  216|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePadding,std::string("padding"));
  217|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingTop,std::string("paddingTop"));
  218|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingRight,std::string("paddingRight"));
  219|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBottom,std::string("paddingBottom"));
  220|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingLeft,std::string("paddingLeft"));
  221|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMargin,std::string("margin"));
  222|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginTop,std::string("marginTop"));
  223|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginRight,std::string("marginRight"));
  224|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBottom,std::string("marginBottom"));
  225|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginLeft,std::string("marginLeft"));
  226|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleCursor,std::string("cursor"));
  227|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderTop,std::string("borderTop"));
  228|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderRight,std::string("borderRight"));
  229|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBottom,std::string("borderBottom"));
  230|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderLeft,std::string("borderLeft"));
  231|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorTop,std::string("borderColorTop"));
  232|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorRight,std::string("borderColorRight"));
  233|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorBottom,std::string("borderColorBottom"));
  234|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorLeft,std::string("borderColorLeft"));
  235|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthTop,std::string("borderWidthTop"));
  236|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthRight,std::string("borderWidthRight"));
  237|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthBottom,std::string("borderWidthBottom"));
  238|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthLeft,std::string("borderWidthLeft"));
  239|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleColor,std::string("color"));
  240|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowX,std::string("overflowX"));
  241|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowY,std::string("overflowY"));
  242|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOpacity,std::string("opacity"));
  243|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontFamily,std::string("fontFamily"));
  244|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontStyle,std::string("fontStyle"));
  245|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontVariant,std::string("fontVariant"));
  246|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontWeight,std::string("fontWeight"));
  247|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontSize,std::string("fontSize"));
  248|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundColor,std::string("backgroundColor"));
  249|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundImage,std::string("backgroundImage"));
  250|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundRepeat,std::string("backgroundRepeat"));
  251|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundAttachment,std::string("backgroundAttachment"));
  252|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundPosition,std::string("backgroundPosition"));
  253|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextDecoration,std::string("textDecoration"));
  254|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWhiteSpace,std::string("whiteSpace"));
  255|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTableLayout,std::string("tableLayout"));
  256|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderSpacing,std::string("borderSpacing"));
  257|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  258|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakBefore,std::string("pageBreakBefore"));
  259|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakAfter,std::string("pageBreakAfter"));
  260|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZoom,std::string("zoom"));
  261|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVisibility,std::string("visibility"));
  262|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleDisplay,std::string("display"));
  263|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWebkitAppearance,std::string("webKitAppearance"));
  264|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBoxSizing,std::string("boxSizing"));
  265|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlex,std::string("flex"));
  266|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexDirection,std::string("flexDirection"));
  267|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexFlow,std::string("flexFlow"));
  268|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleAlignSelf,std::string("alignSelf"));
  269|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleJustifyContent,std::string("justifyContent"));
  270|      2|  return cssCamelNames;
  271|      2|}

_ZN2Wt5Utils18fixSelfClosingTagsEPNS_8rapidxml8xml_nodeIcEE:
  494|  9.38k|{
  495|  18.4k|  for (Wt::rapidxml::xml_node<> *x_child = x_node->first_node(); x_child;
  ------------------
  |  Branch (495:66): [True: 9.02k, False: 9.38k]
  ------------------
  496|  9.38k|       x_child = x_child->next_sibling())
  497|  9.02k|    fixSelfClosingTags(x_child);
  498|       |
  499|  9.38k|  if (!x_node->first_node()
  ------------------
  |  Branch (499:7): [True: 8.64k, False: 736]
  |  Branch (499:7): [True: 4.04k, False: 5.33k]
  ------------------
  500|  8.64k|      && x_node->value_size() == 0
  ------------------
  |  Branch (500:10): [True: 5.77k, False: 2.87k]
  ------------------
  501|  5.77k|      && !Wt::DomElement::isSelfClosingTag
  ------------------
  |  Branch (501:10): [True: 4.04k, False: 1.72k]
  ------------------
  502|  5.77k|      (std::string(x_node->name(), x_node->name_size()))) {
  503|       |    // We need to add an emtpy data node since <div /> is illegal HTML
  504|       |    // (but valid XML / XHTML)
  505|  4.04k|    Wt::rapidxml::xml_node<> *empty = x_node->document()->allocate_node(Wt::rapidxml::node_data);
  506|  4.04k|    x_node->append_node(empty);
  507|  4.04k|  }
  508|  9.38k|}

_ZN2Wt5Utils6insertINS_8PropertyENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRSt13unordered_mapIT_T0_St4hashISA_ESt8equal_toISA_ESaISt4pairIKSA_SB_EEERSH_RKSB_:
  260|    286|{
  261|    286|#ifndef WT_TARGET_JAVA
  262|    286|  m.insert(std::make_pair(key, value));
  263|    286|#endif // WT_TARGET_JAVA
  264|    286|}

