summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Boddie <dboddie@trolltech.com>2010-06-18 11:31:50 (GMT)
committerDavid Boddie <dboddie@trolltech.com>2010-06-18 11:31:50 (GMT)
commit68073bbcde2d1b12d36f0c58aab1fc20f02ab967 (patch)
treea3b0bb1a56edf47e16f9c37b3142e41b2fc11600
parent9e7f0b9e45cef278c8874539257b4038a0aa6615 (diff)
downloadQt-68073bbcde2d1b12d36f0c58aab1fc20f02ab967.zip
Qt-68073bbcde2d1b12d36f0c58aab1fc20f02ab967.tar.gz
Qt-68073bbcde2d1b12d36f0c58aab1fc20f02ab967.tar.bz2
qdoc: Added a workaround for QML/Qt class name clashes.
Reviewed-by: Trust Me
-rw-r--r--tools/qdoc3/codemarker.cpp12
-rw-r--r--tools/qdoc3/cppcodeparser.cpp7
-rw-r--r--tools/qdoc3/node.cpp13
-rw-r--r--tools/qdoc3/node.h6
-rw-r--r--tools/qdoc3/pagegenerator.cpp3
-rw-r--r--tools/qdoc3/tree.cpp10
6 files changed, 41 insertions, 10 deletions
diff --git a/tools/qdoc3/codemarker.cpp b/tools/qdoc3/codemarker.cpp
index 818a91f..33ceaf5 100644
--- a/tools/qdoc3/codemarker.cpp
+++ b/tools/qdoc3/codemarker.cpp
@@ -257,6 +257,7 @@ QString CodeMarker::typified(const QString &string)
QString CodeMarker::taggedNode(const Node* node)
{
QString tag;
+ QString name = node->name();
switch (node->type()) {
case Node::Namespace:
@@ -277,11 +278,20 @@ QString CodeMarker::taggedNode(const Node* node)
case Node::Property:
tag = QLatin1String("@property");
break;
+#ifdef QDOC_QML
+ case Node::Fake:
+ if (node->subType() == Node::QmlClass) {
+ if (node->name().startsWith(QLatin1String("QML:")))
+ name = name.mid(4); // remove the "QML:" prefix
+ }
+ tag = QLatin1String("@property");
+ break;
+#endif
default:
tag = QLatin1String("@unknown");
break;
}
- return QLatin1Char('<') + tag + QLatin1Char('>') + protect(node->name())
+ return QLatin1Char('<') + tag + QLatin1Char('>') + protect(name)
+ QLatin1String("</") + tag + QLatin1Char('>');
}
diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp
index 13678af..caee30b 100644
--- a/tools/qdoc3/cppcodeparser.cpp
+++ b/tools/qdoc3/cppcodeparser.cpp
@@ -728,7 +728,10 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc,
if (n)
classNode = static_cast<const ClassNode*>(n);
}
- return new QmlClassNode(tre->root(), names[0], classNode);
+ if (names[0].startsWith("Q"))
+ return new QmlClassNode(tre->root(), QLatin1String("QML:")+names[0], classNode);
+ else
+ return new QmlClassNode(tre->root(), names[0], classNode);
}
else if (command == COMMAND_QMLBASICTYPE) {
#if 0
@@ -752,6 +755,8 @@ Node *CppCodeParser::processTopicCommand(const Doc& doc,
QString type;
QmlClassNode* qmlClass = 0;
if (splitQmlMethodArg(doc,arg,type,element)) {
+ if (element.startsWith(QLatin1String("Q")))
+ element = QLatin1String("QML:") + element;
Node* n = tre->findNode(QStringList(element),Node::Fake);
if (n && n->subType() == Node::QmlClass) {
qmlClass = static_cast<QmlClassNode*>(n);
diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp
index 4664e9d..6a87639 100644
--- a/tools/qdoc3/node.cpp
+++ b/tools/qdoc3/node.cpp
@@ -871,6 +871,14 @@ FakeNode::FakeNode(InnerNode *parent, const QString& name, SubType subtype)
}
/*!
+ Returns the fake node's title. This is used for the page title.
+*/
+QString FakeNode::title() const
+{
+ return tle;
+}
+
+/*!
Returns the fake node's full title, which is usually
just title(), but for some SubType values is different
from title()
@@ -1324,7 +1332,10 @@ QmlClassNode::QmlClassNode(InnerNode *parent,
const ClassNode* cn)
: FakeNode(parent, name, QmlClass), cnode(cn)
{
- setTitle((qmlOnly ? "" : "QML ") + name + " Element");
+ if (name.startsWith(QLatin1String("QML:")))
+ setTitle((qmlOnly ? QLatin1String("") : QLatin1String("QML ")) + name.mid(4) + QLatin1String(" Element"));
+ else
+ setTitle((qmlOnly ? QLatin1String("") : QLatin1String("QML ")) + name + QLatin1String(" Element"));
}
/*!
diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h
index 523394d..90295ee 100644
--- a/tools/qdoc3/node.h
+++ b/tools/qdoc3/node.h
@@ -362,9 +362,9 @@ class FakeNode : public InnerNode
void addGroupMember(Node *node) { gr.append(node); }
SubType subType() const { return sub; }
- QString title() const { return tle; }
- QString fullTitle() const;
- QString subTitle() const;
+ virtual QString title() const;
+ virtual QString fullTitle() const;
+ virtual QString subTitle() const;
const NodeList &groupMembers() const { return gr; }
virtual QString nameForLists() const { return title(); }
diff --git a/tools/qdoc3/pagegenerator.cpp b/tools/qdoc3/pagegenerator.cpp
index cd364ef..a187c2e 100644
--- a/tools/qdoc3/pagegenerator.cpp
+++ b/tools/qdoc3/pagegenerator.cpp
@@ -209,7 +209,8 @@ QString PageGenerator::fileBase(const Node *node) const
*/
if ((p->subType() == Node::QmlClass) ||
(p->subType() == Node::QmlBasicType)) {
- base.prepend("qml-");
+ if (!base.startsWith(QLatin1String("QML:")))
+ base.prepend("qml-");
}
#endif
if (!pp || pp->name().isEmpty() || pp->type() == Node::Fake)
diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp
index 31bbf54..d31de4d 100644
--- a/tools/qdoc3/tree.cpp
+++ b/tools/qdoc3/tree.cpp
@@ -1952,9 +1952,13 @@ QString Tree::fullDocumentLocation(const Node *node) const
else if (node->type() == Node::Fake) {
#ifdef QDOC_QML
if ((node->subType() == Node::QmlClass) ||
- (node->subType() == Node::QmlBasicType))
- return "qml-" + node->fileBase() + ".html";
- else
+ (node->subType() == Node::QmlBasicType)) {
+ QString fb = node->fileBase();
+ if (fb.startsWith(QLatin1String("QML:")))
+ return node->fileBase() + ".html";
+ else
+ return "qml-" + node->fileBase() + ".html";
+ } else
#endif
parentName = node->fileBase() + ".html";
}