1<!DOCTYPE xsl:stylesheet [
2     <!ENTITY endl "&#10;">
3]>
4<xsl:stylesheet version="1.0"
5                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6                xmlns:xs="http://www.w3.org/2001/XMLSchema">
7
8<!-- Hack to make names camel case
9     All names in UI files are lowercase, while the element names are
10     capital case. To make the UI files conforming to the XSD file + keep
11     the DOM interface we rename them here -->
12    <xsl:template name="camel-case">
13        <xsl:param name="text"/>
14    <xsl:choose>
15        <xsl:when test="$text='exportmacro'">exportMacro</xsl:when>
16        <xsl:when test="$text='layoutdefault'">layoutDefault</xsl:when>
17        <xsl:when test="$text='layoutfunction'">layoutFunction</xsl:when>
18        <xsl:when test="$text='pixmapfunction'">pixmapFunction</xsl:when>
19        <xsl:when test="$text='customwidgets'">customWidgets</xsl:when>
20        <xsl:when test="$text='tabstops'">tabStops</xsl:when>
21        <xsl:when test="$text='tabstop'">tabStop</xsl:when>
22        <xsl:when test="$text='buttongroups'">buttonGroups</xsl:when>
23        <xsl:when test="$text='exportmacro'">exportMacro</xsl:when>
24        <xsl:when test="$text='actiongroup'">actionGroup</xsl:when>
25        <xsl:when test="$text='buttongroup'">buttonGroup</xsl:when>
26        <xsl:when test="$text='customwidget'">customWidget</xsl:when>
27        <xsl:when test="$text='sizehint'">sizeHint</xsl:when>
28        <xsl:when test="$text='addpagemethod'">addPageMethod</xsl:when>
29        <xsl:when test="$text='sizepolicy'">sizePolicy</xsl:when>
30        <xsl:when test="$text='hordata'">horData</xsl:when>
31        <xsl:when test="$text='verdata'">verData</xsl:when>
32        <xsl:when test="$text='rowspan'">rowSpan</xsl:when>
33        <xsl:when test="$text='colspan'">colSpan</xsl:when>
34        <xsl:when test="$text='addaction'">addAction</xsl:when>
35        <xsl:when test="$text='zorder'">zOrder</xsl:when>
36        <xsl:when test="$text='startx'">startX</xsl:when>
37        <xsl:when test="$text='starty'">startY</xsl:when>
38        <xsl:when test="$text='endx'">endX</xsl:when>
39        <xsl:when test="$text='endy'">endY</xsl:when>
40        <xsl:when test="$text='centralx'">centralX</xsl:when>
41        <xsl:when test="$text='centraly'">centralY</xsl:when>
42        <xsl:when test="$text='focalx'">focalX</xsl:when>
43        <xsl:when test="$text='focaly'">focalY</xsl:when>
44        <xsl:when test="$text='widgetdata'">widgetData</xsl:when>
45        <xsl:when test="$text='coordinatemode'">coordinateMode</xsl:when>
46        <xsl:when test="$text='brushstyle'">brushStyle</xsl:when>
47        <xsl:when test="$text='colorrole'">colorRole</xsl:when>
48        <xsl:when test="$text='pointsize'">pointSize</xsl:when>
49        <xsl:when test="$text='strikeout'">strikeOut</xsl:when>
50        <xsl:when test="$text='stylestrategy'">styleStrategy</xsl:when>
51        <xsl:when test="$text='hsizetype'">hSizeType</xsl:when>
52        <xsl:when test="$text='vsizetype'">vSizeType</xsl:when>
53        <xsl:when test="$text='horstretch'">horStretch</xsl:when>
54        <xsl:when test="$text='verstretch'">verStretch</xsl:when>
55        <xsl:when test="$text='normaloff'">normalOff</xsl:when>
56        <xsl:when test="$text='normalon'">normalOn</xsl:when>
57        <xsl:when test="$text='disabledoff'">disabledOff</xsl:when>
58        <xsl:when test="$text='disabledon'">disabledOn</xsl:when>
59        <xsl:when test="$text='activeoff'">activeOff</xsl:when>
60        <xsl:when test="$text='activeon'">activeOn</xsl:when>
61        <xsl:when test="$text='selectedoff'">selectedOff</xsl:when>
62        <xsl:when test="$text='selectedon'">selectedOn</xsl:when>
63        <xsl:when test="$text='cursorshape'">cursorShape</xsl:when>
64        <xsl:when test="$text='iconset'">iconSet</xsl:when>
65        <xsl:when test="$text='stringlist'">stringList</xsl:when>
66        <xsl:when test="$text='datetime'">dateTime</xsl:when>
67        <xsl:when test="$text='pointf'">pointF</xsl:when>
68        <xsl:when test="$text='rectf'">rectF</xsl:when>
69        <xsl:when test="$text='sizef'">sizeF</xsl:when>
70        <xsl:when test="$text='longlong'">longLong</xsl:when>
71        <xsl:when test="$text='uint'">UInt</xsl:when>
72        <xsl:when test="$text='ulonglong'">uLongLong</xsl:when>
73        <xsl:when test="$text='rowstretch'">rowStretch</xsl:when>
74        <xsl:when test="$text='columnstretch'">columnStretch</xsl:when>
75        <xsl:when test="$text='rowminimumheight'">rowMinimumHeight</xsl:when>
76        <xsl:when test="$text='columnminimumwidth'">columnMinimumWidth</xsl:when>
77        <xsl:when test="$text='extracomment'">extraComment</xsl:when>
78       <xsl:otherwise><xsl:value-of select="$text"/></xsl:otherwise>
79    </xsl:choose>
80    </xsl:template>
81
82
83<!-- Convenience templates -->
84
85    <xsl:template name="cap-first-char">
86        <xsl:param name="text"/>
87        <xsl:value-of select="concat(translate(substring($text, 1, 1), 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'), substring($text, 2))" />
88    </xsl:template>
89
90    <xsl:template name="lower-text">
91        <xsl:param name="text"/>
92
93        <xsl:if test="boolean($text)">
94            <xsl:variable name="head" select="substring($text, 1, 1)"/>
95            <xsl:variable name="tail" select="substring($text, 2)"/>
96            <xsl:variable name="lower-head" select="translate($text, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')"/>
97            <xsl:variable name="lower-tail">
98                <xsl:call-template name="lower-text">
99                    <xsl:with-param name="text" select="tail"/>
100                </xsl:call-template>
101            </xsl:variable>
102            <xsl:value-of select='concat($lower-head, $lower-tail)'/>
103        </xsl:if>
104    </xsl:template>
105
106    <xsl:template name="powers-of-two">
107        <xsl:param name="num"/>
108
109        <xsl:choose>
110            <xsl:when test="$num=0">1</xsl:when>
111            <xsl:otherwise>
112                <xsl:variable name="x">
113                    <xsl:call-template name="powers-of-two">
114                        <xsl:with-param name="num" select="$num - 1"/>
115                    </xsl:call-template>
116                </xsl:variable>
117                <xsl:value-of select="2*$x"/>
118            </xsl:otherwise>
119        </xsl:choose>
120    </xsl:template>
121
122<!-- Convenience templates: xs-types to c++ types conversions -->
123
124    <xsl:template name="xs-type-from-qstring-func">
125        <xsl:param name="xs-type"/>
126        <xsl:param name="val"/>
127        <xsl:choose>
128            <xsl:when test="$xs-type='xs:string'">
129                <xsl:value-of select="$val"/>
130            </xsl:when>
131            <xsl:when test="$xs-type='xs:integer'">
132                <xsl:value-of select="$val"/>
133                <xsl:text>.toInt()</xsl:text>
134            </xsl:when>
135            <xsl:when test="$xs-type='xs:float'">
136                <xsl:value-of select="$val"/>
137                <xsl:text>.toFloat()</xsl:text>
138            </xsl:when>
139            <xsl:when test="$xs-type='xs:double'">
140                <xsl:value-of select="$val"/>
141                <xsl:text>.toDouble()</xsl:text>
142            </xsl:when>
143            <xsl:when test="$xs-type='xs:boolean'">
144                <xsl:text>(</xsl:text>
145                <xsl:value-of select="$val"/>
146                <xsl:text> == QLatin1String("true") ? true : false)</xsl:text>
147            </xsl:when>
148            <xsl:when test="$xs-type='xs:long'">
149                <xsl:value-of select="$val"/>
150                <xsl:text>.toLongLong()</xsl:text>
151            </xsl:when>
152            <xsl:when test="$xs-type='xs:unsignedInt'">
153                <xsl:value-of select="$val"/>
154                <xsl:text>.toUInt()</xsl:text>
155            </xsl:when>
156            <xsl:when test="$xs-type='xs:unsignedLong'">
157                <xsl:value-of select="$val"/>
158                <xsl:text>.toULongLong()</xsl:text>
159            </xsl:when>
160            <xsl:otherwise>### BZZZZT! ###</xsl:otherwise>
161        </xsl:choose>
162    </xsl:template>
163
164    <xsl:template name="xs-type-to-qstring-func">
165        <xsl:param name="xs-type"/>
166        <xsl:param name="val"/>
167        <xsl:choose>
168            <xsl:when test="$xs-type='xs:string'">
169                <xsl:value-of select="$val"/>
170            </xsl:when>
171            <xsl:when test="$xs-type='xs:integer'">
172                <xsl:text>QString::number(</xsl:text>
173                <xsl:value-of select="$val"/>
174                <xsl:text>)</xsl:text>
175            </xsl:when>
176            <xsl:when test="$xs-type='xs:long'">
177                <xsl:text>QString::number(</xsl:text>
178                <xsl:value-of select="$val"/>
179                <xsl:text>)</xsl:text>
180            </xsl:when>
181            <xsl:when test="$xs-type='xs:unsignedInt'">
182                <xsl:text>QString::number(</xsl:text>
183                <xsl:value-of select="$val"/>
184                <xsl:text>)</xsl:text>
185            </xsl:when>
186            <xsl:when test="$xs-type='xs:unsignedLong'">
187                <xsl:text>QString::number(</xsl:text>
188                <xsl:value-of select="$val"/>
189                <xsl:text>)</xsl:text>
190            </xsl:when>
191            <xsl:when test="$xs-type='xs:float'">
192                <xsl:text>QString::number(</xsl:text>
193                <xsl:value-of select="$val"/>
194                <xsl:text>, 'f', 8)</xsl:text>
195            </xsl:when>
196            <xsl:when test="$xs-type='xs:double'">
197                <xsl:text>QString::number(</xsl:text>
198                <xsl:value-of select="$val"/>
199                <xsl:text>, 'f', 15)</xsl:text>
200            </xsl:when>
201            <xsl:when test="$xs-type='xs:boolean'">
202                <xsl:text>(</xsl:text>
203                <xsl:value-of select="$val"/>
204                <xsl:text> ? QLatin1String("true") : QLatin1String("false"))</xsl:text>
205            </xsl:when>
206            <xsl:otherwise>### BZZZZT! ###</xsl:otherwise>
207        </xsl:choose>
208    </xsl:template>
209
210    <xsl:template name="xs-type-category">
211        <xsl:param name="xs-type"/>
212        <xsl:param name="array" select="false"/>
213        <xsl:choose>
214            <xsl:when test="$array">value</xsl:when>
215            <xsl:otherwise>
216                <xsl:choose>
217                    <xsl:when test="$xs-type='xs:string'">value</xsl:when>
218                    <xsl:when test="$xs-type='xs:integer'">value</xsl:when>
219                    <xsl:when test="$xs-type='xs:float'">value</xsl:when>
220                    <xsl:when test="$xs-type='xs:double'">value</xsl:when>
221                    <xsl:when test="$xs-type='xs:boolean'">value</xsl:when>
222                    <xsl:when test="$xs-type='xs:long'">value</xsl:when>
223                    <xsl:when test="$xs-type='xs:unsignedInt'">value</xsl:when>
224                    <xsl:when test="$xs-type='xs:unsignedLong'">value</xsl:when>
225                    <xsl:otherwise>pointer</xsl:otherwise>
226                </xsl:choose>
227            </xsl:otherwise>
228        </xsl:choose>
229    </xsl:template>
230
231    <xsl:template name="xs-type-to-cpp-type">
232        <xsl:param name="xs-type"/>
233        <xsl:param name="array" select="false"/>
234        <xsl:choose>
235            <xsl:when test="$array">
236                <xsl:choose>
237                    <xsl:when test="$xs-type='xs:string'">QStringList</xsl:when>
238                    <xsl:when test="$xs-type='xs:integer'">QList&lt;int&gt;</xsl:when>
239                    <xsl:when test="$xs-type='xs:float'">QList&lt;float&gt;</xsl:when>
240                    <xsl:when test="$xs-type='xs:double'">QList&lt;double&gt;</xsl:when>
241                    <xsl:when test="$xs-type='xs:boolean'">QList&lt;bool&gt;</xsl:when>
242                    <xsl:when test="$xs-type='xs:long'">QList&lt;qlonglong&gt;</xsl:when>
243                    <xsl:when test="$xs-type='xs:unsignedInt'">QList&lt;uint&gt;</xsl:when>
244                    <xsl:when test="$xs-type='xs:unsignedLong'">QList&lt;qulonglong&gt;</xsl:when>
245                    <xsl:otherwise>QList&lt;Dom<xsl:value-of select="$xs-type"/>*&gt;</xsl:otherwise>
246                </xsl:choose>
247            </xsl:when>
248            <xsl:otherwise>
249                <xsl:choose>
250                    <xsl:when test="$xs-type='xs:string'">QString</xsl:when>
251                    <xsl:when test="$xs-type='xs:integer'">int</xsl:when>
252                    <xsl:when test="$xs-type='xs:float'">float</xsl:when>
253                    <xsl:when test="$xs-type='xs:double'">double</xsl:when>
254                    <xsl:when test="$xs-type='xs:boolean'">bool</xsl:when>
255                    <xsl:when test="$xs-type='xs:long'">qlonglong</xsl:when>
256                    <xsl:when test="$xs-type='xs:unsignedInt'">uint</xsl:when>
257                    <xsl:when test="$xs-type='xs:unsignedLong'">qulonglong</xsl:when>
258                    <xsl:otherwise>Dom<xsl:value-of select="$xs-type"/></xsl:otherwise>
259                </xsl:choose>
260            </xsl:otherwise>
261        </xsl:choose>
262    </xsl:template>
263
264    <xsl:template name="xs-type-to-cpp-return-type">
265        <xsl:param name="xs-type"/>
266        <xsl:param name="array" select="false"/>
267        <xsl:choose>
268            <xsl:when test="$array">
269                <xsl:choose>
270                    <xsl:when test="$xs-type='xs:string'">QStringList</xsl:when>
271                    <xsl:when test="$xs-type='xs:integer'">QList&lt;int&gt;</xsl:when>
272                    <xsl:when test="$xs-type='xs:float'">QList&lt;float&gt;</xsl:when>
273                    <xsl:when test="$xs-type='xs:double'">QList&lt;double&gt;</xsl:when>
274                    <xsl:when test="$xs-type='xs:boolean'">QList&lt;bool&gt;</xsl:when>
275                    <xsl:when test="$xs-type='xs:long'">QList&lt;qlonglong&gt;</xsl:when>
276                    <xsl:when test="$xs-type='xs:unsignedInt'">QList&lt;uint&gt;</xsl:when>
277                    <xsl:when test="$xs-type='xs:unsignedLong'">QList&lt;qulonglong&gt;</xsl:when>
278                    <xsl:otherwise>QList&lt;Dom<xsl:value-of select="$xs-type"/>*&gt;</xsl:otherwise>
279                </xsl:choose>
280            </xsl:when>
281            <xsl:otherwise>
282                <xsl:choose>
283                    <xsl:when test="$xs-type='xs:string'">QString</xsl:when>
284                    <xsl:when test="$xs-type='xs:integer'">int</xsl:when>
285                    <xsl:when test="$xs-type='xs:float'">float</xsl:when>
286                    <xsl:when test="$xs-type='xs:double'">double</xsl:when>
287                    <xsl:when test="$xs-type='xs:boolean'">bool</xsl:when>
288                    <xsl:when test="$xs-type='xs:long'">qlonglong</xsl:when>
289                    <xsl:when test="$xs-type='xs:unsignedInt'">uint</xsl:when>
290                    <xsl:when test="$xs-type='xs:unsignedLong'">qulonglong</xsl:when>
291                    <xsl:otherwise>Dom<xsl:value-of select="$xs-type"/>*</xsl:otherwise>
292                </xsl:choose>
293            </xsl:otherwise>
294        </xsl:choose>
295    </xsl:template>
296
297    <xsl:template name="xs-type-to-cpp-argument-type">
298        <xsl:param name="xs-type"/>
299        <xsl:param name="array" select="false"/>
300        <xsl:choose>
301            <xsl:when test="$array">
302                <xsl:choose>
303                    <xsl:when test="$xs-type='xs:string'">const QStringList&amp;</xsl:when>
304                    <xsl:when test="$xs-type='xs:integer'">const QList&lt;int&gt;&amp;</xsl:when>
305                    <xsl:when test="$xs-type='xs:float'">const QList&lt;float&gt;&amp;</xsl:when>
306                    <xsl:when test="$xs-type='xs:double'">const QList&lt;double&gt;&amp;</xsl:when>
307                    <xsl:when test="$xs-type='xs:boolean'">const QList&lt;bool&gt;&amp;</xsl:when>
308                    <xsl:when test="$xs-type='xs:long'">const QList&lt;qlonglong&gt;&amp;</xsl:when>
309                    <xsl:when test="$xs-type='xs:unsignedInt'">const QList&lt;uint&gt;&amp;</xsl:when>
310                    <xsl:when test="$xs-type='xs:unsignedLong'">const QList&lt;qulonglong&gt;&amp;</xsl:when>
311                    <xsl:otherwise>const QList&lt;Dom<xsl:value-of select="$xs-type"/>*&gt;&amp;</xsl:otherwise>
312                </xsl:choose>
313            </xsl:when>
314            <xsl:otherwise>
315                <xsl:choose>
316                    <xsl:when test="$xs-type='xs:string'">const QString&amp;</xsl:when>
317                    <xsl:when test="$xs-type='xs:integer'">int</xsl:when>
318                    <xsl:when test="$xs-type='xs:float'">float</xsl:when>
319                    <xsl:when test="$xs-type='xs:double'">double</xsl:when>
320                    <xsl:when test="$xs-type='xs:boolean'">bool</xsl:when>
321                    <xsl:when test="$xs-type='xs:long'">qlonglong</xsl:when>
322                    <xsl:when test="$xs-type='xs:unsignedInt'">uint</xsl:when>
323                    <xsl:when test="$xs-type='xs:unsignedLong'">qulonglong</xsl:when>
324                    <xsl:otherwise>Dom<xsl:value-of select="$xs-type"/>*</xsl:otherwise>
325                </xsl:choose>
326            </xsl:otherwise>
327        </xsl:choose>
328    </xsl:template>
329
330
331</xsl:stylesheet>
332