
    yIfq                    r    d Z ddlmZ ddlmZmZmZmZ ddlm	Z	  G d de          Z
 G d de
          Zd	S )
z,Class to generate files in mermaidjs format.    )annotations)EdgeType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 )#MermaidJSPrinterzPrinter for MermaidJS diagrams.blackclasszdict[NodeType, str]NODESz--|>z--*z--oz-->z..>zdict[EdgeType, str]ARROWSreturnNonec                X    |                      d           |                                  dS )zEmit the header lines.classDiagramN)emit_inc_indentselfs    V/var/www/piapp/venv/lib/python3.11/site-packages/pylint/pyreverse/mermaidjs_printer.py_open_graphzMermaidJSPrinter._open_graph   s,    		.!!!    Nnamestrtype_r   
propertiesNodeProperties | Nonec                   |t          |          }| j        |         }g }|j        r|                    |j                   |j        r|j        D ]}|                     |          }|j         dd                    |           d}||                                rdndz  }|j	        r|dt          |j	                   z  }|                    |           |                    d	          d
         }|                     | d| d           |                                  |D ]}|                     |           |                                  |                     d           dS )zVCreate a new node.

        Nodes can be classes, packages, participants etc.
        N)label(z, )*  .z {})r   r   attrsextendmethods_get_method_argumentsr   joinis_abstractreturnsr   appendsplitr   r   _dec_indent)	r   r   r   r   nodetypebodyfuncargslines	            r   	emit_nodezMermaidJSPrinter.emit_node#   s    'd333J:e$ 	*KK
())) 	""* " "11$77)88diioo888t//119r9< ED 4T\ B BDDDDD!!!!zz#r"		X)))))*** 	 	DIIdOOOO		#r   	from_nodeto_noder   r    
str | Nonec                    |                     d          d         }|                     d          d         }| d| j        |          d| }|r|d| z  }|                     |           dS )zACreate an edge from one node to another to display relationships.r&   r'   r%   z : N)r1   r   r   )r   r9   r:   r   r    edges         r   	emit_edgezMermaidJSPrinter.emit_edgeD   s}     OOC((,	--$$R(<<dk%0<<7<< 	"M%MM!D		$r   c                .    |                                   dS )z2Emit the lines needed to properly close the graph.N)r2   r   s    r   _close_graphzMermaidJSPrinter._close_graphS   s    r   r   r   N)r   r   r   r   r   r   r   r   )
r9   r   r:   r   r   r   r    r;   r   r   )__name__
__module____qualname____doc__DEFAULT_COLORr   CLASSPACKAGEr   __annotations__r   INHERITSASSOCIATIONAGGREGATIONUSESTYPE_DEPENDENCYr   r   r8   r>   r@    r   r   r
   r
      s         ))M 	'"E    
 	6eeu %#F        -1	    L !         r   r
   c                  8     e Zd ZdZdZdZdZd	 fdZd	dZ xZ	S )
HTMLMermaidJSPrinterz=Printer for MermaidJS diagrams wrapped in a html boilerplate.z<html>
  <body>
    <script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
      <div class="mermaid">
    z!
       </div>
  </body>
</html>
   r   r   c                    |                      | j                   t          | j                  D ]}|                                  t                                                       d S rB   )r   HTML_OPEN_BOILERPLATErangeGRAPH_INDENT_LEVELr   superr   )r   _	__class__s     r   r   z HTMLMermaidJSPrinter._open_graphg   sc    		$,---t.// 	 	Ar   c                    t          | j                  D ]}|                                  |                     | j                   d S rB   )rV   rW   r2   r   HTML_CLOSE_BOILERPLATE)r   rY   s     r   r@   z!HTMLMermaidJSPrinter._close_graphm   sL    t.// 	 	A		$-.....r   rA   )
rC   rD   rE   rF   rU   r\   rW   r   r@   __classcell__)rZ   s   @r   rR   rR   X   so        GG

      / / / / / / / /r   rR   N)rF   
__future__r   pylint.pyreverse.printerr   r   r   r   pylint.pyreverse.utilsr   r
   rR   rP   r   r   <module>ra      s   
 3 2 " " " " " " P P P P P P P P P P P P 7 7 7 7 7 7H H H H Hw H H HV/ / / / /+ / / / / /r   