aboutsummaryrefslogtreecommitdiffstats
path: root/generators
diff options
context:
space:
mode:
Diffstat (limited to 'generators')
-rw-r--r--generators/boostpython/CMakeLists.txt5
-rw-r--r--generators/boostpython/boostpythongenerator.cpp4
-rw-r--r--generators/boostpython/cppgenerator.cpp2
-rw-r--r--generators/boostpython/main.cpp34
-rw-r--r--generators/qtdoc/CMakeLists.txt5
-rw-r--r--generators/qtdoc/main.cpp34
-rw-r--r--generators/qtdoc/qtdocgenerator.cpp61
-rw-r--r--generators/qtdoc/qtdocgenerator.h1
8 files changed, 138 insertions, 8 deletions
diff --git a/generators/boostpython/CMakeLists.txt b/generators/boostpython/CMakeLists.txt
index b29b8cf89..00e7915b5 100644
--- a/generators/boostpython/CMakeLists.txt
+++ b/generators/boostpython/CMakeLists.txt
@@ -8,7 +8,12 @@ hppgenerator.cpp
boostpython.cpp
)
+add_executable(boostpythongenerator main.cpp)
+target_link_libraries(boostpythongenerator ${QT_QTCORE_LIBRARY})
+
add_library(boostpython_generator SHARED ${boostpython_generator_SRC})
target_link_libraries(boostpython_generator ${APIEXTRACTOR_LIBRARY} ${QT_QTCORE_LIBRARY} genrunner)
install(TARGETS boostpython_generator DESTINATION ${LIB_INSTALL_DIR})
+install(TARGETS boostpythongenerator DESTINATION bin)
+
diff --git a/generators/boostpython/boostpythongenerator.cpp b/generators/boostpython/boostpythongenerator.cpp
index d1f5baf8f..c25fc09be 100644
--- a/generators/boostpython/boostpythongenerator.cpp
+++ b/generators/boostpython/boostpythongenerator.cpp
@@ -36,9 +36,9 @@
static Indentor INDENT;
static void dump_function(AbstractMetaFunctionList lst);
-QString BoostPythonGenerator::getWrapperName(const AbstractMetaClass* clazz)
+QString BoostPythonGenerator::getWrapperName(const AbstractMetaClass* metaClass)
{
- QString result = clazz->name().toLower();
+ QString result = metaClass->typeEntry()->qualifiedCppName().toLower();
result.replace("::", "_");
result += "_wrapper";
return result;
diff --git a/generators/boostpython/cppgenerator.cpp b/generators/boostpython/cppgenerator.cpp
index f03b4459d..fb68a0e86 100644
--- a/generators/boostpython/cppgenerator.cpp
+++ b/generators/boostpython/cppgenerator.cpp
@@ -955,7 +955,7 @@ void CppGenerator::writeBoostDeclaration(QTextStream& s, const AbstractMetaClass
s << INDENT << "python_cls."
<< strAccess
<< "(\"" << field->name() << "\", &"
- << field->enclosingClass()->name() << "::" << field->name() << ");" << endl;
+ << field->enclosingClass()->typeEntry()->qualifiedCppName() << "::" << field->name() << ");" << endl;
}
}
diff --git a/generators/boostpython/main.cpp b/generators/boostpython/main.cpp
new file mode 100644
index 000000000..b4e81a878
--- /dev/null
+++ b/generators/boostpython/main.cpp
@@ -0,0 +1,34 @@
+/*
+ * This file is part of the Boost Python Generator project.
+ *
+ * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Contact: PySide team <contact@pyside.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <QtCore>
+
+int main(int argc, char *argv[])
+{
+ QStringList args;
+ args.append("--generatorSet=boostpython");
+ for (int i = 1; i < argc; i++)
+ args.append(argv[i]);
+ return QProcess::execute("generatorrunner", args);
+}
+
diff --git a/generators/qtdoc/CMakeLists.txt b/generators/qtdoc/CMakeLists.txt
index fb71784ab..804600e58 100644
--- a/generators/qtdoc/CMakeLists.txt
+++ b/generators/qtdoc/CMakeLists.txt
@@ -4,7 +4,12 @@ set(qtdoc_generator_SRC
qtdocgenerator.cpp
)
+add_executable(docgenerator main.cpp)
+target_link_libraries(docgenerator ${QT_QTCORE_LIBRARY})
+
add_library(qtdoc_generator SHARED ${qtdoc_generator_SRC})
target_link_libraries(qtdoc_generator ${APIEXTRACTOR_LIBRARY} ${QT_QTCORE_LIBRARY} genrunner)
install(TARGETS qtdoc_generator DESTINATION ${LIB_INSTALL_DIR})
+install(TARGETS docgenerator DESTINATION bin)
+
diff --git a/generators/qtdoc/main.cpp b/generators/qtdoc/main.cpp
new file mode 100644
index 000000000..c513147d3
--- /dev/null
+++ b/generators/qtdoc/main.cpp
@@ -0,0 +1,34 @@
+/*
+ * This file is part of the Boost Python Generator project.
+ *
+ * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Contact: PySide team <contact@pyside.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <QtCore>
+
+int main(int argc, char *argv[])
+{
+ QStringList args;
+ args.append("--generatorSet=qtdoc");
+ for (int i = 1; i < argc; i++)
+ args.append(argv[i]);
+ return QProcess::execute("generatorrunner", args);
+}
+
diff --git a/generators/qtdoc/qtdocgenerator.cpp b/generators/qtdoc/qtdocgenerator.cpp
index 4070ddefc..a5a1a5243 100644
--- a/generators/qtdoc/qtdocgenerator.cpp
+++ b/generators/qtdoc/qtdocgenerator.cpp
@@ -129,6 +129,38 @@ QString QtXmlToSphinx::popOutputBuffer()
return strcpy;
}
+QString QtXmlToSphinx::resolveContextForMethod(const QString& methodName)
+{
+ QString currentClass = m_context.split(".").last();
+
+ const AbstractMetaClass* metaClass = 0;
+ foreach (const AbstractMetaClass* cls, m_generator->classes()) {
+ if (cls->name() == currentClass) {
+ metaClass = cls;
+ break;
+ }
+ }
+
+ if (metaClass) {
+ QList<const AbstractMetaFunction*> funcList;
+ foreach (const AbstractMetaFunction* func, metaClass->queryFunctionsByName(methodName)) {
+ if (methodName == func->name())
+ funcList.append(func);
+ }
+
+ const AbstractMetaClass* implementingClass = 0;
+ foreach (const AbstractMetaFunction* func, funcList) {
+ implementingClass = func->implementingClass();
+ if (implementingClass->name() == currentClass)
+ break;
+ }
+
+ if (implementingClass)
+ return implementingClass->name();
+ }
+
+ return QLatin1String("~") + m_context;
+}
QString QtXmlToSphinx::transform(const QString& doc)
{
@@ -484,12 +516,20 @@ void QtXmlToSphinx::handleLinkTag(QXmlStreamReader& reader)
if (l_type == "function" && !m_context.isEmpty()) {
l_linktag = " :meth:`";
QStringList rawlinklist = l_linkref.split(".");
- if (rawlinklist.size() == 1 || rawlinklist[0] == m_context)
- l_linkref.prepend("~" + m_context + '.');
+ if (rawlinklist.size() == 1 || rawlinklist.first() == m_context) {
+ QString context = resolveContextForMethod(rawlinklist.last());
+ l_linkref.prepend(context + '.');
+ }
} else if (l_type == "function" && m_context.isEmpty()) {
l_linktag = " :func:`";
} else if (l_type == "class") {
l_linktag = " :class:`";
+ QStringList rawlinklist = l_linkref.split(".");
+ QStringList splittedContext = m_context.split(".");
+ if (rawlinklist.size() == 1 || rawlinklist.first() == splittedContext.last()) {
+ splittedContext.removeLast();
+ l_linkref.prepend('~' + splittedContext.join(".") + '.');
+ }
} else if (l_type == "enum") {
l_linktag = " :attr:`";
} else if (l_type == "page" && l_linkref == m_generator->moduleName()) {
@@ -762,7 +802,7 @@ QTextStream& operator<<(QTextStream& s, const QtXmlToSphinx::Table &table)
}
static QString getClassName(const AbstractMetaClass *cppClass) {
- return cppClass->name().replace("::", ".");
+ return QString(cppClass->typeEntry()->qualifiedCppName()).replace("::", ".");
}
static QString getFuncName(const AbstractMetaFunction *cppFunc) {
@@ -913,9 +953,18 @@ QString QtDocGenerator::parseFunctionDeclaration(const QString &doc, const Abstr
QString methName = data.mid(0, data.indexOf("("));
QString methArgs = data.mid(data.indexOf("("));
- data = QString("def :meth:`%1<%2.%3>` %4")
+ QString scope = cppClass->name();
+ QStringList splittedMethName = methName.split(".");
+
+ if (splittedMethName.first() == scope) {
+ splittedMethName.removeFirst();
+ methName = splittedMethName.join(".");
+ }
+ scope.append(".");
+
+ data = QString("def :meth:`%1<%2%3>` %4")
.arg(methName)
- .arg(cppClass->name())
+ .arg(scope)
.arg(methName)
.arg(methArgs);
@@ -1183,6 +1232,8 @@ void QtDocGenerator::writeFunctionSignature(QTextStream& s, const AbstractMetaCl
{
if (!func->isConstructor())
s << getClassName(cppClass) << '.';
+ else if (func->implementingClass() && func->implementingClass()->enclosingClass())
+ s << func->implementingClass()->enclosingClass()->name() << '.';
s << getFuncName(func) << "(" << parseArgDocStyle(cppClass, func) << ")";
}
diff --git a/generators/qtdoc/qtdocgenerator.h b/generators/qtdoc/qtdocgenerator.h
index 8174a971e..8f39e72c8 100644
--- a/generators/qtdoc/qtdocgenerator.h
+++ b/generators/qtdoc/qtdocgenerator.h
@@ -90,6 +90,7 @@ public:
}
private:
+ QString resolveContextForMethod(const QString& methodName);
QString transform(const QString& doc);
void handleHeadingTag(QXmlStreamReader& reader);