return stringListValueMap[var];
}
+
+/*!
+ \brief Returns the a path list where all paths are canonicalized, then
+ made relative to the config file.
+ \param var The variable containing the list of paths.
+ \see Location::canonicalRelativePath()
+ */
+QStringList Config::getCanonicalRelativePathList(const QString& var) const
+{
+ if (!locMap[var].isEmpty())
+ (Location&) lastLoc = locMap[var];
+ QStringList t;
+ QMap<QString,QStringList>::const_iterator it = stringListValueMap.constFind(var);
+ if (it != stringListValueMap.constEnd()) {
+ const QStringList& sl = it.value();
+ if (!sl.isEmpty()) {
+ t.reserve(sl.size());
+ for (int i=0; i<sl.size(); ++i) {
+ const QString &canonicalized = location().canonicalRelativePath(sl[i]);
+ t.append(canonicalized);
+ }
+ }
+ }
+ return t;
+}
+
/*!
This function should only be called when the configuration
variable \a var maps to a string list that contains file paths.
const QSet<QString> &excludedFiles)
{
QStringList result = getStringList(filesVar);
- QStringList dirs = getStringList(dirsVar);
+ QStringList dirs = getCanonicalRelativePathList(dirsVar);
QString nameFilter = getString(filesVar + dot + QLatin1String(CONFIG_FILEEXTENSIONS));
QStringList::ConstIterator d = dirs.constBegin();
while (d != dirs.constEnd()) {
- result += getFilesHere(*d, nameFilter, excludedDirs, excludedFiles);
+ result += getFilesHere(*d, nameFilter, location(), excludedDirs, excludedFiles);
++d;
}
return result;
QStringList::ConstIterator d = dirs.constBegin();
while (d != dirs.constEnd()) {
- result += getFilesHere(*d, nameFilter, excludedDirs, excludedFiles);
+ result += getFilesHere(*d, nameFilter, location(), excludedDirs, excludedFiles);
++d;
}
return result;
QStringList Config::getFilesHere(const QString& uncleanDir,
const QString& nameFilter,
+ const Location &location,
const QSet<QString> &excludedDirs,
const QSet<QString> &excludedFiles)
{
- QString dir = QDir::cleanPath(uncleanDir);
+ //
+ QString dir = location.isEmpty() ? QDir::cleanPath(uncleanDir) : location.canonicalRelativePath(uncleanDir);
QStringList result;
if (excludedDirs.contains(dir))
return result;
fileNames = dirInfo.entryList();
fn = fileNames.constBegin();
while (fn != fileNames.constEnd()) {
- result += getFilesHere(dirInfo.filePath(*fn), nameFilter, excludedDirs, excludedFiles);
+ result += getFilesHere(dirInfo.filePath(*fn), nameFilter, location, excludedDirs, excludedFiles);
++fn;
}
return result;
QString getString(const QString& var) const;
QSet<QString> getStringSet(const QString& var) const;
QStringList getStringList(const QString& var) const;
+ QStringList getCanonicalRelativePathList(const QString& var) const;
QStringList getCleanPathList(const QString& var) const;
QRegExp getRegExp(const QString& var) const;
QList<QRegExp> getRegExpList(const QString& var) const;
QStringList getExampleQdocFiles();
static QStringList getFilesHere(const QString& dir,
const QString& nameFilter,
+ const Location &location = Location(),
const QSet<QString> &excludedDirs = QSet<QString>(),
const QSet<QString> &excludedFiles = QSet<QString>());
static QString findFile(const Location& location,
colons (\c{::}).
\code
- A link to the UI Component's TabWidget is \l {UIComponent::TabWidget}.
+ A link to the UI Component's TabWidget is \l {UIComponent::TabWidget}.
\endcode
QDoc will generate a page for the module with a listing of the members
\l {sourcedirs-variable} {sourcedirs} or \l {headerdirs-variable} {headerdirs}
variables.
- For example in \l qt.qdocconf
+ For example,
\code
- excludedirs = $QTDIR/extensions/activeqt \
- $QTDIR/extensions/motif \
- $QTDIR/tools/designer/src/lib/extension \
- $QTDIR/tools/designer/src/lib/sdk \
- $QTDIR/tools/designer/src/lib/uilib
+ sourcedirs = src/corelib
+ excludedirs = src/corelib/tmp
\endcode
When executed, QDoc will exclude the listed directories from
#include "config.h"
#include "location.h"
+#include <qdir.h>
#include <qregexp.h>
#include <stdlib.h>
#include <limits.h>
return fp.mid(fp.lastIndexOf('/') + 1);
}
+
+/*!
+ * \brief Returns \a path which is canonicalized and relative to the config file.
+ *
+ * QDir::relativeFilePath does not canonicalize the paths, so
+ * if the config file is located at qtbase\src\widgets\doc\qtwidgets.qdocconf
+ * and it has a reference to any ancestor folder (e.g. ".." or even "../doc")
+ * \param path
+ * \return
+ */
+QString Location::canonicalRelativePath(const QString &path) const
+{
+ QDir configFileDir(QFileInfo(filePath()).dir());
+ QDir dir(path);
+ const QString canon = dir.canonicalPath();
+ return configFileDir.relativeFilePath(canon);
+}
+
/*! \fn int Location::lineNo() const
Returns the current line number.
Must not be called on an empty Location object.