o
    Ñ­j[  ã                   @   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y9   dZY nw zddlZW n ey[   zddlZW n eyX   dZY nw Y nw 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-present 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)Ú ÚRomanÚBookÚNormalÚRegularÚMediumÚObliqueÚItalicÚBoldzBold ObliquezBold Italic)ÚNORMALÚITALICÚBOLDÚ
BOLDITALICzDejaVu Sans MonozCourier NewÚMenloc                   @   ó   e Zd ZdZdS )ÚPilNotAvailablez,When Python imaging library is not availableN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r#   r#   úT/var/www/html/CropPilot/venv/lib/python3.10/site-packages/pygments/formatters/img.pyr   4   ó    r   c                   @   r   )ÚFontNotFoundz(When there are no usable fonts specifiedNr   r#   r#   r#   r$   r&   8   r%   r&   c                   @   sl   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d„ ZdS )ÚFontManagerz>
    Manages a set of fonts: normal, italic, bold, etc...
    é   c                 C   sº   || _ || _i | _d | _d| _t|dƒstj |¡r0t	 
|| j¡}d| _tD ]}|| j|< q&d S tj d¡rA|s;t| _ |  ¡  d S tj d¡rR|sLt| _ |  ¡  d S |sWt| _ |  ¡  d S )NFÚreadTÚwinÚdarwin)Ú	font_nameÚ	font_sizeÚfontsÚencodingÚvariableÚhasattrÚosÚpathÚisfiler	   ÚtruetypeÚSTYLESÚsysÚplatformÚ
startswithÚDEFAULT_FONT_NAME_WINÚ_create_winÚDEFAULT_FONT_NAME_MACÚ_create_macÚDEFAULT_FONT_NAME_NIXÚ_create_nix)Úselfr,   r-   ÚfontÚstyler#   r#   r$   Ú__init__A   s,   zFontManager.__init__c           	      C   s|   t jd|› d|› �dgt jd d�}| ¡ \}}|jdkr<| ¡ }|D ]}| d¡r*q"| ¡  ¡  d¡}|r9|  S q"d S d S )Nzfc-listz:style=Úfile)ÚstdoutÚstderrr   s   Fontconfig warning:ú:)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚ
splitlinesr9   ÚdecodeÚstrip)	r@   ÚnamerB   ÚprocrE   Ú_ÚlinesÚliner3   r#   r#   r$   Ú_get_nix_font_path\   s   ÿ

ÿøzFontManager._get_nix_font_pathc                 C   sÂ   t d D ]}|  | j|¡}|d urt || j¡| jd<  n
qtd| j› d�ƒ‚dD ]5}t | D ]}|  | j|¡}|d urHt || j¡| j|<  nq/|dkrV| jd | j|< q)| jd | j|< q)d S )Nr   úNo usable fonts named: "ú"©r   r   r   r   r   )r6   rU   r,   r	   r5   r-   r.   r&   )r@   rP   r3   rB   Ú	stylenamer#   r#   r$   r?   j   s&   þþ€özFontManager._create_nixc                 C   s   |  |d |  ¡  ¡ ¡S )Nú )ÚgetrO   Úlower)r@   Úfont_maprP   rB   r#   r#   r$   Ú_get_mac_font_path~   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 ]}|  || j|¡}|d ur?t	 
|| j¡| jd<  n
q%td| j› d	�ƒ‚d
D ]6}t| D ]}|  || j|¡}|d urkt	 
|| j¡| j|<  nqQ|dkry| jd | j|< qK| jd | j|< qKd S )NÚHOMEzLibrary/Fonts/z/Library/Fonts/z/System/Library/Fonts/c                 3   sP   � | ]#\}}}|D ]}|  ¡  d ¡r	tj |¡d   ¡ tj ˆ |¡fV  q	qdS ))ÚttfÚttcr   N)r\   Úendswithr2   r3   ÚsplitextÚjoin)Ú.0rR   ÚfilesÚf©Úfont_dirr#   r$   Ú	<genexpr>…   s   € ýü ÿz*FontManager._create_mac.<locals>.<genexpr>r   rV   rW   rX   r   r   )r2   r3   rd   ÚgetenvÚupdateÚwalkr6   r^   r,   r	   r5   r-   r.   r&   )r@   r]   rP   r3   rB   rY   r#   rh   r$   r=   �   s4   ÿ
þþþ€özFontManager._create_macFc           
   
   C   s|   dD ]*}|D ]%}zd  ||od| |¡}t ||¡\}}	|W     S  ty+   Y qw q|r<td|› d|d › d�ƒ‚d S )N)r   z (TrueType)z{}{}{}rZ   zFont z (r   z) not found in registry)ÚformatÚ_winregÚQueryValueExÚOSErrorr&   )
