📄 lines.xsl
字号:
<xsl:with-param name="DiagramID" select="$DiagramID" /> </xsl:call-template> <path d="{$PathData}" fill="none" style="stroke-dasharray: 6 10" marker-end="url(#DependencyArrowhead{$DiagramID})" /> </g> </xsl:template> <!-- ProvidedInterfaceEdge line, displayed as a simple line --> <xsl:template name="ProvidedInterfaceEdge"> <xsl:param name="Waypoints" select="UML:GraphEdge.waypoints"/> <xsl:param name="DiagramID" select="@xmi.id"/> <xsl:variable name="PathData"> <xsl:call-template name="BuildPathData"/> </xsl:variable> <!-- The main ProvidedInterfaceEdge group --> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="StrokeStyle"/> <xsl:apply-templates select="." mode="isVisible" /> <title>ProvidedInterfaceEdge line</title> <desc>ProvidedInterfaceEdge</desc> <!-- The RequiredInterfaceEdge line --> <path d="{$PathData}" fill="none"/> </g> </xsl:template> <xsl:template name="EdgeText"> <xsl:param name="SemanticID"/> <!-- Edge properties --> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'StereotypeCompartment'"> <!-- Stereotype compartment --> <xsl:call-template name="StereotypeCompartment"> <xsl:with-param name="SemanticID" select="$SemanticID"/> </xsl:call-template> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'DirectedName'"> <!-- DirectedName --> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <title><xsl:text>DirectedName for </xsl:text><xsl:value-of select="$SemanticID"/></title> <desc><xsl:text>Main DirectedName group</xsl:text></desc> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Name'"> <xsl:call-template name="Name"> <xsl:with-param name="SemanticID" select="$SemanticID" /> </xsl:call-template> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Derived'"> <text x="{UML:GraphElement.position/XMI.field[1]}" y="{UML:GraphElement.position/XMI.field[2]}"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:text>/</xsl:text> </text> </xsl:when> </xsl:choose> </xsl:for-each> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'KeywordMetaclass'"> <!-- Metaclass -> Extend / Include --> <text x="{UML:GraphElement.position/XMI.field[1]}" y="{UML:GraphElement.position/XMI.field[2]}"> <xsl:choose> <xsl:when test="key('xmi.id', $SemanticID)/self::UML:Extend"> <xsl:value-of select="'extend'"/> </xsl:when> <xsl:when test="key('xmi.id', $SemanticID)/self::UML:Include"> <xsl:value-of select="'include'"/> </xsl:when> </xsl:choose> </text> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Name'"> <!-- Name --> <xsl:call-template name="Name"> <xsl:with-param name="SemanticID" select="$SemanticID" /> </xsl:call-template> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:AssociationEnd"> <!-- Endpoints --> <xsl:variable name="EndpointSemanticID" select="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/*/@xmi.idref"/> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})" id="{$EndpointSemanticID}"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <title><xsl:text>Endpoint </xsl:text><xsl:value-of select="$EndpointSemanticID"/></title> <desc><xsl:text>Main Endpoint group</xsl:text></desc> <!-- Contained nodes --> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Name'"> <!-- Endpoint Name --> <text> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <xsl:if test="key('xmi.id', $EndpointSemanticID)/@targetScope = 'classifier'"> <xsl:attribute name="text-decoration"><xsl:text>underline</xsl:text></xsl:attribute> </xsl:if> <xsl:call-template name="StringTSpan"> <xsl:with-param name="SemanticID" select="$EndpointSemanticID" /> <xsl:with-param name="String"> <xsl:value-of select="key('xmi.id', $EndpointSemanticID)/@name"/> </xsl:with-param> <xsl:with-param name="x" select="UML:GraphElement.position/XMI.field[1]" /> <xsl:with-param name="y" select="UML:GraphElement.position/XMI.field[2]" /> </xsl:call-template> </text> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Visibility'"> <!-- Endpoint Visibility --> <!-- Main Visibility group --> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})" id="{@xmi.id}"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <title><xsl:text>Visibility </xsl:text><xsl:value-of select="$EndpointSemanticID"/></title> <desc><xsl:text>Main Visibility group</xsl:text></desc> <!-- Visibility text --> <text> <xsl:call-template name="Visibility"/> </text> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Multiplicity'"> <!-- Endpoint Multiplicity --> <!-- Main Multiplicity group --> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})" id="{@xmi.id}"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <title><xsl:text>Multiplicity </xsl:text><xsl:value-of select="$EndpointSemanticID"/></title> <desc><xsl:text>Main Multiplicity group</xsl:text></desc> <!-- Multiplicity text --> <text> <xsl:call-template name="Multiplicity"/> </text> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ExpressionCompartment'"> <!-- Endpoint expressions --> <xsl:call-template name="ExpressionCompartment"> <xsl:with-param name="SemanticID" select="$EndpointSemanticID"/> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:for-each> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:Stimulus"> <!-- Link Stimulus --> <xsl:variable name="StimulusSemanticID" select="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/*/@xmi.idref"/> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="StrokeStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Arrow'"> <xsl:variable name="ActionSemanticID" select="key('xmi.id', $StimulusSemanticID)/UML:Stimulus.dispatchAction/*/@xmi.idref"/> <xsl:choose> <xsl:when test="key('xmi.id', $ActionSemanticID)/@isAsynchronous = 'true'"> <xsl:call-template name="AsynchronousArrow"/> </xsl:when> <xsl:otherwise> <xsl:call-template name="SynchronousArrow"/> </xsl:otherwise> </xsl:choose> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'SequenceExpression'"> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <title><xsl:text>SequenceExpression for </xsl:text><xsl:value-of select="$StimulusSemanticID"/></title> <desc><xsl:text>Main SequenceExpression group</xsl:text></desc> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Name'"> <xsl:call-template name="Name"/> </xsl:when> </xsl:choose> </xsl:for-each> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'TypeSeparator'"> <!-- Separator, ':' --> <text> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:call-template name="StringTSpan"> <xsl:with-param name="SemanticID" select="$StimulusSemanticID" /> <xsl:with-param name="String"> <xsl:text>:</xsl:text> </xsl:with-param> <xsl:with-param name="x" select="UML:GraphElement.position/XMI.field[1]" /> <xsl:with-param name="y" select="UML:GraphElement.position/XMI.field[2]" /> </xsl:call-template> </text> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:DestroyAction or UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:CreateAction or UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:CallAction or UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:SendAction or UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/UML:ReturnAction"> <g transform="translate({UML:GraphElement.position/XMI.field[1]}, {UML:GraphElement.position/XMI.field[2]})"> <xsl:apply-templates select="." mode="FontStyle"/> <xsl:apply-templates select="." mode="isVisible"/> <xsl:variable name="ActionSemanticID" select="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/*/@xmi.idref"/> <title><xsl:text>Stimulus Action </xsl:text><xsl:value-of select="$ActionSemanticID"/><xsl:text> for </xsl:text><xsl:value-of select="$StimulusSemanticID"/></title> <desc><xsl:text>Main Stimulus Action group</xsl:text></desc> <xsl:for-each select="UML:GraphElement.contained/UML:GraphNode"> <xsl:choose> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'Name'"> <xsl:call-template name="Name"> <xsl:with-param name="SemanticID" select="$ActionSemanticID"/> </xsl:call-template> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:Uml1SemanticModelBridge/UML:Uml1SemanticModelBridge.element/*"> <!-- TO DO: This is a workaround, try to use the inner elements' semantic --> <xsl:call-template name="Name"> <xsl:with-param name="SemanticID" select="$ActionSemanticID"/> </xsl:call-template> </xsl:when> </xsl:choose> </xsl:for-each> </g> </xsl:when> </xsl:choose> </xsl:for-each> </g> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'TransitionDescription'"> <!-- Transition description --> <xsl:call-template name="TransitionDescription"/> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'NamespaceCompartment'"> <!-- Namespace compartment --> <xsl:call-template name="Namespace"/> </xsl:when> <xsl:when test="UML:GraphElement.semanticModel/UML:SimpleSemanticModelElement/@typeInfo = 'ExpressionCompartment'"> <!-- Expression compartment --> <xsl:call-template name="ExpressionCompartment"/> </xsl:when> </xsl:choose> </xsl:for-each> </xsl:template> <!-- Build a path data ( 'd' attribute for path element) --> <xsl:template name="BuildPathData"> <xsl:param name="Waypoints" select="UML:GraphEdge.waypoints" /> <xsl:text>M </xsl:text> <xsl:for-each select="$Waypoints/XMI.field"> <xsl:choose> <xsl:when test="position() = 1"> <xsl:value-of select="./XMI.field[position()=1]" /><xsl:text> </xsl:text> <xsl:value-of select="./XMI.field[position()=2]" /><xsl:text> L </xsl:text> </xsl:when> <xsl:otherwise> <xsl:if test="(position() mod 3) = 1"> <xsl:value-of select="./XMI.field[position()=1]" /><xsl:text> </xsl:text> <xsl:value-of select="./XMI.field[position()=2]" /><xsl:text> </xsl:text> </xsl:if> </xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template></xsl:stylesheet>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -