§
    £E±cšU  ã                   ó¶  — 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n# e$ r dZY nw xY w	 ddlZn# e$ r 	 ddlZn# e$ r dZY nw xY wY nw xY 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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dS )!zÏ
    pygments.formatters.img
    ~~~~~~~~~~~~~~~~~~~~~~~

    Formatter for Pixmap output.

    :copyright: Copyright 2006-2022 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__© ó    ú9/usr/lib/python3/dist-packages/pygments/formatters/img.pyr   r   5   s   € € € € € Ø6Ð6Ð6Ð6r%   r   c                   ó   — e Zd ZdZdS )ÚFontNotFoundz(When there are no usable fonts specifiedNr   r$   r%   r&   r(   r(   9   s   € € € € € Ø2Ð2Ð2Ð2r%   r(   c                   óR   — 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S )ÚFontManagerz>
    Manages a set of fonts: normal, italic, bold, etc...
    é   c                 óŽ  — || _         || _        i | _        d | _        t          j                             d¦  «        r$|st          | _         |                      ¦   «          d S t          j                             d¦  «        r$|st          | _         |  
                    ¦   «          d S |st          | _         |                      ¦   «          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/   r0   s      r&   Ú__init__zFontManager.__init__B   sÃ   € Ø"ˆŒØ"ˆŒØˆŒ
ØˆŒÝŒ<×"Ò" 5Ñ)Ô)ð 	Øð 7Ý!6�”Ø×ÒÑÔÐÐÐÝŒ\×$Ò$ XÑ.Ô.ð 	Øð 7Ý!6�”Ø×ÒÑÔÐÐÐàð 7Ý!6�”Ø×ÒÑÔÐÐÐr%   c                 ó|  — t          j        d|›d|›�dgt           j        d ¬¦  «        }|                     ¦   «         \  }}|j        dk    rp|                     ¦   «         }|D ]W}|                     d¦  «        rŒ|                     ¦   «                              ¦   «                              d¦  «        }|r|c S ŒXd S d S )Nzfc-listz:style=Úfile)ÚstdoutÚstderrr   s   Fontconfig warning:ú:)	Ú
subprocessÚPopenÚPIPEÚcommunicateÚ
returncodeÚ
splitlinesr5   ÚdecodeÚstrip)	r<   ÚnameÚstyleÚprocr@   Ú_ÚlinesÚlineÚpaths	            r&   Ú_get_nix_font_pathzFontManager._get_nix_font_pathT   sÛ   € ÝÔ ¸T¸T¸TÀ5À5Ð,IÈ6Ð RÝ'1¤¸tðEñ Eô Eˆà×$Ò$Ñ&Ô&‰	ˆ�ØŒ?˜aÒÐØ×%Ò%Ñ'Ô'ˆEØð  ð  �Ø—?’?Ð#9Ñ:Ô:ð ØØ—{’{‘}”}×*Ò*Ñ,Ô,×2Ò2°3Ñ7Ô7�Øð  Ø�K�K�Kð à�4ð  Ðr%   c                 óä  — t           d         D ]C}|                      | j        |¦  «        }|�$t          j        || j        ¦  «        | j        d<    nŒDt          d| j        z  ¦  «        ‚dD ]„}t           |         D ]C}|                      | j        |¦  «        }|�$t          j        || j        ¦  «        | j        |<    n2ŒD|dk    r| j        d         | j        |<   Œo| j        d         | j        |<   Œ…d S )Nr   úNo usable fonts named: "%s"©r   r   r   r   r   )ÚSTYLESrR   r/   r
   Útruetyper0   r1   r(   )r<   rK   rQ   rL   Ú	stylenames        r&   r;   zFontManager._create_nixb   s  € Ý˜8Ô$ð 	/ð 	/ˆDØ×*Ò*¨4¬>¸4Ñ@Ô@ˆDØÐÝ'0Ô'9¸$ÀÄÑ'OÔ'O�”
˜8Ñ$Ø�ð  õ Ð<Ø#œ~ñ .ñ /ô /ð /à5ð 
	=ð 
	=ˆEÝ# Eœ]ð 	=ð 	=�	Ø×.Ò.¨t¬~¸yÑIÔI�ØÐ#Ý(1Ô(:¸4ÀÄÑ(PÔ(P�D”J˜uÑ%Ø�Eð $ð ˜LÒ(Ð(Ø(,¬
