o
    Ëý°jri  ã                   @   s  U d dl Zd dlZd dlmZ d dlZd dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d d
l(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:mZ ddl;m<Z< ee=df Z>e ?¡ dkZ@dZAi e&eƒ “e'edd�“eedd�“ejBedd�“e!edd�“e!jedd�“e$jCedd�“e"jDedd�“e"jEedd�“e"jFeddd�“e"jGeddd�“e"jHedd�“e"jIeddd�“e"jJed d�“e"jKed d�“e"jLedd�“e"jMed!d�“e%ed"d�e#edd�e jNed#d�e jOedd�e jPedd$�e jQeddd�e jRedd$�e jed#d�eed dd�i	¥ZSee>ef eTd%< i e&eƒ “e'ed&d�“eedd�“ejBed'd�“e!ed!d�“e!jed'd�“e$jCed(d�“e"jDed'd�“e"jEed)d�“e"jFed'dd�“e"jGed)dd�“e"jHed'd�“e"jIed(dd�“e"jJed#d�“e"jKed#d�“e"jLed'd�“e"jMed!d�“e%ed"d�e#ed!d�e jNed#d�e jOed)d�e jPedd$�e jQed(dd�e jRedd$�e jed#d�eed dd�i	¥ZUee>ef eTd*< eSeUd+œZVG d,d-„ d-eƒZWG d.d/„ d/eWƒZXG d0d1„ d1eWƒZYG d2d3„ d3e5ƒZZe[d4k�rd dl\Z\d dl]Z]e\j^d5d6�Z_e_j`d7d8d9d:� e_j`d;d<d=d>dd?d@� e_j`dAdBdCd>dDdEd@� e_j`dFdGdHd>dIdJ� e_j`dKdLeadMddNdO� e_j`dPdQdRd>dDdSd@� e_j`dTdUd>dVdDdWdX� e_j`dYdZd[dd\d]� e_j`d^d_d`ddad]� e_j`dbdcdddedfdg� e_ b¡ Zcd dhldm0Z0 e0ecjeecjfdi�Z/ecjgdjk�rçe]jh i¡ ZjeZejecjkecjlecjmecjnecjoecjpdk�ZqneZjrecjgecjlecjmecjnecjoecjpdl�Zqe/jseqecjtdm� dS dS )né    N)ÚLines)ÚABCÚabstractmethod)	ÚAnyÚDictÚIterableÚListÚOptionalÚSetÚTupleÚTypeÚUnion)ÚLexer)Úget_lexer_by_nameÚguess_lexer_for_filename)ÚStyle)Úget_style_by_name)
ÚCommentÚErrorÚGenericÚKeywordÚNameÚNumberÚOperatorÚStringÚTokenÚ
Whitespace)ÚClassNotFoundé   )Ú
loop_first)ÚColorÚ	blend_rgb)ÚConsoleÚConsoleOptionsÚJustifyMethodÚRenderResult)ÚJupyterMixin)ÚMeasurement)ÚSegment)ÚText.ÚWindowsÚmonokaiÚwhite©ÚcolorT©ÚdimÚcyanÚblueÚmagentaÚgreen)r.   Ú	underline)r.   ÚboldÚredÚbright_blueÚyellowÚ
bright_red)r6   Ú
ANSI_LIGHTÚbright_blackÚbright_cyanÚbright_magentaÚbright_greenÚ	ANSI_DARK)Ú
ansi_lightÚ	ansi_darkc                   @   s8   e Zd ZdZededefdd„ƒZedefdd„ƒZdS )	ÚSyntaxThemezBase class for a syntax theme.Ú
token_typeÚreturnc                 C   ó   t ‚)z'Get a style for a given Pygments token.©ÚNotImplementedError)ÚselfrD   © rJ   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pip/_vendor/rich/syntax.pyÚget_style_for_tokenk   ó   zSyntaxTheme.get_style_for_tokenc                 C   rF   )zGet the background color.rG   ©rI   rJ   rJ   rK   Úget_background_stylep   rM   z SyntaxTheme.get_background_styleN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	TokenTyper   rL   rO   rJ   rJ   rJ   rK   rC   h   s    rC   c                   @   sN   e Zd ZdZdeeee f ddfdd„Zde	de
fdd	„Zde
fd
d„ZdS )ÚPygmentsSyntaxThemez.Syntax theme that delegates to Pygments theme.ÚthemerE   Nc                 C   s^   i | _ t|tƒrzt|ƒ| _W n ty   tdƒ| _Y nw || _| jj| _t| jd�| _	d S )NÚdefault©Úbgcolor)
Ú_style_cacheÚ
isinstanceÚstrr   Ú_pygments_style_classr   Úbackground_colorÚ_background_colorr   Ú_background_style)rI   rV   rJ   rJ   rK   Ú__init__y   s   
ÿ
zPygmentsSyntaxTheme.__init__rD   c                 C   s    z| j | W S  tyO   z| j |¡}W n ty"   t ¡ }Y n%w |d }|d }t|r2d| nd|r9d| n| j|d |d |d d�}|| j |< Y |S w )	z"Get a style from a Pygments class.r.   rY   ú#z#000000r6   Úitalicr5   )r.   rY   r6   rc   r5   )rZ   ÚKeyErrorr]   Ústyle_for_tokenr   Únullr_   )rI   rD   Úpygments_styleÚstyler.   rY   rJ   rJ   rK   rL   †   s(   ÿûðz'PygmentsSyntaxTheme.get_style_for_tokenc                 C   ó   | j S ©N©r`   rN   rJ   rJ   rK   rO   œ   ó   z(PygmentsSyntaxTheme.get_background_style)rP   rQ   rR   rS   r   r\   r   ÚPygmentsStylera   rT   r   rL   rO   rJ   rJ   rJ   rK   rU   v   s
    rU   c                   @   sJ   e Zd ZdZdeeef ddfdd„Zdedefdd	„Zdefd
