Blame src/layout.cpp

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#include "layout.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
#include "language.h"
Packit 1c1d7e
#include "vhdldocgen.h"
Packit 1c1d7e
#include "util.h"
Packit 1c1d7e
#include "doxygen.h"
Packit 1c1d7e
#include "version.h"
Packit 1c1d7e
#include "config.h"
Packit 1c1d7e
Packit 1c1d7e
#include <assert.h>
Packit 1c1d7e
#include <qxml.h>
Packit 1c1d7e
#include <qfile.h>
Packit 1c1d7e
#include <qstring.h>
Packit 1c1d7e
#include <qfileinfo.h>
Packit 1c1d7e
#include <qtextstream.h>
Packit 1c1d7e
Packit 1c1d7e
static const char layout_default[] =
Packit 1c1d7e
#include "layout_default.xml.h"
Packit 1c1d7e
;
Packit 1c1d7e
Packit 1c1d7e
#define ADD_OPTION(langId,text) "|"+QCString().setNum(langId)+"="+text
Packit 1c1d7e
Packit 1c1d7e
#define COMPILE_FOR_1_OPTION(def,langId1,text1) \
Packit 1c1d7e
  def+ADD_OPTION(langId1,text1)
Packit 1c1d7e
Packit 1c1d7e
#define COMPILE_FOR_2_OPTIONS(def,langId1,text1,langId2,text2) \
Packit 1c1d7e
  COMPILE_FOR_1_OPTION(def,langId1,text1)+ADD_OPTION(langId2,text2)
Packit 1c1d7e
Packit 1c1d7e
#define COMPILE_FOR_3_OPTIONS(def,langId1,text1,langId2,text2,langId3,text3) \
Packit 1c1d7e
  COMPILE_FOR_2_OPTIONS(def,langId1,text1,langId2,text2)+ADD_OPTION(langId3,text3)
Packit 1c1d7e
Packit 1c1d7e
#define COMPILE_FOR_4_OPTIONS(def,langId1,text1,langId2,text2,langId3,text3,langId4,text4) \
Packit 1c1d7e
  COMPILE_FOR_3_OPTIONS(def,langId1,text1,langId2,text2,langId3,text3)+ADD_OPTION(langId4,text4)
