74 const FileDef *dstFd,
bool srcDirect,
bool dstDirect)
override;
197 MD5Buffer(anchor.
data(),
static_cast<unsigned int>(anchor.
length()),md5_sig);
198 MD5SigToString(md5_sig,sigStr);
283 .setIndexWords(
true));
303 .setIndexWords(
true))
312 ol.
writeDoc(ast.get(),
this,
nullptr);
348 msg(
"Generating dependency graph for directory {}\n",
displayName());
366 if (dd->hasDocumentation() || !dd->getFiles().empty())
382 if (dd->hasDocumentation() || !dd->getFiles().empty())
386 if (anc.
empty()) anc=dd->shortName();
else anc.
prepend(dd->shortName()+
"_");
391 ol.
writeString(
"<span class=\"iconfolder\"><div class=\"folder-icon\"></div></span>");
400 if (!dd->briefDescription().empty() &&
Config_getBool(BRIEF_MEMBER_DESC))
407 dd->briefDescription(),
410 .setLinkFromIndex(
true));
427 bool genSourceFile=
false;
432 else if (genSourceFile)
454 if (anc.
empty()) anc=fd->displayName();
else anc.
prepend(fd->displayName()+
"_");
459 bool genSrc = fd->generateSourceFile();
464 ol.
writeString(
"<span class=\"icondoc\"><div class=\"doc-icon\"></div></span>");
475 if (fd->isLinkable())
482 ol.
docify(fd->displayName());
486 if (!fd->briefDescription().empty() &&
Config_getBool(BRIEF_MEMBER_DESC))
493 fd->briefDescription(),
496 .setLinkFromIndex(
true));
536 tagFile <<
" <compound kind=\"dir\">\n";
541 tagFile <<
" <filename>" << fn <<
"</filename>\n";
546 case LayoutDocEntry::DirSubDirs:
552 tagFile <<
" <dir>" <<
convertToXML(dd->displayName()) <<
"</dir>\n";
557 case LayoutDocEntry::DirFiles:
561 tagFile <<
" <file>" <<
convertToXML(fd->name()) <<
"</file>\n";
570 tagFile <<
" </compound>\n";
590 if (!generateTreeView)
615 case LayoutDocEntry::BriefDesc:
618 case LayoutDocEntry::DirGraph:
621 case LayoutDocEntry::MemberDeclStart:
624 case LayoutDocEntry::DirSubDirs:
627 case LayoutDocEntry::DirFiles:
630 case LayoutDocEntry::MemberDeclEnd:
633 case LayoutDocEntry::DetailedDesc:
642 case LayoutDocEntry::ClassIncludes:
643 case LayoutDocEntry::ClassInlineClasses:
644 case LayoutDocEntry::ClassInheritanceGraph:
645 case LayoutDocEntry::ClassNestedClasses:
646 case LayoutDocEntry::ClassCollaborationGraph:
647 case LayoutDocEntry::ClassAllMembersLink:
648 case LayoutDocEntry::ClassUsedFiles:
649 case LayoutDocEntry::NamespaceNestedNamespaces:
650 case LayoutDocEntry::NamespaceNestedConstantGroups:
651 case LayoutDocEntry::NamespaceClasses:
652 case LayoutDocEntry::NamespaceConcepts:
653 case LayoutDocEntry::NamespaceInterfaces:
654 case LayoutDocEntry::NamespaceStructs:
655 case LayoutDocEntry::NamespaceExceptions:
656 case LayoutDocEntry::NamespaceInlineClasses:
657 case LayoutDocEntry::ConceptDefinition:
658 case LayoutDocEntry::FileClasses:
659 case LayoutDocEntry::FileConcepts:
660 case LayoutDocEntry::FileInterfaces:
661 case LayoutDocEntry::FileStructs:
662 case LayoutDocEntry::FileExceptions:
663 case LayoutDocEntry::FileNamespaces:
664 case LayoutDocEntry::FileConstantGroups:
665 case LayoutDocEntry::FileIncludes:
666 case LayoutDocEntry::FileIncludeGraph:
667 case LayoutDocEntry::FileIncludedByGraph:
668 case LayoutDocEntry::FileSourceLink:
669 case LayoutDocEntry::FileInlineClasses:
670 case LayoutDocEntry::GroupClasses:
671 case LayoutDocEntry::GroupConcepts:
672 case LayoutDocEntry::GroupModules:
673 case LayoutDocEntry::GroupInlineClasses:
674 case LayoutDocEntry::GroupNamespaces:
675 case LayoutDocEntry::GroupDirs:
676 case LayoutDocEntry::GroupNestedGroups:
677 case LayoutDocEntry::GroupFiles:
678 case LayoutDocEntry::GroupGraph:
679 case LayoutDocEntry::GroupPageDocs:
680 case LayoutDocEntry::ModuleExports:
681 case LayoutDocEntry::ModuleClasses:
682 case LayoutDocEntry::ModuleConcepts:
683 case LayoutDocEntry::ModuleUsedFiles:
684 case LayoutDocEntry::AuthorSection:
685 case LayoutDocEntry::MemberGroups:
686 case LayoutDocEntry::MemberDecl:
687 case LayoutDocEntry::MemberDef:
688 case LayoutDocEntry::MemberDefStart:
689 case LayoutDocEntry::MemberDefEnd:
690 err(
"Internal inconsistency: member '{}' should not be part of "
691 "LayoutDocManager::Directory entry list\n",
qPrint(lde->entryToString()));
728 const FileDef *dstFd,
bool srcDirect,
bool dstDirect)
730 if (
this==dir)
return;
731 AUTO_TRACE(
"add dependency {}->{} due to {}->{}",
743 if (usedPair==
nullptr)
746 usedDir->
addFileDep(srcFd,dstFd, srcDirect, dstDirect);
757 auto newUsedDir = std::make_unique<UsedDir>(dir);
758 newUsedDir->addFileDep(srcFd,dstFd, srcDirect, dstDirect);
812 for (
const auto &ii : fd->includeFileList())
815 if (ii.fileDef && ii.fileDef->isLinkable())
817 DirDef *usedDir = ii.fileDef->getDirDef();
829 [](
const auto &u1,
const auto &u2)
830 { return dstricmp_sort(u1->dir()->getOutputFileBase(),u2->dir()->getOutputFileBase())<0; });
834 usedDirectory->sort();
872 [](
const auto &left,
const auto &right)
874 int orderHi = dstricmp_sort(left->source()->name(),right->source()->name());
875 if (orderHi!=0) return orderHi<0;
876 int orderLo = dstricmp_sort(left->destination()->name(),right->destination()->name());
894 std::unique_ptr<DirDef>(
904 for (
const auto &s : l)
926 if (!
matchPath(part) && (part!=
"/" && part!=
"//" && part!=
"//?/"))
956 if (target->
parent()!=root)
997 if (!generateTreeView)
1059 path=path.
left(i+1);
1062 size_t l = path.
length();
1070 if (dirName.
left(l)!=path)
1080 path=path.
left(i+1);
1097 path=path.
left(i+1);
1114 dir->setDiskName(diskName);
1125 for (
const auto &fd : *fn)
1127 if (fd->getReference().empty())
1134 if (dir && !fd->isDocumentationFile()) dir->
addFile(fd.get());
1154 parent->addSubDir(dir.get());
1155 AUTO_TRACE_ADD(
"DirDefImpl::addSubdir(): Adding subdir {} to {}",
1156 dir->displayName(),
parent->displayName());
1170 [](
const auto &d1,
const auto &d2)
1172 DString s1 = d1->shortName(), s2 = d2->shortName();
1176 DString n1 = d1->name(), n2 = d2->name();
1187 dir->setDirIndex(dirIndex++);
1206 dir->computeDependencies();
1216 if (!dir->hasDocumentation())
1220 dir->writeDocumentation(ol);
1227 dr->writeDocumentation(ol);
1241 if (d==
nullptr)
return nullptr;
1244 return static_cast<DirDef*
>(d);
1254 if (d==
nullptr)
return nullptr;
1257 return static_cast<const DirDef*
>(d);
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
size_t rfind(char c, size_t pos=npos) const
DString mid(size_t index, size_t len=npos) const
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
char & at(size_t i)
Returns a reference to the character at index i.
DString right(size_t len) const
DString & prepend(const char *s)
size_t find(char c, size_t pos=0) const
DString left(size_t len) const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
size_t length() const
Returns the length of the string, not counting the 0-terminator.
The common base class of all entity definitions found in the sources.
virtual DString pathFragment() const =0
virtual bool isLinkable() const =0
virtual const DString & name() const =0
virtual DString displayName(bool includeScope=true) const =0
virtual DString getReference() const =0
virtual DString getOutputFileBase() const =0
bool isReference() const override
DString docFile() const override
void writeNavigationPath(OutputList &ol) const override
bool hasBriefDescription() const override
DString briefFile() const override
bool hasRequirementRefs() const override
DString briefDescription(bool abbreviate=false) const override
DefinitionMixin(const DString &defFileName, int defLine, int defColumn, const DString &name, const char *b=nullptr, const char *d=nullptr, bool isSymbol=true)
const DString & name() const override
void writeRequirementRefs(OutputList &ol) const override
const RefItemVector & xrefListItems() const override
DString documentation() const override
void setLocalName(const DString &name) override
int docLine() const override
int briefLine() const override
void writeDocAnchorsToTagFile(TextStream &fs) const override
bool hasDocumentation() const override
SrcLangExt getLanguage() const override
virtual void setOuterScope(Definition *d)=0
virtual void writeNavigationPath(OutputList &ol) const =0
A model of a directory symbol.
virtual int level() const =0
virtual void setLevel()=0
virtual void addFile(FileDef *fd)=0
virtual const DString shortName() const =0
virtual DirDef * parent() const =0
virtual void addUsesDependency(const DirDef *usedDir, const FileDef *srcFd, const FileDef *dstFd, bool srcDirect, bool dstDirect)=0
virtual void setParent(DirDef *parent)=0
void writeDocumentation(OutputList &ol) override
void writeSubDirList(OutputList &ol)
static DirDef * mergeDirectoryInTree(const DString &path)
bool hasSubdirs() const override
DString shortTitle() const override
void writeTagFile(TextStream &t) override
const FileList & getFiles() const override
bool isLinkable() const override
const UsedDirLinkedMap & usedDirs() const override
void addSubDir(DirDef *subdir) override
DString displayName(bool=true) const override
bool hasDetailedDescription() const override
static DirDef * createNewDir(const DString &path)
DirDef * parent() const override
void startMemberDeclarations(OutputList &ol)
int level() const override
void writeDetailedDescription(OutputList &ol, const DString &title)
bool isLinkableInProject() const override
void writePageNavigation(OutputList &ol) const override
void addListReferences() override
DefType definitionType() const override
bool isParentOf(const DirDef *dir) const override
void setDiskName(const DString &name) override
int dirIndex() const override
CodeSymbolType codeSymbolType() const override
const DString shortName() const override
DString getOutputFileBase() const override
void addRequirementReferences() override
void addFile(FileDef *fd) override
bool depGraphIsTrivial() const override
void findSectionsInDocumentation() override
void overrideDirectoryGraph(bool e) override
DString anchor() const override
void addUsesDependency(const DirDef *usedDir, const FileDef *srcFd, const FileDef *dstFd, bool srcDirect, bool dstDirect) override
Add as "uses" dependency between this dir and dir, that was caused by a dependency on file fd.
void writeDirectoryGraph(OutputList &ol)
const DirList & subDirs() const override
UsedDirLinkedMap m_usedDirs
void writeFileList(OutputList &ol)
void setDirIndex(int index) override
void endMemberDeclarations(OutputList &ol)
static bool matchPath(const DString &path)
void writeBriefDescription(OutputList &ol)
DirDefImpl(const DString &path)
void computeDependencies() override
Computes the dependencies between directories.
void setParent(DirDef *parent) override
bool hasDirectoryGraph() const override
DString getOutputFileBase() const
void writeDocumentation(OutputList &ol)
Representation of an directory dependency graph.
static FileNameLinkedMap * inputNameLinkedMap
static DirLinkedMap * dirLinkedMap
static DirRelationLinkedMap dirRelations
A model of a file symbol.
virtual void setDirDef(DirDef *dd)=0
virtual DirDef * getDirDef() const =0
Class representing a pair of FileDef objects.
static DString key(const FileDef *srcFd, const FileDef *dstFd)
static LayoutDocManager & instance()
Returns a reference to this singleton.
T * add(const char *k, Args &&... args)
const T * find(const std::string &key) const
Class representing a list of output generators that are written to in parallel.
void writeDoc(const IDocNodeAST *ast, const Definition *ctx, const MemberDef *md, int sectionLevel=-1)
void startMemberDeclaration()
void parseText(const DString &textStr)
void disable(OutputType o)
void startParagraph(const DString &classDef=DString())
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name)
void endDirDepGraph(DotDirDeps &g)
void enable(OutputType o)
void endMemberDescription()
void endTextBlock(bool paraBreak=false)
void endMemberDeclaration(const DString &anchor, const DString &inheritId)
void docify(const DString &s)
void startMemberHeader(const DString &anchor, int typ=2)
void writeAnchor(const DString &fileName, const DString &name)
void insertMemberAlign(bool templ=false)
void writeString(const DString &text)
void startMemberSections()
void endMemberItem(OutputGenerator::MemberItemType type)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startTextBlock(bool dense=false)
void startTextLink(const DString &file, const DString &anchor)
void endGroupHeader(int extraLevels=0)
void startMemberItem(const DString &anchor, OutputGenerator::MemberItemType type, const DString &id=DString())
void startMemberDescription(const DString &anchor, const DString &inheritId=DString(), bool typ=false)
void generateDoc(const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &docStr, const DocOptions &options)
void startGroupHeader(const DString &id=DString(), int extraLevels=0)
static RequirementManager & instance()
void addRequirementRefsForSymbol(const Definition *symbol)
Text streaming class that buffers data.
virtual DString trDirDepGraph(const DString &name)=0
virtual DString trIncludesFileIn(const DString &name)=0
virtual DString trDirRelation(const DString &name)=0
virtual DString trDir(bool first_capital, bool singular)=0
virtual DString trMore()=0
virtual DString trFileIn(const DString &name)=0
virtual DString trDirReference(const DString &dirName)=0
virtual DString trFile(bool first_capital, bool singular)=0
Usage information of a directory.
FilePairLinkedMap m_filePairs
FilePair * findFilePair(const DString &name)
void addFileDep(const FileDef *srcFd, const FileDef *dstFd, bool srcDirect, bool dstDirect)
Take up dependency between files.
const DirDef * dir() const
UsedDir(const DirDef *dir)
const FilePairLinkedMap & filePairs() const
#define Config_getList(name)
#define Config_getBool(name)
#define NON_COPYABLE(cls)
Macro to help implementing the rule of 5 for a non-copyable & movable class.
std::vector< std::string > StringVector
DirIterator begin(DirIterator it) noexcept
DirIterator end(const DirIterator &) noexcept
static void writePartialFilePath(OutputList &ol, const DirDef *root, const FileDef *fd)
DirDef * createDirDef(const DString &path)
bool compareDirDefs(const DirDef *item1, const DirDef *item2)
static void writePartialDirPath(OutputList &ol, const DirDef *root, const DirDef *target)
void computeDirDependencies()
DirDef * toDirDef(Definition *d)
static DString encodeDirName(const DString &anchor)
static void computeCommonDirPrefix()
In order to create stable, but unique directory names, we compute the common part of the path shared ...
void generateDirDocs(OutputList &ol)
#define AUTO_TRACE_ADD(...)
#define AUTO_TRACE_EXIT(...)
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
IDocParserPtr createDocParser()
factory function to create a parser
void docFindSections(const DString &input, const Definition *d, const DString &fileName)
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
int dstricmp_sort(const char *str1, const char *str2)
const char * qPrint(const char *s)
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
void endTitle(OutputList &ol, const DString &fileName, const DString &name)
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
void startTitle(OutputList &ol, const DString &fileName, const DefinitionMutable *def)
void startFile(OutputList &ol, const DString &name, bool isSource, const DString &manName, const DString &title, HighlightedItem hli, bool additionalIndices, const DString &altSidebarName, int hierarchyLevel, const DString &allMembersFile)
Translator * theTranslator
DString title(SrcLangExt lang) const
void addRefItem(const RefItemVector &sli, const DString &key, const DString &prefix, const DString &name, const DString &title, const DString &args, const Definition *scope)
bool fileVisibleInIndex(const FileDef *fd, bool &genSourceFile)
void addHtmlExtensionIfMissing(DString &fName)
DString removeLongPathMarker(const DString &path)
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
DString stripFromPath(const DString &path)
A bunch of utility functions.