diff --git a/C4.puml b/C4.puml index d6f1b28..b98735b 100644 --- a/C4.puml +++ b/C4.puml @@ -929,6 +929,28 @@ $elementSkin !return $breakText($text, $usedNewLine, $widthStr) !endfunction +' Element base layout +' ################################## + +!function $getElementBase($label, $techn, $descr, $sprite) + !$element = "" + !if ($sprite != "") + !$element = $element + $getSprite($sprite) + '\n' + !endif + !if ($label != "") + !$element = $element + '== ' + $breakLabel($label) + !else + !$element = $element + '.' + !endif + !if ($techn != "") + !$element = $element + '\n//[' + $breakTechn($techn, '-1') + ']//' + !endif + !if ($descr != "") + !$element = $element + '\n\n' + $descr + !endif + !return $element +!endfunction + ' Element properties ' ################################## @@ -1241,15 +1263,26 @@ UpdateBoundaryStyle("", $bgColor=$BOUNDARY_BG_COLOR, $fontColor=$BOUNDARY_COLOR, !$rel = $rel + ' ' + $toStereos($tags) !endif !$rel = $rel + ' : ' + !if ($link != "") + !$rel = $rel + '**[[' + $link + ' ' + !endif !if ($sprite != "") - !$rel = $rel + $getSprite($sprite) + ' ' + !$rel = $rel + $getSprite($sprite) + !if ($label != "") + !$rel = $rel + ' ' + !endif !endif !if ($link != "") !$usedNewLine = ']]**\n**[[' + $link + ' ' - !$rel = $rel + '**[[' + $link + ' ' + $breakText($label, $usedNewLine) + ']]**' + ' if sprite and label is empty than the link url is shown (otherwise link cannot be activated at all) + !$rel = $rel + $breakText($label, $usedNewLine) + ']]**' !else - !$usedNewLine = '**\n**' - !$rel = $rel + '**' + $breakText($label, $usedNewLine) + '**' + !if ($label != "") + !$usedNewLine = '**\n**' + !$rel = $rel + '**' + $breakText($label, $usedNewLine) + '**' + !else + !$rel = $rel + '.' + !endif !endif !if ($techn != "") ' line break is not deterministic, calculate it diff --git a/C4_Component.puml b/C4_Component.puml index 4d09e94..ace0e0b 100644 --- a/C4_Component.puml +++ b/C4_Component.puml @@ -58,18 +58,7 @@ endlegend ' ################################## !function $getComponent($label, $techn, $descr, $sprite) - !$component = "" - !if ($sprite != "") - !$component = $component + $getSprite($sprite) + '\n' - !endif - !$component = $component + '== ' + $breakLabel($label) - !if ($techn != "") - !$component = $component + '\n//[' + $breakTechn($techn, '-1') + ']//' - !endif - !if ($descr != "") - !$component = $component + '\n\n' + $descr - !endif - !return $component + !return $getElementBase($label, $techn, $descr, $sprite) !endfunction !unquoted procedure Component($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") diff --git a/C4_Container.puml b/C4_Container.puml index a6639fa..2166467 100644 --- a/C4_Container.puml +++ b/C4_Container.puml @@ -59,18 +59,7 @@ endlegend ' ################################## !function $getContainer($label, $techn, $descr, $sprite) - !$container = "" - !if ($sprite != "") - !$container = $container + $getSprite($sprite) + '\n' - !endif - !$container = $container + '== ' + $breakLabel($label) - !if ($techn != "") - !$container = $container + '\n//[' + $breakTechn($techn, '-1') + ']//' - !endif - !if ($descr != "") - !$container = $container + '\n\n' + $descr - !endif - !return $container + !return $getElementBase($label, $techn, $descr, $sprite) !endfunction !unquoted procedure Container($alias, $label, $techn="", $descr="", $sprite="", $tags="", $link="") diff --git a/C4_Context.puml b/C4_Context.puml index af97318..6fdce59 100644 --- a/C4_Context.puml +++ b/C4_Context.puml @@ -333,36 +333,14 @@ UpdateElementStyle("external_person") ' ################################## !function $getPerson($label, $descr, $sprite) -!if ($sprite == "") && ($defaultPersonSprite != "") - !$sprite = $defaultPersonSprite -!endif -!if ($descr == "") && ($sprite == "") - !return '== '+$breakLabel($label) -!endif -!if ($descr == "") && ($sprite != "") - !return $getSprite($sprite)+'\n== '+$breakLabel($label) -!endif -!if ($descr != "") && ($sprite == "") - !return '== '+$breakLabel($label)+'\n\n '+$descr -!endif -!if ($descr != "") && ($sprite != "") - !return $getSprite($sprite)+'\n== '+$breakLabel($label)+'\n\n '+$descr -!endif + !if ($sprite == "") && ($defaultPersonSprite != "") + !$sprite = $defaultPersonSprite + !endif + !return $getElementBase($label, "", $descr, $sprite) !endfunction !function $getSystem($label, $descr, $sprite) -!if ($descr == "") && ($sprite == "") -!return '== '+$breakLabel($label) -!endif -!if ($descr == "") && ($sprite != "") -!return $getSprite($sprite)+'\n== '+$breakLabel($label) -!endif -!if ($descr != "") && ($sprite == "") -!return '== '+$breakLabel($label)+'\n\n '+$descr -!endif -!if ($descr != "") && ($sprite != "") -!return $getSprite($sprite)+'\n== '+$breakLabel($label)+'\n\n '+$descr -!endif + !return $getElementBase($label, "", $descr, $sprite) !endfunction !unquoted procedure Person($alias, $label, $descr="", $sprite="", $tags="", $link="") diff --git a/percy/TestEmptyLabel.puml b/percy/TestEmptyLabel.puml new file mode 100644 index 0000000..578e99e --- /dev/null +++ b/percy/TestEmptyLabel.puml @@ -0,0 +1,105 @@ +@startuml +' convert it with additional command line argument -DRELATIVE_INCLUDE="./.." to use locally +!if %variable_exists("RELATIVE_INCLUDE") + !include %get_variable_value("RELATIVE_INCLUDE")/C4_Component.puml +!else + !include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml +!endif + +LAYOUT_TOP_DOWN() + +!$img="img:https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Test-Logo.svg/80px-Test-Logo.svg.png" +!$imgSmall="img:https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Test-Logo.svg/20px-Test-Logo.svg.png" + +' SHOW_PERSON_OUTLINE() +SHOW_PERSON_PORTRAIT() + +Boundary(b, "Persons") { + Person(p, "Label", "Optional Description", $sprite=$img) + Person(p1, "", "Optional Description", $sprite=$img) + Person(p2, "", $sprite=$img) + Person(p3, " ", $sprite=$img) + ' should not be used (alias is not automatically reused, only empty block is displayed) + Person(p4, "") + + Lay_R(p,p1) + Lay_R(p1,p2) + Lay_R(p2,p3) + Lay_R(p3,p4) +} + +Boundary(b1, "Systems") { + System(s, "Label", "Optional Description", $sprite=$img) + System(s1, "", "Optional Description", $sprite=$img) + System(s2, "", $sprite=$img) + System(s3, " ", $sprite=$img) + ' should not be used (alias is not automatically reused, only empty block is displayed) + System(s4, "") + + Lay_R(s,s1) + Lay_R(s1,s2) + Lay_R(s2,s3) + Lay_R(s3,s4) +} + +Boundary(b2, "Components") { + Component(comp, "Label", "Techn", "Optional Description", $sprite=$img) + Component(comp1, "", "Techn", "Optional Description", $sprite=$img) + Component(comp2, "", $sprite=$img) + Component(comp3, " ", $sprite=$img) + ' should not be used (alias is not automatically reused, only empty block is displayed) + Component(comp4, "") + + Lay_R(comp,comp1) + Lay_R(comp1,comp2) + Lay_R(comp2,comp3) + Lay_R(comp3,comp4) +} + +Boundary(b3, "Containers") { + Container(con, "Label", "Techn", "Optional Description", $sprite=$img) + Container(con1, "", "Techn", "Optional Description", $sprite=$img) + Container(con2, "", $sprite=$img) + Container(con3, " ", $sprite=$img) + ' should not be used (alias is not automatically reused, only empty block is displayed) + Container(con4, "") + + Lay_R(con,con1) + Lay_R(con1,con2) + Lay_R(con2,con3) + Lay_R(con3,con4) +} + +Boundary(b4, "Relationships") { + System(A1,"A1") + System(B1,"B1") + System(C1,"C1") + System(D1,"D1") + System(E1,"E1") + + System(A2,"A2") + System(B2,"B2") + System(C2,"C2") + System(D2,"D2") + System(E2,"E2") + + Lay_D(A1,A2) + + Rel_R(E1, A1, "label", $sprite=$imgSmall, $link="https://github.com/plantuml-stdlib/C4-PlantUML") + Rel_R(A1, B1, "", $sprite=$imgSmall, $link="https://github.com/plantuml-stdlib/C4-PlantUML") + Rel_R(B1, C1, " ", $sprite=$imgSmall, $link="https://github.com/plantuml-stdlib/C4-PlantUML") + Rel_R(C1, D1, "", $link="https://github.com/plantuml-stdlib/C4-PlantUML") + + Rel_R(E2, A2, "label", $sprite=$imgSmall) + Rel_R(A2, B2, "", $sprite=$imgSmall) + Rel_R(B2, C2, " ", $sprite=$imgSmall) + Rel_R(C2, D2, "") +} + +Lay_D(b,b1) +Lay_D(b1,b2) +Lay_D(b2,b3) +Lay_D(b3,b4) + +SHOW_LEGEND() +@enduml \ No newline at end of file