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 CPPCODEPARSER_H
5#define CPPCODEPARSER_H
6
7#include "codeparser.h"
8
9QT_BEGIN_NAMESPACE
10
11class ClassNode;
12class ExampleNode;
13class FunctionNode;
14class Aggregate;
15
16class CppCodeParser
17{
18public:
19 static inline const QSet<QString> topic_commands{
20 COMMAND_CLASS, COMMAND_DONTDOCUMENT, COMMAND_ENUM, COMMAND_EXAMPLE,
21 COMMAND_EXTERNALPAGE, COMMAND_FN, COMMAND_GROUP, COMMAND_HEADERFILE,
22 COMMAND_MACRO, COMMAND_MODULE, COMMAND_NAMESPACE, COMMAND_PAGE,
23 COMMAND_PROPERTY, COMMAND_TYPEALIAS, COMMAND_TYPEDEF, COMMAND_VARIABLE,
24 COMMAND_QMLTYPE, COMMAND_QMLPROPERTY, COMMAND_QMLPROPERTYGROUP,
25 COMMAND_QMLATTACHEDPROPERTY, COMMAND_QMLSIGNAL, COMMAND_QMLATTACHEDSIGNAL,
26 COMMAND_QMLMETHOD, COMMAND_QMLATTACHEDMETHOD, COMMAND_QMLVALUETYPE, COMMAND_QMLBASICTYPE,
27 COMMAND_QMLMODULE, COMMAND_STRUCT, COMMAND_UNION,
28 };
29
30 static inline const QSet<QString> meta_commands = QSet<QString>(CodeParser::common_meta_commands)
31 << COMMAND_INHEADERFILE << COMMAND_NEXTPAGE
32 << COMMAND_OVERLOAD << COMMAND_PREVIOUSPAGE
33 << COMMAND_QMLINSTANTIATES << COMMAND_REIMP
34 << COMMAND_RELATES;
35
36public:
37 CppCodeParser();
38 ~CppCodeParser();
39
40 FunctionNode *parseMacroArg(const Location &location, const QString &macroArg);
41 FunctionNode *parseOtherFuncArg(const QString &topic, const Location &location,
42 const QString &funcArg);
43 static bool isQMLMethodTopic(const QString &t);
44 static bool isQMLPropertyTopic(const QString &t);
45
46 [[nodiscard]] bool hasTooManyTopics(const Doc &doc) const;
47
48 void processTopicArgs(const Doc &doc, const QString &topic, NodeList &nodes, DocList &docs);
49
50 void processMetaCommand(const Doc &doc, const QString &command, const ArgPair &argLocPair,
51 Node *node);
52 void processMetaCommands(const Doc &doc, Node *node);
53 void processMetaCommands(NodeList &nodes, DocList &docs);
54
55protected:
56 virtual Node *processTopicCommand(const Doc &doc, const QString &command,
57 const ArgPair &arg);
58 void processQmlProperties(const Doc &doc, NodeList &nodes, DocList &docs);
59 bool splitQmlPropertyArg(const QString &arg, QString &type, QString &module, QString &element,
60 QString &name, const Location &location);
61
62private:
63 void setExampleFileLists(ExampleNode *en);
64
65private:
66 static QSet<QString> m_excludeDirs;
67 static QSet<QString> m_excludeFiles;
68 QString m_exampleNameFilter;
69 QString m_exampleImageFilter;
70 bool m_showLinkErrors { false };
71};
72
73QT_END_NAMESPACE
74
75#endif
76

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