d„Z	dS )ÚANSISyntaxThemez$Syntax theme to use standard colors.Ú	style_maprE   Nc                 C   s$   || _ t ¡ | _t ¡ | _i | _d S rj   )ro   r   rf   Ú_missing_styler`   rZ   )rI   ro   rJ   rJ   rK   ra   £   s   


zANSISyntaxTheme.__init__rD   c                 C   sn   z| j | W S  ty6   | jj}t|ƒ}| j}|r-||ƒ}|dur%|}n|dd… }|s|| j |< | Y S w )zLook up style in the style map.Néÿÿÿÿ)rZ   rd   ro   ÚgetÚtuplerp   )rI   rD   Ú	get_styleÚtokenrh   Ú_stylerJ   rJ   rK   rL   ©   s    û
òz#ANSISyntaxTheme.get_style_for_tokenc                 C   ri   rj   rk   rN   rJ   rJ   rK   rO   ½   rl   z$ANSISyntaxTheme.get_background_style)
rP   rQ   rR   rS   r   rT   r   ra   rL   rO   rJ   rJ   rJ   rK   rn       s
    rn   c                   @   s  e Zd ZU dZee ed< eed< ede	e
ef defdd„ƒZeddd	d
d
d
ddd
ddœde
de	ee
f de	e
ef dedededeeeef  deee  dee dededee
 dedd
fdd„Zededdd
d	d
d
ddd
dfde
de
de	e
ef dededeeeef  dedeee  dee dededee
 dedd fdd „ƒZdefd!d"„Zd#edee fd$d%„Zedee fd&d'„ƒZ	
d;de
deeeef  defd(d)„Zd<d+edefd,d-„Zedefd.d/„ƒZ d0e!deeeef fd1d2„Z"	0	3	4	5		6d=d7d8„Z#d0e!d4e$de%fd9d:„Z&d
S )>ÚSyntaxaÙ  Construct a Syntax object to render syntax highlighted code.

    Args:
        code (str): Code to highlight.
        lexer (Lexer | str): Lexer to use (see https://pygments.org/docs/lexers/)
        theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "monokai".
        dedent (bool, optional): Enable stripping of initial whitespace. Defaults to False.
        line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False.
        start_line (int, optional): Starting number for line numbers. Defaults to 1.
        line_range (Tuple[int, int], optional): If given should be a tuple of the start and end line to render.
        highlight_lines (Set[int]): A set of line numbers to highlight.
        code_width: Width of code to render (not including line numbers), or ``None`` to use all available width.
        tab_size (int, optional): Size of tabs. Defaults to 4.
        word_wrap (bool, optional): Enable word wrapping.
        background_color (str, optional): Optional background color, or None to use theme color. Defaults to None.
        indent_guides (bool, optional): Show indent guides. Defaults to False.
    r]   Ú_themeÚnamerE   c                 C   s2   t |tƒr|S |tv rtt| ƒ}|S t|ƒ}|S )zGet a syntax theme instance.)r[   rC   ÚRICH_SYNTAX_THEMESrn   rU   )Úclsry   rV   rJ   rJ   rK   Ú	get_theme×   s   
ÿzSyntax.get_themeFr   Né   )rV   ÚdedentÚline_numbersÚ
start_lineÚ
line_rangeÚhighlight_linesÚ
code_widthÚtab_sizeÚ	word_wrapr^   Úindent_guidesÚcodeÚlexerrV   r~   r   r€   r�   r‚   rƒ   r„   r…   r^   r†   c                C   st   || _ || _|| _|| _|| _|| _|ptƒ | _|	| _|
| _	|| _
|| _|r+t|d�ntƒ | _|| _|  |¡| _d S )NrX   )r‡   Ú_lexerr~   r   r€   r�   Úsetr‚   rƒ   r„   r…   r^   r   Úbackground_styler†   r|   rx   )rI   r‡   rˆ   rV   r~   r   r€   r�   r‚   rƒ   r„   r…   r^   r†   rJ   rJ   rK   ra   ã   s   ÿzSyntax.__init__zutf-8ÚpathÚencodingc                 C   sÔ   t |d|d��}| ¡ }W d  ƒ n1 sw   Y  d}d}ztj |¡\}}|r8| d¡ ¡ }t|ƒ}|j}W n	 t	yB   Y nw |du rYzt
||ƒj}W n	 t	yX   Y nw | |||||||||	|
|||d�S )a?  Construct a Syntax object from a file.

        Args:
            path (str): Path to file to highlight.
            encoding (str): Encoding of file.
            theme (str, optional): Color theme, aka Pygments style (see https://pygments.org/docs/styles/#getting-a-list-of-available-styles). Defaults to "emacs".
            dedent (bool, optional): Enable stripping of initial whitespace. Defaults to True.
            line_numbers (bool, optional): Enable rendering of line numbers. Defaults to False.
            start_line (int, optional): Starting number for line numbers. Defaults to 1.
            line_range (Tuple[int, int], optional): If given should be a tuple of the start and end line to render.
            highlight_lines (Set[int]): A set of line numbers to highlight.
            code_width: Width of code to render (not including line numbers), or ``None`` to use all available width.
            tab_size (int, optional): Size of tabs. Defaults to 4.
            word_wrap (bool, optional): Enable word wrapping of code.
            background_color (str, optional): Optional background color, or None to use theme color. Defaults to None.
            indent_guides (bool, optional): Show indent guides. Defaults to False.

        Returns:
            [Syntax]: A Syntax object that may be printed to the console
        Úrt)r�   NrW   Ú.)rV   r~   r   r�   r€   r‚   rƒ   r„   r…   r^   r†   )ÚopenÚreadÚosrŒ   ÚsplitextÚlstripÚlowerr   ry   r   r   )r{   rŒ   r�   rV   r~   r   r�   r€   r‚   rƒ   r„   r…   r^   r†   Ú	code_filer‡   rˆ   Ú
lexer_nameÚ_ÚextÚ	extensionrJ   rJ   rK   Ú	from_path  sH   %
ÿ€ÿÿózSyntax.from_pathc                 C   s   | j  ¡ | j }|S )zGet the base style.)rx   rO   r‹   )rI   Údefault_stylerJ   rJ   rK   Ú_get_base_styleO  s   zSyntax._get_base_stylerD   c                 C   s   | j  |¡}|jS )zÞGet a color (if any) for the given token.

        Args:
            token_type (TokenType): A token type tuple from Pygments.

        Returns:
            Optional[Color]: Color from theme, or None for no color.
        )rx   rL   r.   )rI   rD   rh   rJ   rJ   rK   Ú_get_token_colorT  s   	zSyntax._get_token_colorc                 C   s>   t | jtƒr	| jS zt| jdd| jd�W S  ty   Y dS w )z–The lexer for this syntax, or None if no lexer was found.

        Tries to find the lexer by name if a string was passed to the constructor.
        FT)ÚstripnlÚensurenlÚtabsizeN)r[   r‰   r   r   r„   r   rN   rJ   rJ   rK   rˆ   `  s   üÿzSyntax.lexerc                    sð   |   ¡ }|jr	dnd}t||| j| j d�}| jj‰ | j‰ˆdu r(| ˆ¡ |S |rY|\‰‰dt	t
ttf  f‡‡fdd„‰dt	t
ttt f  f‡ ‡‡‡fdd	„}| |ƒ ¡ n| ‡ fd
d„ˆ ˆ¡D ƒ¡ | jdurv| d| j› �¡ |S )a  Highlight code and return a Text instance.

        Args:
            code (str): Code to highlight.
            line_range(Tuple[int, int], optional): Optional line range to highlight.

        Returns:
            Text: A text instance containing highlighted syntax.
        rW   Úleft)Újustifyrh   r„   Úno_wrapNrE   c                  3   sH   � ˆsJ ‚ˆ  ˆ ¡D ]\} }|r!| d¡\}}}| || fV  |sq
