summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2006-01-15 22:13:59 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2006-01-15 22:13:59 (GMT)
commit0165662ac50544cad138573c42097999327b84bc (patch)
tree02ffe0b25b4258265375952770daddbce00b6b7b
parentb965d71c36017c5ad67e78a6cb8e300ddbec7bf6 (diff)
downloadDoxygen-0165662ac50544cad138573c42097999327b84bc.zip
Doxygen-0165662ac50544cad138573c42097999327b84bc.tar.gz
Doxygen-0165662ac50544cad138573c42097999327b84bc.tar.bz2
Release-1.4.6-20060115
-rw-r--r--INSTALL4
-rw-r--r--README4
-rwxr-xr-xconfigure4
-rw-r--r--src/classdef.cpp59
-rw-r--r--src/classlist.cpp5
-rw-r--r--src/commentcnv.l33
-rw-r--r--src/constexp.l2
-rw-r--r--src/definition.cpp11
-rw-r--r--src/definition.h2
-rw-r--r--src/docparser.cpp23
-rw-r--r--src/doxygen.cpp76
-rw-r--r--src/doxygen.css66
-rw-r--r--src/doxygen_css.h66
-rw-r--r--src/htmlgen.cpp81
-rw-r--r--src/htmlgen.h2
-rw-r--r--src/latexgen.h2
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp19
-rw-r--r--src/memberlist.cpp2
-rw-r--r--src/namespacedef.cpp25
-rw-r--r--src/outputgen.h6
-rw-r--r--src/outputlist.h4
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/util.cpp3
-rw-r--r--wintools/version.pl2
25 files changed, 355 insertions, 150 deletions
diff --git a/INSTALL b/INSTALL
index 7dc9464..6893981 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
-DOXYGEN Version 1.4.6
+DOXYGEN Version 1.4.6-20060115
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
-Dimitri van Heesch (30 December 2005)
+Dimitri van Heesch (15 January 2006)
diff --git a/README b/README
index af17e24..974ee1c 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.4.6
+DOXYGEN Version 1.4.6_20060115
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) (30 December 2005)
+Dimitri van Heesch (dimitri@stack.nl) (15 January 2006)
diff --git a/configure b/configure
index b0be48c..7f70f7e 100755
--- a/configure
+++ b/configure
@@ -20,7 +20,7 @@ doxygen_version_minor=4
doxygen_version_revision=6
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
-doxygen_version_mmn=NO
+doxygen_version_mmn=20060115
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
@@ -319,7 +319,7 @@ echo "using $f_make"
echo -n " Checking for GNU install tool... "
if test "$f_insttool" = NO; then
install_names="ginstall install"
- install_dirs="/usr/bin /usr/local/bin /bin /sbin $bin_dirs"
+ install_dirs="/usr/bin /usr/local/bin /bin /sbin /usr/ucb $bin_dirs"
install_prog=NO
install_found=NO
for i in $install_names; do
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 99f09b5..332e6bf 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -225,13 +225,14 @@ void ClassDef::internalInsertMember(MemberDef *md,
//printf("adding %s::%s\n",name().data(),md->name().data());
if (!isReference())
{
+ static bool sortBriefDocs = Config_getBool("SORT_BRIEF_DOCS");
/********************************************/
/* insert member in the declaration section */
/********************************************/
if (md->isRelated() &&
(Config_getBool("EXTRACT_PRIVATE") || prot!=Private))
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
related.inSort(md);
else
related.append(md);
@@ -239,7 +240,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
}
else if (md->isFriend())
{
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
friends.inSort(md);
else
friends.append(md);
@@ -250,28 +251,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (md->memberType())
{
case MemberDef::Signal: // Qt specific
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
signals.inSort(md);
else
signals.append(md);
md->setSectionList(this,&signals);
break;
case MemberDef::DCOP: // KDE2 specific
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
dcopMethods.inSort(md);
else
dcopMethods.append(md);
md->setSectionList(this,&dcopMethods);
break;
case MemberDef::Property:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
properties.inSort(md);
else
properties.append(md);
md->setSectionList(this,&properties);
break;
case MemberDef::Event:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
events.inSort(md);
else
events.append(md);
@@ -282,7 +283,7 @@ void ClassDef::internalInsertMember(MemberDef *md,
{
case Protected:
case Package: // slots in packages are not possible!
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proSlots.inSort(md);
else
proSlots.append(md);
@@ -290,14 +291,14 @@ void ClassDef::internalInsertMember(MemberDef *md,
break;
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubSlots.inSort(md);
else
pubSlots.append(md);
md->setSectionList(this,&pubSlots);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priSlots.inSort(md);
else
priSlots.append(md);
@@ -313,28 +314,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proStaticAttribs.inSort(md);
else
proStaticAttribs.append(md);
md->setSectionList(this,&proStaticAttribs);
break;
case Package:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pacStaticAttribs.inSort(md);
else
pacStaticAttribs.append(md);
md->setSectionList(this,&pacStaticAttribs);
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubStaticAttribs.inSort(md);
else
pubStaticAttribs.append(md);
md->setSectionList(this,&pubStaticAttribs);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priStaticAttribs.inSort(md);
else
priStaticAttribs.append(md);
@@ -347,28 +348,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proStaticMethods.inSort(md);
else
proStaticMethods.append(md);
md->setSectionList(this,&proStaticMethods);
break;
case Package:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pacStaticMethods.inSort(md);
else
pacStaticMethods.append(md);
md->setSectionList(this,&pacStaticMethods);
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubStaticMethods.inSort(md);
else
pubStaticMethods.append(md);
md->setSectionList(this,&pubStaticMethods);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priStaticMethods.inSort(md);
else
priStaticMethods.append(md);
@@ -384,28 +385,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proAttribs.inSort(md);
else
proAttribs.append(md);
md->setSectionList(this,&proAttribs);
break;
case Package:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pacAttribs.inSort(md);
else
pacAttribs.append(md);
md->setSectionList(this,&pacAttribs);
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubAttribs.inSort(md);
else
pubAttribs.append(md);
md->setSectionList(this,&pubAttribs);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priAttribs.inSort(md);
else
priAttribs.append(md);
@@ -418,28 +419,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proTypes.inSort(md);
else
proTypes.append(md);
md->setSectionList(this,&proTypes);
break;
case Package:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pacTypes.inSort(md);
else
pacTypes.append(md);
md->setSectionList(this,&pacTypes);
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubTypes.inSort(md);
else
pubTypes.append(md);
md->setSectionList(this,&pubTypes);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priTypes.inSort(md);
else
priTypes.append(md);
@@ -452,28 +453,28 @@ void ClassDef::internalInsertMember(MemberDef *md,
switch (prot)
{
case Protected:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
proMethods.inSort(md);
else
proMethods.append(md);
md->setSectionList(this,&proMethods);
break;
case Package:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pacMethods.inSort(md);
else
pacMethods.append(md);
md->setSectionList(this,&pacMethods);
break;
case Public:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
pubMethods.inSort(md);
else
pubMethods.append(md);
md->setSectionList(this,&pubMethods);
break;
case Private:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
priMethods.inSort(md);
else
priMethods.append(md);
diff --git a/src/classlist.cpp b/src/classlist.cpp
index b0a1b7f..ef11d57 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -35,10 +35,11 @@ static int compItems(void *item1,void *item2)
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
static bool b = Config_getBool("SORT_BY_SCOPE_NAME");
+ //printf("compItems: %d %s<->%s\n",b,c1->qualifiedName().data(),c2->qualifiedName().data());
if (b)
{
- return stricmp(c1->qualifiedName(),
- c2->qualifiedName());
+ return stricmp(c1->name(),
+ c2->name());
}
else
{
diff --git a/src/commentcnv.l b/src/commentcnv.l
index ce217f9..c60a137 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -59,6 +59,7 @@ static int g_condCtx;
static QStack<CondCtx> g_condStack;
static QCString g_blockName;
static int g_lastCommentContext;
+static bool g_inSpecialComment;
static void replaceCommentMarker(const char *s,int len)
{
@@ -271,6 +272,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
%x SComment
%x CComment
%x Verbatim
+%x VerbatimCode
%x ReadLine
%x CondLine
@@ -300,6 +302,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput("/**",3);
//copyToOutput(yytext+i,yyleng-i);
replaceAliases(yytext+i,yyleng-i);
+ g_inSpecialComment=TRUE;
BEGIN(SComment);
}
<Scan>"//##Documentation".*/\n { /* Start of Rational Rose ANSI C++ comment block */
@@ -311,7 +314,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
replaceAliases(yytext+i,yyleng-i);
BEGIN(SComment);
}
-<Scan>"//"/.*\n { /* one line C++ comment */
+<Scan>"//"/.*\n { /* one line C++ comment */
copyToOutput(yytext,yyleng);
g_readLineCtx=YY_START;
BEGIN(ReadLine);
@@ -320,7 +323,13 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
copyToOutput(yytext,yyleng);
BEGIN(CComment);
}
-<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"dot"|"code"|"f$"|"f["|"f{"[a-z]*)/[^a-z_A-Z0-9] { /* start of a verbatim block */
+<CComment,ReadLine>[\\@]("dot"|"code")/[^a-z_A-Z0-9] { /* start of a verbatim block */
+ copyToOutput(yytext,yyleng);
+ g_lastCommentContext = YY_START;
+ g_blockName=&yytext[1];
+ BEGIN(VerbatimCode);
+ }
+<CComment,ReadLine>[\\@]("verbatim"|"latexonly"|"htmlonly"|"xmlonly"|"rtfonly"|"manonly"|"f$"|"f["|"f{"[a-z]*)/[^a-z_A-Z0-9] { /* start of a verbatim block */
copyToOutput(yytext,yyleng);
if (yytext[2]=='[')
{
@@ -351,13 +360,26 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN(g_lastCommentContext);
}
}
-<Verbatim>[^@\\\n]* { /* any character not a backslash or new line */
+<VerbatimCode>[\\@]("enddot"|"endcode") { /* end of verbatim block */
+ copyToOutput(yytext,yyleng);
+ if (&yytext[4]==g_blockName)
+ {
+ BEGIN(g_lastCommentContext);
+ }
+ }
+<VerbatimCode>^"//"[\!\/]? { /* skip leading comments */
+ if (!g_inSpecialComment)
+ {
+ copyToOutput(yytext,yyleng);
+ }
+ }
+<Verbatim,VerbatimCode>[^@\/\\\n]* { /* any character not a backslash or new line */
copyToOutput(yytext,yyleng);
}
-<Verbatim>\n { /* new line in verbatim block */
+<Verbatim,VerbatimCode>\n { /* new line in verbatim block */
copyToOutput(yytext,yyleng);
}
-<Verbatim>. { /* any other character */
+<Verbatim,VerbatimCode>. { /* any other character */
copyToOutput(yytext,yyleng);
}
<SkipString>\\. { /* escaped character in string */
@@ -432,6 +454,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<SComment>\n { /* end of special comment */
copyToOutput(" */",3);
copyToOutput(yytext,yyleng);
+ g_inSpecialComment=FALSE;
BEGIN(Scan);
}
<ReadLine>[^\\@\n]*/\n {
diff --git a/src/constexp.l b/src/constexp.l
index 1b97648..42319fb 100644
--- a/src/constexp.l
+++ b/src/constexp.l
@@ -48,7 +48,7 @@ static int yyread(char *buf,int max_size)
%}
-CONSTSUFFIX ([uU][lL]?[lL]?)|(lL][lL]?[uU]?)
+CONSTSUFFIX ([uU][lL]?[lL]?)|([lL][lL]?[uU]?)
%option nounput
diff --git a/src/definition.cpp b/src/definition.cpp
index ed5a6c3..4842e28 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -702,10 +702,19 @@ QCString Definition::qualifiedName()
{
m_qualifiedName = m_outerScope->qualifiedName()+"::"+m_localName;
}
- //printf("end Definition::qualifiedName()=%s\n",qualifiedName.data());
+ //printf("end Definition::qualifiedName()=%s\n",m_qualifiedName.data());
return m_qualifiedName;
};
+void Definition::setOuterScope(Definition *d)
+{
+ if (m_outerScope!=d)
+ {
+ m_qualifiedName.resize(0); // flush cached scope name
+ m_outerScope = d;
+ }
+}
+
QCString Definition::localName() const
{
return m_localName;
diff --git a/src/definition.h b/src/definition.h
index 09d2cd0..9c360e6 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -206,7 +206,7 @@ class Definition
virtual Definition *findInnerCompound(const char *name);
virtual Definition *getOuterScope() const { return m_outerScope; }
virtual void addInnerCompound(Definition *d);
- virtual void setOuterScope(Definition *d) { m_outerScope = d; }
+ virtual void setOuterScope(Definition *d);
MemberSDict *getReferencesMembers() const { return m_sourceRefsDict; }
MemberSDict *getReferencedByMembers() const { return m_sourceRefByDict; }
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 8bac157..d727601 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1015,7 +1015,11 @@ reparsetoken:
children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,FALSE));
if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG) goto reparsetoken;
+ else if (tok==TK_WORD || tok==TK_HTMLTAG)
+ {
+ DBG(("CMD_EMPHASIS: reparsing command %s\n",g_token->name.data()));
+ goto reparsetoken;
+ }
}
break;
case CMD_BOLD:
@@ -1025,7 +1029,11 @@ reparsetoken:
children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Bold,FALSE));
if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG) goto reparsetoken;
+ else if (tok==TK_WORD || tok==TK_HTMLTAG)
+ {
+ DBG(("CMD_BOLD: reparsing command %s\n",g_token->name.data()));
+ goto reparsetoken;
+ }
}
break;
case CMD_CODE:
@@ -1035,7 +1043,11 @@ reparsetoken:
children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Code,FALSE));
if (tok!=TK_WORD) children.append(new DocWhiteSpace(parent," "));
if (tok==TK_NEWPARA) goto handlepara;
- else if (tok==TK_WORD || tok==TK_HTMLTAG) goto reparsetoken;
+ else if (tok==TK_WORD || tok==TK_HTMLTAG)
+ {
+ DBG(("CMD_CODE: reparsing command %s\n",g_token->name.data()));
+ goto reparsetoken;
+ }
}
break;
case CMD_HTMLONLY:
@@ -5164,8 +5176,9 @@ reparsetoken:
// the command ended normally, keep scanning for new tokens.
retval = 0;
}
- else if (retval==TK_LISTITEM || retval==TK_ENDLIST || retval==TK_WORD)
- {
+ else if (retval>0 && retval<RetVal_OK)
+ {
+ // the command ended with a new command, reparse this token
tok = retval;
goto reparsetoken;
}
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index e4ba2aa..9b5bb60 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1186,12 +1186,16 @@ static void resolveClassNestingRelations()
// anyway, so we can at least relate scopes properly.
{
Definition *d = buildScopeFromQualifiedName(cd->name(),cd->name().contains("::"));
- d->addInnerCompound(cd);
- cd->setOuterScope(d);
- warn(cd->getDefFileName(),cd->getDefLine(),
- "Warning: Internal inconsistency: scope for class %s not "
- "found!\n",cd->name().data()
- );
+ if (d!=cd) // avoid recursion in case of redundant scopes, i.e: namespace N { class N::C {}; }
+ // for this case doxygen assumes the exitance of a namespace N::N in which C is to be found!
+ {
+ d->addInnerCompound(cd);
+ cd->setOuterScope(d);
+ warn(cd->getDefFileName(),cd->getDefLine(),
+ "Warning: Internal inconsistency: scope for class %s not "
+ "found!\n",cd->name().data()
+ );
+ }
}
else
{
@@ -1309,7 +1313,7 @@ static void buildNamespaceList(Entry *root)
// also add namespace to the correct structural context
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
- //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"none");
+ //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"<none>");
if (d==0) // we didn't find anything, create the scope artificially
// anyway, so we can at least relate scopes properly.
{
@@ -1337,6 +1341,25 @@ static void buildNamespaceList(Entry *root)
//----------------------------------------------------------------------
+static NamespaceDef *findUsedNamespace(const NamespaceSDict *unl,
+ const QCString &name)
+{
+ NamespaceDef *usingNd =0;
+ if (unl)
+ {
+ //printf("Found namespace dict %d\n",unl->count());
+ NamespaceSDict::Iterator unli(*unl);
+ NamespaceDef *und;
+ for (unli.toFirst();(und=unli.current());++unli)
+ {
+ QCString uScope=und->name()+"::";
+ usingNd = getResolvedNamespace(uScope+name);
+ //printf("Also trying with scope=`%s' usingNd=%p\n",(uScope+name).data(),usingNd);
+ }
+ }
+ return usingNd;
+}
+
static void findUsingDirectives(Entry *root)
{
if (root->section==Entry::USINGDIR_SEC)
@@ -1366,7 +1389,7 @@ static void findUsingDirectives(Entry *root)
// find the scope in which the `using' namespace is defined by prepending
// the possible scopes in which the using statement was found, starting
// with the most inner scope and going to the most outer scope (i.e.
- // file scope).
+ // file scope).
int scopeOffset = nsName.length();
do
{
@@ -1384,7 +1407,34 @@ static void findUsingDirectives(Entry *root)
}
} while (scopeOffset>=0 && usingNd==0);
- //printf("%s -> %p\n",name.data(),usingNd);
+ if (usingNd==0 && nd) // not found, try used namespaces in this scope
+ // or in one of the parent namespace scopes
+ {
+ NamespaceDef *pnd = nd;
+ while (pnd && usingNd==0)
+ {
+ // also try with one of the used namespaces found earlier
+ usingNd = findUsedNamespace(pnd->getUsedNamespaces(),name);
+
+ // goto the parent
+ Definition *s = pnd->getOuterScope();
+ if (s && s->definitionType()==Definition::TypeNamespace)
+ {
+ pnd = (NamespaceDef*)s;
+ }
+ else
+ {
+ pnd = 0;
+ }
+ }
+ }
+ if (usingNd==0 && fd) // still nothing, also try used namespace in the
+ // global scope
+ {
+ usingNd = findUsedNamespace(fd->getUsedNamespaces(),name);
+ }
+
+ //printf("%s -> %s\n",name.data(),usingNd?usingNd->name().data():"<none>");
// add the namespace the correct scope
if (usingNd)
@@ -1911,9 +1961,10 @@ static MemberDef *addVariableToFile(
)
// variable already in the scope
{
- if (! // not a php array
- (getLanguageFromFileName(md->getFileDef()->name())==SrcLangExt_PHP) &&
- (md->argsString()!=root->args && root->args.find('[')!=-1)
+ if (md->getFileDef() &&
+ ! // not a php array
+ (getLanguageFromFileName(md->getFileDef()->name())==SrcLangExt_PHP) &&
+ (md->argsString()!=root->args && root->args.find('[')!=-1)
)
// not a php array variable
{
@@ -8852,6 +8903,7 @@ void parseInput()
Doxygen::memberNameSDict.sort();
Doxygen::functionNameSDict.sort();
Doxygen::hiddenClasses.sort();
+ printf("Sorting %d classes\n",Doxygen::classSDict.count());
Doxygen::classSDict.sort();
msg("Freeing entry tree\n");
diff --git a/src/doxygen.css b/src/doxygen.css
index 05615b2..1b47802 100644
--- a/src/doxygen.css
+++ b/src/doxygen.css
@@ -80,7 +80,7 @@ A.codeRef:visited { font-weight: normal; color: #0000FF}
A:hover { text-decoration: none; background-color: #f2f2ff }
DL.el { margin-left: -1cm }
.fragment {
- font-family: Fixed, monospace;
+ font-family: monospace, fixed;
font-size: 95%;
}
PRE.fragment {
@@ -96,14 +96,7 @@ PRE.fragment {
padding-bottom: 4px;
}
DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
-TD.md { background-color: #F4F4FB; font-weight: bold; }
-TD.mdPrefix {
- background-color: #F4F4FB;
- color: #606060;
- font-size: 80%;
-}
-TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
-TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+
DIV.groupHeader {
margin-left: 16px;
margin-top: 12px;
@@ -156,13 +149,6 @@ SPAN.comment { color: #800000 }
SPAN.preprocessor { color: #806020 }
SPAN.stringliteral { color: #002080 }
SPAN.charliteral { color: #008080 }
-.mdTable {
- border: 1px solid #868686;
- background-color: #F4F4FB;
-}
-.mdRow {
- padding: 8px 10px;
-}
.mdescLeft {
padding: 0px 8px 4px 8px;
font-size: 80%;
@@ -308,3 +294,51 @@ HR { height: 1px;
border-top: 1px solid black;
}
+/* Style for detailed member documentation */
+.memtemplate {
+ font-size: 80%;
+ color: #606060;
+ font-weight: normal;
+}
+.memnav {
+ background-color: #e8eef2;
+ border: 1px solid #84b0c7;
+ text-align: center;
+ margin: 2px;
+ margin-right: 15px;
+ padding: 2px;
+}
+.memitem {
+ width: 100%;
+ background-color: #eef3f5;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #dedeee;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.memname {
+ white-space: nowrap;
+}
+.memdoc{
+ padding-left: 10px;
+}
+.memproto {
+ background-color: #d5e1e8;
+ width: 100%;
+ border-width: 1px;
+ border-style: solid;
+ border-color: #84b0c7;
+ font-weight: bold;
+ -moz-border-radius: 8px 8px 8px 8px;
+}
+.paramkey {
+ text-align: right;
+}
+.paramtype {
+ white-space: nowrap;
+}
+.paramname {
+ color: #602020;
+ font-style: italic;
+}
+/* End Styling for detailed member documentation */
diff --git a/src/doxygen_css.h b/src/doxygen_css.h
index acb7fa6..8268b16 100644
--- a/src/doxygen_css.h
+++ b/src/doxygen_css.h
@@ -80,7 +80,7 @@
"A:hover { text-decoration: none; background-color: #f2f2ff }\n"
"DL.el { margin-left: -1cm }\n"
".fragment {\n"
-" font-family: Fixed, monospace;\n"
+" font-family: monospace, fixed;\n"
" font-size: 95%;\n"
"}\n"
"PRE.fragment {\n"
@@ -96,14 +96,7 @@
" padding-bottom: 4px;\n"
"}\n"
"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n"
-"TD.md { background-color: #F4F4FB; font-weight: bold; }\n"
-"TD.mdPrefix {\n"
-" background-color: #F4F4FB;\n"
-" color: #606060;\n"
-" font-size: 80%;\n"
-"}\n"
-"TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }\n"
-"TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }\n"
+"\n"
"DIV.groupHeader {\n"
" margin-left: 16px;\n"
" margin-top: 12px;\n"
@@ -156,13 +149,6 @@
"SPAN.preprocessor { color: #806020 }\n"
"SPAN.stringliteral { color: #002080 }\n"
"SPAN.charliteral { color: #008080 }\n"
-".mdTable {\n"
-" border: 1px solid #868686;\n"
-" background-color: #F4F4FB;\n"
-"}\n"
-".mdRow {\n"
-" padding: 8px 10px;\n"
-"}\n"
".mdescLeft {\n"
" padding: 0px 8px 4px 8px;\n"
" font-size: 80%;\n"
@@ -308,3 +294,51 @@
" border-top: 1px solid black;\n"
"}\n"
"\n"
+"/* Style for detailed member documentation */\n"
+".memtemplate {\n"
+" font-size: 80%;\n"
+" color: #606060;\n"
+" font-weight: normal;\n"
+"} \n"
+".memnav { \n"
+" background-color: #e8eef2;\n"
+" border: 1px solid #84b0c7;\n"
+" text-align: center;\n"
+" margin: 2px;\n"
+" margin-right: 15px;\n"
+" padding: 2px;\n"
+"}\n"
+".memitem {\n"
+" width: 100%;\n"
+" background-color: #eef3f5;\n"
+" border-width: 1px;\n"
+" border-style: solid;\n"
+" border-color: #dedeee;\n"
+" -moz-border-radius: 8px 8px 8px 8px;\n"
+"}\n"
+".memname {\n"
+" white-space: nowrap;\n"
+"}\n"
+".memdoc{\n"
+" padding-left: 10px;\n"
+"}\n"
+".memproto {\n"
+" background-color: #d5e1e8;\n"
+" width: 100%;\n"
+" border-width: 1px;\n"
+" border-style: solid;\n"
+" border-color: #84b0c7;\n"
+" font-weight: bold;\n"
+" -moz-border-radius: 8px 8px 8px 8px;\n"
+"}\n"
+".paramkey {\n"
+" text-align: right;\n"
+"}\n"
+".paramtype {\n"
+" white-space: nowrap;\n"
+"}\n"
+".paramname {\n"
+" color: #602020;\n"
+" font-style: italic;\n"
+"}\n"
+"/* End Styling for detailed member documentation */\n"
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 69aa87c..04d5a9f 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1235,21 +1235,39 @@ void HtmlGenerator::endIndexValue(const char *,bool)
t << "</td></tr>" << endl;
}
+void HtmlGenerator::startMemberDocList()
+{
+ DBG_HTML(t << "<!-- startMemberDocList -->" << endl;)
+ t << "<table class=\"memlist\">" << endl;
+ t << " <tr>" << endl;
+ t << " <td>" << endl;
+}
+
+void HtmlGenerator::endMemberDocList()
+{
+ DBG_HTML(t << "<!-- endMemberDocList -->" << endl;)
+ t << " </td>" << endl;
+ t << " </tr>" << endl;
+ t << "</table>" << endl;
+}
+
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
{
DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
t << "<p>" << endl;
- t << "<table class=\"mdTable\" cellpadding=\"2\" cellspacing=\"0\">" << endl;
+
+ t << "<table class=\"memitem\">" << endl;
t << " <tr>" << endl;
- t << " <td class=\"mdRow\">" << endl;
- t << " <table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">" << endl;
+ t << " <td>" << endl;
+ t << " <table class=\"memproto\">" << endl;
+
}
void HtmlGenerator::startMemberDocPrefixItem()
{
DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;)
t << " <tr>" << endl;
- t << " <td class=\"mdPrefix\" colspan=\"4\">" << endl;
+ t << " <td class=\"memtemplate\" colspan=\"5\">";
}
void HtmlGenerator::endMemberDocPrefixItem()
@@ -1259,13 +1277,11 @@ void HtmlGenerator::endMemberDocPrefixItem()
t << " </tr>" << endl;
}
-void HtmlGenerator::startMemberDocName(bool align)
+void HtmlGenerator::startMemberDocName(bool /*align*/)
{
DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
t << " <tr>" << endl;
- t << " <td class=\"md\" nowrap valign=\"top\"";
- if (align) t << " align=\"right\"";
- t << ">";
+ t << " <td class=\"memname\">";
}
void HtmlGenerator::endMemberDocName()
@@ -1277,11 +1293,8 @@ void HtmlGenerator::endMemberDocName()
void HtmlGenerator::startParameterList(bool openBracket)
{
DBG_HTML(t << "<!-- startParameterList -->" << endl;)
- t << " <td class=\"md\" valign=\"top\">";
- if (openBracket)
- {
- t << "(&nbsp;";
- }
+ t << " <td>";
+ if (openBracket) t << "(";
t << "</td>" << endl;
}
@@ -1290,17 +1303,17 @@ void HtmlGenerator::startParameterType(bool first,const char *key)
if (first)
{
DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;)
- t << " <td class=\"md\" nowrap valign=\"top\">";
+ t << " <td class=\"paramtype\">";
}
else
{
DBG_HTML(t << "<!-- startParameterType -->" << endl;)
t << " <tr>" << endl;
- t << " <td class=\"md\" nowrap align=\"right\">";
+ t << " <td class=\"paramkey\">";
if (key) t << key;
t << "</td>" << endl;
- t << " <td class=\"md\"></td>" << endl;
- t << " <td class=\"md\" nowrap>";
+ t << " <td></td>" << endl;
+ t << " <td class=\"paramtype\">";
}
}
@@ -1310,15 +1323,10 @@ void HtmlGenerator::endParameterType()
t << "&nbsp;</td>" << endl;
}
-void HtmlGenerator::startParameterName(bool oneArgOnly)
+void HtmlGenerator::startParameterName(bool /*oneArgOnly*/)
{
DBG_HTML(t << "<!-- startParameterName -->" << endl;)
- t << " <td class=\"mdname";
- if (oneArgOnly)
- {
- t << "1\" valign=\"top";
- }
- t << "\" nowrap>"; //&nbsp;";
+ t << " <td class=\"paramname\">";
}
void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
@@ -1329,21 +1337,21 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
if (emptyList)
{
t << " </td>" << endl;
- t << " <td class=\"md\" valign=\"top\">";
+ t << " <td>";
if (closeBracket) t << "&nbsp;)";
t << "&nbsp;</td>" << endl;
- t << " <td class=\"md\" nowrap>";
+ t << " <td width=\"100%\">";
}
else
{
- t << "</td>" << endl;
+ t << "</td><td>&nbsp;</td>" << endl;
t << " </tr>" << endl;
t << " <tr>" << endl;
- t << " <td class=\"md\"></td>" << endl;
- t << " <td class=\"md\">";
+ t << " <td></td>" << endl;
+ t << " <td>";
if (closeBracket) t << ")";
- t << "&nbsp;</td>" << endl;
- t << " <td class=\"md\" colspan=\"2\">";
+ t << "</td>" << endl;
+ t << " <td></td><td></td><td width=\"100%\">";
}
}
else
@@ -1370,7 +1378,6 @@ void HtmlGenerator::endMemberDoc(bool hasArgs)
t << " </table>" << endl;
t << " </td>" << endl;
t << " </tr>" << endl;
- t << "</table>" << endl;
}
void HtmlGenerator::startDotGraph()
@@ -1461,17 +1468,15 @@ void HtmlGenerator::startIndent()
// It's back to abusing tables :-(
//t << "<div class=\"in\">" << endl;
+ DBG_HTML(t << "<!-- startIndent -->" << endl;)
- t << "<table cellspacing=\"5\" cellpadding=\"0\" border=\"0\">\n"
- " <tr>\n"
- " <td>\n"
- " &nbsp;\n"
- " </td>\n"
- " <td>\n";
+ t << " <tr>\n"
+ " <td >\n";
}
void HtmlGenerator::endIndent()
{
+ DBG_HTML(t << "<!-- endIndent -->" << endl;)
t << " </td>\n"
" </tr>\n"
"</table>\n";
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 567a166..9ecfb0c 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -95,6 +95,8 @@ class HtmlGenerator : public OutputGenerator
void endMemberHeader();
void startMemberSubtitle();
void endMemberSubtitle();
+ void startMemberDocList();
+ void endMemberDocList();
void startMemberList();
void endMemberList();
void startAnonTypeScope(int) {}
diff --git a/src/latexgen.h b/src/latexgen.h
index 2d347ea..6a7a484 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -93,6 +93,8 @@ class LatexGenerator : public OutputGenerator
void endMemberHeader();
void startMemberSubtitle() {}
void endMemberSubtitle() {}
+ void startMemberDocList() {}
+ void endMemberDocList() {}
void startMemberList();
void endMemberList();
void startAnonTypeScope(int);
diff --git a/src/mangen.h b/src/mangen.h
index 8d4d981..e2ad571 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -98,6 +98,8 @@ class ManGenerator : public OutputGenerator
void startMemberSubtitle() {}
void endMemberSubtitle() {}
void writeListItem();
+ void startMemberDocList() {}
+ void endMemberDocList() {}
void startMemberList();
void endMemberList();
void startAnonTypeScope(int);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 9651e33..2f40015 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1307,8 +1307,15 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
HtmlHelp *htmlHelp = 0;
if (hasHtmlHelp)
{
- htmlHelp = HtmlHelp::getInstance();
- htmlHelp->addIndexItem(ciname,name(),cfiname,cfname,memAnchor);
+ if (isEnumerate() && name().at(0)=='@')
+ {
+ // don't add to index
+ }
+ else
+ {
+ htmlHelp = HtmlHelp::getInstance();
+ htmlHelp->addIndexItem(ciname,name(),cfiname,cfname,memAnchor);
+ }
}
// get member name
@@ -2249,6 +2256,10 @@ bool MemberDef::isConstructor() const
{
return name()=="this";
}
+ else if (fileDef && getLanguageFromFileName(fileDef->name())==SrcLangExt_PHP)
+ { // for PHP
+ return name()=="__construct";
+ }
else // for other languages
{
QCString locName = classDef->localName();
@@ -2273,6 +2284,10 @@ bool MemberDef::isDestructor() const
{
return name()=="~this";
}
+ else if (fileDef && getLanguageFromFileName(fileDef->name())==SrcLangExt_PHP)
+ { // for PHP
+ return name()=="__destruct";
+ }
else // other languages
{
return name().find('~')!=-1 && name().find("operator")==-1;
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 3c27bb3..35bb73c 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -369,6 +369,7 @@ void MemberList::writeDocumentation(OutputList &ol,
ol.parseText(title);
ol.endGroupHeader();
}
+ ol.startMemberDocList();
MemberListIterator mli(*this);
MemberDef *md;
@@ -386,6 +387,7 @@ void MemberList::writeDocumentation(OutputList &ol,
mg->writeDocumentation(ol,scopeName,container);
}
}
+ ol.endMemberDocList();
}
void MemberList::writeDocumentationPage(OutputList &ol,
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index b5ee936..447a074 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -151,44 +151,45 @@ void NamespaceDef::insertMember(MemberDef *md)
{
//memList->append(md);
allMemberList.append(md);
+ static bool sortBriefDocs=Config_getBool("SORT_BRIEF_DOCS");
switch(md->memberType())
{
case MemberDef::Variable:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decVarMembers.inSort(md);
else
decVarMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docVarMembers.inSort(md);
else
docVarMembers.append(md);
break;
case MemberDef::Function:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decFuncMembers.inSort(md);
else
decFuncMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docFuncMembers.inSort(md);
else
docFuncMembers.append(md);
break;
case MemberDef::Typedef:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decTypedefMembers.inSort(md);
else
decTypedefMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docTypedefMembers.inSort(md);
else
docTypedefMembers.append(md);
break;
case MemberDef::Enumeration:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decEnumMembers.inSort(md);
else
decEnumMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docEnumMembers.inSort(md);
else
docEnumMembers.append(md);
@@ -196,21 +197,21 @@ void NamespaceDef::insertMember(MemberDef *md)
case MemberDef::EnumValue:
break;
case MemberDef::Prototype:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decProtoMembers.inSort(md);
else
decProtoMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docProtoMembers.inSort(md);
else
docProtoMembers.append(md);
break;
case MemberDef::Define:
- if (Config_getBool("SORT_BRIEF_DOCS"))
+ if (sortBriefDocs)
decDefineMembers.inSort(md);
else
decDefineMembers.append(md);
- if (Config_getBool("SORT_MEMBER_DOCS"))
+ if (sortBriefDocs)
docDefineMembers.inSort(md);
else
docDefineMembers.append(md);
diff --git a/src/outputgen.h b/src/outputgen.h
index e92d633..e450a46 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -306,8 +306,10 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endMemberHeader() = 0;
virtual void startMemberSubtitle() = 0;
virtual void endMemberSubtitle() = 0;
- virtual void startMemberList() = 0;
- virtual void endMemberList() = 0;
+ virtual void startMemberDocList() = 0;
+ virtual void endMemberDocList() = 0;
+ virtual void startMemberList() = 0;
+ virtual void endMemberList() = 0;
virtual void startAnonTypeScope(int) = 0;
virtual void endAnonTypeScope(int) = 0;
virtual void startMemberItem(int) = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index 3e4b5c0..cc6ccef 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -162,6 +162,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startMemberSubtitle); }
void endMemberSubtitle()
{ forall(&OutputGenerator::endMemberSubtitle); }
+ void startMemberDocList()
+ { forall(&OutputGenerator::startMemberDocList); }
+ void endMemberDocList()
+ { forall(&OutputGenerator::endMemberDocList); }
void startMemberList()
{ forall(&OutputGenerator::startMemberList); }
void endMemberList()
diff --git a/src/rtfgen.h b/src/rtfgen.h
index d17cad8..a567b7a 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -101,6 +101,8 @@ class RTFGenerator : public OutputGenerator
void endMemberHeader() { endGroupHeader(); }
void startMemberSubtitle();
void endMemberSubtitle();
+ void startMemberDocList() {}
+ void endMemberDocList() {}
void startMemberList();
void endMemberList();
void startAnonTypeScope(int) {}
diff --git a/src/util.cpp b/src/util.cpp
index bcea278..231910b 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- * $Id$
+ *
*
* Copyright (C) 1997-2005 by Dimitri van Heesch.
*
@@ -5674,6 +5674,7 @@ SrcLangExt getLanguageFromFileName(const QCString fileName)
extLookup.insert(".d", (void*)SrcLangExt_D);
extLookup.insert(".php", (void*)SrcLangExt_PHP);
extLookup.insert(".php4", (void*)SrcLangExt_PHP);
+ extLookup.insert(".php5", (void*)SrcLangExt_PHP);
extLookup.insert(".inc", (void*)SrcLangExt_PHP);
extLookup.insert(".phtml", (void*)SrcLangExt_PHP);
extLookup.insert(".m", (void*)SrcLangExt_ObjC);
diff --git a/wintools/version.pl b/wintools/version.pl
index e20e64e..1895346 100644
--- a/wintools/version.pl
+++ b/wintools/version.pl
@@ -11,7 +11,7 @@ while (<FILE>) {
$minor=$1
} elsif (/doxygen_version_revision=(\d+)/) {
$revision=$1
- } elsif (/doxygen_version_mmn=(\w+)/) {
+ } elsif (/doxygen_version_mmn=(\w+)/ && ($1 ne "NO")) {
$mmn=$1
}
}