Ë
    |í¼eLZ  ã                   ó†  — 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
	 ddlmZmZmZ dZ	 ddlZg d¢Zg d	¢d
dgdgddgdœZdZdZdZ G d„ de«      Z G d„ de«      Z G d„ d«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d e«      Zy# e$ r dZY Œsw xY w# e$ r 	 ddlZn# e$ r dZY nw xY wY ŒŒw xY w)!zÏ
    pygments.formatters.img
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for Pixmap output.

    :copyright: Copyright 2006-2023 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y)ÚPilNotAvailablez,When Python imaging library is not availableN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú9/usr/lib/python3/dist-packages/pygments/formatters/img.pyr   r   4   s   „ Ú6r%   r   c                   ó   — e Zd ZdZy)ÚFontNotFoundz(When there are no usable fonts specifiedNr   r$   r%   r&   r(   r(   8   s   „ Ú2r%   r(   c                   óV   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)ÚFontManagerz>
    Manages a set of fonts: normal, italic, bold, etc...
    c                 óR  — || _         || _        i | _        d | _        d| _        t        |d«      st        j                  j                  |«      rBt        j                  || j                  «      }d| _        t        D ]  }|| j                  |<   Œ y t        j                  j                  d«      r|st        | _         | j!                  «        y t        j                  j                  d«      r|st"        | _         | j%                  «        y |st&        | _         | j)                  «        y )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/   r0   ÚfontÚstyles        r&   Ú__init__zFontManager.__init__A   sã   € Ø"ˆŒØ"ˆŒØˆŒ
ØˆŒØˆŒÜ�9˜fÔ%¬¯©¯©¸	Ô)BÜ×%Ñ% i°·±Ó@ˆDØ ˆDŒMÜò )�Ø$(�—
‘
˜5Ò!ð)ð ä�<‰<×"Ñ" 5Ô)ÙÜ!6�”Ø×ÑÕÜ�\‰\×$Ñ$ XÔ.ÙÜ!6�”Ø×ÑÕáÜ!6�”Ø×ÑÕr%   c                 ó^  — t        j                  d|›d|›�dgt         j                  d ¬«      }|j                  «       \  }}|j                  dk(  r]|j                  «       }|D ]G  }|j                  d«      rŒ|j                  «       j                  «       j                  d«      }|sŒE|c S  y y )Nzfc-listz:style=Úfile)ÚstdoutÚstderrr   s   Fontconfig warning:ú:)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚ
splitlinesr<   ÚdecodeÚstrip)	rC   ÚnamerE   ÚprocrI   Ú_ÚlinesÚliner6   s	            r&   Ú_get_nix_font_pathzFontManager._get_nix_font_path\   s¦   € Ü×Ñ ºTÁ5Ð,IÈ6Ð RÜ'1§¡¸tôEˆà×$Ñ$Ó&‰	ˆ�Ø�?‰?˜aÒØ×%Ñ%Ó'ˆEØò  �Ø—?‘?Ð#9Ô:ØØ—{‘{“}×*Ñ*Ó,×2Ñ2°3Ó7�ÚØ’Kð ð ð  r%   c                 ó*  — t         d   D ]O  }| j                  | j                  |«      }|€Œ"t        j                  || j
                  «      | j                  d<    n t        d| j                  z  «      ‚dD ]›  }t         |   D ]O  }| j                  | j                  |«      }|€Œ"t        j                  || j
                  «      | j                  |<    Œ] |dk(  r| j                  d   | j                  |<   Œ€| j                  d   | j                  |<   Œ� y )Nr   úNo usable fonts named: "%s"©r   r   r   r   r   )r9   rY   r/   r
   r8   r0   r1   r(   )rC   rT   r6   rE   Ú	stylenames        r&   rB   zFontManager._create_nixj   s
  € Ü˜8Ñ$ò 	/ˆDØ×*Ñ*¨4¯>©>¸4Ó@ˆDØÑÜ'0×'9Ñ'9¸$ÀÇÁÓ'O�—
‘
˜8Ñ$Ùð		/ô Ð<Ø#Ÿ~™~ñ .ó /ð /à5ò 
	=ˆEÜ# E™]ò 	=�	Ø×.Ñ.¨t¯~©~¸yÓI�ØÑ#Ü(1×(:Ñ(:¸4ÀÇÁÓ(P�D—J‘J˜uÑ%Ùð		=ð ˜LÒ(Ø(,¯