°6Ô(:�D”J˜uÑ%Ð%à(,¬
°8Ô(<�D”J˜uÑ%øð
	=ð 
	=r%   c                 ó€   — |                      |dz   |z                        ¦   «                              ¦   «         ¦  «        S )Nú )ÚgetrJ   Úlower)r<   Úfont_maprK   rL   s       r&   Ú_get_mac_font_pathzFontManager._get_mac_font_pathw   s5   € Ø�|Š|˜T C™Z¨%Ñ/×6Ò6Ñ8Ô8×>Ò>Ñ@Ô@ÑAÔAÐAr%   c                 óÄ  ‡— i }t           j                             t          j        d¦  «        d¦  «        ddfD ]5Š|                     ˆfd„t          j        ‰¦  «        D ¦   «         ¦  «         Œ6t          d         D ]D}|                      || j        |¦  «        }|�$t          j
        || j        ¦  «        | j        d<    nŒEt          d| j        z  ¦  «        ‚dD ]…}t          |         D ]D}|                      || j        |¦  «        }|�$t          j
        || j        ¦  «        | j        |<    n2ŒE|d	k    r| j        d
         | j        |<   Œp| j        d         | j        |<   Œ†d S )NÚHOMEzLibrary/Fonts/z/Library/Fonts/z/System/Library/Fonts/c              3   ó  •K  — | ]‚}|                      ¦   «                              d ¦  «        ¯)t          j                             |¦  «        d                               ¦   «         t          j                             ‰|¦  «        fV — ŒƒdS ))ÚttfÚttcr   N)r\   ÚendswithÚosrQ   ÚsplitextÚjoin)Ú.0ÚfÚfont_dirs     €r&   ú	<genexpr>z*FontManager._create_mac.<locals>.<genexpr>~   s‰   øè è € ð 7ð 7àØ—7’7‘9”9×%Ò% nÑ5Ô5ð7Ý”×!Ò! !Ñ$Ô$ QÔ'×-Ò-Ñ/Ô/µ´·²¸hÈÑ1JÔ1JÐKð7ð 7ð 7ð 7ð 7ð 7r%   r   rT   rU   r   r   )re   rQ   rg   ÚgetenvÚupdateÚlistdirrV   r^   r/   r
   rW   r0   r1   r(   )r<   r]   rK   rQ   rL   rX   rj   s         @r&   r9   zFontManager._create_macz   s«  ø€ ØˆÝœŸš¥b¤i°Ñ&7Ô&7Ð9IÑJÔJØ*Ð,DðFð 	7ð 	7ˆHà�OŠOð 7ð 7ð 7ð 7åœ HÑ-Ô-ð7ñ 7ô 7ñ 7ô 7ð 7ð 7õ
 ˜8Ô$ð 	/ð 	/ˆDØ×*Ò*¨8°T´^ÀTÑJÔJˆDØÐÝ'0Ô'9¸$ÀÄÑ'OÔ'O�”
˜8Ñ$Ø�ð  õ Ð<Ø#œ~ñ .ñ /ô /ð /à5ð 
	=ð 
	=ˆEÝ# Eœ]ð 	=ð 	=�	Ø×.Ò.¨x¸¼ÈÑSÔS�ØÐ#Ý(1Ô(:¸4ÀÄÑ(PÔ(P�D”J˜uÑ%Ø�Eð $ð ˜LÒ(Ð(Ø(,¬
°6Ô(:�D”J˜uÑ%Ð%à(,¬
°8Ô(<�D”J˜uÑ%øð
	=ð 
	=r%   Fc                 óÌ   — dD ]B}|D ]=}	 |›|od|z   ›|›�}t          j        ||¦  «        \  }}	|c c S # t          $ r Y Œ:w xY wŒC|rt          d|›d|d         ›d�¦  «        ‚d S )N)r   z (TrueType)rZ   zFont z (r   z) not found in registry)Ú_winregÚQueryValueExÚOSErrorr(   )
