From 210582f8060fb41f6ad34d8315c9dd27b1bb6834 Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Sun, 21 Apr 2002 17:27:45 +0000
Subject: Release-1.2.15-20020421

---
 INSTALL                                     |   4 +-
 README                                      |   4 +-
 VERSION                                     |   2 +-
 addon/doxmlparser/include/doxmlintf.h       | 132 ++++---
 addon/doxmlparser/src/compoundhandler.cpp   |  44 ++-
 addon/doxmlparser/src/compoundhandler.h     |  34 +-
 addon/doxmlparser/src/dochandler.cpp        |  17 +
 addon/doxmlparser/src/dochandler.h          |  95 ++---
 addon/doxmlparser/src/doxmlintf.h           | 132 ++++---
 addon/doxmlparser/src/doxmlparser.pro.in    |   2 +-
 addon/doxmlparser/src/graphhandler.h        |  21 +-
 addon/doxmlparser/src/linkedtexthandler.cpp |  25 +-
 addon/doxmlparser/src/mainhandler.cpp       |  28 +-
 addon/doxmlparser/src/mainhandler.h         |   8 +-
 addon/doxmlparser/src/memberhandler.h       |  58 +--
 addon/doxmlparser/src/paramhandler.h        |  17 +-
 addon/doxmlparser/src/sectionhandler.h      |   6 +-
 addon/doxmlparser/src/stringimpl.h          |  26 ++
 addon/doxmlparser/test/main.cpp             | 226 +++++++----
 packages/rpm/doxygen.spec                   |   2 +-
 src/classdef.cpp                            |   2 +-
 src/config.l                                |  18 +-
 src/definition.cpp                          |   4 +-
 src/doc.l                                   |  10 +-
 src/dot.cpp                                 |  27 +-
 src/dot.h                                   |   2 +-
 src/doxygen.cpp                             | 544 +++++++++++++------------
 src/htmlgen.h                               |   2 +
 src/index.cpp                               | 180 ++++-----
 src/latexgen.h                              |   2 +
 src/mangen.h                                |   6 +-
 src/outputgen.h                             |  14 +-
 src/outputlist.h                            |   4 +
 src/pre.l                                   |  12 +-
 src/rtfgen.cpp                              | 472 ++++++++++++----------
 src/rtfgen.h                                |   7 +-
 src/scanner.l                               |   6 +
 src/translator_jp.h                         | 589 +++++++++++++++-------------
 src/translator_si.h                         |  22 +-
 src/xmlgen.cpp                              |  26 +-
 tmake/lib/osf1-cxx/tmake.conf               |   2 +-
 41 files changed, 1607 insertions(+), 1227 deletions(-)
 create mode 100644 addon/doxmlparser/src/stringimpl.h

diff --git a/INSTALL b/INSTALL
index 911ec1c..2ac6d34 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,6 @@
-DOXYGEN Version 1.2.15-20020407
+DOXYGEN Version 1.2.15-20020421
 
 Please read the installation section of the manual for instructions.
 
 --------
-Dimitri van Heesch (07 April 2002)
+Dimitri van Heesch (21 April 2002)
diff --git a/README b/README
index ee7ca91..5a9e2b0 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-DOXYGEN Version 1.2.15_20020407
+DOXYGEN Version 1.2.15_20020421
 
 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) (07 April 2002)
+Dimitri van Heesch (dimitri@stack.nl) (21 April 2002)
diff --git a/VERSION b/VERSION
index ee39ac2..2bbf466 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.2.15-20020407
+1.2.15-20020421
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h
index 92d4e2d..becbe78 100644
--- a/addon/doxmlparser/include/doxmlintf.h
+++ b/addon/doxmlparser/include/doxmlintf.h
@@ -9,6 +9,15 @@ class ICompound;
 class ISection;
 class INode;
 
+class IString
+{
+  public:
+    virtual const char *latin1() const = 0;
+    virtual unsigned short unicodeCharAt(int index) const = 0;
+    virtual bool isEmpty() const = 0;
+    virtual int length() const = 0;
+};
+
 class ILinkedText
 {
   public:
@@ -19,17 +28,17 @@ class ILinkedText
 class ILT_Text : public ILinkedText
 {
   public:
-    virtual QString text() const = 0;
+    virtual const IString *text() const = 0;
 };
 
 class ILT_Ref : public ILinkedText
 {
   public:
     enum TargetKind { Member, Compound };
-    virtual QString id() const = 0;
+    virtual const IString *id() const = 0;
     virtual TargetKind targetKind() const = 0;
-    virtual QString external() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString *external() const = 0;
+    virtual const IString *text() const = 0;
 };
 
 class ILinkedTextIterator 
@@ -47,10 +56,10 @@ class IParam
 {
   public:
     virtual ILinkedTextIterator *type() const = 0;
-    virtual QString declarationName() const = 0;
-    virtual QString definitionName() const = 0;
-    virtual QString attrib() const = 0;
-    virtual QString arraySpecifier() const = 0;
+    virtual const IString * declarationName() const = 0;
+    virtual const IString * definitionName() const = 0;
+    virtual const IString * attrib() const = 0;
+    virtual const IString * arraySpecifier() const = 0;
     virtual ILinkedTextIterator *defaultValue() const = 0;
 };
 
@@ -69,7 +78,7 @@ class IMemberReference
 {
   public:
     virtual IMember *member() const = 0;
-    virtual QString memberName() const = 0;
+    virtual const IString * memberName() const = 0;
 };
 
 class IMemberReferenceIterator 
@@ -86,8 +95,8 @@ class IMemberReferenceIterator
 class IEnumValue
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString initializer() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * initializer() const = 0;
 };
 
 class IEnumValueIterator 
@@ -136,7 +145,7 @@ class IDoc
       Row,                // 27 -> IDocRow
       Entry,              // 28 -> IDocEntry
       Section,            // 29 -> IDocSection
-      Root                // 30 -> IDocRoot
+      Root,               // 30 -> IDocRoot
     };
     virtual Kind kind() const = 0;
 };
@@ -153,7 +162,8 @@ class IDocMarkup : public IDoc
       Subscript      = 0x08,
       Superscript    = 0x10,
       SmallFont      = 0x20,
-      Center         = 0x40
+      Center         = 0x40,
+      Preformatted   = 0x80
     };
 
 };
@@ -167,7 +177,7 @@ class IDocPara : public IDoc
 class IDocText : public IDocMarkup
 {
   public:
-    virtual QString text() const = 0;
+    virtual const IString * text() const = 0;
     virtual int markup() const = 0;
 };
 
@@ -207,7 +217,7 @@ class IDocParameterList : public IDoc
 class IDocParameter : public IDoc
 {
   public:
-    virtual QString name() const = 0;
+    virtual const IString * name() const = 0;
     virtual IDocPara *description() const = 0;
 };
 
@@ -229,7 +239,7 @@ class IDocSimpleSect : public IDoc
                  Examples
     };
     virtual Types type() const = 0;
-    virtual QString typeString() const = 0;
+    virtual const IString * typeString() const = 0;
     virtual IDocTitle *title() const = 0;
     virtual IDocPara *description() const = 0;
 };
@@ -238,10 +248,10 @@ class IDocRef : public IDoc
 {
   public:
     enum TargetKind { Member, Compound };
-    virtual QString refId() const = 0;
+    virtual const IString * refId() const = 0;
     virtual TargetKind targetKind() const = 0;
-    virtual QString external() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * external() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocVariableList : public IDoc
@@ -253,7 +263,7 @@ class IDocVariableList : public IDoc
 class IDocVariableListEntry : public IDoc
 {
   public:
-    virtual QString term() const = 0;
+    virtual const IString * term() const = 0;
     virtual IDocPara *description() const = 0;
 };
 
@@ -268,21 +278,21 @@ class IDocLineBreak : public IDoc
 class IDocULink : public IDoc
 {
   public:
-    virtual QString url() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * url() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocEMail : public IDoc
 {
   public:
-    virtual QString address() const = 0;
+    virtual const IString * address() const = 0;
 };
 
 class IDocLink : public IDoc
 {
   public:
-    virtual QString refId() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * refId() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocProgramListing : public IDoc
@@ -295,7 +305,7 @@ class IDocCodeLine : public IDoc
 {
   public:
     virtual int lineNumber() const = 0;
-    virtual QString refId() const = 0;
+    virtual const IString * refId() const = 0;
     virtual IDocIterator *codeElements() const = 0;
 };
 
@@ -315,29 +325,29 @@ class IDocHighlight : public IDoc
 class IDocFormula : public IDoc
 {
   public:
-    virtual QString id() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocImage : public IDoc
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocDotFile : public IDoc
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocIndexEntry : public IDoc
 {
   public:
-    virtual QString primary() const = 0;
-    virtual QString secondary() const = 0;
+    virtual const IString * primary() const = 0;
+    virtual const IString * secondary() const = 0;
 };
 
 class IDocTable : public IDoc
@@ -345,7 +355,7 @@ class IDocTable : public IDoc
   public:
     virtual IDocIterator *rows() const = 0;
     virtual int numColumns() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocRow : public IDoc
@@ -363,7 +373,7 @@ class IDocEntry : public IDoc
 class IDocSection : public IDoc
 {
   public:
-    virtual QString id() const = 0; 
+    virtual const IString * id() const = 0; 
     virtual int level() const = 0;
     virtual IDocIterator *title() const = 0;
 };
@@ -388,7 +398,7 @@ class IDocIterator
 class IEdgeLabel
 {
   public:
-    virtual QString label() const = 0;
+    virtual const IString * label() const = 0;
 };
 
 class IEdgeLabelIterator 
@@ -410,7 +420,7 @@ class IChildNode
                       };
     virtual INode * node() const = 0;
     virtual NodeRelation relation() const = 0;
-    virtual QString relationString() const = 0;
+    virtual const IString * relationString() const = 0;
     virtual IEdgeLabelIterator *edgeLabels() const = 0;
 };
 
@@ -428,9 +438,9 @@ class IChildNodeIterator
 class INode
 {
   public:
-    virtual QString id() const = 0;
-    virtual QString label() const = 0;
-    virtual QString linkId() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * label() const = 0;
+    virtual const IString * linkId() const = 0;
     virtual IChildNodeIterator *children() const = 0;
 };
 
@@ -461,13 +471,13 @@ class IMember
     virtual ICompound *compound() const = 0;
     virtual ISection *section() const = 0;
     virtual MemberKind kind() const = 0;
-    virtual QString kindString() const = 0;
-    virtual QString id() const = 0;
-    virtual QString protection() const = 0;
-    virtual QString virtualness() const = 0;
+    virtual const IString * kindString() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * protection() const = 0;
+    virtual const IString * virtualness() const = 0;
     virtual ILinkedTextIterator *type() const = 0;
-    virtual QString typeString() const = 0;
-    virtual QString name() const = 0;
+    virtual const IString * typeString() const = 0;
+    virtual const IString * name() const = 0;
     virtual bool isConst() const = 0;
     virtual bool isVolatile() const = 0;
     virtual IParamIterator *params() const = 0;
@@ -477,7 +487,7 @@ class IMember
     virtual IMemberReferenceIterator *referencedBy() const = 0;
     virtual int bodyStart() const = 0;
     virtual int bodyEnd() const = 0;
-    virtual QString definitionFile() const = 0;
+    virtual const IString * definitionFile() const = 0;
     virtual int definitionLine() const = 0;
     virtual IMemberReference *reimplements() const = 0;
     virtual IMemberReferenceIterator *reimplementedBy() const = 0;
@@ -512,7 +522,7 @@ class ISection
                        Friend, Related, Defines, Prototypes, Typedefs,
                        Enums, Functions, Variables
                      };
-    virtual QString kindString() const = 0;
+    virtual const IString * kindString() const = 0;
     virtual SectionKind kind() const = 0;
     virtual IMemberIterator *members() const = 0;
     virtual bool isStatic() const = 0;
@@ -541,12 +551,12 @@ class ICompound
                         Namespace, File, Group, Page
                       };
     /*! Returns the name of this compound */
-    virtual QString name() const = 0;
+    virtual const IString * name() const = 0;
 
     /*! Returns the id of this compound. The id is a
      *  unique string representing a specific compound object.
      */
-    virtual QString id()   const = 0;
+    virtual const IString * id()   const = 0;
 
     /*! Returns the kind of compound. See #CompoundKind for possible
      *  values.
@@ -556,7 +566,7 @@ class ICompound
     /*! Returns a string representation of the compound kind.
      *  @see kind()
      */
-    virtual QString kindString() const = 0;
+    virtual const IString * kindString() const = 0;
 
     /*! Returns an iterator for the different member sections in this
      *  compound.
@@ -576,14 +586,14 @@ class ICompound
     /*! Returns an interface to a member given its id. 
      *  @param id The member id.
      */
-    virtual IMember *memberById(const QString &id) const = 0;
+    virtual IMember *memberById(const char * id) const = 0;
 
     /*! Returns a list of all members within the compound having a certain 
      *  name. Member overloading is the reason why there can be more than 
      *  one member. 
      *  @param name The name of the member.
      */
-    virtual IMemberIterator *memberByName(const QString &name) const = 0;
+    virtual IMemberIterator *memberByName(const char * name) const = 0;
 
     /*! Decreases the reference counter for this compound. If it reaches
      *  zero, the memory for the compound will be released.
@@ -668,11 +678,13 @@ class INamespace : public ICompound
 
 class IFile : public ICompound
 {
+  public:
+    virtual IGraph *includeDependencyGraph() const = 0;
+    virtual IGraph *includedByDependencyGraph() const = 0;
+
     // file:
     //  includes()
     //  includedBy()
-    //  IDotGraph *includeDependencyGraph()
-    //  IDotGraph *includedByDependencyGraph()
     //  IDocProgramListing *source()
     //  ICompound *innerNamespaces()
     //  ICompoundIterator *innerClasses()
@@ -704,26 +716,26 @@ class IDoxygen
      *  compound id this function is much more efficient than iterating
      *  over the compound list. Returns 0 if the id is not valid.
      */
-    virtual ICompound *compoundById(const QString &id) const = 0;
+    virtual ICompound *compoundById(const char * id) const = 0;
 
     /*! Returns a compound given its name (including the scope). 
      *  Returns 0 if the name is not found in the project.
      */
-    virtual ICompound *compoundByName(const QString &name) const = 0;
+    virtual ICompound *compoundByName(const char * name) const = 0;
 
     /*! Returns an interface to a compound containing a member given it the
      *  member's id. Given the ICompound interface one can use the same id
      *  to obtain the IMember interface.
      *  @param id The member id.
      */
-    virtual ICompound *memberById(const QString &id) const = 0;
+    virtual ICompound *memberById(const char * id) const = 0;
 
     /*! Returns a list of all compounds containing at least one members 
      *  with a certain name. Each compound can be asked to return the
      *  list of members with that name.
      *  @param name The name of the member.
      */
-    virtual ICompoundIterator *memberByName(const QString &name) const = 0;
+    virtual ICompoundIterator *memberByName(const char * name) const = 0;
 
     /*! Releases the memory for the object hierarchy obtained by 
      *  createdObjecModelFromXML(). First release all iterators before calling
diff --git a/addon/doxmlparser/src/compoundhandler.cpp b/addon/doxmlparser/src/compoundhandler.cpp
index ce7c852..59d4cd9 100644
--- a/addon/doxmlparser/src/compoundhandler.cpp
+++ b/addon/doxmlparser/src/compoundhandler.cpp
@@ -144,7 +144,8 @@ void compoundhandler_exit()
 CompoundHandler::CompoundHandler(const QString &xmlDir) 
   : m_brief(0), m_detailed(0), m_programListing(0),
     m_xmlDir(xmlDir), m_refCount(1), m_memberDict(257), m_memberNameDict(257),
-    m_mainHandler(0), m_inheritanceGraph(0), m_collaborationGraph(0)
+    m_mainHandler(0), m_inheritanceGraph(0), m_collaborationGraph(0),
+    m_includeDependencyGraph(0), m_includedByDependencyGraph(0)
 {
   m_superClasses.setAutoDelete(TRUE);
   m_subClasses.setAutoDelete(TRUE);
@@ -182,9 +183,14 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
 
   addStartHandler("collaborationgraph",this,&CompoundHandler::startCollaborationGraph);
 
+  addStartHandler("incdepgraph",this,&CompoundHandler::startIncludeDependencyGraph);
+
+  addStartHandler("invincdepgraph",this,&CompoundHandler::startIncludedByDependencyGraph);
+
   addStartHandler("innerclass",this,&CompoundHandler::startInnerClass);
   addEndHandler("innerclass");
 
+
 }
 
 CompoundHandler::~CompoundHandler()
@@ -195,6 +201,8 @@ CompoundHandler::~CompoundHandler()
   delete m_programListing;
   delete m_inheritanceGraph;
   delete m_collaborationGraph;
+  delete m_includeDependencyGraph;
+  delete m_includedByDependencyGraph;
 }
 
 void CompoundHandler::startSection(const QXmlAttributes& attrib)
@@ -303,7 +311,7 @@ void CompoundHandler::addSubClass(const QXmlAttributes& attrib)
   m_subClasses.append(sc);
 }
 
-bool CompoundHandler::parseXML(const QString &compId)
+bool CompoundHandler::parseXML(const char *compId)
 {
   QFile xmlFile(m_xmlDir+"/"+compId+".xml");
   if (!xmlFile.exists()) return FALSE;
@@ -329,12 +337,12 @@ void CompoundHandler::initialize(MainHandler *mh)
 
 void CompoundHandler::insertMember(MemberHandler *mh)
 {
-  m_memberDict.insert(mh->id(),mh);
-  QList<MemberHandler> *mhl = m_memberNameDict.find(mh->id());
+  m_memberDict.insert(mh->id()->latin1(),mh);
+  QList<MemberHandler> *mhl = m_memberNameDict.find(mh->id()->latin1());
   if (mhl==0)
   {
     mhl = new QList<MemberHandler>;
-    m_memberNameDict.insert(mh->name(),mhl);
+    m_memberNameDict.insert(mh->name()->latin1(),mhl);
   }
   mhl->append(mh);
 }
@@ -372,7 +380,7 @@ ISectionIterator *CompoundHandler::sections() const
   return new SectionIterator(m_sections); 
 }
     
-IMemberIterator *CompoundHandler::memberByName(const QString &name) const
+IMemberIterator *CompoundHandler::memberByName(const char *name) const
 { 
   QList<MemberHandler> *ml = m_memberNameDict[name]; 
   if (ml==0) return 0;
@@ -391,6 +399,18 @@ void CompoundHandler::startCollaborationGraph(const QXmlAttributes &attrib)
   m_collaborationGraph->startGraph(attrib);
 }
 
+void CompoundHandler::startIncludeDependencyGraph(const QXmlAttributes &attrib)
+{
+  m_includeDependencyGraph = new GraphHandler(this,"incdepgraph");
+  m_includeDependencyGraph->startGraph(attrib);
+}
+
+void CompoundHandler::startIncludedByDependencyGraph(const QXmlAttributes &attrib)
+{
+  m_includedByDependencyGraph = new GraphHandler(this,"invincdepgraph");
+  m_includedByDependencyGraph->startGraph(attrib);
+}
+
 IDocRoot *CompoundHandler::briefDescription() const 
 { 
   return m_brief; 
@@ -401,7 +421,7 @@ IDocRoot *CompoundHandler::detailedDescription() const
   return m_detailed; 
 }
 
-IMember *CompoundHandler::memberById(const QString &id) const 
+IMember *CompoundHandler::memberById(const char *id) const 
 { 
   return m_memberDict[id]; 
 }
@@ -416,6 +436,16 @@ IGraph *CompoundHandler::collaborationGraph() const
   return m_collaborationGraph; 
 }
 
+IGraph *CompoundHandler::includeDependencyGraph() const
+{
+  return m_includeDependencyGraph;
+}
+
+IGraph *CompoundHandler::includedByDependencyGraph() const
+{
+  return m_includedByDependencyGraph;
+}
+
 IRelatedCompoundIterator *CompoundHandler::baseClasses() const
 {
   return new RelatedCompoundIterator(m_superClasses);
diff --git a/addon/doxmlparser/src/compoundhandler.h b/addon/doxmlparser/src/compoundhandler.h
index 965e4c1..b331bec 100644
--- a/addon/doxmlparser/src/compoundhandler.h
+++ b/addon/doxmlparser/src/compoundhandler.h
@@ -20,6 +20,7 @@
 #include <qxml.h>
 #include <doxmlintf.h>
 
+#include "stringimpl.h"
 #include "basehandler.h"
 #include "baseiterator.h"
 
@@ -74,6 +75,7 @@ class CompoundHandler : public IClass,
                         public BaseHandler<CompoundHandler>
 {
     friend class RelatedCompound;
+
   public:
     virtual void startSection(const QXmlAttributes& attrib);
     virtual void startCompound(const QXmlAttributes& attrib);
@@ -87,26 +89,28 @@ class CompoundHandler : public IClass,
     virtual void startProgramListing(const QXmlAttributes& attrib);
     virtual void startInheritanceGraph(const QXmlAttributes& attrib);
     virtual void startCollaborationGraph(const QXmlAttributes& attrib);
+    virtual void startIncludeDependencyGraph(const QXmlAttributes& attrib);
+    virtual void startIncludedByDependencyGraph(const QXmlAttributes& attrib);
     virtual void startInnerClass(const QXmlAttributes& attrib);
     virtual void addref() { m_refCount++; }
 
     CompoundHandler(const QString &dirName);
     virtual ~CompoundHandler();
-    bool parseXML(const QString &compId);
+    bool parseXML(const char *compId);
     void initialize(MainHandler *mh);
     void insertMember(MemberHandler *mh);
     ICompound *toICompound() const;
 
     // ICompound implementation
-    QString name() const { return m_name; }
-    QString id()   const { return m_id;   }
+    const IString *name() const { return &m_name; }
+    const IString *id()   const { return &m_id;   }
     CompoundKind kind() const { return m_kind; }
-    QString kindString() const { return m_kindString; }
+    const IString *kindString() const { return &m_kindString; }
     ISectionIterator *sections() const;
     IDocRoot *briefDescription() const;
     IDocRoot *detailedDescription() const;
-    IMember *memberById(const QString &id) const;
-    IMemberIterator *memberByName(const QString &name) const;
+    IMember *memberById(const char *id) const;
+    IMemberIterator *memberByName(const char *name) const;
     void release();
 
     // IClass implementation
@@ -115,18 +119,22 @@ class CompoundHandler : public IClass,
     IRelatedCompoundIterator *baseClasses() const;
     IRelatedCompoundIterator *derivedClasses() const;
     ICompoundIterator *nestedClasses() const;
+
+    // IFile implementation
+    IGraph *includeDependencyGraph() const; 
+    IGraph *includedByDependencyGraph() const;
     
   private:
-    QList<RelatedCompound> m_superClasses;
-    QList<RelatedCompound> m_subClasses;
-    QList<SectionHandler>  m_sections;
+    QList<RelatedCompound>  m_superClasses;
+    QList<RelatedCompound>  m_subClasses;
+    QList<SectionHandler>   m_sections;
     DocHandler             *m_brief;
     DocHandler             *m_detailed;
     ProgramListingHandler  *m_programListing;
-    QString                 m_id;
-    QString                 m_kindString;
+    StringImpl              m_id;
+    StringImpl              m_kindString;
     CompoundKind            m_kind;
-    QString                 m_name;
+    StringImpl              m_name;
     QString                 m_defFile;
     int                     m_defLine;
     QString                 m_xmlDir;
@@ -136,6 +144,8 @@ class CompoundHandler : public IClass,
     MainHandler            *m_mainHandler;
     GraphHandler           *m_inheritanceGraph;
     GraphHandler           *m_collaborationGraph;
+    GraphHandler           *m_includeDependencyGraph;
+    GraphHandler           *m_includedByDependencyGraph;
     QList<QString>          m_innerClasses;
 
 };
diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp
index 4c91ba5..f21c90f 100644
--- a/addon/doxmlparser/src/dochandler.cpp
+++ b/addon/doxmlparser/src/dochandler.cpp
@@ -117,6 +117,9 @@ MarkupHandler::MarkupHandler(QList<DocImpl> &children,QString &curString)
 
   addStartHandler("superscript",this,&MarkupHandler::startSuperscript);
   addEndHandler("superscript",this,&MarkupHandler::endSuperscript);
+
+  addStartHandler("preformatted",this,&MarkupHandler::startPreformatted);
+  addEndHandler("preformatted",this,&MarkupHandler::endPreformatted);
 }
 
 MarkupHandler::~MarkupHandler()
@@ -231,6 +234,20 @@ void MarkupHandler::endSuperscript()
   m_curMarkup &= ~IDocMarkup::Superscript;
 }
 
+void MarkupHandler::startPreformatted(const QXmlAttributes & /*attrib*/)
+{
+  addTextNode();
+  m_children.append(new MarkupModifierNode(IDocMarkup::Preformatted,TRUE));
+  m_curMarkup |= IDocMarkup::Preformatted;
+}
+
+void MarkupHandler::endPreformatted()
+{
+  addTextNode();
+  m_children.append(new MarkupModifierNode(IDocMarkup::Preformatted,FALSE));
+  m_curMarkup &= ~IDocMarkup::Preformatted;
+}
+
 //----------------------------------------------------------------------
 // ListItemHandler
 //----------------------------------------------------------------------
diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h
index 894296a..7b24458 100644
--- a/addon/doxmlparser/src/dochandler.h
+++ b/addon/doxmlparser/src/dochandler.h
@@ -21,6 +21,7 @@
 #include <qxml.h>
 
 #include <doxmlintf.h>
+#include "stringimpl.h"
 #include "basehandler.h"
 #include "baseiterator.h"
 
@@ -80,11 +81,11 @@ class TextNode : public DocTextImpl
 
     // IDocText
     virtual Kind kind() const { return DocImpl::Text; }
-    virtual QString text() const { return m_text; }
+    virtual const IString *text() const { return &m_text; }
     virtual int markup() const { return m_markup; }
   
   private:  
-    QString m_text;
+    StringImpl m_text;
     int m_markup;
 };
 
@@ -137,6 +138,8 @@ class MarkupHandler : public BaseFallBackHandler<MarkupHandler>
     virtual void endSubscript();
     virtual void startSuperscript(const QXmlAttributes &attrib);
     virtual void endSuperscript();
+    virtual void startPreformatted(const QXmlAttributes &attrib);
+    virtual void endPreformatted();
 
 
   private:
@@ -322,12 +325,12 @@ class ParameterHandler : public DocParameterImpl,
 
     // IDocParameter
     virtual Kind kind() const { return DocImpl::Parameter; }
-    virtual QString name() const { return m_name; }
+    virtual const IString *name() const { return &m_name; }
     virtual IDocPara *description() const { return m_description; }
 
   private:
     IBaseHandler     *m_parent;
