U
    
W[                     @   s   d Z ddlmZmZ ddlZddlZddlmZ ddlm	Z	 e	G dd dZ
e	G d	d
 d
ZG dd deZefddZdd Zedkre  dS )z"
HTML rendering of Python source.
    )	_tokenizeescapeN   )reflect)	_oldStylec                   @   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   s(  t tdr|tjkr|| _d S t|ts4|| j}|\}}|\}}	| j|k rp| d|| j   |d | _| _	| d|| j	   | j
rd}d| _n<|tjkrt|rd}q| jrd}qd	}ntj| }| || |	| _	|  j|d7  _| j|kr
d| _	|d
k| _
|dkr$d| _d S )NENCODING   
r       Z
identifierr   keywordZ	parameterZvariable)s   defs   class   :)hasattrtokenizer   encoding
isinstancebytesencodecurrentLiner	   
currentCollastIdentifier
parametersNAMEr   	iskeywordtok_nameget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                   @   s&   e Zd ZdZg Z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.
    c                 C   s$   || _ g }t| jd| || _d S )NnoSpan)r	   r   ZaccumulateClassList	__class__r,   )r
   r	   r,   r   r   r   r   P   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   writeW   s    


zHTMLWriter.write)N)r'   r(   r)   r*   r,   r   r/   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   r0   e   s   r0   c           
      C   st   | d t||j j j}z2t| jD ]"}|\}}}}}	||||||	 q(W n tjk
rd   Y nX | d d S )Ns   <pre>s   </pre>
)r/   r   r&   r   readliner   
TokenError)
Zinpoutr	   Zprinterr$   Z	tokenTypestringstartendr%   r   r   r   filtero   s    
r<   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argvr<   )r?   rA   fr   r   r   main|   s    rE   __main__)r*   Ztwisted.python.compatr   r   r   r    r   Ztwisted.python._oldstyler   r   r+   r0   r<   rE   r'   r   r   r   r   <module>   s   6