Packit 1c1d7e
Packit 1c1d7e
static bool elemIsVisible(const QXmlAttributes &attrib,bool defVal=TRUE)
Packit 1c1d7e
{
Packit 1c1d7e
  QCString visible = attrib.value("visible").utf8();
Packit 1c1d7e
  if (visible.isEmpty()) return defVal;
Packit 1c1d7e
  if (visible.at(0)=='$' && visible.length()>1)
Packit 1c1d7e
  {
Packit 1c1d7e
    QCString id = visible.mid(1);
Packit 1c1d7e
    const ConfigValues::Info *opt = ConfigValues::instance().get(id);
Packit 1c1d7e
    if (opt && opt->type==ConfigValues::Info::Bool)
Packit 1c1d7e
    {
Packit 1c1d7e
      return ConfigValues::instance().*((ConfigValues::InfoBool*)opt)->item;
Packit 1c1d7e
    }
Packit 1c1d7e
    else if (!opt)
Packit 1c1d7e
    {
Packit 1c1d7e
      err("found unsupported value %s for visible attribute in layout file\n",
Packit 1c1d7e
          visible.data());
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return visible!="no" && visible!="0";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
LayoutNavEntry *LayoutNavEntry::find(LayoutNavEntry::Kind kind,
Packit 1c1d7e
    const char *file) const
Packit 1c1d7e
{
Packit 1c1d7e
  LayoutNavEntry *result=0;
Packit 1c1d7e
  QListIterator<LayoutNavEntry> li(m_children);
Packit 1c1d7e
  LayoutNavEntry *entry;
Packit 1c1d7e
  for (li.toFirst();(entry=li.current());++li)
Packit 1c1d7e
  {
Packit 1c1d7e
    // depth first search, needed to find the entry furthest from the 
Packit 1c1d7e
    // root in case an entry is in the tree twice
Packit 1c1d7e
    result = entry->find(kind,file);
Packit 1c1d7e
    if (result) return result;
Packit 1c1d7e
    if (entry->kind()==kind && (file==0 || entry->baseFile()==file))
Packit 1c1d7e
    {
Packit 1c1d7e
      return entry;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return result;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString LayoutNavEntry::url() const
Packit 1c1d7e
{
Packit 1c1d7e
  QCString url = baseFile().stripWhiteSpace();
Packit 1c1d7e
  if ((kind()!=LayoutNavEntry::User && kind()!=LayoutNavEntry::UserGroup) || 
Packit 1c1d7e
      (kind()==LayoutNavEntry::UserGroup && url.left(9)=="usergroup"))
Packit 1c1d7e
  {
Packit 1c1d7e
    url+=Doxygen::htmlFileExtension;
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (url.left(5)=="@ref " || url.left(5)=="\\ref ")
Packit 1c1d7e
  {
Packit 1c1d7e
    Definition *d;
Packit 1c1d7e
    QCString anchor;
Packit 1c1d7e
    bool found=FALSE;
Packit 1c1d7e
    if (resolveLink(0,url.mid(5).stripWhiteSpace(),TRUE,&d,anchor))
Packit 1c1d7e
    {
Packit 1c1d7e
      if (d && d->isLinkable()) 
Packit 1c1d7e
      {
Packit 1c1d7e
        url=d->getOutputFileBase()+Doxygen::htmlFileExtension;
Packit 1c1d7e
        if (!anchor.isEmpty())
Packit 1c1d7e
        {
Packit 1c1d7e
          url+="#"+anchor;
Packit 1c1d7e
        }
Packit 1c1d7e
        found=TRUE;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    if (!found)
Packit 1c1d7e
    {
Packit 1c1d7e
      msg("explicit link request to '%s' in layout file '%s' could not be resolved\n",qPrint(url.mid(5)),qPrint(Config_getString(LAYOUT_FILE)));
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  //printf("LayoutNavEntry::url()=%s\n",url.data());
Packit 1c1d7e
  return url;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
class LayoutParser : public QXmlDefaultHandler
Packit 1c1d7e
{
Packit 1c1d7e
  private:
Packit 1c1d7e
    class StartElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        StartElementHandler(LayoutParser *parent, Handler h) 
Packit 1c1d7e
          : m_parent(parent), m_handler(h) {}
Packit 1c1d7e
        virtual ~StartElementHandler() {}
Packit 1c1d7e
        virtual void operator()(const QXmlAttributes &attrib) 
Packit 1c1d7e
        { 
Packit 1c1d7e
          (m_parent->*m_handler)(attrib); 
Packit 1c1d7e
        }
Packit 1c1d7e
      protected:
Packit 1c1d7e
        StartElementHandler() : m_parent(0), m_handler(0) {}
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
    class StartElementHandlerKind : public StartElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
Packit 1c1d7e
                                              const QXmlAttributes &attrib); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        StartElementHandlerKind(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h) 
Packit 1c1d7e
          : m_parent(parent), m_kind(k), m_handler(h) {}
Packit 1c1d7e
        void operator()(const QXmlAttributes &attrib) 
Packit 1c1d7e
        { 
Packit 1c1d7e
          (m_parent->*m_handler)(m_kind,attrib); 
Packit 1c1d7e
        }
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        LayoutDocEntry::Kind m_kind;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
    class StartElementHandlerSection : public StartElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(LayoutDocEntry::Kind kind,
Packit 1c1d7e
                                              const QXmlAttributes &attrib,
Packit 1c1d7e
                                              const QCString &title); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        StartElementHandlerSection(LayoutParser *parent, LayoutDocEntry::Kind k,Handler h,
Packit 1c1d7e
                                const QCString &title) 
Packit 1c1d7e
          : m_parent(parent), m_kind(k), m_handler(h), m_title(title) {}
Packit 1c1d7e
        void operator()(const QXmlAttributes &attrib) 
Packit 1c1d7e
        { 
Packit 1c1d7e
          (m_parent->*m_handler)(m_kind,attrib,m_title); 
Packit 1c1d7e
        }
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        LayoutDocEntry::Kind m_kind;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
        QCString m_title;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
    class StartElementHandlerMember : public StartElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(const QXmlAttributes &attrib,
Packit 1c1d7e
                                              MemberListType type,
Packit 1c1d7e
                                              const QCString &title,
Packit 1c1d7e
                                              const QCString &subtitle); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        StartElementHandlerMember(LayoutParser *parent, 
Packit 1c1d7e
                                  Handler h,
Packit 1c1d7e
                                  MemberListType type,
Packit 1c1d7e
                                  const QCString &tl,
Packit 1c1d7e
                                  const QCString &ss = QCString()
Packit 1c1d7e
                                 ) 
Packit 1c1d7e
          : m_parent(parent), m_handler(h), m_type(type),
Packit 1c1d7e
            m_title(tl), m_subscript(ss) {}
Packit 1c1d7e
        void operator()(const QXmlAttributes &attrib) 
Packit 1c1d7e
        { 
Packit 1c1d7e
          (m_parent->*m_handler)(attrib,m_type,m_title,m_subscript); 
Packit 1c1d7e
        }
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
        MemberListType m_type;
Packit 1c1d7e
        QCString m_title;
Packit 1c1d7e
        QCString m_subscript;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
    class StartElementHandlerNavEntry : public StartElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(LayoutNavEntry::Kind kind,
Packit 1c1d7e
                                              const QXmlAttributes &attrib,
Packit 1c1d7e
                                              const QCString &title); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        StartElementHandlerNavEntry(LayoutParser *parent,
Packit 1c1d7e
                               LayoutNavEntry::Kind kind, 
Packit 1c1d7e
                               Handler h,
Packit 1c1d7e
                               const QCString &tl
Packit 1c1d7e
                              ) 
Packit 1c1d7e
          : m_parent(parent), m_kind(kind), m_handler(h), m_title(tl) {}
Packit 1c1d7e
        void operator()(const QXmlAttributes &attrib) 
Packit 1c1d7e
        { 
Packit 1c1d7e
          (m_parent->*m_handler)(m_kind,attrib,m_title); 
Packit 1c1d7e
        }
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        LayoutNavEntry::Kind m_kind;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
        QCString m_title;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
    class EndElementHandler
Packit 1c1d7e
    {
Packit 1c1d7e
        typedef void (LayoutParser::*Handler)(); 
Packit 1c1d7e
      public:
Packit 1c1d7e
        EndElementHandler(LayoutParser *parent, Handler h) : m_parent(parent), m_handler(h) {}
Packit 1c1d7e
        void operator()() { (m_parent->*m_handler)(); }
Packit 1c1d7e
      private:
Packit 1c1d7e
        LayoutParser *m_parent;
Packit 1c1d7e
        Handler m_handler;
Packit 1c1d7e
    };
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
  public:
Packit 1c1d7e
    static LayoutParser &instance()
Packit 1c1d7e
    {
Packit 1c1d7e
      static LayoutParser *theInstance = new LayoutParser;
Packit 1c1d7e
      return *theInstance;
Packit 1c1d7e
    }
Packit 1c1d7e
    void init()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_sHandler.setAutoDelete(TRUE);
Packit 1c1d7e
      m_eHandler.setAutoDelete(TRUE);
Packit 1c1d7e
      m_part = -1; // invalid
Packit 1c1d7e
      m_rootNav = 0;
Packit 1c1d7e
Packit 1c1d7e
      //bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit 1c1d7e
      //bool vhdlOpt    = Config_getBool(OPTIMIZE_OUTPUT_VHDL);  
Packit 1c1d7e
      //bool javaOpt    = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit 1c1d7e
Packit 1c1d7e
      // start & end handlers
Packit 1c1d7e
      m_sHandler.insert("doxygenlayout", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startLayout));
Packit 1c1d7e
      m_eHandler.insert("doxygenlayout", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endLayout));
Packit 1c1d7e
Packit 1c1d7e
      // class layout handlers
Packit 1c1d7e
      m_sHandler.insert("navindex", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startNavIndex));
Packit 1c1d7e
      m_sHandler.insert("navindex/tab", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startNavEntry));
Packit 1c1d7e
      m_eHandler.insert("navindex/tab", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endNavEntry));
Packit 1c1d7e
      m_eHandler.insert("navindex", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endNavIndex));
Packit 1c1d7e
Packit 1c1d7e
      // class layout handlers
Packit 1c1d7e
      m_sHandler.insert("class", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startClass));
Packit 1c1d7e
      m_sHandler.insert("class/briefdescription", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/detaileddescription", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDetailedDescription()));
Packit 1c1d7e
      m_sHandler.insert("class/authorsection", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/includes", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::ClassIncludes,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/inheritancegraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::ClassInheritanceGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/collaborationgraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::ClassCollaborationGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/allmemberslink", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::ClassAllMembersLink,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/usedfiles", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::ClassUsedFiles,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/membergroups", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/nestedclasses", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::ClassNestedClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trCompounds(),
Packit 1c1d7e
                                           SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trDataTypes()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/services",
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_services,theTranslator->trServices()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/interfaces",
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_interfaces,theTranslator->trInterfaces()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publictypes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubTypes,theTranslator->trPublicTypes()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publicslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubSlots,theTranslator->trPublicSlots())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/signals", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_signals,theTranslator->trSignals())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publicmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubMethods,
Packit 1c1d7e
                                        COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                          theTranslator->trPublicMembers(),
Packit 1c1d7e
                                          SrcLangExt_ObjC,theTranslator->trInstanceMethods()
Packit 1c1d7e
                                        ))); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publicstaticmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubStaticMethods,
Packit 1c1d7e
                                        COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                          theTranslator->trStaticPublicMembers(),
Packit 1c1d7e
                                          SrcLangExt_ObjC,theTranslator->trClassMethods()
Packit 1c1d7e
                                        ))); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publicattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubAttribs,theTranslator->trPublicAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/publicstaticattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pubStaticAttribs,theTranslator->trStaticPublicAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedtypes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proTypes,theTranslator->trProtectedTypes())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proSlots,theTranslator->trProtectedSlots())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proMethods,theTranslator->trProtectedMembers())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedstaticmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proStaticMethods,theTranslator->trStaticProtectedMembers()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proAttribs,theTranslator->trProtectedAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/protectedstaticattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_proStaticAttribs,theTranslator->trStaticProtectedAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/packagetypes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pacTypes,theTranslator->trPackageTypes())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/packagemethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pacMethods,theTranslator->trPackageMembers())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/packagestaticmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pacStaticMethods,theTranslator->trStaticPackageMembers())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/packageattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pacAttribs,theTranslator->trPackageAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/packagestaticattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_pacStaticAttribs,theTranslator->trStaticPackageAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/properties", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_properties,theTranslator->trProperties())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/events", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_events,theTranslator->trEvents())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privatetypes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priTypes,theTranslator->trPrivateTypes())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privateslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priSlots,theTranslator->trPrivateSlots())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privatemethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priMethods,theTranslator->trPrivateMembers())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privatestaticmethods", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priStaticMethods,theTranslator->trStaticPrivateMembers())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privateattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priAttribs,theTranslator->trPrivateAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/privatestaticattributes", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_priStaticAttribs,theTranslator->trStaticPrivateAttribs())); 
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/friends", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_friends,theTranslator->trFriends()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdecl/related", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_related,theTranslator->trRelatedFunctions(),
Packit 1c1d7e
                                        theTranslator->trRelatedSubscript())); 
