qdoc: Allow QML linking without version nr

This change allows links of the form:
\l{qml-module-name::qml-type}{name}
i.e. no version number provided.

This change does not handle collisions.
There aren't any in Qt5 at the moment.
If a collision occurs, qdoc will link to
the name in one of the colliding QML
modules, but not necessarily the most
recent one. Hence, the link may go to
the wrong page. A further update might
be forthcoming that will handle this
better.

Task-number: QTBUG-29778
Change-Id: Ie2c2b117446ed02852593dd0273c390d39fed927
Reviewed-by: Venugopal Shivashankar <venugopal.shivashankar@digia.com>
Reviewed-by: Jerome Pasion <jerome.pasion@digia.com>
This commit is contained in:
Martin Smith 2013-03-04 12:37:44 +01:00 committed by The Qt Project
parent 7ed41b0e54
commit c0c38912eb

View File

@ -291,29 +291,29 @@ DocNode* QDocDatabase::addToModule(const QString& name, Node* node)
*/
DocNode* QDocDatabase::addToQmlModule(const QString& name, Node* node)
{
QString longQmid, shortQmid;
QStringList qmid;
QStringList dotSplit;
QStringList blankSplit = name.split(QLatin1Char(' '));
qmid.append(blankSplit[0]);
if (blankSplit.size() > 1) {
longQmid = blankSplit[0] + blankSplit[1];
qmid.append(blankSplit[0] + blankSplit[1]);
dotSplit = blankSplit[1].split(QLatin1Char('.'));
shortQmid = blankSplit[0] + dotSplit[0];
qmid.append(blankSplit[0] + dotSplit[0]);
}
DocNode* dn = findQmlModule(name);
dn->addMember(node);
node->setQmlModuleInfo(name);
if (node->subType() == Node::QmlClass) {
QmlClassNode* n = static_cast<QmlClassNode*>(node);
QString key = longQmid + "::" + node->name();
for (int i=0; i<2; ++i) {
for (int i=0; i<qmid.size(); ++i) {
QString key = qmid[i] + "::" + node->name();
if (!qmlTypeMap_.contains(key))
qmlTypeMap_.insert(key,n);
if (!masterMap_.contains(key))
masterMap_.insert(key,node);
if (!masterMap_.contains(node->name(),node))
masterMap_.insert(node->name(),node);
key = shortQmid + "::" + node->name();
}
if (!masterMap_.contains(node->name(),node))
masterMap_.insert(node->name(),node);
}
return dn;
}