From 5e4af367aa86722cd1545657727247d9008e9a16 Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Sun, 10 Mar 2002 16:02:35 +0000
Subject: Release-1.2.14-20020310

---
 INSTALL                                   |   4 +-
 README                                    |   4 +-
 VERSION                                   |   2 +-
 addon/doxmlparser/include/doxmlintf.h     | 145 ++++++++++++++++++++++++------
 addon/doxmlparser/src/basehandler.h       |  12 +++
 addon/doxmlparser/src/compoundhandler.cpp |  49 +++++++++-
 addon/doxmlparser/src/compoundhandler.h   |  46 ++++------
 addon/doxmlparser/src/dochandler.cpp      | 112 +++++++++++++++++------
 addon/doxmlparser/src/dochandler.h        |  89 ++++++++++++++++--
 addon/doxmlparser/src/doxmlintf.h         | 145 ++++++++++++++++++++++++------
 addon/doxmlparser/src/doxmlparser.pro.in  |   4 +-
 addon/doxmlparser/src/graphhandler.cpp    |  86 ++++++++++++++++++
 addon/doxmlparser/src/graphhandler.h      | 110 +++++++++++++++++++++++
 addon/doxmlparser/src/mainhandler.cpp     |   1 +
 addon/doxmlparser/test/main.cpp           |   6 --
 addon/doxmlparser/test/xmlparse.pro.in    |   1 +
 doc/Makefile.in                           |   2 +-
 doc/Makefile.latex                        |   2 +-
 doc/Makefile.win_make.in                  |   2 +-
 doc/Makefile.win_nmake.in                 |   2 +-
 doc/arch.doc                              |   2 +-
 doc/autolink.doc                          |   2 +-
 doc/commands.doc                          |   2 +-
 doc/config.doc                            |   2 +-
 doc/diagrams.doc                          |   2 +-
 doc/docblocks.doc                         |   2 +-
 doc/doxygen.sty                           |   6 +-
 doc/doxygen_manual.tex                    |   4 +-
 doc/doxygen_usage.doc                     |   2 +-
 doc/doxysearch_usage.doc                  |   2 +-
 doc/doxytag_usage.doc                     |   2 +-
 doc/doxywizard_usage.doc                  |   2 +-
 doc/external.doc                          |   2 +-
 doc/faq.doc                               |   4 +-
 doc/features.doc                          |   2 +-
 doc/formulas.doc                          |   2 +-
 doc/grouping.doc                          |   2 +-
 doc/history.doc                           |   2 +-
 doc/htmlcmds.doc                          |   8 +-
 doc/index.doc                             |  57 ++++++------
 doc/install.doc                           |   2 +-
 doc/installdox_usage.doc                  |   2 +-
 doc/language.doc                          |  16 ++--
 doc/language.tpl                          |   2 +-
 doc/maintainers.txt                       |   2 +-
 doc/output.doc                            |   2 +-
 doc/preprocessing.doc                     |   2 +-
 doc/starting.doc                          |   2 +-
 doc/trouble.doc                           |   2 +-
 packages/rpm/doxygen.spec                 |   2 +-
 src/config.l                              |   5 +-
 src/doc.l                                 |  34 +++++--
 src/doxygen.cpp                           |  96 ++++++++++++++++----
 src/htmlgen.cpp                           |  18 ++--
 src/index.cpp                             |  15 ++--
 src/latexgen.cpp                          |  14 +--
 src/pngenc.cpp                            |   2 +-
 src/scanner.l                             |   2 +-
 src/translator_cz.h                       |   5 +-
 src/translator_pt.h                       |  27 +++++-
 src/util.cpp                              |  18 ++--
 src/util.h                                |   3 +-
 src/xmlgen.cpp                            |   6 +-
 63 files changed, 952 insertions(+), 260 deletions(-)
 create mode 100644 addon/doxmlparser/src/graphhandler.cpp
 create mode 100644 addon/doxmlparser/src/graphhandler.h

diff --git a/INSTALL b/INSTALL
index 7e989ae..7c2d118 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
-DOXYGEN Version 1.2.14-20020224
+DOXYGEN Version 1.2.14-20020310
 
 Please read the installation section of the manual for instructions.
 
 --------
-Dimitri van Heesch (24 February 2002)
+Dimitri van Heesch (10 March 2002)
diff --git a/README b/README
index fd927e1..ba73328 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.2.14_20020224
+DOXYGEN Version 1.2.14_20020310
 
 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) (24 February 2002)
