blob: 3afd3eac13f7feca9c9a352aff361d68d05f09c1 [file] [log] [blame]
<!--***********************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
***********************************************************-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
<xsl:output method="text" />
<xsl:template match="/">
<out xml:space="preserve">
<xsl:text>
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
/*
THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
*/
#ifndef INCLUDED_RESOURCES_HXX
#define INCLUDED_RESOURCES_HXX
#include &lt;vector&gt;
#include &lt;boost/shared_ptr.hpp&gt;
#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
#include &lt;resourcemodel/OutputWithDepth.hxx&gt;
#endif
#ifndef INCLUDED_RESOURCESIDS_HXX
#include &lt;doctok/resourceids.hxx&gt;
#endif
#ifndef INCLUDED_WW8_STRUCT_BASE_HXX
#include &lt;WW8StructBase.hxx&gt;
#endif
#ifndef INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
#include &lt;WW8ResourceModelImpl.hxx&gt;
#endif
#ifndef INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
#include &lt;WW8PropertySetImpl.hxx&gt;
#endif
#ifndef INCLUDED_DFF_HXX
#include &lt;Dff.hxx&gt;
#endif
namespace writerfilter {
namespace doctok {
class WW8DocumentImpl;
typedef const WW8DocumentImpl * WW8DocumentImplPointer;
using namespace ::std;&#xa;</xsl:text>
<xsl:apply-templates select="//UML:Class" mode="class"/>
<xsl:text>
rtl::OUString getDffOptName(sal_uInt32 nPid);
bool isBooleanDffOpt(sal_uInt32 nId);
}}
#endif // INCLUDED_RESOURCES_HXX&#xa;</xsl:text></out>
</xsl:template>
<xsl:template match="UML:Class" mode="class">
<xsl:choose>
<xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8resource"]'>
<xsl:apply-templates select="." mode="ww8resource"/>
</xsl:when>
<xsl:when test='.//UML:Stereotype[@xmi.idref = "dffrecord"]'>
<xsl:apply-templates select="." mode="dffrecord"/>
</xsl:when>
<xsl:when test='.//UML:Stereotype[@xmi.idref = "dffopt"]'>
<xsl:apply-templates select="." mode="dffopt"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="UML:Class" mode="ww8resource">
<xsl:variable name="parentresource">
<xsl:call-template name='parenttype'>
<xsl:with-param name='type'><xsl:value-of select='@xmi.id'/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name='size_'><xsl:value-of select='./*/UML:TaggedValue[./*/UML:TagDefinition/@xmi.idref="size"]/UML:TaggedValue.dataValue'/></xsl:variable>
<xsl:variable name='size'>
<xsl:choose>
<xsl:when test='$size_ != ""'><xsl:value-of select='$size_'/></xsl:when>
<xsl:otherwise>0</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="classname">WW8<xsl:value-of select="@name"/></xsl:variable>
<xsl:variable name="superclass">
<xsl:choose>
<xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
<xsl:otherwise>WW8StructBase</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="surroundclass">
<xsl:choose>
<xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
<xsl:otherwise>WW8StructBase</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:text>
/**
Automatically generated class: </xsl:text><xsl:value-of select="@name"/><xsl:text>
</xsl:text>
<xsl:for-each select='./UML:ModelElement.stereotype/UML:Stereotype'>
<xsl:text>
Stereotype </xsl:text>
<xsl:value-of select='@xmi.idref'/>
<xsl:text>&#xa;</xsl:text>
</xsl:for-each>
<xsl:text>
Parent Resource: </xsl:text>
<xsl:value-of select="$parentresource"/>
<xsl:text>
Size: </xsl:text><xsl:value-of select='$size'/>
<xsl:text>
*/
class </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>: public </xsl:text>
<xsl:value-of select='$superclass'/>
<xsl:if test='$parentresource != ""'>
<xsl:text>, public writerfilter::Reference&lt; </xsl:text>
<xsl:value-of select='$parentresource'/>
<xsl:text>&gt;</xsl:text>
</xsl:if>
<xsl:text>
{</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text> sal_uInt32 mnIndex;</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
<xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
<xsl:apply-templates select='.' mode='declmembers'/>
</xsl:for-each>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
<xsl:text> WW8DocumentImplPointer mpDoc;&#xa;</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
<xsl:text>
sal_uInt32 mnPlcfPayloadOffset;
vector&lt;sal_uInt32&gt; entryOffsets;
vector&lt;sal_uInt32&gt; payloadOffsets;
vector&lt;sal_uInt32&gt; payloadIndices;
</xsl:text>
</xsl:if>
<xsl:text>
public:
typedef boost::shared_ptr&lt;</xsl:text>
<xsl:value-of select='$classname'/>
<xsl:text>&gt; Pointer_t;
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(
WW8Stream &amp; rStream,
sal_uInt32 nOffset = 0,
sal_uInt32 nCount = </xsl:text>
<xsl:value-of select='$size'/>
<xsl:text>)
: </xsl:text><xsl:value-of select='$superclass'/>
<xsl:text>(rStream, nOffset, nCount)</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text>, mnIndex(0)</xsl:text>
</xsl:if>
<xsl:text>
{
init();
}
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(
WW8StructBase * pParent,
sal_uInt32 nOffset = 0,
sal_uInt32 nCount = </xsl:text>
<xsl:value-of select='$size'/>
<xsl:text>)
: </xsl:text>
<xsl:value-of select='$superclass'/>
<xsl:text>(pParent, nOffset, nCount)</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text>, mnIndex(0)</xsl:text>
</xsl:if>
<xsl:text>
{
init();
}&#xa; </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>( const </xsl:text>
<xsl:value-of select='$surroundclass'/>
<xsl:text>&amp; rSurround,
sal_uInt32 nOffset = 0, sal_uInt32 nCount = </xsl:text>
<xsl:value-of select='$size'/>)
<xsl:text>
: </xsl:text>
<xsl:value-of select='$superclass'/>
<xsl:text>(rSurround, nOffset, nCount)</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text>, mnIndex(0)</xsl:text>
</xsl:if>
<xsl:text>
{
init();
}&#xa;
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(
const Sequence &amp;
rSequence, sal_uInt32 nOffset = 0,
sal_uInt32 nCount = </xsl:text>
<xsl:value-of select='$size'/>
<xsl:text>)
: </xsl:text>
<xsl:value-of select='$superclass'/>
<xsl:text>(rSequence, nOffset, nCount)</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text>, mnIndex(0)</xsl:text>
</xsl:if>
<xsl:text>
{
init();
}
virtual ~</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>();&#xa;</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="initimpl"]'>
<xsl:text> void initImpl();&#xa;</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
<xsl:text> void initPayload();</xsl:text>
</xsl:if>
<xsl:text>
void init();
/**
Return type of resource.
*/
virtual string getType() const
{
return "</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>";
}
/**
Return static size.
*/
static sal_uInt32 getSize() { return </xsl:text>
<xsl:value-of select='$size'/>
<xsl:text>; }</xsl:text>
<xsl:if test="not(.//UML:Stereotype[@xmi.ref='ww8nocalcsize'])">
<xsl:text>
/**
Calculate actual size.
*/
sal_uInt32 calcSize();
</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
<xsl:text>
/**
Return offset for entry of PLCF.
@param nIndex index of entry
*/
sal_uInt32 getEntryOffset(sal_uInt32 nIndex)
{
return entryOffsets[nIndex];
}</xsl:text>
<xsl:if test="not(.//UML:Stereotype[@xmi.idref='ww8nopayloadoffset'])">
<xsl:text>
/**
Calculate offset for payload.
*/
sal_uInt32 calcPayloadOffset();</xsl:text>
</xsl:if>
<xsl:text>
/**
Set offset for payloads.
@param nOffset the offset to set
*/
void setPayloadOffset(sal_uInt32 nOffset)
{
mnPlcfPayloadOffset = nOffset;
}
/**
Return offset for payload of PLCF.
@param nIndex index of entry
*/
sal_uInt32 getPayloadOffset(sal_uInt32 nIndex)
{
return payloadOffsets[nIndex];
}
/**
Return size of payload.
*/
sal_uInt32 getPayloadSize(sal_uInt32 nIndex) const
{
return payloadOffsets[nIndex + 1] - payloadOffsets[nIndex];
}
/**
Return payload index of an entry.
*/
sal_uInt32 getPayloadIndex(sal_uInt32 nIndex)
{
return payloadIndices[nIndex];
}
</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
<xsl:text>
/**
Set index in parent.
@param nIndex the index
*/
void setIndex(sal_uInt32 nIndex) { mnIndex = nIndex; }
</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprm"]'>
<xsl:variable name='propsreftype'>writerfilter::Reference &lt; Properties &gt;::Pointer_t</xsl:variable>
<xsl:text> /**
Return reference to properties of Sprm.
*/
</xsl:text>
<xsl:value-of select='$propsreftype'/>
<xsl:text> getProps()
{
return </xsl:text>
<xsl:value-of select='$propsreftype'/>
<xsl:text> (new </xsl:text>
<xsl:value-of select='$classname'/>
<xsl:text>(*this));
}
</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprmbinary"]'>
<xsl:text>
virtual writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t getBinary();
</xsl:text>
</xsl:if>
<xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
<xsl:text>
void setDoc(WW8DocumentImplPointer pDoc)
{
mpDoc = pDoc;
}
</xsl:text>
</xsl:if>
<xsl:apply-templates select="." mode="declsProperties"/>
<xsl:if test='$parentresource="Table"'>
<xsl:apply-templates select="." mode="declsTable"/>
</xsl:if>
<xsl:choose>
<xsl:when test='$parentresource="Properties"'>
<xsl:apply-templates select="." mode="resolveProperties"/>
</xsl:when>
<xsl:when test='$parentresource="Table"'>
<xsl:apply-templates select="." mode="resolveTable"/>
</xsl:when>
</xsl:choose>
<xsl:text>
};
</xsl:text>
</xsl:template>
<xsl:template match='UML:Class' mode='declsProperties'>
<xsl:choose>
<xsl:when test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
<xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
<xsl:apply-templates select='.' mode='accessmembers'/>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="debug">
<xsl:choose>
<xsl:when test='.//UML:Stereotype[@xmi.idref="debug"]'>
<xsl:text>true</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>false</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
<xsl:apply-templates select='.' mode='access'>
<xsl:with-param name="debug">
<xsl:value-of select="$debug"/>
</xsl:with-param>
</xsl:apply-templates>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
<xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
<xsl:apply-templates select='.' mode='declsOperations'/>
</xsl:for-each>
</xsl:template>
<xsl:template match="UML:Class" mode="resolveProperties">
<xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
void resolveNoAuto(Properties &amp; rHandler);
</xsl:if>
void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
void resolve(Properties &amp; rHandler);
</xsl:template>
<xsl:template match="UML:Class" mode="declsTable">
sal_uInt32 getEntryCount();
writerfilter::Reference&lt; Properties &gt;::Pointer_t getEntry(sal_uInt32 nIndex);
</xsl:template>
<xsl:template match="UML:Class" mode="resolveTable">
void resolve(Table &amp; rHandler);
</xsl:template>
<xsl:template match="UML:Attribute" mode="access">
<xsl:param name="debug"/>
<xsl:variable name="stereotype"><xsl:value-of select=".//UML:Stereotype[1]/@xmi.idref"/></xsl:variable>
<xsl:variable name="offset_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="offset"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
<xsl:variable name="offset">
<xsl:value-of select='$offset_'/>
</xsl:variable>
<xsl:variable name="shift"><xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="shift"]/UML:TaggedValue.dataValue'/></xsl:variable>
<xsl:variable name="mask_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="mask"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
<xsl:variable name="mask">
<xsl:if test='$mask_ != "" and not(starts-with($mask_, "0x"))'>0x</xsl:if>
<xsl:value-of select='$mask_'/>
</xsl:variable>
<xsl:variable name='type'>
<xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
</xsl:variable>
<xsl:variable name="completetype">
<xsl:text>WW8</xsl:text>
<xsl:value-of select="$type"/>
</xsl:variable>
<xsl:variable name="saltype">
<xsl:apply-templates select="." mode="returntype"/>
</xsl:variable>
<xsl:variable name='typetype'>
<xsl:call-template name='typetype'>
<xsl:with-param name='type'><xsl:value-of select="$type"/></xsl:with-param>
</xsl:call-template>
</xsl:variable>
/**
<xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="comment"]/UML:TaggedValue.dataValue'/>
&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;
Name
&lt;/th&gt;
&lt;td&gt;
<xsl:value-of select='@name'/>(<xsl:value-of select='$stereotype'/>)
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Offset
&lt;/th&gt;
&lt;td&gt;
<xsl:value-of select='$offset'/>
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Mask
&lt;/th&gt;
&lt;td&gt;
<xsl:value-of select='$mask'/>
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;
Shift
&lt;/th&gt;
&lt;td&gt;
<xsl:value-of select='$shift'/>
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
*/
<xsl:choose>
<xsl:when test='$stereotype = "attribute"'>
<xsl:if test='././/UML:Stereotype[@xmi.idref="virtual"]'>
<xsl:text>virtual </xsl:text>
</xsl:if>
<xsl:value-of select='$saltype'/> get_<xsl:value-of select='@name'/>() const
{
<xsl:if test='$debug="true"'>
<xsl:text>
clog &lt;&lt; "&lt;called&gt;</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>&lt;/called&gt;"
&lt;&lt; endl;&#xa;
</xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test='././/UML:Stereotype[@xmi.idref="attributeremainder"]'>
<xsl:text>return writerfilter::Reference &lt; BinaryObj &gt;::Pointer_t(new WW8BinaryObjReference(getRemainder(</xsl:text>
<xsl:value-of select="$offset"/>
<xsl:text>)));&#xa;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test='$typetype = "complex"'>
<xsl:text> return </xsl:text>
<xsl:value-of select="$saltype"/>
<xsl:text>(new </xsl:text>
<xsl:value-of select="$completetype"/>
<xsl:text>(*this, </xsl:text>
<xsl:value-of select="$offset"/>
<xsl:text>));&#xa;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> return (get</xsl:text>
<xsl:value-of select="$type"/>
<xsl:text>(</xsl:text>
<xsl:value-of select="$offset"/>
<xsl:text>)</xsl:text>
<xsl:if test="string-length($mask)>0">
<xsl:text>&amp; </xsl:text>
<xsl:value-of select="$mask"/>
</xsl:if>
<xsl:text>)</xsl:text>
<xsl:if test="$shift>0">
<xsl:text>&gt;&gt; </xsl:text>
<xsl:value-of select="$shift"/>
</xsl:if>
<xsl:text>;</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
}
</xsl:when>
<xsl:when test='$stereotype = "array"'>
<xsl:text>sal_uInt32 get_</xsl:text>
<xsl:value-of select='@name'/>
<xsl:text>_count() const </xsl:text>
<xsl:choose>
<xsl:when test='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]'>
<xsl:text>{ return </xsl:text>
<xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]/UML:TaggedValue.dataValue'/>
<xsl:text>; }&#xa;</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>;&#xa;</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select='$saltype'/>
<xsl:text> get_</xsl:text>
<xsl:value-of select='@name'/>
<xsl:text>(sal_uInt32 nIndex) const {</xsl:text>
<xsl:choose>
<xsl:when test="$typetype='complex'">
<xsl:text> return </xsl:text>
<xsl:value-of select="$saltype"/>
<xsl:text>( new </xsl:text>
<xsl:value-of select="$completetype"/>
<xsl:text>(static_cast&lt;const WW8StructBase &gt;(*this), </xsl:text>
<xsl:value-of select="$offset"/>
<xsl:text> + nIndex * </xsl:text>
<xsl:value-of select="$completetype"/>
<xsl:text>::getSize()));</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> return get</xsl:text>
<xsl:value-of select='$type'/>
<xsl:text>(</xsl:text><xsl:value-of select='$offset'/>
<xsl:text> + nIndex * sizeof(</xsl:text>
<xsl:value-of select='$saltype'/>
<xsl:text>))</xsl:text>
</xsl:otherwise>
</xsl:choose>
<xsl:text>; }&#xa;</xsl:text>
</xsl:when>
<xsl:when test='$stereotype = "string"'>
rtl::OUString get_<xsl:value-of select='@name'/>() const { return getString(<xsl:value-of select='$offset'/>); }
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match='UML:Attribute' mode='accessmembers'>
<xsl:text> </xsl:text>
<xsl:call-template name='saltype'>
<xsl:with-param name='type'>
<xsl:value-of select='.//UML:DataType/@xmi.idref'/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> get_</xsl:text>
<xsl:value-of select='@name'/>
<xsl:text>() const { return m</xsl:text>
<xsl:value-of select='@name'/>
<xsl:text>; }
</xsl:text>
</xsl:template>
<xsl:template match="UML:Operation" mode="declsOperations">
<xsl:choose>
<xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
<xsl:variable name="elementtype">
<xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
</xsl:variable>
<xsl:variable name="parentclass">
<xsl:call-template name='parenttype'>
<xsl:with-param name='type'>
<xsl:value-of select='$elementtype'/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
<xsl:variable name='saltype'>
<xsl:call-template name='saltype'>
<xsl:with-param name='type'>
<xsl:value-of select='$elementtype'/>
</xsl:with-param>
<xsl:with-param name='parenttype'>
<xsl:value-of select='$parentclass'/>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
/**
Array: <xsl:value-of select="@name"/>
ElementType: <xsl:value-of select="$elementtype"/>(<xsl:value-of select="$parentclass"/>)
*/
sal_uInt32 get_<xsl:value-of select="@name"/>_count();
<xsl:text> </xsl:text><xsl:value-of select='$saltype'/> get_<xsl:value-of select="@name"/>(sal_uInt32 pos);
</xsl:when>
<xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute" or .//UML:Stereotype/@xmi.idref = "binary"'>
<xsl:variable name="returntype_">
<xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
</xsl:variable>
<xsl:variable name="returntype">
<xsl:call-template name='saltype'>
<xsl:with-param name='type'>
<xsl:value-of select='$returntype_'/>
</xsl:with-param>
<xsl:with-param name='parenttype'>
<xsl:call-template name='parenttype'>
<xsl:with-param name='type'>
<xsl:value-of select='$returntype_'/>
</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:variable>
/**
Operation: <xsl:value-of select="@name"/>
*/
<xsl:text> </xsl:text>
<xsl:value-of select='$returntype'/>
<xsl:text> get_</xsl:text>
<xsl:value-of select='@name'/>
<xsl:text>();&#xa;</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="UML:Attribute" mode='declmembers'>
<xsl:text> </xsl:text>
<xsl:call-template name='saltype'>
<xsl:with-param name='type'>
<xsl:value-of select='.//UML:DataType/@xmi.idref'/>
</xsl:with-param>
</xsl:call-template>
<xsl:text> m</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>;
</xsl:text>
</xsl:template>
<xsl:template name='idtoqname'>
<xsl:param name='id'/>NS_<xsl:value-of select='substring-before($id, ":")'/>::LN_<xsl:value-of select='substring-after($id, ":")'/>
</xsl:template>
<xsl:template name='saltype'>
<xsl:param name='type'/>
<xsl:param name='parenttype'/>
<xsl:choose>
<xsl:when test="$type='U8'">sal_uInt8</xsl:when>
<xsl:when test="$type='S8'">sal_Int8</xsl:when>
<xsl:when test="$type='U16'">sal_uInt16</xsl:when>
<xsl:when test="$type='S16'">sal_Int16</xsl:when>
<xsl:when test="$type='U32'">sal_uInt32</xsl:when>
<xsl:when test="$type='S32'">sal_Int32</xsl:when>
<xsl:when test="$type='String'">rtl::OUString</xsl:when>
<xsl:when test="$type='Value'">WW8Value::Pointer_t</xsl:when>
<xsl:when test="$type='Binary'">WW8BinaryObjReference::Pointer_t</xsl:when>
<xsl:when test="$parenttype=''">
<xsl:value-of select="$type"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>writerfilter::Reference &lt; </xsl:text>
<xsl:value-of select='$parenttype'/>
<xsl:text> &gt;::Pointer_t</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name='typetype'>
<xsl:param name='type'/><xsl:choose>
<xsl:when test="$type='U8'">simple</xsl:when>
<xsl:when test="$type='S8'">simple</xsl:when>
<xsl:when test="$type='U16'">simple</xsl:when>
<xsl:when test="$type='S16'">simple</xsl:when>
<xsl:when test="$type='U32'">simple</xsl:when>
<xsl:when test="$type='S32'">simple</xsl:when>
<xsl:when test="$type='String'">string</xsl:when>
<xsl:when test="$type='Value'">value</xsl:when>
<xsl:otherwise>complex</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="UML:Attribute" mode="valuetype">
<xsl:variable name='type'>
<xsl:value-of select='.//UML:DataType/@xmi.idref'/>
</xsl:variable>
<xsl:choose>
<xsl:when test='$type="U8"'>WW8IntValue</xsl:when>
<xsl:when test='$type="S8"'>WW8IntValue</xsl:when>
<xsl:when test='$type="U16"'>WW8IntValue</xsl:when>
<xsl:when test='$type="S16"'>WW8IntValue</xsl:when>
<xsl:when test='$type="U32"'>WW8IntValue</xsl:when>
<xsl:when test='$type="S32"'>WW8IntValue</xsl:when>
<xsl:otherwise>WW8PropertiesValue</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="UML:Class" mode="dffrecord">
<xsl:variable name="classname">
<xsl:text>Dff</xsl:text><xsl:value-of select="@name"/>
</xsl:variable>
<xsl:text>
/**
Automaticallay generated class:
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>&#xa;
*/&#xa;
class </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text> : public DffRecord
{
public:
typedef boost::shared_ptr &lt; </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text> &gt; Pointer_t;&#xa;
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
: DffRecord(pParent, nOffset, nCount) {}&#xa;
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(WW8Stream &amp; rStream, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
: DffRecord(rStream, nOffset, nCount) {}&#xa;
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(DffRecord &amp; rRecord)&#xa;
: DffRecord(rRecord) {}
virtual ~</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>();
virtual void resolveLocal(Properties &amp; props);</xsl:text>
<xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
void resolveNoAuto(Properties &amp; rHandler);
</xsl:if>
<xsl:text>
virtual void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
virtual DffRecord * clone() const { return new </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(*this); }&#xa;
virtual string getType() const
{
return "</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>";
}
virtual string getName() const { return ""; }
</xsl:text>
<xsl:apply-templates select="." mode="declsProperties"/>
<xsl:text>
};
</xsl:text>
</xsl:template>
<xsl:template match="UML:Class" mode="dffopt">
<!--
<xsl:variable name="classname">
<xsl:text>DffOpt</xsl:text><xsl:value-of select="@name"/>
</xsl:variable>
<xsl:text>
/**
Automaticallay generated class:
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>&#xa;
*/&#xa;
class </xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text> : public WW8FOPTE
{
</xsl:text>
<xsl:value-of select="$classname"/>
<xsl:text>(WW8FOPTE &amp; rOpt) : WW8FOPTE(rOpt) {}
virtual string getName() const
{
return "</xsl:text>
<xsl:value-of select="@name"/>
<xsl:text>";
}&#xa;</xsl:text>
<xsl:text>
};
</xsl:text>
-->
</xsl:template>
<xsl:template name="parenttype">
<xsl:param name='type'/>
<xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$type]'>
<xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
</xsl:for-each>
</xsl:template>
<xsl:template match="UML:Attribute" mode="returntype">
<xsl:variable name='type'>
<xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
</xsl:variable>
<xsl:call-template name='saltype'>
<xsl:with-param name='type'>
<xsl:value-of select="$type"/>
</xsl:with-param>
<xsl:with-param name='parenttype'>
<xsl:call-template name='parenttype'>
<xsl:with-param name='type'><xsl:value-of select='$type'/></xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>