Packit 1c1d7e
      m_eHandler.insert("class/memberdecl", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDef));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/inlineclasses", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::ClassInlineClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                           theTranslator->trClassDocumentation(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trTypeDocumentation()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_typedefMembers,theTranslator->trMemberTypedefDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_enumMembers,theTranslator->trMemberEnumerationDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/services",
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_serviceMembers,theTranslator->trInterfaces()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/interfaces",
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_interfaceMembers,theTranslator->trInterfaces()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/constructors", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_constructors,theTranslator->trConstructorDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_functionMembers,
Packit 1c1d7e
                                        COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                          theTranslator->trMemberFunctionDocumentation(),
Packit 1c1d7e
                                          SrcLangExt_ObjC,theTranslator->trMethodDocumentation(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trMemberFunctionDocumentationFortran()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/related", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_relatedMembers,theTranslator->trRelatedFunctionDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_variableMembers,theTranslator->trMemberDataDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/properties", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_propertyMembers,theTranslator->trPropertyDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("class/memberdef/events", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_eventMembers,theTranslator->trEventDocumentation()));
Packit 1c1d7e
      m_eHandler.insert("class/memberdef", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDef));
Packit 1c1d7e
      m_eHandler.insert("class", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endClass));
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
      // namespace layout handlers
Packit 1c1d7e
      m_sHandler.insert("namespace", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startNamespace));
Packit 1c1d7e
      m_sHandler.insert("namespace/briefdescription", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("namespace/detaileddescription", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDetailedDescription()));
Packit 1c1d7e
      m_sHandler.insert("namespace/authorsection", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/nestednamespaces", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedNamespaces,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_4_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trNamespaces(),
Packit 1c1d7e
                                           SrcLangExt_Java,theTranslator->trPackages(),
Packit 1c1d7e
                                           SrcLangExt_VHDL,theTranslator->trPackages(),
Packit 1c1d7e
                                           SrcLangExt_IDL,theTranslator->trModules(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trModules()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/constantgroups",
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::NamespaceNestedConstantGroups,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trConstantGroups()));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/classes", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::NamespaceClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trCompounds(),
Packit 1c1d7e
                                           SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trDataTypes()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/membergroups", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decTypedefMembers,theTranslator->trTypedefs()));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decEnumMembers,theTranslator->trEnumerations()));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                          theTranslator->trFunctions(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprograms(),
Packit 1c1d7e
                                          SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdecl/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decVarMembers,theTranslator->trVariables()));
Packit 1c1d7e
      m_eHandler.insert("namespace/memberdecl", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDef));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef/inlineclasses", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::NamespaceInlineClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                           theTranslator->trClassDocumentation(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trTypeDocumentation()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                          theTranslator->trFunctionDocumentation(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprogramDocumentation()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("namespace/memberdef/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docVarMembers,theTranslator->trVariableDocumentation()));
Packit 1c1d7e
      m_eHandler.insert("namespace/memberdef", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDef));
Packit 1c1d7e
      m_eHandler.insert("namespace", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endNamespace));
Packit 1c1d7e
Packit 1c1d7e
      // file layout handlers
Packit 1c1d7e
      m_sHandler.insert("file", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startFile));
