
    \d*                         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          Z	 G d	 d
          Z
 G d de
          Ze
fdZd Zedk    r e             dS dS )z"
HTML rendering of Python source.
    N)escape)List   )reflectc                   4    e Zd ZdZd\  ZZdxZZdZd Z	d Z
dS )TokenPrinterzU
    Format a stream of tokens and intermediate whitespace, for pretty-printing.
    )r   r   r   utf-8c                     || _         dS )zJ
        @param writer: A file-like object, opened in bytes mode.
        N)writer)selfr   s     7lib/python3.11/site-packages/twisted/python/htmlizer.py__init__zTokenPrinter.__init__   s         c                 T   t          t          d          r|t          j        k    r	|| _        d S t	          |t
                    s|                    | j                  }|\  }}|\  }}	| j        |k     r/|                     d|| j        z
  z             |dc| _        | _	        |                     d|| j	        z
  z             | j
        r
d}d| _        nk|t          j        k    r$t          j        |          rd}nD| j        rd}n:d	}n7t          j                            |          }|J |                                }|                     ||           |	| _	        | xj        |                    d          z  c_        | 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ecols
             r   
printtokenzTokenPrinter.printtoken    s   8Z(( 	TX5F-F-F!DMF%'' 	0LL//E#t#td""KK(8!89:::04a-DdoDD4?23444 	 DDOOX]"" '' & ? &&DD%DD$((..D###::<<DE4   EKK...t##DO#'99D==DOOO =r   N)__name__
__module____qualname____doc__r    r   r!   r"   r   r   r2    r   r   r   r      sW          #J"##NZH  $  $  $  $  $ r   r   c                   <    e Zd ZU dZg Zee         ed<   d ZddZ	dS )
HTMLWriterzm
    Write the stream of tokens and whitespace from L{TokenPrinter}, formating
    tokens as HTML spans.
    noSpanc                 \    || _         g }t          j        | j        d|           || _        d S )Nr:   )r   r   accumulateClassList	__class__r:   )r   r   r:   s      r   r   zHTMLWriter.__init__O   s0    #DNHfEEEr   Nc                 N   t          |t                    r|                    d          }t          |          }|                    d          }|	|| j        v r|                     |           d S |                     d|                    d          z   dz   |z   dz              d S )Nr	   s   <span class="py-src-s   ">s   </span>)r   r   decoder   r   r:   r   )r   r*   r)   s      r   writezHTMLWriter.writeU   s    eU## 	*LL))EuW%%Lddk11KKKK'++g&&'  	    r   )N)
r3   r4   r5   r6   r:   r   str__annotations__r   r@   r7   r   r   r9   r9   G   sY          
 FDI       r   r9   c                       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)r3   r4   r5   r6   r:   r7   r   r   rD   rD   f   s&          FEEFFFr   rD   c                 <   |                     d           t           ||j                   j                   j        }	 t          j        | j                  D ]}|\  }}}}}	 ||||||	           n# t          j        $ r Y nw xY w|                     d           d S )Ns   <pre>s   </pre>
)r@   r   r2   r   readline
TokenError)
inpoutr   printerr*   	tokenTypestringstartendr-   s
             r   filterrU   p   s    IIh66#),,233>G&s|44 	9 	9E491YsDGIvuc48888	9    IIks   3A2 2BBc                      dd l } t          | j        d| j                  }t          | j        d         d          5 }t          ||           d d d            d S # 1 swxY w Y   d S )Nr   bufferr   rb)sysgetattrstdoutopenargvrU   )rY   r[   fs      r   mainr_   |   s    JJJSZ3:66F	chqk4	 	  Aq&                 s   AA A__main__)r6   r   r   htmlr   typingr    r   r   r9   rD   rU   r_   r3   r7   r   r   <module>rd      s(  
                     3  3  3  3  3  3  3  3 l       >F F F F F
 F F F ' 	 	 	 	   zDFFFFF r   