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
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(); }
142 void writeDeclarationLink(OutputList &ol,bool &found,
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(*parser.get(),
330 briefFile(),
331 briefLine(),
332 this,
333 nullptr,
335 DocOptions()
336 .setIndexWords(true)
337 .setSingleLine(true))
338 };
339 if (!ast->isEmpty())
340 {
341 ol.startParagraph();
344 ol.writeString(" - ");
346 ol.writeDoc(ast.get(),this,nullptr);
349 ol.writeString(" \n");
351
353 {
355 ol.startTextLink(getOutputFileBase(),"details");
356 ol.parseText(theTranslator->trMore());
357 ol.endTextLink();
358 }
360 ol.endParagraph();
361 }
362 }
363 ol.writeSynopsis();
364}
365
367{
368 if (m_incInfo)
369 {
370 QCString nm=m_incInfo->includeName.isEmpty() ?
371 (m_incInfo->fileDef ?
372 m_incInfo->fileDef->docName() : QCString()
373 ) :
374 m_incInfo->includeName;
375 if (!nm.isEmpty())
376 {
377 ol.startParagraph();
378 ol.startTypewriter();
379 ol.docify(::includeStatement(SrcLangExt::Cpp,m_incInfo->kind));
380 ol.docify(::includeOpen(SrcLangExt::Cpp,m_incInfo->kind));
383 ol.docify(nm);
386 if (m_incInfo->fileDef)
387 {
388 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
389 }
390 else
391 {
392 ol.docify(nm);
393 }
395 ol.docify(::includeClose(SrcLangExt::Cpp,m_incInfo->kind));
396 ol.endTypewriter();
397 ol.endParagraph();
398 }
399 }
400}
401
403{
404 TextStream t;
405 t << "template<";
406 bool first=true;
407 for (const auto &a : al)
408 {
409 if (!first) t << ", ";
410 t << a.type;
411 if (!a.name.isEmpty())
412 {
413 t << " " << a.name;
414 }
415 if (a.defval.length()!=0)
416 {
417 t << " " << a.defval;
418 }
419 first=false;
420 }
421 t << ">";
422 return t.str();
423}
424
426{
427 m_initializer = templateSpec(m_tArgList)+"\nconcept "+name()+" = "+init;
428}
429
434
436{
437 ol.startGroupHeader("conceptdef");
438 ol.parseText(title);
439 ol.endGroupHeader();
440
441 auto intf = Doxygen::parserManager->getCodeParser(".cpp");
442 intf->resetCodeParserState();
443 auto &codeOL = ol.codeGenerators();
444 codeOL.startCodeFragment("DoxyCode");
445 QCString scopeName;
447 TextStream conceptDef;
448 conceptDef << m_initializer;
449 intf->parseCode(codeOL,scopeName,conceptDef.str(),SrcLangExt::Cpp,Config_getBool(STRIP_CODE_COMMENTS),false,QCString(),
450 m_fileDef, -1,-1,true,nullptr,false,this);
451 codeOL.endCodeFragment("DoxyCode");
452}
453
455{
456 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
458 {
461 ol.writeRuler();
463
466 ol.writeAnchor(QCString(),"details");
468
469 ol.startGroupHeader("details");
470 ol.parseText(title);
471 ol.endGroupHeader();
472
473 ol.startTextBlock();
474 // repeat brief description
475 if (!briefDescription().isEmpty() && repeatBrief)
476 {
478 briefLine(),
479 this,
480 nullptr,
482 DocOptions());
483 }
484 if (!briefDescription().isEmpty() && repeatBrief &&
485 !documentation().isEmpty())
486 {
489 ol.writeString("\n\n");
491 }
492
493 // write documentation
494 if (!documentation().isEmpty())
495 {
496 ol.generateDoc(docFile(),
497 docLine(),
498 this,
499 nullptr,
501 DocOptions()
502 .setIndexWords(true));
503 }
504
505 writeSourceDef(ol);
506 ol.endTextBlock();
507 }
508}
509
511{
512 // write Author section (Man only)
515 ol.startGroupHeader();
516 ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
517 ol.endGroupHeader();
518 ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
520}
521
523{
524 if (isExported())
525 {
528 ol.startLabels();
529 ol.writeLabel("export",false);
530 ol.endLabels();
532 }
533}
534
536{
537 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
538 QCString pageTitle;
539 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
540 {
541 pageTitle = displayName();
542 }
543 else
544 {
545 pageTitle = theTranslator->trConceptReference(displayName());
546 }
547 startFile(ol,getOutputFileBase(),false,name(),pageTitle,HighlightedItem::ConceptVisible,!generateTreeView);
548
549 // ---- navigation part
550 if (!generateTreeView)
551 {
553 {
555 }
556 ol.endQuickIndices();
557 }
558
559 // ---- title part
560 startTitle(ol,getOutputFileBase(),this);
561 ol.parseText(pageTitle);
563 addGroupListToTitle(ol,this);
565
566 // ---- contents part
567
568 ol.startContents();
569
570 //---------------------------------------- start flexible part -------------------------------
571
572 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Concept))
573 {
574 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
575 switch (lde->kind())
576 {
577 case LayoutDocEntry::BriefDesc:
579 break;
580 case LayoutDocEntry::ConceptDefinition:
581 if (ls) writeDefinition(ol,ls->title(getLanguage()));
582 break;
583 case LayoutDocEntry::DetailedDesc:
584 if (ls) writeDetailedDescription(ol,ls->title(getLanguage()));
585 break;
586 case LayoutDocEntry::AuthorSection:
588 break;
589 case LayoutDocEntry::ClassIncludes:
591 break;
592 case LayoutDocEntry::MemberDeclStart:
593 case LayoutDocEntry::NamespaceClasses:
594 case LayoutDocEntry::NamespaceInterfaces:
595 case LayoutDocEntry::NamespaceStructs:
596 case LayoutDocEntry::NamespaceExceptions:
597 case LayoutDocEntry::NamespaceConcepts:
598 case LayoutDocEntry::NamespaceNestedNamespaces:
599 case LayoutDocEntry::NamespaceNestedConstantGroups:
600 case LayoutDocEntry::MemberGroups:
601 case LayoutDocEntry::MemberDecl:
602 case LayoutDocEntry::MemberDeclEnd:
603 case LayoutDocEntry::MemberDefStart:
604 case LayoutDocEntry::NamespaceInlineClasses:
605 case LayoutDocEntry::MemberDef:
606 case LayoutDocEntry::MemberDefEnd:
607 case LayoutDocEntry::ClassInheritanceGraph:
608 case LayoutDocEntry::ClassNestedClasses:
609 case LayoutDocEntry::ClassCollaborationGraph:
610 case LayoutDocEntry::ClassAllMembersLink:
611 case LayoutDocEntry::ClassUsedFiles:
612 case LayoutDocEntry::ClassInlineClasses:
613 case LayoutDocEntry::FileClasses:
614 case LayoutDocEntry::FileConcepts:
615 case LayoutDocEntry::FileInterfaces:
616 case LayoutDocEntry::FileStructs:
617 case LayoutDocEntry::FileExceptions:
618 case LayoutDocEntry::FileNamespaces:
619 case LayoutDocEntry::FileConstantGroups:
620 case LayoutDocEntry::FileIncludes:
621 case LayoutDocEntry::FileIncludeGraph:
622 case LayoutDocEntry::FileIncludedByGraph:
623 case LayoutDocEntry::FileInlineClasses:
624 case LayoutDocEntry::FileSourceLink:
625 case LayoutDocEntry::GroupClasses:
626 case LayoutDocEntry::GroupConcepts:
627 case LayoutDocEntry::GroupModules:
628 case LayoutDocEntry::GroupInlineClasses:
629 case LayoutDocEntry::GroupNamespaces:
630 case LayoutDocEntry::GroupDirs:
631 case LayoutDocEntry::GroupNestedGroups:
632 case LayoutDocEntry::GroupFiles:
633 case LayoutDocEntry::GroupGraph:
634 case LayoutDocEntry::GroupPageDocs:
635 case LayoutDocEntry::ModuleExports:
636 case LayoutDocEntry::ModuleClasses:
637 case LayoutDocEntry::ModuleConcepts:
638 case LayoutDocEntry::ModuleUsedFiles:
639 case LayoutDocEntry::DirSubDirs:
640 case LayoutDocEntry::DirFiles:
641 case LayoutDocEntry::DirGraph:
642 err("Internal inconsistency: member '{}' should not be part of "
643 "LayoutDocManager::Concept entry list\n",lde->entryToString());
644 break;
645 }
646 }
647
648 //---------------------------------------- end flexible part -------------------------------
649
650 ol.endContents();
651
652 endFileWithNavPath(ol,this);
653}
654
655void ConceptDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCString &header,bool localNames) const
656{
657 if (isLinkable())
658 {
659 if (!found) // first concept
660 {
661 ol.startMemberHeader("concepts");
662 if (!header.isEmpty())
663 {
664 ol.parseText(header);
665 }
666 else
667 {
668 theTranslator->trConcept(true,false);
669 }
670 ol.endMemberHeader();
671 ol.startMemberList();
672 found=TRUE;
673 }
675 QCString cname = displayName(!localNames);
676 QCString anc=anchor();
677 if (anc.isEmpty()) anc=cname; else anc.prepend(cname+"_");
679 ol.writeString("concept ");
681 if (isLinkable())
682 {
685 anchor(),
686 cname
687 );
688 }
689 else
690 {
691 ol.startBold();
692 ol.docify(cname);
693 ol.endBold();
694 }
696 // add the brief description if available
697 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
698 {
699 auto parser { createDocParser() };
700 auto ast { validatingParseDoc(*parser.get(),
701 briefFile(),
702 briefLine(),
703 this,
704 nullptr,
706 DocOptions()
707 .setSingleLine(true))
708 };
709 if (!ast->isEmpty())
710 {
712 ol.writeDoc(ast.get(),this,nullptr);
714 }
715 }
717 }
718}
719
726
727//------------------------------------------------------------------------------------
728
730{
731 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
732 for (const auto &cd : *this)
733 {
734 bool isLink = cd->isLinkable();
735 if (isLink || !hideUndocClasses)
736 {
737 return true;
738 }
739 }
740 return false;
741}
742
743void ConceptLinkedRefMap::writeDeclaration(OutputList &ol,const QCString &header,bool localNames) const
744{
745 bool found=FALSE;
746 for (const auto &cd : *this)
747 {
748 cd->writeDeclarationLink(ol,found,header,localNames);
749 }
750 if (found) ol.endMemberList();
751}
752
753//------------------------------------------------------------------------------------
754
755// --- Cast functions
756//
758{
759 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
760 {
761 return static_cast<ConceptDef*>(d);
762 }
763 else
764 {
765 return nullptr;
766 }
767}
768
770{
771 Definition *d = toDefinition(md);
772 if (d && typeid(*d)==typeid(ConceptDefImpl))
773 {
774 return static_cast<ConceptDef*>(d);
775 }
776 else
777 {
778 return nullptr;
779 }
780}
781
783{
784 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
785 {
786 return static_cast<const ConceptDef*>(d);
787 }
788 else
789 {
790 return nullptr;
791 }
792}
793
795{
796 if (d && typeid(*d)==typeid(ConceptDefImpl))
797 {
798 return static_cast<ConceptDefMutable*>(d);
799 }
800 else
801 {
802 return nullptr;
803 }
804}
805
806// -- helpers
807
809{
810 if (n.isEmpty()) return nullptr;
811 return Doxygen::conceptLinkedMap->find(n);
812}
813
815{
816 ConceptDef *cd=nullptr;
817 while (d && d!=Doxygen::globalScope)
818 {
819 cd = getConcept(d->name()+"::"+name);
820 if (cd) return cd;
821 d = d->getOuterScope();
822 }
823 cd = getConcept(name);
824 return cd;
825}
826
827
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:279
Class representing a list of output generators that are written to in parallel.
Definition outputlist.h:315
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 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
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)
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.
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:4813
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:3425
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3833
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4823
A bunch of utility functions.