©
°6Ñ(:�D—J‘J˜uÒ%à(,¯
©
°8Ñ(<�D—J‘J˜uÒ%ñ
	=r%   c                 óh   — |j                  |dz   |z   j                  «       j                  «       «      S )Nú )ÚgetrS   Úlower)rC   Úfont_maprT   rE   s       r&   Ú_get_mac_font_pathzFontManager._get_mac_font_path   s,   € Ø�|‰|˜T C™Z¨%Ñ/×6Ñ6Ó8×>Ñ>Ó@ÓAÐAr%   c                 ó  ‡— i }t         j                  j                  t        j                  d«      d«      ddfD ]/  Š|j	                  ˆfd„t        j
                  ‰«      D «       «       Œ1 t        d   D ]P  }| j                  || j                  |«      }|€Œ#t        j                  || j                  «      | j                  d<    n t        d| j                  z  «      ‚dD ]œ  }t        |   D ]P  }| j                  || j                  |«      }|€Œ#t        j                  || j                  «      | j                  |<    Œ^ |d	k(  r| j                  d
   | j                  |<   Œ�| j                  d   | j                  |<   Œž y )NÚHOMEzLibrary/Fonts/z/Library/Fonts/z/System/Library/Fonts/c              3   óü   •K  — | ]s  }|j                  «       j                  d «      rRt        j                  j	                  |«      d   j                  «       t        j                  j                  ‰|«      f–— Œu y­w))ÚttfÚttcr   N)ra   Úendswithr5   r6   ÚsplitextÚjoin)Ú.0ÚfÚfont_dirs     €r&   ú	<genexpr>z*FontManager._create_mac.<locals>.<genexpr>†   s^   øè ø€ ò 7àØ—7‘7“9×%Ñ% nÔ5ô —‘×!Ñ! !Ó$ QÑ'×-Ñ-Ó/´·±·±¸hÈÓ1JÔKñ7ùs   ƒA9A<r   r[   r\   r   r   )r5   r6   rk   ÚgetenvÚupdateÚlistdirr9   rc   r/   r
   r8   r0   r1   r(   )rC   rb   rT   r6   rE   r]   rn   s         @r&   r@   zFontManager._create_mac‚   sl  ø€ ØˆÜŸ™Ÿ™¤b§i¡i°Ó&7Ð9IÓJØ*Ð,DðFò 	7ˆHà�O‰Oó 7äŸ™ HÓ-ô7õ 7ð	7ô ˜8Ñ$ò 	/ˆDØ×*Ñ*¨8°T·^±^ÀTÓJˆDØÑÜ'0×'9Ñ'9¸$ÀÇÁÓ'O�—
‘
˜8Ñ$Ùð		/ô Ð<Ø#Ÿ~™~ñ .ó /ð /à5ò 
	=ˆEÜ# E™]ò 	=�	Ø×.Ñ.¨x¸¿¹ÈÓS�ØÑ#Ü(1×(:Ñ(:¸4ÀÇÁÓ(P�D—J‘J˜uÑ%Ùð		=ð ˜LÒ(Ø(,¯
©
°6Ñ(:�D—J‘J˜uÒ%à(,¯
©
°8Ñ(<�D—J‘J˜uÒ%ñ
	=r%   c                 óÈ   — dD ]7  }|D ]0  }	 |›|xr d|z   ›|›�}t        j                  ||«      \  }}	|c c S  Œ9 |rt        d|›d|d   ›d�«      ‚y # t        $ r Y ŒXw xY w)N)r   z (TrueType)r_   zFont z (r   z) not found in registry)Ú_winregÚQueryValueExÚOSErrorr(   )
