a
    üû|TïA  ã                   @   s<  d Z ddlmZmZ ddlZddlZddlZddlmZ	 ddlm
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ejdk  ZerœeZG dd„ dƒZ G d	d
„ d
e ƒZ!e"ƒ a#dd„ Z$d'dd„Z%dd„ Z&d(dd„Z'dd„ Z(dd„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd „ Z.d!d"„ Z/da0d#d$„ Z1d%d&„ Z2dS ))z¡
Graphviz's dot language parser.

The dotparser parses graphviz files in dot and dot files and transforms them
into a class representation defined by pydotplus.
é    )ÚdivisionÚprint_functionN)Ú__version__)Ú
nestedExprÚLiteralÚCaselessLiteralÚWordÚ	OneOrMoreÚForwardÚGroupÚOptionalÚCombineÚnumsÚ
restOfLineÚcStyleCommentÚ	alphanumsÚ
printablesÚParseExceptionÚParseResultsÚ
CharsNotInÚQuotedString)é   r   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú
P_AttrListc                 C   sp   i | _ d}|t|ƒk rl|| }|d t|ƒk rT||d  dkrT||d  }|d7 }nd }|d7 }|| j |< q
d S )Nr   é   é   ú=r   )ÚattrsÚlen)ÚselfÚtoksÚiÚattrnameÚ	attrvalue© r#   úI/var/www/sistema_ama/venv/lib/python3.9/site-packages/pydotplus/parser.pyÚ__init__9   s     
zP_AttrList.__init__c                 C   s   d| j j| jf S )Nz%s(%r))Ú	__class__Ú__name__r   ©r   r#   r#   r$   Ú__repr__H   s    zP_AttrList.__repr__N©r'   Ú
__module__Ú__qualname__r%   r)   r#   r#   r#   r$   r   7   s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚDefaultStatementc                 C   s   || _ || _d S ©N)Údefault_typer   )r   r/   r   r#   r#   r$   r%   N   s    zDefaultStatement.__init__c                 C   s   d| j j| j| jf S )Nz
%s(%s, %r))r&   r'   r/   r   r(   r#   r#   r$   r)   R   s    þzDefaultStatement.__repr__Nr*   r#   r#   r#   r$   r-   L   s   r-   c                 C   s„  i }d }|D �]F}t |tttfƒrDt|ƒdkrDt |d tƒrD|d }|dkrVd|d< q|dv rŠi }tjf d|i|¤Ž}||d< t 	|¡ qt |tƒr | 
|¡ qt |tjƒ�r|jd  |jd ¡ |jd	  |jd	 ¡ |jd
  |jd
 ¡ |jd  |jd ¡ | |¡ qt |tƒ�r,| |j¡ qt |ttfƒ�rHt||ƒ qtd| ƒ‚qtD ]}t|ƒ �qZttƒdk�r€td S tS )Nr   r   ÚstrictT)ÚgraphÚdigraphZ
graph_typeÚtypeÚ
attributesÚedgesÚnodesZ	subgraphszUnknown element statement: %r )Ú
isinstancer   ÚtupleÚlistr   Ú
basestringÚ	pydotplusÚDotÚ
top_graphsÚappendÚset_nameÚSubgraphÚobj_dictÚupdateÚset_parent_graphr   r   Úadd_elementsÚ
ValueErrorÚupdate_parent_graph_hierarchy)ÚstrÚlocr   r   ÚgÚelementr#   r#   r$   Úpush_top_graph_stmt\   sD    

ÿÿ

rK   c           
   	   C   s  |d u r| }dD ]ì}t | tjƒr&| }n| j}||vr6q||  ¡ D ]¸\}}|D ]ª}d|v r†|d  ¡ | kr†|d | u rxn|d  |¡ |dkrNt|ƒdkrNt|d ƒD ]P\}}	t |	tj	tj
