bgR UdZddlmZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z mZmZmZmZddlmZGd d eZed Zd ed <ejdejdejdiZded<e jddde jdddde jddddde jddddde j dddiZ!ded<Gd d!eZ"dS)"zNClass to generate files in dot format and image formats supported by Graphviz.) annotationsN)Enum)Path)nodes)EdgeTypeLayoutNodePropertiesNodeTypePrinter)get_annotation_labelceZdZdZdS) HTMLLabelsz
N)__name__ __module__ __qualname__LINEBREAK_LEFTm/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pylint/pyreverse/dot_printer.pyrrs)NNNrr)utf-8z iso-8859-1latin1zfrozenset[str]ALLOWED_CHARSETSboxrecordzdict[NodeType, str]SHAPESnoneempty) arrowtail arrowheadnodedashed)rrstylegreendiamondsolid) fontcolorrrr"odiamondopenzdict[EdgeType, dict[str, str]]ARROWScjeZdZdZ d d!fd Zd"d Z d#d$dZd%dZd&dZ d#d'dZ d(dZ d"dZ xZ S)) DotPrinterblackNtitlestrlayout Layout | Noneuse_automatic_namespace bool | Nonecx|p tj}d|_t|||dS)Nr)r BOTTOM_TO_TOPcharsetsuper__init__)selfr-r/r1 __class__s rr7zDotPrinter.__init__6s< /6/  (?@@@@@rreturnNonecF|d|jd|jr"|d|jj|jrR|jt vsJd|j|d|jddSdS)zEmit the header lines.z digraph "z" {zrankdir=zunsupported charset z charset=""N)emitr-r/valuer5lowerrr8s r _open_graphzDotPrinter._open_graph@s .dj.../// ; 6 II4!244 5 5 5 < 3 ""$$(88884dl44988 II1$,111 2 2 2 2 2  3 3rnametype_r propertiesNodeProperties | Nonec@|t|}t|}|j|jn|j}||jkrdnd}||}|rd|dnd}|jr d|jd nd} |d |d |d | |d |d |d dS)zVCreate a new node. Nodes can be classes, packages, participants etc. N)labelfilledr%z , label=<>z , fontcolor="r=z " [color="z , shape="z ", style="z"];)r rcolor DEFAULT_COLOR_build_label_for_noder&r>) r8rCrDrEshaperLr"rH label_partfontcolor_parts r emit_nodezDotPrinter.emit_nodeKs  'd333Ju $.$4$@   dFX!T%777W**:66-2:))))) 7A7K S 3J0 3 3 3 3QS  h h h h h h h hU h h^c h h h     rr cZ|jsdS|j}|j |j|S|jpg}tjjd|D}d|d|tjjd}|jpg}|D]}||}|r d|j dn|j }||dd|d z }|j r/t|j } |d | | zz }|tjjz }|d z }|S) NrKc3BK|]}|ddVdS)|\|Nreplace).0attrs r z3DotPrinter._build_label_for_node..nsIB B )-DLLe $ $B B B B B B r{rUzz(, )z: }) rHattrsmethodsrrr?join_get_method_arguments is_abstractrCreturnsr _escape_annotation_label) r8rErHra attrs_stringrbfuncargs method_nameannotation_labels rrNz DotPrinter._build_label_for_nodecs 2%   # (:(BL&+1r%4:<AAB B 16B B B   OeNNlNJ,E,KNNN,6+=+C ; ;D--d33D)-)9)9););O%di%%%%DI  99tyy999 9E| P#7 #E#E  = =>N O OOO 28: :EE   rrlc2|dd}|S)NrUrVrW)r8rls rrgz#DotPrinter._escape_annotation_labels ,33C??r from_nodeto_noderrH str | Nonec t|}d|D}|r|d|d|d|d|ddt |ddS) zACreate an edge from one node to another to display relationships.c$g|] \}}|d|dS)z="r=r)rYpropr?s r z(DotPrinter.emit_edge..s-KKKuD$$E$$$KKKrzlabel="r=z" -> "z" [r^z];N)r)itemsappendr>rcsorted)r8rnrorDrH arrowstyleras r emit_edgezDotPrinter.emit_edgesE] KK 8H8H8J8JKKK  - LL+5+++ , , , OiOOwOO499VE]]3K3KOOOPPPPPr outputfilec|d}|j}|[d}tjd|\}}tjd|\}}t j|t j|nft |jd}|s d}|dz|z}||vr-tjd|\}}t j|n|}t|dd5}| |j dddn #1swxYwY||vr2tj d d ||d |gd t j|dSdS)N)dotgvpngz.gvz.png.wutf8)encodingr|z-Tz-oT)check) _close_graphr-tempfilemkstemposclosersuffixlstripr( writelineslines subprocessrununlink) r8rzgraphviz_extensionsrCtargetpdotdot_sourcepathppngoutfiles rgeneratezDotPrinter.generates +z  F#+#3E4#@#@ D.'/== D* HTNNN HTNNNN*%%,33C88F 7'#-6 000'/'7t'D'D$n!+ .# 7 7 7 +7   tz * * * + + + + + + + + + + + + + + + , , , NfndJGt     In % % % % % - ,s3DD!Dc0|ddS)z2Emit the lines needed to properly close the graph.z} N)r>rAs rrzDotPrinter._close_graphs %r)NN)r-r.r/r0r1r2)r:r;)N)rCr.rDr rErFr:r;)rEr r:r.)rlr.r:r.) rnr.ror.rDrrHrpr:r;)rzr.r:r;) rrrrMr7rBrRrNrgryrr __classcell__)r9s@rr+r+3sM !%/3 AAAAAAA 3 3 3 3-1      0>    ! Q Q Q Q Q&&&&8rr+)#__doc__ __future__rrrrenumrpathlibrastroidrpylint.pyreverse.printerrrr r r pylint.pyreverse.utilsr r frozensetr__annotations__PACKAGE INTERFACECLASSrINHERITS IMPLEMENTS ASSOCIATION AGGREGATIONUSESr)r+rrrrs UTT"""""" XXXXXXXXXXXXXX777777********$-9-N#O#OOOOO e  NH V'BB vGhWW       Mf==*&BBBBBBBBBBr