|
From: Chris M. <zm...@us...> - 2002-03-06 22:27:07
|
Update of /cvsroot/kuml/kuml/libkuml/uml/tools
In directory usw-pr-cvs1:/tmp/cvs-serv763
Modified Files:
common_code.xsl common_proxy_code.xsl gen_proxy_ccs.xsl
gen_proxy_hs.xsl
Log Message:
Mods to generate the commas between parameters properly.
This is a big mod for such a small bug.
Index: common_code.xsl
===================================================================
RCS file: /cvsroot/kuml/kuml/libkuml/uml/tools/common_code.xsl,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** common_code.xsl 26 Dec 2001 00:03:36 -0000 1.11
--- common_code.xsl 6 Mar 2002 22:27:03 -0000 1.12
***************
*** 218,221 ****
--- 218,353 ----
+ <xsl:template name="append-to-bag">
+ <xsl:param name="old_bag"/>
+ <xsl:param name="new_elems"/>
+
+ <xsl:choose>
+
+ <xsl:when test='string-length($old_bag) = 0'>
+
+ <xsl:value-of select="$new_elems"/>
+
+ </xsl:when>
+
+ <xsl:otherwise>
+
+ <xsl:value-of select="$old_bag"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$new_elems"/>
+
+ </xsl:otherwise>
+
+ </xsl:choose>
+
+ </xsl:template>
+
+
+ <!-- Insert an element into a set (space-separated list of unique elements)
+ -->
+ <xsl:template name="insert-in-set">
+ <xsl:param name="old_set"/>
+ <xsl:param name="new_elems"/>
+
+ <xsl:choose>
+
+ <xsl:when test='contains($new_elems," ")'>
+
+ <xsl:variable name="new_set">
+
+ <xsl:call-template name="insert-in-set">
+ <xsl:with-param name="old_set" select="$old_set"/>
+ <xsl:with-param name="new_elems"
+ select='substring-before($new_elems," ")'/>
+ </xsl:call-template>
+
+ </xsl:variable>
+
+ <xsl:call-template name="insert-in-set">
+ <xsl:with-param name="old_set" select="$new_set"/>
+ <xsl:with-param name="new_elems"
+ select='substring-after($new_elems," ")'/>
+ </xsl:call-template>
+
+ </xsl:when>
+
+ <xsl:otherwise>
+
+ <xsl:variable name="in_set">
+
+ <xsl:call-template name="list-contains">
+ <xsl:with-param name="the_list" select="$old_set"/>
+ <xsl:with-param name="the_item" select="$new_elems"/>
+ </xsl:call-template>
+
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test='$in_set = "true"'>
+ <xsl:value-of select="$old_set"/>
+ </xsl:when>
+ <xsl:when test='string-length($old_set) = 0'>
+ <xsl:value-of select="$new_elems"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$old_set"/>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$new_elems"/>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:otherwise>
+
+ </xsl:choose>
+
+ </xsl:template>
+
+
+ <!-- Make a set of space-separated items from a bag of same -->
+ <xsl:template name="make-unique">
+ <xsl:param name="the_bag"/>
+ <xsl:param name="the_set"/>
+
+ <xsl:choose>
+
+ <xsl:when test='string-length($the_bag) = 0'>
+
+ <xsl:value-of select="$the_set"/>
+
+ </xsl:when>
+
+ <xsl:when test='contains($the_bag," ")'>
+
+ <xsl:variable name="new_set">
+
+ <xsl:call-template name="insert-in-set">
+ <xsl:with-param name="old_set" select="$the_set"/>
+ <xsl:with-param name="new_elems"
+ select='substring-before($the_bag," ")'/>
+ </xsl:call-template>
+
+ </xsl:variable>
+
+ <xsl:call-template name="make-unique">
+ <xsl:with-param name="the_bag"
+ select='substring-after($the_bag," ")'/>
+ <xsl:with-param name="the_set" select="$new_set"/>
+ </xsl:call-template>
+
+ </xsl:when>
+
+ <xsl:otherwise>
+
+ <xsl:call-template name="insert-in-set">
+ <xsl:with-param name="old_set" select="$the_set"/>
+ <xsl:with-param name="new_elems" select="$the_bag"/>
+ </xsl:call-template>
+
+ </xsl:otherwise>
+
+ </xsl:choose>
+
+ </xsl:template>
+
+
<!-- Template for mangling names.
Special care must be taken to process idl_substitute name tags.
Index: common_proxy_code.xsl
===================================================================
RCS file: /cvsroot/kuml/kuml/libkuml/uml/tools/common_proxy_code.xsl,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** common_proxy_code.xsl 26 Dec 2001 00:03:36 -0000 1.4
--- common_proxy_code.xsl 6 Mar 2002 22:27:03 -0000 1.5
***************
*** 38,50 ****
<xsl:param name="collection"/>
- <!-- xsl:variable name="package_name">
- <xsl:call-template name="toName">
- <xsl:with-param name="text">
- <xsl:value-of select="ancestor::Model:Package/@name"/>
- </xsl:with-param>
- <xsl:with-param name="position" select="1"/>
- </xsl:call-template>
- </xsl:variable -->
-
<xsl:variable name="type_name" select="ancestor::Model:DataType/@name"/>
--- 38,41 ----
***************
*** 59,63 ****
</xsl:when>
<xsl:otherwise>
- <!-- xsl:value-of select="$package_name"/ -->
<xsl:text>const char*</xsl:text>
</xsl:otherwise>
--- 50,53 ----
***************
*** 183,186 ****
--- 173,251 ----
+ <!-- Replace the default rule. -->
+ <xsl:template match="*" mode="walk_supertypes_tree_for_commas"/>
+
+
+ <!-- Template to walk the tree of supertypes for a class and
+ see if they have any attributes. If they have
+ we need to output a comma separator.
+ All this processing for a comma? Mad.
+ -->
+ <xsl:template match="Model:Class" mode="walk_supertypes_tree_for_commas">
+
+ <xsl:choose>
+
+ <xsl:when test='count(Model:Namespace.contents/Model:Attribute) > 0'>
+
+ <xsl:text>, </xsl:text>
+
+ </xsl:when>
+
+ </xsl:choose>
+
+ </xsl:template>
+
+
+ <!-- Template to split a supertype attribute string
+ (space separated xmi.id list) into its individual items
+ and apply templates to the corresponding Model:Class nodes.
+ -->
+ <xsl:template name="split_supertypes_for_commas">
+ <xsl:param name="supertypes"/>
+
+ <xsl:choose>
+
+ <xsl:when test='contains($supertypes," ")'>
+
+ <xsl:variable name="result">
+
+ <xsl:apply-templates mode="walk_supertypes_tree_for_commas"
+ select='/descendant::Model:Class[@xmi.id=substring-before($supertypes," ")]'/>
+
+ </xsl:variable>
+
+ <xsl:choose>
+
+ <xsl:when test='string-length($result) = 0'>
+
+ <xsl:call-template name="split_supertypes_for_commas">
+ <xsl:with-param name="supertypes"
+ select='substring-after($supertypes," ")'/>
+ </xsl:call-template>
+
+ </xsl:when>
+
+ <xsl:otherwise>
+
+ <xsl:value-of select="$result"/>
+
+ </xsl:otherwise>
+
+ </xsl:choose>
+
+ </xsl:when>
+
+ <xsl:otherwise>
+
+ <xsl:apply-templates mode="walk_supertypes_tree_for_commas"
+ select='/descendant::Model:Class[@xmi.id=$supertypes]'/>
+
+ </xsl:otherwise>
+
+ </xsl:choose>
+
+ </xsl:template>
+
+
<!-- Templates to do parameters to the create_<class> methods parameters.
These templates all use the create_params mode.
***************
*** 194,202 ****
<!-- Certain nodes do nothing. -->
<xsl:template mode="create_params"
! match="/ | XMI | XMI.content | Model:Package | Model:Namespace.contents | Model:DataType.typeCode | XMI.CorbaTypeCode">
<xsl:param name="package_name"/>
<xsl:apply-templates mode="create_params">
<xsl:with-param name="package_name" select="$package_name"/>
</xsl:apply-templates>
--- 259,269 ----
<!-- Certain nodes do nothing. -->
<xsl:template mode="create_params"
! match="/ | XMI | XMI.content | Model:Package | Model:Class | Model:Namespace.contents | Model:DataType.typeCode | XMI.CorbaTypeCode">
<xsl:param name="package_name"/>
+ <xsl:param name="supertypes"/>
<xsl:apply-templates mode="create_params">
<xsl:with-param name="package_name" select="$package_name"/>
+ <xsl:with-param name="supertypes" select="$supertypes"/>
</xsl:apply-templates>
***************
*** 206,215 ****
<xsl:template match="Model:Attribute" mode="create_params">
<xsl:param name="package_name"/>
! <!-- Hack!! If class name != ModelElement or attribute name != name.. -->
! <xsl:if
! test='not(ancestor::Model:Class/@name = "ModelElement" and @name = "name")'>
! <xsl:text>, </xsl:text>
! </xsl:if>
<xsl:variable name="collection">
--- 273,295 ----
<xsl:template match="Model:Attribute" mode="create_params">
<xsl:param name="package_name"/>
+ <xsl:param name="supertypes"/>
!
! <!-- If there is a previous attribute
! (i.e. one in this class or in a supertype)
! then output a comma.
! -->
! <xsl:choose>
! <xsl:when test='count(preceding-sibling::Model:Attribute) > 0'>
! <xsl:text>, </xsl:text>
! </xsl:when>
! <xsl:otherwise>
! <xsl:call-template name="split_supertypes_for_commas">
! <xsl:with-param name="supertypes">
! <xsl:value-of select="$supertypes"/>
! </xsl:with-param>
! </xsl:call-template>
! </xsl:otherwise>
! </xsl:choose>
<xsl:variable name="collection">
***************
*** 259,310 ****
! <xsl:template match="Model:Class" mode="create_params">
<xsl:param name="package_name"/>
! <!-- attempt to find this class's supertype -->
! <xsl:variable name="supertypes" select="@supertypes"/>
! <!-- if a supertype exists recurse on supertype -->
! <xsl:if test='count(attribute::supertypes) > 0'>
! <xsl:choose>
! <xsl:when test='contains(@supertypes," ")'>
! <xsl:apply-templates mode="create_params"
! select='/descendant::Model:Class[@xmi.id=substring-before($supertypes," ")]'>
! <xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates>
! <!-- Hack!!
! xsl:apply-templates mode="create_params"
! select='/descendant::Model:Class[@xmi.id=substring-after($supertypes," ")]'
! <xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates
! End Hack!! -->
! </xsl:when>
! <xsl:otherwise>
! <xsl:apply-templates mode="create_params"
! select='/descendant::Model:Class[@xmi.id=$supertypes]'>
! <xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates>
- </xsl:otherwise>
! </xsl:choose>
! </xsl:if>
! <!-- output the current nodes attributes -->
! <xsl:apply-templates mode="create_params">
! <xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates>
</xsl:template>
</xsl:transform>
--- 339,475 ----
! <!-- Split the supertype_set parameter up into its individual referneces.
! Nodes we have visited get stored in previous_supertypes
! (so we can se if they contain any attributes
! (damn those commas are tricky))
! -->
! <xsl:template name="split_supertypes_for_create_params">
<xsl:param name="package_name"/>
+ <xsl:param name="supertype_set"/>
+ <xsl:param name="previous_supertypes"/>
! <xsl:choose>
! <xsl:when test='contains($supertype_set," ")'>
! <xsl:variable name="new_supertype"
! select='substring-before($supertype_set," ")'/>
! <xsl:apply-templates mode="create_params"
! select='/descendant::Model:Class[@xmi.id=$new_supertype]'>
! <xsl:with-param name="package_name" select="$package_name"/>
! <xsl:with-param name="supertypes" select="$previous_supertypes"/>
! </xsl:apply-templates>
!
! <xsl:variable name="old_supertypes">
! <xsl:call-template name="append-to-bag">
! <xsl:with-param name="old_bag" select="$previous_supertypes"/>
! <xsl:with-param name="new_elems" select="$new_supertype"/>
! </xsl:call-template>
! </xsl:variable>
!
! <xsl:call-template name="split_supertypes_for_create_params">
! <xsl:with-param name="package_name" select="$package_name"/>
! <xsl:with-param name="supertype_set"
! select='substring-after($supertype_set," ")'/>
! <xsl:with-param name="previous_supertypes" select="$old_supertypes"/>
! </xsl:call-template>
! </xsl:when>
! <xsl:otherwise>
!
! <xsl:apply-templates mode="create_params"
! select='/descendant::Model:Class[@xmi.id=$supertype_set]'>
! <xsl:with-param name="package_name" select="$package_name"/>
! <xsl:with-param name="supertypes" select="$previous_supertypes"/>
! </xsl:apply-templates>
! </xsl:otherwise>
! </xsl:choose>
! </xsl:template>
! <xsl:template name="split_supertypes_for_form_supertype_set">
! <xsl:param name="supertypes"/>
! <xsl:choose>
! <xsl:when test='contains($supertypes," ")'>
!
! <xsl:apply-templates mode="form_supertype_set"
! select='/descendant::Model:Class[@xmi.id=substring-before($supertypes," ")]'/>
!
! <xsl:text> </xsl:text>
!
! <xsl:call-template name="split_supertypes_for_form_supertype_set">
! <xsl:with-param name="supertypes"
! select='substring-after($supertypes," ")'/>
! </xsl:call-template>
!
! </xsl:when>
!
! <xsl:otherwise>
!
! <xsl:apply-templates mode="form_supertype_set"
! select='/descendant::Model:Class[@xmi.id=$supertypes]'/>
!
! </xsl:otherwise>
!
! </xsl:choose>
!
! </xsl:template>
!
!
! <!-- Replace the default rule. -->
! <xsl:template match="*" mode="form_supertype_set"/>
!
!
! <!-- Template to walk tree and form unique set of uperclasses. -->
! <xsl:template match="Model:Class" mode="form_supertype_set">
!
! <xsl:choose>
!
! <xsl:when test='count(attribute::supertypes) > 0'>
!
! <xsl:call-template name="split_supertypes_for_form_supertype_set">
! <xsl:with-param name="supertypes" select="@supertypes"/>
! </xsl:call-template>
!
! <xsl:text> </xsl:text>
!
! </xsl:when>
!
! </xsl:choose>
!
! <xsl:value-of select="@xmi.id"/>
</xsl:template>
+ <!-- Template to use unique set and apply templates for attrs etc. -->
+ <xsl:template name="create_unique_params">
+ <xsl:param name="package_name"/>
+
+ <xsl:variable name="supertype_bag">
+ <xsl:apply-templates mode="form_supertype_set" select="."/>
+ </xsl:variable>
+
+ <xsl:variable name="supertype_set">
+ <xsl:call-template name="make-unique">
+ <xsl:with-param name="the_bag" select="$supertype_bag"/>
+ <!-- Pass the empty string as the start condition -->
+ <xsl:with-param name="the_set" select='substring-before("a","b")'/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:call-template name="split_supertypes_for_create_params">
+ <xsl:with-param name="supertype_set" select="$supertype_set"/>
+ <xsl:with-param name="package_name" select="$package_name"/>
+ </xsl:call-template>
+
+ </xsl:template>
</xsl:transform>
Index: gen_proxy_ccs.xsl
===================================================================
RCS file: /cvsroot/kuml/kuml/libkuml/uml/tools/gen_proxy_ccs.xsl,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** gen_proxy_ccs.xsl 30 Jan 2002 20:41:04 -0000 1.5
--- gen_proxy_ccs.xsl 6 Mar 2002 22:27:03 -0000 1.6
***************
*** 352,358 ****
<xsl:text>( </xsl:text>
! <xsl:apply-templates mode="create_params" select=".">
<xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates>
<xsl:text> ) </xsl:text>
--- 352,358 ----
<xsl:text>( </xsl:text>
! <xsl:call-template name="create_unique_params">
<xsl:with-param name="package_name" select="$package_name"/>
! </xsl:call-template>
<xsl:text> ) </xsl:text>
Index: gen_proxy_hs.xsl
===================================================================
RCS file: /cvsroot/kuml/kuml/libkuml/uml/tools/gen_proxy_hs.xsl,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** gen_proxy_hs.xsl 30 Jan 2002 20:41:04 -0000 1.12
--- gen_proxy_hs.xsl 6 Mar 2002 22:27:03 -0000 1.13
***************
*** 261,267 ****
<xsl:text>( </xsl:text>
! <xsl:apply-templates mode="create_params" select=".">
<xsl:with-param name="package_name" select="$package_name"/>
! </xsl:apply-templates>
<xsl:text> ) </xsl:text>
--- 261,267 ----
<xsl:text>( </xsl:text>
! <xsl:call-template name ="create_unique_params">
<xsl:with-param name="package_name" select="$package_name"/>
! </xsl:call-template>
<xsl:text> ) </xsl:text>
***************
*** 276,284 ****
</xsl:if>
! <xsl:text> Reflective::RefPackage_ptr get_parent_package(); </xsl:text>
<xsl:text> </xsl:text>
! <xsl:text> void set_parent_package(Reflective::RefPackage_ptr new_value); </xsl:text>
<xsl:text> </xsl:text>
--- 276,284 ----
</xsl:if>
! <xsl:text> Reflective::RefPackage_ptr get_parent_package(); </xsl:text>
<xsl:text> </xsl:text>
! <xsl:text> void set_parent_package(Reflective::RefPackage_ptr new_value); </xsl:text>
<xsl:text> </xsl:text>
|