dS )zSplit tokens to one per line.Ú
N)Ú
get_tokensÚ	partition)rD   ru   Ú
line_tokenÚnew_line)r‡   rˆ   rJ   rK   Úline_tokenize—  s   €þ€ÿz'Syntax.highlight.<locals>.line_tokenizec                  3   s�   � t ˆƒ ƒ} d}ˆd }||k r(t| ƒ\}}|dfV  | d¡r$|d7 }||k s| D ]\}}|ˆ |ƒfV  | d¡rE|d7 }|ˆkrE dS q*dS )zConvert tokens to spans.r   r   Nr¥   )ÚiterÚnextÚendswith)ÚtokensÚline_noÚ_line_startÚ_token_typeru   rD   )Ú_get_theme_styleÚline_endÚ
line_startrª   rJ   rK   Útokens_to_spans   s$   €


ü
€ûz)Syntax.highlight.<locals>.tokens_to_spansc                 3   s    � | ]\}}|ˆ |ƒfV  qd S rj   rJ   )Ú.0rD   ru   )r²   rJ   rK   Ú	<genexpr>·  s
   € 
ÿ
ÿz#Syntax.highlight.<locals>.<genexpr>zon )r�   Útransparent_backgroundr)   r„   r…   rx   rL   rˆ   Úappendr   r   r   r\   r	   r   Úappend_tokensr¦   r^   Ústylize)rI   r‡   r�   Ú
base_styler£   Útextrµ   rJ   )r²   r‡   rˆ   r³   r´   rª   rK   Ú	highlights  s2   ÿü
-Õ (	þ
zSyntax.highlightç333333Ó?Úblendc                 C   sr   | j  ¡ | j }|j}|d u s|jrt ¡ S |  tj	¡}|d u s#|jr)|p(t ¡ S t
| ¡ | ¡ |d�}t |¡S )N)Ú
cross_fade)rx   rO   r‹   rY   Úis_system_definedr    rW   rž   r   r)   r!   Úget_truecolorÚfrom_triplet)rI   rÀ   r‹   r^   Úforeground_colorÚ	new_colorrJ   rJ   rK   Ú_get_line_numbers_color¿  s   ý
zSyntax._get_line_numbers_colorc                 C   s,   d}| j rtt| j| j d¡ ƒƒd }|S )z?Get the number of characters used to render the numbers column.r   r¥   é   )r   Úlenr\   r€   r‡   Úcount)rI   Úcolumn_widthrJ   rJ   rK   Ú_numbers_column_widthÎ  s   zSyntax._numbers_column_widthÚconsolec              	   C   s¨   |   ¡ }|jrt ¡ tdd�t ¡ fS |jdv rAt || j tj	¡t|  
¡ d�| j¡}t || j tj	¡td|  
d¡d�| j¡}n|tdd� }|tdd� }|||fS )z>Get background, number, and highlight styles for line numbers.Tr/   )Ú256Ú	truecolorr-   gÍÌÌÌÌÌì?)r6   r.   F)r�   r¸   r   rf   Úcolor_systemÚchainrx   rL   r   r)   rÇ   r‹   )rI   rÍ   r‹   Únumber_styleÚhighlight_number_stylerJ   rJ   rK   Ú_get_number_stylesÖ  s&   
üü
zSyntax._get_number_stylesr"   Úoptionsr#   r'   c                 C   s0   | j d ur| j | j }t| j|ƒS t| j|jƒS rj   )rƒ   rÌ   r'   Ú	max_width)rI   rÍ   rÕ   ÚwidthrJ   rJ   rK   Ú__rich_measure__í  s   
zSyntax.__rich_measure__c                  c   sj  � |   ¡ j}| jd u r| jr|j| j d n|jn| j}d}| jr-| j\}}td|d ƒ}| j 	d¡}|r8| jn| jd }	| j
rEt 
|	¡n|	}	|	 | j¡}	|  |	| j¡}
|  |¡\}}}| js¾| js¾| js¾|sl|
 d¡ |   ¡ | j t¡ tdd� | j }| jr�|js�|