-    QString           m_name;
+    StringImpl        m_name;
     ParagraphHandler *m_description;
 };
 
@@ -404,13 +407,13 @@ class LinkHandler : public DocLinkImpl, public BaseHandler<LinkHandler>
 
     // IDocLink
     virtual Kind kind() const { return DocImpl::Link; }
-    virtual QString refId() const { return m_ref; }
-    virtual QString text() const { return m_text; }
+    virtual const IString *refId() const { return &m_ref; }
+    virtual const IString *text() const { return &m_text; }
 
   private:
     IBaseHandler   *m_parent;
-    QString         m_ref;
-    QString         m_text;
+    StringImpl      m_ref;
+    StringImpl      m_text;
 };
 
 
@@ -430,11 +433,11 @@ class EMailHandler : public DocEMailImpl, public BaseHandler<EMailHandler>
 
     // IDocEMail
     virtual Kind kind() const { return DocImpl::EMail; }
-    virtual QString address() const { return m_address; }
+    virtual const IString *address() const { return &m_address; }
 
   private:
     IBaseHandler   *m_parent;
-    QString         m_address;
+    StringImpl      m_address;
 };
 
 
@@ -454,13 +457,13 @@ class ULinkHandler : public DocULinkImpl, public BaseHandler<ULinkHandler>
 
     // IDocULink
     virtual Kind kind() const { return DocImpl::ULink; }
-    virtual QString url() const { return m_url; }
-    virtual QString text() const { return m_text; }
+    virtual const IString * url() const { return &m_url; }
+    virtual const IString * text() const { return &m_text; }
 
   private:
     IBaseHandler   *m_parent;
-    QString         m_url;
-    QString         m_text;
+    StringImpl      m_url;
+    StringImpl      m_text;
 };
 
 //-----------------------------------------------------------------------------
@@ -499,16 +502,16 @@ class RefHandler : public DocRefImpl, public BaseHandler<RefHandler>
 
     // IDocRef
     virtual Kind kind() const { return DocImpl::Ref; }
-    virtual QString refId() const { return m_refId; }
+    virtual const IString *refId() const { return &m_refId; }
     virtual TargetKind targetKind() const { return m_targetKind; }
-    virtual QString external() const { return m_extId; }
-    virtual QString text() const { return m_linkText; }
+    virtual const IString *external() const { return &m_extId; }
+    virtual const IString *text() const { return &m_linkText; }
 
   private:
     IBaseHandler   *m_parent;
-    QString         m_refId;
-    QString         m_extId;
-    QString         m_linkText;
+    StringImpl      m_refId;
+    StringImpl      m_extId;
+    StringImpl      m_linkText;
     TargetKind      m_targetKind;
 };
 
@@ -569,7 +572,7 @@ class SimpleSectHandler : public DocSimpleSectImpl,
     // IDocSimpleSect
     virtual Kind kind() const { return DocImpl::SimpleSect; }
     virtual Types type() const { return m_type; }
-    virtual QString typeString() const { return m_typeString; }
+    virtual const IString *typeString() const { return &m_typeString; }
     virtual IDocTitle *title() const { return m_title; }
     virtual IDocPara *description() const { return m_paragraph; }
 
@@ -577,7 +580,7 @@ class SimpleSectHandler : public DocSimpleSectImpl,
     IBaseHandler            *m_parent;
     ParagraphHandler        *m_paragraph;
     Types                    m_type;
-    QString                  m_typeString;
+    StringImpl               m_typeString;
     TitleHandler            *m_title;
 };
 
@@ -603,12 +606,12 @@ class VariableListEntryHandler : public DocVariableListEntryImpl,
 
     // IDocVariableListEntry
     virtual Kind kind() const { return DocImpl::VariableListEntry; }
-    virtual QString term() const { return m_term; }
+    virtual const IString *term() const { return &m_term; }
     virtual IDocPara *description() const { return m_description; }
 
   private:
     IBaseHandler     *m_parent;
-    QString           m_term;
+    StringImpl        m_term;
     ParagraphHandler *m_description;
 };
 
@@ -710,7 +713,7 @@ class CodeLineHandler : public DocCodeLineImpl, public BaseHandler<CodeLineHandl
     // IDocCodeLine
     virtual Kind kind() const { return DocImpl::CodeLine; }
     virtual int lineNumber() const { return m_lineNumber; }
-    virtual QString refId() const { return m_refId; }
+    virtual const IString *refId() const { return &m_refId; }
     virtual IDocIterator *codeElements() const;
 
   private:
@@ -718,7 +721,7 @@ class CodeLineHandler : public DocCodeLineImpl, public BaseHandler<CodeLineHandl
 
     IBaseHandler   *m_parent;
     int            m_lineNumber;
-    QString        m_refId;
+    StringImpl     m_refId;
     QList<DocImpl> m_children;
 };
 
@@ -782,13 +785,13 @@ class FormulaHandler : public DocFormulaImpl, public BaseHandler<FormulaHandler>
 
     // IDocFormula
     virtual Kind kind() const { return DocImpl::Formula; }
-    virtual QString id() const { return m_id; }
-    virtual QString text() const { return m_text; }
+    virtual const IString *id() const { return &m_id; }
+    virtual const IString *text() const { return &m_text; }
 
   private:
     IBaseHandler  *m_parent;
-    QString        m_id;
-    QString        m_text;
+    StringImpl     m_id;
+    StringImpl     m_text;
 };
 
 //-----------------------------------------------------------------------------
@@ -807,13 +810,13 @@ class ImageHandler : public DocImageImpl, public BaseHandler<ImageHandler>
 
     // IDocImage
     virtual Kind kind() const { return DocImpl::Image; }
-    virtual QString name() const { return m_name; }
-    virtual QString caption() const { return m_caption; }
+    virtual const IString *name() const { return &m_name; }
+    virtual const IString *caption() const { return &m_caption; }
 
   private:
     IBaseHandler  *m_parent;
-    QString        m_name;
-    QString        m_caption;
+    StringImpl     m_name;
+    StringImpl     m_caption;
 };
 
 //-----------------------------------------------------------------------------
@@ -832,13 +835,13 @@ class DotFileHandler : public DocDotFileImpl, public BaseHandler<DotFileHandler>
 
     // IDocDotFile
     virtual Kind kind() const { return DocImpl::DotFile; }
-    virtual QString name() const { return m_name; }
-    virtual QString caption() const { return m_caption; }
+    virtual const IString *name() const { return &m_name; }
+    virtual const IString *caption() const { return &m_caption; }
 
   private:
     IBaseHandler  *m_parent;
-    QString        m_name;
-    QString        m_caption;
+    StringImpl     m_name;
+    StringImpl     m_caption;
 };
 
 //-----------------------------------------------------------------------------
@@ -861,13 +864,13 @@ class IndexEntryHandler : public DocIndexEntryImpl, public BaseHandler<IndexEntr
 
     // IDocIndexEntry
     virtual Kind kind() const { return DocImpl::IndexEntry; }
-    virtual QString primary() const { return m_primary; }
-    virtual QString secondary() const { return m_secondary; }
+    virtual const IString *primary() const { return &m_primary; }
+    virtual const IString *secondary() const { return &m_secondary; }
 
   private:
     IBaseHandler  *m_parent;
-    QString        m_primary;
-    QString        m_secondary;
+    StringImpl     m_primary;
+    StringImpl     m_secondary;
 };
 
 //-----------------------------------------------------------------------------
@@ -956,13 +959,13 @@ class TableHandler : public DocTableImpl, public BaseHandler<TableHandler>
     virtual Kind kind() const { return DocImpl::Table; }
     virtual IDocIterator *rows() const;
     virtual int numColumns() const { return m_numColumns; }
-    virtual QString caption() const { return m_caption; }
+    virtual const IString *caption() const { return &m_caption; }
 
   private:
     IBaseHandler      *m_parent;
     QList<RowHandler>  m_children;
     int                m_numColumns;
-    QString            m_caption;
+    StringImpl         m_caption;
 };
 
 class TableIterator : public BaseIteratorVia<IDocIterator,IDoc,RowHandler,DocImpl>
@@ -995,7 +998,7 @@ class DocSectionHandler : public DocSectionImpl, public BaseHandler<DocSectionHa
 
     // IDocSection
     virtual Kind kind() const { return DocImpl::Section; }
-    virtual QString id() const { return m_id; }
+    virtual const IString *id() const { return &m_id; }
     virtual int level() const { return m_level; }
     virtual IDocIterator *title() const;
 
@@ -1003,7 +1006,7 @@ class DocSectionHandler : public DocSectionImpl, public BaseHandler<DocSectionHa
     IBaseHandler   *m_parent;
     QList<DocImpl>  m_children;
     MarkupHandler  *m_markupHandler;
-    QString         m_id;
+    StringImpl      m_id;
     int             m_level;
 };
 
diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h
index 92d4e2d..becbe78 100644
--- a/addon/doxmlparser/src/doxmlintf.h
+++ b/addon/doxmlparser/src/doxmlintf.h
@@ -9,6 +9,15 @@ class ICompound;
 class ISection;
 class INode;
 
+class IString
+{
+  public:
+    virtual const char *latin1() const = 0;
+    virtual unsigned short unicodeCharAt(int index) const = 0;
+    virtual bool isEmpty() const = 0;
+    virtual int length() const = 0;
+};
+
 class ILinkedText
 {
   public:
@@ -19,17 +28,17 @@ class ILinkedText
 class ILT_Text : public ILinkedText
 {
   public:
-    virtual QString text() const = 0;
+    virtual const IString *text() const = 0;
 };
 
 class ILT_Ref : public ILinkedText
 {
   public:
     enum TargetKind { Member, Compound };
-    virtual QString id() const = 0;
+    virtual const IString *id() const = 0;
     virtual TargetKind targetKind() const = 0;
-    virtual QString external() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString *external() const = 0;
+    virtual const IString *text() const = 0;
 };
 
 class ILinkedTextIterator 
@@ -47,10 +56,10 @@ class IParam
 {
   public:
     virtual ILinkedTextIterator *type() const = 0;
-    virtual QString declarationName() const = 0;
-    virtual QString definitionName() const = 0;
-    virtual QString attrib() const = 0;
-    virtual QString arraySpecifier() const = 0;
+    virtual const IString * declarationName() const = 0;
+    virtual const IString * definitionName() const = 0;
+    virtual const IString * attrib() const = 0;
+    virtual const IString * arraySpecifier() const = 0;
     virtual ILinkedTextIterator *defaultValue() const = 0;
 };
 
@@ -69,7 +78,7 @@ class IMemberReference
 {
   public:
     virtual IMember *member() const = 0;
-    virtual QString memberName() const = 0;
+    virtual const IString * memberName() const = 0;
 };
 
 class IMemberReferenceIterator 
@@ -86,8 +95,8 @@ class IMemberReferenceIterator
 class IEnumValue
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString initializer() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * initializer() const = 0;
 };
 
 class IEnumValueIterator 
@@ -136,7 +145,7 @@ class IDoc
       Row,                // 27 -> IDocRow
       Entry,              // 28 -> IDocEntry
       Section,            // 29 -> IDocSection
-      Root                // 30 -> IDocRoot
+      Root,               // 30 -> IDocRoot
     };
     virtual Kind kind() const = 0;
 };
@@ -153,7 +162,8 @@ class IDocMarkup : public IDoc
       Subscript      = 0x08,
       Superscript    = 0x10,
       SmallFont      = 0x20,
-      Center         = 0x40
+      Center         = 0x40,
+      Preformatted   = 0x80
     };
 
 };
@@ -167,7 +177,7 @@ class IDocPara : public IDoc
 class IDocText : public IDocMarkup
 {
   public:
-    virtual QString text() const = 0;
+    virtual const IString * text() const = 0;
     virtual int markup() const = 0;
 };
 
@@ -207,7 +217,7 @@ class IDocParameterList : public IDoc
 class IDocParameter : public IDoc
 {
   public:
-    virtual QString name() const = 0;
+    virtual const IString * name() const = 0;
     virtual IDocPara *description() const = 0;
 };
 
@@ -229,7 +239,7 @@ class IDocSimpleSect : public IDoc
                  Examples
     };
     virtual Types type() const = 0;
-    virtual QString typeString() const = 0;
+    virtual const IString * typeString() const = 0;
     virtual IDocTitle *title() const = 0;
     virtual IDocPara *description() const = 0;
 };
@@ -238,10 +248,10 @@ class IDocRef : public IDoc
 {
   public:
     enum TargetKind { Member, Compound };
-    virtual QString refId() const = 0;
+    virtual const IString * refId() const = 0;
     virtual TargetKind targetKind() const = 0;
-    virtual QString external() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * external() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocVariableList : public IDoc
@@ -253,7 +263,7 @@ class IDocVariableList : public IDoc
 class IDocVariableListEntry : public IDoc
 {
   public:
-    virtual QString term() const = 0;
+    virtual const IString * term() const = 0;
     virtual IDocPara *description() const = 0;
 };
 
@@ -268,21 +278,21 @@ class IDocLineBreak : public IDoc
 class IDocULink : public IDoc
 {
   public:
-    virtual QString url() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * url() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocEMail : public IDoc
 {
   public:
-    virtual QString address() const = 0;
+    virtual const IString * address() const = 0;
 };
 
 class IDocLink : public IDoc
 {
   public:
-    virtual QString refId() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * refId() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocProgramListing : public IDoc
@@ -295,7 +305,7 @@ class IDocCodeLine : public IDoc
 {
   public:
     virtual int lineNumber() const = 0;
-    virtual QString refId() const = 0;
+    virtual const IString * refId() const = 0;
     virtual IDocIterator *codeElements() const = 0;
 };
 
@@ -315,29 +325,29 @@ class IDocHighlight : public IDoc
 class IDocFormula : public IDoc
 {
   public:
-    virtual QString id() const = 0;
-    virtual QString text() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * text() const = 0;
 };
 
 class IDocImage : public IDoc
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocDotFile : public IDoc
 {
   public:
-    virtual QString name() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * name() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocIndexEntry : public IDoc
 {
   public:
-    virtual QString primary() const = 0;
-    virtual QString secondary() const = 0;
+    virtual const IString * primary() const = 0;
+    virtual const IString * secondary() const = 0;
 };
 
 class IDocTable : public IDoc
@@ -345,7 +355,7 @@ class IDocTable : public IDoc
   public:
     virtual IDocIterator *rows() const = 0;
     virtual int numColumns() const = 0;
-    virtual QString caption() const = 0;
+    virtual const IString * caption() const = 0;
 };
 
 class IDocRow : public IDoc
@@ -363,7 +373,7 @@ class IDocEntry : public IDoc
 class IDocSection : public IDoc
 {
   public:
-    virtual QString id() const = 0; 
+    virtual const IString * id() const = 0; 
     virtual int level() const = 0;
     virtual IDocIterator *title() const = 0;
 };
@@ -388,7 +398,7 @@ class IDocIterator
 class IEdgeLabel
 {
   public:
-    virtual QString label() const = 0;
+    virtual const IString * label() const = 0;
 };
 
 class IEdgeLabelIterator 
@@ -410,7 +420,7 @@ class IChildNode
                       };
     virtual INode * node() const = 0;
     virtual NodeRelation relation() const = 0;
-    virtual QString relationString() const = 0;
+    virtual const IString * relationString() const = 0;
     virtual IEdgeLabelIterator *edgeLabels() const = 0;
 };
 
@@ -428,9 +438,9 @@ class IChildNodeIterator
 class INode
 {
   public:
-    virtual QString id() const = 0;
-    virtual QString label() const = 0;
-    virtual QString linkId() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * label() const = 0;
+    virtual const IString * linkId() const = 0;
     virtual IChildNodeIterator *children() const = 0;
 };
 
@@ -461,13 +471,13 @@ class IMember
     virtual ICompound *compound() const = 0;
     virtual ISection *section() const = 0;
     virtual MemberKind kind() const = 0;
-    virtual QString kindString() const = 0;
-    virtual QString id() const = 0;
-    virtual QString protection() const = 0;
-    virtual QString virtualness() const = 0;
+    virtual const IString * kindString() const = 0;
+    virtual const IString * id() const = 0;
+    virtual const IString * protection() const = 0;
+    virtual const IString * virtualness() const = 0;
     virtual ILinkedTextIterator *type() const = 0;
-    virtual QString typeString() const = 0;
-    virtual QString name() const = 0;
+    virtual const IString * typeString() const = 0;
+    virtual const IString * name() const = 0;
     virtual bool isConst() const = 0;
     virtual bool isVolatile() const = 0;
     virtual IParamIterator *params() const = 0;
@@ -477,7 +487,7 @@ class IMember
     virtual IMemberReferenceIterator *referencedBy() const = 0;
     virtual int bodyStart() const = 0;
     virtual int bodyEnd() const = 0;
-    virtual QString definitionFile() const = 0;
+    virtual const IString * definitionFile() const = 0;
     virtual int definitionLine() const = 0;
     virtual IMemberReference *reimplements() const = 0;
     virtual IMemberReferenceIterator *reimplementedBy() const = 0;
@@ -512,7 +522,7 @@ class ISection
                        Friend, Related, Defines, Prototypes, Typedefs,
                        Enums, Functions, Variables
                      };
-    virtual QString kindString() const = 0;
+    virtual const IString * kindString() const = 0;
     virtual SectionKind kind() const = 0;
     virtual IMemberIterator *members() const = 0;
     virtual bool isStatic() const = 0;
@@ -541,12 +551,12 @@ class ICompound
                         Namespace, File, Group, Page
                       };
     /*! Returns the name of this compound */
-    virtual QString name() const = 0;
+    virtual const IString * name() const = 0;
 
     /*! Returns the id of this compound. The id is a
      *  unique string representing a specific compound object.
      */
-    virtual QString id()   const = 0;
+    virtual const IString * id()   const = 0;
 
     /*! Returns the kind of compound. See #CompoundKind for possible
      *  values.
@@ -556,7 +566,7 @@ class ICompound
     /*! Returns a string representation of the compound kind.
      *  @see kind()
      */
-    virtual QString kindString() const = 0;
+    virtual const IString * kindString() const = 0;
 
     /*! Returns an iterator for the different member sections in this
      *  compound.
@@ -576,14 +586,14 @@ class ICompound
     /*! Returns an interface to a member given its id. 
      *  @param id The member id.
      */
-    virtual IMember *memberById(const QString &id) const = 0;
+    virtual IMember *memberById(const char * id) const = 0;
 
     /*! Returns a list of all members within the compound having a certain 
      *  name. Member overloading is the reason why there can be more than 
      *  one member. 
      *  @param name The name of the member.
      */
-    virtual IMemberIterator *memberByName(const QString &name) const = 0;
+    virtual IMemberIterator *memberByName(const char * name) const = 0;
 
     /*! Decreases the reference counter for this compound. If it reaches
      *  zero, the memory for the compound will be released.
@@ -668,11 +678,13 @@ class INamespace : public ICompound
 
 class IFile : public ICompound
 {
+  public:
+    virtual IGraph *includeDependencyGraph() const = 0;
+    virtual IGraph *includedByDependencyGraph() const = 0;
+
     // file:
     //  includes()
     //  includedBy()
-    //  IDotGraph *includeDependencyGraph()
-    //  IDotGraph *includedByDependencyGraph()
     //  IDocProgramListing *source()
     //  ICompound *innerNamespaces()
     //  ICompoundIterator *innerClasses()
@@ -704,26 +716,26 @@ class IDoxygen
      *  compound id this function is much more efficient than iterating
      *  over the compound list. Returns 0 if the id is not valid.
      */
-    virtual ICompound *compoundById(const QString &id) const = 0;
+    virtual ICompound *compoundById(const char * id) const = 0;
 
     /*! Returns a compound given its name (including the scope). 
      *  Returns 0 if the name is not found in the project.
      */
-    virtual ICompound *compoundByName(const QString &name) const = 0;
+    virtual ICompound *compoundByName(const char * name) const = 0;
 
     /*! Returns an interface to a compound containing a member given it the
      *  member's id. Given the ICompound interface one can use the same id
      *  to obtain the IMember interface.
      *  @param id The member id.
      */
-    virtual ICompound *memberById(const QString &id) const = 0;
+    virtual ICompound *memberById(const char * id) const = 0;
 
     /*! Returns a list of all compounds containing at least one members 
      *  with a certain name. Each compound can be asked to return the
      *  list of members with that name.
      *  @param name The name of the member.
      */