+Dimitri van Heesch (dimitri@stack.nl) (10 March 2002)
diff --git a/VERSION b/VERSION
index 87b668c..417bc95 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.14-20020224
+1.2.14-20020310
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h
index 067e5fd..89e567d 100644
--- a/addon/doxmlparser/include/doxmlintf.h
+++ b/addon/doxmlparser/include/doxmlintf.h
@@ -110,8 +110,8 @@ class IDoc
     enum Kind 
     { 
       Invalid = 0,        //  0
-      Para,               //  1 -> IDocPara
-      Text,               //  2 -> IDocText
+      Para = 1,           //  1 -> IDocPara
+      Text = 2,           //  2 -> IDocText
       MarkupModifier,     //  3 -> IDocMarkupModifier
       ItemizedList,       //  4 -> IDocItemizedList
       OrderedList,        //  5 -> IDocOrderedList
@@ -271,35 +271,35 @@ class IDocLineBreak : public IDoc
 class IDocULink : public IDoc
 {
   public:
-    virtual QString url() = 0;
-    virtual QString text() = 0;
+    virtual QString url() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocEMail : public IDoc
 {
   public:
-    virtual QString address() = 0;
+    virtual QString address() const = 0;
 };
 
 class IDocLink : public IDoc
 {
   public:
-    virtual QString refId() = 0;
-    virtual QString text() = 0;
+    virtual QString refId() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocProgramListing : public IDoc
 {
   public:
-    virtual IDocIterator *codeLines() = 0;
+    virtual IDocIterator *codeLines() const = 0;
 };
 
 class IDocCodeLine : public IDoc
 {
   public:
-    virtual int lineNumber() = 0;
-    virtual QString refId() = 0;
-    virtual IDocIterator *codeElements() = 0;
+    virtual int lineNumber() const = 0;
+    virtual QString refId() const = 0;
+    virtual IDocIterator *codeElements() const = 0;
 };
 
 class IDocHighlight : public IDoc
@@ -311,56 +311,56 @@ class IDocHighlight : public IDoc
       KeywordType, KeywordFlow, CharLiteral, 
       StringLiteral, Preprocessor
     };
-    virtual HighlightKind highlightKind() = 0;
-    virtual IDocIterator *codeElements() = 0;
+    virtual HighlightKind highlightKind() const = 0;
+    virtual IDocIterator *codeElements() const = 0;
 };
 
 class IDocFormula : public IDoc
 {
   public:
-    virtual QString id() = 0;
-    virtual QString text() = 0;
+    virtual QString id() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocImage : public IDoc
 {
   public:
-    virtual QString name() = 0;
-    virtual QString caption() = 0;
+    virtual QString name() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocDotFile : public IDoc
 {
   public:
-    virtual QString name() = 0;
-    virtual QString caption() = 0;
+    virtual QString name() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocIndexEntry : public IDoc
 {
   public:
-    virtual QString primary() = 0;
-    virtual QString secondary() = 0;
+    virtual QString primary() const = 0;
+    virtual QString secondary() const = 0;
 };
 
 class IDocTable : public IDoc
 {
   public:
-    virtual IDocIterator *rows() = 0;
-    virtual int numColumns() = 0;
-    virtual QString caption() = 0;
+    virtual IDocIterator *rows() const = 0;
+    virtual int numColumns() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocRow : public IDoc
 {
   public:
-    virtual IDocIterator *entries() = 0;
+    virtual IDocIterator *entries() const = 0;
 };
 
 class IDocEntry : public IDoc
 {
   public:
-    virtual IDocIterator *contents() = 0;
+    virtual IDocIterator *contents() const = 0;
 };
 
 class IDocSection : public IDoc
@@ -388,6 +388,72 @@ class IDocIterator
     virtual void release() = 0;
 };
 
+class IEdgeLabel
+{
+  public:
+    virtual QString label() = 0;
+};
+
+class IEdgeLabelIterator 
+{
+  public:
+    virtual IEdgeLabel *toFirst() = 0;
+    virtual IEdgeLabel *toLast() = 0;
+    virtual IEdgeLabel *toNext() = 0;
+    virtual IEdgeLabel *toPrev() = 0;
+    virtual IEdgeLabel *current() const = 0;
+    virtual void release() = 0;
+};
+
+class IChildNode
+{
+  public:
+    enum NodeRelation { PublicInheritance, ProtectedInheritance,
+                        PrivateInheritance, Usage, TemplateInstace
+                      };
+    virtual QString id() const = 0;
+    virtual NodeRelation relation() const = 0;
+    virtual IEdgeLabelIterator *edgeLabels() const = 0;
+};
+
+class IChildNodeIterator 
+{
+  public:
+    virtual IChildNode *toFirst() = 0;
+    virtual IChildNode *toLast() = 0;
+    virtual IChildNode *toNext() = 0;
+    virtual IChildNode *toPrev() = 0;
+    virtual IChildNode *current() const = 0;
+    virtual void release() = 0;
+};
+
+class INode
+{
+  public:
+    virtual QString id() const = 0;
+    virtual QString label() const = 0;
+    virtual QString linkId() const = 0;
+    virtual IChildNodeIterator *children() const = 0;
+};
+
+class INodeIterator 
+{
+  public:
+    virtual INode *toFirst() = 0;
+    virtual INode *toLast() = 0;
+    virtual INode *toNext() = 0;
+    virtual INode *toPrev() = 0;
+    virtual INode *current() const = 0;
+    virtual void release() = 0;
+};
+
+class IGraph
+{
+  public:
+    virtual INodeIterator *nodes() const = 0;
+    virtual ~IGraph() {}
+};
+
 class IMember 
 {
   public:
@@ -501,6 +567,33 @@ class ICompound
      *  zero, the memory for the compound will be released.
      */
     virtual void release() = 0;
+
+    // TODO:
+    // class:
+    //  IRelatedCompoundIterator *baseClasses()
+    //  IRelatedCompoundIterator *derivedClasses()
+    //  ICompoundIterator *innerClasses()
+    //  ITemplateParamListIterator *templateParamLists()
+    //  listOfAllMembers()
+    //  IDotGraph *inheritanceGraph()
+    //  IDotGraph *collaborationGraph()
+    //  locationFile()
+    //  locationLine()
+    //  locationBodyStartLine()
+    //  locationBodyEndLine()
+    // namespace:
+    //  ICompound *innerNamespaces()
+    // file:
+    //  includes()
+    //  includedBy()
+    //  IDotGraph *includeDependencyGraph()
+    //  IDotGraph *includedByDependencyGraph()
+    //  IDocProgramListing *source()
+    // group:
+    //  Title()
+    //  innerFile()
+    //  innerPage()
+    // page:
 };
 
 class ICompoundIterator 
diff --git a/addon/doxmlparser/src/basehandler.h b/addon/doxmlparser/src/basehandler.h
index 89f9504..c86316b 100644
--- a/addon/doxmlparser/src/basehandler.h
+++ b/addon/doxmlparser/src/basehandler.h
@@ -22,6 +22,8 @@
 
 #include "debug.h"
 
+//-----------------------------------------------------------------------------
+
 class IBaseHandler
 {
   public:
@@ -30,6 +32,8 @@ class IBaseHandler
     virtual ~IBaseHandler() {}
 };
 
+//-----------------------------------------------------------------------------
+
 class IFallBackHandler
 {
   public:
@@ -39,6 +43,8 @@ class IFallBackHandler
     virtual ~IFallBackHandler() {}
 };
 
+//-----------------------------------------------------------------------------
+
 template<class T> class ElementMapper
 {
     class StartElementHandler
@@ -108,11 +114,15 @@ template<class T> class ElementMapper
     QDict<EndElementHandlerT>   m_endHandlers;
 };
 
+//-----------------------------------------------------------------------------
+
 struct LocatorContainer
 {
     static QXmlLocator *s_theLocator;
 };
 
+//-----------------------------------------------------------------------------
+
 template<class T> class BaseHandler : public QXmlDefaultHandler,
                                       public ElementMapper<T>,
                                       public LocatorContainer,
@@ -269,6 +279,8 @@ template<class T> class BaseHandler : public QXmlDefaultHandler,
     IFallBackHandler           *m_fallBackHandler;
 };
 
+//-----------------------------------------------------------------------------
+
 template<class T> class BaseFallBackHandler : public ElementMapper<T>,
                                               public IFallBackHandler
 {
diff --git a/addon/doxmlparser/src/compoundhandler.cpp b/addon/doxmlparser/src/compoundhandler.cpp
index 18a8c0c..caca36b 100644
--- a/addon/doxmlparser/src/compoundhandler.cpp
+++ b/addon/doxmlparser/src/compoundhandler.cpp
@@ -17,6 +17,8 @@
 #include "compoundhandler.h"
 #include "dochandler.h"
 #include "debug.h"
+#include "graphhandler.h"
+#include "sectionhandler.h"
 
 class CompoundErrorHandler : public QXmlErrorHandler
 {
@@ -129,6 +131,10 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
 
   addStartHandler("programlisting",this,&CompoundHandler::startProgramListing);
 
+  addStartHandler("inheritancegraph",this,&CompoundHandler::startInheritanceGraph);
+
+  addStartHandler("collaborationgraph",this,&CompoundHandler::startCollaborationGraph);
+
 }
 
 CompoundHandler::~CompoundHandler()
@@ -194,7 +200,7 @@ void CompoundHandler::endCompoundName()
 
 void CompoundHandler::addSuperClass(const QXmlAttributes& attrib)
 {
-  SuperClass *sc=new SuperClass(
+  RelatedClass *sc=new RelatedClass(
           attrib.value("refid"),
           attrib.value("prot"),
           attrib.value("virt")
@@ -208,7 +214,7 @@ void CompoundHandler::addSuperClass(const QXmlAttributes& attrib)
 
 void CompoundHandler::addSubClass(const QXmlAttributes& attrib)
 {
-  SubClass *sc = new SubClass(
+  RelatedClass *sc = new RelatedClass(
           attrib.value("refid"),
           attrib.value("prot"),
           attrib.value("virt")
@@ -266,3 +272,42 @@ void CompoundHandler::release()
   }
 }
 
+ISectionIterator *CompoundHandler::sections() const 
+{ 
+  return new SectionIterator(m_sections); 
+}
+    
+IMemberIterator *CompoundHandler::memberByName(const QString &name) const
+{ 
+  QList<MemberHandler> *ml = m_memberNameDict[name]; 
+  if (ml==0) return 0;
+  return new MemberIterator(*ml);
+}
+
+void CompoundHandler::startInheritanceGraph(const QXmlAttributes &attrib)
+{
+  m_inheritanceGraph = new GraphHandler(this,"inheritancegraph");
+  m_inheritanceGraph->startGraph(attrib);
+}
+
+void CompoundHandler::startCollaborationGraph(const QXmlAttributes &attrib)
+{
+  m_collaborationGraph = new GraphHandler(this,"collaborationgraph");
+  m_collaborationGraph->startGraph(attrib);
+}
+
+IDocRoot *CompoundHandler::briefDescription() const 
+{ 
+  return m_brief; 
+}
+
+IDocRoot *CompoundHandler::detailedDescription() const 
+{ 
+  return m_detailed; 
+}
+
+IMember *CompoundHandler::memberById(const QString &id) const 
+{ 
+  return m_memberDict[id]; 
+}
+
diff --git a/addon/doxmlparser/src/compoundhandler.h b/addon/doxmlparser/src/compoundhandler.h
index 762641f..1639487 100644
--- a/addon/doxmlparser/src/compoundhandler.h
+++ b/addon/doxmlparser/src/compoundhandler.h
@@ -22,11 +22,12 @@
 
 #include "basehandler.h"
 #include "baseiterator.h"
-#include "sectionhandler.h"
 
 class MainHandler;
 class DocHandler;
 class ProgramListingHandler;
+class GraphHandler;
+class MemberHandler;
 
 class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler>
 {
@@ -41,6 +42,8 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler>
     virtual void startDetailedDesc(const QXmlAttributes& attrib);
     virtual void startLocation(const QXmlAttributes& attrib);
     virtual void startProgramListing(const QXmlAttributes& attrib);
+    virtual void startInheritanceGraph(const QXmlAttributes& attrib);
+    virtual void startCollaborationGraph(const QXmlAttributes& attrib);
     virtual void addref() { m_refCount++; }
 
     CompoundHandler(const QString &dirName);
@@ -54,43 +57,25 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler>
     QString id()   const { return m_id;   }
     CompoundKind kind() const { return m_kind; }
     QString kindString() const { return m_kindString; }
-    ISectionIterator *sections() const 
-    { return new SectionIterator(m_sections); }
-    virtual IDocRoot *briefDescription() const
-    { return m_brief; }
-    virtual IDocRoot *detailedDescription() const
-    { return m_detailed; }
-    virtual IMember *memberById(const QString &id) const
-    { return m_memberDict[id]; }
-    virtual IMemberIterator *memberByName(const QString &name) const
-    { 
-      QList<MemberHandler> *ml = m_memberNameDict[name]; 
-      if (ml==0) return 0;
-      return new MemberIterator(*ml);
-    }
-    virtual void release();
+    ISectionIterator *sections() const;
+    IDocRoot *briefDescription() const;
+    IDocRoot *detailedDescription() const;
+    IMember *memberById(const QString &id) const;
+    IMemberIterator *memberByName(const QString &name) const;
+    void release();
 
   private:
-    struct SuperClass
+    struct RelatedClass
     {
-      SuperClass(const QString &id,const QString &prot,const QString &virt) :
+      RelatedClass(const QString &id,const QString &prot,const QString &virt) :
         m_id(id),m_protection(prot),m_virtualness(virt) {}
 
       QString m_id;
       QString m_protection;
       QString m_virtualness;
     };
-    struct SubClass
-    {
-      SubClass(const QString &id,const QString &prot,const QString &virt) :
-        m_id(id),m_protection(prot),m_virtualness(virt) {}
-
-      QString m_id;
-      QString m_protection;
-      QString m_virtualness;
-    };
-    QList<SuperClass>       m_superClasses;
-    QList<SubClass>         m_subClasses;
+    QList<RelatedClass>     m_superClasses;
+    QList<RelatedClass>     m_subClasses;
     QList<ISection>         m_sections;
     DocHandler             *m_brief;
     DocHandler             *m_detailed;
@@ -106,6 +91,9 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler>
     QDict<MemberHandler>          m_memberDict;
     QDict<QList<MemberHandler> >  m_memberNameDict;
     MainHandler            *m_mainHandler;
+    GraphHandler           *m_inheritanceGraph;
+    GraphHandler           *m_collaborationGraph;
+
 };
 
 void compoundhandler_init();
diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp
index 12a3a24..8f1249f 100644
--- a/addon/doxmlparser/src/dochandler.cpp
+++ b/addon/doxmlparser/src/dochandler.cpp
@@ -17,51 +17,77 @@
 #include "debug.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);
+      m_map.insert("see",       SimpleSectHandler::See);
+      m_map.insert("return",    SimpleSectHandler::Return);
+      m_map.insert("author",    SimpleSectHandler::Author);
+      m_map.insert("version",   SimpleSectHandler::Version);
+      m_map.insert("since",     SimpleSectHandler::Since);
+      m_map.insert("date",      SimpleSectHandler::Date);
+      m_map.insert("bug",       SimpleSectHandler::Bug);
+      m_map.insert("note",      SimpleSectHandler::Note);
+      m_map.insert("warning",   SimpleSectHandler::Warning);
+      m_map.insert("par",       SimpleSectHandler::Par);
+      m_map.insert("deprecated",SimpleSectHandler::Deprecated);
+      m_map.insert("pre",       SimpleSectHandler::Pre);
+      m_map.insert("post",      SimpleSectHandler::Post);
+      m_map.insert("invariant", SimpleSectHandler::Invar);
+      m_map.insert("remark",    SimpleSectHandler::Remark);
+      m_map.insert("attention", SimpleSectHandler::Attention);
+      m_map.insert("todo",      SimpleSectHandler::Todo);
+      m_map.insert("test",      SimpleSectHandler::Test);
+      m_map.insert("rcs",       SimpleSectHandler::RCS);
+      m_map.insert("enumvalues",SimpleSectHandler::EnumValues);
+      m_map.insert("examples",  SimpleSectHandler::Examples);
     }
     SimpleSectHandler::Types stringToType(const QString &typeStr)
     {
-      return m_typeNameMap[typeStr];
+      return m_map[typeStr];
     }
   private:
-    QMap<QString,SimpleSectHandler::Types> m_typeNameMap;
+    QMap<QString,SimpleSectHandler::Types> m_map;
+};
+
+class HighlightMapper
+{
+  public:
+    HighlightMapper()
+    {
+      m_map.insert("comment",        HighlightHandler::Comment);
+      m_map.insert("keyword",        HighlightHandler::Keyword);
+      m_map.insert("keywordtype",    HighlightHandler::KeywordType);
+      m_map.insert("keywordflow",    HighlightHandler::KeywordFlow);
+      m_map.insert("charliteral",    HighlightHandler::CharLiteral);
+      m_map.insert("stringliteral",  HighlightHandler::StringLiteral);
+      m_map.insert("preprocessor",   HighlightHandler::Preprocessor);
+    }
+    HighlightHandler::HighlightKind stringToKind(const QString &kindStr)
+    {
+      return m_map[kindStr];
+    }
+  private:
+    QMap<QString,HighlightHandler::HighlightKind> m_map;
 };
 
 static TypeNameMapper *s_typeMapper;
+static HighlightMapper *s_highlightMapper;
 
 void dochandler_init()
 {
   s_typeMapper = new TypeNameMapper;
+  s_highlightMapper = new HighlightMapper;
 }
 
 void dochandler_exit()
 {
   delete s_typeMapper;
+  delete s_highlightMapper;
 }
   
 //----------------------------------------------------------------------
@@ -820,6 +846,7 @@ HighlightHandler::HighlightHandler(IBaseHandler *parent)
   m_children.setAutoDelete(TRUE);
   addEndHandler("highlight",this,&HighlightHandler::endHighlight);
   addStartHandler("ref",this,&HighlightHandler::startRef);
+  m_hl = Invalid;
 }
 
 HighlightHandler::~HighlightHandler()
@@ -828,7 +855,8 @@ HighlightHandler::~HighlightHandler()
 
 void HighlightHandler::startHighlight(const QXmlAttributes& attrib)
 {
-  m_class = attrib.value("class");
+  m_hlString = attrib.value("class");
+  m_hl = s_highlightMapper->stringToKind(m_hlString);
   m_curString="";
   m_parent->setDelegate(this);
 }
@@ -836,7 +864,7 @@ void HighlightHandler::startHighlight(const QXmlAttributes& attrib)
 void HighlightHandler::endHighlight()
 {
   addTextNode();
-  debug(2,"highlight class=`%s'\n",m_class.data());
+  debug(2,"highlight class=`%s'\n",m_hlString.data());
   m_parent->setDelegate(0);
 }
 
@@ -859,6 +887,11 @@ void HighlightHandler::addTextNode()
   }
 }
 
+IDocIterator *HighlightHandler::codeElements() const
+{
+  return new HighlightIterator(*this);
+}
+
 //----------------------------------------------------------------------
 // CodeLineHandler
 //----------------------------------------------------------------------
@@ -931,6 +964,12 @@ void CodeLineHandler::addTextNode()
   }
 }
 
+IDocIterator *CodeLineHandler::codeElements() const
+{
+  return new CodeLineIterator(*this);
+}
+
+
 //----------------------------------------------------------------------
 // ProgramListingHandler
 //----------------------------------------------------------------------
@@ -987,6 +1026,13 @@ void ProgramListingHandler::startCodeLine(const QXmlAttributes& attrib)
   m_hasLineNumber=FALSE; 
 }
 
