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
75 //---------- Helpers
77 void writeAuthorSection(OutputList &ol) const;
78 void writeIncludeFiles(OutputList &ol) const;
80 void writeDefinition(OutputList &ol,const QCString &title) const;
81 void addConceptAttributes(OutputList &ol) const;
82
83 private:
85 std::unique_ptr<IncludeInfo> m_incInfo;
87 FileDef *m_fileDef = nullptr;
91 int m_groupId = -1;
93};
94
95std::unique_ptr<ConceptDef> createConceptDef(
96 const QCString &fileName,int startLine,int startColumn,
97 const QCString &name, const QCString &tagRef,const QCString &tagFile)
98{
99 return std::make_unique<ConceptDefImpl>(fileName,startLine,startColumn,name,tagRef,tagFile);
100}
101
102//------------------------------------------------------------------------------------
103
105{
106 public:
107 ConceptDefAliasImpl(const Definition *newScope,const ConceptDef *cd)
108 : DefinitionAliasMixin(newScope,cd) { init(); }
109 ~ConceptDefAliasImpl() override { deinit(); }
111
112 const ConceptDef *getCdAlias() const { return toConceptDef(getAlias()); }
113
114 DefType definitionType() const override { return TypeConcept; }
116 { return getCdAlias()->codeSymbolType(); }
118 { return getCdAlias()->getOutputFileBase(); }
119 QCString getReference() const override
120 { return getCdAlias()->getReference(); }
121 bool isReference() const override
122 { return getCdAlias()->isReference(); }
123 bool hasDetailedDescription() const override
124 { return getCdAlias()->hasDetailedDescription(); }
125 QCString displayName(bool includeScope=true) const override
126 { return getCdAlias()->displayName(includeScope); }
127 const IncludeInfo *includeInfo() const override
128 { return getCdAlias()->includeInfo(); }
131 QCString anchor() const override
132 { return getCdAlias()->anchor(); }
133 bool isLinkableInProject() const override
134 { return getCdAlias()->isLinkableInProject(); }
135 bool isLinkable() const override
136 { return getCdAlias()->isLinkable(); }
137 QCString initializer() const override
138 { return getCdAlias()->initializer(); }
139 const NamespaceDef *getNamespaceDef() const override
140 { return getCdAlias()->getNamespaceDef(); }
141 const FileDef *getFileDef() const override
142 { return getCdAlias()->getFileDef(); }
143 const ModuleDef *getModuleDef() const override
144 { return getCdAlias()->getModuleDef(); }
145 QCString title() const override
146 { return getCdAlias()->title(); }
147 void writeDeclarationLink(OutputList &ol,bool &found,
148 const QCString &header,bool localNames) const override
149 { getCdAlias()->writeDeclarationLink(ol,found,header,localNames); }
150 int groupId() const override
151 { return getCdAlias()->groupId(); }
152 Parts conceptParts() const override
153 { return getCdAlias()->conceptParts(); }
154};
155
156std::unique_ptr<ConceptDef> createConceptDefAlias(const Definition *newScope,const ConceptDef *cd)
157{
158 return std::make_unique<ConceptDefAliasImpl>(newScope,cd);
159}
160
161//------------------------------------------------------------------------------------
162
163ConceptDefImpl::ConceptDefImpl(const QCString &fileName,int startLine,int startColumn,
164 const QCString &name,const QCString &tagRef,const QCString &tagFile) : DefinitionMixin(fileName,startLine,startColumn,name)
165{
166 if (!tagFile.isEmpty())
167 {
168 if (!tagRef.isEmpty())
169 {
170 m_fileName = stripExtension(tagFile);
171 }
172 else
173 {
174 m_fileName = convertNameToFile(stripExtension(tagFile));
175 }
176 }
177 else
178 {
179 m_fileName = convertNameToFile(QCString("concept")+name);
180 }
181 setReference(tagRef);
182}
183
187
192
197
199{
200 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
201 bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
202 return ((!briefDescription().isEmpty() && repeatBrief) ||
203 !documentation().isEmpty() ||
204 (sourceBrowser && getStartBodyLine()!=-1 && getBodyDef()));
205}
206
208{
209 return "";
210}
211
212QCString ConceptDefImpl::displayName(bool includeScope) const
213{
214 return includeScope ? name() : localName();
215}
216
218{
219 return m_incInfo.get();
220}
221
226
228{
229 bool hideUndoc = Config_getBool(HIDE_UNDOC_CLASSES);
230 return (hasDocumentation() || !hideUndoc) && /* documented */
231 !isHidden() && /* not hidden */
232 !isReference(); /* not an external reference */
233}
234
236{
237 return isLinkableInProject() || isReference();
238}
239
240void ConceptDefImpl::setIncludeFile(FileDef *fd,const QCString &incName,bool local,bool force)
241{
242 if (!m_incInfo) m_incInfo = std::make_unique<IncludeInfo>();
243 if ((!incName.isEmpty() && m_incInfo->includeName.isEmpty()) ||
244 (fd!=nullptr && m_incInfo->fileDef==nullptr)
245 )
246 {
247 m_incInfo->fileDef = fd;
248 m_incInfo->includeName = incName;
250 }
251 if (force && !incName.isEmpty())
252 {
253 m_incInfo->includeName = incName;
255 }
256}
257
262
267
269{
270 return m_nspace;
271}
272
274{
275 m_fileDef=fd;
276}
277
282
284{
285 return m_fileDef;
286}
287
289{
290 return m_moduleDef;
291}
292
294{
295 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
296 {
297 return displayName();
298 }
299 else
300 {
301 return theTranslator->trConceptReference(displayName());
302 }
303}
304
306{
307 return m_groupId;
308}
309
311{
312 m_groupId = id;
313}
314
316{
317 const RefItemVector &xrefItems = xrefListItems();
318 addRefItem(xrefItems,
320 theTranslator->trConcept(true,true),
322 displayName(),
323 QCString(),
324 this
325 );
326}
327
329{
330 tagFile << " <compound kind=\"concept\">\n";
331 tagFile << " <name>" << convertToXML(name()) << "</name>\n";
334 tagFile << " <filename>" << convertToXML(fn) << "</filename>\n";
335 QCString idStr = id();
336 if (!idStr.isEmpty())
337 {
338 tagFile << " <clangid>" << convertToXML(idStr) << "</clangid>\n";
339 }
341 tagFile << " </compound>\n";
342}
343
345{
347 {
348 auto parser { createDocParser() };
349 auto ast { validatingParseDoc(*parser.get(),
350 briefFile(),
351 briefLine(),
352 this,
353 nullptr,
355 DocOptions()
356 .setIndexWords(true)
357 .setSingleLine(true))
358 };
359 if (!ast->isEmpty())
360 {
361 ol.startParagraph();
364 ol.writeString(" - ");
366 ol.writeDoc(ast.get(),this,nullptr);
369 ol.writeString(" \n");
371
373 {
375 ol.startTextLink(getOutputFileBase(),"details");
376 ol.parseText(theTranslator->trMore());
377 ol.endTextLink();
378 }
380 ol.endParagraph();
381 }
382 }
383 ol.writeSynopsis();
384}
385
387{
388 if (m_incInfo)
389 {
390 QCString nm=m_incInfo->includeName.isEmpty() ?
391 (m_incInfo->fileDef ?
392 m_incInfo->fileDef->docName() : QCString()
393 ) :
394 m_incInfo->includeName;
395 if (!nm.isEmpty())
396 {
397 ol.startParagraph();
398 ol.startTypewriter();
399 ol.docify(::includeStatement(SrcLangExt::Cpp,m_incInfo->kind));
400 ol.docify(::includeOpen(SrcLangExt::Cpp,m_incInfo->kind));
403 ol.docify(nm);
406 if (m_incInfo->fileDef)
407 {
408 ol.writeObjectLink(QCString(),m_incInfo->fileDef->includeName(),QCString(),nm);
409 }
410 else
411 {
412 ol.docify(nm);
413 }
415 ol.docify(::includeClose(SrcLangExt::Cpp,m_incInfo->kind));
416 ol.endTypewriter();
417 ol.endParagraph();
418 }
419 }
420}
421
423{
424 TextStream t;
425 t << "template<";
426 bool first=true;
427 for (const auto &a : al)
428 {
429 if (!first) t << ", ";
430 t << a.type;
431 if (!a.name.isEmpty())
432 {
433 t << " " << a.name;
434 }
435 if (a.defval.length()!=0)
436 {
437 t << " " << a.defval;
438 }
439 first=false;
440 }
441 t << ">";
442 return t.str();
443}
444
446{
447 m_initializer = templateSpec(m_tArgList)+"\nconcept "+name()+" = "+init;
448}
449
454
456{
457 ol.startGroupHeader("conceptdef");
458 ol.parseText(title);
459 ol.endGroupHeader();
460
461 auto intf = Doxygen::parserManager->getCodeParser(".cpp");
462 intf->resetCodeParserState();
463 auto &codeOL = ol.codeGenerators();
464 for (const auto &part : m_parts)
465 {
466 if (part.type==PartType::Code)
467 {
468 codeOL.startCodeFragment("DoxyCode");
469 QCString scopeName;
471 //printf("concept=[%s]\n",qPrint(m_initializer));
472 intf->parseCode(codeOL,
473 scopeName,
474 part.content,
475 SrcLangExt::Cpp,
476 false, // stripCodeComments
479 .setInlineFragment(true)
480 .setShowLineNumbers(false)
481 .setSearchCtx(this)
482 );
483 codeOL.endCodeFragment("DoxyCode");
484 }
485 else if (part.type==PartType::Doc)
486 {
487 //printf("rendering part [[%s]] at %d\n",qPrint(part.content),part.lineNr);
488 ol.startEmbeddedDoc(part.colNr);
490 part.lineNr,
491 this,
492 nullptr,
493 part.content,
494 DocOptions());
495 ol.endEmbeddedDoc();
496 }
497 }
498}
499
501{
502 bool repeatBrief = Config_getBool(REPEAT_BRIEF);
504 {
507 ol.writeRuler();
509
512 ol.writeAnchor(QCString(),"details");
514
515 ol.startGroupHeader("details");
516 ol.parseText(title);
517 ol.endGroupHeader();
518
519 ol.startTextBlock();
520 // repeat brief description
521 if (!briefDescription().isEmpty() && repeatBrief)
522 {
524 briefLine(),
525 this,
526 nullptr,
528 DocOptions());
529 }
530 if (!briefDescription().isEmpty() && repeatBrief &&
531 !documentation().isEmpty())
532 {
535 ol.writeString("\n\n");
537 }
538
539 // write documentation
540 if (!documentation().isEmpty())
541 {
542 ol.generateDoc(docFile(),
543 docLine(),
544 this,
545 nullptr,
547 DocOptions()
548 .setIndexWords(true));
549 }
550
551 writeSourceDef(ol);
552 ol.endTextBlock();
553 }
554}
555
557{
558 // write Author section (Man only)
561 ol.startGroupHeader();
562 ol.parseText(theTranslator->trAuthor(TRUE,TRUE));
563 ol.endGroupHeader();
564 ol.parseText(theTranslator->trGeneratedAutomatically(Config_getString(PROJECT_NAME)));
566}
567
569{
570 if (isExported())
571 {
574 ol.startLabels();
575 ol.writeLabel("export",false);
576 ol.endLabels();
578 }
579}
580
582{
583 bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
584 QCString pageTitle;
585 if (Config_getBool(HIDE_COMPOUND_REFERENCE))
586 {
587 pageTitle = displayName();
588 }
589 else
590 {
591 pageTitle = theTranslator->trConceptReference(displayName());
592 }
593 startFile(ol,getOutputFileBase(),false,name(),pageTitle,HighlightedItem::ConceptVisible,!generateTreeView);
594
595 // ---- navigation part
596 if (!generateTreeView)
597 {
599 {
601 }
602 ol.endQuickIndices();
603 }
604
605 // ---- title part
606 startTitle(ol,getOutputFileBase(),this);
607 ol.parseText(pageTitle);
609 addGroupListToTitle(ol,this);
611
612 // ---- contents part
613
614 ol.startContents();
615
616 //---------------------------------------- start flexible part -------------------------------
617
618 for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Concept))
619 {
620 const LayoutDocEntrySection *ls = dynamic_cast<const LayoutDocEntrySection*>(lde.get());
621 switch (lde->kind())
622 {
623 case LayoutDocEntry::BriefDesc:
625 break;
626 case LayoutDocEntry::ConceptDefinition:
627 if (ls) writeDefinition(ol,ls->title(getLanguage()));
628 break;
629 case LayoutDocEntry::DetailedDesc:
630 if (ls) writeDetailedDescription(ol,ls->title(getLanguage()));
631 break;
632 case LayoutDocEntry::AuthorSection:
634 break;
635 case LayoutDocEntry::ClassIncludes:
637 break;
638 case LayoutDocEntry::MemberDeclStart:
639 case LayoutDocEntry::NamespaceClasses:
640 case LayoutDocEntry::NamespaceInterfaces:
641 case LayoutDocEntry::NamespaceStructs:
642 case LayoutDocEntry::NamespaceExceptions:
643 case LayoutDocEntry::NamespaceConcepts:
644 case LayoutDocEntry::NamespaceNestedNamespaces:
645 case LayoutDocEntry::NamespaceNestedConstantGroups:
646 case LayoutDocEntry::MemberGroups:
647 case LayoutDocEntry::MemberDecl:
648 case LayoutDocEntry::MemberDeclEnd:
649 case LayoutDocEntry::MemberDefStart:
650 case LayoutDocEntry::NamespaceInlineClasses:
651 case LayoutDocEntry::MemberDef:
652 case LayoutDocEntry::MemberDefEnd:
653 case LayoutDocEntry::ClassInheritanceGraph:
654 case LayoutDocEntry::ClassNestedClasses:
655 case LayoutDocEntry::ClassCollaborationGraph:
656 case LayoutDocEntry::ClassAllMembersLink:
657 case LayoutDocEntry::ClassUsedFiles:
658 case LayoutDocEntry::ClassInlineClasses:
659 case LayoutDocEntry::FileClasses:
660 case LayoutDocEntry::FileConcepts:
661 case LayoutDocEntry::FileInterfaces:
662 case LayoutDocEntry::FileStructs:
663 case LayoutDocEntry::FileExceptions:
664 case LayoutDocEntry::FileNamespaces:
665 case LayoutDocEntry::FileConstantGroups:
666 case LayoutDocEntry::FileIncludes:
667 case LayoutDocEntry::FileIncludeGraph:
668 case LayoutDocEntry::FileIncludedByGraph:
669 case LayoutDocEntry::FileInlineClasses:
670 case LayoutDocEntry::FileSourceLink:
671 case LayoutDocEntry::GroupClasses:
672 case LayoutDocEntry::GroupConcepts:
673 case LayoutDocEntry::GroupModules:
674 case LayoutDocEntry::GroupInlineClasses:
675 case LayoutDocEntry::GroupNamespaces:
676 case LayoutDocEntry::GroupDirs:
677 case LayoutDocEntry::GroupNestedGroups:
678 case LayoutDocEntry::GroupFiles:
679 case LayoutDocEntry::GroupGraph:
680 case LayoutDocEntry::GroupPageDocs:
681 case LayoutDocEntry::ModuleExports:
682 case LayoutDocEntry::ModuleClasses:
683 case LayoutDocEntry::ModuleConcepts:
684 case LayoutDocEntry::ModuleUsedFiles:
685 case LayoutDocEntry::DirSubDirs:
686 case LayoutDocEntry::DirFiles:
687 case LayoutDocEntry::DirGraph:
688 err("Internal inconsistency: member '{}' should not be part of "
689 "LayoutDocManager::Concept entry list\n",lde->entryToString());
690 break;
691 }
692 }
693
694 //---------------------------------------- end flexible part -------------------------------
695
696 ol.endContents();
697
698 endFileWithNavPath(ol,this);
699}
700
701void ConceptDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCString &header,bool localNames) const
702{
703 if (isLinkable())
704 {
705 if (!found) // first concept
706 {
707 ol.startMemberHeader("concepts");
708 if (!header.isEmpty())
709 {
710 ol.parseText(header);
711 }
712 else
713 {
714 theTranslator->trConcept(true,false);
715 }
716 ol.endMemberHeader();
717 ol.startMemberList();
718 found=TRUE;
719 }
721 QCString cname = displayName(!localNames);
722 QCString anc=anchor();
723 if (anc.isEmpty()) anc=cname; else anc.prepend(cname+"_");
725 ol.writeString("concept ");
727 if (isLinkable())
728 {
731 anchor(),
732 cname
733 );
734 }
735 else
736 {
737 ol.startBold();
738 ol.docify(cname);
739 ol.endBold();
740 }
742 // add the brief description if available
743 if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
744 {
745 auto parser { createDocParser() };
746 auto ast { validatingParseDoc(*parser.get(),
747 briefFile(),
748 briefLine(),
749 this,
750 nullptr,
752 DocOptions()
753 .setSingleLine(true))
754 };
755 if (!ast->isEmpty())
756 {
758 ol.writeDoc(ast.get(),this,nullptr);
760 }
761 }
763 }
764}
765
772
773void ConceptDefImpl::addDocPart(const QCString &doc,int lineNr,int colNr)
774{
775 m_parts.emplace_back(PartType::Doc,doc,lineNr,colNr);
776}
777
778void ConceptDefImpl::addCodePart(const QCString &code,int lineNr,int colNr)
779{
780 m_parts.emplace_back(PartType::Code,code,lineNr,colNr);
781}
782
783//------------------------------------------------------------------------------------
784
786{
787 bool hideUndocClasses = Config_getBool(HIDE_UNDOC_CLASSES);
788 for (const auto &cd : *this)
789 {
790 bool isLink = cd->isLinkable();
791 if (isLink || !hideUndocClasses)
792 {
793 return true;
794 }
795 }
796 return false;
797}
798
799void ConceptLinkedRefMap::writeDeclaration(OutputList &ol,const QCString &header,bool localNames) const
800{
801 bool found=FALSE;
802 for (const auto &cd : *this)
803 {
804 cd->writeDeclarationLink(ol,found,header,localNames);
805 }
806 if (found) ol.endMemberList();
807}
808
809//------------------------------------------------------------------------------------
810
811// --- Cast functions
812//
814{
815 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
816 {
817 return static_cast<ConceptDef*>(d);
818 }
819 else
820 {
821 return nullptr;
822 }
823}
824
826{
827 Definition *d = toDefinition(md);
828 if (d && typeid(*d)==typeid(ConceptDefImpl))
829 {
830 return static_cast<ConceptDef*>(d);
831 }
832 else
833 {
834 return nullptr;
835 }
836}
837
839{
840 if (d && (typeid(*d)==typeid(ConceptDefImpl) || typeid(*d)==typeid(ConceptDefAliasImpl)))
841 {
842 return static_cast<const ConceptDef*>(d);
843 }
844 else
845 {
846 return nullptr;
847 }
848}
849
851{
852 if (d && typeid(*d)==typeid(ConceptDefImpl))
853 {
854 return static_cast<ConceptDefMutable*>(d);
855 }
856 else
857 {
858 return nullptr;
859 }
860}
861
862// -- helpers
863
865{
866 if (n.isEmpty()) return nullptr;
867 return Doxygen::conceptLinkedMap->find(n);
868}
869
871{
872 ConceptDef *cd=nullptr;
873 while (d && d!=Doxygen::globalScope)
874 {
875 cd = getConcept(d->name()+"::"+name);
876 if (cd) return cd;
877 d = d->getOuterScope();
878 }
879 cd = getConcept(name);
880 return cd;
881}
882
883
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 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: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
QCString getDefFileName() const override
void writeNavigationPath(OutputList &ol) const override
bool hasBriefDescription() const override
QCString docFile() const override
QCString briefFile() const override
QCString qualifiedName() 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
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
std::vector< RefItem * > RefItemVector
Definition reflist.h:133
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:4778
void addGroupListToTitle(OutputList &ol, const Definition *d)
Definition util.cpp:4865
QCString convertNameToFile(const QCString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:3458
QCString convertToXML(const QCString &s, bool keepEntities)
Definition util.cpp:3866
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4875
A bunch of utility functions.