aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/doxygenparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/ApiExtractor/doxygenparser.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/doxygenparser.cpp96
1 files changed, 62 insertions, 34 deletions
diff --git a/sources/shiboken2/ApiExtractor/doxygenparser.cpp b/sources/shiboken2/ApiExtractor/doxygenparser.cpp
index 94c9ec7e0..cf152720e 100644
--- a/sources/shiboken2/ApiExtractor/doxygenparser.cpp
+++ b/sources/shiboken2/ApiExtractor/doxygenparser.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of Qt for Python.
@@ -29,6 +29,7 @@
#include "doxygenparser.h"
#include "abstractmetalang.h"
#include "messages.h"
+#include "propertyspec.h"
#include "reporthandler.h"
#include "typesystem.h"
#include "xmlutils.h"
@@ -80,7 +81,7 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
}
if (doxyFilePath.isEmpty()) {
- qCWarning(lcShiboken).noquote().nospace()
+ qCWarning(lcShibokenDoc).noquote().nospace()
<< "Can't find doxygen file for class " << metaClass->name() << ", tried: "
<< QDir::toNativeSeparators(documentationDataDirectory())
<< "/{struct|class|namespace}"<< doxyFileSuffix;
@@ -90,16 +91,28 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
QString errorMessage;
XQueryPtr xquery = XQuery::create(doxyFilePath, &errorMessage);
if (xquery.isNull()) {
- qCWarning(lcShiboken, "%s", qPrintable(errorMessage));
+ qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage));
return;
}
+ static const QList<QPair<Documentation::Type, QString>> docTags = {
+ { Documentation::Brief, QLatin1String("briefdescription") },
+ { Documentation::Detailed, QLatin1String("detaileddescription") }
+ };
// Get class documentation
- const QString classQuery = QLatin1String("/doxygen/compounddef/detaileddescription");
- QString classDoc = getDocumentation(xquery, classQuery,
- metaClass->typeEntry()->docModifications());
- if (classDoc.isEmpty())
- qCWarning(lcShiboken(), "%s", qPrintable(msgCannotFindDocumentation(doxyFilePath, "class", metaClass->name(), classQuery)));
+ Documentation classDoc;
+
+ for (const auto &tag : docTags) {
+ const QString classQuery = QLatin1String("/doxygen/compounddef/") + tag.second;
+ QString doc = getDocumentation(xquery, classQuery,
+ metaClass->typeEntry()->docModifications());
+ if (doc.isEmpty())
+ qCWarning(lcShibokenDoc, "%s",
+ qPrintable(msgCannotFindDocumentation(doxyFilePath, "class", metaClass->name(),
+ classQuery)));
+ else
+ classDoc.setValue(doc, tag.first);
+ }
metaClass->setDocumentation(classDoc);
//Functions Documentation
@@ -128,28 +141,38 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
if (!arg->type()->isPrimitive()) {
query += QLatin1String("/../param[") + QString::number(i)
+ QLatin1String("]/type/ref[text()=\"")
- + arg->type()->name() + QLatin1String("\"]/../..");
+ + arg->type()->cppSignature().toHtmlEscaped()
+ + QLatin1String("\"]/../..");
} else {
query += QLatin1String("/../param[") + QString::number(i)
- + QLatin1String("]/type[text()=\"")
- + arg->type()->name() + QLatin1String("\"]/..");
+ + QLatin1String("]/type[text(), \"")
+ + arg->type()->cppSignature().toHtmlEscaped()
+ + QLatin1String("\"]/..");
}
++i;
}
}
}
- if (!isProperty) {
- query += QLatin1String("/../detaileddescription");
- } else {
- query = QLatin1Char('(') + query;
- query += QLatin1String("/../detaileddescription)[1]");
- }
- QString doc = getDocumentation(xquery, query, DocModificationList());
- if (doc.isEmpty()) {
- qCWarning(lcShiboken(), "%s",
- qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, func, query)));
+ Documentation funcDoc;
+ for (const auto &tag : docTags) {
+ QString funcQuery(query);
+ if (!isProperty) {
+ funcQuery += QLatin1String("/../") + tag.second;
+ } else {
+ funcQuery = QLatin1Char('(') + funcQuery;
+ funcQuery += QLatin1String("/../%1)[1]").arg(tag.second);
+ }
+
+ QString doc = getDocumentation(xquery, funcQuery, DocModificationList());
+ if (doc.isEmpty()) {
+ qCWarning(lcShibokenDoc, "%s",
+ qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, func,
+ funcQuery)));
+ } else {
+ funcDoc.setValue(doc, tag.first);
+ }
}
- func->setDocumentation(doc);
+ func->setDocumentation(funcDoc);
isProperty = false;
}
@@ -159,24 +182,29 @@ void DoxygenParser::fillDocumentation(AbstractMetaClass* metaClass)
if (field->isPrivate())
return;
- QString query = QLatin1String("/doxygen/compounddef/sectiondef/memberdef/name[text()=\"")
- + field->name() + QLatin1String("\"]/../detaileddescription");
- QString doc = getDocumentation(xquery, query, DocModificationList());
- if (doc.isEmpty()) {
- qCWarning(lcShiboken(), "%s",
- qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, field, query)));
+ Documentation fieldDoc;
+ for (const auto &tag : docTags) {
+ QString query = QLatin1String("/doxygen/compounddef/sectiondef/memberdef/name[text()=\"")
+ + field->name() + QLatin1String("\"]/../") + tag.second;
+ QString doc = getDocumentation(xquery, query, DocModificationList());
+ if (doc.isEmpty()) {
+ qCWarning(lcShibokenDoc, "%s",
+ qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, field,
+ query)));
+ } else {
+ fieldDoc.setValue(doc, tag.first);
+ }
}
- field->setDocumentation(doc);
+ field->setDocumentation(fieldDoc);
}
//Enums
- const AbstractMetaEnumList &enums = metaClass->enums();
- for (AbstractMetaEnum *meta_enum : enums) {
+ for (AbstractMetaEnum *meta_enum : metaClass->enums()) {
QString query = QLatin1String("/doxygen/compounddef/sectiondef/memberdef[@kind=\"enum\"]/name[text()=\"")
+ meta_enum->name() + QLatin1String("\"]/..");
QString doc = getDocumentation(xquery, query, DocModificationList());
if (doc.isEmpty()) {
- qCWarning(lcShiboken(), "%s",
+ qCWarning(lcShibokenDoc, "%s",
qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, meta_enum, query)));
}
meta_enum->setDocumentation(doc);
@@ -189,7 +217,7 @@ Documentation DoxygenParser::retrieveModuleDocumentation(const QString& name){
QString sourceFile = documentationDataDirectory() + QLatin1String("/indexpage.xml");
if (!QFile::exists(sourceFile)) {
- qCWarning(lcShiboken).noquote().nospace()
+ qCWarning(lcShibokenDoc).noquote().nospace()
<< "Can't find doxygen XML file for module " << name << ", tried: "
<< QDir::toNativeSeparators(sourceFile);
return Documentation();
@@ -198,7 +226,7 @@ Documentation DoxygenParser::retrieveModuleDocumentation(const QString& name){
QString errorMessage;
XQueryPtr xquery = XQuery::create(sourceFile, &errorMessage);
if (xquery.isNull()) {
- qCWarning(lcShiboken, "%s", qPrintable(errorMessage));
+ qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage));
return {};
}