1 /******************************************************************************
2  *
3  * Copyright (C) 1997-2015 by Dimitri van Heesch.
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation under the terms of the GNU General Public License is hereby
7  * granted. No representations are made about the suitability of this software
8  * for any purpose. It is provided "as is" without express or implied warranty.
9  * See the GNU General Public License for more details.
10  *
11  * Documents produced by Doxygen are derivative works derived from the
12  * input used in their production; they are not affected by this license.
13  *
14  */
15 
16 #ifndef TYPES_H
17 #define TYPES_H
18 
19 #include "qcstring.h"
20 
21 /** @file
22  *  @brief This file contains a number of basic enums and types.
23  */
24 
25 /** Protection level of members */
26 enum Protection   { Public, Protected, Private, Package } ;
27 
28 /** Virtualness of a member. */
29 enum Specifier    { Normal, Virtual, Pure } ;
30 
31 /** Kind of method */
32 enum MethodTypes  { Method, Signal, Slot, DCOP, Property, Event };
33 
34 /** Type of member relation */
35 enum RelatesType  { Simple, Duplicate, MemberOf };
36 
37 /** Kind of member relationship */
38 enum Relationship { Member, Related, Foreign };
39 
40 /** Language as given by extension */
41 enum SrcLangExt
42 {
43   SrcLangExt_Unknown  = 0x00000,
44   SrcLangExt_IDL      = 0x00008,
45   SrcLangExt_Java     = 0x00010,
46   SrcLangExt_CSharp   = 0x00020,
47   SrcLangExt_D        = 0x00040,
48   SrcLangExt_PHP      = 0x00080,
49   SrcLangExt_ObjC     = 0x00100,
50   SrcLangExt_Cpp      = 0x00200,
51   SrcLangExt_JS       = 0x00400,
52   SrcLangExt_Python   = 0x00800,
53   SrcLangExt_Fortran  = 0x01000,
54   SrcLangExt_VHDL     = 0x02000,
55   SrcLangExt_XML      = 0x04000,
56   //SrcLangExt_Tcl      = 0x08000, // no longer supported
57   SrcLangExt_Markdown = 0x10000,
58   SrcLangExt_SQL      = 0x20000,
59   SrcLangExt_Slice    = 0x40000,
60   SrcLangExt_Lex      = 0x80000
61 };
62 
63 /** Grouping info */
64 struct Grouping
65 {
66   /** Grouping priority */
67   enum GroupPri_t
68   {
69     GROUPING_LOWEST,
70     GROUPING_AUTO_WEAK = GROUPING_LOWEST,     //!< membership in group was defined via \@weakgroup
71     GROUPING_AUTO_ADD,     //!< membership in group was defined via \@add[to]group
72     GROUPING_AUTO_DEF,     //!< membership in group was defined via \@defgroup
73     GROUPING_AUTO_HIGHEST = GROUPING_AUTO_DEF,
74     GROUPING_INGROUP,      //!< membership in group was defined by \@ingroup
75     GROUPING_HIGHEST = GROUPING_INGROUP
76   };
77 
getGroupPriNameGrouping78   static const char *getGroupPriName( GroupPri_t priority )
79   {
80     switch( priority )
81     {
82       case GROUPING_AUTO_WEAK:
83         return "@weakgroup";
84       case GROUPING_AUTO_ADD:
85         return "@addtogroup";
86       case GROUPING_AUTO_DEF:
87         return "@defgroup";
88       case GROUPING_INGROUP:
89         return "@ingroup";
90     }
91     return "???";
92   }
93 
GroupingGrouping94   Grouping( const QCString &gn, GroupPri_t p ) : groupname(gn), pri(p) {}
95   QCString groupname;   //!< name of the group
96   GroupPri_t pri;       //!< priority of this definition
97 
98 };
99 
100 enum MemberListType
101 {
102   MemberListType_privateLists       = 0x0800,
103   MemberListType_detailedLists      = 0x1000,
104   MemberListType_declarationLists   = 0x2000,
105   MemberListType_documentationLists = 0x4000,
106 
107   MemberListType_undefined               = -1,
108 
109   MemberListType_pubMethods              = 0,
110   MemberListType_proMethods              = 1,
111   MemberListType_pacMethods              = 2,
112   MemberListType_priMethods              = 3 + MemberListType_privateLists,
113   MemberListType_pubStaticMethods        = 4,
114   MemberListType_proStaticMethods        = 5,
115   MemberListType_pacStaticMethods        = 6,
116   MemberListType_priStaticMethods        = 7 + MemberListType_privateLists,
117   MemberListType_pubSlots                = 8,
118   MemberListType_proSlots                = 9,
119   MemberListType_priSlots                = 10 + MemberListType_privateLists,
120   MemberListType_pubAttribs              = 11,
121   MemberListType_proAttribs              = 12,
122   MemberListType_pacAttribs              = 13,
123   MemberListType_priAttribs              = 14 + MemberListType_privateLists,
124   MemberListType_pubStaticAttribs        = 15,
125   MemberListType_proStaticAttribs        = 16,
126   MemberListType_pacStaticAttribs        = 17,
127   MemberListType_priStaticAttribs        = 18 + MemberListType_privateLists,
128   MemberListType_pubTypes                = 19,
129   MemberListType_proTypes                = 20,
130   MemberListType_pacTypes                = 21,
131   MemberListType_priTypes                = 22 + MemberListType_privateLists,
132   MemberListType_related                 = 23,
133   MemberListType_signals                 = 24,
134   MemberListType_friends                 = 25,
135   MemberListType_dcopMethods             = 26,
136   MemberListType_properties              = 27,
137   MemberListType_events                  = 28,
138 
139   MemberListType_typedefMembers          = 29 + MemberListType_detailedLists,
140   MemberListType_enumMembers             = 30 + MemberListType_detailedLists,
141   MemberListType_enumValMembers          = 31 + MemberListType_detailedLists,
142   MemberListType_functionMembers         = 32 + MemberListType_detailedLists,
143   MemberListType_relatedMembers          = 33 + MemberListType_detailedLists,
144   MemberListType_variableMembers         = 34 + MemberListType_detailedLists,
145   MemberListType_propertyMembers         = 35 + MemberListType_detailedLists,
146   MemberListType_eventMembers            = 36 + MemberListType_detailedLists,
147   MemberListType_constructors            = 37 + MemberListType_detailedLists,
148 
149   MemberListType_allMembersList          = 38,
150 
151   MemberListType_decDefineMembers        = 39 + MemberListType_declarationLists,
152   MemberListType_decProtoMembers         = 40 + MemberListType_declarationLists,
153   MemberListType_decTypedefMembers       = 41 + MemberListType_declarationLists,
154   MemberListType_decEnumMembers          = 42 + MemberListType_declarationLists,
155   MemberListType_decFuncMembers          = 43 + MemberListType_declarationLists,
156   MemberListType_decVarMembers           = 44 + MemberListType_declarationLists,
157   MemberListType_decEnumValMembers       = 45 + MemberListType_declarationLists,
158   MemberListType_decPubSlotMembers       = 46 + MemberListType_declarationLists,
159   MemberListType_decProSlotMembers       = 47 + MemberListType_declarationLists,
160   MemberListType_decPriSlotMembers       = 48 + MemberListType_declarationLists,
161   MemberListType_decSignalMembers        = 49 + MemberListType_declarationLists,
162   MemberListType_decEventMembers         = 50 + MemberListType_declarationLists,
163   MemberListType_decFriendMembers        = 51 + MemberListType_declarationLists,
164   MemberListType_decPropMembers          = 52 + MemberListType_declarationLists,
165 
166   MemberListType_docDefineMembers        = 53 + MemberListType_documentationLists,
167   MemberListType_docProtoMembers         = 54 + MemberListType_documentationLists,
168   MemberListType_docTypedefMembers       = 55 + MemberListType_documentationLists,
169   MemberListType_docEnumMembers          = 56 + MemberListType_documentationLists,
170   MemberListType_docFuncMembers          = 57 + MemberListType_documentationLists,
171   MemberListType_docVarMembers           = 58 + MemberListType_documentationLists,
172   MemberListType_docEnumValMembers       = 59 + MemberListType_documentationLists,
173   MemberListType_docPubSlotMembers       = 60 + MemberListType_documentationLists,
174   MemberListType_docProSlotMembers       = 61 + MemberListType_documentationLists,
175   MemberListType_docPriSlotMembers       = 62 + MemberListType_documentationLists,
176   MemberListType_docSignalMembers        = 63 + MemberListType_documentationLists,
177   MemberListType_docEventMembers         = 64 + MemberListType_documentationLists,
178   MemberListType_docFriendMembers        = 65 + MemberListType_documentationLists,
179   MemberListType_docPropMembers          = 66 + MemberListType_documentationLists,
180 
181   MemberListType_redefinedBy             = 67,
182   MemberListType_enumFields              = 68,
183   MemberListType_memberGroup             = 69,
184 
185   // this one is for the summary section on the class page
186   MemberListType_interfaces              = 70,
187   // this one is for the detailed section on the class page
188   MemberListType_interfaceMembers        = 71 + MemberListType_detailedLists,
189   MemberListType_services                = 72,
190   MemberListType_serviceMembers          = 73 + MemberListType_detailedLists,
191 
192   MemberListType_decSequenceMembers      = 74 + MemberListType_declarationLists,
193   MemberListType_docSequenceMembers      = 75 + MemberListType_documentationLists,
194   MemberListType_decDictionaryMembers    = 76 + MemberListType_declarationLists,
195   MemberListType_docDictionaryMembers    = 77 + MemberListType_documentationLists
196 };
197 
198 enum class MemberListContainer
199 {
200   File,
201   Namespace,
202   Group,
203   Class
204 };
205 
206 enum class CodeSymbolType
207 {
208   Default,
209   // Class types
210   Class,
211   Struct,
212   Union,
213   Interface,
214   Protocol,
215   Category,
216   Exception,
217   Service,
218   Singleton,
219   // Other container types
220   Concept,
221   Namespace,
222   Package,
223   // Member types
224   Define,
225   Function,
226   Variable,
227   Typedef,
228   EnumValue,
229   Enumeration,
230   Signal,
231   Slot,
232   Friend,
233   DCOP,
234   Property,
235   Event,
236   Sequence,
237   Dictionary
238 };
239 
codeSymbolType2Str(CodeSymbolType type)240 constexpr const char *codeSymbolType2Str(CodeSymbolType type)
241 {
242   switch (type)
243   {
244     case CodeSymbolType::Class:       return "class";
245     case CodeSymbolType::Struct:      return "struct";
246     case CodeSymbolType::Union:       return "union";
247     case CodeSymbolType::Interface:   return "interface";
248     case CodeSymbolType::Protocol:    return "protocol";
249     case CodeSymbolType::Category:    return "category";
250     case CodeSymbolType::Exception:   return "exception";
251     case CodeSymbolType::Service:     return "service";
252     case CodeSymbolType::Singleton:   return "singleton";
253     case CodeSymbolType::Concept:     return "concept";
254     case CodeSymbolType::Namespace:   return "namespace";
255     case CodeSymbolType::Package:     return "package";
256     case CodeSymbolType::Define:      return "define";
257     case CodeSymbolType::Function:    return "function";
258     case CodeSymbolType::Variable:    return "variable";
259     case CodeSymbolType::Typedef:     return "typedef";
260     case CodeSymbolType::EnumValue:   return "enumvalue";
261     case CodeSymbolType::Enumeration: return "enumeration";
262     case CodeSymbolType::Signal:      return "signal";
263     case CodeSymbolType::Slot:        return "slot";
264     case CodeSymbolType::Friend:      return "friend";
265     case CodeSymbolType::DCOP:        return "dcop";
266     case CodeSymbolType::Property:    return "property";
267     case CodeSymbolType::Event:       return "event";
268     case CodeSymbolType::Sequence:    return "sequence";
269     case CodeSymbolType::Dictionary:  return "dictionary";
270     default:
271       return 0;
272   }
273 }
274 
275 
276 enum MemberType
277 {
278   MemberType_Define,
279   MemberType_Function,
280   MemberType_Variable,
281   MemberType_Typedef,
282   MemberType_Enumeration,
283   MemberType_EnumValue,
284   MemberType_Signal,
285   MemberType_Slot,
286   MemberType_Friend,
287   MemberType_DCOP,
288   MemberType_Property,
289   MemberType_Event,
290   MemberType_Interface,
291   MemberType_Service,
292   MemberType_Sequence,
293   MemberType_Dictionary
294 };
295 
296 enum FortranFormat
297 {
298   FortranFormat_Unknown,
299   FortranFormat_Free,
300   FortranFormat_Fixed
301 };
302 
303 class LocalToc
304 {
305   public:
306     enum Type {
307       None                   = 0, // initial value
308       Html                   = 0, // index / also to be used as bit position in mask (1 << Html)
309       Latex                  = 1, // ...
310       Xml                    = 2, // ...
311       Docbook                = 3, // ...
312       numTocTypes            = 4  // number of enum values
313     };
LocalToc()314     LocalToc() : m_mask(None) { memset(m_level,0,sizeof(m_level)); }
315 
316     // setters
enableHtml(int level)317     void enableHtml(int level)
318     {
319       m_mask|=(1<<Html);
320       m_level[Html]=level;
321     }
enableLatex(int level)322     void enableLatex(int level)
323     {
324       m_mask|=(1<<Latex);
325       m_level[Latex]=level;
326     }
enableXml(int level)327     void enableXml(int level)
328     {
329       m_mask|=(1<<Xml);
330       m_level[Xml]=level;
331     }
enableDocbook(int level)332     void enableDocbook(int level)
333     {
334       m_mask|=(1<<Docbook);
335       m_level[Docbook]=level;
336     }
337 
338     // getters
isHtmlEnabled()339     bool isHtmlEnabled()  const { return (m_mask & (1<<Html))!=0;  }
isLatexEnabled()340     bool isLatexEnabled() const { return (m_mask & (1<<Latex))!=0; }
isXmlEnabled()341     bool isXmlEnabled()   const { return (m_mask & (1<<Xml))!=0;   }
isDocbookEnabled()342     bool isDocbookEnabled()   const { return (m_mask & (1<<Docbook))!=0;   }
nothingEnabled()343     bool nothingEnabled() const { return m_mask == None; }
htmlLevel()344     int htmlLevel()       const { return m_level[Html]; }
latexLevel()345     int latexLevel()      const { return m_level[Latex]; }
xmlLevel()346     int xmlLevel()        const { return m_level[Xml]; }
docbookLevel()347     int docbookLevel()    const { return m_level[Docbook]; }
mask()348     int mask()            const { return m_mask; }
349 
350   private:
351     int m_mask;
352     int m_level[numTocTypes];
353 };
354 
355 #endif
356