summaryrefslogtreecommitdiff
path: root/src/qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc')
-rw-r--r--src/qdoc/clangcodeparser.cpp5
-rw-r--r--src/qdoc/clangcodeparser.h2
-rw-r--r--src/qdoc/codemarker.cpp8
-rw-r--r--src/qdoc/codemarker.h6
-rw-r--r--src/qdoc/codeparser.cpp10
-rw-r--r--src/qdoc/codeparser.h5
-rw-r--r--src/qdoc/config.cpp7
-rw-r--r--src/qdoc/config.h20
-rw-r--r--src/qdoc/cppcodeparser.cpp5
-rw-r--r--src/qdoc/cppcodeparser.h2
-rw-r--r--src/qdoc/doc.cpp8
-rw-r--r--src/qdoc/doc.h5
-rw-r--r--src/qdoc/docbookgenerator.cpp12
-rw-r--r--src/qdoc/docbookgenerator.h4
-rw-r--r--src/qdoc/generator.cpp31
-rw-r--r--src/qdoc/generator.h12
-rw-r--r--src/qdoc/helpprojectwriter.cpp8
-rw-r--r--src/qdoc/helpprojectwriter.h5
-rw-r--r--src/qdoc/htmlgenerator.cpp17
-rw-r--r--src/qdoc/htmlgenerator.h5
-rw-r--r--src/qdoc/location.cpp5
-rw-r--r--src/qdoc/location.h3
-rw-r--r--src/qdoc/main.cpp33
-rw-r--r--src/qdoc/qdocindexfiles.cpp11
-rw-r--r--src/qdoc/qmlcodeparser.cpp9
-rw-r--r--src/qdoc/qmlcodeparser.h3
-rw-r--r--src/qdoc/tokenizer.cpp3
-rw-r--r--src/qdoc/tokenizer.h2
-rw-r--r--src/qdoc/tree.cpp5
-rw-r--r--src/qdoc/webxmlgenerator.cpp4
-rw-r--r--src/qdoc/webxmlgenerator.h3
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 &quoter,
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