ISLEman
index.h
1 /******************************************************************************
2  *
3  *
4  *
5  * Copyright (C) 1997-2015 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby
9  * granted. No representations are made about the suitability of this software
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17 
18 #ifndef INDEX_H
19 #define INDEX_H
20 
21 #include <qlist.h>
22 #include <qcstring.h>
23 
24 class Definition;
25 class MemberDef;
26 class OutputList;
27 class FTextStream;
28 
30 class IndexIntf
31 {
32  public:
33  virtual ~IndexIntf() {}
34  virtual void initialize() = 0;
35  virtual void finalize() = 0;
36  virtual void incContentsDepth() = 0;
37  virtual void decContentsDepth() = 0;
38  virtual void addContentsItem(bool isDir, const char *name, const char *ref,
39  const char *file, const char *anchor, bool separateIndex,
40  bool addToNavIndex,Definition *def) = 0;
41  virtual void addIndexItem(Definition *context,MemberDef *md,
42  const char *sectionAnchor,const char *title) = 0;
43  virtual void addIndexFile(const char *name) = 0;
44  virtual void addImageFile(const char *name) = 0;
45  virtual void addStyleSheetFile(const char *name) = 0;
46 };
47 
53 class IndexList : public IndexIntf
54 {
55  private:
56  QList<IndexIntf> m_intfs;
57 
58  // --- foreach implementations for various number of arguments
59 
60  void foreach(void (IndexIntf::*methodPtr)())
61  {
62  QListIterator<IndexIntf> li(m_intfs);
63  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)();
64  }
65 
66  template<typename A1>
67  void foreach(void (IndexIntf::*methodPtr)(A1),A1 a1)
68  {
69  QListIterator<IndexIntf> li(m_intfs);
70  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1);
71  }
72 
73  template<typename A1,typename A2,typename A3>
74  void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3),A1 a1,A2 a2,A3 a3)
75  {
76  QListIterator<IndexIntf> li(m_intfs);
77  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3);
78  }
79 
80  template<typename A1,typename A2,typename A3,typename A4>
81  void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4),A1 a1,A2 a2,A3 a3,A4 a4)
82  {
83  QListIterator<IndexIntf> li(m_intfs);
84  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4);
85  }
86 
87  template<typename A1,typename A2,typename A3,typename A4,typename A5>
88  void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5)
89  {
90  QListIterator<IndexIntf> li(m_intfs);
91  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5);
92  }
93 
94  template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6>
95  void foreach(void (IndexIntf::*methodPtr)(A1,A2,A3,A4,A5,A6),A1 a1,A2 a2,A3 a3,A4 a4,A5 a5,A6 a6)
96  {
97  QListIterator<IndexIntf> li(m_intfs);
98  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6);
99  }
100 
101  template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8>
102  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)
103  {
104  QListIterator<IndexIntf> li(m_intfs);
105  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8);
106  }
107 
108  template<typename A1,typename A2,typename A3,typename A4,typename A5,typename A6,typename A7,typename A8,typename A9>
109  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)
110  {
111  QListIterator<IndexIntf> li(m_intfs);
112  for (li.toFirst();li.current();++li) (li.current()->*methodPtr)(a1,a2,a3,a4,a5,a6,a7,a8,a9);
113  }
114 
115  public:
117  IndexList() { m_intfs.setAutoDelete(TRUE); m_enabled=TRUE; }
119  void addIndex(IndexIntf *intf)
120  { m_intfs.append(intf); }
121  void disable()
122  { m_enabled = FALSE; }
123  void enable()
124  { m_enabled = TRUE; }
125  bool isEnabled() const
126  { return m_enabled; }
127 
128  // IndexIntf implementation
129  void initialize()
130  { foreach(&IndexIntf::initialize); }
131  void finalize()
132  { foreach(&IndexIntf::finalize); }
133  void incContentsDepth()
134  { if (m_enabled) foreach(&IndexIntf::incContentsDepth); }
135  void decContentsDepth()
136  { if (m_enabled) foreach(&IndexIntf::decContentsDepth); }
137  void addContentsItem(bool isDir, const char *name, const char *ref,
138  const char *file, const char *anchor,bool separateIndex=FALSE,bool addToNavIndex=FALSE,
139  Definition *def=0)
140  { if (m_enabled) foreach<bool,const char *,const char *,const char *,const char*,bool,bool,Definition *>
141  (&IndexIntf::addContentsItem,isDir,name,ref,file,anchor,separateIndex,addToNavIndex,def); }
142  void addIndexItem(Definition *context,MemberDef *md,const char *sectionAnchor=0,const char *title=0)
143  { if (m_enabled) foreach<Definition *,MemberDef *,const char *,const char *>
144  (&IndexIntf::addIndexItem,context,md,sectionAnchor,title); }
145  void addIndexFile(const char *name)
146  { if (m_enabled) foreach<const char *>(&IndexIntf::addIndexFile,name); }
147  void addImageFile(const char *name)
148  { if (m_enabled) foreach<const char *>(&IndexIntf::addImageFile,name); }
149  void addStyleSheetFile(const char *name)
150  { if (m_enabled) foreach<const char *>(&IndexIntf::addStyleSheetFile,name); }
151 
152  private:
153  bool m_enabled;
154 };
155 
156 
157 enum IndexSections
158 {
159  isTitlePageStart,
160  isTitlePageAuthor,
161  isMainPage,
162  isModuleIndex,
163  isDirIndex,
164  isNamespaceIndex,
165  isClassHierarchyIndex,
166  isCompoundIndex,
167  isFileIndex,
168  isPageIndex,
169  isModuleDocumentation,
170  isDirDocumentation,
171  isNamespaceDocumentation,
172  isClassDocumentation,
173  isFileDocumentation,
174  isExampleDocumentation,
175  isPageDocumentation,
176  isPageDocumentation2,
177  isEndIndex
178 };
179 
180 enum HighlightedItem
181 {
182  HLI_None=0,
183  HLI_Main,
184  HLI_Modules,
185  //HLI_Directories,
186  HLI_Namespaces,
187  HLI_Hierarchy,
188  HLI_Classes,
189  HLI_Annotated,
190  HLI_Files,
191  HLI_NamespaceMembers,
192  HLI_Functions,
193  HLI_Globals,
194  HLI_Pages,
195  HLI_Examples,
196  HLI_Search,
197  HLI_UserGroup,
198 
199  HLI_ClassVisible,
200  HLI_NamespaceVisible,
201  HLI_FileVisible
202 };
203 
204 enum ClassMemberHighlight
205 {
206  CMHL_All = 0,
207  CMHL_Functions,
208  CMHL_Variables,
209  CMHL_Typedefs,
210  CMHL_Enums,
211  CMHL_EnumValues,
212  CMHL_Properties,
213  CMHL_Events,
214  CMHL_Related,
215  CMHL_Total = CMHL_Related+1
216 };
217 
218 enum FileMemberHighlight
219 {
220  FMHL_All = 0,
221  FMHL_Functions,
222  FMHL_Variables,
223  FMHL_Typedefs,
224  FMHL_Enums,
225  FMHL_EnumValues,
226  FMHL_Defines,
227  FMHL_Total = FMHL_Defines+1
228 };
229 
230 enum NamespaceMemberHighlight
231 {
232  NMHL_All = 0,
233  NMHL_Functions,
234  NMHL_Variables,
235  NMHL_Typedefs,
236  NMHL_Enums,
237  NMHL_EnumValues,
238  NMHL_Total = NMHL_EnumValues+1
239 };
240 
241 enum ClassHighlight
242 {
243  CHL_All = 0,
244  CHL_Classes,
245  CHL_Structs,
246  CHL_Unions,
247  CHL_Interfaces,
248  CHL_Protocols,
249  CHL_Categories,
250  CHL_Exceptions,
251  CHL_Total = CHL_Exceptions+1
252 };
253 
254 void writeGraphInfo(OutputList &ol);
255 void writeIndexHierarchy(OutputList &ol);
256 
257 void countDataStructures();
258 
259 extern int annotatedClasses;
260 extern int hierarchyClasses;
261 extern int documentedFiles;
262 extern int documentedGroups;
263 extern int documentedNamespaces;
264 extern int indexedPages;
265 extern int documentedClassMembers[CMHL_Total];
266 extern int documentedFileMembers[FMHL_Total];
267 extern int documentedNamespaceMembers[NMHL_Total];
268 extern int documentedDirs;
269 extern int documentedHtmlFiles;
270 extern int documentedPages;
271 
272 void startTitle(OutputList &ol,const char *fileName,Definition *def=0);
273 void endTitle(OutputList &ol,const char *fileName,const char *name);
274 void startFile(OutputList &ol,const char *name,const char *manName,
275  const char *title,HighlightedItem hli=HLI_None,
276  bool additionalIndices=FALSE,const char *altSidebarName=0);
277 void endFile(OutputList &ol,bool skipNavIndex=FALSE,bool skipEndContents=FALSE,
278  const QCString &navPath=QCString());
279 void endFileWithNavPath(Definition *d,OutputList &ol);
280 
281 void initClassMemberIndices();
282 void initFileMemberIndices();
283 void initNamespaceMemberIndices();
284 void addClassMemberNameToIndex(MemberDef *md);
285 void addFileMemberNameToIndex(MemberDef *md);
286 void addNamespaceMemberNameToIndex(MemberDef *md);
287 QCString fixSpaces(const QCString &s);
288 
289 #endif
The common base class of all entity definitions found in the sources.
Definition: definition.h:92
A model of a class/file/namespace member symbol.
Definition: memberdef.h:43
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
Definition: qlist.h:126
Abstract interface for index generators.
Definition: index.h:30
IndexList()
Creates a list of indexes.
Definition: index.h:117
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:54
This is an alternative implementation of QCString.
Definition: qcstring.h:131
void addIndex(IndexIntf *intf)
Add an index generator to the list.
Definition: index.h:119
A list of index interfaces.
Definition: index.h:53