j| j|d�}
d|
_|jr¢|j|
|j|d�d	�E d H  d S |j|
|j|d d
�| jddd�}|D ]}|E d H  q´d S |
jd|d�}| jrÎ|||… }| jrø|jsø|   ¡ | j t¡ tdd� | j }tdƒ  |¡j| j|d�jddd�}| j}|j|d�}| j!j"}t#}|d| d |ƒ}|dƒ}|j$�rdnd}t%|| j&| ƒD ]Ž\}}| j�r;|j||jd d�|| d�}nt'|j|dd�ƒ}|j(�rL|g}n|j)||j|| d�g}| j�r£t*|ƒD ]@\}}|�r”t+|ƒ ,|d ¡d }||ƒ�r‡||tdd�ƒV  |||ƒV  n|d|ƒV  |||ƒV  n|V  |E d H  |V  �q`�q$|D ]}|E d H  |V  �q¥�q$d S )Nr   r   r¥   Tr/   )rh   Úcrop)r×   )rÕ   )r×   Úheight)rh   ÚpadÚ	new_lines)Úallow_blankú z> u   â�± )rÚ   )rh   rÛ   Ú )ÚendrÈ   r7   r-   z  )-r�   r¸   rƒ   r   rÖ   rÌ   r�   Úmaxr‡   r­   r~   ÚtextwrapÚ
expandtabsr„   r¾   rÔ   r…   Úremove_suffixrx   rL   r   r   r‹   r†   Ú
ascii_onlyÚwith_indent_guidesÚoverflowÚrenderÚupdateÚrender_linesÚsplitr)   Újoinr‚   Ú__contains__r(   Úlegacy_windowsÚ	enumerater€   Úlistr¤   Úadjust_line_lengthr   r\   Úrjust) rI   rÍ   rÕ   r¸   rƒ   Úline_offsetr€   Úend_lineÚ
ends_on_nlr‡   r½   r‹   rÒ   rÓ   rh   Úsyntax_linesÚsyntax_lineÚlinesÚnumbers_column_widthÚrender_optionsÚhighlight_lineÚ_SegmentÚpaddingr©   Úline_pointerr¯   ÚlineÚwrapped_linesÚsegmentsÚfirstÚwrapped_lineÚline_columnrJ   rJ   rK   Ú__rich_console__õ  sâ   €