+IDocIterator *ProgramListingHandler::codeLines() const
+{
+  return new ProgramListingIterator(*this);
+}
+
+
+
 //----------------------------------------------------------------------
 // FormulaHandler
 //----------------------------------------------------------------------
@@ -1155,6 +1201,11 @@ void EntryHandler::startParagraph(const QXmlAttributes& attrib)
   m_children.append(ph);
 }
 
+IDocIterator *EntryHandler::contents() const
+{
+  return new EntryIterator(*this);
+}
+
 //----------------------------------------------------------------------
 // RowHandler
 //----------------------------------------------------------------------
@@ -1188,6 +1239,11 @@ void RowHandler::startEntry(const QXmlAttributes& attrib)
   m_children.append(eh);
 }
 
+IDocIterator *RowHandler::entries() const
+{
+  return new RowIterator(*this);
+}
+
 //----------------------------------------------------------------------
 // TableHandler
 //----------------------------------------------------------------------
@@ -1235,6 +1291,12 @@ void TableHandler::endCaption()
   m_caption = m_curString;
 }
 
+IDocIterator *TableHandler::rows() const
+{
+  return new TableIterator(*this);
+}
+
+
 //----------------------------------------------------------------------
 // ParagraphHandler
 //----------------------------------------------------------------------
diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h
index 0161576..c3b8242 100644
--- a/addon/doxmlparser/src/dochandler.h
+++ b/addon/doxmlparser/src/dochandler.h
@@ -162,6 +162,13 @@ class ParagraphHandler : public IDocPara,
     MarkupHandler  *m_markupHandler;
 };
 