r<   ÚkeyÚbasenameÚstylesÚfailÚsuffixrL   ÚvalnameÚvalrN   s
             r&   Ú_lookup_winzFontManager._lookup_win—   sÂ   € Ø)ð 	ð 	ˆFØð ð �ðØ*2¨(°EÐ4G¸cÀ%¹iÐ4GÈÈÐP�GÝ$Ô1°#°wÑ?Ô?‘F�C˜Ø�J�J�J�J�JøÝð ð ð Ø�Hðøøøðð ð :Ý"�lØ$, H H¨f°Q¬i¨i¨ið$9ñ :ô :ð :à�4s   Š&5µ
AÁAc                 ó@  — d }t           j        dft           j        dft           j        dft           j        dfg}|D �]P}	 t          j        |Ž }	 |                      || j        t          d         d¦  «        }t          j        || j	        ¦  «        | j
        d<   dD ]}|                      || j        t          |         ¦  «        }|r#t          j        || j	        ¦  «        | j
        |<   ŒN|dk    r| j
        d         | j
        |<   Œj| j
        d         | j
        |<   Œ€	 t          j        |¦  «          d S # t          $ r}|}Y d }~nd }~ww xY w	 t          j        |¦  «         n# t          j        |¦  «         w xY w�ŒA# t          $ r Y �ŒNw xY w|r|‚t          d¦  «        ‚)	Nz2Software\Microsoft\Windows NT\CurrentVersion\Fontsz/Software\Microsoft\Windows\CurrentVersion\Fontsr   TrU   r   r   z$Can't open Windows font registry key)rp   ÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚOpenKeyrz   r/   rV   r
   rW   r0   r1   ÚCloseKeyr(   rr   )r<   ÚlookuperrorÚkeynamesÚkeynamers   rQ   rL   Úerrs           r&   r7   zFontManager._create_win¦   sï  € ØˆÝÔ/Ð1fÐgÝÔ/Ð1cÐdÝÔ0Ð2gÐhÝÔ0Ð2dÐeðhˆð  ð 	Hñ 	HˆGðÝ”o wÐ/�ð*Ø×+Ò+¨C°´ÅÈÔAQÐSWÑXÔX�DÝ+4Ô+=¸dÀDÄNÑ+SÔ+S�D”J˜xÑ(Ø!Að Ið I˜Ø#×/Ò/°°T´^ÅVÈEÄ]ÑSÔS˜Øð IÝ09Ô0BÀ4ÈÌÑ0XÔ0X˜DœJ uÑ-Ð-à$¨Ò4Ð4Ø48´J¸vÔ4F ¤
¨5Ñ 1Ð 1à48´J¸xÔ4H ¤
¨5Ñ 1Ð 1Øõ Ô$ SÑ)Ô)Ð)Ð)Ð)Ð)øõ $ð &ð &ð &Ø"%�K�K�K�K�K�Køøøøð&øøøØåÔ$ SÑ)Ô)Ð)Ð)ø•GÔ$ SÑ)Ô)Ð)Ð)øøøÑ)øÝð ð ð Ø‘ðøøøð ð "Ø!Ð!ÝÐFÑGÔGÐGsN   ¿E<ÁCD2ÄE<Ä2
EÄ<EÄ>E!ÅEÅE!ÅE<Å!E7Å7E<Å<
F
Æ	F
c                 ó,   — |                       d¦  «        S )z)
        Get the character size.
        ÚM)Úget_text_size©r<   s    r&   Úget_char_sizezFontManager.get_char_sizeÍ   s   € ð ×!Ò! #Ñ&Ô&Ð&r%   c                 ó    — | j         d         }t          |d¦  «        r|                     |¦  «        dd…         S |                     |¦  «        S )z4
        Get the text size (width, height).
        r   Úgetbboxé   é   )r1   ÚhasattrrŠ   Úgetsize)r<   ÚtextÚfonts      r&   r†   zFontManager.get_text_sizeÓ   sO   € ð Œz˜(Ô#ˆÝ�4˜Ñ#Ô#ð 	&Ø—<’< Ñ%Ô% a¨ cÔ*Ð*à—<’< Ñ%Ô%Ð%r%   c                 óz   — |r|r| j         d         S |r| j         d         S |r| j         d         S | j         d         S )z>
        Get the font based on bold and italic flags.
        r   r   r   r   )r1   )r<   ÚboldÚobliques      r&   Úget_fontzFontManager.get_fontÝ   sW   € ð ð 	(�Gð 	(Ø”:˜lÔ+Ð+Øð 	(Ø”:˜fÔ%Ð%Øð 	(Ø”:˜hÔ'Ð'à”:˜hÔ'Ð'r%   N)r+   )F)r    r!   r"   r#   r=   rR   r;   r^   r9   rz   r7   rˆ   r†   r”   r$   r%   r&   r*   r*   =   sÅ   € € € € € ðð ðð ð ð ð$ð ð ð=ð =ð =ð*Bð Bð Bð=ð =ð =ð:ð ð ð ð%Hð %Hð %HðN'ð 'ð 'ð&ð &ð &ð(ð (ð (ð (ð (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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)r–   ÚIMGÚpngz*.pngFr˜   c                 óf  — 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          |                     dd¦  «        |¦  «        | _        | j                             ¦   «         \  | _        | _        |                     dd¦  «        | _        |                     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¦  «        | _        | j        r | j        | j        z  | j        dz  z   | _         nd | _         g | _!        tE          |d!g ¦  «        }|D ]:}	 | j!         #                    tI          |¦  «        ¦  «         Œ+# tJ          $ r Y Œ7w xY 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‹   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   r=   r2   ÚdictrL   ru   Ú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ÚintÚ
ValueErrorÚhighlight_colorr°   Ú	drawables)r<   ÚoptionsÚfontsizeÚhl_lines_strrP   s        r&   r=   zImageFormatter.__init__a  sä  € õ ð 	IÝ!ØGñIô Ið IåÔ˜4Ð+Ð+ 7Ð+Ð+Ð+Ø ˆŒå˜4œ:Ñ&Ô&ˆŒØŒ:Ô&Ð.Ø$*ˆDÔ!Ð!à$(¤JÔ$?ˆDÔ!å*Ø�^Ð%BÐ%BÐ%BØÔ%°ð6ñ 6ô 6ˆÔõ % W¨k¸2Ñ>Ô>ˆŒÝ# G¨Z¸Ñ;Ô;ˆŒå˜w¨°RÑ8Ô8ˆÝ  §¢¨[¸"Ñ!=Ô!=¸xÑHÔHˆŒ
Ø!%¤×!9Ò!9Ñ!;Ô!;ÑˆŒ
�D”Jà%ŸkškÐ*:¸FÑCÔCˆÔØ%ŸkškÐ*:¸FÑCÔCˆÔÝ!,¨WØ-@À!ñ"Eô "EˆÔå ,¨WØ-?Àñ!Hô !HˆÔå".¨wØ/CÀUñ#Lô #LˆÔå*¨7Ð4EÀqÑIÔIˆÔÝ(¨°.À$ÑGÔGˆÔÝ%1°'Ø2IÈ4ñ&Qô &QˆÔ"å +¨GÐ5GÈÑ KÔ KˆÔÝ!,¨WÐ6IÈ1Ñ!MÔ!MˆÔØÔð 	'Ø&*¤j°4Ô3IÑ&IØ&*Ô&:¸QÑ&>ñ'?ˆDÔ"Ð"ð &'ˆDÔ"ØˆŒÝ# G¨Z¸Ñ<Ô<ˆØ ð 	ð 	ˆDðØ”×$Ò$¥S¨¡Y¤YÑ/Ô/Ð/Ð/øÝð ð ð Ø�ðøøøàŸš JØ$(¤JÔ$>ñ@ô @ð JØCIð 	ŒàˆŒˆˆs   É'I3É3
J É?J r   c                 ó    — t          d¦  «        ‚)NzWThe -S option is meaningless for the image formatter. Use -O style=<stylename> instead.)ÚNotImplementedError)r<   Úargs     r&   Úget_style_defszImageFormatter.get_style_defs™  s   € Ý!ð #Qñ Rô Rð 	Rr%   c                 ó    — | 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˜DœMÑ)Ð)r%   c                 ó@   — ||                       ¦   «         z  | j        z   S )z8
        Get the Y coordinate of a line number.
        )rÅ   r    ©r<   Ú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Ðr%   c                 ó&   — || j         z   | j        z   S )z?
        Get the X coordinate of a character position.
        )r    r·   )r<   Ú