Packit 1c1d7e
      m_sHandler.insert("file/briefdescription", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/detaileddescription", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDetailedDescription()));
Packit 1c1d7e
      m_sHandler.insert("file/authorsection", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/includes", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::FileIncludes,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/includegraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::FileIncludeGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/includedbygraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::FileIncludedByGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/sourcelink", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::FileSourceLink,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/membergroups", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/classes", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::FileClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trCompounds(),
Packit 1c1d7e
                                           SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trDataTypes()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/namespaces", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::FileNamespaces,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_3_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trNamespaces(),
Packit 1c1d7e
                                           SrcLangExt_Java,theTranslator->trPackages(),
Packit 1c1d7e
                                           SrcLangExt_IDL,theTranslator->trModules(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trModules()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/constantgroups",
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::FileConstantGroups,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trConstantGroups()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/defines", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decDefineMembers,theTranslator->trDefines()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decTypedefMembers,theTranslator->trTypedefs()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decEnumMembers,theTranslator->trEnumerations()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                          theTranslator->trFunctions(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprograms(),
Packit 1c1d7e
                                          SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("file/memberdecl/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decVarMembers,theTranslator->trVariables()));
Packit 1c1d7e
Packit 1c1d7e
      m_eHandler.insert("file/memberdecl", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDef));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/inlineclasses", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::FileInlineClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                           theTranslator->trClassDocumentation(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trTypeDocumentation()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/defines", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docDefineMembers,theTranslator->trDefineDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docEnumMembers,
Packit 1c1d7e
                                        theTranslator->trEnumerationTypeDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                          theTranslator->trFunctionDocumentation(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprogramDocumentation()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("file/memberdef/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docVarMembers,theTranslator->trVariableDocumentation()));
Packit 1c1d7e
      m_eHandler.insert("file/memberdef", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDef));
Packit 1c1d7e
      m_eHandler.insert("file", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endFile));
Packit 1c1d7e
Packit 1c1d7e
      // group layout handlers
Packit 1c1d7e
      m_sHandler.insert("group", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startGroup));
Packit 1c1d7e
      m_sHandler.insert("group/briefdescription", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("group/detaileddescription", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDetailedDescription()));
Packit 1c1d7e
      m_sHandler.insert("group/authorsection", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::AuthorSection,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("group/groupgraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::GroupGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/membergroups", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::MemberGroups,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/classes", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trCompounds(),
Packit 1c1d7e
                                           SrcLangExt_VHDL,VhdlDocGen::trVhdlType(VhdlDocGen::ENTITY,FALSE),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trDataTypes()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/namespaces", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupNamespaces,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                           theTranslator->trNamespaces(),
Packit 1c1d7e
                                           SrcLangExt_Java,theTranslator->trPackages(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trModules()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/dirs", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupDirs,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDirectories()
Packit 1c1d7e
                                         ));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/nestedgroups", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupNestedGroups,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trModules()
Packit 1c1d7e
                                         ));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/files", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupFiles,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trFile(TRUE,FALSE)
Packit 1c1d7e
                                         ));
Packit 1c1d7e
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/defines", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decDefineMembers,theTranslator->trDefines()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decTypedefMembers,theTranslator->trTypedefs()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decEnumMembers,theTranslator->trEnumerations()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/enumvalues", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decEnumValMembers,theTranslator->trEnumerationValues()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_2_OPTIONS(
Packit 1c1d7e
                                          theTranslator->trFunctions(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprograms(),
Packit 1c1d7e
                                          SrcLangExt_VHDL,VhdlDocGen::trFunctionAndProc()
Packit 1c1d7e
                                        )));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decVarMembers,theTranslator->trVariables()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/signals", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decSignalMembers,theTranslator->trSignals()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/publicslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decPubSlotMembers,theTranslator->trPublicSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/protectedslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decProSlotMembers,theTranslator->trProtectedSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/privateslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decPriSlotMembers,theTranslator->trPrivateSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/events", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decEventMembers,theTranslator->trEvents()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/properties", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decPropMembers,theTranslator->trProperties()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdecl/friends", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDeclEntry,
Packit 1c1d7e
                                        MemberListType_decFriendMembers,theTranslator->trFriends()));
Packit 1c1d7e
      m_eHandler.insert("group/memberdecl", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDef));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/pagedocs", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::GroupPageDocs,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/inlineclasses", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::GroupInlineClasses,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                           theTranslator->trClassDocumentation(),
Packit 1c1d7e
                                           SrcLangExt_Fortran,theTranslator->trTypeDocumentation()
Packit 1c1d7e
                                         )));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/defines", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docDefineMembers,theTranslator->trDefineDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/typedefs", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docTypedefMembers,theTranslator->trTypedefDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/enums", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docEnumMembers,theTranslator->trEnumerationTypeDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/enumvalues", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docEnumValMembers,theTranslator->trEnumerationValueDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/functions", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docFuncMembers,
Packit 1c1d7e
                                        COMPILE_FOR_1_OPTION(
Packit 1c1d7e
                                          theTranslator->trFunctionDocumentation(),
Packit 1c1d7e
                                          SrcLangExt_Fortran,theTranslator->trSubprogramDocumentation()
Packit 1c1d7e
                                       )));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/variables", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docVarMembers,theTranslator->trVariableDocumentation()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/signals", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docSignalMembers,theTranslator->trSignals())); 
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/publicslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docPubSlotMembers,theTranslator->trPublicSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/protectedslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docProSlotMembers,theTranslator->trProtectedSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/privateslots", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docPriSlotMembers,theTranslator->trPrivateSlots()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/events", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docEventMembers,theTranslator->trEvents()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/properties", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docPropMembers,theTranslator->trProperties()));
Packit 1c1d7e
      m_sHandler.insert("group/memberdef/friends", 
Packit 1c1d7e
          new StartElementHandlerMember(this,&LayoutParser::startMemberDefEntry,
Packit 1c1d7e
                                        MemberListType_docFriendMembers,theTranslator->trFriends()));
Packit 1c1d7e
      m_eHandler.insert("group/memberdef", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDef));
Packit 1c1d7e
      m_eHandler.insert("group", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endGroup));
Packit 1c1d7e
Packit 1c1d7e
      // directory layout handlers
Packit 1c1d7e
      m_sHandler.insert("directory", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startDirectory));