r@   ÚkeyÚbasenameÚstylesÚfailÚsuffixrB   ÚvalnameÚvalrR   r#   r#   r$   Ú_lookup_winž   s   ÿûzFontManager._lookup_winc                 C   sJ  d }t jdft jdft jdft jdfg}|D ]†}z{t j|Ž }zmzQ|  || jtd d¡}t || j	¡| j
d< dD ].}|  || jt| ¡}|rPt || j	¡| j
|< q7|dkr]| j
d | j
|< q7| j
d | j
|< q7W W t  |¡ W  d S  ty„ } z|}W Y d }~nd }~ww W t  |¡ nt  |¡ w W q tyœ   Y qw |r¡|‚tdƒ‚)	Nz2Software\Microsoft\Windows NT\CurrentVersion\Fontsz/Software\Microsoft\Windows\CurrentVersion\Fontsr   TrX   r   r   z$Can't open Windows font registry key)ro   ÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚOpenKeyry   r,   r6   r	   r5   r-   r.   ÚCloseKeyr&   rq   )r@   ÚlookuperrorÚkeynamesÚkeynamerr   r3   rB   Úerrr#   r#   r$   r;   ¬   sB   ý
ý€ÿÿ	zFontManager._create_winc                 C   s
   |   d¡S )z)
        Get the character size.
        ÚM)Úget_text_size©r@   r#   r#   r$   Úget_char_sizeÓ   s   
zFontManager.get_char_sizec                 C   s0   | j d }t|dƒr| |¡dd… S | |¡S )z4
        Get the text size (width, height).
        r   Úgetbboxé   é   )r.   r1   r†   Úgetsize)r@   ÚtextrA   r#   r#   r$   rƒ   Ù   s   


zFontManager.get_text_sizec                 C   sx   |r|r| j r|  d¡S | jd S |r | j r|  d¡S | jd S |r/| j r*|  d¡S | jd S | j r7|  d¡S | jd S )z>
        Get the font based on bold and italic flags.
        r   r   r   r   )r0   Ú	get_styler.   )r@   ÚboldÚobliquer#   r#   r$   Úget_fontã   s   







zFontManager.get_fontc              	   C   sZ   | j | }t| D ]!}z
| |¡ |W   S  ty   Y q	 ty*   | Y   S w |S )z}
        Get the specified style of the font if it is a variable font.
        If not found, return the normal font.
        )r.   r6   Úset_variation_by_nameÚ
ValueErrorrq   )r@   rB   rA   Ú
style_namer#   r#   r$   r‹   ü   s   


ÿzFontManager.get_styleN)r(   )F)r   r    r!   r"   rC   rU   r?   r^   r=   ry   r;   r…   rƒ   rŽ   r‹   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.
        If a filename or a file-like object is specified, the user must
        provide different styles of the font.

        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)r’   ÚIMGÚpngz*.pngFr”   c              	   K   sÊ  t stdƒ‚tj| fi |¤Ž d| _t| jƒ| _| jjdu r"d| _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r±| j| j | jd  | _ nd | _ g | _!t"|d!g ƒ}|D ]}z
| j! #t$|ƒ¡ W q¿ t%yÔ   Y q¿w | 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)r”   ÚjpegÚgifÚbmpT)ÚnormcaseÚ	image_padé
   Úline_padr‡   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   rC   r/   ÚdictrB   rt   Úbackground_colorr   Údefault_image_formatr–   r   r›   r�   r'   r[   r.   r…   ÚfontwÚfonthrž   rŸ   r    r   r¡   r¢   r£   r¥   r¦   r§   r©   Úline_number_widthrª   r   ÚappendÚintr�   Úhighlight_colorr«   Ú	drawables)r@   ÚoptionsÚfontsizeÚhl_lines_strrT   r#   r#   r$   rC   †  sp   ÿ

þÿÿÿÿ
ÿÿÿÿ
zImageFormatter.__init__r   c                 C   s   t dƒ‚)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±   r�   r„   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½   r›   ©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°   r„   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.
        )r›   r²   )r@   Ú
