aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2')
-rw-r--r--sources/shiboken2/ApiExtractor/CMakeLists.txt4
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp246
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h7
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetalang.cpp12
-rw-r--r--sources/shiboken2/ApiExtractor/abstractmetalang.h17
-rw-r--r--sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp72
-rw-r--r--sources/shiboken2/ApiExtractor/doc/CMakeLists.txt10
-rw-r--r--sources/shiboken2/ApiExtractor/doc/conf.py.in3
-rw-r--r--sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst4
-rw-r--r--sources/shiboken2/ApiExtractor/parser/codemodel.cpp33
-rw-r--r--sources/shiboken2/ApiExtractor/parser/codemodel.h30
-rw-r--r--sources/shiboken2/ApiExtractor/parser/codemodel_enums.h6
-rw-r--r--sources/shiboken2/ApiExtractor/parser/enumvalue.cpp76
-rw-r--r--sources/shiboken2/ApiExtractor/parser/enumvalue.h70
-rw-r--r--sources/shiboken2/ApiExtractor/qtdocparser.cpp14
-rw-r--r--sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp4
-rw-r--r--sources/shiboken2/ApiExtractor/tests/testenum.cpp69
-rw-r--r--sources/shiboken2/ApiExtractor/typesystem.cpp5
-rw-r--r--sources/shiboken2/ApiExtractor/typesystem.h13
-rw-r--r--sources/shiboken2/CMakeLists.txt9
-rw-r--r--sources/shiboken2/doc/README.md12
-rw-r--r--sources/shiboken2/doc/codeinjectionsemantics.rst20
-rw-r--r--sources/shiboken2/doc/dependency-pyqtb.svg600
-rw-r--r--sources/shiboken2/doc/faq.rst37
-rw-r--r--sources/shiboken2/doc/images/bindinggen-development.pngbin34333 -> 32698 bytes
-rw-r--r--sources/shiboken2/doc/images/bindinggen-development.svg475
-rw-r--r--sources/shiboken2/doc/images/boostqtarch.pngbin34257 -> 0 bytes
-rw-r--r--sources/shiboken2/doc/images/boostqtarch.svg226
-rw-r--r--sources/shiboken2/doc/images/converter.dot14
-rw-r--r--sources/shiboken2/doc/images/converter.pngbin37485 -> 22467 bytes
-rw-r--r--sources/shiboken2/doc/images/converter.svg349
-rw-r--r--sources/shiboken2/doc/images/shibokenqtarch.pngbin0 -> 17602 bytes
-rw-r--r--sources/shiboken2/doc/images/shibokenqtarch.svg188
-rw-r--r--sources/shiboken2/doc/overview.rst4
-rw-r--r--sources/shiboken2/doc/ownership.rst8
-rw-r--r--sources/shiboken2/doc/projectfile.rst16
-rw-r--r--sources/shiboken2/doc/sequenceprotocol.rst16
-rw-r--r--sources/shiboken2/doc/typeconverters.rst65
-rw-r--r--sources/shiboken2/doc/typesystemvariables.rst7
-rw-r--r--sources/shiboken2/doc/wordsofadvice.rst9
-rw-r--r--sources/shiboken2/generator/main.cpp23
-rw-r--r--sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp43
-rw-r--r--sources/shiboken2/generator/qtdoc/qtdocgenerator.h2
-rw-r--r--sources/shiboken2/generator/shiboken2/cppgenerator.cpp10
-rw-r--r--sources/shiboken2/generator/shiboken2/shibokengenerator.cpp20
-rw-r--r--sources/shiboken2/libshiboken/qapp_macro.cpp24
-rw-r--r--sources/shiboken2/libshiboken/sbkconverter.cpp5
-rw-r--r--sources/shiboken2/tests/samplebinding/typesystem_sample.xml2
48 files changed, 1371 insertions, 1508 deletions
diff --git a/sources/shiboken2/ApiExtractor/CMakeLists.txt b/sources/shiboken2/ApiExtractor/CMakeLists.txt
index 4355e32ef..8d68b0dcf 100644
--- a/sources/shiboken2/ApiExtractor/CMakeLists.txt
+++ b/sources/shiboken2/ApiExtractor/CMakeLists.txt
@@ -1,5 +1,7 @@
project(apiextractor)
+cmake_minimum_required(VERSION 3.1)
+cmake_policy(VERSION 3.1)
find_package(LibXml2 2.6.32)
find_package(LibXslt 1.1.19)
@@ -55,11 +57,13 @@ clangparser/clangdebugutils.cpp
clangparser/clangutils.cpp
# Old parser
parser/codemodel.cpp
+parser/enumvalue.cpp
)
set(APIEXTRACTOR_EXTRA_INCLUDES ${CLANG_EXTRA_INCLUDES})
set(APIEXTRACTOR_EXTRA_LIBRARIES ${CLANG_EXTRA_LIBRARIES})
+add_subdirectory(doc)
if (NOT DISABLE_DOCSTRINGS)
set(apiextractor_SRC
${apiextractor_SRC}
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
index 1afc7d135..b862ba548 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder.cpp
@@ -508,8 +508,6 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
addAbstractMetaClass(cls);
}
- figureOutEnumValues();
-
for (const ClassModelItem &item : typeValues)
traverseClassMembers(item);
@@ -684,7 +682,6 @@ void AbstractMetaBuilderPrivate::traverseDom(const FileModelItem &dom)
traverseStreamOperator(item);
}
- figureOutDefaultEnumArguments();
checkFunctionModifications();
// sort all classes topologically
@@ -839,207 +836,6 @@ AbstractMetaClass *AbstractMetaBuilderPrivate::traverseNamespace(const FileModel
return metaClass;
}
-struct Operator
-{
- enum Type { Complement, Plus, ShiftRight, ShiftLeft, None };
-
- Operator() : type(None) {}
-
- int calculate(int x)
- {
- switch (type) {
- case Complement: return ~value;
- case Plus: return x + value;
- case ShiftRight: return x >> value;
- case ShiftLeft: return x << value;
- case None: return x;
- }
- return x;
- }
-
- Type type;
- int value;
-};
-
-
-
-Operator findOperator(QString* s)
-{
- const char *names[] = {
- "~",
- "+",
- ">>",
- "<<"
- };
-
- for (int i = 0; i < Operator::None; ++i) {
- QString name = QLatin1String(names[i]);
- QString str = *s;
- int splitPoint = str.indexOf(name);
- if (splitPoint > -1) {
- bool ok;
- QString right = str.mid(splitPoint + name.length());
- Operator op;
-
- op.value = right.toInt(&ok);
- if (!ok && right.length() > 0 && right.at(right.length() - 1).toLower() == QLatin1Char('u'))
- op.value = right.left(right.length() - 1).toUInt(&ok, 0);
-
- if (ok) {
- op.type = Operator::Type(i);
- if (splitPoint > 0)
- *s = str.left(splitPoint).trimmed();
- else
- *s = QString();
- return op;
- }
- }
- }
- return Operator();
-}
-
-int AbstractMetaBuilderPrivate::figureOutEnumValue(const QString &stringValue,
- int oldValuevalue,
- AbstractMetaEnum *metaEnum,
- AbstractMetaFunction *metaFunction)
-{
- if (stringValue.isEmpty())
- return oldValuevalue;
-
- QStringList stringValues = stringValue.split(QLatin1Char('|'));
-
- int returnValue = 0;
-
- bool matched = false;
-
- for (int i = 0; i < stringValues.size(); ++i) {
- QString s = stringValues.at(i).trimmed();
-
- bool ok;
- int v;
-
- Operator op = findOperator(&s);
-
- if (s.length() > 0 && s.at(0) == QLatin1Char('0'))
- v = s.toUInt(&ok, 0);
- else if (s.length() > 0 && s.at(s.length() - 1).toLower() == QLatin1Char('u'))
- v = s.left(s.length() - 1).toUInt(&ok, 0);
- else
- v = s.toInt(&ok);
-
- if (ok || s.isEmpty()) {
- matched = true;
- } else if (m_enumValues.contains(s)) {
- v = m_enumValues[s]->value();
- matched = true;
- } else {
- if (metaEnum) {
- v = findOutValueFromString(s, matched);
- if (!matched) {
- QString enclosingClass = QString(metaEnum->enclosingClass() ? metaEnum->enclosingClass()->name() + colonColon() : QString());
- qCWarning(lcShiboken).noquote().nospace()
- << "unhandled enum value: " << s << " in "
- << enclosingClass << metaEnum->name() << " from header '"
- << metaEnum->typeEntry()->include().name() << '\'';
- }
- } else {
- qCWarning(lcShiboken) << "unhandled enum value: Unknown enum";
- }
- }
-
- if (matched)
- returnValue |= op.calculate(v);
- }
-
- if (!matched) {
- QString warn = QStringLiteral("unmatched enum %1").arg(stringValue);
-
- if (metaFunction) {
- warn += QStringLiteral(" when parsing default value of '%1' in class '%2'")
- .arg(metaFunction->name(), metaFunction->implementingClass()->name());
- }
- warn += QLatin1String(" from header '") + metaEnum->typeEntry()->include().name()
- + QLatin1Char('\'');
-
- qCWarning(lcShiboken).noquote().nospace() << warn;
- returnValue = oldValuevalue;
- }
-
- return returnValue;
-}
-
-void AbstractMetaBuilderPrivate::figureOutEnumValuesForClass(AbstractMetaClass *metaClass,
- QSet<AbstractMetaClass *> *classes)
-{
- AbstractMetaClass* base = metaClass->baseClass();
-
- if (base && !classes->contains(base))
- figureOutEnumValuesForClass(base, classes);
-
- if (classes->contains(metaClass))
- return;
-
- const AbstractMetaEnumList &enums = metaClass->enums();
- for (AbstractMetaEnum* e : enums) {
- if (!e) {
- qCWarning(lcShiboken).noquote().nospace() << "bad enum in class " << metaClass->name();
- continue;
- }
- AbstractMetaEnumValueList lst = e->values();
- int value = 0;
- for (int i = 0; i < lst.size(); ++i) {
- value = figureOutEnumValue(lst.at(i)->stringValue(), value, e);
- lst.at(i)->setValue(value);
- value++;
- }
- }
-
- *classes += metaClass;
-}
-
-
-void AbstractMetaBuilderPrivate::figureOutEnumValues()
-{
- // Keep a set of classes that we already traversed. We use this to
- // enforce that we traverse base classes prior to subclasses.
- QSet<AbstractMetaClass*> classes;
- for (AbstractMetaClass *c : qAsConst(m_metaClasses))
- figureOutEnumValuesForClass(c, &classes);
-
- for (AbstractMetaEnum* metaEnum : qAsConst(m_globalEnums)) {
- AbstractMetaEnumValueList enumValues = metaEnum->values();
- int value = 0;
- for (int i = 0; i < enumValues.size(); ++i) {
- value = figureOutEnumValue(enumValues.at(i)->stringValue(), value, metaEnum);
- enumValues.at(i)->setValue(value);
- value++;
- }
- }
-}
-
-void AbstractMetaBuilderPrivate::figureOutDefaultEnumArguments()
-{
- for (AbstractMetaClass* metaClass : qAsConst(m_metaClasses)) {
- const AbstractMetaFunctionList &functions = metaClass->functions();
- for (AbstractMetaFunction* metaFunction : functions) {
- const AbstractMetaArgumentList &arguments = metaFunction->arguments();
- for (AbstractMetaArgument *arg : arguments) {
- QString expr = arg->defaultValueExpression();
- if (expr.isEmpty())
- continue;
-
- if (!metaFunction->replacedDefaultExpression(metaFunction->implementingClass(),
- arg->argumentIndex() + 1).isEmpty()) {
- continue;
- }
-
- arg->setDefaultValueExpression(expr);
- }
- }
- }
-}
-
-
AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumItem,
AbstractMetaClass *enclosing,
const QSet<QString> &enumsDeclarations)
@@ -1055,7 +851,7 @@ AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumIte
nspace = QStringList(names.mid(0, names.size() - 1)).join(colonColon());
typeEntry = new EnumTypeEntry(nspace, enumName, QVersionNumber(0, 0));
TypeDatabase::instance()->addType(typeEntry);
- } else if (!enumItem->isAnonymous()) {
+ } else if (enumItem->enumKind() != AnonymousEnum) {
typeEntry = TypeDatabase::instance()->findType(qualifiedName);
} else {
QStringList tmpQualifiedName = enumItem->qualifiedName();
@@ -1096,12 +892,15 @@ AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumIte
}
AbstractMetaEnum *metaEnum = new AbstractMetaEnum;
+ metaEnum->setEnumKind(enumItem->enumKind());
+ metaEnum->setSigned(enumItem->isSigned());
if (enumsDeclarations.contains(qualifiedName)
|| enumsDeclarations.contains(enumName)) {
metaEnum->setHasQEnumsDeclaration(true);
}
- metaEnum->setTypeEntry((EnumTypeEntry*) typeEntry);
+ EnumTypeEntry *enumTypeEntry = static_cast<EnumTypeEntry *>(typeEntry);
+ metaEnum->setTypeEntry(enumTypeEntry);
switch (enumItem->accessPolicy()) {
case CodeModel::Public:
*metaEnum += AbstractMetaAttributes::Public;
@@ -1127,7 +926,8 @@ AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumIte
metaEnumValue->setName(value->name());
// Deciding the enum value...
- metaEnumValue->setStringValue(value->value());
+ metaEnumValue->setStringValue(value->stringValue());
+ metaEnumValue->setValue(value->value());
metaEnum->addEnumValue(metaEnumValue);
if (ReportHandler::isDebug(ReportHandler::FullDebug)) {
@@ -1158,7 +958,9 @@ AbstractMetaEnum *AbstractMetaBuilderPrivate::traverseEnum(EnumModelItem enumIte
name += colonColon();
}
name += e->name();
- EnumValueTypeEntry* enumValue = new EnumValueTypeEntry(name, e->value(), static_cast<EnumTypeEntry*>(typeEntry), typeEntry->version());
+ EnumValueTypeEntry *enumValue =
+ new EnumValueTypeEntry(name, e->stringValue(),
+ enumTypeEntry, enumTypeEntry->version());
TypeDatabase::instance()->addType(enumValue);
}
@@ -2286,6 +2088,20 @@ AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModel
bool ok;
AbstractMetaType* metaType = translateType(arg->type(), &ok);
if (!ok) {
+ // If an invalid argument has a default value, simply remove it
+ if (arg->defaultValue()) {
+ if (!m_currentClass
+ || (m_currentClass->typeEntry()->codeGeneration()
+ & TypeEntry::GenerateTargetLang)) {
+ qCWarning(lcShiboken).noquote().nospace()
+ << "Stripping argument #" << (i + 1) << " of "
+ << originalQualifiedSignatureWithReturn
+ << " due to unmatched type \"" << arg->type().toString()
+ << "\" with default expression \""
+ << arg->defaultValueExpression() << "\".";
+ }
+ break;
+ }
Q_ASSERT(metaType == 0);
const QString reason = msgUnmatchedParameterType(arg, i);
qCWarning(lcShiboken).noquote().nospace()
@@ -2321,7 +2137,7 @@ AbstractMetaFunction *AbstractMetaBuilderPrivate::traverseFunction(FunctionModel
metaFunction->setArguments(metaArguments);
// Find the correct default values
- for (int i = 0; i < arguments.size(); ++i) {
+ for (int i = 0, size = metaArguments.size(); i < size; ++i) {
ArgumentModelItem arg = arguments.at(i);
AbstractMetaArgument* metaArg = metaArguments.at(i);
@@ -2570,9 +2386,9 @@ AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const TypeInfo &_typ
arrayType->setArrayElementType(elementType);
if (!typeInfo.arrays.at(i).isEmpty()) {
bool _ok;
- const int elems = findOutValueFromString(typeInfo.arrays.at(i), _ok);
+ const qint64 elems = findOutValueFromString(typeInfo.arrays.at(i), _ok);
if (_ok)
- arrayType->setArrayElementCount(elems);
+ arrayType->setArrayElementCount(int(elems));
}
arrayType->setTypeEntry(new ArrayTypeEntry(elementType->typeEntry() , elementType->typeEntry()->version()));
decideUsagePattern(arrayType);
@@ -2712,9 +2528,9 @@ AbstractMetaType *AbstractMetaBuilderPrivate::translateType(const TypeInfo &_typ
}
-int AbstractMetaBuilderPrivate::findOutValueFromString(const QString &stringValue, bool &ok)
+qint64 AbstractMetaBuilderPrivate::findOutValueFromString(const QString &stringValue, bool &ok)
{
- int value = stringValue.toInt(&ok);
+ qint64 value = stringValue.toLongLong(&ok);
if (ok)
return value;
@@ -2735,13 +2551,13 @@ int AbstractMetaBuilderPrivate::findOutValueFromString(const QString &stringValu
AbstractMetaEnumValue *enumValue = AbstractMetaClass::findEnumValue(m_metaClasses, stringValue);
if (enumValue) {
ok = true;
- return enumValue->value();
+ return enumValue->value().value();
}
for (AbstractMetaEnum *metaEnum : qAsConst(m_globalEnums)) {
if (const AbstractMetaEnumValue *ev = metaEnum->findEnumValue(stringValue)) {
ok = true;
- return ev->value();
+ return ev->value().value();
}
}
diff --git a/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h
index 7a2565914..7f5e866ab 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h
+++ b/sources/shiboken2/ApiExtractor/abstractmetabuilder_p.h
@@ -60,11 +60,6 @@ public:
AbstractMetaClass *argumentToClass(ArgumentModelItem);
- void figureOutEnumValuesForClass(AbstractMetaClass *metaClass, QSet<AbstractMetaClass *> *classes);
- int figureOutEnumValue(const QString &name, int value, AbstractMetaEnum *meta_enum, AbstractMetaFunction *metaFunction = 0);
- void figureOutEnumValues();
- void figureOutDefaultEnumArguments();
-
void addAbstractMetaClass(AbstractMetaClass *cls);
AbstractMetaClass *traverseTypeDef(const FileModelItem &dom,
const TypeDefModelItem &typeDef);
@@ -129,7 +124,7 @@ public:
bool resolveType = true,
bool resolveScope = true);
- int findOutValueFromString(const QString &stringValue, bool &ok);
+ qint64 findOutValueFromString(const QString &stringValue, bool &ok);
void decideUsagePattern(AbstractMetaType *type);
diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
index 4e507cd38..235413165 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
+++ b/sources/shiboken2/ApiExtractor/abstractmetalang.cpp
@@ -1700,7 +1700,10 @@ QDebug operator<<(QDebug d, const AbstractMetaEnum *ae)
d.nospace();
d << "AbstractMetaEnum(";
if (ae) {
- d << ae->fullName() << '[';
+ d << ae->fullName();
+ if (!ae->isSigned())
+ d << " (unsigned) ";
+ d << '[';
const AbstractMetaEnumValueList &values = ae->values();
for (int i = 0, count = values.size(); i < count; ++i) {
if (i)
@@ -2411,7 +2414,7 @@ QDebug operator<<(QDebug d, const AbstractMetaClass *ac)
*/
AbstractMetaEnum::AbstractMetaEnum() :
- m_hasQenumsDeclaration(false)
+ m_hasQenumsDeclaration(false), m_signed(true)
{
}
@@ -2457,8 +2460,3 @@ QString AbstractMetaEnum::package() const
{
return m_typeEntry->targetLangPackage();
}
-
-bool AbstractMetaEnum::isAnonymous() const
-{
- return m_typeEntry->isAnonymous();
-}
diff --git a/sources/shiboken2/ApiExtractor/abstractmetalang.h b/sources/shiboken2/ApiExtractor/abstractmetalang.h
index 45a55e570..7e0bfa322 100644
--- a/sources/shiboken2/ApiExtractor/abstractmetalang.h
+++ b/sources/shiboken2/ApiExtractor/abstractmetalang.h
@@ -34,6 +34,7 @@
#include "typesystem_typedefs.h"
#include "parser/codemodel_enums.h"
+#include "parser/enumvalue.h"
#include <QtCore/qobjectdefs.h>
#include <QtCore/QStringList>
@@ -1090,12 +1091,12 @@ class AbstractMetaEnumValue
public:
AbstractMetaEnumValue() {}
- int value() const
+ EnumValue value() const
{
return m_value;
}
- void setValue(int value)
+ void setValue(EnumValue value)
{
m_value = value;
}
@@ -1134,7 +1135,7 @@ private:
QString m_name;
QString m_stringValue;
- int m_value = 0;
+ EnumValue m_value;
Documentation m_doc;
};
@@ -1168,6 +1169,11 @@ public:
return package() + QLatin1Char('.') + qualifier() + QLatin1Char('.') + name();
}
+ EnumKind enumKind() const { return m_enumKind; }
+ void setEnumKind(EnumKind kind) { m_enumKind = kind; }
+
+ bool isAnonymous() const { return m_enumKind == AnonymousEnum; }
+
// Has the enum been declared inside a Q_ENUMS() macro in its enclosing class?
void setHasQEnumsDeclaration(bool on)
{
@@ -1199,14 +1205,17 @@ public:
m_class = c;
}
- bool isAnonymous() const;
+ bool isSigned() const { return m_signed; }
+ void setSigned(bool s) { m_signed = s; }
private:
AbstractMetaEnumValueList m_enumValues;
EnumTypeEntry *m_typeEntry = nullptr;
AbstractMetaClass *m_class = nullptr;
+ EnumKind m_enumKind = CEnum;
uint m_hasQenumsDeclaration : 1;
+ uint m_signed : 1;
};
#ifndef QT_NO_DEBUG_STREAM
diff --git a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
index 1ed054d91..b57ef2f43 100644
--- a/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
+++ b/sources/shiboken2/ApiExtractor/clangparser/clangbuilder.cpp
@@ -41,6 +41,7 @@
#include <QtCore/QVector>
#include <string.h>
+#include <ctype.h>
#if QT_VERSION < 0x050800
# define Q_FALLTHROUGH() (void)0
@@ -123,6 +124,24 @@ static void setFileName(const CXCursor &cursor, _CodeModelItem *item)
}
}
+static bool isSigned(CXTypeKind kind)
+{
+ switch (kind) {
+ case CXType_UChar:
+ case CXType_Char16:
+ case CXType_Char32:
+ case CXType_UShort:
+ case CXType_UInt:
+ case CXType_ULong:
+ case CXType_ULongLong:
+ case CXType_UInt128:
+ return false;
+ default:
+ break;
+ }
+ return true;
+}
+
class BuilderPrivate {
public:
typedef QHash<CXCursor, ClassModelItem> CursorClassHash;
@@ -437,6 +456,36 @@ QString BuilderPrivate::cursorValueExpression(BaseVisitor *bv, const CXCursor &c
return QString::fromLocal8Bit(equalSign, int(snippet.second - equalSign)).trimmed();
}
+// A hacky reimplementation of clang_EnumDecl_isScoped() for Clang < 5.0
+// which simply checks for a blank-delimited " class " keyword in the enum snippet.
+
+#define CLANG_NO_ENUMDECL_ISSCOPED \
+ (CINDEX_VERSION_MAJOR == 0 && CINDEX_VERSION_MINOR < 43)
+
+#if CLANG_NO_ENUMDECL_ISSCOPED
+static const char *indexOf(const BaseVisitor::CodeSnippet &snippet, const char *needle)
+{
+ const size_t snippetLength = snippet.first ? size_t(snippet.second - snippet.first) : 0;
+ const size_t needleLength = strlen(needle);
+ if (needleLength > snippetLength)
+ return nullptr;
+ for (const char *c = snippet.first, *end = snippet.second - needleLength; c < end; ++c) {
+ if (memcmp(c, needle, needleLength) == 0)
+ return c;
+ }
+ return nullptr;
+}
+
+long clang_EnumDecl_isScoped4(BaseVisitor *bv, const CXCursor &cursor)
+{
+ BaseVisitor::CodeSnippet snippet = bv->getCodeSnippet(cursor);
+ const char *classSpec = indexOf(snippet, "class");
+ const bool isClass = classSpec && classSpec > snippet.first
+ && isspace(*(classSpec - 1)) && isspace(*(classSpec + 5));
+ return isClass ? 1 : 0;
+}
+#endif // CLANG_NO_ENUMDECL_ISSCOPED
+
// Add a base class to the current class from CXCursor_CXXBaseSpecifier
void BuilderPrivate::addBaseClass(const CXCursor &cursor)
{
@@ -641,13 +690,22 @@ BaseVisitor::StartTokenResult Builder::startToken(const CXCursor &cursor)
break;
case CXCursor_EnumDecl: {
QString name = getCursorSpelling(cursor);
- const bool anonymous = name.isEmpty();
- if (anonymous)
+ EnumKind kind = CEnum;
+ if (name.isEmpty()) {
+ kind = AnonymousEnum;
name = QStringLiteral("enum_") + QString::number(++d->m_anonymousEnumCount);
+#if !CLANG_NO_ENUMDECL_ISSCOPED
+ } else if (clang_EnumDecl_isScoped(cursor) != 0) {
+#else
+ } else if (clang_EnumDecl_isScoped4(this, cursor) != 0) {
+#endif
+ kind = EnumClass;
+ }
d->m_currentEnum.reset(new _EnumModelItem(d->m_model, name));
setFileName(cursor, d->m_currentEnum.data());
d->m_currentEnum->setScope(d->m_scope);
- d->m_currentEnum->setAnonymous(anonymous);
+ d->m_currentEnum->setEnumKind(kind);
+ d->m_currentEnum->setSigned(isSigned(clang_getEnumDeclIntegerType(cursor).kind));
if (!qSharedPointerDynamicCast<_ClassModelItem>(d->m_scopeStack.back()).isNull())
d->m_currentEnum->setAccessPolicy(accessPolicy(clang_getCXXAccessSpecifier(cursor)));
d->m_scopeStack.back()->addEnum(d->m_currentEnum);
@@ -661,8 +719,14 @@ BaseVisitor::StartTokenResult Builder::startToken(const CXCursor &cursor)
appendDiagnostic(d);
return Error;
}
+ EnumValue enumValue;
+ if (d->m_currentEnum->isSigned())
+ enumValue.setValue(clang_getEnumConstantDeclValue(cursor));
+ else
+ enumValue.setUnsignedValue(clang_getEnumConstantDeclUnsignedValue(cursor));
EnumeratorModelItem enumConstant(new _EnumeratorModelItem(d->m_model, name));
- enumConstant->setValue(d->cursorValueExpression(this, cursor));
+ enumConstant->setStringValue(d->cursorValueExpression(this, cursor));
+ enumConstant->setValue(enumValue);
d->m_currentEnum->addEnumerator(enumConstant);
}
break;
diff --git a/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt b/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt
index d78844dc8..a1995e96f 100644
--- a/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt
+++ b/sources/shiboken2/ApiExtractor/doc/CMakeLists.txt
@@ -1,10 +1,10 @@
-
+message("Building ApiExtractor documentation")
find_program(SPHINX sphinx-build DOC "Path to sphinx-build binary.")
if (SPHINX)
- message("-- sphinx-build - found")
+ message(STATUS "sphinx-build - found")
configure_file(conf.py.in conf.py @ONLY)
- add_custom_target(doc ${SPHINX} -b html -c . ${CMAKE_CURRENT_SOURCE_DIR} html )
+ add_custom_target(doc_apiextractor ${SPHINX} -b html -c . ${CMAKE_CURRENT_SOURCE_DIR} html )
else()
- message("-- sphinx-build - not found! doc target disabled")
-endif() \ No newline at end of file
+ message(STATUS "sphinx-build - not found! doc_apiextractor target disabled")
+endif()
diff --git a/sources/shiboken2/ApiExtractor/doc/conf.py.in b/sources/shiboken2/ApiExtractor/doc/conf.py.in
index 3a42707ad..7251aaccd 100644
--- a/sources/shiboken2/ApiExtractor/doc/conf.py.in
+++ b/sources/shiboken2/ApiExtractor/doc/conf.py.in
@@ -22,7 +22,8 @@ import sys, os
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.ifconfig', 'sphinx.ext.refcounting', 'sphinx.ext.coverage']
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',
+ 'sphinx.ext.ifconfig', 'sphinx.ext.coverage']
rst_epilog = """
.. |project| replace:: API Extractor
diff --git a/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst b/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst
index 646e76043..322f9bca6 100644
--- a/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst
+++ b/sources/shiboken2/ApiExtractor/doc/typesystem_specifying_types.rst
@@ -180,10 +180,6 @@ enum-type
Notice that the **enum-type** tag can either have **name** or **identified-by-value**
but not both.
- The *optional* boolean attribute **class** specifies whether the underlying
- enumeration is a C++ 11 enumeration class. In that case, the enumeration values
- need to be qualified by the enumeration name to match the C++ Syntax.
-
The **revision** attribute can be used to specify a revision for each type, easing the
production of ABI compatible bindings.
diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.cpp b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
index a35ca314b..1262f5901 100644
--- a/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
+++ b/sources/shiboken2/ApiExtractor/parser/codemodel.cpp
@@ -1014,22 +1014,32 @@ void _EnumModelItem::addEnumerator(EnumeratorModelItem item)
m_enumerators.append(item);
}
-bool _EnumModelItem::isAnonymous() const
+bool _EnumModelItem::isSigned() const
{
- return m_anonymous;
+ return m_signed;
}
-void _EnumModelItem::setAnonymous(bool anonymous)
+void _EnumModelItem::setSigned(bool s)
{
- m_anonymous = anonymous;
+ m_signed = s;
}
#ifndef QT_NO_DEBUG_STREAM
void _EnumModelItem::formatDebug(QDebug &d) const
{
_CodeModelItem::formatDebug(d);
- if (m_anonymous)
- d << " (anonymous)";
+ switch (m_enumKind) {
+ case CEnum:
+ break;
+ case AnonymousEnum:
+ d << " (anonymous)";
+ break;
+ case EnumClass:
+ d << " (class)";
+ break;
+ }
+ if (!m_signed)
+ d << " (unsigned)";
formatModelItemList(d, ", enumerators=", m_enumerators);
}
#endif // !QT_NO_DEBUG_STREAM
@@ -1039,22 +1049,21 @@ _EnumeratorModelItem::~_EnumeratorModelItem()
{
}
-QString _EnumeratorModelItem::value() const
+QString _EnumeratorModelItem::stringValue() const
{
- return m_value;
+ return m_stringValue;
}
-void _EnumeratorModelItem::setValue(const QString &value)
+void _EnumeratorModelItem::setStringValue(const QString &value)
{
- m_value = value;
+ m_stringValue = value;
}
#ifndef QT_NO_DEBUG_STREAM
void _EnumeratorModelItem::formatDebug(QDebug &d) const
{
_CodeModelItem::formatDebug(d);
- if (!m_value.isEmpty())
- d << ", value=\"" << m_value << '"';
+ d << ", value=" << m_value << ", stringValue=\"" << m_stringValue << '"';
}
#endif // !QT_NO_DEBUG_STREAM
diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel.h b/sources/shiboken2/ApiExtractor/parser/codemodel.h
index 2aaea1f78..ed0eedf7d 100644
--- a/sources/shiboken2/ApiExtractor/parser/codemodel.h
+++ b/sources/shiboken2/ApiExtractor/parser/codemodel.h
@@ -33,6 +33,7 @@
#include "codemodel_fwd.h"
#include "codemodel_enums.h"
+#include "enumvalue.h"
#include <QtCore/QHash>
#include <QtCore/QSet>
@@ -631,10 +632,10 @@ class _EnumModelItem: public _CodeModelItem
public:
DECLARE_MODEL_NODE(Enum)
- explicit _EnumModelItem(CodeModel *model, int kind = __node_kind)
- : _CodeModelItem(model, kind), m_accessPolicy(CodeModel::Public), m_anonymous(false) {}
explicit _EnumModelItem(CodeModel *model, const QString &name, int kind = __node_kind)
- : _CodeModelItem(model, name, kind), m_accessPolicy(CodeModel::Public), m_anonymous(false) {}
+ : _CodeModelItem(model, name, kind) {}
+ explicit _EnumModelItem(CodeModel *model, int kind = __node_kind)
+ : _CodeModelItem(model, kind) {}
~_EnumModelItem();
CodeModel::AccessPolicy accessPolicy() const;
@@ -642,17 +643,22 @@ public:
EnumeratorList enumerators() const;
void addEnumerator(EnumeratorModelItem item);
- bool isAnonymous() const;
- void setAnonymous(bool anonymous);
+
+ EnumKind enumKind() const { return m_enumKind; }
+ void setEnumKind(EnumKind kind) { m_enumKind = kind; }
#ifndef QT_NO_DEBUG_STREAM
void formatDebug(QDebug &d) const override;
#endif
+ bool isSigned() const;
+ void setSigned(bool s);
+
private:
- CodeModel::AccessPolicy m_accessPolicy;
+ CodeModel::AccessPolicy m_accessPolicy = CodeModel::Public;
EnumeratorList m_enumerators;
- bool m_anonymous;
+ EnumKind m_enumKind = CEnum;
+ bool m_signed = true;
};
class _EnumeratorModelItem: public _CodeModelItem
@@ -666,15 +672,19 @@ public:
: _CodeModelItem(model, name, kind) {}
~_EnumeratorModelItem();
- QString value() const;
- void setValue(const QString &value);
+ QString stringValue() const;
+ void setStringValue(const QString &stringValue);
+
+ EnumValue value() const { return m_value; }
+ void setValue(EnumValue v) { m_value = v; }
#ifndef QT_NO_DEBUG_STREAM
void formatDebug(QDebug &d) const override;
#endif
private:
- QString m_value;
+ QString m_stringValue;
+ EnumValue m_value;
};
class _TemplateParameterModelItem: public _CodeModelItem
diff --git a/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h b/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h
index aa8b051d8..3115a9a94 100644
--- a/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h
+++ b/sources/shiboken2/ApiExtractor/parser/codemodel_enums.h
@@ -35,4 +35,10 @@ enum ReferenceType {
RValueReference
};
+enum EnumKind {
+ CEnum, // Standard C: enum Foo { value1, value2 }
+ AnonymousEnum, // enum { value1, value2 }
+ EnumClass // C++ 11 : enum class Foo { value1, value2 }
+};
+
#endif // CODEMODEL_ENUMS_H
diff --git a/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp b/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp
new file mode 100644
index 000000000..84723eb14
--- /dev/null
+++ b/sources/shiboken2/ApiExtractor/parser/enumvalue.cpp
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of PySide2.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "enumvalue.h"
+
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+#include <QtCore/QTextStream>
+
+QString EnumValue::toString() const
+{
+ return m_type == EnumValue::Signed
+ ? QString::number(m_value) : QString::number(m_unsignedValue);
+}
+
+void EnumValue::setValue(qint64 v)
+{
+ m_value = v;
+ m_type = Signed;
+}
+
+void EnumValue::setUnsignedValue(quint64 v)
+{
+ m_unsignedValue = v;
+ m_type = Unsigned;
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+QDebug operator<<(QDebug d,const EnumValue &v)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d.noquote();
+ d << "EnumValue(";
+ if (v.m_type == EnumValue::Signed)
+ d << v.m_value;
+ else
+ d << v.m_unsignedValue << 'u';
+ d << ')';
+ return d;
+}
+#endif // !QT_NO_DEBUG_STREAM
+
+QTextStream &operator<<(QTextStream &s, const EnumValue &v)
+{
+ if (v.m_type == EnumValue::Signed)
+ s << v.m_value;
+ else
+ s << v.m_unsignedValue;
+ return s;
+}
diff --git a/sources/shiboken2/ApiExtractor/parser/enumvalue.h b/sources/shiboken2/ApiExtractor/parser/enumvalue.h
new file mode 100644
index 000000000..2e2070306
--- /dev/null
+++ b/sources/shiboken2/ApiExtractor/parser/enumvalue.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of PySide2.
+**
+** $QT_BEGIN_LICENSE:GPL-EXCEPT$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef ENUMVALUE_H
+#define ENUMVALUE_H
+
+#include <QtCore/QtGlobal>
+
+QT_FORWARD_DECLARE_CLASS(QDebug)
+QT_FORWARD_DECLARE_CLASS(QString)
+QT_FORWARD_DECLARE_CLASS(QTextStream)
+
+class EnumValue
+{
+public:
+ enum Type
+ {
+ Signed,
+ Unsigned
+ };
+
+ QString toString() const;
+
+ Type type() { return m_type; }
+ qint64 value() const { return m_value; }
+ quint64 unsignedValue() const { return m_unsignedValue; }
+
+ void setValue(qint64 v);
+ void setUnsignedValue(quint64 v);
+
+private:
+#ifndef QT_NO_DEBUG_STREAM
+ friend QDebug operator<<(QDebug, const EnumValue &);
+#endif
+ friend QTextStream &operator<<(QTextStream &, const EnumValue &);
+
+ union
+ {
+ qint64 m_value = 0;
+ quint64 m_unsignedValue;
+ };
+ Type m_type = Signed;
+};
+
+#endif // ENUMVALUE_H
diff --git a/sources/shiboken2/ApiExtractor/qtdocparser.cpp b/sources/shiboken2/ApiExtractor/qtdocparser.cpp
index 0ac87bd16..85c3473cd 100644
--- a/sources/shiboken2/ApiExtractor/qtdocparser.cpp
+++ b/sources/shiboken2/ApiExtractor/qtdocparser.cpp
@@ -68,6 +68,17 @@ static void formatFunctionArgTypeQuery(QTextStream &str, const AbstractMetaArgum
str << name;
}
break;
+ case AbstractMetaType::ContainerPattern: { // QVector<int>
+ str << metaType->typeEntry()->qualifiedCppName() << '<';
+ const auto instantiations = metaType->instantiations();
+ for (int i = 0, size = instantiations.size(); i < size; ++i) {
+ if (i)
+ str << ", ";
+ str << instantiations.at(i)->typeEntry()->qualifiedCppName();
+ }
+ str << '>';
+ }
+ break;
default: // Fully qualify enums (Qt::AlignmentFlag), nested classes, etc.
str << metaType->typeEntry()->qualifiedCppName();
break;
@@ -218,7 +229,8 @@ Documentation QtDocParser::retrieveModuleDocumentation(const QString& name)
xquery.setFocus(QUrl(sourceFile));
// Module documentation
- QString query = QLatin1String("/WebXML/document/page[@name=\"") + moduleName + QLatin1String("\"]/description");
+ QString query = QLatin1String("/WebXML/document/module[@name=\"")
+ + moduleName + QLatin1String("\"]/description");
const Documentation doc = getDocumentation(xquery, query, DocModificationList());
if (doc.isEmpty())
qCWarning(lcShiboken(), "%s", qPrintable(msgCannotFindDocumentation(sourceFile, "module", name, query)));
diff --git a/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp
index cbeb216c9..eb10fc8a0 100644
--- a/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp
+++ b/sources/shiboken2/ApiExtractor/tests/testarrayargument.cpp
@@ -133,7 +133,7 @@ void TestArrayArgument::testArrayArgumentWithSizeDefinedByEnumValue()
const AbstractMetaArgument* arg = classA->functions().last()->arguments().first();
QVERIFY(arg->type()->isArray());
- QCOMPARE(arg->type()->arrayElementCount(), nvalues->value());
+ QCOMPARE(arg->type()->arrayElementCount(), nvalues->value().value());
QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double"));
};
@@ -164,7 +164,7 @@ void TestArrayArgument::testArrayArgumentWithSizeDefinedByEnumValueFromGlobalEnu
const AbstractMetaArgument* arg = classA->functions().last()->arguments().first();
QVERIFY(arg->type()->isArray());
- QCOMPARE(arg->type()->arrayElementCount(), nvalues->value());
+ QCOMPARE(arg->type()->arrayElementCount(), nvalues->value().value());
QCOMPARE(arg->type()->arrayElementType()->name(), QLatin1String("double"));
};
diff --git a/sources/shiboken2/ApiExtractor/tests/testenum.cpp b/sources/shiboken2/ApiExtractor/tests/testenum.cpp
index 55c098840..970f6d00c 100644
--- a/sources/shiboken2/ApiExtractor/tests/testenum.cpp
+++ b/sources/shiboken2/ApiExtractor/tests/testenum.cpp
@@ -149,12 +149,12 @@ void TestEnum::testAnonymousEnum()
AbstractMetaEnumValue* enumValueA0 = anonEnumA1->values().first();
QCOMPARE(enumValueA0->name(), QLatin1String("A0"));
- QCOMPARE(enumValueA0->value(), 0);
+ QCOMPARE(enumValueA0->value().value(), 0);
QCOMPARE(enumValueA0->stringValue(), QString());
AbstractMetaEnumValue* enumValueA1 = anonEnumA1->values().last();
QCOMPARE(enumValueA1->name(), QLatin1String("A1"));
- QCOMPARE(enumValueA1->value(), 1);
+ QCOMPARE(enumValueA1->value().value(), 1);
QCOMPARE(enumValueA1->stringValue(), QString());
AbstractMetaEnum* anonEnumIsThis = classes[0]->findEnum(QLatin1String("isThis"));
@@ -164,12 +164,12 @@ void TestEnum::testAnonymousEnum()
AbstractMetaEnumValue* enumValueIsThis = anonEnumIsThis->values().first();
QCOMPARE(enumValueIsThis->name(), QLatin1String("isThis"));
- QCOMPARE(enumValueIsThis->value(), static_cast<int>(true));
+ QCOMPARE(enumValueIsThis->value().value(), static_cast<int>(true));
QCOMPARE(enumValueIsThis->stringValue(), QLatin1String("true"));
AbstractMetaEnumValue* enumValueIsThat = anonEnumIsThis->values().last();
QCOMPARE(enumValueIsThat->name(), QLatin1String("isThat"));
- QCOMPARE(enumValueIsThat->value(), static_cast<int>(false));
+ QCOMPARE(enumValueIsThat->value().value(), static_cast<int>(false));
QCOMPARE(enumValueIsThat->stringValue(), QLatin1String("false"));
}
@@ -195,12 +195,12 @@ void TestEnum::testGlobalEnums()
AbstractMetaEnumValue* enumValueA0 = enumA->values().first();
QCOMPARE(enumValueA0->name(), QLatin1String("A0"));
- QCOMPARE(enumValueA0->value(), 0);
+ QCOMPARE(enumValueA0->value().value(), 0);
QCOMPARE(enumValueA0->stringValue(), QString());
AbstractMetaEnumValue* enumValueA1 = enumA->values().last();
QCOMPARE(enumValueA1->name(), QLatin1String("A1"));
- QCOMPARE(enumValueA1->value(), 1);
+ QCOMPARE(enumValueA1->value().value(), 1);
QCOMPARE(enumValueA1->stringValue(), QString());
AbstractMetaEnum* enumB = globalEnums.last();
@@ -208,12 +208,12 @@ void TestEnum::testGlobalEnums()
AbstractMetaEnumValue* enumValueB0 = enumB->values().first();
QCOMPARE(enumValueB0->name(), QLatin1String("B0"));
- QCOMPARE(enumValueB0->value(), 2);
+ QCOMPARE(enumValueB0->value().value(), 2);
QCOMPARE(enumValueB0->stringValue(), QLatin1String("2"));
AbstractMetaEnumValue* enumValueB1 = enumB->values().last();
QCOMPARE(enumValueB1->name(), QLatin1String("B1"));
- QCOMPARE(enumValueB1->value(), 4);
+ QCOMPARE(enumValueB1->value().value(), 4);
QCOMPARE(enumValueB1->stringValue(), QLatin1String("0x4"));
}
@@ -245,12 +245,12 @@ void TestEnum::testEnumValueFromNeighbourEnum()
AbstractMetaEnumValue* enumValueA0 = enumA->values().first();
QCOMPARE(enumValueA0->name(), QLatin1String("ValueA0"));
- QCOMPARE(enumValueA0->value(), 0);
+ QCOMPARE(enumValueA0->value().value(), 0);
QCOMPARE(enumValueA0->stringValue(), QString());
AbstractMetaEnumValue* enumValueA1 = enumA->values().last();
QCOMPARE(enumValueA1->name(), QLatin1String("ValueA1"));
- QCOMPARE(enumValueA1->value(), 1);
+ QCOMPARE(enumValueA1->value().value(), 1);
QCOMPARE(enumValueA1->stringValue(), QString());
AbstractMetaEnum* enumB = classes[0]->findEnum(QLatin1String("EnumB"));
@@ -259,12 +259,12 @@ void TestEnum::testEnumValueFromNeighbourEnum()
AbstractMetaEnumValue* enumValueB0 = enumB->values().first();
QCOMPARE(enumValueB0->name(), QLatin1String("ValueB0"));
- QCOMPARE(enumValueB0->value(), 1);
+ QCOMPARE(enumValueB0->value().value(), 1);
QCOMPARE(enumValueB0->stringValue(), QLatin1String("A::ValueA1"));
AbstractMetaEnumValue* enumValueB1 = enumB->values().last();
QCOMPARE(enumValueB1->name(), QLatin1String("ValueB1"));
- QCOMPARE(enumValueB1->value(), 0);
+ QCOMPARE(enumValueB1->value().value(), 0);
QCOMPARE(enumValueB1->stringValue(), QLatin1String("ValueA0"));
}
@@ -272,21 +272,25 @@ void TestEnum::testEnumValueFromExpression()
{
const char* cppCode ="\
struct A {\n\
- enum EnumA {\n\
+ enum EnumA : unsigned {\n\
ValueA0 = 3u,\n\
ValueA1 = ~3u,\n\
- ValueA2 = ~3,\n\
+ ValueA2 = 0xffffffff,\n\
ValueA3 = 0xf0,\n\
ValueA4 = 8 |ValueA3,\n\
ValueA5 = ValueA3|32,\n\
ValueA6 = ValueA3 >> 1,\n\
ValueA7 = ValueA3 << 1\n\
};\n\
+ enum EnumB : int {\n\
+ ValueB0 = ~3,\n\
+ };\n\
};\n";
const char* xmlCode = "\
<typesystem package=\"Foo\">\n\
<value-type name='A'>\n\
<enum-type name='EnumA'/>\n\
+ <enum-type name='EnumB'/>\n\
</value-type>\n\
</typesystem>\n";
@@ -298,47 +302,58 @@ void TestEnum::testEnumValueFromExpression()
AbstractMetaEnum* enumA = classA->findEnum(QLatin1String("EnumA"));
QVERIFY(enumA);
+ QVERIFY(!enumA->isSigned());
QCOMPARE(enumA->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumA"));
AbstractMetaEnumValue* valueA0 = enumA->values().at(0);
QCOMPARE(valueA0->name(), QLatin1String("ValueA0"));
QCOMPARE(valueA0->stringValue(), QLatin1String("3u"));
- QCOMPARE(valueA0->value(), (int) 3u);
+ QCOMPARE(valueA0->value().unsignedValue(), 3u);
AbstractMetaEnumValue* valueA1 = enumA->values().at(1);
QCOMPARE(valueA1->name(), QLatin1String("ValueA1"));
QCOMPARE(valueA1->stringValue(), QLatin1String("~3u"));
- QCOMPARE(valueA1->value(), (int) ~3u);
+ QCOMPARE(valueA1->value().unsignedValue(), ~3u);
AbstractMetaEnumValue* valueA2 = enumA->values().at(2);
QCOMPARE(valueA2->name(), QLatin1String("ValueA2"));
- QCOMPARE(valueA2->stringValue(), QLatin1String("~3"));
- QCOMPARE(valueA2->value(), ~3);
+ QCOMPARE(valueA2->stringValue(), QLatin1String("0xffffffff"));
+ QCOMPARE(valueA2->value().unsignedValue(), 0xffffffffu);
AbstractMetaEnumValue* valueA3 = enumA->values().at(3);
QCOMPARE(valueA3->name(), QLatin1String("ValueA3"));
QCOMPARE(valueA3->stringValue(), QLatin1String("0xf0"));
- QCOMPARE(valueA3->value(), 0xf0);
+ QCOMPARE(valueA3->value().unsignedValue(), 0xf0u);
AbstractMetaEnumValue* valueA4 = enumA->values().at(4);
QCOMPARE(valueA4->name(), QLatin1String("ValueA4"));
QCOMPARE(valueA4->stringValue(), QLatin1String("8 |ValueA3"));
- QCOMPARE(valueA4->value(), 8|0xf0);
+ QCOMPARE(valueA4->value().unsignedValue(), 8|0xf0u);
AbstractMetaEnumValue* valueA5 = enumA->values().at(5);
QCOMPARE(valueA5->name(), QLatin1String("ValueA5"));
QCOMPARE(valueA5->stringValue(), QLatin1String("ValueA3|32"));
- QCOMPARE(valueA5->value(), 0xf0|32);
+ QCOMPARE(valueA5->value().unsignedValue(), 0xf0u|32);
AbstractMetaEnumValue* valueA6 = enumA->values().at(6);
QCOMPARE(valueA6->name(), QLatin1String("ValueA6"));
QCOMPARE(valueA6->stringValue(), QLatin1String("ValueA3 >> 1"));
- QCOMPARE(valueA6->value(), 0xf0 >> 1);
+ QCOMPARE(valueA6->value().unsignedValue(), 0xf0u >> 1);
AbstractMetaEnumValue* valueA7 = enumA->values().at(7);
QCOMPARE(valueA7->name(), QLatin1String("ValueA7"));
QCOMPARE(valueA7->stringValue(), QLatin1String("ValueA3 << 1"));
- QCOMPARE(valueA7->value(), 0xf0 << 1);
+ QCOMPARE(valueA7->value().unsignedValue(), 0xf0u << 1);
+
+ const AbstractMetaEnum *enumB = classA->findEnum(QLatin1String("EnumB"));
+ QVERIFY(enumB);
+ QVERIFY(enumB->isSigned());
+ QCOMPARE(enumB->typeEntry()->qualifiedCppName(), QLatin1String("A::EnumB"));
+ QCOMPARE(enumB->values().size(), 1);
+ const AbstractMetaEnumValue *valueB0 = enumB->values().at(0);
+ QCOMPARE(valueB0->name(), QLatin1String("ValueB0"));
+ QCOMPARE(valueB0->stringValue(), QLatin1String("~3"));
+ QCOMPARE(valueB0->value().value(), ~3);
}
void TestEnum::testPrivateEnum()
@@ -375,12 +390,12 @@ void TestEnum::testPrivateEnum()
AbstractMetaEnumValue* pub0 = publicEnum->values().first();
QCOMPARE(pub0->name(), QLatin1String("Pub0"));
- QCOMPARE(pub0->value(), 0x0f);
+ QCOMPARE(pub0->value().value(), 0x0f);
QCOMPARE(pub0->stringValue(), QLatin1String("Priv0"));
AbstractMetaEnumValue* pub1 = publicEnum->values().last();
QCOMPARE(pub1->name(), QLatin1String("Pub1"));
- QCOMPARE(pub1->value(), 0xf0);
+ QCOMPARE(pub1->value().value(), 0xf0);
QCOMPARE(pub1->stringValue(), QLatin1String("A::Priv1"));
}
@@ -408,12 +423,12 @@ void TestEnum::testTypedefEnum()
AbstractMetaEnumValue* enumValueA0 = enumA->values().first();
QCOMPARE(enumValueA0->name(), QLatin1String("A0"));
- QCOMPARE(enumValueA0->value(), 0);
+ QCOMPARE(enumValueA0->value().value(), 0);
QCOMPARE(enumValueA0->stringValue(), QLatin1String(""));
AbstractMetaEnumValue* enumValueA1 = enumA->values().last();
QCOMPARE(enumValueA1->name(), QLatin1String("A1"));
- QCOMPARE(enumValueA1->value(), 1);
+ QCOMPARE(enumValueA1->value().value(), 1);
QCOMPARE(enumValueA1->stringValue(), QString());
}
diff --git a/sources/shiboken2/ApiExtractor/typesystem.cpp b/sources/shiboken2/ApiExtractor/typesystem.cpp
index 600536aba..0a47b9b17 100644
--- a/sources/shiboken2/ApiExtractor/typesystem.cpp
+++ b/sources/shiboken2/ApiExtractor/typesystem.cpp
@@ -963,11 +963,6 @@ bool Handler::startElement(const QStringRef &n, const QXmlStreamAttributes &atts
m_currentEnum =
new EnumTypeEntry(QStringList(names.mid(0, names.size() - 1)).join(colonColon()),
names.constLast(), since);
- if (!attributes.value(enumIdentifiedByValueAttribute()).isEmpty()) {
- m_currentEnum->setEnumKind(EnumTypeEntry::AnonymousEnum);
- } else if (convertBoolean(attributes.value(classAttribute()), classAttribute(), false)) {
- m_currentEnum->setEnumKind(EnumTypeEntry::EnumClass);
- }
element->entry = m_currentEnum;
m_currentEnum->setCodeGeneration(m_generate);
m_currentEnum->setTargetLangPackage(m_defaultPackage);
diff --git a/sources/shiboken2/ApiExtractor/typesystem.h b/sources/shiboken2/ApiExtractor/typesystem.h
index 2f534c93d..eae064134 100644
--- a/sources/shiboken2/ApiExtractor/typesystem.h
+++ b/sources/shiboken2/ApiExtractor/typesystem.h
@@ -1041,12 +1041,6 @@ private:
class EnumTypeEntry : public TypeEntry
{
public:
- enum EnumKind {
- CEnum, // Standard C: enum Foo { value1, value2 }
- AnonymousEnum, // enum { value1, value2 }
- EnumClass // C++ 11 : enum class Foo { value1, value2 }
- };
-
explicit EnumTypeEntry(const QString &nspace, const QString &enumName,
const QVersionNumber &vr);
@@ -1068,9 +1062,6 @@ public:
m_qualifier = q;
}
- EnumKind enumKind() const { return m_enumKind; }
- void setEnumKind(EnumKind kind) { m_enumKind = kind; }
-
bool preferredConversion() const override;
bool isBoundsChecked() const
@@ -1136,8 +1127,6 @@ public:
m_forceInteger = force;
}
- bool isAnonymous() const { return m_enumKind == AnonymousEnum; }
-
private:
QString m_packageName;
QString m_qualifier;
@@ -1150,8 +1139,6 @@ private:
FlagsTypeEntry *m_flags = nullptr;
- EnumKind m_enumKind = CEnum;
-
bool m_extensible = false;
bool m_forceInteger = false;
};
diff --git a/sources/shiboken2/CMakeLists.txt b/sources/shiboken2/CMakeLists.txt
index e774a172b..b65e32974 100644
--- a/sources/shiboken2/CMakeLists.txt
+++ b/sources/shiboken2/CMakeLists.txt
@@ -56,6 +56,9 @@ endmacro()
set(CLANG_DIR "")
set(CLANG_DIR_SOURCE "")
+set(clang_not_found_message "Unable to detect CLANG location by checking LLVM_INSTALL_DIR, \
+ CLANG_INSTALL_DIR or running llvm-config.")
+
if (DEFINED ENV{LLVM_INSTALL_DIR})
set(CLANG_DIR $ENV{LLVM_INSTALL_DIR})
string(REPLACE "_ARCH_" "${PYTHON_ARCH}" CLANG_DIR "${CLANG_DIR}")
@@ -69,6 +72,10 @@ else ()
get_llvm_config()
endif()
set(CLANG_DIR_SOURCE "${LLVM_CONFIG}")
+ if ("${CLANG_DIR_SOURCE}" STREQUAL "")
+ message(FATAL_ERROR "${clang_not_found_message}")
+ endif()
+
EXEC_PROGRAM("${LLVM_CONFIG}" ARGS "--prefix" OUTPUT_VARIABLE CLANG_DIR)
if (NOT "${CLANG_DIR}" STREQUAL "")
EXEC_PROGRAM("${LLVM_CONFIG}" ARGS "--version" OUTPUT_VARIABLE CLANG_VERSION)
@@ -79,7 +86,7 @@ else ()
endif()
if ("${CLANG_DIR}" STREQUAL "")
- message(FATAL_ERROR "Unable to detect CLANG location by checking LLVM_INSTALL_DIR, CLANG_INSTALL_DIR or running llvm-config.")
+ message(FATAL_ERROR "${clang_not_found_message}")
elseif (NOT IS_DIRECTORY ${CLANG_DIR})
message(FATAL_ERROR "${CLANG_DIR} detected by ${CLANG_DIR_SOURCE} does not exist.")
endif()
diff --git a/sources/shiboken2/doc/README.md b/sources/shiboken2/doc/README.md
new file mode 100644
index 000000000..2575eafd2
--- /dev/null
+++ b/sources/shiboken2/doc/README.md
@@ -0,0 +1,12 @@
+# Shiboken Documentation
+
+The documentation was written and needs to be generated
+with [python-sphinx](http://www.sphinx-doc.org/en/master/)
+
+### Images
+
+The SVG diagrams use the Qt color scheme.
+The font also follows Qt styling, and it is called `Titillium`.
+It can be download from:
+* https://fonts.google.com/specimen/Titillium+Web
+* https://www.fontsquirrel.com/fonts/Titillium
diff --git a/sources/shiboken2/doc/codeinjectionsemantics.rst b/sources/shiboken2/doc/codeinjectionsemantics.rst
index d748a3aae..bf3ddbe5e 100644
--- a/sources/shiboken2/doc/codeinjectionsemantics.rst
+++ b/sources/shiboken2/doc/codeinjectionsemantics.rst
@@ -2,11 +2,12 @@
Code Injection Semantics
************************
-API Extractor provides the `inject-code
-<http://www.pyside.org/docs/apiextractor/typesystem_manipulating_objects.html#inject-code>`_ tag
-allowing the user to put custom written code to on specific locations of the generated code.
-Yet this is only part of what is needed to generate proper binding code, where the custom code
-should be written to depends upon the technology used on the generated binding code.
+API Extractor provides the `inject-code`_ tag allowing the user to put custom
+written code to on specific locations of the generated code.
+Yet this is only part of what is needed to generate proper binding code, where
+the custom code should be written to depends upon the technology used on the
+generated binding code.
+
This is the ``inject-code`` tag options that matters to |project|.
@@ -16,6 +17,7 @@ This is the ``inject-code`` tag options that matters to |project|.
// custom code
</inject-code>
+
Conventions
===========
@@ -86,7 +88,7 @@ The following table describes the semantics of ``inject-code`` tag as used on
| | | |signature. |
| +------+---------+--------------------------------------------------------------+
| |shell |beginning|Used only for virtual functions. The code is injected when the|
- | | | |function does not has a pyhton implementation, then the code |
+ | | | |function does not has a Python implementation, then the code |
| | | |is inserted before c++ call |
| | +---------+--------------------------------------------------------------+
| | |end |Same as above, but the code is inserted after c++ call |
@@ -158,7 +160,7 @@ If the argument is removed and no default value is provided, the generator will
not write any call to the method and expect the ``modify-function - target/beginning``
code injection to call the original C++ method on its own terms. If even this
custom code is not provided the generator will put an ``#error`` clause to
-prevent compilation of erroneus binding code.
+prevent compilation of erroneous binding code.
Calling the method with your own hands always!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -352,7 +354,7 @@ Code injections to the class Python initialization function.
Code Injection for Modules
==========================
-The C++ libraries are wapped as Python modules, a collection of classes,
+The C++ libraries are wrapped as Python modules, a collection of classes,
functions, enums and namespaces. |project| creates wrapper files for all of
them and also one extra ``MODULENAME_module_wrapper.cpp`` to register the whole
module. Code injection xml tags who have the ``typesystem`` tag as parent will
@@ -395,3 +397,5 @@ to prevent bad custom code to pass unnoticed.
// Start of ``MODULENAME_module_wrapper.cpp``
+
+.. _`inject-code`: http://www.pyside.org/docs/apiextractor/typesystem_manipulating_objects.html#inject-code
diff --git a/sources/shiboken2/doc/dependency-pyqtb.svg b/sources/shiboken2/doc/dependency-pyqtb.svg
deleted file mode 100644
index a458bf6fb..000000000
--- a/sources/shiboken2/doc/dependency-pyqtb.svg
+++ /dev/null
@@ -1,600 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="800"
- height="340"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docname="dependency-pyqtb.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="/var/www/lauro/dependency-pyqtb.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow1Lstart"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lstart"
- style="overflow:visible">
- <path
- id="path3270"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(0.8,0,0,0.8,10,0)" />
- </marker>
- <marker
- inkscape:stockid="Arrow1Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow1Lend"
- style="overflow:visible">
- <path
- id="path3679"
- d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z"
- style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
- transform="matrix(-0.8,0,0,-0.8,-10,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective10" />
- <inkscape:perspective
- id="perspective3480"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 526.18109 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3498"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 526.18109 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective3541"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 526.18109 : 1"
- sodipodi:type="inkscape:persp3d" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.0425"
- inkscape:cx="400"
- inkscape:cy="170"
- inkscape:document-units="px"
- inkscape:current-layer="g3995"
- showgrid="false"
- showguides="true"
- inkscape:guide-bbox="true"
- inkscape:window-width="1280"
- inkscape:window-height="951"
- inkscape:window-x="0"
- inkscape:window-y="25" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-94.976306,-355.09425)" />
- <g
- id="g4087"
- transform="translate(2.4157429e-6,1.9999951)">
- <g
- id="g3995"
- transform="translate(6,-3.2661035e-8)">
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.66823119px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:none;stroke-opacity:1"
- d="M 281.95594,47.06539 L 314.12853,47.06538"
- id="path2877"
- inkscape:connector-type="polyline" />
- <g
- id="g3801"
- transform="translate(-9.3125054,-154.20033)">
- <rect
- y="286.49988"
- x="322.2547"
- height="73.367416"
- width="194.85175"
- id="rect3595"
- style="fill:#9ac5ff;fill-opacity:1;fill-rule:evenodd;stroke:#003378;stroke-width:0.8142156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- ry="10.318988"
- rx="8.598484" />
- <g
- transform="translate(1.7229236,-30.915768)"
- id="g3599">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="336.95081"
- id="text2443"><tspan
- sodipodi:role="line"
- id="tspan2445"
- x="329.46826"
- y="336.95081">API Extractor</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="352.61548"
- id="text2447"><tspan
- sodipodi:role="line"
- id="tspan2449"
- x="329.46826"
- y="352.61548">0.2</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="368.15546"
- id="text2451"><tspan
- sodipodi:role="line"
- x="329.46826"
- y="368.15546"
- id="tspan2453">Headers and libraries - compile-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="383.47839"
- id="text2455"><tspan
- sodipodi:role="line"
- id="tspan2457"
- x="329.46826"
- y="383.47839">LGPL version 2.1</tspan></text>
- </g>
- </g>
- <g
- id="g3729"
- transform="translate(-9.3125054,-153.6367)">
- <rect
- y="164.01837"
- x="322.2547"
- height="73.367416"
- width="194.85175"
- id="rect2459"
- style="fill:#9ac5ff;fill-opacity:1;fill-rule:evenodd;stroke:#003378;stroke-width:0.8142156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- ry="10.318988"
- rx="8.598484" />
- <g
- transform="translate(3.673984,2.3276517)"
- id="g3585">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="181.23659"
- id="text2461"><tspan
- sodipodi:role="line"
- id="tspan2463"
- x="329.46826"
- y="181.23659">Shiboken (generator)</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="196.90126"
- id="text2465"><tspan
- sodipodi:role="line"
- id="tspan2467"
- x="329.46826"
- y="196.90126">0.1</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="212.44124"
- id="text2469"><tspan
- sodipodi:role="line"
- x="329.46826"
- y="212.44124"
- id="tspan2471">Binary executable - compile-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="227.76418"
- id="text2473"><tspan
- sodipodi:role="line"
- id="tspan2475"
- x="329.46826"
- y="227.76418">GPL version 2</tspan></text>
- </g>
- </g>
- <g
- id="g3789"
- transform="translate(-9.3125054,-154.20033)">
- <rect
- y="406.48441"
- x="322.2547"
- height="73.367416"
- width="194.85175"
- id="rect3597"
- style="fill:#f3a6a6;fill-opacity:1;fill-rule:evenodd;stroke:#6a0e0e;stroke-width:0.8142156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- ry="10.318988"
- rx="8.598484" />
- <g
- transform="translate(-0.7447933,-64)"
- id="g3633">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#350707;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="489.09369"
- id="text2565"><tspan
- sodipodi:role="line"
- id="tspan2567"
- x="329.46826"
- y="489.09369">boost::graph</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#350707;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="504.75836"
- id="text2569"><tspan
- sodipodi:role="line"
- id="tspan2571"
- x="329.46826"
- y="504.75836">1.38.0</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#350707;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="520.29834"
- id="text2573"><tspan
- sodipodi:role="line"
- x="329.46826"
- y="520.29834"
- id="tspan2575">headers and libraries - compile-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#350707;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="535.62128"
- id="text2577"><tspan
- sodipodi:role="line"
- id="tspan2579"
- x="329.46826"
- y="535.62128">Boost Software License 1.0</tspan></text>
- </g>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.77180147px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:none;stroke-opacity:1"
- d="M 410.36806,130.70564 L 410.36806,83.52386"
- id="path2879"
- inkscape:connector-type="polyline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.77360356px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:none;stroke-opacity:1"
- d="M 410.36806,252.57322 L 410.36806,207.23899"
- id="path2881"
- inkscape:connector-type="polyline" />
- <g
- id="g3565"
- transform="translate(1.4608973,-106.88798)">
- <rect
- ry="22.567146"
- y="268.8403"
- x="6.7667637"
- height="163.45378"
- width="273.78238"
- id="rect7541"
- style="fill:#e3e2db;stroke:#000000;stroke-width:1.30499184;stroke-opacity:1"
- rx="22.567146" />
- <g
- transform="translate(0.2849671,3.2991583)"
- id="g3547">
- <g
- id="g3516"
- transform="translate(0,63.999998)">
- <text
- id="text7543"
- y="339.74512"
- x="76.614265"
- style="font-size:20.61732101px;font-style:normal;font-weight:normal;fill:#350707;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="339.74512"
- x="76.614265"
- id="tspan7545"
- sodipodi:role="line">Boost</tspan></text>
- <rect
- ry="6.4285707"
- y="321.55374"
- x="21.614267"
- height="22.5"
- width="43.163269"
- id="rect7555"
- style="fill:#f3a6a6;fill-opacity:1;stroke:#6a0e0e;stroke-width:0.64285713;stroke-opacity:1"
- rx="6.4285707" />
- </g>
- <g
- id="g3521"
- transform="translate(0,-2.9523642)">
- <text
- id="text7547"
- y="372.67505"
- x="76.614265"
- style="font-size:20.61732101px;font-style:normal;font-weight:normal;fill:#1c2d0f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="372.67505"
- x="76.614265"
- id="tspan7549"
- sodipodi:role="line">Qt Software</tspan></text>
- <rect
- ry="6.4285707"
- y="355.4823"
- x="21.614267"
- height="22.5"
- width="43.163269"
- id="rect7561"
- style="fill:#97ce6c;fill-opacity:1;stroke:#385a1e;stroke-width:0.64285713;stroke-opacity:1"
- rx="6.4285707" />
- </g>
- <g
- id="g3486"
- transform="translate(0,2.8342009e-5)">
- <text
- id="text7551"
- y="304.38055"
- x="76.614265"
- style="font-size:20.61732101px;font-style:normal;font-weight:normal;fill:#00193c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="304.38055"
- x="76.614265"
- id="tspan7553"
- sodipodi:role="line">INdT/Nokia</tspan></text>
- <rect
- ry="6.4285707"
- y="286.4823"
- x="21.614267"
- height="22.5"
- width="43.163269"
- id="rect7563"
- style="fill:#9ac5ff;fill-opacity:1;stroke:#003378;stroke-width:0.64285713;stroke-opacity:1"
- rx="6.4285707" />
- </g>
- <g
- id="g3526"
- transform="translate(-1.3182277,-35.976168)"
- style="fill:#ffe052;fill-opacity:1">
- <text
- id="text3528"
- y="372.67505"
- x="76.614265"
- style="font-size:20.61732101px;font-style:normal;font-weight:normal;fill:#3c3100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- y="372.67505"
- x="76.614265"
- id="tspan3530"
- sodipodi:role="line">Python Foundation</tspan></text>
- <rect
- ry="6.4285707"
- y="355.4823"
- x="21.614267"
- height="22.5"
- width="43.163269"
- id="rect3532"
- style="fill:#ffe052;fill-opacity:1;stroke:#786200;stroke-width:0.64285713;stroke-opacity:1"
- rx="6.4285707" />
- </g>
- </g>
- </g>
- <g
- id="g3717"
- transform="translate(232.28126,-66.767457)">
- <rect
- y="77.149132"
- x="322.2547"
- height="73.367416"
- width="194.85175"
- id="rect3657"
- style="fill:#9ac5ff;fill-opacity:1;fill-rule:evenodd;stroke:#003378;stroke-width:0.8142156;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- ry="10.318988"
- rx="8.598484" />
- <g
- transform="translate(4.8773009,-84.541588)"
- id="g3659">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="181.23659"
- id="text3661"><tspan
- sodipodi:role="line"
- id="tspan3663"
- x="329.46826"
- y="181.23659">libshiboken</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="196.90126"
- id="text3665"><tspan
- sodipodi:role="line"
- id="tspan3667"
- x="329.46826"
- y="196.90126">0.1</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="212.44124"
- id="text3669"><tspan
- sodipodi:role="line"
- x="329.46826"
- y="212.44124"
- id="tspan3671">Headers and libraries - compile-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#00183c;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="227.76418"
- id="text3673"><tspan
- sodipodi:role="line"
- id="tspan3675"
- x="329.46826"
- y="227.76418">LGPL version 2.1</tspan></text>
- </g>
- </g>
- <g
- id="g3752"
- transform="translate(-10.802055,-155.79173)">
- <rect
- rx="8.3239012"
- y="166.21593"
- x="18.860012"
- height="73.282379"
- width="274.18781"
- id="rect2417"
- style="fill:#97ce6c;fill-opacity:1;fill-rule:evenodd;stroke:#385a1e;stroke-width:0.96558368px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- ry="9.2689295" />
- <g
- id="g3741">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#1c2d0f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="29.111408"
- y="183.02223"
- id="text2419"><tspan
- sodipodi:role="line"
- id="tspan2421"
- x="29.111408"
- y="183.02223">Qt 4.5</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#1c2d0f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="29.111408"
- y="198.68694"
- id="text2423"><tspan
- sodipodi:role="line"
- id="tspan2425"
- x="29.111408"
- y="198.68694">4.5</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#1c2d0f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="29.111408"
- y="214.22688"
- id="text2427"><tspan
- sodipodi:role="line"
- id="tspan2429"
- x="29.111408"
- y="214.22688">headers and libraries - compile-time and run-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#1c2d0f;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="29.111408"
- y="224.19267"
- id="text2431"><tspan
- sodipodi:role="line"
- id="tspan2433"
- x="29.111408"
- y="224.19267">GNU General Public License v3 /</tspan><tspan
- id="tspan2472"
- sodipodi:role="line"
- x="29.111408"
- y="234.5208">GNU Lesser General Public Licence v2.1</tspan></text>
- </g>
- </g>
- <g
- id="g3765"
- transform="translate(201.65125,55.15042)">
- <rect
- y="77.208275"
- x="322.31384"
- height="73.24913"
- width="255.99348"
- id="rect3767"
- style="fill:#ffe052;fill-opacity:1;fill-rule:evenodd;stroke:#786200;stroke-width:0.93250537;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- ry="10.318988"
- rx="8.598484" />
- <g
- transform="translate(4.8773009,-84.541588)"
- id="g3769">
- <text
- xml:space="preserve"
- style="font-size:16.27989578px;font-style:normal;font-weight:normal;fill:#3c3100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="181.23659"
- id="text3771"><tspan
- sodipodi:role="line"
- id="tspan3773"
- x="329.46826"
- y="181.23659">Python</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.40044498px;font-style:normal;font-weight:normal;fill:#3c3100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="196.90126"
- id="text3775"><tspan
- sodipodi:role="line"
- id="tspan3777"
- x="329.46826"
- y="196.90126">2.6</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:9.33067703px;font-style:normal;font-weight:normal;fill:#3c3100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="212.44124"
- id="text3779"><tspan
- sodipodi:role="line"
- x="329.46826"
- y="212.44124"
- id="tspan3781">Headers and libraries - compile-time and run-time</tspan></text>
- <text
- xml:space="preserve"
- style="font-size:8.26250458px;font-style:normal;font-weight:normal;fill:#3c3100;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="329.46826"
- y="227.76418"
- id="text3783"><tspan
- sodipodi:role="line"
- id="tspan3785"
- x="329.46826"
- y="227.76418">Python license</tspan></text>
- </g>
- </g>
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.77180147px;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#Arrow1Lstart);marker-end:none;stroke-opacity:1"
- d="M 651.96184,131.80908 L 651.96184,84.6273"
- id="path3787"
- inkscape:connector-type="polyline" />
- </g>
- </g>
-</svg>
diff --git a/sources/shiboken2/doc/faq.rst b/sources/shiboken2/doc/faq.rst
index 77e0fbdfc..4b2bf9eea 100644
--- a/sources/shiboken2/doc/faq.rst
+++ b/sources/shiboken2/doc/faq.rst
@@ -2,8 +2,8 @@
Frequently Asked Questions
**************************
-This is a list of Frequently Asked Questions about |project|. Feel free to
-suggest new entries!
+This is a list of Frequently Asked Questions about |project|.
+Feel free to suggest new entries using our `Mailing list`_ or our IRC channel!
General
=======
@@ -11,17 +11,20 @@ General
What is Shiboken?
-----------------
-Shiboken is a `GeneratorRunner <http://www.pyside.org/home-binding/binding-generator>`_
-plugin that outputs C++ code for CPython extensions. The first version of PySide
-had source code based on Boost templates. It was easier to produce code but a
-paradigm change was needed, as the next question explains.
+Shiboken is a `GeneratorRunner`_ that outputs C++ code for CPython
+extensions.
+The first version of PySide had source code based on Boost templates.
+It was easier to produce code but a paradigm change was needed, as the next
+question explains.
+
Why did you switch from Boost.Python to Shiboken?
-------------------------------------------------
-The main reason was the size reduction. Boost.Python makes excessive use of templates
-resulting in a significant increase of the binaries size. On the other hand, as Shiboken
-generates CPython code, the resulting binaries are smaller.
+The main reason was the size reduction. Boost.Python makes excessive use of
+templates resulting in a significant increase of the binaries size.
+On the other hand, as Shiboken generates CPython code, the resulting binaries
+are smaller.
Creating bindings
=================
@@ -41,13 +44,12 @@ and the C++ library that is being wrapped.
What do I have to do to create my bindings?
-------------------------------------------
-.. todo: put link to typesystem documentation
+Most of the work is already done by the API Extractor.
+The developer creates a `typesystem`_ file with any customization wanted in
+the generated code, like removing classes or changing method signatures.
+The generator will output the *.h* and *.cpp* files with the CPython code that
+will wrap the target library for python.
-Most of the work is already done by the API Extractor. The developer creates
-a `typesystem <http://www.pyside.org/docs/apiextractor/typesystem.html>`_ file
-with any customization wanted in the generated code, like removing classes or
-changing method signatures. The generator will output the .h and .cpp files
-with the CPython code that will wrap the target library for python.
Is there any recommended build system?
--------------------------------------
@@ -63,5 +65,8 @@ What is 'inject code'?
----------------------
That's how we call customized code that will be *injected* into the
-generated at specific locations. They are specified inside the typesytem.
+generated at specific locations. They are specified inside the typesystem.
+.. _`Mailing list`: http://lists.qt-project.org/mailman/listinfo/pyside
+.. _`GeneratorRunner`: http://www.pyside.org/home-binding/binding-generator
+.. _`typesystem`: http://www.pyside.org/docs/apiextractor/typesystem.html
diff --git a/sources/shiboken2/doc/images/bindinggen-development.png b/sources/shiboken2/doc/images/bindinggen-development.png
index 2dd64ba1d..5931b126a 100644
--- a/sources/shiboken2/doc/images/bindinggen-development.png
+++ b/sources/shiboken2/doc/images/bindinggen-development.png
Binary files differ
diff --git a/sources/shiboken2/doc/images/bindinggen-development.svg b/sources/shiboken2/doc/images/bindinggen-development.svg
index 3b6b3a26e..591e1f2d1 100644
--- a/sources/shiboken2/doc/images/bindinggen-development.svg
+++ b/sources/shiboken2/doc/images/bindinggen-development.svg
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
@@ -12,9 +13,9 @@
height="200"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.46"
+ inkscape:version="0.92.2 2405546, 2018-03-11"
version="1.0"
- sodipodi:docname="bindgen-development.svg"
+ sodipodi:docname="bindinggen-development.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="bindinggen-development.png"
inkscape:export-xdpi="90"
@@ -140,22 +141,24 @@
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="1.0859375"
- inkscape:cx="320"
- inkscape:cy="136.17463"
+ inkscape:zoom="0.76787377"
+ inkscape:cx="286.61779"
+ inkscape:cy="101.18182"
inkscape:document-units="px"
- inkscape:current-layer="g5658"
+ inkscape:current-layer="g5440"
showgrid="false"
- inkscape:window-width="1156"
- inkscape:window-height="883"
- inkscape:window-x="1396"
- inkscape:window-y="35"
+ inkscape:window-width="1116"
+ inkscape:window-height="1042"
+ inkscape:window-x="10"
+ inkscape:window-y="28"
showguides="true"
- inkscape:guide-bbox="true">
+ inkscape:guide-bbox="true"
+ inkscape:window-maximized="0">
<sodipodi:guide
orientation="1,0"
position="-557.55608,678.10875"
- id="guide7299" />
+ id="guide7299"
+ inkscape:locked="false" />
</sodipodi:namedview>
<metadata
id="metadata7">
@@ -176,7 +179,7 @@
<flowRoot
xml:space="preserve"
id="flowRoot3229"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:'Bitstream Vera Sans';fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
transform="translate(4.1137413,-2.3429609)"><flowRegion
id="flowRegion3231"><rect
id="rect3233"
@@ -184,166 +187,269 @@
height="40.5849"
x="388.45547"
y="279.5423" /></flowRegion><flowPara
- id="flowPara3235" /></flowRoot> <g
+ id="flowPara3235"
+ style="font-size:40px;line-height:1.25"> </flowPara></flowRoot> <g
id="g5658"
transform="translate(6.5767925,7.0112479)">
<g
- id="g5634">
+ transform="matrix(0,-1,1,0,697.50638,3244.256)"
+ id="g5624"
+ style="">
+ <g
+ id="g5626"
+ transform="matrix(0,-1,1,0,-294.81158,2953.0504)"
+ style="">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-type="polyline"
+ id="path5628"
+ d="m 1586.5317,1348.2858 0.091,41.5266"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.7489,1389.4756 7.9979,-9.1068"
+ id="path5630"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.6031,1389.5063 -7.9979,-9.1069"
+ id="path5632"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ transform="matrix(0,-1,1,0,908.50929,3242.9612)"
+ id="g5648"
+ style="">
+ <g
+ id="g5650"
+ transform="matrix(0,-1,1,0,-294.81158,2953.0504)"
+ style="">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-type="polyline"
+ id="path5652"
+ d="m 1586.5317,1348.2858 0.091,41.5266"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.7489,1389.4756 7.9979,-9.1068"
+ id="path5654"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.6031,1389.5063 -7.9979,-9.1069"
+ id="path5656"
+ inkscape:connector-type="polyline"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ id="g5634"
+ style="">
<g
id="g6271"
- transform="translate(1086.3689,746.93837)">
+ transform="translate(1086.3689,746.93837)"
+ style="">
<g
transform="matrix(0,-1,1,0,-294.81158,2953.0504)"
- id="g6252">
+ id="g6252"
+ style="">
<path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.5317,1300.2858 L 1586.6222,1389.8124"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.5317,1300.2858 0.091,89.5266"
id="path11089"
inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-type="polyline"
id="path2758"
- d="M 1586.7489,1389.4756 L 1594.7468,1380.3688"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ d="m 1586.7489,1389.4756 7.9979,-9.1068"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-type="polyline"
id="path2760"
- d="M 1586.6031,1389.5063 L 1578.6052,1380.3994"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ d="m 1586.6031,1389.5063 -7.9979,-9.1069"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
- transform="translate(134.35978,44.472131)"
- id="g2777">
- <rect
- style="fill:#addc52;fill-opacity:1;stroke:#6ca400;stroke-width:0.82399696;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect5172"
- width="185.49777"
- height="75.08918"
- x="2047.775"
- y="2029.4594"
- ry="3.0323718"
- rx="2.6724329" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#035800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="2140.5562"
- y="2062.9375"
- id="text5174"><tspan
- sodipodi:role="line"
- x="2140.5562"
- y="2062.9375"
- style="font-size:22px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
- id="tspan5176">Qt bindings</tspan><tspan
- id="tspan6109"
- sodipodi:role="line"
- x="2140.5562"
- y="2084.457"
- style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">(generated code)</tspan></text>
- </g>
- <g
- transform="translate(141.86951,-31.391207)"
- id="g3216">
- <rect
- style="fill:#bff3bc;fill-opacity:1;stroke:#0af400;stroke-width:0.64492828;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect3625"
- width="185.67708"
- height="75.268074"
- x="1829.1727"
- y="2105.2332"
- ry="2.3353095"
- rx="2.1257713" />
- <text
- xml:space="preserve"
- style="font-size:38.71272278px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#035800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="1921.9705"
- y="2136.9409"
- id="text3627"
- transform="scale(1.0000266,0.9999734)"><tspan
- id="tspan3697"
- sodipodi:role="line"
- x="1921.9705"
- y="2136.9409"
- style="font-size:21.29199791px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#035800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold">generator</tspan><tspan
- sodipodi:role="line"
- x="1921.9705"
- y="2163.5559"
- style="font-size:21.29199791px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#035800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
- id="tspan2464">front-end</tspan></text>
- </g>
- <g
- id="g5641">
+ id="g5641"
+ style="">
<g
id="g5465"
- transform="translate(874.42628,746.93837)">
+ transform="translate(874.42628,746.93837)"
+ style="">
<g
transform="matrix(0,-1,1,0,-294.81158,2953.0504)"
- id="g5467">
+ id="g5467"
+ style="">
<path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.5317,1300.2858 L 1586.6222,1389.8124"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ d="m 1586.5317,1300.2858 0.091,89.5266"
id="path5469"
inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-type="polyline"
id="path5471"
- d="M 1586.7489,1389.4756 L 1594.7468,1380.3688"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ d="m 1586.7489,1389.4756 7.9979,-9.1068"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
<path
sodipodi:nodetypes="cc"
inkscape:connector-type="polyline"
id="path5473"
- d="M 1586.6031,1389.5063 L 1578.6052,1380.3994"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
+ d="m 1586.6031,1389.5063 -7.9979,-9.1069"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:none"
+ inkscape:connector-curvature="0" />
</g>
</g>
</g>
<g
transform="translate(-194.79968,-212.08495)"
id="g5440">
- <rect
- rx="1.2158648"
- ry="2.9911308"
- y="2285.8806"
- x="1953.809"
- height="75.360634"
- width="185.76964"
- id="rect3166"
- style="fill:#dfe994;fill-opacity:1;stroke:#d5f400;stroke-width:0.55236381;stroke-opacity:1" />
+ <path
+ style="fill:#41cd52;fill-opacity:1;stroke:none;stroke-width:2.18747473;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2378.6251,2292.247 v 66.9548 h 171.1068 l 14.8788,-14.8788 v -66.9549 h -171.1068 z"
+ id="path3715-5-6-7-9-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.29069424px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ x="2471.614"
+ y="2309.093"
+ id="text5174"><tspan
+ sodipodi:role="line"
+ x="2471.614"
+ y="2309.093"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.29069424px;"
+ id="tspan953">Qt for Python</tspan><tspan
+ id="tspan6109"
+ sodipodi:role="line"
+ x="2471.614"
+ y="2339.093"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.29069424px;">(generated code)</tspan></text>
+ <path
+ style="fill:#6b7080;fill-opacity:1;stroke:none;stroke-width:2.18747473;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2166.5963,2292.247 v 66.9548 h 171.1068 l 14.8788,-14.8788 v -66.9549 h -171.1068 z"
+ id="path3715-5-6-7-9-8-7-9-94"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.50930572px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ x="2259.1294"
+ y="2311.0505"
+ id="text3627"
+ transform="scale(1.0000266,0.9999734)"><tspan
+ id="tspan3697"
+ sodipodi:role="line"
+ x="2259.1294"
+ y="2311.0505"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.50930572px;">generator</tspan><tspan
+ sodipodi:role="line"
+ x="2259.1294"
+ y="2341.0505"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.50930572px;"
+ id="tspan2464">front-end</tspan></text>
+ <path
+ style="fill:#6b7080;fill-opacity:1;stroke:none;stroke-width:2.18747473;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 1959.8625,2292.2469 v 66.9548 h 171.1068 l 14.8788,-14.8788 v -66.9549 h -171.1068 z"
+ id="path3715-5-6-7-9-8-7-9-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
<text
id="text3168"
- y="2328.8809"
- x="2046.646"
- style="font-size:27.94354057px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ y="2326.4568"
+ x="2052.7678"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.65129721px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
xml:space="preserve"><tspan
- style="font-size:19.56047821px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="2328.8809"
- x="2046.646"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.65129721px;"
+ y="2326.4568"
+ x="2052.7678"
sodipodi:role="line"
id="tspan5424">API Extractor</tspan></text>
+ <path
+ style="fill:#9d9faa;fill-opacity:1;stroke:none;stroke-width:2.18747473;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2378.6251,2393.0867 v 66.9548 h 171.1068 l 14.8788,-14.8788 v -66.9549 h -171.1068 z"
+ id="path3715-5-6-7-9-8-7-9-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ id="text3487"
+ y="2410.3647"
+ x="2471.614"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.44197154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ xml:space="preserve"><tspan
+ id="tspan2509"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.44197154px;"
+ y="2410.3647"
+ x="2471.614"
+ sodipodi:role="line">typesystem</tspan><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.44197154px;"
+ y="2440.3647"
+ x="2471.614"
+ sodipodi:role="line"
+ id="tspan5432">(handwritten)</tspan></text>
+ <path
+ style="fill:#9d9faa;fill-opacity:1;stroke:none;stroke-width:2.18747473;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2166.5963,2394.0075 v 66.9548 h 171.1068 l 14.8788,-14.8788 v -66.9549 h -171.1068 z"
+ id="path3715-5-6-7-9-8-7-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:0%;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.58586931px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;"
+ x="2259.5852"
+ y="2412.0415"
+ id="text2735"><tspan
+ sodipodi:role="line"
+ x="2259.5852"
+ y="2412.0415"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.58586931px;"
+ id="tspan2737">injected code</tspan><tspan
+ id="tspan2743"
+ sodipodi:role="line"
+ x="2259.5852"
+ y="2442.0415"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:1.58586931px;">(handwritten)</tspan></text>
</g>
<g
transform="translate(-102.30216,-279.71223)"
- id="g5541">
+ id="g5541"
+ style="stroke:none">
<path
sodipodi:type="arc"
- style="fill:#f28888;fill-opacity:1;stroke:#d5f400;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ style="fill:#f28888;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
id="path5535"
sodipodi:cx="255.10791"
sodipodi:cy="326.69064"
sodipodi:rx="38.848923"
sodipodi:ry="38.848923"
- d="M 293.95683,326.69064 A 38.848923,38.848923 0 1 1 216.25899,326.69064 A 38.848923,38.848923 0 1 1 293.95683,326.69064 z"
+ d="m 293.95683,326.69064 a 38.848923,38.848923 0 0 1 -38.84892,38.84893 38.848923,38.848923 0 0 1 -38.84892,-38.84893 38.848923,38.848923 0 0 1 38.84892,-38.84892 38.848923,38.848923 0 0 1 38.84892,38.84892 z"
transform="matrix(0.4405339,0,0,0.4405339,1842.2283,2282.9708)" />
<text
xml:space="preserve"
- style="font-size:27.62000275px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:Titillium;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:'Titillium, Normal';font-stretch:normal;font-variant:normal;font-size:26.66666667px;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal"
x="1946.3259"
y="2435.7"
id="text5537"><tspan
@@ -351,24 +457,25 @@
id="tspan5539"
x="1946.3259"
y="2435.7"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:FreeMono;-inkscape-font-specification:FreeMono Bold">1</tspan></text>
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666667px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;stroke:none">1</tspan></text>
</g>
<g
transform="translate(52.589867,-352.69787)"
- id="g5546">
+ id="g5546"
+ style="stroke:none">
<path
sodipodi:type="arc"
- style="fill:#f28888;fill-opacity:1;stroke:#d5f400;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ style="fill:#f28888;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
id="path5548"
sodipodi:cx="255.10791"
sodipodi:cy="326.69064"
sodipodi:rx="38.848923"
sodipodi:ry="38.848923"
- d="M 293.95683,326.69064 A 38.848923,38.848923 0 1 1 216.25899,326.69064 A 38.848923,38.848923 0 1 1 293.95683,326.69064 z"
+ d="m 293.95683,326.69064 a 38.848923,38.848923 0 0 1 -38.84892,38.84893 38.848923,38.848923 0 0 1 -38.84892,-38.84893 38.848923,38.848923 0 0 1 38.84892,-38.84892 38.848923,38.848923 0 0 1 38.84892,38.84892 z"
transform="matrix(0.4405339,0,0,0.4405339,1842.2283,2282.9708)" />
<text
xml:space="preserve"
- style="font-size:27.62000275px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:Titillium;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:'Titillium, Normal';font-stretch:normal;font-variant:normal;font-size:26.66666667px;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal"
x="1946.3259"
y="2435.7"
id="text5550"><tspan
@@ -376,134 +483,25 @@
id="tspan5552"
x="1946.3259"
y="2435.7"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:FreeMono;-inkscape-font-specification:FreeMono Bold">2</tspan></text>
- </g>
- <g
- transform="matrix(0,-1,1,0,697.50638,3244.256)"
- id="g5624">
- <g
- id="g5626"
- transform="matrix(0,-1,1,0,-294.81158,2953.0504)">
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-type="polyline"
- id="path5628"
- d="M 1586.5317,1348.2858 L 1586.6222,1389.8124"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.7489,1389.4756 L 1594.7468,1380.3688"
- id="path5630"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.6031,1389.5063 L 1578.6052,1380.3994"
- id="path5632"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- </g>
- </g>
- <g
- transform="translate(5.3442137,15.993306)"
- id="g5459">
- <rect
- rx="2.4652832"
- ry="2.9818845"
- y="2151.3206"
- x="1965.7682"
- height="75.127686"
- width="185.53668"
- id="rect3485"
- style="fill:#b2e994;fill-opacity:1;stroke:#56f400;stroke-width:0.78531456;stroke-opacity:1" />
- <text
- id="text3487"
- y="2184.2461"
- x="2059.1909"
- style="font-size:27.94354057px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- id="tspan2509"
- style="font-size:19.56047821px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="2184.2461"
- x="2059.1909"
- sodipodi:role="line">typesystem</tspan><tspan
- style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="2205.1477"
- x="2059.1909"
- sodipodi:role="line"
- id="tspan5432">(handwritten)</tspan></text>
- </g>
- <g
- transform="matrix(0,-1,1,0,908.50929,3242.9612)"
- id="g5648">
- <g
- id="g5650"
- transform="matrix(0,-1,1,0,-294.81158,2953.0504)">
- <path
- sodipodi:nodetypes="cc"
- inkscape:connector-type="polyline"
- id="path5652"
- d="M 1586.5317,1348.2858 L 1586.6222,1389.8124"
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.7489,1389.4756 L 1594.7468,1380.3688"
- id="path5654"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- <path
- style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
- d="M 1586.6031,1389.5063 L 1578.6052,1380.3994"
- id="path5656"
- inkscape:connector-type="polyline"
- sodipodi:nodetypes="cc" />
- </g>
- </g>
- <g
- transform="translate(299.78191,21.148391)"
- id="g2771">
- <rect
- style="fill:#cce994;fill-opacity:1;stroke:#a1f400;stroke-width:0.62429351;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="rect2733"
- width="185.69771"
- height="75.288704"
- x="1882.2529"
- y="2146.085"
- ry="2.2607138"
- rx="2.0576432" />
- <text
- xml:space="preserve"
- style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="1975.134"
- y="2180.2722"
- id="text2735"><tspan
- sodipodi:role="line"
- x="1975.134"
- y="2180.2722"
- style="font-size:22px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold"
- id="tspan2737">injected code</tspan><tspan
- id="tspan2743"
- sodipodi:role="line"
- x="1975.134"
- y="2201.7917"
- style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">(handwritten)</tspan></text>
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666667px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;stroke:none">2</tspan></text>
</g>
<g
transform="translate(200.4676,-222.96766)"
- id="g5554">
+ id="g5554"
+ style="stroke:none">
<path
sodipodi:type="arc"
- style="fill:#f28888;fill-opacity:1;stroke:#d5f400;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ style="fill:#f28888;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
id="path5556"
sodipodi:cx="255.10791"
sodipodi:cy="326.69064"
sodipodi:rx="38.848923"
sodipodi:ry="38.848923"
- d="M 293.95683,326.69064 A 38.848923,38.848923 0 1 1 216.25899,326.69064 A 38.848923,38.848923 0 1 1 293.95683,326.69064 z"
+ d="m 293.95683,326.69064 a 38.848923,38.848923 0 0 1 -38.84892,38.84893 38.848923,38.848923 0 0 1 -38.84892,-38.84893 38.848923,38.848923 0 0 1 38.84892,-38.84892 38.848923,38.848923 0 0 1 38.84892,38.84892 z"
transform="matrix(0.4405339,0,0,0.4405339,1842.2283,2282.9708)" />
<text
xml:space="preserve"
- style="font-size:27.62000275px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:Titillium;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:'Titillium, Normal';font-stretch:normal;font-variant:normal;font-size:26.66666667px;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal"
x="1946.3259"
y="2435.7"
id="text5558"><tspan
@@ -511,24 +509,25 @@
id="tspan5560"
x="1946.3259"
y="2435.7"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:FreeMono;-inkscape-font-specification:FreeMono Bold">3</tspan></text>
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666667px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;stroke:none">3</tspan></text>
</g>
<g
transform="translate(413.633,-206.84535)"
- id="g5562">
+ id="g5562"
+ style="stroke:none">
<path
sodipodi:type="arc"
- style="fill:#f28888;fill-opacity:1;stroke:#d5f400;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
+ style="fill:#f28888;fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:3, 3;stroke-dashoffset:0;stroke-opacity:1"
id="path5564"
sodipodi:cx="255.10791"
sodipodi:cy="326.69064"
sodipodi:rx="38.848923"
sodipodi:ry="38.848923"
- d="M 293.95683,326.69064 A 38.848923,38.848923 0 1 1 216.25899,326.69064 A 38.848923,38.848923 0 1 1 293.95683,326.69064 z"
+ d="m 293.95683,326.69064 a 38.848923,38.848923 0 0 1 -38.84892,38.84893 38.848923,38.848923 0 0 1 -38.84892,-38.84893 38.848923,38.848923 0 0 1 38.84892,-38.84892 38.848923,38.848923 0 0 1 38.84892,38.84892 z"
transform="matrix(0.4405339,0,0,0.4405339,1842.2283,2282.9708)" />
<text
xml:space="preserve"
- style="font-size:27.62000275px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:Titillium;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;-inkscape-font-specification:'Titillium, Normal';font-stretch:normal;font-variant:normal;font-size:26.66666667px;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal"
x="1946.3259"
y="2435.7"
id="text5566"><tspan
@@ -536,7 +535,7 @@
id="tspan5568"
x="1946.3259"
y="2435.7"
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:FreeMono;-inkscape-font-specification:FreeMono Bold">4</tspan></text>
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:26.66666667px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;stroke:none">4</tspan></text>
</g>
</g>
</g>
diff --git a/sources/shiboken2/doc/images/boostqtarch.png b/sources/shiboken2/doc/images/boostqtarch.png
deleted file mode 100644
index f1b145e9c..000000000
--- a/sources/shiboken2/doc/images/boostqtarch.png
+++ /dev/null
Binary files differ
diff --git a/sources/shiboken2/doc/images/boostqtarch.svg b/sources/shiboken2/doc/images/boostqtarch.svg
deleted file mode 100644
index 9fbb38271..000000000
--- a/sources/shiboken2/doc/images/boostqtarch.svg
+++ /dev/null
@@ -1,226 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="350"
- height="220"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docname="boostqtarch.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- inkscape:export-filename="boostqtarch.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <defs
- id="defs4">
- <marker
- inkscape:stockid="Arrow2Lend"
- orient="auto"
- refY="0"
- refX="0"
- id="Arrow2Lend"
- style="overflow:visible">
- <path
- id="path3636"
- style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
- d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.97309,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z"
- transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
- </marker>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 526.18109 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="744.09448 : 526.18109 : 1"
- inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
- id="perspective10" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="1.4812981"
- inkscape:cx="145.70936"
- inkscape:cy="94.089827"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="false"
- inkscape:window-width="1278"
- inkscape:window-height="951"
- inkscape:window-x="1592"
- inkscape:window-y="29"
- showguides="true"
- inkscape:guide-bbox="true" />
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- transform="translate(-61.076804,-301.50489)">
- <flowRoot
- xml:space="preserve"
- id="flowRoot3229"
- style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- transform="translate(2.0918751e-6,-6.0000008)"><flowRegion
- id="flowRegion3231"><rect
- id="rect3233"
- width="125.74072"
- height="40.5849"
- x="388.45547"
- y="279.5423" /></flowRegion><flowPara
- id="flowPara3235" /></flowRoot> <g
- id="g3010"
- transform="matrix(0.9508755,0,0,0.9508755,11.317746,20.273572)">
- <g
- transform="translate(0,-9.7919846e-6)"
- id="g2952">
- <rect
- style="fill:#dfe994;fill-opacity:1;stroke:#d5f400;stroke-width:0.7162478;stroke-opacity:1"
- id="rect3166"
- width="349.23203"
- height="67.403336"
- x="61.417336"
- y="377.74161"
- ry="2.6752985"
- rx="2.285728" />
- <text
- xml:space="preserve"
- style="font-size:29.38717079px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="236.08904"
- y="397.98755"
- id="text3168"><tspan
- sodipodi:role="line"
- x="236.08904"
- y="397.98755"
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- id="tspan3176">Boost::Python</tspan><tspan
- sodipodi:role="line"
- x="236.08904"
- y="418.35535"
- style="font-size:15.20761585px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- id="tspan2880">helper library to interface with CPython API</tspan><tspan
- id="tspan2922"
- sodipodi:role="line"
- x="236.08904"
- y="437.36487"
- style="font-size:15.20761585px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#4c5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">and expose C++ entities to Python</tspan></text>
- </g>
- <g
- transform="translate(0,-9.7025776e-6)"
- id="g2959">
- <rect
- style="fill:#addc52;fill-opacity:1;stroke:#6ca400;stroke-width:0.71624762;stroke-opacity:1"
- id="rect3542"
- width="349.23203"
- height="67.403351"
- x="61.417336"
- y="301.84543"
- ry="2.675298"
- rx="2.285728" />
- <text
- xml:space="preserve"
- style="font-size:29.38717079px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="236.5123"
- y="322.09137"
- id="text3544"><tspan
- id="tspan3596"
- sodipodi:role="line"
- x="236.5123"
- y="322.09137"
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">Qt-Python Bindings</tspan><tspan
- sodipodi:role="line"
- x="236.5123"
- y="342.45917"
- style="font-size:15.20761585px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- id="tspan12937">Qt classes and functions</tspan><tspan
- sodipodi:role="line"
- x="236.5123"
- y="361.46869"
- style="font-size:15.20761585px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#050800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- id="tspan2411">exported to Python</tspan></text>
- </g>
- <g
- id="g2998">
- <g
- id="g2986">
- <rect
- rx="2.285728"
- ry="2.675298"
- y="453.63776"
- x="61.417336"
- height="67.403336"
- width="172.02341"
- id="rect3485"
- style="fill:#b2e994;fill-opacity:1;stroke:#56f400;stroke-width:0.71624762;stroke-opacity:1" />
- <text
- id="text3487"
- y="482.29712"
- x="147.73038"
- style="font-size:29.38717079px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="482.29712"
- x="147.73038"
- sodipodi:role="line"
- id="tspan3499">CPython</tspan><tspan
- id="tspan2509"
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#1f5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="508.01089"
- x="147.73038"
- sodipodi:role="line">API</tspan></text>
- </g>
- <g
- id="g2992">
- <rect
- rx="2.285728"
- ry="2.675298"
- y="453.63776"
- x="239.30101"
- height="67.403351"
- width="172.02295"
- id="rect2459"
- style="fill:#cce994;fill-opacity:1;stroke:#a1f400;stroke-width:0.71624762;stroke-opacity:1" />
- <text
- id="text2461"
- y="481.97067"
- x="324.86047"
- style="font-size:29.38717079px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- xml:space="preserve"><tspan
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="481.97067"
- x="324.86047"
- sodipodi:role="line"
- id="tspan2467">Qt4</tspan><tspan
- id="tspan2490"
- style="font-size:20.57102013px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;text-anchor:middle;fill:#3a5800;fill-opacity:1;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- y="507.68445"
- x="324.86047"
- sodipodi:role="line">Libraries</tspan></text>
- </g>
- </g>
- </g>
- </g>
-</svg>
diff --git a/sources/shiboken2/doc/images/converter.dot b/sources/shiboken2/doc/images/converter.dot
deleted file mode 100644
index 412341df9..000000000
--- a/sources/shiboken2/doc/images/converter.dot
+++ /dev/null
@@ -1,14 +0,0 @@
-digraph Conversions {
- rankdir=LR
- CppType1 [ label="C++\nType" ]
- Converter1 [ label="Converter\nPython -> C++", shape=hexagon ]
- PythonType1 -> Converter1
- PythonType2 -> Converter1
- PythonType3 -> Converter1
- Converter1 -> CppType1
-
- CppType2 [ label="C++\nType" ]
- PythonType4 [ label="PythonType" ]
- Converter2 [ label="Converter\nPython -> C++", shape=hexagon ]
- CppType2 -> Converter2 -> PythonType4
-} \ No newline at end of file
diff --git a/sources/shiboken2/doc/images/converter.png b/sources/shiboken2/doc/images/converter.png
index 51cd2af71..cd52e2769 100644
--- a/sources/shiboken2/doc/images/converter.png
+++ b/sources/shiboken2/doc/images/converter.png
Binary files differ
diff --git a/sources/shiboken2/doc/images/converter.svg b/sources/shiboken2/doc/images/converter.svg
new file mode 100644
index 000000000..4305eb720
--- /dev/null
+++ b/sources/shiboken2/doc/images/converter.svg
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="206.375mm"
+ height="100.54167mm"
+ viewBox="0 0 206.375 100.54167"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.2 2405546, 2018-03-11"
+ sodipodi:docname="converter.svg">
+ <defs
+ id="defs2">
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker1623"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1621"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1569"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path1567"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker1521"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1519"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1479"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path1477"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker1443"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1441"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ id="path1154"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.35"
+ inkscape:cx="382.16184"
+ inkscape:cy="-28.417621"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-width="1002"
+ inkscape:window-height="1042"
+ inkscape:window-x="10"
+ inkscape:window-y="28"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid971"
+ originx="-58.208333"
+ originy="-68.791657" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-58.208333,-127.66667)">
+ <path
+ style="fill:#17a81a;fill-opacity:1;stroke:none;stroke-width:0.82824755;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 127,132.95834 0.0687,26.45833 h 63.43127 l 5.29167,-5.29167 v -26.45833 h -63.5 z"
+ id="path3715-5-6-7-9-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#3a4055;fill-opacity:1;stroke:none;stroke-width:0.67261654;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.791667,132.95834 v 26.45833 H 105.83333 L 111.125,154.125 V 127.66667 H 74.083333 Z"
+ id="path3715-5-6-7-9-8-7-6-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#848895;fill-opacity:1;stroke:none;stroke-width:0.52087492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 58.208333,173.96875 V 185.875 h 48.947917 l 3.96875,-3.96875 V 170 H 62.177083 Z"
+ id="path3715-5-6-7-9-8-7-6-56"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#17a81a;fill-opacity:1;stroke:none;stroke-width:0.82824755;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 127.00003,175.29167 0.0687,26.45833 H 190.5 l 5.29167,-5.29167 V 170 h -63.5 z"
+ id="path3715-5-6-7-9-8-7-2"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#848895;fill-opacity:1;stroke:none;stroke-width:0.52087492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.208333,195.13542 v 11.90625 h 48.947917 l 3.96875,-3.96875 V 191.16667 H 62.177083 Z"
+ id="path3715-5-6-7-9-8-7-6-56-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#848895;fill-opacity:1;stroke:none;stroke-width:0.52087492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 58.208343,216.30209 v 11.90625 h 48.947907 l 3.96875,-3.96875 V 212.33334 H 62.177093 Z"
+ id="path3715-5-6-7-9-8-7-6-56-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="65.68634"
+ y="179.68727"
+ id="text1032"><tspan
+ sodipodi:role="line"
+ id="tspan1030"
+ x="65.68634"
+ y="179.68727"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">PythonType1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="65.326508"
+ y="200.85394"
+ id="text1032-1"><tspan
+ sodipodi:role="line"
+ id="tspan1030-1"
+ x="65.326508"
+ y="200.85394"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">PythonType2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="65.319458"
+ y="222.02061"
+ id="text1032-4"><tspan
+ sodipodi:role="line"
+ id="tspan1030-6"
+ x="65.319458"
+ y="222.02061"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">PythonType3</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="90.120621"
+ y="139.29776"
+ id="text1062"><tspan
+ sodipodi:role="line"
+ id="tspan1060"
+ x="90.120621"
+ y="139.29776"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">C++</tspan><tspan
+ sodipodi:role="line"
+ x="90.120621"
+ y="152.52693"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
+ id="tspan1064">Type</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="135.41069"
+ y="138.95909"
+ id="text1068"><tspan
+ sodipodi:role="line"
+ id="tspan1066"
+ x="135.41069"
+ y="138.95909"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">Converter</tspan><tspan
+ sodipodi:role="line"
+ x="135.41069"
+ y="152.18826"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
+ id="tspan1070">C++ -&gt; Python</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="135.41072"
+ y="181.29242"
+ id="text1068-9"><tspan
+ sodipodi:role="line"
+ id="tspan1066-7"
+ x="135.41072"
+ y="181.29242"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">Converter</tspan><tspan
+ sodipodi:role="line"
+ x="135.41072"
+ y="194.52159"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:8.46666622px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
+ id="tspan1070-5">Python -&gt; C++</tspan></text>
+ <path
+ style="fill:#3a4055;fill-opacity:1;stroke:none;stroke-width:0.67261654;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 211.66667,175.29167 V 201.75 h 37.04166 L 254,196.45833 V 170 h -37.04167 z"
+ id="path3715-5-6-7-9-8-7-6-3-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="232.99562"
+ y="181.63109"
+ id="text1062-7"><tspan
+ sodipodi:role="line"
+ id="tspan1060-4"
+ x="232.99562"
+ y="181.63109"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">C++</tspan><tspan
+ sodipodi:role="line"
+ x="232.99562"
+ y="194.86026"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:9.87777805px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
+ id="tspan1064-9">Type</tspan></text>
+ <path
+ style="fill:#848895;fill-opacity:1;stroke:none;stroke-width:0.52087492;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 211.66667,131.63542 v 11.90625 h 48.94791 l 3.96875,-3.96875 v -11.90625 h -48.94791 z"
+ id="path3715-5-6-7-9-8-7-6-56-0-1"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
+ x="220.67876"
+ y="137.35394"
+ id="text1032-4-7"><tspan
+ sodipodi:role="line"
+ id="tspan1030-6-0"
+ x="220.67876"
+ y="137.35394"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.05555534px;font-family:Titillium;-inkscape-font-specification:'Titillium, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332">PythonType</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+ d="M 111.125,143.54167 H 127"
+ id="path1149"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1443)"
+ d="M 111.125,175.29167 H 127"
+ id="path1433"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1479)"
+ d="M 111.125,196.45834 127,185.875"
+ id="path1469"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1521)"
+ d="M 111.125,217.625 127,201.75"
+ id="path1511"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1569)"
+ d="m 195.79166,185.875 h 15.875"
+ id="path1559"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker1623)"
+ d="m 195.79166,138.25001 h 15.875"
+ id="path1613"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/sources/shiboken2/doc/images/shibokenqtarch.png b/sources/shiboken2/doc/images/shibokenqtarch.png
new file mode 100644
index 000000000..359413373
--- /dev/null
+++ b/sources/shiboken2/doc/images/shibokenqtarch.png
Binary files differ
diff --git a/sources/shiboken2/doc/images/shibokenqtarch.svg b/sources/shiboken2/doc/images/shibokenqtarch.svg
new file mode 100644
index 000000000..d9212f18c
--- /dev/null
+++ b/sources/shiboken2/doc/images/shibokenqtarch.svg
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="275"
+ height="197.55103"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.92.2 2405546, 2018-03-11"
+ version="1.0"
+ sodipodi:docname="shibokenqtarch.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="shibokenqtarch.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path3636"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective10" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0474359"
+ inkscape:cx="110.19617"
+ inkscape:cy="69.09871"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:window-width="1002"
+ inkscape:window-height="1042"
+ inkscape:window-x="10"
+ inkscape:window-y="28"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ type="xygrid"
+ id="grid44"
+ originx="-44.999996"
+ originy="-12.44898" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-106.0768,-311.50489)">
+ <path
+ style="fill:#21be2b;fill-opacity:1;stroke:none;stroke-width:2.20567369;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 106.0768,322.72938 v 44.89796 h 262.2093 l 12.7907,-11.22449 V 311.50489 H 117.53514 Z"
+ id="path3715-5-6-7-9-8-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#17a81a;fill-opacity:1;stroke:none;stroke-width:1.57079244;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 251.99517,457.61034 v 51.44557 H 369.85231 L 381.0768,498.76679 V 447.32122 H 263.21966 Z"
+ id="path3715-5-6-7-9-6-7"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:#53586b;fill-opacity:1;stroke:none;stroke-width:1.57079256;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 106.0768,457.61034 v 51.44557 h 117.85714 l 11.22449,-10.28912 V 447.32122 H 117.30129 Z"
+ id="path3715-5-6-7-9-6-7-5"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:16.68707466px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.12244904;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ x="120.87232"
+ y="334.88406"
+ id="text153"><tspan
+ sodipodi:role="line"
+ id="tspan151"
+ x="120.87232"
+ y="334.88406"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:16.68707466px;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.12244904;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">Qt for Python</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.74510956px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31862774"
+ x="121.09701"
+ y="354.01886"
+ id="text157"><tspan
+ sodipodi:role="line"
+ x="121.09701"
+ y="354.01886"
+ id="tspan159"
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.31862774">Qt classes and functions exported to Python</tspan></text>
+ <path
+ style="fill:#53586b;fill-opacity:1;stroke:none;stroke-width:2.20567369;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 106.0768,391.19877 v 44.89796 h 262.2093 l 12.7907,-11.22449 V 379.97428 H 117.53514 Z"
+ id="path3715-5-6-7-9-8-7-6"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:16.68707466px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.41717955"
+ x="121.0225"
+ y="403.38095"
+ id="text153-2"><tspan
+ sodipodi:role="line"
+ id="tspan151-9"
+ x="121.0225"
+ y="403.38095"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:16.68707466px;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.41717955">Shiboken</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.74510956px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:Titillium;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31862774"
+ x="121.09701"
+ y="421.95245"
+ id="text157-1"><tspan
+ sodipodi:role="line"
+ x="121.09701"
+ y="421.95245"
+ id="tspan159-2"
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.31862774">Generator that exposes C++ classes to Python</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:17.95918465px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.31862774"
+ x="123.35368"
+ y="482.61551"
+ id="text157-1-7"><tspan
+ sodipodi:role="line"
+ x="123.35368"
+ y="482.61551"
+ id="tspan159-2-0"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:17.95918465px;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.31862774">CPython API</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:17.95918465px;line-height:1.25;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.4132798"
+ x="265.1445"
+ y="483.19019"
+ id="text157-1-9"><tspan
+ sodipodi:role="line"
+ x="265.1445"
+ y="483.19019"
+ id="tspan159-2-3"
+ style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:17.95918465px;font-family:Titillium;-inkscape-font-specification:'Titillium, Semi-Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke-width:0.4132798">Qt 5 Libraries</tspan></text>
+ </g>
+</svg>
diff --git a/sources/shiboken2/doc/overview.rst b/sources/shiboken2/doc/overview.rst
index 5f50610ff..97ef2c13c 100644
--- a/sources/shiboken2/doc/overview.rst
+++ b/sources/shiboken2/doc/overview.rst
@@ -23,13 +23,13 @@ Each module of the generator system has an specific role.
3. Modify the API to expose the objects in a way that fits you target language best.
4. Insert customizations where handwritten code is needed.
-.. figure:: images/boostqtarch.png
+.. figure:: images/shibokenqtarch.png
:scale: 80
:align: center
Runtime architecture
-The newly created binding will run on top of Boost.Python library which takes
+The newly created binding will run on top of Shiboken which takes
care of interfacing Python and the underlying C++ library.
Handwritten inputs
diff --git a/sources/shiboken2/doc/ownership.rst b/sources/shiboken2/doc/ownership.rst
index 69791f855..f3744a537 100644
--- a/sources/shiboken2/doc/ownership.rst
+++ b/sources/shiboken2/doc/ownership.rst
@@ -35,7 +35,7 @@ Invalidating objects
====================
To prevent segfaults and double frees, the wrapper objects are invalidated.
-An invalidated can't be passed as argument or have an attributte or method accessed.
+An invalidated can't be passed as argument or have an attribute or method accessed.
Trying to do this will raise RuntimeError.
The following situations can invalidate an object:
@@ -48,7 +48,7 @@ C++ taking ownership
:ref:`virtual destructor <ownership-virt-method>` or the transfer is due to the special case
of :ref:`parent ownership <ownership-parent>`.
- Besides being passed as argument, the callee object can have its ownership changed, like
+ Besides being passed as argument, the called object can have its ownership changed, like
the `setParent` method in Qt's `QObject`.
Invalidate after use
@@ -69,7 +69,7 @@ Objects with virtual methods
any derived class in Python also override it.
If the class has a virtual destructor (and C++ classes with virtual methods should have), this
- C++ instance invalidates the wrapper only when the overriden destructor is called.
+ C++ instance invalidates the wrapper only when the overridden destructor is called.
One exception to this rule is when the object is created in C++, like in a
factory method. This way the wrapped object is a C++ instance of the native
@@ -128,7 +128,7 @@ Not saving unowned objects references
-------------------------------------
Sometimes when you pass an instance as argument to a method and the receiving
- instance will need that object to live indifinitely, but will not take ownership
+ instance will need that object to live indefinitely, but will not take ownership
of the argument instance. In this case, you should hold a reference to the argument
instance.
diff --git a/sources/shiboken2/doc/projectfile.rst b/sources/shiboken2/doc/projectfile.rst
index 6c9808da4..aa703d941 100644
--- a/sources/shiboken2/doc/projectfile.rst
+++ b/sources/shiboken2/doc/projectfile.rst
@@ -4,9 +4,9 @@
Binding Project File
********************
-Instead of directing the Generator behaviour via command line, the binding developer
-can write a text project file describing the same information, and avoid the hassle
-of a long stream of command line arguments.
+Instead of directing the Generator behavior via command line, the binding
+developer can write a text project file describing the same information, and
+avoid the hassle of a long stream of command line arguments.
.. _project-file-structure:
@@ -34,11 +34,13 @@ Project file tags
The generator project file tags are in direct relation to the
:ref:`command line arguments <command-line>`. All of the current command line
-options provided by |project| were already seen on the :ref:`project-file-structure`,
-for new command line options provided by additional generator modules (e.g.: qtdoc,
-Shiboken) could also be used in the generator project file following simple conversion rules.
+options provided by |project| were already seen on the
+:ref:`project-file-structure`, for new command line options provided by
+additional generator modules (e.g.: qtdoc, Shiboken) could also be used in the
+generator project file following simple conversion rules.
-For tags without options, just write as an empty tag without any attributes. Example:
+For tags without options, just write as an empty tag without any attributes.
+Example:
.. code-block:: bash
diff --git a/sources/shiboken2/doc/sequenceprotocol.rst b/sources/shiboken2/doc/sequenceprotocol.rst
index 587c0f95b..26ae3b220 100644
--- a/sources/shiboken2/doc/sequenceprotocol.rst
+++ b/sources/shiboken2/doc/sequenceprotocol.rst
@@ -1,7 +1,8 @@
Sequence Protocol
-----------------
-Support for the sequence protocol is achieved adding functions with special names, this is done using the add-function tag.
+Support for the sequence protocol is achieved adding functions with special
+names, this is done using the add-function tag.
The special function names are:
@@ -15,9 +16,14 @@ The special function names are:
__concat__ PyObject* self, PyObject* _other PyObject* PySequence_Concat
============= =============================================== ==================== ===================
-You just need to inform the function name to the add-function tag, without any parameter or return type information, when you do it, |project| will create a C function with parameters and return type definied by the table above.
+You just need to inform the function name to the add-function tag, without any
+parameter or return type information, when you do it, |project| will create a C
+function with parameters and return type defined by the table above.
-The function needs to follow the same semantics of the *CPython equivalent* function, the only way to do it is using the :doc:`inject-code <codeinjectionsemantics>` tag.
-
-A concrete exemple how to add sequence protocol support to a class can be found on shiboken tests, more precisely in the definition of the Str class in ``tests/samplebinding/typesystem_sample.xml``.
+The function needs to follow the same semantics of the *CPython equivalent*
+function, the only way to do it is using the
+:doc:`inject-code <codeinjectionsemantics>` tag.
+A concrete example how to add sequence protocol support to a class can be found
+on shiboken tests, more precisely in the definition of the Str class in
+``tests/samplebinding/typesystem_sample.xml``.
diff --git a/sources/shiboken2/doc/typeconverters.rst b/sources/shiboken2/doc/typeconverters.rst
index 3779b26d7..ea32c7f0c 100644
--- a/sources/shiboken2/doc/typeconverters.rst
+++ b/sources/shiboken2/doc/typeconverters.rst
@@ -2,7 +2,13 @@
User Defined Type Conversion
****************************
-In the process of creating Python bindings of a C++ library, most of the C++ classes will have wrappers representing them in Python land. But there may be other classes that are very simple and/or have a Python type as a direct counter part. (Example: a "Complex" class, that represents complex numbers, has a Python equivalent in the "complex" type.) Such classes, instead of getting a Python wrapper, normally have conversions rules, from Python to C++ and vice-versa.
+In the process of creating Python bindings of a C++ library, most of the C++
+classes will have wrappers representing them in Python land.
+But there may be other classes that are very simple and/or have a Python type
+as a direct counter part. (Example: a "Complex" class, that represents complex
+numbers, has a Python equivalent in the "complex" type.) Such classes, instead
+of getting a Python wrapper, normally have conversions rules, from Python to
+C++ and vice-versa.
.. code-block:: c++
@@ -22,7 +28,8 @@ In the process of creating Python bindings of a C++ library, most of the C++ cla
Complex cpx(real, imag);
-For the user defined conversion code to be inserted in the proper places, the "<conversion-rule>" tag must be used.
+For the user defined conversion code to be inserted in the proper places,
+the "<conversion-rule>" tag must be used.
.. code-block:: xml
@@ -51,25 +58,23 @@ For the user defined conversion code to be inserted in the proper places, the "<
The details will be given later, but the gist of it are the tags
-`<native-to-target> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#native-to-target>`_,
-which has only one conversion from C++ to Python, and
-`<target-to-native> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#target-to-native>`_,
-that may define the conversion of multiple Python types to C++'s "Complex" type.
+`<native-to-target>`_, which has only one conversion from C++ to Python, and
+`<target-to-native>`_, that may define the conversion of multiple Python types
+to C++'s "Complex" type.
.. image:: images/converter.png
:height: 240px
:align: center
-|project| expects the code for `<native-to-target> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#native-to-target>`_,
-to directly return the Python result of the conversion, and the added conversions inside the
-`<target-to-native> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#target-to-native>`_
-must attribute the Python to C++ conversion result to the :ref:`%out <out>` variable.
+|project| expects the code for `<native-to-target>`_, to directly return the
+Python result of the conversion, and the added conversions inside the
+`<target-to-native>`_ must attribute the Python to C++ conversion result to
+the :ref:`%out <out>` variable.
-
-Expanding on the last example, if the binding developer want a Python 2-tuple of numbers to be accepted
-by wrapped C++ functions with "Complex" arguments, an
-`<add-conversion> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#add-conversion>`_
-tag and a custom check must be added. Here's how to do it:
+Expanding on the last example, if the binding developer want a Python 2-tuple
+of numbers to be accepted by wrapped C++ functions with "Complex" arguments,
+an `<add-conversion>`_ tag and a custom check must be added.
+Here's how to do it:
.. code-block:: xml
@@ -120,18 +125,18 @@ tag and a custom check must be added. Here's how to do it:
</primitive-type>
-
.. _container_conversions:
Container Conversions
=====================
-Converters for
-`<container-type> <http://www.pyside.org/docs/apiextractor/typesystem_specifying_types.html#container-type>`_
-are pretty much the same as for other type, except that they make use of the type system variables
-:ref:`%INTYPE_# <intype_n>` and :ref:`%OUTTYPE_# <outtype_n>`. |project| combines the conversion code for
-containers with the conversion defined (or automatically generated) for the containees.
+Converters for `<container-type>`_ are pretty much the same as for other type,
+except that they make use of the type system variables
+:ref:`%INTYPE_# <intype_n>` and :ref:`%OUTTYPE_# <outtype_n>`.
+|project| combines the conversion code for containers with the conversion
+defined (or automatically generated) for the containers.
+.. _`container-type`: http://www.pyside.org/docs/apiextractor/typesystem_specifying_types.html#container-type
.. code-block:: xml
@@ -279,10 +284,14 @@ And implemented in a separate C++ file, like this:
}
-In this case, the parts of the implementation that will be used in the new conversion-rule
-are the ones in the two last method ``static inline PyObject* toPython(const Complex& cpx)``
-and ``static inline Complex toCpp(PyObject* pyobj)``. The ``isConvertible`` method is gone,
-and the ``checkType`` is now an attribute of the
-`<add-conversion> <http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#add-conversion>`_
-tag. Refer back to the first example in this page and you will be able to correlate the above template
-with the new scheme of conversion rule definition.
+In this case, the parts of the implementation that will be used in the new
+conversion-rule are the ones in the two last method
+``static inline PyObject* toPython(const Complex& cpx)`` and
+``static inline Complex toCpp(PyObject* pyobj)``. The ``isConvertible`` method
+is gone, and the ``checkType`` is now an attribute of the `<add-conversion>`_
+tag. Refer back to the first example in this page and you will be able to
+correlate the above template with the new scheme of conversion rule definition.
+
+.. _`<native-to-target>`: http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#native-to-target
+.. _`<target-to-native>`: http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#target-to-native
+.. _`<add-conversion>`: http://www.pyside.org/docs/apiextractor/typesystem_conversionrule.html#add-conversion
diff --git a/sources/shiboken2/doc/typesystemvariables.rst b/sources/shiboken2/doc/typesystemvariables.rst
index 205430550..9de2b02f5 100644
--- a/sources/shiboken2/doc/typesystemvariables.rst
+++ b/sources/shiboken2/doc/typesystemvariables.rst
@@ -59,9 +59,8 @@ Variables
system), this value will be inserted in the argument list. If you want to remove
the argument so completely that it doesn't appear in any form on the
``%ARGUMENT_NAMES`` replacement, don't forget to remove also its default value
- with the `<remove-default-expression/>
- <http://www.pyside.org/docs/apiextractor/typesystem_arguments.html#remove-default-expression>`_
- type system tag.
+ with the `<remove-default-expression/>`_ type system tag.
+
Take the following method and related type system description as an example:
@@ -334,3 +333,5 @@ that expects a Python sequence instead.
</inject-code>
</modify-function>
+
+.. _`<remove-default-expression/>`: http://www.pyside.org/docs/apiextractor/typesystem_arguments.html#remove-default-expression
diff --git a/sources/shiboken2/doc/wordsofadvice.rst b/sources/shiboken2/doc/wordsofadvice.rst
index b66799338..9aebf1f03 100644
--- a/sources/shiboken2/doc/wordsofadvice.rst
+++ b/sources/shiboken2/doc/wordsofadvice.rst
@@ -75,7 +75,8 @@ C++ object. In summary: don't do it!
Python old style classes and PySide
===================================
-Because of some architectural decisions and deprecated Python types. Since PySide 1.1 old style classes are not supported with multiple inheritance.
+Because of some architectural decisions and deprecated Python types.
+Since PySide 1.1 old style classes are not supported with multiple inheritance.
Below you can check the examples:
@@ -92,7 +93,8 @@ Example with old style class:
pass
-this example will raise a 'TypeError' due to the limitation on PySide, to fix this you will need use the new style class:
+this example will raise a 'TypeError' due to the limitation on PySide, to fix
+this you will need use the new style class:
.. code-block:: python
@@ -106,4 +108,5 @@ this example will raise a 'TypeError' due to the limitation on PySide, to fix th
pass
-All classes used for multiple inheritance with other PySide types need to have 'object' as base class.
+All classes used for multiple inheritance with other PySide types need to have
+'object' as base class.
diff --git a/sources/shiboken2/generator/main.cpp b/sources/shiboken2/generator/main.cpp
index 774775fb0..b787d9f7e 100644
--- a/sources/shiboken2/generator/main.cpp
+++ b/sources/shiboken2/generator/main.cpp
@@ -146,13 +146,18 @@ static void printOptions(QTextStream& s, const OptionDescriptions& options)
{
s.setFieldAlignment(QTextStream::AlignLeft);
for (const auto &od : options) {
- s << ' ';
if (!od.first.startsWith(QLatin1Char('-')))
s << "--";
- s.setFieldWidth(38);
- s << od.first << od.second;
- s.setFieldWidth(0);
- s << endl;
+ s << od.first;
+ if (od.second.isEmpty()) {
+ s << ", ";
+ } else {
+ s << endl;
+ const auto lines = od.second.splitRef(QLatin1Char('\n'));
+ for (const auto &line : lines)
+ s << " " << line << endl;
+ s << endl;
+ }
}
}
@@ -348,7 +353,8 @@ void printUsage()
<< qMakePair(QLatin1String("documentation-only"),
QLatin1String("Do not generates any code, just the documentation"))
<< qMakePair(QLatin1String("drop-type-entries=\"<TypeEntry0>[;TypeEntry1;...]\""),
- QLatin1String("Semicolon separated list of type system entries (classes, namespaces, global functions and enums) to be dropped from generation."))
+ QLatin1String("Semicolon separated list of type system entries (classes, namespaces,\n"
+ "global functions and enums) to be dropped from generation."))
<< qMakePair(QLatin1String("-F") + pathSyntax, QString())
<< qMakePair(QLatin1String("framework-include-paths=") + pathSyntax,
QLatin1String("Framework include paths used by the C++ parser"))
@@ -367,7 +373,8 @@ void printUsage()
<< qMakePair(QLatin1String("output-directory=<path>"),
QLatin1String("The directory where the generated files will be written"))
<< qMakePair(QLatin1String("project-file=<file>"),
- QLatin1String("text file containing a description of the binding project. Replaces and overrides command line arguments"))
+ QLatin1String("text file containing a description of the binding project.\n"
+ "Replaces and overrides command line arguments"))
<< qMakePair(QLatin1String("silent"),
QLatin1String("Avoid printing any message"))
<< qMakePair(QLatin1String("-T") + pathSyntax, QString())
@@ -381,7 +388,7 @@ void printUsage()
for (const GeneratorPtr &generator : generators) {
const OptionDescriptions options = generator->options();
if (!options.isEmpty()) {
- s << endl << generator->name() << " options:\n";
+ s << endl << generator->name() << " options:\n\n";
printOptions(s, generator->options());
}
}
diff --git a/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp
index 842c68b90..114ba401d 100644
--- a/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp
+++ b/sources/shiboken2/generator/qtdoc/qtdocgenerator.cpp
@@ -772,14 +772,25 @@ void QtXmlToSphinx::handleRowTag(QXmlStreamReader& reader)
}
}
+enum ListType { BulletList, OrderedList, EnumeratedList };
+
+static inline ListType webXmlListType(const QStringRef &t)
+{
+ if (t == QLatin1String("enum"))
+ return EnumeratedList;
+ if (t == QLatin1String("ordered"))
+ return OrderedList;
+ return BulletList;
+}
+
void QtXmlToSphinx::handleListTag(QXmlStreamReader& reader)
{
// BUG We do not support a list inside a table cell
- static QString listType;
+ static ListType listType = BulletList;
QXmlStreamReader::TokenType token = reader.tokenType();
if (token == QXmlStreamReader::StartElement) {
- listType = reader.attributes().value(QLatin1String("type")).toString();
- if (listType == QLatin1String("enum")) {
+ listType = webXmlListType(reader.attributes().value(QLatin1String("type")));
+ if (listType == EnumeratedList) {
m_currentTable << (TableRow() << "Constant" << "Description");
m_tableHasHeader = true;
}
@@ -787,19 +798,26 @@ void QtXmlToSphinx::handleListTag(QXmlStreamReader& reader)
} else if (token == QXmlStreamReader::EndElement) {
INDENT.indent++;
if (!m_currentTable.isEmpty()) {
- if (listType == QLatin1String("bullet")) {
+ switch (listType) {
+ case BulletList:
+ case OrderedList: {
m_output << endl;
+ const char *separator = listType == BulletList ? "* " : "#. ";
+ const char *indent = listType == BulletList ? " " : " ";
for (const TableCell &cell : m_currentTable.constFirst()) {
const QVector<QStringRef> itemLines = cell.data.splitRef(QLatin1Char('\n'));
- m_output << INDENT << "* " << itemLines.constFirst() << endl;
+ m_output << INDENT << separator << itemLines.constFirst() << endl;
for (int i = 1, max = itemLines.count(); i < max; ++i)
- m_output << INDENT << " " << itemLines[i] << endl;
+ m_output << INDENT << indent << itemLines[i] << endl;
}
m_output << endl;
- } else if (listType == QLatin1String("enum")) {
+ }
+ break;
+ case EnumeratedList:
m_currentTable.enableHeader(m_tableHasHeader);
m_currentTable.normalize();
m_output << ensureEndl << m_currentTable;
+ break;
}
}
m_currentTable.clear();
@@ -1289,6 +1307,12 @@ QString QtDocGenerator::fileNameSuffix() const
return QLatin1String(".rst");
}
+bool QtDocGenerator::shouldGenerate(const AbstractMetaClass *cls) const
+{
+ return Generator::shouldGenerate(cls)
+ && cls->typeEntry()->type() != TypeEntry::SmartPointerType;
+}
+
QString QtDocGenerator::fileNameForContext(GeneratorContext &context) const
{
const AbstractMetaClass *metaClass = context.metaClass();
@@ -1996,11 +2020,12 @@ Generator::OptionDescriptions QtDocGenerator::options() const
{
return OptionDescriptions()
<< qMakePair(QLatin1String("doc-parser"),
- QLatin1String("The documentation parser used to interpret the documentation input files (qdoc3|doxygen)"))
+ QLatin1String("The documentation parser used to interpret the documentation\n"
+ "input files (qdoc|doxygen)"))
<< qMakePair(QLatin1String("documentation-code-snippets-dir"),
QLatin1String("Directory used to search code snippets used by the documentation"))
<< qMakePair(QLatin1String("documentation-data-dir"),
- QLatin1String("Directory with XML files generated by documentation tool (qdoc3 or Doxygen)"))
+ QLatin1String("Directory with XML files generated by documentation tool"))
<< qMakePair(QLatin1String("documentation-extra-sections-dir"),
QLatin1String("Directory used to search for extra documentation sections"))
<< qMakePair(QLatin1String("library-source-dir"),
diff --git a/sources/shiboken2/generator/qtdoc/qtdocgenerator.h b/sources/shiboken2/generator/qtdoc/qtdocgenerator.h
index 9f08a4e8d..c8318b862 100644
--- a/sources/shiboken2/generator/qtdoc/qtdocgenerator.h
+++ b/sources/shiboken2/generator/qtdoc/qtdocgenerator.h
@@ -224,6 +224,8 @@ public:
return m_codeSnippetDirs;
}
+ bool shouldGenerate(const AbstractMetaClass *) const override;
+
protected:
QString fileNameSuffix() const override;
QString fileNameForContext(GeneratorContext &context) const override;
diff --git a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
index 18670eae6..8d4c146c1 100644
--- a/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/cppgenerator.cpp
@@ -4529,11 +4529,11 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu
enumValueText += cppEnum->name() + QLatin1String("::");
enumValueText += enumValue->name();
} else {
- enumValueText += QString::number(enumValue->value());
+ enumValueText += enumValue->value().toString();
}
- switch (enumTypeEntry->enumKind()) {
- case EnumTypeEntry::AnonymousEnum:
+ switch (cppEnum->enumKind()) {
+ case AnonymousEnum:
if (enclosingClass || hasUpperEnclosingClass) {
s << INDENT << '{' << endl;
{
@@ -4557,7 +4557,7 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu
}
}
break;
- case EnumTypeEntry::CEnum: {
+ case CEnum: {
s << INDENT << "if (!Shiboken::Enum::";
s << ((enclosingClass || hasUpperEnclosingClass) ? "createScopedEnumItem" : "createGlobalEnumItem");
s << '(' << enumVarTypeObj << ',' << endl;
@@ -4567,7 +4567,7 @@ void CppGenerator::writeEnumInitialization(QTextStream& s, const AbstractMetaEnu
s << INDENT << "return " << m_currentErrorCode << ';' << endl;
}
break;
- case EnumTypeEntry::EnumClass: {
+ case EnumClass: {
s << INDENT << "if (!Shiboken::Enum::createScopedEnumItem("
<< enumVarTypeObj << ',' << endl;
Indentation indent(INDENT);
diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp
index d64719bb8..c3bb4cbc8 100644
--- a/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp
+++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.cpp
@@ -2240,7 +2240,13 @@ AbstractMetaClassList ShibokenGenerator::getBaseClasses(const AbstractMetaClass*
{
AbstractMetaClassList baseClasses;
if (metaClass) {
- const QStringList &baseClassNames = metaClass->baseClassNames();
+ QStringList baseClassNames(metaClass->baseClassNames());
+ const QString defaultSuperclass = metaClass->typeEntry()->defaultSuperclass();
+ if (!defaultSuperclass.isEmpty()) {
+ int index = baseClassNames.indexOf(defaultSuperclass);
+ if (index >= 0)
+ baseClassNames.move(index, 0);
+ }
for (const QString &parent : baseClassNames) {
AbstractMetaClass *clazz = AbstractMetaClass::findClass(classes(), parent);
if (clazz)
@@ -2513,15 +2519,19 @@ Generator::OptionDescriptions ShibokenGenerator::options() const
<< qMakePair(QLatin1String(AVOID_PROTECTED_HACK),
QLatin1String("Avoid the use of the '#define protected public' hack."))
<< qMakePair(QLatin1String(DISABLE_VERBOSE_ERROR_MESSAGES),
- QLatin1String("Disable verbose error messages. Turn the python code hard to debug but safe few kB on the generated bindings."))
+ QLatin1String("Disable verbose error messages. Turn the python code hard to debug\n"
+ "but safe few kB on the generated bindings."))
<< qMakePair(QLatin1String(PARENT_CTOR_HEURISTIC),
QLatin1String("Enable heuristics to detect parent relationship on constructors."))
<< qMakePair(QLatin1String(ENABLE_PYSIDE_EXTENSIONS),
- QLatin1String("Enable PySide extensions, such as support for signal/slots, use this if you are creating a binding for a Qt-based library."))
+ QLatin1String("Enable PySide extensions, such as support for signal/slots,\n"
+ "use this if you are creating a binding for a Qt-based library."))
<< qMakePair(QLatin1String(RETURN_VALUE_HEURISTIC),
- QLatin1String("Enable heuristics to detect parent relationship on return values (USE WITH CAUTION!)"))
+ QLatin1String("Enable heuristics to detect parent relationship on return values\n"
+ "(USE WITH CAUTION!)"))
<< qMakePair(QLatin1String(USE_ISNULL_AS_NB_NONZERO),
- QLatin1String("If a class have an isNull()const method, it will be used to compute the value of boolean casts"));
+ QLatin1String("If a class have an isNull() const method, it will be used to compute\n"
+ "the value of boolean casts"));
}
static void getCode(QStringList& code, const CodeSnipList& codeSnips)
diff --git a/sources/shiboken2/libshiboken/qapp_macro.cpp b/sources/shiboken2/libshiboken/qapp_macro.cpp
index 9b940aaaa..e3f23de4f 100644
--- a/sources/shiboken2/libshiboken/qapp_macro.cpp
+++ b/sources/shiboken2/libshiboken/qapp_macro.cpp
@@ -105,7 +105,14 @@ reset_qApp_var()
return 0;
}
-
+/*
+ * Note:
+ * The PYSIDE-585 problem was that shutdown is called one more often
+ * than Q*Application is created. We could special-case that last
+ * shutdown or add a refcount, initially, but actually it was easier
+ * and more intuitive in that context to make the refcount of
+ * qApp_content equal to the refcount of Py_None.
+ */
PyObject *
MakeSingletonQAppWrapper(PyTypeObject *type)
{
@@ -132,15 +139,16 @@ MakeSingletonQAppWrapper(PyTypeObject *type)
// Debug mode showed that we need to do more than just remove the
// reference. To keep everything in the right order, it is easiest
// to do a full shutdown, using QtCore.__moduleShutdown().
+ // restore the "None-state"
PyObject *__moduleShutdown = PyDict_GetItemString(qApp_moduledicts[1],
"__moduleShutdown");
- if (__moduleShutdown != NULL) {
- Py_DECREF(PyObject_CallFunction(__moduleShutdown, (char *)"()"));
- }
- // restore the "None-state"
+ // PYSIDE-585: It was crucial to update the refcounts *before*
+ // calling the shutdown.
Py_TYPE(qApp_content) = Py_NONE_TYPE;
Py_REFCNT(qApp_var) = qApp_var_ref;
- Py_REFCNT(qApp_content) = qApp_content_ref;
+ Py_REFCNT(qApp_content) = Py_REFCNT(Py_None);
+ if (__moduleShutdown != NULL)
+ Py_DECREF(PyObject_CallFunction(__moduleShutdown, (char *)"()"));
}
else
(void)PyObject_INIT(qApp_content, type);
@@ -160,7 +168,7 @@ setup_qApp_var(PyObject *module)
return -1;
// This is a borrowed reference
qApp_moduledicts[0] = PyEval_GetBuiltins();
- Py_INCREF(qApp_content);
+ Py_INCREF(qApp_moduledicts[0]);
init_done = 1;
}
@@ -170,7 +178,7 @@ setup_qApp_var(PyObject *module)
if (module_index) {
// This line gets a borrowed reference
qApp_moduledicts[module_index] = PyModule_GetDict(module);
- Py_INCREF(qApp_content);
+ Py_INCREF(qApp_moduledicts[module_index]);
if (reset_qApp_var() < 0)
return -1;
}
diff --git a/sources/shiboken2/libshiboken/sbkconverter.cpp b/sources/shiboken2/libshiboken/sbkconverter.cpp
index 0e154da39..c81a1612b 100644
--- a/sources/shiboken2/libshiboken/sbkconverter.cpp
+++ b/sources/shiboken2/libshiboken/sbkconverter.cpp
@@ -523,7 +523,10 @@ PyTypeObject* getPythonTypeObject(const char* typeName)
bool pythonTypeIsValueType(const SbkConverter *converter)
{
- assert(converter);
+ // Unlikely to happen but for multi-inheritance SbkObjs
+ // the converter is not defined, hence we need a default return.
+ if (!converter)
+ return false;
return converter->pointerToPython && converter->copyToPython;
}
diff --git a/sources/shiboken2/tests/samplebinding/typesystem_sample.xml b/sources/shiboken2/tests/samplebinding/typesystem_sample.xml
index 5a12eeccd..3cc80860d 100644
--- a/sources/shiboken2/tests/samplebinding/typesystem_sample.xml
+++ b/sources/shiboken2/tests/samplebinding/typesystem_sample.xml
@@ -798,7 +798,7 @@
<value-type name="Event">
<enum-type name="EventType"/>
- <enum-type name="EventTypeClass" class="yes"/>
+ <enum-type name="EventTypeClass"/>
</value-type>
<value-type name="BlackBox">