~ubuntu-branches/ubuntu/utopic/kde-workspace/utopic-proposed

« back to all changes in this revision

Viewing changes to kwin/scripting/kwsapigen.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michał Zając
  • Date: 2011-07-09 08:31:15 UTC
  • Revision ID: james.westby@ubuntu.com-20110709083115-ohyxn6z93mily9fc
Tags: upstream-4.6.90
Import upstream version 4.6.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <QtCore/QCoreApplication>
 
2
#include <QFile>
 
3
#include <QDomDocument>
 
4
#include <QDebug>
 
5
#include <QVector>
 
6
#include <QTime>
 
7
 
 
8
#include <iostream>
 
9
 
 
10
struct Property {
 
11
    QString retType;
 
12
    QString name;
 
13
    QString type;
 
14
    QString desc;
 
15
};
 
16
 
 
17
struct Param {
 
18
    QString name;
 
19
    QString type;
 
20
    QString desc;
 
21
};
 
22
 
 
23
typedef QVector<Param> ParamList;
 
24
typedef QVector<ParamList> ParamSetList;
 
25
 
 
26
struct Event {
 
27
    ParamList params;
 
28
    QString wslot;
 
29
    QString wsignal;
 
30
    QString signal;
 
31
    QString desc;
 
32
    QString name;
 
33
};
 
34
 
 
35
struct Method {
 
36
    ParamSetList params;
 
37
    bool vparamstyle;
 
38
    bool ctor;
 
39
    QString name;
 
40
    QString retType;
 
41
    QString desc;
 
42
};
 
43
 
 
44
struct Class {
 
45
    QString type;
 
46
    QString name;
 
47
    QVector<Property> props;
 
48
    QVector<Method> methods;
 
49
    QVector<Event> events;
 
50
};
 
51
 
 
52
int main(int argc, char *argv[])
 
53
{
 
54
    QTime t;
 
55
    t.start();
 
56
 
 
57
    Q_UNUSED(argc)
 
58
    Q_UNUSED(argv)
 
59
 
 
60
    QDomDocument doc;
 
61
    QFile loc(*(argv + 1));
 
62
    QDomElement root;
 
63
    QVector<Class> classList;
 
64
 
 
65
    loc.open(QIODevice::ReadOnly);
 
66
 
 
67
    doc.setContent(&loc);
 
68
    root = doc.documentElement();
 
69
 
 
70
    QDomNodeList classes = root.elementsByTagName("class");
 
71
 
 
72
    for (unsigned int i = 0; i < classes.length(); i++) {
 
73
        Class temp;
 
74
        QDomElement classEle = classes.at(i).toElement();
 
75
        temp.name = classEle.attribute("name");
 
76
        temp.type = classEle.attribute("type");
 
77
 
 
78
        QDomNodeList events = classEle.elementsByTagName("event");
 
79
 
 
80
        for (unsigned int j = 0; j < events.length(); j++) {
 
81
            Event eTemp;
 
82
            QDomElement event = events.at(j).toElement();
 
83
            eTemp.name = event.attribute("name");
 
84
            ParamList params;
 
85
 
 
86
            QDomNodeList prms = event.elementsByTagName("param");
 
87
 
 
88
            for (unsigned int k = 0; k < prms.length(); k++) {
 
89
                Param pTemp;
 
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);
 
95
            }
 
96
 
 
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);
 
103
        }
 
104
 
 
105
        QDomNodeList methods = classEle.elementsByTagName("method");
 
106
 
 
107
        for (unsigned int j = 0; j < methods.length(); j++) {
 
108
            Method mTemp;
 
109
            QDomElement method = methods.at(j).toElement();
 
110
            mTemp.name = method.attribute("name");
 
111
            mTemp.ctor = false;
 
112
            ParamSetList paramsl;
 
113
 
 
114
            mTemp.vparamstyle = (method.attribute("vparamstyle", "") == "true");
 
115
            mTemp.ctor = (method.attribute("constructor", "") == "true") ? (true) : (false);
 
116
 
 
117
            if (!mTemp.vparamstyle) {
 
118
                QDomNodeList prms = method.elementsByTagName("param");
 
119
                ParamList params;
 
120
 
 
121
                for (unsigned int k = 0; k < prms.length(); k++) {
 
122
                    Param pTemp;
 
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);
 
128
                }
 
129
 
 
130
                paramsl.push_back(params);
 
131
            } else {
 
132
                QDomNodeList pRms = method.elementsByTagName("paramset");
 
133
 
 
134
                for (unsigned int k = 0; k < pRms.length(); k++) {
 
135
                    QDomNodeList prms = pRms.at(k).toElement().elementsByTagName("param");
 
136
                    ParamList params;
 
137
 
 
138
                    for (unsigned int f = 0; f < prms.length(); f++) {
 
139
                        Param pTemp;
 
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);
 
145
                    }
 
146
 
 
147
                    paramsl.push_back(params);
 
148
                }
 
