1
/***************************************************************************
2
* This program is free software; you can redistribute it and/or modify *
3
* it under the terms of the GNU General Public License as published by *
4
* the Free Software Foundation; either version 2 of the License, or *
5
* (at your option) any later version. *
7
* Copyright (C) 2004-2010 *
8
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
9
***************************************************************************/
12
#include "codegen_utils.h"
18
namespace Codegen_Utils {
21
* Return list of C++ datatypes.
23
QStringList cppDatatypes()
33
l.append("unsigned int");
34
l.append("unsigned short");
35
l.append("unsigned long");
41
* Get list of C++ reserved keywords.
43
const QStringList reservedCppKeywords()
45
static QStringList keywords;
47
if (keywords.isEmpty()) {
48
keywords.append( "and" );
49
keywords.append( "and_eq" );
50
keywords.append( "__asm__" );
51
keywords.append( "asm" );
52
keywords.append( "__attribute__" );
53
keywords.append( "auto" );
54
keywords.append( "bitand" );
55
keywords.append( "bitor" );
56
keywords.append( "bool" );
57
keywords.append( "break" );
58
keywords.append( "BUFSIZ" );
59
keywords.append( "case" );
60
keywords.append( "catch" );
61
keywords.append( "char" );
62
keywords.append( "CHAR_BIT" );
63
keywords.append( "CHAR_MAX" );
64
keywords.append( "CHAR_MIN" );
65
keywords.append( "class" );
66
keywords.append( "CLOCKS_PER_SEC" );
67
keywords.append( "clock_t" );
68
keywords.append( "compl" );
69
keywords.append( "__complex__" );
70
keywords.append( "complex" );
71
keywords.append( "const" );
72
keywords.append( "const_cast" );
73
keywords.append( "continue" );
74
keywords.append( "__DATE__" );
75
keywords.append( "DBL_DIG" );
76
keywords.append( "DBL_EPSILON" );
77
keywords.append( "DBL_MANT_DIG" );
78
keywords.append( "DBL_MAX" );
79
keywords.append( "DBL_MAX_10_EXP" );
80
keywords.append( "DBL_MAX_EXP" );
81
keywords.append( "DBL_MIN" );
82
keywords.append( "DBL_MIN_10_EXP" );
83
keywords.append( "DBL_MIN_EXP" );
84
keywords.append( "default" );
85
keywords.append( "delete" );
86
keywords.append( "DIR" );
87
keywords.append( "div_t" );
88
keywords.append( "do" );
89
keywords.append( "double" );
90
keywords.append( "dynamic_cast" );
91
keywords.append( "E2BIG" );
92
keywords.append( "EACCES" );
93
keywords.append( "EAGAIN" );
94
keywords.append( "EBADF" );
95
keywords.append( "EBADMSG" );
96
keywords.append( "EBUSY" );
97
keywords.append( "ECANCELED" );
98
keywords.append( "ECHILD" );
99
keywords.append( "EDEADLK" );
100
keywords.append( "EDOM" );
101
keywords.append( "EEXIST" );
102
keywords.append( "EFAULT" );
103
keywords.append( "EFBIG" );
104
keywords.append( "EILSEQ" );
105
keywords.append( "EINPROGRESS" );
106
keywords.append( "EINTR" );
107
keywords.append( "EINVAL" );
108
keywords.append( "EIO" );
109
keywords.append( "EISDIR" );
110
keywords.append( "else" );
111
keywords.append( "EMFILE" );
112
keywords.append( "EMLINK" );
113
keywords.append( "EMSGSIZE" );
114
keywords.append( "ENAMETOOLONG" );
115
keywords.append( "ENFILE" );
116
keywords.append( "ENODEV" );
117
keywords.append( "ENOENT" );
118
keywords.append( "ENOEXEC" );
119
keywords.append( "ENOLCK" );
120
keywords.append( "ENOMEM" );
121
keywords.append( "ENOSPC" );
122
keywords.append( "ENOSYS" );
123
keywords.append( "ENOTDIR" );
124
keywords.append( "ENOTEMPTY" );
125
keywords.append( "ENOTSUP" );
126
keywords.append( "ENOTTY" );
127
keywords.append( "enum" );
128
keywords.append( "ENXIO" );
129
keywords.append( "EOF" );
130
keywords.append( "EPERM" );
131
keywords.append( "EPIPE" );
132
keywords.append( "ERANGE" );
133
keywords.append( "EROFS" );
134
keywords.append( "ESPIPE" );
135
keywords.append( "ESRCH" );
136
keywords.append( "ETIMEDOUT" );
137
keywords.append( "EXDEV" );
138
keywords.append( "EXIT_FAILURE" );
139
keywords.append( "EXIT_SUCCESS" );
140
keywords.append( "explicit" );
141
keywords.append( "export" );
142
keywords.append( "extern" );
143
keywords.append( "false" );
144
keywords.append( "__FILE__" );
145
keywords.append( "FILE" );
146
keywords.append( "FILENAME_MAX" );
147
keywords.append( "float" );
148
keywords.append( "FLT_DIG" );
149
keywords.append( "FLT_EPSILON" );
150
keywords.append( "FLT_MANT_DIG" );
151
keywords.append( "FLT_MAX" );
152
keywords.append( "FLT_MAX_10_EXP" );
153
keywords.append( "FLT_MAX_EXP" );
154
keywords.append( "FLT_MIN" );
155
keywords.append( "FLT_MIN_10_EXP" );
156
keywords.append( "FLT_MIN_EXP" );
157
keywords.append( "FLT_RADIX" );
158
keywords.append( "FLT_ROUNDS" );
159
keywords.append( "FOPEN_MAX" );
160
keywords.append( "for" );
161
keywords.append( "fpos_t" );
162
keywords.append( "friend" );
163
keywords.append( "__FUNCTION__" );
164
keywords.append( "__GNUC__" );
165
keywords.append( "goto" );
166
keywords.append( "HUGE_VAL" );
167
keywords.append( "if" );
168
keywords.append( "__imag__" );
169
keywords.append( "inline" );
170
keywords.append( "int" );
171
keywords.append( "INT16_MAX" );
172
keywords.append( "INT16_MIN" );
173
keywords.append( "int16_t" );
174
keywords.append( "INT32_MAX" );
175
keywords.append( "INT32_MIN" );
176
keywords.append( "int32_t" );
177
keywords.append( "INT64_MAX" );
178
keywords.append( "INT64_MIN" );
179
keywords.append( "int64_t" );
180
keywords.append( "INT8_MAX" );
181
keywords.append( "INT8_MIN" );
182
keywords.append( "int8_t" );
183
keywords.append( "INT_FAST16_MAX" );
184
keywords.append( "INT_FAST16_MIN" );
185
keywords.append( "int_fast16_t" );
186
keywords.append( "INT_FAST32_MAX" );
187
keywords.append( "INT_FAST32_MIN" );
188
keywords.append( "int_fast32_t" );
189
keywords.append( "INT_FAST64_MAX" );
190
keywords.append( "INT_FAST64_MIN" );
191
keywords.append( "int_fast64_t" );
192
keywords.append( "INT_FAST8_MAX" );
193
keywords.append( "INT_FAST8_MIN" );
194
keywords.append( "int_fast8_t" );
195
keywords.append( "INT_LEAST16_MAX" );
196
keywords.append( "INT_LEAST16_MIN" );
197
keywords.append( "int_least16_t" );
198
keywords.append( "INT_LEAST32_MAX" );
199
keywords.append( "INT_LEAST32_MIN" );
200
keywords.append( "int_least32_t" );
201
keywords.append( "INT_LEAST64_MAX" );
202
keywords.append( "INT_LEAST64_MIN" );
203
keywords.append( "int_least64_t" );
204
keywords.append( "INT_LEAST8_MAX" );
205
keywords.append( "INT_LEAST8_MIN" );
206
keywords.append( "int_least8_t" );
207
keywords.append( "INT_MAX" );
208
keywords.append( "INTMAX_MAX" );
209
keywords.append( "INTMAX_MIN" );
210
keywords.append( "intmax_t" );
211
keywords.append( "INT_MIN" );
212
keywords.append( "INTPTR_MAX" );
213
keywords.append( "INTPTR_MIN" );
214
keywords.append( "intptr_t" );
215
keywords.append( "_IOFBF" );
216
keywords.append( "_IOLBF" );
217
keywords.append( "_IONBF" );
218
keywords.append( "jmp_buf" );
219
keywords.append( "__label__" );
220
keywords.append( "LC_ALL" );
221
keywords.append( "LC_COLLATE" );
222
keywords.append( "LC_CTYPE" );
223
keywords.append( "LC_MONETARY" );
224
keywords.append( "LC_NUMERIC" );
225
keywords.append( "LC_TIME" );
226
keywords.append( "LDBL_DIG" );
227
keywords.append( "LDBL_EPSILON" );
228
keywords.append( "LDBL_MANT_DIG" );
229
keywords.append( "LDBL_MAX" );
230
keywords.append( "LDBL_MAX_10_EXP" );
231
keywords.append( "LDBL_MAX_EXP" );
232
keywords.append( "LDBL_MIN" );
233
keywords.append( "LDBL_MIN_10_EXP" );
234
keywords.append( "LDBL_MIN_EXP" );
235
keywords.append( "ldiv_t" );
236
keywords.append( "__LINE__" );
237
keywords.append( "LLONG_MAX" );
238
keywords.append( "long" );
239
keywords.append( "LONG_MAX" );
240
keywords.append( "LONG_MIN" );
241
keywords.append( "L_tmpnam" );
242
keywords.append( "M_1_PI" );
243
keywords.append( "M_2_PI" );
244
keywords.append( "M_2_SQRTPI" );
245
keywords.append( "MB_CUR_MAX" );
246
keywords.append( "MB_LEN_MAX" );
247
keywords.append( "mbstate_t" );
248
keywords.append( "M_E" );
249
keywords.append( "M_LN10" );
250
keywords.append( "M_LN2" );
251
keywords.append( "M_LOG10E" );
252
keywords.append( "M_LOG2E" );
253
keywords.append( "M_PI" );
254
keywords.append( "M_PI_2" );
255
keywords.append( "M_PI_4" );
256
keywords.append( "M_SQRT1_2" );
257
keywords.append( "M_SQRT2" );
258
keywords.append( "mutable" );
259
keywords.append( "namespace" );
260
keywords.append( "new" );
261
keywords.append( "not" );
262
keywords.append( "not_eq" );
263
keywords.append( "NPOS" );
264
keywords.append( "NULL" );
265
keywords.append( "operator" );
266
keywords.append( "or" );
267
keywords.append( "or_eq" );
268
keywords.append( "__PRETTY_FUNCTION__" );
269
keywords.append( "private" );
270
keywords.append( "protected" );
271
keywords.append( "PTRDIFF_MAX" );
272
keywords.append( "PTRDIFF_MIN" );
273
keywords.append( "ptrdiff_t" );
274
keywords.append( "public" );
275
keywords.append( "RAND_MAX" );
276
keywords.append( "__real__" );
277
keywords.append( "register" );
278
keywords.append( "reinterpret_cast" );
279
keywords.append( "restrict" );
280
keywords.append( "return" );
281
keywords.append( "SCHAR_MAX" );
282
keywords.append( "SCHAR_MIN" );
283
keywords.append( "SEEK_CUR" );
284
keywords.append( "SEEK_END" );
285
keywords.append( "SEEK_SET" );
286
keywords.append( "short" );
287
keywords.append( "SHRT_MAX" );
288
keywords.append( "SHRT_MIN" );
289
keywords.append( "SIGABRT" );
290
keywords.append( "SIGALRM" );
291
keywords.append( "SIG_ATOMIC_MAX" );
292
keywords.append( "SIG_ATOMIC_MIN" );
293
keywords.append( "sig_atomic_t" );
294
keywords.append( "SIGCHLD" );
295
keywords.append( "SIGCONT" );
296
keywords.append( "SIG_DFL" );
297
keywords.append( "SIG_ERR" );
298
keywords.append( "SIGFPE" );
299
keywords.append( "SIGHUP" );
300
keywords.append( "SIG_IGN" );
301
keywords.append( "SIGILL" );
302
keywords.append( "SIGINT" );
303
keywords.append( "SIGKILL" );
304
keywords.append( "signed" );
305
keywords.append( "SIGPIPE" );
306
keywords.append( "SIGQUIT" );
307
keywords.append( "SIGSEGV" );
308
keywords.append( "SIGSTOP" );
309
keywords.append( "SIGTERM" );
310
keywords.append( "SIGTRAP" );
311
keywords.append( "SIGTSTP" );
312
keywords.append( "SIGTTIN" );
313
keywords.append( "SIGTTOU" );
314
keywords.append( "SIGUSR1" );
315
keywords.append( "SIGUSR2" );
316
keywords.append( "SINT_MAX" );
317
keywords.append( "SINT_MIN" );
318
keywords.append( "SIZE_MAX" );
319
keywords.append( "sizeof" );
320
keywords.append( "size_t" );
321
keywords.append( "SLONG_MAX" );
322
keywords.append( "SLONG_MIN" );
323
keywords.append( "SSHRT_MAX" );
324
keywords.append( "SSHRT_MIN" );
325
keywords.append( "ssize_t" );
326
keywords.append( "static" );
327
keywords.append( "static_cast" );
328
keywords.append( "__STDC__" );
329
keywords.append( "__STDC_VERSION__" );
330
keywords.append( "stderr" );
331
keywords.append( "stdin" );
332
keywords.append( "stdout" );
333
keywords.append( "struct" );
334
keywords.append( "switch" );
335
keywords.append( "template" );
336
keywords.append( "this" );
337
keywords.append( "throw" );
338
keywords.append( "__TIME__" );
339
keywords.append( "time_t" );
340
keywords.append( "TMP_MAX" );
341
keywords.append( "true" );
342
keywords.append( "try" );
343
keywords.append( "typedef" );
344
keywords.append( "typeid" );
345
keywords.append( "typename" );
346
keywords.append( "typeof" );
347
keywords.append( "UCHAR_MAX" );
348
keywords.append( "UINT16_MAX" );
349
keywords.append( "uint16_t" );
350
keywords.append( "UINT32_MAX" );
351
keywords.append( "uint32_t" );
352
keywords.append( "UINT64_MAX" );
353
keywords.append( "uint64_t" );
354
keywords.append( "UINT8_MAX" );
355
keywords.append( "uint8_t" );
356
keywords.append( "UINT_FAST16_MAX" );
357
keywords.append( "uint_fast16_t" );
358
keywords.append( "UINT_FAST32_MAX" );
359
keywords.append( "uint_fast32_t" );
360
keywords.append( "UINT_FAST64_MAX" );
361
keywords.append( "uint_fast64_t" );
362
keywords.append( "UINT_FAST8_MAX" );
363
keywords.append( "uint_fast8_t" );
364
keywords.append( "UINT_LEAST16_MAX" );
365
keywords.append( "uint_least16_t" );
366
keywords.append( "UINT_LEAST32_MAX" );
367
keywords.append( "uint_least32_t" );
368
keywords.append( "UINT_LEAST64_MAX" );
369
keywords.append( "uint_least64_t" );
370
keywords.append( "UINT_LEAST8_MAX" );
371
keywords.append( "uint_least8_t" );
372
keywords.append( "UINT_MAX" );
373
keywords.append( "UINTMAX_MAX" );
374
keywords.append( "uintmax_t" );
375
keywords.append( "UINTPTR_MAX" );
376
keywords.append( "uintptr_t" );
377
keywords.append( "ULLONG_MAX" );
378
keywords.append( "ULONG_MAX" );
379
keywords.append( "union" );
380
keywords.append( "unsigned" );
381
keywords.append( "USHRT_MAX" );
382
keywords.append( "using" );
383
keywords.append( "va_list" );
384
keywords.append( "virtual" );
385
keywords.append( "void" );
386
keywords.append( "__volatile__" );
387
keywords.append( "volatile" );
388
keywords.append( "WCHAR_MAX" );
389
keywords.append( "WCHAR_MIN" );
390
keywords.append( "wchar_t" );
391
keywords.append( "wctrans_t" );
392
keywords.append( "wctype_t" );
393
keywords.append( "WEOF" );
394
keywords.append( "while" );
395
keywords.append( "WINT_MAX" );
396
keywords.append( "WINT_MIN" );
397
keywords.append( "wint_t" );
398
keywords.append( "xor" );
399
keywords.append( "xor_eq" );
406
* Add C++ stereotypes.
408
void createCppStereotypes()
410
UMLDoc *umldoc = UMLApp::app()->document();
411
umldoc->findOrCreateStereotype("constructor");
412
// declares an operation as friend
413
umldoc->findOrCreateStereotype("friend");
414
// to use in methods that aren't abstract
415
umldoc->findOrCreateStereotype("virtual");
419
* Return the input string with the first letter capitalized.
421
QString capitalizeFirstLetter(const QString &string)
423
QChar firstChar = string.at(0);
424
return firstChar.toUpper() + string.mid(1);
427
} // end namespace Codegen_Utils