
    yIf                    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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--oz-->z..>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    U/var/www/piapp/venv/lib/python3.11/site-packages/pylint/pyreverse/plantuml_printer.py_open_graphzPlantUmlPrinter._open_graph   s    		,+,,,+ 	5II3444; 		{f222		34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          |          }| j        |         }|j        r.|j        | j        k    rd|j                            d           }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 ## z
{abstract}(z, )z -> z<color:>z</color>z "z" as z {})r   r   colorDEFAULT_COLORlstripattrsextendmethods_get_method_argumentsis_abstractr    joinreturnsr	   appendr&   	fontcolorr   _inc_indent_dec_indent)r   r    r"   r#   nodetyper-   bodyfuncargsliner&   s              r   	emit_nodezPlantUmlPrinter.emit_node.   s	    'd333J:e$ 	
 0D4F F F7)005577EE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$@
  d 	EJ$8D<N$N$NDj2DDUDDDE		X====T=5===>>> 	 	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_edgeT   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_grapha   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   CLASSPACKAGEr   __annotations__r   INHERITSASSOCIATIONAGGREGATIONUSESTYPE_DEPENDENCYr   r   r@   rG   rI    r   r   r   r      s         ((M 	)"E    
 	6eeu %#F       ( -1	$ $ $ $ $V !         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V V V V Vg V V V V Vr   