rC   ÚkeyÚbasenameÚstylesÚfailÚsuffixrE   ÚvalnameÚvalrV   s
             r&   Ú_lookup_winzFontManager._lookup_winŸ   s�   € Ø)ò 	ˆFØò �ðÙ*2°EÒ4G¸cÀ%¹iÐ4GÉÐP�GÜ$×1Ñ1°#°wÓ?‘F�C˜Ø”Jñ	ð	ñ Ý"Ú$,¨f°Q«ið$9ó :ð :àøô ò Ùðús   Œ)AÁ	A!Á A!c                 ó¢  — d }t         j                  dft         j                  dft         j                  dft         j                  dfg}|D �]  }	 t        j                  |Ž }	 | j	                  || j
                  t        d   d«      }t        j                  || j                  «      | j                  d<   dD ]”  }| j	                  || j
                  t        |   «      }|r.t        j                  || j                  «      | j                  |<   ŒW|dk(  r| j                  d   | j                  |<   Œy| j                  d   | j                  |<   Œ– 	 t        j                  |«        y  |r|‚t        d«      ‚# t        $ r}|}Y d }~nd }~ww xY w	 t        j                  |«       n# t        j                  |«       w xY w�Œv# t        $ r Y �Œ‚w xY w)	Nz2Software\Microsoft\Windows NT\CurrentVersion\Fontsz/Software\Microsoft\Windows\CurrentVersion\Fontsr   Tr\   r   r   z$Can't open Windows font registry key)rt   ÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚOpenKeyr~   r/   r9   r
   r8   r0   r1   ÚCloseKeyr(   rv   )rC   ÚlookuperrorÚkeynamesÚkeynamerw   r6   rE   Úerrs           r&   r>   zFontManager._create_win®   s²  € ØˆÜ×/Ñ/Ð1fÐgÜ×/Ñ/Ð1cÐdÜ×0Ñ0Ð2gÐhÜ×0Ñ0Ð2dÐeðhˆð  ó 	HˆGðÜ—o‘o wÐ/�ð*Ø×+Ñ+¨C°·±ÄÈÑAQÐSWÓX�DÜ+4×+=Ñ+=¸dÀDÇNÁNÓ+S�D—J‘J˜xÑ(Ø!Aò I˜Ø#×/Ñ/°°T·^±^ÄVÈEÁ]ÓS˜ÙÜ09×0BÑ0BÀ4ÈÏÉÓ0X˜DŸJ™J uÒ-à$¨Ò4Ø48·J±J¸vÑ4F §
¡
¨5Ò 1à48·J±J¸xÑ4H §
¡
¨5Ò 1ðIð ô ×$Ñ$ SÖ)ð'	Hñ: Ø!Ð!ÜÐFÓGÐGøô $ò &Ø"%•Kûð&úØä×$Ñ$ SÕ)ø”G×$Ñ$ SÕ)úÑ)øÜò ÚðúsO   ÁGÁ#C+E6ÅGÅ6	FÅ?FÆF%ÆFÆF%ÆGÆ%F<Æ<GÇ	GÇGc                 ó$   — | j                  d«      S )z)
        Get the character size.
        ÚM)Úget_text_size©rC   s    r&   Úget_char_sizezFontManager.get_char_sizeÕ   s   € ð ×!Ñ! #Ó&Ð&r%   c                 ó‚   — | j                   d   }t        |d«      r|j                  |«      dd S |j                  |«      S )z4
        Get the text size (width, height).
        r   Úgetbboxé   é   )r1   r4   rŽ   Úgetsize)rC   ÚtextrD   s      r&   rŠ   zFontManager.get_text_sizeÛ   sA   € ð �z‰z˜(Ñ#ˆÜ�4˜Ô#Ø—<‘< Ó% a¨Ð*Ð*à—<‘< Ó%Ð%r%   c                 ór  — |r.|r,| j                   r| j                  d«      S | j                  d   S |r,| j                   r| j                  d«      S | j                  d   S |r,| j                   r| j                  d«      S | j                  d   S | j                   r| j                  d«      S | j                  d   S )z>
        Get the font based on bold and italic flags.
        r   r   r   r   )r3   Ú	get_styler1   )rC   ÚboldÚobliques      r&   Úget_fontzFontManager.get_fontå   s£   € ñ ‘GØ�}Š}Ø—~‘~ lÓ3Ð3à—:‘:˜lÑ+Ð+ÙØ�}Š}Ø—~‘~ fÓ-Ð-à—:‘:˜fÑ%Ð%ÙØ�}Š}Ø—~‘~ hÓ/Ð/à—:‘:˜hÑ'Ð'à�}Š}Ø—~‘~ hÓ/Ð/à—:‘:˜hÑ'Ð'r%   c                 ó¤   — | j                   |   }t        |   D ]  }	 |j                  |«       |c S  |S # t        $ r Y Œ't        $ r |cY c S w xY w)z}
        Get the specified style of the font if it is a variable font.
        If not found, return the normal font.
        )r1   r9   Úset_variation_by_nameÚ