+class ParagraphIterator : public BaseIterator<IDocIterator,IDoc,IDoc>
+{
+  public:
+    ParagraphIterator(const ParagraphHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {}
+};
+
 //-----------------------------------------------------------------------------
 
 /*! \brief Node representing a list item.
@@ -358,6 +365,8 @@ class LinkHandler : public IDocLink, public BaseHandler<LinkHandler>
 
     // IDocLink
     virtual Kind kind() const { return Link; }
+    virtual QString refId() const { return m_ref; }
+    virtual QString text() const { return m_text; }
 
   private:
     IBaseHandler   *m_parent;
@@ -382,6 +391,7 @@ class EMailHandler : public IDocEMail, public BaseHandler<EMailHandler>
 
     // IDocEMail
     virtual Kind kind() const { return EMail; }
+    virtual QString address() const { return m_address; }
 
   private:
     IBaseHandler   *m_parent;
@@ -405,6 +415,8 @@ class ULinkHandler : public IDocULink, public BaseHandler<ULinkHandler>
 
     // IDocULink
     virtual Kind kind() const { return ULink; }
+    virtual QString url() const { return m_url; }
+    virtual QString text() const { return m_text; }
 
   private:
     IBaseHandler   *m_parent;
@@ -601,9 +613,10 @@ class VariableListIterator : public BaseIterator<IDocIterator,IDoc,VariableListE
 /*! \brief Node representing a highlighted text fragment.
  *
  */
-// TODO: children: ref
+// children: ref
 class HighlightHandler : public IDocHighlight, public BaseHandler<HighlightHandler>
 {
+    friend class HighlightIterator;
   public:
     HighlightHandler(IBaseHandler *parent);
     virtual ~HighlightHandler();
@@ -613,13 +626,23 @@ class HighlightHandler : public IDocHighlight, public BaseHandler<HighlightHandl
 
     // IDocHighlight
     virtual Kind kind() const { return Highlight; }
+    virtual HighlightKind highlightKind() const { return m_hl; }
+    virtual IDocIterator *codeElements() const;
 
   private:
     void addTextNode();
     
     IBaseHandler   *m_parent;
-    QString        m_class;
-    QList<IDoc> m_children;
+    HighlightKind  m_hl;
+    QString        m_hlString;
+    QList<IDoc>    m_children;
+};
+
+class HighlightIterator : public BaseIterator<IDocIterator,IDoc,IDoc>
+{
+  public:
+    HighlightIterator(const HighlightHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {}
 };
 
 //-----------------------------------------------------------------------------
@@ -630,6 +653,7 @@ class HighlightHandler : public IDocHighlight, public BaseHandler<HighlightHandl
 // children: linenumber, highlight, anchor, ref
 class CodeLineHandler : public IDocCodeLine, public BaseHandler<CodeLineHandler>
 {
+    friend class CodeLineIterator;
   public:
 
     virtual void startCodeLine(const QXmlAttributes&);
@@ -644,6 +668,9 @@ class CodeLineHandler : public IDocCodeLine, public BaseHandler<CodeLineHandler>
 
     // IDocCodeLine
     virtual Kind kind() const { return CodeLine; }
+    virtual int lineNumber() const { return m_lineNumber; }
+    virtual QString refId() const { return m_refId; }
+    virtual IDocIterator *codeElements() const;
 
   private:
     void addTextNode();
@@ -654,6 +681,13 @@ class CodeLineHandler : public IDocCodeLine, public BaseHandler<CodeLineHandler>
     QList<IDoc> m_children;
 };
 
+class CodeLineIterator : public BaseIterator<IDocIterator,IDoc,IDoc>
+{
+  public:
+    CodeLineIterator(const CodeLineHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {}
+};
+
 //-----------------------------------------------------------------------------
 
 /*! \brief Node representing a program listing
@@ -662,6 +696,7 @@ class CodeLineHandler : public IDocCodeLine, public BaseHandler<CodeLineHandler>
 // children: codeline, linenumber
 class ProgramListingHandler : public IDocProgramListing, public BaseHandler<ProgramListingHandler>
 {
+    friend class ProgramListingIterator;
   public:
     virtual void startProgramListing(const QXmlAttributes& attrib);
     virtual void endProgramListing();
@@ -673,6 +708,7 @@ class ProgramListingHandler : public IDocProgramListing, public BaseHandler<Prog
 
     // IDocProgramListing
     virtual Kind kind() const { return ProgramListing; }
+    virtual IDocIterator *codeLines() const;
 
   private:
     IBaseHandler           *m_parent;
@@ -682,6 +718,15 @@ class ProgramListingHandler : public IDocProgramListing, public BaseHandler<Prog
 
 //-----------------------------------------------------------------------------
 
+class ProgramListingIterator : public BaseIterator<IDocIterator,IDoc,CodeLineHandler>
+{
+  public:
+    ProgramListingIterator(const ProgramListingHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,CodeLineHandler>(handler.m_children) {}
+};
+
+//-----------------------------------------------------------------------------
+
 /*! \brief Node representing a formula.
  *
  */
@@ -696,6 +741,8 @@ class FormulaHandler : public IDocFormula, public BaseHandler<FormulaHandler>
 
     // IDocFormula
     virtual Kind kind() const { return Formula; }
+    virtual QString id() const { return m_id; }
+    virtual QString text() const { return m_text; }
 
   private:
     IBaseHandler  *m_parent;
@@ -719,6 +766,8 @@ class ImageHandler : public IDocImage, public BaseHandler<ImageHandler>
 
     // IDocImage
     virtual Kind kind() const { return Image; }
+    virtual QString name() const { return m_name; }
+    virtual QString caption() const { return m_caption; }
 
   private:
     IBaseHandler  *m_parent;
@@ -742,6 +791,8 @@ class DotFileHandler : public IDocDotFile, public BaseHandler<DotFileHandler>
 
     // IDocDotFile
     virtual Kind kind() const { return DotFile; }
+    virtual QString name() const { return m_name; }
+    virtual QString caption() const { return m_caption; }
 
   private:
     IBaseHandler  *m_parent;
@@ -769,6 +820,8 @@ class IndexEntryHandler : public IDocIndexEntry, public BaseHandler<IndexEntryHa
 
     // IDocIndexEntry
     virtual Kind kind() const { return IndexEntry; }
+    virtual QString primary() const { return m_primary; }
+    virtual QString secondary() const { return m_secondary; }
 
   private:
     IBaseHandler  *m_parent;
@@ -784,6 +837,7 @@ class IndexEntryHandler : public IDocIndexEntry, public BaseHandler<IndexEntryHa
 // children: para
 class EntryHandler : public IDocEntry, public BaseHandler<EntryHandler>
 {
+    friend class EntryIterator;
   public:
     EntryHandler(IBaseHandler *parent);
     virtual ~EntryHandler();
@@ -793,12 +847,20 @@ class EntryHandler : public IDocEntry, public BaseHandler<EntryHandler>
 
     // IDocEntry
     virtual Kind kind() const { return Entry; }
+    virtual IDocIterator *contents() const;
 
   private:
     IBaseHandler   *m_parent;
     QList<IDoc>  m_children;
 };
 
+class EntryIterator : public BaseIterator<IDocIterator,IDoc,IDoc>
+{
+  public:
+    EntryIterator(const EntryHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {}
+};
+
 //-----------------------------------------------------------------------------
 
 /*! \brief Node representing an entry in the table row.
@@ -807,6 +869,7 @@ class EntryHandler : public IDocEntry, public BaseHandler<EntryHandler>
 // children: entry
 class RowHandler : public IDocRow, public BaseHandler<RowHandler>
 {
+    friend class RowIterator;
   public:
     RowHandler(IBaseHandler *parent);
     virtual ~RowHandler();
@@ -816,12 +879,20 @@ class RowHandler : public IDocRow, public BaseHandler<RowHandler>
 
     // IDocRow
     virtual Kind kind() const { return Row; }
+    virtual IDocIterator *entries() const;
 
   private:
     IBaseHandler        *m_parent;
     QList<EntryHandler>  m_children;
 };
 
+class RowIterator : public BaseIterator<IDocIterator,IDoc,EntryHandler>
+{
+  public:
+    RowIterator(const RowHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,EntryHandler>(handler.m_children) {}
+};
+
 //-----------------------------------------------------------------------------
 
 /*! \brief Node representing an entry in the table.
@@ -830,6 +901,7 @@ class RowHandler : public IDocRow, public BaseHandler<RowHandler>
 // children: row, caption
 class TableHandler : public IDocTable, public BaseHandler<TableHandler>
 {
+    friend class TableIterator;
   public:
     TableHandler(IBaseHandler *parent);
     virtual ~TableHandler();
@@ -841,6 +913,9 @@ class TableHandler : public IDocTable, public BaseHandler<TableHandler>
 
     // IDocTable
     virtual Kind kind() const { return Table; }
+    virtual IDocIterator *rows() const;
+    virtual int numColumns() const { return m_numColumns; }
+    virtual QString caption() const { return m_caption; }
 
   private:
     IBaseHandler      *m_parent;
@@ -849,13 +924,11 @@ class TableHandler : public IDocTable, public BaseHandler<TableHandler>
     QString            m_caption;
 };
 
-//-----------------------------------------------------------------------------
-
-class ParagraphIterator : public BaseIterator<IDocIterator,IDoc,IDoc>
+class TableIterator : public BaseIterator<IDocIterator,IDoc,RowHandler>
 {
   public:
-    ParagraphIterator(const ParagraphHandler &handler) : 
-      BaseIterator<IDocIterator,IDoc,IDoc>(handler.m_children) {}
+    TableIterator(const TableHandler &handler) : 
+      BaseIterator<IDocIterator,IDoc,RowHandler>(handler.m_children) {}
 };
 
 
diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h
index 067e5fd..89e567d 100644
--- a/addon/doxmlparser/src/doxmlintf.h
+++ b/addon/doxmlparser/src/doxmlintf.h
@@ -110,8 +110,8 @@ class IDoc
     enum Kind 
     { 
       Invalid = 0,        //  0
-      Para,               //  1 -> IDocPara
-      Text,               //  2 -> IDocText
+      Para = 1,           //  1 -> IDocPara
+      Text = 2,           //  2 -> IDocText
       MarkupModifier,     //  3 -> IDocMarkupModifier
       ItemizedList,       //  4 -> IDocItemizedList
       OrderedList,        //  5 -> IDocOrderedList
@@ -271,35 +271,35 @@ class IDocLineBreak : public IDoc
 class IDocULink : public IDoc
 {
   public:
-    virtual QString url() = 0;
-    virtual QString text() = 0;
+    virtual QString url() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocEMail : public IDoc
 {
   public:
-    virtual QString address() = 0;
+    virtual QString address() const = 0;
 };
 
 class IDocLink : public IDoc
 {
   public:
-    virtual QString refId() = 0;
-    virtual QString text() = 0;
+    virtual QString refId() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocProgramListing : public IDoc
 {
   public:
-    virtual IDocIterator *codeLines() = 0;
+    virtual IDocIterator *codeLines() const = 0;
 };
 
 class IDocCodeLine : public IDoc
 {
   public:
-    virtual int lineNumber() = 0;
-    virtual QString refId() = 0;
-    virtual IDocIterator *codeElements() = 0;
+    virtual int lineNumber() const = 0;
+    virtual QString refId() const = 0;
+    virtual IDocIterator *codeElements() const = 0;
 };
 
 class IDocHighlight : public IDoc
@@ -311,56 +311,56 @@ class IDocHighlight : public IDoc
       KeywordType, KeywordFlow, CharLiteral, 
       StringLiteral, Preprocessor
     };
-    virtual HighlightKind highlightKind() = 0;
-    virtual IDocIterator *codeElements() = 0;
+    virtual HighlightKind highlightKind() const = 0;
+    virtual IDocIterator *codeElements() const = 0;
 };
 
 class IDocFormula : public IDoc
 {
   public:
-    virtual QString id() = 0;
-    virtual QString text() = 0;
+    virtual QString id() const = 0;
+    virtual QString text() const = 0;
 };
 
 class IDocImage : public IDoc
 {
   public:
-    virtual QString name() = 0;
-    virtual QString caption() = 0;
+    virtual QString name() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocDotFile : public IDoc
 {
   public:
-    virtual QString name() = 0;
-    virtual QString caption() = 0;
+    virtual QString name() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocIndexEntry : public IDoc
 {
   public:
-    virtual QString primary() = 0;
-    virtual QString secondary() = 0;
+    virtual QString primary() const = 0;
+    virtual QString secondary() const = 0;
 };
 
 class IDocTable : public IDoc
 {
   public:
-    virtual IDocIterator *rows() = 0;
-    virtual int numColumns() = 0;
-    virtual QString caption() = 0;
+    virtual IDocIterator *rows() const = 0;
+    virtual int numColumns() const = 0;
+    virtual QString caption() const = 0;
 };
 
 class IDocRow : public IDoc
 {
   public:
-    virtual IDocIterator *entries() = 0;
+    virtual IDocIterator *entries() const = 0;
 };
 
 class IDocEntry : public IDoc
 {
   public:
-    virtual IDocIterator *contents() = 0;
+    virtual IDocIterator *contents() const = 0;
 };
 
 class IDocSection : public IDoc
@@ -388,6 +388,72 @@ class IDocIterator
     virtual void release() = 0;
 };
 
+class IEdgeLabel
+{
+  public:
+    virtual QString label() = 0;
+};
+
+class IEdgeLabelIterator 
+{
+  public:
+    virtual IEdgeLabel *toFirst() = 0;
+    virtual IEdgeLabel *toLast() = 0;
+    virtual IEdgeLabel *toNext() = 0;
+    virtual IEdgeLabel *toPrev() = 0;
+    virtual IEdgeLabel *current() const = 0;
+    virtual void release() = 0;
+};
+
+class IChildNode
+{
+  public:
+    enum NodeRelation { PublicInheritance, ProtectedInheritance,
+                        PrivateInheritance, Usage, TemplateInstace
+                      };
+    virtual QString id() const = 0;
+    virtual NodeRelation relation() const = 0;
+    virtual IEdgeLabelIterator *edgeLabels() const = 0;
+};
+
+class IChildNodeIterator 
+{
+  public:
+    virtual IChildNode *toFirst() = 0;
+    virtual IChildNode *toLast() = 0;
+    virtual IChildNode *toNext() = 0;
+    virtual IChildNode *toPrev() = 0;
+    virtual IChildNode *current() const = 0;
+    virtual void release() = 0;
+};
+
+class INode
+{
+  public:
+    virtual QString id() const = 0;
+    virtual QString label() const = 0;
+    virtual QString linkId() const = 0;
+    virtual IChildNodeIterator *children() const = 0;
+};
+
+class INodeIterator 
+{
+  public:
+    virtual INode *toFirst() = 0;
+    virtual INode *toLast() = 0;
+    virtual INode *toNext() = 0;
+    virtual INode *toPrev() = 0;
+    virtual INode *current() const = 0;
+    virtual void release() = 0;
+};
+
+class IGraph
+{
+  public:
+    virtual INodeIterator *nodes() const = 0;
+    virtual ~IGraph() {}
+};
+
 class IMember 
 {
   public:
@@ -501,6 +567,33 @@ class ICompound
      *  zero, the memory for the compound will be released.
      */
     virtual void release() = 0;
+
+    // TODO:
+    // class:
+    //  IRelatedCompoundIterator *baseClasses()
+    //  IRelatedCompoundIterator *derivedClasses()
+    //  ICompoundIterator *innerClasses()
+    //  ITemplateParamListIterator *templateParamLists()
+    //  listOfAllMembers()
+    //  IDotGraph *inheritanceGraph()
+    //  IDotGraph *collaborationGraph()
+    //  locationFile()
+    //  locationLine()
+    //  locationBodyStartLine()
+    //  locationBodyEndLine()
+    // namespace:
+    //  ICompound *innerNamespaces()
+    // file:
+    //  includes()
+    //  includedBy()
+    //  IDotGraph *includeDependencyGraph()
+    //  IDotGraph *includedByDependencyGraph()
+    //  IDocProgramListing *source()
+    // group:
+    //  Title()
+    //  innerFile()
+    //  innerPage()
+    // page:
 };
 
 class ICompoundIterator 
diff --git a/addon/doxmlparser/src/doxmlparser.pro.in b/addon/doxmlparser/src/doxmlparser.pro.in
index 889f069..1d05f5b 100644
--- a/addon/doxmlparser/src/doxmlparser.pro.in
+++ b/addon/doxmlparser/src/doxmlparser.pro.in
@@ -4,12 +4,12 @@ HEADERS      =	basehandler.h mainhandler.h \
                 compoundhandler.h sectionhandler.h \
                 memberhandler.h paramhandler.h \
                 dochandler.h linkedtexthandler.h \
-                debug.h
+                debug.h graphhandler.h
 SOURCES      =	mainhandler.cpp \
                 compoundhandler.cpp sectionhandler.cpp \
                 memberhandler.cpp paramhandler.cpp \
                 dochandler.cpp linkedtexthandler.cpp \
-                basehandler.cpp debug.cpp
+                basehandler.cpp debug.cpp graphhandler.cpp
 unix:LIBS                  += -L../../../lib -lqtools 
 win32:INCLUDEPATH          += .
 win32-mingw:LIBS           += -L../../../lib -lqtools 
diff --git a/addon/doxmlparser/src/graphhandler.cpp b/addon/doxmlparser/src/graphhandler.cpp
new file mode 100644
index 0000000..9c822de
--- /dev/null
+++ b/addon/doxmlparser/src/graphhandler.cpp
@@ -0,0 +1,86 @@
+#include "graphhandler.h"
+
+GraphHandler::GraphHandler(IBaseHandler *parent,const char *endTag)
+   : m_parent(parent)
+{
+  addEndHandler(endTag,this,&GraphHandler::endGraph);
+  addStartHandler("node",this,&GraphHandler::startNode);
+  m_nodes.setAutoDelete(TRUE);
+}
+
+GraphHandler::~GraphHandler()
+{
+}
+
+void GraphHandler::startGraph(const QXmlAttributes &)
+{
+  m_parent->setDelegate(this);
+}
+
+void GraphHandler::endGraph()
+{
+  m_parent->setDelegate(0);
+}
+
+void GraphHandler::startNode(const QXmlAttributes &attrib)
+{
+  NodeHandler *n = new NodeHandler(this);
+  n->startNode(attrib);
+  m_nodes.append(n);
+}
+
+INodeIterator *GraphHandler::nodes() const
+{
+  return new NodeIterator(*this);
+}
+
+//------------------------------------------------------------------------
+
+NodeHandler::NodeHandler(IBaseHandler *parent)
+   : m_parent(parent)
+{
+  addEndHandler("node",this,&NodeHandler::endNode);
+  addStartHandler("link",this,&NodeHandler::startLink);
+  addEndHandler("link",this,&NodeHandler::endLink);
+  addStartHandler("label",this,&NodeHandler::startLabel);
+  addEndHandler("label",this,&NodeHandler::endLabel);
+}
+
+NodeHandler::~NodeHandler()
+{
+}
+
+void NodeHandler::startNode(const QXmlAttributes &attrib)
+{
+  m_parent->setDelegate(this);
+  m_id = attrib.value("id");
+}
+
+void NodeHandler::endNode()
+{
+  m_parent->setDelegate(0);
+}
+
+void NodeHandler::startLink(const QXmlAttributes &attrib)
+{
+  m_link = attrib.value("id");
+}
+
+void NodeHandler::endLink()
+{
+}
+
+void NodeHandler::startLabel(const QXmlAttributes &/*attrib*/)
+{
+  m_curString="";
+}
+
+void NodeHandler::endLabel()
+{
+  m_label = m_curString;
+}
+
+
+
+
+
diff --git a/addon/doxmlparser/src/graphhandler.h b/addon/doxmlparser/src/graphhandler.h
new file mode 100644
index 0000000..47222d1
--- /dev/null
+++ b/addon/doxmlparser/src/graphhandler.h
@@ -0,0 +1,110 @@
+/******************************************************************************
+ *
+ * $Id$
+ *
+ *
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby 
+ * granted. No representations are made about the suitability of this software 
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ */
+
+#ifndef _GRAPHHANDLER_H
+#define _GRAPHHANDLER_H
+
+#include "doxmlintf.h"
+#include "basehandler.h"
+#include "baseiterator.h"
+
+class NodeHandler;
+class ChildNodeHandler;
+
+class GraphHandler : public IGraph, public BaseHandler<GraphHandler>
+{
+    friend class NodeIterator;
+  public:
+    GraphHandler(IBaseHandler *parent,const char *endTag);
+    virtual ~GraphHandler();
+
+    void startGraph(const QXmlAttributes &attrib);
+    void endGraph();
+    void startNode(const QXmlAttributes &attrib);
+
+    // IGraph
+    virtual INodeIterator *nodes() const;
+
+  private:
+    IBaseHandler *m_parent;
+    QList<NodeHandler> m_nodes;
+};
+
+//----------------------------------------------------------------------
+
+class NodeHandler : public INode, public BaseHandler<NodeHandler>
+{
+    friend class ChildNodeIterator;
+  public:
+    NodeHandler(IBaseHandler *parent);
+    virtual ~NodeHandler();
+
+    void startNode(const QXmlAttributes &attrib);
+    void endNode();
+    void startLabel(const QXmlAttributes &attrib);
+    void endLabel();
+    void startLink(const QXmlAttributes &attrib);
+    void endLink();
+
+    // INode
+    virtual QString id() const { return m_id; }
+    virtual QString label() const { return m_label; }
+    virtual QString linkId() const { return m_link; }
+    virtual IChildNodeIterator *children() const { return 0; } // TODO: implement
+
+  private:
+    IBaseHandler *m_parent;
+    QString m_id;
+    QString m_label;
+    QString m_link;
+    QList<ChildNodeHandler> m_children;
+};
+
+class NodeIterator : public BaseIterator<INodeIterator,INode,NodeHandler>
+{
+  public:
+    NodeIterator(const GraphHandler &handler) :
+      BaseIterator<INodeIterator,INode,NodeHandler>(handler.m_nodes) {}
+};
+
+//----------------------------------------------------------------------
+
+class ChildNodeHandler : public IChildNode, public BaseHandler<ChildNodeHandler>
+{
+  public:
+    ChildNodeHandler(IBaseHandler *parent);
+    virtual ~ChildNodeHandler();
+
+    void startChildNode(const QXmlAttributes &attrib);
+    void endChildNode();
+
+    // IChildNode
+    virtual QString id() const { return m_id; }
+
+  private:
+    IBaseHandler *m_parent;
+    QString m_id;
+};
+
+class ChildNodeIterator : public BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>
+{
+  public:
+    ChildNodeIterator(const NodeHandler &handler) :
+      BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>(handler.m_children) {}
+};
+
+
+#endif
+
diff --git a/addon/doxmlparser/src/mainhandler.cpp b/addon/doxmlparser/src/mainhandler.cpp
index 99cb665..98249ee 100644
--- a/addon/doxmlparser/src/mainhandler.cpp
+++ b/addon/doxmlparser/src/mainhandler.cpp
@@ -16,6 +16,7 @@
 #include <qxml.h>
 #include "mainhandler.h"
 #include "compoundhandler.h"
+#include "sectionhandler.h"
 #include "debug.h"
 
 class ErrorHandler : public QXmlErrorHandler
diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp
index c90883e..4359ba5 100644
--- a/addon/doxmlparser/test/main.cpp
+++ b/addon/doxmlparser/test/main.cpp
@@ -234,12 +234,6 @@ void DumpDoc(IDoc *doc)
         ASSERT(hl!=0);
       }
       break;
-    case IDoc::Anchor:
-      {
-        IDocAnchor *anc = dynamic_cast<IDocAnchor*>(anc);
-        ASSERT(anc!=0);
-      }
-      break;
     case IDoc::Formula:
       {
         IDocFormula *fm = dynamic_cast<IDocFormula*>(fm);
diff --git a/addon/doxmlparser/test/xmlparse.pro.in b/addon/doxmlparser/test/xmlparse.pro.in
index 1dc095b..cfb95be 100644
--- a/addon/doxmlparser/test/xmlparse.pro.in
+++ b/addon/doxmlparser/test/xmlparse.pro.in
@@ -14,6 +14,7 @@ DESTDIR                     =
 OBJECTS_DIR                 = ../objects
 TARGET                      = xmlparse
 INCLUDEPATH                += ../../../qtools ../include
+DEPENDPATH                 += ../include
 unix:TARGETDEPS             = ../lib/libdoxmlparser.a
 win32:TARGETDEPS            = ..\lib\doxmlparser.lib
 
diff --git a/doc/Makefile.in b/doc/Makefile.in
index 4deee03..6dfddcc 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -1,7 +1,7 @@
 #
 # 
 #
-# Copyright (C) 1997-2001 by Dimitri van Heesch.
+# Copyright (C) 1997-2002 by Dimitri van Heesch.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/Makefile.latex b/doc/Makefile.latex
index 43489ce..f824b70 100644
--- a/doc/Makefile.latex
+++ b/doc/Makefile.latex
@@ -1,7 +1,7 @@
 #
 # 
 #
-# Copyright (C) 1997-2001 by Dimitri van Heesch.
+# Copyright (C) 1997-2002 by Dimitri van Heesch.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/Makefile.win_make.in b/doc/Makefile.win_make.in
index 3161b31..1f576cb 100644
--- a/doc/Makefile.win_make.in
+++ b/doc/Makefile.win_make.in
@@ -1,7 +1,7 @@
 #
 # 
 #
-# Copyright (C) 1997-2001 by Dimitri van Heesch.
+# Copyright (C) 1997-2002 by Dimitri van Heesch.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/Makefile.win_nmake.in b/doc/Makefile.win_nmake.in
index 05820b0..bd79a33 100644
--- a/doc/Makefile.win_nmake.in
+++ b/doc/Makefile.win_nmake.in
@@ -1,7 +1,7 @@
 #
 # 
 #
-# Copyright (C) 1997-2001 by Dimitri van Heesch.
+# Copyright (C) 1997-2002 by Dimitri van Heesch.
 #
 # Permission to use, copy, modify, and distribute this software and its
 # documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/arch.doc b/doc/arch.doc
index 2529fcb..1851d31 100644
--- a/doc/arch.doc
+++ b/doc/arch.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/autolink.doc b/doc/autolink.doc
index ee0cd09..94b28d4 100644
--- a/doc/autolink.doc
+++ b/doc/autolink.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/commands.doc b/doc/commands.doc
index fd4f71d..edd5804 100644
--- a/doc/commands.doc
+++ b/doc/commands.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/config.doc b/doc/config.doc
index 8300a84..d36dfc5 100644
--- a/doc/config.doc
+++ b/doc/config.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/diagrams.doc b/doc/diagrams.doc
index 3094720..d44a8b4 100644
--- a/doc/diagrams.doc
+++ b/doc/diagrams.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/docblocks.doc b/doc/docblocks.doc
index 611f0ee..49a2f5f 100644
--- a/doc/docblocks.doc
+++ b/doc/docblocks.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/doxygen.sty b/doc/doxygen.sty
index 86ee4ca..bada1f9 100644
--- a/doc/doxygen.sty
+++ b/doc/doxygen.sty
@@ -1,7 +1,7 @@
 %
 % 
 %
-% Copyright (C) 1997-2001 by Dimitri van Heesch.
+% Copyright (C) 1997-2002 by Dimitri van Heesch.
 %
 % Permission to use, copy, modify, and distribute this software and its
 % documentation under the terms of the GNU General Public License is hereby 
@@ -24,8 +24,8 @@
         {\fancyplain{}{\bfseries\rightmark}}
 \rhead[\fancyplain{}{\bfseries\leftmark}]
         {\fancyplain{}{\bfseries\thepage}}
-\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2001}]{}
-\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2001}}
+\rfoot[\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2002}]{}
+\lfoot[]{\fancyplain{}{\bfseries\scriptsize User Manual for Doxygen $VERSION, written by Dimitri van Heesch \copyright 1997-2002}}
 \cfoot{}
 \newenvironment{CompactList}
 {\begin{list}{}{
diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 6f3313a..2b718e3 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -1,7 +1,7 @@
 %
 % 
 %
-% Copyright (C) 1997-2001 by Dimitri van Heesch.
+% Copyright (C) 1997-2002 by Dimitri van Heesch.
 %
 % Permission to use, copy, modify, and distribute this software and its
 % documentation under the terms of the GNU General Public License is hereby 
@@ -37,7 +37,7 @@
 \begin{center}
 Manual for version $VERSION\\[2ex]
 Written by Dimitri van Heesch\\[2ex]
-\copyright 1997-2001
+\copyright 1997-2002
 \end{center}
 \end{titlepage}
 \clearemptydoublepage
diff --git a/doc/doxygen_usage.doc b/doc/doxygen_usage.doc
index 865f5ca..bf86ffb 100644
--- a/doc/doxygen_usage.doc
+++ b/doc/doxygen_usage.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/doxysearch_usage.doc b/doc/doxysearch_usage.doc
index e878a9c..a919360 100644
--- a/doc/doxysearch_usage.doc
+++ b/doc/doxysearch_usage.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/doxytag_usage.doc b/doc/doxytag_usage.doc
index 506dc5f..187c285 100644
--- a/doc/doxytag_usage.doc
+++ b/doc/doxytag_usage.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/doxywizard_usage.doc b/doc/doxywizard_usage.doc
index 5c17add..05d1d9f 100644
--- a/doc/doxywizard_usage.doc
+++ b/doc/doxywizard_usage.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/external.doc b/doc/external.doc
index 111703e..e7d3bf0 100644
--- a/doc/external.doc
+++ b/doc/external.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/faq.doc b/doc/faq.doc
index cf18fab..77ba440 100644
--- a/doc/faq.doc
+++ b/doc/faq.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
@@ -218,7 +218,7 @@ Qt had nicely generated documentation (using an internal tool which
 they didn't want to release) and I wrote similar docs by hand. 
 This was a nightmare to maintain, so I wanted a similar tool. I looked at
 Doc++ but that just wasn't good enough (it didn't support signals and
-slots and did have the Qt look and feel I have grown to like), 
+slots and did not have the Qt look and feel I had grown to like), 
 so I started to write my own tool...
 
 </ol>
diff --git a/doc/features.doc b/doc/features.doc
index 71c2a1f..806a5b5 100644
--- a/doc/features.doc
+++ b/doc/features.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/formulas.doc b/doc/formulas.doc
index e90424f..52a30e7 100644
--- a/doc/formulas.doc
+++ b/doc/formulas.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/grouping.doc b/doc/grouping.doc
index ae80ae8..0d20b39 100644
--- a/doc/grouping.doc
+++ b/doc/grouping.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/history.doc b/doc/history.doc
index 5a28e9d..0866130 100644
--- a/doc/history.doc
+++ b/doc/history.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc
index 12d5356..476be78 100644
--- a/doc/htmlcmds.doc
+++ b/doc/htmlcmds.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
@@ -115,5 +115,11 @@ The special HTML character entities that are recognized by Doxygen:
 <li>\c &nbsp; a non breakable space.
 </ul>
 
+Finally, to put invisible comments inside comment blocks, HTML style
+comments can be used:
+\verbatim
+/*! <!-- This is a comment with a comment block --> Visible text */
+\endverbatim
+
 */
  
diff --git a/doc/index.doc b/doc/index.doc
index 450bfe9..ca2d9b5 100644
--- a/doc/index.doc
+++ b/doc/index.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
@@ -25,25 +25,6 @@ Version: $(VERSION)
 </center>
 \endif
 
-<h2>Doxygen license</h2>
-\addindex license
-\addindex GPL
-
-Copyright &copy; 1997-2001 by 
-<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
-
-Permission to use, copy, modify, and distribute this software and its
-documentation under the terms of the GNU General Public License is hereby 
-granted. No representations are made about the suitability of this software 
-for any purpose. It is provided "as is" without express or implied warranty.
-See the 
-<a href="http://www.gnu.org/copyleft/gpl.html">
-GNU General Public License</a>
-for more details.
-<p>
-Documents produced by doxygen are derivative works derived from the
-input used in their production; they are not affected by this license.
-
 <h2>Introduction</h2>
 Doxygen is a documentation system for C++, Java, IDL 
 (Corba, Microsoft and KDE-DCOP flavors) and C. 
@@ -70,8 +51,8 @@ It can help you in three ways:
 
 Doxygen is developed under <a href="http://www.linux.org">Linux</a>, 
 but is set-up to be highly portable. As a result, it runs on most 
-other Unix flavors as well. Furthermore, an executable for 
-Windows 9x/NT is also available.
+other Unix flavors as well. Furthermore, executables for 
+Windows 9x/NT and Mac OS X are available.
 
 This manual is divided into three parts, each of which is divided into several 
 sections.
@@ -128,6 +109,25 @@ The third part provides information for developers:
               output languages.
 </ul>
 
+<h2>Doxygen license</h2>
+\addindex license
+\addindex GPL
+
+Copyright &copy; 1997-2002 by 
+<a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>.<p>
+
+Permission to use, copy, modify, and distribute this software and its
+documentation under the terms of the GNU General Public License is hereby 
+granted. No representations are made about the suitability of this software 
+for any purpose. It is provided "as is" without express or implied warranty.
+See the 
+<a href="http://www.gnu.org/copyleft/gpl.html">
+GNU General Public License</a>
+for more details.
+<p>
+Documents produced by doxygen are derivative works derived from the
+input used in their production; they are not affected by this license.
+
 <h2>Projects using doxygen</h2>
 
 I have compiled a 
@@ -165,20 +165,19 @@ Thanks go to:
 <li>My brother <a href="http://www.stack.nl/~fidget/index.html">Frank</a>
     for rendering the logos.
 <li>Harm van der Heijden for adding HTML help support.
-<li>Wouter Slegers for registering the www.doxygen.org domain.
+<li>Wouter Slegers of 
+    <a href="http://www.yourcreativesolutions.nl">Your Creative Solutions</a> 
+    for registering the www.doxygen.org domain.
 <li>Parker Waechter for adding the RTF output generator.
 <li>Joerg Baumann, for adding conditional documentation blocks, 
     PDF links, and the configuration generator.
 <li>Matthias Andree for providing a .spec script for building rpms from the
     sources.
 <li>Tim Mensch for adding the todo command.
+<li>Christian Hammond for redesigning the web-site.
 <li>Ken Wong for providing the HTML tree view code.
-<li>Jens Breitenstein, Christophe Bordeaux, Samuel Hägglund, Xet Erixon, 
-    Vlastimil Havran, Petr Prikryl, Ahmed Also Faisal, Alessandro Falappa, 
-    Kenji Nagamatsu, Francisco Oltra Thennet, Olli Korhonen, 
-    Boris Bralo, Nickolay Semyonov, Richard Kim, Földvári György,
-    Grzegorz Kowal, and Wang Weihan 
-    for providing translations into various languages.
+<li>Petr Prikryl for coordinating the internationalisation support.
+    All language maintainers for providing translations into many languages.
 <li>Erik Jan Lingen of <a href="http://www.habanera.nl/">Habanera</a> for
     donating money.
 <li>The Comms group of <a href="http://www.symbian.com">Symbian</a> for donating
diff --git a/doc/install.doc b/doc/install.doc
index 78a61cf..7472355 100644
--- a/doc/install.doc
+++ b/doc/install.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/installdox_usage.doc b/doc/installdox_usage.doc
index 1662a10..df9973e 100644
--- a/doc/installdox_usage.doc
+++ b/doc/installdox_usage.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/language.doc b/doc/language.doc
index 966fc6a..4b3bcca 100644
--- a/doc/language.doc
+++ b/doc/language.doc
@@ -5,7 +5,7 @@
  *          Do not edit this file.  Edit the above mentioned files!
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
@@ -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.13-20020210), 25 languages 
+Currently (version 1.2.14-20020224), 25 languages 
 are supported (sorted alphabetically): 
 Brazilian Portuguese, Chinese, Croatian, Czech, Danish, 
 Dutch, English, Finnish, French, German, 
