Imported Upstream version 1.8.15
[platform/upstream/doxygen.git] / src / types.h
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 <string.h>
20 #include <qcstring.h>
21
22 /** @file
23  *  @brief This file contains a number of basic enums and types. 
24  */
25
26 /** Protection level of members */
27 enum Protection   { Public, Protected, Private, Package } ;
28
29 /** Virtualness of a member. */
30 enum Specifier    { Normal, Virtual, Pure } ;
31
32 /** Kind of method */
33 enum MethodTypes  { Method, Signal, Slot, DCOP, Property, Event };
34
35 /** Type of member relation */
36 enum RelatesType  { Simple, Duplicate, MemberOf };
37
38 /** Kind of member relationship */
39 enum Relationship { Member, Related, Foreign };
40
41 /** Language as given by extension */
42 enum SrcLangExt
43 {
44   SrcLangExt_Unknown  = 0x00000,
45   SrcLangExt_IDL      = 0x00008,
46   SrcLangExt_Java     = 0x00010,
47   SrcLangExt_CSharp   = 0x00020,
48   SrcLangExt_D        = 0x00040,
49   SrcLangExt_PHP      = 0x00080,
50   SrcLangExt_ObjC     = 0x00100,
51   SrcLangExt_Cpp      = 0x00200,
52   SrcLangExt_JS       = 0x00400,
53   SrcLangExt_Python   = 0x00800,
54   SrcLangExt_Fortran  = 0x01000,
55   SrcLangExt_VHDL     = 0x02000,
56   SrcLangExt_XML      = 0x04000,
57   SrcLangExt_Tcl      = 0x08000,
58   SrcLangExt_Markdown = 0x10000,
59   SrcLangExt_SQL      = 0x20000,
60   SrcLangExt_Slice    = 0x40000
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
78   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
94   Grouping( const char *gn, GroupPri_t p ) : groupname(gn), pri(p) {}
95   Grouping( const Grouping &g ) : groupname(g.groupname), pri(g.pri) {}
96   QCString groupname;   //!< name of the group
97   GroupPri_t pri;       //!< priority of this definition
98
99 };
100
101 struct ListItemInfo
102 {
103   QCString type;
104   int itemId;
105 };
106
107 enum MemberListType
108 {
109   MemberListType_privateLists       = 0x0800,
110   MemberListType_detailedLists      = 0x1000,
111   MemberListType_declarationLists   = 0x2000,
112   MemberListType_documentationLists = 0x4000,
113
114   MemberListType_pubMethods              = 0,
115   MemberListType_proMethods              = 1,
116   MemberListType_pacMethods              = 2,
117   MemberListType_priMethods              = 3 + MemberListType_privateLists,
118   MemberListType_pubStaticMethods        = 4,
119   MemberListType_proStaticMethods        = 5,
120   MemberListType_pacStaticMethods        = 6,
121   MemberListType_priStaticMethods        = 7 + MemberListType_privateLists,
122   MemberListType_pubSlots                = 8,
123   MemberListType_proSlots                = 9,
124   MemberListType_priSlots                = 10 + MemberListType_privateLists,
125   MemberListType_pubAttribs              = 11,
126   MemberListType_proAttribs              = 12,
127   MemberListType_pacAttribs              = 13,
128   MemberListType_priAttribs              = 14 + MemberListType_privateLists,
129   MemberListType_pubStaticAttribs        = 15,
130   MemberListType_proStaticAttribs        = 16,
131   MemberListType_pacStaticAttribs        = 17,
132   MemberListType_priStaticAttribs        = 18 + MemberListType_privateLists,
133   MemberListType_pubTypes                = 19,
134   MemberListType_proTypes                = 20,
135   MemberListType_pacTypes                = 21,
136   MemberListType_priTypes                = 22 + MemberListType_privateLists,
137   MemberListType_related                 = 23,
138   MemberListType_signals                 = 24,
139   MemberListType_friends                 = 25,
140   MemberListType_dcopMethods             = 26,
141   MemberListType_properties              = 27,
142   MemberListType_events                  = 28,
143
144   MemberListType_typedefMembers          = 29 + MemberListType_detailedLists,
145   MemberListType_enumMembers             = 30 + MemberListType_detailedLists,
146   MemberListType_enumValMembers          = 31 + MemberListType_detailedLists,
147   MemberListType_functionMembers         = 32 + MemberListType_detailedLists,
148   MemberListType_relatedMembers          = 33 + MemberListType_detailedLists,
149   MemberListType_variableMembers         = 34 + MemberListType_detailedLists,
150   MemberListType_propertyMembers         = 35 + MemberListType_detailedLists,
151   MemberListType_eventMembers            = 36 + MemberListType_detailedLists,
152   MemberListType_constructors            = 37 + MemberListType_detailedLists,
153
154   MemberListType_allMembersList          = 38,
155
156   MemberListType_decDefineMembers        = 39 + MemberListType_declarationLists,
157   MemberListType_decProtoMembers         = 40 + MemberListType_declarationLists, 
158   MemberListType_decTypedefMembers       = 41 + MemberListType_declarationLists,
159   MemberListType_decEnumMembers          = 42 + MemberListType_declarationLists,
160   MemberListType_decFuncMembers          = 43 + MemberListType_declarationLists,
161   MemberListType_decVarMembers           = 44 + MemberListType_declarationLists,
162   MemberListType_decEnumValMembers       = 45 + MemberListType_declarationLists,
163   MemberListType_decPubSlotMembers       = 46 + MemberListType_declarationLists,
164   MemberListType_decProSlotMembers       = 47 + MemberListType_declarationLists,
165   MemberListType_decPriSlotMembers       = 48 + MemberListType_declarationLists,
166   MemberListType_decSignalMembers        = 49 + MemberListType_declarationLists,
167   MemberListType_decEventMembers         = 50 + MemberListType_declarationLists,
168   MemberListType_decFriendMembers        = 51 + MemberListType_declarationLists,
169   MemberListType_decPropMembers          = 52 + MemberListType_declarationLists,
170
171   MemberListType_docDefineMembers        = 53 + MemberListType_documentationLists,
172   MemberListType_docProtoMembers         = 54 + MemberListType_documentationLists,
173   MemberListType_docTypedefMembers       = 55 + MemberListType_documentationLists,
174   MemberListType_docEnumMembers          = 56 + MemberListType_documentationLists,
175   MemberListType_docFuncMembers          = 57 + MemberListType_documentationLists,
176   MemberListType_docVarMembers           = 58 + MemberListType_documentationLists,
177   MemberListType_docEnumValMembers       = 59 + MemberListType_documentationLists,
178   MemberListType_docPubSlotMembers       = 60 + MemberListType_documentationLists,
179   MemberListType_docProSlotMembers       = 61 + MemberListType_documentationLists,
180   MemberListType_docPriSlotMembers       = 62 + MemberListType_documentationLists,
181   MemberListType_docSignalMembers        = 63 + MemberListType_documentationLists,
182   MemberListType_docEventMembers         = 64 + MemberListType_documentationLists,
183   MemberListType_docFriendMembers        = 65 + MemberListType_documentationLists,
184   MemberListType_docPropMembers          = 66 + MemberListType_documentationLists,
185
186   MemberListType_redefinedBy             = 67,
187   MemberListType_enumFields              = 68,
188   MemberListType_memberGroup             = 69,
189
190   // this one is for the summary section on the class page
191   MemberListType_interfaces              = 70,
192   // this one is for the detailed section on the class page
193   MemberListType_interfaceMembers        = 71 + MemberListType_detailedLists,
194   MemberListType_services                = 72,
195   MemberListType_serviceMembers          = 73 + MemberListType_detailedLists,
196
197   MemberListType_decSequenceMembers      = 74 + MemberListType_declarationLists,
198   MemberListType_docSequenceMembers      = 75 + MemberListType_documentationLists,
199   MemberListType_decDictionaryMembers    = 76 + MemberListType_declarationLists,
200   MemberListType_docDictionaryMembers    = 77 + MemberListType_documentationLists
201 };
202
203 enum MemberType
204 {
205   MemberType_Define,
206   MemberType_Function,
207   MemberType_Variable,
208   MemberType_Typedef,
209   MemberType_Enumeration,
210   MemberType_EnumValue,
211   MemberType_Signal,
212   MemberType_Slot,
213   MemberType_Friend,
214   MemberType_DCOP,
215   MemberType_Property,
216   MemberType_Event,
217   MemberType_Interface,
218   MemberType_Service,
219   MemberType_Sequence,
220   MemberType_Dictionary
221 };
222
223 enum FortranFormat
224 {
225   FortranFormat_Unknown,
226   FortranFormat_Free,
227   FortranFormat_Fixed
228 };
229
230 class LocalToc
231 {
232   public:
233     enum Type {
234       None                   = 0, // initial value
235       Html                   = 0, // index / also to be used as bit position in mask (1 << Html)
236       Latex                  = 1, // ...
237       Xml                    = 2, // ...
238       Docbook                = 3, // ...
239       numTocTypes            = 4  // number of enum values
240     };
241     LocalToc() : m_mask(None) { memset(m_level,0,sizeof(m_level)); }
242
243     // setters
244     void enableHtml(int level)
245     {
246       m_mask|=(1<<Html);
247       m_level[Html]=level;
248     }
249     void enableLatex(int level)
250     {
251       m_mask|=(1<<Latex);
252       m_level[Latex]=level;
253     }
254     void enableXml(int level)
255     {
256       m_mask|=(1<<Xml);
257       m_level[Xml]=level;
258     }
259     void enableDocbook(int level)
260     {
261       m_mask|=(1<<Docbook);
262       m_level[Docbook]=level;
263     }
264
265     // getters
266     bool isHtmlEnabled()  const { return (m_mask & (1<<Html))!=0;  }
267     bool isLatexEnabled() const { return (m_mask & (1<<Latex))!=0; }
268     bool isXmlEnabled()   const { return (m_mask & (1<<Xml))!=0;   }
269     bool isDocbookEnabled()   const { return (m_mask & (1<<Docbook))!=0;   }
270     bool nothingEnabled() const { return m_mask == None; }
271     int htmlLevel()       const { return m_level[Html]; }
272     int latexLevel()      const { return m_level[Latex]; }
273     int xmlLevel()        const { return m_level[Xml]; }
274     int docbookLevel()    const { return m_level[Docbook]; }
275     int mask()            const { return m_mask; }
276
277   private:
278     int m_mask;
279     int m_level[numTocTypes];
280 };
281
282 #endif