ValueErrorrv   )rC   rE   rD   Ú
style_names       r&   r”   zFontManager.get_styleþ   se   € ð
 �z‰z˜%Ñ ˆÜ  ™-ò 	ˆJðØ×*Ñ*¨:Ô6Ø’ð	ð ˆøô ò ÙÜò Ø”ðús   �5µ	AÁ 
AÁAN)é   )F)r    r!   r"   r#   rF   rY   rB   rc   r@   r~   r>   rŒ   rŠ   r—   r”   r$   r%   r&   r*   r*   <   sA   „ ñóò6ò=ò*Bò=ó:ò%HòN'ò&ò(ó2r%   r*   c                   ó˜   — e Zd ZdZdZg d¢ZdgZdZdZd„ Z	dd„Z
d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)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                 óD  — t         st        d«      ‚t        j                  | fi |¤Ž d| _        t        | j                  «      | _        | j                  j                  €d| _        n| j                  j                  | _        t        |dg d¢| j                  d¬«      | _        t        |d	d
«      | _        t        |dd«      | _        t        |dd«      }t        |j!                  dd«      |«      | _        | j"                  j%                  «       \  | _        | _        |j!                  dd«      | _        |j!                  dd«      | _        t        |dd«      | _        t1        |dd«      | _        t1        |dd«      | _        t        |dd«      | _        t1        |dd«      | _        t1        |dd«      | _        t        |dd«      | _        t        |dd«      | _        | j8                  r/| j&                  | j.                  z  | j6                  dz  z   | _         nd | _         g | _!        tE        |d!g «      }|D ]'  }	 | jB                  jG                  tI        |«      «       Œ) |j!                  d"| j                  jL                  «      xs d#| _'        g | _(        y# tJ        $ r Y Œlw xY w)$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�   r0   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   rF   r2   ÚdictrE   ry   Úbackground_colorr   Údefault_image_formatr£   r   r¨   rª   r*   r`   r1   rŒ   ÚfontwÚfonthr«   r¬   r­   r   r®   r¯   r°   r²   r³   r´   r¶   Úline_number_widthr·   r   ÚappendÚintrš   Úhighlight_colorr¸   Ú	drawables)rC   ÚoptionsÚfontsizeÚhl_lines_strrX   s        r&   rF   zImageFormatter.__init__ˆ  sy  € õ Ü!ØGóIð Iä×Ñ˜4Ñ+ 7Ò+Ø ˆŒä˜4Ÿ:™:Ó&ˆŒØ�:‰:×&Ñ&Ð.Ø$*ˆDÕ!à$(§J¡J×$?Ñ$?ˆDÔ!ä*Ø�^Ò%BØ×%Ñ%°ô6ˆÔô % W¨k¸2Ó>ˆŒÜ# G¨Z¸Ó;ˆŒä˜w¨°RÓ8ˆÜ  §¡¨[¸"Ó!=¸xÓHˆŒ
Ø!%§¡×!9Ñ!9Ó!;ÑˆŒ
�D”Jà%Ÿk™kÐ*:¸FÓCˆÔØ%Ÿk™kÐ*:¸FÓCˆÔÜ!,¨WØ-@À!ó"EˆÔä ,¨WØ-?Àó!HˆÔä".¨wØ/CÀUó#LˆÔä*¨7Ð4EÀqÓIˆÔÜ(¨°.À$ÓGˆÔÜ%1°'Ø2IÈ4ó&QˆÔ"ä +¨GÐ5GÈÓ KˆÔÜ!,¨WÐ6IÈ1Ó!MˆÔØ×ÒØ&*§j¡j°4×3IÑ3IÑ&IØ&*×&:Ñ&:¸QÑ&>ñ'?ˆDÕ"ð &'ˆDÔ"ØˆŒÜ# G¨Z¸Ó<ˆØ ò 	ˆDðØ—‘×$Ñ$¤S¨£YÕ/ð	ð
  Ÿ™ JØ$(§J¡J×$>Ñ$>ó@ò JØCIð 	Œàˆ�øô	 ò Ùðús   È6$JÊ	JÊJc                 ó   — t        d«      ‚)NzWThe -S option is meaningless for the image formatter. Use -O style=<stylename> instead.)ÚNotImplementedError)rC   Úargs     r&   Úget_style_defszImageFormatter.get_style_defsÀ  s   € Ü!ð #Qó Rð 	Rr%   c                 ó4   — | j                   | j                  z   S )z+
        Get the height of a line.
        )r¾   rª   r‹   s    r&   Ú_get_line_heightzImageFormatter._get_line_heightÄ  s   € ð �z‰z˜DŸM™MÑ)Ð)r%   c                 óB   — || j                  «       z  | j                  z   S )z8
        Get the Y coordinate of a line number.
        )rÌ   r¨   ©rC   Úlinenos     r&   Ú_get_line_yzImageFormatter._get_line_yÊ  s!   € ð ˜×-Ñ-Ó/Ñ/°$·.±.Ñ@Ð@r%   c                 ó   — | j                   S )z/
        Get the width of a character.
        )r½   r‹   s    r&   Ú_get_char_widthzImageFormatter._get_char_widthÐ  s   € ð �z‰zÐr%   c                 ó:   — || j                   z   | j                  z   S )z?
        Get the X coordinate of a character position.
        )r¨   r¿   )rC   Ú