Packit 1c1d7e
      m_sHandler.insert("directory/briefdescription", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::BriefDesc,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("directory/detaileddescription", 
Packit 1c1d7e
          new StartElementHandlerSection(this,LayoutDocEntry::DetailedDesc,&LayoutParser::startSectionEntry,
Packit 1c1d7e
                                         theTranslator->trDetailedDescription()));
Packit 1c1d7e
      m_sHandler.insert("directory/directorygraph", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::DirGraph,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("directory/memberdecl", 
Packit 1c1d7e
          new StartElementHandler(this,&LayoutParser::startMemberDecl));
Packit 1c1d7e
      m_sHandler.insert("directory/memberdecl/dirs", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::DirSubDirs,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_sHandler.insert("directory/memberdecl/files", 
Packit 1c1d7e
          new StartElementHandlerKind(this,LayoutDocEntry::DirFiles,&LayoutParser::startSimpleEntry));
Packit 1c1d7e
      m_eHandler.insert("directory/memberdecl", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endMemberDecl));
Packit 1c1d7e
      m_eHandler.insert("directory", 
Packit 1c1d7e
          new EndElementHandler(this,&LayoutParser::endDirectory));
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startSimpleEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib)
Packit 1c1d7e
    {
Packit 1c1d7e
      bool isVisible = elemIsVisible(attrib);
Packit 1c1d7e
      if (m_part!=-1 && isVisible)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySimple(k));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startSectionEntry(LayoutDocEntry::Kind k,const QXmlAttributes &attrib,
Packit 1c1d7e
                           const QCString &title)
Packit 1c1d7e
    {
Packit 1c1d7e
      bool isVisible = elemIsVisible(attrib);
Packit 1c1d7e
      QCString userTitle = attrib.value("title").utf8();
Packit 1c1d7e
      //printf("startSectionEntry: title='%s' userTitle='%s'\n",
Packit 1c1d7e
      //    title.data(),userTitle.data());
Packit 1c1d7e
      if (userTitle.isEmpty())  userTitle = title;
Packit 1c1d7e
      if (m_part!=-1 && isVisible)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySection(k,userTitle));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
    void startMemberDeclEntry(const QXmlAttributes &attrib,MemberListType type,
Packit 1c1d7e
                              const QCString &title,const QCString &subscript)
Packit 1c1d7e
    {
Packit 1c1d7e
      //QCString visible = convertToQCString(attrib.value("visible"));
Packit 1c1d7e
      //bool isVisible = visible.isEmpty() || (visible!="no" && visible!="0");
Packit 1c1d7e
      QCString userTitle     = attrib.value("title").utf8();
Packit 1c1d7e
      QCString userSubscript = attrib.value("subtitle").utf8();
Packit 1c1d7e
      if (userTitle.isEmpty())     userTitle     = title;
Packit 1c1d7e
      if (userSubscript.isEmpty()) userSubscript = subscript;
Packit 1c1d7e
      //printf("memberdecl: %s\n",userTitle.data());
Packit 1c1d7e
      if (m_part!=-1 /*&& isVisible*/)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntryMemberDecl(type,userTitle,userSubscript));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startMemberDefEntry(const QXmlAttributes &attrib,MemberListType type,
Packit 1c1d7e
                             const QCString &title,const QCString &)
Packit 1c1d7e
    {
Packit 1c1d7e
      QCString userTitle = attrib.value("title").utf8();
Packit 1c1d7e
      if (userTitle.isEmpty()) userTitle = title;
Packit 1c1d7e
      //printf("memberdef: %s\n",userTitle.data());
Packit 1c1d7e
      if (m_part!=-1 /*&& isVisible*/)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntryMemberDef(type,userTitle));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startLayout(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endLayout()
Packit 1c1d7e
    {
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startNavIndex(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="navindex/";
Packit 1c1d7e
      m_rootNav = LayoutDocManager::instance().rootNavEntry();
Packit 1c1d7e
      if (m_rootNav) m_rootNav->clear();
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endNavIndex()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      if (m_rootNav && !m_rootNav->find(LayoutNavEntry::MainPage))
Packit 1c1d7e
      {
Packit 1c1d7e
        // no MainPage node... add one as the first item of the root node...
Packit 1c1d7e
        new LayoutNavEntry(m_rootNav,LayoutNavEntry::MainPage, TRUE, 
Packit 1c1d7e
            /*Config_getBool(GENERATE_TREEVIEW) ? "main" :*/ "index",
Packit 1c1d7e
            theTranslator->trMainPage(),"",TRUE);
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startNavEntry(const QXmlAttributes &attrib)
Packit 1c1d7e
    {
Packit 1c1d7e
      static bool javaOpt    = Config_getBool(OPTIMIZE_OUTPUT_JAVA);
Packit 1c1d7e
      static bool fortranOpt = Config_getBool(OPTIMIZE_FOR_FORTRAN);
Packit 1c1d7e
      static bool vhdlOpt    = Config_getBool(OPTIMIZE_OUTPUT_VHDL);  
Packit 1c1d7e
      static bool hasGraphicalHierarchy = Config_getBool(HAVE_DOT) &&
Packit 1c1d7e
                                          Config_getBool(GRAPHICAL_HIERARCHY);
Packit 1c1d7e
      static bool extractAll = Config_getBool(EXTRACT_ALL);
Packit 1c1d7e
      static struct NavEntryMap
Packit 1c1d7e
      {
Packit 1c1d7e
        const char *typeStr;       // type attribute name in the XML file
Packit 1c1d7e
        LayoutNavEntry::Kind kind; // corresponding enum name
Packit 1c1d7e
        QCString mainName;         // default title for an item if it has children
Packit 1c1d7e
        QCString subName;          // optional name for an item if it is rendered as a child
Packit 1c1d7e
        QCString intro;            // introduction text to be put on the index page
Packit 1c1d7e
        QCString baseFile;         // base name of the file containing the index page
Packit 1c1d7e
      } mapping[] =
Packit 1c1d7e
      {
Packit 1c1d7e
        { "mainpage",
Packit 1c1d7e
          LayoutNavEntry::MainPage,
Packit 1c1d7e
          theTranslator->trMainPage(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          "index"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "pages",
Packit 1c1d7e
          LayoutNavEntry::Pages,
Packit 1c1d7e
          theTranslator->trRelatedPages(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trRelatedPagesDescription(),
Packit 1c1d7e
          "pages"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "modules",
Packit 1c1d7e
          LayoutNavEntry::Modules,
Packit 1c1d7e
          theTranslator->trModules(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trModulesDescription(),
Packit 1c1d7e
          "modules"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "namespaces",
Packit 1c1d7e
          LayoutNavEntry::Namespaces,
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModules() : theTranslator->trNamespaces(),
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
Packit 1c1d7e
          "namespaces"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "namespacelist",
Packit 1c1d7e
          LayoutNavEntry::NamespaceList,
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackages() : fortranOpt ? theTranslator->trModulesList() : theTranslator->trNamespaceList(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackageListDescription() : fortranOpt ? theTranslator->trModulesListDescription(extractAll) : theTranslator->trNamespaceListDescription(extractAll),
Packit 1c1d7e
          "namespaces"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "namespacemembers",
Packit 1c1d7e
          LayoutNavEntry::NamespaceMembers,
Packit 1c1d7e
          javaOpt || vhdlOpt   ? theTranslator->trPackageMembers() : fortranOpt ? theTranslator->trModulesMembers() : theTranslator->trNamespaceMembers(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          fortranOpt ? theTranslator->trModulesMemberDescription(extractAll) : theTranslator->trNamespaceMemberDescription(extractAll),
Packit 1c1d7e
          "namespacemembers"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "classindex",
Packit 1c1d7e
          LayoutNavEntry::ClassIndex,
Packit 1c1d7e
          fortranOpt ? theTranslator->trDataTypes() : vhdlOpt ? VhdlDocGen::trDesignUnits() : theTranslator->trCompoundIndex(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          "classes"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "classes",
Packit 1c1d7e
          LayoutNavEntry::Classes,
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trClasses(),
Packit 1c1d7e
          theTranslator->trCompoundList(),
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
Packit 1c1d7e
          "annotated"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "classlist",
Packit 1c1d7e
          LayoutNavEntry::ClassList,
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundListFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitList() : theTranslator->trCompoundList(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundListDescriptionFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitListDescription() : theTranslator->trCompoundListDescription(),
Packit 1c1d7e
          "annotated"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "hierarchy",
Packit 1c1d7e
          LayoutNavEntry::ClassHierarchy,
Packit 1c1d7e
          vhdlOpt    ? VhdlDocGen::trDesignUnitHierarchy() : theTranslator->trClassHierarchy(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trClassHierarchyDescription(),
Packit 1c1d7e
          hasGraphicalHierarchy ? "inherits" : "hierarchy"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "classmembers",
Packit 1c1d7e
          LayoutNavEntry::ClassMembers,
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundMembersFortran() : vhdlOpt ? VhdlDocGen::trDesignUnitMembers() : theTranslator->trCompoundMembers(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          fortranOpt ? theTranslator->trCompoundMembersDescriptionFortran(extractAll) : theTranslator->trCompoundMembersDescription(extractAll),
Packit 1c1d7e
          "functions"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "files",
Packit 1c1d7e
          LayoutNavEntry::Files,
Packit 1c1d7e
          theTranslator->trFile(TRUE,FALSE),
Packit 1c1d7e
          theTranslator->trFileList(),
Packit 1c1d7e
          theTranslator->trFileListDescription(extractAll),
Packit 1c1d7e
          "files"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "filelist",
Packit 1c1d7e
          LayoutNavEntry::FileList,
Packit 1c1d7e
          theTranslator->trFileList(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trFileListDescription(extractAll),
Packit 1c1d7e
          "files"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "globals",
Packit 1c1d7e
          LayoutNavEntry::FileGlobals,
Packit 1c1d7e
          theTranslator->trFileMembers(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trFileMembersDescription(extractAll),
Packit 1c1d7e
          "globals"
Packit 1c1d7e
        },
Packit 1c1d7e
        //{ "dirs",
Packit 1c1d7e
        //  LayoutNavEntry::Dirs,
Packit 1c1d7e
        //  theTranslator->trDirectories(),
Packit 1c1d7e
        //  QCString(),
Packit 1c1d7e
        //  theTranslator->trDirDescription(),
Packit 1c1d7e
        //  "dirs"
Packit 1c1d7e
        //},
Packit 1c1d7e
        { "examples",
Packit 1c1d7e
          LayoutNavEntry::Examples,
Packit 1c1d7e
          theTranslator->trExamples(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          theTranslator->trExamplesDescription(),
Packit 1c1d7e
          "examples"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "user",
Packit 1c1d7e
          LayoutNavEntry::User,
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          "user"
Packit 1c1d7e
        },
Packit 1c1d7e
        { "usergroup",
Packit 1c1d7e
          LayoutNavEntry::UserGroup,
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          "usergroup"
Packit 1c1d7e
        },
Packit 1c1d7e
        { 0, // end of list
Packit 1c1d7e
          (LayoutNavEntry::Kind)0,
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString(),
Packit 1c1d7e
          QCString()
Packit 1c1d7e
        }
Packit 1c1d7e
      };
Packit 1c1d7e
      LayoutNavEntry::Kind kind;
Packit 1c1d7e
      // find type in the table
Packit 1c1d7e
      int i=0;
Packit 1c1d7e
      QString type = attrib.value("type");
Packit 1c1d7e
      while (mapping[i].typeStr)
Packit 1c1d7e
      {
Packit 1c1d7e
        if (mapping[i].typeStr==type)
Packit 1c1d7e
        {
Packit 1c1d7e
          kind = mapping[i].kind;
Packit 1c1d7e
          break;
Packit 1c1d7e
        }
Packit 1c1d7e
        i++;
Packit 1c1d7e
      }
Packit 1c1d7e
      if (mapping[i].typeStr==0) 
Packit 1c1d7e
      {
Packit 1c1d7e
        if (type.isEmpty())
Packit 1c1d7e
        {
Packit 1c1d7e
          err("an entry tag within a navindex has no type attribute! Check your layout file!\n");
Packit 1c1d7e
        }
Packit 1c1d7e
        else
Packit 1c1d7e
        {
Packit 1c1d7e
          err("the type '%s' is not supported for the entry tag within a navindex! Check your layout file!\n",type.data());
Packit 1c1d7e
        }
Packit 1c1d7e
        m_invalidEntry=TRUE;
Packit 1c1d7e
        return;
Packit 1c1d7e
      }
Packit 1c1d7e
      QCString baseFile = mapping[i].baseFile;
Packit 1c1d7e
      QCString title = attrib.value("title").utf8();
Packit 1c1d7e
      bool isVisible = elemIsVisible(attrib);
Packit 1c1d7e
      if (title.isEmpty()) // use default title
Packit 1c1d7e
      { 
Packit 1c1d7e
        title = mapping[i].mainName; // use title for main row
Packit 1c1d7e
        if (m_rootNav!=LayoutDocManager::instance().rootNavEntry() && !mapping[i].subName.isEmpty())
Packit 1c1d7e
        {
Packit 1c1d7e
          title = mapping[i].subName; // if this is a child of another row, use the subName if available
Packit 1c1d7e
                                      // this is mainly done to get compatible naming with older versions.
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      QCString intro = attrib.value("intro").utf8();
Packit 1c1d7e
      if (intro.isEmpty()) // use default intro text
Packit 1c1d7e
      {
Packit 1c1d7e
        intro = mapping[i].intro;
Packit 1c1d7e
      }
Packit 1c1d7e
      QCString url = attrib.value("url").utf8();
Packit 1c1d7e
      if (mapping[i].kind==LayoutNavEntry::User && !url.isEmpty())
Packit 1c1d7e
      {
Packit 1c1d7e
        baseFile=url;
Packit 1c1d7e
      }
Packit 1c1d7e
      else if (kind==LayoutNavEntry::UserGroup)
Packit 1c1d7e
      {
Packit 1c1d7e
        if (!url.isEmpty())
Packit 1c1d7e
        {
Packit 1c1d7e
          baseFile=url;
Packit 1c1d7e
        }
Packit 1c1d7e
        else
Packit 1c1d7e
        {
Packit 1c1d7e
          baseFile+=QCString().sprintf("%d",m_userGroupCount++);
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      // create new item and make it the new root
Packit 1c1d7e
      m_rootNav = new LayoutNavEntry(m_rootNav,kind,isVisible,baseFile,title,intro);
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endNavEntry()
Packit 1c1d7e
    {
Packit 1c1d7e
      // set the root back to the parent
Packit 1c1d7e
      if (m_rootNav && !m_invalidEntry) m_rootNav = m_rootNav->parent();
Packit 1c1d7e
      m_invalidEntry=FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startClass(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocManager::instance().clear(LayoutDocManager::Class);
Packit 1c1d7e
      m_scope="class/";
Packit 1c1d7e
      m_part = (int)LayoutDocManager::Class;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endClass()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      m_part = -1;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startNamespace(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocManager::instance().clear(LayoutDocManager::Namespace);
Packit 1c1d7e
      m_scope="namespace/";
Packit 1c1d7e
      m_part = (int)LayoutDocManager::Namespace;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endNamespace()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      m_part = -1;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startFile(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocManager::instance().clear(LayoutDocManager::File);
Packit 1c1d7e
      m_scope="file/";
Packit 1c1d7e
      m_part = (int)LayoutDocManager::File;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endFile()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      m_part = -1;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startGroup(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocManager::instance().clear(LayoutDocManager::Group);
Packit 1c1d7e
      m_scope="group/";
Packit 1c1d7e
      m_part = (int)LayoutDocManager::Group;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endGroup()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      m_part = -1;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startDirectory(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      LayoutDocManager::instance().clear(LayoutDocManager::Directory);
Packit 1c1d7e
      m_scope="directory/";
Packit 1c1d7e
      m_part = (int)LayoutDocManager::Directory;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endDirectory()
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope="";
Packit 1c1d7e
      m_part = -1;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startMemberDef(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope+="memberdef/";
Packit 1c1d7e
      if (m_part!=-1)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySimple(LayoutDocEntry::MemberDefStart));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endMemberDef()
Packit 1c1d7e
    {
Packit 1c1d7e
      int i=m_scope.findRev("memberdef/");
Packit 1c1d7e
      if (i!=-1)
Packit 1c1d7e
      {
Packit 1c1d7e
        m_scope=m_scope.left(i);
Packit 1c1d7e
        if (m_part!=-1)
Packit 1c1d7e
        {
Packit 1c1d7e
          LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySimple(LayoutDocEntry::MemberDefEnd));
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void startMemberDecl(const QXmlAttributes &)
Packit 1c1d7e
    {
Packit 1c1d7e
      m_scope+="memberdecl/";
Packit 1c1d7e
      if (m_part!=-1)
Packit 1c1d7e
      {
Packit 1c1d7e
        LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclStart));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    void endMemberDecl()
Packit 1c1d7e
    {
Packit 1c1d7e
      int i=m_scope.findRev("memberdecl/");
Packit 1c1d7e
      if (i!=-1)
Packit 1c1d7e
      {
Packit 1c1d7e
        m_scope=m_scope.left(i);
Packit 1c1d7e
        if (m_part!=-1)
Packit 1c1d7e
        {
Packit 1c1d7e
          LayoutDocManager::instance().addEntry((LayoutDocManager::LayoutPart)m_part,
Packit 1c1d7e
                                              new LayoutDocEntrySimple(LayoutDocEntry::MemberDeclEnd));
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    // reimplemented from QXmlDefaultHandler
Packit 1c1d7e
    bool startElement( const QString&, const QString&, 
Packit 1c1d7e
                       const QString& name, const QXmlAttributes& attrib )
Packit 1c1d7e
    {
Packit 1c1d7e
      //printf("startElement [%s]::[%s]\n",m_scope.data(),name.data());
Packit 1c1d7e
      StartElementHandler *handler = m_sHandler[m_scope+name.utf8()];
Packit 1c1d7e
      if (handler)
Packit 1c1d7e
      {
Packit 1c1d7e
        (*handler)(attrib);
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        err("Unexpected start tag `%s' found in scope='%s'!\n",
Packit 1c1d7e
            name.data(),m_scope.data());
Packit 1c1d7e
      }
Packit 1c1d7e
      return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
    bool endElement( const QString&, const QString&, const QString& name )
Packit 1c1d7e
    {
Packit 1c1d7e
      //printf("endElement [%s]::[%s]\n",m_scope.data(),name.data());
Packit 1c1d7e
      EndElementHandler *handler;
Packit 1c1d7e
      if (!m_scope.isEmpty() && m_scope.right(name.length()+1)==name.utf8()+"/")
Packit 1c1d7e
      { // element ends current scope
Packit 1c1d7e
        handler = m_eHandler[m_scope.left(m_scope.length()-1)];
Packit 1c1d7e
      }
Packit 1c1d7e
      else // continue with current scope
Packit 1c1d7e
      {
Packit 1c1d7e
        handler = m_eHandler[m_scope+name.utf8()];
Packit 1c1d7e
      }
Packit 1c1d7e
      if (handler)
Packit 1c1d7e
      {
Packit 1c1d7e
        (*handler)();
Packit 1c1d7e
      }
Packit 1c1d7e
      return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
    bool startDocument()
Packit 1c1d7e
    {
Packit 1c1d7e
      return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    LayoutParser() : m_sHandler(163), m_eHandler(17), m_invalidEntry(FALSE) { }
Packit 1c1d7e
   ~LayoutParser() { delete m_rootNav; }
Packit 1c1d7e
Packit 1c1d7e
    QDict<StartElementHandler> m_sHandler;
Packit 1c1d7e
    QDict<EndElementHandler>   m_eHandler;
Packit 1c1d7e
    QCString m_scope;
Packit 1c1d7e
    int m_part;
Packit 1c1d7e
    LayoutNavEntry *m_rootNav;
Packit 1c1d7e
    bool m_invalidEntry;
Packit 1c1d7e
    static int m_userGroupCount;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
int LayoutParser::m_userGroupCount=0;
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
class LayoutErrorHandler : public QXmlErrorHandler
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    LayoutErrorHandler(const char *fn) : fileName(fn) {}
Packit 1c1d7e
    bool warning( const QXmlParseException &exception )
Packit 1c1d7e
    {
Packit 1c1d7e
      warn_uncond("at line %d column %d of %s: %s\n",
Packit 1c1d7e
          exception.lineNumber(),exception.columnNumber(),fileName.data(),
Packit 1c1d7e
          exception.message().data());
Packit 1c1d7e
      return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    bool error( const QXmlParseException &exception )
Packit 1c1d7e
    {
Packit 1c1d7e
      err("at line %d column %d of %s: %s\n",
Packit 1c1d7e
          exception.lineNumber(),exception.columnNumber(),fileName.data(),
Packit 1c1d7e
          exception.message().data());
Packit 1c1d7e
      return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    bool fatalError( const QXmlParseException &exception )
Packit 1c1d7e
    {
Packit 1c1d7e
      err("fatal: at line %d column %d of %s: %s\n",
Packit 1c1d7e
          exception.lineNumber(),exception.columnNumber(),fileName.data(),
Packit 1c1d7e
          exception.message().data());
Packit 1c1d7e
      return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    QString errorString() { return ""; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QString errorMsg;
Packit 1c1d7e
    QString fileName;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
class LayoutDocManager::Private
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    QList<LayoutDocEntry> docEntries[LayoutDocManager::NrParts];
Packit 1c1d7e
    LayoutNavEntry *rootNav;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
LayoutDocManager::LayoutDocManager()
Packit 1c1d7e
{
Packit 1c1d7e
  d = new Private;
Packit 1c1d7e
  int i;
Packit 1c1d7e
  for (i=0;i
Packit 1c1d7e
  {
Packit 1c1d7e
    d->docEntries[i].setAutoDelete(TRUE);
Packit 1c1d7e
  }
Packit 1c1d7e
  d->rootNav = new LayoutNavEntry;
Packit 1c1d7e
  LayoutParser::instance().init();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LayoutDocManager::init()
Packit 1c1d7e
{
Packit 1c1d7e
  // parse the default layout
Packit 1c1d7e
  LayoutErrorHandler errorHandler( "layout_default.xml" );
Packit 1c1d7e
  QXmlInputSource source;
Packit 1c1d7e
  source.setData( layout_default );
Packit 1c1d7e
  QXmlSimpleReader reader;
Packit 1c1d7e
  reader.setContentHandler( &LayoutParser::instance() );
Packit 1c1d7e
  reader.setErrorHandler( &errorHandler );
Packit 1c1d7e
  reader.parse( source );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
LayoutDocManager::~LayoutDocManager()
Packit 1c1d7e
{
Packit 1c1d7e
  delete d->rootNav;
Packit 1c1d7e
  delete d;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
LayoutDocManager & LayoutDocManager::instance()
Packit 1c1d7e
{
Packit 1c1d7e
  static LayoutDocManager *theInstance = new LayoutDocManager;
Packit 1c1d7e
  return *theInstance;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
const QList<LayoutDocEntry> &LayoutDocManager::docEntries(LayoutDocManager::LayoutPart part) const
Packit 1c1d7e
{
Packit 1c1d7e
  return d->docEntries[(int)part];
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
LayoutNavEntry* LayoutDocManager::rootNavEntry() const
Packit 1c1d7e
{
Packit 1c1d7e
  return d->rootNav;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LayoutDocManager::addEntry(LayoutDocManager::LayoutPart p,LayoutDocEntry *e)
Packit 1c1d7e
{
Packit 1c1d7e
  d->docEntries[(int)p].append(e);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LayoutDocManager::clear(LayoutDocManager::LayoutPart p)
Packit 1c1d7e
{
Packit 1c1d7e
  d->docEntries[(int)p].clear();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LayoutDocManager::parse(QTextStream &t,const char *fileName)
Packit 1c1d7e
{
Packit 1c1d7e
  LayoutErrorHandler errorHandler(fileName);
Packit 1c1d7e
  QXmlInputSource source( t );
Packit 1c1d7e
  QXmlSimpleReader reader;
Packit 1c1d7e
  reader.setContentHandler( &LayoutParser::instance() );
Packit 1c1d7e
  reader.setErrorHandler( &errorHandler );
Packit 1c1d7e
  reader.parse( source );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//---------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
void writeDefaultLayoutFile(const char *fileName)
Packit 1c1d7e
{
Packit 1c1d7e
  QFile f(fileName);
Packit 1c1d7e
  bool ok = openOutputFile(fileName,f);
Packit 1c1d7e
  if (!ok)
Packit 1c1d7e
  {
Packit 1c1d7e
    err("Failed to open file %s for writing!\n",fileName);
Packit 1c1d7e
    return;
Packit 1c1d7e
  }
Packit 1c1d7e
  QTextStream t(&f);
Packit 1c1d7e
  t << substitute(layout_default,"$doxygenversion",versionString);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
// Convert input to a title.
Packit 1c1d7e
// The format of input can be a simple title "A title" or in case there are different 
Packit 1c1d7e
// titles for some programming languages they can take the following form:
Packit 1c1d7e
// "A title|16=Another title|8=Yet Another title"
Packit 1c1d7e
// where the number is a value of SrcLangExt in decimal notation (i.e. 16=Java, 8=IDL).
Packit 1c1d7e
QCString extractLanguageSpecificTitle(const QCString &input,SrcLangExt lang)
Packit 1c1d7e
{
Packit 1c1d7e
  int i,s=0,e=input.find('|');
Packit 1c1d7e
  if (e==-1) return input; // simple title case
Packit 1c1d7e
  int e1=e;
Packit 1c1d7e
  while (e!=-1) // look for 'number=title' pattern separated by '|'
Packit 1c1d7e
  {
Packit 1c1d7e
    s=e+1;
Packit 1c1d7e
    e=input.find('|',s);
Packit 1c1d7e
    i=input.find('=',s);
Packit 1c1d7e
    assert(i>s);
Packit 1c1d7e
    int key=input.mid(s,i-s).toInt();
Packit 1c1d7e
    if (key==(int)lang) // found matching key
Packit 1c1d7e
    {
Packit 1c1d7e
      if (e==-1) e=input.length();
Packit 1c1d7e
      return input.mid(i+1,e-i-1);
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  return input.left(e1); // fallback, no explicit language key found
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
QCString LayoutDocEntrySection::title(SrcLangExt lang) const
Packit 1c1d7e
{
Packit 1c1d7e
  return extractLanguageSpecificTitle(m_title,lang);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
QCString LayoutDocEntryMemberDecl::title(SrcLangExt lang) const
Packit 1c1d7e
{
Packit 1c1d7e
  return extractLanguageSpecificTitle(m_title,lang);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
QCString LayoutDocEntryMemberDecl::subtitle(SrcLangExt lang) const
Packit 1c1d7e
{
Packit 1c1d7e
  return extractLanguageSpecificTitle(m_subscript,lang);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//----------------------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
QCString LayoutDocEntryMemberDef::title(SrcLangExt lang) const
Packit 1c1d7e
{
Packit 1c1d7e
  return extractLanguageSpecificTitle(m_title,lang);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e