linelengths     r&   Ú_get_char_xzImageFormatter._get_char_x¯  s   € ð ˜DœNÑ*¨TÔ-CÑCÐCr%   c                 óV   — |                       |¦  «        |                      |¦  «        fS )zL
        Get the actual position for a character and line position.
        )rÎ   rÉ   )r<   rÍ   rÈ   s      r&   Ú_get_text_poszImageFormatter._get_text_posµ  s+   € ð ×Ò 
Ñ+Ô+¨T×-=Ò-=¸fÑ-EÔ-EÐEÐEr%   c                 ó:   — | 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Ô 8Ð9Ð9r%   c                 ó2   — |d         �d|d         z   }nd}|S )zE
        Get the correct color for the token from the style.
        ÚcolorNú#z#000r$   )r<   rL   Úfills      r&   Ú_get_text_colorzImageFormatter._get_text_colorÁ  s(   € ð �Œ>Ð%Ø˜˜wœÑ'ˆDˆDàˆDØˆr%   c                 ó2   — |d         �d|d         z   }nd}|S )zP
        Get the correct background color for the token from the style.
        ÚbgcolorNrÕ   r$   )r<   rL   Úbg_colors      r&   Ú_get_text_bg_colorz!ImageFormatter._get_text_bg_colorË  s*   € ð �ÔÐ'Ø˜U 9Ô-Ñ-ˆHˆHàˆHØˆr%   c                 óP   — | j                              |d         |d         ¦  «        S )z5
        Get the correct font for the style.
        r’   Úitalic)r1   r”   )r<   rL   s     r&   Ú_get_style_fontzImageFormatter._get_style_fontÕ  s$   € ð Œz×"Ò" 5¨¤=°%¸´/ÑBÔBÐBr%   c                 ó|   — |                       |¦  «        | j        z   |                      |dz   ¦  «        | j        z   fS )z.
        Get the required image size.
        r   )rÎ   r    rÉ   )r<   ÚmaxlinelengthÚ	maxlinenos      r&   Ú_get_image_sizezImageFormatter._get_image_sizeÛ  sD   € ð × Ò  Ñ/Ô/°$´.Ñ@Ø× Ò  ¨Q¡Ñ/Ô/°$´.Ñ@ðBð 	Br%   c                 óú   — |                       |                      |¦  «        t          |¦  «                             | j        ¦  «        | j                             | j        | j        ¦  «        | j	        d¬¦  «         dS )zA
        Remember a line number drawable to paint later.
        N©r�   Útext_fgÚtext_bg)