tjfƒrÎ|	 |¡ t |	tjƒr¦|	d | u rèq¦|	d  |¡ q¦qNqBqd S )N)r5   Úparent_graphr5   r   Zpoints)r7   r;   Ú
frozendictrA   ÚitemsZget_parent_graphrC   r   Ú	enumerateÚGraphr@   ÚCluster)
rI   rL   ÚlevelZkey_nameZ	item_dictÚkeyZobjsÚobjÚidxZvertexr#   r#   r$   rF   Œ   s@    ÿýþ
ÿrF   c                 C   s.   | j }| ¡ D ]\}}| |¡s|||< qd S r.   )Ú__dict__rN   Úget)rJ   ÚdefaultsÚdrS   Úvaluer#   r#   r$   Úadd_defaults¶   s    
r[   c                 C   s¢  |d u ri }|d u ri }|d u r$i }t |ƒD �]n\}}t|tjtjfƒr^t||ƒ |  |¡ q,t|tjƒr€t||ƒ |  |¡ q,t|tj	ƒr¢t||ƒ |  
|¡ q,t|tƒrÊ|D ]}t| |g|||ƒ q°q,t|tƒ�rp|jdk�r tjdi |j¤Ž}|  |¡ nn|jdk�r*tjdi |j¤Ž}	|  |	¡ nD|jdk�r`tjd	i |j¤Ž}
|  |
¡ | |j¡ ntd|j ƒ‚q,t|tƒ�r�| jd  |j¡ q,td| ƒ‚q,d S )
Nr1   ÚnodeÚedgezUnknown DefaultStatement: %s r4   zUnknown element statement: %r)r1   )r\   )r]   )rO   r7   r;   r@   rQ   r[   Zadd_subgraphÚNodeZadd_nodeÚEdgeZadd_edger   rD   r-   r/   r   rB   rE   r   rA   )rI   r   Zdefaults_graphZdefaults_nodeZdefaults_edgeZelm_idxrJ   ÚeZdefault_graph_attrsZdefault_node_attrsZdefault_edge_attrsr#   r#   r$   rD   ½   sL    



ÿ
ÿrD   c                 C   s   t  d¡}t||ƒ |S )NÚ )r;   r@   rD   )rG   rH   r   rI   r#   r#   r$   Úpush_graph_stmtõ   s    

rb   c                 C   s‚   t  d¡}|D ]n}t|ƒdkrV|d  |d ¡ |d dkrJd|d jd< |d   S |d dkrpd|d jd< |d   S q|S )	Nra   r   r   r   r   ÚsubgraphTZshow_keyword)r;   r@   r   r?   rA   )rG   rH   r   rI   r`   r#   r#   r$   Úpush_subgraph_stmtû   s    
rd   c                 C   sJ   |d d }t |ƒdkr$|d j}ni }|dv r:t||ƒS td| ƒ‚d S )Nr   r   )r1   r\   r]   zUnknown default statement: %r )r   r   r-   rE   )rG   rH   r   r/   r   r#   r#   r$   Úpush_default_stmt  s    
re   c                 C   s   t |ƒ}|S r.   )r   )rG   rH   r   Úpr#   r#   r$   Úpush_attr_list  s    rg   c                 C   sV   t | ƒdkrRt| d tƒrRt | d d ƒdkrR| d d d dkrR| d d d S d S )Nr   r   r   ú:)r   r7   r   )r\   r#   r#   r$   Úget_port!  s    ri   c                 C   s,   d}t | ƒdkr(d dd„ | d D ƒ¡}|S )Nra   r   c                 S   s    g | ]\}}t |ƒt |ƒ ‘qS r#   )rG   )Ú.0ÚaÚbr#   r#   r$   Ú
<listcomp>.  ó    z!do_node_ports.<locals>.<listcomp>)r   Újoin)r\   Z	node_portr#   r#   r$   Údo_node_ports*  s    rp   c                 C   s"  dd„ |D ƒ}i }|D ]}|  |j¡ qg }t|d d tjƒrVt |d d j¡}n|d d t|d ƒ }t|d d tƒrØdd„ |d d D ƒ}dd„ |D ƒD ].}	t|	ƒ}
| 	tj
||	d |
 fi |¤Ž¡ q¤�nFt|d d tjƒ�r| 	tj
