name: MermaidDumper
class_comment: null
dependencies:
- name: Definition
  type: class
  source: Symfony\Component\Workflow\Definition
- name: InvalidArgumentException
  type: class
  source: Symfony\Component\Workflow\Exception\InvalidArgumentException
- name: Marking
  type: class
  source: Symfony\Component\Workflow\Marking
properties: []
methods:
- name: escape
  visibility: private
  parameters:
  - name: label
  comment: "# * Just tracking the transition id is in some cases inaccurate to\n#\
    \ * get the link's number for styling purposes.\n# */\n# private int $linkCount\
    \ = 0;\n# \n# public function __construct(\n# private string $transitionType,\n\
    # private string $direction = self::DIRECTION_LEFT_TO_RIGHT,\n# ) {\n# $this->validateDirection($direction);\n\
    # $this->validateTransitionType($transitionType);\n# }\n# \n# public function\
    \ dump(Definition $definition, ?Marking $marking = null, array $options = []):\
    \ string\n# {\n# $this->linkCount = 0;\n# $placeNameMap = [];\n# $placeId = 0;\n\
    # \n# $output = ['graph '.$this->direction];\n# \n# $meta = $definition->getMetadataStore();\n\
    # \n# foreach ($definition->getPlaces() as $place) {\n# [$placeNodeName, $placeNode,\
    \ $placeStyle] = $this->preparePlace(\n# $placeId,\n# $place,\n# $meta->getPlaceMetadata($place),\n\
    # \\in_array($place, $definition->getInitialPlaces(), true),\n# $marking?->has($place)\
    \ ?? false\n# );\n# \n# $output[] = $placeNode;\n# \n# if ('' !== $placeStyle)\
    \ {\n# $output[] = $placeStyle;\n# }\n# \n# $placeNameMap[$place] = $placeNodeName;\n\
    # \n# ++$placeId;\n# }\n# \n# foreach ($definition->getTransitions() as $transitionId\
    \ => $transition) {\n# $transitionMeta = $meta->getTransitionMetadata($transition);\n\
    # \n# $transitionLabel = $transition->getName();\n# if (\\array_key_exists('label',\
    \ $transitionMeta)) {\n# $transitionLabel = $transitionMeta['label'];\n# }\n#\
    \ \n# foreach ($transition->getFroms() as $from) {\n# $from = $placeNameMap[$from];\n\
    # \n# foreach ($transition->getTos() as $to) {\n# $to = $placeNameMap[$to];\n\
    # \n# if (self::TRANSITION_TYPE_STATEMACHINE === $this->transitionType) {\n# $transitionOutput\
    \ = $this->styleStateMachineTransition($from, $to, $transitionLabel, $transitionMeta);\n\
    # } else {\n# $transitionOutput = $this->styleWorkflowTransition($from, $to, $transitionId,\
    \ $transitionLabel, $transitionMeta);\n# }\n# \n# foreach ($transitionOutput as\
    \ $line) {\n# if (\\in_array($line, $output)) {\n# // additional links must be\
    \ decremented again to align the styling\n# if (0 < strpos($line, '-->')) {\n\
    # --$this->linkCount;\n# }\n# \n# continue;\n# }\n# \n# $output[] = $line;\n#\
    \ }\n# }\n# }\n# }\n# \n# return implode(\"\\n\", $output);\n# }\n# \n# private\
    \ function preparePlace(int $placeId, string $placeName, array $meta, bool $isInitial,\
    \ bool $hasMarking): array\n# {\n# $placeLabel = $placeName;\n# if (\\array_key_exists('label',\
    \ $meta)) {\n# $placeLabel = $meta['label'];\n# }\n# \n# $placeLabel = $this->escape($placeLabel);\n\
    # \n# $labelShape = '((%s))';\n# if ($isInitial) {\n# $labelShape = '([%s])';\n\
    # }\n# \n# $placeNodeName = 'place'.$placeId;\n# $placeNodeFormat = '%s'.$labelShape;\n\
    # $placeNode = \\sprintf($placeNodeFormat, $placeNodeName, $placeLabel);\n# \n\
    # $placeStyle = $this->styleNode($meta, $placeNodeName, $hasMarking);\n# \n# return\
    \ [$placeNodeName, $placeNode, $placeStyle];\n# }\n# \n# private function styleNode(array\
    \ $meta, string $nodeName, bool $hasMarking = false): string\n# {\n# $nodeStyles\
    \ = [];\n# \n# if (\\array_key_exists('bg_color', $meta)) {\n# $nodeStyles[] =\
    \ \\sprintf(\n# 'fill:%s',\n# $meta['bg_color']\n# );\n# }\n# \n# if ($hasMarking)\
    \ {\n# $nodeStyles[] = 'stroke-width:4px';\n# }\n# \n# if (0 === \\count($nodeStyles))\
    \ {\n# return '';\n# }\n# \n# return \\sprintf('style %s %s', $nodeName, implode(',',\
    \ $nodeStyles));\n# }\n# \n# /**\n# * Replace double quotes with the mermaid escape\
    \ syntax and\n# * ensure all other characters are properly escaped."
- name: validateDirection
  visibility: public
  parameters:
  - name: direction
  comment: null
- name: validateTransitionType
  visibility: private
  parameters:
  - name: transitionType
  comment: null
- name: styleStateMachineTransition
  visibility: private
  parameters:
  - name: from
  - name: to
  - name: transitionLabel
  - name: transitionMeta
  comment: null
- name: styleWorkflowTransition
  visibility: private
  parameters:
  - name: from
  - name: to
  - name: transitionId
  - name: transitionLabel
  - name: transitionMeta
  comment: null
- name: styleLink
  visibility: private
  parameters:
  - name: transitionMeta
  comment: null
traits:
- Symfony\Component\Workflow\Definition
- Symfony\Component\Workflow\Exception\InvalidArgumentException
- Symfony\Component\Workflow\Marking
interfaces:
- DumperInterface