linelengths     r&   Ú_get_char_xzImageFormatter._get_char_xÖ  s   € ð ˜DŸN™NÑ*¨T×-CÑ-CÑCÐCr%   c                 óF   — | j                  |«      | j                  |«      fS )zL
        Get the actual position for a character and line position.
        )rÕ   rÐ   )rC   rÔ   rÏ   s      r&   Ú_get_text_poszImageFormatter._get_text_posÜ  s%   € ð ×Ñ 
Ó+¨T×-=Ñ-=¸fÓ-EÐEÐEr%   c                 ó<   — | j                   | j                  |«      fS )zI
        Get the actual position for the start of a line number.
        )r¨   rÐ   rÎ   s     r&   Ú_get_linenumber_posz"ImageFormatter._get_linenumber_posâ  s   € ð —‘ × 0Ñ 0°Ó 8Ð9Ð9r%   c                 ó(   — |d   �
d|d   z   }|S d}|S )zE
        Get the correct color for the token from the style.
        Úcolorú#z#000r$   )rC   rE   Úfills      r&   Ú_get_text_colorzImageFormatter._get_text_colorè  s/   € ð �‰>Ð%Ø˜˜w™Ñ'ˆDð ˆð ˆDØˆr%   c                 ó(   — |d   �
d|d   z   }|S d}|S )zP
        Get the correct background color for the token from the style.
        ÚbgcolorNrÜ   r$   )rC   rE   Úbg_colors      r&   Ú_get_text_bg_colorz!ImageFormatter._get_text_bg_colorò  s1   € ð �ÑÐ'Ø˜U 9Ñ-Ñ-ˆHð ˆð ˆHØˆr%   c                 óF   — | j                   j                  |d   |d   «      S )z5
        Get the correct font for the style.
        r•   Úitalic)r1   r—   )rC   rE   s     r&   Ú_get_style_fontzImageFormatter._get_style_fontü  s#   € ð �z‰z×"Ñ" 5¨¡=°%¸±/ÓBÐBr%   c                 ó€   — | j                  |«      | j                  z   | j                  |dz   «      | j                  z   fS )z.
        Get the required image size.
        r   )rÕ   r¨   rÐ   )rC   ÚmaxlinelengthÚ	maxlinenos      r&   Ú_get_image_sizezImageFormatter._get_image_size  sB   € ð × Ñ  Ó/°$·.±.Ñ@Ø× Ñ  ¨Q¡Ó/°$·.±.Ñ@ðBð 	Br%   c                 ó  — | j                  | j                  |«      t        |«      j                  | j                  «      | j
                  j                  | j                  | j                  «      | j                  d¬«       y)zA
        Remember a line number drawable to paint later.
        N©rD   Útext_fgÚtext_bg)
Ú
_draw_textrÙ   ÚstrÚrjustr­   r1   r—   r®   r¯   r«   )rC   ÚposnorÏ   s      r&   Ú_draw_linenumberzImageFormatter._draw_linenumber	  sj   € ð 	�‰Ø×$Ñ$ UÓ+Ü�‹K×Ñ˜d×4Ñ4Ó5Ø—‘×$Ñ$ T×%:Ñ%:Ø%)×%<Ñ%<ó>à×'Ñ'Øð 	õ 	
r%   c                 óD   — | j                   j                  |||||f«       y)zB
        Remember a single drawable tuple to paint later.
        N)rÃ   rÀ   )rC   Úposr’   rD   rì   rí   s         r&   rî   zImageFormatter._draw_text  s!   € ð 	�‰×Ñ˜s D¨$°¸ÐAÕBr%   c                 óÈ  — dx}x}}dx}}|D �]=  \  }}|| j                   vr|j                  }|| j                   vrŒ| j                   |   }	|j                  d«      }|j                  d«      }
