
    c;                        d Z dZddlZdddddd	d
dZi ddddded   ded   ded   ddddddded   ded   ddddded   ddddd dd!ded   ed"   ed"   ed"   ed"   ed"   ed"   ed"   ed"   ed"   ed"   d#Zdded   ed   ed   ddded   ed   ddddd$Zi d%dd&dddd'ed(   d)dd*dded   ded   d+ed   d,ed   d-dd.dd/ed0   d1ed0   ded   d2dd3dddiZd4 Z G d5 d6      Zy)7aK  Functions to generate files readable with Georg Sander's vcg
(Visualization of Compiler Graphs).

You can download vcg at http://rw4.cs.uni-sb.de/~sander/html/gshome.html
Note that vcg exists as a debian package.

See vcg's documentation for explanation about the different values that
maybe used for the functions parameters.




zrestructuredtext en    N)dfstreeminbackwardleft_to_rightright_to_lefttop_to_bottombottom_to_topmaxdepthmaxdepthslowmindepthmindepthslow	mindegreeminindegreeminoutdegree	maxdegreemaxindegreemaxoutdegree)yesno) blackwhiteblueredgreenyellowmagenta	lightgreycyandarkgreydarkbluedarkred	darkgreen
darkyellowdarkmagentadarkcyangold	lightbluelightred
lightgreenlightyellowlightmagenta	lightcyanlilac	turquoise
aquamarinekhakipurpleyellowgreenpinkorangeorchid)boxellipserhombtriangle)centerleft_justifyright_justify)solidlinenone)
continuousdasheddotted	invisible)algosbooleanscolorsshapes	textmodesarrowstyles
linestylestitlelabelcolorrF   	textcolorbordercolorwidth   heightborderwidthtextmoderH   shaperG   shrinkstretchorientationrD   vertical_orderhorizontal_orderxspaceyspacerE   )layoutalgorithmlate_edge_labelsdisplay_edge_labelsdirty_edge_labels
finetuningmanhattan_edgessmanhattan_edgesport_sharingedgesnodessplines)rK   rL   rM   rN   rO   rP   rR   rS   rT   rU   rV   rW   rY   rZ   
sourcename
targetname	linestylerJ   class	thickness
arrowcolorbackarrowcolor	arrowsizebackarrowsize
arrowstylerI   backarrowstylepriorityanchorc                     | D ]D  }|t         j                  vs	 t        |      }|dk\  r| j                  |dt        |      z        } F | S # t        $ r Y Tw xY w)z3Convert latin characters using vcg escape sequence.   z\fi%d)stringascii_lettersordreplace	Exception)stcharnums      9/usr/lib/python3/dist-packages/logilab/common/vcgutils.pylatin_to_vcgr      si     v+++$i#:D(SY*>?B I  s   .A	AAc                   B    e Zd ZdZd Zd Zd Zd ZddZd Z	d Z
d	 Zy
)
VCGPrinterzA vcg graph writer.c                      || _         d| _        y )N )_stream_indent)selfoutput_streams     r   __init__zVCGPrinter.__init__   s    $    c                     | j                   j                  d| j                  z         | j                           | j                  t
        fi | y)zopen a vcg graphz
%sgraph:{
N)r   writer   _inc_indent_write_attributesGRAPH_ATTRS)r   argss     r   
open_graphzVCGPrinter.open_graph   s>    =4<<78{3d3r   c                 t    | j                          | j                  j                  d| j                  z         y)zclose a vcg graphz%s}
N)_dec_indentr   r   r   r   s    r   close_graphzVCGPrinter.close_graph   s)    7T\\12r   c                     | j                   j                  | j                   d| d        | j                  t        fi | | j                   j                  d       y)zdraw a nodeznode: {title:""}
N)r   r   r   r   
NODE_ATTRS)r   rK   r   s      r   nodezVCGPrinter.node   sL    dll^?5'CDz2T25!r   c           	          | j                   j                  | j                  |d|d|d        | j                  t        fi | | j                   j                  d       y)z$draw an edge from a node to another.zedge: {sourcename:"z" targetname:"r   r   N)r   r   r   r   
EDGE_ATTRS)r   	from_nodeto_node	edge_typer   s        r   edgezVCGPrinter.edge   sO    ||Y	7<	
 	z2T25!r   c           
         |j                         D ]  \  }}	 ||   }|s.| j                  j                  | j                   | d| d       <|dk(  r@| j                  j                  dj                  | j                  |t        |                   ||v r.| j                  j                  | j                   | d| d       t        d	|d
|d|       y# t        $ r  t        d|d|j                               w xY w)z$write graph, node or edge attributeszno such attribute z
possible attributes are z:"z"
rQ   z{}{}:{}
:
zvalue z isn't correct for attribute z
correct values are N)	itemsKeyErrorr{   keysr   r   r   formatint)r   attributes_dictr   keyvalue_types         r   r   zVCGPrinter._write_attributes   s   **, 	JC', ""dll^C55'#EF!"";#5#5dllCU#TU%""dll^C5%#CD c5* #	   O0024 s   C)Dc                 ,    d| j                   z  | _         y)zincrement indentationz  %sNr   r   s    r   r   zVCGPrinter._inc_indent   s    ,r   c                 ,    | j                   dd | _         y)zdecrement indentationNr   r   s    r   r   zVCGPrinter._dec_indent   s    ||CR(r   N)r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r    r   r   r   r      s-    43
""2-)r   r   )	r   __docformat__rw   	ATTRS_VALr   r   r   r   r   r   r   r   <module>r      s  $ & & !D 6<,Au;	BQQ Yx  8$	
 9X& Q a 1 	+& Yx  a q 9W% a   a!" a#$ !)!*-$Z0":.J' ,!*-j)z"z"$9> x 8$X&+&x 
 !! Q <(	
 Q  Yx  8$ )H% i)  Q )M* i. 	+&  !" a#$ %
2
B) B)r   