diff options
| author | Martin Smith <[email protected]> | 2014-11-25 15:18:49 +0100 |
|---|---|---|
| committer | Martin Smith <[email protected]> | 2015-01-12 13:12:05 +0100 |
| commit | df6d2290e6399471431811160a0c0ff2eb16cb62 (patch) | |
| tree | 4465dc3480b596391da7a0e13dc496d3ca0058ee /src/tools/qdoc/atom.cpp | |
| parent | 9da1a1286493846fb0d58f7a848c13653136e1b3 (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.cpp | 45 |
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; } |
