Commit 7e81d44c authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.5.1

parent 5e24df52
DOXYGEN Version 1.5.0 DOXYGEN Version 1.5.1
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 (17 October 2006) Dimitri van Heesch (29 October 2006)
...@@ -140,5 +140,9 @@ rpmbinary: dist ...@@ -140,5 +140,9 @@ rpmbinary: dist
gzip -9v $(DISTDIR).src.tar gzip -9v $(DISTDIR).src.tar
rpmbuild -tb $(DISTDIR).src.tar.gz rpmbuild -tb $(DISTDIR).src.tar.gz
ctags:
ctags -f tags src addon/doxywizard qtools
FORCE: FORCE:
DOXYGEN Version 1.5.0 DOXYGEN Version 1.5.1
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) (17 October 2006) Dimitri van Heesch (dimitri@stack.nl) (29 October 2006)
...@@ -291,7 +291,8 @@ int main(int argc,char **argv) ...@@ -291,7 +291,8 @@ int main(int argc,char **argv)
} }
// remove temporary files // remove temporary files
unlink("/tmp/doxygen/doxygen_objdb.tmp"); if (!Doxygen::objDBFileName.isEmpty()) unlink(Doxygen::objDBFileName);
if (!Doxygen::entryDBFileName.isEmpty()) unlink(Doxygen::entryDBFileName);
// clean up after us // clean up after us
rmdir("/tmp/doxygen"); rmdir("/tmp/doxygen");
......
...@@ -1316,7 +1316,7 @@ void MainWidget::about() ...@@ -1316,7 +1316,7 @@ void MainWidget::about()
QTextStream t(&msg,IO_WriteOnly); QTextStream t(&msg,IO_WriteOnly);
t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+ t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+
" on your source files.</center><p><br>" " on your source files.</center><p><br>"
"<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2005</center><p>" "<center>Written by<br> Dimitri van Heesch<br>&copy; 2000-2006</center><p>"
"</qt>"; "</qt>";
QMessageBox::about(this,"Doxygen GUI",msg); QMessageBox::about(this,"Doxygen GUI",msg);
} }
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
doxygen_version_major=1 doxygen_version_major=1
doxygen_version_minor=5 doxygen_version_minor=5
doxygen_version_revision=0 doxygen_version_revision=1
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package. #NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=NO doxygen_version_mmn=NO
......
...@@ -3061,7 +3061,9 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md) ...@@ -3061,7 +3061,9 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
ml->inSort(md); ml->inSort(md);
else else
ml->append(md); ml->append(md);
md->setSectionList(this,ml);
// for members in the declaration lists we set the section, needed for member grouping
if ((ml->listType()&MemberList::detailedLists)==0) md->setSectionList(this,ml);
} }
void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title, void ClassDef::writeMemberDeclarations(OutputList &ol,MemberList::ListType lt,const QCString &title,
......
...@@ -1674,6 +1674,10 @@ void DocCopy::parse() ...@@ -1674,6 +1674,10 @@ void DocCopy::parse()
g_styleStack.clear(); g_styleStack.clear();
g_nodeStack.clear(); g_nodeStack.clear();
g_copyStack.append(def); g_copyStack.append(def);
// make sure the descriptions end with a newline, so the parser will correctly
// handle them in all cases.
brief+='\n';
doc+='\n';
internalValidatingParseDoc(this,m_children,brief); internalValidatingParseDoc(this,m_children,brief);
internalValidatingParseDoc(this,m_children,doc); internalValidatingParseDoc(this,m_children,doc);
g_copyStack.remove(def); g_copyStack.remove(def);
......
...@@ -72,7 +72,6 @@ ...@@ -72,7 +72,6 @@
#include "store.h" #include "store.h"
#include "marshal.h" #include "marshal.h"
#define RECURSE_ENTRYTREE(func,var) \ #define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \ do { if (var->children()) { \
EntryNavListIterator eli(*var->children()); \ EntryNavListIterator eli(*var->children()); \
...@@ -85,6 +84,11 @@ ...@@ -85,6 +84,11 @@
#define pclose _pclose #define pclose _pclose
#endif #endif
#if !defined(_WIN32) || defined(__CYGWIN__)
#include <signal.h>
#define HAS_SIGNALS
#endif
// globally accessible variables // globally accessible variables
ClassSDict *Doxygen::classSDict = 0; ClassSDict *Doxygen::classSDict = 0;
ClassSDict *Doxygen::hiddenClasses = 0; ClassSDict *Doxygen::hiddenClasses = 0;
...@@ -129,6 +133,8 @@ QCString Doxygen::htmlFileExtension; ...@@ -129,6 +133,8 @@ QCString Doxygen::htmlFileExtension;
bool Doxygen::suppressDocWarnings = FALSE; bool Doxygen::suppressDocWarnings = FALSE;
ObjCache *Doxygen::symbolCache = 0; ObjCache *Doxygen::symbolCache = 0;
Store *Doxygen::symbolStorage; Store *Doxygen::symbolStorage;
QCString Doxygen::objDBFileName;
QCString Doxygen::entryDBFileName;
// locally accessible globals // locally accessible globals
static QDict<EntryNav> classEntries(1009); static QDict<EntryNav> classEntries(1009);
...@@ -144,6 +150,7 @@ FileStorage *g_storage = 0; ...@@ -144,6 +150,7 @@ FileStorage *g_storage = 0;
QCString spaces; QCString spaces;
void clearAll() void clearAll()
{ {
inputFiles.clear(); inputFiles.clear();
...@@ -6299,39 +6306,41 @@ static void addEnumValuesToEnums(EntryNav *rootNav) ...@@ -6299,39 +6306,41 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
if (cd && !name.isEmpty()) // found a enum inside a compound if (cd && !name.isEmpty()) // found a enum inside a compound
{ {
//printf("Enum `%s'::`%s'\n",cd->name(),name.data()); //printf("Enum in class `%s'::`%s'\n",cd->name().data(),name.data());
fd=0; fd=0;
mnsd=Doxygen::memberNameSDict; mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE; isGlobal=FALSE;
} }
else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace else if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') // found enum inside namespace
{ {
//printf("Enum in namespace `%s'::`%s'\n",nd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict; mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE; isGlobal=TRUE;
} }
else // found a global enum else // found a global enum
{ {
fd=rootNav->fileDef(); fd=rootNav->fileDef();
//printf("Enum in file `%s': `%s'\n",fd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict; mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE; isGlobal=TRUE;
} }
if (!name.isEmpty()) if (!name.isEmpty())
{ {
MemberName *mn = mnsd->find(name); MemberName *mn = mnsd->find(name); // for all members with this name
if (mn) if (mn)
{ {
MemberNameIterator mni(*mn); MemberNameIterator mni(*mn);
MemberDef *md; MemberDef *md;
for (mni.toFirst(); (md=mni.current()) ; ++mni) for (mni.toFirst(); (md=mni.current()) ; ++mni) // for each enum in this list
{ {
if (md->isEnumerate() && rootNav->children()) if (md->isEnumerate() && rootNav->children())
{ {
EntryNavListIterator eli(*rootNav->children()); EntryNavListIterator eli(*rootNav->children()); // for each enum value
EntryNav *e; EntryNav *e;
for (;(e=eli.current());++eli) for (;(e=eli.current());++eli)
{ {
//printf("e->name=%s isRelated=%d\n",e->name.data(),isRelated); //printf("e->name=%s isRelated=%d\n",e->name().data(),isRelated);
MemberName *fmn=0; MemberName *fmn=0;
MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd; MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd;
if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()])) if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
...@@ -6341,9 +6350,10 @@ static void addEnumValuesToEnums(EntryNav *rootNav) ...@@ -6341,9 +6350,10 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
MemberDef *fmd; MemberDef *fmd;
for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni) for (fmni.toFirst(); (fmd=fmni.current()) ; ++fmni)
{ {
if (fmd->isEnumValue()) if (fmd->isEnumValue() && fmd->getOuterScope()==md->getOuterScope()) // in same scope
{ {
//printf("found enum value with same name\n"); //printf("found enum value with same name %s in scope %s\n",
// fmd->name().data(),fmd->getOuterScope()->name().data());
if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@') if (nd && !nd->name().isEmpty() && nd->name().at(0)!='@')
{ {
NamespaceDef *fnd=fmd->getNamespaceDef(); NamespaceDef *fnd=fmd->getNamespaceDef();
...@@ -8208,7 +8218,7 @@ static int readDir(QFileInfo *fi, ...@@ -8208,7 +8218,7 @@ static int readDir(QFileInfo *fi,
{ {
if (errorIfNotExist) if (errorIfNotExist)
{ {
err("Error: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data()); err("Warning: source %s is not a readable file or directory... skipping.\n",cfi->absFilePath().data());
} }
} }
else if (cfi->isFile() && else if (cfi->isFile() &&
...@@ -8297,7 +8307,7 @@ static int readFileOrDirectory(const char *s, ...@@ -8297,7 +8307,7 @@ static int readFileOrDirectory(const char *s,
{ {
if (errorIfNotExist) if (errorIfNotExist)
{ {
err("Error: source %s is not a readable file or directory... skipping.\n",s); err("Warning: source %s is not a readable file or directory... skipping.\n",s);
} }
} }
else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink()) else if (!Config_getBool("EXCLUDE_SYMLINKS") || !fi.isSymLink())
...@@ -8366,7 +8376,7 @@ static void readFormulaRepository() ...@@ -8366,7 +8376,7 @@ static void readFormulaRepository()
int se=line.find(':'); // find name and text separator. int se=line.find(':'); // find name and text separator.
if (se==-1) if (se==-1)
{ {
err("Error: formula.repository is corrupted!\n"); err("Warning: formula.repository is corrupted!\n");
break; break;
} }
else else
...@@ -8556,7 +8566,7 @@ void initDoxygen() ...@@ -8556,7 +8566,7 @@ void initDoxygen()
setlocale(LC_ALL,""); setlocale(LC_ALL,"");
setlocale(LC_NUMERIC,"C"); setlocale(LC_NUMERIC,"C");
#endif #endif
//Doxygen::symbolMap->setAutoDelete(TRUE); //Doxygen::symbolMap->setAutoDelete(TRUE);
Doxygen::runningTime.start(); Doxygen::runningTime.start();
...@@ -8746,7 +8756,7 @@ void readConfiguration(int argc, char **argv) ...@@ -8746,7 +8756,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage)) if (!setTranslator(outputLanguage))
{ {
err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); err("Warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
} }
QFile f; QFile f;
...@@ -8794,7 +8804,7 @@ void readConfiguration(int argc, char **argv) ...@@ -8794,7 +8804,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage)) if (!setTranslator(outputLanguage))
{ {
err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data()); err("Warning: Output language %s not supported! Using English instead.\n", outputLanguage.data());
} }
QFile f; QFile f;
...@@ -8920,7 +8930,7 @@ void checkConfiguration() ...@@ -8920,7 +8930,7 @@ void checkConfiguration()
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE"); QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
if (!setTranslator(outputLanguage)) if (!setTranslator(outputLanguage))
{ {
err("Error: Output language %s not supported! Using English instead.\n", err("Warning: Output language %s not supported! Using English instead.\n",
outputLanguage.data()); outputLanguage.data());
} }
QStrList &includePath = Config_getList("INCLUDE_PATH"); QStrList &includePath = Config_getList("INCLUDE_PATH");
...@@ -8944,6 +8954,24 @@ void checkConfiguration() ...@@ -8944,6 +8954,24 @@ void checkConfiguration()
} }
#ifdef HAS_SIGNALS
static void stopDoxygen(int)
{
QDir thisDir;
msg("Cleaning up...\n");
if (!Doxygen::entryDBFileName.isEmpty())
{
thisDir.remove(Doxygen::entryDBFileName);
}
if (!Doxygen::objDBFileName.isEmpty())
{
thisDir.remove(Doxygen::objDBFileName);
}
exit(1);
}
#endif
void parseInput() void parseInput()
{ {
/************************************************************************** /**************************************************************************
...@@ -8986,9 +9014,19 @@ void parseInput() ...@@ -8986,9 +9014,19 @@ void parseInput()
// ~2.0 MByte "overhead" // ~2.0 MByte "overhead"
Doxygen::symbolStorage = new Store; Doxygen::symbolStorage = new Store;
if (Doxygen::symbolStorage->open(outputDirectory+"/doxygen_objdb.tmp")==-1) #ifdef HAS_SIGNALS
signal(SIGINT, stopDoxygen);
#endif
uint pid = iPid();
Doxygen::objDBFileName.sprintf("doxygen_objdb_%d.tmp",pid);
Doxygen::objDBFileName.prepend(outputDirectory+"/");
Doxygen::entryDBFileName.sprintf("doxygen_entrydb_%d.tmp",pid);
Doxygen::entryDBFileName.prepend(outputDirectory+"/");
if (Doxygen::symbolStorage->open(Doxygen::objDBFileName)==-1)
{ {
err("Failed to open temporary file %s\n",(outputDirectory+"/doxygen_objdb.tmp").data()); err("Failed to open temporary file %s\n",Doxygen::objDBFileName.data());
exit(1); exit(1);
} }
...@@ -9265,11 +9303,11 @@ void parseInput() ...@@ -9265,11 +9303,11 @@ void parseInput()
**************************************************************************/ **************************************************************************/
g_storage = new FileStorage; g_storage = new FileStorage;
g_storage->setName(outputDirectory+"/doxygen_entrydb.tmp"); g_storage->setName(Doxygen::entryDBFileName);
if (!g_storage->open(IO_WriteOnly)) if (!g_storage->open(IO_WriteOnly))
{ {
err("Failed to create temporary storage file %s/doxygen_entrydb.tmp\n", err("Failed to create temporary storage file %s\n",
outputDirectory.data()); Doxygen::entryDBFileName.data());
exit(1); exit(1);
} }
Entry *root=new Entry; Entry *root=new Entry;
...@@ -9294,8 +9332,8 @@ void parseInput() ...@@ -9294,8 +9332,8 @@ void parseInput()
g_storage->close(); g_storage->close();
if (!g_storage->open(IO_ReadOnly)) if (!g_storage->open(IO_ReadOnly))
{ {
err("Failed to open temporary storage file %s/doxygen_entrydb.tmp for reading", err("Failed to open temporary storage file %s for reading",
outputDirectory.data()); Doxygen::entryDBFileName.data());
exit(1); exit(1);
} }
...@@ -9430,7 +9468,7 @@ void parseInput() ...@@ -9430,7 +9468,7 @@ void parseInput()
g_storage=0; g_storage=0;
QDir thisDir; QDir thisDir;
thisDir.remove(outputDirectory+"/doxygen_entrydb.tmp"); thisDir.remove(Doxygen::entryDBFileName);
msg("Determining which enums are documented\n"); msg("Determining which enums are documented\n");
findDocumentedEnumValues(); findDocumentedEnumValues();
...@@ -9776,7 +9814,7 @@ void generateOutput() ...@@ -9776,7 +9814,7 @@ void generateOutput()
finializeDocParser(); finializeDocParser();
Doxygen::symbolStorage->close(); Doxygen::symbolStorage->close();
QDir thisDir; QDir thisDir;
thisDir.remove(Config_getString("OUTPUT_DIRECTORY")+"/doxygen_objdb.tmp"); thisDir.remove(Doxygen::objDBFileName);
Config::deleteInstance(); Config::deleteInstance();
QTextCodec::deleteAllCodecs(); QTextCodec::deleteAllCodecs();
delete Doxygen::symbolCache; delete Doxygen::symbolCache;
......
...@@ -121,6 +121,8 @@ class Doxygen ...@@ -121,6 +121,8 @@ class Doxygen
static bool suppressDocWarnings; static bool suppressDocWarnings;
static ObjCache *symbolCache; static ObjCache *symbolCache;
static Store *symbolStorage; static Store *symbolStorage;
static QCString objDBFileName;
static QCString entryDBFileName;
}; };
void initDoxygen(); void initDoxygen();
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "marshal.h" #include "marshal.h"
#include "util.h" #include "util.h"
#include "section.h" #include "section.h"
#include "doxygen.h"
int Entry::num=0; int Entry::num=0;
...@@ -394,7 +395,8 @@ static bool loadEntry(Entry *e,FileStorage *f) ...@@ -394,7 +395,8 @@ static bool loadEntry(Entry *e,FileStorage *f)
uint header=unmarshalUInt(f); uint header=unmarshalUInt(f);
if (header!=HEADER) if (header!=HEADER)
{ {
printf("Internal error: Invalid header for entry in storage file: %x. Disk full?\n",header); printf("Internal error: Invalid header %x for entry in storage file %s\n",
header,Doxygen::entryDBFileName.data());
exit(1); exit(1);
} }
e->protection = (Protection)unmarshalInt(f); e->protection = (Protection)unmarshalInt(f);
......
...@@ -840,6 +840,13 @@ void FileDef::addUsingDirective(NamespaceDef *nd) ...@@ -840,6 +840,13 @@ void FileDef::addUsingDirective(NamespaceDef *nd)
{ {
usingDirList->append(nd->qualifiedName(),nd); usingDirList->append(nd->qualifiedName(),nd);
} }
//printf("%p: FileDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
NamespaceSDict *FileDef::getUsedNamespaces() const
{
//printf("%p: FileDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return usingDirList;
} }
void FileDef::addUsingDeclaration(Definition *d) void FileDef::addUsingDeclaration(Definition *d)
...@@ -917,7 +924,10 @@ void FileDef::addIncludedUsingDirectives() ...@@ -917,7 +924,10 @@ void FileDef::addIncludedUsingDirectives()
if (usingDirList==0) usingDirList = new NamespaceSDict; if (usingDirList==0) usingDirList = new NamespaceSDict;
//printf("Prepending used namespace %s to the list of file %s\n", //printf("Prepending used namespace %s to the list of file %s\n",
// nd->name().data(),name().data()); // nd->name().data(),name().data());
usingDirList->prepend(nd->qualifiedName(),nd); if (usingDirList->find(nd->qualifiedName())==0) // not yet added
{
usingDirList->prepend(nd->qualifiedName(),nd);
}
} }
} }
} }
......
...@@ -150,7 +150,7 @@ class FileDef : public Definition ...@@ -150,7 +150,7 @@ class FileDef : public Definition
DirDef *getDirDef() const { return dir; } DirDef *getDirDef() const { return dir; }
void addUsingDirective(NamespaceDef *nd); void addUsingDirective(NamespaceDef *nd);
NamespaceSDict *getUsedNamespaces() const { return usingDirList; } NamespaceSDict *getUsedNamespaces() const;
void addUsingDeclaration(Definition *def); void addUsingDeclaration(Definition *def);
SDict<Definition> *getUsedClasses() const { return usingDeclList; } SDict<Definition> *getUsedClasses() const { return usingDeclList; }
void combineUsingRelations(); void combineUsingRelations();
......
...@@ -1021,18 +1021,33 @@ void LatexDocVisitor::filter(const char *str) ...@@ -1021,18 +1021,33 @@ void LatexDocVisitor::filter(const char *str)
void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor) void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor)
{ {
if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS")) if (ref.isEmpty() && Config_getBool("PDF_HYPERLINKS")) // internal PDF link
{ {
m_t << "\\hyperlink{"; if (ref.isEmpty()) {
if (!file.isEmpty()) m_t << stripPath(file); m_t << "\\hyperlink{";
if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_"; if (!file.isEmpty()) m_t << stripPath(file);
if (!anchor.isEmpty()) m_t << anchor; if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_";
m_t << "}{"; if (!anchor.isEmpty()) m_t << anchor;
m_t << "}{";
}
else
{
QCString *dest;
m_t << "\\href{";
if ((dest=Doxygen::tagDestinationDict[ref])) m_t << *dest << "/";
if (!file.isEmpty()) m_t << file << Doxygen::htmlFileExtension;
if (!anchor.isEmpty()) m_t << "#" << anchor;
m_t << "}{";
}
} }
else else if (ref.isEmpty()) // internal non-PDF link
{ {
m_t << "\\doxyref{"; m_t << "\\doxyref{";
} }
else // external link
{
m_t << "{\\bf ";
}
} }
void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor) void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor)
......
...@@ -1002,7 +1002,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f, ...@@ -1002,7 +1002,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f,
} }
else else
{ {
t << "{\\bf"; t << "{\\bf ";
docify(text); docify(text);
t << "}"; t << "}";
} }
......
...@@ -37,15 +37,17 @@ class LockableObj ...@@ -37,15 +37,17 @@ class LockableObj
/*! Returns TRUE if the object is currently locked. */ /*! Returns TRUE if the object is currently locked. */
bool isLocked() const { return m_lockCount>0; } bool isLocked() const { return m_lockCount>0; }
protected: //VC++6.0 workaround
// protected:
/*! Called when the object is locked. */ /*! Called when the object is locked. */
virtual void lock() const = 0; virtual void lock() const = 0;
/*! Called when the object is unlocked. */ /*! Called when the object is unlocked. */
virtual void unlock() const = 0; virtual void unlock() const = 0;
private: //VC++6.0 workaround
template<class T> friend class LockingPtr; // private:
// template<class T> friend class LockingPtr;
int m_lockCount; int m_lockCount;
}; };
......
...@@ -818,7 +818,6 @@ QCString MemberDef::getOutputFileBase() const ...@@ -818,7 +818,6 @@ QCString MemberDef::getOutputFileBase() const
"Warning: Internal inconsistency: member %s does not belong to any" "Warning: Internal inconsistency: member %s does not belong to any"
" container!",name().data() " container!",name().data()
); );
exit(1);
return "dummy"; return "dummy";
} }
else if (separateMemberPages) else if (separateMemberPages)
...@@ -2634,6 +2633,7 @@ MemberList *MemberDef::getSectionList(Definition *d) const ...@@ -2634,6 +2633,7 @@ MemberList *MemberDef::getSectionList(Definition *d) const
void MemberDef::setSectionList(Definition *d, MemberList *sl) void MemberDef::setSectionList(Definition *d, MemberList *sl)
{ {
makeResident(); makeResident();
//printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
char key[20]; char key[20];
sprintf(key,"%p",d); sprintf(key,"%p",d);
if (m_impl->classSectionSDict==0) if (m_impl->classSectionSDict==0)
......
...@@ -79,6 +79,7 @@ void MemberGroup::insertMember(MemberDef *md) ...@@ -79,6 +79,7 @@ void MemberGroup::insertMember(MemberDef *md)
else if (inDeclSection==0) else if (inDeclSection==0)
{ {
inDeclSection = md->getSectionList(m_parent); inDeclSection = md->getSectionList(m_parent);
//printf("inDeclSection=%p type=%d\n",inDeclSection,inDeclSection->listType());
} }
memberList->append(md); memberList->append(md);
...@@ -133,7 +134,7 @@ void MemberGroup::addToDeclarationSection() ...@@ -133,7 +134,7 @@ void MemberGroup::addToDeclarationSection()
{ {
if (inDeclSection) if (inDeclSection)
{ {
//printf("Adding group %p to list %p\n",this,inDeclSection); //printf("Adding group %p to list %p (type=%d)\n",this,inDeclSection,inDeclSection->listType());
inDeclSection->addMemberGroup(this); inDeclSection->addMemberGroup(this);
} }
} }
......
...@@ -313,7 +313,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -313,7 +313,7 @@ void MemberList::writeDeclarations(OutputList &ol,
const char *title,const char *subtitle, bool showEnumValues const char *title,const char *subtitle, bool showEnumValues
/*, bool inGroup,bool countSubGroups*/) /*, bool inGroup,bool countSubGroups*/)
{ {
//printf("----- writeDeclaration() ----\n"); //printf("----- writeDeclaration() this=%p ----\n",this);
countDecMembers(showEnumValues); // count member not in group countDecMembers(showEnumValues); // count member not in group
if (numDecMembers()==0) return; if (numDecMembers()==0) return;
//printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n", //printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",
...@@ -341,6 +341,7 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -341,6 +341,7 @@ void MemberList::writeDeclarations(OutputList &ol,
MemberGroup *mg; MemberGroup *mg;
while ((mg=mgli.current())) while ((mg=mgli.current()))
{ {
//printf("mg->header=%s\n",mg->header().data());
bool hasHeader=mg->header()!="[NOHEADER]"; bool hasHeader=mg->header()!="[NOHEADER]";
ol.startMemberGroupHeader(hasHeader); ol.startMemberGroupHeader(hasHeader);
if (hasHeader) if (hasHeader)
...@@ -450,6 +451,7 @@ void MemberList::addMemberGroup(MemberGroup *mg) ...@@ -450,6 +451,7 @@ void MemberList::addMemberGroup(MemberGroup *mg)
{ {
memberGroupList=new MemberGroupList; memberGroupList=new MemberGroupList;
} }
//printf("addMemberGroup: this=%p mg=%p\n",this,mg);
memberGroupList->append(mg); memberGroupList->append(mg);
} }
......
...@@ -483,6 +483,13 @@ void NamespaceDef::addUsingDirective(NamespaceDef *nd) ...@@ -483,6 +483,13 @@ void NamespaceDef::addUsingDirective(NamespaceDef *nd)
{ {
usingDirList->append(nd->qualifiedName(),nd); usingDirList->append(nd->qualifiedName(),nd);
} }
//printf("%p: NamespaceDef::addUsingDirective: %s:%d\n",this,name().data(),usingDirList->count());
}
NamespaceSDict *NamespaceDef::getUsedNamespaces() const
{
//printf("%p: NamespaceDef::getUsedNamespace: %s:%d\n",this,name().data(),usingDirList?usingDirList->count():0);
return usingDirList;
} }
void NamespaceDef::addUsingDeclaration(Definition *d) void NamespaceDef::addUsingDeclaration(Definition *d)
......
...@@ -58,7 +58,7 @@ class NamespaceDef : public Definition ...@@ -58,7 +58,7 @@ class NamespaceDef : public Definition
void computeAnchors(); void computeAnchors();
int countMembers(); int countMembers();
void addUsingDirective(NamespaceDef *nd); void addUsingDirective(NamespaceDef *nd);
NamespaceSDict *getUsedNamespaces() const { return usingDirList; } NamespaceSDict *getUsedNamespaces() const;
void addUsingDeclaration(Definition *def); void addUsingDeclaration(Definition *def);
SDict<Definition> *getUsedClasses() const { return usingDeclList; } SDict<Definition> *getUsedClasses() const { return usingDeclList; }
void combineUsingRelations(); void combineUsingRelations();
......
...@@ -1222,6 +1222,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1222,6 +1222,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x CopyString %x CopyString
%x Include %x Include
%x IncludeID %x IncludeID
%x EndImport
%x DefName %x DefName
%x DefineArg %x DefineArg
%x DefineText %x DefineText
...@@ -1700,7 +1701,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1700,7 +1701,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Include>[^\">\n]+[\">] { <Include>[^\">\n]+[\">] {
g_incName+=yytext; g_incName+=yytext;
readIncludeFile(g_incName); readIncludeFile(g_incName);
BEGIN(Start); if (g_isImported)
{
BEGIN(EndImport);
}
else
{
BEGIN(Start);
}
}
<EndImport>[^\\]*/\n {
BEGIN(Start);
}
<EndImport>\\[\r]?"\n" {
outputChar('\n');
}
<EndImport>. {
} }
<DefName>{ID}/"(" { <DefName>{ID}/"(" {
//printf("Define() `%s'\n",yytext); //printf("Define() `%s'\n",yytext);
......
...@@ -755,18 +755,21 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName) ...@@ -755,18 +755,21 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName)
if (g_currentDefinition) if (g_currentDefinition)
{ {
DefinitionIntf *di = Doxygen::symbolMap->find(symName); DefinitionIntf *di = Doxygen::symbolMap->find(symName);
if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols if (di)
{ {
DefinitionListIterator dli(*(DefinitionList*)di); if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
Definition *sym;
for (dli.toFirst();(sym=dli.current());++dli)
{ {
findMemberLink(ol,sym,symName); DefinitionListIterator dli(*(DefinitionList*)di);
Definition *sym;
for (dli.toFirst();(sym=dli.current());++dli)
{
findMemberLink(ol,sym,symName);
}
}
else // single symbol
{
findMemberLink(ol,(Definition*)di,symName);
} }
}
else // single symbol
{
findMemberLink(ol,(Definition*)di,symName);
} }
} }
//printf("sym %s not found\n",&yytext[5]); //printf("sym %s not found\n",&yytext[5]);
......
...@@ -797,11 +797,13 @@ STARTDOCSYMS ^{B}"##"/[^#] ...@@ -797,11 +797,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
} }
{TRIDOUBLEQUOTE} { // start of a comment block {TRIDOUBLEQUOTE} { // start of a comment block
current->program+=yytext;
initTriDoubleQuoteBlock(); initTriDoubleQuoteBlock();
BEGIN(TripleComment); BEGIN(TripleComment);
} }
{TRISINGLEQUOTE} { // start of a comment block {TRISINGLEQUOTE} { // start of a comment block
current->program+=yytext;
initTriSingleQuoteBlock(); initTriSingleQuoteBlock();
BEGIN(TripleComment); BEGIN(TripleComment);
} }
......
...@@ -254,6 +254,17 @@ int iSystem(const char *command,const char *args,bool commandHasConsole) ...@@ -254,6 +254,17 @@ int iSystem(const char *command,const char *args,bool commandHasConsole)
} }
uint iPid()
{
uint pid;
#if !defined(_WIN32) || defined(__CYGWIN__)
pid = (uint)getpid();
#else
pid = (uint)GetCurrentProcessId();
#endif
return pid;
}
...@@ -886,9 +897,11 @@ bool accessibleViaUsingNamespace(const NamespaceSDict *nl, ...@@ -886,9 +897,11 @@ bool accessibleViaUsingNamespace(const NamespaceSDict *nl,
{ {
NamespaceSDict::Iterator nli(*nl); NamespaceSDict::Iterator nli(*nl);
NamespaceDef *und; NamespaceDef *und;
for (nli.toFirst();(und=nli.current());++nli) int count=0;
for (nli.toFirst();(und=nli.current());++nli,count++)
{ {
//printf("[Trying via used namespace %s\n",und->name().data()); //printf("[Trying via used namespace %s: count=%d/%d\n",und->name().data(),
// count,nl->count());
Definition *sc = explicitScopePart.isEmpty() ? und : followPath(und,fileScope,explicitScopePart); Definition *sc = explicitScopePart.isEmpty() ? und : followPath(und,fileScope,explicitScopePart);
if (sc && item->getOuterScope()==sc) if (sc && item->getOuterScope()==sc)
{ {
......
...@@ -235,6 +235,8 @@ QCString stripScope(const char *name); ...@@ -235,6 +235,8 @@ QCString stripScope(const char *name);
int iSystem(const char *command,const char *args,bool commandHasConsole=TRUE); int iSystem(const char *command,const char *args,bool commandHasConsole=TRUE);
uint iPid();
QCString convertToHtml(const char *s); QCString convertToHtml(const char *s);
QCString convertToXML(const char *s); QCString convertToXML(const char *s);
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
LinkIncremental="2" LinkIncremental="2"
SuppressStartupBanner="true" SuppressStartupBanner="true"
AdditionalLibraryDirectories="Debug" AdditionalLibraryDirectories="Debug"
GenerateManifest="false"
GenerateDebugInformation="true" GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/Doxygen.pdb" ProgramDatabaseFile=".\Debug/Doxygen.pdb"
SubSystem="1" SubSystem="1"
......
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
LinkIncremental="2" LinkIncremental="2"
SuppressStartupBanner="true" SuppressStartupBanner="true"
AdditionalLibraryDirectories="Debug" AdditionalLibraryDirectories="Debug"
GenerateManifest="false"
GenerateDebugInformation="true" GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/Doxytag.pdb" ProgramDatabaseFile=".\Debug/Doxytag.pdb"
SubSystem="1" SubSystem="1"
......
...@@ -46,11 +46,12 @@ ...@@ -46,11 +46,12 @@
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="0" Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS" AdditionalIncludeDirectories="$(QTDIR)\include;..\src"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true" MinimalRebuild="true"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="3" RuntimeLibrary="1"
UsePrecompiledHeader="2" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="true" Detect64BitPortabilityProblems="true"
DebugInformationFormat="4" DebugInformationFormat="4"
...@@ -66,8 +67,11 @@ ...@@ -66,8 +67,11 @@
/> />
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib"
OutputFile="..\bin\Debug\doxywizard.exe" OutputFile="..\bin\Debug\doxywizard.exe"
LinkIncremental="2" LinkIncremental="2"
GenerateManifest="false"
IgnoreDefaultLibraryNames="msvcrt.lib"
GenerateDebugInformation="true" GenerateDebugInformation="true"
SubSystem="2" SubSystem="2"
TargetMachine="1" TargetMachine="1"
...@@ -127,7 +131,7 @@ ...@@ -127,7 +131,7 @@
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalIncludeDirectories="$(QTDIR)\include;..\src" AdditionalIncludeDirectories="$(QTDIR)\include;..\src"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE" PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
RuntimeLibrary="2" RuntimeLibrary="0"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="true" Detect64BitPortabilityProblems="true"
...@@ -148,6 +152,9 @@ ...@@ -148,6 +152,9 @@
AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib" AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib"
OutputFile="..\bin\doxywizard.exe" OutputFile="..\bin\doxywizard.exe"
LinkIncremental="1" LinkIncremental="1"
GenerateManifest="false"
IgnoreAllDefaultLibraries="false"
IgnoreDefaultLibraryNames="msvcrt.lib"
GenerateDebugInformation="false" GenerateDebugInformation="false"
SubSystem="2" SubSystem="2"
OptimizeReferences="2" OptimizeReferences="2"
...@@ -292,6 +299,14 @@ ...@@ -292,6 +299,14 @@
> >
</File> </File>
</Filter> </Filter>
<Filter
Name="Resources"
>
<File
RelativePath="..\addon\doxywizard\doxywizard.res"
>
</File>
</Filter>
</Files> </Files>
<Globals> <Globals>
</Globals> </Globals>
......
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