From 344f4f616f9ee78743c4bf08ca29197d1f3d0fa3 Mon Sep 17 00:00:00 2001 From: KIRCHSTH Date: Sun, 23 Oct 2022 11:34:06 +0200 Subject: [PATCH 1/3] #247 Element styles are correct combined and dynamic legend is correct calculated --- C4.puml | 44 ++++++++++++++++++++++++++++++++++++++++++- C4_Component.puml | 8 ++++---- C4_Container.puml | 8 ++++---- C4_Context.puml | 21 +++++++++++++-------- C4_Deployment.puml | 4 ++-- percy/TestLegend.puml | 13 +++++++++++-- 6 files changed, 77 insertions(+), 21 deletions(-) diff --git a/C4.puml b/C4.puml index e7cead3..140e4fc 100644 --- a/C4.puml +++ b/C4.puml @@ -3,7 +3,7 @@ 'Version ' ################################## !function C4Version() - !return "2.5.0beta1" + !return "2.5.0beta2" !end function !procedure C4VersionDetails() @@ -262,6 +262,24 @@ skinparam package { !return $arg !endfunction +' if $value is empty try to load it via variable, optional can it store the calculated value +!function $restoreEmpty($elementType, $property, $value, $store) + !$var = "$" + $elementType + "Restore" + $property + !if ($value == "") + !$value = %get_variable_value($var) + !elseif ($store) + %set_variable_value($var, $value) + !endif + !return $value +!endfunction + +' clear the restore property +!function $clearRestore($elementType, $property) + !$var = "$" + $elementType + "Restore" + $property + %set_variable_value($var, $value) + !return "" +!endfunction + !function $elementTagSkinparams($element, $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape) !$elementSkin = "skinparam " + $element + "<<" + $tagStereo + ">> {" + %newline() !if ($fontColor != "") @@ -688,6 +706,20 @@ $defineSkinparams($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $s $addTagToLegend($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $legendText, $legendSprite) !endprocedure +!unquoted procedure $addElementTagInclReuse($elementName, $tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + !$bgColor=$restoreEmpty($elementName, "bgColor", $bgColor, %true()) + !$fontColor=$restoreEmpty($elementName, "fontColor", $fontColor, %true()) + !$borderColor=$restoreEmpty($elementName, "borderColor", $borderColor, %true()) + !$shadowing=$restoreEmpty($elementName, "shadowing", $shadowing, %true()) + !$shape=$restoreEmpty($elementName, "shape", $shape, %true()) + !$sprite=$restoreEmpty($elementName, "sprite", $sprite, %true()) + !$techn=$restoreEmpty($elementName, "techn", $techn, %true()) + !$legendText=$restoreEmpty($elementName, "legendText", $legendText, %true()) + !$legendSprite=$restoreEmpty($elementName, "legendSprite", $legendSprite, %true()) + + AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!endprocedure + ' used by new defined rel tags !unquoted procedure AddRelTag($tagStereo, $textColor="", $lineColor="", $lineStyle = "", $sprite="", $techn="", $legendText="", $legendSprite="") $defineRelSkinparams($tagStereo, $textColor, $lineColor, $lineStyle) @@ -706,6 +738,16 @@ $addRelTagToLegend($tagStereo, $textColor, $lineColor, $lineStyle, $legendText, ' update the style of existing elements like person, ... !unquoted procedure UpdateElementStyle($elementName, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") +!$bgColor=$restoreEmpty($elementName, "bgColor", $bgColor, %true()) +!$fontColor=$restoreEmpty($elementName, "fontColor", $fontColor, %true()) +!$borderColor=$restoreEmpty($elementName, "borderColor", $borderColor, %true()) +!$shadowing=$restoreEmpty($elementName, "shadowing", $shadowing, %true()) +!$shape=$restoreEmpty($elementName, "shape", $shape, %true()) +!$sprite=$restoreEmpty($elementName, "sprite", $sprite, %true()) +!$techn=$restoreEmpty($elementName, "techn", $techn, %true()) +!$legendText=$restoreEmpty($elementName, "legendText", $legendText, %true()) +!$legendSprite=$restoreEmpty($elementName, "legendSprite", $legendSprite, %true()) + $defineSkinparams($elementName, $bgColor, $fontColor, $borderColor, $shadowing, $shape) !if ($sprite != "") %set_variable_value("$" + $elementName + "ElementTagSprite", $sprite) diff --git a/C4_Component.puml b/C4_Component.puml index 88501ca..1390364 100644 --- a/C4_Component.puml +++ b/C4_Component.puml @@ -27,11 +27,11 @@ UpdateElementStyle("component", $COMPONENT_BG_COLOR, $COMPONENT_FONT_COLOR, $COM UpdateElementStyle("external_component", $EXTERNAL_COMPONENT_BG_COLOR, $COMPONENT_FONT_COLOR, $EXTERNAL_COMPONENT_BORDER_COLOR) ' shortcuts with default colors -!unquoted procedure AddComponentTag($tagStereo, $bgColor=$COMPONENT_BG_COLOR, $fontColor=$COMPONENT_FONT_COLOR, $borderColor=$COMPONENT_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!unquoted procedure AddComponentTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + $addElementTagInclReuse("component", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure -!unquoted procedure AddExternalComponentTag($tagStereo, $bgColor=$EXTERNAL_COMPONENT_BG_COLOR, $fontColor=$COMPONENT_FONT_COLOR, $borderColor=$EXTERNAL_COMPONENT_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!unquoted procedure AddExternalComponentTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + $addElementTagInclReuse("external_component", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure ' Layout diff --git a/C4_Container.puml b/C4_Container.puml index d26cc09..42cc37b 100644 --- a/C4_Container.puml +++ b/C4_Container.puml @@ -26,11 +26,11 @@ UpdateElementStyle("external_container", $EXTERNAL_CONTAINER_BG_COLOR, $ELEMENT_ UpdateBoundaryStyle("container", $bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUNDARY_COLOR, $borderColor=$BOUNDARY_COLOR, $type="Container") ' shortcuts with default colors -!unquoted procedure AddContainerTag($tagStereo, $bgColor=$CONTAINER_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$CONTAINER_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!unquoted procedure AddContainerTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + $addElementTagInclReuse("container", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure -!unquoted procedure AddExternalContainerTag($tagStereo, $bgColor=$EXTERNAL_CONTAINER_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$EXTERNAL_CONTAINER_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!unquoted procedure AddExternalContainerTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + $addElementTagInclReuse("external_container", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure !unquoted procedure UpdateContainerBoundaryStyle($bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUNDARY_COLOR, $borderColor=$BOUNDARY_COLOR, $shadowing="", $shape="", $type="Container", $legendText="") diff --git a/C4_Context.puml b/C4_Context.puml index 53474e2..35db659 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -34,17 +34,17 @@ UpdateBoundaryStyle("enterprise", $bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUND UpdateBoundaryStyle("system", $bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUNDARY_COLOR, $borderColor=$BOUNDARY_COLOR, $type="System") ' shortcuts with default colors -!unquoted procedure AddPersonTag($tagStereo, $bgColor=$PERSON_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$PERSON_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) +!unquoted procedure AddPersonTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") + $addElementTagInclReuse("person", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) !endprocedure -!unquoted procedure AddExternalPersonTag($tagStereo, $bgColor=$EXTERNAL_PERSON_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$EXTERNAL_PERSON_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) +!unquoted procedure AddExternalPersonTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") + $addElementTagInclReuse("external_person", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) !endprocedure -!unquoted procedure AddSystemTag($tagStereo, $bgColor=$SYSTEM_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$SYSTEM_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) +!unquoted procedure AddSystemTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") + $addElementTagInclReuse("system", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) !endprocedure -!unquoted procedure AddExternalSystemTag($tagStereo, $bgColor=$EXTERNAL_SYSTEM_BG_COLOR, $fontColor=$ELEMENT_FONT_COLOR, $borderColor=$EXTERNAL_SYSTEM_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) +!unquoted procedure AddExternalSystemTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $legendText="", $legendSprite="") + $addElementTagInclReuse("external_system", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, "", $legendText, $legendSprite) !endprocedure !unquoted procedure UpdateEnterpriseBoundaryStyle($bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUNDARY_COLOR, $borderColor=$BOUNDARY_COLOR, $shadowing="", $shape="", $type="Enterprise", $legendText="") @@ -176,10 +176,12 @@ endlegend !endprocedure !global $defaultPersonSprite = "person" + !$dummy = $restoreEmpty("person", "sprite", $defaultPersonSprite, %true()) !global $portraitPerson = "false" !procedure HIDE_PERSON_SPRITE() !$defaultPersonSprite = "" + !$dummy = $clearRestore("person", "sprite") !$portraitPerson = "false" !endprocedure @@ -189,16 +191,19 @@ endlegend !else !$defaultPersonSprite = $sprite !endif + !$dummy = $restoreEmpty("person", "sprite", $defaultPersonSprite, %true()) !$portraitPerson = "false" !endprocedure !unquoted procedure SHOW_PERSON_PORTRAIT() !$defaultPersonSprite = "" + !$dummy = $clearRestore("person", "sprite") !$portraitPerson = "portrait" !endprocedure !unquoted procedure SHOW_PERSON_OUTLINE() !$defaultPersonSprite = "" + !$dummy = $clearRestore("person", "sprite") !$portraitPerson = "outline" !endprocedure diff --git a/C4_Deployment.puml b/C4_Deployment.puml index 57ba4e0..bb3f3f4 100644 --- a/C4_Deployment.puml +++ b/C4_Deployment.puml @@ -22,8 +22,8 @@ skinparam rectangle<> { ' shortcuts with default colors ' node specific: $type reuses $techn definition of $tags -!unquoted procedure AddNodeTag($tagStereo, $bgColor=$NODE_BG_COLOR, $fontColor=$NODE_FONT_COLOR, $borderColor=$NODE_BORDER_COLOR, $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") - AddElementTag($tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) +!unquoted procedure AddNodeTag($tagStereo, $bgColor="", $fontColor="", $borderColor="", $shadowing="", $shape="", $sprite="", $techn="", $legendText="", $legendSprite="") + $addElementTagInclReuse("node", $tagStereo, $bgColor, $fontColor, $borderColor, $shadowing, $shape, $sprite, $techn, $legendText, $legendSprite) !endprocedure ' Layout diff --git a/percy/TestLegend.puml b/percy/TestLegend.puml index 24e7aa6..1f9ee8f 100644 --- a/percy/TestLegend.puml +++ b/percy/TestLegend.puml @@ -6,9 +6,16 @@ !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml !endif +' person legend displays the correct sprite SHOW_PERSON_SPRITE(person2) +UpdateElementStyle("person", $legendText="Person with correct legend") +' missing definitions are reused from last UpdateElementStyle() in legends too +UpdateElementStyle("person") + +UpdateElementStyle("system", $bgColor="chocolate", $fontColor="orange", $borderColor="orange", $shadowing="true", $shape=RoundedBoxShape(), $sprite="person", $techn="my tech", $legendSprite="person2,scale=0.25") +' missing definitions are reused from last UpdateElementStyle() in legends too +UpdateElementStyle("system") -UpdateElementStyle("system", $bgColor="chocolate", $fontColor="orange", $borderColor="orange") UpdateRelStyle(black, black) AddElementTag("role1", $bgColor="green", $fontColor="white", $borderColor="#d73027", $shadowing="false") @@ -17,7 +24,7 @@ AddElementTag("role3", $bgColor="orange") AddElementTag("role4", $borderColor="blue") AddElementTag("unusedRole") -AddElementTag("micro_service", $shape=EightSidedShape()) +AddSystemTag("micro_service", $shape=EightSidedShape()) AddElementTag("storage", $shadowing="true", $shape=RoundedBoxShape()) AddRelTag("line1", $lineColor="green", $textColor="blue") @@ -28,6 +35,8 @@ AddRelTag("line4", $lineColor="orange") AddRelTag("line3&line4", $lineColor="orange", $textColor="orange") AddRelTag("unusedLine", $lineColor="red", $textColor="red") +System(system, "System") + Person(person, "Person") Person(person1, "Person1", $tags="role1") Person(person2, "Person2", $tags="role2") From a2418074f00413e14054929edd07b7abb307ffac Mon Sep 17 00:00:00 2001 From: KIRCHSTH Date: Sun, 23 Oct 2022 11:50:17 +0200 Subject: [PATCH 2/3] #247 Dynamic legend is correct calculated (fix PERSON related layout calls) --- C4_Context.puml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/C4_Context.puml b/C4_Context.puml index 35db659..aca1034 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -182,6 +182,7 @@ endlegend !procedure HIDE_PERSON_SPRITE() !$defaultPersonSprite = "" !$dummy = $clearRestore("person", "sprite") + UpdateElementStyle("person") !$portraitPerson = "false" !endprocedure @@ -192,18 +193,21 @@ endlegend !$defaultPersonSprite = $sprite !endif !$dummy = $restoreEmpty("person", "sprite", $defaultPersonSprite, %true()) + UpdateElementStyle("person") !$portraitPerson = "false" !endprocedure !unquoted procedure SHOW_PERSON_PORTRAIT() !$defaultPersonSprite = "" !$dummy = $clearRestore("person", "sprite") + UpdateElementStyle("person") !$portraitPerson = "portrait" !endprocedure !unquoted procedure SHOW_PERSON_OUTLINE() !$defaultPersonSprite = "" !$dummy = $clearRestore("person", "sprite") + UpdateElementStyle("person") !$portraitPerson = "outline" !endprocedure From 828c6ec4603e26d6e320e9d54f52bae6c857ed64 Mon Sep 17 00:00:00 2001 From: KIRCHSTH Date: Sun, 23 Oct 2022 15:55:37 +0200 Subject: [PATCH 3/3] #247 Dynamic legend is correct calculated (fix PERSON related layout calls) (2) --- C4.puml | 3 +-- C4_Context.puml | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/C4.puml b/C4.puml index 140e4fc..11b8b23 100644 --- a/C4.puml +++ b/C4.puml @@ -276,7 +276,7 @@ skinparam package { ' clear the restore property !function $clearRestore($elementType, $property) !$var = "$" + $elementType + "Restore" + $property - %set_variable_value($var, $value) + %set_variable_value($var, "") !return "" !endfunction @@ -747,7 +747,6 @@ $addRelTagToLegend($tagStereo, $textColor, $lineColor, $lineStyle, $legendText, !$techn=$restoreEmpty($elementName, "techn", $techn, %true()) !$legendText=$restoreEmpty($elementName, "legendText", $legendText, %true()) !$legendSprite=$restoreEmpty($elementName, "legendSprite", $legendSprite, %true()) - $defineSkinparams($elementName, $bgColor, $fontColor, $borderColor, $shadowing, $shape) !if ($sprite != "") %set_variable_value("$" + $elementName + "ElementTagSprite", $sprite) diff --git a/C4_Context.puml b/C4_Context.puml index aca1034..144b56b 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -176,14 +176,21 @@ endlegend !endprocedure !global $defaultPersonSprite = "person" - !$dummy = $restoreEmpty("person", "sprite", $defaultPersonSprite, %true()) +!$dummy = $restoreEmpty("person", "sprite", $defaultPersonSprite, %true()) +UpdateElementStyle("person") !global $portraitPerson = "false" -!procedure HIDE_PERSON_SPRITE() - !$defaultPersonSprite = "" +!procedure $clearPersonRestore() !$dummy = $clearRestore("person", "sprite") + !$dummy = $clearRestore("person", "legendSprite") + %set_variable_value("$" + "person" + "ElementTagSprite", "") UpdateElementStyle("person") +!endprocedure + +!procedure HIDE_PERSON_SPRITE() + !$defaultPersonSprite = "" !$portraitPerson = "false" + $clearPersonRestore() !endprocedure !unquoted procedure SHOW_PERSON_SPRITE($sprite="") @@ -199,16 +206,14 @@ endlegend !unquoted procedure SHOW_PERSON_PORTRAIT() !$defaultPersonSprite = "" - !$dummy = $clearRestore("person", "sprite") - UpdateElementStyle("person") !$portraitPerson = "portrait" + $clearPersonRestore() !endprocedure !unquoted procedure SHOW_PERSON_OUTLINE() !$defaultPersonSprite = "" - !$dummy = $clearRestore("person", "sprite") - UpdateElementStyle("person") !$portraitPerson = "outline" + $clearPersonRestore() !endprocedure ' Elements