bool libvisio::VSDXTheme::parse(librevenge::RVNGInputStream *input) { if (!input) return false; xmlTextReaderPtr reader = xmlReaderForStream(input, 0, 0, XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET); if (!reader) return false; try { int ret = xmlTextReaderRead(reader); while (1 == ret) { int tokenId = getElementToken(reader); switch (tokenId) { case XML_A_CLRSCHEME: readClrScheme(reader); break; default: break; } ret = xmlTextReaderRead(reader); } } catch (...) { xmlFreeTextReader(reader); return false; } xmlFreeTextReader(reader); return true; }
libvisio::VSDXRelationships::VSDXRelationships(librevenge::RVNGInputStream *input) : m_relsByType(), m_relsById() { if (input) { const std::shared_ptr<xmlTextReader> reader( xmlReaderForStream(input, nullptr, nullptr, XML_PARSE_NOBLANKS|XML_PARSE_NOENT|XML_PARSE_NONET|XML_PARSE_RECOVER), xmlFreeTextReader); if (reader) { bool inRelationships = false; int ret = xmlTextReaderRead(reader.get()); while (ret == 1) { const xmlChar *name = xmlTextReaderConstName(reader.get()); if (name) { if (xmlStrEqual(name, BAD_CAST("Relationships"))) { if (xmlTextReaderNodeType(reader.get()) == 1) { // VSD_DEBUG_MSG(("Relationships ON\n")); inRelationships = true; } else if (xmlTextReaderNodeType(reader.get()) == 15) { // VSD_DEBUG_MSG(("Relationships OFF\n")); inRelationships = false; } } else if (xmlStrEqual(name, BAD_CAST("Relationship"))) { if (inRelationships) { VSDXRelationship relationship(reader.get()); m_relsByType[relationship.getType()] = relationship; m_relsById[relationship.getId()] = relationship; } } } ret = xmlTextReaderRead(reader.get()); } } } }