a
    |TA                     @   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re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#   U/var/www/viveiro_mudafortebrasil/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 ri }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rt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 rq|	d | qqNqBq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rt|| | | q,t|tj	rt|| | 
| q,t|tr|D ]}t| |g||| qq,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rd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 | nt|d d tdrd	d t|dd d D D ]`}	t|	tst|	d tdsqt|	}
|	tj
||	d |
 fi | |	d |
 }qn |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 st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rt| trzd| dd }| | dv r:|d7 }q$|}| | dvrT|d7 }q>| || dd}| |} W q   | d} Y q0 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 