diff options
Diffstat (limited to 'dviware/dvisvgm/src/XMLNode.cpp')
-rw-r--r-- | dviware/dvisvgm/src/XMLNode.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/dviware/dvisvgm/src/XMLNode.cpp b/dviware/dvisvgm/src/XMLNode.cpp index 0f2602f8f0..d5342e4d1e 100644 --- a/dviware/dvisvgm/src/XMLNode.cpp +++ b/dviware/dvisvgm/src/XMLNode.cpp @@ -2,7 +2,7 @@ ** XMLNode.cpp ** ** ** ** This file is part of dvisvgm -- a fast DVI to SVG converter ** -** Copyright (C) 2005-2022 Martin Gieseking <martin.gieseking@uos.de> ** +** Copyright (C) 2005-2023 Martin Gieseking <martin.gieseking@uos.de> ** ** ** ** This program is free software; you can redistribute it and/or ** ** modify it under the terms of the GNU General Public License as ** @@ -63,6 +63,14 @@ unique_ptr<XMLNode> XMLNode::removeNext () { return oldnext; } + +XMLElement* XMLNode::nextElement () const { + for (XMLNode *node = next(); node; node = node->next()) + if (node->toElement()) + return node->toElement(); + return nullptr; +} + ///////////////////////////////////////////////////////////////////// XMLElement::XMLElement (string name) : _name(std::move(name)) { @@ -375,7 +383,8 @@ ostream& XMLElement::write (ostream &os) const { if (attrib.name.front() != '@') os << attrib.name << "='" << attrib.value << '\''; else { - os << attrib.name.substr(1) << "='"; + bool keep = (attrib.name.size() > 1 && attrib.name[1] == '@'); + os << attrib.name.substr(keep ? 2 : 1) << "='"; auto pos = attrib.value.find("base64,"); if (pos == string::npos) os << attrib.value; @@ -387,7 +396,7 @@ ostream& XMLElement::write (ostream &os) const { os << '\n'; util::base64_copy(ifs, os, 200); ifs.close(); - if (!KEEP_ENCODED_FILES) + if (!KEEP_ENCODED_FILES && !keep) FileSystem::remove(fname); } } |