|t |d d j¡fi |¤Ž¡ �nt|d d tjƒ�r†|d d }| ¡ d u�rb| ¡ d | ¡  }n| ¡ }| 	tj
||fi |¤Ž¡ n˜t|d d tdƒƒ�rd	d„ t|ƒdd d… D ƒD ]`}	t|	tƒ�sºt|	d tdƒƒ�sâ�qºt|	ƒ}
| 	tj
||	d |
 fi |¤Ž¡ |	d |
 }�qºn |S )
Nc                 S   s   g | ]}t |tƒr|‘qS r#   )r7   r   )rj   rk   r#   r#   r$   rm   4  rn   z"push_edge_stmt.<locals>.<listcomp>r   r   c                 S   s   g | ]}|  ¡ g‘qS r#   )Úget_name©rj   Únr#   r#   r$   rm   B  rn   c                 S   s   g | ]}|‘qS r#   r#   rr   r#   r#   r$   rm   C  rn   rh   ra   c                 S   s   g | ]}|‘qS r#   r#   rr   r#   r#   r$   rm   [  rn   )rB   r   r7   r;   rP   rM   rA   rp   r   r>   r_   r^   ri   rq   r3   r8   r   )rG   rH   r   Z	tok_attrsr   rk   r`   Zn_prevZn_next_listZn_nextZn_next_portr\   Z	name_portr#   r#   r$   Úpush_edge_stmt3  sL    (þýÿ ÿ"rt   c                 C   sf   t |ƒdkr|d j}ni }|d }t|tƒs8t|tƒrLt |ƒdkrL|d }tjt|ƒfi |¤Ž}|S )Nr   r   r   )r   r   r7   r9   r8   r;   r^   rG   )ÚsrH   r   r   Z	node_namers   r#   r#   r$   Úpush_node_stmtl  s    rv   c            /      C   sÒ  t �sÎtdƒ} tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}td	ƒ}td
ƒ}	tdƒ}
tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}tdƒ}ttd ƒ d¡}tdddd�}d dd„ tD ƒ¡}t	t
|d ƒƒ}dd„ }d}d }t||t
|| ƒƒ |¡ ¡ }||B |B |B  d!¡}tt|ƒt	ttd" ƒƒ ƒ d#¡}||B  d$¡}|
|  d%¡}t	t| | ƒƒt| | | | | | ƒB  d&¡}t|t|ƒ ƒt|t|ƒ ƒB  d'¡}|t|ƒ } t	|t|| ƒ t| ¡ ƒ ƒ d(¡}!t	| ¡ t|!ƒ | ¡  ƒ d)¡}"t||B |B ƒ|"  d*¡}#td+ƒtd,ƒB  d-¡}$tƒ }%t| ¡ t|%ƒ | ¡  t|	 ¡ ƒ ƒ d.¡}&tƒ }'t	|$|' ƒ}(|'|( t|"ƒ })t|t|ƒ |& ƒ d¡}*|'t|*|&B | B ƒ d/¡>  | t|"ƒ t|	 ¡ ƒ  d0¡}+|| |  d1¡},|,|)B |#B |*B |&B |+B  d2¡}-|%t	|-t|	 ¡ ƒ ƒ>  t	t|ƒt||B ƒ t|ƒ |&  d¡ƒa td3t ƒtd4t ƒB }.t  |.¡ t  t¡ |, t¡ |! t¡ |) t¡ |+ t¡ |# t¡ |* t¡ |& t¡ t  t¡ t S )5Nrh   ú{ú}ú[ú]ú(ú)r   ú,ú;ú@ú-r0   r1   r2   rc   r\   r]   z_.Ú
identifierú"TF)Ú	multilineÚunquoteResultsra   c                 S   s   g | ]}|d kr|‘qS )r}   r#   )rj   Úcr#   r#   r$   rm   ¥  rn   z$graph_definition.<locals>.<listcomp>ú c                 S   s   dd  |d ¡ S )Nz<%s>ra   r   )ro   )ru   rH   r   r#   r#   r$   Ú
parse_html¨  s    z$graph_definition.<locals>.parse_htmlú<ú>ÚIDÚ.Úfloat_numberÚrighthand_idÚ
port_angleÚport_locationÚportÚa_listÚ	attr_listÚ	attr_stmtz--z->ÚedgeopÚ
graph_stmtÚ
edge_pointÚ	node_stmtÚ
assignmentÚstmtz//ú#)Úgraphparserr   r   r   r   ÚsetNamer   ro   r   r	   r   r   ÚsetParseActionÚleaveWhitespacer   r   r   r   Úsuppressr
   ÚsetResultsNamer   Úignorer   rg   rt   rv   re   rd   rb   rK   )/ÚcolonZlbraceÚrbraceZlbrackZrbrackÚlparenÚrparenÚequalsÚcommaZsemiÚatÚminusZstrict_Zgraph_Zdigraph_Z	subgraph_Znode_Zedge_r�   Zdouble_quoted_stringZ	noncomma_Zalphastring_r‡   ÚopenerÚcloserZ	html_textrŠ   rŒ   r�   rŽ   r�   r�   Znode_idr‘   r’   r“   r”   Z	stmt_listr•   r–   ZedgeRHSZ	edge_stmtrc   r—   r˜   r™   ZsingleLineCommentr#   r#   r$   Úgraph_definition  s   ÿ
þýÿþÿüÿÿýÿÿýÿÿýÿþÿþÿÿ
ÿÿýÿþÿÿþ
ÿÿÿÿýÿÿÿý









r¬   c                 C   sB  t ƒ atr’t| tƒr¨zd|  d¡d }| | dv r:|d7 }q$|}| | dvrT|d7 }q>| ||…  d¡ d¡}|  |¡} W q¨   |  d¡} Y q¨0 n|  t	j
¡r¨|  d¡} zJtƒ }td	krÀ| ¡  | | ¡}t|ƒdkrà|d
 W S dd„ |D ƒW S W nJ t�y<   t ¡ d }t|jƒ td|jd  d ƒ t|ƒ Y d S 0 d S )Ns   charseté   s    	
=r   s    	
];,s   "'Úasciizutf-8z1.2r   c                 S   s   g | ]}|‘qS r#   r#   )rj   rI   r#   r#   r$   rm   3  rn   z"parse_dot_data.<locals>.<listcomp>r†   ú^)r9   r=   ÚPY3r7   ÚbytesÚindexÚstripÚdecodeÚ
startswithÚcodecsÚBOM_UTF8r¬   Úpyparsing_versionÚparseWithTabsÚparseStringr   r   ÚsysÚexc_infoÚprintÚlineÚcolumn)ÚdatarU   ZfstÚcharsetr›   ÚtokensÚerrr#   r#   r$   Úparse_dot_data  s<    






rÄ   )Nr   )NNN)3Ú__doc__Ú
__future__r   r   r»   r;   r¶   Ú	pyparsingr   r¸   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   Úversion_infor°   rG   r:   r   r-   r9   r=   rK   rF   r[   rD   rb   rd   re   rg   ri   rp   rt   rv   r›   r¬   rÄ   r#   r#   r#   r$   Ú<module>   s>   P0
*   ý
8		9 