149
            }
 
150
 
 
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);
 
155
        }
 
156
 
 
157
        QDomNodeList props = classEle.elementsByTagName("property");
 
158
 
 
159
        for (unsigned int j = 0; j < props.length(); j++) {
 
160
            Property prTemp;
 
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");
 
166
 
 
167
            temp.props.push_back(prTemp);
 
168
        }
 
169
 
 
170
        classList.push_back(temp);
 
171
    }
 
172
 
 
173
    /* OUTPUT MANUAL */
 
174
 
 
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
 
181
              << std::endl
 
182
              << " <body>" << std::endl
 
183
              << "  <div id=\"root\">" << std::endl;
 
184
 
 
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;
 
189
 
 
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;
 
193
 
 
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;
 
198
 
 
199
 
 
200
                ParamList p = here.events.at(j).params;
 
201
 
 
202
                if (p.size() > 0) {
 
203
                    std::cout << "      <ul>" << std::endl;
 
204
 
 
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;
 
207
                    }
 
208
 
 
209
                    std::cout << "      </ul>" << std::endl;
 
210
                }
 
211
 
 
212
                std::cout << "     </div>" << std::endl;
 
213
            }
 
214
 
 
215
            std::cout << "   </div>" << std::endl;
 
216
        }
 
217
 
 
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;
 
221
 
 
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();
 
225
 
 
226
                if (here.methods.at(j).retType != "") {
 
227
                    std::cout << "[ret: " << here.methods.at(j).retType.toStdString() << "] ";
 
228
                }
 
229
 
 
230
                if (here.methods.at(j).ctor) {
 
231
                    std::cout << "<sup>[constructor]</sup>";
 
232
                }
 
233
 
 
234
                if (here.methods.at(j).vparamstyle) {
 
235
                    std::cout << "<sup>[variable parameter styles]</sup>";
 
236
                }
 
237
 
 
238
                std::cout << "</h4>" << std::endl;
 
239
 
 
240
                ParamSetList pslist = here.methods.at(j).params;
 
241
 
 
242
                std::cout << "      <ul>" << std::endl;
 
243
 
 
244
                if (pslist.size() == 0) {
 
245
                    std::cout << "       <li>" << here.name.toStdString() << "." << here.methods.at(j).name.toStdString() << "()</li>" << std::endl;
 
246
                } else {
 
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() << "(";
 
250
 
 
251
                        for (int f = 0; f < plist.size(); f++) {
 
252
                            std::cout << plist.at(f).name.toStdString() << " {" << plist.at(f).type.toStdString() << "}";
 
253
 
 
254
                            if (f != plist.size() - 1) {
 
255
                                std::cout << ", ";
 
256
                            }
 
257
                        }
 
258
 
 
259
                        std::cout << ")</li>" << std::endl;
 
260
                    }
 
261
                }
 
262
 
 
263
                std::cout << "      </ul>" << std::endl;
 
264
                std::cout << "      <p class=\"desc\">" << here.methods.at(j).desc.toStdString() << "</p>" << std::endl;
 
265
 
 
266
                if (pslist.size() != 0) {
 
267
                    for (int m = 0; m < pslist.size(); m++) {
 
268
                        ParamList plist = pslist.at(m);
 
269
 
 
270
                        if (plist.size() == 0) {
 
271
                            continue;
 
272
                        }
 
273
 
 
274
                        std::cout << "       <p class=\"footdocs\">" << here.methods.at(j).name.toStdString() << "(";
 
275
 
 
276
                        for (int f = 0; f < plist.size(); f++) {
 
277
                            std::cout << plist.at(f).name.toStdString() << " {" << plist.at(f).type.toStdString() << "}";
 
278
 
 
279
                            if (f != plist.size() - 1) {
 
280
                                std::cout << ", ";
 
281
                            }
 
282
                        }
 
283
 
 
284
                        std::cout << ")<br />" << std::endl;
 
285
                        std::cout << "        <ul>" << std::endl;
 
286
 
 
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;
 
289
                        }
 
290
 
 
291
                        std::cout << "        </ul>" << std::endl;
 
292
                        std::cout << "       </p>" << std::endl;
 
293
                    }
 
294
                }
 
295
 
 
296
                std::cout << "     </div>" << std::endl;
 
297
            }
 
298
 
 
299
            std::cout << "   </div>" << std::endl;
 
300
        }
 
301
 
 
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;
 
305
 
 
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;
 
311
 
 
312
                std::cout << "     </div>" << std::endl;
 
313
            }
 
314
 
 
315
            std::cout << "   </div>" << std::endl;
 
316
        }
 
317
 
 
318
        std::cout << "   </div>" << std::endl;
 
319
    }
 
320
 
 
321
    std::cout << "  </div>" << std::endl
 
322
              << " </body>" << std::endl
 
323
              << "</html>";
 
324
 
 
325
    return 0;
 
326
}