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
11QT_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
82class Location;
83class QString;
84class QDocDatabase;
85class CppCodeParser;
86
87class CodeParser
88{
89public:
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
100public:
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
121protected:
122 static void extractPageLinkAndDesc(QStringView arg, QString *link, QString *desc);
123 QDocDatabase *m_qdb {};
124
125private:
126 static QList<CodeParser *> s_parsers;
127};
128
129QT_END_NAMESPACE
130
131#endif
132

source code of qttools/src/qdoc/qdoc/codeparser.h