@@ -72,7 +72,7 @@ when the translator was updated.
       <TD>Czech</TD>  
       <TD>Petr P&#x0159;ikryl</TD>
       <TD>prikrylp@NOSPAM.skil.cz</TD>
-      <TD>1.2.13</TD>
+      <TD>up-to-date</TD>
   </TR>
   <TR BGCOLOR="#ffffff">
       <TD>Danish</TD>  
@@ -143,7 +143,7 @@ when the translator was updated.
   <TR BGCOLOR="#ffffff">
       <TD>Norwegian</TD>  
       <TD>Lars Erik Jordet</TD>
-      <TD>larsej@NOSPAM.stud.ifd.hibu.no</TD>
+      <TD>lej@NOSPAM.circuitry.no</TD>
       <TD>1.2.2</TD>
   </TR>
   <TR BGCOLOR="#ffffff">
@@ -156,7 +156,7 @@ when the translator was updated.
       <TD>Portuguese</TD>  
       <TD>Rui Godinho Lopes</TD>
       <TD>ruiglopes@NOSPAM.yahoo.com</TD>
-      <TD>1.2.13</TD>
+      <TD>up-to-date</TD>
   </TR>
   <TR BGCOLOR="#ffffff">
       <TD>Romanian</TD>  
@@ -218,7 +218,7 @@ when the translator was updated.
   \hline
   Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
   \hline