linelengthr#   r#   r$   Ú_get_char_xÔ  ó   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.
        )r›   rÀ   r¾   r#   r#   r$   Ú_get_linenumber_posà  rÄ   z"ImageFormatter._get_linenumber_posc                 C   s$   |d durd|d  }|S d}|S )zE
        Get the correct color for the token from the style.
        ÚcolorNú#z#000r#   )r@   rB   Úfillr#   r#   r$   Ú_get_text_coloræ  ó
   ÿzImageFormatter._get_text_colorc                 C   s$   |d durd|d  }|S d}|S )zP
        Get the correct background color for the token from the style.
        ÚbgcolorNrÈ   r#   )r@   rB   Úbg_colorr#   r#   r$   Ú_get_text_bg_colorð  rË   z!ImageFormatter._get_text_bg_colorc                 C   s   | j  |d |d ¡S )z5
        Get the correct font for the style.
        rŒ   Úitalic)r.   rŽ   )r@   rB   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Ã   r›   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©rA   Útext_fgÚtext_bg)
Ú
_draw_textrÆ   ÚstrÚrjustr    r.   rŽ   r¡   r¢   rž   )r@   Ú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@   ÚposrŠ   rA   rÕ   rÖ   r#   r#   r$   r×     s   zImageFormatter._draw_textc              
   C   s  d } }}d }}|D ]p\}}|| j vr|j}|| j vs| j | }	| d¡}| d¡}
t|
ƒD ]K\}}| d¡}|rn| j|  ||¡||  |	¡|  	|	¡|  
|	¡d� | j |¡\}}||7 }t||ƒ}|t|ƒ7 }t||ƒ}| d¡r{d}d}|d7 }q0q|| _|| _|| _dS )z9
        Create drawables for the token content.
        r   rˆ   TÚ
rÔ   r¨   N)rt   ÚparentÚ
expandtabsrM   Ú	enumerateÚrstripr×   rÅ   rÐ   rÊ   rÎ   r.   rƒ   ÚmaxÚlenrb   rÑ   Ú	maxcharnorÒ   )r@   Útokensourcer¿   Úcharnorä   rÑ   rÂ   ÚttypeÚvaluerB   rS   ÚirT   ÚtempÚ
temp_widthrR   r#   r#   r$   Ú_create_drawables  sB   

ÿ




û


€í
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_numbersB  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
r<|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Úsizer›   r²   r£   Ú	rectanglerŸ   r¦   rT   )r@   ÚimÚdrawÚrecthÚrectwr#   r#   r$   Ú_paint_line_number_bgM  s   


ÿz$ImageFormatter._paint_line_number_bgc                 C   sV  |   |¡ |  ¡  t d|  | j| j¡| j¡}|  |¡ t	 
|¡}| jrY| j| j | j d }|  ¡ }|jd | }| jD ]}|  |d ¡}	|j||	f|| |	| fg| jd� q=| jD ]C\}
}}}}|r–t|dƒrr|j||d�}n	| |¡d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ò   Útextsize)rŠ   rA   r‡   N)rA   rÉ   )rì   rð   r   ÚnewrÓ   rÑ   rÒ   r®   rú   r   ró   rª   r›   r²   r£   r½   rô   rÀ   rõ   r«   r¶   r1   rü   r†   rŠ   Úsaver–   Úupper)r@   rå   Úoutfilerö   r÷   Úxrø   rù   Ú
linenumberÚyrÜ   rè   rA   rÕ   rÖ   Ú	text_sizer#   r#   r$   rn   ^  s4   
ý


ÿ
6zImageFormatter.formatN)r   )r   r    r!   r"   rP   ÚaliasesÚ	filenamesÚunicodeoutputr¯   rC   r¼   r½   rÀ   rÁ   rÃ   rÅ   rÆ   rÊ   rÎ   rÐ   rÓ   rÛ   r×   rì   rð   rú   rn   r#   r#   r#   r$   r
     s2    o
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
    Úimg_gifr˜   z*.gifN©r   r    r!   r"   rP   r  r  r¯   r#   r#   r#   r$   r   ‡  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
    Úimg_jpgÚjpgr—   z*.jpgNr	  r#   r#   r#   r$   r   •  ó    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
    Úimg_bmpr™   Úbitmapz*.bmpNr	  r#   r#   r#   r$   r   £  r  r   ) r"   r2   r7   Úpygments.formatterr   Úpygments.utilr   r   r   r   rH   ÚPILr   r   r	   r¬   ÚImportErrorro   ÚwinregÚ__all__r6   r>   r:   r<   r   Ú	Exceptionr&   r'   r
   r   r   r   r#   r#   r#   r$   Ú<module>   sR    	ÿÿ€ýü S  {