#include "docparser.h"
#include "definitionimpl.h"
#include "filedef.h"
+#include "trace.h"
//----------------------------------------------------------------------
DirDefImpl(const QCString &path);
virtual ~DirDefImpl();
- virtual DefType definitionType() const { return TypeDir; }
- virtual CodeSymbolType codeSymbolType() const { return CodeSymbolType::Default; }
- virtual QCString getOutputFileBase() const;
- virtual QCString anchor() const { return QCString(); }
- virtual bool isLinkableInProject() const;
- virtual bool isLinkable() const;
- virtual QCString displayName(bool=TRUE) const { return m_dispName; }
- virtual const QCString shortName() const { return m_shortName; }
- virtual void addSubDir(DirDef *subdir);
- virtual const FileList &getFiles() const { return m_fileList; }
- virtual void addFile(const FileDef *fd);
- virtual const DirList &subDirs() const { return m_subdirs; }
- virtual bool hasSubdirs() const { return !m_subdirs.empty(); }
- virtual int level() const { return m_level; }
- virtual DirDef *parent() const { return m_parent; }
- virtual int dirCount() const { return m_dirCount; }
- virtual const UsedDirLinkedMap &usedDirs() const { return m_usedDirs; }
- virtual bool isParentOf(const DirDef *dir) const;
- virtual bool depGraphIsTrivial() const;
- virtual QCString shortTitle() const;
- virtual bool hasDetailedDescription() const;
- virtual void writeDocumentation(OutputList &ol);
- virtual void writeTagFile(TextStream &t);
- virtual void setDiskName(const QCString &name) { m_diskName = name; }
- virtual void sort();
- virtual void setParent(DirDef *parent);
- virtual void setDirCount(int count);
- virtual void setLevel();
+ virtual DefType definitionType() const override { return TypeDir; }
+ virtual CodeSymbolType codeSymbolType() const override { return CodeSymbolType::Default; }
+ virtual QCString getOutputFileBase() const override;
+ virtual QCString anchor() const override { return QCString(); }
+ virtual bool isLinkableInProject() const override;
+ virtual bool isLinkable() const override;
+ virtual QCString displayName(bool=TRUE) const override { return m_dispName; }
+ virtual const QCString shortName() const override { return m_shortName; }
+ virtual void addSubDir(DirDef *subdir) override;
+ virtual const FileList &getFiles() const override { return m_fileList; }
+ virtual void addFile(const FileDef *fd) override;
+ virtual const DirList &subDirs() const override { return m_subdirs; }
+ virtual bool hasSubdirs() const override { return !m_subdirs.empty(); }
+ virtual int level() const override { return m_level; }
+ virtual DirDef *parent() const override { return m_parent; }
+ virtual int dirCount() const override { return m_dirCount; }
+ virtual const UsedDirLinkedMap &usedDirs() const override { return m_usedDirs; }
+ virtual bool isParentOf(const DirDef *dir) const override;
+ virtual bool depGraphIsTrivial() const override;
+ virtual QCString shortTitle() const override;
+ virtual bool hasDetailedDescription() const override;
+ virtual void writeDocumentation(OutputList &ol) override;
+ virtual void writeTagFile(TextStream &t) override;
+ virtual void setDiskName(const QCString &name) override { m_diskName = name; }
+ virtual void sort() override;
+ virtual void setParent(DirDef *parent) override;
+ virtual void setDirCount(int count) override;
+ virtual void setLevel() override;
virtual void addUsesDependency(const DirDef *usedDir,const FileDef *srcFd,
- const FileDef *dstFd,bool srcDirect, bool dstDirect);
- virtual void computeDependencies();
+ const FileDef *dstFd,bool srcDirect, bool dstDirect) override;
+ virtual void computeDependencies() override;
+
+ virtual bool hasDirectoryGraph() const override;
+ virtual void enableDirectoryGraph(bool e) override;
public:
static DirDef *mergeDirectoryInTree(const QCString &path);
int m_level;
DirDef *m_parent;
UsedDirLinkedMap m_usedDirs;
+ bool m_hasDirectoryGraph = false;
};
DirDef *createDirDef(const QCString &path)
m_level=-1;
m_parent=0;
+ m_hasDirectoryGraph=Config_getBool(DIRECTORY_GRAPH);
+
}
DirDefImpl::~DirDefImpl()
static QCString encodeDirName(const QCString &anchor)
{
+ AUTO_TRACE();
// convert to md5 hash
- uchar md5_sig[16];
+ uint8_t md5_sig[16];
char sigStr[33];
MD5Buffer(anchor.data(),anchor.length(),md5_sig);
MD5SigToString(md5_sig,sigStr);
+ AUTO_TRACE_EXIT("result={}",sigStr);
return sigStr;
// old algorithm
QCString DirDefImpl::getOutputFileBase() const
{
- //printf("DirDefImpl::getOutputFileBase() %s->dir_%s\n",
- // qPrint(m_diskName),qPrint(encodeDirName(m_diskName)));
- return "dir_"+encodeDirName(m_diskName);
+ QCString dir = "dir_"+encodeDirName(m_diskName);
+ AUTO_TRACE("diskName={} result={}",m_diskName,dir);
+ return dir;
}
void DirDefImpl::writeDetailedDescription(OutputList &ol,const QCString &title)
{
+ AUTO_TRACE();
if ((!briefDescription().isEmpty() && Config_getBool(REPEAT_BRIEF)) ||
!documentation().isEmpty())
{
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Html);
+ ol.disable(OutputType::Html);
ol.writeRuler();
ol.popGeneratorState();
ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
+ ol.disableAllBut(OutputType::Html);
ol.writeAnchor(QCString(),"details");
ol.popGeneratorState();
ol.startGroupHeader();
!documentation().isEmpty())
{
ol.pushGeneratorState();
- ol.disable(OutputGenerator::Man);
- ol.disable(OutputGenerator::RTF);
- // ol.newParagraph(); // FIXME:PARA
+ ol.disable(OutputType::Man);
+ ol.disable(OutputType::RTF);
ol.enableAll();
- ol.disableAllBut(OutputGenerator::Man);
- ol.enable(OutputGenerator::Latex);
+ ol.disableAllBut(OutputType::Man);
+ ol.enable(OutputType::Latex);
ol.writeString("\n\n");
ol.popGeneratorState();
}
void DirDefImpl::writeBriefDescription(OutputList &ol)
{
+ AUTO_TRACE();
if (hasBriefDescription())
{
auto parser { createDocParser() };
{
ol.startParagraph();
ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Man);
+ ol.disableAllBut(OutputType::Man);
ol.writeString(" - ");
ol.popGeneratorState();
ol.writeDoc(ast.get(),this,0);
ol.pushGeneratorState();
- ol.disable(OutputGenerator::RTF);
+ ol.disable(OutputType::RTF);
ol.writeString(" \n");
- ol.enable(OutputGenerator::RTF);
+ ol.enable(OutputType::RTF);
if (Config_getBool(REPEAT_BRIEF) ||
!documentation().isEmpty()
)
{
- ol.disableAllBut(OutputGenerator::Html);
+ ol.disableAllBut(OutputType::Html);
ol.startTextLink(QCString(),"details");
ol.parseText(theTranslator->trMore());
ol.endTextLink();
void DirDefImpl::writeDirectoryGraph(OutputList &ol)
{
// write graph dependency graph
- if (Config_getBool(DIRECTORY_GRAPH) && Config_getBool(HAVE_DOT))
+ if (Config_getBool(HAVE_DOT) && m_hasDirectoryGraph /*&& Config_getBool(DIRECTORY_GRAPH)*/)
{
DotDirDeps dirDep(this);
if (!dirDep.isTrivial())
{
msg("Generating dependency graph for directory %s\n",qPrint(displayName()));
- ol.disable(OutputGenerator::Man);
+ ol.disable(OutputType::Man);
//ol.startParagraph();
ol.startDirDepGraph();
ol.parseText(theTranslator->trDirDepGraph(shortName()));
void DirDefImpl::writeSubDirList(OutputList &ol)
{
+ AUTO_TRACE();
int numSubdirs = 0;
for(const auto dd : m_subdirs)
{
}
}
+ AUTO_TRACE_ADD("numSubdirs={}",numSubdirs);
// write subdir list
if (numSubdirs>0)
{
if (dd->hasDocumentation() || !dd->getFiles().empty())
{
ol.startMemberDeclaration();
- ol.startMemberItem(dd->anchor(),0);
- ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
+ ol.startMemberItem(dd->anchor(),OutputGenerator::MemberItemType::Normal);
+ {
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputType::Html);
+ ol.writeString("<span class=\"iconfclosed\"></span>");
+ ol.enableAll();
+ ol.disable(OutputType::Html);
+ ol.parseText(theTranslator->trDir(FALSE,TRUE)+" ");
+ ol.popGeneratorState();
+ }
ol.insertMemberAlign();
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),QCString(),dd->shortName());
- ol.endMemberItem();
+ ol.endMemberItem(OutputGenerator::MemberItemType::Normal);
if (!dd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
{
ol.startMemberDescription(dd->getOutputFileBase());
void DirDefImpl::writeFileList(OutputList &ol)
{
+ AUTO_TRACE();
int numFiles = 0;
for (const auto &fd : m_fileList)
{
}
}
+ AUTO_TRACE_ADD("numFiles={}",numFiles);
// write file list
if (numFiles>0)
{
if (doc || src)
{
ol.startMemberDeclaration();
- ol.startMemberItem(fd->anchor(),0);
- ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
+ ol.startMemberItem(fd->anchor(),OutputGenerator::MemberItemType::Normal);
+ {
+ ol.pushGeneratorState();
+ ol.disableAllBut(OutputType::Html);
+ bool genSrc = fd->generateSourceFile();
+ if (genSrc)
+ {
+ ol.startTextLink(fd->includeName(),QCString());
+ }
+ ol.writeString("<span class=\"icondoc\"></span>");
+ if (genSrc)
+ {
+ ol.endTextLink();
+ }
+ ol.enableAll();
+ ol.disable(OutputType::Html);
+ ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
+ ol.popGeneratorState();
+ }
ol.insertMemberAlign();
if (fd->isLinkable())
{
- ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fd->name());
+ ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),QCString(),fd->displayName());
}
else
{
ol.startBold();
- ol.docify(fd->name());
+ ol.docify(fd->displayName());
ol.endBold();
}
- if (fd->generateSourceFile())
- {
- ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
- ol.docify(" ");
- ol.startTextLink(fd->includeName(),QCString());
- ol.docify("[");
- ol.parseText(theTranslator->trCode());
- ol.docify("]");
- ol.endTextLink();
- ol.popGeneratorState();
- }
- ol.endMemberItem();
+ ol.endMemberItem(OutputGenerator::MemberItemType::Normal);
if (!fd->briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
{
ol.startMemberDescription(fd->getOutputFileBase());
{
tagFile << " <compound kind=\"dir\">\n";
tagFile << " <name>" << convertToXML(displayName()) << "</name>\n";
- tagFile << " <path>" << convertToXML(name()) << "</path>\n";
- tagFile << " <filename>" << addHtmlExtensionIfMissing(getOutputFileBase()) << "</filename>\n";
+ tagFile << " <path>" << convertToXML(stripFromPath(name())) << "</path>\n";
+ QCString fn=getOutputFileBase();
+ addHtmlExtensionIfMissing(fn);
+ tagFile << " <filename>" << fn << "</filename>\n";
for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Directory))
{
switch (lde->kind())
ol.pushGeneratorState();
QCString title=theTranslator->trDirReference(m_dispName);
- startFile(ol,getOutputFileBase(),name(),title,HLI_Files,!generateTreeView);
+ AUTO_TRACE("title={}",title);
+ startFile(ol,getOutputFileBase(),name(),title,HighlightedItem::Files,!generateTreeView);
if (!generateTreeView)
{
startTitle(ol,getOutputFileBase());
ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
+ ol.disableAllBut(OutputType::Html);
ol.parseText(shortTitle());
ol.enableAll();
- ol.disable(OutputGenerator::Html);
+ ol.disable(OutputType::Html);
ol.parseText(title);
ol.popGeneratorState();
endTitle(ol,getOutputFileBase(),title);
case LayoutDocEntry::FileInlineClasses:
case LayoutDocEntry::GroupClasses:
case LayoutDocEntry::GroupConcepts:
+ case LayoutDocEntry::GroupModules:
case LayoutDocEntry::GroupInlineClasses:
case LayoutDocEntry::GroupNamespaces:
case LayoutDocEntry::GroupDirs:
case LayoutDocEntry::GroupFiles:
case LayoutDocEntry::GroupGraph:
case LayoutDocEntry::GroupPageDocs:
+ case LayoutDocEntry::ModuleExports:
+ case LayoutDocEntry::ModuleClasses:
+ case LayoutDocEntry::ModuleConcepts:
+ case LayoutDocEntry::ModuleUsedFiles:
case LayoutDocEntry::AuthorSection:
case LayoutDocEntry::MemberGroups:
case LayoutDocEntry::MemberDecl:
ol.endContents();
- endFileWithNavPath(this,ol);
+ endFileWithNavPath(ol,this);
ol.popGeneratorState();
}
const FileDef *dstFd,bool srcDirect, bool dstDirect)
{
if (this==dir) return; // do not add self-dependencies
- //static int count=0;
- //printf(" %d add dependency %s->%s due to %s->%s\n",
- // count++,qPrint(shortName()),
- // qPrint(dir->shortName()),
- // qPrint(srcFd->name()),
- // qPrint(dstFd->name()));
+ AUTO_TRACE("add dependency {}->{} due to {}->{}",
+ qPrint(shortName()),
+ qPrint(dir->shortName()),
+ qPrint(srcFd->name()),
+ qPrint(dstFd->name()));
// levels match => add direct dependency
bool added=FALSE;
const FilePair *usedPair = usedDir->findFilePair(FilePair::key(srcFd,dstFd));
if (usedPair==0) // new file dependency
{
- //printf(" => new file\n");
+ AUTO_TRACE_ADD("{} => {} new file dependency",srcFd->name(),dstFd->name());
usedDir->addFileDep(srcFd,dstFd, srcDirect, dstDirect);
added=TRUE;
}
}
else // new directory dependency
{
- //printf(" => new file\n");
+ AUTO_TRACE_ADD("{} => {} new file dependency",srcFd->name(),dstFd->name());
auto newUsedDir = std::make_unique<UsedDir>(dir);
newUsedDir->addFileDep(srcFd,dstFd, srcDirect, dstDirect);
m_usedDirs.add(dir->getOutputFileBase(),std::move(newUsedDir));
*/
void DirDefImpl::computeDependencies()
{
+ AUTO_TRACE();
for (const auto &fd : m_fileList)
{
- //printf(" File %s\n",qPrint(fd->name()));
- //printf("** dir=%s file=%s\n",qPrint(shortName()),qPrint(fd->name()));
+ AUTO_TRACE_ADD("dir={} file={}",shortName(),fd->name());
for (const auto &ii : fd->includeFileList())
{
- //printf(" > %s\n",qPrint(ii->includeName));
- //printf(" #include %s\n",qPrint(ii->includeName));
+ AUTO_TRACE_ADD("#include {}",ii.includeName);
if (ii.fileDef && ii.fileDef->isLinkable()) // linkable file
{
DirDef *usedDir = ii.fileDef->getDirDef();
if (usedDir)
{
// add dependency: thisDir->usedDir
- //static int count=0;
- //printf(" %d: add dependency %s->%s\n",count++,qPrint(name()),qPrint(usedDir->name()));
+ AUTO_TRACE_ADD("add dependency {}->{}",name(),usedDir->name());
addUsesDependency(usedDir,fd,ii.fileDef,true,true);
}
}
return m_usedDirs.empty() && m_parent==nullptr;
}
-
//----------------------------------------------------------------------
UsedDir::UsedDir(const DirDef *dir) :
DirDef *DirDefImpl::createNewDir(const QCString &path)
{
+ AUTO_TRACE();
ASSERT(path!=0);
DirDef *dir = Doxygen::dirLinkedMap->find(path);
if (dir==0) // new dir
dir = Doxygen::dirLinkedMap->add(path,
std::unique_ptr<DirDef>(
createDirDef(path)));
- //printf("Adding new dir %s\n",path);
- //printf("createNewDir %s short=%s\n",path,qPrint(dir->shortName()));
+ AUTO_TRACE_ADD("Adding new dir {} shortName {}",path,dir->shortName());
}
return dir;
}
*/
DirDef *DirDefImpl::mergeDirectoryInTree(const QCString &path)
{
- //printf("DirDefImpl::mergeDirectoryInTree(%s)\n",qPrint(path));
+ AUTO_TRACE("path={}",path);
int p=0,i=0;
DirDef *dir=0;
while ((i=path.find('/',p))!=-1)
return dir;
}
+void DirDefImpl::enableDirectoryGraph(bool e)
+{
+ m_hasDirectoryGraph=e;
+}
+
+bool DirDefImpl::hasDirectoryGraph() const
+{
+ return m_hasDirectoryGraph;
+}
+
//----------------------------------------------------------------------
QCString FilePair::key(const FileDef *srcFd,const FileDef *dstFd)
{
bool generateTreeView = Config_getBool(GENERATE_TREEVIEW);
ol.pushGeneratorState();
- ol.disableAllBut(OutputGenerator::Html);
+ ol.disableAllBut(OutputType::Html);
QCString shortTitle=theTranslator->trDirRelation(
(m_src->shortName()+" → "+m_dst->dir()->shortName()));
QCString title=theTranslator->trDirRelation(
(m_src->displayName()+" -> "+m_dst->dir()->shortName()));
+ AUTO_TRACE("title={}",title);
startFile(ol,getOutputFileBase(),getOutputFileBase(),
- title,HLI_None,!generateTreeView,m_src->getOutputFileBase());
+ title,HighlightedItem::None,!generateTreeView,m_src->getOutputFileBase());
if (!generateTreeView)
{
ol.endContents();
- endFileWithNavPath(m_src,ol);
+ endFileWithNavPath(ol,m_src);
ol.popGeneratorState();
}
*/
static void computeCommonDirPrefix()
{
+ AUTO_TRACE();
QCString path;
auto it = Doxygen::dirLinkedMap->begin();
if (!Doxygen::dirLinkedMap->empty()) // we have at least one dir
{
while (!done)
{
- uint l = path.length();
+ uint32_t l = path.length();
size_t count=0;
for (const auto &dir : *Doxygen::dirLinkedMap)
{
{
QCString diskName = dir->name().right(dir->name().length()-path.length());
dir->setDiskName(diskName);
- //printf("set disk name: %s -> %s\n",qPrint(dir->name()),qPrint(diskName));
+ AUTO_TRACE_ADD("set disk name: {} -> {}",dir->name(),diskName);
}
}
void buildDirectories()
{
+ AUTO_TRACE();
// for each input file
for (const auto &fn : *Doxygen::inputNameLinkedMap)
{
if (parent)
{
parent->addSubDir(dir.get());
- //printf("DirDefImpl::addSubdir(): Adding subdir\n%s to\n%s\n",
- // qPrint(dir->displayName()), qPrint(parent->displayName()));
+ AUTO_TRACE_ADD("DirDefImpl::addSubdir(): Adding subdir {} to {}",
+ dir->displayName(), parent->displayName());
}
}
}
void computeDirDependencies()
{
+ AUTO_TRACE();
// compute nesting level for each directory
for (const auto &dir : *Doxygen::dirLinkedMap)
{
// compute uses dependencies between directories
for (const auto &dir : *Doxygen::dirLinkedMap)
{
- //printf("computeDependencies for %s: #dirs=%d\n",qPrint(dir->name()),Doxygen::directories.count());
+ AUTO_TRACE_ADD("computeDependencies for {}: #dirs={}",dir->name(),Doxygen::dirLinkedMap->size());
dir->computeDependencies();
}
}
void generateDirDocs(OutputList &ol)
{
+ AUTO_TRACE();
for (const auto &dir : *Doxygen::dirLinkedMap)
{
ol.pushGeneratorState();
if (!dir->hasDocumentation())
{
- ol.disableAllBut(OutputGenerator::Html);
+ ol.disableAllBut(OutputType::Html);
}
dir->writeDocumentation(ol);
ol.popGeneratorState();
}
- if (Config_getBool(DIRECTORY_GRAPH))
+ //if (Config_getBool(DIRECTORY_GRAPH))
{
for (const auto &dr : Doxygen::dirRelations)
{