diff options
-rw-r--r-- | docparser.cpp | 16 | ||||
-rw-r--r-- | typesystem.cpp | 7 |
2 files changed, 18 insertions, 5 deletions
diff --git a/docparser.cpp b/docparser.cpp index ddff5ffe9..d6e8bf468 100644 --- a/docparser.cpp +++ b/docparser.cpp @@ -95,7 +95,19 @@ QString DocParser::applyDocModifications(const DocModificationList& mods, const if (mods.isEmpty()) return xml; - QString xsl = QLatin1String("<xsl:transform version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n" + bool hasXPathBasedModification = false; + foreach (DocModification mod, mods) { + if (mod.mode() == DocModification::XPathReplace) { + hasXPathBasedModification = true; + break; + } + } + + if (!hasXPathBasedModification) + return xml; + + QString xsl = QLatin1String("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + "<xsl:transform version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n" "<xsl:template match=\"/\">\n" " <xsl:apply-templates />\n" "</xsl:template>\n" @@ -140,7 +152,7 @@ QString DocParser::applyDocModifications(const DocModificationList& mods, const int bufferSize; QString result; if (!xsltSaveResultToString(&buffer, &bufferSize, res.xslResult, res.xslt)) { - result = QByteArray(reinterpret_cast<char*>(buffer), bufferSize); + result = QString::fromUtf8(reinterpret_cast<char*>(buffer), bufferSize); std::free(buffer); } else { result = xml; diff --git a/typesystem.cpp b/typesystem.cpp index ae5c3a1c8..15166f357 100644 --- a/typesystem.cpp +++ b/typesystem.cpp @@ -777,9 +777,10 @@ bool Handler::startElement(const QString &, const QString &n, const int validParent = StackElement::TypeEntryMask | StackElement::ModifyFunction | StackElement::ModifyField; - if (current->parent && current->parent->type & validParent) - m_docModifications << DocModification(attributes["xpath"], m_currentSignature); - else { + if (current->parent && current->parent->type & validParent) { + QString signature = (current->type & StackElement::TypeEntryMask) ? QString() : m_currentSignature; + m_docModifications << DocModification(attributes["xpath"], signature); + } else { m_error = "modify-documentation must be inside modify-function, " "modify-field or other tags that creates a type"; return false; |