Ú
_draw_textrÒ   ÚstrÚrjustr¥   r1   r”   r¦   r§   r£   )r<   ÚposnorÈ   s      r&   Ú_draw_linenumberzImageFormatter._draw_linenumberâ  s}   € ð 	�ŠØ×$Ò$ UÑ+Ô+Ý�‰KŒK×Ò˜dÔ4Ñ5Ô5Ø”×$Ò$ TÔ%:Ø%)Ô%<ñ>ô >àÔ'Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r%   c                 óD   — | j                              |||||f¦  «         dS )zB
        Remember a single drawable tuple to paint later.
        N)r¼   r¸   )r<   Úposr�   r�   rå   ræ   s         r&   rç   zImageFormatter._draw_textï  s+   € ð 	Œ×Ò˜s D¨$°¸ÐAÑBÔBÐBÐBÐBr%   c                 ó  — dx}x}}dx}}|D �][\  }}|| j         vr|j        }|| j         v°| j         |         }	|                     d¦  «        }|                     d¦  «        }
t	          |
¦  «        D ]õ\  }}|                     d¦  «        }|r»|                      |                      ||¦  «        ||                      |	¦  «        |  	                    |	¦  «        |  
                    |	¦  «        ¬¦  «         | j                             |¦  «        \  }}||z  }t          ||¦  «        }|t          |¦  «        z  }t          ||¦  «        }|                     d¦  «        r	d}d}|dz  }Œö�Œ]|| _        || _        || _        dS )z9
        Create drawables for the token content.
        r   rŒ   Tú
