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rd| _	|d
v | _
|dkrd| _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