t	        |
«      D ]Ï  \  }}|j                  d«      }|rœ| j                  | j                  ||«      || j                  |	«      | j                  |	«      | j                  |	«      ¬«       | j                  j                  |«      \  }}||z  }t        ||«      }|t        |«      z  }t        ||«      }|j                  d«      sŒÇd}d}|dz  }ŒÑ �Œ@ || _        || _        || _        y)z9
        Create drawables for the token content.
        r   r�   Tú
rë   rµ   N)ry   ÚparentÚ
expandtabsrQ   Ú	enumerateÚrstriprî   r×   rå   rÞ   râ   r1   rŠ   ÚmaxÚlenri   rç   Ú	maxcharnorè   )rC   ÚtokensourcerÏ   Úcharnorý   rç   rÔ   ÚttypeÚvaluerE   rW   ÚirX   ÚtempÚ
temp_widthrV   s                   r&   Ú_create_drawablesz ImageFormatter._create_drawables  s{  € ð '(Ð'ˆÐ'�˜)Ø%&Ð&ˆ˜
Ø'ó 	 ‰LˆE�5Ø˜tŸ{™{Ñ*ØŸ™�ð ˜tŸ{™{Ò*à—K‘K Ñ&ˆEð ×$Ñ$ QÓ'ˆEØ×$Ñ$ TÓ*ˆEä$ UÓ+ò  ‘��4Ø—{‘{ 4Ó(�ÙØ—O‘OØ×*Ñ*¨:°vÓ>ØØ#×3Ñ3°EÓ:Ø"&×"6Ñ"6°uÓ"=Ø"&×"9Ñ"9¸%Ó"@ð $ô ð %)§J¡J×$<Ñ$<¸TÓ$B‘M�J Ø *Ñ,�JÜ$'¨°zÓ$B�MØœc $›iÑ'�FÜ # I¨vÓ 6�IØ—=‘= Õ&à!"�JØ�FØ˜a‘K‘Fò' ð	 ð< +ˆÔØ"ˆŒØˆ�r%   c                 óº   — | j                   syt        | j                  «      D ]6  }|| j                  z   }|| j                  z  dk(  sŒ%| j                  ||«       Œ8 y)z8
        Create drawables for the line numbers.
        Nr   )r²   Úrangerè   r¶   r´   rò   )rC   ÚpÚns      r&   Ú_draw_line_numbersz!ImageFormatter._draw_line_numbersD  s[   € ð × Ò ØÜ�t—~‘~Ó&ò 	,ˆAØ�D×*Ñ*Ñ*ˆAØ�D×)Ñ)Ñ)¨aÓ/Ø×%Ñ% a¨Õ+ñ	,r%   c                 ón  — | j                   sy| j                  €yt        j                  |«      }|j                  d   }| j
                  | j                  z   | j                  z
  }|j                  d||fg| j                  ¬«       | j                  r#|j                  |df||fg| j                  ¬«       ~y)z@
        Paint the line number background on the image.
        Néÿÿÿÿ)r   r   ©rÝ   r   )r²   r«   r	   ÚDrawÚsizer¨   r¿   r°   Ú	rectangler¬   r³   rX   )rC   ÚimÚdrawÚrecthÚrectws        r&   Ú_paint_line_number_bgz$ImageFormatter._paint_line_number_bgO  s­   € ð × Ò ØØ×ÑÐ&ØÜ�~‰~˜bÓ!ˆØ—‘˜‘ˆØ—‘ ×!7Ñ!7Ñ7¸$×:NÑ:NÑNˆØ�‰˜ ¨ Ð/Ø ×/Ñ/ð 	ô 	1à×%Ò%Ø�I‰I˜˜q�z E¨5 >Ð2¸×9LÑ9LˆIÔMÙr%   c           	      óš  — | j                  |«       | j                  «        t        j                  d| j	                  | j
                  | j                  «      | j                  «      }| j                  |«       t        j                  |«      }| j                  r™| j                  | j                  z   | j                  z
  dz   }| j                  «       }|j                   d   |z
  }| j                  D ]?  }| j#                  |dz
  «      }	|j%                  ||	f||z   |	|z   fg| j&                  ¬«       ŒA | j(                  D ]a  \  }
}}}}|rB|j+                  ||¬«      }|j%                  |
d   |
d   |
d   |d   z   |
d   |d   z   g|¬«       |j-                  |
|||¬«       Œc |j/                  || j0                  j3                  «       «       y)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  )r’   rD   )rD   rÝ   N)r  r
  r   Únewré   rç   rè   r»   r  r	   r  r·   r¨   r¿   r°   rÌ   r  rÐ   r  r¸   rÃ   Útextsizer’   Úsaver£   Úupper)rC   rþ   Úoutfiler  r  Úxr  r  Ú