-    virtual ICompoundIterator *memberByName(const QString &name) const = 0;
+    virtual ICompoundIterator *memberByName(const char * name) const = 0;
 
     /*! Releases the memory for the object hierarchy obtained by 
      *  createdObjecModelFromXML(). First release all iterators before calling
diff --git a/addon/doxmlparser/src/doxmlparser.pro.in b/addon/doxmlparser/src/doxmlparser.pro.in
index 1d05f5b..ddbe82a 100644
--- a/addon/doxmlparser/src/doxmlparser.pro.in
+++ b/addon/doxmlparser/src/doxmlparser.pro.in
@@ -4,7 +4,7 @@ HEADERS      =	basehandler.h mainhandler.h \
                 compoundhandler.h sectionhandler.h \
                 memberhandler.h paramhandler.h \
                 dochandler.h linkedtexthandler.h \
-                debug.h graphhandler.h
+                debug.h graphhandler.h stringimpl.h
 SOURCES      =	mainhandler.cpp \
                 compoundhandler.cpp sectionhandler.cpp \
                 memberhandler.cpp paramhandler.cpp \
diff --git a/addon/doxmlparser/src/graphhandler.h b/addon/doxmlparser/src/graphhandler.h
index ebcc352..891c3db 100644
--- a/addon/doxmlparser/src/graphhandler.h
+++ b/addon/doxmlparser/src/graphhandler.h
@@ -16,6 +16,7 @@
 #ifndef _GRAPHHANDLER_H
 #define _GRAPHHANDLER_H
 
+#include "stringimpl.h"
 #include "doxmlintf.h"
 #include "basehandler.h"
 #include "baseiterator.h"
@@ -63,16 +64,16 @@ class NodeHandler : public INode, public BaseHandler<NodeHandler>
     void startChildNode(const QXmlAttributes &attrib);
 
     // INode
-    virtual QString id() const { return m_id; }
-    virtual QString label() const { return m_label; }
-    virtual QString linkId() const { return m_link; }
+    virtual const IString *id() const { return &m_id; }
+    virtual const IString *label() const { return &m_label; }
+    virtual const IString *linkId() const { return &m_link; }
     virtual IChildNodeIterator *children() const;
 
   private:
     IBaseHandler *m_parent;
-    QString m_id;
-    QString m_label;
-    QString m_link;
+    StringImpl m_id;
+    StringImpl m_label;
+    StringImpl m_link;
     QList<ChildNodeHandler> m_children;
     GraphHandler *m_graph;
 };
@@ -100,14 +101,14 @@ class ChildNodeHandler : public IChildNode, public BaseHandler<ChildNodeHandler>
     // IChildNode
     virtual INode *node() const;
     virtual NodeRelation relation() const { return m_relation; }
-    virtual QString relationString() const { return m_relationString; }
+    virtual const IString * relationString() const { return &m_relationString; }
     virtual IEdgeLabelIterator *edgeLabels() const;
 
   private:
     IBaseHandler           *m_parent;
     QString                 m_id;
     NodeRelation            m_relation;
-    QString                 m_relationString;
+    StringImpl              m_relationString;
     QList<EdgeLabelHandler> m_edgeLabels;
     GraphHandler           *m_graph;
 };
@@ -132,11 +133,11 @@ class EdgeLabelHandler : public IEdgeLabel, public BaseHandler<EdgeLabelHandler>
     void endEdgeLabel();
 
     // IEdgeLabel
-    virtual QString label() const { return m_label; }
+    virtual const IString *label() const { return &m_label; }
 
   private:
     IBaseHandler *m_parent;
-    QString       m_label;
+    StringImpl    m_label;
 };
 
 class EdgeLabelIterator : public BaseIterator<IEdgeLabelIterator,IEdgeLabel,EdgeLabelHandler>
diff --git a/addon/doxmlparser/src/linkedtexthandler.cpp b/addon/doxmlparser/src/linkedtexthandler.cpp
index 2eb170f..8633096 100644
--- a/addon/doxmlparser/src/linkedtexthandler.cpp
+++ b/addon/doxmlparser/src/linkedtexthandler.cpp
@@ -15,6 +15,7 @@
 #include "linkedtexthandler.h"
 #include "debug.h"
 #include <doxmlintf.h>
+#include "stringimpl.h"
 
 class LT_Text : public LinkedTextImpl, public ILT_Text
 {
@@ -23,10 +24,10 @@ class LT_Text : public LinkedTextImpl, public ILT_Text
     virtual ~LT_Text() {}
 
     // ILT_Text
-    virtual QString text() const { return m_text; }
-    virtual Kind kind() const { return LinkedTextImpl::Kind_Text; }
+    virtual const IString *text() const { return &m_text; }
+    virtual Kind kind() const     { return LinkedTextImpl::Kind_Text; }
   private:
-    QString m_text;
+    StringImpl m_text;
 };
 
 class LT_Ref : public LinkedTextImpl, public ILT_Ref
@@ -40,16 +41,16 @@ class LT_Ref : public LinkedTextImpl, public ILT_Ref
     void setTargetKind(TargetKind k) { m_targetKind=k; }
 
     // ILT_Ref
-    virtual QString text() const { return m_text; }
-    virtual QString id() const { return m_refId; }
+    virtual const IString *text() const { return &m_text; }
+    virtual const IString * id() const { return &m_refId; }
     virtual TargetKind targetKind() const { return m_targetKind; }
-    virtual QString external() const { return m_extId; }
+    virtual const IString *external() const { return &m_extId; }
     virtual Kind kind() const { return LinkedTextImpl::Kind_Ref; }
     
   private:
-    QString    m_refId;
-    QString    m_extId;
-    QString    m_text;
+    StringImpl    m_refId;
+    StringImpl    m_extId;
+    StringImpl    m_text;
     TargetKind m_targetKind;
 };
 
@@ -106,7 +107,7 @@ void LinkedTextHandler::endRef()
 {
   m_ref->setText(m_curString);
   m_children.append(m_ref);
-  debug(2,"LinkedTextHandler: add ref `%s'\n",m_ref->text().data());
+  debug(2,"LinkedTextHandler: add ref `%s'\n",m_ref->text()->latin1());
   m_ref=0;
 }
 
@@ -120,10 +121,10 @@ QString LinkedTextHandler::toString(const QList<LinkedTextImpl> &list)
     switch(lt->kind())
     {
       case ILinkedText::Kind_Text:
-        result+=dynamic_cast<ILT_Text*>(lt)->text();
+        result+=dynamic_cast<ILT_Text*>(lt)->text()->latin1();
         break;
       case ILinkedText::Kind_Ref:
-        result+=dynamic_cast<ILT_Ref *>(lt)->text();
+        result+=dynamic_cast<ILT_Ref *>(lt)->text()->latin1();
         break;
     }
   }
diff --git a/addon/doxmlparser/src/mainhandler.cpp b/addon/doxmlparser/src/mainhandler.cpp
index 99b1e2c..7a67c02 100644
--- a/addon/doxmlparser/src/mainhandler.cpp
+++ b/addon/doxmlparser/src/mainhandler.cpp
@@ -194,16 +194,17 @@ ICompoundIterator *MainHandler::compounds() const
   return new CompoundEntryIterator(this,m_compounds);
 }
 
-ICompound *MainHandler::compoundById(const QString &id) const
+ICompound *MainHandler::compoundById(const char *id) const
 {
-  if (id.isEmpty()) return 0;
-  CompoundHandler *ch = m_compoundsLoaded[id];
+  QString ids = id;
+  if (ids.isEmpty()) return 0;
+  CompoundHandler *ch = m_compoundsLoaded[ids];
   if (ch) // compound already in memory
   {
     ch->addref(); // returning alias -> increase reference counter
     return ch->toICompound(); 
   }
-  CompoundEntry *ce = m_compoundDict.find(id);
+  CompoundEntry *ce = m_compoundDict.find(ids);
   if (ce==0) return 0; // id not found
   // create and load a new compound
   ch = new CompoundHandler(m_xmlDirName);
@@ -224,28 +225,31 @@ ICompound *MainHandler::compoundById(const QString &id) const
 
 void MainHandler::unloadCompound(CompoundHandler *ch)
 {
-  m_compoundsLoaded.remove(ch->id()); 
+  m_compoundsLoaded.remove(ch->id()->latin1()); 
 }
 
-ICompound *MainHandler::compoundByName(const QString &name) const
+ICompound *MainHandler::compoundByName(const char *name) const
 {
-  if (name.isEmpty()) return 0;
+  QString nameStr = name;
+  if (nameStr.isEmpty()) return 0;
   CompoundEntry *ce = m_compoundNameDict[name];
   if (ce==0) return 0; // name not found
   return compoundById(ce->id);
 }
 
-ICompound *MainHandler::memberById(const QString &id) const
+ICompound *MainHandler::memberById(const char *id) const
 {
-  if (id.isEmpty()) return 0;
+  QString ids = id;
+  if (ids.isEmpty()) return 0;
   MemberEntry *me = m_memberDict[id];
   if (me==0) return 0; // id not found
   return compoundById(me->id);
 }
 
-ICompoundIterator *MainHandler::memberByName(const QString &name) const
+ICompoundIterator *MainHandler::memberByName(const char *name) const
 {
-  if (name.isEmpty()) return 0;
+  QString nameStr = name;
+  if (nameStr.isEmpty()) return 0;
   QList<CompoundEntry> *cel = m_memberNameDict[name];
   if (cel==0) return 0; // name not found
   return new CompoundEntryIterator(this,*cel);
@@ -267,7 +271,7 @@ void MainHandler::release()
   CompoundHandler *ch;
   for (chi.toFirst();(ch=chi.current());++chi)
   {
-    debug(1,"Compound %s not released\n",ch->name().data());
+    debug(1,"Compound %s not released\n",ch->name()->latin1());
   }
   graphhandler_exit();
   dochandler_exit();
diff --git a/addon/doxmlparser/src/mainhandler.h b/addon/doxmlparser/src/mainhandler.h
index da7fe75..a0cef10 100644
--- a/addon/doxmlparser/src/mainhandler.h
+++ b/addon/doxmlparser/src/mainhandler.h
@@ -55,10 +55,10 @@ class MainHandler : public IDoxygen, public BaseHandler<MainHandler>
 
     // IDoxygen
     ICompoundIterator *compounds() const;
-    ICompound *compoundById(const QString &id) const;
-    virtual ICompound *compoundByName(const QString &name) const;
-    virtual ICompound *memberById(const QString &id) const;
-    virtual ICompoundIterator *memberByName(const QString &name) const;
+    ICompound *compoundById(const char *id) const;
+    virtual ICompound *compoundByName(const char *name) const;
+    virtual ICompound *memberById(const char *id) const;
+    virtual ICompoundIterator *memberByName(const char *name) const;
 
     virtual void release();
     void setDebugLevel(int level);
diff --git a/addon/doxmlparser/src/memberhandler.h b/addon/doxmlparser/src/memberhandler.h
index 2807ae0..f95fa58 100644
--- a/addon/doxmlparser/src/memberhandler.h
+++ b/addon/doxmlparser/src/memberhandler.h
@@ -35,11 +35,11 @@ struct MemberReference : public IMemberReference
 {
   virtual ~MemberReference() {}
   virtual IMember *member() const;
-  virtual QString memberName() const { return m_name; }
+  virtual const IString *memberName() const { return &m_name; }
   void initialize(MainHandler *m);
 
-  QString  m_memId;
-  QString  m_name;
+  QString      m_memId;
+  StringImpl   m_name;
   MainHandler *m_mainHandler;
 };
 
@@ -61,8 +61,8 @@ class EnumValueHandler : public IEnumValue, public BaseHandler<EnumValueHandler>
     virtual void endEnumValue();
 
     // IEnumValue
-    virtual QString name() const { return m_name; }
-    virtual QString initializer() const { return m_initializer; }
+    virtual const IString *name() const { return &m_name; }
+    virtual const IString *initializer() const { return &m_initializer; }
 
     void setName(const QString &name) { m_name=name; }
     void setInitializer(const QString &init) { m_initializer=init; }
@@ -71,8 +71,8 @@ class EnumValueHandler : public IEnumValue, public BaseHandler<EnumValueHandler>
     EnumValueHandler(IBaseHandler *parent);
 
   private:
-    QString m_name;
-    QString m_initializer;
+    StringImpl m_name;
+    StringImpl m_initializer;
     IBaseHandler *m_parent;
 };
 
@@ -115,24 +115,27 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler>
     virtual ISection *section() const;
     virtual MemberKind kind() const
     { return m_kind; }
-    virtual QString kindString() const 
-    { return m_kindString; }
-    virtual QString id() const 
-    { return m_id; }
-    virtual QString protection() const 
-    { return m_protection; }
-    virtual QString virtualness() const 
-    { return m_virtualness; }
-    virtual QString name() const 
-    { return m_name; }
+    virtual const IString *kindString() const 
+    { return &m_kindString; }
+    virtual const IString *id() const 
+    { return &m_id; }
+    virtual const IString *protection() const 
+    { return &m_protection; }
+    virtual const IString *virtualness() const 
+    { return &m_virtualness; }
+    virtual const IString *name() const 
+    { return &m_name; }
     virtual bool isConst() const 
     { return m_isConst; }
     virtual bool isVolatile() const 
     { return m_isVolatile; }
     virtual ILinkedTextIterator *type() const 
     { return new LinkedTextIterator(m_type); }
-    virtual QString typeString() const
-    { return LinkedTextHandler::toString(m_type); }
+    virtual const IString *typeString() const
+    { MemberHandler *that = (MemberHandler *)this;
+      that->m_typeString = LinkedTextHandler::toString(m_type); 
+      return &m_typeString;
+    }
     virtual IParamIterator *params() const 
     { return new ParamIterator(m_params); }
     virtual IMemberReferenceIterator *references() const 
@@ -147,8 +150,8 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler>
     { return m_bodyStart; }
     virtual int bodyEnd() const 
     { return m_bodyEnd; }
-    virtual QString definitionFile() const 
-    { return m_defFile; }
+    virtual const IString *definitionFile() const 
+    { return &m_defFile; }
     virtual int definitionLine() const 
     { return m_defLine; }
     virtual IMemberReference *reimplements() const
@@ -171,14 +174,15 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler>
     CompoundHandler *m_compound;
     SectionHandler *m_section;
     MemberKind m_kind;
-    QString m_kindString;
-    QString m_id;
-    QString m_protection;
-    QString m_virtualness;
+    StringImpl m_kindString;
+    StringImpl m_id;
+    StringImpl m_protection;
+    StringImpl m_virtualness;
+    StringImpl m_typeString;
     QList<LinkedTextImpl> m_type;
     QList<LinkedTextImpl> m_initializer;
     QList<LinkedTextImpl> m_exception;
-    QString m_name;
+    StringImpl m_name;
     DocHandler  *m_brief;
     DocHandler  *m_detailed;
     QList<ParamHandler> m_params;
@@ -186,7 +190,7 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler>
     QList<MemberReference> m_referencedBy;
     MemberReference *m_reimplements;
     QList<MemberReference> m_reimplementedBy;
-    QString m_defFile;
+    StringImpl m_defFile;
     int m_defLine;
     int m_bodyStart;
     int m_bodyEnd;
diff --git a/addon/doxmlparser/src/paramhandler.h b/addon/doxmlparser/src/paramhandler.h
index 520034a..0ab52d9 100644
--- a/addon/doxmlparser/src/paramhandler.h
+++ b/addon/doxmlparser/src/paramhandler.h
@@ -21,6 +21,7 @@
 #include <qxml.h>
 #include <doxmlintf.h>
 
+#include "stringimpl.h"
 #include "basehandler.h"
 #include "baseiterator.h"
 #include "linkedtexthandler.h"
@@ -43,20 +44,20 @@ class ParamHandler : public IParam, public BaseHandler<ParamHandler>
     // IParam
     virtual ILinkedTextIterator *type() const 
     { return new LinkedTextIterator(m_type); }
-    virtual QString declarationName() const { return m_declName; }
-    virtual QString definitionName() const { return m_defName; }
-    virtual QString attrib() const { return m_attrib; } 
-    virtual QString arraySpecifier() const { return m_array; }
+    virtual const IString * declarationName() const { return &m_declName; }
+    virtual const IString * definitionName() const { return &m_defName; }
+    virtual const IString * attrib() const { return &m_attrib; } 
+    virtual const IString * arraySpecifier() const { return &m_array; }
     virtual ILinkedTextIterator *defaultValue() const 
     { return new LinkedTextIterator(m_defVal); }
 
   private:
     IBaseHandler *m_parent;
     QList<LinkedTextImpl> m_type;
-    QString m_declName;
-    QString m_defName;
-    QString m_attrib;
-    QString m_array;
+    StringImpl m_declName;
+    StringImpl m_defName;
+    StringImpl m_attrib;
+    StringImpl m_array;
     QList<LinkedTextImpl> m_defVal;
     LinkedTextHandler *m_linkedTextHandler;
 };
diff --git a/addon/doxmlparser/src/sectionhandler.h b/addon/doxmlparser/src/sectionhandler.h
index 71a5973..9ecc85e 100644
--- a/addon/doxmlparser/src/sectionhandler.h
+++ b/addon/doxmlparser/src/sectionhandler.h
@@ -46,8 +46,8 @@ class SectionHandler : public ISection, public BaseHandler<SectionHandler>
     virtual ~SectionHandler();
 
     // ISection
-    virtual QString kindString() const 
-    { return m_kindString; }
+    virtual const IString *kindString() const 
+    { return &m_kindString; }
     virtual SectionKind kind() const 
     { return m_kind; }
     virtual IMemberIterator *members() const 
@@ -78,7 +78,7 @@ class SectionHandler : public ISection, public BaseHandler<SectionHandler>
   private:
     IBaseHandler *m_parent;
     SectionKind m_kind;
-    QString m_kindString;
+    StringImpl m_kindString;
     QList<MemberHandler> m_members;
 };
 
diff --git a/addon/doxmlparser/src/stringimpl.h b/addon/doxmlparser/src/stringimpl.h
new file mode 100644
index 0000000..017a0b6
--- /dev/null
+++ b/addon/doxmlparser/src/stringimpl.h
@@ -0,0 +1,26 @@
+#ifndef STRINGIMPL_H
+#define STRINGIMPL_H
+
+#include <qstring.h>
+#include "doxmlintf.h"
+
+class StringImpl : public QString, public IString
+{
+  public:
+    StringImpl() {}
+    StringImpl(const QString &str) : QString(str) {}
+    virtual ~StringImpl() {}
+
+    // IString 
+    const char *latin1() const 
+    { return QString::latin1(); }
+    unsigned short unicodeCharAt(int index) const 
+    { return QString::unicode()[index].unicode(); } 
+    bool isEmpty() const 
+    { return QString::isEmpty(); }
+    int length() const 
+    { return QString::length(); }
+};
+
+#endif
+
diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp
index 457d881..a6b867d 100644
--- a/addon/doxmlparser/test/main.cpp
+++ b/addon/doxmlparser/test/main.cpp
@@ -14,8 +14,12 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <doxmlintf.h>
 
+/*! Dumps the contents of a hyperlinked text fragment as plain text to the
+ *  output.
+ */
 QString linkedTextToString(ILinkedTextIterator *ti)
 {
   QString result;
@@ -24,106 +28,116 @@ QString linkedTextToString(ILinkedTextIterator *ti)
   {
     switch (lt->kind())
     {
-      case ILinkedText::Kind_Text: 
-        result+=dynamic_cast<ILT_Text*>(lt)->text(); break;
-      case ILinkedText::Kind_Ref:  
-        result+=dynamic_cast<ILT_Ref *>(lt)->text(); break;
+      case ILinkedText::Kind_Text: // plain text
+        result+=dynamic_cast<ILT_Text*>(lt)->text()->latin1(); break;
+      case ILinkedText::Kind_Ref:  // a link
+        result+=dynamic_cast<ILT_Ref *>(lt)->text()->latin1(); break;
     }
   }
   return result;
 }
 
-void DumpDoc(IDoc *doc)
+/*! Macro for printing an indented  message. */
+#define InPrint(x) printf("%s",indent.latin1()), printf x;
+
+/*! Dumps the contents of a documentation block to stdout.
+ *  @note This function will call itself recursively.
+ *  @param doc The root of the documentation tree.
+ *  @param level The indent level.
+ */
+void DumpDoc(IDoc *doc,int level)
 {
-  printf("      doc node kind=`%d'\n",doc->kind());
+  QString indent;
+  indent.fill(' ',level);
+  //printf("      doc node kind=`%d'\n",doc->kind());
   switch (doc->kind())
   {
     case IDoc::Para: 
       {
-        printf("     --- par --- \n");
+        InPrint(("<para>\n"));
         IDocPara *par = dynamic_cast<IDocPara*>(doc);
         ASSERT(par!=0);
         IDocIterator *di = par->contents();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end par --- \n");
+        InPrint(("</para>\n"));
       }
       break;
     case IDoc::Text:
       {
         IDocText *txt = dynamic_cast<IDocText*>(doc);
         ASSERT(txt!=0);
-        printf("     --- text `%s' markup=%d --- \n",txt->text().data(),txt->markup());
+        InPrint(("<text value=`%s' markup=%d/>\n",txt->text()->latin1(),txt->markup()));
       }
       break;
     case IDoc::MarkupModifier:
       {
         IDocMarkupModifier *md = dynamic_cast<IDocMarkupModifier*>(doc);
         ASSERT(md!=0);
-        printf("     --- markup modifier enabled=%d markup=%d\n",md->enabled(),md->markup());
+        InPrint(("<markup modifier enabled=%d markup=%d/>\n",md->enabled(),md->markup()));
       }
       break;
     case IDoc::ItemizedList:
       {
-        printf("     --- itemized list --- \n");
+        InPrint(("<itemized list>\n"));
         IDocItemizedList *list = dynamic_cast<IDocItemizedList*>(doc);
         ASSERT(list!=0);
         IDocIterator *di = list->elements();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end itemized list --- \n");
+        InPrint(("</itemized list>\n"));
       }
       break;
     case IDoc::OrderedList:
       {
-        printf("     --- ordered list --- \n");
+        InPrint(("<ordered list>\n"));
         IDocOrderedList *list = dynamic_cast<IDocOrderedList*>(doc);
         ASSERT(list!=0);
         IDocIterator *di = list->elements();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end ordered list --- \n");
+        InPrint(("</ordered list>\n"));
       }
       break;
     case IDoc::ListItem:
       {
-        printf("     --- list item --- \n");
+        InPrint(("<list item>\n"));
         IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
         ASSERT(li!=0);
         IDocIterator *di = li->contents();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end list item --- \n");
+        InPrint(("</list item>\n"));
       }
       break;
     case IDoc::ParameterList:
       {
         IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
-        printf("     --- parameter list type=%d --- \n",list->listType());
+        InPrint(("<parameter list type=%d>\n",list->listType()));
         IDocIterator *di = list->params();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- parameter list item --- \n");
+        InPrint(("</parameter list>\n"));
         ASSERT(list!=0);
       }
       break;
@@ -131,187 +145,248 @@ void DumpDoc(IDoc *doc)
       {
         IDocParameter *par = dynamic_cast<IDocParameter*>(doc);
         ASSERT(par!=0);
-        printf("     --- parameter name=%s --- \n",par->name().data());
-        DumpDoc(par->description());
-        printf("     --- end parameter --- \n");
+        InPrint(("<parameter name=%s>\n",par->name()->latin1()));
+        DumpDoc(par->description(),level+1);
+        InPrint(("<parameter/>\n"));
       }
       break;
     case IDoc::SimpleSect:
       {
         IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(doc);
         ASSERT(ss!=0);
-        printf("     --- simplesect type=%s --- \n",ss->typeString().data());
-        DumpDoc(ss->title());
-        DumpDoc(ss->description());
-        printf("     --- end simplesect --- \n");
+        InPrint(("<simplesect type=%s>\n",ss->typeString()->latin1()));
+        DumpDoc(ss->title(),level+1);
+        DumpDoc(ss->description(),level+1);
+        InPrint(("<simplesect/>\n"));
       }
       break;
     case IDoc::Title:
       {
-        printf("     --- title --- \n");
+        InPrint(("<title>\n"));
         IDocTitle *t = dynamic_cast<IDocTitle*>(doc);
         ASSERT(t!=0);
         IDocIterator *di = t->title();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
-        printf("     --- end title --- \n");
+        InPrint(("<title/>\n"));
       }
       break;
     case IDoc::Ref:
       {
         IDocRef *ref = dynamic_cast<IDocRef*>(doc);
         ASSERT(ref!=0);
-        printf(" ref=%p\n",ref);
-        printf("     --- ref id=%s text=%s --- \n",
-            ref->refId().data(),ref->text().data());
-        printf("     --- end ref --- \n");
+        InPrint(("<ref id=%s text=%s/>\n",
+            ref->refId()->latin1(),ref->text()->latin1()));
       }
       break;
     case IDoc::VariableList:
       {
-        printf("     --- start variablelist --- \n");
+        InPrint(("<variablelist>\n"));
         IDocVariableList *vl = dynamic_cast<IDocVariableList*>(doc);
         ASSERT(vl!=0);
         IDocIterator *di = vl->entries();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end variablelist --- \n");
+        InPrint(("<variablelist/>\n"));
       }
       break;
     case IDoc::VariableListEntry:
       {
         IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(doc);
         ASSERT(vle!=0);
-        printf("     --- start variablelistentry term=%s --- \n",vle->term().data());
-        DumpDoc(vle->description());
-        printf("     --- end variablelistentry --- \n");
+        InPrint(("<variablelistentry term=%s>\n",vle->term()->latin1()));
+        DumpDoc(vle->description(),level+1);
+        InPrint(("<variablelistentry/>\n"));
       }
       break;
     case IDoc::HRuler:
       {
         IDocHRuler *hr = dynamic_cast<IDocHRuler*>(doc);
         ASSERT(hr!=0);
+        InPrint(("<hruler/>\n"));
       }
       break;
     case IDoc::LineBreak:
       {
         IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(doc);
         ASSERT(lb!=0);
+        InPrint(("<linebreak/>\n"));
       }
       break;
     case IDoc::ULink:
       {
         IDocULink *ul = dynamic_cast<IDocULink*>(doc);
         ASSERT(ul!=0);
+        InPrint(("<ulink url=`%s' text=`%s'/>\n",ul->url()->latin1(),ul->text()->latin1()));
       }
       break;
     case IDoc::EMail:
       {
         IDocEMail *em = dynamic_cast<IDocEMail*>(doc);
         ASSERT(em!=0);
+        InPrint(("<email address=`%s'/>\n",em->address()->latin1()));
       }
       break;
     case IDoc::Link:
       {
         IDocLink *lk = dynamic_cast<IDocLink*>(doc);
         ASSERT(lk!=0);
+        InPrint(("<link refid=`%s' text=`%s'/>\n",lk->refId()->latin1(),lk->text()->latin1()));
       }
       break;
     case IDoc::ProgramListing:
       {
         IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(doc);
         ASSERT(pl!=0);
+        InPrint(("<programlisting>\n"));
+        IDocIterator *cli = pl->codeLines();
+        IDoc *cl;
+        for (cli->toFirst();(cl=cli->current());cli->toNext())
+        {
+          DumpDoc(cl,level+1);
+        }
+        cli->release();
+        InPrint(("<programlisting/>\n"));
       }
       break;
     case IDoc::CodeLine:
       {
         IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(doc);
         ASSERT(cl!=0);
+        InPrint(("<codeline lineNumber=%d refId=`%s'>\n",cl->lineNumber(),cl->refId()->latin1()));
+        IDocIterator *cei = cl->codeElements();
+        IDoc *ce;
+        for (cei->toFirst();(ce=cei->current());cei->toNext())
+        {
+          DumpDoc(ce,level+1);
+        }
+        cei->release();
+        InPrint(("<codeline/>\n"));
       }
       break;
     case IDoc::Highlight:
       {
         IDocHighlight *hl = dynamic_cast<IDocHighlight*>(doc);
         ASSERT(hl!=0);
+        InPrint(("<highlight kind=%d>\n",hl->kind()));
+        IDocIterator *cei = hl->codeElements();
+        IDoc *ce;
+        for (cei->toFirst();(ce=cei->current());cei->toNext())
+        {
+          DumpDoc(ce,level+1);
+        }
+        cei->release();
+        InPrint(("</highlight>\n"));
       }
       break;
     case IDoc::Formula:
       {
         IDocFormula *fm = dynamic_cast<IDocFormula*>(doc);
         ASSERT(fm!=0);
+        InPrint(("<formula id=`%s' text=`%s'/>\n",fm->id()->latin1(),fm->text()->latin1()));
       }
       break;
     case IDoc::Image:
       {
         IDocImage *img = dynamic_cast<IDocImage*>(doc);
         ASSERT(img!=0);
+        InPrint(("<image name=`%s' caption=`%s'/>\n",img->name()->latin1(),img->caption()->latin1()));
       }
       break;
     case IDoc::DotFile:
       {
         IDocDotFile *df = dynamic_cast<IDocDotFile*>(doc);
         ASSERT(df!=0);
+        InPrint(("<dotfile name=`%s' caption=`%s'/>\n",df->name()->latin1(),df->caption()->latin1()));
       }
       break;
     case IDoc::IndexEntry:
       {
         IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(doc);
         ASSERT(ie!=0);
+        InPrint(("<indexentry primary=`%s' secondary=`%s'/>\n",ie->primary()->latin1(),ie->secondary()->latin1()));
       }
       break;
     case IDoc::Table:
       {
         IDocTable *tbl = dynamic_cast<IDocTable*>(doc);
         ASSERT(tbl!=0);
+        InPrint(("<table numcols=%d caption=`%s'>\n",tbl->numColumns(),tbl->caption()->latin1()));
+        IDocIterator *ri = tbl->rows();
+        IDoc *row;
+        for (ri->toFirst();(row=ri->current());ri->toNext())
+        {
+          DumpDoc(row,level+1);
+        }
+        ri->release();
+        InPrint(("</table>\n"));
       }
       break;
     case IDoc::Row:
       {
         IDocRow *row = dynamic_cast<IDocRow*>(doc);
         ASSERT(row!=0);
+        InPrint(("<row>\n"));
+        IDocIterator *ei = row->entries();
+        IDoc *e;
+        for (ei->toFirst();(e=ei->current());ei->toNext())
+        {
+          DumpDoc(e,level+1);
+        }
+        ei->release();
+        InPrint(("</row>\n"));
       }
       break;
     case IDoc::Entry:
       {
         IDocEntry *ent = dynamic_cast<IDocEntry*>(doc);
         ASSERT(ent!=0);
+        InPrint(("<entry>\n"));
+        IDocIterator *di = ent->contents();
+        IDoc *pdoc;
+        for (di->toFirst();(pdoc=di->current());di->toNext())
+        {
+          DumpDoc(pdoc,level+1);
+        }
+        di->release();
+        InPrint(("</entry>\n"));
       }
       break;
     case IDoc::Section:
       {
         IDocSection *sec = dynamic_cast<IDocSection*>(doc);
         ASSERT(sec!=0);
-        printf("     --- section id=`%s' level=%d --- \n",
-            sec->id().data(),sec->level());
+        InPrint(("<section id=`%s' level=%d>\n",
+            sec->id()->latin1(),sec->level()));
         IDocIterator *di = sec->title();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
-        printf("     --- end section --- \n");
+        InPrint(("<section/>\n"));
       }
       break;
     case IDoc::Root:
       {
-        printf("     --- root --- \n");
+        InPrint(("<root>\n"));
         IDocRoot *root = dynamic_cast<IDocRoot*>(doc);
         ASSERT(root!=0);
         IDocIterator *di = root->contents();
         IDoc *pdoc;
         for (di->toFirst();(pdoc=di->current());di->toNext())
         {
-          DumpDoc(pdoc);
+          DumpDoc(pdoc,level+1);
         }
         di->release();
-        printf("     --- end root --- \n");
+        InPrint(("<root/>\n"));
       }
       break;
 
@@ -329,24 +404,24 @@ void DumpGraph(IGraph *graph)
   for (ni->toFirst();(node=ni->current());ni->toNext())
   {
     printf("   --- node id=%s label=%s linkId=%s\n",
-           node->id().data(),
-           node->label().data(),
-           node->linkId().data()
+           node->id()->latin1(),
+           node->label()->latin1(),
+           node->linkId()->latin1()
           );
     IChildNodeIterator *cni = node->children();
     IChildNode *cn;
     for (cni->toFirst();(cn=cni->current());cni->toNext())
     {
       printf("    + child id=%s label=%s relation=%s\n",
-          cn->node()->id().data(),
-          cn->node()->label().data(),
-          cn->relationString().data()
+          cn->node()->id()->latin1(),
+          cn->node()->label()->latin1(),
+          cn->relationString()->latin1()
       );
       IEdgeLabelIterator *eli = cn->edgeLabels();
       IEdgeLabel *el;
       for (eli->toFirst();(el=eli->current());eli->toNext())
       {
-        printf("      edgeLabel=%s\n",el->label().data());
+        printf("      edgeLabel=%s\n",el->label()->latin1());
       }
       eli->release();
     }
@@ -381,19 +456,19 @@ int main(int argc,char **argv)
   for (cli->toFirst();(comp=cli->current());cli->toNext())
   {
     printf("Compound name=%s id=%s kind=%s\n",
-        comp->name().data(),comp->id().data(),comp->kindString().data());
+        comp->name()->latin1(),comp->id()->latin1(),comp->kindString()->latin1());
     ISectionIterator *sli = comp->sections();
     ISection *sec;
     for (sli->toFirst();(sec=sli->current());sli->toNext())
     {
-      printf("  Section kind=%s\n",sec->kindString().data());
+      printf("  Section kind=%s\n",sec->kindString()->latin1());
       IMemberIterator *mli = sec->members();
       IMember *mem;
       for (mli->toFirst();(mem=mli->current());mli->toNext())
       {
         ILinkedTextIterator *lti = mem->type();
         printf("    Member type=%s name=%s\n",
-            linkedTextToString(lti).data(),mem->name().data());
+            linkedTextToString(lti).latin1(),mem->name()->latin1());
         lti->release();
 
         IParamIterator *pli = mem->params();
@@ -407,7 +482,7 @@ int main(int argc,char **argv)
           QString defVal =  linkedTextToString(lti);
           lti->release();
           printf("      Param type=%s name=%s defvalue=%s\n",
-              parType.data(), par->definitionName().data(),defVal.data());
+              parType.latin1(), par->definitionName()->latin1(),defVal.latin1());
         }
         pli->release();
         IMemberReferenceIterator *mri = mem->references();
@@ -416,7 +491,7 @@ int main(int argc,char **argv)
         {
           IMember *memr = mr->member();
           printf("      References %s at line %d\n",
-              mr->memberName().data(),memr->bodyStart());
+              mr->memberName()->latin1(),memr->bodyStart());
         }
 
         mri->release();
@@ -425,7 +500,7 @@ int main(int argc,char **argv)
         {
           IMember *memr = mr->member();
           printf("      ReferencedBy %s at line %d\n",
-              mr->memberName().data(),memr->bodyStart());
+              mr->memberName()->latin1(),memr->bodyStart());
         }
         mri->release();
 
