Blame src/index.h

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