From 8bb4a581c00a8a217d63d847d33c988cd9eb7724 Mon Sep 17 00:00:00 2001 From: kirchsth Date: Wed, 1 May 2024 15:45:59 +0200 Subject: [PATCH 1/4] #350 Boundaries support sprites which are defined via tags If a sprite is defined then it displayed in the first line in front of the (with a smaller size, typically 50%) - AddBoundaryTag(..., ?sprite, ?legendSprite) - UpdateBoundaryStyle(..., ?sprite, ?legendSprite) - UpdateContainerBoundaryStyle(..., ?sprite, ?legendSprite) - UpdateSystemBoundaryStyle(..., ?sprite, ?legendSprite) - UpdateEnterpriseBoundaryStyle(..., ?sprite, ?legendSprite) Default sprite size can be changed via $BOUNDARY_IMAGE_SIZE_FACTOR --- C4.puml | 42 ++++++++++++++++++------------- C4_Container.puml | 4 +-- C4_Context.puml | 8 +++--- README.md | 10 ++++---- percy/TestBoundaryTagSupport.puml | 6 ++--- 5 files changed, 38 insertions(+), 32 deletions(-) diff --git a/C4.puml b/C4.puml index 42639f06..a8894aa9 100644 --- a/C4.puml +++ b/C4.puml @@ -34,6 +34,8 @@ rectangle C4VersionDetailsArea <> [ !$BOUNDARY_COLOR ?= "#444444" !$BOUNDARY_BG_COLOR ?= "transparent" !$BOUNDARY_BORDER_STYLE ?= "dashed" +' boundary symbols written in the same line, typically only 50% of the size in element +!$BOUNDARY_IMAGE_SIZE_FACTOR ?= 0.5 !$LEGEND_TITLE_COLOR ?= "#000000" !$LEGEND_FONT_COLOR ?= "#FFFFFF" @@ -595,13 +597,13 @@ $elementSkin !endfunction ' element symbols typically 4 times too big in legend -!function $smallVersionSprite($sprite) +!function $smallVersionSprite($sprite, $imageScale = $LEGEND_IMAGE_SIZE_FACTOR) ' ,scale= ... has to be first (...,color=black,scale=0.25... is invalid too) !if (%strpos($sprite, "=") < 0) !if (%substr($sprite, 0, 4) == "img:") - !$smallSprite = $sprite + "{scale=" + $LEGEND_IMAGE_SIZE_FACTOR + "}" + !$smallSprite = $sprite + "{scale=" + $imageScale + "}" !else - !$smallSprite = $sprite + ",scale=" + $LEGEND_IMAGE_SIZE_FACTOR + !$smallSprite = $sprite + ",scale=" + $imageScale !endif !else !$smallSprite = $sprite @@ -1373,22 +1375,22 @@ $getLegendArea($alias, $hideStereotype, $details) ' Boundaries ' ################################## -!unquoted procedure UpdateBoundaryStyle($elementName="", $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $type="", $legendText="", $borderStyle="", $borderThickness="") +!unquoted procedure UpdateBoundaryStyle($elementName="", $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $type="", $legendText="", $borderStyle="", $borderThickness="", $sprite="", $legendSprite="") !if ($elementName != "") !$elementBoundary = $elementName + '_boundary' - UpdateElementStyle($elementBoundary, $bgColor, $fontColor, $borderColor, $shadowing, $shape, "", $type, $legendText, "", $borderStyle, $borderThickness) + UpdateElementStyle($elementBoundary, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $type, $legendText, $legendSprite, $borderStyle, $borderThickness) !else - UpdateElementStyle("boundary", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "", $type, $legendText, "", $borderStyle, $borderThickness) + UpdateElementStyle("boundary", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $type, $legendText, $legendSprite, $borderStyle, $borderThickness) ' simulate color inheritance - UpdateBoundaryStyle("enterprise", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "Enterprise", "", $borderStyle, $borderThickness) - UpdateBoundaryStyle("system", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "System", "", $borderStyle, $borderThickness) - UpdateBoundaryStyle("container", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "Container", "", $borderStyle, $borderThickness) + UpdateBoundaryStyle("enterprise", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "Enterprise", "", $borderStyle, $borderThickness, $sprite, $legendSprite) + UpdateBoundaryStyle("system", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "System", "", $borderStyle, $borderThickness, $sprite, $legendSprite) + UpdateBoundaryStyle("container", $bgColor, $fontColor, $borderColor, $shadowing, $shape, "Container", "", $borderStyle, $borderThickness, $sprite, $legendSprite) !endif !endprocedure -!unquoted procedure AddBoundaryTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $type="", $legendText="", $borderStyle="", $borderThickness="") +!unquoted procedure AddBoundaryTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $type="", $legendText="", $borderStyle="", $borderThickness="", $sprite="", $legendSprite="") !$tagBoundary = $tagStereo + '_boundary' - AddElementTag($tagBoundary, $bgColor, $fontColor, $borderColor, $shadowing, $shape, "", $type, $legendText, "", $borderStyle, $borderThickness) + AddElementTag($tagBoundary, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $type, $legendText, $legendSprite, $borderStyle, $borderThickness) !endprocedure ' add _boundary to all tags that short tag version can be used @@ -1410,20 +1412,24 @@ $getLegendArea($alias, $hideStereotype, $details) !return $boundaryTags !endfunction -!function $getBoundary($label, $type) - !if ($type == "") - !return '== ' + $breakLabel($label) +!function $getBoundary($sprite, $label, $type) + !$line = '== ' + !if ($sprite != "") + !$line = $line + $getSprite($smallVersionSprite($sprite, $BOUNDARY_IMAGE_SIZE_FACTOR)) + ' ' !endif - !if (type != "") - !return '== ' + $breakLabel($label) + '\n[' + $type + ']' + !$line = $line + $breakLabel($label) + !if ($type != "") + !$line = $line + '\n[' + $type + ']' !endif + !return $line !endfunction !unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="") !$boundaryTags = $addBoundaryPostfix($tags) -' nodes $type reuses $techn definition of $boundaryTags +' boundary $type reuses $techn definition of $boundaryTags !$type=$toElementArg($type, $boundaryTags, "ElementTagTechn", "boundary") -rectangle "$getBoundary($label, $type)" $toStereos("boundary", $boundaryTags) as $alias $getLink($link) +!$sprite=$toElementArg("", $boundaryTags, "ElementTagSprite", "boundary") +rectangle "$getBoundary($sprite, $label, $type)" $toStereos("boundary", $boundaryTags) as $alias $getLink($link) !endprocedure ' Boundary Styling diff --git a/C4_Container.puml b/C4_Container.puml index caab6182..d5309efb 100644 --- a/C4_Container.puml +++ b/C4_Container.puml @@ -40,8 +40,8 @@ UpdateBoundaryStyle("container", $bgColor=$CONTAINER_BOUNDARY_BG_COLOR, $fontCol $addElementTagInclReuse("external_container", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite, $borderStyle, $borderThickness) !endprocedure -!unquoted procedure UpdateContainerBoundaryStyle($bgColor=$CONTAINER_BOUNDARY_BG_COLOR, $fontColor=$CONTAINER_BOUNDARY_COLOR, $borderColor=$CONTAINER_BOUNDARY_COLOR, $shadowing="", $shape="", $type="Container", $legendText="", $borderStyle="", $borderThickness="") - UpdateBoundaryStyle("container", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness) +!unquoted procedure UpdateContainerBoundaryStyle($bgColor=$CONTAINER_BOUNDARY_BG_COLOR, $fontColor=$CONTAINER_BOUNDARY_COLOR, $borderColor=$CONTAINER_BOUNDARY_COLOR, $shadowing="", $shape="", $type="Container", $legendText="", $borderStyle="", $borderThickness="", $sprite="", $legendSprite="") + UpdateBoundaryStyle("container", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness, $sprite, $legendSprite) !endprocedure ' Layout diff --git a/C4_Context.puml b/C4_Context.puml index 664b2a67..ac07793c 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -62,11 +62,11 @@ UpdateBoundaryStyle("enterprise", $bgColor=$ENTERPRISE_BOUNDARY_BG_COLOR, $fontC $addElementTagInclReuse("external_system", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $type, $legendText, $legendSprite, $borderStyle, $borderThickness) !endprocedure -!unquoted procedure UpdateEnterpriseBoundaryStyle($bgColor=$ENTERPRISE_BOUNDARY_BG_COLOR, $fontColor=$ENTERPRISE_BOUNDARY_COLOR, $borderColor=$ENTERPRISE_BOUNDARY_COLOR, $shadowing="", $shape="", $type="Enterprise", $legendText="", $borderStyle="", $borderThickness="") - UpdateBoundaryStyle("enterprise", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness) +!unquoted procedure UpdateEnterpriseBoundaryStyle($bgColor=$ENTERPRISE_BOUNDARY_BG_COLOR, $fontColor=$ENTERPRISE_BOUNDARY_COLOR, $borderColor=$ENTERPRISE_BOUNDARY_COLOR, $shadowing="", $shape="", $type="Enterprise", $legendText="", $borderStyle="", $borderThickness="", $sprite="", $legendSprite="") + UpdateBoundaryStyle("enterprise", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness, $sprite, $legendSprite) !endprocedure -!unquoted procedure UpdateSystemBoundaryStyle($bgColor=$SYSTEM_BOUNDARY_BG_COLOR, $fontColor=$SYSTEM_BOUNDARY_COLOR, $borderColor=$SYSTEM_BOUNDARY_COLOR, $shadowing="", $shape="", $type="System", $legendText="", $borderStyle="", $borderThickness="") - UpdateBoundaryStyle("system", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness) +!unquoted procedure UpdateSystemBoundaryStyle($bgColor=$SYSTEM_BOUNDARY_BG_COLOR, $fontColor=$SYSTEM_BOUNDARY_COLOR, $borderColor=$SYSTEM_BOUNDARY_COLOR, $shadowing="", $shape="", $type="System", $legendText="", $borderStyle="", $borderThickness="", $sprite="", $legendSprite="") + UpdateBoundaryStyle("system", $bgColor, $fontColor, $borderColor, $shadowing, $shape, $type, $legendText, $borderStyle, $borderThickness, $sprite, $legendSprite) !endprocedure ' Sprites diff --git a/README.md b/README.md index 0f8b0003..1d271cb5 100644 --- a/README.md +++ b/README.md @@ -600,13 +600,13 @@ Additional tags/stereotypes can be added to the existing element stereotypes (co Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend. - `AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite, ?lineThickness)`: Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend. -- `AddBoundaryTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?borderStyle, ?borderThickness)`: +- `AddBoundaryTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?borderStyle, ?borderThickness, ?sprite, ?legendSprite)`: Introduces a new Boundary tag. The styles of the tagged boundaries are updated and the tag is displayed in the calculated legend. - `UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite, ?borderStyle, ?borderThickness)`: This call updates the default style of the elements (component, ...) and creates no additional legend entry. - `UpdateRelStyle(textColor, lineColor)`: This call updates the default relationship colors and creates no additional legend entry. -- `UpdateBoundaryStyle(?elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness)`: +- `UpdateBoundaryStyle(?elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?sprite, ?legendSprite)`: This call updates the default style of the existing boundaries and creates no additional legend entry. If the element name is "" then it updates generic, enterprise, system and container boundary style in on call. - `RoundedBoxShape()`: This call returns the name of the rounded box shape and can be used as ?shape argument. @@ -650,9 +650,9 @@ Following calls introduces new element tags with element specific default colors Like the element specific tag definitions exist boundary specific calls with their default colors **and type**: -- `UpdateContainerBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness)` -- `UpdateSystemBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness)` -- `UpdateEnterpriseBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness)` +- `UpdateContainerBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?sprite, ?legendSprite)` +- `UpdateSystemBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?sprite, ?legendSprite)` +- `UpdateEnterpriseBoundaryStyle(?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?type, ?legendText, ?borderStyle, ?borderThickness, ?sprite, ?legendSprite)` ### Comments diff --git a/percy/TestBoundaryTagSupport.puml b/percy/TestBoundaryTagSupport.puml index c96bc479..6cec834a 100644 --- a/percy/TestBoundaryTagSupport.puml +++ b/percy/TestBoundaryTagSupport.puml @@ -6,11 +6,11 @@ !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !endif -UpdateBoundaryStyle($bgColor="gold", $fontColor="brown", $borderColor="brown") +UpdateBoundaryStyle($bgColor="gold", $fontColor="brown", $borderColor="brown", $sprite="person,scale=1", $legendSprite="person2,scale=0.5") ' re-set $bgColor avoids '(no back color)' in legend -UpdateSystemBoundaryStyle($bgColor="gold", $fontColor="white", $borderColor="white") +UpdateSystemBoundaryStyle($bgColor="gold", $fontColor="white", $borderColor="white", $sprite=robot, $legendSprite="robot2") -AddBoundaryTag("specialSystem", $bgColor="green", $fontColor="white", $borderColor="blue", $shadowing="true", $shape = RoundedBoxShape(), $type="A SPECIAL SYSTEM BOUNDARY") +AddBoundaryTag("specialSystem", $bgColor="green", $fontColor="white", $borderColor="blue", $shadowing="true", $shape = RoundedBoxShape(), $type="A SPECIAL SYSTEM BOUNDARY", $sprite="robot,scale=0.5,color=black", $legendSprite="robot2,scale=0.3,color=black") AddBoundaryTag("existingContainersBoundary", $bgColor="red", $fontColor="white", $borderColor="white", $type="Existing CONTAINER BOUNDARY", $legendText="container boundary with existing components") System_Boundary(sb, "A System Boundary") { From 4835b90348a966981521965925b188eed57c8cda Mon Sep 17 00:00:00 2001 From: kirchsth Date: Wed, 1 May 2024 17:59:40 +0200 Subject: [PATCH 2/4] #350 Boundaries support descriptions - Boundary(..., ?descr) - Enterprise_Boundary(..., ?descr) - System_Boundary(..., ?descr) - Container_Boundary(..., ?descr) --- C4.puml | 13 ++++++++++--- C4_Container.puml | 4 ++-- C4_Context.puml | 8 ++++---- README.md | 8 ++++---- percy/TestBoundaryTagSupport.puml | 16 +++++++++------- 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/C4.puml b/C4.puml index a8894aa9..db3be8b7 100644 --- a/C4.puml +++ b/C4.puml @@ -36,6 +36,7 @@ rectangle C4VersionDetailsArea <> [ !$BOUNDARY_BORDER_STYLE ?= "dashed" ' boundary symbols written in the same line, typically only 50% of the size in element !$BOUNDARY_IMAGE_SIZE_FACTOR ?= 0.5 +!$BOUNDARY_DESCR_MAX_CHAR_WIDTH ?= 35 !$LEGEND_TITLE_COLOR ?= "#000000" !$LEGEND_FONT_COLOR ?= "#FFFFFF" @@ -926,9 +927,11 @@ $line $defineSkinparams($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $borderStyle, $borderThickness) !if ($sprite!="") %set_variable_value("$" + $tagStereo + "ElementTagSprite", $sprite) +!log "DefinedlegendSprite:" + $legendSprite !if ($legendSprite == "") !$legendSprite = $smallVersionSprite($sprite) !endif +!log "CalculatedlegendSprite:" + $legendSprite !endif !if ($techn != "") %set_variable_value("$" + $tagStereo + "ElementTagTechn", $techn) @@ -1412,24 +1415,28 @@ $getLegendArea($alias, $hideStereotype, $details) !return $boundaryTags !endfunction -!function $getBoundary($sprite, $label, $type) +!function $getBoundary($label, $type, $descr, $sprite) !$line = '== ' !if ($sprite != "") + ' add sprite in label line that it is more compact !$line = $line + $getSprite($smallVersionSprite($sprite, $BOUNDARY_IMAGE_SIZE_FACTOR)) + ' ' !endif !$line = $line + $breakLabel($label) !if ($type != "") !$line = $line + '\n[' + $type + ']' !endif + !if ($descr != "") + !$line = $line + '\n\n' + $breakDescr($descr, $BOUNDARY_DESCR_MAX_CHAR_WIDTH) + !endif !return $line !endfunction -!unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="") +!unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="", $descr = "") !$boundaryTags = $addBoundaryPostfix($tags) ' boundary $type reuses $techn definition of $boundaryTags !$type=$toElementArg($type, $boundaryTags, "ElementTagTechn", "boundary") !$sprite=$toElementArg("", $boundaryTags, "ElementTagSprite", "boundary") -rectangle "$getBoundary($sprite, $label, $type)" $toStereos("boundary", $boundaryTags) as $alias $getLink($link) +rectangle "$getBoundary($label, $type, $descr, $sprite)" $toStereos("boundary", $boundaryTags) as $alias $getLink($link) !endprocedure ' Boundary Styling diff --git a/C4_Container.puml b/C4_Container.puml index d5309efb..4b1c1a4b 100644 --- a/C4_Container.puml +++ b/C4_Container.puml @@ -92,12 +92,12 @@ endlegend ' Boundaries ' ################################## -!unquoted procedure Container_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure Container_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+container' !else !$allTags = 'container' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure diff --git a/C4_Context.puml b/C4_Context.puml index ac07793c..d8dfa4c1 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -413,22 +413,22 @@ rectangle "$getPerson($label, $type, $descr, $sprite)$getProps()" $toStereos("ex ' Boundaries ' ################################## -!unquoted procedure Enterprise_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure Enterprise_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+enterprise' !else !$allTags = 'enterprise' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure -!unquoted procedure System_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure System_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+system' !else !$allTags = 'system' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure diff --git a/README.md b/README.md index 1d271cb5..5aa8a62a 100644 --- a/README.md +++ b/README.md @@ -241,9 +241,9 @@ SHOW_LEGEND() - `System_Ext(alias, label, ?descr, ?sprite, ?tags, ?link, ?type, ?baseShape)` - `SystemDb_Ext(alias, label, ?descr, ?sprite, ?tags, ?link, ?type)` - `SystemQueue_Ext(alias, label, ?descr, ?sprite, ?tags, ?link, ?type)` - - `Boundary(alias, label, ?type, ?tags, ?link)` - - `Enterprise_Boundary(alias, label, ?tags, ?link)` - - `System_Boundary(alias, label, ?tags, ?link)` + - `Boundary(alias, label, ?type, ?tags, ?link, ?descr)` + - `Enterprise_Boundary(alias, label, ?tags, ?link, ?descr)` + - `System_Boundary(alias, label, ?tags, ?link, ?descr)` - Sprites: - `person` - `person2` @@ -262,7 +262,7 @@ SHOW_LEGEND() - `Container_Ext(alias, label, ?techn, ?descr, ?sprite, ?tags, ?link, ?baseShape)` - `ContainerDb_Ext(alias, label, ?techn, ?descr, ?sprite, ?tags, ?link)` - `ContainerQueue_Ext(alias, label, ?techn, ?descr, ?sprite, ?tags, ?link)` - - `Container_Boundary(alias, label, ?tags, ?link)` + - `Container_Boundary(alias, label, ?tags, ?link, ?descr)` ### Component diagram diff --git a/percy/TestBoundaryTagSupport.puml b/percy/TestBoundaryTagSupport.puml index 6cec834a..5e295c6f 100644 --- a/percy/TestBoundaryTagSupport.puml +++ b/percy/TestBoundaryTagSupport.puml @@ -6,19 +6,21 @@ !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !endif -UpdateBoundaryStyle($bgColor="gold", $fontColor="brown", $borderColor="brown", $sprite="person,scale=1", $legendSprite="person2,scale=0.5") +UpdateBoundaryStyle($bgColor="gold", $fontColor="brown", $borderColor="brown", $sprite="person", $legendSprite="person2,scale=0.3") ' re-set $bgColor avoids '(no back color)' in legend -UpdateSystemBoundaryStyle($bgColor="gold", $fontColor="white", $borderColor="white", $sprite=robot, $legendSprite="robot2") +UpdateSystemBoundaryStyle($bgColor="gold", $fontColor="white", $borderColor="white", $sprite=robot, $legendSprite="robot2,scale=0.3") + +AddElementTag("special", $sprite="person", $legendSprite="person,scale=0.3") AddBoundaryTag("specialSystem", $bgColor="green", $fontColor="white", $borderColor="blue", $shadowing="true", $shape = RoundedBoxShape(), $type="A SPECIAL SYSTEM BOUNDARY", $sprite="robot,scale=0.5,color=black", $legendSprite="robot2,scale=0.3,color=black") -AddBoundaryTag("existingContainersBoundary", $bgColor="red", $fontColor="white", $borderColor="white", $type="Existing CONTAINER BOUNDARY", $legendText="container boundary with existing components") +AddBoundaryTag("existingContainersBoundary", $bgColor="red", $fontColor="white", $borderColor="white", $type="Existing CONTAINER BOUNDARY", $legendText="container boundary with existing components", $sprite="robot") System_Boundary(sb, "A System Boundary") { } -System_Boundary(sb1, "Special System 1 Boundary", $tags="specialSystem") { - Container_Boundary(cb1, "Container Boundary\nwith tag", $tags="existingContainersBoundary") { - Component(e1, "existing 1", "xyz") +System_Boundary(sb1, "Special System 1 Boundary", $tags="specialSystem", $descr="A long description ... A long description ... A long description ... A long description") { + Container_Boundary(cb1, "Container Boundary\nwith tag", $tags="existingContainersBoundary", $descr="A long description ... A long description ... A long description ... A long description") { + Component(e1, "existing 1", "xyz", $tags="special") Component(e2, "existing 2", "xyz") } Container_Boundary(cb2, "A Container Boundary") { @@ -38,7 +40,7 @@ Boundary(anotherBoundary, "Another Boundary", $type="BOUNDARY TYPE", $tags="v1") Component(anotherComponent, "Another Component", $techn="COMPONENT TYPE", $tags="v1", $descr="Component and boundary use different tag name spaces that both v1 tags can use different styles") } -Boundary(aBoundary, "A Boundary") { +Boundary(aBoundary, "A Boundary", $descr="A long description\nwith concrete line breaks\nNew line\nNewLine") { } Lay_R(sb, sb1) From 9c669d01efd46abd0e7f00cb6ab3b3123c2c5471 Mon Sep 17 00:00:00 2001 From: kirchsth Date: Wed, 1 May 2024 18:33:13 +0200 Subject: [PATCH 3/4] #350 Boundaries support descriptions (2 - remove logs) --- C4.puml | 2 -- 1 file changed, 2 deletions(-) diff --git a/C4.puml b/C4.puml index db3be8b7..9c430d1f 100644 --- a/C4.puml +++ b/C4.puml @@ -927,11 +927,9 @@ $line $defineSkinparams($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $borderStyle, $borderThickness) !if ($sprite!="") %set_variable_value("$" + $tagStereo + "ElementTagSprite", $sprite) -!log "DefinedlegendSprite:" + $legendSprite !if ($legendSprite == "") !$legendSprite = $smallVersionSprite($sprite) !endif -!log "CalculatedlegendSprite:" + $legendSprite !endif !if ($techn != "") %set_variable_value("$" + $tagStereo + "ElementTagTechn", $techn) From 096629c0187deb72148f0c61d52250419d205c2f Mon Sep 17 00:00:00 2001 From: kirchsth Date: Wed, 1 May 2024 19:49:34 +0200 Subject: [PATCH 4/4] #350 Boundaries in sequence diagrams support sprites and descriptions too --- C4_Sequence.puml | 32 +++++++++++++++++++------------ percy/TestSequenceSkinparams.puml | 8 +++++++- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/C4_Sequence.puml b/C4_Sequence.puml index 158a594e..d49f715f 100644 --- a/C4_Sequence.puml +++ b/C4_Sequence.puml @@ -1,4 +1,4 @@ -' convert it with additional command line argument -DRELATIVE_INCLUDE="relative/absolute" to use locally +' convert it with additional command line argument -DRELATIVE_INCLUDE="relative/absolute" to use locally !if %variable_exists("RELATIVE_INCLUDE") !include ./C4_Component.puml !else @@ -192,7 +192,6 @@ sequenceDiagram { !return $breakWithNewline($text, $lineStart, $lineEnd, $REL_TECHN_MAX_CHAR_WIDTH) !endfunction -' description is not displayed (size too big, line breaks not supported) ' properties are not displayed in sequence diagram (size would be too big) ' $breakLabel() not required by participant !procedure $getParticipant($elementType, $alias, $label, $techn, $descr, $sprite, $tags, $link) @@ -324,20 +323,29 @@ $calcDescr ' alias ignored ' $breakLabel() not required by participant -!unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="") +!unquoted procedure Boundary($alias, $label, $type="", $tags="", $link="", $descr = "") !$boundaryTags = $addBoundaryPostfix($tags) -' nodes $type reuses $techn definition of $boundaryTags +' boundary $type reuses $techn definition of $boundaryTags !$type=$toElementArg($type, $boundaryTags, "ElementTagTechn", "boundary") +!$sprite=$toElementArg("", $boundaryTags, "ElementTagSprite", "boundary") +!$labelSprite="" +!if ($sprite != "") + ' add sprite in label line that it is more compact + !$labelSprite = $getSprite($smallVersionSprite($sprite, $BOUNDARY_IMAGE_SIZE_FACTOR)) + ' ' +!endif !if ($link != "") !$usedNewLine = ']]\n== [[' + $link + ' ' - !$labelType = '== [[' + $link + ' ' + $breakText($label, $usedNewLine) + ']]' + !$labelType = '== [[' + $link + ' ' + $labelSprite + $breakText($label, $usedNewLine) + ']]' !else !$usedNewLine = '\n== ' - !$labelType = $breakText($label, $usedNewLine) + !$labelType = $labelSprite + $breakText($label, $usedNewLine) !endif !if (type != "") !$labelType = $labelType + '\n[' + $type + ']' !endif +!if ($display_element_description == %true() && $descr != "") + !$labelType = $labelType + '\n\n' + $breakDescr($descr, $BOUNDARY_DESCR_MAX_CHAR_WIDTH) +!endif box "$labelType" $toStereos("boundary", $boundaryTags) !endprocedure @@ -345,34 +353,34 @@ box "$labelType" $toStereos("boundary", $boundaryTags) end box !endprocedure -!unquoted procedure Enterprise_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure Enterprise_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+enterprise' !else !$allTags = 'enterprise' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure -!unquoted procedure System_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure System_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+system' !else !$allTags = 'system' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure -!unquoted procedure Container_Boundary($alias, $label, $tags="", $link="") +!unquoted procedure Container_Boundary($alias, $label, $tags="", $link="", $descr = "") !if ($tags != "") !$allTags = $tags + '+container' !else !$allTags = 'container' !endif ' $type defined via $tag style - Boundary($alias, $label, "", $allTags, $link) + Boundary($alias, $label, "", $allTags, $link, $descr) !endprocedure ' Relationship (redefinition) diff --git a/percy/TestSequenceSkinparams.puml b/percy/TestSequenceSkinparams.puml index e2be6ef2..8652fd34 100644 --- a/percy/TestSequenceSkinparams.puml +++ b/percy/TestSequenceSkinparams.puml @@ -71,10 +71,16 @@ sequenceDiagram { !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Sequence.puml !endif +SHOW_ELEMENT_DESCRIPTIONS() SHOW_INDEX(true) +AddPersonTag("chatBot", $sprite="robot") +AddBoundaryTag("chatBotSystem", $type="ChatGPT", $bgColor="lightgreen", $fontColor=$PERSON_BG_COLOR, $borderColor=$PERSON_BG_COLOR, $shadowing="true", $sprite="robot2") + Person(Alice, "Alice") -Person(Bob, "Bob") +System_Boundary(system, "System", $tags="chatBotSystem", $descr="ChatGPT with model gpt-3.5-turbo. It has been updated to feature higher accuracy at responding in requested formats") +Component(Bob, "Bob", $descr="This chatbot should act like a person", $tags="chatBot") +Boundary_End() activate Bob