1 | // Copyright (C) 2021 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 |
3 | |
4 | #ifndef CODEPARSER_H |
5 | #define CODEPARSER_H |
6 | |
7 | #include "node.h" |
8 | |
9 | #include <QtCore/qset.h> |
10 | |
11 | QT_BEGIN_NAMESPACE |
12 | |
13 | #define COMMAND_ABSTRACT QLatin1String("abstract") |
14 | #define COMMAND_CLASS QLatin1String("class") |
15 | #define COMMAND_DEFAULT QLatin1String("default") |
16 | #define COMMAND_DEPRECATED QLatin1String("deprecated") // ### don't document |
17 | #define COMMAND_DONTDOCUMENT QLatin1String("dontdocument") |
18 | #define COMMAND_ENUM QLatin1String("enum") |
19 | #define COMMAND_EXAMPLE QLatin1String("example") |
20 | #define COMMAND_EXTERNALPAGE QLatin1String("externalpage") |
21 | #define COMMAND_FN QLatin1String("fn") |
22 | #define COMMAND_GROUP QLatin1String("group") |
23 | #define COMMAND_HEADERFILE QLatin1String("headerfile") |
24 | #define COMMAND_INGROUP QLatin1String("ingroup") |
25 | #define COMMAND_INHEADERFILE QLatin1String("inheaderfile") |
26 | #define COMMAND_INMODULE QLatin1String("inmodule") // ### don't document |
27 | #define COMMAND_INPUBLICGROUP QLatin1String("inpublicgroup") |
28 | #define COMMAND_INQMLMODULE QLatin1String("inqmlmodule") |
29 | #define COMMAND_INTERNAL QLatin1String("internal") |
30 | #define COMMAND_MACRO QLatin1String("macro") |
31 | #define COMMAND_MODULE QLatin1String("module") |
32 | #define COMMAND_MODULESTATE QLatin1String("modulestate") |
33 | #define COMMAND_NAMESPACE QLatin1String("namespace") |
34 | #define COMMAND_NEXTPAGE QLatin1String("nextpage") |
35 | #define COMMAND_NOAUTOLIST QLatin1String("noautolist") |
36 | #define COMMAND_NONREENTRANT QLatin1String("nonreentrant") |
37 | #define COMMAND_OBSOLETE QLatin1String("obsolete") |
38 | #define COMMAND_OVERLOAD QLatin1String("overload") |
39 | #define COMMAND_PAGE QLatin1String("page") |
40 | #define COMMAND_PRELIMINARY QLatin1String("preliminary") |
41 | #define COMMAND_PREVIOUSPAGE QLatin1String("previouspage") |
42 | #define COMMAND_PROPERTY QLatin1String("property") |
43 | #define COMMAND_QMLABSTRACT QLatin1String("qmlabstract") |
44 | #define COMMAND_QMLATTACHEDMETHOD QLatin1String("qmlattachedmethod") |
45 | #define COMMAND_QMLATTACHEDPROPERTY QLatin1String("qmlattachedproperty") |
46 | #define COMMAND_QMLATTACHEDSIGNAL QLatin1String("qmlattachedsignal") |
47 | #define COMMAND_QMLVALUETYPE QLatin1String("qmlvaluetype") |
48 | #define COMMAND_QMLCLASS QLatin1String("qmlclass") |
49 | #define COMMAND_QMLDEFAULT QLatin1String("qmldefault") |
50 | #define COMMAND_QMLINHERITS QLatin1String("inherits") |
51 | #define COMMAND_QMLINSTANTIATES QLatin1String("instantiates") |
52 | #define COMMAND_QMLMETHOD QLatin1String("qmlmethod") |
53 | #define COMMAND_QMLMODULE QLatin1String("qmlmodule") |
54 | #define COMMAND_QMLPROPERTY QLatin1String("qmlproperty") |
55 | #define COMMAND_QMLPROPERTYGROUP QLatin1String("qmlpropertygroup") |
56 | #define COMMAND_QMLREADONLY QLatin1String("readonly") |
57 | #define COMMAND_QMLREQUIRED QLatin1String("required") |
58 | #define COMMAND_QMLSIGNAL QLatin1String("qmlsignal") |
59 | #define COMMAND_QMLTYPE QLatin1String("qmltype") |
60 | #define COMMAND_QTCMAKEPACKAGE QLatin1String("qtcmakepackage") |
61 | #define COMMAND_QTVARIABLE QLatin1String("qtvariable") |
62 | #define COMMAND_REENTRANT QLatin1String("reentrant") |
63 | #define COMMAND_REIMP QLatin1String("reimp") |
64 | #define COMMAND_RELATES QLatin1String("relates") |
65 | #define COMMAND_SINCE QLatin1String("since") |
66 | #define COMMAND_STRUCT QLatin1String("struct") |
67 | #define COMMAND_SUBTITLE QLatin1String("subtitle") |
68 | #define COMMAND_STARTPAGE QLatin1String("startpage") |
69 | #define COMMAND_THREADSAFE QLatin1String("threadsafe") |
70 | #define COMMAND_TITLE QLatin1String("title") |
71 | #define COMMAND_TYPEALIAS QLatin1String("typealias") |
72 | #define COMMAND_TYPEDEF QLatin1String("typedef") |
73 | #define COMMAND_VARIABLE QLatin1String("variable") |
74 | #define COMMAND_VERSION QLatin1String("version") |
75 | #define COMMAND_UNION QLatin1String("union") |
76 | #define COMMAND_WRAPPER QLatin1String("wrapper") |
77 | #define COMMAND_ATTRIBUTION QLatin1String("attribution") |
78 | |
79 | // deprecated alias of qmlvaluetype |
80 | #define COMMAND_QMLBASICTYPE QLatin1String("qmlbasictype") |
81 | |
82 | class Location; |
83 | class QString; |
84 | class QDocDatabase; |
85 | class CppCodeParser; |
86 | |
87 | class CodeParser |
88 | { |
89 | public: |
90 | static inline const QSet<QString> common_meta_commands{ |
91 | COMMAND_ABSTRACT, COMMAND_DEFAULT, COMMAND_DEPRECATED, COMMAND_INGROUP, |
92 | COMMAND_INMODULE, COMMAND_INPUBLICGROUP, COMMAND_INQMLMODULE, COMMAND_INTERNAL, |
93 | COMMAND_MODULESTATE, COMMAND_NOAUTOLIST, COMMAND_NONREENTRANT, COMMAND_OBSOLETE, |
94 | COMMAND_PRELIMINARY, COMMAND_QMLABSTRACT, COMMAND_QMLDEFAULT, COMMAND_QMLINHERITS, |
95 | COMMAND_QMLREADONLY, COMMAND_QMLREQUIRED, COMMAND_QTCMAKEPACKAGE, COMMAND_QTVARIABLE, |
96 | COMMAND_REENTRANT, COMMAND_SINCE, COMMAND_STARTPAGE, COMMAND_SUBTITLE, COMMAND_THREADSAFE, |
97 | COMMAND_TITLE, COMMAND_WRAPPER, COMMAND_ATTRIBUTION, |
98 | }; |
99 | |
100 | public: |
101 | CodeParser(); |
102 | virtual ~CodeParser(); |
103 | |
104 | virtual void initializeParser() = 0; |
105 | virtual void terminateParser(); |
106 | virtual QString language() = 0; |
107 | virtual QStringList sourceFileNameFilter() = 0; |
108 | virtual void parseSourceFile(const Location &location, const QString &filePath, CppCodeParser& cpp_code_parser) = 0; |
109 | virtual Node *parseFnArg(const Location &, const QString &, const QString & = QString()) |
110 | { |
111 | return nullptr; |
112 | } |
113 | |
114 | static void initialize(); |
115 | static void terminate(); |
116 | static CodeParser *parserForLanguage(const QString &language); |
117 | static CodeParser *parserForSourceFile(const QString &filePath); |
118 | static void setLink(Node *node, Node::LinkType linkType, const QString &arg); |
119 | static bool isWorthWarningAbout(const Doc &doc); |
120 | |
121 | protected: |
122 | static void extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc); |
123 | QDocDatabase *m_qdb {}; |
124 | |
125 | private: |
126 | static QList<CodeParser *> s_parsers; |
127 | }; |
128 | |
129 | QT_END_NAMESPACE |
130 | |
131 | #endif |
132 | |