2 ******************************************************************************
4 * @file codegeneration.cpp
5 * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
6 * Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009.
8 * @see The GNU Public License (GPL) Version 3
12 *****************************************************************************/
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 3 of the License, or
17 * (at your option) any later version.
19 * This program is distributed in the hope that it will be useful, but
20 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
21 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24 * You should have received a copy of the GNU General Public License along
25 * with this program; if not, write to the Free Software Foundation, Inc.,
26 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29 #include "codegeneration.h"
31 #include <QtCore/QTextStream>
32 #include <QtCore/QStringList>
33 #include <QtCore/QFileInfo>
36 QTCREATOR_UTILS_EXPORT QString
fileNameToCppIdentifier(const QString
&s
)
39 const int len
= s
.size();
40 const QChar underscore
= QLatin1Char('_');
41 const QChar dot
= QLatin1Char('.');
43 for (int i
= 0; i
< len
; i
++) {
44 const QChar c
= s
.at(i
);
45 if (c
== underscore
|| c
.isLetterOrNumber()) {
47 } else if (c
== dot
) {
54 QTCREATOR_UTILS_EXPORT QString
headerGuard(const QString
&file
)
56 const QFileInfo
fi(file
);
57 QString rc
= fileNameToCppIdentifier(fi
.completeBaseName()).toUpper();
59 rc
+= QLatin1Char('_');
60 rc
+= fileNameToCppIdentifier(fi
.suffix()).toUpper();
64 QTCREATOR_UTILS_EXPORT
65 void writeIncludeFileDirective(const QString
&file
, bool globalInclude
,
68 const QChar opening
= globalInclude
? QLatin1Char('<') : QLatin1Char('"');
69 const QChar closing
= globalInclude
? QLatin1Char('>') : QLatin1Char('"');
71 str
<< QLatin1String("#include ") << opening
<< file
<< closing
<< QLatin1Char('\n');
74 QTCREATOR_UTILS_EXPORT
75 QString
writeOpeningNameSpaces(const QStringList
&l
, const QString
&indent
,
78 const int count
= l
.size();
83 for (int i
= 0; i
< count
; i
++) {
84 str
<< rc
<< "namespace " << l
.at(i
) << " {\n";
91 QTCREATOR_UTILS_EXPORT
92 void writeClosingNameSpaces(const QStringList
&l
, const QString
&indent
,
98 for (int i
= l
.size() - 1; i
>= 0; i
--) {
100 str
<< QString(indent
.size() * i
, QLatin1Char(' '));
102 str
<< "} // namespace " << l
.at(i
) << '\n';