/**************************************************************************** ** ** Copyright (C) 2018 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the tools applications of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ /* config.h */ #ifndef CONFIG_H #define CONFIG_H #include "location.h" #include "qdoccommandlineparser.h" #include #include #include #include #include QT_BEGIN_NAMESPACE /* This struct contains all the information for one config variable found in a qdocconf file. */ struct ConfigVar { bool plus_; QString name_; QStringList values_; QString currentPath_; Location location_; ConfigVar() : plus_(false) {} ConfigVar(const QString &name, const QStringList &values, const QString &dir) : plus_(true), name_(name), values_(values), currentPath_(dir) { } ConfigVar(const QString &name, const QStringList &values, const QString &dir, const Location &loc) : plus_(false), name_(name), values_(values), currentPath_(dir), location_(loc) { } }; /* In this multimap, the key is a config variable name. */ typedef QMultiMap ConfigVarMultimap; class Config { Q_DECLARE_TR_FUNCTIONS(QDoc::Config) public: Config(const QString &programName, const QStringList &args); ~Config(); bool getDebug() const { return debug_; } void clear(); void reset(); void load(const QString &fileName); void setStringList(const QString &var, const QStringList &values); void insertStringList(const QString &var, const QStringList &values); void showHelp(int exitCode = 0) { m_parser.showHelp(exitCode); } QStringList qdocFiles() const { return m_parser.positionalArguments(); } const QString &programName() const { return prog; } const Location &location() const { return loc; } const Location &lastLocation() const { return lastLocation_; } bool getBool(const QString &var) const; int getInt(const QString &var) const; QString getOutputDir(const QString &format = QString("HTML")) const; QSet getOutputFormats() const; QString getString(const QString &var, const QString &defaultString = QString()) const; QSet getStringSet(const QString &var) const; QStringList getStringList(const QString &var) const; QStringList getCanonicalPathList(const QString &var, bool validate = false) const; QRegExp getRegExp(const QString &var) const; QVector getRegExpList(const QString &var) const; QSet subVars(const QString &var) const; void subVarsAndValues(const QString &var, ConfigVarMultimap &t) const; QStringList getAllFiles(const QString &filesVar, const QString &dirsVar, const QSet &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); static QStringList loadMaster(const QString &fileName); static bool isFileExcluded(const QString &fileName, const QSet &excludedFiles); static QStringList getFilesHere(const QString &dir, const QString &nameFilter, const Location &location = Location(), const QSet &excludedDirs = QSet(), const QSet &excludedFiles = QSet()); static QString findFile(const Location &location, const QStringList &files, const QStringList &dirs, const QString &fileName, QString *userFriendlyFilePath = nullptr); static QString findFile(const Location &location, const QStringList &files, const QStringList &dirs, const QString &fileBase, const QStringList &fileExtensions, QString *userFriendlyFilePath = nullptr); static QString copyFile(const Location &location, const QString &sourceFilePath, const QString &userFriendlySourceFilePath, const QString &targetDirPath); static int numParams(const QString &value); static bool removeDirContents(const QString &dir); static void pushWorkingDir(const QString &dir); static QString popWorkingDir(); static const QString dot; static bool generateExamples; static QString installDir; static QString overrideOutputDir; static QSet overrideOutputFormats; inline bool singleExec() const; QStringList &defines() { return m_defines; } QStringList &dependModules() { return m_dependModules; } QStringList &includePaths() { return m_includePaths; } QStringList &indexDirs() { return m_indexDirs; } QString currentDir() const { return m_currentDir; } void setCurrentDir(const QString &path) { m_currentDir = path; } QString previousCurrentDir() const { return m_previousCurrentDir; } void setPreviousCurrentDir(const QString &path) { m_previousCurrentDir = path; } private: void processCommandLineOptions(const QStringList &args); void setIncludePaths(); void setIndexDirs(); QStringList m_dependModules; QStringList m_defines; QStringList m_includePaths; QStringList m_indexDirs; QString m_currentDir; QString m_previousCurrentDir; static bool debug_; static bool isMetaKeyChar(QChar ch); void load(Location location, const QString &fileName); QString prog; Location loc; Location lastLocation_; ConfigVarMultimap configVars_; static QMap uncompressedFiles; static QMap extractedDirs; static int numInstances; static QStack workingDirs_; static QMap includeFilesMap_; QDocCommandLineParser m_parser; }; struct ConfigStrings { static QString ALIAS; static QString AUTOLINKERRORS; static QString BUILDVERSION; static QString CLANGDEFINES; static QString CODEINDENT; static QString CODEPREFIX; static QString CODESUFFIX; static QString CPPCLASSESPAGE; static QString CPPCLASSESTITLE; static QString DEFINES; static QString DEPENDS; static QString DESCRIPTION; static QString EDITION; static QString ENDHEADER; static QString EXAMPLEDIRS; static QString EXAMPLES; static QString EXAMPLESINSTALLPATH; static QString EXCLUDEDIRS; static QString EXCLUDEFILES; static QString EXTRAIMAGES; static QString FALSEHOODS; static QString FORMATTING; static QString HEADERDIRS; static QString HEADERS; static QString HEADERSCRIPTS; static QString HEADERSTYLES; static QString HOMEPAGE; static QString HOMETITLE; static QString IGNOREDIRECTIVES; static QString IGNORETOKENS; static QString IGNOREWORDS; static QString IMAGEDIRS; static QString IMAGES; static QString INCLUDEPATHS; static QString INDEXES; static QString LANDINGPAGE; static QString LANDINGTITLE; static QString LANGUAGE; static QString MACRO; static QString MANIFESTMETA; static QString MODULEHEADER; static QString NATURALLANGUAGE; static QString NAVIGATION; static QString NOLINKERRORS; static QString OBSOLETELINKS; static QString OUTPUTDIR; static QString OUTPUTENCODING; static QString OUTPUTFORMATS; static QString OUTPUTPREFIXES; static QString OUTPUTSUFFIXES; static QString PROJECT; static QString REDIRECTDOCUMENTATIONTODEVNULL; static QString QHP; static QString QUOTINGINFORMATION; static QString SCRIPTDIRS; static QString SCRIPTS; static QString SHOWINTERNAL; static QString SINGLEEXEC; static QString SOURCEDIRS; static QString SOURCEENCODING; static QString SOURCES; static QString SPURIOUS; static QString STYLEDIRS; static QString STYLE; static QString STYLES; static QString STYLESHEETS; static QString SYNTAXHIGHLIGHTING; static QString TABSIZE; static QString TAGFILE; static QString TRANSLATORS; static QString URL; static QString VERSION; static QString VERSIONSYM; static QString FILEEXTENSIONS; static QString IMAGEEXTENSIONS; static QString QMLONLY; static QString QMLTYPESPAGE; static QString QMLTYPESTITLE; static QString WARNINGLIMIT; static QString WRITEQAPAGES; }; #define CONFIG_ALIAS ConfigStrings::ALIAS #define CONFIG_AUTOLINKERRORS ConfigStrings::AUTOLINKERRORS #define CONFIG_BUILDVERSION ConfigStrings::BUILDVERSION #define CONFIG_CLANGDEFINES ConfigStrings::CLANGDEFINES #define CONFIG_CODEINDENT ConfigStrings::CODEINDENT #define CONFIG_CODEPREFIX ConfigStrings::CODEPREFIX #define CONFIG_CODESUFFIX ConfigStrings::CODESUFFIX #define CONFIG_CPPCLASSESPAGE ConfigStrings::CPPCLASSESPAGE #define CONFIG_CPPCLASSESTITLE ConfigStrings::CPPCLASSESTITLE #define CONFIG_DEFINES ConfigStrings::DEFINES #define CONFIG_DEPENDS ConfigStrings::DEPENDS #define CONFIG_DESCRIPTION ConfigStrings::DESCRIPTION #define CONFIG_EDITION ConfigStrings::EDITION #define CONFIG_ENDHEADER ConfigStrings::ENDHEADER #define CONFIG_EXAMPLEDIRS ConfigStrings::EXAMPLEDIRS #define CONFIG_EXAMPLES ConfigStrings::EXAMPLES #define CONFIG_EXAMPLESINSTALLPATH ConfigStrings::EXAMPLESINSTALLPATH #define CONFIG_EXCLUDEDIRS ConfigStrings::EXCLUDEDIRS #define CONFIG_EXCLUDEFILES ConfigStrings::EXCLUDEFILES #define CONFIG_EXTRAIMAGES ConfigStrings::EXTRAIMAGES #define CONFIG_FALSEHOODS ConfigStrings::FALSEHOODS #define CONFIG_FORMATTING ConfigStrings::FORMATTING #define CONFIG_HEADERDIRS ConfigStrings::HEADERDIRS #define CONFIG_HEADERS ConfigStrings::HEADERS #define CONFIG_HEADERSCRIPTS ConfigStrings::HEADERSCRIPTS #define CONFIG_HEADERSTYLES ConfigStrings::HEADERSTYLES #define CONFIG_HOMEPAGE ConfigStrings::HOMEPAGE #define CONFIG_HOMETITLE ConfigStrings::HOMETITLE #define CONFIG_IGNOREDIRECTIVES ConfigStrings::IGNOREDIRECTIVES #define CONFIG_IGNORETOKENS ConfigStrings::IGNORETOKENS #define CONFIG_IGNOREWORDS ConfigStrings::IGNOREWORDS #define CONFIG_IMAGEDIRS ConfigStrings::IMAGEDIRS #define CONFIG_IMAGES ConfigStrings::IMAGES #define CONFIG_INCLUDEPATHS ConfigStrings::INCLUDEPATHS #define CONFIG_INDEXES ConfigStrings::INDEXES #define CONFIG_LANDINGPAGE ConfigStrings::LANDINGPAGE #define CONFIG_LANDINGTITLE ConfigStrings::LANDINGTITLE #define CONFIG_LANGUAGE ConfigStrings::LANGUAGE #define CONFIG_MACRO ConfigStrings::MACRO #define CONFIG_MANIFESTMETA ConfigStrings::MANIFESTMETA #define CONFIG_MODULEHEADER ConfigStrings::MODULEHEADER #define CONFIG_NATURALLANGUAGE ConfigStrings::NATURALLANGUAGE #define CONFIG_NAVIGATION ConfigStrings::NAVIGATION #define CONFIG_NOLINKERRORS ConfigStrings::NOLINKERRORS #define CONFIG_OBSOLETELINKS ConfigStrings::OBSOLETELINKS #define CONFIG_OUTPUTDIR ConfigStrings::OUTPUTDIR #define CONFIG_OUTPUTENCODING ConfigStrings::OUTPUTENCODING #define CONFIG_OUTPUTFORMATS ConfigStrings::OUTPUTFORMATS #define CONFIG_OUTPUTPREFIXES ConfigStrings::OUTPUTPREFIXES #define CONFIG_OUTPUTSUFFIXES ConfigStrings::OUTPUTSUFFIXES #define CONFIG_PROJECT ConfigStrings::PROJECT #define CONFIG_REDIRECTDOCUMENTATIONTODEVNULL ConfigStrings::REDIRECTDOCUMENTATIONTODEVNULL #define CONFIG_QHP ConfigStrings::QHP #define CONFIG_QUOTINGINFORMATION ConfigStrings::QUOTINGINFORMATION #define CONFIG_SCRIPTDIRS ConfigStrings::SCRIPTDIRS #define CONFIG_SCRIPTS ConfigStrings::SCRIPTS #define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL #define CONFIG_SINGLEEXEC ConfigStrings::SINGLEEXEC #define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS #define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING #define CONFIG_SOURCES ConfigStrings::SOURCES #define CONFIG_SPURIOUS ConfigStrings::SPURIOUS #define CONFIG_STYLEDIRS ConfigStrings::STYLEDIRS #define CONFIG_STYLE ConfigStrings::STYLE #define CONFIG_STYLES ConfigStrings::STYLES #define CONFIG_STYLESHEETS ConfigStrings::STYLESHEETS #define CONFIG_SYNTAXHIGHLIGHTING ConfigStrings::SYNTAXHIGHLIGHTING #define CONFIG_TABSIZE ConfigStrings::TABSIZE #define CONFIG_TAGFILE ConfigStrings::TAGFILE #define CONFIG_TRANSLATORS ConfigStrings::TRANSLATORS #define CONFIG_URL ConfigStrings::URL #define CONFIG_VERSION ConfigStrings::VERSION #define CONFIG_VERSIONSYM ConfigStrings::VERSIONSYM #define CONFIG_FILEEXTENSIONS ConfigStrings::FILEEXTENSIONS #define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS #define CONFIG_QMLONLY ConfigStrings::QMLONLY #define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE #define CONFIG_QMLTYPESTITLE ConfigStrings::QMLTYPESTITLE #define CONFIG_WARNINGLIMIT ConfigStrings::WARNINGLIMIT #define CONFIG_WRITEQAPAGES ConfigStrings::WRITEQAPAGES inline bool Config::singleExec() const { return getBool(CONFIG_SINGLEEXEC); } QT_END_NAMESPACE #endif