summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2006-10-29 18:39:28 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2006-10-29 18:39:28 (GMT)
commit7e81d44c98dbbb1bb30d623be52ca76bbd880038 (patch)
tree6386fc01aea029071bdcabdf150991c7632b5fd3
parent5e24df52170c1b19d8ef628f4e657bc35a7f300b (diff)
downloadDoxygen-7e81d44c98dbbb1bb30d623be52ca76bbd880038.zip
Doxygen-7e81d44c98dbbb1bb30d623be52ca76bbd880038.tar.gz
Doxygen-7e81d44c98dbbb1bb30d623be52ca76bbd880038.tar.bz2
Release-1.5.1
-rw-r--r--INSTALL4
-rw-r--r--Makefile.in4
-rw-r--r--README4
-rw-r--r--addon/doxyapp/doxyapp.cpp3
-rw-r--r--addon/doxywizard/doxywizard.cpp2
-rwxr-xr-xconfigure2
-rw-r--r--src/classdef.cpp4
-rw-r--r--src/docparser.cpp4
-rw-r--r--src/doxygen.cpp86
-rw-r--r--src/doxygen.h2
-rw-r--r--src/entry.cpp4
-rw-r--r--src/filedef.cpp12
-rw-r--r--src/filedef.h2
-rw-r--r--src/latexdocvisitor.cpp29
-rw-r--r--src/latexgen.cpp2
-rw-r--r--src/lockingptr.h8
-rw-r--r--src/memberdef.cpp2
-rw-r--r--src/membergroup.cpp3
-rw-r--r--src/memberlist.cpp4
-rw-r--r--src/namespacedef.cpp7
-rw-r--r--src/namespacedef.h2
-rw-r--r--src/pre.l18
-rw-r--r--src/pycode.l21
-rw-r--r--src/pyscanner.l2
-rw-r--r--src/util.cpp17
-rw-r--r--src/util.h2
-rw-r--r--winbuild/Doxygen.vcproj1
-rw-r--r--winbuild/Doxytag.vcproj1
-rw-r--r--winbuild/Doxywizard.vcproj23
29 files changed, 209 insertions, 66 deletions
diff --git a/INSTALL b/INSTALL
index cda7a83..0867c3c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.5.0
+DOXYGEN Version 1.5.1
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (17 October 2006)
+Dimitri van Heesch (29 October 2006)
diff --git a/Makefile.in b/Makefile.in
index f30169c..68aa1f5 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -140,5 +140,9 @@ rpmbinary: dist
gzip -9v $(DISTDIR).src.tar
rpmbuild -tb $(DISTDIR).src.tar.gz
+
+ctags:
+ ctags -f tags src addon/doxywizard qtools
+
FORCE:
diff --git a/README b/README
index fa5cf00..79990e8 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.5.0
+DOXYGEN Version 1.5.1
Please read INSTALL for compilation instructions.
@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
-Dimitri van Heesch (dimitri@stack.nl) (17 October 2006)
+Dimitri van Heesch (dimitri@stack.nl) (29 October 2006)
diff --git a/addon/doxyapp/doxyapp.cpp b/addon/doxyapp/doxyapp.cpp
index 0de169d..b453815 100644
--- a/addon/doxyapp/doxyapp.cpp
+++ b/addon/doxyapp/doxyapp.cpp
@@ -291,7 +291,8 @@ int main(int argc,char **argv)
}
// 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
rmdir("/tmp/doxygen");
diff --git a/addon/doxywizard/doxywizard.cpp b/addon/doxywizard/doxywizard.cpp
index a48058c..c929152 100644
--- a/addon/doxywizard/doxywizard.cpp
+++ b/addon/doxywizard/doxywizard.cpp
@@ -1316,7 +1316,7 @@ void MainWidget::about()
QTextStream t(&msg,IO_WriteOnly);
t << QString("<qt><center>A tool to configure and run doxygen version ")+versionString+
" 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>";
QMessageBox::about(this,"Doxygen GUI",msg);
}
diff --git a/configure b/configure
index 839a2df..251a304 100755
--- a/configure
+++ b/configure
@@ -17,7 +17,7 @@
doxygen_version_major=1
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.
doxygen_version_mmn=NO
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 8dffbd9..9ed8c1f 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -3061,7 +3061,9 @@ void ClassDef::addMemberToList(MemberList::ListType lt,MemberDef *md)
ml->inSort(md);
else
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,
diff --git a/src/docparser.cpp b/src/docparser.cpp
index c7a621a..d28164f 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1674,6 +1674,10 @@ void DocCopy::parse()
g_styleStack.clear();
g_nodeStack.clear();
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,doc);
g_copyStack.remove(def);
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index f825d34..2aff8fd 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -72,7 +72,6 @@
#include "store.h"
#include "marshal.h"
-
#define RECURSE_ENTRYTREE(func,var) \
do { if (var->children()) { \
EntryNavListIterator eli(*var->children()); \
@@ -85,6 +84,11 @@
#define pclose _pclose
#endif
+#if !defined(_WIN32) || defined(__CYGWIN__)
+#include <signal.h>
+#define HAS_SIGNALS
+#endif
+
// globally accessible variables
ClassSDict *Doxygen::classSDict = 0;
ClassSDict *Doxygen::hiddenClasses = 0;
@@ -129,6 +133,8 @@ QCString Doxygen::htmlFileExtension;
bool Doxygen::suppressDocWarnings = FALSE;
ObjCache *Doxygen::symbolCache = 0;
Store *Doxygen::symbolStorage;
+QCString Doxygen::objDBFileName;
+QCString Doxygen::entryDBFileName;
// locally accessible globals
static QDict<EntryNav> classEntries(1009);
@@ -144,6 +150,7 @@ FileStorage *g_storage = 0;
QCString spaces;
+
void clearAll()
{
inputFiles.clear();
@@ -6299,39 +6306,41 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
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;
mnsd=Doxygen::memberNameSDict;
isGlobal=FALSE;
}
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;
isGlobal=TRUE;
}
else // found a global enum
{
fd=rootNav->fileDef();
+ //printf("Enum in file `%s': `%s'\n",fd->name().data(),name.data());
mnsd=Doxygen::functionNameSDict;
isGlobal=TRUE;
}
if (!name.isEmpty())
{
- MemberName *mn = mnsd->find(name);
+ MemberName *mn = mnsd->find(name); // for all members with this name
if (mn)
{
MemberNameIterator mni(*mn);
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())
{
- EntryNavListIterator eli(*rootNav->children());
+ EntryNavListIterator eli(*rootNav->children()); // for each enum value
EntryNav *e;
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;
MemberNameSDict *emnsd = isRelated ? Doxygen::functionNameSDict : mnsd;
if (!e->name().isEmpty() && (fmn=(*emnsd)[e->name()]))
@@ -6341,9 +6350,10 @@ static void addEnumValuesToEnums(EntryNav *rootNav)
MemberDef *fmd;
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)!='@')
{
NamespaceDef *fnd=fmd->getNamespaceDef();
@@ -8208,7 +8218,7 @@ static int readDir(QFileInfo *fi,
{
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() &&
@@ -8297,7 +8307,7 @@ static int readFileOrDirectory(const char *s,
{
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())
@@ -8366,7 +8376,7 @@ static void readFormulaRepository()
int se=line.find(':'); // find name and text separator.
if (se==-1)
{
- err("Error: formula.repository is corrupted!\n");
+ err("Warning: formula.repository is corrupted!\n");
break;
}
else
@@ -8556,7 +8566,7 @@ void initDoxygen()
setlocale(LC_ALL,"");
setlocale(LC_NUMERIC,"C");
#endif
-
+
//Doxygen::symbolMap->setAutoDelete(TRUE);
Doxygen::runningTime.start();
@@ -8746,7 +8756,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
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;
@@ -8794,7 +8804,7 @@ void readConfiguration(int argc, char **argv)
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
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;
@@ -8920,7 +8930,7 @@ void checkConfiguration()
QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
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());
}
QStrList &includePath = Config_getList("INCLUDE_PATH");
@@ -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()
{
/**************************************************************************
@@ -8986,9 +9014,19 @@ void parseInput()
// ~2.0 MByte "overhead"
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);
}
@@ -9265,11 +9303,11 @@ void parseInput()
**************************************************************************/
g_storage = new FileStorage;
- g_storage->setName(outputDirectory+"/doxygen_entrydb.tmp");
+ g_storage->setName(Doxygen::entryDBFileName);
if (!g_storage->open(IO_WriteOnly))
{
- err("Failed to create temporary storage file %s/doxygen_entrydb.tmp\n",
- outputDirectory.data());
+ err("Failed to create temporary storage file %s\n",
+ Doxygen::entryDBFileName.data());
exit(1);
}
Entry *root=new Entry;
@@ -9294,8 +9332,8 @@ void parseInput()
g_storage->close();
if (!g_storage->open(IO_ReadOnly))
{
- err("Failed to open temporary storage file %s/doxygen_entrydb.tmp for reading",
- outputDirectory.data());
+ err("Failed to open temporary storage file %s for reading",
+ Doxygen::entryDBFileName.data());
exit(1);
}
@@ -9430,7 +9468,7 @@ void parseInput()
g_storage=0;
QDir thisDir;
- thisDir.remove(outputDirectory+"/doxygen_entrydb.tmp");
+ thisDir.remove(Doxygen::entryDBFileName);
msg("Determining which enums are documented\n");
findDocumentedEnumValues();
@@ -9776,7 +9814,7 @@ void generateOutput()
finializeDocParser();
Doxygen::symbolStorage->close();
QDir thisDir;
- thisDir.remove(Config_getString("OUTPUT_DIRECTORY")+"/doxygen_objdb.tmp");
+ thisDir.remove(Doxygen::objDBFileName);
Config::deleteInstance();
QTextCodec::deleteAllCodecs();
delete Doxygen::symbolCache;
diff --git a/src/doxygen.h b/src/doxygen.h
index 92c09ba..c52829c 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -121,6 +121,8 @@ class Doxygen
static bool suppressDocWarnings;
static ObjCache *symbolCache;
static Store *symbolStorage;
+ static QCString objDBFileName;
+ static QCString entryDBFileName;
};
void initDoxygen();
diff --git a/src/entry.cpp b/src/entry.cpp
index 34d7241..1aa6b6d 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -21,6 +21,7 @@
#include "marshal.h"
#include "util.h"
#include "section.h"
+#include "doxygen.h"
int Entry::num=0;
@@ -394,7 +395,8 @@ static bool loadEntry(Entry *e,FileStorage *f)
uint header=unmarshalUInt(f);
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);
}
e->protection = (Protection)unmarshalInt(f);
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 7214a56..0a3c814 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -840,6 +840,13 @@ void FileDef::addUsingDirective(NamespaceDef *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)
@@ -917,7 +924,10 @@ void FileDef::addIncludedUsingDirectives()
if (usingDirList==0) usingDirList = new NamespaceSDict;
//printf("Prepending used namespace %s to the list of file %s\n",
// nd->name().data(),name().data());
- usingDirList->prepend(nd->qualifiedName(),nd);
+ if (usingDirList->find(nd->qualifiedName())==0) // not yet added
+ {
+ usingDirList->prepend(nd->qualifiedName(),nd);
+ }
}
}
}
diff --git a/src/filedef.h b/src/filedef.h
index 15554e2..c5b99ab 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -150,7 +150,7 @@ class FileDef : public Definition
DirDef *getDirDef() const { return dir; }
void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const { return usingDirList; }
+ NamespaceSDict *getUsedNamespaces() const;
void addUsingDeclaration(Definition *def);
SDict<Definition> *getUsedClasses() const { return usingDeclList; }
void combineUsingRelations();
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index 8c1e757..a780434 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -1021,18 +1021,33 @@ void LatexDocVisitor::filter(const char *str)
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 (!file.isEmpty()) m_t << stripPath(file);
- if (!file.isEmpty() && !anchor.isEmpty()) m_t << "_";
- if (!anchor.isEmpty()) m_t << anchor;
- m_t << "}{";
+ if (ref.isEmpty()) {
+ m_t << "\\hyperlink{";
+ if (!file.isEmpty()) m_t << stripPath(file);
+ if (!file.isEmpty() && !anchor.isEmpty()) 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{";
}
+ else // external link
+ {
+ m_t << "{\\bf ";
+ }
}
void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor)
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index df39700..98891f4 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -1002,7 +1002,7 @@ void LatexGenerator::writeObjectLink(const char *ref, const char *f,
}
else
{
- t << "{\\bf";
+ t << "{\\bf ";
docify(text);
t << "}";
}
diff --git a/src/lockingptr.h b/src/lockingptr.h
index 1936bec..99a1772 100644
--- a/src/lockingptr.h
+++ b/src/lockingptr.h
@@ -37,15 +37,17 @@ class LockableObj
/*! Returns TRUE if the object is currently locked. */
bool isLocked() const { return m_lockCount>0; }
- protected:
+//VC++6.0 workaround
+// protected:
/*! Called when the object is locked. */
virtual void lock() const = 0;
/*! Called when the object is unlocked. */
virtual void unlock() const = 0;
- private:
- template<class T> friend class LockingPtr;
+//VC++6.0 workaround
+// private:
+// template<class T> friend class LockingPtr;
int m_lockCount;
};
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index a450ba3..56c8013 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -818,7 +818,6 @@ QCString MemberDef::getOutputFileBase() const
"Warning: Internal inconsistency: member %s does not belong to any"
" container!",name().data()
);
- exit(1);
return "dummy";
}
else if (separateMemberPages)
@@ -2634,6 +2633,7 @@ MemberList *MemberDef::getSectionList(Definition *d) const
void MemberDef::setSectionList(Definition *d, MemberList *sl)
{
makeResident();
+ //printf("MemberDef::setSectionList(%p,%p) name=%s\n",d,sl,name().data());
char key[20];
sprintf(key,"%p",d);
if (m_impl->classSectionSDict==0)
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index ba599da..900a6e0 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -79,6 +79,7 @@ void MemberGroup::insertMember(MemberDef *md)
else if (inDeclSection==0)
{
inDeclSection = md->getSectionList(m_parent);
+ //printf("inDeclSection=%p type=%d\n",inDeclSection,inDeclSection->listType());
}
memberList->append(md);
@@ -133,7 +134,7 @@ void MemberGroup::addToDeclarationSection()
{
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);
}
}
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 218bbd3..8864488 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -313,7 +313,7 @@ void MemberList::writeDeclarations(OutputList &ol,
const char *title,const char *subtitle, bool showEnumValues
/*, bool inGroup,bool countSubGroups*/)
{
- //printf("----- writeDeclaration() ----\n");
+ //printf("----- writeDeclaration() this=%p ----\n",this);
countDecMembers(showEnumValues); // count member not in group
if (numDecMembers()==0) return;
//printf("%p: MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",
@@ -341,6 +341,7 @@ void MemberList::writeDeclarations(OutputList &ol,
MemberGroup *mg;
while ((mg=mgli.current()))
{
+ //printf("mg->header=%s\n",mg->header().data());
bool hasHeader=mg->header()!="[NOHEADER]";
ol.startMemberGroupHeader(hasHeader);
if (hasHeader)
@@ -450,6 +451,7 @@ void MemberList::addMemberGroup(MemberGroup *mg)
{
memberGroupList=new MemberGroupList;
}
+ //printf("addMemberGroup: this=%p mg=%p\n",this,mg);
memberGroupList->append(mg);
}
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 1cbe197..54278b1 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -483,6 +483,13 @@ void NamespaceDef::addUsingDirective(NamespaceDef *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)
diff --git a/src/namespacedef.h b/src/namespacedef.h
index b720912..827ace3 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -58,7 +58,7 @@ class NamespaceDef : public Definition
void computeAnchors();
int countMembers();
void addUsingDirective(NamespaceDef *nd);
- NamespaceSDict *getUsedNamespaces() const { return usingDirList; }
+ NamespaceSDict *getUsedNamespaces() const;
void addUsingDeclaration(Definition *def);
SDict<Definition> *getUsedClasses() const { return usingDeclList; }
void combineUsingRelations();
diff --git a/src/pre.l b/src/pre.l
index 08a8486..2b9025e 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1222,6 +1222,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
%x CopyString
%x Include
%x IncludeID
+%x EndImport
%x DefName
%x DefineArg
%x DefineText
@@ -1700,7 +1701,22 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Include>[^\">\n]+[\">] {
g_incName+=yytext;
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}/"(" {
//printf("Define() `%s'\n",yytext);
diff --git a/src/pycode.l b/src/pycode.l
index 8cc79a4..13e79cd 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -755,18 +755,21 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName)
if (g_currentDefinition)
{
DefinitionIntf *di = Doxygen::symbolMap->find(symName);
- if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
+ if (di)
{
- DefinitionListIterator dli(*(DefinitionList*)di);
- Definition *sym;
- for (dli.toFirst();(sym=dli.current());++dli)
+ if (di->definitionType()==DefinitionIntf::TypeSymbolList) // multiple symbols
{
- 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]);
diff --git a/src/pyscanner.l b/src/pyscanner.l
index 0a4fbcf..db39ff4 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -797,11 +797,13 @@ STARTDOCSYMS ^{B}"##"/[^#]
}
{TRIDOUBLEQUOTE} { // start of a comment block
+ current->program+=yytext;
initTriDoubleQuoteBlock();
BEGIN(TripleComment);
}
{TRISINGLEQUOTE} { // start of a comment block
+ current->program+=yytext;
initTriSingleQuoteBlock();
BEGIN(TripleComment);
}
diff --git a/src/util.cpp b/src/util.cpp
index 96f0e84..1cef237 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -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,
{
NamespaceSDict::Iterator nli(*nl);
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);
if (sc && item->getOuterScope()==sc)
{
diff --git a/src/util.h b/src/util.h
index fb6de09..b6cd1ba 100644
--- a/src/util.h
+++ b/src/util.h
@@ -235,6 +235,8 @@ QCString stripScope(const char *name);
int iSystem(const char *command,const char *args,bool commandHasConsole=TRUE);
+uint iPid();
+
QCString convertToHtml(const char *s);
QCString convertToXML(const char *s);
diff --git a/winbuild/Doxygen.vcproj b/winbuild/Doxygen.vcproj
index ef25e82..e5cfc6f 100644
--- a/winbuild/Doxygen.vcproj
+++ b/winbuild/Doxygen.vcproj
@@ -76,6 +76,7 @@
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="Debug"
+ GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/Doxygen.pdb"
SubSystem="1"
diff --git a/winbuild/Doxytag.vcproj b/winbuild/Doxytag.vcproj
index 9c5e82e..b09e917 100644
--- a/winbuild/Doxytag.vcproj
+++ b/winbuild/Doxytag.vcproj
@@ -74,6 +74,7 @@
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories="Debug"
+ GenerateManifest="false"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/Doxytag.pdb"
SubSystem="1"
diff --git a/winbuild/Doxywizard.vcproj b/winbuild/Doxywizard.vcproj
index f90f6ac..b2cf022 100644
--- a/winbuild/Doxywizard.vcproj
+++ b/winbuild/Doxywizard.vcproj
@@ -46,11 +46,12 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ AdditionalIncludeDirectories="$(QTDIR)\include;..\src"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
@@ -66,8 +67,11 @@
/>
<Tool
Name="VCLinkerTool"
+ AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib"
OutputFile="..\bin\Debug\doxywizard.exe"
LinkIncremental="2"
+ GenerateManifest="false"
+ IgnoreDefaultLibraryNames="msvcrt.lib"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
@@ -127,7 +131,7 @@
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="$(QTDIR)\include;..\src"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_DEPRECATE"
- RuntimeLibrary="2"
+ RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
@@ -148,6 +152,9 @@
AdditionalDependencies="$(QTDIR)\lib\qt-mt336.lib $(QTDIR)\lib\qtmain.lib"
OutputFile="..\bin\doxywizard.exe"
LinkIncremental="1"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ IgnoreDefaultLibraryNames="msvcrt.lib"
GenerateDebugInformation="false"
SubSystem="2"
OptimizeReferences="2"
@@ -292,6 +299,14 @@
>
</File>
</Filter>
+ <Filter
+ Name="Resources"
+ >
+ <File
+ RelativePath="..\addon\doxywizard\doxywizard.res"
+ >
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>