diff options
Diffstat (limited to 'src/qdoc')
31 files changed, 130 insertions, 128 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp index 5e04c344e..7d10ae089 100644 --- a/src/qdoc/clangcodeparser.cpp +++ b/src/qdoc/clangcodeparser.cpp @@ -1045,8 +1045,9 @@ ClangCodeParser::~ClangCodeParser() \a config. Call the initializeParser() in the base class. Get the defines list from the qdocconf database. */ -void ClangCodeParser::initializeParser(const Config &config) +void ClangCodeParser::initializeParser() { + Config &config = Config::instance(); printParsingErrors_ = 1; version_ = config.getString(CONFIG_VERSION); const auto args = config.getStringList(CONFIG_INCLUDEPATHS); @@ -1069,7 +1070,7 @@ void ClangCodeParser::initializeParser(const Config &config) path = fi.canonicalFilePath().toUtf8(); return path.prepend("-I"); }); - CppCodeParser::initializeParser(config); + CppCodeParser::initializeParser(); pchFileDir_.reset(nullptr); allHeaders_.clear(); pchName_.clear(); diff --git a/src/qdoc/clangcodeparser.h b/src/qdoc/clangcodeparser.h index b47c5f79c..078d307c2 100644 --- a/src/qdoc/clangcodeparser.h +++ b/src/qdoc/clangcodeparser.h @@ -53,7 +53,7 @@ class ClangCodeParser : public CppCodeParser public: ~ClangCodeParser() override; - void initializeParser(const Config &config) override; + void initializeParser() override; void terminateParser() override; QString language() override; QStringList headerFileNameFilter() override; diff --git a/src/qdoc/codemarker.cpp b/src/qdoc/codemarker.cpp index 000bf97f0..ab8b53039 100644 --- a/src/qdoc/codemarker.cpp +++ b/src/qdoc/codemarker.cpp @@ -66,7 +66,7 @@ CodeMarker::~CodeMarker() A code market performs no initialization by default. Marker-specific initialization is performed in subclasses. */ -void CodeMarker::initializeMarker(const Config &) // config +void CodeMarker::initializeMarker() { } @@ -82,11 +82,11 @@ void CodeMarker::terminateMarker() All the code markers in the static list are initialized here, after the qdoc configuration file has been loaded. */ -void CodeMarker::initialize(const Config &config) +void CodeMarker::initialize() { - defaultLang = config.getString(CONFIG_LANGUAGE); + defaultLang = Config::instance().getString(CONFIG_LANGUAGE); for (const auto &marker : qAsConst(markers)) - marker->initializeMarker(config); + marker->initializeMarker(); } /*! diff --git a/src/qdoc/codemarker.h b/src/qdoc/codemarker.h index e17b82903..094908836 100644 --- a/src/qdoc/codemarker.h +++ b/src/qdoc/codemarker.h @@ -34,15 +34,13 @@ QT_BEGIN_NAMESPACE -class Config; - class CodeMarker { public: CodeMarker(); virtual ~CodeMarker(); - virtual void initializeMarker(const Config &config); + virtual void initializeMarker(); virtual void terminateMarker(); virtual bool recognizeCode(const QString & /*code*/) { return true; } virtual bool recognizeExtension(const QString & /*extension*/) { return true; } @@ -73,7 +71,7 @@ public: virtual QString functionEndRegExp(const QString & /*funcName*/) { return QString(); } virtual QStringList macRefsForNode(Node *node); - static void initialize(const Config &config); + static void initialize(); static void terminate(); static CodeMarker *markerForCode(const QString &code); static CodeMarker *markerForFileName(const QString &fileName); diff --git a/src/qdoc/codeparser.cpp b/src/qdoc/codeparser.cpp index 4f4589823..e9dc3a352 100644 --- a/src/qdoc/codeparser.cpp +++ b/src/qdoc/codeparser.cpp @@ -68,10 +68,10 @@ CodeParser::~CodeParser() /*! Initialize the code parser base class. */ -void CodeParser::initializeParser(const Config &config) +void CodeParser::initializeParser() { - showInternal_ = config.getBool(CONFIG_SHOWINTERNAL); - singleExec_ = config.getBool(CONFIG_SINGLEEXEC); + showInternal_ = Config::instance().getBool(CONFIG_SHOWINTERNAL); + singleExec_ = Config::instance().getBool(CONFIG_SINGLEEXEC); } /*! @@ -96,10 +96,10 @@ void CodeParser::parseHeaderFile(const Location &location, const QString &filePa All the code parsers in the static list are initialized here, after the qdoc configuration variables have been set. */ -void CodeParser::initialize(const Config &config) +void CodeParser::initialize() { for (const auto &parser : qAsConst(parsers)) - parser->initializeParser(config); + parser->initializeParser(); } /*! diff --git a/src/qdoc/codeparser.h b/src/qdoc/codeparser.h index 7e1e551e4..6ab214eb1 100644 --- a/src/qdoc/codeparser.h +++ b/src/qdoc/codeparser.h @@ -35,7 +35,6 @@ QT_BEGIN_NAMESPACE -class Config; class Location; class QString; class QDocDatabase; @@ -48,7 +47,7 @@ public: CodeParser(); virtual ~CodeParser(); - virtual void initializeParser(const Config &config); + virtual void initializeParser(); virtual void terminateParser(); virtual QString language() = 0; virtual QStringList headerFileNameFilter(); @@ -66,7 +65,7 @@ public: void setModuleHeader(const QString &t) { moduleHeader_ = t; } void checkModuleInclusion(Node *n); - static void initialize(const Config &config); + static void initialize(); static void terminate(); static CodeParser *parserForLanguage(const QString &language); static CodeParser *parserForHeaderFile(const QString &filePath); diff --git a/src/qdoc/config.cpp b/src/qdoc/config.cpp index b4e3ffc8a..620e3dea7 100644 --- a/src/qdoc/config.cpp +++ b/src/qdoc/config.cpp @@ -241,7 +241,6 @@ QString Config::overrideOutputDir; QString Config::installDir; QSet<QString> Config::overrideOutputFormats; QMap<QString, QString> Config::extractedDirs; -int Config::numInstances; QStack<QString> Config::workingDirs_; QMap<QString, QStringList> Config::includeFilesMap_; @@ -254,13 +253,13 @@ QMap<QString, QStringList> Config::includeFilesMap_; */ /*! - The constructor sets the \a programName and initializes all + Initializes the Config with \a programName and sets all internal state variables to either default values or to ones defined in command line arguments \a args. */ -Config::Config(const QString &programName, const QStringList &args) : prog(programName) +void Config::init(const QString &programName, const QStringList &args) { - ++numInstances; + prog = programName; processCommandLineOptions(args); reset(); } diff --git a/src/qdoc/config.h b/src/qdoc/config.h index 451946ecd..0f3baa126 100644 --- a/src/qdoc/config.h +++ b/src/qdoc/config.h @@ -44,6 +44,21 @@ QT_BEGIN_NAMESPACE +template<typename T> +class Singleton +{ +public: + Singleton(const Singleton &) = delete; + Singleton &operator=(const Singleton &) = delete; + static T &instance() { + static T instance; + return instance; + } + +protected: + Singleton() = default; +}; + /* This struct contains all the information for one config variable found in a qdocconf file. @@ -75,14 +90,14 @@ struct ConfigVar */ typedef QMultiMap<QString, ConfigVar> ConfigVarMultimap; -class Config +class Config : public Singleton<Config> { Q_DECLARE_TR_FUNCTIONS(QDoc::Config) public: - Config(const QString &programName, const QStringList &args); ~Config(); + void init(const QString &programName, const QStringList &args); bool getDebug() const { return debug_; } void clear(); @@ -179,7 +194,6 @@ private: static QMap<QString, QString> uncompressedFiles; static QMap<QString, QString> extractedDirs; - static int numInstances; static QStack<QString> workingDirs_; static QMap<QString, QStringList> includeFilesMap_; QDocCommandLineParser m_parser; diff --git a/src/qdoc/cppcodeparser.cpp b/src/qdoc/cppcodeparser.cpp index 6a5087583..87fade3cc 100644 --- a/src/qdoc/cppcodeparser.cpp +++ b/src/qdoc/cppcodeparser.cpp @@ -90,9 +90,9 @@ CppCodeParser::CppCodeParser() for identifying important nodes. And it initializes some filters for identifying and excluding certain kinds of files. */ -void CppCodeParser::initializeParser(const Config &config) +void CppCodeParser::initializeParser() { - CodeParser::initializeParser(config); + CodeParser::initializeParser(); /* All these can appear in a C++ namespace. Don't add @@ -118,6 +118,7 @@ void CppCodeParser::initializeParser(const Config &config) nodeTypeTestFuncMap_.insert(COMMAND_PROPERTY, &Node::isProperty); nodeTypeTestFuncMap_.insert(COMMAND_VARIABLE, &Node::isVariable); + Config &config = Config::instance(); exampleFiles = config.getCanonicalPathList(CONFIG_EXAMPLES); exampleDirs = config.getCanonicalPathList(CONFIG_EXAMPLEDIRS); QStringList exampleFilePatterns = diff --git a/src/qdoc/cppcodeparser.h b/src/qdoc/cppcodeparser.h index 04e556dc6..41607434f 100644 --- a/src/qdoc/cppcodeparser.h +++ b/src/qdoc/cppcodeparser.h @@ -57,7 +57,7 @@ class CppCodeParser : public CodeParser public: CppCodeParser(); - void initializeParser(const Config &config) override; + void initializeParser() override; void terminateParser() override; QString language() override { return QStringLiteral("Cpp"); } QStringList headerFileNameFilter() override; diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp index 89748b0ad..1720fbaeb 100644 --- a/src/qdoc/doc.cpp +++ b/src/qdoc/doc.cpp @@ -1567,7 +1567,7 @@ void DocParser::include(const QString &fileName, const QString &identifier) location().fatal(tr("Too many nested '\\%1's").arg(cmdName(CMD_INCLUDE))); QString userFriendlyFilePath; - QString filePath = Doc::config()->getIncludeFilePath(fileName); + QString filePath = Config::instance().getIncludeFilePath(fileName); if (filePath.isEmpty()) { location().warning(tr("Cannot find qdoc include file '%1'").arg(fileName)); } else { @@ -3011,10 +3011,9 @@ const QStringMultiMap &Doc::metaTagMap() const return priv && priv->extra ? priv->extra->metaMap_ : *null_QStringMultiMap(); } -const Config *Doc::config_ = nullptr; - -void Doc::initialize(const Config &config) +void Doc::initialize() { + Config &config = Config::instance(); DocParser::tabSize = config.getInt(CONFIG_TABSIZE); DocParser::exampleFiles = config.getCanonicalPathList(CONFIG_EXAMPLES); DocParser::exampleDirs = config.getCanonicalPathList(CONFIG_EXAMPLEDIRS); @@ -3024,7 +3023,6 @@ void Doc::initialize(const Config &config) QmlTypeNode::qmlOnly = config.getBool(CONFIG_QMLONLY); QStringMap reverseAliasMap; - config_ = &config; for (const auto &a : config.subVars(CONFIG_ALIAS)) { QString alias = config.getString(CONFIG_ALIAS + Config::dot + a); diff --git a/src/qdoc/doc.h b/src/qdoc/doc.h index 758901f1d..c488983ca 100644 --- a/src/qdoc/doc.h +++ b/src/qdoc/doc.h @@ -43,7 +43,6 @@ QT_BEGIN_NAMESPACE class Atom; class CodeMarker; -class Config; class DocPrivate; class Quoter; class Text; @@ -167,7 +166,7 @@ public: const QVector<Atom *> &targets() const; const QStringMultiMap &metaTagMap() const; - static void initialize(const Config &config); + static void initialize(); static void terminate(); static QString alias(const QString &english); static void trimCStyleComment(Location &location, QString &str); @@ -176,12 +175,10 @@ public: static CodeMarker *quoteFromFile(const Location &location, 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_; }; Q_DECLARE_TYPEINFO(Doc, Q_MOVABLE_TYPE); typedef QVector<Doc> DocList; diff --git a/src/qdoc/docbookgenerator.cpp b/src/qdoc/docbookgenerator.cpp index 0a87b0c3a..3c92b9705 100644 --- a/src/qdoc/docbookgenerator.cpp +++ b/src/qdoc/docbookgenerator.cpp @@ -36,6 +36,7 @@ #include <QtCore/qversionnumber.h> #include "codemarker.h" +#include "config.h" #include "generator.h" #include "docbookgenerator.h" #include "node.h" @@ -96,12 +97,13 @@ static void writeAnchor(QXmlStreamWriter &writer, QString id) /*! Initializes the DocBook output generator's data structures - from the configuration class \a config. + from the configuration (Config). */ -void DocBookGenerator::initializeGenerator(const Config &config) +void DocBookGenerator::initializeGenerator() { // Excerpts from HtmlGenerator::initializeGenerator. - Generator::initializeGenerator(config); + Generator::initializeGenerator(); + Config &config = Config::instance(); project = config.getString(CONFIG_PROJECT); @@ -2132,7 +2134,7 @@ void DocBookGenerator::generateRequiredLinks(QXmlStreamWriter &writer, const Nod return; const auto en = static_cast<const ExampleNode *>(node); - QString exampleUrl = config()->getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES); + QString exampleUrl = Config::instance().getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES); if (exampleUrl.isEmpty()) { if (!en->noAutoList()) { @@ -2173,7 +2175,7 @@ void DocBookGenerator::generateLinkToExample(QXmlStreamWriter &writer, const Exa // Construct a path to the example; <install path>/<example name> QStringList path = QStringList() - << config()->getString(CONFIG_EXAMPLESINSTALLPATH) << en->name(); + << Config::instance().getString(CONFIG_EXAMPLESINSTALLPATH) << en->name(); path.removeAll({}); writer.writeStartElement(dbNamespace, "para"); diff --git a/src/qdoc/docbookgenerator.h b/src/qdoc/docbookgenerator.h index 202a0c5c7..540aa7586 100644 --- a/src/qdoc/docbookgenerator.h +++ b/src/qdoc/docbookgenerator.h @@ -37,13 +37,11 @@ #include <qregexp.h> #include <qxmlstream.h> #include "codemarker.h" -#include "config.h" #include "xmlgenerator.h" #include <QtCore/qxmlstream.h> #include "codemarker.h" -#include "config.h" QT_BEGIN_NAMESPACE @@ -52,7 +50,7 @@ class DocBookGenerator : public XmlGenerator public: explicit DocBookGenerator() = default; - void initializeGenerator(const Config &config) override; + void initializeGenerator() override; QString format() override; protected: diff --git a/src/qdoc/generator.cpp b/src/qdoc/generator.cpp index 6bcc084b5..ab27ecea7 100644 --- a/src/qdoc/generator.cpp +++ b/src/qdoc/generator.cpp @@ -921,7 +921,7 @@ void Generator::generateRequiredLinks(const Node *node, CodeMarker *marker) return; const ExampleNode *en = static_cast<const ExampleNode *>(node); - QString exampleUrl = config()->getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES); + QString exampleUrl = Config::instance().getString(CONFIG_URL + Config::dot + CONFIG_EXAMPLES); if (exampleUrl.isEmpty()) { if (!en->noAutoList()) { @@ -962,7 +962,7 @@ void Generator::generateLinkToExample(const ExampleNode *en, CodeMarker *marker, // Construct a path to the example; <install path>/<example name> QStringList path = QStringList() - << config()->getString(CONFIG_EXAMPLESINSTALLPATH) << en->name(); + << Config::instance().getString(CONFIG_EXAMPLESINSTALLPATH) << en->name(); path.removeAll({}); Text text; @@ -1685,8 +1685,9 @@ QString Generator::indent(int level, const QString &markedCode) return t; } -void Generator::initialize(const Config &config) +void Generator::initialize() { + Config &config = Config::instance(); outputFormats = config.getOutputFormats(); redirectDocumentationToDevNull_ = config.getBool(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL); @@ -1706,7 +1707,7 @@ void Generator::initialize(const Config &config) for (auto &g : generators) { if (outputFormats.contains(g->format())) { currentGenerator_ = g; - g->initializeGenerator(config); + g->initializeGenerator(); } } @@ -1765,9 +1766,9 @@ void Generator::initialize(const Config &config) Creates template-specific subdirs (e.g. /styles and /scripts for HTML) and copies the files to them. */ -void Generator::copyTemplateFiles(const Config &config, const QString &configVar, - const QString &subDir) +void Generator::copyTemplateFiles(const QString &configVar, const QString &subDir) { + Config &config = Config::instance(); QStringList files = config.getCanonicalPathList(configVar, true); if (!files.isEmpty()) { QDir dirInfo; @@ -1785,12 +1786,13 @@ void Generator::copyTemplateFiles(const Config &config, const QString &configVar } /*! - Reads format-specific variables from \a config, sets output + Reads format-specific variables from config, sets output (sub)directories, creates them on the filesystem and copies the template-specific files. */ -void Generator::initializeFormat(const Config &config) +void Generator::initializeFormat() { + Config &config = Config::instance(); outFileNames_.clear(); useOutputSubdirs_ = true; if (config.getBool(format() + Config::dot + "nosubdirs")) @@ -1825,9 +1827,9 @@ void Generator::initializeFormat(const Config &config) config.lastLocation().fatal( tr("Cannot create images directory '%1'").arg(outDir_ + "/images")); - copyTemplateFiles(config, format() + Config::dot + CONFIG_STYLESHEETS, "style"); - copyTemplateFiles(config, format() + Config::dot + CONFIG_SCRIPTS, "scripts"); - copyTemplateFiles(config, format() + Config::dot + CONFIG_EXTRAIMAGES, "images"); + copyTemplateFiles(format() + Config::dot + CONFIG_STYLESHEETS, "style"); + copyTemplateFiles(format() + Config::dot + CONFIG_SCRIPTS, "scripts"); + copyTemplateFiles(format() + Config::dot + CONFIG_EXTRAIMAGES, "images"); // Use a format-specific .quotinginformation if defined, otherwise a global value if (config.subVars(format()).contains(CONFIG_QUOTINGINFORMATION)) @@ -1851,11 +1853,10 @@ void Generator::augmentImageDirs(QSet<QString> &moreImageDirs) /*! Sets the generator's pointer to the Config instance. */ -void Generator::initializeGenerator(const Config &config) +void Generator::initializeGenerator() { - config_ = &config; - showInternal_ = config.getBool(CONFIG_SHOWINTERNAL); - singleExec_ = config.getBool(CONFIG_SINGLEEXEC); + showInternal_ = Config::instance().getBool(CONFIG_SHOWINTERNAL); + singleExec_ = Config::instance().getBool(CONFIG_SINGLEEXEC); } bool Generator::matchAhead(const Atom *atom, Atom::AtomType expectedAtomType) diff --git a/src/qdoc/generator.h b/src/qdoc/generator.h index f4f5a75df..05a215c46 100644 --- a/src/qdoc/generator.h +++ b/src/qdoc/generator.h @@ -42,7 +42,6 @@ QT_BEGIN_NAMESPACE typedef QMultiMap<QString, Node *> NodeMultiMap; typedef QMap<Node *, NodeMultiMap> ParentMaps; -class Config; class CodeMarker; class Location; class Node; @@ -62,18 +61,17 @@ public: virtual bool canHandleFormat(const QString &format) { return format == this->format(); } virtual QString format() = 0; virtual void generateDocs(); - virtual void initializeGenerator(const Config &config); - virtual void initializeFormat(const Config &config); + virtual void initializeGenerator(); + virtual void initializeFormat(); virtual void terminateGenerator(); QString fullDocumentLocation(const Node *node, bool useSubdir = false); - const Config *config() { return config_; } QString linkForExampleFile(const QString &path, const Node *parent, const QString &fileExt = QString()); static QString exampleFileTitle(const ExampleNode *relative, const QString &fileName); static Generator *currentGenerator() { return currentGenerator_; } static Generator *generatorForFormat(const QString &format); - static void initialize(const Config &config); + static void initialize(); static const QString &outputDir() { return outDir_; } static const QString &outputSubdir() { return outSubdir_; } static void terminate(); @@ -231,11 +229,9 @@ private: static QmlTypeNode *qmlTypeContext_; void generateReimplementsClause(const FunctionNode *fn, CodeMarker *marker); - static void copyTemplateFiles(const Config &config, const QString &configVar, - const QString &subDir); + static void copyTemplateFiles(const QString &configVar, const QString &subDir); protected: - const Config *config_; QDocDatabase *qdb_; bool inLink_; bool inContents_; diff --git a/src/qdoc/helpprojectwriter.cpp b/src/qdoc/helpprojectwriter.cpp index 6f231f232..019604ce7 100644 --- a/src/qdoc/helpprojectwriter.cpp +++ b/src/qdoc/helpprojectwriter.cpp @@ -41,13 +41,12 @@ QT_BEGIN_NAMESPACE -HelpProjectWriter::HelpProjectWriter(const Config &config, const QString &defaultFileName, - Generator *g) +HelpProjectWriter::HelpProjectWriter(const QString &defaultFileName, Generator *g) { - reset(config, defaultFileName, g); + reset(defaultFileName, g); } -void HelpProjectWriter::reset(const Config &config, const QString &defaultFileName, Generator *g) +void HelpProjectWriter::reset(const QString &defaultFileName, Generator *g) { projects.clear(); gen_ = g; @@ -60,6 +59,7 @@ void HelpProjectWriter::reset(const Config &config, const QString &defaultFileNa // The output directory should already have been checked by the calling // generator. + Config &config = Config::instance(); outputDir = config.getOutputDir(); const QStringList names = config.getStringList(CONFIG_QHP + Config::dot + "projects"); diff --git a/src/qdoc/helpprojectwriter.h b/src/qdoc/helpprojectwriter.h index be5439dfb..eedfa3909 100644 --- a/src/qdoc/helpprojectwriter.h +++ b/src/qdoc/helpprojectwriter.h @@ -29,7 +29,6 @@ #ifndef HELPPROJECTWRITER_H #define HELPPROJECTWRITER_H -#include "config.h" #include "node.h" #include <QtCore/qstring.h> @@ -83,8 +82,8 @@ class HelpProjectWriter Q_DECLARE_TR_FUNCTIONS(QDoc::HelpProjectWriter) public: - HelpProjectWriter(const Config &config, const QString &defaultFileName, Generator *g); - void reset(const Config &config, const QString &defaultFileName, Generator *g); + HelpProjectWriter(const QString &defaultFileName, Generator *g); + void reset(const QString &defaultFileName, Generator *g); void addExtraFile(const QString &file); void addExtraFiles(const QSet<QString> &files); void generate(); diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index ac1b8ddb3..c7cfb1cbc 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -32,6 +32,7 @@ #include "htmlgenerator.h" +#include "config.h" #include "codemarker.h" #include "codeparser.h" #include "helpprojectwriter.h" @@ -105,9 +106,9 @@ HtmlGenerator::~HtmlGenerator() /*! Initializes the HTML output generator's data structures - from the configuration class \a config. + from the configuration (Config) singleton. */ -void HtmlGenerator::initializeGenerator(const Config &config) +void HtmlGenerator::initializeGenerator() { static const struct { @@ -126,7 +127,8 @@ void HtmlGenerator::initializeGenerator(const Config &config) { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" }, { nullptr, nullptr, nullptr } }; - Generator::initializeGenerator(config); + Generator::initializeGenerator(); + Config &config = Config::instance(); obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS); setImageFileExtensions(QStringList() << "png" << "jpg" @@ -204,9 +206,9 @@ void HtmlGenerator::initializeGenerator(const Config &config) per qdoc execution. */ if (helpProjectWriter) - helpProjectWriter->reset(config, project.toLower() + ".qhp", this); + helpProjectWriter->reset(project.toLower() + ".qhp", this); else - helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this); + helpProjectWriter = new HelpProjectWriter(project.toLower() + ".qhp", this); // Documentation template handling headerScripts = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSCRIPTS); @@ -217,7 +219,7 @@ void HtmlGenerator::initializeGenerator(const Config &config) QLatin1String("qthelp://") + config.getString(prefix + QLatin1String("namespace")); manifestDir += QLatin1Char('/') + config.getString(prefix + QLatin1String("virtualFolder")) + QLatin1Char('/'); - readManifestMetaContent(config); + readManifestMetaContent(); examplesPath = config.getString(CONFIG_EXAMPLESINSTALLPATH); if (!examplesPath.isEmpty()) examplesPath += QLatin1Char('/'); @@ -4089,8 +4091,9 @@ void HtmlGenerator::generateManifestFile(const QString &manifest, const QString The manifest metacontent map is cleared immediately after the manifest files have been generated. */ -void HtmlGenerator::readManifestMetaContent(const Config &config) +void HtmlGenerator::readManifestMetaContent() { + Config &config = Config::instance(); const QStringList names = config.getStringList(CONFIG_MANIFESTMETA + Config::dot + QStringLiteral("filters")); diff --git a/src/qdoc/htmlgenerator.h b/src/qdoc/htmlgenerator.h index 81516ef15..1c95d7349 100644 --- a/src/qdoc/htmlgenerator.h +++ b/src/qdoc/htmlgenerator.h @@ -34,7 +34,6 @@ #define HTMLGENERATOR_H #include "codemarker.h" -#include "config.h" #include "xmlgenerator.h" #include <QtCore/qhash.h> @@ -54,7 +53,7 @@ public: HtmlGenerator(); ~HtmlGenerator() override; - void initializeGenerator(const Config &config) override; + void initializeGenerator() override; void terminateGenerator() override; QString format() override; void generateDocs() override; @@ -79,7 +78,7 @@ protected: QString fileExtension() const override; void generateManifestFile(const QString &manifest, const QString &element); - void readManifestMetaContent(const Config &config); + void readManifestMetaContent(); void generateKeywordAnchors(const Node *node); void generateAssociatedPropertyNotes(const FunctionNode *fn); diff --git a/src/qdoc/location.cpp b/src/qdoc/location.cpp index aab8ede19..f3db56c00 100644 --- a/src/qdoc/location.cpp +++ b/src/qdoc/location.cpp @@ -315,13 +315,14 @@ void Location::report(const QString &message, const QString &details) const } /*! - Gets several parameters from the \a config, including + Gets several parameters from the config, including tab size, program name, and a regular expression that appears to be used for matching certain error messages so that emitMessage() can avoid printing them. */ -void Location::initialize(const Config &config) +void Location::initialize() { + Config &config = Config::instance(); tabSize = config.getInt(CONFIG_TABSIZE); programName = config.programName(); project = config.getString(CONFIG_PROJECT); diff --git a/src/qdoc/location.h b/src/qdoc/location.h index 9ad601e1b..bbefb10eb 100644 --- a/src/qdoc/location.h +++ b/src/qdoc/location.h @@ -38,7 +38,6 @@ QT_BEGIN_NAMESPACE -class Config; class QRegExp; class Location @@ -82,7 +81,7 @@ public: static const Location null; - static void initialize(const Config &config); + static void initialize(); static void terminate(); static void information(const QString &message); static void internalError(const QString &hint); diff --git a/src/qdoc/main.cpp b/src/qdoc/main.cpp index 5bb4c2d28..5f98dabd5 100644 --- a/src/qdoc/main.cpp +++ b/src/qdoc/main.cpp @@ -88,8 +88,9 @@ static ClangCodeParser *clangParser_ = nullptr; a list of output formats; each format may have a different output subdirectory where index files are located. */ -static void loadIndexFiles(Config &config, const QSet<QString> &formats) +static void loadIndexFiles(const QSet<QString> &formats) { + Config &config = Config::instance(); QDocDatabase *qdb = QDocDatabase::qdocDB(); QStringList indexFiles; const QStringList configIndexes = config.getStringList(CONFIG_INDEXES); @@ -229,8 +230,9 @@ static void loadIndexFiles(Config &config, const QSet<QString> &formats) of QDoc. The \a config instance represents the configuration data for QDoc. All other classes are initialized with the same config. */ -static void processQdocconfFile(const QString &fileName, Config &config) +static void processQdocconfFile(const QString &fileName) { + Config &config = Config::instance(); config.setPreviousCurrentDir(QDir::currentPath()); /* @@ -242,7 +244,7 @@ static void processQdocconfFile(const QString &fileName, Config &config) in the file being processed, mainly for error reporting purposes. */ - Location::initialize(config); + Location::initialize(); config.load(fileName); QString project = config.getString(CONFIG_PROJECT); if (project.isEmpty()) { @@ -279,12 +281,12 @@ static void processQdocconfFile(const QString &fileName, Config &config) are either cleared after they have been used, or they are cleared in the terminate() functions below. */ - Location::initialize(config); - Tokenizer::initialize(config); - CodeMarker::initialize(config); - CodeParser::initialize(config); - Generator::initialize(config); - Doc::initialize(config); + Location::initialize(); + Tokenizer::initialize(); + CodeMarker::initialize(); + CodeParser::initialize(); + Generator::initialize(); + Doc::initialize(); #ifndef QT_NO_TRANSLATION /* @@ -348,7 +350,7 @@ static void processQdocconfFile(const QString &fileName, Config &config) if (!Generator::singleExec()) { if (!Generator::preparing()) { qCDebug(lcQdoc, " loading index files"); - loadIndexFiles(config, outputFormats); + loadIndexFiles(outputFormats); qCDebug(lcQdoc, " done loading index files"); } qdb->newPrimaryTree(project); @@ -497,7 +499,7 @@ static void processQdocconfFile(const QString &fileName, Config &config) if (generator == nullptr) outputFormatsLocation.fatal( QCoreApplication::translate("QDoc", "Unknown output format '%1'").arg(format)); - generator->initializeFormat(config); + generator->initializeFormat(); generator->generateDocs(); } qdb->clearLinkCounts(); @@ -562,7 +564,8 @@ int main(int argc, char **argv) WebXMLGenerator webXMLGenerator; DocBookGenerator docBookGenerator; - Config config(QCoreApplication::translate("QDoc", "qdoc"), app.arguments()); + Config::instance().init(QCoreApplication::translate("QDoc", "qdoc"), app.arguments()); + Config &config = Config::instance(); // Get the list of files to act on: QStringList qdocFiles = config.qdocFiles(); @@ -577,19 +580,19 @@ int main(int argc, char **argv) Generator::setQDocPass(Generator::Prepare); for (const auto &file : qAsConst(qdocFiles)) { config.dependModules().clear(); - processQdocconfFile(file, config); + processQdocconfFile(file); } Generator::setQDocPass(Generator::Generate); QDocDatabase::qdocDB()->processForest(); for (const auto &file : qAsConst(qdocFiles)) { config.dependModules().clear(); - processQdocconfFile(file, config); + processQdocconfFile(file); } } else { // separate qdoc processes for prepare and generate phases for (const auto &file : qAsConst(qdocFiles)) { config.dependModules().clear(); - processQdocconfFile(file, config); + processQdocconfFile(file); } } diff --git a/src/qdoc/qdocindexfiles.cpp b/src/qdoc/qdocindexfiles.cpp index 39d7e360e..7298f7e84 100644 --- a/src/qdoc/qdocindexfiles.cpp +++ b/src/qdoc/qdocindexfiles.cpp @@ -1503,11 +1503,10 @@ void QDocIndexFiles::generateIndexSections(QXmlStreamWriter &writer, Node *node, } /*! - Writes aqdoc module index in XML to a file named \afilerName. - \a url becaomes the \c url attribute of the <INDEX> element. - \a title becomes the \c title attribute of the <INDEX> element. - \a g is used to get the Config object that contains the variables - from the module's .qdocconf file. + Writes a qdoc module index in XML to a file named \a fileName. + \a url is the \c url attribute of the <INDEX> element. + \a title is the \c title attribute of the <INDEX> element. + \a g is a pointer to the current Generator in use, stored for later use. */ void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url, const QString &title, Generator *g) @@ -1529,7 +1528,7 @@ void QDocIndexFiles::generateIndex(const QString &fileName, const QString &url, writer.writeAttribute("url", url); writer.writeAttribute("title", title); writer.writeAttribute("version", qdb_->version()); - writer.writeAttribute("project", g->config()->getString(CONFIG_PROJECT)); + writer.writeAttribute("project", Config::instance().getString(CONFIG_PROJECT)); root_ = qdb_->primaryTreeRoot(); if (!root_->tree()->indexTitle().isEmpty()) diff --git a/src/qdoc/qmlcodeparser.cpp b/src/qdoc/qmlcodeparser.cpp index 06ce5e1a5..e161b9cfc 100644 --- a/src/qdoc/qmlcodeparser.cpp +++ b/src/qdoc/qmlcodeparser.cpp @@ -33,7 +33,6 @@ #include "qmlcodeparser.h" #include "node.h" -#include "config.h" #include "qmlvisitor.h" #ifndef QT_NO_DECLARATIVE @@ -60,14 +59,12 @@ QmlCodeParser::QmlCodeParser() QmlCodeParser::~QmlCodeParser() {} /*! - Initializes the code parser base class. The \a config argument - is passed to the initialization functions in the base class. - + Initializes the code parser base class. Also creates a lexer and parser from QQmlJS. */ -void QmlCodeParser::initializeParser(const Config &config) +void QmlCodeParser::initializeParser() { - CodeParser::initializeParser(config); + CodeParser::initializeParser(); #ifndef QT_NO_DECLARATIVE lexer = new QQmlJS::Lexer(&engine); diff --git a/src/qdoc/qmlcodeparser.h b/src/qdoc/qmlcodeparser.h index f639f2115..ca34dc111 100644 --- a/src/qdoc/qmlcodeparser.h +++ b/src/qdoc/qmlcodeparser.h @@ -45,7 +45,6 @@ QT_BEGIN_NAMESPACE -class Config; class Node; class QString; @@ -57,7 +56,7 @@ public: QmlCodeParser(); ~QmlCodeParser() override; - void initializeParser(const Config &config) override; + void initializeParser() override; void terminateParser() override; QString language() override; QStringList sourceFileNameFilter() override; diff --git a/src/qdoc/tokenizer.cpp b/src/qdoc/tokenizer.cpp index d15b6d318..7a59bc598 100644 --- a/src/qdoc/tokenizer.cpp +++ b/src/qdoc/tokenizer.cpp @@ -502,8 +502,9 @@ int Tokenizer::getToken() return Tok_Eoi; } -void Tokenizer::initialize(const Config &config) +void Tokenizer::initialize() { + Config &config = Config::instance(); QString versionSym = config.getString(CONFIG_VERSIONSYM); QString sourceEncoding = config.getString(CONFIG_SOURCEENCODING); diff --git a/src/qdoc/tokenizer.h b/src/qdoc/tokenizer.h index 4f35090fe..64f188f07 100644 --- a/src/qdoc/tokenizer.h +++ b/src/qdoc/tokenizer.h @@ -169,7 +169,7 @@ public: int bracketDepth() const { return yyBracketDepth; } Location &tokenLocation() { return yyTokLoc; } - static void initialize(const Config &config); + static void initialize(); static void terminate(); static bool isTrue(const QString &condition); diff --git a/src/qdoc/tree.cpp b/src/qdoc/tree.cpp index 718b16fc5..2cc36736f 100644 --- a/src/qdoc/tree.cpp +++ b/src/qdoc/tree.cpp @@ -63,9 +63,8 @@ QT_BEGIN_NAMESPACE qdoc database that is constructing the tree. This might not be necessary, and it might be removed later. - \a camelCaseModuleName is the project name for this tree, - which was obtained from the qdocconf file via the Config - singleton. + \a camelCaseModuleName is the project name for this tree + as it appears in the qdocconf file. */ Tree::Tree(const QString &camelCaseModuleName, QDocDatabase *qdb) : treeHasBeenAnalyzed_(false), diff --git a/src/qdoc/webxmlgenerator.cpp b/src/qdoc/webxmlgenerator.cpp index c7312d418..d69e4d467 100644 --- a/src/qdoc/webxmlgenerator.cpp +++ b/src/qdoc/webxmlgenerator.cpp @@ -41,9 +41,9 @@ QT_BEGIN_NAMESPACE static CodeMarker *marker_ = nullptr; -void WebXMLGenerator::initializeGenerator(const Config &config) +void WebXMLGenerator::initializeGenerator() { - HtmlGenerator::initializeGenerator(config); + HtmlGenerator::initializeGenerator(); } void WebXMLGenerator::terminateGenerator() diff --git a/src/qdoc/webxmlgenerator.h b/src/qdoc/webxmlgenerator.h index 71fd9df24..f8b3fa80e 100644 --- a/src/qdoc/webxmlgenerator.h +++ b/src/qdoc/webxmlgenerator.h @@ -30,7 +30,6 @@ #define WEBXMLGENERATOR_H #include "codemarker.h" -#include "config.h" #include "htmlgenerator.h" #include "qdocindexfiles.h" @@ -44,7 +43,7 @@ class WebXMLGenerator : public HtmlGenerator, public IndexSectionWriter public: explicit WebXMLGenerator() {} - void initializeGenerator(const Config &config) override; + void initializeGenerator() override; void terminateGenerator() override; QString format() override; // from IndexSectionWriter |