' convert it with additional command line argument -DRELATIVE_INCLUDE="." to use locally !include ./C4_Container.puml ' Colors ' ################################## !global $NODE_FONT_COLOR = "#000000" !global $NODE_BG_COLOR = "#FFFFFF" !global $NODE_BORDER_COLOR = "#A2A2A2" ' Styling ' ################################## ' orig was without background 'UpdateElementStyle("node", $fontColor=$NODE_FONT_COLOR, $borderColor=$NODE_BORDER_COLOR) UpdateElementStyle("node", $bgColor=$NODE_BG_COLOR, $fontColor=$NODE_FONT_COLOR, $borderColor=$NODE_BORDER_COLOR) skinparam rectangle<> { FontStyle normal } ' Layout ' ################################## ' comment if node should not be added to legend. No calculated legend extension required SetDefaultLegendEntries("person\nsystem\ncontainer\nexternal_person\nexternal_system\nexternal_container\nnode") ' Line breaks ' ################################## ' PlantUML supports no automatic line breaks of "PlantUML containers" (C4 Deployment_Node is a "PlantUML container") ' therefore (Deployment_)Node() implements an automatic line break based on spaces (like in all other objects). ' If a $type contains \n then these are used (and no automatic space based line breaks are done) ' $NODE_TYPE_MAX_CHAR_WIDTH defines the automatic line break position !global $NODE_TYPE_MAX_CHAR_WIDTH = 35 !global $NODE_DESCR_MAX_CHAR_WIDTH=32 !unquoted function $breakNode($type, $widthStr) !$width = %intval($widthStr) !$multiLine = "" !if (%strpos($type, "\n") >= 0) !while (%strpos($type, "\n") >= 0) !$brPos = %strpos($type, "\n") !$multiLine = $multiLine + %substr($type, 0, $brPos) + '\n' !$type = %substr($type, $brPos+2) !endwhile !else !while (%strlen($type)>$width) !$brPos = $width !while ($brPos>0 && %substr($type, $brPos, 1)!= ' ') !$brPos = $brPos - 1 !endwhile !if ($brPos < 1) !$brPos = %strpos($type, " ") !else !endif !if ($brPos > 0) !$multiLine = $multiLine + %substr($type, 0, $brPos) + '\n' !$type = %substr($type, $brPos + 1) !else !$multiLine = $multiLine+ $type !$type = "" !endif !endwhile !endif !if (%strlen($type)>0) !$multiLine = $multiLine + $type !endif !return $multiLine !endfunction ' Elements ' ################################## !function $getNode($label, $type, $descr, $sprite) !$nodeText = "" !if ($sprite != "") !$nodeText = $nodeText + '<$'+$sprite+'>\n' !endif !$nodeText = $nodeText + '==' + $label !if ($type != "") !$nodeText = $nodeText + '\n[' + $breakNode($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']' !endif !if ($descr != "") !$nodeText = $nodeText + '\n\n' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH) !endif !return $nodeText !endfunction !function $getNode_L($label, $type, $descr, $sprite) !$nodeText = "" !if ($sprite != "") !$nodeText = $nodeText + '<$'+$sprite+'>\l' !endif !$nodeText = $nodeText + '==' + $label !if ($type != "") !$nodeText = $nodeText + '\l[' + $breakNode($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']' !endif !if ($descr != "") !$nodeText = $nodeText + '\l\l' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH) !endif !return $nodeText !endfunction !function $getNode_R($label, $type, $descr, $sprite) !$nodeText = "" !if ($sprite != "") !$nodeText = $nodeText + '<$'+$sprite+'>\r' !endif !$nodeText = $nodeText + '==' + $label !if ($type != "") !$nodeText = $nodeText + '\r[' + $breakNode($type, $NODE_TYPE_MAX_CHAR_WIDTH) + ']' !endif !if ($descr != "") !$nodeText = $nodeText + '\r\r' + $breakDescr($descr, $NODE_DESCR_MAX_CHAR_WIDTH) !endif !return $nodeText !endfunction !unquoted procedure Deployment_Node($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode($label, $type, $descr, $sprite)$getProps()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure !unquoted procedure Deployment_Node_L($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode_L($label, $type, $descr, $sprite)$getProps_L()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure !unquoted procedure Deployment_Node_R($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode_R($label, $type, $descr, $sprite)$getProps_R()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure !unquoted procedure Node($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode($label, $type, $descr, $sprite)$getProps()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure !unquoted procedure Node_L($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode_L($label, $type, $descr, $sprite)$getProps_L()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure !unquoted procedure Node_R($alias, $label, $type="", $descr="", $sprite="", $tags="", $link="") rectangle "$getNode_R($label, $type, $descr, $sprite)$getProps_R()" $toStereos("node",$tags) as $alias $getLink($link) !endprocedure