Blame src/index.h

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
#ifndef INDEX_H
Packit Service 50c9f2
#define INDEX_H
Packit Service 50c9f2
Packit Service 50c9f2
#include <qlist.h>
Packit Service 50c9f2
#include <qcstring.h>
Packit Service 50c9f2
Packit Service 50c9f2
class Definition;
Packit Service 50c9f2
class MemberDef;
Packit Service 50c9f2
class OutputList;
Packit Service 50c9f2
class FTextStream;
Packit Service 50c9f2
Packit Service 50c9f2
/** \brief Abstract interface for index generators. */
Packit Service 50c9f2
class IndexIntf
Packit Service 50c9f2
{
Packit Service 50c9f2
  public:
Packit Service 50c9f2
    virtual ~IndexIntf() {}
Packit Service 50c9f2
    virtual void initialize() = 0;
Packit Service 50c9f2
    virtual void finalize() = 0;
Packit Service 50c9f2
    virtual void incContentsDepth() = 0;
Packit Service 50c9f2
    virtual void decContentsDepth() = 0;
Packit Service 50c9f2
    virtual void addContentsItem(bool isDir, const char *name, const char *ref, 
Packit Service 50c9f2
                                 const char *file, const char *anchor, bool separateIndex,
Packit Service 50c9f2
                                 bool addToNavIndex,Definition *def) = 0;
Packit Service 50c9f2
    virtual void addIndexItem(Definition *context,MemberDef *md,
Packit Service 50c9f2
                              const char *sectionAnchor,const char *title) = 0;
Packit Service 50c9f2
    virtual void addIndexFile(const char *name) = 0;
Packit Service 50c9f2
    virtual void addImageFile(const char *name) = 0;
Packit Service 50c9f2
    virtual void addStyleSheetFile(const char *name) = 0;
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
/** \brief A list of index interfaces.
Packit Service 50c9f2
 *
Packit Service 50c9f2
 *  This class itself implements all methods of IndexIntf and
Packit Service 50c9f2
 *  just forwards the calls to all items in the list.
Packit Service 50c9f2
 */
Packit Service 50c9f2
class IndexList : public IndexIntf
Packit Service 50c9f2
{
Packit Service 50c9f2
  private:
Packit Service 50c9f2
    QList<IndexIntf> m_intfs;
Packit Service 50c9f2
Packit Service 50c9f2
    // --- foreach implementations for various number of arguments
Packit Service 50c9f2
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)())
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)();
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3),A1 a1,A2 a2,A3 a3)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3,typename A4>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4),A1 a1,A2 a2,A3 a3,A4 a4)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3,typename A4,typename A5>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7,A8),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
    template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8,typename A9>
Packit Service 50c9f2
    void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6,A7,A8,A9),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6,A7 a7,A8 a8,A9 a9)
Packit Service 50c9f2
    {
Packit Service 50c9f2
      QListIterator<IndexIntf> li(m_intfs);
Packit Service 50c9f2
      for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8,a9);
Packit Service 50c9f2
    }
Packit Service 50c9f2
Packit Service 50c9f2
  public:
Packit Service 50c9f2
    /** Creates a list of indexes */
Packit Service 50c9f2
    IndexList() { m_intfs.setAutoDelete(TRUE); m_enabled=TRUE; }
Packit Service 50c9f2
    /** Add an index generator to the list */
Packit Service 50c9f2
    void addIndex(IndexIntf *intf) 
Packit Service 50c9f2
    { m_intfs.append(intf); }
Packit Service 50c9f2
    void disable()
Packit Service 50c9f2
    { m_enabled = FALSE; }
Packit Service 50c9f2
    void enable()
Packit Service 50c9f2
    { m_enabled = TRUE; }
Packit Service 50c9f2
    bool isEnabled() const
Packit Service 50c9f2
    { return m_enabled; }
Packit Service 50c9f2
Packit Service 50c9f2
    // IndexIntf implementation
Packit Service 50c9f2
    void initialize() 
Packit Service 50c9f2
    { foreach(&IndexIntf::initialize); }
Packit Service 50c9f2
    void finalize() 
Packit Service 50c9f2
    { foreach(&IndexIntf::finalize); }
Packit Service 50c9f2
    void incContentsDepth()
Packit Service 50c9f2
    { if (m_enabled) foreach(&IndexIntf::incContentsDepth); }
Packit Service 50c9f2
    void decContentsDepth()
