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%� |r­d&}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&     
þ-ü