-  Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & 1.2.13 \\
+  Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
   \hline
   Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & 1.2.7 \\
   \hline
@@ -245,11 +245,11 @@ when the translator was updated.
   \hline
   Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\
   \hline
-  Norwegian & Lars Erik Jordet & {\tt larsej@stud.ifd.hibu.no} & 1.2.2 \\
+  Norwegian & Lars Erik Jordet & {\tt lej@circuitry.no} & 1.2.2 \\
   \hline
   Polish & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & 1.2.1 \\
   \hline
-  Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.2.13 \\
+  Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
   \hline
   Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.1 \\
   \hline
diff --git a/doc/language.tpl b/doc/language.tpl
index bc14fd5..875d770 100644
--- a/doc/language.tpl
+++ b/doc/language.tpl
@@ -3,7 +3,7 @@
  * Edit manually this file, not the language.doc!</notice>
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/maintainers.txt b/doc/maintainers.txt
index 93de235..488573d 100644
--- a/doc/maintainers.txt
+++ b/doc/maintainers.txt
@@ -51,7 +51,7 @@ Korean
 Richard Kim: ryk@dspwiz.com
 
 Norwegian
-Lars Erik Jordet: larsej@stud.ifd.hibu.no
+Lars Erik Jordet: lej@circuitry.no
 
 Polish 
 Grzegorz Kowal:  g_kowal@poczta.onet.pl
diff --git a/doc/output.doc b/doc/output.doc
index 4ee733c..e4ee62f 100644
--- a/doc/output.doc
+++ b/doc/output.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/preprocessing.doc b/doc/preprocessing.doc
index 1be3ecd..9b7e8bc 100644
--- a/doc/preprocessing.doc
+++ b/doc/preprocessing.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/starting.doc b/doc/starting.doc
index f7578c9..5729087 100644
--- a/doc/starting.doc
+++ b/doc/starting.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/doc/trouble.doc b/doc/trouble.doc
index f03eb99..bfac14a 100644
--- a/doc/trouble.doc
+++ b/doc/trouble.doc
@@ -2,7 +2,7 @@
  *
  * 
  *
- * Copyright (C) 1997-2001 by Dimitri van Heesch.
+ * Copyright (C) 1997-2002 by Dimitri van Heesch.
  *
  * Permission to use, copy, modify, and distribute this software and its
  * documentation under the terms of the GNU General Public License is hereby 
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 49f091d..eedb104 100644
--- a/packages/rpm/doxygen.spec
+++ b/packages/rpm/doxygen.spec
@@ -1,6 +1,6 @@
 Summary: A documentation system for C/C++.
 Name: doxygen
-Version: 1.2.14_20020224
+Version: 1.2.14_20020310
 Release: 1
 Epoch: 1
 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
