o
    ¯b*  ã                   @   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rEeƒ  dS 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
   ú9/usr/lib/python3/dist-packages/twisted/python/htmlizer.pyÚ__init__   s   
zTokenPrinter.__init__c           
      C   s8  t tdƒr|tjkr|| _d S t|tƒs| | j¡}|\}}|\}}	| j|k r8|  d|| j  ¡ |d| _| _	|  d|| j	  ¡ | j
rKd}d| _n&|tjkrat |¡rXd}n| jr^d}nd	}ntj |¡}|d usmJ ‚| ¡ }|  ||¡ |	| _	|  j| d¡7  _| j|krŒd| _	|d
v | _
|dkršd| _d S d S )NÚENCODINGó   
r   ó    Ú
identifierr   ÚkeywordÚ	parameterÚvariable)s   defs   classó   :)ÚhasattrÚtokenizer   ÚencodingÚ
isinstanceÚbytesÚencodeÚcurrentLiner   Ú
currentColÚlastIdentifierÚ
parametersÚNAMEr   Ú	iskeywordÚtok_nameÚgetÚlowerÚcount)
r	   ÚtypeÚtokenÚsCoordinatesÚeCoordinatesÚlineÚsrowÚscolÚerowÚ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 )Nr4   )r   r   ÚaccumulateClassListÚ	__class__r4   )r	   r   r4   r
   r
   r   r   O   s   
zHTMLWriter.__init__Nc                 C   sj   t |tƒr
| d¡}t|ƒ}| d¡}|d u s|| jv r#|  |¡ d S |  d| d¡ d | d ¡ d S )Nr   s   <span class="py-src-s   ">s   </span>)r   r   Údecoder   r   r4   r   )r	   r&   r%   r
   r
   r   ÚwriteU   s"   


ÿþýüÿzHTMLWriter.write)N)
r/   r0   r1   r2   r4   r   ÚstrÚ__annotations__r   r8   r
   r
   r
   r   r3   G   s
   
 r3   c                   @   s   e Zd ZdZg d¢ZdS )ÚSmallerHTMLWriterzi
    HTMLWriter that doesn't generate spans for some junk.

    Results in much smaller HTML output.
    )Ú	endmarkerÚindentÚdedentÚopÚnewlineÚnlN)r/   r0   r1   r2   r4   r
   r
   r
   r   r;   f   s    r;   c           
      C   st   |  d¡ t||j ƒj ƒj}zt | j¡D ]}|\}}}}}	||||||	ƒ qW n
 tjy2   Y nw |  d¡ d S )Ns   <pre>s   </pre>
)r8   r   r.   r   ÚreadlineÚ
TokenError)
ÚinpÚoutr   Úprinterr&   Ú	tokenTypeÚstringÚstartÚendr)   r
   r
   r   Úfilterp   s   
þÿrK   c                  C   sX   dd l } t| jd| jƒ}t| jd dƒ�}t||ƒ W d   ƒ d S 1 s%w   Y  d S )Nr   Úbufferr   Úrb)ÚsysÚgetattrÚstdoutÚopenÚargvrK   )rN   rP   Úfr
   r
   r   Úmain|   s
   "ÿrT   Ú__main__)r2   r   r   Úhtmlr   Útypingr   Ú r   r   r3   r;   rK   rT   r/   r
   r
   r
   r   Ú<module>   s   6

ÿ