Packit Service 50c9f2
    { if (m_enabled) foreach(&IndexIntf::decContentsDepth); }
Packit Service 50c9f2
    void addContentsItem(bool isDir, const char *name, const char *ref, 
Packit Service 50c9f2
                         const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE,
Packit Service 50c9f2
                         Definition *def=0)
Packit Service 50c9f2
    { if (m_enabled) foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
Packit Service 50c9f2
             (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex,def); }
Packit Service 50c9f2
    void addIndexItem(Definition *context,MemberDef *md,const char *sectionAnchor=0,const char *title=0)
Packit Service 50c9f2
    { if (m_enabled) foreach<Definition *,MemberDef *,const char *,const char *>
Packit Service 50c9f2
             (&IndexIntf::addIndexItem,context,md,sectionAnchor,title); }
Packit Service 50c9f2
    void addIndexFile(const char *name) 
Packit Service 50c9f2
    { if (m_enabled) foreach<const char *>(&IndexIntf::addIndexFile,name); }
Packit Service 50c9f2
    void addImageFile(const char *name) 
Packit Service 50c9f2
    { if (m_enabled) foreach<const char *>(&IndexIntf::addImageFile,name); }
Packit Service 50c9f2
    void addStyleSheetFile(const char *name) 
Packit Service 50c9f2
    { if (m_enabled) foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
Packit Service 50c9f2
Packit Service 50c9f2
  private:
Packit Service 50c9f2
    bool m_enabled;
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
Packit Service 50c9f2
enum IndexSections
Packit Service 50c9f2
{
Packit Service 50c9f2
  isTitlePageStart,
Packit Service 50c9f2
  isTitlePageAuthor,
Packit Service 50c9f2
  isMainPage,
Packit Service 50c9f2
  isModuleIndex,
Packit Service 50c9f2
  isDirIndex,
Packit Service 50c9f2
  isNamespaceIndex,
Packit Service 50c9f2
  isClassHierarchyIndex,
Packit Service 50c9f2
  isCompoundIndex,
Packit Service 50c9f2
  isFileIndex,
Packit Service 50c9f2
  isPageIndex,
Packit Service 50c9f2
  isModuleDocumentation,
Packit Service 50c9f2
  isDirDocumentation,
Packit Service 50c9f2
  isNamespaceDocumentation,
Packit Service 50c9f2
  isClassDocumentation,
Packit Service 50c9f2
  isFileDocumentation,
Packit Service 50c9f2
  isExampleDocumentation,
Packit Service 50c9f2
  isPageDocumentation,
Packit Service 50c9f2
  isPageDocumentation2,
Packit Service 50c9f2
  isEndIndex
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
enum HighlightedItem
Packit Service 50c9f2
{
Packit Service 50c9f2
  HLI_None=0,
Packit Service 50c9f2
  HLI_Main,
Packit Service 50c9f2
  HLI_Modules,
Packit Service 50c9f2
  //HLI_Directories,
Packit Service 50c9f2
  HLI_Namespaces,
Packit Service 50c9f2
  HLI_Hierarchy,
Packit Service 50c9f2
  HLI_Classes,
Packit Service 50c9f2
  HLI_Annotated,
Packit Service 50c9f2
  HLI_Files,
Packit Service 50c9f2
  HLI_NamespaceMembers,
Packit Service 50c9f2
  HLI_Functions,
Packit Service 50c9f2
  HLI_Globals,
Packit Service 50c9f2
  HLI_Pages,
Packit Service 50c9f2
  HLI_Examples,
Packit Service 50c9f2
  HLI_Search,
Packit Service 50c9f2
  HLI_UserGroup,
Packit Service 50c9f2
Packit Service 50c9f2
  HLI_ClassVisible,
Packit Service 50c9f2
  HLI_NamespaceVisible,
Packit Service 50c9f2
  HLI_FileVisible
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
enum ClassMemberHighlight
Packit Service 50c9f2
{
Packit Service 50c9f2
  CMHL_All = 0,
Packit Service 50c9f2
  CMHL_Functions,
Packit Service 50c9f2
  CMHL_Variables,
Packit Service 50c9f2
  CMHL_Typedefs,
Packit Service 50c9f2
  CMHL_Enums,
Packit Service 50c9f2
  CMHL_EnumValues,
Packit Service 50c9f2
  CMHL_Properties,
Packit Service 50c9f2
  CMHL_Events,
Packit Service 50c9f2
  CMHL_Related,
Packit Service 50c9f2
  CMHL_Total = CMHL_Related+1
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
enum FileMemberHighlight
Packit Service 50c9f2
{
Packit Service 50c9f2
  FMHL_All = 0,
Packit Service 50c9f2
  FMHL_Functions,
Packit Service 50c9f2
  FMHL_Variables,
Packit Service 50c9f2
  FMHL_Typedefs,
Packit Service 50c9f2
  FMHL_Enums,
Packit Service 50c9f2
  FMHL_EnumValues,
Packit Service 50c9f2
  FMHL_Defines,
Packit Service 50c9f2
  FMHL_Total = FMHL_Defines+1
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
enum NamespaceMemberHighlight
Packit Service 50c9f2
{
Packit Service 50c9f2
  NMHL_All = 0,
Packit Service 50c9f2
  NMHL_Functions,
Packit Service 50c9f2
  NMHL_Variables,
Packit Service 50c9f2
  NMHL_Typedefs,
Packit Service 50c9f2
  NMHL_Enums,
Packit Service 50c9f2
  NMHL_EnumValues,
Packit Service 50c9f2
  NMHL_Total = NMHL_EnumValues+1
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
enum ClassHighlight
Packit Service 50c9f2
{
Packit Service 50c9f2
  CHL_All = 0,
Packit Service 50c9f2
  CHL_Classes,
Packit Service 50c9f2
  CHL_Structs,
Packit Service 50c9f2
  CHL_Unions,
Packit Service 50c9f2
  CHL_Interfaces,
Packit Service 50c9f2
  CHL_Protocols,
Packit Service 50c9f2
  CHL_Categories,
Packit Service 50c9f2
  CHL_Exceptions,
Packit Service 50c9f2
  CHL_Total = CHL_Exceptions+1
Packit Service 50c9f2
};
Packit Service 50c9f2
Packit Service 50c9f2
void writeGraphInfo(OutputList &ol);
Packit Service 50c9f2
void writeIndexHierarchy(OutputList &ol);
Packit Service 50c9f2
Packit Service 50c9f2
void countDataStructures();
Packit Service 50c9f2
Packit Service 50c9f2
extern int annotatedClasses;
Packit Service 50c9f2
extern int hierarchyClasses;
Packit Service 50c9f2
extern int documentedFiles;
Packit Service 50c9f2
extern int documentedGroups;
Packit Service 50c9f2
extern int documentedNamespaces;
Packit Service 50c9f2
extern int indexedPages;
Packit Service 50c9f2
extern int documentedClassMembers[CMHL_Total];
Packit Service 50c9f2
extern int documentedFileMembers[FMHL_Total];
Packit Service 50c9f2
extern int documentedNamespaceMembers[NMHL_Total];
Packit Service 50c9f2
extern int documentedDirs;
Packit Service 50c9f2
extern int documentedHtmlFiles;
Packit Service 50c9f2
extern int documentedPages;
Packit Service 50c9f2
Packit Service 50c9f2
void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
Packit Service 50c9f2
void endTitle(OutputList &ol,const char *fileName,const char *name);
Packit Service 50c9f2
void startFile(OutputList &ol,const char *name,const char *manName,
Packit Service 50c9f2
               const char *title,HighlightedItem hli=HLI_None,
Packit Service 50c9f2
               bool additionalIndices=FALSE,const char *altSidebarName=0);
Packit Service 50c9f2
void endFile(OutputList &ol,bool skipNavIndex=FALSE,bool skipEndContents=FALSE,
Packit Service 50c9f2
             const QCString &navPath=QCString());
Packit Service 50c9f2
void endFileWithNavPath(Definition *d,OutputList &ol);
Packit Service 50c9f2
Packit Service 50c9f2
void initClassMemberIndices();
Packit Service 50c9f2
void initFileMemberIndices();
Packit Service 50c9f2
void initNamespaceMemberIndices();
Packit Service 50c9f2
void addClassMemberNameToIndex(MemberDef *md);
Packit Service 50c9f2
void addFileMemberNameToIndex(MemberDef *md);
Packit Service 50c9f2
void addNamespaceMemberNameToIndex(MemberDef *md);
Packit Service 50c9f2
QCString fixSpaces(const QCString &s);
Packit Service 50c9f2
Packit Service 50c9f2
#endif