Doxygen
Loading...
Searching...
No Matches
conceptdef.cpp
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2021 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16#include "conceptdef.h"
17#include "definitionimpl.h"
18#include "util.h"
19#include "config.h"
20#include "doxygen.h"
21#include "language.h"
22#include "outputlist.h"
23#include "searchindex.h"
24#include "message.h"
25#include "parserintf.h"
26#include "layout.h"
27#include "namespacedef.h"
28
29//------------------------------------------------------------------------------------
30
31class ConceptDefImpl : public DefinitionMixin<ConceptDefMutable>
32{
33 public:
34 ConceptDefImpl(const QCString &fileName,int startLine,int startColumn,
35 const QCString &name,const QCString &tagRef=QCString(),const QCString &tagFile=QCString());
36 ~ConceptDefImpl() override;
38
39 //---------- ConceptDef
40 DefType definitionType() const override;
42 QCString getOutputFileBase() const override;
43 bool hasDetailedDescription() const override;
44 QCString displayName(bool includeScope=true) const override;
45 const IncludeInfo *includeInfo() const override;
47 QCString anchor() const override;
48 bool isLinkableInProject() const override;
49 bool isLinkable() const override;
50 QCString initializer() const override;
52 const QCString &header,bool localNames) const override;
53 const NamespaceDef *getNamespaceDef() const override;
54 const FileDef *getFileDef() const override;
55 const ModuleDef *getModuleDef() const override;
56 QCString title() const override;
57 int groupId() const override;
58
59 //---------- ConceptDefMutable
60 void setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force) override;
61 void setTemplateArguments(const ArgumentList &al) override;
62 void setNamespace(NamespaceDef *nd) override;
63 void setFileDef(FileDef *fd) override;
64 void setModuleDef(ModuleDef *mod) override;
65 void writeTagFile(TextStream &) override;
66 void writeDocumentation(OutputList &) override;
67 void setInitializer(const QCString &init) override;
68 void findSectionsInDocumentation() override;
69 void setGroupId(int id) override;
70
71 //---------- Helpers
73 void writeAuthorSection(OutputList &ol) const;
74 void writeIncludeFiles(OutputList &ol) const;
76 void writeDefinition(OutputList &ol,const QCString &title) const;
77 void addConceptAttributes(OutputList &ol) const;
78
79 private:
81 std::unique_ptr<IncludeInfo> m_incInfo;
83 FileDef *m_fileDef = nullptr;
87 int m_groupId = -1;
88};
89
90std::unique_ptr<ConceptDef> createConceptDef(
91 const QCString &fileName,int startLine,int startColumn,
92 const QCString &name, const QCString &tagRef,const QCString &tagFile)
93{
94 return std::make_unique<ConceptDefImpl>(fileName,startLine,startColumn,name,tagRef,tagFile);
95}
96
97//------------------------------------------------------------------------------------
98
99class ConceptDefAliasImpl : public DefinitionAliasMixin<ConceptDef>
100{
101 public:
102 ConceptDefAliasImpl(const Definition *newScope,const ConceptDef *cd)
103 : DefinitionAliasMixin(newScope,cd) { init(); }
104 ~ConceptDefAliasImpl() override { deinit(); }
106
107 const ConceptDef *getCdAlias() const { return toConceptDef(getAlias()); }
108
109 DefType definitionType() const override { return TypeConcept; }
111 { return getCdAlias()->codeSymbolType(); }
113 { return getCdAlias()->getOutputFileBase(); }
114 QCString getReference() const override
115 { return getCdAlias()->getReference(); }
116 bool isReference() const override
117 { return getCdAlias()->isReference(); }
118 bool hasDetailedDescription() const override
119 { return getCdAlias()->hasDetailedDescription(); }
120 QCString displayName(bool includeScope=true) const override
121 { return getCdAlias()->displayName(includeScope); }
122 const IncludeInfo *includeInfo() const override
123 { return getCdAlias()->includeInfo(); }
126 QCString anchor() const override
127 { return getCdAlias()->anchor(); }
128 bool isLinkableInProject() const override
129 { return getCdAlias()->isLinkableInProject(); }
130 bool isLinkable() const override
131 { return getCdAlias()->isLinkable(); }
132 QCString initializer() const override
133 { return getCdAlias()->initializer(); }
134 const NamespaceDef *getNamespaceDef() const override
135 { return getCdAlias()->getNamespaceDef(); }
136 const FileDef *getFileDef() const override
137 { return getCdAlias()->getFileDef(); }
138 const ModuleDef *getModuleDef() const override
139 { return getCdAlias()->getModuleDef(); }
140 QCString title() const override
141 { return getCdAlias()->title(); }
143 const QCString &header,bool localNames) const override
144 { getCdAlias()->writeDeclarationLink(ol,found,header,localNames); }
145 int groupId() const override
146 { return getCdAlias()->groupId(); }
147};
148
149std::unique_ptr<ConceptDef> createConceptDefAlias(const Definition *newScope,const ConceptDef *cd)
150{
151 return std::make_unique<ConceptDefAliasImpl>(newScope,cd);
152}
153
154//------------------------------------------------------------------------------------
155
156ConceptDefImpl::ConceptDefImpl(const QCString &fileName,int startLine,int startColumn,
157 const QCString &name,const QCString &tagRef,const QCString &tagFile) : DefinitionMixin(fileName,startLine,startColumn,name)
158{
159 if (!tagFile.isEmpty())
160 {
161 if (!tagRef.isEmpty())
162 {
163 m_fileName = stripExtension(tagFile);
164 }
165 else
166 {
167 m_fileName = convertNameToFile(stripExtension(tagFile));
168 }
169 }
170 else
171 {
172 m_fileName = convertNameToFile(QCString("concept")+name);
173 }
174 setReference(tagRef);
175}
176
180
185
190
192{
193 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
194 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
195 return ((!briefDescription().isEmpty() && repeatBrief) ||
196 !documentation().isEmpty() ||
197 (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef()));
198}
199
201{
202 return "";
203}
204
205QCString ConceptDefImpl::displayName(bool includeScope) const
206{
207 return includeScope ? name() : localName();
208}
209
211{
212 return m_incInfo.get();
213}
214
219
221{
222 bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES);
223 return (hasDocumentation() || !hideUndoc) && /* documented */
224 !isHidden() && /* not hidden */
225 !isReference(); /* not an external reference */
226}
227
229{
230 return isLinkableInProject() || isReference();
231}
232
233void ConceptDefImpl::setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force)
234{
235 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
236 if ((!incName.isEmpty() && m_incInfo->includeName.isEmpty()) ||
237 (fd!=nullptr && m_incInfo->fileDef==nullptr)
238 )
239 {
240 m_incInfo->fileDef = fd;
241 m_incInfo->includeName = incName;
243 }
244 if (force && !incName.isEmpty())
245 {
246 m_incInfo->includeName = incName;
248 }
249}
250
255
260
262{
263 return m_nspace;
264}
265
267{
268 m_fileDef=fd;
269}
270
275
277{
278 return m_fileDef;
279}
280
282{
283 return m_moduleDef;
284}
285
287{
288 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
289 {
290 return displayName();
291 }
292 else
293 {
294 return theTranslator->trConceptReference(displayName());
295 }
296}
297
299{
300 return m_groupId;
301}
302
304{
305 m_groupId = id;
306}
307
309{
310 tagFile << " <compound kind=\"concept\">\n";
311 tagFile << " <name>" << convertToXML(name()) << "</name>\n";
314 tagFile << " <filename>" << convertToXML(fn) << "</filename>\n";
315 QCString idStr = id();
316 if (!idStr.isEmpty())
317 {
318 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
319 }
321 tagFile << " </compound>\n";
322}
323
325{
327 {
328 auto parser { createDocParser() };
329 auto ast { validatingParseDoc(
330 *parser.get(),briefFile(),briefLine(),this,nullptr,
332 QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
333 if (!ast->isEmpty())
334 {
335 ol.startParagraph();
338 ol.writeString(" - ");
340 ol.writeDoc(ast.get(),this,nullptr);
343 ol.writeString(" \n");
345
347 {
349 ol.startTextLink(getOutputFileBase(),"details");
350 ol.parseText(theTranslator->trMore());
351 ol.endTextLink();
352 }
354 ol.endParagraph();
355 }
356 }
357 ol.writeSynopsis();
358}
359
361{
362 if (m_incInfo)
363 {
364 QCString nm=m_incInfo->includeName.isEmpty() ?
365 (m_incInfo->fileDef ?
366 m_incInfo->fileDef->docName() : QCString()
367 ) :
368 m_incInfo->includeName;
369 if (!nm.isEmpty())
370 {
371 ol.startParagraph();
372 ol.startTypewriter();
373 ol.docify(::includeStatement(SrcLangExt::Cpp,m_incInfo->kind));
374 ol.docify(::includeOpen(SrcLangExt::Cpp,m_incInfo->kind));
377 ol.docify(nm);
380 if (m_incInfo->fileDef)
381 {
382 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
383 }
384 else
385 {
386 ol.docify(nm);
387 }
389 ol.docify(::includeClose(SrcLangExt::Cpp,m_incInfo->kind));
390 ol.endTypewriter();
391 ol.endParagraph();
392 }
393 }
394}
395
397{
398 TextStream t;
399 t << "template<";
400 bool first=true;
401 for (const auto &a : al)
402 {
403 if (!first) t << ", ";
404 t << a.type;
405 if (!a.name.isEmpty())
406 {
407 t << " " << a.name;
408 }
409 if (a.defval.length()!=0)
410 {
411 t << " " << a.defval;
412 }
413 first=false;
414 }
415 t << ">";
416 return t.str();
417}
418
420{
421 m_initializer = templateSpec(m_tArgList)+"\nconcept "+name()+" = "+init;
422}
423
428
430{
431 ol.startGroupHeader();
432 ol.parseText(title);
433 ol.endGroupHeader();
434
435 auto intf = Doxygen::parserManager->getCodeParser(".cpp");
436 intf->resetCodeParserState();
437 auto &codeOL = ol.codeGenerators();
438 codeOL.startCodeFragment("DoxyCode");
439 QCString scopeName;
441 TextStream conceptDef;
442 conceptDef << m_initializer;
443 intf->parseCode(codeOL,scopeName,conceptDef.str(),SrcLangExt::Cpp,Config_getBool(STRIP_CODE_COMMENTS),false,QCString(),
444 m_fileDef, -1,-1,true,nullptr,false,this);
445 codeOL.endCodeFragment("DoxyCode");
446}
447
449{
450 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
452 {
455 ol.writeRuler();
457
460 ol.writeAnchor(QCString(),"details");
462
463 ol.startGroupHeader();
464 ol.parseText(title);
465 ol.endGroupHeader();
466
467 ol.startTextBlock();
468 // repeat brief description
469 if (!briefDescription().isEmpty() && repeatBrief)
470 {
472 QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
473 }
474 if (!briefDescription().isEmpty() && repeatBrief &&
475 !documentation().isEmpty())
476 {
479 ol.writeString("\n\n");
481 }
482
483 // write documentation
484 if (!documentation().isEmpty())
485 {
486 ol.generateDoc(docFile(),docLine(),this,nullptr,documentation(),TRUE,FALSE,
487 QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT));
488 }
489
490 writeSourceDef(ol);
491 ol.endTextBlock();
492 }
493}
494
496{
497 // write Author section (Man only)
500 ol.startGroupHeader();
501 ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
502 ol.endGroupHeader();
503 ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
505}
506
508{
509 if (isExported())
510 {
513 ol.startLabels();
514 ol.writeLabel("export",false);
515 ol.endLabels();
517 }
518}
519
521{
522 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
523 QCString pageTitle;
524 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
525 {
526 pageTitle = displayName();
527 }
528 else
529 {
530 pageTitle = theTranslator->trConceptReference(displayName());
531 }
532 startFile(ol,getOutputFileBase(),name(),pageTitle,HighlightedItem::ConceptVisible,!generateTreeView);
533
534 // ---- navigation part
535 if (!generateTreeView)
536 {
538 {
540 }
541 ol.endQuickIndices();
542 }
543
544 // ---- title part
545 startTitle(ol,getOutputFileBase(),this);
546 ol.parseText(pageTitle);
548 addGroupListToTitle(ol,this);
550
551 // ---- contents part
552
553 ol.startContents();
554
555 //---------------------------------------- start flexible part -------------------------------
556
557 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Concept))
558 {
559 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
560 switch (lde->kind())
561 {
562 case LayoutDocEntry::BriefDesc:
564 break;
565 case LayoutDocEntry::ConceptDefinition:
566 if (ls) writeDefinition(ol,ls->title(getLanguage()));
567 break;
568 case LayoutDocEntry::DetailedDesc:
569 if (ls) writeDetailedDescription(ol,ls->title(getLanguage()));
570 break;
571 case LayoutDocEntry::AuthorSection:
573 break;
574 case LayoutDocEntry::ClassIncludes:
576 break;
577 case LayoutDocEntry::MemberDeclStart:
578 case LayoutDocEntry::NamespaceClasses:
579 case LayoutDocEntry::NamespaceInterfaces:
580 case LayoutDocEntry::NamespaceStructs:
581 case LayoutDocEntry::NamespaceExceptions:
582 case LayoutDocEntry::NamespaceConcepts:
583 case LayoutDocEntry::NamespaceNestedNamespaces:
584 case LayoutDocEntry::NamespaceNestedConstantGroups:
585 case LayoutDocEntry::MemberGroups:
586 case LayoutDocEntry::MemberDecl:
587 case LayoutDocEntry::MemberDeclEnd:
588 case LayoutDocEntry::MemberDefStart:
589 case LayoutDocEntry::NamespaceInlineClasses:
590 case LayoutDocEntry::MemberDef:
591 case LayoutDocEntry::MemberDefEnd:
592 case LayoutDocEntry::ClassInheritanceGraph:
593 case LayoutDocEntry::ClassNestedClasses:
594 case LayoutDocEntry::ClassCollaborationGraph:
595 case LayoutDocEntry::ClassAllMembersLink:
596 case LayoutDocEntry::ClassUsedFiles:
597 case LayoutDocEntry::ClassInlineClasses:
598 case LayoutDocEntry::FileClasses:
599 case LayoutDocEntry::FileConcepts:
600 case LayoutDocEntry::FileInterfaces:
601 case LayoutDocEntry::FileStructs:
602 case LayoutDocEntry::FileExceptions:
603 case LayoutDocEntry::FileNamespaces:
604 case LayoutDocEntry::FileConstantGroups:
605 case LayoutDocEntry::FileIncludes:
606 case LayoutDocEntry::FileIncludeGraph:
607 case LayoutDocEntry::FileIncludedByGraph:
608 case LayoutDocEntry::FileInlineClasses:
609 case LayoutDocEntry::FileSourceLink:
610 case LayoutDocEntry::GroupClasses:
611 case LayoutDocEntry::GroupConcepts:
612 case LayoutDocEntry::GroupModules:
613 case LayoutDocEntry::GroupInlineClasses:
614 case LayoutDocEntry::GroupNamespaces:
615 case LayoutDocEntry::GroupDirs:
616 case LayoutDocEntry::GroupNestedGroups:
617 case LayoutDocEntry::GroupFiles:
618 case LayoutDocEntry::GroupGraph:
619 case LayoutDocEntry::GroupPageDocs:
620 case LayoutDocEntry::ModuleExports:
621 case LayoutDocEntry::ModuleClasses:
622 case LayoutDocEntry::ModuleConcepts:
623 case LayoutDocEntry::ModuleUsedFiles:
624 case LayoutDocEntry::DirSubDirs:
625 case LayoutDocEntry::DirFiles:
626 case LayoutDocEntry::DirGraph:
627 err("Internal inconsistency: member '{}' should not be part of "
628 "LayoutDocManager::Concept entry list\n",lde->entryToString());
629 break;
630 }
631 }
632
633 //---------------------------------------- end flexible part -------------------------------
634
635 ol.endContents();
636
637 endFileWithNavPath(ol,this);
638}
639
640void ConceptDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCString &header,bool localNames) const
641{
642 if (isLinkable())
643 {
644 if (!found) // first concept
645 {
646 ol.startMemberHeader("concepts");
647 if (!header.isEmpty())
648 {
649 ol.parseText(header);
650 }
651 else
652 {
653 theTranslator->trConcept(true,false);
654 }
655 ol.endMemberHeader();
656 ol.startMemberList();
657 found=TRUE;
658 }
661 ol.writeString("concept ");
662 QCString cname = displayName(!localNames);
664 if (isLinkable())
665 {
668 anchor(),
669 cname
670 );
671 }
672 else
673 {
674 ol.startBold();
675 ol.docify(cname);
676 ol.endBold();
677 }
679 // add the brief description if available
680 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
681 {
682 auto parser { createDocParser() };
683 auto ast { validatingParseDoc(
684 *parser.get(),briefFile(),briefLine(),this,nullptr,
686 QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
687 if (!ast->isEmpty())
688 {
690 ol.writeDoc(ast.get(),this,nullptr);
692 }
693 }
695 }
696}
697
704
705//------------------------------------------------------------------------------------
706
708{
709 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
710 for (const auto &cd : *this)
711 {
712 bool isLink = cd->isLinkable();
713 if (isLink || !hideUndocClasses)
714 {
715 return true;
716 }
717 }
718 return false;
719}
720
721void ConceptLinkedRefMap::writeDeclaration(OutputList &ol,const QCString &header,bool localNames) const
722{
723 bool found=FALSE;
724 for (const auto &cd : *this)
725 {
726 cd->writeDeclarationLink(ol,found,header,localNames);
727 }
728 if (found) ol.endMemberList();
729}
730
731//------------------------------------------------------------------------------------
732
733// --- Cast functions
734//
736{
737 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
738 {
739 return static_cast<ConceptDef*>(d);
740 }
741 else
742 {
743 return nullptr;
744 }
745}
746
748{
749 Definition *d = toDefinition(md);
750 if (d && typeid(*d)==typeid(ConceptDefImpl))
751 {
752 return static_cast<ConceptDef*>(d);
753 }
754 else
755 {
756 return nullptr;
757 }
758}
759
761{
762 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
763 {
764 return static_cast<const ConceptDef*>(d);
765 }
766 else
767 {
768 return nullptr;
769 }
770}
771
773{
774 if (d && typeid(*d)==typeid(ConceptDefImpl))
775 {
776 return static_cast<ConceptDefMutable*>(d);
777 }
778 else
779 {
780 return nullptr;
781 }
782}
783
784// -- helpers
785
787{
788 if (n.isEmpty()) return nullptr;
789 return Doxygen::conceptLinkedMap->find(n);
790}
791
793{
794 ConceptDef *cd=nullptr;
795 while (d && d!=Doxygen::globalScope)
796 {
797 cd = getConcept(d->name()+"::"+name);
798 if (cd) return cd;
799 d = d->getOuterScope();
800 }
801 cd = getConcept(name);
802 return cd;
803}
804
805
This class represents an function or template argument list.
Definition arguments.h:65
DefType definitionType() const override
QCString getOutputFileBase() const override
QCString anchor() const override
const NamespaceDef * getNamespaceDef() const override
const ModuleDef * getModuleDef() const override
bool isLinkable() const override
int groupId() const override
bool isLinkableInProject() const override
QCString displayName(bool includeScope=true) const override
QCString initializer() const override
const IncludeInfo * includeInfo() const override
bool hasDetailedDescription() const override
CodeSymbolType codeSymbolType() const override
~ConceptDefAliasImpl() override
ArgumentList getTemplateParameterList() const override
void writeDeclarationLink(OutputList &ol, bool &found, const QCString &header, bool localNames) const override
const FileDef * getFileDef() const override
const ConceptDef * getCdAlias() const
ConceptDefAliasImpl(const Definition *newScope, const ConceptDef *cd)
QCString title() const override
QCString getReference() const override
bool isReference() const override
virtual QCString initializer() const =0
virtual ArgumentList getTemplateParameterList() const =0
virtual const IncludeInfo * includeInfo() const =0
virtual void writeDeclarationLink(OutputList &ol, bool &found, const QCString &header, bool localNames) const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual const ModuleDef * getModuleDef() const =0
virtual QCString title() const =0
virtual bool hasDetailedDescription() const =0
virtual int groupId() const =0
virtual const FileDef * getFileDef() const =0
QCString getOutputFileBase() const override
const NamespaceDef * getNamespaceDef() const override
void writeIncludeFiles(OutputList &ol) const
void addConceptAttributes(OutputList &ol) const
QCString initializer() const override
~ConceptDefImpl() override
std::unique_ptr< IncludeInfo > m_incInfo
QCString m_initializer
QCString m_fileName
const FileDef * getFileDef() const override
ModuleDef * m_moduleDef
int groupId() const override
ArgumentList getTemplateParameterList() const override
NamespaceDef * m_nspace
QCString anchor() const override
void writeDeclarationLink(OutputList &ol, bool &found, const QCString &header, bool localNames) const override
void setTemplateArguments(const ArgumentList &al) override
void writeBriefDescription(OutputList &) const
void writeDocumentation(OutputList &) override
void writeDetailedDescription(OutputList &ol, const QCString &title) const
void setInitializer(const QCString &init) override
bool isLinkableInProject() const override
void findSectionsInDocumentation() override
bool hasDetailedDescription() const override
ConceptDefImpl(const QCString &fileName, int startLine, int startColumn, const QCString &name, const QCString &tagRef=QCString(), const QCString &tagFile=QCString())
QCString displayName(bool includeScope=true) const override
FileDef * m_fileDef
const IncludeInfo * includeInfo() const override
void writeDefinition(OutputList &ol, const QCString &title) const
void writeTagFile(TextStream &) override
bool isLinkable() const override
void setModuleDef(ModuleDef *mod) override
void setNamespace(NamespaceDef *nd) override
DefType definitionType() const override
void setIncludeFile(FileDef *fd, const QCString &incName, bool local, bool force) override
void setGroupId(int id) override
void setFileDef(FileDef *fd) override
ArgumentList m_tArgList
void writeAuthorSection(OutputList &ol) const
const ModuleDef * getModuleDef() const override
CodeSymbolType codeSymbolType() const override
QCString title() const override
void writeDeclaration(OutputList &ol, const QCString &header, bool localNames) const
bool declVisible() const
const Definition * getAlias() const
DefinitionAliasMixin(const Definition *scope, const Definition *alias)
The common base class of all entity definitions found in the sources.
Definition definition.h:76
virtual bool isLinkable() const =0
virtual QCString anchor() const =0
virtual bool isLinkableInProject() const =0
virtual QCString getReference() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual CodeSymbolType codeSymbolType() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
const QCString & name() const override
void writeSourceDef(OutputList &ol) const override
void writeNavigationPath(OutputList &ol) const override
bool hasBriefDescription() const override
QCString docFile() const override
QCString briefFile() const override
QCString briefDescription(bool abbreviate=FALSE) const override
Definition * getOuterScope() const override
QCString getReference() const override
DefinitionMixin(const QCString &defFileName, int defLine, int defColumn, const QCString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=TRUE)
const QCString & localName() const override
const FileDef * getBodyDef() const override
QCString inbodyDocumentation() const override
QCString documentation() const override
void writeDocAnchorsToTagFile(TextStream &fs) const override
SrcLangExt getLanguage() const override
static ConceptLinkedMap * conceptLinkedMap
Definition doxygen.h:98
static ParserManager * parserManager
Definition doxygen.h:131
static NamespaceDefMutable * globalScope
Definition doxygen.h:121
A model of a file symbol.
Definition filedef.h:99
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition layout.cpp:1435
An abstract interface of a namespace symbol.
void startCodeFragment(const QCString &style)
Definition outputlist.h:278
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:314
void endTextBlock(bool paraBreak=FALSE)
Definition outputlist.h:671
void writeString(const QCString &text)
Definition outputlist.h:412
void startGroupHeader(int extraLevels=0)
Definition outputlist.h:454
void startMemberDeclaration()
Definition outputlist.h:570
void disable(OutputType o)
void writeRuler()
Definition outputlist.h:522
const OutputCodeList & codeGenerators() const
Definition outputlist.h:357
void enable(OutputType o)
void endContents()
Definition outputlist.h:619
void endMemberDescription()
Definition outputlist.h:568
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:440
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md)
Definition outputlist.h:384
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition outputlist.h:566
void docify(const QCString &s)
Definition outputlist.h:438
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:408
void startTextBlock(bool dense=FALSE)
Definition outputlist.h:669
void endParagraph()
Definition outputlist.h:410
void startMemberList()
Definition outputlist.h:482
void endTextLink()
Definition outputlist.h:445
void startBold()
Definition outputlist.h:562
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:496
void endMemberList()
Definition outputlist.h:484
void writeSynopsis()
Definition outputlist.h:593
void startTypewriter()
Definition outputlist.h:450
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
void pushGeneratorState()
void insertMemberAlign(bool templ=FALSE)
Definition outputlist.h:518
void disableAllBut(OutputType o)
void popGeneratorState()
void writeAnchor(const QCString &fileName, const QCString &name)
Definition outputlist.h:524
void endBold()
Definition outputlist.h:564
void endGroupHeader(int extraLevels=0)
Definition outputlist.h:456
void endLabels()
Definition outputlist.h:741
void endQuickIndices()
Definition outputlist.h:605
void writeLabel(const QCString &l, bool isLast)
Definition outputlist.h:739
void startLabels()
Definition outputlist.h:737
void startContents()
Definition outputlist.h:617
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
Definition outputlist.h:572
void endMemberHeader()
Definition outputlist.h:472
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
Definition outputlist.h:494
void endTypewriter()
Definition outputlist.h:452
void parseText(const QCString &textStr)
void startTextLink(const QCString &file, const QCString &anchor)
Definition outputlist.h:443
void startMemberHeader(const QCString &anchor, int typ=2)
Definition outputlist.h:470
This is an alternative implementation of QCString.
Definition qcstring.h:101
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:150
Text streaming class that buffers data.
Definition textstream.h:36
std::string str() const
Return the contents of the buffer as a std::string object.
Definition textstream.h:229
ConceptDefMutable * toConceptDefMutable(Definition *d)
ConceptDef * getResolvedConcept(const Definition *d, const QCString &name)
ConceptDef * toConceptDef(Definition *d)
static QCString templateSpec(const ArgumentList &al)
ConceptDef * getConcept(const QCString &n)
std::unique_ptr< ConceptDef > createConceptDefAlias(const Definition *newScope, const ConceptDef *cd)
std::unique_ptr< ConceptDef > createConceptDef(const QCString &fileName, int startLine, int startColumn, const QCString &name, const QCString &tagRef, const QCString &tagFile)
#define Config_getBool(name)
Definition config.h:33
#define Config_getString(name)
Definition config.h:32
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
Definition construct.h:37
Definition * toDefinition(DefinitionMutable *dm)
void docFindSections(const QCString &input, const Definition *d, const QCString &fileName)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
static void writeTagFile()
QCString includeClose(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:86
QCString includeStatement(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:56
QCString includeOpen(SrcLangExt lang, IncludeKind kind)
Definition filedef.cpp:73
@ IncludeLocal
Definition filedef.h:50
@ IncludeSystem
Definition filedef.h:49
void startTitle(OutputList &ol, const QCString &fileName, const DefinitionMutable *def)
Definition index.cpp:384
void endTitle(OutputList &ol, const QCString &fileName, const QCString &name)
Definition index.cpp:393
void startFile(OutputList &ol, const QCString &name, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel)
Definition index.cpp:400
void endFileWithNavPath(OutputList &ol, const Definition *d)
Definition index.cpp:446
Translator * theTranslator
Definition language.cpp:71
#define err(fmt,...)
Definition message.h:127
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
Web server based search engine.
Class representing the data associated with a #include statement.
Definition filedef.h:75
Definition layout.h:102
QCString title(SrcLangExt lang) const
Definition layout.cpp:1779
CodeSymbolType
Definition types.h:481
void addGroupListToTitle(OutputList &ol, const Definition *d)
Definition util.cpp:5398
bool found
Definition util.cpp:984
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:4013
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:4421
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:5408
A bunch of utility functions.