Commit a17029cb authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.9.1-20041213

parent 6042e1bf
DOXYGEN Version 1.3.9.1-20041206 DOXYGEN Version 1.3.9.1-20041213
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (06 December 2004) Dimitri van Heesch (13 December 2004)
DOXYGEN Version 1.3.9.1_20041206 DOXYGEN Version 1.3.9.1_20041213
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (06 December 2004) Dimitri van Heesch (dimitri@stack.nl) (13 December 2004)
1.3.9.1-20041206 1.3.9.1-20041213
#! /bin/sh #! /bin/bash
# #
# $Id$ # $Id$
# #
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.9.1_20041206 Version: 1.3.9.1_20041213
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -15156,16 +15156,18 @@ QCString qt_winQString2MB( const QString& s, int uclen ) ...@@ -15156,16 +15156,18 @@ QCString qt_winQString2MB( const QString& s, int uclen )
if ( uclen == 0 ) if ( uclen == 0 )
return QCString(); return QCString();
BOOL used_def; BOOL used_def;
QCString mb(4096); int bufSize=4096;
QCString mb(bufSize);
int len; int len;
while ( !(len=WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)s.unicode(), uclen, while ( !(len=WideCharToMultiByte(CP_ACP, 0, (const WCHAR*)s.unicode(), uclen,
mb.data(), mb.size()-1, 0, &used_def)) ) mb.data(), bufSize-1, 0, &used_def)) )
{ {
int r = GetLastError(); int r = GetLastError();
if ( r == ERROR_INSUFFICIENT_BUFFER ) { if ( r == ERROR_INSUFFICIENT_BUFFER ) {
mb.resize(1+WideCharToMultiByte( CP_ACP, 0, bufSize=1+WideCharToMultiByte( CP_ACP, 0,
(const WCHAR*)s.unicode(), uclen, (const WCHAR*)s.unicode(), uclen,
0, 0, 0, &used_def)); 0, 0, 0, &used_def);
mb.resize(bufSize);
// and try again... // and try again...
} else { } else {
// Fail. // Fail.
......
...@@ -34,7 +34,7 @@ SCString::SCString(int size) ...@@ -34,7 +34,7 @@ SCString::SCString(int size)
m_data = (char *)malloc(size); m_data = (char *)malloc(size);
if (m_data) if (m_data)
{ {
m_data[0]='\0'; if (size>1) memset(m_data,' ',size-1);
m_data[size-1]='\0'; m_data[size-1]='\0';
} }
} }
......
...@@ -144,6 +144,7 @@ inline void SCString::duplicate( const char *str) ...@@ -144,6 +144,7 @@ inline void SCString::duplicate( const char *str)
} }
inline SCString &SCString::duplicate( const char *str, int) inline SCString &SCString::duplicate( const char *str, int)
{ {
if (m_data) free(m_data);
duplicate(str); duplicate(str);
return *this; return *this;
} }
......
...@@ -2497,8 +2497,8 @@ QCString ClassDef::compoundTypeString() const ...@@ -2497,8 +2497,8 @@ QCString ClassDef::compoundTypeString() const
case Protocol: return "protocol"; case Protocol: return "protocol";
case Category: return "category"; case Category: return "category";
case Exception: return "exception"; case Exception: return "exception";
default: return "unknown";
} }
return "unknown";
} }
QCString ClassDef::getOutputFileBase() const QCString ClassDef::getOutputFileBase() const
......
...@@ -716,6 +716,7 @@ static MemberDef *setCallContextForVar(const QCString &name) ...@@ -716,6 +716,7 @@ static MemberDef *setCallContextForVar(const QCString &name)
static void addDocCrossReference(MemberDef *src,MemberDef *dst) static void addDocCrossReference(MemberDef *src,MemberDef *dst)
{ {
if (dst->isTypedef() || dst->isEnumerate()) return; // don't add types
//printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data()); //printf("addDocCrossReference src=%s,dst=%s\n",src->name().data(),dst->name().data());
if (Config_getBool("REFERENCED_BY_RELATION") && if (Config_getBool("REFERENCED_BY_RELATION") &&
(src->isFunction() || src->isSlot()) (src->isFunction() || src->isSlot())
......
...@@ -2655,6 +2655,13 @@ void Config::create() ...@@ -2655,6 +2655,13 @@ void Config::create()
TRUE TRUE
); );
cb->addDependency("HAVE_DOT"); cb->addDependency("HAVE_DOT");
cb = addBool(
"GROUP_GRAPHS",
"If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen \n"
"will generate a graph for groups, showing the direct groups dependencies\n",
TRUE
);
cb->addDependency("HAVE_DOT");
cb = addBool( cb = addBool(
"UML_LOOK", "UML_LOOK",
"If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n" "If the UML_LOOK tag is set to YES doxygen will generate inheritance and \n"
......
...@@ -197,6 +197,8 @@ class Definition ...@@ -197,6 +197,8 @@ class Definition
void writeNavigationPath(OutputList &ol) const; void writeNavigationPath(OutputList &ol) const;
protected: protected:
void setLocalName(const QCString name) { m_localName=name; }
int m_startBodyLine; // line number of the start of the definition int m_startBodyLine; // line number of the start of the definition
int m_endBodyLine; // line number of the end of the definition int m_endBodyLine; // line number of the end of the definition
FileDef *m_bodyDef; // file definition containing the function body FileDef *m_bodyDef; // file definition containing the function body
......
...@@ -27,9 +27,9 @@ DirDef::DirDef(const char *path) : Definition(path,1,path) ...@@ -27,9 +27,9 @@ DirDef::DirDef(const char *path) : Definition(path,1,path)
{ // remove everything till the last / { // remove everything till the last /
m_shortName = m_shortName.mid(pi+1); m_shortName = m_shortName.mid(pi+1);
} }
setLocalName(m_shortName);
m_fileList = new FileList; m_fileList = new FileList;
m_classSDict = new ClassSDict(17);
m_usedDirs = new QDict<UsedDir>(257); m_usedDirs = new QDict<UsedDir>(257);
m_usedDirs->setAutoDelete(TRUE); m_usedDirs->setAutoDelete(TRUE);
m_dirCount = g_dirCount++; m_dirCount = g_dirCount++;
...@@ -39,6 +39,8 @@ DirDef::DirDef(const char *path) : Definition(path,1,path) ...@@ -39,6 +39,8 @@ DirDef::DirDef(const char *path) : Definition(path,1,path)
DirDef::~DirDef() DirDef::~DirDef()
{ {
delete m_fileList;
delete m_usedDirs;
} }
bool DirDef::isLinkableInProject() const bool DirDef::isLinkableInProject() const
......
...@@ -57,9 +57,8 @@ class DirDef : public Definition ...@@ -57,9 +57,8 @@ class DirDef : public Definition
QCString shortName() const { return m_shortName; } QCString shortName() const { return m_shortName; }
void addSubDir(DirDef *subdir); void addSubDir(DirDef *subdir);
FileList * getFiles() const { return m_fileList; } FileList * getFiles() const { return m_fileList; }
ClassSDict * getClasses() const { return m_classSDict; }
void addFile(FileDef *fd); void addFile(FileDef *fd);
const QList<DirDef> &subDirs() const { return m_subdirs; } const DirList &subDirs() const { return m_subdirs; }
bool isCluster() const { return m_subdirs.count()>0; } bool isCluster() const { return m_subdirs.count()>0; }
int level() const { return m_level; } int level() const { return m_level; }
DirDef *parent() const { return m_parent; } DirDef *parent() const { return m_parent; }
...@@ -90,7 +89,6 @@ class DirDef : public Definition ...@@ -90,7 +89,6 @@ class DirDef : public Definition
QCString m_dispName; QCString m_dispName;
QCString m_shortName; QCString m_shortName;
FileList *m_fileList; // list of files in the group FileList *m_fileList; // list of files in the group
ClassSDict *m_classSDict; // list of classes in the group
int m_dirCount; int m_dirCount;
int m_level; int m_level;
DirDef *m_parent; DirDef *m_parent;
......
This diff is collapsed.
...@@ -32,6 +32,8 @@ class ClassSDict; ...@@ -32,6 +32,8 @@ class ClassSDict;
class MemberDef; class MemberDef;
class Definition; class Definition;
class DirDef; class DirDef;
class GroupDef;
class DotGroupCollaboration;
enum GraphOutputFormat { BITMAP , EPS }; enum GraphOutputFormat { BITMAP , EPS };
...@@ -66,6 +68,7 @@ class DotNode ...@@ -66,6 +68,7 @@ class DotNode
void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0); void deleteNode(DotNodeList &deletedList,SDict<DotNode> *skipNodes=0);
void removeChild(DotNode *n); void removeChild(DotNode *n);
void removeParent(DotNode *n); void removeParent(DotNode *n);
int findParent( DotNode *n );
void write(QTextStream &t,GraphType gt,GraphOutputFormat f, void write(QTextStream &t,GraphType gt,GraphOutputFormat f,
bool topDown,bool toChildren,int maxDistance,bool backArrows,bool reNumber); bool topDown,bool toChildren,int maxDistance,bool backArrows,bool reNumber);
int m_subgraphId; int m_subgraphId;
...@@ -100,6 +103,8 @@ class DotNode ...@@ -100,6 +103,8 @@ class DotNode
friend class DotInclDepGraph; friend class DotInclDepGraph;
friend class DotNodeList; friend class DotNodeList;
friend class DotCallGraph; friend class DotCallGraph;
friend class DotGroupCollaboration;
friend void writeDotGraph( friend void writeDotGraph(
DotNode *root, GraphType gt, DotNode *root, GraphType gt,
GraphOutputFormat f, const QCString &baseName, GraphOutputFormat f, const QCString &baseName,
...@@ -113,6 +118,13 @@ class DotNode ...@@ -113,6 +118,13 @@ class DotNode
int distance, bool backArrows int distance, bool backArrows
); );
}; };
inline
int DotNode::findParent( DotNode *n )
{
if( !m_parents )
return -1;
return m_parents->find(n);
}
class DotGfxHierarchyTable class DotGfxHierarchyTable
{ {
...@@ -217,6 +229,63 @@ class DotDirDeps ...@@ -217,6 +229,63 @@ class DotDirDeps
DirDef *m_dir; DirDef *m_dir;
}; };
class DotGroupCollaboration
{
public :
enum EdgeType
{ tmember = 0,
tclass,
tnamespace,
tfile,
tpages,
tdir,
thierarchy
};
class Link
{
public:
Link(const QCString lab,const QCString &u) : label(lab), url(u) {}
QCString label;
QCString url;
};
class Edge
{
public :
Edge(DotNode *start,DotNode *end,EdgeType type)
: pNStart(start), pNEnd(end), eType(type)
{ links.setAutoDelete(TRUE); }
DotNode* pNStart;
DotNode* pNEnd;
EdgeType eType;
QList<Link> links;
void write( QTextStream &t, int& curNodeId );
};
DotGroupCollaboration(GroupDef* gd);
~DotGroupCollaboration();
QCString writeGraph(QTextStream &t, GraphOutputFormat format,
const char *path,const char *relPath,
bool writeImageMap=TRUE);
void buildGraph(GroupDef* gd,int distance);
bool isTrivial() const;
private :
void addCollaborationMember( Definition* def, QCString& url, EdgeType eType );
void addMemberList( class MemberList* ml );
void writeGraphHeader(QTextStream &t);
Edge* addEdge( DotNode* _pNStart, DotNode* _pNEnd, EdgeType _eType,
const QCString& _label, const QCString& _url );
DotNode *m_rootNode;
int m_curNodeId;
QDict<DotNode> *m_usedNodes;
QCString m_diskName;
QList<Edge> m_edges;
};
void generateGraphLegend(const char *path); void generateGraphLegend(const char *path);
void writeDotGraphFromFile(const char *inFile,const char *outDir, void writeDotGraphFromFile(const char *inFile,const char *outDir,
const char *outFile,GraphOutputFormat format); const char *outFile,GraphOutputFormat format);
......
...@@ -8470,6 +8470,7 @@ void parseInput() ...@@ -8470,6 +8470,7 @@ void parseInput()
if (fi.size()==0) if (fi.size()==0)
{ {
err("No input read, no output generated!\n"); err("No input read, no output generated!\n");
QDir().remove(tmpName);
delete root; delete root;
cleanUpDoxygen(); cleanUpDoxygen();
exit(1); exit(1);
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "pagedef.h" #include "pagedef.h"
#include "docparser.h" #include "docparser.h"
#include "searchindex.h" #include "searchindex.h"
#include "dot.h"
GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
const char *refFileName) : Definition(df,dl,na) const char *refFileName) : Definition(df,dl,na)
...@@ -483,6 +484,23 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -483,6 +484,23 @@ void GroupDef::writeDocumentation(OutputList &ol)
} }
} }
if (Config_getBool("HAVE_DOT") && Config_getBool("GROUP_GRAPHS") )
{
DotGroupCollaboration graph(this);
if (!graph.isTrivial())
{
msg("Generating dependency graph for group %s\n",qualifiedName().data());
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
ol.newParagraph();
ol.startGroupCollaboration();
ol.parseText(theTranslator->trCollaborationDiagram(title));
ol.endGroupCollaboration(graph);
ol.popGeneratorState();
}
}
if (Config_getBool("DETAILS_AT_TOP")) if (Config_getBool("DETAILS_AT_TOP"))
{ {
writeDetailedDocumentation(ol); writeDetailedDocumentation(ol);
......
...@@ -112,6 +112,7 @@ class GroupDef : public Definition ...@@ -112,6 +112,7 @@ class GroupDef : public Definition
GroupList * getSubGroups() const { return groupList; } GroupList * getSubGroups() const { return groupList; }
PageSDict * getPages() const { return pageDict; } PageSDict * getPages() const { return pageDict; }
DirList * getDirs() const { return dirList; } DirList * getDirs() const { return dirList; }
MemberList* getMembers() const { return allMemberList; }
protected: protected:
void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
......
...@@ -1260,6 +1260,17 @@ void HtmlGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -1260,6 +1260,17 @@ void HtmlGenerator::endInclDepGraph(DotInclDepGraph &g)
g.writeGraph(t,BITMAP,dir,relPath); g.writeGraph(t,BITMAP,dir,relPath);
} }
void HtmlGenerator::startGroupCollaboration()
{
}
void HtmlGenerator::endGroupCollaboration(DotGroupCollaboration &g)
{
g.writeGraph(t,BITMAP,dir,relPath);
}
void HtmlGenerator::startCallGraph() void HtmlGenerator::startCallGraph()
{ {
} }
......
...@@ -190,6 +190,8 @@ class HtmlGenerator : public OutputGenerator ...@@ -190,6 +190,8 @@ class HtmlGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &g); void endDotGraph(DotClassGraph &g);
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &g); void endInclDepGraph(DotInclDepGraph &g);
void startGroupCollaboration();
void endGroupCollaboration(DotGroupCollaboration &g);
void startCallGraph(); void startCallGraph();
void endCallGraph(DotCallGraph &g); void endCallGraph(DotCallGraph &g);
void startDirDepGraph(); void startDirDepGraph();
......
...@@ -174,7 +174,7 @@ void HtmlHelpIndex::writeFields(QTextStream &t) ...@@ -174,7 +174,7 @@ void HtmlHelpIndex::writeFields(QTextStream &t)
{ // finish old list at level 2 { // finish old list at level 2
if (level2Started) t << " </UL>" << endl; if (level2Started) t << " </UL>" << endl;
level2Started=FALSE; level2Started=FALSE;
// <Antony> // <Antony>
// Added this code so that an item with only one subitem is written // Added this code so that an item with only one subitem is written
// without any subitem. // without any subitem.
......
...@@ -1448,6 +1448,15 @@ void LatexGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -1448,6 +1448,15 @@ void LatexGenerator::endInclDepGraph(DotInclDepGraph &g)
g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),relPath); g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),relPath);
} }
void LatexGenerator::startGroupCollaboration()
{
}
void LatexGenerator::endGroupCollaboration(DotGroupCollaboration &g)
{
g.writeGraph(t,EPS,Config_getString("LATEX_OUTPUT"),relPath);
}
void LatexGenerator::startCallGraph() void LatexGenerator::startCallGraph()
{ {
} }
......
...@@ -184,6 +184,8 @@ class LatexGenerator : public OutputGenerator ...@@ -184,6 +184,8 @@ class LatexGenerator : public OutputGenerator
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &); void endInclDepGraph(DotInclDepGraph &);
void startCallGraph(); void startCallGraph();
void startGroupCollaboration();
void endGroupCollaboration(DotGroupCollaboration &g);
void endCallGraph(DotCallGraph &); void endCallGraph(DotCallGraph &);
void startDirDepGraph(); void startDirDepGraph();
void endDirDepGraph(DotDirDeps &g); void endDirDepGraph(DotDirDeps &g);
......
...@@ -229,6 +229,8 @@ class ManGenerator : public OutputGenerator ...@@ -229,6 +229,8 @@ class ManGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &) {} void endDotGraph(DotClassGraph &) {}
void startInclDepGraph() {} void startInclDepGraph() {}
void endInclDepGraph(DotInclDepGraph &) {} void endInclDepGraph(DotInclDepGraph &) {}
void startGroupCollaboration() {}
void endGroupCollaboration(DotGroupCollaboration &) {}
void startCallGraph() {} void startCallGraph() {}
void endCallGraph(DotCallGraph &) {} void endCallGraph(DotCallGraph &) {}
void startDirDepGraph() {} void startDirDepGraph() {}
......
...@@ -32,8 +32,10 @@ class DotInclDepGraph; ...@@ -32,8 +32,10 @@ class DotInclDepGraph;
class DotCallGraph; class DotCallGraph;
class DotDirDeps; class DotDirDeps;
class DotGfxHierarchyTable; class DotGfxHierarchyTable;
class DotGroupCollaboration;
class DocNode; class DocNode;
class MemberDef; class MemberDef;
class GroupDef;
/*! \brief Output interface for code parser. /*! \brief Output interface for code parser.
*/ */
...@@ -338,6 +340,8 @@ class OutputGenerator : public BaseOutputDocInterface ...@@ -338,6 +340,8 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endDotGraph(DotClassGraph &g) = 0; virtual void endDotGraph(DotClassGraph &g) = 0;
virtual void startInclDepGraph() = 0; virtual void startInclDepGraph() = 0;
virtual void endInclDepGraph(DotInclDepGraph &g) = 0; virtual void endInclDepGraph(DotInclDepGraph &g) = 0;
virtual void startGroupCollaboration() = 0;
virtual void endGroupCollaboration(DotGroupCollaboration &g) = 0;
virtual void startCallGraph() = 0; virtual void startCallGraph() = 0;
virtual void endCallGraph(DotCallGraph &g) = 0; virtual void endCallGraph(DotCallGraph &g) = 0;
virtual void startDirDepGraph() = 0; virtual void startDirDepGraph() = 0;
......
...@@ -268,6 +268,7 @@ FORALL1(DotInclDepGraph &a1,a1) ...@@ -268,6 +268,7 @@ FORALL1(DotInclDepGraph &a1,a1)
FORALL1(DotCallGraph &a1,a1) FORALL1(DotCallGraph &a1,a1)
FORALL1(DotDirDeps &a1,a1) FORALL1(DotDirDeps &a1,a1)
FORALL1(DotGfxHierarchyTable &a1,a1) FORALL1(DotGfxHierarchyTable &a1,a1)
FORALL1(DotGroupCollaboration &a1,a1)
FORALL1(SectionTypes a1,a1) FORALL1(SectionTypes a1,a1)
#if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE) #if defined(HAS_BOOL_TYPE) || defined(Q_HAS_BOOL_TYPE)
FORALL1(bool a1,a1) FORALL1(bool a1,a1)
......
...@@ -38,6 +38,7 @@ class DotDirDeps; ...@@ -38,6 +38,7 @@ class DotDirDeps;
class DotInclDepGraph; class DotInclDepGraph;
class DotGfxHierarchyTable; class DotGfxHierarchyTable;
class SectionDict; class SectionDict;
class DotGroupCollaboration;
class OutputList : public OutputDocInterface class OutputList : public OutputDocInterface
{ {
...@@ -327,6 +328,10 @@ class OutputList : public OutputDocInterface ...@@ -327,6 +328,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startDirDepGraph); } { forall(&OutputGenerator::startDirDepGraph); }
void endDirDepGraph(DotDirDeps &g) void endDirDepGraph(DotDirDeps &g)
{ forall(&OutputGenerator::endDirDepGraph,g); } { forall(&OutputGenerator::endDirDepGraph,g); }
void startGroupCollaboration()
{ forall(&OutputGenerator::startGroupCollaboration); }
void endGroupCollaboration(DotGroupCollaboration &g)
{ forall(&OutputGenerator::endGroupCollaboration,g); }
void writeGraphicalHierarchy(DotGfxHierarchyTable &g) void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
{ forall(&OutputGenerator::writeGraphicalHierarchy,g); } { forall(&OutputGenerator::writeGraphicalHierarchy,g); }
void startTextBlock(bool dense=FALSE) void startTextBlock(bool dense=FALSE)
...@@ -392,6 +397,7 @@ class OutputList : public OutputDocInterface ...@@ -392,6 +397,7 @@ class OutputList : public OutputDocInterface
FORALLPROTO1(DotClassGraph &); FORALLPROTO1(DotClassGraph &);
FORALLPROTO1(DotInclDepGraph &); FORALLPROTO1(DotInclDepGraph &);
FORALLPROTO1(DotCallGraph &); FORALLPROTO1(DotCallGraph &);
FORALLPROTO1(DotGroupCollaboration &);
FORALLPROTO1(DotDirDeps &); FORALLPROTO1(DotDirDeps &);
FORALLPROTO1(DotGfxHierarchyTable &); FORALLPROTO1(DotGfxHierarchyTable &);
FORALLPROTO1(SectionTypes); FORALLPROTO1(SectionTypes);
......
...@@ -2236,6 +2236,14 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) ...@@ -2236,6 +2236,14 @@ void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
DBG_RTF(t << "{\\comment (endInclDepGraph)}" << endl) DBG_RTF(t << "{\\comment (endInclDepGraph)}" << endl)
} }
void RTFGenerator::startGroupCollaboration()
{
}
void RTFGenerator::endGroupCollaboration(DotGroupCollaboration &)
{
}
void RTFGenerator::startCallGraph() void RTFGenerator::startCallGraph()
{ {
DBG_RTF(t << "{\\comment (startCallGraph)}" << endl) DBG_RTF(t << "{\\comment (startCallGraph)}" << endl)
......
...@@ -225,6 +225,8 @@ class RTFGenerator : public OutputGenerator ...@@ -225,6 +225,8 @@ class RTFGenerator : public OutputGenerator
void endDotGraph(DotClassGraph &); void endDotGraph(DotClassGraph &);
void startInclDepGraph(); void startInclDepGraph();
void endInclDepGraph(DotInclDepGraph &); void endInclDepGraph(DotInclDepGraph &);
void startGroupCollaboration();
void endGroupCollaboration(DotGroupCollaboration &g);
void startCallGraph(); void startCallGraph();
void endCallGraph(DotCallGraph &); void endCallGraph(DotCallGraph &);
void startDirDepGraph(); void startDirDepGraph();
......
...@@ -376,7 +376,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l ...@@ -376,7 +376,7 @@ static void addXRefItem(const char *listName,const char *itemTitle,const char *l
SectionInfo *si=new SectionInfo(listName,anchorLabel, SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor); sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si); Doxygen::sectionDict.insert(anchorLabel,si);
current->anchors->append(new SectionInfo(*si)); current->anchors->append(si);
} }
current->brief = slString.copy(); // restore orginial brief desc. current->brief = slString.copy(); // restore orginial brief desc.
} }
...@@ -2303,6 +2303,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2303,6 +2303,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->startLine = yyLineNr; current->startLine = yyLineNr;
current_root->addSubEntry( current ) ; current_root->addSubEntry( current ) ;
} }
else
{
delete current;
}
if ( *yytext == ',') if ( *yytext == ',')
{ {
current = new Entry(*current); current = new Entry(*current);
...@@ -3665,6 +3669,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3665,6 +3669,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
} }
else else
{ {
if (current->section == Entry::ENUM_SEC)
{ // found "enum a b" -> variable
current->section = Entry::VARIABLE_SEC ;
}
current->type += ' ' ; current->type += ' ' ;
current->type += current->name ; current->type += current->name ;
current->name = yytext ; current->name = yytext ;
...@@ -5983,6 +5991,7 @@ static void parseCompounds(Entry *rt) ...@@ -5983,6 +5991,7 @@ static void parseCompounds(Entry *rt)
insideObjC = ce->objc; insideObjC = ce->objc;
//printf("---> Inner block starts at line %d\n",yyLineNr); //printf("---> Inner block starts at line %d\n",yyLineNr);
//current->reset(); //current->reset();
if (current) delete current;
current = new Entry; current = new Entry;
gstat = FALSE; gstat = FALSE;
int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2; int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2;
......
...@@ -888,6 +888,102 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t) ...@@ -888,6 +888,102 @@ static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
t << " </listofallmembers>" << endl; t << " </listofallmembers>" << endl;
} }
static void writeInnerClasses(const ClassSDict *cl,QTextStream &t)
{
if (cl)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->name().find('@')!=-1) // skip anonymous scopes
{
t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
}
}
}
}
static void writeInnerNamespaces(const NamespaceSDict *nl,QTextStream &t)
{
if (nl)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
if (nd->name().find('@')!=-1) // skip anonymouse scopes
{
t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
}
}
}
}
static void writeInnerFiles(const FileList *fl,QTextStream &t)
{
if (fl)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd;
for (fli.toFirst();(fd=fli.current());++fli)
{
t << " <innerfile refid=\"" << fd->getOutputFileBase()
<< "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
}
}
}
static void writeInnerPages(const PageSDict *pl,QTextStream &t)
{
if (pl)
{
PageSDict::Iterator pli(*pl);
PageDef *pd;
for (pli.toFirst();(pd=pli.current());++pli)
{
t << " <innerpage refid=\"" << pd->getOutputFileBase();
if (pd->getGroupDef())
{
t << "_" << pd->name();
}
t << "\">" << convertToXML(pd->title()) << "</innerpage>" << endl;
}
}
}
static void writeInnerGroups(const GroupList *gl,QTextStream &t)
{
if (gl)
{
GroupListIterator gli(*gl);
GroupDef *sgd;
for (gli.toFirst();(sgd=gli.current());++gli)
{
t << " <innergroup refid=\"" << sgd->getOutputFileBase()
<< "\">" << convertToXML(sgd->groupTitle())
<< "</innergroup>" << endl;
}
}
}
static void writeInnerDirs(const DirList *dl,QTextStream &t)
{
if (dl)
{
QListIterator<DirDef> subdirs(*dl);
DirDef *subdir;
for (subdirs.toFirst();(subdir=subdirs.current());++subdirs)
{
t << " <innerdir refid=\"" << subdir->getOutputFileBase()
<< "\">" << convertToXML(subdir->displayName()) << "</innerdir>" << endl;
}
}
}
static void generateXMLForClass(ClassDef *cd,QTextStream &ti) static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
{ {
// + brief description // + brief description
...@@ -1027,18 +1123,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1027,18 +1123,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
} }
} }
ClassSDict *cl = cd->getInnerClasses(); writeInnerClasses(cd->getInnerClasses(),t);
if (cl)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
}
}
writeTemplateList(cd,t); writeTemplateList(cd,t);
MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict); MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
...@@ -1152,28 +1237,9 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti) ...@@ -1152,28 +1237,9 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti)
writeXMLString(t,nd->name()); writeXMLString(t,nd->name());
t << "</compoundname>" << endl; t << "</compoundname>" << endl;
ClassSDict *cl = nd->classSDict; writeInnerClasses(nd->classSDict,t);
if (cl) writeInnerNamespaces(nd->namespaceSDict,t);
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
}
}
NamespaceSDict *nl = nd->namespaceSDict;
if (nl)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
}
}
MemberGroupSDict::Iterator mgli(*nd->memberGroupSDict); MemberGroupSDict::Iterator mgli(*nd->memberGroupSDict);
MemberGroup *mg; MemberGroup *mg;
for (;(mg=mgli.current());++mgli) for (;(mg=mgli.current());++mgli)
...@@ -1287,28 +1353,8 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti) ...@@ -1287,28 +1353,8 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti)
t << " </invincdepgraph>" << endl; t << " </invincdepgraph>" << endl;
} }
ClassSDict *cl = fd->classSDict; writeInnerClasses(fd->classSDict,t);
if (cl) writeInnerNamespaces(fd->namespaceSDict,t);
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
}
}
NamespaceSDict *nl = fd->namespaceSDict;
if (nl)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
}
}
MemberGroupSDict::Iterator mgli(*fd->memberGroupSDict); MemberGroupSDict::Iterator mgli(*fd->memberGroupSDict);
MemberGroup *mg; MemberGroup *mg;
...@@ -1380,67 +1426,11 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti) ...@@ -1380,67 +1426,11 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>" << endl; t << " <compoundname>" << convertToXML(gd->name()) << "</compoundname>" << endl;
t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl; t << " <title>" << convertToXML(gd->groupTitle()) << "</title>" << endl;
FileList *fl = gd->getFiles(); writeInnerFiles(gd->getFiles(),t);
if (fl) writeInnerClasses(gd->getClasses(),t);
{ writeInnerNamespaces(gd->getNamespaces(),t);
QListIterator<FileDef> fli(*fl); writeInnerPages(gd->getPages(),t);
FileDef *fd = fl->first(); writeInnerGroups(gd->getSubGroups(),t);
for (fli.toFirst();(fd=fli.current());++fli)
{
t << " <innerfile refid=\"" << fd->getOutputFileBase()
<< "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
}
}
ClassSDict *cl = gd->getClasses();
if (cl)
{
ClassSDict::Iterator cli(*cl);
ClassDef *cd;
for (cli.toFirst();(cd=cli.current());++cli)
{
t << " <innerclass refid=\"" << cd->getOutputFileBase()
<< "\">" << convertToXML(cd->name()) << "</innerclass>" << endl;
}
}
NamespaceSDict *nl = gd->getNamespaces();
if (nl)
{
NamespaceSDict::Iterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst();(nd=nli.current());++nli)
{
t << " <innernamespace refid=\"" << nd->getOutputFileBase()
<< "\">" << convertToXML(nd->name()) << "</innernamespace>" << endl;
}
}
PageSDict *pl = gd->getPages();
if (pl)
{
PageSDict::Iterator pli(*pl);
PageDef *pd;
for (pli.toFirst();(pd=pli.current());++pli)
{
t << " <innerpage refid=\"" << pd->getOutputFileBase();
if (pd->getGroupDef())
{
t << "_" << pd->name();
}
t << "\">" << convertToXML(pd->title()) << "</innerpage>" << endl;
}
}
GroupList *gl = gd->getSubGroups();
if (gl)
{
GroupListIterator gli(*gl);
GroupDef *sgd;
for (gli.toFirst();(sgd=gli.current());++gli)
{
t << " <innergroup refid=\"" << sgd->getOutputFileBase()
<< "\">" << convertToXML(sgd->groupTitle())
<< "</innergroup>" << endl;
}
}
MemberGroupSDict::Iterator mgli(*gd->memberGroupSDict); MemberGroupSDict::Iterator mgli(*gd->memberGroupSDict);
MemberGroup *mg; MemberGroup *mg;
...@@ -1492,25 +1482,9 @@ static void generateXMLForDir(DirDef *dd,QTextStream &ti) ...@@ -1492,25 +1482,9 @@ static void generateXMLForDir(DirDef *dd,QTextStream &ti)
<< dd->getOutputFileBase() << "\" kind=\"dir\">" << endl; << dd->getOutputFileBase() << "\" kind=\"dir\">" << endl;
t << " <compoundname>" << convertToXML(dd->displayName()) << "</compoundname>" << endl; t << " <compoundname>" << convertToXML(dd->displayName()) << "</compoundname>" << endl;
QListIterator<DirDef> subdirs(dd->subDirs()); writeInnerDirs(&dd->subDirs(),t);
DirDef *subdir; writeInnerFiles(dd->getFiles(),t);
for (subdirs.toFirst();(subdir=subdirs.current());++subdirs)
{
t << " <innerdir refid=\"" << subdir->getOutputFileBase()
<< "\">" << convertToXML(subdir->displayName()) << "</innerdir>" << endl;
}
FileList *fl = dd->getFiles();
if (fl)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd = fl->first();
for (fli.toFirst();(fd=fli.current());++fli)
{
t << " <innerfile refid=\"" << fd->getOutputFileBase()
<< "\">" << convertToXML(fd->name()) << "</innerfile>" << endl;
}
}
t << " <briefdescription>" << endl; t << " <briefdescription>" << endl;
writeXMLDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription()); writeXMLDocBlock(t,dd->briefFile(),dd->briefLine(),dd,0,dd->briefDescription());
t << " </briefdescription>" << endl; t << " </briefdescription>" << endl;
......
...@@ -92,7 +92,7 @@ SOURCE=..\qtools\qcollection.cpp ...@@ -92,7 +92,7 @@ SOURCE=..\qtools\qcollection.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
SOURCE=..\qtools\qcstring.cpp SOURCE=..\qtools\scstring.cpp
# End Source File # End Source File
# Begin Source File # Begin Source File
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment