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;
51 void writeDeclarationLink(OutputList &ol,bool &found,
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 Parts conceptParts() const override { return m_parts; }
59
60 //---------- ConceptDefMutable
61 void setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force) override;
62 void setTemplateArguments(const ArgumentList &al) override;
63 void setNamespace(NamespaceDef *nd) override;
64 void setFileDef(FileDef *fd) override;
65 void setModuleDef(ModuleDef *mod) override;
66 void writeTagFile(TextStream &) override;
67 void writeDocumentation(OutputList &) override;
68 void setInitializer(const QCString &init) override;
69 void findSectionsInDocumentation() override;
70 void setGroupId(int id) override;
71 void addDocPart(const QCString &doc,int lineNr,int colNr) override;
72 void addCodePart(const QCString &code,int lineNr,int colNr) override;
73 void addListReferences() override;
74 void addRequirementReferences() override;
75
76 //---------- Helpers
78 void writeAuthorSection(OutputList &ol) const;
79 void writeIncludeFiles(OutputList &ol) const;
81 void writeDefinition(OutputList &ol,const QCString &title) const;
82 void addConceptAttributes(OutputList &ol) const;
83
84 private:
86 std::unique_ptr<IncludeInfo> m_incInfo;
88 FileDef *m_fileDef = nullptr;
92 int m_groupId = -1;
94};
95
96std::unique_ptr<ConceptDef> createConceptDef(
97 const QCString &fileName,int startLine,int startColumn,
98 const QCString &name, const QCString &tagRef,const QCString &tagFile)
99{
100 return std::make_unique<ConceptDefImpl>(fileName,startLine,startColumn,name,tagRef,tagFile);
101}
102
103//------------------------------------------------------------------------------------
104
106{
107 public:
108 ConceptDefAliasImpl(const Definition *newScope,const ConceptDef *cd)
109 : DefinitionAliasMixin(newScope,cd) { init(); }
110 ~ConceptDefAliasImpl() override { deinit(); }
112
113 const ConceptDef *getCdAlias() const { return toConceptDef(getAlias()); }
114
115 DefType definitionType() const override { return TypeConcept; }
117 { return getCdAlias()->codeSymbolType(); }
119 { return getCdAlias()->getOutputFileBase(); }
120 QCString getReference() const override
121 { return getCdAlias()->getReference(); }
122 bool isReference() const override
123 { return getCdAlias()->isReference(); }
124 bool hasDetailedDescription() const override
125 { return getCdAlias()->hasDetailedDescription(); }
126 QCString displayName(bool includeScope=true) const override
127 { return getCdAlias()->displayName(includeScope); }
128 const IncludeInfo *includeInfo() const override
129 { return getCdAlias()->includeInfo(); }
132 QCString anchor() const override
133 { return getCdAlias()->anchor(); }
134 bool isLinkableInProject() const override
135 { return getCdAlias()->isLinkableInProject(); }
136 bool isLinkable() const override
137 { return getCdAlias()->isLinkable(); }
138 QCString initializer() const override
139 { return getCdAlias()->initializer(); }
140 const NamespaceDef *getNamespaceDef() const override
141 { return getCdAlias()->getNamespaceDef(); }
142 const FileDef *getFileDef() const override
143 { return getCdAlias()->getFileDef(); }
144 const ModuleDef *getModuleDef() const override
145 { return getCdAlias()->getModuleDef(); }
146 QCString title() const override
147 { return getCdAlias()->title(); }
148 void writeDeclarationLink(OutputList &ol,bool &found,
149 const QCString &header,bool localNames) const override
150 { getCdAlias()->writeDeclarationLink(ol,found,header,localNames); }
151 int groupId() const override
152 { return getCdAlias()->groupId(); }
153 Parts conceptParts() const override
154 { return getCdAlias()->conceptParts(); }
155};
156
157std::unique_ptr<ConceptDef> createConceptDefAlias(const Definition *newScope,const ConceptDef *cd)
158{
159 return std::make_unique<ConceptDefAliasImpl>(newScope,cd);
160}
161
162//------------------------------------------------------------------------------------
163
164ConceptDefImpl::ConceptDefImpl(const QCString &fileName,int startLine,int startColumn,
165 const QCString &name,const QCString &tagRef,const QCString &tagFile) : DefinitionMixin(fileName,startLine,startColumn,name)
166{
167 if (!tagFile.isEmpty())
168 {
169 if (!tagRef.isEmpty())
170 {
171 m_fileName = stripExtension(tagFile);
172 }
173 else
174 {
175 m_fileName = convertNameToFile(stripExtension(tagFile));
176 }
177 }
178 else
179 {
180 m_fileName = convertNameToFile(QCString("concept")+name);
181 }
182 setReference(tagRef);
183}
184
188
193
198
200{
201 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
202 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
203 return ((!briefDescription().isEmpty() && repeatBrief) ||
204 !documentation().isEmpty() ||
205 (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef())) ||
207}
208
210{
211 return "";
212}
213
214QCString ConceptDefImpl::displayName(bool includeScope) const
215{
216 return includeScope ? name() : localName();
217}
218
220{
221 return m_incInfo.get();
222}
223
228
230{
231 bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES);
232 return (hasDocumentation() || !hideUndoc) && /* documented */
233 !isHidden() && /* not hidden */
234 !isReference(); /* not an external reference */
235}
236
238{
239 return isLinkableInProject() || isReference();
240}
241
242void ConceptDefImpl::setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force)
243{
244 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
245 if ((!incName.isEmpty() && m_incInfo->includeName.isEmpty()) ||
246 (fd!=nullptr && m_incInfo->fileDef==nullptr)
247 )
248 {
249 m_incInfo->fileDef = fd;
250 m_incInfo->includeName = incName;
252 }
253 if (force && !incName.isEmpty())
254 {
255 m_incInfo->includeName = incName;
257 }
258}
259
264
269
271{
272 return m_nspace;
273}
274
276{
277 m_fileDef=fd;
278}
279
284
286{
287 return m_fileDef;
288}
289
291{
292 return m_moduleDef;
293}
294
296{
297 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
298 {
299 return displayName();
300 }
301 else
302 {
303 return theTranslator->trConceptReference(displayName());
304 }
305}
306
308{
309 return m_groupId;
310}
311
313{
314 m_groupId = id;
315}
316
318{
321 theTranslator->trConcept(true,true),
323 displayName(),
324 QCString(),
325 this
326 );
327}
328
333
335{
336 tagFile << " <compound kind=\"concept\">\n";
337 tagFile << " <name>" << convertToXML(name()) << "</name>\n";
340 tagFile << " <filename>" << convertToXML(fn) << "</filename>\n";
341 QCString idStr = id();
342 if (!idStr.isEmpty())
343 {
344 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
345 }
347 tagFile << " </compound>\n";
348}
349
351{
353 {
354 auto parser { createDocParser() };
355 auto ast { validatingParseDoc(*parser.get(),
356 briefFile(),
357 briefLine(),
358 this,
359 nullptr,
361 DocOptions()
362 .setIndexWords(true)
363 .setSingleLine(true))
364 };
365 if (!ast->isEmpty())
366 {
367 ol.startParagraph();
370 ol.writeString(" - ");
372 ol.writeDoc(ast.get(),this,nullptr);
375 ol.writeString(" \n");
377
379 {
381 ol.startTextLink(getOutputFileBase(),"details");
382 ol.parseText(theTranslator->trMore());
383 ol.endTextLink();
384 }
386 ol.endParagraph();
387 }
388 }
389 ol.writeSynopsis();
390}
391
393{
394 if (m_incInfo)
395 {
396 QCString nm=m_incInfo->includeName.isEmpty() ?
397 (m_incInfo->fileDef ?
398 m_incInfo->fileDef->docName() : QCString()
399 ) :
400 m_incInfo->includeName;
401 if (!nm.isEmpty())
402 {
403 ol.startParagraph();
404 ol.startTypewriter();
405 ol.docify(::includeStatement(SrcLangExt::Cpp,m_incInfo->kind));
406 ol.docify(::includeOpen(SrcLangExt::Cpp,m_incInfo->kind));
409 ol.docify(nm);
412 if (m_incInfo->fileDef)
413 {
414 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
415 }
416 else
417 {
418 ol.docify(nm);
419 }
421 ol.docify(::includeClose(SrcLangExt::Cpp,m_incInfo->kind));
422 ol.endTypewriter();
423 ol.endParagraph();
424 }
425 }
426}
427
429{
430 TextStream t;
431 t << "template<";
432 bool first=true;
433 for (const auto &a : al)
434 {
435 if (!first) t << ", ";
436 t << a.type;
437 if (!a.name.isEmpty())
438 {
439 t << " " << a.name;
440 }
441 if (a.defval.length()!=0)
442 {
443 t << " " << a.defval;
444 }
445 first=false;
446 }
447 t << ">";
448 return t.str();
449}
450
452{
453 m_initializer = templateSpec(m_tArgList)+"\nconcept "+name()+" = "+init;
454}
455
460
462{
463 ol.startGroupHeader("conceptdef");
464 ol.parseText(title);
465 ol.endGroupHeader();
466
467 auto intf = Doxygen::parserManager->getCodeParser(".cpp");
468 intf->resetCodeParserState();
469 auto &codeOL = ol.codeGenerators();
470 for (const auto &part : m_parts)
471 {
472 if (part.type==PartType::Code)
473 {
474 codeOL.startCodeFragment("DoxyCode");
475 QCString scopeName;
477 //printf("concept=[%s]\n",qPrint(m_initializer));
478 intf->parseCode(codeOL,
479 scopeName,
480 part.content,
481 SrcLangExt::Cpp,
482 false, // stripCodeComments
485 .setInlineFragment(true)
486 .setShowLineNumbers(false)
487 .setSearchCtx(this)
488 );
489 codeOL.endCodeFragment("DoxyCode");
490 }
491 else if (part.type==PartType::Doc)
492 {
493 //printf("rendering part [[%s]] at %d\n",qPrint(part.content),part.lineNr);
494 ol.startEmbeddedDoc(part.colNr);
496 part.lineNr,
497 this,
498 nullptr,
499 part.content,
500 DocOptions());
501 ol.endEmbeddedDoc();
502 }
503 }
504}
505
507{
508 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
510 {
513 ol.writeRuler();
515
518 ol.writeAnchor(QCString(),"details");
520
521 ol.startGroupHeader("details");
522 ol.parseText(title);
523 ol.endGroupHeader();
524
525 ol.startTextBlock();
526 // repeat brief description
527 if (!briefDescription().isEmpty() && repeatBrief)
528 {
530 briefLine(),
531 this,
532 nullptr,
534 DocOptions());
535 }
536 if (!briefDescription().isEmpty() && repeatBrief &&
537 !documentation().isEmpty())
538 {
541 ol.writeString("\n\n");
543 }
544
545 // write documentation
546 if (!documentation().isEmpty())
547 {
548 ol.generateDoc(docFile(),
549 docLine(),
550 this,
551 nullptr,
553 DocOptions()
554 .setIndexWords(true));
555 }
556
557 writeSourceDef(ol);
559 ol.endTextBlock();
560 }
561}
562
564{
565 // write Author section (Man only)
568 ol.startGroupHeader();
569 ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
570 ol.endGroupHeader();
571 ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
573}
574
576{
577 if (isExported())
578 {
581 ol.startLabels();
582 ol.writeLabel("export",false);
583 ol.endLabels();
585 }
586}
587
589{
590 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
591 QCString pageTitle;
592 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
593 {
594 pageTitle = displayName();
595 }
596 else
597 {
598 pageTitle = theTranslator->trConceptReference(displayName());
599 }
600 startFile(ol,getOutputFileBase(),false,name(),pageTitle,HighlightedItem::ConceptVisible,!generateTreeView);
601
602 // ---- navigation part
603 if (!generateTreeView)
604 {
606 {
608 }
609 ol.endQuickIndices();
610 }
611
612 // ---- title part
613 startTitle(ol,getOutputFileBase(),this);
614 ol.parseText(pageTitle);
616 addGroupListToTitle(ol,this);
618
619 // ---- contents part
620
621 ol.startContents();
622
623 //---------------------------------------- start flexible part -------------------------------
624
625 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Concept))
626 {
627 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
628 switch (lde->kind())
629 {
630 case LayoutDocEntry::BriefDesc:
632 break;
633 case LayoutDocEntry::ConceptDefinition:
634 if (ls) writeDefinition(ol,ls->title(getLanguage()));
635 break;
636 case LayoutDocEntry::DetailedDesc:
637 if (ls) writeDetailedDescription(ol,ls->title(getLanguage()));
638 break;
639 case LayoutDocEntry::AuthorSection:
641 break;
642 case LayoutDocEntry::ClassIncludes:
644 break;
645 case LayoutDocEntry::MemberDeclStart:
646 case LayoutDocEntry::NamespaceClasses:
647 case LayoutDocEntry::NamespaceInterfaces:
648 case LayoutDocEntry::NamespaceStructs:
649 case LayoutDocEntry::NamespaceExceptions:
650 case LayoutDocEntry::NamespaceConcepts:
651 case LayoutDocEntry::NamespaceNestedNamespaces:
652 case LayoutDocEntry::NamespaceNestedConstantGroups:
653 case LayoutDocEntry::MemberGroups:
654 case LayoutDocEntry::MemberDecl:
655 case LayoutDocEntry::MemberDeclEnd:
656 case LayoutDocEntry::MemberDefStart:
657 case LayoutDocEntry::NamespaceInlineClasses:
658 case LayoutDocEntry::MemberDef:
659 case LayoutDocEntry::MemberDefEnd:
660 case LayoutDocEntry::ClassInheritanceGraph:
661 case LayoutDocEntry::ClassNestedClasses:
662 case LayoutDocEntry::ClassCollaborationGraph:
663 case LayoutDocEntry::ClassAllMembersLink:
664 case LayoutDocEntry::ClassUsedFiles:
665 case LayoutDocEntry::ClassInlineClasses:
666 case LayoutDocEntry::FileClasses:
667 case LayoutDocEntry::FileConcepts:
668 case LayoutDocEntry::FileInterfaces:
669 case LayoutDocEntry::FileStructs:
670 case LayoutDocEntry::FileExceptions:
671 case LayoutDocEntry::FileNamespaces:
672 case LayoutDocEntry::FileConstantGroups:
673 case LayoutDocEntry::FileIncludes:
674 case LayoutDocEntry::FileIncludeGraph:
675 case LayoutDocEntry::FileIncludedByGraph:
676 case LayoutDocEntry::FileInlineClasses:
677 case LayoutDocEntry::FileSourceLink:
678 case LayoutDocEntry::GroupClasses:
679 case LayoutDocEntry::GroupConcepts:
680 case LayoutDocEntry::GroupModules:
681 case LayoutDocEntry::GroupInlineClasses:
682 case LayoutDocEntry::GroupNamespaces:
683 case LayoutDocEntry::GroupDirs:
684 case LayoutDocEntry::GroupNestedGroups:
685 case LayoutDocEntry::GroupFiles:
686 case LayoutDocEntry::GroupGraph:
687 case LayoutDocEntry::GroupPageDocs:
688 case LayoutDocEntry::ModuleExports:
689 case LayoutDocEntry::ModuleClasses:
690 case LayoutDocEntry::ModuleConcepts:
691 case LayoutDocEntry::ModuleUsedFiles:
692 case LayoutDocEntry::DirSubDirs:
693 case LayoutDocEntry::DirFiles:
694 case LayoutDocEntry::DirGraph:
695 err("Internal inconsistency: member '{}' should not be part of "
696 "LayoutDocManager::Concept entry list\n",lde->entryToString());
697 break;
698 }
699 }
700
701 //---------------------------------------- end flexible part -------------------------------
702
703 ol.endContents();
704
705 endFileWithNavPath(ol,this);
706}
707
708void ConceptDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCString &header,bool localNames) const
709{
710 if (isLinkable())
711 {
712 if (!found) // first concept
713 {
714 ol.startMemberHeader("concepts");
715 if (!header.isEmpty())
716 {
717 ol.parseText(header);
718 }
719 else
720 {
721 theTranslator->trConcept(true,false);
722 }
723 ol.endMemberHeader();
724 ol.startMemberList();
725 found=TRUE;
726 }
728 QCString cname = displayName(!localNames);
729 QCString anc=anchor();
730 if (anc.isEmpty()) anc=cname; else anc.prepend(cname+"_");
732 ol.writeString("concept ");
734 if (isLinkable())
735 {
738 anchor(),
739 cname
740 );
741 }
742 else
743 {
744 ol.startBold();
745 ol.docify(cname);
746 ol.endBold();
747 }
749 // add the brief description if available
750 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
751 {
752 auto parser { createDocParser() };
753 auto ast { validatingParseDoc(*parser.get(),
754 briefFile(),
755 briefLine(),
756 this,
757 nullptr,
759 DocOptions()
760 .setSingleLine(true))
761 };
762 if (!ast->isEmpty())
763 {
765 ol.writeDoc(ast.get(),this,nullptr);
767 }
768 }
770 }
771}
772
779
780void ConceptDefImpl::addDocPart(const QCString &doc,int lineNr,int colNr)
781{
782 m_parts.emplace_back(PartType::Doc,doc,lineNr,colNr);
783}
784
785void ConceptDefImpl::addCodePart(const QCString &code,int lineNr,int colNr)
786{
787 m_parts.emplace_back(PartType::Code,code,lineNr,colNr);
788}
789
790//------------------------------------------------------------------------------------
791
793{
794 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
795 for (const auto &cd : *this)
796 {
797 bool isLink = cd->isLinkable();
798 if (isLink || !hideUndocClasses)
799 {
800 return true;
801 }
802 }
803 return false;
804}
805
806void ConceptLinkedRefMap::writeDeclaration(OutputList &ol,const QCString &header,bool localNames) const
807{
808 bool found=FALSE;
809 for (const auto &cd : *this)
810 {
811 cd->writeDeclarationLink(ol,found,header,localNames);
812 }
813 if (found) ol.endMemberList();
814}
815
816//------------------------------------------------------------------------------------
817
818// --- Cast functions
819//
821{
822 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
823 {
824 return static_cast<ConceptDef*>(d);
825 }
826 else
827 {
828 return nullptr;
829 }
830}
831
833{
834 Definition *d = toDefinition(md);
835 if (d && typeid(*d)==typeid(ConceptDefImpl))
836 {
837 return static_cast<ConceptDef*>(d);
838 }
839 else
840 {
841 return nullptr;
842 }
843}
844
846{
847 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
848 {
849 return static_cast<const ConceptDef*>(d);
850 }
851 else
852 {
853 return nullptr;
854 }
855}
856
858{
859 if (d && typeid(*d)==typeid(ConceptDefImpl))
860 {
861 return static_cast<ConceptDefMutable*>(d);
862 }
863 else
864 {
865 return nullptr;
866 }
867}
868
869// -- helpers
870
872{
873 if (n.isEmpty()) return nullptr;
874 return Doxygen::conceptLinkedMap->find(n);
875}
876
878{
879 ConceptDef *cd=nullptr;
880 while (d && d!=Doxygen::globalScope)
881 {
882 cd = getConcept(d->name()+"::"+name);
883 if (cd) return cd;
884 d = d->getOuterScope();
885 }
886 cd = getConcept(name);
887 return cd;
888}
889
890
This class represents an function or template argument list.
Definition arguments.h:65
Parts conceptParts() const override
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
std::vector< Part > Parts
Definition conceptdef.h:40
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 Parts conceptParts() 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
void addListReferences() 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
Parts conceptParts() const override
void writeDocumentation(OutputList &) override
void writeDetailedDescription(OutputList &ol, const QCString &title) const
void setInitializer(const QCString &init) override
bool isLinkableInProject() const override
void addDocPart(const QCString &doc, int lineNr, int colNr) 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 addRequirementReferences() override
void writeTagFile(TextStream &) override
bool isLinkable() const override
void setModuleDef(ModuleDef *mod) override
void addCodePart(const QCString &code, int lineNr, int colNr) 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:77
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
QCString getDefFileName() const override
void writeNavigationPath(OutputList &ol) const override
bool hasBriefDescription() const override
QCString docFile() const override
bool hasRequirementRefs() const override
QCString briefFile() const override
QCString qualifiedName() const override
void writeRequirementRefs(OutputList &ol) const override
const RefItemVector & xrefListItems() 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:97
static ParserManager * parserManager
Definition doxygen.h:130
static NamespaceDefMutable * globalScope
Definition doxygen.h:120
A model of a file symbol.
Definition filedef.h:99
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition layout.cpp:1437
An abstract interface of a namespace symbol.
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:315
void startEmbeddedDoc(int indent)
Definition outputlist.h:758
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md, int sectionLevel=-1)
Definition outputlist.h:383
void endTextBlock(bool paraBreak=FALSE)
Definition outputlist.h:672
void writeString(const QCString &text)
Definition outputlist.h:411
void startMemberDeclaration()
Definition outputlist.h:569
void disable(OutputType o)
void writeRuler()
Definition outputlist.h:521
const OutputCodeList & codeGenerators() const
Definition outputlist.h:358
void startGroupHeader(const QCString &id=QCString(), int extraLevels=0)
Definition outputlist.h:453
void enable(OutputType o)
void endContents()
Definition outputlist.h:620
void endMemberDescription()
Definition outputlist.h:567
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
Definition outputlist.h:439
void startMemberDescription(const QCString &anchor, const QCString &inheritId=QCString(), bool typ=false)
Definition outputlist.h:565
void docify(const QCString &s)
Definition outputlist.h:437
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void startParagraph(const QCString &classDef=QCString())
Definition outputlist.h:407
void startTextBlock(bool dense=FALSE)
Definition outputlist.h:670
void endParagraph()
Definition outputlist.h:409
void startMemberList()
Definition outputlist.h:481
void endTextLink()
Definition outputlist.h:444
void startBold()
Definition outputlist.h:561
void endMemberItem(OutputGenerator::MemberItemType type)
Definition outputlist.h:495
void endMemberList()
Definition outputlist.h:483
void writeSynopsis()
Definition outputlist.h:592
void startTypewriter()
Definition outputlist.h:449
void pushGeneratorState()
void insertMemberAlign(bool templ=FALSE)
Definition outputlist.h:517
void disableAllBut(OutputType o)
void popGeneratorState()
void endEmbeddedDoc()
Definition outputlist.h:760
void writeAnchor(const QCString &fileName, const QCString &name)
Definition outputlist.h:523
void endBold()
Definition outputlist.h:563
void endGroupHeader(int extraLevels=0)
Definition outputlist.h:455
void endLabels()
Definition outputlist.h:742
void endQuickIndices()
Definition outputlist.h:604
void writeLabel(const QCString &l, bool isLast)
Definition outputlist.h:740
void startLabels()
Definition outputlist.h:738
void startContents()
Definition outputlist.h:618
void endMemberDeclaration(const QCString &anchor, const QCString &inheritId)
Definition outputlist.h:571
void endMemberHeader()
Definition outputlist.h:471
void startMemberItem(const QCString &anchor, OutputGenerator::MemberItemType type, const QCString &id=QCString())
Definition outputlist.h:493
void endTypewriter()
Definition outputlist.h:451
void parseText(const QCString &textStr)
void startTextLink(const QCString &file, const QCString &anchor)
Definition outputlist.h:442
void startMemberHeader(const QCString &anchor, int typ=2)
Definition outputlist.h:469
This is an alternative implementation of QCString.
Definition qcstring.h:101
QCString & prepend(const char *s)
Definition qcstring.h:422
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)
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:216
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)
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, const DocOptions &options)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
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:394
void startFile(OutputList &ol, const QCString &name, bool isSource, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
Definition index.cpp:401
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
Definition index.cpp:448
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.
Options to configure the code parser.
Definition parserintf.h:78
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:1781
CodeSymbolType
Definition types.h:481
void addRefItem(const RefItemVector &sli, const QCString &key, const QCString &prefix, const QCString &name, const QCString &title, const QCString &args, const Definition *scope)
Definition util.cpp:4805
void addGroupListToTitle(OutputList &ol, const Definition *d)
Definition util.cpp:4892
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:3485
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3893
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4902
A bunch of utility functions.