U
    c6{i*  ã                   @   sŠ   d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd„ dƒZ	G d	d
„ d
ƒZ
G dd„ de
ƒZe
fdd„Zdd„ Zedkr†eƒ  dS )z"
HTML rendering of Python source.
é    N)Úescape)ÚListé   )Úreflectc                   @   s4   e Zd ZdZd\ZZd ZZdZdd„ Z	dd„ Z
d	S )
ÚTokenPrinterzU
    Format a stream of tokens and intermediate whitespace, for pretty-printing.
    )r   r   r   úutf-8c                 C   s
   || _ dS )zJ
        @param writer: A file-like object, opened in bytes mode.
        N)Úwriter)Úselfr   © r
   ú;/tmp/pip-unpacked-wheel-hfbvu0bz/twisted/python/htmlizer.pyÚ__init__   s    zTokenPrinter.__init__c           
      C   s8  t tdƒr|tjkr|| _d S t|tƒs4| | j¡}|\}}|\}}	| j|k rp|  d|| j  ¡ |d | _| _	|  d|| j	  ¡ | j
r–d}d| _nL|tjkrÂt |¡r°d}qâ| jr¼d}qâd	}n tj |¡}|d k	sÚt‚| ¡ }|  ||¡ |	| _	|  j| d¡7  _| j|k�rd| _	|d
k| _
|dk�r4d| _d S )NÚENCODINGó   
r   ó    Ú
identifierr   ÚkeywordZ	parameterÚvariable)s   defs   classó   :)ÚhasattrÚtokenizer   ÚencodingÚ
isinstanceÚbytesÚencodeÚcurrentLiner   Ú
currentColÚlastIdentifierÚ
parametersÚNAMEr   Ú	iskeywordÚtok_nameÚgetÚAssertionErrorÚlowerÚcount)
r	   ÚtypeÚtokenZsCoordinatesZeCoordinatesÚlineZsrowZscolZerowZecolr
   r
   r   Ú
printtoken    s>    





zTokenPrinter.printtokenN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r(   r
   r
   r
   r   r      s   r   c                   @   s4   e Zd ZU dZg Zee ed< dd„ Zddd„Z	dS )	Ú
HTMLWriterzm
    Write the stream of tokens and whitespace from L{TokenPrinter}, formating
    tokens as HTML spans.
    ÚnoSpanc                 C   s$   || _ g }t | jd|¡ || _d S )Nr.   )r   r   ZaccumulateClassListÚ	__class__r.   )r	   r   r.   r
   r
   r   r   O   s    zHTMLWriter.__init__Nc                 C   sh   t |tƒr| d¡}t|ƒ}| d¡}|d ks8|| jkrD|  |¡ n |  d| d¡ d | d ¡ d S )Nr   s   <span class="py-src-s   ">s   </span>)r   r   Údecoder   r   r.   r   )r	   r&   r%   r
   r
   r   ÚwriteU   s"    


ÿþýüÿzHTMLWriter.write)N)
r)   r*   r+   r,   r.   r   ÚstrÚ__annotations__r   r1   r
   r
   r
   r   r-   G   s   
r-   c                   @   s    e Zd ZdZddddddgZdS )	ÚSmallerHTMLWriterzi
    HTMLWriter that doesn't generate spans for some junk.

    Results in much smaller HTML output.
    Z	endmarkerÚindentÚdedentÚopÚnewlineÚnlN)r)   r*   r+   r,   r.   r
   r
   r
   r   r4   f   s   r4   c           
      C   sv   |  d¡ t||j ƒj ƒj}z4t | j¡D ]"}|\}}}}}	||||||	ƒ q*W n tjk
rf   Y nX |  d¡ d S )Ns   <pre>s   </pre>
)r1   r   r(   r   ÚreadlineÚ
TokenError)
ÚinpÚoutr   Úprinterr&   Ú	tokenTypeÚstringÚstartÚendr'   r
   r
   r   Úfilterp   s    
rC   c               	   C   sB   dd l } t| jd| jƒ}t| jd dƒ�}t||ƒ W 5 Q R X d S )Nr   Úbufferr   Úrb)ÚsysÚgetattrÚstdoutÚopenÚargvrC   )rF   rH   Úfr
   r
   r   Úmain|   s    rL   Ú__main__)r,   r   r   Úhtmlr   Útypingr   Ú r   r   r-   r4   rC   rL   r)   r
   r
   r
   r   Ú<module>   s   6
