Skip to content

Commit 653dc64

Browse files
committed
Fix bug#38.
1 parent 9a34c94 commit 653dc64

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

docparser.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,19 @@ QString DocParser::applyDocModifications(const DocModificationList& mods, const
9595
if (mods.isEmpty())
9696
return xml;
9797

98-
QString xsl = QLatin1String("<xsl:transform version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"
98+
bool hasXPathBasedModification = false;
99+
foreach (DocModification mod, mods) {
100+
if (mod.mode() == DocModification::XPathReplace) {
101+
hasXPathBasedModification = true;
102+
break;
103+
}
104+
}
105+
106+
if (!hasXPathBasedModification)
107+
return xml;
108+
109+
QString xsl = QLatin1String("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
110+
"<xsl:transform version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n"
99111
"<xsl:template match=\"/\">\n"
100112
" <xsl:apply-templates />\n"
101113
"</xsl:template>\n"
@@ -140,7 +152,7 @@ QString DocParser::applyDocModifications(const DocModificationList& mods, const
140152
int bufferSize;
141153
QString result;
142154
if (!xsltSaveResultToString(&buffer, &bufferSize, res.xslResult, res.xslt)) {
143-
result = QByteArray(reinterpret_cast<char*>(buffer), bufferSize);
155+
result = QString::fromUtf8(reinterpret_cast<char*>(buffer), bufferSize);
144156
std::free(buffer);
145157
} else {
146158
result = xml;

typesystem.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -777,9 +777,10 @@ bool Handler::startElement(const QString &, const QString &n,
777777
const int validParent = StackElement::TypeEntryMask
778778
| StackElement::ModifyFunction
779779
| StackElement::ModifyField;
780-
if (current->parent && current->parent->type & validParent)
781-
m_docModifications << DocModification(attributes["xpath"], m_currentSignature);
782-
else {
780+
if (current->parent && current->parent->type & validParent) {
781+
QString signature = (current->type & StackElement::TypeEntryMask) ? QString() : m_currentSignature;
782+
m_docModifications << DocModification(attributes["xpath"], signature);
783+
} else {
783784
m_error = "modify-documentation must be inside modify-function, "
784785
"modify-field or other tags that creates a type";
785786
return false;

0 commit comments

Comments
 (0)