1
#include <QtCore/QCoreApplication>
3
#include <QDomDocument>
23
typedef QVector<Param> ParamList;
24
typedef QVector<ParamList> ParamSetList;
47
QVector<Property> props;
48
QVector<Method> methods;
49
QVector<Event> events;
52
int main(int argc, char *argv[])
61
QFile loc(*(argv + 1));
63
QVector<Class> classList;
65
loc.open(QIODevice::ReadOnly);
68
root = doc.documentElement();
70
QDomNodeList classes = root.elementsByTagName("class");
72
for (unsigned int i = 0; i < classes.length(); i++) {
74
QDomElement classEle = classes.at(i).toElement();
75
temp.name = classEle.attribute("name");
76
temp.type = classEle.attribute("type");
78
QDomNodeList events = classEle.elementsByTagName("event");
80
for (unsigned int j = 0; j < events.length(); j++) {
82
QDomElement event = events.at(j).toElement();
83
eTemp.name = event.attribute("name");
86
QDomNodeList prms = event.elementsByTagName("param");
88
for (unsigned int k = 0; k < prms.length(); k++) {
90
QDomElement param = prms.at(k).toElement();
91
pTemp.name = param.attribute("name");
92
pTemp.type = param.attribute("type");
93
pTemp.desc = param.text();
94
params.push_back(pTemp);
97
eTemp.params = params;
98
eTemp.wsignal = event.attribute("wsignal", "");
99
eTemp.wslot = event.attribute("wslot", "");
100
eTemp.signal = event.attribute("signal", "");
101
eTemp.desc = event.elementsByTagName("desc").at(0).toElement().text();
102
temp.events.push_back(eTemp);
105
QDomNodeList methods = classEle.elementsByTagName("method");
107
for (unsigned int j = 0; j < methods.length(); j++) {
109
QDomElement method = methods.at(j).toElement();
110
mTemp.name = method.attribute("name");
112
ParamSetList paramsl;
114
mTemp.vparamstyle = (method.attribute("vparamstyle", "") == "true");
115
mTemp.ctor = (method.attribute("constructor", "") == "true") ? (true) : (false);
117
if (!mTemp.vparamstyle) {
118
QDomNodeList prms = method.elementsByTagName("param");
121
for (unsigned int k = 0; k < prms.length(); k++) {
123
QDomElement param = prms.at(k).toElement();
124
pTemp.name = param.attribute("name");
125
pTemp.type = param.attribute("type");
126
pTemp.desc = param.text();
127
params.push_back(pTemp);
130
paramsl.push_back(params);
132
QDomNodeList pRms = method.elementsByTagName("paramset");
134
for (unsigned int k = 0; k < pRms.length(); k++) {
135
QDomNodeList prms = pRms.at(k).toElement().elementsByTagName("param");
138
for (unsigned int f = 0; f < prms.length(); f++) {
140
QDomElement param = prms.at(f).toElement();
141
pTemp.name = param.attribute("name");
142
pTemp.type = param.attribute("type");
143
pTemp.desc = param.text();
144
params.push_back(pTemp);
147
paramsl.push_back(params);
151
mTemp.params = paramsl;
152
mTemp.retType = method.elementsByTagName("return").at(0).toElement().attribute("type", "");
153
mTemp.desc = method.elementsByTagName("desc").at(0).toElement().text();
154
temp.methods.push_back(mTemp);
157
QDomNodeList props = classEle.elementsByTagName("property");
159
for (unsigned int j = 0; j < props.length(); j++) {
161
QDomElement prop = props.at(j).toElement();
162
prTemp.name = prop.attribute("name");
163
prTemp.desc = prop.elementsByTagName("desc").at(0).toElement().text();
164
prTemp.retType = prop.elementsByTagName("return").at(0).toElement().attribute("type", "");
165
prTemp.type = prop.attribute("type");
167
temp.props.push_back(prTemp);
170
classList.push_back(temp);
175
std::cout << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" << std::endl
176
<< "<html xmlns=\"http://www.w3.org/1999/xhtml/\" lang=\"en\" xml:lang=\"en\">" << std::endl
177
<< " <head>" << std::endl
178
<< " <title>KWinScripting :: APIDoX</title>" << std::endl
179
<< " <link rel=\"stylesheet\" href=\"apistyle.css\" type=\"text/css\" media=\"screen\" />" << std::endl
180
<< " </head>" << std::endl
182
<< " <body>" << std::endl
183
<< " <div id=\"root\">" << std::endl;
185
for (int i = 0; i < classList.size(); i++) {
186
Class here = classList.at(i);
187
std::cout << " <div id=\"class_" << here.name.toStdString() << "\" class=\"classes\">" << std::endl
188
<< " <h2>" << here.name.toStdString() << "<sup>[<em>" << here.type.toStdString() << "</em>]</sup></h2>" << std::endl;
190
if (here.events.size() != 0) {
191
std::cout << " <div id=\"events_" << here.name.toStdString() << "\" class=\"events\">" << std::endl
192
<< " <h3>Events</h3>" << std::endl;
194
for (int j = 0; j < here.events.size(); j++) {
195
std::cout << " <div class=\"event\">" << std::endl
196
<< " <h4>" << here.name.toStdString() << "." << here.events.at(j).name.toStdString() << "</h4>" << std::endl
197
<< " <p class=\"desc\">" << here.events.at(j).desc.toStdString() << "</p>" << std::endl;
200
ParamList p = here.events.at(j).params;
203
std::cout << " <ul>" << std::endl;
205
for (int k = 0; k < p.size(); k++) {
206
std::cout << " <li><strong>" << p.at(k).name.toStdString() << " {" << p.at(k).type.toStdString() << "}</strong>: " << p.at(k).desc.toStdString() << "</li>" << std::endl;
209
std::cout << " </ul>" << std::endl;
212
std::cout << " </div>" << std::endl;
215
std::cout << " </div>" << std::endl;
218
if (here.methods.size() != 0) {
219
std::cout << " <div id=\"method_" << here.name.toStdString() << "\" class=\"methods\">" << std::endl
220
<< " <h3>Methods</h3>" << std::endl;
222
for (int j = 0; j < here.methods.size(); j++) {
223
std::cout << " <div class=\"method\">" << std::endl
224
<< " <h4>" << here.name.toStdString() << "." << here.methods.at(j).name.toStdString();
226
if (here.methods.at(j).retType != "") {
227
std::cout << "[ret: " << here.methods.at(j).retType.toStdString() << "] ";
230
if (here.methods.at(j).ctor) {
231
std::cout << "<sup>[constructor]</sup>";
234
if (here.methods.at(j).vparamstyle) {
235
std::cout << "<sup>[variable parameter styles]</sup>";
238
std::cout << "</h4>" << std::endl;
240
ParamSetList pslist = here.methods.at(j).params;
242
std::cout << " <ul>" << std::endl;
244
if (pslist.size() == 0) {
245
std::cout << " <li>" << here.name.toStdString() << "." << here.methods.at(j).name.toStdString() << "()</li>" << std::endl;
247
for (int m = 0; m < pslist.size(); m++) {
248
ParamList plist = pslist.at(m);
249
std::cout << " <li>" << here.name.toStdString() << "." << here.methods.at(j).name.toStdString() << "(";
251
for (int f = 0; f < plist.size(); f++) {
252
std::cout << plist.at(f).name.toStdString() << " {" << plist.at(f).type.toStdString() << "}";
254
if (f != plist.size() - 1) {
259
std::cout << ")</li>" << std::endl;
263
std::cout << " </ul>" << std::endl;
264
std::cout << " <p class=\"desc\">" << here.methods.at(j).desc.toStdString() << "</p>" << std::endl;
266
if (pslist.size() != 0) {
267
for (int m = 0; m < pslist.size(); m++) {
268
ParamList plist = pslist.at(m);
270
if (plist.size() == 0) {
274
std::cout << " <p class=\"footdocs\">" << here.methods.at(j).name.toStdString() << "(";
276
for (int f = 0; f < plist.size(); f++) {
277
std::cout << plist.at(f).name.toStdString() << " {" << plist.at(f).type.toStdString() << "}";
279
if (f != plist.size() - 1) {
284
std::cout << ")<br />" << std::endl;
285
std::cout << " <ul>" << std::endl;
287
for (int f = 0; f < plist.size(); f++) {
288
std::cout << " <li><strong>" << plist.at(f).name.toStdString() << " {" << plist.at(f).type.toStdString() << "}</strong>: " << plist.at(f).desc.toStdString() << "</li>" << std::endl;
291
std::cout << " </ul>" << std::endl;
292
std::cout << " </p>" << std::endl;
296
std::cout << " </div>" << std::endl;
299
std::cout << " </div>" << std::endl;
302
if (here.props.size() != 0) {
303
std::cout << " <div id=\"props_" << here.name.toStdString() << "\" class=\"props\">" << std::endl
304
<< " <h3>Properties</h3>" << std::endl;
306
for (int j = 0; j < here.props.size(); j++) {
307
std::cout << " <div class=\"prop\">" << std::endl
308
<< " <h4>" << here.name.toStdString() << "." << here.props.at(j).name.toStdString() << " [ret: " << here.props.at(j).retType.toStdString()
309
<< "] <sup>[" << here.props.at(j).type.toStdString() << "]</sup></h4>" << std::endl
310
<< " <p class=\"desc\">" << here.props.at(j).desc.toStdString() << "</p>" << std::endl;
312
std::cout << " </div>" << std::endl;
315
std::cout << " </div>" << std::endl;
318
std::cout << " </div>" << std::endl;
321
std::cout << " </div>" << std::endl
322
<< " </body>" << std::endl