@@ -434,7 +509,7 @@ int main(int argc,char **argv)
         for (evi->toFirst();(ev=evi->current());evi->toNext())
         {
           printf("      Enum value `%s' init=`%s'\n",
-              ev->name().data(),ev->initializer().data());
+              ev->name()->latin1(),ev->initializer()->latin1());
         }
         evi->release();
 
@@ -442,14 +517,14 @@ int main(int argc,char **argv)
         if (doc)
         {
           printf("===== brief description ==== \n");
-          DumpDoc(doc);
+          DumpDoc(doc,0);
         }
 
         doc = mem->detailedDescription();
         if (doc)
         {
           printf("===== detailed description ==== \n");
-          DumpDoc(doc);
+          DumpDoc(doc,0);
         }
       }
       mli->release();
@@ -460,14 +535,14 @@ int main(int argc,char **argv)
     if (doc)
     {
       printf("===== brief description ==== \n");
-      DumpDoc(doc);
+      DumpDoc(doc,0);
     }
 
     doc = comp->detailedDescription();
     if (doc)
     {
       printf("===== detailed description ==== \n");
-      DumpDoc(doc);
+      DumpDoc(doc,0);
     }
 
     if (comp->kind()==ICompound::Class)
@@ -487,7 +562,7 @@ int main(int argc,char **argv)
       for (bcli->toFirst();(bClass=bcli->current());bcli->toNext())
       {
         ICompound *bc = bClass->compound();
-        printf("    + class %s\n",bc->name().data());
+        printf("    + class %s\n",bc->name()->latin1());
         bc->release();
       }
       bcli->release();
@@ -498,11 +573,22 @@ int main(int argc,char **argv)
       for (dcli->toFirst();(dClass=dcli->current());dcli->toNext())
       {
         ICompound *dc = dClass->compound();
-        printf("    + class %s\n",dc->name().data());
+        printf("    + class %s\n",dc->name()->latin1());
         dc->release();
       }
       dcli->release();
     }
+    else if (comp->kind()==ICompound::File)
+    {
+      IFile *file = dynamic_cast<IFile*>(comp);
+      ASSERT(file!=0);
+
+      printf("==== include dependency graph ==== \n");
+      DumpGraph(file->includeDependencyGraph());
+
+      printf("==== included by dependency graph ==== \n");
+      DumpGraph(file->includedByDependencyGraph());
+    }
     
     comp->release();
   }
diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec
index 462a037..3902a67 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.15_20020407
+Version: 1.2.15_20020421
 Release: 1
 Epoch: 1
 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 8632c03..822cc3d 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -923,7 +923,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
       ol.pushGeneratorState();
       ol.disable(OutputGenerator::Man);
       ol.startDotGraph();
-      parseText(ol,theTranslator->trClassDiagram(name()));
+      parseText(ol,theTranslator->trClassDiagram(displayName()));
       ol.endDotGraph(inheritanceGraph);
       if (Config_getBool("GENERATE_LEGEND"))
       {
diff --git a/src/config.l b/src/config.l
index 4c81fca..05b9b19 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1103,7 +1103,8 @@ void Config::check()
       exit(1);
     }
     else if (cgiURL.left(7)!="http://" && 
-	     cgiURL.left(8)!="https://"
+	     cgiURL.left(8)!="https://" &&
+	     cgiURL.left(4)!="cgi:"
 	    )
     {
       config_err("Error: tag CGI_URL: URL to cgi directory is invalid (must "
@@ -2225,6 +2226,13 @@ void Config::create()
                     TRUE
                  );
   cb = addBool(
+                    "HIDE_UNDOC_RELATIONS",
+		    "If set to YES, the inheritance and collaboration graphs will hide \n"
+		    "inheritance and usage relations if the target is undocumented \n"
+		    "or is not a class. \n",
+                    TRUE
+                 );
+  cb = addBool(
                     "HAVE_DOT",
                     "If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is \n"
                     "available from the path. This tool is part of Graphviz, a graph visualization \n"
@@ -2258,14 +2266,6 @@ void Config::create()
                  );
   cb->addDependency("HAVE_DOT");
   cb = addBool(
-                    "HIDE_UNDOC_RELATIONS",
-		    "If set to YES, the inheritance and collaboration graphs will hide \n"
-		    "inheritance and usage relations if the target is undocumented \n"
-		    "or is not a class. \n",
-                    TRUE
-                 );
-  cb->addDependency("HAVE_DOT");
-  cb = addBool(
                     "INCLUDE_GRAPH",
                     "If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT \n"
                     "tags are set to YES then doxygen will generate a graph for each documented \n"
diff --git a/src/definition.cpp b/src/definition.cpp
index 08ddf6f..e21778e 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -123,7 +123,9 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
     switch(m_brief.at(bl-1))
     {
       case '.': case '!': case '?': break;
-      default: m_brief+='.'; break;
+      default: 
+        if (isupper(m_brief.at(0))) m_brief+='.'; 
+        break;
     }
   }
   m_briefFile = briefFile;
diff --git a/src/doc.l b/src/doc.l
index 982f273..3863d4b 100644
--- a/src/doc.l
+++ b/src/doc.l
@@ -1161,12 +1161,12 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
 					  BEGIN( DocScan );
   					}
 <DocScan>{CMD}"verbatim"/[^a-z_A-Z0-9]	{
-  					  outDoc->startCodeFragment();
+  					  outDoc->startVerbatimFragment();
 					  insideVerbatim=TRUE;
 					  BEGIN(DocVerbatim);
   					}
 <DocVerbatim>{CMD}"endverbatim"/[^a-z_A-Z0-9]	{
-  					  outDoc->endCodeFragment();
+  					  outDoc->endVerbatimFragment();
 					  insideVerbatim=FALSE;
   					  BEGIN(DocScan);
   					}
@@ -1225,7 +1225,7 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
   					  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.,:~&*()\[\]]*")")?({B}*("const"|"volatile"))? {  // 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 );
@@ -1272,6 +1272,10 @@ OPMASK    ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
   					  BEGIN(DocScan);
   					}
 <DocScan>{CMD}("arg"|"li")/{BN}	        { 
+  					  if (insideItemList)
+					  {
+					    forceEndItemList();
+					  }
   					  if (insideArgumentList)
 					  {
 					    outDoc->writeListItem();
diff --git a/src/dot.cpp b/src/dot.cpp
index 77faf6e..6ed5daa 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -468,7 +468,7 @@ void DotNode::write(QTextStream &t,
   }
 }
 
-void DotNode::writeXML(QTextStream &t)
+void DotNode::writeXML(QTextStream &t,bool isClassGraph)
 {
   t << "      <node id=\"" << m_number << "\">" << endl;
   t << "        <label>" << convertToXML(m_label) << "</label>" << endl;
@@ -498,14 +498,21 @@ void DotNode::writeXML(QTextStream &t)
     {
       edgeInfo=eli.current();
       t << "        <childnode id=\"" << childNode->m_number << "\" relation=\"";
-      switch(edgeInfo->m_color)
+      if (isClassGraph)
       {
-        case EdgeInfo::Blue:    t << "public-inheritance"; break;
-        case EdgeInfo::Green:   t << "protected-inheritance"; break;
-        case EdgeInfo::Red:     t << "private-inheritance"; break;
-        case EdgeInfo::Purple:  t << "usage"; break;
-        case EdgeInfo::Orange:  t << "template-instance"; break;
-        case EdgeInfo::Grey:    ASSERT(0); break;
+        switch(edgeInfo->m_color)
+        {
+          case EdgeInfo::Blue:    t << "public-inheritance"; break;
+          case EdgeInfo::Green:   t << "protected-inheritance"; break;
+          case EdgeInfo::Red:     t << "private-inheritance"; break;
+          case EdgeInfo::Purple:  t << "usage"; break;
+          case EdgeInfo::Orange:  t << "template-instance"; break;
+          case EdgeInfo::Grey:    ASSERT(0); break;
+        }
+      }
+      else // include graph
+      {
+        t << "include"; 
       }
       t << "\">" << endl;
       if (!edgeInfo->m_label.isEmpty()) 
@@ -1430,7 +1437,7 @@ void DotClassGraph::writeXML(QTextStream &t)
   DotNode *node;
   for (;(node=dni.current());++dni)
   {
-    node->writeXML(t);
+    node->writeXML(t,TRUE);
   }
 }
 
@@ -1661,7 +1668,7 @@ void DotInclDepGraph::writeXML(QTextStream &t)
   DotNode *node;
   for (;(node=dni.current());++dni)
   {
-    node->writeXML(t);
+    node->writeXML(t,FALSE);
   }
 }
 
diff --git a/src/dot.h b/src/dot.h
index 9096584..220b8e9 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -76,7 +76,7 @@ class DotNode
                int maxDistance=1000,bool backArrows=TRUE);
     int  m_subgraphId;
     void clearWriteFlag();
-    void writeXML(QTextStream &t);
+    void writeXML(QTextStream &t,bool isClassGraph);
     void writeDEF(QTextStream &t);
     QCString label() const { return m_label; }
     int  number() const { return m_number; }
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 1e5f361..499564e 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- * $Id$
+ * 
  *
  *
  * Copyright (C) 1997-2002 by Dimitri van Heesch.
@@ -541,232 +541,232 @@ ArgumentList *getTemplateArgumentsFromName(
   return ali.current();
 }
 
-            
-//----------------------------------------------------------------------
-// build a list of all classes mentioned in the documentation
-// and all classes that have a documentation block before their definition.
-static void buildClassList(Entry *root)
+static void addClassToContext(Entry *root)
 {
-  if (
-       ((root->section & Entry::COMPOUNDDOC_MASK) ||
-        ((root->section & Entry::COMPOUND_MASK))
-       ) && 
-       !root->name.isEmpty()
-     )
+  QCString fullName=removeRedundantWhiteSpace(root->name);
+  if (fullName.isEmpty())
   {
-    QCString fullName=removeRedundantWhiteSpace(root->name);
-    if (fullName.isEmpty())
-    {
-      // this should not be called
-      warn(root->fileName,root->startLine,
-          "Warning: invalid class name found!"
-          );
-      goto error;
-    }
-    Debug::print(Debug::Classes,0,"  Found class with raw name %s\n",fullName.data());
+    // this should not be called
+    warn(root->fileName,root->startLine,
+        "Warning: invalid class name found!"
+        );
+    return;
+  }
+  Debug::print(Debug::Classes,0,"  Found class with raw name %s\n",fullName.data());
 
-    fullName=stripAnonymousNamespaceScope(fullName);
-    fullName=stripTemplateSpecifiersFromScope(fullName);
+  fullName=stripAnonymousNamespaceScope(fullName);
+  fullName=stripTemplateSpecifiersFromScope(fullName);
 
-    Debug::print(Debug::Classes,0,"  Found class with name %s\n",fullName.data());
+  Debug::print(Debug::Classes,0,"  Found class with name %s\n",fullName.data());
 
-    bool ambig;
-    ClassDef *cd;
-    //printf("findFileDef(%s)\n",root->fileName.data());
-    FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
+  bool ambig;
+  ClassDef *cd;
+  //printf("findFileDef(%s)\n",root->fileName.data());
+  FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
 
-    if ((cd=getClass(fullName))) 
-    {
-      Debug::print(Debug::Classes,0,"  Existing class!\n",fullName.data());
-      //if (cd->templateArguments()==0)
-      //{
-      //  //printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
-      //  cd->setTemplateArguments(tArgList);
-      //}
-      if (!root->doc.isEmpty() || !root->brief.isEmpty() || 
-          (root->bodyLine!=-1 && Config_getBool("SOURCE_BROWSER"))
-         ) 
-        // block contains something that ends up in the docs
-      { 
-        if (!root->doc.isEmpty() && !cd->documentation().isEmpty())
-        {
-          warn(
-              root->fileName,root->startLine,
-              "Warning: class %s already has a detailed description. "
-              "Skipping the one found here.",
-              fullName.data()
-              );
-        }
-        else if (!root->doc.isEmpty())
-        {
-          cd->setDocumentation(root->doc,root->docFile,root->docLine);
-        }
-        if (!root->brief.isEmpty() && !cd->briefDescription().isEmpty())
-        {
-          warn(
-              root->fileName,root->startLine,
-              "Warning: class %s already has a brief description\n"
-              "         skipping the one found here.",
-              fullName.data()
-              );
-        }
-        else if (!root->brief.isEmpty())
-        {
-          cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-        }
-        if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
-        {
-          cd->setBodySegment(root->bodyLine,root->endBodyLine);
-          cd->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
-        }
-        cd->addSectionsToDefinition(root->anchors);
-        cd->setName(fullName); // change name to match docs
-      }
-      cd->setFileDef(fd);
-      if (cd->hasDocumentation())
+  if ((cd=getClass(fullName))) 
+  {
+    Debug::print(Debug::Classes,0,"  Existing class!\n",fullName.data());
+    //if (cd->templateArguments()==0)
+    //{
+    //  //printf("existing ClassDef tempArgList=%p specScope=%s\n",root->tArgList,root->scopeSpec.data());
+    //  cd->setTemplateArguments(tArgList);
+    //}
+    if (!root->doc.isEmpty() || !root->brief.isEmpty() || 
+        (root->bodyLine!=-1 && Config_getBool("SOURCE_BROWSER"))
+       ) 
+      // block contains something that ends up in the docs
+    { 
+      if (!root->doc.isEmpty() && !cd->documentation().isEmpty())
       {
-        addIncludeFile(cd,fd,root);
+        warn(
+            root->fileName,root->startLine,
+            "Warning: class %s already has a detailed description. "
+            "Skipping the one found here.",
+            fullName.data()
+            );
       }
-      addNamespace(root,cd);
-      if (fd && (root->section & Entry::COMPOUND_MASK)) 
+      else if (!root->doc.isEmpty())
       {
-        //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
-        //    cd->name().data(),
-        //    fd->name().data(),
-        //    root->fileName.data()
-        //   );
-        fd->insertClass(cd);
+        cd->setDocumentation(root->doc,root->docFile,root->docLine);
       }
-      addClassToGroups(root,cd);
-      cd->setRefItems(root->todoId,root->testId,root->bugId);
-      if (!root->subGrouping) cd->setSubGrouping(FALSE);
-
-      if (cd->templateArguments()==0) 
+      if (!root->brief.isEmpty() && !cd->briefDescription().isEmpty())
       {
-        // this happens if a template class declared with @class is found
-        // before the actual definition.
-        ArgumentList *tArgList = 
-          getTemplateArgumentsFromName(fullName,root->tArgLists);
-        cd->setTemplateArguments(tArgList);
+        warn(
+            root->fileName,root->startLine,
+            "Warning: class %s already has a brief description\n"
+            "         skipping the one found here.",
+            fullName.data()
+            );
       }
-    }
-    else // new class
-    {
-
-      ClassDef::CompoundType sec=ClassDef::Class; 
-      switch(root->section)
+      else if (!root->brief.isEmpty())
       {
-        case Entry::UNION_SEC: 
-        case Entry::UNIONDOC_SEC: 
-          sec=ClassDef::Union; break;
-        case Entry::STRUCT_SEC:
-        case Entry::STRUCTDOC_SEC: 
-          sec=ClassDef::Struct; break;
-        case Entry::INTERFACE_SEC:
-        case Entry::INTERFACEDOC_SEC:
-          sec=ClassDef::Interface; break;
-        case Entry::EXCEPTION_SEC:
-        case Entry::EXCEPTIONDOC_SEC:
-          sec=ClassDef::Exception; break;
+        cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
       }
-      Debug::print(Debug::Classes,0,"  New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
-          fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
-      QCString className;
-      QCString namespaceName;
-      extractNamespaceName(fullName,className,namespaceName);
-
-      //printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
-
-      QCString tagName;
-      QCString refFileName;
-      if (root->tagInfo)
+      if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1)
       {
-        tagName     = root->tagInfo->tagName;
-        refFileName = root->tagInfo->fileName;
+        cd->setBodySegment(root->bodyLine,root->endBodyLine);
+        cd->setBodyDef(findFileDef(Doxygen::inputNameDict,root->fileName,ambig));
       }
-      ClassDef *cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
-          tagName,refFileName);
-      cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
-      cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-      //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
-
+      cd->addSectionsToDefinition(root->anchors);
+      cd->setName(fullName); // change name to match docs
+    }
+    cd->setFileDef(fd);
+    if (cd->hasDocumentation())
+    {
+      addIncludeFile(cd,fd,root);
+    }
+    addNamespace(root,cd);
+    if (fd && (root->section & Entry::COMPOUND_MASK)) 
+    {
+      //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
+      //    cd->name().data(),
+      //    fd->name().data(),
+      //    root->fileName.data()
+      //   );
+      fd->insertClass(cd);
+    }
+    addClassToGroups(root,cd);
+    cd->setRefItems(root->todoId,root->testId,root->bugId);
+    if (!root->subGrouping) cd->setSubGrouping(FALSE);
 
+    if (cd->templateArguments()==0) 
+    {
+      // this happens if a template class declared with @class is found
+      // before the actual definition.
       ArgumentList *tArgList = 
         getTemplateArgumentsFromName(fullName,root->tArgLists);
-      //printf("class %s template args=%s\n",fullName.data(),
-      //    tArgList ? tempArgListToString(tArgList).data() : "<none>");
       cd->setTemplateArguments(tArgList);
-      cd->setProtection(root->protection);
-      cd->addSectionsToDefinition(root->anchors);
-      cd->setIsStatic(root->stat);
+    }
+  }
+  else // new class
+  {
+
+    ClassDef::CompoundType sec=ClassDef::Class; 
+    switch(root->section)
+    {
+      case Entry::UNION_SEC: 
+      case Entry::UNIONDOC_SEC: 
+        sec=ClassDef::Union; break;
+      case Entry::STRUCT_SEC:
+      case Entry::STRUCTDOC_SEC: 
+        sec=ClassDef::Struct; break;
+      case Entry::INTERFACE_SEC:
+      case Entry::INTERFACEDOC_SEC:
+        sec=ClassDef::Interface; break;
+      case Entry::EXCEPTION_SEC:
+      case Entry::EXCEPTIONDOC_SEC:
+        sec=ClassDef::Exception; break;
+    }
+    Debug::print(Debug::Classes,0,"  New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
+        fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
+    QCString className;
+    QCString namespaceName;
+    extractNamespaceName(fullName,className,namespaceName);
 
-      // file definition containing the class cd
-      cd->setBodySegment(root->bodyLine,root->endBodyLine);
-      cd->setBodyDef(fd);
-      if (!root->subGrouping) cd->setSubGrouping(FALSE);
+    //printf("New class: namespace `%s' name=`%s'\n",className.data(),namespaceName.data());
 
-      addClassToGroups(root,cd);
-      cd->setRefItems(root->todoId,root->testId,root->bugId);
+    QCString tagName;
+    QCString refFileName;
+    if (root->tagInfo)
+    {
+      tagName     = root->tagInfo->tagName;
+      refFileName = root->tagInfo->fileName;
+    }
+    ClassDef *cd=new ClassDef(root->fileName,root->startLine,fullName,sec,
+        tagName,refFileName);
+    cd->setDocumentation(root->doc,root->docFile,root->docLine); // copy docs to definition
+    cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
+    //printf("new ClassDef %s tempArgList=%p specScope=%s\n",fullName.data(),root->tArgList,root->scopeSpec.data());
 
-      // see if the class is found inside a namespace 
-      bool found=addNamespace(root,cd);
 
-      cd->setFileDef(fd);
-      if (cd->hasDocumentation())
-      {
-        addIncludeFile(cd,fd,root);
-      }
+    ArgumentList *tArgList = 
+      getTemplateArgumentsFromName(fullName,root->tArgLists);
+    //printf("class %s template args=%s\n",fullName.data(),
+    //    tArgList ? tempArgListToString(tArgList).data() : "<none>");
+    cd->setTemplateArguments(tArgList);
+    cd->setProtection(root->protection);
+    cd->addSectionsToDefinition(root->anchors);
+    cd->setIsStatic(root->stat);
 
-      // namespace is part of the class name
-      if (!found && !namespaceName.isEmpty())
-      {
-        NamespaceDef *nd = getResolvedNamespace(namespaceName);
-        if (nd)
-        {
-          cd->setNamespace(nd);
-          nd->insertClass(cd);
-          found=TRUE;
-        }
-      }
+    // file definition containing the class cd
+    cd->setBodySegment(root->bodyLine,root->endBodyLine);
+    cd->setBodyDef(fd);
+    if (!root->subGrouping) cd->setSubGrouping(FALSE);
 
-      // if the class is not in a namespace then we insert 
-      // it in the file definition
-      if (!found && fd && (root->section & Entry::COMPOUND_MASK)) 
-      {
-        //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
-        //    cd->name().data(),
-        //    fd->name().data(),
-        //    root->fileName.data()
-        //   );
-        fd->insertClass(cd);
-      }
+    addClassToGroups(root,cd);
+    cd->setRefItems(root->todoId,root->testId,root->bugId);
 
-      // the empty string test is needed for extract all case
-      cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-      cd->insertUsedFile(root->fileName);
+    // see if the class is found inside a namespace 
+    bool found=addNamespace(root,cd);
 
-      // add class to the list
-      //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
-      Doxygen::classSDict.append(fullName,cd);
+    cd->setFileDef(fd);
+    if (cd->hasDocumentation())
+    {
+      addIncludeFile(cd,fd,root);
+    }
 
-      // also add class to the correct structural context 
-      Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
-      if (d==0)
-      {
-        //warn(root->fileName,root->startLine,
-        //     "Warning: Internal inconsistency: scope for class %s not "
-        //     "found!\n",fullName.data()
-        //    );
-      }
-      else
+    // namespace is part of the class name
+    if (!found && !namespaceName.isEmpty())
+    {
+      NamespaceDef *nd = getResolvedNamespace(namespaceName);
+      if (nd)
       {
-        //printf("****** adding %s to scope %s\n",cd->name().data(),d->name().data());
-        d->addInnerCompound(cd);
-        cd->setOuterScope(d);
+        cd->setNamespace(nd);
+        nd->insertClass(cd);
+        found=TRUE;
       }
     }
+
+    // if the class is not in a namespace then we insert 
+    // it in the file definition
+    if (!found && fd && (root->section & Entry::COMPOUND_MASK)) 
+    {
+      //printf(">> Inserting class `%s' in file `%s' (root->fileName=`%s')\n",
+      //    cd->name().data(),
+      //    fd->name().data(),
+      //    root->fileName.data()
+      //   );
+      fd->insertClass(cd);
+    }
+
+    // the empty string test is needed for extract all case
+    cd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
+    cd->insertUsedFile(root->fileName);
+
+    // add class to the list
+    //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
+    Doxygen::classSDict.append(fullName,cd);
+
+    // also add class to the correct structural context 
+    Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
+    if (d==0)
+    {
+      //warn(root->fileName,root->startLine,
+      //     "Warning: Internal inconsistency: scope for class %s not "
+      //     "found!\n",fullName.data()
+      //    );
+    }
+    else
+    {
+      //printf("****** adding %s to scope %s\n",cd->name().data(),d->name().data());
+      d->addInnerCompound(cd);
+      cd->setOuterScope(d);
+    }
+  }
+}
+            
+//----------------------------------------------------------------------
+// build a list of all classes mentioned in the documentation
+// and all classes that have a documentation block before their definition.
+static void buildClassList(Entry *root)
+{
+  if (
+        (root->section & Entry::COMPOUND_MASK) && !root->name.isEmpty()
+     )
+  {
+    addClassToContext(root);
   }
-error:
   EntryListIterator eli(*root->sublist);
   Entry *e;
   for (;(e=eli.current());++eli)
@@ -775,18 +775,41 @@ error:
   }
 }
 
