diff --git a/doc/global/compat.qdocconf b/doc/global/compat.qdocconf index ec4cfaa7c82..12d061a28ad 100644 --- a/doc/global/compat.qdocconf +++ b/doc/global/compat.qdocconf @@ -1,5 +1,3 @@ -alias.include = input - macro.0 = "\\\\0" macro.n = "\\\\n" macro.r = "\\\\r" diff --git a/src/tools/qdoc/config.cpp b/src/tools/qdoc/config.cpp index 8729bf387f8..48be30c24ea 100644 --- a/src/tools/qdoc/config.cpp +++ b/src/tools/qdoc/config.cpp @@ -181,6 +181,7 @@ QSet Config::overrideOutputFormats; QMap Config::extractedDirs; int Config::numInstances; QStack Config::workingDirs_; +QMap Config::includeFilesMap_; /*! \class Config @@ -201,6 +202,7 @@ Config::Config(const QString& programName) lastLocation_ = Location::null; configVars_.clear(); numInstances++; + includeFilesMap_.clear(); } /*! @@ -208,6 +210,7 @@ Config::Config(const QString& programName) */ Config::~Config() { + includeFilesMap_.clear(); } /*! @@ -588,6 +591,33 @@ void Config::subVarsAndValues(const QString& var, ConfigVarMultimap& t) const } } +/*! + Get all .qdocinc files. + */ +QString Config::getIncludeFilePath(const QString& fileName) const +{ + QString ext = fileName.mid(fileName.lastIndexOf('.')); + ext.prepend('*'); + + if (!includeFilesMap_.contains(ext)) { + QSet t; + QStringList result; + QStringList dirs = getCanonicalPathList(CONFIG_SOURCEDIRS); + QStringList::ConstIterator d = dirs.constBegin(); + while (d != dirs.constEnd()) { + result += getFilesHere(*d, ext, location(), t, t); + ++d; + } + includeFilesMap_.insert(ext, result); + } + const QStringList& paths = (*includeFilesMap_.find(ext)); + for (int i=0; i &excludedDirs = QSet(), const QSet &excludedFiles = QSet()); + QString getIncludeFilePath(const QString& fileName) const; QStringList getExampleQdocFiles(const QSet &excludedDirs, const QSet &excludedFiles); QStringList getExampleImageFiles(const QSet &excludedDirs, const QSet &excludedFiles); @@ -160,6 +161,7 @@ private: static QMap extractedDirs; static int numInstances; static QStack workingDirs_; + static QMap includeFilesMap_; }; #define CONFIG_ALIAS "alias" diff --git a/src/tools/qdoc/doc.cpp b/src/tools/qdoc/doc.cpp index 4d6b0b1a2cb..1e0c66cd082 100644 --- a/src/tools/qdoc/doc.cpp +++ b/src/tools/qdoc/doc.cpp @@ -125,6 +125,7 @@ enum { CMD_INCLUDE, CMD_INLINEIMAGE, CMD_INDEX, + CMD_INPUT, CMD_KEYWORD, CMD_L, CMD_LEGALESE, @@ -242,6 +243,7 @@ static struct { { "include", CMD_INCLUDE, 0 }, { "inlineimage", CMD_INLINEIMAGE, 0 }, { "index", CMD_INDEX, 0 }, // ### don't document for now + { "input", CMD_INPUT, 0 }, { "keyword", CMD_KEYWORD, 0 }, { "l", CMD_L, 0 }, { "legalese", CMD_LEGALESE, 0 }, @@ -923,6 +925,7 @@ void DocParser::parse(const QString& source, enterPara(Atom::ImportantLeft, Atom::ImportantRight); break; case CMD_INCLUDE: + case CMD_INPUT: { QString fileName = getArgument(); QString identifier = getRestOfLine(); @@ -1681,16 +1684,17 @@ void DocParser::insertTarget(const QString &target, bool keyword) void DocParser::include(const QString& fileName, const QString& identifier) { if (location().depth() > 16) - location().fatal(tr("Too many nested '\\%1's") - .arg(cmdName(CMD_INCLUDE))); + location().fatal(tr("Too many nested '\\%1's").arg(cmdName(CMD_INCLUDE))); QString userFriendlyFilePath; - // ### use current directory? + QString filePath = Doc::config()->getIncludeFilePath(fileName); +#if 0 QString filePath = Config::findFile(location(), sourceFiles, sourceDirs, fileName, userFriendlyFilePath); +#endif if (filePath.isEmpty()) { location().warning(tr("Cannot find qdoc include file '%1'").arg(fileName)); } @@ -3043,6 +3047,8 @@ const QStringMultiMap &Doc::metaTagMap() const return priv && priv->extra ? priv->extra->metaMap : *null_QStringMultiMap(); } +const Config* Doc::config_ = 0; + void Doc::initialize(const Config& config) { DocParser::tabSize = config.getInt(CONFIG_TABSIZE); @@ -3053,8 +3059,8 @@ void Doc::initialize(const Config& config) DocParser::quoting = config.getBool(CONFIG_QUOTINGINFORMATION); QmlClassNode::qmlOnly = config.getBool(CONFIG_QMLONLY); - QStringMap reverseAliasMap; + config_ = &config; QSet commands = config.subVars(CONFIG_ALIAS); QSet::ConstIterator c = commands.constBegin(); diff --git a/src/tools/qdoc/doc.h b/src/tools/qdoc/doc.h index bd3d623a050..65007634a6d 100644 --- a/src/tools/qdoc/doc.h +++ b/src/tools/qdoc/doc.h @@ -189,10 +189,12 @@ public: Quoter "er, const QString &fileName); static QString canonicalTitle(const QString &title); + static const Config* config() { return config_; } private: void detach(); DocPrivate *priv; + static const Config* config_; }; typedef QList DocList;