Ë m›+ÙcéÝãó†—dZddlZddlZddlmZddlmZmZmZm Z ddl Z ddl m Z m Z mZdZ ddlZgd¢Zgd ¢d d gd gd dgdœZdZdZdZGd„de«ZGd„de«ZGd„d«ZGd„de«ZGd„de«ZGd„de«ZGd„d e«Zy#e$rdZYŒswxYw#e$r ddlZn #e$rdZYnwxYwYŒŒwxYw)!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Ú BOLDITALICzDejaVu Sans Monoz Courier NewÚMenlocó—eZdZdZy)ÚPilNotAvailablez,When Python imaging library is not availableN©Ú__name__Ú __module__Ú __qualname__Ú__doc__©óú Manages a set of fonts: normal, italic, bold, etc... cóR—||_||_i|_d|_d|_t |d«st jj|«rBtj||j«}d|_tD]}||j|<Œytjjd«r|s t|_|j!«ytjjd«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__zFontManager.__init__AsÞ€Ø"ˆŒØ"ˆŒØˆŒ ؈Œ ؈Œ Ü �9˜fÔ %¬¯©¯©¸ Ô)BÜ×%Ñ% i°·±Ó@ˆDØ ˆDŒMß�Ø$(�— ‘ ˜5Ò!ð ð ä �<‰<× "Ñ " 5Ô )ÙÜ!6�”Ø × Ñ Õ Ü �\‰\× $Ñ $ XÔ .ÙÜ!6�”Ø × Ñ Õ áÜ!6�”Ø × Ñ Õ r%có^—tjd|›d|›�dgtjd¬«}|j«\}}|jdk(r]|j «}|D]G}|j d«rŒ|j«j«jd«}|sŒE|cSyy)Nzfc-listz:style=Úfile)ÚstdoutÚstderrrsFontconfig warning:Ú:) Ú subprocessÚPopenÚPIPEÚ communicateÚ returncodeÚ splitlinesr<ÚdecodeÚstrip) rCÚnamerEÚprocrIÚ_ÚlinesÚliner6s r&Ú_get_nix_font_pathzFontManager._get_nix_font_path\s¡€Ü×Ñ ºTÁ5Ð,IÈ6Ð RÜ'1§¡¸tôEˆà×$Ñ$Ó&‰ ˆ�Ø �?‰?˜aÒ Ø×%Ñ%Ó'ˆEÛ�Ø—?‘?Ð#9Ô:ØØ—{‘{“}×*Ñ*Ó,×2Ñ2°3Ó7�ÚØ’Kð ð ð r%có*—tdD]O}|j|j|«}|€Œ"tj||j «|j d<ntd|jz«‚dD]›}t|D]O}|j|j|«}|€Œ"tj||j «|j |<Œ]|dk(r|j d|j |<Œ€|j d|j |<Œ�y)NrúNo usable fonts named: "%s"©rrrrr)r9rYr/r r8r0r1r()rCrTr6rEÚ stylenames r&rBzFontManager._create_nixjsû€Ü˜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Ò%ñ6r%cóh—|j|dz|zj«j««S)NÚ )ÚgetrSÚlower)rCÚfont_maprTrEs r&Ú_get_mac_font_pathzFontManager._get_mac_font_paths,€Ø�|‰|˜T C™Z¨%Ñ/×6Ñ6Ó8×>Ñ>Ó@ÓAÐAr%có‡—i}tjjtjd«d«ddfD]/Š|j ˆfd„tj ‰«D««Œ1t dD]P}|j||j|«}|€Œ#tj||j«|jd<ntd|jz«‚dD]œ}t |D]P}|j||j|«}|€Œ#tj||j«|j|<Œ^|d k(r|jd |j|<Œ�|jd|j|<Œžy) NÚHOMEzLibrary/Fonts/z/Library/Fonts/z/System/Library/Fonts/c3óü•K—|]s}|j«jd«rRtjj |«dj«tjj ‰|«f–—Œuy­w))ÚttfÚttcrN)raÚendswithr5r6ÚsplitextÚjoin)Ú.0ÚfÚfont_dirs €r&Ú z*FontManager._create_mac..†s^øèø€ð7á-�AØ—7‘7“9×%Ñ% nÔ5ô—‘×!Ñ! !Ó$ QÑ'×-Ñ-Ó/´·±·±¸hÈÓ1JÔKÙ-ùsƒA9A<rr[r\rr)r5r6rkÚgetenvÚupdateÚlistdirr9rcr/r r8r0r1r()rCrbrTr6rEr]rns @r&r@zFontManager._create_mac‚sYø€ØˆÜŸ™Ÿ™¤b§i¡i°Ó&7Ð9IÓJØ*Ð,DóFˆHà �O‰Oó7䟙 HÔ-ó7õ 7ðFô˜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Ò%ñ6r%cóÈ—dD]7}|D]0} |›|xrd|z›|›�}tj||«\}} |ccSŒ9|rtd|›d|d›d�«‚y#t$rYŒXwxYw)N)rz (TrueType)r_zFont z (rz) not found in registry)Ú_winregÚ QueryValueExÚOSErrorr() rCÚkeyÚbasenameÚstylesÚfailÚsuffixrEÚvalnameÚvalrVs r&Ú _lookup_winzFontManager._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}tjdftjdftjdftjdfg}|D�]} tj|Ž} |j ||j t dd«}tj||j«|jd<dD]”}|j ||j t |«}|r.tj||j«|j|<ŒW|dk(r|jd|j|<Œy|jd|j|<Œ– tj|«y|r|‚td«‚#t$r }|}Yd}~nd}~wwxYw tj|«n#tj|«wxYw�Œv#t$rY�Œ‚wxYw) Nz2Software\Microsoft\Windows NT\CurrentVersion\Fontsz/Software\Microsoft\Windows\CurrentVersion\FontsrTr\rrz$Can't open Windows font registry key)rtÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚOpenKeyr~r/r9r r8r0r1ÚCloseKeyr(rv)rCÚ lookuperrorÚkeynamesÚkeynamerwr6rEÚerrs r&r>zFontManager._create_win®s¥€Øˆ Ü×/Ñ/Ð1fÐgÜ×/Ñ/Ð1cÐdÜ×0Ñ0Ð2gÐhÜ×0Ñ0Ð2dÐeðhˆô ˆGð Ü—o‘o wÐ/�ð*Ø×+Ñ+¨C°·±ÄÈÑAQÐSWÓX�DÜ+4×+=Ñ+=¸dÀDÇNÁNÓ+S�D—J‘J˜xÑ(Û!A˜Ø#×/Ñ/°°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ð"Bðô×$Ñ$ SÖ)ð' ñ:Ø!Ð!ÜÐFÓGÐ Gøô$ò&Ø"%•Kûð&úØä×$Ñ$ SÕ)ø”G×$Ñ$ SÕ)úÑ)øÜò Úð úsOÁGÁ#C+E6ÅGÅ6 F Å?FÆF%ÆF Æ F%ÆGÆ%F<Æ<GÇ GÇ Gcó$—|jd«S)z) Get the character size. ÚM)Ú get_text_size©rCs r&Ú get_char_sizezFontManager.get_char_sizeÕs€ð×!Ñ! #Ó&Ð&r%có‚—|jd}t|d«r|j|«ddS|j|«S)z4 Get the text size (width, height). rÚgetbboxéé)r1r4rŽÚgetsize)rCÚtextrDs r&rŠzFontManager.get_text_sizeÛsA€ð�z‰z˜(Ñ#ˆÜ �4˜Ô #Ø—<‘< Ó% a¨Ð*Ð *à—<‘< Ó%Ð %r%cór—|r.|r,|jr|jd«S|jdS|r,|jr|jd«S|jdS|r,|jr|jd«S|jdS|jr|jd«S|jdS)z> Get the font based on bold and italic flags. rrrr)r3Ú get_styler1)rCÚboldÚobliques r&Úget_fontzFontManager.get_fontås£€ñ ‘GØ�}Š}Ø—~‘~ lÓ3Ð3à—:‘:˜lÑ+Ð +Ù Ø�}Š}Ø—~‘~ fÓ-Ð-à—:‘:˜fÑ%Ð %Ù Ø�}Š}Ø—~‘~ hÓ/Ð/à—:‘:˜hÑ'Ð 'à�}Š}Ø—~‘~ hÓ/Ð/à—:‘:˜hÑ'Ð 'r%có¤—|j|}t|D]} |j|«|cS|S#t$rYŒ't$r|cYcSwxYw)z} Get the specified style of the font if it is a variable font. If not found, return the normal font. )r1r9Úset_variation_by_nameÚ ValueErrorrv)rCrErDÚ style_names r&r”zFontManager.get_styleþs`€ð �z‰z˜%Ñ ˆÜ  œ-ˆJð Ø×*Ñ*¨:Ô6Ø’ ð(ðˆ øô ò ÙÜò Ø” ð ús�5µ AÁ AÁAN)é)F)r r!r"r#rFrYrBrcr@r~r>rŒrŠr—r”r$r%r&r*r*<sA„ñóò6 ò=ò*Bò=ó: ò%HòN'ò &ò(ó2r%r*có˜—eZdZdZdZgd¢ZdgZdZdZd„Z dd„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zy)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—ts td«‚tj|fi|¤Žd|_t |j «|_|j j€d|_n|j j|_t|dgd¢|jd¬«|_ t|d d «|_ t|d d «|_t|d d«}t|j!dd«|«|_|j"j%«\|_|_|j!dd«|_|j!dd«|_t|dd «|_t1|dd«|_t1|dd«|_t|dd«|_t1|dd«|_t1|dd«|_t|dd«|_t|dd«|_|j8r/|j&|j.z|j6d zz|_ nd |_ g|_!tE|d!g«}|D]'} |jBjGtI|««Œ)|j!d"|j jL«xsd#|_'g|_(y#tJ$rYŒlwxYw)$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�r0rœ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_availablerrrFr2ÚdictrEryÚbackground_colorrÚdefault_image_formatr£rr¨rªr*r`r1rŒÚfontwÚfonthr«r¬r­rr®r¯r°r²r³r´r¶Úline_number_widthr·rÚappendÚintršÚhighlight_colorr¸Ú drawables)rCÚoptionsÚfontsizeÚ hl_lines_strrXs r&rFzImageFormatter.__init__ˆst€õÜ!Ø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ÊJcó—td«‚)NzWThe -S option is meaningless for the image formatter. Use -O style= instead.)ÚNotImplementedError)rCÚargs r&Úget_style_defszImageFormatter.get_style_defsÀs€Ü!ð#QóRð Rr%có4—|j|jzS)z+ Get the height of a line. )r¾rªr‹s r&Ú_get_line_heightzImageFormatter._get_line_heightÄs€ð�z‰z˜DŸM™MÑ)Ð)r%cóB—||j«z|jzS)z8 Get the Y coordinate of a line number. )rÌr¨©rCÚlinenos r&Ú _get_line_yzImageFormatter._get_line_yÊs!€ð˜×-Ñ-Ó/Ñ/°$·.±.Ñ@Ð@r%có—|jS)z/ Get the width of a character. )r½r‹s r&Ú_get_char_widthzImageFormatter._get_char_widthÐs€ð�z‰zÐr%có:—||jz|jzS)z? Get the X coordinate of a character position. )r¨r¿)rCÚ linelengths r&Ú _get_char_xzImageFormatter._get_char_xÖs€ð˜DŸN™NÑ*¨T×-CÑ-CÑCÐCr%cóF—|j|«|j|«fS)zL Get the actual position for a character and line position. )rÕrÐ)rCrÔrÏs r&Ú _get_text_poszImageFormatter._get_text_posÜs%€ð×Ñ  Ó+¨T×-=Ñ-=¸fÓ-EÐEÐEr%có<—|j|j|«fS)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|dz}|Sd}|S)zE Get the correct color for the token from the style. ÚcolorÚ#z#000r$)rCrEÚfills r&Ú_get_text_colorzImageFormatter._get_text_colorès/€ð �‰>Ð %ؘ˜w™Ñ'ˆDðˆ ðˆD؈ r%có(—|d� d|dz}|Sd}|S)zP Get the correct background color for the token from the style. ÚbgcolorNrÜr$)rCrEÚbg_colors r&Ú_get_text_bg_colorz!ImageFormatter._get_text_bg_coloròs1€ð �Ñ Ð 'ؘU 9Ñ-Ñ-ˆHðˆðˆH؈r%cóF—|jj|d|d«S)z5 Get the correct font for the style. r•Úitalic)r1r—)rCrEs r&Ú_get_style_fontzImageFormatter._get_style_fontüs#€ð�z‰z×"Ñ" 5¨¡=°%¸±/ÓBÐBr%có€—|j|«|jz|j|dz«|jzfS)z. Get the required image size. r)rÕr¨rÐ)rCÚ maxlinelengthÚ maxlinenos r&Ú_get_image_sizezImageFormatter._get_image_sizesB€ð× Ñ  Ó/°$·.±.Ñ@Ø× Ñ  ¨Q¡Ó/°$·.±.Ñ@ðBð Br%có—|j|j|«t|«j|j«|j j |j|j«|jd¬«y)zA Remember a line number drawable to paint later. N©rDÚtext_fgÚtext_bg) Ú _draw_textrÙÚstrÚrjustr­r1r—r®r¯r«)rCÚposnorÏs r&Ú_draw_linenumberzImageFormatter._draw_linenumber sj€ð �‰Ø × $Ñ $ UÓ +Ü �‹K× Ñ ˜d×4Ñ4Ó 5Ø—‘×$Ñ$ T×%:Ñ%:Ø%)×%<Ñ%<ó>à×'Ñ'Øð õ r%cóD—|jj|||||f«y)zB Remember a single drawable tuple to paint later. N)rÃrÀ)rCÚposr’rDrìrís r&rîzImageFormatter._draw_texts!€ð �‰×јs D¨$°¸ÐAÕBr%c óÈ—dx}x}}dx}}|D�]=\}}||jvr|j}||jvrŒ|j|} |jd«}|jd«} t | «D]Ï\} } | j d«} | rœ|j |j||«| |j| «|j| «|j| «¬«|jj| «\}}||z }t||«}|t| «z }t||«}| jd«sŒÇd}d}|dz }ŒÑ�Œ@||_||_||_y)z9 Create drawables for the token content. rr�TÚ rërµN)ryÚparentÚ expandtabsrQÚ enumerateÚrstriprîr×rårÞrâr1rŠÚmaxÚlenrirçÚ maxcharnorè)rCÚ tokensourcerÏÚcharnorýrçrÔÚttypeÚvaluerErWÚirXÚtempÚ temp_widthrVs r&Ú_create_drawablesz ImageFormatter._create_drawablessq€ð'(Ð'ˆÐ'�˜)Ø%&Ð&ˆ ˜ Ü'‰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óº—|jsyt|j«D]6}||jz}||jzdk(sŒ%|j ||«Œ8y)z8 Create drawables for the line numbers. Nr)r²Úrangerèr¶r´rò)rCÚpÚns r&Ú_draw_line_numbersz!ImageFormatter._draw_line_numbersDsV€ð× Ò Ø Ü�t—~‘~Ö&ˆAØ�D×*Ñ*Ñ*ˆAØ�D×)Ñ)Ñ)¨aÓ/Ø×%Ñ% a¨Õ+ñ'r%cón—|jsy|j€ytj|«}|jd}|j |j z|jz }|jd||fg|j¬«|jr#|j|df||fg|j¬«~y)z@ Paint the line number background on the image. Néÿÿÿÿ)rr©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_bgOs­€ð× Ò Ø Ø × Ñ Ð &Ø Ü�~‰~˜bÓ!ˆØ—‘˜‘ ˆØ—‘ ×!7Ñ!7Ñ7¸$×:NÑ:NÑNˆØ �‰˜ ¨ Ð/Ø ×/Ñ/ð ô 1à × %Ò %Ø �I‰I˜˜q�z E¨5 >Ð2¸×9LÑ9LˆIÔ MÙ r%c óš—|j|«|j«tjd|j |j |j «|j«}|j|«tj|«}|jr™|j|jz|jz dz}|j«}|j d|z }|jD]?}|j#|dz «} |j%|| f||z| |zfg|j&¬«ŒA|j(D]a\} } } } }|rB|j+| | ¬«}|j%| d| d| d|dz| d|dzg|¬«|j-| | | | ¬«Œc|j/||j0j3««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µrr )r’rD)rDrÝN)rr rÚnewrérçrèr»rr rr·r¨r¿r°rÌrrÐrr¸rÃÚtextsizer’Úsaver£Úupper)rCrþÚoutfilerrÚxrrÚ linenumberÚyrôrrDrìríÚ text_sizes r&ÚformatzImageFormatter.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� Ø×$Ñ$ Z°!¡^Ó4�Ø—‘  A ¨¨U©°A¸±IÐ(>Ð?Ø$(§M¡Mðõ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Õ :ð 3Að �‰�˜×*Ñ*×0Ñ0Ó2Õ3r%N)r)r r!r"r#rTÚaliasesÚ filenamesÚ unicodeoutputr¼rFrÊrÌrÐrÒrÕr×rÙrÞrâråréròrîrr rr!r$r%r&r r sŠ„ñlð^ €DÚ#€GØ� €Ià€Mà Ðò6ópRò*ò Aò ò Dò Fò :ò òòCò Bò  òCò & òP ,òó"4r%r có$—eZdZdZdZdgZdgZdZy)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#rTr"r#r¼r$r%r&r r …s"„ñð €D؈g€GØ� €IØ Ñr%r có&—eZdZdZdZddgZdgZdZy)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ó&—eZdZdZdZddgZdgZdZy)rz  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&rr¡s%„ñð €DØ�hЀGØ� €IØ Ñr%r) r#r5r:Úpygments.formatterrÚ pygments.utilrrrrrLÚPILrr r r¹Ú ImportErrorrtÚwinregÚ__all__r9rAr=r?rÚ Exceptionr(r*r r r rr$r%r&Úr5sðñó Û å(÷óóðß/Ñ/Ø€MðÛò €ò GؘhÐ'Ø�(Ø! =Ð1ñ  €ð+ÐØ%ÐØÐô7�kô7ô3�9ô3÷QñQôho4�Yôo4ôj !˜ô !ô "˜ô "ô !˜õ !øðUòØ‚Mðûð òðÜ øØ òØŠðüðúsF¢ B¯B%ÂB"Â!B"Â%CÂ+B0Â/CÂ0B:Â7CÂ9B:Â:CÂ?C