' Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. ' SPDX-License-Identifier: MIT (For details, see https://github.com/awslabs/aws-icons-for-plantuml/blob/master/LICENSE) ' Dark Mode support ' ################################## ' if $AWS_DARK is not defined, check $PUML_MODE !if (%not(%variable_exists("$AWS_DARK")) && (%variable_exists("$PUML_MODE") && $PUML_MODE == "dark")) !$AWS_DARK = true !endif ' ensure $AWS_DARK is either true or false !if %not(%variable_exists("$AWS_DARK") && ($AWS_DARK == true)) !$AWS_DARK = false !endif ' Colors ' prefer $AWS_ versions, treat AWS_ as deprecated ' ################################## !define AWS_COLOR #232F3E !$AWS_COLOR_SQUID = "#232F3E" !if $AWS_DARK == true !define AWS_BG_COLOR #000000 !$AWS_BG_COLOR = "#000000" !$AWS_FG_COLOR = "#FFFFFF" !$AWS_ARROW_COLOR = "#9BA7B6" !else !define AWS_BG_COLOR #FFFFFF !$AWS_BG_COLOR = "#FFFFFF" !$AWS_FG_COLOR = "#000000" !$AWS_ARROW_COLOR = "#000000" !endif !define AWS_BORDER_COLOR #FF9900 !$AWS_BORDER_COLOR = "#FF9900" !define AWS_SYMBOL_COLOR AWS_COLOR !$AWS_COLOR_GRAY = "#7D8998" ' Customer Enablement; Database; Developer Tools; Satellite !define AWS_COLOR_BLUE #C925D1 !$AWS_COLOR_NEBULA = "#C925D1" ' Cloud Financial Management; Internet of Things; Storage !define AWS_COLOR_GREEN #7AA116 !$AWS_COLOR_ENDOR = "#7AA116" ' Blockchain; Compute; Containers; Media Services; Quantum Technologies !define AWS_COLOR_ORANGE #ED7100 !$AWS_COLOR_SMILE = "#ED7100" ' Application Integration; Management & Governance; VR & AR !define AWS_COLOR_PINK #E7157B !$AWS_COLOR_COSMOS = "#E7157B" ' Analytics; Games; Networking & Content Delivery; Serverless !define AWS_COLOR_PURPLE #8C4FFF !$AWS_COLOR_GALAXY = "#8C4FFF" ' Business Applications; Contact Center; Front-End Web & Mobile; Robotics; Security, Identity & Compliance !define AWS_COLOR_RED #DD344C !$AWS_COLOR_MARS = "#DD344C" ' End User Computing; Machine Learning; Migration & Transfer !define AWS_COLOR_TURQUOISE #01A88D !$AWS_COLOR_ORBIT = "#01A88D" !$AWS_CATEGORY_COLORS = { "analytics": "#8C4FFF", "applicationintegration": "#E7157B", "blockchain": "#ED7100", "businessapplications": "#DD344C", "cloudfinancialmanagement": "#7AA116", "compute": "#ED7100", "contactcenter": "#DD344C", "containers": "#ED7100", "customerenablement": "#C925D1", "database": "#C925D1", "developertools": "#C925D1", "endusercomputing": "#01A88D", "frontendwebmobile": "#DD344C", "games": "#8C4FFF", "general": "#232F3E", "internetofthings": "#7AA116", "machinelearning": "#01A88D", "managementgovernance": "#E7157B", "mediaservices": "#ED7100", "migrationtransfer": "#01A88D", "networkingcontentdelivery": "#8C4FFF", "quantumtechnologies": "#ED7100", "robotics": "#DD344C", "satellite": "#C925D1", "securityidentitycompliance": "#DD344C", "serverless": "#8C4FFF", "storage": "#7AA116" } ' returns color based on AWS icon category name !function $AWSColor($category) !$category = %lower($category) !if %json_key_exists($AWS_CATEGORY_COLORS, $category) !return $AWS_CATEGORY_COLORS[$category] !else !return $AWS_BG_COLOR !endif !endfunction ' Styling / Theme ' ################################## !$THEME = "aws-icons" <style> root { BackgroundColor $AWS_BG_COLOR FontColor $AWS_FG_COLOR LineColor $AWS_FG_COLOR } caption { LineThickness 0 } footer { LineThickness 0 } header { LineThickness 0 } </style> !define TECHN_FONT_SIZE 12 skinparam defaultTextAlignment Center skinparam PackageTitleAlignment Left skinparam wrapWidth 200 skinparam maxMessageSize 150 skinparam Shadowing false skinparam RoundCorner 0 skinparam BackgroundColor $AWS_BG_COLOR !procedure $AWS_common_skinparam() FontColor $AWS_FG_COLOR BackgroundColor $AWS_BG_COLOR BorderColor $AWS_COLOR_GRAY !endprocedure !procedure $AWS_deployment_skinparam() FontColor $AWS_FG_COLOR BackgroundColor $AWS_BG_COLOR BorderColor $AWS_COLOR_GRAY BorderThickness 1.25 !endprocedure skinparam arrow { Color $AWS_ARROW_COLOR FontColor $AWS_FG_COLOR FontSize 12 } skinparam TitleFontColor $AWS_FG_COLOR skinparam TitleBorderColor transparent skinparam BackgroundColor $AWS_BG_COLOR ' Sequence Diagram skinparam participant { $AWS_common_skinparam() BorderThickness 1.25 Padding 2 } skinparam sequence { ArrowThickness 2 LifeLineBorderColor $AWS_FG_COLOR LifeLineBackgroundColor $AWS_BG_COLOR BoxFontColor $AWS_FG_COLOR BoxBorderColor $AWS_COLOR_GRAY BoxBorderThickness 1.25 BoxBackgroundColor $AWS_BG_COLOR GroupBorderColor $AWS_FG_COLOR GroupFontColor $AWS_FG_COLOR GroupBodyBackgroundColor transparent } skinparam BoxPadding 2 skinparam note { BorderColor $AWS_COLOR_GRAY BorderThickness 1.25 } ' Activity Diagram ' StartColor not working, uses <style> LineColor skinparam activity { $AWS_common_skinparam() BorderThickness 2 StartColor $AWS_BG_COLOR EndColor $AWS_FG_COLOR BarColor $AWS_FG_COLOR } skinparam swimlane { $AWS_common_skinparam() TitleFontColor $AWS_FG_COLOR } ' Deployment Diagram skinparam actor { $AWS_deployment_skinparam() 'StereotypeFontColor $AWS_FG_COLOR } skinparam agent { $AWS_deployment_skinparam() Padding 2 } skinparam artifact { $AWS_deployment_skinparam() } skinparam boundary { $AWS_deployment_skinparam() } skinparam card { $AWS_deployment_skinparam() } skinparam circle { $AWS_deployment_skinparam() } skinparam cloud { $AWS_deployment_skinparam() } skinparam collections { $AWS_deployment_skinparam() } skinparam component { $AWS_deployment_skinparam() } skinparam control { $AWS_deployment_skinparam() } skinparam database { $AWS_deployment_skinparam() } skinparam entity { $AWS_deployment_skinparam() } skinparam file { $AWS_deployment_skinparam() } skinparam folder { $AWS_deployment_skinparam() } skinparam frame { $AWS_deployment_skinparam() } skinparam hexagon { $AWS_deployment_skinparam() } skinparam interface { $AWS_deployment_skinparam() } skinparam label { $AWS_deployment_skinparam() } skinparam node { $AWS_deployment_skinparam() } skinparam package { $AWS_deployment_skinparam() } skinparam person { $AWS_deployment_skinparam() } skinparam queue { $AWS_deployment_skinparam() } skinparam rectangle { StereotypeFontSize 12 $AWS_common_skinparam() BorderThickness 2 } skinparam stack { $AWS_deployment_skinparam() } skinparam storage { $AWS_deployment_skinparam() } skinparam usecase { $AWS_deployment_skinparam() } ' other skinparam legend { $AWS_common_skinparam() } skinparam object { $AWS_common_skinparam() } skinparam class { $AWS_common_skinparam() } skinparam partition { $AWS_common_skinparam() } !definelong AWSEntityColoring(stereo) skinparam rectangle<<stereo>> { $AWS_common_skinparam() BorderThickness 2 } ' https://github.com/plantuml/plantuml/issues/1023 'skinparam participant<<stereo>> { ' BackgroundColor AWS_BG_COLOR ' BorderColor AWS_BORDER_COLOR '} !enddefinelong ' Layout ' ################################## !definelong LAYOUT_AS_SKETCH skinparam backgroundColor #EEEBDC skinparam handwritten true skinparam defaultFontName "Comic Sans MS" center footer <font color=red>Warning:</font> Created for discussion, needs to be validated !enddefinelong !define LAYOUT_TOP_DOWN top to bottom direction !define LAYOUT_LEFT_RIGHT left to right direction ' Elements ' ################################## !function $AWSImg($service) !return %call_user_func("$" + $service + "IMG") !endfunction !function $AWSGroupImg($service) !return %call_user_func("$" + $service + "IMG", "0.5") !endfunction !definelong AWSEntity(e_alias, e_label, e_techn, e_color, e_sprite, e_stereo) rectangle "==e_label\n$AWSImg(e_sprite)\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//" <<e_stereo>> as e_alias !enddefinelong !definelong AWSEntity(e_alias, e_label, e_techn, e_descr, e_color, e_sprite, e_stereo) rectangle "==e_label\n$AWSImg(e_sprite)\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<e_stereo>> as e_alias !enddefinelong !definelong AWSParticipant(p_alias, p_label, p_techn, p_color, p_sprite, p_stereo) participant "p_label\n$AWSImg(p_sprite)\n<size:TECHN_FONT_SIZE>[p_techn]</size>" as p_alias <<p_stereo>> !enddefinelong !definelong AWSParticipant(p_alias, p_label, p_techn, p_descr, p_color, p_sprite, p_stereo) participant "p_label\n$AWSImg(p_sprite)\n<size:TECHN_FONT_SIZE>[p_techn]</size>\n\n p_descr" as p_alias <<p_stereo>> !enddefinelong ' Group support ' ################################## !function $AWSColorDetectDark($color) !if $AWS_DARK == true && ($color == "black" || $color == "#000000") !return white !log after $color !endif !if $AWS_DARK == true && ($color == "white" || $color == "#FFFFFF") !return black !endif !return $color !endfunction ' "StereotypeFontSize 0" below will hide text ' still need "hide stereotype" in diagrams to hide whitespace !procedure $AWSGroupColoring($stereo, $border_color=$AWS_FG_COLOR, $border_style="plain") skinparam rectangle<<$stereo>> { StereotypeFontSize 0 FontColor $AWS_FG_COLOR BackgroundColor $AWS_BG_COLOR BorderColor $border_color BorderStyle $border_style Shadowing false BorderThickness 2 } !endprocedure ' AWSGroupColoring deprecated, left for backwards compatibility !definelong AWSGroupColoring(g_stereo, g_background_color, g_border_color, g_border_style) skinparam rectangle<<g_stereo>> { StereotypeFontSize 0 BackgroundColor $AWSColorDetectDark(g_background_color) BorderColor $AWSColorDetectDark(g_border_color) BorderStyle g_border_style Shadowing false BorderThickness 2 } !enddefinelong !function $AWSDefineGroup($alias, $label, $stereo) !$ret = 'rectangle "' + $label + '" as ' + $alias + ' <<' + $stereo + '>>' !return $ret !endfunction !function $AWSDefineGroup($alias, $label, $sprite, $stereo) !$ret = 'rectangle "' + $AWSGroupImg($sprite) + ' ' + $label + '" as ' + $alias + ' <<' + $stereo + '>>' !return $ret !endfunction ' wraps each line (seperated by \n) of a multi-line label with color !function $colorlabel($label, $color="black") !$buffer = "" !$tmp = $label !$i = %strpos($tmp, "\n") !while $i >= 0 !$buffer = $buffer + %substr($tmp, 0, $i) + "</color>\n<color:" + $color + ">" !$tmp = %substr($tmp, $i + 2) !$i = %strpos($tmp, "\n") !endwhile !return "<color:" + $color + ">" + $buffer + $tmp + "</color>" !endfunction ' AWSGroupEntity deprecated, left for backwards compatibility !definelong AWSGroupEntity(g_alias, g_label, g_color, g_stereo) rectangle "$colorlabel(g_label, g_color)" as g_alias <<g_stereo>> !enddefinelong !definelong AWSGroupEntity(g_alias, g_label, g_color, g_sprite, g_stereo) rectangle "$AWSGroupImg(g_sprite) $colorlabel(g_label, g_color)" as g_alias <<g_stereo>> !enddefinelong