Blame src/layout.cpp

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