rä   r­   N)ru   ÚparentÚ
expandtabsrH   Ú	enumerateÚrstriprç   rÐ   rÞ   r×   rÛ   r1   r†   ÚmaxÚlenrd   rà   Ú	maxcharnorá   )r<   ÚtokensourcerÈ   Úcharnorö   rà   rÍ   ÚttypeÚvaluerL   rO   ÚirP   ÚtempÚ
temp_widthrN   s                   r&   Ú_create_drawablesz ImageFormatter._create_drawablesõ  s»  € ð '(Ð'ˆÐ'�˜)Ø%&Ð&ˆ˜
Ø'ð 	 ñ 	 ‰LˆE�5Ø˜tœ{Ð*Ð*Øœ�ð ˜tœ{Ð*Ð*à”K Ô&ˆEð ×$Ò$ QÑ'Ô'ˆEØ×$Ò$ TÑ*Ô*ˆEå$ UÑ+Ô+ð  ð  ‘��4Ø—{’{ 4Ñ(Ô(�Øð 7Ø—O’OØ×*Ò*¨:°vÑ>Ô>ØØ#×3Ò3°EÑ:Ô:Ø"&×"6Ò"6°uÑ"=Ô"=Ø"&×"9Ò"9¸%Ñ"@Ô"@ð $ñ ô ð ð %)¤J×$<Ò$<¸TÑ$BÔ$B‘M�J Ø *Ñ,�JÝ$'¨°zÑ$BÔ$B�MØ�c $™iœiÑ'�FÝ # I¨vÑ 6Ô 6�IØ—=’= Ñ&Ô&ð  à!"�JØ�FØ˜a‘K�Føñ' ð( +ˆÔØ"ˆŒØˆŒˆˆr%   c                 ó¢   — | j         sdS t          | j        ¦  «        D ]0}|| j        z   }|| j        z  dk    r|                      ||¦  «         Œ1dS )z8
        Create drawables for the line numbers.
        Nr   )rª   Úrangerá   r®   r¬   rë   )r<   ÚpÚns      r&   Ú_draw_line_numbersz!ImageFormatter._draw_line_numbers  sn   € ð Ô ð 	ØˆFÝ�t”~Ñ&Ô&ð 	,ð 	,ˆAØ�DÔ*Ñ*ˆAØ�DÔ)Ñ)¨aÒ/Ð/Ø×%Ò% a¨Ñ+Ô+Ð+øð	,ð 	,r%   c                 ó.  — | j         sdS | j        €dS t          j        |¦  «        }|j        d         }| j        | j        z   | j        z
  }|                     d||fg| j	        ¬¦  «         | j
        r"|                     |df||fg| j        ¬¦  «         ~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«   rP   )r<   ÚimÚdrawÚrecthÚrectws        r&   Ú_paint_line_number_bgz$ImageFormatter._paint_line_number_bg(  s¸   € ð Ô ð 	ØˆFØÔÐ&ØˆFÝŒ~˜bÑ!Ô!ˆØ”˜”ˆØ” Ô!7Ñ7¸$Ô:NÑNˆØ�Š˜ ¨ Ð/Ø Ô/ð 	ñ 	1ô 	1ð 	1àÔ%ð 	NØ�IŠI˜˜q�z E¨5 >Ð2¸Ô9LˆIÑMÔMÐMØˆDˆDr%   c           	      ó¢  — |                       |¦  «         |                      ¦   «          t          j        d|                      | j        | j        ¦  «        | j        ¦  «        }|                      |¦  «         t          j
        |¦  «        }| j        rˆ| j        | j        z   | j        z
  dz   }|                      ¦   «         }|j        d         |z
  }| j        D ]B}|                      |dz
  ¦  «        }	|                     ||	f||z   |	|z   fg| j        ¬¦  «         ŒC| j        D ]\  }
}}}}|r\|                     ||¬¦  «        }|                     |
d         |
d         |
d         |d         z   |
d         |d         z   g|¬¦  «         |                     |
|||¬¦  «         Œ€|                     || 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  )r�   r�   )r�   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)r<   r÷   Úoutfiler
  r  Úxr  r  Ú