diff --git a/src/config.l b/src/config.l
index 810287e..fe32174 100644
--- a/src/config.l
+++ b/src/config.l
@@ -881,9 +881,10 @@ void Config::check()
     if (p)
     {
       char c;
-      while ((c=*p++))
+      while ((c=*p))
       {
-	if (c=='\\') c='/';
+	if (c=='\\') *p='/';
+	p++;
       }
     }
     QCString path = sfp;
diff --git a/src/doc.l b/src/doc.l
index c519ee4..b6469a7 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -752,13 +752,30 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
       else
       {
 	warn(yyFileName,yyLineNr,
-             "Warning: could not write output image %s",outputFile.data());
+	    "Warning: could not write output image %s",outputFile.data());
       }
     }
     else
     {
       warn(yyFileName,yyLineNr,
-           "Warning: could not open image %s",fileName);
+	  "Warning: could not open image %s",fileName);
+    }
+
+    if (type==IT_Latex && Config_getBool("USE_PDFLATEX") && 
+	fd->name().right(4)==".eps"
+       )
+    { // we have an .eps image in pdflatex mode => convert it to a pdf.
+      QCString outputDir = Config_getString("LATEX_OUTPUT");
+      QCString baseName  = fd->name().left(fd->name().length()-4);
+      QCString epstopdfArgs(4096);
+      epstopdfArgs.sprintf("\"%s/%s.eps\" --outfile=\"%s/%s.pdf\"",
+                           outputDir.data(), baseName.data(),
+			   outputDir.data(), baseName.data());
+      if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
+      {
+	err("Error: Problems running epstopdf. Check your TeX installation!\n");
+      }
+      return baseName;
     }
   }
   else if (ambig)
@@ -1202,13 +1219,13 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
 <DocScan>{CMD}"link"/{BN}	        { BEGIN( DocLink ); }
 <DocScan>"{"{CMD}"link"{BN}+	        { BEGIN( DocJavaLink ); }
 <DocSkipWord>[a-z_A-Z0-9.:()]+		{ BEGIN( DocScan ); }
