1 /****************************************************************************
3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the tools applications of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
44 #include "apigenerator.h"
45 #include "codemarker.h"
50 static QString
indentStr(int indent
)
53 str
.fill(QLatin1Char(' '), indent
* 4);
57 static bool lessThanName(Node
*node1
, Node
*node2
)
59 return node1
->name() < node2
->name();
62 QString
ApiGenerator::format()
64 return QLatin1String("API");
67 void ApiGenerator::generateTree(const Tree
*tree
, CodeMarker
*marker
)
69 QFile
outFile(QLatin1String("api"));
70 outFile
.open(QIODevice::WriteOnly
);
72 out
.setDevice(&outFile
);
73 generateNode(tree
->root(), marker
);
77 void ApiGenerator::generateNode(const Node
*node
, CodeMarker
*marker
, int indent
)
79 if (node
->access() == Node::Private
)
82 switch (node
->type()) {
84 if (!node
->name().isEmpty()) {
85 out
<< indentStr(indent
) << "Namespace: " << node
->name() << "\n";
91 const ClassNode
*classe
= static_cast<const ClassNode
*>(node
);
92 out
<< indentStr(indent
) << "Class: " << node
->name();
93 foreach (const RelatedClass
&baseClass
, classe
->baseClasses()) {
94 if (baseClass
.access
== Node::Public
)
95 out
<< " inherits " << baseClass
.dataTypeWithTemplateArgs
;
103 const EnumNode
*enume
= static_cast<const EnumNode
*>(node
);
104 out
<< indentStr(indent
) << "Enum: " << node
->name() << "\n";
107 QStringList enumNames
;
108 foreach (const EnumItem
&item
, enume
->items())
109 enumNames
<< item
.name();
112 foreach (const QString
&name
, enumNames
)
113 out
<< indentStr(indent
) << "Enum value: " << name
<< "\n";
117 out
<< indentStr(indent
) << "Typedef: " << node
->name() << "\n";
122 out
<< indentStr(indent
) << "Function: "
123 << plainCode(marker
->markedUpSynopsis(node
, 0, CodeMarker::Detailed
)) << "\n";
129 const PropertyNode
*property
= static_cast<const PropertyNode
*>(node
);
130 out
<< indentStr(indent
) << "Property: " << property
->name()
131 << " type " << property
->dataType() << "\n";
139 if (node
->isInnerNode()) {
140 const InnerNode
*inner
= static_cast<const InnerNode
*>(node
);
141 NodeList nodes
= inner
->childNodes();
142 qSort(nodes
.begin(), nodes
.end(), lessThanName
);
143 foreach (const Node
*child
, nodes
)
144 generateNode(child
, marker
, indent
);