+static void buildClassDocList(Entry *root)
+{
+  if (
+       (root->section & Entry::COMPOUNDDOC_MASK) && !root->name.isEmpty()
+     )
+  {
+    addClassToContext(root);
+  }
+  EntryListIterator eli(*root->sublist);
+  Entry *e;
+  for (;(e=eli.current());++eli)
+  {
+    buildClassDocList(e);
+  }
+}
 //----------------------------------------------------------------------
 // build a list of all namespaces mentioned in the documentation
 // and all namespaces that have a documentation block before their definition.
 static void buildNamespaceList(Entry *root)
 {
   if (
-       (root->section==Entry::NAMESPACE_SEC) ||
-       (root->section==Entry::NAMESPACEDOC_SEC) && 
+       (root->section==Entry::NAMESPACE_SEC ||
+        root->section==Entry::NAMESPACEDOC_SEC ||
+        root->section==Entry::PACKAGEDOC_SEC
+       ) && 
        !root->name.isEmpty()
      )
   {
-    QCString fullName=stripAnonymousNamespaceScope(root->name.copy());
+    QCString fullName = root->name;
+    if (root->section==Entry::PACKAGEDOC_SEC)
+    {
+      fullName=substitute(fullName,".","::");
+    }
+    
+    fullName = stripAnonymousNamespaceScope(fullName);
     if (!fullName.isEmpty())
     {
       //printf("Found namespace %s in %s at line %d\n",root->name.data(),
@@ -5564,50 +5587,50 @@ static void findMainPage(Entry *root)
 
 //----------------------------------------------------------------------------
 
-/*! Search for all Java package statements 
- */
-static void buildPackageList(Entry *root)
-{
-  if (root->section == Entry::PACKAGE_SEC || root->section == Entry::PACKAGEDOC_SEC && !root->name.isEmpty())
-  {
-    PackageDef *pd=0;
-    if ((pd=Doxygen::packageDict.find(root->name))==0)
-    {
-      QCString tagName;
-      if (root->tagInfo)
-      {
-        tagName=root->tagInfo->tagName;
-      }
-      pd = new PackageDef(root->fileName,root->startLine,root->name,tagName);
-      Doxygen::packageDict.inSort(root->name,pd);
-      pd->setDocumentation(root->doc,root->docFile,root->docLine);
-      pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-    } 
-    else
-    {
-      if (!pd->documentation() && !root->doc.isEmpty())
-      {
-        pd->setDocumentation(root->doc,root->docFile,root->docLine);
-      }
-      if (!pd->briefDescription() && !root->brief.isEmpty())
-      {
-        pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
-      }
-    }
-    bool ambig;
-    FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
-    if (fd)
-    {
-      fd->setPackageDef(pd);
-    }
-  }
-  EntryListIterator eli(*root->sublist);
-  Entry *e;
-  for (;(e=eli.current());++eli)
-  {
-    buildPackageList(e);
-  }
-}
+///*! Search for all Java package statements 
+// */
+//static void buildPackageList(Entry *root)
+//{
+//  if (root->section == Entry::PACKAGE_SEC || root->section == Entry::PACKAGEDOC_SEC && !root->name.isEmpty())
+//  {
+//    PackageDef *pd=0;
+//    if ((pd=Doxygen::packageDict.find(root->name))==0)
+//    {
+//      QCString tagName;
+//      if (root->tagInfo)
+//      {
+//        tagName=root->tagInfo->tagName;
+//      }
+//      pd = new PackageDef(root->fileName,root->startLine,root->name,tagName);
+//      Doxygen::packageDict.inSort(root->name,pd);
+//      pd->setDocumentation(root->doc,root->docFile,root->docLine);
+//      pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
+//    } 
+//    else
+//    {
+//      if (!pd->documentation() && !root->doc.isEmpty())
+//      {
+//        pd->setDocumentation(root->doc,root->docFile,root->docLine);
+//      }
+//      if (!pd->briefDescription() && !root->brief.isEmpty())
+//      {
+//        pd->setBriefDescription(root->brief,root->briefFile,root->briefLine);
+//      }
+//    }
+//    bool ambig;
+//    FileDef *fd=findFileDef(Doxygen::inputNameDict,root->fileName,ambig);
+//    if (fd)
+//    {
+//      fd->setPackageDef(pd);
+//    }
+//  }
+//  EntryListIterator eli(*root->sublist);
+//  Entry *e;
+//  for (;(e=eli.current());++eli)
+//  {
+//    buildPackageList(e);
+//  }
+//}
 
 //----------------------------------------------------------------------------
 
@@ -5814,20 +5837,20 @@ static void generateGroupDocs()
 
 //----------------------------------------------------------------------------
 
-static void generatePackageDocs()
-{
-  writePackageIndex(*outputList);
-  
-  if (Doxygen::packageDict.count()>0)
-  {
-    PackageSDict::Iterator pdi(Doxygen::packageDict);
-    PackageDef *pd;
-    for (pdi.toFirst();(pd=pdi.current());++pdi)
-    {
-      pd->writeDocumentation(*outputList);
-    }
-  }
-}
+//static void generatePackageDocs()
+//{
+//  writePackageIndex(*outputList);
+//  
+//  if (Doxygen::packageDict.count()>0)
+//  {
+//    PackageSDict::Iterator pdi(Doxygen::packageDict);
+//    PackageDef *pd;
+//    for (pdi.toFirst();(pd=pdi.current());++pdi)
+//    {
+//      pd->writeDocumentation(*outputList);
+//    }
+//  }
+//}
 
 //----------------------------------------------------------------------------
 // generate module pages
@@ -7220,6 +7243,7 @@ void parseInput()
   
   msg("Building class list...\n");
   buildClassList(root);
+  buildClassDocList(root);
   findUsingDeclarations(root);
 
   msg("Building example list...\n");
@@ -7268,8 +7292,8 @@ void parseInput()
   msg("Building page list...\n");
   buildPageList(root);
 
-  msg("Building package list...\n");
-  buildPackageList(root);
+  //msg("Building package list...\n");
+  //buildPackageList(root);
 
   msg("Search for main page...\n");
   findMainPage(root);
@@ -7425,9 +7449,9 @@ void generateOutput()
   
   msg("Generating group index...\n");
   writeGroupIndex(*outputList);
-  
-  msg("Generating package index...\n");
-  generatePackageDocs();
+ 
+  //msg("Generating package index...\n");
+  //generatePackageDocs();
 
   msg("Generating example index...\n");
   writeExampleIndex(*outputList);
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 5e08a92..2ad8c2b 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -124,6 +124,8 @@ class HtmlGenerator : public OutputGenerator
     void endCodeFragment()   { t << "</pre></div>"; } 
     void startPreFragment() { t << "<pre>"; }
     void endPreFragment()   { t << "</pre>"; }
+    void startVerbatimFragment() { t << "<div class=\"fragment\"><pre>"; }
+    void endVerbatimFragment()   { t << "</pre></div>"; } 
     void writeLineNumber(const char *,const char *,const char *,int);
     void startCodeLine() { col=0; }
     void endCodeLine()   { codify("\n"); }
diff --git a/src/index.cpp b/src/index.cpp
index 2720545..534cd42 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1230,48 +1230,48 @@ void writeAnnotatedClassList(OutputList &ol)
 //----------------------------------------------------------------------------
 
 // OBSOLETE
-void writePackageList(OutputList &ol)
-{
-  bool &generateHtml = Config_getBool("GENERATE_HTML") ;
-  bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
-  bool hasFtvHelp =  generateHtml && Config_getBool("GENERATE_TREEVIEW");
-  ol.startIndexList(); 
-  PackageSDict::Iterator pdi(Doxygen::packageDict);
-  PackageDef *pd;
-  for (;(pd=pdi.current());++pdi)
-  {
-    if (!pd->isReference())
-    {
-      //ol.writeStartAnnoItem("package",pd->getOutputFileBase(),0,pd->name());
-      ol.startIndexKey();
-      ol.writeObjectLink(0,pd->getOutputFileBase(),0,pd->name());
-      ol.endIndexKey();
-      bool hasBrief = !pd->briefDescription().isEmpty();
-      ol.startIndexValue(hasBrief);
-      if (hasBrief)
-      {
-        //ol.docify(" (");
-        parseDoc(ol,
-            pd->getDefFileName(),pd->getDefLine(),
-            pd->name(),0,
-            abbreviate(pd->briefDescription(),pd->name()));
-        //ol.docify(")");
-      }
-      ol.endIndexValue(pd->getOutputFileBase(),hasBrief);
-      
-      //ol.writeEndAnnoItem(pd->getOutputFileBase());
-      if (hasHtmlHelp)
-      {
-        HtmlHelp::getInstance()->addContentsItem(FALSE,pd->name(),pd->getOutputFileBase());
-      }
-      if (hasFtvHelp)
-      {
-        FTVHelp::getInstance()->addContentsItem(FALSE,pd->getReference(),pd->getOutputFileBase(),0,pd->name());
-      }
-    }
-  }
-  ol.endIndexList();
-}
+//void writePackageList(OutputList &ol)
+//{
+//  bool &generateHtml = Config_getBool("GENERATE_HTML") ;
+//  bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
+//  bool hasFtvHelp =  generateHtml && Config_getBool("GENERATE_TREEVIEW");
+//  ol.startIndexList(); 
+//  PackageSDict::Iterator pdi(Doxygen::packageDict);
+//  PackageDef *pd;
+//  for (;(pd=pdi.current());++pdi)
+//  {
+//    if (!pd->isReference())
+//    {
+//      //ol.writeStartAnnoItem("package",pd->getOutputFileBase(),0,pd->name());
+//      ol.startIndexKey();
+//      ol.writeObjectLink(0,pd->getOutputFileBase(),0,pd->name());
+//      ol.endIndexKey();
+//      bool hasBrief = !pd->briefDescription().isEmpty();
+//      ol.startIndexValue(hasBrief);
+//      if (hasBrief)
+//      {
+//        //ol.docify(" (");
+//        parseDoc(ol,
+//            pd->getDefFileName(),pd->getDefLine(),
+//            pd->name(),0,
+//            abbreviate(pd->briefDescription(),pd->name()));
+//        //ol.docify(")");
+//      }
+//      ol.endIndexValue(pd->getOutputFileBase(),hasBrief);
+//      
+//      //ol.writeEndAnnoItem(pd->getOutputFileBase());
+//      if (hasHtmlHelp)
+//      {
+//        HtmlHelp::getInstance()->addContentsItem(FALSE,pd->name(),pd->getOutputFileBase());
+//      }
+//      if (hasFtvHelp)
+//      {
+//        FTVHelp::getInstance()->addContentsItem(FALSE,pd->getReference(),pd->getOutputFileBase(),0,pd->name());
+//      }
+//    }
+//  }
+//  ol.endIndexList();
+//}
 
 //----------------------------------------------------------------------------
 
@@ -1496,54 +1496,54 @@ void writeAnnotatedIndex(OutputList &ol)
 
 //----------------------------------------------------------------------------
 
-void writePackageIndex(OutputList &ol)
-{
-  bool &generateHtml = Config_getBool("GENERATE_HTML") ;
-  bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
-  bool hasFtvHelp  = generateHtml && Config_getBool("GENERATE_TREEVIEW");
-
-  if (documentedPackages==0) return;
-  
-  ol.pushGeneratorState();
-  ol.disable(OutputGenerator::Man);
-  startFile(ol,"packages",0,"Package Index");
-  startTitle(ol,0);
-  QCString title = theTranslator->trPackageList();
-  QCString htmlHelpTitle = title;
-  QCString ftvHelpTitle =  title;
-  if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
-  parseText(ol,title);
-  endTitle(ol,0,0);
-  ol.startTextBlock();
-  HtmlHelp *htmlHelp = 0;
-  FTVHelp  *ftvHelp = 0;
-  if (hasHtmlHelp)
-  {
-    htmlHelp = HtmlHelp::getInstance();
-    htmlHelp->addContentsItem(TRUE,htmlHelpTitle,"packages"); 
-    htmlHelp->incContentsDepth();
-  }
-  if (hasFtvHelp)
-  {
-    ftvHelp = FTVHelp::getInstance();
-    ftvHelp->addContentsItem(TRUE,0,"packages",0,ftvHelpTitle); 
-    ftvHelp->incContentsDepth();
-  }
-  parseText(ol,theTranslator->trPackageListDescription());
-  ol.endTextBlock();
-  writePackageList(ol);
-  if (hasHtmlHelp)
-  {
-    htmlHelp->decContentsDepth();
-  }
-  if (hasFtvHelp)
-  {
-    ftvHelp->decContentsDepth();
-  }
-  
-  endFile(ol);
-  ol.popGeneratorState();
-}
+//void writePackageIndex(OutputList &ol)
+//{
+//  bool &generateHtml = Config_getBool("GENERATE_HTML") ;
+//  bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
+//  bool hasFtvHelp  = generateHtml && Config_getBool("GENERATE_TREEVIEW");
+//
+//  if (documentedPackages==0) return;
+//  
+//  ol.pushGeneratorState();
+//  ol.disable(OutputGenerator::Man);
+//  startFile(ol,"packages",0,"Package Index");
+//  startTitle(ol,0);
+//  QCString title = theTranslator->trPackageList();
+//  QCString htmlHelpTitle = title;
+//  QCString ftvHelpTitle =  title;
+//  if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
+//  parseText(ol,title);
+//  endTitle(ol,0,0);
+//  ol.startTextBlock();
+//  HtmlHelp *htmlHelp = 0;
+//  FTVHelp  *ftvHelp = 0;
+//  if (hasHtmlHelp)
+//  {
+//    htmlHelp = HtmlHelp::getInstance();
+//    htmlHelp->addContentsItem(TRUE,htmlHelpTitle,"packages"); 
+//    htmlHelp->incContentsDepth();
+//  }
+//  if (hasFtvHelp)
+//  {
+//    ftvHelp = FTVHelp::getInstance();
+//    ftvHelp->addContentsItem(TRUE,0,"packages",0,ftvHelpTitle); 
+//    ftvHelp->incContentsDepth();
+//  }
+//  parseText(ol,theTranslator->trPackageListDescription());
+//  ol.endTextBlock();
+//  writePackageList(ol);
+//  if (hasHtmlHelp)
+//  {
+//    htmlHelp->decContentsDepth();
+//  }
+//  if (hasFtvHelp)
+//  {
+//    ftvHelp->decContentsDepth();
+//  }
+//  
+//  endFile(ol);
+//  ol.popGeneratorState();
+//}
 
 //----------------------------------------------------------------------------
 
diff --git a/src/latexgen.h b/src/latexgen.h
index 2f4313f..e96acb8 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -122,6 +122,8 @@ class LatexGenerator : public OutputGenerator
     void endPreFragment()    { t << "\\end{alltt}\\normalsize " << endl; 
                                insidePre=FALSE; 
                              }
+    void startVerbatimFragment() { t << endl << endl << "\\footnotesize\\begin{verbatim}"; }
+    void endVerbatimFragment()   { t << "\\end{verbatim}\\normalsize " << endl; }
     void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
     void startCodeLine() { col=0; }
     void endCodeLine() { codify("\n"); }
diff --git a/src/mangen.h b/src/mangen.h
index a1b30a4..ffca2a5 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -112,8 +112,10 @@ class ManGenerator : public OutputGenerator
     void writeAnchor(const char *,const char *) {}
     void startCodeFragment();
     void endCodeFragment();
-    void startPreFragment() { startCodeFragment(); }
-    void endPreFragment() { endCodeFragment(); }
+    void startPreFragment()      { startCodeFragment(); }
+    void endPreFragment()        { endCodeFragment(); }
+    void startVerbatimFragment() { startCodeFragment(); }
+    void endVerbatimFragment()   { endCodeFragment(); }
     void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
     void startCodeLine() {}
     void endCodeLine() { codify("\n"); col=0; }
diff --git a/src/outputgen.h b/src/outputgen.h
index 2b963a4..2eecb44 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -163,11 +163,19 @@ class BaseOutputDocInterface
     /*! Starts a fragment of preformatted text. This means that
      *  spacing, tabs and newlines should be kept in the output
      */
-
     virtual void startPreFragment() = 0;
-    /*! Ens a preformatted text fragment. */
-
+    
+    /*! Ends a preformatted text fragment. */
     virtual void endPreFragment() = 0;
+    
+    /*! Starts a fragment of verbatim test. This is preformatted text,
+     *  without any special internal structure.
+     */
+    virtual void startVerbatimFragment() = 0;
+
+    /*! Ends a verbatim text fragment. */
+    virtual void endVerbatimFragment() = 0;
+    
     /*! Writes a horizontal ruler to the output */
     virtual void writeRuler() = 0;
     
diff --git a/src/outputlist.h b/src/outputlist.h
index 79e511b..3a6b71a 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -210,6 +210,10 @@ class OutputList : public OutputDocInterface
     { forall(&OutputGenerator::startPreFragment); }
     void endPreFragment() 
     { forall(&OutputGenerator::endPreFragment); }
+    void startVerbatimFragment() 
+    { forall(&OutputGenerator::startVerbatimFragment); }
+    void endVerbatimFragment() 
+    { forall(&OutputGenerator::endVerbatimFragment); }
     void startCodeLine() 
     { forall(&OutputGenerator::startCodeLine); }
     void endCodeLine() 
diff --git a/src/pre.l b/src/pre.l
index 1878f14..19694f2 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1518,7 +1518,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  g_defVarArgs = FALSE;
 					  if ( g_defName!=g_lastGuardName )
 					  { // define may appear in the output
-					    QCString tmp=(QCString)"#define "+g_defName+g_defArgsStr;
+					    QCString tmp=(QCString)"#define "+g_defName;
 					    outputArray(tmp.data(),tmp.length());
 					    g_quoteArg=FALSE;
 					    BEGIN(DefineText);
@@ -1527,10 +1527,10 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  {
 					    //printf("Found a guard %s\n",yytext);
   					    Define *def=0;
-					    //if (g_includeStack.isEmpty()) 
-					    //{
-					    //  addDefine();
-					    //}
+					    if (g_includeStack.isEmpty()) 
+					    {
+					      addDefine();
+					    }
 					    if ((def=g_fileDefineDict->find(g_defName))==0)
 					    {
 					      g_fileDefineDict->insert(g_defName,newDefine());
@@ -1551,6 +1551,8 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					        //printf("Error: define %s is defined more than once!\n",g_defName.data());
 					      }
 					    }
+					    QCString tmp=(QCString)"#define "+g_defName;
+					    outputArray(tmp.data(),tmp.length());
   					    //outputChar('\n');
 					    g_lastGuardName.resize(0);
 					    BEGIN(Start);
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index ac777d6..3d70b3a 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -7,8 +7,8 @@
  * Style sheet additions by Alexander Bartolich
  *
  * 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 
+ * 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.
  *
@@ -57,7 +57,7 @@ static QCString documentType;
 static QCString documentId;
 static QCString keywords;
 
-// it is undocumented as far as I know, but 
+// it is undocumented as far as I know, but
 // "."'s in a bookmarkname are converted to "_"'s
 // when an RTF file is read in...
 static QCString formatBmkStr(const char *name)
@@ -72,11 +72,11 @@ static QCString formatBmkStr(const char *name)
       switch(c)
       {
         case '.':
-          // fall through 
-        case ':':  
-          *p='_'; 
+          // fall through
+        case ':':
+          *p='_';
           break;
-        default: 
+        default:
           break;
       }
       p++;
@@ -95,7 +95,7 @@ static QCString dateToRTFDateString()
   const QDateTime &d = QDateTime::currentDateTime();
   QCString result;
   result.sprintf("\\yr%d\\mo%d\\dy%d\\hr%d\\min%d\\sec%d",
-      d.date().year(), d.date().month(), d.date().day(), 
+      d.date().year(), d.date().month(), d.date().day(),
       d.time().hour(),d.time().minute(),d.time().second());
   return result;
 }
@@ -147,159 +147,159 @@ static const struct Rtf_Style_Default Rtf_Style_Default[] =
 {
   { "Heading1",
     "\\s1\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs36\\kerning36\\cgrid ",
-    "\\sbasedon0 \\snext0 heading 1"    
+    "\\sbasedon0 \\snext0 heading 1"
   },
   { "Heading2",
     "\\s2\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs28\\kerning28\\cgrid ",
-    "\\sbasedon0 \\snext0 heading 2"    
+    "\\sbasedon0 \\snext0 heading 2"
   },
   { "Heading3",
     "\\s3\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\cgrid ",
-    "\\sbasedon0 \\snext0 heading 3"    
+    "\\sbasedon0 \\snext0 heading 3"
   },
   { "Heading4",
     "\\s4\\sb240\\sa60\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext0 heading 4;}{\\*\\cs10 \\additive Default Paragraph Font"    
+    "\\sbasedon0 \\snext0 heading 4;}{\\*\\cs10 \\additive Default Paragraph Font"
   },
   { "Title",
     "\\s15\\qc\\sb240\\sa60\\widctlpar\\outlinelevel0\\adjustright \\b\\f1\\fs32\\kerning28\\cgrid ",
-    "\\sbasedon0 \\snext15 Title"    
+    "\\sbasedon0 \\snext15 Title"
   },
   { "SubTitle",
     "\\s16\\qc\\sa60\\widctlpar\\outlinelevel1\\adjustright \\f1\\cgrid ",
-    "\\sbasedon0 \\snext16 Subtitle"    
+    "\\sbasedon0 \\snext16 Subtitle"
   },
   { "BodyText",
     "\\s17\\sa60\\sb30\\widctlpar\\qj \\fs22\\cgrid ",
-    "\\sbasedon0 \\snext17 BodyText"    
+    "\\sbasedon0 \\snext17 BodyText"
   },
   { "DenseText",
     "\\s18\\widctlpar\\fs22\\cgrid ",
-    "\\sbasedon0 \\snext18 DenseText"    
+    "\\sbasedon0 \\snext18 DenseText"
   },
   { "Header",
     "\\s28\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext28 header"    
+    "\\sbasedon0 \\snext28 header"
   },
   { "Footer",
     "\\s29\\widctlpar\\tqc\\tx4320\\tqr\\tx8640\\qr\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext29 footer"    
+    "\\sbasedon0 \\snext29 footer"
   },
   { "GroupHeader",
     "\\s30\\li360\\sa60\\sb120\\keepn\\widctlpar\\adjustright \\b\\f1\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext30 GroupHeader"    
+    "\\sbasedon0 \\snext30 GroupHeader"
   },
-  { "CodeExample0",  
+  { "CodeExample0",
     "\\s40\\li0\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext41 Code Example 0"    
+    "\\sbasedon0 \\snext41 Code Example 0"
   },
-  { "CodeExample1",  
+  { "CodeExample1",
     "\\s41\\li360\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext42 Code Example 1"    
+    "\\sbasedon0 \\snext42 Code Example 1"
   },
-  { "CodeExample2",    
+  { "CodeExample2",
     "\\s42\\li720\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext43 Code Example 2"    
+    "\\sbasedon0 \\snext43 Code Example 2"
   },
-  { "CodeExample3",  
+  { "CodeExample3",
     "\\s43\\li1080\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext44 Code Example 3"    
+    "\\sbasedon0 \\snext44 Code Example 3"
   },
-  { "CodeExample4",  
+  { "CodeExample4",
     "\\s44\\li1440\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext45 Code Example 4"    
+    "\\sbasedon0 \\snext45 Code Example 4"
   },
-  { "CodeExample5",    
+  { "CodeExample5",
     "\\s45\\li1800\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext46 Code Example 5"    
+    "\\sbasedon0 \\snext46 Code Example 5"
   },
-  { "CodeExample6",     
+  { "CodeExample6",
     "\\s46\\li2160\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext47 Code Example 6"    
+    "\\sbasedon0 \\snext47 Code Example 6"
   },
-  { "CodeExample7",    
+  { "CodeExample7",
     "\\s47\\li2520\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext48 Code Example 7"    
+    "\\sbasedon0 \\snext48 Code Example 7"
   },
-  { "CodeExample8",    
+  { "CodeExample8",
     "\\s48\\li2880\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext49 Code Example 8"    
+    "\\sbasedon0 \\snext49 Code Example 8"
   },
   { "CodeExample9",
     "\\s49\\li3240\\widctlpar\\adjustright \\shading1000\\cbpat8 \\f2\\fs16\\cgrid ",
-    "\\sbasedon0 \\snext49 Code Example 9"    
+    "\\sbasedon0 \\snext49 Code Example 9"
   },
   { "ListContinue0",
     "\\s50\\li0\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext51 List Continue 0"    
+    "\\sbasedon0 \\snext51 List Continue 0"
   },
-  { "ListContinue1",  
+  { "ListContinue1",
     "\\s51\\li360\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext52 List Continue 1"    
+    "\\sbasedon0 \\snext52 List Continue 1"
   },
-  { "ListContinue2",  
+  { "ListContinue2",
     "\\s52\\li720\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext53 List Continue 2"    
+    "\\sbasedon0 \\snext53 List Continue 2"
   },
-  { "ListContinue3",  
+  { "ListContinue3",
     "\\s53\\li1080\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext54 List Continue 3"    
+    "\\sbasedon0 \\snext54 List Continue 3"
   },
-  { "ListContinue4",  
+  { "ListContinue4",
     "\\s54\\li1440\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext55 List Continue 4"    
+    "\\sbasedon0 \\snext55 List Continue 4"
   },
-  { "ListContinue5",  
+  { "ListContinue5",
     "\\s55\\li1800\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext56 List Continue 5"    
+    "\\sbasedon0 \\snext56 List Continue 5"
   },
-  { "ListContinue6",  
+  { "ListContinue6",
     "\\s56\\li2160\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext57 List Continue 6"    
+    "\\sbasedon0 \\snext57 List Continue 6"
   },
-  { "ListContinue7",  
+  { "ListContinue7",
     "\\s57\\li2520\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext58 List Continue 7"    
+    "\\sbasedon0 \\snext58 List Continue 7"
   },
-  { "ListContinue8",  
+  { "ListContinue8",
     "\\s58\\li2880\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext59 List Continue 8"    
+    "\\sbasedon0 \\snext59 List Continue 8"
   },
-  { "ListContinue9",  
+  { "ListContinue9",
     "\\s59\\li3240\\sa60\\sb30\\qj\\widctlpar\\qj\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext59 List Continue 9"    
+    "\\sbasedon0 \\snext59 List Continue 9"
   },
   { "DescContinue0",
     "\\s60\\li0\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext61 DescContinue 0"    
+    "\\sbasedon0 \\snext61 DescContinue 0"
   },
-  { "DescContinue1",  
+  { "DescContinue1",
     "\\s61\\li360\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext62 DescContinue 1"    
+    "\\sbasedon0 \\snext62 DescContinue 1"
   },
   { "DescContinue2",
     "\\s62\\li720\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext63 DescContinue 2"    
+    "\\sbasedon0 \\snext63 DescContinue 2"
   },
   { "DescContinue3",
     "\\s63\\li1080\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext64 DescContinue 3"    
+    "\\sbasedon0 \\snext64 DescContinue 3"
   },
   { "DescContinue4",
     "\\s64\\li1440\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext65 DescContinue 4"    
+    "\\sbasedon0 \\snext65 DescContinue 4"
   },
   { "DescContinue5",
     "\\s65\\li1800\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext66 DescContinue 5"    
+    "\\sbasedon0 \\snext66 DescContinue 5"
   },
   { "DescContinue6",
     "\\s66\\li2160\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext67 DescContinue 6"    
+    "\\sbasedon0 \\snext67 DescContinue 6"
   },
   { "DescContinue7",
     "\\s67\\li2520\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext68 DescContinue 7"    
+    "\\sbasedon0 \\snext68 DescContinue 7"
   },
   { "DescContinue8",
     "\\s68\\li2880\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
@@ -307,127 +307,127 @@ static const struct Rtf_Style_Default Rtf_Style_Default[] =
   },
   { "DescContinue9",
     "\\s69\\li3240\\widctlpar\\ql\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext69 DescContinue 9"    
+    "\\sbasedon0 \\snext69 DescContinue 9"
   },
   { "LatexTOC0",
     "\\s70\\li0\\sa30\\sb30\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext81 LatexTOC 0"    
+    "\\sbasedon0 \\snext81 LatexTOC 0"
   },
   { "LatexTOC1",
     "\\s71\\li360\\sa27\\sb27\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext82 LatexTOC 1"    
+    "\\sbasedon0 \\snext82 LatexTOC 1"
   },
   { "LatexTOC2",
     "\\s72\\li720\\sa24\\sb24\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext83 LatexTOC 2"    
+    "\\sbasedon0 \\snext83 LatexTOC 2"
   },
   { "LatexTOC3",
     "\\s73\\li1080\\sa21\\sb21\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext84 LatexTOC 3"    
+    "\\sbasedon0 \\snext84 LatexTOC 3"
   },
   { "LatexTOC4",
     "\\s74\\li1440\\sa18\\sb18\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext85 LatexTOC 4"    
+    "\\sbasedon0 \\snext85 LatexTOC 4"
   },
   { "LatexTOC5",
     "\\s75\\li1800\\sa15\\sb15\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext86 LatexTOC 5"    
+    "\\sbasedon0 \\snext86 LatexTOC 5"
   },
   { "LatexTOC6",
     "\\s76\\li2160\\sa12\\sb12\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext87 LatexTOC 6"    
+    "\\sbasedon0 \\snext87 LatexTOC 6"
   },
   { "LatexTOC7",
     "\\s77\\li2520\\sa9\\sb9\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext88 LatexTOC 7"    
+    "\\sbasedon0 \\snext88 LatexTOC 7"
   },
   { "LatexTOC8",
     "\\s78\\li2880\\sa6\\sb6\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext89 LatexTOC 8"    
+    "\\sbasedon0 \\snext89 LatexTOC 8"
   },
   { "LatexTOC9",
     "\\s79\\li3240\\sa3\\sb3\\widctlpar\\tqr\\tldot\\tx8640\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext89 LatexTOC 9"    
+    "\\sbasedon0 \\snext89 LatexTOC 9"
   },
   { "ListBullet0",
     "\\s80\\fi-360\\li360\\widctlpar\\jclisttab\\tx360{\\*\\pn \\pnlvlbody\\ilvl0\\ls1\\pnrnot0\\pndec }\\ls1\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext81 \\sautoupd List Bullet 0"    
+    "\\sbasedon0 \\snext81 \\sautoupd List Bullet 0"
   },
-  { "ListBullet1",    
+  { "ListBullet1",
     "\\s81\\fi-360\\li720\\widctlpar\\jclisttab\\tx720{\\*\\pn \\pnlvlbody\\ilvl0\\ls2\\pnrnot0\\pndec }\\ls2\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext82 \\sautoupd List Bullet 1"    
+    "\\sbasedon0 \\snext82 \\sautoupd List Bullet 1"
   },
   { "ListBullet2",
     "\\s82\\fi-360\\li1080\\widctlpar\\jclisttab\\tx1080{\\*\\pn \\pnlvlbody\\ilvl0\\ls3\\pnrnot0\\pndec }\\ls3\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext83 \\sautoupd List Bullet 2"    
+    "\\sbasedon0 \\snext83 \\sautoupd List Bullet 2"
   },
   { "ListBullet3",
     "\\s83\\fi-360\\li1440\\widctlpar\\jclisttab\\tx1440{\\*\\pn \\pnlvlbody\\ilvl0\\ls4\\pnrnot0\\pndec }\\ls4\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext84 \\sautoupd List Bullet 3"    
+    "\\sbasedon0 \\snext84 \\sautoupd List Bullet 3"
   },
   { "ListBullet4",
     "\\s84\\fi-360\\li1800\\widctlpar\\jclisttab\\tx1800{\\*\\pn \\pnlvlbody\\ilvl0\\ls5\\pnrnot0\\pndec }\\ls5\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext85 \\sautoupd List Bullet 4"    
+    "\\sbasedon0 \\snext85 \\sautoupd List Bullet 4"
   },
   { "ListBullet5",
     "\\s85\\fi-360\\li2160\\widctlpar\\jclisttab\\tx2160{\\*\\pn \\pnlvlbody\\ilvl0\\ls6\\pnrnot0\\pndec }\\ls6\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext86 \\sautoupd List Bullet 5"    
+    "\\sbasedon0 \\snext86 \\sautoupd List Bullet 5"
   },
   { "ListBullet6",
     "\\s86\\fi-360\\li2520\\widctlpar\\jclisttab\\tx2520{\\*\\pn \\pnlvlbody\\ilvl0\\ls7\\pnrnot0\\pndec }\\ls7\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext87 \\sautoupd List Bullet 6"    
+    "\\sbasedon0 \\snext87 \\sautoupd List Bullet 6"
   },
   { "ListBullet7",
     "\\s87\\fi-360\\li2880\\widctlpar\\jclisttab\\tx2880{\\*\\pn \\pnlvlbody\\ilvl0\\ls8\\pnrnot0\\pndec }\\ls8\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext88 \\sautoupd List Bullet 7"    
+    "\\sbasedon0 \\snext88 \\sautoupd List Bullet 7"
   },
   { "ListBullet8",
     "\\s88\\fi-360\\li3240\\widctlpar\\jclisttab\\tx3240{\\*\\pn \\pnlvlbody\\ilvl0\\ls9\\pnrnot0\\pndec }\\ls9\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext89 \\sautoupd List Bullet 8"    
+    "\\sbasedon0 \\snext89 \\sautoupd List Bullet 8"
   },
   { "ListBullet9",
     "\\s89\\fi-360\\li3600\\widctlpar\\jclisttab\\tx3600{\\*\\pn \\pnlvlbody\\ilvl0\\ls10\\pnrnot0\\pndec }\\ls10\\adjustright \\fs20\\cgrid ",
-    "\\sbasedon0 \\snext89 \\sautoupd List Bullet 9"    
+    "\\sbasedon0 \\snext89 \\sautoupd List Bullet 9"
   },
   { "ListEnum0",
     "\\s90\\fi-360\\li360\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext91 \\sautoupd List Enum 0"    
+    "\\sbasedon0 \\snext91 \\sautoupd List Enum 0"
   },
   { "ListEnum1",
     "\\s91\\fi-360\\li720\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext92 \\sautoupd List Enum 1"    
+    "\\sbasedon0 \\snext92 \\sautoupd List Enum 1"
   },
   { "ListEnum2",
     "\\s92\\fi-360\\li1080\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext93 \\sautoupd List Enum 2"    
+    "\\sbasedon0 \\snext93 \\sautoupd List Enum 2"
   },
   { "ListEnum3",
     "\\s93\\fi-360\\li1440\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext94 \\sautoupd List Enum 3"    
+    "\\sbasedon0 \\snext94 \\sautoupd List Enum 3"
   },
   { "ListEnum4",
     "\\s94\\fi-360\\li1800\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext95 \\sautoupd List Enum 4"    
+    "\\sbasedon0 \\snext95 \\sautoupd List Enum 4"
   },
   { "ListEnum5",
     "\\s95\\fi-360\\li2160\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"    
+    "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"
   },
   { "ListEnum6",
     "\\s96\\fi-360\\li2520\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"    
+    "\\sbasedon0 \\snext96 \\sautoupd List Enum 5"
   },
   { "ListEnum7",
     "\\s97\\fi-360\\li2880\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext98 \\sautoupd List Enum 7"    
+    "\\sbasedon0 \\snext98 \\sautoupd List Enum 7"
   },
   { "ListEnum8",
     "\\s98\\fi-360\\li3240\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext99 \\sautoupd List Enum 8"    
+    "\\sbasedon0 \\snext99 \\sautoupd List Enum 8"
   },
   { "ListEnum9",
     "\\s99\\fi-360\\li3600\\widctlpar\\fs20\\cgrid ",
-    "\\sbasedon0 \\snext99 \\sautoupd List Enum 9"    
+    "\\sbasedon0 \\snext99 \\sautoupd List Enum 9"
   },
   { 0,
     0,
@@ -441,7 +441,7 @@ void RTFGenerator::writeStyleSheetFile(QFile &file)
   t << "# Generated by doxygen " << versionString << "\n\n";
   t << "# This file describes styles used for generating RTF output.\n";
   t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
-  t << "# Remove a hash to activate a line.\n\n"; 
+  t << "# Remove a hash to activate a line.\n\n";
 
   int i;
   for (i=0;Rtf_Style_Default[i].reference!=0;i++)
@@ -497,7 +497,7 @@ bool StyleData::setStyle(const char* s, const char* styleName)
 {
   static const QRegExp subgroup("^{[^}]*}\\s*");
   static const QRegExp any_clause("^\\\\[a-z][a-z0-9-]*\\s*");
-	
+
   int len;
   int start = s_clause.match(s, 0, &len);
   if (start < 0)
@@ -578,7 +578,7 @@ static void loadStylesheet(const char *name, QDict<StyleData>& dict)
     int sepStart = separator.match(s,0,&sepLength);
     if (sepStart<=0) // no valid assignment statement
     {
-      warn(name,lineNr,"Assignment of style sheet name expected!\n"); 
+      warn(name,lineNr,"Assignment of style sheet name expected!\n");
       continue;
     }
     QCString key=s.left(sepStart);
@@ -608,7 +608,7 @@ void RTFGenerator::writeExtensionsFile(QFile &file)
   t << "# Generated by doxygen " << versionString << "\n\n";
   t << "# This file describes extensions used for generating RTF output.\n";
   t << "# All text after a hash (#) is considered a comment and will be ignored.\n";
-  t << "# Remove a hash to activate a line.\n\n"; 
+  t << "# Remove a hash to activate a line.\n\n";
 
   t << "# Overrides the project title.\n";
 
@@ -686,7 +686,7 @@ static void loadExtensions(const char *name)
     QCString key=s.left(sepStart);
     QCString data=s.data() + sepStart + sepLength;
 
-    if (key == "Title")           title            = data.data(); 
+    if (key == "Title")           title            = data.data();
     if (key == "Subject")         subject          = data.data();
     if (key == "Comments")        comments         = data.data();
     if (key == "Company")         company          = data.data();
@@ -711,7 +711,7 @@ void RTFGenerator::init()
     exit(1);
   }
   Rtf_Style.setAutoDelete(TRUE);
-  
+
   // first duplicate strings of Rtf_Style_Default
   const struct Rtf_Style_Default* def = Rtf_Style_Default;
   while(def->reference != 0)
@@ -794,20 +794,20 @@ void RTFGenerator::beginRTFDocument()
   for(; (style = iter.current()); ++iter)
   {
     unsigned index = style->index;
-    unsigned size = array.size();    
+    unsigned size = array.size();
     if (index >= size)
-    {      
+    {
       // +1 to add at least one element, then align up to multiple of 8
       array.resize((index + 1 + 7) & ~7);
       array.fill(0, size);
       ASSERT(index < array.size());
-    }    
+    }
     if (array.at(index) != 0)
     {
       QCString key(convertToQCString(iter.currentKey()));
       msg("Style '%s' redefines \\s%d.\n", key.data(), index);
     }
-    array.at(index) = style;      
+    array.at(index) = style;
   }
 
   // write array elements
@@ -834,7 +834,7 @@ void RTFGenerator::beginRTFChapter()
   // if we are compact, no extra page breaks...
   if (Config_getBool("COMPACT_RTF"))
   {
-    //		t <<"\\sect\\sectd\\sbknone\n";
+    //      t <<"\\sect\\sectd\\sbknone\n";
     t <<"\\sect\\sbknone\n";
     RtfwriteRuler_thick();
   }
@@ -854,7 +854,7 @@ void RTFGenerator::beginRTFSection()
   // if we are compact, no extra page breaks...
   if (Config_getBool("COMPACT_RTF"))
   {
-    //		t <<"\\sect\\sectd\\sbknone\n";
+    //      t <<"\\sect\\sectd\\sbknone\n";
     t <<"\\sect\\sbknone\n";
     RtfwriteRuler_emboss();
   }
@@ -888,7 +888,7 @@ void RTFGenerator::startProjectNumber()
   t << " ";
 }
 
-void RTFGenerator::endProjectNumber() 
+void RTFGenerator::endProjectNumber()
 {
 }
 
@@ -912,7 +912,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
       if (subject)       t << "{\\subject "  << subject      << "}\n";
       if (comments)      t << "{\\comment "  << comments     << "}\n";
       if (company)       t << "{\\company "  << company      << "}\n";
-      if (author)        t << "{\\author "   << author       << "}\n"; 
+      if (author)        t << "{\\author "   << author       << "}\n";
       if (manager)       t << "{\\manager "  << manager      << "}\n";
       if (documentType)  t << "{\\category " << documentType << "}\n";
       if (keywords)      t << "{\\keywords " << keywords     << "}\n";
@@ -932,7 +932,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
       break;
     case isNamespaceIndex:
       //Namespace Index
-      beginRTFChapter();  
+      beginRTFChapter();
       break;
     case isClassHierarchyIndex:
       //Hierarchical Index
@@ -995,7 +995,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
             beginRTFChapter();
             found=TRUE;
           }
-        } 
+        }
       }
       break;
     case isClassDocumentation:
@@ -1028,7 +1028,7 @@ void RTFGenerator::startIndexSection(IndexSections is)
             {
               if (isFirst)
               {
-                beginRTFChapter();				  
+                beginRTFChapter();
                 isFirst=FALSE;
                 break;
               }
@@ -1107,7 +1107,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
           t << documentId << "\\par\n";
         }
         t << "\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\n";
-         
+
         t << Rtf_Style_Reset << Rtf_Style["SubTitle"]->reference << endl; // set to subtitle style
         t << "{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par" << endl;
         t << "Version " << Config_getString("PROJECT_NUMBER") << "\\par";
@@ -1257,7 +1257,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
             t << "{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
             t << cd->getOutputFileBase();
             t << ".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
-          } 
+          }
         }
       }
       break;
@@ -1345,7 +1345,7 @@ void RTFGenerator::endIndexSection(IndexSections is)
       }
       break;
     case isEndIndex:
-      beginRTFChapter();				  
+      beginRTFChapter();
       t << Rtf_Style["Heading1"]->reference;
       t << theTranslator->trRTFGeneralIndex() << "\\par "<< endl;
       t << Rtf_Style_Reset << endl;
@@ -1385,8 +1385,8 @@ void RTFGenerator::writeString(const char *text)
   t << text;
 }
 
-void RTFGenerator::startIndexList() 
-{ 
+void RTFGenerator::startIndexList()
+{
   DBG_RTF(t << "{\\comment (startIndexList)}" << endl)
   t << "{" << endl;
   incrementIndentLevel();
@@ -1396,7 +1396,7 @@ void RTFGenerator::startIndexList()
 }
 
 void RTFGenerator::endIndexList()
-{ 
+{
   DBG_RTF(t << "{\\comment (endIndexList)}" << endl)
   newParagraph();
   t << "}";
@@ -1405,8 +1405,8 @@ void RTFGenerator::endIndexList()
 }
 
 /*! start bullet list */
-void RTFGenerator::startItemList()  
-{ 
+void RTFGenerator::startItemList()
+{
   DBG_RTF(t << "{\\comment (startItemList level=" << m_listLevel << ") }" << endl)
   t << "{";
   incrementIndentLevel();
@@ -1414,8 +1414,8 @@ void RTFGenerator::startItemList()
 }
 
 /*! end bullet list */
-void RTFGenerator::endItemList()    
-{ 
+void RTFGenerator::endItemList()
+{
   newParagraph();
   DBG_RTF(t << "{\\comment (endItemList level=" << m_listLevel << ")}" << endl)
   t << "}";
@@ -1425,7 +1425,7 @@ void RTFGenerator::endItemList()
 
 /*! start enumeration list */
 void RTFGenerator::startEnumList()  // starts an enumeration list
-{ 
+{
   DBG_RTF(t << "{\\comment (startEnumList)}" << endl)
   t << "{" << endl;
   incrementIndentLevel();
@@ -1439,7 +1439,7 @@ void RTFGenerator::startEnumList()  // starts an enumeration list
 
 /*! end enumeration list */
 void RTFGenerator::endEnumList()
-{ 
+{
   newParagraph();
   DBG_RTF(t << "{\\comment (endEnumList)}" << endl)
   t << "}";
@@ -1480,7 +1480,7 @@ void RTFGenerator::writeIndexItem(const char *ref,const char *fn,
   }
   else
   {
-    t << endl;	
+    t << endl;
   }
   newParagraph();
   m_omitParagraph=TRUE;
@@ -1501,7 +1501,7 @@ void RTFGenerator::startHtmlLink(const char *url)
     t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
     t << url;
     t << "\" }{}";
-    t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; 
+    t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
   }
   else
   {
@@ -1539,7 +1539,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
     t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
     t << formatBmkStr(f);
     t << "\" }{}";
-    t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; 
+    t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
 
     docify(name);
 
@@ -1547,7 +1547,7 @@ void RTFGenerator::writeStartAnnoItem(const char *,const char *f,
   }
   else
   {
-    docify(name); 
+    docify(name);
   }
   t << "} ";
 }
@@ -1563,13 +1563,13 @@ void RTFGenerator::writeEndAnnoItem(const char *name)
   }
   else
   {
-    t << endl;	
+    t << endl;
   }
   newParagraph();
 }
 
-void RTFGenerator::startIndexKey() 
-{ 
+void RTFGenerator::startIndexKey()
+{
   DBG_RTF(t << "{\\comment (startIndexKey)}" << endl)
   t << "{\\b ";
 }
@@ -1578,8 +1578,8 @@ void RTFGenerator::endIndexKey()
 {
 }
 
-void RTFGenerator::startIndexValue(bool hasBrief) 
-{ 
+void RTFGenerator::startIndexValue(bool hasBrief)
+{
   t << " ";
   if (hasBrief) t << "(";
 }
@@ -1597,13 +1597,13 @@ void RTFGenerator::endIndexValue(const char *name,bool hasBrief)
   }
   else
   {
-    t << endl;	
+    t << endl;
   }
   newParagraph();
 }
 
-void RTFGenerator::startSubsection() 
-{ 
+void RTFGenerator::startSubsection()
+{
   //beginRTFSubSection();
   t <<"\n";
   DBG_RTF(t << "{\\comment Begin SubSection}\n")
@@ -1611,13 +1611,13 @@ void RTFGenerator::startSubsection()
   t << Rtf_Style["Heading3"]->reference << "\n";
 }
 
-void RTFGenerator::endSubsection() 
+void RTFGenerator::endSubsection()
 {
   newParagraph();
   t << Rtf_Style_Reset << endl;
 }
 
-void RTFGenerator::startSubsubsection() 
+void RTFGenerator::startSubsubsection()
 {
   //beginRTFSubSubSection();
   t << "\n";
@@ -1626,11 +1626,11 @@ void RTFGenerator::startSubsubsection()
   t << Rtf_Style_Reset << Rtf_Style["Heading4"]->reference << "\n";
 }
 
-void RTFGenerator::endSubsubsection() 
-{ 
+void RTFGenerator::endSubsubsection()
+{
   newParagraph();
   t << "}" << endl;
-} 
+}
 
 
 //void RTFGenerator::writeClassLink(const char *,const char *,
@@ -1638,7 +1638,7 @@ void RTFGenerator::endSubsubsection()
 //{
 //  t << "{\\bf ";
 //  docify(name);
-//  t << "}"; 
+//  t << "}";
 //}
 
 void RTFGenerator::startTextLink(const char *f,const char *anchor)
@@ -1659,7 +1659,7 @@ void RTFGenerator::startTextLink(const char *f,const char *anchor)
     t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
     t << formatBmkStr(ref);
     t << "\" }{}";
-    t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; 
+    t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
   }
 }
 
@@ -1690,7 +1690,7 @@ void RTFGenerator::writeObjectLink(const char *ref, const char *f,
     t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
     t << formatBmkStr(refName);
     t << "\" }{}";
-    t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; 
+    t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
 
     docify(text);
 
@@ -1701,7 +1701,7 @@ void RTFGenerator::writeObjectLink(const char *ref, const char *f,
     startBold();
     docify(text);
     endBold();
-  } 
+  }
 }
 
 void RTFGenerator::startPageRef()
@@ -1746,7 +1746,7 @@ void RTFGenerator::writeCodeLink(const char *ref,const char *f,
     t << "{\\field {\\*\\fldinst { HYPERLINK  \\\\l \"";
     t << formatBmkStr(refName);
     t << "\" }{}";
-    t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; 
+    t << "}{\\fldrslt {\\cs37\\ul\\cf2 ";
 
     codify(name);
 
@@ -1762,7 +1762,7 @@ void RTFGenerator::startTitleHead(const char *)
 {
   DBG_RTF(t <<"{\\comment startTitleHead}" << endl)
 
-  //	beginRTFSection();
+  //    beginRTFSection();
   t << Rtf_Style_Reset << Rtf_Style["Heading2"]->reference << endl;
 }
 
@@ -1836,7 +1836,7 @@ void RTFGenerator::startMemberDoc(const char *clname,
   t << endl;
 }
 
-void RTFGenerator::endMemberDoc() 
+void RTFGenerator::endMemberDoc()
 {
   DBG_RTF(t << "{\\comment endMemberDoc}" << endl)
   t << "}" << endl;
@@ -1864,7 +1864,7 @@ void RTFGenerator::endDoxyAnchor(const char *fName,const char *anchor)
     ref+='_';
     ref+=anchor;
   }
-  
+
   t << "{\\bkmkstart ";
   t << formatBmkStr(ref);
   t << "}" << endl;
@@ -1911,36 +1911,36 @@ void RTFGenerator::endIndent()
 }
 
 
-void RTFGenerator::startDescription() 
-{ 
+void RTFGenerator::startDescription()
+{
   DBG_RTF(t << "{\\comment (startDescription)}"    << endl)
   t << "{" << endl;
   t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
 }
 
-void RTFGenerator::endDescription()   
-{ 
+void RTFGenerator::endDescription()
+{
   DBG_RTF(t << "{\\comment (endDescription)}"    << endl)
   t << "}";
   newParagraph();
 }
 
 void RTFGenerator::startDescItem()
-{ 
+{
   newParagraph();
   DBG_RTF(t << "{\\comment (startDescItem)}"    << endl)
   t << "{\\b ";
 }
 
 void RTFGenerator::endDescItem()
-{ 
+{
   DBG_RTF(t << "{\\comment (endDescItem)}"    << endl)
   t << "}" << endl;
   newParagraph();
 }
 
-void RTFGenerator::startMemberDescription() 
-{ 
+void RTFGenerator::startMemberDescription()
+{
   DBG_RTF(t << "{\\comment (startMemberDescription)}"    << endl)
   t << "{" << endl;
   incrementIndentLevel();
@@ -1949,7 +1949,7 @@ void RTFGenerator::startMemberDescription()
 }
 
 void RTFGenerator::endMemberDescription()
-{ 
+{
   DBG_RTF(t << "{\\comment (endMemberDescription)}"    << endl)
   endEmphasis();
   newParagraph();
@@ -1957,8 +1957,8 @@ void RTFGenerator::endMemberDescription()
   t << "\\par}" << endl;
 }
 
-void RTFGenerator::startDescList(SectionTypes)     
-{ 
+void RTFGenerator::startDescList(SectionTypes)
+{
   DBG_RTF(t << "{\\comment (startDescList)}"    << endl)
   t << "{"; // ends at endDescList
   t << "{"; // ends at endDescTitle
@@ -1966,8 +1966,8 @@ void RTFGenerator::startDescList(SectionTypes)
   newParagraph();
 }
 
-void RTFGenerator::endDescTitle()      
-{ 
+void RTFGenerator::endDescTitle()
+{
   DBG_RTF(t << "{\\comment (endDescTitle) }"    << endl)
   endBold();
   t << "}";
@@ -1981,7 +1981,7 @@ void RTFGenerator::writeDescItem()
   DBG_RTF(t << "{\\comment (writeDescItem) }"    << endl)
 }
 
-void RTFGenerator::endDescList()       
+void RTFGenerator::endDescList()
 {
   DBG_RTF(t << "{\\comment (endDescList)}"    << endl)
   newParagraph();
@@ -1990,8 +1990,8 @@ void RTFGenerator::endDescList()
   t << "}";
 }
 
-void RTFGenerator::startParamList(ParamListTypes)     
-{ 
+void RTFGenerator::startParamList(ParamListTypes)
+{
   DBG_RTF(t << "{\\comment (startParamList)}"    << endl)
   t << "{"; // ends at endParamList
   t << "{"; // ends at endDescTitle
@@ -1999,7 +1999,7 @@ void RTFGenerator::startParamList(ParamListTypes)
   newParagraph();
 }
 
-void RTFGenerator::endParamList()       
+void RTFGenerator::endParamList()
 {
   DBG_RTF(t << "{\\comment (endParamList)}"    << endl)
   newParagraph();
@@ -2076,6 +2076,14 @@ void RTFGenerator::writeSectionRefItem(const char *,const char *lab,
 //  writeSectionRef(name,lab,title);
 //}
 
+char* RTFGenerator::getMultiByte(int c)
+{
+    static char s[10];
+
+    sprintf(s,"\\'%X",c);
+    return s;
+}
+
 void RTFGenerator::docify(const char *str)
 {
   if (str)
@@ -2085,17 +2093,32 @@ void RTFGenerator::docify(const char *str)
     unsigned char pc='\0';
     while (*p)
     {
+      static bool MultiByte = FALSE;
       c=*p++;
-      switch(c)
+
+      if ( MultiByte )
+      {
+        t << getMultiByte( c );
+        MultiByte = FALSE;
+        continue;
+      }
+      if ( c >= 0x80 )
+      {
+        MultiByte = TRUE;
+        t << getMultiByte( c );
+        continue;
+      }
+
+      switch (c)
       {
         case '{':  t << "\\{";            break;
         case '}':  t << "\\}";            break;
-        case '\\': t << "\\\\";	          break;
-        default:   
-          { 
+        case '\\': t << "\\\\";           break;
+        default:
+          {
             // see if we can insert an hyphenation hint
             //if (isupper(c) && islower(pc) && !insideTabbing) t << "\\-";
-            t << (char)c;    
+            t << (char)c;
           }
       }
       pc = c;
@@ -2110,26 +2133,43 @@ void RTFGenerator::codify(const char *str)
   // nothing... add a "newParagraph()";
   //static char spaces[]="        ";
   if (str)
-  { 
-    const char *p=str;
-    char c;
+  {
+    const unsigned char *p=(const unsigned char *)str;
+    unsigned char c;
     int spacesToNextTabStop;
+
     while (*p)
     {
+      static bool MultiByte = FALSE;
+
       c=*p++;
+
+      if( MultiByte )
+      {
+        t << getMultiByte( c );
+        MultiByte = FALSE;
+        continue;
+      }
+      if( c >= 0x80 )
+      {
+        MultiByte = TRUE;
+        t << getMultiByte( c );
+        continue;
+      }
+
       switch(c)
       {
         case '\t':  spacesToNextTabStop = Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE"));
-                    t << spaces.left(spacesToNextTabStop); 
+                    t << spaces.left(spacesToNextTabStop);
                     col+=spacesToNextTabStop;
-                    break; 
+                    break;
         case '\n':  newParagraph();
                     t << '\n'; col=0;
                     break;
         case '{':   t << "\\{"; col++;          break;
         case '}':   t << "\\}"; col++;          break;
         case '\\':  t << "\\\\"; col++;         break;
-        default:    t << c;    col++;           break;
+        default:    t << (char)c; col++;           break;
       }
     }
   }
@@ -2169,20 +2209,20 @@ void RTFGenerator::writeFormula(const char *,const char *text)
   t << text;
 }
 
-void RTFGenerator::startMemberItem(int) 
-{ 
+void RTFGenerator::startMemberItem(int)
+{
   DBG_RTF(t <<"{\\comment startMemberItem }" << endl)
   t << Rtf_Style_Reset << Rtf_BList_DepthStyle() << endl; // set style to apropriate depth
 }
 
-void RTFGenerator::endMemberItem(bool) 
+void RTFGenerator::endMemberItem(bool)
 {
   DBG_RTF(t <<"{\\comment endMemberItem }" << endl)
   newParagraph();
 }
 
-void RTFGenerator::writeAnchor(const char *fileName,const char *name) 
-{ 
+void RTFGenerator::writeAnchor(const char *fileName,const char *name)
+{
   t << "{\\bkmkstart ";
   if (fileName) t << formatBmkStr(fileName);
   if (fileName && name) t << "_";
@@ -2198,8 +2238,8 @@ void RTFGenerator::WriteRTFReference(const char *label)
   t << " \\\\*MERGEFORMAT}{\\fldrslt pagenum}}";
 }
 
-void RTFGenerator::startCodeFragment() 
-{ 
+void RTFGenerator::startCodeFragment()
+{
   t << "{" << endl;
   newParagraph();
   t << Rtf_Style_Reset << Rtf_Code_DepthStyle();
@@ -2207,7 +2247,7 @@ void RTFGenerator::startCodeFragment()
 }
 
 void RTFGenerator::endCodeFragment()
-{ 
+{
   newParagraph();
   //styleStack.pop();
   //printf("RTFGenerator::endCodeFrament() top=%s\n",styleStack.top());
@@ -2217,30 +2257,30 @@ void RTFGenerator::endCodeFragment()
   m_omitParagraph = TRUE;
 }
 
-void RTFGenerator::writeNonBreakableSpace(int) 
+void RTFGenerator::writeNonBreakableSpace(int)
 {
   t << "\\~ ";
 }
 
 
-void RTFGenerator::startMemberList()  
+void RTFGenerator::startMemberList()
 {
   t << endl;
   DBG_RTF(t << "{\\comment (startMemberList) }"    << endl)
   t << "{" << endl;
 #ifdef DELETEDCODE
   if (!insideTabbing)
-    t << "\\begin{CompactItemize}" << endl; 
+    t << "\\begin{CompactItemize}" << endl;
 #endif
 }
 
-void RTFGenerator::endMemberList()    
+void RTFGenerator::endMemberList()
 {
   DBG_RTF(t << "{\\comment (endMemberList) }"    << endl)
   t << "}" << endl;
 #ifdef DELETEDCODE
   if (!insideTabbing)
-    t << "\\end{CompactItemize}"   << endl; 
+    t << "\\end{CompactItemize}"   << endl;
 #endif
 }
 
@@ -2266,7 +2306,7 @@ void RTFGenerator::startDotFile(const char *name,bool)
   int i;
   if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
   {
-    baseName=baseName.right(baseName.length()-i-1); 
+    baseName=baseName.right(baseName.length()-i-1);
   }
   QCString outName = Config_getString("RTF_OUTPUT")+
 #ifdef _WIN32
@@ -2290,16 +2330,16 @@ void RTFGenerator::endDotFile(bool)
   // not yet implemented
 }
 
-void RTFGenerator::startDescTable()  
-{ 
+void RTFGenerator::startDescTable()
+{
   DBG_RTF(t << "{\\comment (startDescTable) }"    << endl)
   //t << "{" << endl;
   //incrementIndentLevel();
   //t << Rtf_Style_Reset << Rtf_CList_DepthStyle();
 }
 
-void RTFGenerator::endDescTable()    
-{ 
+void RTFGenerator::endDescTable()
+{
   //decrementIndentLevel();
   DBG_RTF(t << "{\\comment (endDescTable)}"      << endl)
   //t << "}" << endl;
@@ -2322,13 +2362,13 @@ void RTFGenerator::endDescTableTitle()
   t << "  ";
 }
 
-void RTFGenerator::startDescTableData() 
+void RTFGenerator::startDescTableData()
 {
   DBG_RTF(t << "{\\comment (startDescTableData) }"    << endl)
   m_omitParagraph=FALSE;
 }
 
-void RTFGenerator::endDescTableData() 
+void RTFGenerator::endDescTableData()
 {
   DBG_RTF(t << "{\\comment (endDescTableData) }"    << endl)
   newParagraph();
@@ -2340,9 +2380,9 @@ void RTFGenerator::endDescTableData()
 void RTFGenerator::incrementIndentLevel()
 {
   m_listLevel++;
-  if (m_listLevel>indentLevels-1) 
+  if (m_listLevel>indentLevels-1)
   {
-    warn_cont("Warning: Maximum indent level (%d) exceeded while generating RTF output!\n",indentLevels); 
+    warn_cont("Warning: Maximum indent level (%d) exceeded while generating RTF output!\n",indentLevels);
     m_listLevel=indentLevels-1;
   }
 }
@@ -2350,7 +2390,7 @@ void RTFGenerator::incrementIndentLevel()
 void RTFGenerator::decrementIndentLevel()
 {
   m_listLevel--;
-  if (m_listLevel<0) 
+  if (m_listLevel<0)
   {
     warn_cont("Warning: Negative indent level while generating RTF output!\n");
     m_listLevel=0;
@@ -2371,14 +2411,14 @@ const char * RTFGenerator::Rtf_LCList_DepthStyle()
   return Rtf_Style[n]->reference;
 }
 
-// a style for list formatted as a "bullet" style 
+// a style for list formatted as a "bullet" style
 const char * RTFGenerator::Rtf_BList_DepthStyle()
 {
   QCString n=makeIndexName("ListBullet",m_listLevel);
   return Rtf_Style[n]->reference;
 }
 
-// a style for list formatted as a "enumeration" style 
+// a style for list formatted as a "enumeration" style
 const char * RTFGenerator::Rtf_EList_DepthStyle()
 {
   QCString n=makeIndexName("ListEnum",m_listLevel);
@@ -2563,7 +2603,7 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl
     return FALSE;
   }
 
-  const int maxLineLength = 10240; 
+  const int maxLineLength = 10240;
   static QCString lineBuf(maxLineLength);
 
   // scan until find end of header
@@ -2622,15 +2662,15 @@ static bool PreProcessFile(QDir &d,QCString &infName, QTextStream &t, bool bIncl
   return TRUE;
 }
 
-void RTFGenerator::startDotGraph() 
+void RTFGenerator::startDotGraph()
 {
 }
 
-void RTFGenerator::endDotGraph(DotClassGraph &g) 
+void RTFGenerator::endDotGraph(DotClassGraph &g)
 {
   newParagraph();
 
-  QCString fileName = 
+  QCString fileName =
     g.writeGraph(t,BITMAP,Config_getString("RTF_OUTPUT"),TRUE,FALSE);
 
   // display the file
@@ -2642,11 +2682,11 @@ void RTFGenerator::endDotGraph(DotClassGraph &g)
   t << "}" << endl;
 }
 
-void RTFGenerator::startInclDepGraph() 
+void RTFGenerator::startInclDepGraph()
 {
 }
 
-void RTFGenerator::endInclDepGraph(DotInclDepGraph &g) 
+void RTFGenerator::endInclDepGraph(DotInclDepGraph &g)
 {
   newParagraph();
 
@@ -2678,7 +2718,7 @@ void testRTFOutput(const char *name)
       {
         c=f.getch();
         if (c==-1) break;
-      } 
+      }
       else if (c=='{') // open bracket
       {
         bcount++;
@@ -2707,15 +2747,15 @@ err:
 
 /**
  * This is an API to a VERY brittle RTF preprocessor that combines nested
- * RTF files.  This version replaces the infile with the new file 
+ * RTF files.  This version replaces the infile with the new file
  */
 bool RTFGenerator::preProcessFileInplace(const char *path,const char *name)
 {
   QDir d(path);
   // store the original directory
-  if (!d.exists()) 
-  { 
-    err("Error: Output dir %s does not exist!\n",path); 
+  if (!d.exists())
+  {
+    err("Error: Output dir %s does not exist!\n",path);
     return FALSE;
   }
   QCString oldDir = convertToQCString(QDir::currentDirPath());
diff --git a/src/rtfgen.h b/src/rtfgen.h
index ceb22cc..ddf6e7b 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -112,8 +112,10 @@ class RTFGenerator : public OutputGenerator
     void writeAnchor(const char *fileName,const char *name);
     void startCodeFragment();
     void endCodeFragment();
-    void startPreFragment() { startCodeFragment(); }
-    void endPreFragment() { endCodeFragment(); }
+    void startPreFragment()      { startCodeFragment(); }
+    void endPreFragment()        { endCodeFragment(); }
+    void startVerbatimFragment() { startVerbatimFragment(); }
+    void endVerbatimFragment()   { endVerbatimFragment(); }
     void writeLineNumber(const char *,const char *,const char *,int l) { t << l << " "; }
     void startCodeLine() { col=0; }
     void endCodeLine() { lineBreak(); }
@@ -275,6 +277,7 @@ class RTFGenerator : public OutputGenerator
     void RtfwriteRuler_thick() { t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw75\\brsp20 \\adjustright \\par}" << endl; };
     void RtfwriteRuler_thin() { t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}" << endl; };
     void WriteRTFReference(const char *label);
+    char *getMultiByte(int c);
 };
 
 #endif
diff --git a/src/scanner.l b/src/scanner.l
index be548f3..27c94ec 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -868,6 +868,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  lineCount();
 					  BEGIN( CompoundName );
   					}
+<FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class{" |
 <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"class"{BN}+ { 
 					  isTypedef=((QCString)yytext).find("typedef")!=-1;
   					  current->section = Entry::CLASS_SEC;
@@ -886,6 +887,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  //  current->mtArgList = 0;
 					  //}
 					  lineCount() ;
+					  if (yytext[yyleng-1]=='{') unput('{');
 					  BEGIN( CompoundName ) ;
 					}
 <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"struct{" | 
@@ -907,6 +909,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  //  current->mtArgList = 0;
 					  //}
 					  lineCount() ;
+					  if (yytext[yyleng-1]=='{') unput('{');
 					  BEGIN( CompoundName ) ;
 					}
 <FindMembers>{B}*(("typedef"{BN}+)?)("volatile"{BN}+)?"union{" |
@@ -919,6 +922,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  current->startLine = yyLineNr;
 					  current->bodyLine  = yyLineNr;
 					  lineCount() ;
+					  if (yytext[yyleng-1]=='{') unput('{');
 					  BEGIN( CompoundName ) ;
 					}
 <FindMembers>{B}*(("typedef"{BN}+)?)"enum{" | 
@@ -931,6 +935,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 					  current->startLine = yyLineNr;
 					  current->bodyLine  = yyLineNr;
 					  lineCount() ;
+					  if (yytext[yyleng-1]=='{') unput('{');
 					  BEGIN( CompoundName ) ;
 					}
 <Operator>"("{BN}*")"{BN}*/"("		{
@@ -3622,6 +3627,7 @@ CHARLIT   (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
 							  insideFormula=FALSE;
 							  BEGIN(lastFormulaContext);
   							}
+<ReadFormulaLong>\n					{ formulaText+=*yytext; }
 <ReadFormulaLong,ReadFormulaShort>.                     { formulaText+=*yytext; }
 <ExampleDoc,PageDoc,ClassDocBrief,ClassDoc,ReadFormulaShort,ReadFormulaLong>{B}*"*/"  	{
   					  checkDocs();
diff --git a/src/translator_jp.h b/src/translator_jp.h
index 8f8df91..1d7fe84 100644
--- a/src/translator_jp.h
+++ b/src/translator_jp.h
@@ -1,37 +1,39 @@
 /******************************************************************************
- *
- * 
- *
- * Copyright (C) 1997-2000 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.
- *
- * Documents produced by Doxygen are derivative works derived from the
- * input used in their production; they are not affected by this license.
- *
- */
+*
+*
+*
+* Copyright (C) 1997-2000 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.
+*
+* Documents produced by Doxygen are derivative works derived from the
+* input used in their production; they are not affected by this license.
+*
+*/
 
 /*
- * translator_jp.h 
- * 
- * 1.2.5)  
- * First Translation 
- *      by Kenji Nagamatsu
- * 1.2.12) 
- * Update and Shift-Jis(_WIN32)
- *      by Ryunosuke Sato (30-Dec-2001)
- */
+* translator_jp.h
+*
+* 1.2.5)
+* First Translation
+*      by Kenji Nagamatsu
+* 1.2.12)
+* Update and Shift-Jis(_WIN32)
+*      by Ryunosuke Sato (30-Dec-2001)
+*/
 
 #ifndef TRANSLATOR_JP_H
 #define TRANSLATOR_JP_H
 
 class TranslatorJapanese : public Translator
 {
- private:
+private:
   /*! The decode() can change euc into sjis */
   inline QCString decode(const QCString & sInput)
     {
@@ -46,7 +48,7 @@ class TranslatorJapanese : public Translator
     { return "japanese"; }
     virtual QCString latexLanguageSupportCommand()
       {
-	return "";
+    return "";
       }
     /*! returns the name of the package that is included by LaTeX */
     virtual QCString idLanguageCharset()
@@ -58,7 +60,8 @@ class TranslatorJapanese : public Translator
 #endif
     }
 
-    /*! used in the compound documentation before a list of related functions. */
+    /*! used in the compound documentation before a list of related 
+functions. */
     virtual QCString trRelatedFunctions()
     { return decode("��Ϣ����ؿ�"); }
 
@@ -66,55 +69,57 @@ class TranslatorJapanese : public Translator
     virtual QCString trRelatedSubscript()
     { return decode("�ʤ����ϥ��дؿ��Ǥʤ����Ȥ����ա�"); }
 
-    /*! header that is put before the detailed description of files, classes and namespaces. */
+    /*! header that is put before the detailed description of files, classes 
+and namespaces. */
     virtual QCString trDetailedDescription()
     { return decode("����"); }
 
     /*! header that is put before the list of typedefs. */
     virtual QCString trMemberTypedefDocumentation()
-    { return decode("���з�����β���"); }
-    
+      { return decode("Typedef���Фβ���"); }
+
     /*! header that is put before the list of enumerations. */
     virtual QCString trMemberEnumerationDocumentation()
-    { return decode("������󷿤β���"); }
-    
+    { return decode("Enum���Фβ���"); }
+
     /*! header that is put before the list of member functions. */
     virtual QCString trMemberFunctionDocumentation()
-    { return decode("���дؿ��β���"); }
-    
+    { return decode("�ؿ����Фβ���"); }
+
     /*! header that is put before the list of member attributes. */
     virtual QCString trMemberDataDocumentation()
-    { 
+    {
       if( Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("��¤�Τβ���");
-	}
+    {
+      return decode("��¤�Τβ���");
+    }
       else
-	{
-	  return decode("���Фβ���"); 
-	}
+    {
+      return decode("���Фβ���");
+    }
     }
 
     /*! this is the text of a link put after brief descriptions. */
     virtual QCString trMore()
-    { return decode("���ܤ���..."); }
+    { return decode("[�ܺ�]"); }
 
     /*! put in the class documentation */
     virtual QCString trListOfAllMembers()
-    { return decode("���٤ƤΥ��а���"); }
+    { return decode("�����"); }
 
     /*! used as the title of the "list of all members" page of a class */
     virtual QCString trMemberList()
     { return decode("�����"); }
 
-    /*! this is the first part of a sentence that is followed by a class name */
+    /*! this is the first part of a sentence that is followed by a class 
+name */
     virtual QCString trThisIsTheListOfAllMembers()
-    { return decode("����������Фΰ����Ǥ���"); }
+    { return decode("����ϥ��Фΰ����Ǥ���"); }
 
     /*! this is the remainder of the sentence after the class name */
     virtual QCString trIncludingInheritedMembers()
     { return decode("�Ѿ����Ф⤹�٤ƴޤ�Ǥ��ޤ���"); }
-    
+
     /*! this is put at the author sections at the bottom of man pages.
      *  parameter s is name of the project name.
      */
@@ -127,73 +132,77 @@ class TranslatorJapanese : public Translator
 
     /*! put after an enum name in the list of all members */
     virtual QCString trEnumName()
-    { return decode("���"); }
-    
+    { return decode("Enum"); }
+
     /*! put after an enum value in the list of all members */
     virtual QCString trEnumValue()
-    { return decode("�����"); }
-    
+    { return decode("Enum��"); }
+
     /*! put after an undocumented member in the list of all members */
     virtual QCString trDefinedIn()
     { return decode("�����������Ƥ��ޤ���"); }
 
     // quick reference sections
 
-    /*! This is put above each page as a link to the list of all groups of 
+    /*! This is put above each page as a link to the list of all groups of
      *  compounds or files (see the \group command).
      */
     virtual QCString trModules()
     { return decode("�⥸�塼��"); }
-    
+
     /*! This is put above each page as a link to the class hierarchy */
     virtual QCString trClassHierarchy()
     { return decode("���饹����"); }
-    
-    /*! This is put above each page as a link to the list of annotated classes */
+
+    /*! This is put above each page as a link to the list of annotated 
+classes */
     virtual QCString trCompoundList()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤");
-	}
+    {
+      return decode("�ǡ�����¤");
+    }
       else
-	{
-	  return decode("����");
-	}
+    {
+      return decode("����");
+    }
     }
-    
-    /*! This is put above each page as a link to the list of documented files */
+
+    /*! This is put above each page as a link to the list of documented 
+files */
     virtual QCString trFileList()
     { return decode("�ե��������"); }
 
-    /*! This is put above each page as a link to the list of all verbatim headers */
+    /*! This is put above each page as a link to the list of all verbatim 
+headers */
     virtual QCString trHeaderFiles()
     { return decode("�إå��ե�����"); }
 
-    /*! This is put above each page as a link to all members of compounds. */
+    /*! This is put above each page as a link to all members of compounds. 
+*/
     virtual QCString trCompoundMembers()
-    { 
+    {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ����ե������");
-	}
+    {
+      return decode("�ǡ����ե������");
+    }
       else
-	{
-	  return decode("��������");
-	}
+    {
+      return decode("��������");
+    }
     }
 
     /*! This is put above each page as a link to all members of files. */
     virtual QCString trFileMembers()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("��������");
-	}
+    {
+      return decode("��������");
+    }
       else
-	{
-	  return decode("�ե��������"); 
-	}
+    {
+      return decode("�ե��������");
+    }
     }
     /*! This is put above each page as a link to all related pages. */
     virtual QCString trRelatedPages()
@@ -225,13 +234,13 @@ class TranslatorJapanese : public Translator
     virtual QCString trCompoundListDescription()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤�β���Ǥ���");
-	}
+    {
+      return decode("�ǡ�����¤�β���Ǥ���");
+    }
       else
-	{
-	  return decode("���饹����¤�Ρ������Ρ����󥿥ե������β���Ǥ���");
-	}
+    {
+      return decode("���饹����¤�Ρ������Ρ����󥿥ե������β���Ǥ���");
+    }
     }
 
     /*! This is an introduction to the page with all class members. */
@@ -239,15 +248,15 @@ class TranslatorJapanese : public Translator
     {
       QCString result=decode("�����");
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  result+=decode("�ե�����ɤΰ����Ǥ��줾��");
-	  if (extractAll) result+=decode("��°���Ƥ��빽¤��/������");
-	}
+    {
+      result+=decode("�ե�����ɤΰ����Ǥ��줾��");
+      if (extractAll) result+=decode("��°���Ƥ��빽¤��/������");
+    }
       else
-	{
-	  result+=decode("���饹���Фΰ����ǡ����줾��");
-	  if (extractAll) result+=decode("��°���Ƥ��륯�饹");
-	}
+    {
+      result+=decode("���饹���Фΰ����ǡ����줾��");
+      if (extractAll) result+=decode("��°���Ƥ��륯�饹");
+    }
       result+=decode("�β���إ�󥯤��Ƥ��ޤ���");
       return result;
     }
@@ -257,18 +266,20 @@ class TranslatorJapanese : public Translator
     {
       QCString result=decode("�����");
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  result+=decode("�ؿ����ѿ����ޥ�������󷿡��������");
-	}
+    {
+      result+=decode("�ؿ����ѿ����ޥ�����Typedef�����Enum�����");
+    }
       else
-	{
-	  result+=decode("�ե�������Ф�");
-	}
-      result+=decode("�����Ǥ������줾�줬°���Ƥ���ե�����β���إ�󥯤��Ƥ��ޤ���");
+    {
+      result+=decode("�ե�������Ф�");
+    }
+      
+result+=decode("�����Ǥ������줾�줬°���Ƥ���ե�����β���إ�󥯤��Ƥ��ޤ���");
       return result;
     }
 
-    /*! This is an introduction to the page with the list of all header files. */
+    /*! This is an introduction to the page with the list of all header 
+files. */
     virtual QCString trHeaderFilesDescription()
     { return decode("API��������إå��ե�����Ǥ���"); }
 
@@ -276,58 +287,60 @@ class TranslatorJapanese : public Translator
     virtual QCString trExamplesDescription()
     { return decode("���٤Ƥ���ΰ����Ǥ���"); }
 
-    /*! This is an introduction to the page with the list of related pages */
+    /*! This is an introduction to the page with the list of related pages 
+*/
     virtual QCString trRelatedPagesDescription()
     { return decode("��Ϣ�ڡ����ΰ����Ǥ���"); }
 
-    /*! This is an introduction to the page with the list of class/file groups */
+    /*! This is an introduction to the page with the list of class/file 
+groups */
     virtual QCString trModulesDescription()
     { return decode("���٤ƤΥ⥸�塼��ΰ����Ǥ���"); }
 
     /*! This sentences is used in the annotated class/file lists if no brief
-     * description is given. 
+     * description is given.
      */
     virtual QCString trNoDescriptionAvailable()
     { return decode("�ɥ�����Ȥ����Ҥ���Ƥ��ޤ���"); }
-    
-    // index titles (the project name is prepended for these) 
+
+    // index titles (the project name is prepended for these)
 
 
     /*! This is used in HTML as the title of index.html. */
     virtual QCString trDocumentation()
     { return decode("�ɥ������"); }
 
-    /*! This is used in LaTeX as the title of the chapter with the 
+    /*! This is used in LaTeX as the title of the chapter with the
      * index of all groups.
      */
     virtual QCString trModuleIndex()
     { return decode("�⥸�塼�����"); }
 
-    /*! This is used in LaTeX as the title of the chapter with the 
+    /*! This is used in LaTeX as the title of the chapter with the
      * class hierarchy.
      */
     virtual QCString trHierarchicalIndex()
     { return decode("���غ���"); }
 
-    /*! This is used in LaTeX as the title of the chapter with the 
+    /*! This is used in LaTeX as the title of the chapter with the
      * annotated compound index.
      */
     virtual QCString trCompoundIndex()
-    { 
+    {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤����"); 
-	}
+    {
+      return decode("�ǡ�����¤����");
+    }
       else
-	{
-	  return decode("��������");
-	}
+    {
+      return decode("��������");
+    }
     }
 
     /*! This is used in LaTeX as the title of the chapter with the
      * list of all files.
      */
-    virtual QCString trFileIndex() 
+    virtual QCString trFileIndex()
     { return decode("�ե��������"); }
 
     /*! This is used in LaTeX as the title of the chapter containing
@@ -342,13 +355,13 @@ class TranslatorJapanese : public Translator
     virtual QCString trClassDocumentation()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤�β���");
-	}
+    {
+      return decode("�ǡ�����¤�β���");
+    }
       else
-	{
-	  return decode("���饹�β���"); 
-	}
+    {
+      return decode("���饹�β���");
+    }
     }
 
     /*! This is used in LaTeX as the title of the chapter containing
@@ -361,7 +374,7 @@ class TranslatorJapanese : public Translator
      *  the documentation of all examples.
      */
     virtual QCString trExampleDocumentation()
-    { return decode("������"); }
+    { return decode("����"); }
 
     /*! This is used in LaTeX as the title of the chapter containing
      *  the documentation of all related pages.
@@ -372,115 +385,122 @@ class TranslatorJapanese : public Translator
     /*! This is used in LaTeX as the title of the document */
     virtual QCString trReferenceManual()
     { return decode("��ե���󥹥ޥ˥奢��"); }
-    
-    /*! This is used in the documentation of a file as a header before the 
+
+    /*! This is used in the documentation of a file as a header before the
      *  list of defines
      */
     virtual QCString trDefines()
     { return decode("�ޥ������"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of function prototypes
      */
     virtual QCString trFuncProtos()
     { return decode("�ؿ��ץ��ȥ�����"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of typedefs
      */
     virtual QCString trTypedefs()
-    { return decode("�����"); }
+    { return decode("Typedef���"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of enumerations
      */
     virtual QCString trEnumerations()
-    { return decode("���"); }
+    { return decode("Enum���"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of (global) functions
      */
     virtual QCString trFunctions()
     { return decode("�ؿ�"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of (global) variables
      */
     virtual QCString trVariables()
     { return decode("�ѿ�"); }
 
-    /*! This is used in the documentation of a file as a header before the 
+    /*! This is used in the documentation of a file as a header before the
      *  list of (global) variables
      */
     virtual QCString trEnumerationValues()
-      { return decode("�����"); }
+      { return decode("Enum��"); }
     /*! This is used in the documentation of a file before the list of
      *  documentation blocks for defines
      */
     virtual QCString trDefineDocumentation()
     { return decode("�ޥ�������β���"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for function prototypes
      */
     virtual QCString trFunctionPrototypeDocumentation()
     { return decode("�ؿ��ץ��ȥ����פβ���"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for typedefs
      */
     virtual QCString trTypedefDocumentation()
-    { return decode("��������"); }
+    { return decode("Typedef������"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for enumeration types
      */
     virtual QCString trEnumerationTypeDocumentation()
-    { return decode("��󷿤β���"); }
+    { return decode("Enum������"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for enumeration values
      */
     virtual QCString trEnumerationValueDocumentation()
-    { return decode("����ͤβ���"); }
+    { return decode("Enum�ͤβ���"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for functions
      */
     virtual QCString trFunctionDocumentation()
     { return decode("�ؿ��β���"); }
 
-    /*! This is used in the documentation of a file/namespace before the list 
+    /*! This is used in the documentation of a file/namespace before the 
+list
      *  of documentation blocks for variables
      */
     virtual QCString trVariableDocumentation()
     { return decode("�ѿ��β���"); }
 
-    /*! This is used in the documentation of a file/namespace/group before 
+    /*! This is used in the documentation of a file/namespace/group before
      *  the list of links to documented compounds
      */
     virtual QCString trCompounds()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤");
-	}
+    {
+      return decode("�ǡ�����¤");
+    }
       else
-	{
-	  return decode("����");
-	}
+    {
+      return decode("����");
+    }
     }
-    /*! This is used in the standard footer of each page and indicates when 
-     *  the page was generated 
+    /*! This is used in the standard footer of each page and indicates when
+     *  the page was generated
      */
     virtual QCString trGeneratedAt(const char *date,const char *projName)
-    { 
+    {
       QCString result;
       if (projName) result+=(QCString)projName+decode("������");
       result+=(QCString)date+decode("����������ޤ�����");
       return result;
     }
-    /*! This is part of the sentence used in the standard footer of each page.
+    /*! This is part of the sentence used in the standard footer of each 
+page.
      */
     virtual QCString trWrittenBy()
     {
@@ -490,16 +510,17 @@ class TranslatorJapanese : public Translator
     /*! this text is put before a class diagram */
     virtual QCString trClassDiagram(const char *clName)
     {
-      return (QCString)clName+decode("���Ф���Ѿ������");
+      return (QCString)clName+decode("�ηѾ������");
     }
-    
+
     /*! this text is generated when the \\internal command is used. */
     virtual QCString trForInternalUseOnly()
     { return decode("�������ѤΤߡ�"); }
 
     /*! this text is generated when the \\reimp command is used. */
     virtual QCString trReimplementedForInternalReasons()
-    { return decode("����Ū����ͳ�ˤ��Ƽ�������ޤ�������API�ˤϱƶ����ޤ���");
+    { return 
+decode("����Ū����ͳ�ˤ��Ƽ�������ޤ�������API�ˤϱƶ����ޤ���");
     }
 
     /*! this text is generated when the \\warning command is used. */
@@ -537,7 +558,7 @@ class TranslatorJapanese : public Translator
     /*! this text is generated when the \\exception command is used. */
     virtual QCString trExceptions()
     { return decode("�㳰"); }
-    
+
     /*! this text is used in the title page of a LaTeX document. */
     virtual QCString trGeneratedBy()
     { return decode(""); }
@@ -545,8 +566,9 @@ class TranslatorJapanese : public Translator
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990307
 //////////////////////////////////////////////////////////////////////////
-    
-    /*! used as the title of page containing all the index of all namespaces. */
+
+    /*! used as the title of page containing all the index of all 
+namespaces. */
     virtual QCString trNamespaceList()
     { return decode("̾�����ְ���"); }
 
@@ -562,18 +584,18 @@ class TranslatorJapanese : public Translator
      *  friends of a class
      */
     virtual QCString trFriends()
-    { return decode("�ե���"); }
-    
+    { return decode("Friend�ؿ�"); }
+
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990405
 //////////////////////////////////////////////////////////////////////////
-    
+
     /*! used in the class documentation as a header before the list of all
-     * related classes 
+     * related classes
      */
     virtual QCString trRelatedFunctionDocumentation()
-    { return decode("�ե��ɤȴ�Ϣ����ؿ��β���"); }
-    
+    { return decode("��Ϣ����ؿ��β���"); }
+
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990425
 //////////////////////////////////////////////////////////////////////////
@@ -590,7 +612,8 @@ class TranslatorJapanese : public Translator
         case ClassDef::Struct:     result+=decode("��¤�� "); break;
         case ClassDef::Union:      result+=decode("������ "); break;
         case ClassDef::Interface:  result+=decode("���󥿥ե�����"); break;
-        case ClassDef::Exception:  result+=decode("�㳰"); break; //TODO:fixme
+        case ClassDef::Exception:  result+=decode("�㳰"); break; 
+//TODO:fixme
       }
       if (isTemplate) result+=decode(" �ƥ�ץ졼��");
       result+=(QCString)clName+decode(" ���");
@@ -600,39 +623,40 @@ class TranslatorJapanese : public Translator
     /*! used as the title of the HTML page of a file */
     virtual QCString trFileReference(const char *fileName)
     {
-      QCString result=decode("")+(QCString)fileName+decode(" ���"); 
+      QCString result=decode("")+(QCString)fileName+decode(" ���");
       return result;
     }
 
     /*! used as the title of the HTML page of a namespace */
     virtual QCString trNamespaceReference(const char *namespaceName)
     {
-      QCString result=decode("̾������ ")+(QCString)namespaceName+decode(" �β���");
+      QCString result=decode("̾������ ")+(QCString)namespaceName+decode(" 
+���");
       return result;
     }
-    
+
     /* these are for the member sections of a class, struct or union */
     virtual QCString trPublicMembers()
-    { return decode("��������"); }
+    { return decode("Public �᥽�å�"); }
     virtual QCString trPublicSlots()
-    { return decode("���������å�"); }
+    { return decode("Public �����å�"); }
     virtual QCString trSignals()
     { return decode("�����ʥ�"); }
     virtual QCString trStaticPublicMembers()
-    { return decode("��Ū��������"); }
+    { return decode("Static Public �᥽�å�"); }
     virtual QCString trProtectedMembers()
-    { return decode("�ݸ����"); }
+    { return decode("Protected �᥽�å�"); }
     virtual QCString trProtectedSlots()
-    { return decode("�ݸ���å�"); }
+    { return decode("Protected �����å�"); }
     virtual QCString trStaticProtectedMembers()
-    { return decode("��Ū�ݸ����"); }
+    { return decode("Static Protected �᥽�å�"); }
     virtual QCString trPrivateMembers()
-    { return decode("���������"); }
+    { return decode("Private �᥽�å�"); }
     virtual QCString trPrivateSlots()
-    { return decode("����������å�"); }
+    { return decode("Private �����å�"); }
     virtual QCString trStaticPrivateMembers()
-    { return decode("��Ū���������"); }
-    
+    { return decode("Static Private �᥽�å�"); }
+
     /*! this function is used to produce a comma-separated list of items.
      *  use generateMarker(i) to indicate where item i should be put.
      */
@@ -641,23 +665,23 @@ class TranslatorJapanese : public Translator
       QCString result;
       int i;
       // the inherits list contain `numEntries' classes
-      for (i=0;i<numEntries;i++) 
+      for (i=0;i<numEntries;i++)
       {
         // use generateMarker to generate placeholders for the class links!
-        result+=generateMarker(i); // generate marker for entry i in the list 
+        result+=generateMarker(i); // generate marker for entry i in the list
                                    // (order is left to right)
-        
+
         if (i!=numEntries-1)  // not the last entry, so we need a separator
         {
-          if (i<numEntries-2) // not the fore last entry 
+          if (i<numEntries-2) // not the fore last entry
             result+=decode(", ");
           else                // the fore last entry
             result+=decode(", �� ");
         }
       }
-      return result; 
+      return result;
     }
-    
+
     /*! used in class documentation to produce a list of base classes,
      *  if class diagrams are disabled.
      */
@@ -674,7 +698,7 @@ class TranslatorJapanese : public Translator
       return trWriteList(numEntries)+decode("�˷Ѿ�����Ƥ��ޤ���");
     }
 
-    /*! used in member documentation blocks to produce a list of 
+    /*! used in member documentation blocks to produce a list of
      *  members that are hidden by this one.
      */
     virtual QCString trReimplementedFromList(int numEntries)
@@ -690,23 +714,24 @@ class TranslatorJapanese : public Translator
       return trWriteList(numEntries)+decode("�Ǻ��������Ƥ��ޤ���");
     }
 
-    /*! This is put above each page as a link to all members of namespaces. */
+    /*! This is put above each page as a link to all members of namespaces. 
+*/
     virtual QCString trNamespaceMembers()
     { return decode("̾�����֥���"); }
 
     /*! This is an introduction to the page with all namespace members */
     virtual QCString trNamespaceMemberDescription(bool extractAll)
-    { 
-	QCString result=decode("�����");
+    {
+    QCString result=decode("�����");
       result+=decode("̾�����֤ΰ����Ǥ������줾��");
-      if (extractAll) 
-	  result+=decode("��̾�����֤β���");
-      else 
-	  result+=decode("��°���Ƥ���̾������");
+      if (extractAll)
+      result+=decode("��̾�����֤β���");
+      else
+      result+=decode("��°���Ƥ���̾������");
       result+=decode("�إ�󥯤��Ƥ��ޤ���");
       return result;
     }
-    /*! This is used in LaTeX as the title of the chapter with the 
+    /*! This is used in LaTeX as the title of the chapter with the
      *  index of all namespaces.
      */
     virtual QCString trNamespaceIndex()
@@ -746,7 +771,8 @@ class TranslatorJapanese : public Translator
         case ClassDef::Struct:     result+=decode("��¤��"); break;
         case ClassDef::Union:      result+=decode("������"); break;
         case ClassDef::Interface:  result+=decode("���󥿥ե�����"); break;
-        case ClassDef::Exception:  result+=decode("�㳰"); break; //TODO:fixme
+        case ClassDef::Exception:  result+=decode("�㳰"); break; 
+//TODO:fixme
       }
       result+=decode("�β���ϼ��Υե����뤫����������ޤ���:");
       return result;
@@ -756,7 +782,7 @@ class TranslatorJapanese : public Translator
      * list.
      */
     virtual QCString trAlphabeticalList()
-    { return decode("����ե��٥åȽ����"); }
+    { return decode("����  [����ե��٥åȽ�]"); }
 
 //////////////////////////////////////////////////////////////////////////
 // new since 0.49-990901
@@ -771,7 +797,7 @@ class TranslatorJapanese : public Translator
     virtual QCString trMainPage()
     { return decode("�ᥤ��ڡ���"); }
 
-    /*! This is used in references to page that are put in the LaTeX 
+    /*! This is used in references to page that are put in the LaTeX
      *  documentation. It should be an abbreviation of the word page.
      */
     virtual QCString trPageAbbreviation()
@@ -815,19 +841,21 @@ class TranslatorJapanese : public Translator
     /*! this text is put before an include dependency graph */
     virtual QCString trInclDepGraph(const char *fName)
     {
-	return (QCString)fName+decode("�Υ��󥯥롼�ɰ�¸�ط���");
+    return (QCString)fName+decode("�Υ��󥯥롼�ɰ�¸�ط���");
     }
     /*! header that is put before the list of constructor/destructors. */
     virtual QCString trConstructorDocumentation()
     {
-      return decode("���󥹥ȥ饯���ȥǥ��ȥ饯���β���"); 
+      return decode("���󥹥ȥ饯���ȥǥ��ȥ饯���β���");
     }
-    /*! Used in the file documentation to point to the corresponding sources. */
+    /*! Used in the file documentation to point to the corresponding 
+sources. */
     virtual QCString trGotoSourceCode()
     {
       return decode("�����������ɤ򸫤롣");
     }
-    /*! Used in the file sources to point to the corresponding documentation. */
+    /*! Used in the file sources to point to the corresponding 
+documentation. */
     virtual QCString trGotoDocumentation()
     {
       return decode("����򸫤롣");
@@ -855,7 +883,7 @@ class TranslatorJapanese : public Translator
     /*! Text used the source code in the file index */
     virtual QCString trCode()
     {
-      return decode("������");
+      return decode("������������");
     }
     virtual QCString trGraphicalHierarchy()
     {
@@ -877,53 +905,53 @@ class TranslatorJapanese : public Translator
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.0
 //////////////////////////////////////////////////////////////////////////
-    
+
     virtual QCString trNote()
     {
       return decode("����");
     }
     virtual QCString trPublicTypes()
     {
-      return decode("������");
+      return decode("Public ��");
     }
     virtual QCString trPublicAttribs()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ����ե������");
-	}
+    {
+      return decode("�ǡ����ե������");
+    }
       else
-	{
-	  return decode("����°��");
-	}
+    {
+      return decode("Public °��");
+    }
     }
     virtual QCString trStaticPublicAttribs()
     {
-      return decode("��Ū����°��");
+      return decode("Static Public °��");
     }
     virtual QCString trProtectedTypes()
     {
-      return decode("�ݸ");
+      return decode("Protected ��");
     }
     virtual QCString trProtectedAttribs()
     {
-      return decode("�ݸ�°��");
+      return decode("Protected °��");
     }
     virtual QCString trStaticProtectedAttribs()
     {
-      return decode("��Ū�ݸ�°��");
+      return decode("Static Protected °��");
     }
     virtual QCString trPrivateTypes()
     {
-      return decode("�������");
+      return decode("Private ��");
     }
     virtual QCString trPrivateAttribs()
     {
-      return decode("�����°��");
+      return decode("Private °��");
     }
     virtual QCString trStaticPrivateAttribs()
     {
-      return decode("��Ū�����°��");
+      return decode("Static Private °��");
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -933,12 +961,12 @@ class TranslatorJapanese : public Translator
     /*! Used as a marker that is put before a todo item */
     virtual QCString trTodo()
     {
-      return decode("TODO");
+      return decode("Todo");
     }
     /*! Used as the header of the todo list */
     virtual QCString trTodoList()
     {
-      return decode("TODO����");
+      return decode("Todo����");
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -959,14 +987,14 @@ class TranslatorJapanese : public Translator
     }
     virtual QCString trInclByDepGraph()
     {
-	return decode("���Υ���դϡ��ɤΥե����뤫��ľ�ܡ�����Ū��"
+    return decode("���Υ���դϡ��ɤΥե����뤫��ľ��/����Ū��"
              "���󥯥롼�ɤ���Ƥ��뤫�򼨤��Ƥ��ޤ���");
     }
     virtual QCString trSince()
     {
       return decode("����");
     }
-    
+
 //////////////////////////////////////////////////////////////////////////
 // new since 1.1.5
 //////////////////////////////////////////////////////////////////////////
@@ -979,8 +1007,9 @@ class TranslatorJapanese : public Translator
     /*! page explaining how the dot graph's should be interpreted */
     virtual QCString trLegendDocs()
     {
-      return 
-        decode("���Υڡ����Ǥϡ�doxygen ���������줿����դ�ɤΤ褦�ˤߤ���褤����"
+      return
+        decode("���Υڡ����Ǥϡ�doxygen 
+���������줿����դ�ɤΤ褦�ˤߤ���褤����"
         "�������ޤ���<p>\n"
         "�������ͤ��Ƥߤޤ���\n"
         "\\code\n"
@@ -1008,19 +1037,23 @@ class TranslatorJapanese : public Translator
         "    Used *m_usedClass;\n"
         "};\n"
         "\\endcode\n"
-        "����ե�������ǡ����� \\c MAX_DOT_GRAPH_HEIGHT �� 200 �˥��åȤ��줿"
+        "����ե�������ǡ����� \\c MAX_DOT_GRAPH_HEIGHT �� 200 
+�˥��åȤ��줿"
         "��硢���Τ褦�ʥ���դȤʤ�ޤ���"
-        "<p><center><img src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
+        "<p><center><img 
+src=\"graph_legend."+Config_getEnum("DOT_IMAGE_FORMAT")+"\"></center>\n"
         "<p>\n"
         "��Υ������Υܥå����ˤϼ��Τ褦�ʰ�̣������ޤ���\n"
         "<ul>\n"
-        "<li>�����ɤ�Ĥ֤��줿�ܥå����ϡ����Υ���դ��б����빽¤�Τ䥯�饹��"
+        
+"<li>�����ɤ�Ĥ֤��줿�ܥå����ϡ����Υ���դ��б����빽¤�Τ䥯�饹��"
         "ɽ���ޤ���\n"
         "<li>���ȤΥܥå����ϥɥ�����Ȥ����빽¤�Τ䥯�饹��ɽ���ޤ���\n"
-        "<li>�������ȤΥܥå����ϥɥ�����Ȥ��ʤ���¤�Τ䥯�饹��ɽ���ޤ���\n"
+        
+"<li>�������ȤΥܥå����ϥɥ�����Ȥ��ʤ���¤�Τ䥯�饹��ɽ���ޤ���\n"
         "<li>���ȤΥܥå����ϥɥ�����Ȥ����빽¤�Τ䥯�饹��ɽ���ޤ�����"
-	  "���ꤵ�줿�������˼��ޤ�ʤ�����˷Ѿ�����޴ط��򤹤٤ƿ޼�����"
-	  "���Ȥ��Ǥ��ʤ��ä����Ȥ򼨤��ޤ���"
+      "���ꤵ�줿�������˼��ޤ�ʤ�����˷Ѿ�����޴ط��򤹤٤ƿ޼�����"
+      "���Ȥ��Ǥ��ʤ��ä����Ȥ򼨤��ޤ���"
         "</ul>\n"
         "����ˤϼ��Τ褦�ʰ�̣������ޤ���\n"
         "<ul>\n"
@@ -1028,8 +1061,8 @@ class TranslatorJapanese : public Translator
         "<li>�Ф������ protected �Ѿ��ط��򼨤��ޤ���\n"
         "<li>�֤������ private �Ѿ��ط��򼨤��ޤ���\n"
         "<li>�����������ϡ����Υ��饹��¾�Υ��饹�˴ޤޤ�Ƥ����ꡢ"
-	  "���Ѥ���Ƥ��뤳�Ȥ򼨤��ޤ����ޤ���������ؤ��Ƥ��륯�饹�乽¤�Τ�"
-	  "�ɤ��ѿ��ǥ��������Ǥ��뤫������Υ�٥�Ȥ��Ƽ����Ƥ��ޤ���\n"
+      "���Ѥ���Ƥ��뤳�Ȥ򼨤��ޤ����ޤ���������ؤ��Ƥ��륯�饹�乽¤�Τ�"
+      "�ɤ��ѿ��ǥ��������Ǥ��뤫������Υ�٥�Ȥ��Ƽ����Ƥ��ޤ���\n"
         "</ul>\n");
     }
     /*! text for the link to the legend page */
@@ -1037,11 +1070,11 @@ class TranslatorJapanese : public Translator
     {
       return decode("����");
     }
-    
+
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.0
 //////////////////////////////////////////////////////////////////////////
-    
+
     /*! Used as a marker that is put before a test item */
     virtual QCString trTest()
     {
@@ -1060,7 +1093,7 @@ class TranslatorJapanese : public Translator
     /*! Used as a section header for KDE-2 IDL methods */
     virtual QCString trDCOPMethods()
     {
-      return decode("DCOP�᥽�å�");
+      return decode("DCOP �᥽�å�");
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1086,19 +1119,19 @@ class TranslatorJapanese : public Translator
     /*! Used for Java interfaces in the summary section of Java packages */
     virtual QCString trInterfaces()
     {
-      return decode("���󥿡��ե�����");
+      return decode("���󥿥ե�����");
     }
     /*! Used for Java classes in the summary section of Java packages */
     virtual QCString trClasses()
     {
       if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
-	{
-	  return decode("�ǡ�����¤");
-	}
+    {
+      return decode("�ǡ�����¤");
+    }
       else
-	{
-	  return decode("���饹");
-	}
+    {
+      return decode("���饹");
+    }
     }
     /*! Used as the title of a Java package */
     virtual QCString trPackage(const char *name)
@@ -1135,7 +1168,7 @@ class TranslatorJapanese : public Translator
 //////////////////////////////////////////////////////////////////////////
 // new since 1.2.5
 //////////////////////////////////////////////////////////////////////////
-    
+
     /*! Used as a marker that is put before a \\bug item */
     virtual QCString trBug()
     {
@@ -1151,9 +1184,10 @@ class TranslatorJapanese : public Translator
 // new since 1.2.6
 //////////////////////////////////////////////////////////////////////////
 
-    /*! Used as ansicpg for RTF file 
-     * 
-     * The following table shows the correlation of Charset name, Charset Value and 
+    /*! Used as ansicpg for RTF file
+     *
+     * The following table shows the correlation of Charset name, Charset 
+Value and
      * <pre>
      * Codepage number:
      * Charset Name       Charset Value(hex)  Codepage number
@@ -1174,15 +1208,15 @@ class TranslatorJapanese : public Translator
      * GB2313_CHARSET          134 (x86)             936
      * CHINESEBIG5_CHARSET     136 (x88)             950
      * </pre>
-     * 
+     *
      */
     virtual QCString trRTFansicp()
     {
       return "932";
     }
-    
 
-    /*! Used as ansicpg for RTF fcharset 
+
+    /*! Used as ansicpg for RTF fcharset
      *  \see trRTFansicp() for a table of possible values.
      */
     virtual QCString trRTFCharSet()
@@ -1195,97 +1229,97 @@ class TranslatorJapanese : public Translator
     {
       return decode("����");
     }
-   
+
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trClass(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("���饹"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trFile(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("�ե�����"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trNamespace(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("̾������"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trGroup(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("���롼��"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trPage(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("�ڡ���"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trMember(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("����"));
-      return result; 
+      return result;
     }
-   
+
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trField(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("�ե������"));
-      return result; 
+      return result;
     }
 
     /*! This is used for translation of the word that will possibly
-     *  be followed by a single name or by a list of names 
+     *  be followed by a single name or by a list of names
      *  of the category.
      */
     virtual QCString trGlobal(bool first_capital, bool singular)
-    { 
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("��������"));
@@ -1299,11 +1333,11 @@ class TranslatorJapanese : public Translator
     /*! This text is generated when the \\author command is used and
      *  for the author section in man pages. */
     virtual QCString trAuthor(bool first_capital, bool singular)
-    {                                                                         
+    {
       first_capital = first_capital;
       singular = singular;
       QCString result(decode("���"));
-      return result; 
+      return result;
     }
 
 //////////////////////////////////////////////////////////////////////////
@@ -1321,7 +1355,7 @@ class TranslatorJapanese : public Translator
 // new since 1.2.13
 //////////////////////////////////////////////////////////////////////////
 
-    /*! used in member documentation blocks to produce a list of 
+    /*! used in member documentation blocks to produce a list of
      *  members that are implemented by this one.
      */
     virtual QCString trImplementedFromList(int numEntries)
@@ -1334,8 +1368,9 @@ class TranslatorJapanese : public Translator
      */
     virtual QCString trImplementedInList(int numEntries)
     {
-      return trWriteList(numEntries)+decode("�˼�������Ƥ��ޤ�")+".";
+      return trWriteList(numEntries)+decode("�Ǽ�������Ƥ��ޤ�")+".";
     }
 
 };
 #endif
+
diff --git a/src/translator_si.h b/src/translator_si.h
index 9e7ccdf..cef09f6 100644
--- a/src/translator_si.h
+++ b/src/translator_si.h
@@ -21,7 +21,7 @@
 #define TRANSLATOR_SI_H
 
 
-class TranslatorSlovene : public TranslatorAdapter_1_2_13
+class TranslatorSlovene : public Translator
 {
   public:
     QCString idLanguage()
@@ -991,6 +991,26 @@ class TranslatorSlovene : public TranslatorAdapter_1_2_13
     {
       return "Reference";
     }
+//////////////////////////////////////////////////////////////////////////
+// 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 "Implementira "+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 "Implementirano v "+trWriteList(numEntries)+".";
+    }
+
 };
 
 #endif
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index ad3cd72..691ae13 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -343,12 +343,23 @@ class XMLGenerator : public OutputDocInterface
     { 
       XML_DB(("(startPreFragment)\n"));
       startParMode();
-      m_t << "<programlisting>";
+      m_t << "<preformatted>";
     }
     void endPreFragment()      
     { 
       XML_DB(("(endPreFragment)\n"));
-      m_t << "</programlisting>"; 
+      m_t << "</preformatted>"; 
+    }
+    void startVerbatimFragment()    
+    { 
+      XML_DB(("(startVerbatimFragment)\n"));
+      startParMode();
+      m_t << "<preformatted>";
+    }
+    void endVerbatimFragment()      
+    { 
+      XML_DB(("(endVerbatimFragment)\n"));
+      m_t << "</preformatted>"; 
     }
     void writeRuler()          
     { 
@@ -616,20 +627,21 @@ class XMLGenerator : public OutputDocInterface
       startParMode();
       m_t << "<table cols=\"" << cols << "\">\n";
     }
-    void endTable(bool) 
+    void endTable(bool hasCaption) 
     {
       XML_DB(("endTable\n"));
-      m_t << "</row>\n</table>";
+      if (!hasCaption) m_t << "</row>\n";
+      m_t << "</table>";
     }
     void startCaption()
     {
       XML_DB(("startCaption"));
-      m_t << "<caption>";
+      m_t << "</row><caption>";
     }
     void endCaption()
     {
       XML_DB(("encCaption"));
-      m_t << "</caption";
+      m_t << "</caption>";
     }
     void nextTableRow() 
     {
@@ -639,7 +651,7 @@ class XMLGenerator : public OutputDocInterface
       // we need manually add a para here because cells are
       // parsed before the table is generated, and thus
       // are already parsed as if they are inside a paragraph.
-      m_t << "<para>";
+      //m_t << "<para>";
     }
     void endTableRow() 
     {
diff --git a/tmake/lib/osf1-cxx/tmake.conf b/tmake/lib/osf1-cxx/tmake.conf
index 3d2de95..44a8493 100755
--- a/tmake/lib/osf1-cxx/tmake.conf
+++ b/tmake/lib/osf1-cxx/tmake.conf
@@ -8,7 +8,7 @@ TEMPLATE		= app
 CONFIG			= qt warn_on release
 
 TMAKE_CC		= cxx
-TMAKE_CFLAGS		= -x cxx -w -D_POSIX_SOURCE -D_OSF_SOURCE -D_AES_SOURCE
+TMAKE_CFLAGS		= -x cc -w -D_POSIX_SOURCE -D_OSF_SOURCE -D_AES_SOURCE
 TMAKE_CFLAGS_WARN_ON	=
 TMAKE_CFLAGS_WARN_OFF	=
 TMAKE_CFLAGS_RELEASE	= -O2
-- 
cgit v0.12