|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Documents produced by Doxygen are derivative works derived from the
|
|
Packit |
1c1d7e |
* input used in their production; they are not affected by this license.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#ifndef FILEDEF_H
|
|
Packit |
1c1d7e |
#define FILEDEF_H
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "index.h"
|
|
Packit |
1c1d7e |
#include <qlist.h>
|
|
Packit |
1c1d7e |
#include <qintdict.h>
|
|
Packit |
1c1d7e |
#include <qdict.h>
|
|
Packit |
1c1d7e |
#include "definition.h"
|
|
Packit |
1c1d7e |
#include "sortdict.h"
|
|
Packit |
1c1d7e |
#include "memberlist.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class MemberList;
|
|
Packit |
1c1d7e |
class FileDef;
|
|
Packit |
1c1d7e |
class FileList;
|
|
Packit |
1c1d7e |
class ClassSDict;
|
|
Packit |
1c1d7e |
class ClassDef;
|
|
Packit |
1c1d7e |
class ClassList;
|
|
Packit |
1c1d7e |
class MemberDef;
|
|
Packit |
1c1d7e |
class OutputList;
|
|
Packit |
1c1d7e |
class NamespaceDef;
|
|
Packit |
1c1d7e |
class NamespaceSDict;
|
|
Packit |
1c1d7e |
class MemberGroupSDict;
|
|
Packit |
1c1d7e |
class PackageDef;
|
|
Packit |
1c1d7e |
class DirDef;
|
|
Packit |
1c1d7e |
class FTextStream;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing the data associated with a \#include statement. */
|
|
Packit |
1c1d7e |
struct IncludeInfo
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
IncludeInfo() : fileDef(0), local(FALSE), imported(FALSE), indirect(FALSE) {}
|
|
Packit |
1c1d7e |
~IncludeInfo() {}
|
|
Packit |
1c1d7e |
FileDef *fileDef;
|
|
Packit |
1c1d7e |
QCString includeName;
|
|
Packit |
1c1d7e |
bool local;
|
|
Packit |
1c1d7e |
bool imported;
|
|
Packit |
1c1d7e |
bool indirect;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** A model of a file symbol.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* An object of this class contains all file information that is gathered.
|
|
Packit |
1c1d7e |
* This includes the members and compounds defined in the file.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* The member writeDocumentation() can be used to generate the page of
|
|
Packit |
1c1d7e |
* documentation to HTML and LaTeX.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
class FileDef : public Definition
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
//enum FileType { Source, Header, Unknown };
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
|
|
Packit |
1c1d7e |
~FileDef();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
// ----------------------------------------------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
DefType definitionType() const { return TypeFile; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the unique file name (this may include part of the path). */
|
|
Packit |
1c1d7e |
QCString name() const;
|
|
Packit |
1c1d7e |
QCString displayName(bool=TRUE) const { return name(); }
|
|
Packit |
1c1d7e |
QCString fileName() const { return m_fileName; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString getOutputFileBase() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString anchor() const { return QCString(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString getSourceFileBase() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the name of the verbatim copy of this file (if any). */
|
|
Packit |
1c1d7e |
QCString includeName() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString includeDependencyGraphFileName() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString includedByDependencyGraphFileName() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the absolute path including the file name. */
|
|
Packit |
1c1d7e |
QCString absFilePath() const { return m_filePath; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the name as it is used in the documentation */
|
|
Packit |
1c1d7e |
const QCString &docName() const { return m_docname; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns TRUE if this file is a source file. */
|
|
Packit |
1c1d7e |
bool isSource() const { return m_isSource; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool isDocumentationFile() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
Definition *getSourceDefinition(int lineNr) const;
|
|
Packit |
1c1d7e |
MemberDef *getSourceMember(int lineNr) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns the absolute path of this file. */
|
|
Packit |
1c1d7e |
QCString getPath() const { return m_path; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/*! Returns version of this file. */
|
|
Packit |
1c1d7e |
QCString getVersion() const { return m_fileVersion; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool isLinkableInProject() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool isLinkable() const { return isLinkableInProject() || isReference(); }
|
|
Packit |
1c1d7e |
bool isIncluded(const QCString &name) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
PackageDef *packageDef() const { return m_package; }
|
|
Packit |
1c1d7e |
DirDef *getDirDef() const { return m_dir; }
|
|
Packit |
1c1d7e |
NamespaceSDict *getUsedNamespaces() const;
|
|
Packit |
1c1d7e |
SDict<Definition> *getUsedClasses() const { return m_usingDeclList; }
|
|
Packit |
1c1d7e |
QList<IncludeInfo> *includeFileList() const { return m_includeList; }
|
|
Packit |
1c1d7e |
QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
|
|
Packit |
1c1d7e |
void getAllIncludeFilesRecursively(QStrList &incFiles) const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
MemberList *getMemberList(MemberListType lt) const;
|
|
Packit |
1c1d7e |
const QList<MemberList> &getMemberLists() const { return m_memberLists; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/* user defined member groups */
|
|
Packit |
1c1d7e |
MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
|
|
Packit |
1c1d7e |
NamespaceSDict *getNamespaceSDict() const { return m_namespaceSDict; }
|
|
Packit |
1c1d7e |
ClassSDict *getClassSDict() const { return m_classSDict; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QCString title() const;
|
|
Packit |
1c1d7e |
bool hasDetailedDescription() const;
|
|
Packit |
1c1d7e |
QCString fileVersion() const;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool subGrouping() const { return m_subGrouping; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
//---------------------------------
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addSourceRef(int line,Definition *d,MemberDef *md);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void writeDocumentation(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeMemberPages(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
|
|
Packit |
1c1d7e |
void writeSummaryLinks(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeTagFile(FTextStream &t);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void startParsing();
|
|
Packit |
1c1d7e |
void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
|
|
Packit |
1c1d7e |
void parseSource(bool sameTu,QStrList &filesInSameTu);
|
|
Packit |
1c1d7e |
void finishParsing();
|
|
Packit |
1c1d7e |
void setDiskName(const QCString &name);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void insertMember(MemberDef *md);
|
|
Packit |
1c1d7e |
void insertClass(ClassDef *cd);
|
|
Packit |
1c1d7e |
void insertNamespace(NamespaceDef *nd);
|
|
Packit |
1c1d7e |
void computeAnchors();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void setPackageDef(PackageDef *pd) { m_package=pd; }
|
|
Packit |
1c1d7e |
void setDirDef(DirDef *dd) { m_dir=dd; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addUsingDirective(NamespaceDef *nd);
|
|
Packit |
1c1d7e |
void addUsingDeclaration(Definition *def);
|
|
Packit |
1c1d7e |
void combineUsingRelations();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bool generateSourceFile() const;
|
|
Packit |
1c1d7e |
void sortMemberLists();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
|
|
Packit |
1c1d7e |
void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addMembersToMemberGroup();
|
|
Packit |
1c1d7e |
void distributeMemberGroupDocumentation();
|
|
Packit |
1c1d7e |
void findSectionsInDocumentation();
|
|
Packit |
1c1d7e |
void addIncludedUsingDirectives();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void addListReferences();
|
|
Packit |
1c1d7e |
//bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
|
|
Packit |
1c1d7e |
//bool includesByName(const QCString &name) const;
|
|
Packit |
1c1d7e |
bool visited;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
protected:
|
|
Packit |
1c1d7e |
/**
|
|
Packit |
1c1d7e |
* Retrieves the file version from version control system.
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
void acquireFileVersion();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
MemberList *createMemberList(MemberListType lt);
|
|
Packit |
1c1d7e |
void addMemberToList(MemberListType lt,MemberDef *md);
|
|
Packit |
1c1d7e |
void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
|
|
Packit |
1c1d7e |
void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
|
|
Packit |
1c1d7e |
void writeIncludeFiles(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeIncludeGraph(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeIncludedByGraph(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeMemberGroups(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeAuthorSection(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeSourceLink(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
|
|
Packit |
1c1d7e |
bool isConstantGroup);
|
|
Packit |
1c1d7e |
void writeClassDeclarations(OutputList &ol,const QCString &title);
|
|
Packit |
1c1d7e |
void writeInlineClasses(OutputList &ol);
|
|
Packit |
1c1d7e |
void startMemberDeclarations(OutputList &ol);
|
|
Packit |
1c1d7e |
void endMemberDeclarations(OutputList &ol);
|
|
Packit |
1c1d7e |
void startMemberDocumentation(OutputList &ol);
|
|
Packit |
1c1d7e |
void endMemberDocumentation(OutputList &ol);
|
|
Packit |
1c1d7e |
void writeDetailedDescription(OutputList &ol,const QCString &title);
|
|
Packit |
1c1d7e |
void writeBriefDescription(OutputList &ol);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QDict<IncludeInfo> *m_includeDict;
|
|
Packit |
1c1d7e |
QList<IncludeInfo> *m_includeList;
|
|
Packit |
1c1d7e |
QDict<IncludeInfo> *m_includedByDict;
|
|
Packit |
1c1d7e |
QList<IncludeInfo> *m_includedByList;
|
|
Packit |
1c1d7e |
NamespaceSDict *m_usingDirList;
|
|
Packit |
1c1d7e |
SDict<Definition> *m_usingDeclList;
|
|
Packit |
1c1d7e |
QCString m_path;
|
|
Packit |
1c1d7e |
QCString m_filePath;
|
|
Packit |
1c1d7e |
QCString m_inclDepFileName;
|
|
Packit |
1c1d7e |
QCString m_inclByDepFileName;
|
|
Packit |
1c1d7e |
QCString m_outputDiskName;
|
|
Packit |
1c1d7e |
QCString m_fileName;
|
|
Packit |
1c1d7e |
QCString m_docname;
|
|
Packit |
1c1d7e |
QIntDict<Definition> *m_srcDefDict;
|
|
Packit |
1c1d7e |
QIntDict<MemberDef> *m_srcMemberDict;
|
|
Packit |
1c1d7e |
bool m_isSource;
|
|
Packit |
1c1d7e |
QCString m_fileVersion;
|
|
Packit |
1c1d7e |
PackageDef *m_package;
|
|
Packit |
1c1d7e |
DirDef *m_dir;
|
|
Packit |
1c1d7e |
QList<MemberList> m_memberLists;
|
|
Packit |
1c1d7e |
MemberGroupSDict *m_memberGroupSDict;
|
|
Packit |
1c1d7e |
NamespaceSDict *m_namespaceSDict;
|
|
Packit |
1c1d7e |
ClassSDict *m_classSDict;
|
|
Packit |
1c1d7e |
bool m_subGrouping;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing a list of FileDef objects. */
|
|
Packit |
1c1d7e |
class FileList : public QList<FileDef>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
FileList() : m_pathName("tmp") {}
|
|
Packit |
1c1d7e |
FileList(const char *path) : QList<FileDef>(), m_pathName(path) {}
|
|
Packit |
1c1d7e |
~FileList() {}
|
|
Packit |
1c1d7e |
QCString path() const { return m_pathName; }
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
int compareValues(const FileDef *md1,const FileDef *md2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return qstricmp(md1->name(),md2->name());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QCString m_pathName;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class OutputNameList : public QList<FileList>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
OutputNameList() : QList<FileList>() {}
|
|
Packit |
1c1d7e |
~OutputNameList() {}
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
int compareValues(const FileList *fl1,const FileList *fl2) const
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return qstricmp(fl1->path(),fl2->path());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class OutputNameDict : public QDict<FileList>
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
OutputNameDict(int size) : QDict<FileList>(size) {}
|
|
Packit |
1c1d7e |
~OutputNameDict() {}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class Directory;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing an entry (file or sub directory) in a directory */
|
|
Packit |
1c1d7e |
class DirEntry
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
enum EntryKind { Dir, File };
|
|
Packit |
1c1d7e |
DirEntry(DirEntry *parent,FileDef *fd)
|
|
Packit |
1c1d7e |
: m_parent(parent), m_name(fd->name()), m_kind(File), m_fd(fd),
|
|
Packit |
1c1d7e |
m_isLast(FALSE) { }
|
|
Packit |
1c1d7e |
DirEntry(DirEntry *parent,QCString name)
|
|
Packit |
1c1d7e |
: m_parent(parent), m_name(name), m_kind(Dir),
|
|
Packit |
1c1d7e |
m_fd(0), m_isLast(FALSE) { }
|
|
Packit |
1c1d7e |
virtual ~DirEntry() { }
|
|
Packit |
1c1d7e |
EntryKind kind() const { return m_kind; }
|
|
Packit |
1c1d7e |
FileDef *file() const { return m_fd; }
|
|
Packit |
1c1d7e |
bool isLast() const { return m_isLast; }
|
|
Packit |
1c1d7e |
void setLast(bool b) { m_isLast=b; }
|
|
Packit |
1c1d7e |
DirEntry *parent() const { return m_parent; }
|
|
Packit |
1c1d7e |
QCString name() const { return m_name; }
|
|
Packit |
1c1d7e |
QCString path() const { return parent() ? parent()->path()+"/"+name() : name(); }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
protected:
|
|
Packit |
1c1d7e |
DirEntry *m_parent;
|
|
Packit |
1c1d7e |
QCString m_name;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
EntryKind m_kind;
|
|
Packit |
1c1d7e |
FileDef *m_fd;
|
|
Packit |
1c1d7e |
bool m_isLast;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
/** Class representing a directory tree of DirEntry objects. */
|
|
Packit |
1c1d7e |
class Directory : public DirEntry
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
Directory(Directory *parent,const QCString &name)
|
|
Packit |
1c1d7e |
: DirEntry(parent,name)
|
|
Packit |
1c1d7e |
{ m_children.setAutoDelete(TRUE); }
|
|
Packit |
1c1d7e |
virtual ~Directory() {}
|
|
Packit |
1c1d7e |
void addChild(DirEntry *d) { m_children.append(d); d->setLast(TRUE); }
|
|
Packit |
1c1d7e |
QList<DirEntry> &children() { return m_children; }
|
|
Packit |
1c1d7e |
void rename(const QCString &name) { m_name=name; }
|
|
Packit |
1c1d7e |
void reParent(Directory *parent) { m_parent=parent; }
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
QList<DirEntry> m_children;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void generateFileTree();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#endif
|
|
Packit |
1c1d7e |
|