
        action_lines = "<br/>".join(
            f'<font point-size="{action_font_size}">{_escape_html(self._format_action(a))}</font>'
            for a in actions
        )

        return (
            f'<table border="0" cellborder="0" cellspacing="0" cellpadding="0">'
            f'<tr><td cellpadding="4">'
            f'<font point-size="{font_size}">{name}</font>'
            f"</td></tr>"
            f"<hr/>"
            f'<tr><td align="left" cellpadding="6">'
            f"{action_lines}"
            f"</td></tr>"
            f"</table>"
        )

    @staticmethod
    def _format_action(action: DiagramAction) -> str:
        if action.type == ActionType.INTERNAL:
            return action.body
        return f"{action.type.value} / {action.body}"

    def _create_history_node(self, state: DiagramState) -> pydot.Node:
        label = "H*" if state.type == StateType.HISTORY_DEEP else "H"
=====
        else:
            lines.append(f"{pad}{source} --> {target}")

    @staticmethod
    def _format_action(action: DiagramAction) -> str:
        if action.type == ActionType.INTERNAL:
            return action.body
        return f"{action.type.value} / {action.body}"

    def _render_initial_and_final(
        self,
        states: List[DiagramState],
        lines: List[str],
        indent: int,
    ) -> None:
        """Render top-level [*] --> initial and final --> [*] arrows."""
=====
