summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-08-26 14:15:46 (GMT)
committerdimitri <dimitri@afe2bf4a-e733-0410-8a33-86f594647bc7>2001-08-26 14:15:46 (GMT)
commitc822eb3d9ce727dd69954661edcabcad479c1481 (patch)
tree9acee8d8d8b91289eb8173fd93a8f16891fc2a92
parent2f7902073680b977b74f3faeada95119ec767eb3 (diff)
downloadDoxygen-c822eb3d9ce727dd69954661edcabcad479c1481.zip
Doxygen-c822eb3d9ce727dd69954661edcabcad479c1481.tar.gz
Doxygen-c822eb3d9ce727dd69954661edcabcad479c1481.tar.bz2
Release-1.2.10
-rw-r--r--INSTALL4
-rw-r--r--README4
-rw-r--r--VERSION2
-rw-r--r--addon/xmlparse/basehandler.h2
-rw-r--r--addon/xmlparse/dochandler.cpp98
-rw-r--r--addon/xmlparse/dochandler.h24
-rw-r--r--addon/xmlparse/main.cpp8
-rw-r--r--doc/language.doc2
-rw-r--r--doc/translator.pl34
-rw-r--r--packages/rpm/doxygen.spec2
-rw-r--r--src/classdef.cpp10
-rw-r--r--src/classdef.h4
-rw-r--r--src/classlist.cpp8
-rw-r--r--src/doc.l43
-rw-r--r--src/doxygen.cpp23
-rw-r--r--src/htmlgen.cpp24
-rw-r--r--src/htmlgen.h2
-rw-r--r--src/index.cpp1
-rw-r--r--src/latexgen.h2
-rw-r--r--src/mangen.cpp2
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp20
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.h8
-rw-r--r--src/rtfgen.cpp2
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/scanner.l82
-rw-r--r--src/util.cpp84
-rw-r--r--src/xmlgen.cpp51
29 files changed, 383 insertions, 169 deletions
diff --git a/INSTALL b/INSTALL
index 38c116e..ae41927 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
-DOXYGEN Version 1.2.9-20010819
+DOXYGEN Version 1.2.10
Please read the installation section of the manual for instructions.
--------
-Dimitri van Heesch (19 August 2001)
+Dimitri van Heesch (26 August 2001)
diff --git a/README b/README
index 22b2c1e..526b78a 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.2.9_20010819
+DOXYGEN Version 1.2.10
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) (19 August 2001)
+Dimitri van Heesch (dimitri@stack.nl) (26 August 2001)
diff --git a/VERSION b/VERSION
index 7f67068..963ed7c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.9-20010819
+1.2.10
diff --git a/addon/xmlparse/basehandler.h b/addon/xmlparse/basehandler.h
index 6129aa4..3c64d42 100644
--- a/addon/xmlparse/basehandler.h
+++ b/addon/xmlparse/basehandler.h
@@ -146,7 +146,7 @@ template<class T> class BaseHandler : public IBaseHandler,
(*handler)(attrib);
//printf("found start tag %s\n",name.data());
}
- else if (m_fallBackHandler &&
+ else if (!m_fallBackHandler ||
!m_fallBackHandler->handleStartElement(name,attrib)
)
{
diff --git a/addon/xmlparse/dochandler.cpp b/addon/xmlparse/dochandler.cpp
index 7a72763..29e8799 100644
--- a/addon/xmlparse/dochandler.cpp
+++ b/addon/xmlparse/dochandler.cpp
@@ -14,7 +14,46 @@
*/
#include "dochandler.h"
+#include <qmap.h>
+
+class TypeNameMapper
+{
+ public:
+ TypeNameMapper()
+ {
+ m_typeNameMap.insert("see", SimpleSectHandler::See);
+ m_typeNameMap.insert("return", SimpleSectHandler::Return);
+ m_typeNameMap.insert("author", SimpleSectHandler::Author);
+ m_typeNameMap.insert("version", SimpleSectHandler::Version);
+ m_typeNameMap.insert("since", SimpleSectHandler::Since);
+ m_typeNameMap.insert("date", SimpleSectHandler::Date);
+ m_typeNameMap.insert("bug", SimpleSectHandler::Bug);
+ m_typeNameMap.insert("note", SimpleSectHandler::Note);
+ m_typeNameMap.insert("warning", SimpleSectHandler::Warning);
+ m_typeNameMap.insert("par", SimpleSectHandler::Par);
+ m_typeNameMap.insert("deprecated",SimpleSectHandler::Deprecated);
+ m_typeNameMap.insert("pre", SimpleSectHandler::Pre);
+ m_typeNameMap.insert("post", SimpleSectHandler::Post);
+ m_typeNameMap.insert("invariant", SimpleSectHandler::Invar);
+ m_typeNameMap.insert("remark", SimpleSectHandler::Remark);
+ m_typeNameMap.insert("attention", SimpleSectHandler::Attention);
+ m_typeNameMap.insert("todo", SimpleSectHandler::Todo);
+ m_typeNameMap.insert("test", SimpleSectHandler::Test);
+ m_typeNameMap.insert("rcs", SimpleSectHandler::RCS);
+ m_typeNameMap.insert("enumvalues",SimpleSectHandler::EnumValues);
+ m_typeNameMap.insert("examples", SimpleSectHandler::Examples);
+ }
+ SimpleSectHandler::Types stringToType(const QString &typeStr)
+ {
+ return m_typeNameMap[typeStr];
+ }
+ private:
+ QMap<QString,SimpleSectHandler::Types> m_typeNameMap;
+};
+
+static TypeNameMapper g_typeMapper;
+
//----------------------------------------------------------------------
// MarkupHandler
//----------------------------------------------------------------------
@@ -334,6 +373,56 @@ void ParameterListHandler::startParameterDescription(const QXmlAttributes& attri
}
//----------------------------------------------------------------------
+// SimpleSectHandler
+//----------------------------------------------------------------------
+
+SimpleSectHandler::SimpleSectHandler(IBaseHandler *parent)
+ : DocNode(Para), m_parent(parent), m_paragraph(0)
+{
+ addStartHandler("title",this,&SimpleSectHandler::startTitle);
+ addEndHandler("title",this,&SimpleSectHandler::endTitle);
+ addStartHandler("para",this,&SimpleSectHandler::startParagraph);
+}
+
+SimpleSectHandler::~SimpleSectHandler()
+{
+}
+
+void SimpleSectHandler::startSimpleSect(const QXmlAttributes& attrib)
+{
+ m_type = g_typeMapper.stringToType(attrib.value("kind"));
+ addEndHandler("simplesect",this,&SimpleSectHandler::endSimpleSect);
+ printf("start simple section %s\n",attrib.value("kind").data());
+ m_parent->setDelegate(this);
+}
+
+void SimpleSectHandler::endSimpleSect()
+{
+ printf("end simple section\n");
+ m_parent->setDelegate(0);
+}
+
+void SimpleSectHandler::startTitle(const QXmlAttributes& /*attrib*/)
+{
+ m_curString="";
+}
+
+void SimpleSectHandler::endTitle()
+{
+ printf("simpleSect title=\"%s\"\n",m_curString.data());
+ m_title = m_curString;
+ m_curString="";
+}
+
+
+void SimpleSectHandler::startParagraph(const QXmlAttributes& attrib)
+{
+ ASSERT(m_paragraph==0);
+ m_paragraph = new ParagraphHandler(this);
+ m_paragraph->startParagraph(attrib);
+}
+
+//----------------------------------------------------------------------
// ParagraphHandler
//----------------------------------------------------------------------
@@ -350,6 +439,7 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent)
addStartHandler("itemizedlist",this,&ParagraphHandler::startItemizedList);
addStartHandler("orderedlist",this,&ParagraphHandler::startOrderedList);
addStartHandler("parameterlist",this,&ParagraphHandler::startParameterList);
+ addStartHandler("simplesect",this,&ParagraphHandler::startSimpleSect);
}
ParagraphHandler::~ParagraphHandler()
@@ -394,6 +484,14 @@ void ParagraphHandler::startParameterList(const QXmlAttributes& attrib)
m_children.append(parListHandler);
}
+void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib)
+{
+ addTextNode();
+ SimpleSectHandler *sectHandler = new SimpleSectHandler(this);
+ sectHandler->startSimpleSect(attrib);
+ m_children.append(sectHandler);
+}
+
void ParagraphHandler::addTextNode()
{
if (!m_curString.isEmpty())
diff --git a/addon/xmlparse/dochandler.h b/addon/xmlparse/dochandler.h
index c7c8095..4dc50c5 100644
--- a/addon/xmlparse/dochandler.h
+++ b/addon/xmlparse/dochandler.h
@@ -52,7 +52,8 @@ class DocNode
OrderedList,
ListItem,
ParameterList,
- Parameter
+ Parameter,
+ SimpleSect
};
DocNode(NodeKind k) : m_kind(k) {}
virtual ~DocNode() {}
@@ -225,11 +226,13 @@ class ParameterListHandler : public DocNode,
/* \brief Node representing a simple section with an unnumbered header.
*
*/
+// children: title, para
class SimpleSectHandler : public DocNode,
public BaseHandler<SimpleSectHandler>
{
public:
- enum Types { See, Return, Author, Version,
+ enum Types { Invalid = 0,
+ See, Return, Author, Version,
Since, Date, Bug, Note,
Warning, Par, Deprecated, Pre,
Post, Invar, Remark, Attention,
@@ -240,11 +243,15 @@ class SimpleSectHandler : public DocNode,
virtual ~SimpleSectHandler();
virtual void startSimpleSect(const QXmlAttributes& attrib);
virtual void endSimpleSect();
+ virtual void startTitle(const QXmlAttributes& attrib);
+ virtual void endTitle();
+ virtual void startParagraph(const QXmlAttributes& attrib);
private:
IBaseHandler *m_parent;
- ParameterHandler *m_curParam;
+ ParagraphHandler *m_paragraph;
Types m_type;
+ // TODO: a title can also contain links (for todo sections for instance!)
QString m_title;
};
@@ -253,6 +260,13 @@ class SimpleSectHandler : public DocNode,
/*! \brief Node representing a paragraph of text and commands.
*
*/
+// children: itemizedlist, orderedlist, parameterlist, simplesect,
+// programlisting, hruler, variablelist,
+// linebreak, nonbreakablespace, ref, ulink, email,
+// table, link, indexentry, formula, image, dotfile, ref
+// children handled by MarkupHandler:
+// bold, computeroutput, emphasis, center,
+// small, subscript, superscript.
class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
{
public:
@@ -261,6 +275,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
virtual void startItemizedList(const QXmlAttributes& attrib);
virtual void startOrderedList(const QXmlAttributes& attrib);
virtual void startParameterList(const QXmlAttributes& attrib);
+ virtual void startSimpleSect(const QXmlAttributes& attrib);
ParagraphHandler(IBaseHandler *parent);
virtual ~ParagraphHandler();
@@ -277,6 +292,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
/*! \brief Node representing a documentation block.
*
*/
+// children: para, title, sect1, sect2, sect3
class DocHandler : public BaseHandler<DocHandler>
{
public:
@@ -288,7 +304,7 @@ class DocHandler : public BaseHandler<DocHandler>
virtual ~DocHandler();
private:
IBaseHandler *m_parent;
- QList<ParagraphHandler> m_children;
+ QList<DocNode> m_children;
};
#endif
diff --git a/addon/xmlparse/main.cpp b/addon/xmlparse/main.cpp
index 3575c16..44c5e36 100644
--- a/addon/xmlparse/main.cpp
+++ b/addon/xmlparse/main.cpp
@@ -63,10 +63,6 @@ int main(int argc,char **argv)
}
QFile xmlFile(argv[1]);
- if (!xmlFile.open( IO_ReadOnly ))
- {
- qFatal("Could not read %s",argv[1] );
- }
#ifdef USE_SAX
MainHandler handler;
@@ -79,6 +75,10 @@ int main(int argc,char **argv)
#endif
#ifdef USE_DOM
+ if (!xmlFile.open( IO_ReadOnly ))
+ {
+ qFatal("Could not read %s",argv[1] );
+ }
QDomDocument doc;
doc.setContent( &xmlFile );
diff --git a/doc/language.doc b/doc/language.doc
index 74f75b4..91046f2 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
-Currently (version 1.2.9-20010812), 24 languages
+Currently (version 1.2.9-20010819), 24 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Chinese, Croatian, Czech, Danish,
Dutch, English, Finnish, French, German,
diff --git a/doc/translator.pl b/doc/translator.pl
index a19a6d8..207f191 100644
--- a/doc/translator.pl
+++ b/doc/translator.pl
@@ -50,10 +50,10 @@
# can be updated so that the generated language.doc does not contain
# the link to the translator_report.txt.
#
-# Todo:
-# -----
-# - Something changed. The environment variables like VERSION,
-# DOXYGEN_DOCDIR are not set now when make is run.
+# 2001/08/20
+# - StripArgIdentifiers() enhanced to be more robust in producing
+# equal prototypes from the base class and from the derived
+# classes (if they should be considered equal).
#
################################################################
@@ -174,6 +174,8 @@ sub StripArgIdentifiers ##{{{
foreach my $arg (@a) {
+ # Only the type of the identifier is important...
+ #
$arg =~ s{^(\s* # there can be spaces behind comma,
(const\s+)? # possibly const at the beginning
[A-Za-z0-9_:]+ # type identifier can be qualified
@@ -183,6 +185,20 @@ sub StripArgIdentifiers ##{{{
}
{$1}x; # remember only the important things
+ # People may differ in opinion whether a space should
+ # or should not be written between a type identifier and
+ # the '*' or '&' (when the argument is a pointer or a reference).
+ #
+ $arg =~ s{\s*([*&])}{ $1};
+
+ # Whitespaces are not only spaces. Moreover, the difference
+ # may be in number of them in a sequence or in the type
+ # of a whitespace. This is the reason to replace each sequence
+ # of whitespace by a single, real space.
+ #
+ $arg =~ s{\s+}{ }g;
+
+ # Remember the stripped form of the arguments
push(@stripped, $arg);
}
@@ -683,6 +699,11 @@ print STDERR "\n\n";
#
my @expected = GetPureVirtualFrom("$srcdir/translator.h");
+ # The details for translators will be collected into the output
+ # string.
+ #
+ my $output = '';
+
# Remove the argument identifiers from the method prototypes
# to get only the required form of the prototype. Fill the
# hash with them. #{{{
@@ -700,11 +721,6 @@ print STDERR "\n\n";
#
my %cb = ();
- # The details for translators will be collected into the output
- # string.
- #
- my $output = '';
-
# Loop through all translator files. Extract the implemented
# virtual methods and compare it with the requirements. Prepare
# the output.
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 2443735..ec9287e 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,5 +1,5 @@
Name: doxygen
-Version: 1.2.9_20010819
+Version: 1.2.10
Summary: documentation system for C, C++ and IDL
Release: 4
Source: doxygen-%{version}.src.tar.gz
diff --git a/src/classdef.cpp b/src/classdef.cpp
index ebb22e4..54f78e4 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -104,6 +104,7 @@ ClassDef::ClassDef(
m_templBaseClassNames = 0;
m_artificial = FALSE;
m_isAbstract = FALSE;
+ m_isStatic = FALSE;
}
// destroy the class definition
@@ -1073,9 +1074,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
if (exampleFlag)
{
ol.startDescList(BaseOutputDocInterface::Examples);
- ol.startBold();
parseText(ol,theTranslator->trExamples()+": ");
- ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
ol.newParagraph();
@@ -1546,7 +1545,8 @@ bool ClassDef::isLinkableInProject() const
name().find('@')==-1 && /* anonymous compound */
(m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) && /* private */
hasDocumentation() && /* documented */
- !isReference(); /* not an external reference */
+ !isReference() && /* not an external reference */
+ (!m_isStatic || Config_getBool("EXTRACT_STATIC"));
}
}
@@ -1578,7 +1578,9 @@ bool ClassDef::isVisibleInHierarchy()
(hasDocumentation() ||
!Config_getBool("HIDE_UNDOC_CLASSES") ||
isReference()
- );
+ ) &&
+ // is not part of an unnamed namespace or shown anyway
+ (!m_isStatic || Config_getBool("EXTRACT_STATIC"));
}
bool ClassDef::hasDocumentation() const
diff --git a/src/classdef.h b/src/classdef.h
index 51d0112..d31d99b 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -270,6 +270,7 @@ class ClassDef : public Definition
void setTemplateMaster(ClassDef *tm) { m_templateMaster=tm; }
void addMembersToTemplateInstance(ClassDef *cd,const char *templSpec);
void setClassIsArtificial() { m_artificial = TRUE; }
+ void setIsStatic(bool b) { m_isStatic=b; }
/*! Creates a new compound definition.
* \param outerScope class, file or namespace in which this class is
@@ -401,6 +402,9 @@ class ClassDef : public Definition
bool m_isAbstract;
QCString m_className;
+
+ /*! Is the class part of an unnamed namespace? */
+ bool m_isStatic;
};
/*! \brief Class that contains information about a usage relation.
diff --git a/src/classlist.cpp b/src/classlist.cpp
index 7c69d73..3772ae5 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -35,8 +35,8 @@ int ClassList::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
- return stricmp(c1->name().data()+getPrefixIndex(c1->localName()),
- c2->name().data()+getPrefixIndex(c2->localName())
+ return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
+ c2->localName().data()+getPrefixIndex(c2->localName())
);
}
@@ -44,8 +44,8 @@ int ClassSDict::compareItems(GCI item1, GCI item2)
{
ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2;
- return stricmp(c1->name().data()+getPrefixIndex(c1->localName()),
- c2->name().data()+getPrefixIndex(c2->localName())
+ return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
+ c2->localName().data()+getPrefixIndex(c2->localName())
);
}
diff --git a/src/doc.l b/src/doc.l
index 0b25480..59b714c 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -1170,9 +1170,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inParBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Par);
- outDoc->startBold();
outDoc->docify(title);
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1190,9 +1188,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inWarningBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Warning);
- outDoc->startBold();
scanString(theTranslator->trWarning()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1209,9 +1205,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inRemarkBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Remark);
- outDoc->startBold();
scanString(theTranslator->trRemarks()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1228,9 +1222,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inAttentionBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Attention);
- outDoc->startBold();
scanString(theTranslator->trAttention()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1247,9 +1239,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inNoteBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Note);
- outDoc->startBold();
scanString(theTranslator->trNote()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1266,9 +1256,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inPreBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Pre);
- outDoc->startBold();
scanString(theTranslator->trPrecondition()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1285,9 +1273,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inPostBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Post);
- outDoc->startBold();
scanString(theTranslator->trPostcondition()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1304,9 +1290,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inInvarBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Invar);
- outDoc->startBold();
scanString(theTranslator->trInvariant()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1323,9 +1307,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inVersionBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Version);
- outDoc->startBold();
scanString(theTranslator->trVersion()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1342,9 +1324,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inSinceBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Since);
- outDoc->startBold();
scanString(theTranslator->trSince()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1361,9 +1341,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inDateBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Date);
- outDoc->startBold();
scanString(theTranslator->trDate()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1384,9 +1362,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Todo);
- outDoc->startBold();
outDoc->writeObjectLink(0,"todo",item->listAnchor,theTranslator->trTodo()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
@@ -1406,9 +1382,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Test);
- outDoc->startBold();
outDoc->writeObjectLink(0,"test",item->listAnchor,theTranslator->trTest()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
@@ -1428,9 +1402,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Bug);
- outDoc->startBold();
outDoc->writeObjectLink(0,"bug",item->listAnchor,theTranslator->trBug()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
internalParseDocument(item->text);
@@ -1446,9 +1418,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inDeprecatedBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Deprecated);
- outDoc->startBold();
scanString(theTranslator->trDeprecated()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1467,9 +1437,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
if (inBlock()) endBlock();
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::RCS);
- outDoc->startBold();
scanString(tagName+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
scanString(tagText);
@@ -1484,10 +1452,8 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inAuthorBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Author);
- outDoc->startBold();
bool singular = ((QString)yytext).find('s')==-1;
scanString(theTranslator->trAuthor(TRUE,singular)+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1504,9 +1470,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inReturnBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::Return);
- outDoc->startBold();
scanString(theTranslator->trReturns()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -1519,9 +1483,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
inSeeBlock=TRUE;
currentListIndent.push("D");
outDoc->startDescList(BaseOutputDocInterface::See);
- outDoc->startBold();
scanString(theTranslator->trSeeAlso()+": ");
- outDoc->endBold();
outDoc->endDescTitle();
outDoc->writeDescItem();
}
@@ -2420,6 +2382,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
addListItemMarker(yytext,dashPos+1,isEnumerated);
}
<DocScan>({B}*"\n"){2,}{B}* { // new paragraph
+ bool ib = inBlock();
if (insideArgumentList)
{
insideArgumentList=FALSE;
@@ -2435,12 +2398,12 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
{
outDoc->docify(yytext);
}
- else
+ else if (!ib)
{
outDoc->newParagraph();
}
}
- if (inBlock()) endBlock();
+ if (ib) endBlock();
}
<DocScan>{BN}+/\n {
outDoc->writeChar(' ');
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index b0d7dab..f19f411 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -888,6 +888,7 @@ static void buildClassList(Entry *root)
cd->setTemplateArguments(tArgList);
cd->setProtection(root->protection);
cd->addSectionsToDefinition(root->anchors);
+ cd->setIsStatic(root->stat);
// file definition containing the class cd
cd->setBodySegment(root->bodyLine,root->endBodyLine);
@@ -2677,14 +2678,20 @@ static bool findTemplateInstanceRelation(Entry *root,
// search for new template instances caused by base classes of
// instanceClass
Entry *templateRoot = classEntries.find(templateClass->name());
+ if (templateRoot)
+ {
+ ArgumentList *templArgs = new ArgumentList;
+ stringToArgumentList(templSpec,templArgs);
+ findBaseClassesForClass(templateRoot,templateClass,instanceClass,
+ TemplateInstances,isArtificial,templArgs,templateNames);
- ArgumentList *templArgs = new ArgumentList;
- stringToArgumentList(templSpec,templArgs);
- findBaseClassesForClass(templateRoot,templateClass,instanceClass,
- TemplateInstances,isArtificial,templArgs,templateNames);
-
- findUsedClassesForClass(templateRoot,templateClass,instanceClass,
- isArtificial,templArgs,templateNames);
+ findUsedClassesForClass(templateRoot,templateClass,instanceClass,
+ isArtificial,templArgs,templateNames);
+ }
+ else
+ {
+ // TODO: what happened if we get here?
+ }
//Debug::print(Debug::Classes,0," Template instance %s : \n",instanceClass->name().data());
//ArgumentList *tl = templateClass->templateArguments();
@@ -7132,7 +7139,7 @@ void parseInput()
msg("Adding source references...\n");
addSourceReferences();
- msg("Adding todo/test/bug list item...\n");
+ msg("Adding todo/test/bug list items...\n");
addTodoTestBugReferences();
}
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 568906a..31c24fc 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -49,7 +49,8 @@ static const char *defaultStyleSheet =
"DIV.fragment { width: 100%; border: none; background-color: #eeeeee }\n"
"DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }\n"
"TD.md { background-color: #f2f2ff; font-weight: bold; }\n"
- "TD.mdname { background-color: #f2f2ff; font-weight: bold; font-style: italic }\n"
+ "TD.mdname1 { background-color: #f2f2ff; font-weight: bold; font-style: italic; }\n"
+ "TD.mdname { background-color: #f2f2ff; font-weight: bold; font-style: italic; width: 600px; }\n"
"DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }\n"
"DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }\n"
"FONT.keyword { color: #008000 }\n"
@@ -911,7 +912,7 @@ void HtmlGenerator::startMemberDocPrefixItem()
void HtmlGenerator::endMemberDocPrefixItem()
{
DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;)
- t << " </td>" << endl;
+ t << "</td>" << endl;
t << " </tr>" << endl;
}
@@ -919,14 +920,13 @@ void HtmlGenerator::startMemberDocName()
{
DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
t << " <tr>" << endl;
- t << " <td class=\"md\" nowrap valign=\"top\"> " << endl;
+ t << " <td class=\"md\" nowrap valign=\"top\"> ";
}
void HtmlGenerator::endMemberDocName()
{
DBG_HTML(t << "<!-- endMemberDocName -->" << endl;)
- t << endl;
- t << " </td>" << endl;
+ t << "</td>" << endl;
}
void HtmlGenerator::startParameterList()
@@ -955,13 +955,15 @@ void HtmlGenerator::startParameterType(bool first)
void HtmlGenerator::endParameterType()
{
DBG_HTML(t << "<!-- endParameterType -->" << endl;)
- t << " </td>" << endl;
+ t << "</td>" << endl;
}
-void HtmlGenerator::startParameterName()
+void HtmlGenerator::startParameterName(bool oneArgOnly)
{
DBG_HTML(t << "<!-- startParameterName -->" << endl;)
- t << " <td class=\"mdname\">";
+ t << " <td class=\"mdname";
+ if (oneArgOnly) t << "1";
+ t << "\">&nbsp;";
}
void HtmlGenerator::endParameterName(bool last,bool emptyList)
@@ -977,7 +979,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
}
else
{
- t << " </td>" << endl;
+ t << "</td>" << endl;
t << " </tr>" << endl;
t << " <tr>" << endl;
t << " <td></td>" << endl;
@@ -987,7 +989,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
}
else
{
- t << " </td>" << endl;
+ t << "</td>" << endl;
t << " </tr>" << endl;
}
}
@@ -995,7 +997,7 @@ void HtmlGenerator::endParameterName(bool last,bool emptyList)
void HtmlGenerator::endParameterList()
{
DBG_HTML(t << "<!-- endParameterList -->" << endl;)
- t << " </td>" << endl;
+ t << "</td>" << endl;
t << " </tr>" << endl;
}
diff --git a/src/htmlgen.h b/src/htmlgen.h
index dd58281..cbc40f1 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -236,7 +236,7 @@ class HtmlGenerator : public OutputGenerator
void endMemberDocName();
void startParameterType(bool first);
void endParameterType();
- void startParameterName();
+ void startParameterName(bool);
void endParameterName(bool last,bool emptyList);
void startParameterList();
void endParameterList();
diff --git a/src/index.cpp b/src/index.cpp
index d1ea611..5124dd9 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1285,6 +1285,7 @@ void writeAlphabeticalClassList(OutputList &ol)
{
QCString cname;
QCString namesp;
+ if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->name();
if (Config_getBool("HIDE_SCOPE_NAMES"))
{
cname=cd->displayName();
diff --git a/src/latexgen.h b/src/latexgen.h
index c527e6f..3b09340 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -243,7 +243,7 @@ class LatexGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
- void startParameterName() {}
+ void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
diff --git a/src/mangen.cpp b/src/mangen.cpp
index b721a44..9c06dc0 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -316,6 +316,7 @@ void ManGenerator::startDescList(SectionTypes)
col=0;
}
paragraph=FALSE;
+ startBold();
}
void ManGenerator::startParamList(ParamListTypes)
@@ -458,6 +459,7 @@ void ManGenerator::startDescItem()
void ManGenerator::endDescTitle()
{
+ endBold();
paragraph=TRUE;
}
diff --git a/src/mangen.h b/src/mangen.h
index 30fdea0..5ce5a7c 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -224,7 +224,7 @@ class ManGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
- void startParameterName() {}
+ void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 4341c52..8aaa7cc 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -119,7 +119,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
bool first=TRUE;
while (a)
{
- if (!md->isDefine() || first) ol.startParameterType(first);
+ if (md->isDefine() || first) ol.startParameterType(first);
QRegExp re(")(");
int vp;
if (!a->attrib.isEmpty()) // argument has an IDL attribute
@@ -141,7 +141,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (!md->isDefine())
{
ol.endParameterType();
- ol.startParameterName();
+ ol.startParameterName(argList->count()<2);
}
if (!a->name.isEmpty()) // argument has a name
{
@@ -191,13 +191,13 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.disableAllBut(OutputGenerator::Html);
if (!md->isDefine())
{
- if (first) ol.startParameterName();
+ if (first) ol.startParameterName(argList->count()<2);
ol.endParameterName(TRUE,argList->count()<2);
}
else
{
ol.endParameterType();
- ol.startParameterName();
+ ol.startParameterName(TRUE);
ol.endParameterName(TRUE,TRUE);
}
ol.popGeneratorState();
@@ -260,7 +260,7 @@ MemberDef::MemberDef(const char *df,int dl,
const ArgumentList *tal,const ArgumentList *al
) : Definition(df,dl,na)
{
- //printf("++++++ MemberDef(%s file=%s,line=%d) ++++++ \n",na,df,dl);
+ //printf("++++++ MemberDef(%s file=%s,line=%d static=%d) ++++++ \n",na,df,dl,s);
classDef=0;
fileDef=0;
redefines=0;
@@ -884,10 +884,8 @@ bool MemberDef::isDetailedSectionLinkable() const
(mtype==EnumValue && !briefDescription().isEmpty()) ||
// has brief description that is part of the detailed description
(!briefDescription().isEmpty() &&
- (!Config_getBool("BRIEF_MEMBER_DESC") ||
- Config_getBool("ALWAYS_DETAILED_SEC")) &&
- Config_getBool("REPEAT_BRIEF"
- )
+ Config_getBool("ALWAYS_DETAILED_SEC") &&
+ Config_getBool("REPEAT_BRIEF")
) ||
// has a multi-line initialization block
//(initLines>0 && initLines<maxInitLines) ||
@@ -1247,10 +1245,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
{
//ol.newParagraph();
ol.startDescList(BaseOutputDocInterface::EnumValues);
- ol.startBold();
parseText(ol,theTranslator->trEnumerationValues());
ol.docify(":");
- ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
//ol.startItemList();
@@ -1444,10 +1440,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (hasExamples())
{
ol.startDescList(BaseOutputDocInterface::Examples);
- ol.startBold();
parseText(ol,theTranslator->trExamples()+": ");
//ol.writeBoldString("Examples: ");
- ol.endBold();
ol.endDescTitle();
ol.writeDescItem();
writeExample(ol,getExamples());
diff --git a/src/outputgen.h b/src/outputgen.h
index 8818a3e..4b60bbd 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -369,7 +369,7 @@ class OutputGenerator : public BaseOutputDocInterface
virtual void endMemberDocName() = 0;
virtual void startParameterType(bool) = 0;
virtual void endParameterType() = 0;
- virtual void startParameterName() = 0;
+ virtual void startParameterName(bool) = 0;
virtual void endParameterName(bool,bool) = 0;
virtual void startParameterList() = 0;
virtual void endParameterList() = 0;
diff --git a/src/outputlist.h b/src/outputlist.h
index 96e07aa..3cc0b44 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -407,10 +407,10 @@ class OutputList : public OutputDocInterface
{ forall(&OutputGenerator::startParameterType,first); }
void endParameterType()
{ forall(&OutputGenerator::endParameterType); }
- void startParameterName()
- { forall(&OutputGenerator::startParameterName); }
- void endParameterName(bool last,bool emptyList)
- { forall(&OutputGenerator::endParameterName,last,emptyList); }
+ void startParameterName(bool one)
+ { forall(&OutputGenerator::startParameterName,one); }
+ void endParameterName(bool last,bool one)
+ { forall(&OutputGenerator::endParameterName,last,one); }
void startParameterList()
{ forall(&OutputGenerator::startParameterList); }
void endParameterList()
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index e912f26..1831072 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -1931,11 +1931,13 @@ void RTFGenerator::startDescList(SectionTypes)
DBG_RTF(t << "{\\comment (startDescList)}" << endl)
t << "{";
newParagraph();
+ startBold();
}
void RTFGenerator::endDescTitle()
{
DBG_RTF(t << "{\\comment (endDescTitle) }" << endl)
+ endBold();
newParagraph();
//t << Rtf_Style_Reset << styleStack.top();
incrementIndentLevel();
diff --git a/src/rtfgen.h b/src/rtfgen.h
index 6e1209d..ce1b71d 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -227,7 +227,7 @@ class RTFGenerator : public OutputGenerator
void endMemberDocName() {}
void startParameterType(bool) {}
void endParameterType() {}
- void startParameterName() {}
+ void startParameterName(bool) {}
void endParameterName(bool,bool) {}
void startParameterList() {}
void endParameterList() {}
diff --git a/src/scanner.l b/src/scanner.l
index 6d49da4..65e50b6 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -22,7 +22,6 @@
*/
#include <stdio.h>
#include <stdlib.h>
-//#include <iostream.h>
#include <assert.h>
#include <ctype.h>
@@ -147,10 +146,12 @@ static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
static bool insideFormula;
static bool insideTryBlock=FALSE;
+static bool needsSemi;
static int depthIf;
static int initializerSharpCount;
+
//-----------------------------------------------------------------------------
static void initParser()
@@ -600,6 +601,7 @@ TITLE [tT][iI][tT][lL][eE]
<*>\x0d
<NextSemi>"{" {
curlyCount=0;
+ needsSemi = TRUE;
BEGIN(SkipCurlyBlock);
}
<NextSemi>"(" {
@@ -623,8 +625,14 @@ TITLE [tT][iI][tT][lL][eE]
{
--curlyCount ;
}
- else
+ else if (needsSemi)
+ {
BEGIN( NextSemi );
+ }
+ else
+ {
+ BEGIN( FindMembers );
+ }
}
<NextSemi>"'"\\[0-7]{1,3}"'"
<NextSemi>"'"\\."'"
@@ -848,7 +856,8 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
-<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"{BN}+ {
+<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct{" |
+<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct"/{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::STRUCT_SEC ;
addType( current ) ;
@@ -868,6 +877,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
+<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union{" |
<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::UNION_SEC ;
@@ -879,6 +889,7 @@ TITLE [tT][iI][tT][lL][eE]
lineCount() ;
BEGIN( CompoundName ) ;
}
+<FindMembers>{B}*(("typedef"{BN}+)?)"enum{" |
<FindMembers>{B}*(("typedef"{BN}+)?)"enum"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::ENUM_SEC ;
@@ -2152,23 +2163,16 @@ TITLE [tT][iI][tT][lL][eE]
current->name=current->name.simplifyWhiteSpace();
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
- QCString &cn=current->name;
- QCString &rn=current_root->name;
- //printf("current_root->name=`%s'\n",rn.data());
- //printf("Function: `%s' `%s' `%s'\n",current->type.data(),cn.data(),current->args.data());
- int i;
- if ((i=cn.findRev("::"))!=-1) // name contains scope
- {
- if (cn.left(i)==rn.right(i)) // scope name is redundant
- {
- cn=cn.right(cn.length()-i-2); // strip scope
- //printf("new name=`%s'\n",cn.data());
- }
- }
- //if (cname.left(current_root->name.length()+2)==current_root->name+"::")
- //{ // strip redundant scope
- // current->name=current->name.right(current->name.length()-current_root->name.length()-2);
- // printf("new name=`%s'\n",current->name.data());
+ //QCString &cn=current->name;
+ //QCString &rn=current_root->name;
+ //int i;
+ //if ((i=cn.findRev("::"))!=-1) // name contains scope
+ //{
+ // if (cn.left(i)==rn.right(i)) // scope name is redundant
+ // {
+ // cn=cn.right(cn.length()-i-2); // strip scope
+ // //printf("new name=`%s'\n",cn.data());
+ // }
//}
current->fileName = yyFileName;
current->startLine = yyLineNr;
@@ -2211,8 +2215,7 @@ TITLE [tT][iI][tT][lL][eE]
current->proto = TRUE;
}
}
- //printf("Adding entry `%s' inLine`%d' bodyLine=`%d'\n",
- // current->name.data(),current->inLine,current->bodyLine);
+ //printf("Adding entry `%s'\n",current->name.data());
previous = current;
current_root->addSubEntry(current);
current = new Entry ;
@@ -2470,7 +2473,9 @@ TITLE [tT][iI][tT][lL][eE]
current->startLine = yyLineNr ;
current->name = removeRedundantWhiteSpace(current->name);
if (current->name.isEmpty() && !isTypedef) // anonymous compound
+ {
current->name.sprintf("@%d",anonCount++);
+ }
curlyCount=0;
BEGIN( ReadBody ) ;
}
@@ -2652,9 +2657,18 @@ TITLE [tT][iI][tT][lL][eE]
lineCount();
}
<FindMembers>"{" {
- current->type.resize(0);
- current->name.resize(0);
- current->args.resize(0);
+ if (insideJava && current->stat && current->name.isEmpty() && current->type.isEmpty())
+ {
+ // static Java initializer
+ needsSemi = FALSE;
+ }
+ else
+ {
+ needsSemi = TRUE;
+ }
+ current->type.resize(0);
+ current->name.resize(0);
+ current->args.resize(0);
current->argList->clear();
curlyCount=0;
BEGIN( SkipCurlyBlock );
@@ -4024,18 +4038,32 @@ static void parseCompounds(Entry *rt)
//printf("---> Inner block starts at line %d\n",yyLineNr);
//current->reset();
current = new Entry;
+ gstat = FALSE;
+ int ni=ce->name.findRev("::"); if (ni==-1) ni=0; else ni+=2;
// set default protection based on the compound type
if( ce->section==Entry::CLASS_SEC ) // class
+ {
current->protection = protection = Private ;
+ }
else if (ce->section == Entry::ENUM_SEC ) // enum
+ {
current->protection = protection = ce->protection;
- else if (!ce->name.isEmpty() && ce->name.at(0)=='@') // anonymous union
+ }
+ else if (!ce->name.isEmpty() && ce->name.at(ni)=='@') // unnamed union or namespace
+ {
+ if (ce->section == Entry::NAMESPACE_SEC ) // unnamed namespace
+ {
+ current->stat = gstat = TRUE;
+ }
current->protection = protection = ce->protection;
+ }
else // named struct, union, or interface
+ {
current->protection = protection = Public ;
+ }
mtype = Method;
- gstat = FALSE;
virt = Normal;
+ //printf("name=%s current->stat=%d gstat=%d\n",ce->name.data(),current->stat,gstat);
memberGroupId = NOGROUP;
diff --git a/src/util.cpp b/src/util.cpp
index 24cfa66..95193f7 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -243,9 +243,11 @@ QCString replaceAnonymousScopes(const QCString &s)
// strip annonymous left hand side part of the scope
QCString stripAnonymousNamespaceScope(const QCString &s)
{
+#if 0
int oi=0,i=0,p=0;
- if (s.isEmpty()) return s;
- while (s.at(p)=='@' && (i=s.find("::",p))!=-1 &&
+ p=s.find('@');
+ if (p==-1) return s;
+ while (s.at(p)=='@' && (i=s.find("::@",p))!=-1 &&
Doxygen::namespaceDict[s.left(i)]!=0) { oi=i; p=i+2; }
if (oi==0)
{
@@ -257,6 +259,32 @@ QCString stripAnonymousNamespaceScope(const QCString &s)
//printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),s.right(s.length()-oi-2).data());
return s.right(s.length()-oi-2);
}
+#endif
+
+ int i,p=0,l;
+ QCString newScope;
+ while ((i=getScopeFragment(s,p,&l))!=-1)
+ {
+ //printf("Scope fragment %s\n",s.mid(i,l).data());
+ if (Doxygen::namespaceDict[s.left(i+l)]!=0)
+ {
+ if (s.at(i)!='@')
+ {
+ if (!newScope.isEmpty()) newScope+="::";
+ newScope+=s.mid(i,l);
+ }
+ }
+ else
+ {
+ if (!newScope.isEmpty()) newScope+="::";
+ newScope+=s.right(s.length()-i);
+ goto done;
+ }
+ p=i+l;
+ }
+done:
+ //printf("stripAnonymousNamespaceScope(`%s')=`%s'\n",s.data(),newScope.data());
+ return newScope;
}
void writePageRef(OutputDocInterface &od,const char *cn,const char *mn)
@@ -1134,7 +1162,7 @@ void trimBaseClassScope(BaseClassList *bcl,QCString &s,int level=0)
* scope. If neither or both have a namespace scope, t1 and t2 remain
* unchanged.
*/
-static void trimNamespaceScope(QCString &t1,QCString &t2)
+static void trimNamespaceScope(QCString &t1,QCString &t2,const QCString &nsName)
{
int p1=t1.length();
int p2=t2.length();
@@ -1149,20 +1177,54 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
if (i1!=-1 && i2==-1) // only t1 has a scope
{
QCString scope=t1.left(i1);
- if (!scope.isEmpty() && Doxygen::namespaceDict[scope]!=0) // scope is a namespace
+
+ int so=nsName.length();
+ do
{
- t1 = t1.right(t1.length()-i1-2);
- return;
+ QCString fullScope=nsName.left(so);
+ if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
+ fullScope+=scope;
+ if (!fullScope.isEmpty() && Doxygen::namespaceDict[fullScope]!=0) // scope is a namespace
+ {
+ t1 = t1.right(t1.length()-i1-2);
+ return;
+ }
+ if (so==0)
+ {
+ so=-1;
+ }
+ else if ((so=nsName.findRev("::",so-1))==-1)
+ {
+ so=0;
+ }
}
+ while (so>=0);
}
else if (i1==-1 && i2!=-1) // only t2 has a scope
{
QCString scope=t2.left(i2);
- if (!scope.isEmpty() && Doxygen::namespaceDict[scope]!=0) // scope is a namespace
+
+ int so=nsName.length();
+ do
{
- t2 = t2.right(t2.length()-i2-2);
- return;
+ QCString fullScope=nsName.left(so);
+ if (!fullScope.isEmpty() && !scope.isEmpty()) fullScope+="::";
+ fullScope+=scope;
+ if (!fullScope.isEmpty() && Doxygen::namespaceDict[fullScope]!=0) // scope is a namespace
+ {
+ t2 = t2.right(t2.length()-i2-2);
+ return;
+ }
+ if (so==0)
+ {
+ so=-1;
+ }
+ else if ((so=nsName.findRev("::",so-1))==-1)
+ {
+ so=0;
+ }
}
+ while (so>=0);
}
p1 = QMAX(i1-2,0);
p2 = QMAX(i2-2,0);
@@ -1297,7 +1359,7 @@ static bool matchArgument(const Argument *srcA,const Argument *dstA,
// remove a namespace scope that is only in one type
// (assuming a using statement was used)
- trimNamespaceScope(srcAType,dstAType);
+ trimNamespaceScope(srcAType,dstAType,namespaceName);
//QCString srcScope;
//QCString dstScope;
@@ -1521,7 +1583,7 @@ static void mergeArgument(Argument *srcA,Argument *dstA,
// remove a namespace scope that is only in one type
// (assuming a using statement was used)
- trimNamespaceScope(srcAType,dstAType);
+ trimNamespaceScope(srcAType,dstAType,namespaceName);
//QCString srcScope;
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 7c9b09d..f18c2f3 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -68,20 +68,16 @@ static inline void writeXMLString(QTextStream &t,const char *s)
}
static void writeXMLLink(QTextStream &t,const char *compoundId,
- const char *memId,const char *text)
+ const char *anchorId,const char *text)
{
- if (memId==0)
+ t << "<ref idref=\"" << compoundId << "\"";
+ if (anchorId)
{
- t << "<compoundref idref=\"" << compoundId << "\">";
- writeXMLString(t,text);
- t << "</compoundref>";
- }
- else
- {
- t << "<memberref idref=\"" << compoundId << "_1" << memId << "\">";
- writeXMLString(t,text);
- t << "</memberref>";
+ t << " anchor=\"" << anchorId << "\"";
}
+ t << ">";
+ writeXMLString(t,text);
+ t << "</ref>";
}
class TextGeneratorXMLImpl : public TextGeneratorIntf
@@ -218,11 +214,13 @@ class XMLGenerator : public OutputDocInterface
}
void startItemList()
{
+ startParMode();
m_t << "<itemizedlist>" << endl;;
m_inListStack.push(TRUE);
}
void startEnumList()
{
+ startParMode();
m_t << "<orderedlist>";
m_inListStack.push(TRUE);
}
@@ -295,7 +293,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeFragment()
{
- endParMode();
+ startParMode();
m_t << "<programlisting>";
}
void endCodeFragment()
@@ -304,7 +302,7 @@ class XMLGenerator : public OutputDocInterface
}
void startPreFragment()
{
- endParMode();
+ startParMode();
m_t << "<programlisting>";
}
void endPreFragment()
@@ -313,11 +311,12 @@ class XMLGenerator : public OutputDocInterface
}
void writeRuler()
{
- endParMode();
+ startParMode();
m_t << "<hruler/>";
}
void startDescription()
{
+ startParMode();
m_t << "<variablelist>";
m_inListStack.push(TRUE);
}
@@ -351,6 +350,7 @@ class XMLGenerator : public OutputDocInterface
}
void startDescList(SectionTypes st)
{
+ startParMode();
m_t << "<simplesect kind=\"" << sectionTypeToString(st);
m_t << "\"><title>";
}
@@ -361,6 +361,7 @@ class XMLGenerator : public OutputDocInterface
}
void startParamList(ParamListTypes t)
{
+ startParMode();
QCString kind;
switch(t)
{
@@ -380,7 +381,6 @@ class XMLGenerator : public OutputDocInterface
{
m_t << "</title>";
if (!m_inParamList) startNestedPar();
- printf("endDescTitle %d\n",m_inParamList);
}
void writeDescItem() { }
void startDescTable() { }
@@ -405,11 +405,12 @@ class XMLGenerator : public OutputDocInterface
}
void lineBreak()
{
+ startParMode();
m_t << "<linebreak/>"; // non docbook
}
void writeNonBreakableSpace(int num)
{
- int i;for (i=0;i<num;i++) m_t << "<nonbreakablespace/>"; // non docbook
+ int i;for (i=0;i<num;i++) m_t << "&nbsp;";
}
//// TODO: translate these as well....
@@ -440,6 +441,7 @@ class XMLGenerator : public OutputDocInterface
}
void startHtmlLink(const char *url)
{
+ startParMode();
m_t << "<ulink url=\"" << url << "\">";
}
void endHtmlLink()
@@ -448,6 +450,7 @@ class XMLGenerator : public OutputDocInterface
}
void writeMailLink(const char *url)
{
+ startParMode();
m_t << "<email>";
docify(url);
m_t << "</email>";
@@ -478,6 +481,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCenter()
{
+ startParMode();
m_t << "<center>"; // non docbook
}
void endCenter()
@@ -486,6 +490,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSmall()
{
+ startParMode();
m_t << "<small>"; // non docbook
}
void endSmall()
@@ -494,6 +499,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSubscript()
{
+ startParMode();
m_t << "<subscript>";
}
void endSubscript()
@@ -502,6 +508,7 @@ class XMLGenerator : public OutputDocInterface
}
void startSuperscript()
{
+ startParMode();
m_t << "<superscript>";
}
void endSuperscript()
@@ -510,6 +517,7 @@ class XMLGenerator : public OutputDocInterface
}
void startTable(int cols)
{
+ startParMode();
m_t << "<table><tgroup cols=\"" << cols << "\"><tbody>\n";
}
void endTable()
@@ -554,11 +562,13 @@ class XMLGenerator : public OutputDocInterface
}
void writeAnchor(const char *id,const char *name)
{
+ startParMode();
m_t << "<anchor id=\"" << id << "_" << name << "\"/>";
}
void writeSectionRef(const char *,const char *id,
const char *name,const char *text)
{
+ startParMode();
m_t << "<link linkend=\"" << id << "_" << name << "\">";
docify(text);
m_t << "</link>";
@@ -569,6 +579,7 @@ class XMLGenerator : public OutputDocInterface
}
void addIndexItem(const char *primaryie,const char *secondaryie)
{
+ startParMode();
m_t << "<indexentry><primaryie>";
docify(primaryie);
m_t << "</primaryie><secondaryie>";
@@ -577,12 +588,14 @@ class XMLGenerator : public OutputDocInterface
}
void writeFormula(const char *id,const char *text)
{
+ startParMode();
m_t << "<formula id=\"" << id << "\">"; // non Docbook
docify(text);
m_t << "</formula>";
}
void startImage(const char *name,const char *size,bool caption)
{
+ startParMode();
m_t << "<image name=\"" << name << "\" size=\"" << size
<< "\" caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook
}
@@ -592,6 +605,7 @@ class XMLGenerator : public OutputDocInterface
}
void startDotFile(const char *name,bool caption)
{
+ startParMode();
m_t << "<dotfile name=\"" << name << "\" "
<< "caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook
}
@@ -601,6 +615,7 @@ class XMLGenerator : public OutputDocInterface
}
void startTextLink(const char *name,const char *anchor)
{
+ startParMode();
m_t << "<ulink url=\"" << name << "#" << anchor << "\">";
}
void endTextLink()
@@ -615,6 +630,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeLine()
{
+ startParMode();
m_t << "<linenumber>"; // non DocBook
}
void endCodeLine()
@@ -623,6 +639,7 @@ class XMLGenerator : public OutputDocInterface
}
void startCodeAnchor(const char *id)
{
+ startParMode();
m_t << "<anchor id=\"" << id << "\">";
}
void endCodeAnchor()
@@ -631,7 +648,7 @@ class XMLGenerator : public OutputDocInterface
}
void startFontClass(const char *colorClass)
{
- m_t << "<highlight class=\"" << colorClass << "\""; // non DocBook
+ m_t << "<highlight class=\"" << colorClass << "\">"; // non DocBook
}
void endFontClass()
{