
    c;                    Z    d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
  G d de          ZdS )zNClass to generate files in dot format and image formats supported by Graphviz.    )annotations)EdgeTypeLayoutNodePropertiesNodeTypePrinter)get_annotation_labelc            
          e Zd ZU dZdZej        dej        dej        diZ	de
d<   ej        dej        dej        d	ej        d
ej        diZde
d<   d dZ	 d!d"dZ	 d!d#dZd dZdS )$PlantUmlPrinterzPrinter for PlantUML diagrams.blackclasspackagezdict[NodeType, str]NODESz--|>z..|>z--*z--oz-->zdict[EdgeType, str]ARROWSreturnNonec                ^   |                      d| j        z              | j        s|                      d           | j        rl| j        t          j        u r|                      d           dS | j        t          j        u r|                      d           dS t          d| j         d          dS )zEmit the header lines.z
@startuml zset namespaceSeparator nonezleft to right directionztop to bottom directionzUnsupported layout zG. PlantUmlPrinter only supports left to right and top to bottom layout.N)emittitleuse_automatic_namespacelayoutr   LEFT_TO_RIGHTTOP_TO_BOTTOM
ValueErrorselfs    Alib/python3.11/site-packages/pylint/pyreverse/plantuml_printer.py_open_graphzPlantUmlPrinter._open_graph   s    		,+,,,+ 	5II3444; 		{f22 		344444 44 		344444 G$+ G G G  		 		    Nnamestrtype_r   
propertiesNodeProperties | Nonec           
        |t          |          }|t          j        u rdnd}| j        |         }|j        r|j        | j        k    rd|j         }nd}g }|j        r|                    |j                   |j        r|j        D ]}| 	                    |          }	|
                                rdnd}
|
|j         dd                    |	           d	z  }
|j        r|
d
t          |j                  z   z  }
|                    |
           |j        |j        n|}|j        r|j        | j        k    rd|j         d| d}|                     | d| d| | | d           |                                  |D ]}
|                     |
           |                                  |                     d           dS )zVCreate a new node.

        Nodes can be classes, packages, participants etc.
        N)labelz << interface >> z #z
{abstract}(z, )z -> z<color:>z</color>z "z" as z {})r   r   	INTERFACEr   colorDEFAULT_COLORattrsextendmethods_get_method_argumentsis_abstractr    joinreturnsr	   appendr&   	fontcolorr   _inc_indent_dec_indent)r   r    r"   r#   
stereotypenodetyper-   bodyfuncargsliner&   s               r   	emit_nodezPlantUmlPrinter.emit_node/   s     	4'd333J+0H4F+FN''B
:e$ 	
 0D4F F 	+)++EEE 	*KK
())) 	""* " "11$77'+'7'7'9'9A||r4999tyy9999< HF%9$,%G%GGGDD!!!!$.$4J
  d 	EJ$8D<N$N 	EDj2DDUDDDE		XIIIITI:IuIIIJJJ 	 	DIIdOOOO		#r   	from_nodeto_noder   r&   
str | Nonec                n    | d| j         |          d| }|r|d| z  }|                     |           dS )zACreate an edge from one node to another to display relationships. z : N)r   r   )r   rA   rB   r"   r&   edges         r   	emit_edgezPlantUmlPrinter.emit_edgeV   sQ     <<dk%0<<7<< 	"M%MM!D		$r   c                0    |                      d           dS )z2Emit the lines needed to properly close the graph.z@endumlN)r   r   s    r   _close_graphzPlantUmlPrinter._close_graphc   s    		)r   )r   r   )N)r    r!   r"   r   r#   r$   r   r   )
rA   r!   rB   r!   r"   r   r&   rC   r   r   )__name__
__module____qualname____doc__r.   r   CLASSr,   PACKAGEr   __annotations__r   INHERITS
IMPLEMENTSASSOCIATIONAGGREGATIONUSESr   r   r@   rG   rI    r   r   r   r      s         ((M 	G)"E     	6Veeu#F       ( -1	% % % % %X !         r   r   N)rM   
__future__r   pylint.pyreverse.printerr   r   r   r   r   pylint.pyreverse.utilsr	   r   rV   r   r   <module>rZ      s   
 U T " " " " " " X X X X X X X X X X X X X X 7 7 7 7 7 7X X X X Xg X X X X Xr   