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