1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2019 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the tools applications of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT 21 ** included in the packaging of this file. Please review the following 22 ** information to ensure the GNU General Public License requirements will 23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html. 24 ** 25 ** $QT_END_LICENSE$ 26 ** 27 ****************************************************************************/ 28 29 #ifndef CODEPARSER_H 30 #define CODEPARSER_H 31 32 #include "node.h" 33 34 #include <QtCore/qset.h> 35 36 QT_BEGIN_NAMESPACE 37 38 class Location; 39 class QString; 40 class QDocDatabase; 41 42 class CodeParser 43 { 44 Q_DECLARE_TR_FUNCTIONS(QDoc::CppCodeParser) 45 46 public: 47 CodeParser(); 48 virtual ~CodeParser(); 49 50 virtual void initializeParser(); 51 virtual void terminateParser(); 52 virtual QString language() = 0; 53 virtual QStringList headerFileNameFilter(); 54 virtual QStringList sourceFileNameFilter() = 0; 55 virtual void parseHeaderFile(const Location &location, const QString &filePath); 56 virtual void parseSourceFile(const Location &location, const QString &filePath) = 0; precompileHeaders()57 virtual void precompileHeaders() {} parseFnArg(const Location &,const QString &)58 virtual Node *parseFnArg(const Location &, const QString &) { return nullptr; } 59 60 bool isParsingH() const; 61 bool isParsingCpp() const; 62 bool isParsingQdoc() const; currentFile()63 const QString ¤tFile() const { return currentFile_; } moduleHeader()64 const QString &moduleHeader() const { return moduleHeader_; } setModuleHeader(const QString & t)65 void setModuleHeader(const QString &t) { moduleHeader_ = t; } 66 void checkModuleInclusion(Node *n); 67 68 static void initialize(); 69 static void terminate(); 70 static CodeParser *parserForLanguage(const QString &language); 71 static CodeParser *parserForHeaderFile(const QString &filePath); 72 static CodeParser *parserForSourceFile(const QString &filePath); 73 static void setLink(Node *node, Node::LinkType linkType, const QString &arg); 74 static bool isWorthWarningAbout(const Doc &doc); 75 76 protected: 77 const QSet<QString> &commonMetaCommands(); 78 static void extractPageLinkAndDesc(const QString &arg, QString *link, QString *desc); showInternal()79 static bool showInternal() { return showInternal_; } 80 QString moduleHeader_; 81 QString currentFile_; 82 QDocDatabase *qdb_; 83 84 private: 85 static QVector<CodeParser *> parsers; 86 static bool showInternal_; 87 static bool singleExec_; 88 }; 89 90 #define COMMAND_ABSTRACT Doc::alias(QLatin1String("abstract")) 91 #define COMMAND_AUDIENCE Doc::alias(QLatin1String("audience")) 92 #define COMMAND_AUTHOR Doc::alias(QLatin1String("author")) 93 #define COMMAND_CATEGORY Doc::alias(QLatin1String("category")) 94 #define COMMAND_CLASS Doc::alias(QLatin1String("class")) 95 #define COMMAND_COMPONENT Doc::alias(QLatin1String("component")) 96 #define COMMAND_CONTENTSPAGE Doc::alias(QLatin1String("contentspage")) 97 #define COMMAND_COPYRHOLDER Doc::alias(QLatin1String("copyrholder")) 98 #define COMMAND_COPYRYEAR Doc::alias(QLatin1String("copyryear")) 99 #define COMMAND_DEPRECATED Doc::alias(QLatin1String("deprecated")) // ### don't document 100 #define COMMAND_DONTDOCUMENT Doc::alias(QLatin1String("dontdocument")) 101 #define COMMAND_DITAMAP Doc::alias(QLatin1String("ditamap")) 102 #define COMMAND_ENUM Doc::alias(QLatin1String("enum")) 103 #define COMMAND_EXAMPLE Doc::alias(QLatin1String("example")) 104 #define COMMAND_EXTERNALPAGE Doc::alias(QLatin1String("externalpage")) 105 #define COMMAND_FN Doc::alias(QLatin1String("fn")) 106 #define COMMAND_GROUP Doc::alias(QLatin1String("group")) 107 #define COMMAND_HEADERFILE Doc::alias(QLatin1String("headerfile")) 108 #define COMMAND_INGROUP Doc::alias(QLatin1String("ingroup")) 109 #define COMMAND_INHEADERFILE Doc::alias(QLatin1String("inheaderfile")) 110 #define COMMAND_INJSMODULE Doc::alias(QLatin1String("injsmodule")) 111 #define COMMAND_INMODULE Doc::alias(QLatin1String("inmodule")) // ### don't document 112 #define COMMAND_INPUBLICGROUP Doc::alias(QLatin1String("inpublicgroup")) 113 #define COMMAND_INQMLMODULE Doc::alias(QLatin1String("inqmlmodule")) 114 #define COMMAND_INTERNAL Doc::alias(QLatin1String("internal")) 115 #define COMMAND_JSATTACHEDMETHOD Doc::alias(QLatin1String("jsattachedmethod")) 116 #define COMMAND_JSATTACHEDPROPERTY Doc::alias(QLatin1String("jsattachedproperty")) 117 #define COMMAND_JSATTACHEDSIGNAL Doc::alias(QLatin1String("jsattachedsignal")) 118 #define COMMAND_JSBASICTYPE Doc::alias(QLatin1String("jsbasictype")) 119 #define COMMAND_JSMETHOD Doc::alias(QLatin1String("jsmethod")) 120 #define COMMAND_JSMODULE Doc::alias(QLatin1String("jsmodule")) 121 #define COMMAND_JSPROPERTY Doc::alias(QLatin1String("jsproperty")) 122 #define COMMAND_JSPROPERTYGROUP Doc::alias(QLatin1String("jspropertygroup")) 123 #define COMMAND_JSSIGNAL Doc::alias(QLatin1String("jssignal")) 124 #define COMMAND_JSTYPE Doc::alias(QLatin1String("jstype")) 125 #define COMMAND_LICENSEDESCRIPTION Doc::alias(QLatin1String("licensedescription")) 126 #define COMMAND_LICENSENAME Doc::alias(QLatin1String("licensename")) 127 #define COMMAND_LICENSEYEAR Doc::alias(QLatin1String("licenseyear")) 128 #define COMMAND_LIFECYCLEVERSION Doc::alias(QLatin1String("lifecycleversion")) 129 #define COMMAND_LIFECYCLEWSTATUS Doc::alias(QLatin1String("lifecyclestatus")) 130 #define COMMAND_MACRO Doc::alias(QLatin1String("macro")) 131 #define COMMAND_MAINCLASS Doc::alias(QLatin1String("mainclass")) 132 #define COMMAND_MODULE Doc::alias(QLatin1String("module")) 133 #define COMMAND_NAMESPACE Doc::alias(QLatin1String("namespace")) 134 #define COMMAND_NEXTPAGE Doc::alias(QLatin1String("nextpage")) 135 #define COMMAND_NOAUTOLIST Doc::alias(QLatin1String("noautolist")) 136 #define COMMAND_NONREENTRANT Doc::alias(QLatin1String("nonreentrant")) 137 #define COMMAND_OBSOLETE Doc::alias(QLatin1String("obsolete")) 138 #define COMMAND_OVERLOAD Doc::alias(QLatin1String("overload")) 139 #define COMMAND_PAGE Doc::alias(QLatin1String("page")) 140 #define COMMAND_PERMISSIONS Doc::alias(QLatin1String("permissions")) 141 #define COMMAND_PRELIMINARY Doc::alias(QLatin1String("preliminary")) 142 #define COMMAND_PREVIOUSPAGE Doc::alias(QLatin1String("previouspage")) 143 #define COMMAND_PRODNAME Doc::alias(QLatin1String("prodname")) 144 #define COMMAND_PROPERTY Doc::alias(QLatin1String("property")) 145 #define COMMAND_PUBLISHER Doc::alias(QLatin1String("publisher")) 146 #define COMMAND_QMLABSTRACT Doc::alias(QLatin1String("qmlabstract")) 147 #define COMMAND_QMLATTACHEDMETHOD Doc::alias(QLatin1String("qmlattachedmethod")) 148 #define COMMAND_QMLATTACHEDPROPERTY Doc::alias(QLatin1String("qmlattachedproperty")) 149 #define COMMAND_QMLATTACHEDSIGNAL Doc::alias(QLatin1String("qmlattachedsignal")) 150 #define COMMAND_QMLBASICTYPE Doc::alias(QLatin1String("qmlbasictype")) 151 #define COMMAND_QMLCLASS Doc::alias(QLatin1String("qmlclass")) 152 #define COMMAND_QMLDEFAULT Doc::alias(QLatin1String("default")) 153 #define COMMAND_QMLINHERITS Doc::alias(QLatin1String("inherits")) 154 #define COMMAND_QMLINSTANTIATES Doc::alias(QLatin1String("instantiates")) 155 #define COMMAND_QMLMETHOD Doc::alias(QLatin1String("qmlmethod")) 156 #define COMMAND_QMLMODULE Doc::alias(QLatin1String("qmlmodule")) 157 #define COMMAND_QMLPROPERTY Doc::alias(QLatin1String("qmlproperty")) 158 #define COMMAND_QMLPROPERTYGROUP Doc::alias(QLatin1String("qmlpropertygroup")) 159 #define COMMAND_QMLREADONLY Doc::alias(QLatin1String("readonly")) 160 #define COMMAND_QMLSIGNAL Doc::alias(QLatin1String("qmlsignal")) 161 #define COMMAND_QMLTYPE Doc::alias(QLatin1String("qmltype")) 162 #define COMMAND_QTVARIABLE Doc::alias(QLatin1String("qtvariable")) 163 #define COMMAND_REENTRANT Doc::alias(QLatin1String("reentrant")) 164 #define COMMAND_REIMP Doc::alias(QLatin1String("reimp")) 165 #define COMMAND_RELATES Doc::alias(QLatin1String("relates")) 166 #define COMMAND_RELEASEDATE Doc::alias(QLatin1String("releasedate")) 167 #define COMMAND_SINCE Doc::alias(QLatin1String("since")) 168 #define COMMAND_STRUCT Doc::alias(QLatin1String("struct")) 169 #define COMMAND_SUBTITLE Doc::alias(QLatin1String("subtitle")) 170 #define COMMAND_STARTPAGE Doc::alias(QLatin1String("startpage")) 171 #define COMMAND_THREADSAFE Doc::alias(QLatin1String("threadsafe")) 172 #define COMMAND_TITLE Doc::alias(QLatin1String("title")) 173 #define COMMAND_TYPEALIAS Doc::alias(QLatin1String("typealias")) 174 #define COMMAND_TYPEDEF Doc::alias(QLatin1String("typedef")) 175 #define COMMAND_VARIABLE Doc::alias(QLatin1String("variable")) 176 #define COMMAND_VERSION Doc::alias(QLatin1String("version")) 177 #define COMMAND_UNION Doc::alias(QLatin1String("union")) 178 #define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper")) 179 180 QT_END_NAMESPACE 181 182 #endif 183