bump product version to 4.1.6.2
[LibreOffice.git] / writerfilter / source / doctok / compactxmi.xsl
blob36ab4f5c5f9ad9467f303e7419fe0fb8f5151068
1 <xsl:stylesheet
2 version="1.0"
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
4 xmlns:UML = 'org.omg.xmi.namespace.UML'
5 xmlns:exslt="http://exslt.org/common"
6 xml:space="default">
7 <xsl:output method="xml"/>
9 <xsl:template match="/">
10 <xsl:apply-templates select="//UML:Model"/>
11 </xsl:template>
13 <xsl:template match="UML:Model">
14 <model>
15 <xsl:attribute name="name">
16 <xsl:value-of select="@name"/>
17 </xsl:attribute>
18 <xsl:call-template name="nostereotype"/>
19 <xsl:call-template name="ww8resources"/>
20 <xsl:call-template name="sprms"/>
21 </model>
22 </xsl:template>
24 <xsl:template name="nostereotype">
25 <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[not(UML:ModelElement.stereotype)]">
26 <xsl:variable name="myid" select="@xmi.id"/>
27 <class>
28 <xsl:attribute name="name">
29 <xsl:value-of select="$myid"/>
30 </xsl:attribute>
31 <xsl:attribute name="resource">
32 <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
33 <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/>
34 </xsl:for-each>
35 </xsl:attribute>
36 <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
37 </class>
38 </xsl:for-each>
39 </xsl:template>
41 <xsl:template name="ww8resources">
42 <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and not(UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm')]">
43 <xsl:sort select="@xmi.id"/>
44 <xsl:call-template name="ww8resource"/>
45 </xsl:for-each>
46 </xsl:template>
48 <xsl:template name="ww8resource">
49 <xsl:variable name="myid" select="@xmi.id"/>
50 <xsl:variable name="classid">
51 <xsl:call-template name="gettaggedvalue">
52 <xsl:with-param name="name">classid</xsl:with-param>
53 </xsl:call-template>
54 </xsl:variable>
55 <ww8resource>
56 <xsl:attribute name="name">
57 <xsl:value-of select="$myid"/>
58 </xsl:attribute>
59 <xsl:attribute name="resource">
60 <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
61 <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/>
62 </xsl:for-each>
63 </xsl:attribute>
64 <xsl:if test="string-length($classid) &gt; 0">
65 <xsl:attribute name="classid">
66 <xsl:value-of select="$classid"/>
67 </xsl:attribute>
68 </xsl:if>
69 <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype">
70 <xsl:if test="@xmi.idref != 'ww8resource'">
71 <stereotype>
72 <xsl:attribute name="name">
73 <xsl:value-of select="@xmi.idref"/>
74 </xsl:attribute>
75 </stereotype>
76 </xsl:if>
77 </xsl:for-each>
78 <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
79 </ww8resource>
80 </xsl:template>
82 <xsl:template name="gettaggedvalue">
83 <xsl:param name="name"/>
84 <xsl:for-each select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$name]">
85 <xsl:value-of select="UML:TaggedValue.dataValue"/>
86 </xsl:for-each>
87 </xsl:template>
89 <xsl:template name="sizefortype">
90 <xsl:param name="type"/>
91 <xsl:choose>
92 <xsl:when test="$type='S8'">1</xsl:when>
93 <xsl:when test="$type='U8'">1</xsl:when>
94 <xsl:when test="$type='S16'">2</xsl:when>
95 <xsl:when test="$type='U16'">2</xsl:when>
96 <xsl:when test="$type='S32'">4</xsl:when>
97 <xsl:when test="$type='U32'">4</xsl:when>
98 <xsl:otherwise>0</xsl:otherwise>
99 </xsl:choose>
100 </xsl:template>
102 <xsl:template name="bits">
103 <xsl:param name="bits"/>
104 <bits>
105 <xsl:attribute name="name">
106 <xsl:value-of select="@name"/>
107 </xsl:attribute>
108 <xsl:attribute name="bits">
109 <xsl:value-of select="$bits"/>
110 </xsl:attribute>
111 <xsl:attribute name="token">
112 <xsl:call-template name="gettaggedvalue">
113 <xsl:with-param name="name">attrid</xsl:with-param>
114 </xsl:call-template>
115 </xsl:attribute>
116 </bits>
117 </xsl:template>
119 <xsl:template match="UML:Attribute" mode="ww8resource">
120 <xsl:variable name="mask">
121 <xsl:call-template name="gettaggedvalue">
122 <xsl:with-param name="name">mask</xsl:with-param>
123 </xsl:call-template>
124 </xsl:variable>
125 <xsl:variable name="offset">
126 <xsl:call-template name="gettaggedvalue">
127 <xsl:with-param name="name">offset</xsl:with-param>
128 </xsl:call-template>
129 </xsl:variable>
130 <xsl:variable name="type">
131 <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
132 </xsl:variable>
133 <xsl:variable name="size">
134 <xsl:call-template name="sizefortype">
135 <xsl:with-param name="type" select="$type"/>
136 </xsl:call-template>
137 </xsl:variable>
138 <xsl:variable name="arraycount">
139 <xsl:call-template name="gettaggedvalue">
140 <xsl:with-param name="name">arraycount</xsl:with-param>
141 </xsl:call-template>
142 </xsl:variable>
143 <xsl:choose>
144 <xsl:when test="string-length($mask) = 0">
145 <attribute>
146 <xsl:attribute name="name">
147 <xsl:value-of select="@name"/>
148 </xsl:attribute>
149 <xsl:attribute name="type">
150 <xsl:value-of select="$type"/>
151 </xsl:attribute>
152 <xsl:attribute name="size">
153 <xsl:value-of select="$size"/>
154 </xsl:attribute>
155 <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='array']">
156 <xsl:attribute name="array-count">
157 <xsl:value-of select="$arraycount"/>
158 </xsl:attribute>
159 </xsl:for-each>
160 <xsl:attribute name="token">
161 <xsl:call-template name="gettaggedvalue">
162 <xsl:with-param name="name">attrid</xsl:with-param>
163 </xsl:call-template>
164 </xsl:attribute>
165 </attribute>
166 </xsl:when>
167 <xsl:otherwise>
168 <xsl:variable name="attrswithoffset">
169 <xsl:for-each select="ancestor::UML:Class//UML:Attribute[UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='offset' and UML:TaggedValue.dataValue=$offset]]">
170 <xsl:sort select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue" data-type="number" order="descending"/>
171 <xsl:copy-of select="."/>
172 </xsl:for-each>
173 </xsl:variable>
174 <xsl:text>&#xa;</xsl:text>
175 <xsl:if test="@name = exslt:node-set($attrswithoffset)/UML:Attribute[1]/@name">
176 <bitfield>
177 <xsl:attribute name="size">
178 <xsl:value-of select="$size"/>
179 </xsl:attribute>
180 <xsl:attribute name="type">
181 <xsl:value-of select="$type"/>
182 </xsl:attribute>
183 <xsl:variable name="allbits" select="8 * $size"/>
184 <xsl:for-each select="exslt:node-set($attrswithoffset)/UML:Attribute">
185 <xsl:variable name="lastshift">
186 <xsl:choose>
187 <xsl:when test="count(preceding-sibling::UML:Attribute) = 0">
188 <xsl:value-of select="$allbits"/>
189 </xsl:when>
190 <xsl:otherwise>
191 <xsl:value-of select="preceding-sibling::UML:Attribute[1]/UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
192 </xsl:otherwise>
193 </xsl:choose>
194 </xsl:variable>
195 <xsl:variable name="bits" select="$lastshift - UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
196 <xsl:call-template name="bits">
197 <xsl:with-param name="bits" select="$bits"/>
198 </xsl:call-template>
199 </xsl:for-each>
200 </bitfield>
201 </xsl:if>
202 </xsl:otherwise>
203 </xsl:choose>
204 </xsl:template>
206 <xsl:template match="UML:Operation" mode="ww8resource">
207 <operation>
208 <xsl:attribute name="name">
209 <xsl:value-of select="@name"/>
210 </xsl:attribute>
211 <xsl:attribute name="type">
212 <xsl:for-each select="UML:BehavioralFeature.parameter/UML:Parameter[@kind='return']">
213 <xsl:value-of select="UML:Parameter.type/UML:Class/@xmi.idref"/>
214 </xsl:for-each>
215 </xsl:attribute>
216 <xsl:attribute name="token">
217 <xsl:call-template name="gettaggedvalue">
218 <xsl:with-param name="name">opid</xsl:with-param>
219 </xsl:call-template>
220 </xsl:attribute>
221 <xsl:for-each select="UML:ModelElement.stereotype">
222 <stereotype>
223 <xsl:value-of select="UML:Stereotype/@xmi.idref"/>
224 </stereotype>
225 </xsl:for-each>
226 </operation>
227 </xsl:template>
229 <xsl:template match="*" mode="ww8resources">
230 <xsl:apply-templates select="*" mode="ww8resources"/>
231 </xsl:template>
233 <xsl:template name="sprms">
234 <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']">
235 <xsl:sort select="@xmi.id"/>
236 <sprm>
237 <xsl:attribute name="name">
238 <xsl:value-of select="@xmi.id"/>
239 </xsl:attribute>
240 <xsl:attribute name="code">
241 <xsl:call-template name="gettaggedvalue">
242 <xsl:with-param name="name">sprmcode</xsl:with-param>
243 </xsl:call-template>
244 </xsl:attribute>
245 <xsl:attribute name="kind">
246 <xsl:call-template name="gettaggedvalue">
247 <xsl:with-param name="name">kind</xsl:with-param>
248 </xsl:call-template>
249 </xsl:attribute>
250 <xsl:attribute name="token">
251 <xsl:call-template name="gettaggedvalue">
252 <xsl:with-param name="name">sprmid</xsl:with-param>
253 </xsl:call-template>
254 </xsl:attribute>
255 <xsl:if test="UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource'">
256 <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
257 </xsl:if>
258 </sprm>
259 </xsl:for-each>
260 </xsl:template>
262 </xsl:stylesheet>