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 | |
9 | QT_BEGIN_NAMESPACE |
10 | |
11 | class ClassNode; |
12 | class ExampleNode; |
13 | class FunctionNode; |
14 | class Aggregate; |
15 | |
16 | class CppCodeParser |
17 | { |
18 | public: |
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 | |
36 | public: |
37 | CppCodeParser(); |
38 | ~CppCodeParser(); |
39 | |
40 | FunctionNode *parseMacroArg(const Location &location, const QString ¯oArg); |
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 | |
55 | protected: |
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 | |
62 | private: |
63 | void setExampleFileLists(ExampleNode *en); |
64 | |
65 | private: |
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 | |
73 | QT_END_NAMESPACE |
74 | |
75 | #endif |
76 | |