a
    ibòfri  ã                7   @   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ZAe&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%< 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 )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                   @   s6   e Zd ZdZeeedœdd„ƒZeedœdd„ƒZdS )	ÚSyntaxThemezBase class for a syntax theme.©Ú
token_typeÚreturnc                 C   s   t ‚dS )z'Get a style for a given Pygments token.N©ÚNotImplementedError)ÚselfrE   © rJ   úT/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/rich/syntax.pyÚget_style_for_tokenk   s    zSyntaxTheme.get_style_for_token©rF   c                 C   s   t ‚dS )zGet the background color.NrG   ©rI   rJ   rJ   rK   Úget_background_stylep   s    z SyntaxTheme.get_background_styleN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú	TokenTyper   rL   rO   rJ   rJ   rJ   rK   rC   h   s
   rC   c                   @   sJ   e Zd ZdZeeee f ddœdd„Ze	e
dœdd„Ze
d	œd
d„ZdS )ÚPygmentsSyntaxThemez.Syntax theme that delegates to Pygments theme.N)ÚthemerF   c                 C   s`   i | _ t|tƒr>zt|ƒ| _W qD ty:   tdƒ| _Y qD0 n|| _| 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yœ   z| j |¡}W n tyD   t ¡ }Y nJ0 |d }|d }t|rdd| nd|rrd| n| j|d |d |d d�}|| j |< Y n0 |S )	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   rE   Úpygments_styleÚstyler.   rY   rJ   rJ   rK   rL   †   s$    ûz'PygmentsSyntaxTheme.get_style_for_tokenrM   c                 C   s   | j S ©N©r`   rN   rJ   rJ   rK   rO   œ   s    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                   @   sF   e Zd ZdZeeef ddœdd„Zeedœdd„Zed	œd
d„Z	dS )ÚANSISyntaxThemez$Syntax theme to use standard colors.N)Ú	style_maprF   c                 C   s$   || _ t ¡ | _t ¡ | _i | _d S ri   )rm   r   rf   Ú_missing_styler`   rZ   )rI   rm   rJ   rJ   rK   ra   £   s    

zANSISyntaxTheme.__init__rD   c                 C   sp   z| j | W S  tyj   | jj}t|ƒ}| j}|rX||ƒ}|durJ|}qX|dd… }q0|| j |< | Y S 0 dS )zLook up style in the style map.Néÿÿÿÿ)rZ   rd   rm   ÚgetÚtuplern   )rI   rE   Ú	get_styleÚtokenrh   Ú_stylerJ   rJ   rK   rL   ©   s    
z#ANSISyntaxTheme.get_style_for_tokenrM   c                 C   s   | j S ri   rj   rN   rJ   rJ   rK   rO   ½   s    z$ANSISyntaxTheme.get_background_style)
rP   rQ   rR   rS   r   rT   r   ra   rL   rO   rJ   rJ   rJ   rK   rl       s   rl   c                   @   sÔ  e Zd ZU dZee ed< eed< ee	e
ef edœdd„ƒZedddd	d	d	d
dd	ddœe
e	ee
f e	e
ef eeeeeeef  eee  ee eeee
 ed	dœdd„Zededdd	dd	d	d
dd	dfe
e
e	e
ef eeeeeef  eeee  ee eeee
 ed dœdd„ƒZedœdd„Zeee dœdd„Zeee dœdd„ƒZd/e
eeeef  edœdd„Zd0eedœd d!„Zeedœd"d#„ƒZ e!eeeef d$œd%d&„Z"d'd(d)d*œd+d,„Z#e!e$e%d*œd-d.„Z&d	S )1Ú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)ÚnamerF   c                 C   s0   t |tƒr|S |tv r$tt| ƒ}nt|ƒ}|S )zGet a syntax theme instance.)r[   rC   ÚRICH_SYNTAX_THEMESrl   rU   )Úclsrw   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„   rF   c                C   st   || _ || _|| _|| _|| _|| _|p,tƒ | _|	| _|
| _	|| _
|| _|rVt|d�ntƒ | _|| _|  |¡| _d S )NrX   )r…   Ú_lexerr|   r}   r~   r   Úsetr€   r�   r‚   rƒ   r^   r   Úbackground_styler„   rz   rv   )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ÚencodingrV   r|   r}   r   r~   r€   r�   r‚   rƒ   r^   r„   rF   c                 C   sÔ   t |d|d��}| ¡ }W d  ƒ n1 s,0    Y  d}d}z4tj |¡\}}|rp| d¡ ¡ }t|ƒ}|j}W n t	y„   Y n0 |du r²zt
||ƒj}W n t	y°   Y n0 | |||||||||	|
|||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   rw   r   r   )ry   rŠ   r‹   rV   r|   r}   r   r~   r€   r�   r‚   rƒ   r^   r„   Ú	code_filer…   r†   Ú
lexer_nameÚ_ÚextÚ	extensionrJ   rJ   rK   Ú	from_path  s@    %&
ózSyntax.from_pathrM   c                 C   s   | j  ¡ | j }|S )zGet the base style.)rv   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.
        )rv   rL   r.   )rI   rE   rh   rJ   rJ   rK   Ú_get_token_colorT  s    	zSyntax._get_token_colorc                 C   sB   t | jtƒr| jS zt| jdd| jd�W S  ty<   Y dS 0 dS )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.lexer)r…   r   rF   c                    sî   |   ¡ }|jrdnd}t||| j| j d�}| jj‰ | j‰ˆdu rN| ˆ¡ nœ|r°|\‰‰t	t
ttf  dœ‡‡fdd„‰t	t
ttt f  dœ‡ ‡‡‡fdd	„}| |ƒ ¡ n| ‡ fd
d„ˆ ˆ¡D ƒ¡ | jdurê| 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_wrapNrM   c                  3   sD   ˆsJ ‚ˆ  ˆ ¡D ],\} }|r| d¡\}}}| || fV  qqdS )zSplit tokens to one per line.Ú
N)Ú
get_tokensÚ	partition)rE   rs   Ú
line_tokenÚnew_line)r…   r†   rJ   rK   Úline_tokenize—  s
    z'Syntax.highlight.<locals>.line_tokenizec                  3   s†   t ˆƒ ƒ} d}ˆd }||k rHt| ƒ\}}|dfV  | d¡r|d7 }q| D ]4\}}|ˆ |ƒfV  | d¡rL|d7 }|ˆkrL q‚qLdS )zConvert tokens to spans.r   r   Nr£   )ÚiterÚnextÚendswith)ÚtokensÚline_noÚ_line_startÚ_token_typers   rE   )Ú_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 ri   rJ   )Ú.0rE   rs   )r°   rJ   rK   Ú	<genexpr>·  s   ÿz#Syntax.highlight.<locals>.<genexpr>zon )r›   Útransparent_backgroundr)   r‚   rƒ   rv   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  s0    ÿü 	(þ
zSyntax.highlightç333333Ó?)ÚblendrF   c                 C   sr   | j  ¡ | j }|j}|d u s$|jr,t ¡ S |  tj	¡}|d u sF|jrR|pPt ¡ S t
| ¡ | ¡ |d�}t |¡S )N)Ú
cross_fade)rv   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)ÚconsolerF   c              	   C   s¨   |   ¡ }|jr&t ¡ tdd�t ¡ fS |jdv r‚t || 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Úchainrv   rL   r   r)   rÅ   r‰   )rI   rË   r‰   Únumber_styleÚhighlight_number_stylerJ   rJ   rK   Ú_get_number_stylesÖ  s&    
üüzSyntax._get_number_stylesr"   r#   r'   )rË   ÚoptionsrF   c                 C   s0   | j d ur"| j | j }t| j|ƒS t| j|jƒS ri   )r�   rÊ   r'   Ú	max_width)rI   rË   rÓ   ÚwidthrJ   rJ   rK   Ú__rich_measure__í  s    
zSyntax.__rich_measure__c                  c   sz  |   ¡ j}| jd u r0| jr*|j| j d q4|jn| j}d}| jrX| j\}}td|d ƒ}| j 	d¡}|rn| jn| jd }	| j
rˆt 
|	¡n|	}	|	 | j¡}	|  |	| j¡}
|  |¡\}}}| j�s†| j�s†| j�s†|sÜ|
 d¡ |   ¡ | j t¡ tdd� | j }| j�r&|j�s&|
j| j|d�}
d|
_|j�rL|j|
|j|d�d	�E d H  n6|j|
|j|d d
�| jddd�}|D ]}|E d H  �qpd 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$�rDdnd}t%|| j&| ƒD �]\}}| j�rˆ|j||jd d�|| d�}n:t'|j|dd�ƒ}|j(�rª|g}n|j)||j|| d�g}| j�rVt*|ƒD ]€\}}|�r:t+|ƒ ,|d ¡d }||ƒ�r ||tdd�ƒV  |||ƒV  n|d|ƒV  |||ƒV  n|V  |E d H  |V  �qÒn|D ]}|E d H  |V  �qZ�qXd 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_suffixrv   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__)N)r½   )'rP   rQ   rR   rS   r   rk   Ú__annotations__rC   Úclassmethodr   r\   rz   Ú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   ru   Á   s    
ñ


ð#ò

ñH ÿþLþ	þru   Ú__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�   ÚplatformZ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   rk   Ú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@   rx   rC   rU   rl   ru   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>   sl  
,0




æ




æ
*!   :
ÿýúúûúúú
ÿûû
ù
ú