o
    g                     @   sP   d Z ddlmZmZ ddlmZmZmZmZm	Z	 ddl
mZ G dd de	ZdS )zP
Class to generate files in dot format and image formats supported by Graphviz.
    )DictOptional)EdgeTypeLayoutNodePropertiesNodeTypePrinter)get_annotation_labelc                   @   s   e Zd ZU dZdZejdejdejdiZ	e
eef ed< ejdejdejdejd	iZe
eef ed
< dddZ	ddededee ddfddZ	ddedededee ddf
ddZdddZdS )PlantUmlPrinterzPrinter for PlantUML diagramsblackclasspackageNODESz--|>z..|>z--*z-->ARROWSreturnNc                 C   sp   |  d| j  | js|  d | jr6| 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 linesz
@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self r   _/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/pyreverse/plantuml_printer.py_open_graph    s   
zPlantUmlPrinter._open_graphnametype_
propertiesc              
   C   sN  |du r	t |d}|tju rdnd}| j| }|jr'|j| jkr'd|j }nd}g }|jr4||j |jr_|jD ]$}| 	|}	|j
 dd|	 d}
|jrY|
d	t|j 7 }
||
 q:|jdurg|jn|}|jr||j| jkr|d
|j d| d}| | d| d| | | d |   |D ]}
| |
 q|   | d dS )zDCreate a new node. Nodes can be classes, packages, participants etc.N)labelz << interface >> z #(z, )z -> z<color:>z</color>z "z" as z {})r   r   	INTERFACEr   colorDEFAULT_COLORattrsextendmethods_get_method_argumentsr   joinreturnsr	   appendr    	fontcolorr   _inc_indent_dec_indent)r   r   r   r   
stereotypenodetyper'   bodyfuncargsliner    r   r   r   	emit_node/   s4   



$zPlantUmlPrinter.emit_node	from_nodeto_noder    c                 C   s:   | d| j |  d| }|r|d| 7 }| | dS )zACreate an edge from one node to another to display relationships. z : N)r   r   )r   r:   r;   r   r    edger   r   r   	emit_edgeR   s   zPlantUmlPrinter.emit_edgec                 C   s   |  d dS )z2Emit the lines needed to properly close the graph.z@endumlN)r   r   r   r   r   _close_graph_   s   zPlantUmlPrinter._close_graph)r   N)N)__name__
__module____qualname____doc__r(   r   CLASSr&   PACKAGEr   r   str__annotations__r   INHERITS
IMPLEMENTSASSOCIATIONUSESr   r   r   r   r9   r>   r?   r   r   r   r   r
      sH   
 

(
r
   N)rC   typingr   r   pylint.pyreverse.printerr   r   r   r   r   pylint.pyreverse.utilsr	   r
   r   r   r   r   <module>   s
   