linenumberÚyrí   rú   r�   rå   ræ   Ú	text_sizes                   r&   ÚformatzImageFormatter.format9  sò  € ð 	×Ò˜{Ñ+Ô+Ð+Ø×ÒÑ!Ô!Ð!ÝŒYØØ× Ò  Ô!3°T´^ÑDÔDØÔ!ñ
ô 
ˆð
 	×"Ò" 2Ñ&Ô&Ð&ÝŒ~˜bÑ!Ô!ˆàŒ=ð 	3Ø” Ô!7Ñ7¸$Ô:NÑNÐQRÑRˆAØ×)Ò)Ñ+Ô+ˆEØ”G˜A”J ‘NˆEØ"œmð 3ð 3�
Ø×$Ò$ Z°!¡^Ñ4Ô4�Ø—’  A ¨¨U©°A¸±IÐ(>Ð?Ø$(¤Mð ñ 3ô 3ð 3ð 3à26´.ð 	;ð 	;Ñ.ˆC�˜˜g wØð mØ ŸMšM¨u¸4˜MÑ@Ô@�	Ø—’  A¤¨¨A¬°°A´¸À1¼Ñ0EÀsÈ1ÄvÐPYÐZ[ÔP\ÑG\Ð]Ðdk�ÑlÔlÐlØ�IŠI�c˜5 t°'ˆIÑ:Ô:Ð:Ð:Ø
�Š�˜Ô*×0Ò0Ñ2Ô2Ñ3Ô3Ð3Ð3Ð3r%   N)r   )r    r!   r"   r#   rK   ÚaliasesÚ	filenamesÚunicodeoutputr´   r=   rÃ   rÅ   rÉ   rË   rÎ   rÐ   rÒ   r×   rÛ   rÞ   râ   rë   rç   rþ   r  r  r  r$   r%   r&   r   r   ë   sp  € € € € € ðjð jðZ €DØ#Ð#Ð#€GØ�	€Ià€Mà Ðð6ð 6ð 6ðpRð Rð Rð Rð*ð *ð *ðAð Að Aðð ð ðDð Dð DðFð Fð Fð:ð :ð :ðð ð ðð ð ðCð Cð CðBð Bð Bð
ð 
ð 
ðCð Cð Cð& ð & ð & ðP	,ð 	,ð 	,ðð ð ð"4ð 4ð 4ð 4ð 4r%   r   c                   ó&   — 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#   rK   r  r  r´   r$   r%   r&   r   r   ^  s5   € € € € € ðð ð €DØˆg€GØ�	€IØ ÐÐÐr%   r   c                   ó(   — 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   l  s7   € € € € € ðð ð €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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   z  s8   € € € € € ðð ð €DØ�hÐ€GØ�	€IØ ÐÐÐr%   r   ) r#   re   r3   Úpygments.formatterr   Úpygments.utilr   r   r   r   rC   ÚPILr   r	   r
   r±   ÚImportErrorrp   ÚwinregÚ__all__rV   r:   r6   r8   r   Ú	Exceptionr(   r*   r   r   r   r   r$   r%   r&   ú<module>r.     sÄ  ððð ð 
€	€	€	Ø 
€
€
€
à (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð ðØ/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø€M€MøØð ð ð Ø€M€M€MðøøøðØ€N€N€N€NøØð ð ð ðØ Ð Ð Ð Ð øØð ð ð Øˆˆˆðøøøøøðøøøð ð  ð  €ð GÐFÐFØ˜hÐ'Ø�(Ø! =Ð1ð	
ð 
€ð +Ð Ø%Ð ØÐ ð7ð 7ð 7ð 7ð 7�kñ 7ô 7ð 7ð3ð 3ð 3ð 3ð 3�9ñ 3ô 3ð 3ðk(ð k(ð k(ð k(ð k(ñ k(ô k(ð k(ð\m4ð m4ð m4ð m4ð m4�Yñ m4ô m4ð m4ðf!ð !ð !ð !ð !˜ñ !ô !ð !ð"ð "ð "ð "ð "˜ñ "ô "ð "ð!ð !ð !ð !ð !˜ñ !ô !ð !ð !ð !sA   ¢/ ¯9¸9½A ÁAÁAÁAÁAÁAÁAÁAÁA