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   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}|r>| dg|R    dg|R  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i 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   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 ]}|| 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.
    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?   sN   





r4   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)r9   defaultactionz--dot-directoryz-dzWhere to write out .dot files.z.automat_visualize)r9   r;   z--image-directoryz-izWhere to write out image files.z--image-typez-tzThe image format.Zpng)r9   choicesr;   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@   rA   viewZcleanupz...wrote image intoz...wrote image and dot intoN)insertargparseArgumentParseradd_argumentr/   ZFORMATS
parse_argsZdot_directoryZimage_directoryquietr8   Z	asDigraphZsaver   Z
image_typeZrenderrB   )Z	_prognameZ_argvZ_syspathZ_findMachinesr?   ZDESCRIPTIONZEPILOGZargumentParserr>   ZexplicitlySaveDotr8   machiner1   Z	deleteDotmsgr
   r
   r   tooll   s   	


rK   )Z
__future__r   rD   sysr/   Z	_discoverr   r   r   r   r*   reprr4   argvpathprintrK   r
   r
   r
   r   <module>   s&     
-