aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/ApiExtractor/doxygenparser.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <friedemann.kleint@qt.io>2023-05-10 13:50:56 +0200
committerCristián Maureira-Fredes <cristian.maureira-fredes@qt.io>2025-11-24 12:06:06 +0100
commit845630ad239c4b37ff37e49ef5bb969a8946744b (patch)
tree5c65f2e270511459d346c14f0ad8d01f5e6e39a0 /sources/shiboken6/ApiExtractor/doxygenparser.cpp
parent3cf2077a1b060bbea3419ccde23c5da6485a2e24 (diff)
Move the shiboken-generator source around
THIS COMMIT WAS GENERATED BY A SCRIPT Task-number: PYSIDE-962 Task-number: PYSIDE-1587 Change-Id: I58b05c3d05606efb6303193f2d7f907a0ab5741b Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Diffstat (limited to 'sources/shiboken6/ApiExtractor/doxygenparser.cpp')
-rw-r--r--sources/shiboken6/ApiExtractor/doxygenparser.cpp222
1 files changed, 0 insertions, 222 deletions
diff --git a/sources/shiboken6/ApiExtractor/doxygenparser.cpp b/sources/shiboken6/ApiExtractor/doxygenparser.cpp
deleted file mode 100644
index fb76e9c62..000000000
--- a/sources/shiboken6/ApiExtractor/doxygenparser.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (C) 2020 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include "doxygenparser.h"
-#include "abstractmetaargument.h"
-#include "abstractmetalang.h"
-#include "abstractmetafield.h"
-#include "abstractmetafunction.h"
-#include "abstractmetaenum.h"
-#include "abstractmetatype.h"
-#include "documentation.h"
-#include "messages.h"
-#include "modifications.h"
-#include "propertyspec.h"
-#include "reporthandler.h"
-#include "complextypeentry.h"
-#include "xmlutils.h"
-
-#include "qtcompat.h"
-
-#include <QtCore/qfile.h>
-#include <QtCore/qdir.h>
-
-using namespace Qt::StringLiterals;
-
-static QString getSectionKindAttr(const AbstractMetaFunctionCPtr &func)
-{
- if (func->isSignal())
- return u"signal"_s;
- QString kind = func->isPublic()
- ? u"public"_s : u"protected"_s;
- if (func->isStatic())
- kind += u"-static"_s;
- else if (func->isSlot())
- kind += u"-slot"_s;
- return kind;
-}
-
-QString DoxygenParser::fillDocumentation(const AbstractMetaClassPtr &metaClass)
-{
- if (!metaClass)
- return {};
-
- QString doxyFileSuffix;
- if (metaClass->enclosingClass()) {
- doxyFileSuffix += metaClass->enclosingClass()->name();
- doxyFileSuffix += u"_1_1"_s; // FIXME: Check why _1_1!!
- }
- doxyFileSuffix += metaClass->name();
- doxyFileSuffix += u".xml"_s;
-
- static constexpr QLatin1StringView prefixes[] = { "class"_L1, "struct"_L1, "namespace"_L1 };
- bool isProperty = false;
-
- QString doxyFilePath;
- for (const auto &prefix : prefixes) {
- doxyFilePath = documentationDataDirectory() + u'/' + prefix + doxyFileSuffix;
- if (QFile::exists(doxyFilePath))
- break;
- doxyFilePath.clear();
- }
-
- if (doxyFilePath.isEmpty()) {
- qCWarning(lcShibokenDoc).noquote().nospace()
- << "Can't find doxygen file for class " << metaClass->name() << ", tried: "
- << QDir::toNativeSeparators(documentationDataDirectory())
- << "/{struct|class|namespace}"<< doxyFileSuffix;
- return {};
- }
-
- QString errorMessage;
- XQueryPtr xquery = XQuery::create(doxyFilePath, &errorMessage);
- if (!xquery) {
- qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage));
- return {};
- }
-
- static const QList<std::pair<DocumentationType, QString>> docTags = {
- { DocumentationType::Brief, u"briefdescription"_s },
- { DocumentationType::Detailed, u"detaileddescription"_s }
- };
- // Get class documentation
- Documentation classDoc;
- classDoc.setSourceFile(doxyFilePath);
-
- for (const auto &tag : docTags) {
- const QString classQuery = u"/doxygen/compounddef/"_s + 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
- const auto &funcs = DocParser::documentableFunctions(metaClass);
- for (const auto &func : funcs) {
- QString query = u"/doxygen/compounddef/sectiondef"_s;
- // properties
- if (func->isPropertyReader() || func->isPropertyWriter()
- || func->isPropertyResetter()) {
- const auto prop = metaClass->propertySpecs().at(func->propertySpecIndex());
- query += u"[@kind=\"property\"]/memberdef/name[text()=\""_s
- + prop.name() + u"\"]"_s;
- isProperty = true;
- } else { // normal methods
- QString kind = getSectionKindAttr(func);
- query += u"[@kind=\""_s + kind
- + u"-func\"]/memberdef/name[text()=\""_s
- + func->originalName() + u"\"]"_s;
-
- if (func->arguments().isEmpty()) {
- QString args = func->isConstant() ? u"() const"_s : u"()"_s;
- query += u"/../argsstring[text()=\""_s + args + u"\"]"_s;
- } else {
- int i = 1;
- const AbstractMetaArgumentList &arguments = func->arguments();
- for (const AbstractMetaArgument &arg : arguments) {
- if (!arg.type().isPrimitive()) {
- query += u"/../param["_s + QString::number(i)
- + u"]/type/ref[text()=\""_s
- + arg.type().cppSignature().toHtmlEscaped()
- + u"\"]/../.."_s;
- } else {
- query += u"/../param["_s + QString::number(i)
- + u"]/type[text(), \""_s
- + arg.type().cppSignature().toHtmlEscaped()
- + u"\"]/.."_s;
- }
- ++i;
- }
- }
- }
- Documentation funcDoc;
- funcDoc.setSourceFile(doxyFilePath);
- for (const auto &tag : docTags) {
- QString funcQuery(query);
- if (!isProperty) {
- funcQuery += u"/../"_s + tag.second;
- } else {
- funcQuery = u'(' + funcQuery;
- funcQuery += u"/../"_s + tag.second + u")[1]"_s;
- }
-
- QString doc = getDocumentation(xquery, funcQuery,
- DocParser::getXpathDocModifications(func, metaClass));
- if (doc.isEmpty()) {
- qCWarning(lcShibokenDoc, "%s",
- qPrintable(msgCannotFindDocumentation(doxyFilePath, func.get(),
- funcQuery)));
- } else {
- funcDoc.setValue(doc, tag.first);
- }
- }
- std::const_pointer_cast<AbstractMetaFunction>(func)->setDocumentation(funcDoc);
- isProperty = false;
- }
-
- //Fields
- for (AbstractMetaField &field : metaClass->fields()) {
- if (field.isPrivate())
- continue;
-
- Documentation fieldDoc;
- fieldDoc.setSourceFile(doxyFilePath);
- for (const auto &tag : docTags) {
- QString query = u"/doxygen/compounddef/sectiondef/memberdef/name[text()=\""_s
- + field.name() + u"\"]/../"_s + 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(fieldDoc);
- }
-
- //Enums
- for (AbstractMetaEnum &meta_enum : metaClass->enums()) {
- QString query = u"/doxygen/compounddef/sectiondef/memberdef[@kind=\"enum\"]/name[text()=\""_s
- + meta_enum.name() + u"\"]/.."_s;
- QString doc = getDocumentation(xquery, query, DocModificationList());
- if (doc.isEmpty()) {
- qCWarning(lcShibokenDoc, "%s",
- qPrintable(msgCannotFindDocumentation(doxyFilePath, metaClass, meta_enum, query)));
- }
- meta_enum.setDocumentation(Documentation(doc, {}, doxyFilePath));
- }
-
- return doxyFilePath;
-}
-
-ModuleDocumentation DoxygenParser::retrieveModuleDocumentation(const QString &name)
-{
- QString sourceFile = documentationDataDirectory() + u"/indexpage.xml"_s;
-
- if (!QFile::exists(sourceFile)) {
- qCWarning(lcShibokenDoc).noquote().nospace()
- << "Can't find doxygen XML file for module " << name << ", tried: "
- << QDir::toNativeSeparators(sourceFile);
- return {};
- }
-
- QString errorMessage;
- XQueryPtr xquery = XQuery::create(sourceFile, &errorMessage);
- if (!xquery) {
- qCWarning(lcShibokenDoc, "%s", qPrintable(errorMessage));
- return {};
- }
-
- // Module documentation
- QString query = u"/doxygen/compounddef/detaileddescription"_s;
- const QString doc = getDocumentation(xquery, query, DocModificationList());
- return {Documentation(doc, {}, sourceFile), {}};
-}