o
    q+WZ                     @   s   d dl mZ d dlZd dlZd dlZddlmZ dd Zdd Zd	d
 Z	e	fddZ
eeefddZejd  ejdd ejeefddZdS )    )print_functionN   )findMachinesc                 C   s   d | ddS )Nz"{}""z\")formatreplaces r
   4/usr/lib/python3/dist-packages/automat/_visualize.py_gvquote
   s   r   c                 C   s
   d | S )Nz<{}>)r   r   r
   r
   r   _gvhtml   s   
r   c                 O   s6   d dd t| D }d |}dj| ||dS )z?
    Construct a string from the HTML element description.
     c                 s   s(    | ]\}}d  |tt|V  qdS )z{}={}N)r   r   str).0keyvaluer
   r
   r   	<genexpr>   s    zelementMaker.<locals>.<genexpr> z#<{name} {attrs}>{children}</{name}>)nameattrschildren)joinsorteditemsr   )r   r   r   formattedAttrsformattedChildrenr
   r
   r   elementMaker   s   


r   c                    s   i }|rt t||d<  d d| ddfd|d|}dd	i fd
d|D } d|g}|r>| dg|R    dg|R  S )z>
    Construct an HTML table to label a state transition.
    colspantdfontzmenlo-italic)facepurple)colorportz
point-size9c                    s(   g | ]} d  d|fi ddqS )r   r    pink)r#   r
   )r   outputLabel_E	pointSizer
   r   
<listcomp>0   s    
ztableMaker.<locals>.<listcomp>trtable)r   lenappend)
inputLabeloutputLabelsr$   r)   r   inputLabelCelloutputLabelCellsrowsr
   r(   r   
tableMaker   s,   r5   c                    s  t jdddddiddid}|  D ]}|| ju rd}d}nd	}d}|j|||d
|dd qt|  D ]H\}}	|	\}
}}}d|}||}d}t| fdd|D |d}|j|t	|ddd |j
||
d||dd |
d|||| q6|S )zA
    Produce a L{graphviz.Digraph} object from an automaton.
    true100)packdpifontnameMenlo)
graph_attr	node_attr	edge_attrboldz
Menlo-Boldr   ellipseblue)fontameshapestyler#   zt{}	tableportc                    s   g | ]} |qS r
   r
   )r   outputSymboloutputAsStringr
   r   r+   \   s    zmakeDigraph.<locals>.<listcomp>)r$   z0.2none)labelmarginrC   z{}:{}:w)	arrowheadz{}:{}:e)graphvizDigraphstatesinitialStatenode	enumerateallTransitionsr   r5   r   edge)	automatoninputAsStringrH   stateAsStringdigraphstate
stateShapefontNameneachTransitioninStateinputSymboloutStateoutputSymbolsthisTransitionr0   r$   r-   r
   rG   r   makeDigraph?   sN   





rc   c                 C   sr  d}d}|d r| dd tj| ||d}|jddd |jd	d
dddd |jddddd |jddddd |jdddtjdd |jdddddd ||}|jo_|j p_|j|jk}	|j	rgdd  }||j
D ]J\}
}||
d! | }|	r|jd"|
|jd# ||
d$|j |jr|j p|	}|j|_|jd"|
|j|j|d% |rd&}nd'}||
||j qld(S ))z/
    Entry point for command line utility.
    zB
    Visualize automat.MethodicalMachines as graphviz graphs.
    zz
    You must have the graphviz tool suite installed.  Please visit
    http://www.graphviz.org for more information.
    r   r   )progdescriptionepilogfqpnz@A Fully Qualified Path name representing where to find machines.)helpz--quietz-qzsuppress outputF
store_true)rh   defaultactionz--dot-directoryz-dzWhere to write out .dot files.z.automat_visualize)rh   rj   z--image-directoryz-izWhere to write out image files.z--image-typez-tzThe image format.png)rh   choicesrj   z--viewz-vz.View rendered graphs with default image viewerc                  W   s   d S )Nr
   )argsr
   r
   r   _print   s   ztool.<locals>._printz...discoveredz{}.dot)filename	directoryz...wrote dot into)rp   rq   viewcleanupz...wrote image intoz...wrote image and dot intoN)insertargparseArgumentParseradd_argumentrM   FORMATS
parse_argsdot_directoryimage_directoryquietrg   	asDigraphsaver   
image_typerenderrr   )	_progname_argv_syspath_findMachinesro   DESCRIPTIONEPILOGargumentParserrn   explicitlySaveDotrg   machinerX   	deleteDotmsgr
   r
   r   tooll   s   	


r   )
__future__r   ru   sysrM   	_discoverr   r   r   r   r5   reprrc   argvpathprintr   r
   r
   r
   r   <module>   s&     
-