fixed using new
[lqt.git] / xslt / deparse.xsl
blob11f2fbda4cb1cd7a3ed041ecb999e3bb00873c4a
1 <?xml version="1.0" encoding="utf-8"?>
2 <xsl:stylesheet version="1.0"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
4 <xsl:output method="text" />
5 <xsl:strip-space elements="*"/>
6 <xsl:template match="/lib">
7 <xsl:text>#include &lt;Qt>&#xA;</xsl:text>
8 <xsl:apply-templates select="function|type"/>
9 </xsl:template>
11 <xsl:template match="type">
12 <xsl:if test="struct">
13 <xsl:text>class </xsl:text>
14 <xsl:value-of select="@name"/>
15 <xsl:if test="struct/*">
16 <xsl:if test="*/base">
17 <xsl:text> : </xsl:text>
18 <xsl:for-each select="*/base">
19 <xsl:if test='@virtual'>
20 <xsl:text>virtual </xsl:text>
21 </xsl:if>
22 <xsl:value-of select="@access"/>
23 <xsl:text> </xsl:text>
24 <xsl:value-of select="@class"/>
25 <xsl:if test="position() &lt; last()">
26 <xsl:text>, </xsl:text>
27 </xsl:if>
28 </xsl:for-each>
29 </xsl:if>
30 <xsl:text> {&#xa;</xsl:text>
31 <xsl:for-each select="struct/method|struct/function">
32 <xsl:if test="position() = 1 or not(@access = preceding-sibling::*[1]/@access)">
33 <xsl:value-of select="@access"/>
34 <xsl:text>:&#xa;</xsl:text>
35 </xsl:if>
36 <xsl:text>&#x9;</xsl:text>
37 <xsl:if test="virtual">
38 <xsl:text>virtual </xsl:text>
39 </xsl:if>
40 <xsl:if test="name() = 'function'">
41 <xsl:text>static </xsl:text>
42 </xsl:if>
44 <xsl:variable name="args">
45 <xsl:for-each select="param">
46 <xsl:call-template name="declare-var">
47 <xsl:with-param name="type" select="*"/>
48 <xsl:with-param name="var" select="@name"/>
49 </xsl:call-template>
50 <xsl:if test="position() &lt; last()"><xsl:text>, </xsl:text></xsl:if>
51 </xsl:for-each>
52 </xsl:variable>
54 <xsl:variable name="method">
55 <xsl:call-template name="substring-after-last">
56 <xsl:with-param name="text" select="@name"/>
57 <xsl:with-param name="chars">::</xsl:with-param>
58 </xsl:call-template>
59 <xsl:value-of select="concat('(', $args, ')')"/>
60 </xsl:variable>
62 <xsl:call-template name="declare-var">
63 <xsl:with-param name="type" select="return/*"/>
64 <xsl:with-param name="var" select="$method"/>
65 </xsl:call-template>
67 <xsl:if test="this//@qualifier">
68 <xsl:text> </xsl:text>
69 <xsl:value-of select="this//@qualifier"/>
70 </xsl:if>
71 <!--<xsl:value-of select="@name"/>-->
72 <xsl:text>;&#xa;</xsl:text>
73 </xsl:for-each>
74 <xsl:text>}</xsl:text>
75 </xsl:if>
76 <xsl:text>;&#xA;&#xa;</xsl:text>
77 </xsl:if>
78 </xsl:template>
80 <xsl:template match="function">
81 <xsl:variable name="args">
82 <xsl:for-each select="param">
83 <xsl:call-template name="declare-var">
84 <xsl:with-param name="type" select="*"/>
85 <xsl:with-param name="var" select="@name"/>
86 </xsl:call-template>
87 <xsl:if test="position() &lt; last()"><xsl:text>, </xsl:text></xsl:if>
88 </xsl:for-each>
89 </xsl:variable>
90 <xsl:variable name="f">
91 <xsl:call-template name="declare-var">
92 <xsl:with-param name="var">
93 <xsl:value-of select="@name"/>
94 <xsl:value-of select="concat('(', $args, ')')"/>
95 </xsl:with-param>
96 <xsl:with-param name="type" select="return"/>
97 </xsl:call-template>
98 </xsl:variable>
99 <xsl:value-of select="$f"/>
100 <xsl:text>;&#xA;</xsl:text>
101 </xsl:template>
103 <xsl:template name="declare-var">
104 <xsl:param name="var"/>
105 <xsl:param name="type"/>
106 <xsl:variable name="varname">
107 <xsl:if test="$var">
108 <xsl:value-of select="concat(' ', $var)"/>
109 </xsl:if>
110 </xsl:variable>
111 <xsl:variable name="v">
112 <xsl:apply-templates select="$type" mode="typedef">
113 <xsl:with-param name="var"><xsl:text>#</xsl:text></xsl:with-param>
114 </xsl:apply-templates>
115 </xsl:variable>
116 <xsl:value-of select='concat(substring-before($v, "#"), $varname, substring-after($v, "#"))'/>
117 </xsl:template>
120 <xsl:template match="pointer|reference" mode="typedef">
121 <xsl:param name="var"/>
122 <xsl:apply-templates select="type|function|pointer|reference" mode="typedef">
123 <xsl:with-param name="var">
124 <xsl:value-of select="substring-before($var, '#')"/>
125 <xsl:choose>
126 <xsl:when test="name() = 'pointer'"><xsl:text>*</xsl:text></xsl:when>
127 <xsl:otherwise><xsl:text>&amp;</xsl:text></xsl:otherwise>
128 </xsl:choose>
129 <xsl:if test="@qualifier">
130 <xsl:text> </xsl:text>
131 <xsl:value-of select="@qualifier"/>
132 </xsl:if>
133 <xsl:text>#</xsl:text>
134 <xsl:value-of select="substring-after($var, '#')"/>
135 </xsl:with-param>
136 </xsl:apply-templates>
137 </xsl:template>
139 <!-- ugly cut and paste... refactor -->
140 <xsl:template match="function" mode="typedef">
141 <xsl:param name="var"/>
142 <xsl:variable name="args">
143 <xsl:for-each select="param">
144 <xsl:call-template name="declare-var">
145 <xsl:with-param name="type" select="*"/>
146 <xsl:with-param name="var" select="@name"/>
147 </xsl:call-template>
148 <xsl:if test="position() &lt; last()"><xsl:text>, </xsl:text></xsl:if>
149 </xsl:for-each>
150 </xsl:variable>
151 <xsl:variable name="f">
152 <xsl:call-template name="declare-var">
153 <xsl:with-param name="var">
154 <xsl:value-of select="concat('(', $var, ')')"/>
155 <xsl:value-of select="concat('(', $args, ')')"/>
156 </xsl:with-param>
157 <xsl:with-param name="type" select="return"/>
158 </xsl:call-template>
159 </xsl:variable>
160 <xsl:value-of select="$f"/>
161 </xsl:template>
163 <xsl:template match="type" mode="typedef">
164 <xsl:param name="var"/>
165 <xsl:if test="@qualifier">
166 <xsl:value-of select="@qualifier"/>
167 <xsl:text> </xsl:text>
168 </xsl:if>
169 <xsl:value-of select="@name"/>
170 <xsl:value-of select="$var"/>
171 </xsl:template>
173 <!-- from xsltsl -->
174 <xsl:template name="substring-after-last">
176 <xsl:param name="text"/>
177 <xsl:param name="chars"/>
179 <xsl:choose>
181 <xsl:when test="contains($text, $chars)">
182 <xsl:variable name="last" select="substring-after($text, $chars)"/>
184 <xsl:choose>
185 <xsl:when test="contains($last, $chars)">
187 <xsl:call-template name="substring-after-last">
188 <xsl:with-param name="text" select="$last"/>
189 <xsl:with-param name="chars" select="$chars"/>
190 </xsl:call-template>
191 </xsl:when>
192 <xsl:otherwise>
193 <xsl:value-of select="$last"/>
194 </xsl:otherwise>
195 </xsl:choose>
197 </xsl:when>
199 <xsl:otherwise>
200 <xsl:value-of select="$text"/>
201 </xsl:otherwise>
203 </xsl:choose>
204 </xsl:template>
205 </xsl:stylesheet>