-<DocLink>[a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+  {  // TODO: support operators as well!
+<DocLink>[a-z_A-Z0-9:#.,~&*/\[\]<>()\-\+]+({B}*("const"|"volatile"))?  {  // TODO: support operators as well!
   					  linkRef  = stripKnownExtensions(yytext);
 					  linkText = "";
   					  BEGIN( DocLinkText ); 
 					}
 <DocJavaLink>([a-z_A-Z0-9]+".")+	{ /* Skip scope prefix (TODO: fix) */ }
-<DocJavaLink>([a-z_A-Z0-9]*"#")?[a-z_A-Z0-9]+("("[a-z_A-Z0-9.,:~&*()\[\]]*")")? {  // TODO: support operators as well!
+<DocJavaLink>([a-z_A-Z0-9]*"#")?[a-z_A-Z0-9]+("("[a-z_A-Z0-9.,:~&*()\[\]]*")")?({B}*("const"|"volatile"))? {  // TODO: support operators as well!
   					  linkRef  = yytext;
 					  linkText = "";
 					  BEGIN( DocJavaLinkText );
@@ -2076,7 +2093,7 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
 					  }
 					  BEGIN(DocScan);
   					}
-<DocScan,DocRefName>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")" {
+<DocScan,DocRefName>{SCOPEMASK}"("[a-z_A-Z0-9,:\<\> \t\*\&]+")"({B}*("const"|"volatile"))? {
   					  if (!insideHtmlLink)
 					  {
   					    generateRef(*outDoc,className,yytext,inSeeBlock);
@@ -2087,7 +2104,7 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
 					  }
 					  BEGIN(DocScan);
   					}
-<DocScan,DocRefName>{SCOPEMASK}("()")?	{
+<DocScan,DocRefName>{SCOPEMASK}("()"({B}*("const"|"volatile"))?)? {
   					  if (!insideHtmlLink)
 					  {
   					    generateRef(*outDoc,className,yytext,inSeeBlock);
@@ -2617,7 +2634,10 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
 					    {
 					      outDoc->newParagraph(); 
 					    }
-					    if (ib) endBlock();
+					    if (ib && currentListIndent.top()=="P") 
+					    { // inside paragraph block
+					      endBlock();
+					    }
 					  }
 					}
 <DocScan>{BN}+/\n			{ 
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 1363348..f420437 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -3909,7 +3909,8 @@ static void findMember(Entry *root,
         int count=0;
         MemberNameIterator mni(*mn);
         MemberDef *md;
-        for (mni.toFirst();(md=mni.current());++mni)
+        bool memFound=FALSE;
+        for (mni.toFirst();!memFound && (md=mni.current());++mni)
         {
           ClassDef *cd=md->getClassDef();
           Debug::print(Debug::FindMembers,0,
@@ -3993,13 +3994,64 @@ static void findMember(Entry *root,
 
             bool ambig;
             FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
-            // list of namespaces using in the file that this member definition is part of
-            NamespaceList *nl = 0;
-            if (nd) nl = nd->getUsedNamespaces();
-            else if (fd) nl = fd->getUsedNamespaces();
-            ClassList *cl = 0;
-            if (nd) cl = nd->getUsedClasses();
-            else if (fd) cl = fd->getUsedClasses();
+
+            // list of namespaces using in the file/namespace that this 
+            // member definition is part of
+            NamespaceList *nl = new NamespaceList;
+            if (nd) 
+            {
+              NamespaceList *nnl = nd->getUsedNamespaces();
+              if (nnl)
+              {
+                NamespaceDef *nnd = nnl->first();
+                while (nnd)
+                {
+                  nl->append(nnd);
+                  nnd = nnl->next();
+                }
+              }
+            }
+            if (fd)
+            {
+              NamespaceList *fnl = fd->getUsedNamespaces();
+              if (fnl)
+              {
+                NamespaceDef *fnd = fnl->first();
+                while (fnd)
+                {
+                  nl->append(fnd);
+                  fnd = fnl->next();
+                }
+              }
+            }
+
+            ClassList *cl = new ClassList;
+            if (nd) 
+            {
+              ClassList *ncl = nd->getUsedClasses();
+              if (ncl)
+              {
+                ClassDef *ncd = ncl->first();
+                while (ncd)
+                {
+                  cl->append(ncd);
+                  ncd = ncl->next();
+                }
+              }
+            }
+            if (fd) 
+            {
+              ClassList *fcl = fd->getUsedClasses();
+              if (fcl)
+              {
+                ClassDef *fcd = fcl->first();
+                while (fcd)
+                {
+                  cl->append(fcd);
+                  fcd = fcl->next();
+                }
+              }
+            }
             
             bool matching=
               md->isVariable() || md->isTypedef() || // needed for function pointers
@@ -4038,8 +4090,10 @@ static void findMember(Entry *root,
               //         root->inLine,md->isInline());
               addMemberDocs(root,md,funcDecl,0,overloaded,nl);
               count++;
-              break;
+              memFound=TRUE;
             }
+            delete cl;
+            delete nl;
           } 
         } 
         if (count==0 && !(isFriend && funcType=="class"))
@@ -6565,13 +6619,19 @@ void readConfiguration(int argc, char **argv)
           else
           {
             Config::instance()->init();
-            setTranslator("English");
           }
           if (optind+3>=argc)
           {
             err("Error: option \"-w html\" does not have enough arguments\n");
             exit(1);
           }
+
+		  QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
+		  if (!setTranslator(outputLanguage))
+		  {
+			  err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+		  }
+
           QFile f;
           if (openOutputFile(argv[optind+1],f))
           {
@@ -6605,13 +6665,19 @@ void readConfiguration(int argc, char **argv)
           else // use default config
           {
             Config::instance()->init();
-            setTranslator("English");
           }
           if (optind+2>=argc)
           {
-            err("Error: option \"-w html\" does not have enough arguments\n");
+            err("Error: option \"-w latex\" does not have enough arguments\n");
             exit(1);
           }
+
+		  QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
+		  if (!setTranslator(outputLanguage))
+		  {
+			  err("Error: Output language %s not supported! Using English instead.\n", outputLanguage.data());
+		  }
+
           QFile f;
           if (openOutputFile(argv[optind+1],f))
           {
@@ -6713,7 +6779,7 @@ void readConfiguration(int argc, char **argv)
   Config::instance()->check();
   initWarningFormat();
   QCString outputLanguage=Config_getEnum("OUTPUT_LANGUAGE");
-  if (!outputLanguage.isEmpty() && !setTranslator(outputLanguage))
+  if (!setTranslator(outputLanguage))
   {
     err("Error: Output language %s not supported! Using English instead.\n",
        outputLanguage.data());
@@ -7335,13 +7401,13 @@ void generateOutput()
             theTranslator->trGeneratedAt(dateToString(TRUE),Config_getString("PROJECT_NAME"))
           );
   outputList->writeStyleInfo(1); // write second part
-  parseText(*outputList,theTranslator->trWrittenBy());
+  //parseText(*outputList,theTranslator->trWrittenBy());
   outputList->writeStyleInfo(2); // write third part
   parseText(*outputList,
             theTranslator->trGeneratedAt(dateToString(TRUE),Config_getString("PROJECT_NAME"))
           );
   outputList->writeStyleInfo(3); // write fourth part
-  parseText(*outputList,theTranslator->trWrittenBy());
+  //parseText(*outputList,theTranslator->trWrittenBy());
   outputList->writeStyleInfo(4); // write last part
   outputList->enableAll();
   
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index af01a96..4f971c2 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -181,14 +181,16 @@ void HtmlGenerator::writeHeaderFile(QFile &file)
 void HtmlGenerator::writeFooterFile(QFile &file)
 {
   QTextStream t(&file);
-  t << "<hr><address><small>\n";
+  t << "<hr><address align=\"right\"><small>\n";
   t << theTranslator->trGeneratedAt( "$datetime", "$projectname" );
   t << " <a href=\"http://www.doxygen.org/index.html\">\n"
     << "<img src=\"doxygen.png\" alt=\"doxygen\" " 
     << "align=\"middle\" border=0 width=110 height=53>\n"
-    << "</a> $doxygenversion " << theTranslator->trWrittenBy()
-    << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n"
-    << " &copy;&nbsp;1997-2002</small></address>\n"
+    << "</a> $doxygenversion";
+  //  << " " << theTranslator->trWrittenBy()
+  //  << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n"
+  //  << " &copy;&nbsp;1997-2002"
+  t << "</small></address>\n"
     << "</body>\n"
     << "</html>\n";
 }
@@ -255,7 +257,7 @@ void HtmlGenerator::writeFooter(int part,bool external)
   {
     case 0:
       if (g_footer.isEmpty())
-        t << "<hr><address><small>";
+        t << "<hr><address align=\"right\"><small>";
       else
         t << substituteKeywords(g_footer,convertToHtml(lastTitle));
       break;
@@ -280,8 +282,10 @@ void HtmlGenerator::writeFooter(int part,bool external)
       break;
     default:
       if (g_footer.isEmpty())
-        t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy;&nbsp;"
-             "1997-2002</small></address>\n</body>\n</html>\n";
+      {
+        //t << " <a href=\"mailto:dimitri@stack.nl\">Dimitri van Heesch</a>,\n &copy;&nbsp;1997-2002";
+        t << "</small></address>\n</body>\n</html>\n";
+      }
       break;
       
   }
diff --git a/src/index.cpp b/src/index.cpp
index 9b20b51..47bdaab 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -340,10 +340,10 @@ void endFile(OutputList &ol,bool external)
              ));
   }
   ol.writeFooter(1,external); // write the link to the picture
-  if (Config_getString("HTML_FOOTER").isEmpty())
-  {
-    parseText(ol,theTranslator->trWrittenBy());
-  }
+  //if (Config_getString("HTML_FOOTER").isEmpty())
+  //{
+  //  parseText(ol,theTranslator->trWrittenBy());
+  //}
   ol.writeFooter(2,external); // end the footer
   ol.popGeneratorState();
   ol.endFile();
@@ -2228,7 +2228,10 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
     ftvHelp = FTVHelp::getInstance();
   }
 
-  if (!gd->visited && (!gd->isASubGroup() || level>0))
+  /* Some groups should appear twice under different parent-groups.
+   * That is why we should not check if it was visited 
+   */
+  if (/*!gd->visited &&*/ (!gd->isASubGroup() || level>0))
   {
     //printf("gd->name()=%s #members=%d\n",gd->name().data(),gd->countMembers());
     // write group info
@@ -2503,7 +2506,7 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
     if (htmlHelp) htmlHelp->decContentsDepth();
     if (ftvHelp)  ftvHelp->decContentsDepth();
     
-    gd->visited=TRUE;
+    //gd->visited=TRUE;
   }
 }
 
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 4604a58..c02428c 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -407,12 +407,14 @@ void LatexGenerator::writeStyleSheetFile(QFile &f)
   QCString &projectName = Config_getString("PROJECT_NAME");
 
   t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName );
-  t << " doxygen " << theTranslator->trWrittenBy() << " ";
-  t << "Dimitri van Heesch \\copyright~1997-2002";
+  t << " doxygen";
+  //t << " " << theTranslator->trWrittenBy() << " ";
+  //t << "Dimitri van Heesch \\copyright~1997-2002";
   writeDefaultStyleSheetPart2(t);
   t << theTranslator->trGeneratedAt( dateToString(TRUE), projectName );
-  t << " doxygen " << theTranslator->trWrittenBy() << " ";
-  t << "Dimitri van Heesch \\copyright~1997-2002";
+  t << " doxygen";
+  //t << " << theTranslator->trWrittenBy() << " ";
+  //t << "Dimitri van Heesch \\copyright~1997-2002";
   writeDefaultStyleSheetPart3(t);
 }
 
@@ -824,14 +826,14 @@ void LatexGenerator::writeStyleInfo(int part)
       break;
     case 2:
       {
-        t << " Dimitri van Heesch \\copyright~1997-2002";
+        //t << " Dimitri van Heesch \\copyright~1997-2002";
         t << "}]{}\n";
         writeDefaultStyleSheetPart2(t);
       }
       break;
     case 4:
       {
-        t << " Dimitri van Heesch \\copyright~1997-2002";
+        //t << " Dimitri van Heesch \\copyright~1997-2002";
         writeDefaultStyleSheetPart3(t);
         endPlainFile();
       }
diff --git a/src/pngenc.cpp b/src/pngenc.cpp
index 438b4b5..b7e54f4 100644
--- a/src/pngenc.cpp
+++ b/src/pngenc.cpp
@@ -99,7 +99,7 @@ void PngEncoder::write(const char *name)
        png_palette[i].green = palette[i].green;
        png_palette[i].blue  = palette[i].blue;
      }
-     png_set_PLTE(png_ptr, info_ptr, png_palette, PNG_MAX_PALETTE_LENGTH);
+     png_set_PLTE(png_ptr, info_ptr, png_palette, numOfColors);
      png_set_IHDR( png_ptr, info_ptr, width, height, bit_depth,
          PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE,
          PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE
diff --git a/src/scanner.l b/src/scanner.l
index e558eb1..ab08498 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -2859,7 +2859,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
   					  current->brief+=' ';
 					  lineCount();
   					}
-<JavaDoc>".\\"/[ \t\r\n]		{
+<JavaDoc,AfterDocBrief>".\\"/[ \t\r\n]		{
 					  current->brief+=".";
 					}
 <JavaDoc>"."[ \t\r\n]			{
diff --git a/src/translator_cz.h b/src/translator_cz.h
index e785da4..07941bb 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -135,6 +135,9 @@
 //  - trImplementedFromList() and trImplementedInList() implemented
 //    (new since 1.2.13)
 //  
+// 2002/03/05
+//  - ... forgot to replace TranslatorAdapter... base class by Translator.
+//
 // Todo
 // ----
 //  - The trReimplementedFromList() should pass the kind of the 
@@ -154,7 +157,7 @@
 // probably slightly faster.
 
 
-class TranslatorCzech : public TranslatorAdapter_1_2_13
+class TranslatorCzech : public Translator
 {
   private:
     /*! The decode() inline assumes the source written in the 
diff --git a/src/translator_pt.h b/src/translator_pt.h
index 232eecb..6d73bbd 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -15,9 +15,12 @@
  *
  * The translation into Portuguese was provided by
  *   Rui Godinho Lopes <ruiglopes@yahoo.com>
+ *     http://www.ruilopes.com
  *
  * VERSION HISTORY
  * ---------------
+ * 004 03 march 2002
+ *   ! Updated for doxygen v1.2.14
  * 003 23 november 2001
  *   - Removed some obsolete methods (latexBabelPackage, trAuthor, trAuthors and trFiles)
  * 002 19 november 2001
@@ -31,7 +34,7 @@
 #ifndef TRANSLATOR_PT_H
 #define TRANSLATOR_PT_H
 
-class TranslatorPortuguese : public TranslatorAdapter_1_2_13
+class TranslatorPortuguese : public Translator
 {
   public:
 
@@ -1048,7 +1051,7 @@ class TranslatorPortuguese : public TranslatorAdapter_1_2_13
         "\\endcode\n"
         "Se no ficheiro de configuração estiver a tag \\c MAX_DOT_GRAPH_HEIGHT "
         "com o valor de 200 então o seguinte grafo será gerado:"
-        "<p><center><img src=\"graph_legend.png\"></center>\n"
+        "<p><center><img src=\"graph_legend.gif\"></center>\n"
         "<p>\n"
         "As caixas no grafo anterior têm as seguintes interpretações:\n"
         "<ul>\n"
@@ -1345,6 +1348,26 @@ class TranslatorPortuguese : public TranslatorAdapter_1_2_13
       return "Referências";
     }
 
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.13
+//////////////////////////////////////////////////////////////////////////
+
+    /*! used in member documentation blocks to produce a list of 
+     *  members that are implemented by this one.
+     */
+    virtual QCString trImplementedFromList(int numEntries)
+    {
+      return "Implementa "+trWriteList(numEntries)+".";
+    }
+
+    /*! used in member documentation blocks to produce a list of
+     *  all members that implement this abstract member.
+     */
+    virtual QCString trImplementedInList(int numEntries)
+    {
+      return "Implementado em "+trWriteList(numEntries)+".";
+    }
+
 };
 
 #endif
diff --git a/src/util.cpp b/src/util.cpp
index ed55620..c99b1bd 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1999,7 +1999,8 @@ bool getDefs(const QCString &scName,const QCString &memberName,
              MemberDef *&md, 
              ClassDef *&cd, FileDef *&fd, NamespaceDef *&nd, GroupDef *&gd,
              bool forceEmptyScope,
-             FileDef *currentFile
+             FileDef *currentFile,
+             bool checkCV
             )
 {
   fd=0, md=0, cd=0, nd=0, gd=0;
@@ -2076,7 +2077,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
           if (mmd->isLinkable())
           {
             bool match=args==0 || 
-              matchArguments(mmd->argumentList(),argList,className,0,FALSE); 
+              matchArguments(mmd->argumentList(),argList,className,0,checkCV); 
             //printf("match=%d\n",match);
             if (match)
             {
@@ -2187,7 +2188,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
               argList=new ArgumentList;
               stringToArgumentList(args,argList);
               match=matchArguments(mmd->argumentList(),argList,0,
-                  namespaceName,FALSE); 
+                  namespaceName,checkCV); 
             }
             if (match)
             {
@@ -2247,7 +2248,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
               {
                 argList=new ArgumentList;
                 stringToArgumentList(args,argList);
-                match=matchArguments(md->argumentList(),argList); 
+                match=matchArguments(md->argumentList(),argList,0,0,checkCV); 
                 delete argList; argList=0;
               }
               if (match) 
@@ -2489,8 +2490,13 @@ bool generateRef(OutputDocInterface &od,const char *scName,
   //        scopeStr.data(),nameStr.data(),argsStr.data());
 
   // check if nameStr is a member or global.
-  if (getDefs(scopeStr,nameStr,argsStr,md,cd,fd,nd,gd,
-              scopePos==0 && !memberScopeFirst))
+  if (getDefs(scopeStr,nameStr,argsStr,
+              md,cd,fd,nd,gd,
+              scopePos==0 && !memberScopeFirst,
+              0,
+              TRUE
+             )
+     )
   {
     //printf("after getDefs md=%p cd=%p fd=%p nd=%p gd=%p\n",md,cd,fd,nd,gd);
     QCString anchor;
diff --git a/src/util.h b/src/util.h
index 2a68fad..6831c2b 100644
--- a/src/util.h
+++ b/src/util.h
@@ -86,7 +86,8 @@ extern bool getDefs(const QCString &scopeName,
                     NamespaceDef *&nd,
                     GroupDef *&gd,
                     bool forceEmptyScope=FALSE,
-                    FileDef *currentFile=0
+                    FileDef *currentFile=0,
+                    bool checkCV=FALSE
                    );
 
 extern bool generateRef(OutputDocInterface &od,const char *,
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 9273f63..c5b1fb0 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1309,7 +1309,7 @@ static void writeTemplateLists(Definition *d,QTextStream &t)
   }
 }
 
-static void writeListOfAllMember(ClassDef *cd,QTextStream &t)
+static void writeListOfAllMembers(ClassDef *cd,QTextStream &t)
 {
   t << "    <listofallmembers>" << endl;
   MemberNameInfoSDict::Iterator mnii(*cd->memberNameInfoSDict());
@@ -1365,7 +1365,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
   // + list of direct sub classes
   // + list of inner classes
   // + collaboration diagram
-  // - list of all members
+  // + list of all members
   // + user defined member sections
   // + standard member sections
   // + detailed member documentation
@@ -1459,7 +1459,7 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
     }
   }
   writeTemplateLists(cd,t);
-  writeListOfAllMember(cd,t);
+  writeListOfAllMembers(cd,t);
   MemberGroupSDict::Iterator mgli(*cd->memberGroupSDict);
   MemberGroup *mg;
   for (;(mg=mgli.current());++mgli)
-- 
cgit v0.12