linenumberÚyrô   r  rD   rì   rí   Ú	text_sizes                   r&   ÚformatzImageFormatter.format`  s¹  € ð 	×Ñ˜{Ô+Ø×ÑÔ!Ü�Y‰YØØ× Ñ  ×!3Ñ!3°T·^±^ÓDØ×!Ñ!ó
ˆð
 	×"Ñ" 2Ô&Ü�~‰~˜bÓ!ˆà�=Š=Ø—‘ ×!7Ñ!7Ñ7¸$×:NÑ:NÑNÐQRÑRˆAØ×)Ñ)Ó+ˆEØ—G‘G˜A‘J ‘NˆEØ"Ÿm™mò 3�
Ø×$Ñ$ Z°!¡^Ó4�Ø—‘  A ¨¨U©°A¸±IÐ(>Ð?Ø$(§M¡Mð õ 3ð3ð 37·.±.ò 	;Ñ.ˆC�˜˜g wÙØ ŸM™M¨u¸4˜MÓ@�	Ø—‘  A¡¨¨A©°°A±¸À1¹Ñ0EÀsÈ1ÁvÐPYÐZ[ÑP\ÑG\Ð]Ðdk�ÔlØ�I‰I�c˜5 t°'ˆIÕ:ð		;ð
 	�‰�˜×*Ñ*×0Ñ0Ó2Õ3r%   N)r   )r    r!   r"   r#   rT   ÚaliasesÚ	filenamesÚunicodeoutputr¼   rF   rÊ   rÌ   rÐ   rÒ   rÕ   r×   rÙ   rÞ   râ   rå   ré   rò   rî   r  r
  r  r!  r$   r%   r&   r   r     sŠ   „ ñlð^ €DÚ#€GØ�	€Ià€Mà Ðò6ópRò*òAòòDòFò:òòòCòBò
òCò& òP	,òó"4r%   r   c                   ó$   — e Zd ZdZdZdgZdgZdZy)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#   rT   r"  r#  r¼   r$   r%   r&   r   r   …  s"   „ ñð €DØˆg€GØ�	€IØ Ñr%   r   c                   ó&   — e Zd ZdZdZddgZdgZdZy)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   “  s$   „ ñð €DØ�fˆo€GØ�	€IØ!Ñr%   r   c                   ó&   — e Zd ZdZdZddgZdgZdZy)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   ¡  s%   „ ñð €DØ�hÐ€GØ�	€IØ Ñr%   r   ) r#   r5   r:   Úpygments.formatterr   Úpygments.utilr   r   r   r   rL   ÚPILr   r	   r
   r¹   ÚImportErrorrt   ÚwinregÚ__all__r9   rA   r=   r?   r   Ú	Exceptionr(   r*   r   r   r   r   r$   r%   r&   ú<module>r5     s  ðñó 
Û 
å (÷ó ó ðß/Ñ/Ø€MðÛò €ò GØ˜hÐ'Ø�(Ø! =Ð1ñ	
€ð +Ð Ø%Ð ØÐ ô7�kô 7ô3�9ô 3÷Qñ Qôho4�Yô o4ôj!˜ô !ô"˜ô "ô!˜õ !øðU ò Ø‚Mðûð
 ò ðÜ øØò ØŠðüðúsF   ¢B ¯B% ÂB"Â!B"Â%C Â+B0Â/C Â0B:Â7C Â9B:Â:C Â?C 