summaryrefslogtreecommitdiffstats
path: root/src/tools/qdoc/atom.cpp
diff options
context:
space:
mode:
authorMartin Smith <[email protected]>2014-11-25 15:18:49 +0100
committerMartin Smith <[email protected]>2015-01-12 13:12:05 +0100
commitdf6d2290e6399471431811160a0c0ff2eb16cb62 (patch)
tree4465dc3480b596391da7a0e13dc496d3ca0058ee /src/tools/qdoc/atom.cpp
parent9da1a1286493846fb0d58f7a848c13653136e1b3 (diff)
qdoc: qdoc's 'square bracket' parameters were evaluated too early
qdoc's link command (\l) allows an optional first argument enclosed in square brackets. This argument is used for narrowing and focusing the search for the link target. The argument should not be evaluated until the generate phase, but it was being evaluated in the prepare phase. This was also a problem when running qdoc in the single-exec mode. This update prevents qdoc from evaluating the argument until it is used in the generate phase. Change-Id: I82785e97077053fb5f5c11f0592155675334aaeb Task-number: QTBUG-42880 Reviewed-by: Martin Smith <[email protected]>
Diffstat (limited to 'src/tools/qdoc/atom.cpp')
-rw-r--r--src/tools/qdoc/atom.cpp45
1 files changed, 36 insertions, 9 deletions
diff --git a/src/tools/qdoc/atom.cpp b/src/tools/qdoc/atom.cpp
index 9aaa1af3198..caa6642cf3c 100644
--- a/src/tools/qdoc/atom.cpp
+++ b/src/tools/qdoc/atom.cpp
@@ -379,15 +379,33 @@ void Atom::dump() const
the space character.
*/
LinkAtom::LinkAtom(const QString& p1, const QString& p2)
- : Atom(p1), genus_(Node::DontCare), goal_(Node::NoType), domain_(0)
+ : Atom(p1),
+ resolved_(false),
+ genus_(Node::DontCare),
+ goal_(Node::NoType),
+ domain_(0),
+ squareBracketParams_(p2)
{
- QStringList params = p2.toLower().split(QLatin1Char(' '));
- foreach (const QString& p, params) {
+ // nada.
+}
+
+/*!
+ This function resolves the parameters that were enclosed in
+ square brackets. If the parameters have already been resolved,
+ it does nothing and returns immediately.
+ */
+void LinkAtom::resolveSquareBracketParams()
+{
+ if (resolved_)
+ return;
+ QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' '));
+ foreach (const QString& p, params) {
if (!domain_) {
domain_ = QDocDatabase::qdocDB()->findTree(p);
- if (domain_)
- continue;
- }
+ if (domain_) {
+ continue;
+ }
+ }
if (goal_ == Node::NoType) {
goal_ = Node::goal(p);
if (goal_ != Node::NoType)
@@ -401,9 +419,14 @@ LinkAtom::LinkAtom(const QString& p1, const QString& p2)
genus_ = Node::CPP;
continue;
}
- error_ = p2;
+ if (p == "doc") {
+ genus_ = Node::DOC;
+ continue;
+ }
+ error_ = squareBracketParams_;
break;
}
+ resolved_ = true;
}
/*!
@@ -411,10 +434,12 @@ LinkAtom::LinkAtom(const QString& p1, const QString& p2)
*/
LinkAtom::LinkAtom(const LinkAtom& t)
: Atom(Link, t.string()),
+ resolved_(t.resolved_),
genus_(t.genus_),
goal_(t.goal_),
domain_(t.domain_),
- error_(t.error_)
+ error_(t.error_),
+ squareBracketParams_(t.squareBracketParams_)
{
// nothing
}
@@ -426,10 +451,12 @@ LinkAtom::LinkAtom(const LinkAtom& t)
*/
LinkAtom::LinkAtom(Atom* previous, const LinkAtom& t)
: Atom(previous, Link, t.string()),
+ resolved_(t.resolved_),
genus_(t.genus_),
goal_(t.goal_),
domain_(t.domain_),
- error_(t.error_)
+ error_(t.error_),
+ squareBracketParams_(t.squareBracketParams_)
{
previous->next_ = this;
}