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> |