20#include <QtCore/quuid.h>
21#include <QtCore/qversionnumber.h>
27using namespace Qt::StringLiterals;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
53
54
55
56
59#define LT_RETURN_IF_NOT_EQUAL(a, b)
88
89
90
91
92
93
94
95
96
97
98
99
102 const QString default_sortkey{QChar{QChar::LastValidCodePoint}};
105 if (
auto cmp = QString::compare(
106 n1_metamap ? n1_metamap->value(u"sortkey"_s, default_sortkey) : default_sortkey,
107 n2_metamap ? n2_metamap->value(u"sortkey"_s, default_sortkey) : default_sortkey); cmp != 0) {
114
115
116
117
119
120
121
123
124
125
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
165
166
167
168
169
170
171
172
173
174
175
176
177
181
182
183
184
185
186
189
190
192
198
199
200
201
202
203
209
210
211
212
213
214
215
216
217
218
221
222
223
224
225
226
227
228
229
232
233
234
235
236
237
238
239
240
243
244
245
246
247
248
249
250
251
252
253
256
257
259
260
263
264
267
268
271
272
275
283
284
287
288
291
292
295
296
299
300
311
312
315
316
319
320
323
324
327
328
331
332
335
336
339
340
343
344
347
348
351
352
355
356
359
360
363
364
367
368
371
372
375
376
379
380
383
384
387
388
391
392
395
396
399
400
403
404
405
408
409
412
413
416
417
420
421
424
425
428
429
432
433
434
437
438
439
440
443
444
445
446
449
450
451
452
455
456
457
460
461
464
465
468
469
470
471
474 if (isFunction() && !isMacro())
475 return m_name + QLatin1String(
"()");
480
481
482
483
484
485
488 if (m_name.isEmpty())
489 return QLatin1String(
"global");
494 const Node *node =
this;
496 parts.prepend(node->plainName());
501 return parts.join(QLatin1String(
"::"));
505
506
507
508
509
512 if (m_name.isEmpty())
513 return QLatin1String(
"global");
516 const Node *node =
this;
521 fullName.prepend(QLatin1String(
"::"));
528
529
530
531
534 if ((isTextPageNode() || isGroup()) && !title().isEmpty())
536 return plainFullName(relative);
540
541
542
543
544
545
546
550 doc
.location().warning(QStringLiteral(
"Overrides a previous doc"),
551 QStringLiteral(
"from here: %1").arg(m_doc
.location().toString()));
557
558
559
560
569 if (Config::instance().showInternal())
573 m_url = QStringLiteral(
"");
581
582
583
584
587 m_indexNodeFlag(
false),
588 m_relatedNonmember(
false),
600
601
602
603
604
605
606
607
643
644
645
646
647
648
649
652
653
654
655
656
657
658
659
662
663
664
668 const auto *fn =
static_cast<
const FunctionNode *>(
this);
669 return fn->kindString();
671 return nodeTypeString(nodeType());
675
676
677
682 return QLatin1String(
"namespace");
684 return QLatin1String(
"class");
686 return QLatin1String(
"struct");
688 return QLatin1String(
"union");
690 return QLatin1String(
"header");
692 return QLatin1String(
"page");
694 return QLatin1String(
"enum");
696 return QLatin1String(
"example");
698 return QLatin1String(
"external page");
701 return QLatin1String(
"typedef");
703 return QLatin1String(
"function");
705 return QLatin1String(
"property");
707 return QLatin1String(
"proxy");
709 return QLatin1String(
"variable");
711 return QLatin1String(
"group");
713 return QLatin1String(
"module");
716 return QLatin1String(
"QML type");
718 return QLatin1String(
"QML value type");
720 return QLatin1String(
"QML module");
722 return QLatin1String(
"QML property");
725 return QLatin1String(
"shared comment");
727 return QLatin1String(
"collection");
735
736
737
744
745
746
747
748
762
763
764
765
766void Node::setLink(LinkType linkType,
const QString &link,
const QString &desc)
768 std::pair<QString, QString> linkPair;
769 linkPair.first = link;
770 linkPair.second = desc;
771 m_linkMap[linkType] = linkPair;
775
776
777
778
781 QStringList parts = since.split(QLatin1Char(
' '));
783 if (parts.size() > 1)
784 project = Config::dot + parts.first();
786 QVersionNumber cutoff =
787 QVersionNumber::fromString(Config::instance().get(
CONFIG_IGNORESINCE + project).asString())
790 if (!cutoff.isNull() && QVersionNumber::fromString(parts.last()).normalized() < cutoff)
793 m_since = parts.join(QLatin1Char(
' '));
797
798
802 for (
int i = 0; i <= string.size(); ++i) {
804 if (i != string.size())
807 QChar lower = ch.toLower();
808 if ((lower >= QLatin1Char(
'a') && lower <= QLatin1Char(
'z')) || ch.digitValue() >= 0
809 || ch == QLatin1Char(
'_') || ch == QLatin1Char(
':')) {
811 }
else if (!result.isEmpty()) {
812 if (result != QLatin1String(
"const"))
821
822
823
824
825
826
835
836
837
838
847
848
849
858
859
862
863
875
876
883
884
885
886
889 QString suffix = t.fileSuffix();
892 else if (suffix ==
"cpp")
901
902
903
904
905
906
915 return (m_sharedCommentNode && m_sharedCommentNode
->hasDoc());
919
920
921
924 if (m_parent && m_parent->isNamespace() && !m_parent->name().isEmpty())
925 return m_parent->name() +
"::" + m_name;
930
931
932
935 if (m_parent && !m_parent->name().isEmpty())
936 return m_parent->name() +
"::" + m_name;
941
942
943
946 return logicalModuleName() +
"::" + m_name;
950
951
952
953
956 return m_parent !=
nullptr && m_parent
->isWrapper();
960
961
965 const Node *n =
this;
968 if (!n->name().isEmpty())
969 pieces.insert(0, n->name());
972 pieces.insert(0, n->logicalModuleName());
987 QString concatenator =
"::";
989 concatenator = QLatin1Char(
'.');
992 concatenator = QLatin1Char(
'#');
994 return pieces.join(concatenator);
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1012 if (!m_deprecatedSince.isEmpty())
1013 qCWarning(lcQdoc) << QStringLiteral(
1014 "Setting deprecated since version for %1 to %2 even though it "
1015 "was already set to %3. This is very unexpected.")
1016 .arg(
this->m_name, sinceVersion,
this->m_deprecatedSince);
1017 m_deprecatedSince = sinceVersion;
1019 if (!sinceVersion.isEmpty()) {
1020 QVersionNumber since = QVersionNumber::fromString(sinceVersion).normalized();
1021 QVersionNumber current = QVersionNumber::fromString(
1024 if (!current.isNull() && !since.isNull()) {
1025 if (current < since)
1033
1034
1035
1036
1037
1038
1039
1040
1043
1044
1045
1046
1049
1050
1051
1052
1055
1056
1059
1060
1061
1062
1063
1064
1065
1066
1069
1070
1071
1074
1075
1076
1077
1080
1081
1082
1085
1086
1087
1088
1091
1092
1093
1094
1097
1098
1101
1102
1103
1104
1107
1108
1109
1110
1111
1112
1115
1116
1117
1118
1119
1120
1121
1124
1125
1126
1129
1130
1131
1134
1135
1136
1139
1140
1141
1144
1145
1146
1149
1150
1151
1154
1155
1156
1157
1160
1161
1162
1163
1164
1167
1168
1169
1170
1171
1174
1175
1176
1177
1180
1181
1182
1183
1184
1185
1186
1187
1190
1191
1192
1193
1194
1197
1198
1199
1200
1201
1204
1205
1206
1207
1208
1209
1212
1213
1214
1215
1216
1217
1218
1221
1222
1223
1224
1225
1226
1227
1228
1231
1232
1233
1236
1237
1238
1241
1242
1245
1246
1249
1250
1251
1252
1255
1256
1257
1258
1261
1262
1263
1264
1267
1268
1269
1270
1271
1274
1275
1276
1279
1280
1281
1282
1283
1286
1287
1288
1289
1290
1291
1292
1295
1296
1297
1298
1299
1300
1303
1304
1305
1306
1309
1310
1311
1312
1315
1316
1319
1320
1321
1324
1325
1326
1327
1328
1331
1332
1333
1334
1337
1338
1339
1342
1343
1344
1347
1348
1349
1352
1353
1354
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1383
1384
1385
1386
1389
1390
1391
1394
1395
1396
1397
1400
1401
1402
1403
1406
1407
1408
1409
1410
1411
void addChild(Node *child)
Adds the child to this node's child list and sets the child's parent pointer to this Aggregate.
const Location & location() const
Returns the starting location of a qdoc comment.
Doc & operator=(const Doc &doc)
bool isMarkedReimp() const
Returns true if the set of metacommands used in the doc comment contains {reimp}.
QStringMultiMap * metaTagMap() const
This node is used to represent any kind of function being documented.
The Location class provides a way to mark a location in a file.
QString plainName() const
Returns this node's name member.
const Doc & doc() const
Returns a reference to the node's Doc data member.
virtual bool isWrapper() const
Returns true if the node is a class node or a QML type node that is marked as being a wrapper class o...
QString fullName(const Node *relative=nullptr) const
Constructs and returns this node's full name.
virtual bool isAbstract() const
Returns true if the ClassNode or QmlTypeNode is marked abstract.
NodeType
An unsigned char value that identifies an object as a particular subclass of Node.
QString nodeTypeString() const
Returns this node's type as a string for use as an attribute value in XML or HTML.
bool isFunction(Genus g=DontCare) const
Returns true if this is a FunctionNode and its Genus is set to g.
bool isQmlType() const
Returns true if the node type is QmlType or QmlValueType.
virtual bool isInternal() const
Returns true if the node's status is Internal, or if its parent is a class with Internal status.
bool isHeader() const
Returns true if the node type is HeaderFile.
virtual bool isPageNode() const
Returns true if this node represents something that generates a documentation page.
virtual bool isTextPageNode() const
Returns true if the node is a PageNode but not an Aggregate.
Aggregate * parent() const
Returns the node's parent pointer.
static bool fromFlagValue(FlagValue fv, bool defaultValue)
Converts the enum fv back to a boolean value.
void setLocation(const Location &t)
Sets the node's declaration location, its definition location, or both, depending on the suffix of th...
QString plainFullName(const Node *relative=nullptr) const
Constructs and returns the node's fully qualified name by recursively ascending the parent links and ...
virtual bool isAggregate() const
Returns true if this node is an aggregate, which means it inherits Aggregate and can therefore have c...
NodeType nodeType() const
Returns this node's type.
FlagValue
A value used in PropertyNode and QmlPropertyNode that can be -1, 0, or +1.
QString qualifyQmlName()
Returns the QML node's qualified name by prepending the logical module name.
static bool nodeNameLessThan(const Node *first, const Node *second)
Returns true if the node n1 is less than node n2.
QString qualifyCppName()
Returns the CPP node's qualified name by prepending the namespaces name + "::" if there isw a namespa...
ThreadSafeness inheritedThreadSafeness() const
If this node has a parent, the parent's thread safeness value is returned.
const Location & location() const
If this node's definition location is empty, this function returns this node's declaration location.
Access access() const
Returns the node's Access setting, which can be Public, Protected, or Private.
ThreadSafeness threadSafeness() const
Returns the thread safeness value for whatever this node represents.
Genus
An unsigned char value that specifies whether the Node represents a C++ element, a QML element,...
QString fullDocumentName() const
Construct the full document name for this node and return it.
virtual Tree * tree() const
Returns a pointer to the Tree this node is in.
void setDoc(const Doc &doc, bool replace=false)
Sets this Node's Doc to doc.
Node(NodeType type, Aggregate *parent, QString name)
Construct a node with the given type and having the given parent and name.
ThreadSafeness
An unsigned char that specifies the degree of thread-safeness of the element.
bool hasDoc() const
Returns true if this node is documented, or it represents a documented node read from the index ('had...
static FlagValue toFlagValue(bool b)
Converts the boolean value b to an enum representation of the boolean type, which includes an enum va...
LinkType
An unsigned char value that probably should be moved out of the Node base class.
bool isRelatedNonmember() const
Returns true if this is a related nonmember of something.
void setSince(const QString &since)
Sets the information about the project and version a node was introduced in, unless the version is lo...
void setStatus(Status t)
Sets the node's status to t.
QString extractClassName(const QString &string) const
Extract a class name from the type string and return it.
void setDeprecated(const QString &sinceVersion)
Sets the Node status to Node::Deprecated, unless sinceVersion represents a future version.
static bool nodeSortKeyOrNameLessThan(const Node *n1, const Node *n2)
Returns true if node n1 is less than node n2 when comparing the sort keys, defined with.
Status
An unsigned char that specifies the status of the documentation element in the documentation set.
QString qualifyWithParentName()
Return the name of this node qualified with the parent name and "::" if there is a parent name.
QString plainSignature() const
Constructs and returns the node's fully qualified signature by recursively ascending the parent links...
Status status() const
Returns the node's status value.
static Genus getGenus(NodeType t)
Determines the appropriate Genus value for the NodeType value t and returns that Genus value.
This class constructs and maintains a tree of instances of the subclasses of Node.
#define CONFIG_IGNORESINCE
Combined button and popup list for selecting options.
#define LT_RETURN_IF_NOT_EQUAL(a, b)