+ <!--
+ ***
+ *** gen-tree-hdr-type-member-set
+ ***
+ Here, I should put the prototype of
+ -->
+ <xsl:template match='xsd:attribute[@name and @type]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text>&INDENT2;/* gen-tree-hdr-type-member-set </xsl:text>
+ <xsl:value-of select='concat(name(.)," @name",@name," ",@type," */ ")'/>
+ </xsl:if>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:attribute[@ref]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text>&INDENT2;/* gen-tree-hdr-type-member-set </xsl:text>
+ <xsl:value-of select='concat(name(.)," @ref",@ref," */ ")'/>
+ </xsl:if>
+ <!--
+ Attributes don't have min or maxOccurs. They are optional, required or prohibited
+ -->
+ <xsl:choose>
+ <xsl:when test='@use and @use="prohibited"'>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='@use and @use="required"'>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_optional &v); ") '/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:attribute[@name and not(@type)]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text>&INDENT2;/* gen-tree-hdr-type-member-set </xsl:text>
+ <xsl:value-of select='concat(name(.)," @name=",@name," no type */ ")'/>
+ </xsl:if>
+ <!--<xsl:text> &INDENT2;void&INDENT2;attr_</xsl:text>
+ <xsl:value-of select='concat($name,"(",$name,"_attr_type &v) ; ")'/>
+ -->
+ <xsl:choose>
+ <xsl:when test='@use and @use="prohibited"'>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='@use and @use="required"'>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_attr_type &v); ") '/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select='concat("&INDENT2;void attr_",$name,"(",$name,"_optional &v); ") '/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:element[@ref]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:variable name='local-name'>
+ <xsl:choose>
+ <xsl:when test="contains(@ref,':')"><xsl:value-of select="substring-after(@ref,':')"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="@ref"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-set xsd:element </xsl:text>
+ <xsl:value-of select='concat("name=",$name," @ref=",@ref," no type and abstract")'/>
+ <xsl:text>*/ </xsl:text>
+ <xsl:choose>
+ <xsl:when test='$maxOccurs="unbounded"'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs>1'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs=1'>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_type &v) ; ")'/>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_sptr &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$eltype,"_type *v) ; ") '/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select='$name'/></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- Need to be implemented
+ because of abstract attribute, the generation of the classes is a bit more complicated.
+ -->
+ <xsl:template match='xsd:element[@name and not(@type) and @abstract and @abstract="true"]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='baseclass'></xsl:param>
+ <xsl:variable name='local-name'>
+ <xsl:choose>
+ <xsl:when test="contains(@name,':')"><xsl:value-of select="substring-after(@name,':')"/></xsl:when>
+ <xsl:otherwise><xsl:value-of select="@name"/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-set xsd:element </xsl:text>
+ <xsl:value-of select='concat("@name=",@name," no type and abstract")'/>
+ <xsl:text>*/ </xsl:text>
+ <!-- does not work
+ -->
+ <xsl:apply-templates select='/xsd:schema/xsd:element[@equivClass=$local-name]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:with-param name='name' select="$name"></xsl:with-param>
+ <xsl:with-param name='maxOccurs' select="$maxOccurs"></xsl:with-param>
+ <xsl:with-param name='baseclass'>
+ <xsl:choose>
+ <xsl:when test='$baseclass=""'><xsl:value-of select='$name'/></xsl:when>
+ <xsl:otherwise><xsl:value-of select='$baseclass'/></xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:element[@name and not(@type) and not(@abstract)]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='baseclass'></xsl:param>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-set xsd:element </xsl:text>
+ <xsl:value-of select='concat("@name=",@name," no type and not abstract")'/>
+ <xsl:text>*/ </xsl:text>
+ <xsl:choose>
+ <xsl:when test='$maxOccurs="unbounded"'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs>1'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs=1'>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_type &v) ; ")'/>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_sptr &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$eltype,"_type *v) ; ") '/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select='$name'/></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- -->
+ <xsl:template match='xsd:element[@name and @type]' mode='gen-tree-hdr-type-member-set'>
+ <xsl:param name='maxOccurs'/>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='baseclass'></xsl:param>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-set xsd:element </xsl:text>
+ <xsl:value-of select='concat("@name=",@name," @type=",@type," @equivClass=",@equivClass," maxOccurs=",$maxOccurs)'/>
+ <xsl:text>*/ </xsl:text>
+ <xsl:choose>
+ <xsl:when test='$baseclass'>
+ <xsl:variable name='cpp_type'>
+ <xsl:apply-templates select='@type' mode='restriction-base'/>
+ </xsl:variable>
+ <xsl:variable name='lcpp'><xsl:apply-templates select='@name' mode='normalize-name'/> </xsl:variable>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$lcpp,"_sptr &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$lcpp,"_type &v) ; ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs="unbounded"'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs>1'>
+ <xsl:text>&INDENT2;void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($name,"(const ",$name,"_sequence &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_type &v); ") '/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$name,"_sptr &v); ") '/>
+ </xsl:when>
+ <xsl:when test='$maxOccurs=1'>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_type &v) ; ")'/>
+ <xsl:text>&INDENT2;void </xsl:text>
+ <xsl:value-of select='concat($name,"(",$eltype,"_sptr &v) ; ")'/>
+ <xsl:value-of select='concat("&INDENT2;void ",$name,"(",$eltype,"_type *v) ; ") '/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes"><xsl:value-of select='$name'/></xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ ***
+ *** gen-tree-hdr-type-member-get
+ ***
+ Here, I should put the prototype of
+ -->
+ <xsl:template match='xsd:attribute[@name and @type]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @name=",@name," @type=",@type," */ ")'/>
+ </xsl:if>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:attribute[@ref]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:param name='name'/>
+ <xsl:param name='eltype'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @ref=",@ref," */ ")'/>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test='@use and @use="prohibited"'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select='concat("&INDENT2;",$eltype," &INDENT2;attr_",$name,"(void); ") '/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:attribute[@name and not(@type)]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @name=",@name," no type */ ")'/>
+ </xsl:if>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:element[@name and @type]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @ref=",@ref," */ ")'/>
+ </xsl:if>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:element[@name and not(@type)]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @ref=",@ref," */ ")'/>
+ </xsl:if>
+ </xsl:template>
+ <!-- -->
+ <xsl:template match='xsd:element[@ref]' mode='gen-tree-hdr-type-member-get'>
+ <xsl:param name='nname'/>
+ <xsl:param name='cpp_type'/>
+ <xsl:param name='maxOccurs'/>
+ <xsl:variable name="ns_type">
+ <xsl:apply-templates select="@ref" mode='namespace-uri-of-qname'/>
+ </xsl:variable>
+ <xsl:variable name='cpp_ns'>
+ <xsl:call-template name='cpp_namespace'>
+ <xsl:with-param name='type' select="$ns_type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test='$debug-comment="yes"'>
+ <xsl:text> &INDENT2;/* gen-tree-hdr-type-member-get </xsl:text>
+ <xsl:value-of select='concat(name(.)," @ref=",@ref," maxOccurs=",$maxOccurs," */ ")'/>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test='($maxOccurs="unbounded")'>
+ <!-- Get function-->
+ <xsl:text> &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($nname,"_sequence & ")'/>
+ <xsl:value-of select='concat("&INDENT2;",$nname,"( void ) { return me_",$nname," ;}; ")'/>
+ </xsl:when>
+ <xsl:when test='(number($maxOccurs)>1)'>
+ <xsl:text> &INDENT2;//void &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($nname,"(const ",$nname,"_sequence &v) ; ")'/>
+ <!-- Get function-->
+ <xsl:text> &INDENT2;</xsl:text>
+ <xsl:value-of select='concat($nname,"_sequence & ")'/>
+ <xsl:value-of select='concat("&INDENT2;",$nname,"( void ) { return me_",$nname," ;}; ")'/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- Get function-->
+ <xsl:text> &INDENT2;</xsl:text><xsl:value-of
+ select='concat($cpp_type," & &INDENT2;",$nname,"( void ) ; ")'/>
+ </xsl:otherwise>
+ </xsl:choose>