U
    Y                     @   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   ZformattedAttrsZ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}|rx| d|   d| S )z>
    Construct an HTML table to label a state transition.
    colspantdfontzmenlo-italic)ZfaceZpurple)colorportz
point-size9c                    s$   g | ]} d  d|fddqS )r   r   Zpink)r   r
   )r   ZoutputLabel_EZ	pointSizer
   r   
<listcomp>0   s   ztableMaker.<locals>.<listcomp>trtable)r%   )r&   )r   lenappend)
inputLabelZoutputLabelsr    r#   r   ZinputLabelCellZoutputLabelCellsZrowsr
   r"   r   
tableMaker   s,    r*   c                    s  t jdddddiddid}|  D ]8}|| jkr>d}d}nd	}d}|j|||d
|dd q&t|  D ]\}}	|	\}
}}}d|}||}d}t| fdd|D |d}|j|t	|ddd |j
||
d||dd |
d|||| ql|S )zA
    Produce a L{graphviz.Digraph} object from an automaton.
    trueZ100)ZpackZdpiZfontnameZMenlo)Z
graph_attrZ	node_attrZ	edge_attrZboldz
Menlo-Boldr   ZellipseZblue)ZfontameshapeZstyler   zt{}Z	tableportc                    s   g | ]} |qS r
   r
   )r   ZoutputSymboloutputAsStringr
   r   r$   \   s   zmakeDigraph.<locals>.<listcomp>)r    z0.2Znone)ZlabelZmarginr,   z{}:{}:w)Z	arrowheadz{}:{}:e)graphvizZDigraphZstatesZinitialStateZnode	enumerateZallTransitionsr   r*   r   Zedge)Z	automatonZinputAsStringr.   ZstateAsStringdigraphstateZ
stateShapeZfontNamenZeachTransitionZinStateZinputSymbolZoutStateZoutputSymbolsZthisTransitionr)   r    r&   r
   r-   r   makeDigraph?   sR    


  

r4   c                 C   sx  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	rdd  }||j
D ]\}
}||
d! | }|	r|jd"|
|jd# ||
d$|j |jr|j p.|	}|j|_|jd"|
|j|j|d% |r`d&}nd'}||
||j qd(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   )progZdescriptionZepilogfqpnz@A Fully Qualified Path name representing where to find machines.)helpz--quietz-qzsuppress outputF
store_true)r7   defaultactionz--dot-directoryz-dzWhere to write out .dot files.z.automat_visualize)r7   r9   z--image-directoryz-izWhere to write out image files.z--image-typez-tzThe image format.Zpng)r7   choicesr9   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)r>   r?   viewZcleanupz...wrote image intoz...wrote image and dot intoN)insertargparseArgumentParseradd_argumentr/   ZFORMATS
parse_argsZdot_directoryZimage_directoryquietr6   Z	asDigraphZsaver   Z
image_typeZrenderr@   )Z	_prognameZ_argvZ_syspathZ_findMachinesr=   ZDESCRIPTIONZEPILOGZargumentParserr<   ZexplicitlySaveDotr6   machiner1   Z	deleteDotmsgr
   r
   r   tooll   s|    	


rI   )Z
__future__r   rB   sysr/   Z	_discoverr   r   r   r   r*   reprr4   argvpathprintrI   r
   r
   r
   r   <module>   s$    
-