a
    hbòf;U  ã                   @   sZ  d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
zddlmZmZmZ dZW n eyr   dZY n0 zddlZW n6 ey¶   zddlZW n ey°   dZY n0 Y n0 g d¢Zg d	¢d
dgdgddgdœZdZdZdZG dd„ deƒZG dd„ deƒZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZdS )!zÏ
    pygments.formatters.img
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for Pixmap output.

    :copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
    :license: BSD, see LICENSE for details.
é    N)Ú	Formatter)Úget_bool_optÚget_int_optÚget_list_optÚget_choice_opt)ÚImageÚ	ImageDrawÚ	ImageFontTF)ÚImageFormatterÚGifImageFormatterÚJpgImageFormatterÚBmpImageFormatter)Ú ZRomanZBookZNormalZRegularZMediumZObliqueZItalicZBoldzBold ObliquezBold Italic)ÚNORMALÚITALICÚBOLDÚ
BOLDITALICzDejaVu Sans MonozCourier NewZMenloc                   @   s   e Zd ZdZdS )ÚPilNotAvailablez,When Python imaging library is not availableN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   ú`/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/pip/_vendor/pygments/formatters/img.pyr   5   s   r   c                   @   s   e Zd ZdZdS )ÚFontNotFoundz(When there are no usable fonts specifiedNr   r   r   r   r   r   9   s   r   c                   @   sd   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zddd„Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )ÚFontManagerz>
    Manages a set of fonts: normal, italic, bold, etc...
    é   c                 C   sn   || _ || _i | _d | _tj d¡r8|s.t| _ |  ¡  n2tj d¡rX|sNt	| _ |  
¡  n|sbt| _ |  ¡  d S )NÚwinÚdarwin)Ú	font_nameÚ	font_sizeÚfontsÚencodingÚsysÚplatformÚ
startswithÚDEFAULT_FONT_NAME_WINÚ_create_winÚDEFAULT_FONT_NAME_MACÚ_create_macÚDEFAULT_FONT_NAME_NIXÚ_create_nix)Úselfr    r!   r   r   r   Ú__init__B   s    

zFontManager.__init__c           	      C   sz   t jdd||f dgt jd d�}| ¡ \}}|jdkrv| ¡ }|D ].}| d¡rRqB| ¡  ¡  d¡}|rB|  S qBd S d S )Nzfc-listz%s:style=%sÚfile)ÚstdoutÚstderrr   s   Fontconfig warning:ú:)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚ
splitlinesr&   ÚdecodeÚstrip)	r-   ÚnameÚstyleÚprocr0   Ú_ÚlinesÚlineÚpathr   r   r   Ú_get_nix_font_pathT   s    ÿ


zFontManager._get_nix_font_pathc                 C   s¾   t d D ]2}|  | j|¡}|d urt || j¡| jd<  qJqtd| j ƒ‚dD ]j}t | D ]2}|  | j|¡}|d urZt || j¡| j|<  qNqZ|dkr¨| jd | j|< qN| jd | j|< qNd S )Nr   úNo usable fonts named: "%s"©r   r   r   r   r   )ÚSTYLESrB   r    r	   Útruetyper!   r"   r   )r-   r;   rA   r<   Ú	stylenamer   r   r   r,   b   s"    ÿzFontManager._create_nixc                 C   s   |  |d |  ¡  ¡ ¡S )Nú )Úgetr:   Úlower)r-   Úfont_mapr;   r<   r   r   r   Ú_get_mac_font_pathw   s    zFontManager._get_mac_font_pathc                    s  i }t j t  d¡d¡ddfD ]"‰ | ‡ fdd„t  ˆ ¡D ƒ¡ qtd D ]4}|  || j|¡}|d urJt	 
|| j¡| jd<  qŽqJtd| j ƒ‚d	D ]l}t| D ]4}|  || j|¡}|d uržt	 
|| j¡| j|<  q’qž|d
krî| jd | j|< q’| jd | j|< q’d S )NÚHOMEzLibrary/Fonts/z/Library/Fonts/z/System/Library/Fonts/c                 3   s>   | ]6}|  ¡  d ¡rtj |¡d   ¡ tj ˆ |¡fV  qdS ))ZttfZttcr   N)rJ   ÚendswithÚosrA   ÚsplitextÚjoin)Ú.0Úf©Zfont_dirr   r   Ú	<genexpr>~   s   þz*FontManager._create_mac.<locals>.<genexpr>r   rC   rD   r   r   )rO   rA   rQ   ÚgetenvÚupdateÚlistdirrE   rL   r    r	   rF   r!   r"   r   )r-   rK   r;   rA   r<   rG   r   rT   r   r*   z   s0    ÿþ
ÿzFontManager._create_macFc           
   
   C   s|   dD ]Z}|D ]P}z4d||o d| |f }t  ||¡\}}	|W     S  tyZ   Y qY q0 qq|rxtd||d f ƒ‚d S )N)r   z (TrueType)z%s%s%srH   z"Font %s (%s) not found in registryr   )Ú_winregÚQueryValueExÚOSErrorr   )
r-   ÚkeyÚbasenameÚstylesZfailÚsuffixr<   ZvalnameÚvalr>   r   r   r   Ú_lookup_win—   s    
ÿzFontManager._lookup_winc                 C   sX  d }t jdft jdft jdft jdfg}|D �]}zøt j|Ž }zÜz¢|  || jtd d¡}t || j	¡| j
d< dD ]\}|  || jt| ¡}|r¢t || j	¡| j
|< qp|dkr¼| j
d | j
|< qp| j
d | j
|< qpW W t  |¡ W  d S  t�y } z|}W Y d }~n
d }~0 0 W t  |¡ nt  |¡ 0 W q, t�y>   Y q,0 q,|�rL|‚tdƒ‚d S )	Nz2Software\Microsoft\Windows NT\CurrentVersion\Fontsz/Software\Microsoft\Windows\CurrentVersion\Fontsr   TrD   r   r   z$Can't open Windows font registry key)rY   ÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚOpenKeyra   r    rE   r	   rF   r!   r"   ZCloseKeyr   r[   )r-   ZlookuperrorZkeynamesZkeynamer\   rA   r<   Úerrr   r   r   r(   ¦   s<    ý


üzFontManager._create_winc                 C   s   | j d  d¡S )z)
        Get the character size.
        r   ÚM©r"   Úgetsize©r-   r   r   r   Úget_char_sizeÍ   s    zFontManager.get_char_sizec                 C   s   | j d  |¡S )z3
        Get the text size(width, height).
        r   rg   )r-   Útextr   r   r   Úget_text_sizeÓ   s    zFontManager.get_text_sizec                 C   s<   |r|r| j d S |r | j d S |r.| j d S | j d S dS )z>
        Get the font based on bold and italic flags.
        r   r   r   r   N)r"   )r-   ÚboldZobliquer   r   r   Úget_fontÙ   s    


zFontManager.get_fontN)r   )F)r   r   r   r   r.   rB   r,   rL   r*   ra   r(   rj   rl   rn   r   r   r   r   r   =   s   

'r   c                   @   s¼   e Zd ZdZdZg d¢ZdgZdZdZdd„ Z	d-d
d„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,S ).r
   aÅ	  
    Create a PNG image from source code. This uses the Python Imaging Library to
    generate a pixmap from the source code.

    .. versionadded:: 0.10

    Additional options accepted:

    `image_format`
        An image format to output to that is recognised by PIL, these include:

        * "PNG" (default)
        * "JPEG"
        * "BMP"
        * "GIF"

    `line_pad`
        The extra spacing (in pixels) between each line of text.

        Default: 2

    `font_name`
        The font name to be used as the base font from which others, such as
        bold and italic fonts will be generated.  This really should be a
        monospace font to look sane.

        Default: "Courier New" on Windows, "Menlo" on Mac OS, and
                 "DejaVu Sans Mono" on \*nix

    `font_size`
        The font size in points to be used.

        Default: 14

    `image_pad`
        The padding, in pixels to be used at each edge of the resulting image.

        Default: 10

    `line_numbers`
        Whether line numbers should be shown: True/False

        Default: True

    `line_number_start`
        The line number of the first line.

        Default: 1

    `line_number_step`
        The step used when printing line numbers.

        Default: 1

    `line_number_bg`
        The background colour (in "#123456" format) of the line number bar, or
        None to use the style background color.

        Default: "#eed"

    `line_number_fg`
        The text color of the line numbers (in "#123456"-like format).

        Default: "#886"

    `line_number_chars`
        The number of columns of line numbers allowable in the line number
        margin.

        Default: 2

    `line_number_bold`
        Whether line numbers will be bold: True/False

        Default: False

    `line_number_italic`
        Whether line numbers will be italicized: True/False

        Default: False

    `line_number_separator`
        Whether a line will be drawn between the line number area and the
        source code area: True/False

        Default: True

    `line_number_pad`
        The horizontal padding (in pixels) between the line number margin, and
        the source code area.

        Default: 6

    `hl_lines`
        Specify a list of lines to be highlighted.

        .. versionadded:: 1.2

        Default: empty list

    `hl_color`
        Specify the color for highlighting lines.

        .. versionadded:: 1.2

        Default: highlight color of the selected style
    Úimg)ro   ZIMGÚpngz*.pngFrp   c              	   K   sÔ  t stdƒ‚tj| fi |¤Ž d| _t| jƒ| _| jjdu rDd| _n
| jj| _t	|dg d¢| j
dd�| _t|d	d
ƒ| _t|ddƒ| _t|ddƒ}t| dd¡|ƒ| _| j ¡ \| _| _| dd¡| _| dd¡| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _t|ddƒ| _| j�rd| j| j | jd  | _ nd | _ g | _!t"|d!g ƒ}|D ]0}z| j! #t$|ƒ¡ W n t%�y¬   Y n0 �q€| d"| jj&¡�pÆd#| _'g | _(dS )$zE
        See the class docstring for explanation of options.
        z5Python Imaging Library is required for this formatterÚlatin1Nz#fffÚimage_format)rp   ÚjpegÚgifÚbmpT)ÚnormcaseÚ	image_padé
   Úline_padé   r!   r   r    r   Úline_number_fgz#886Úline_number_bgz#eedÚline_number_charsÚline_number_boldFÚline_number_italicÚline_number_padé   Úline_numbersÚline_number_separatorÚline_number_stepé   Úline_number_startr   Úhl_linesÚhl_colorz#f90))Úpil_availabler   r   r.   r#   Údictr<   r^   Úbackground_colorr   Údefault_image_formatrr   r   rw   ry   r   rI   r"   rj   ÚfontwÚfonthr{   r|   r}   r   r~   r   r€   r‚   rƒ   r„   r†   Úline_number_widthr‡   r   ÚappendÚintÚ
ValueErrorÚhighlight_colorrˆ   Ú	drawables)r-   ÚoptionsZfontsizeZhl_lines_strr@   r   r   r   r.   ]  sn    ÿ

þÿÿÿÿ
ÿ
ÿÿzImageFormatter.__init__r   c                 C   s   t dƒ‚d S )NzWThe -S option is meaningless for the image formatter. Use -O style=<stylename> instead.)ÚNotImplementedError)r-   Úargr   r   r   Úget_style_defs•  s    zImageFormatter.get_style_defsc                 C   s   | j | j S )z+
        Get the height of a line.
        )rŽ   ry   ri   r   r   r   Ú_get_line_height™  s    zImageFormatter._get_line_heightc                 C   s   ||   ¡  | j S )z8
        Get the Y coordinate of a line number.
        )r™   rw   ©r-   Úlinenor   r   r   Ú_get_line_yŸ  s    zImageFormatter._get_line_yc                 C   s   | j S )z/
        Get the width of a character.
        )r�   ri   r   r   r   Ú_get_char_width¥  s    zImageFormatter._get_char_widthc                 C   s   || j  | j S )z?
        Get the X coordinate of a character position.
        )rw   r�   )r-   Ú
linelengthr   r   r   Ú_get_char_x«  s    zImageFormatter._get_char_xc                 C   s   |   |¡|  |¡fS )zL
        Get the actual position for a character and line position.
        )rŸ   rœ   )r-   rž   r›   r   r   r   Ú_get_text_pos±  s    zImageFormatter._get_text_posc                 C   s   | j |  |¡fS )zI
        Get the actual position for the start of a line number.
        )rw   rœ   rš   r   r   r   Ú_get_linenumber_pos·  s    z"ImageFormatter._get_linenumber_posc                 C   s"   |d durd|d  }nd}|S )zE
        Get the correct color for the token from the style.
        ÚcolorNú#z#000r   )r-   r<   Úfillr   r   r   Ú_get_text_color½  s    zImageFormatter._get_text_colorc                 C   s"   |d durd|d  }nd}|S )zP
        Get the correct background color for the token from the style.
        ÚbgcolorNr£   r   )r-   r<   Zbg_colorr   r   r   Ú_get_text_bg_colorÇ  s    z!ImageFormatter._get_text_bg_colorc                 C   s   | j  |d |d ¡S )z5
        Get the correct font for the style.
        rm   Úitalic)r"   rn   )r-   r<   r   r   r   Ú_get_style_fontÑ  s    zImageFormatter._get_style_fontc                 C   s$   |   |¡| j |  |d ¡| j fS )z.
        Get the required image size.
        r   )rŸ   rw   rœ   )r-   ÚmaxlinelengthÚ	maxlinenor   r   r   Ú_get_image_size×  s    ÿzImageFormatter._get_image_sizec                 C   s:   | j |  |¡t|ƒ | j¡| j | j| j¡| j	dd� dS )zA
        Remember a line number drawable to paint later.
        N©ÚfontÚtext_fgÚtext_bg)
Ú
_draw_textr¡   ÚstrÚrjustr}   r"   rn   r~   r   r{   )r-   Zposnor›   r   r   r   Ú_draw_linenumberÞ  s    
ÿúzImageFormatter._draw_linenumberc                 C   s   | j  |||||f¡ dS )zB
        Remember a single drawable tuple to paint later.
        N)r”   r�   )r-   Úposrk   r®   r¯   r°   r   r   r   r±   ë  s    zImageFormatter._draw_textc              
   C   s  d } }}d }}|D ]Ø\}}|| j vr2|j}q | j | }	| d¡}| d¡}
t|
ƒD ]–\}}| d¡}|rÔ| j|  ||¡||  |	¡|  	|	¡|  
|	¡d� | j |¡\}}||7 }t||ƒ}|t|ƒ7 }t||ƒ}| d¡rXd}d}|d7 }qXq|| _|| _|| _dS )z9
        Create drawables for the token content.
        r   é   TÚ
r­   r…   N)r^   ÚparentÚ
expandtabsr8   Ú	enumerateÚrstripr±   r    r©   r¥   r§   r"   rl   ÚmaxÚlenrN   rª   Ú	maxcharnor«   )r-   Útokensourcer›   Zcharnor¾   rª   rž   ÚttypeÚvaluer<   r?   Úir@   ÚtempZ
temp_widthZ
temp_hightr   r   r   Ú_create_drawablesñ  s<    





û


z ImageFormatter._create_drawablesc                 C   sB   | j s
dS t| jƒD ](}|| j }|| j dkr|  ||¡ qdS )z8
        Create drawables for the line numbers.
        Nr   )r‚   Úranger«   r†   r„   r´   )r-   ÚpÚnr   r   r   Ú_draw_line_numbers  s    
z!ImageFormatter._draw_line_numbersc                 C   s~   | j s
dS | jdu rdS t |¡}|jd }| j| j | j }|jd||fg| j	d� | j
rx|j|df||fg| jd� ~dS )z@
        Paint the line number background on the image.
        Néÿÿÿÿ)r   r   ©r¤   r   )r‚   r{   r   ÚDrawÚsizerw   r�   r€   Ú	rectangler|   rƒ   r@   )r-   ÚimÚdrawÚrecthÚrectwr   r   r   Ú_paint_line_number_bg$  s    


ÿz$ImageFormatter._paint_line_number_bgc                 C   s:  |   |¡ |  ¡  t d|  | j| j¡| j¡}|  |¡ t	 
|¡}| jr²| j| j | j d }|  ¡ }|jd | }| jD ]6}|  |d ¡}	|j||	f|| |	| fg| jd� qz| jD ]j\}
}}}}|�r|j||d�}|j|
d |
d |
d |d  |
d |d  g|d� |j|
|||d� q¸| || j ¡ ¡ dS )a   
        Format ``tokensource``, an iterable of ``(tokentype, tokenstring)``
        tuples and write it into ``outfile``.

        This implementation calculates where it should draw each token on the
        pixmap, then calculates the required pixmap size and draws the items.
        ÚRGBr…   r   rÊ   )rk   r®   )r®   r¤   N)rÄ   rÈ   r   Únewr¬   rª   r«   r‹   rÒ   r   rË   r‡   rw   r�   r€   r™   rÌ   rœ   rÍ   rˆ   r”   Ztextsizerk   Úsaverr   Úupper)r-   r¿   ÚoutfilerÎ   rÏ   ÚxrÐ   rÑ   Z
linenumberÚyrµ   rÁ   r®   r¯   r°   Z	text_sizer   r   r   Úformat5  s0    
ý


ÿ6zImageFormatter.formatN)r   )r   r   r   r   r;   ÚaliasesÚ	filenamesZunicodeoutputrŒ   r.   r˜   r™   rœ   r�   rŸ   r    r¡   r¥   r§   r©   r¬   r´   r±   rÄ   rÈ   rÒ   rÚ   r   r   r   r   r
   ç   s0   m8


(r
   c                   @   s$   e Zd ZdZdZdgZdgZdZdS )r   z�
    Create a GIF image from source code. This uses the Python Imaging Library to
    generate a pixmap from the source code.

    .. versionadded:: 1.0
    Zimg_gifrt   z*.gifN©r   r   r   r   r;   rÛ   rÜ   rŒ   r   r   r   r   r   Z  s
   r   c                   @   s&   e Zd ZdZdZddgZdgZdZdS )r   zž
    Create a JPEG image from source code. This uses the Python Imaging Library to
    generate a pixmap from the source code.

    .. versionadded:: 1.0
    Zimg_jpgZjpgrs   z*.jpgNrÝ   r   r   r   r   r   h  s
   r   c                   @   s&   e Zd ZdZdZddgZdgZdZdS )r   z 
    Create a bitmap image from source code. This uses the Python Imaging Library to
    generate a pixmap from the source code.

    .. versionadded:: 1.0
    Zimg_bmpru   Zbitmapz*.bmpNrÝ   r   r   r   r   r   v  s
   r   ) r   rO   r$   Zpip._vendor.pygments.formatterr   Úpip._vendor.pygments.utilr   r   r   r   r3   ZPILr   r   r	   r‰   ÚImportErrorrY   ÚwinregÚ__all__rE   r+   r'   r)   r   Ú	Exceptionr   r   r
   r   r   r   r   r   r   r   Ú<module>   sH   

ü +  u