~ubuntu-branches/ubuntu/saucy/umbrello/saucy-proposed

« back to all changes in this revision

Viewing changes to umbrello/codegenerators/codegen_utils.cpp

  • Committer: Package Import Robot
  • Author(s): Jonathan Riddell
  • Date: 2013-06-21 02:29:56 UTC
  • Revision ID: package-import@ubuntu.com-20130621022956-vfvg2xih76w1ydxn
Tags: upstream-4.10.80
ImportĀ upstreamĀ versionĀ 4.10.80

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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.                                   *
 
6
 *                                                                         *
 
7
 *   Copyright (C) 2004-2010                                               *
 
8
 *   Umbrello UML Modeller Authors <uml-devel@uml.sf.net>                  *
 
9
 ***************************************************************************/
 
10
 
 
11
// own header
 
12
#include "codegen_utils.h"
 
13
 
 
14
// app includes
 
15
#include "uml.h"
 
16
#include "umldoc.h"
 
17
 
 
18
namespace Codegen_Utils {
 
19
 
 
20
/**
 
21
 * Return list of C++ datatypes.
 
22
 */
 
23
QStringList cppDatatypes()
 
24
{
 
25
    QStringList l;
 
26
    l.append("int");
 
27
    l.append("char");
 
28
    l.append("bool");
 
29
    l.append("float");
 
30
    l.append("double");
 
31
    l.append("short");
 
32
    l.append("long");
 
33
    l.append("unsigned int");
 
34
    l.append("unsigned short");
 
35
    l.append("unsigned long");
 
36
    l.append("string");
 
37
    return l;
 
38
}
 
39
 
 
40
/**
 
41
 * Get list of C++ reserved keywords.
 
42
 */
 
43
const QStringList reservedCppKeywords()
 
44
{
 
45
    static QStringList keywords;
 
46
 
 
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" );
 
400
    }
 
401
 
 
402
    return keywords;
 
403
}
 
404
 
 
405
/**
 
406
 * Add C++ stereotypes.
 
407
 */
 
408
void createCppStereotypes()
 
409
{
 
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");
 
416
}
 
417
 
 
418
/**
 
419
 * Return the input string with the first letter capitalized.
 
420
 */
 
421
QString capitalizeFirstLetter(const QString &string)
 
422
{
 
423
    QChar firstChar = string.at(0);
 
424
    return firstChar.toUpper() + string.mid(1);
 
425
}
 
426
 
 
427
}  // end namespace Codegen_Utils
 
428