ýÿù

ü

ÿþýÿÿ÷û
ÿþýÿþýÿ
üüÿ


ô

þÛzSyntax.__rich_console__rj   )r¿   )rÍ   r"   rÕ   r#   rE   r'   )'rP   rQ   rR   rS   r   rm   Ú__annotations__rC   Úclassmethodr   r\   r|   ÚDEFAULT_THEMEr   ÚboolÚintr	   r   r
   ra   r›   r   r�   rT   r    rž   Úpropertyrˆ   r)   r¾   ÚfloatrÇ   rÌ   r"   rÔ   rØ   r#   r%   r  rJ   rJ   rJ   rK   rw   Á   sì   
 ñþ
ý
ûúùø	÷

öõôóòñ
ð#òþý
üûúùø
	÷
öõôóòñHÿÿÿ
þLÿÿ
þÿÿþrw   Ú__main__z&Render syntax to the console with Rich)ÚdescriptionrŒ   ÚPATHzpath to file, or - for stdin)ÚmetavarÚhelpz-cz--force-colorÚforce_colorÚ
store_truezforce color for non-terminals)ÚdestÚactionrW   r  z-iz--indent-guidesr†   Fzdisplay indent guidesz-lz--line-numbersr   zrender line numbers)r  r  r  z-wz--widthr×   z*width of output (default will auto-detect))Útyper  rW   r  z-rz--wrapr…   zword wrap long linesz-sz--soft-wrapÚ	soft_wrapzenable soft wrapping mode)r  r  rW   r  z-tz--themerV   zpygments theme)r  rW   r  z-bz--background-colorr^   zOverride background colorz-xz--lexerrW   r—   z
Lexer name)rW   r  r  )r"   )Úforce_terminalr×   ú-)r‡   rˆ   r   r…   rV   r^   r†   )r   r…   rV   r^   r†   )r  )uÚos.pathr’   ÚplatformÚpip._vendor.rich.containersr   râ   Úabcr   r   Útypingr   r   r   r   r	   r
   r   r   r   Úpip._vendor.pygments.lexerr   Úpip._vendor.pygments.lexersr   r   Úpip._vendor.pygments.styler   rm   Úpip._vendor.pygments.stylesr   Úpip._vendor.pygments.tokenr   r   r   r   r   r   r   r   r   r   Úpip._vendor.pygments.utilr   Ú_loopr   r.   r    r!   rÍ   r"   r#   r$   r%   Újupyterr&   Úmeasurer'   Úsegmentr(   rh   r½   r)   r\   rT   ÚsystemÚWINDOWSr  ÚPreprocÚWordÚBuiltinÚFunctionÚ	NamespaceÚClassÚ	ExceptionÚ	DecoratorÚVariableÚConstantÚ	AttributeÚTagÚDeletedÚInsertedÚHeadingÚ
SubheadingÚPromptr;   r  r@   rz   rC   rU   rn   rw   rP   ÚargparseÚsysÚArgumentParserÚparserÚadd_argumentr
  Ú
parse_argsÚargsÚpip._vendor.rich.consoler  r×   rŒ   Ústdinr‘   r‡   r—   r   r…   rV   r^   r†   Úsyntaxr›   Úprintr  rJ   rJ   rJ   rK   Ú<module>   s¸  
 ,0ÿ
þ
ýü
ûúùø	÷
öõôóòñðï

æÿ
þ
ýü
ûúùø	÷
öõôóòñðï

æ
*!   
:ÿýúúûúúú
ÿûû
ù
ú™