Ë
    #´˜jrO  ã                   óP  — d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ d„ Zd„ Zd	„ Zd
„ Zej$                  d„ «       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„ Zedk(  r ddlmZ  eddd¬«       ddlmZ  ee«       yy)z†Line numbering implementation for IDLE as an extension.
Includes BaseSideBar which can be extended for other sidebar based extensions
é    N)ÚFont)ÚidleConf)Ú	Delegator)Úmacosxc                 óT   — | j                  |«      }|rt        t        |«      «      S dS )z7Return the line number of an index in a Tk text widget.N)ÚindexÚintÚfloat)Útextr   Ú
text_indexs      ú!lib/python3.12/idlelib/sidebar.pyÚ
get_linenor      s'   € à—‘˜EÓ"€JÙ%/Œ3Œu�ZÓ Ó!Ð9°TÐ9ó    c                 ó   — t        | d«      S )z7Return the number of the last line in a Tk text widget.zend-1c)r   ©r   s    r   Úget_end_linenumberr      s   € ä�d˜HÓ%Ð%r   c                 óF   — | j                  |› d�|› d�d«      }|r|d   S dS )z@Display height, in lines, of a logical line in a Tk text widget.z
 linestartz lineendÚdisplaylinesr   )Úcount)r   r   Úress      r   Úget_displaylinesr      s9   € à
�*‰*˜�w˜jÐ)Ø�w˜hÐ'Ø#ó%€Cñ ˆ3ˆq‰6Ð˜aÐr   c           
      óÒ  — | j                  «       }|dk(  r| j                  «       }n$|dk(  r| j                  «       }nt        d|› �«      ‚t	        t        | j                  j                  |d   | j                  d«      | j                  d«      g«      «      }t	        t        | j                  j                  |d   | j                  d«      | j                  d«      g«      «      }||fS )z;Get the total padding of a Tk widget, including its border.ÚpackÚgridzUnsupported geometry manager: ÚpadxÚborderÚpady)	Úwinfo_managerÚ	pack_infoÚ	grid_infoÚ
ValueErrorÚsumÚmapÚtkÚgetintÚcget)ÚwidgetÚmanagerÚinfor   r   s        r   Úget_widget_paddingr*   !   sã   € ð ×"Ñ"Ó$€GØ�&ÒØ×ÑÓ!‰Ø	�FÒ	Ø×ÑÓ!‰äÐ9¸'¸ÐCÓDÐDô Œs�6—9‘9×#Ñ#ØˆV‰Ø�‰�FÓØ�‰�HÓð&ó ó €Dô
 Œs�6—9‘9×#Ñ#ØˆV‰Ø�‰�FÓØ�‰�HÓð&ó ó €Dð
 �ˆ:Ðr   c              #   óà   K  — | j                  t        j                  ¬«       	 d –— | j                  t        j                  ¬«       y # | j                  t        j                  ¬«       w xY w­w)N©Ústate)Ú	configurer$   ÚNORMALÚDISABLEDr   s    r   Útemp_enable_text_widgetr1   ;   sD   è ø€ à‡N�NœŸ™€NÔ#ð*Ûà�‰œRŸ[™[ˆÕ)øˆ�‰œRŸ[™[ˆÕ)üs   ‚!A.¤A	 ¨!A.Á	"A+Á+A.c                   ó^   — e 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)ÚBaseSideBarz%A base class for sidebars using Text.c                 óî   — || _         |j                  | _        |j                  | _        d| _        | j                  «       | _        | j                  «        | j                  «        | j                  «        y ©NF)
ÚeditwinÚ
text_frameÚparentr   Úis_shownÚinit_widgetsÚmain_widgetÚbind_eventsÚupdate_fontÚupdate_colors)Úselfr6   s     r   Ú__init__zBaseSideBar.__init__F   s]   € ØˆŒØ×(Ñ(ˆŒØ—L‘LˆŒ	àˆŒà×,Ñ,Ó.ˆÔà×ÑÔà×ÑÔØ×ÑÕr   c                 ó   — t         ‚)z<Initialize the sidebar's widgets, returning the main widget.©ÚNotImplementedError©r?   s    r   r:   zBaseSideBar.init_widgetsT   ó   € ä!Ð!r   c                 ó   — t         ‚)ú;Update the sidebar text font, usually after config changes.rB   rD   s    r   r=   zBaseSideBar.update_fontX   rE   r   c                 ó   — t         ‚)ú=Update the sidebar text colors, usually after config changes.rB   rD   s    r   r>   zBaseSideBar.update_colors\   rE   r   c                 ó   — t         ‚)z,Layout the widget, always using grid layout.rB   rD   s    r   r   zBaseSideBar.grid`   rE   r   c                 óL   — | j                   s| j                  «        d| _         y y )NT)r9   r   rD   s    r   Úshow_sidebarzBaseSideBar.show_sidebard   s   € Ø�}Š}Ø�I‰IŒKØ ˆD�Mð r   c                 ó`   — | j                   r"| j                  j                  «        d| _         y y r5   )r9   r;   Úgrid_forgetrD   s    r   Úhide_sidebarzBaseSideBar.hide_sidebari   s'   € Ø�=Š=Ø×Ñ×(Ñ(Ô*Ø!ˆD�Mð r   c                 ó   — t         ‚)z8Hook for vertical scrolling for sub-classes to override.rB   ©r?   ÚargsÚkwargss      r   Úyscroll_eventzBaseSideBar.yscroll_eventn   rE   r   c                 ól   —  | j                   j                  j                  |Ž   | j                  |i |¤ŽS )úmRedirect vertical scrolling to the main editor text widget.

        The scroll bar is also updated.
        )r6   ÚvbarÚsetrT   rQ   s      r   Úredirect_yscroll_eventz"BaseSideBar.redirect_yscroll_eventr   s6   € ð
 	ˆ�‰×Ñ×Ñ˜tÑ$Ø!ˆt×!Ñ! 4Ð2¨6Ñ2Ð2r   c                 ó8   — | j                   j                  «        y)z8Redirect focus-in events to the main editor text widget.Úbreak)r   Ú	focus_set©r?   Úevents     r   Úredirect_focusin_eventz"BaseSideBar.redirect_focusin_eventz   s   € à�	‰	×ÑÔØr   c                 óˆ   — | j                   j                  «        | j                   j                  |d|j                  ¬«       y)z<Redirect mouse button events to the main editor text widget.r   ©ÚxÚyr[   )r   r\   Úevent_generaterc   )r?   r^   Ú
event_names      r   Úredirect_mousebutton_eventz&BaseSideBar.redirect_mousebutton_event   s2   € à�	‰	×ÑÔØ�	‰	× Ñ  ¨q°E·G±GÐ Ô<Ør   c                 ój   — | j                   j                  dd|j                  |j                  ¬«       y)z7Redirect mouse wheel events to the editwin text widget.ú<MouseWheel>r   )rb   rc   Údeltar[   )r   rd   rc   ri   r]   s     r   Úredirect_mousewheel_eventz%BaseSideBar.redirect_mousewheel_event…   s.   € à�	‰	× Ñ  Ø#$¨¯©°u·{±{ð 	!ô 	Dàr   c                 óø  ‡ ‡	‡
‡‡‡— ‰ j                   ‰ j                  d<   ‰ j                  j                  d‰ j                  «       ‰ j                  j                  d‰ j
                  «       ˆ fd„}dD ]A  }d|› d�d|› d�d	|› d
�fD ]  } |||¬«       Œ d|› d�d|› d�fD ]  } ||d|› d�¬«       Œ ŒC d Šd Šd Š	ˆ ˆfd„Š
ˆ
ˆˆ ˆfd„}‰ j                  j                  d|«       ˆˆ ˆfd„}‰ j                  j                  d|«       ˆ
ˆfd„}‰ j                  j                  d|«       ˆ	ˆ
ˆˆ ˆfd„Šˆ	ˆˆ ˆfd„}‰ j                  j                  d|«       ˆ	ˆ fd„}‰ j                  j                  d|«       y )NÚyscrollcommandz	<FocusIn>rh   c                 ó€   •— t        j                  ‰j                  |¬«      }‰j                  j	                  | |«       y )N)re   )Ú	functoolsÚpartialrf   r;   Úbind)re   Útarget_event_nameÚhandlerr?   s      €r   Úbind_mouse_eventz1BaseSideBar.bind_events.<locals>.bind_mouse_event›   s5   ø€ Ü×'Ñ'¨×(GÑ(GØ3DôFˆGà×Ñ×!Ñ! *¨gÕ6r   )é   é   é   é   z<Button-Ú>z<ButtonRelease-z<Bz-Motion>)rq   z<Double-Button-z<Triple-Button-c                 ó0  •— t        ‰j                  d| › �«      }t        ‰|g«      \  }}‰j                  j                  ddd«       ‰j                  j	                  d|› d�|dz   › d�«       ‰j                  j                  d||k(  r|n|dz   › d�«       y)	z6Helper function for drag and selection event handlers.ú@0,Úselú1.0Úendz.0é   ÚinsertN)r   r   ÚsortedÚ
tag_removeÚtag_addÚmark_set)Úy_coordÚlinenoÚaÚbr?   Ú
start_lines       €€r   Ú%drag_update_selection_and_insert_markzFBaseSideBar.bind_events.<locals>.drag_update_selection_and_insert_mark¿   s”   ø€ ä §	¡	¨S°°	¨?Ó;ˆFÜ˜: vÐ.Ó/‰DˆAˆqØ�I‰I× Ñ  ¨¨uÔ5Ø�I‰I×Ñ˜e¨ s¨" X°!°A±#°°b¨zÔ:Ø�I‰I×Ñ˜xØ,2°aªK¡&¸VÀa¹ZÐ!HÈÐKõMr   c                 ó¶   •— t        t        ‰j                  j                  d| j                  › �«      «      «      Š| j                  Š ‰| j                  «       y )Nrz   )r	   r
   r   r   rc   )r^   r‰   Úlast_yr?   rˆ   s    €€€€r   Úb1_mousedown_handlerz5BaseSideBar.bind_events.<locals>.b1_mousedown_handlerÈ   s@   ø€ ô œU 4§9¡9§?¡?°S¸¿¹¸	°?Ó#CÓDÓEˆJØ—W‘WˆFá1°%·'±'Õ:r   z
<Button-1>c                 ó^   •— d Šd Š‰j                   j                  dd| j                  ¬«       y )Nú<ButtonRelease-1>r   ra   )r   rd   rc   )r^   r‹   r?   rˆ   s    €€€r   Úb1_mouseup_handlerz3BaseSideBar.bind_events.<locals>.b1_mouseup_handlerÑ   s-   ø€ ð
 ˆJØˆFØ�I‰I×$Ñ$Ð%8¸AÀÇÁÐ$ÕIr   rŽ   c                 óH   •— ‰€y | j                   Š ‰| j                   «       y ©N)rc   )r^   r‰   r‹   s    €€r   Úb1_drag_handlerz0BaseSideBar.bind_events.<locals>.b1_drag_handlerÛ   s    ø€ àˆ~ØØ—W‘WˆFÙ1°%·'±'Õ:r   z<B1-Motion>c                  óš  •— ‰} | €‰j                   j                  ‰«       dŠy| dk  r(‰j                  j                  d| z   d«        ‰| «       n_| ‰j                   j	                  «       kD  rB‰j                  j                  d| z   ‰j                   j	                  «       z
  d«        ‰| «       ‰j                   j                  d‰«      Šy)z6Mimic Text auto-scrolling when dragging outside of it.Nr   éÿÿÿÿÚpixelsr~   é2   )r;   Úafter_cancelr   Úyview_scrollÚwinfo_heightÚafter)rc   Úauto_scrolling_after_idr‰   r‹   r?   Útext_auto_scrolls    €€€€€r   rœ   z1BaseSideBar.bind_events.<locals>.text_auto_scrollã   s¾   ø€ ð ˆAØˆyØ× Ñ ×-Ñ-Ð.EÔFØ*.Ð'ØØ�Q’Ø—	‘	×&Ñ& r¨A¡v¨xÔ8Ù5°aÕ8Ø�T×%Ñ%×2Ñ2Ó4Ò4Ø—	‘	×&Ñ& q¨1¡u¨t×/?Ñ/?×/LÑ/LÓ/NÑ'NØ'/ô1á5°aÔ8à× Ñ ×&Ñ& rÐ+;Ó<ñ $r   c                 ó\   •— ‰€)| j                   Š‰j                  j                  d‰«      Šy y )Nr   )rc   r;   rš   )r^   r›   r‹   r?   rœ   s    €€€€r   Úb1_leave_handlerz1BaseSideBar.bind_events.<locals>.b1_leave_handlerö   s5   ø€ ð 'Ð.àŸ™�à×$Ñ$×*Ñ*¨1Ð.>Ó?ñ (ð /r   z
<B1-Leave>c                 óF   •— ‰�‰j                   j                  ‰«       d Šy y r‘   )r;   r—   )r^   r›   r?   s    €€r   Úb1_enter_handlerz1BaseSideBar.bind_events.<locals>.b1_enter_handler  s+   ø€ ð 'Ð2Ø× Ñ ×-Ñ-Ð.EÔFØ*.Ñ'ð 3r   z
<B1-Enter>)rY   r   r;   rp   r_   rj   )r?   rs   Úbuttonre   rŒ   r�   r’   rž   r    r›   r‰   r‹   rˆ   rœ   s   `        @@@@@r   r<   zBaseSideBar.bind_events‹   sž  ý€ Ø&*×&AÑ&Aˆ�	‰	Ð"Ñ#ð 	×Ñ×Ñ˜k¨4×+FÑ+FÔGð 	×Ñ×Ñ˜n¨d×.LÑ.LÔMô	7ó
 #ˆFØ!)¨&¨°Ð3Ø!0°°¸Ð:Ø!# F 8¨8Ð4ó!�
ñ ! ¸zÖJð	!ð "1°°¸Ð:Ø!0°°¸Ð:ó!�
ñ ! Ø5=¸f¸XÀQÐ3GöIñ!ð #ð" ˆ
ð ˆð #'Ðõ	M÷	;ð 	×Ñ×Ñ˜lÐ,@ÔAö	Jð 	×Ñ×ÑÐ1Ð3EÔFõ	;ð 	×Ñ×Ñ˜m¨_Ô=÷	=ð 	=÷&	@ð 	×Ñ×Ñ˜lÐ,<Ô=õ	/ð 	×Ñ×Ñ˜lÐ,<Õ=r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r@   r:   r=   r>   r   rL   rO   rT   rY   r_   rf   rj   r<   © r   r   r3   r3   D   sG   „ Ù/òò"ò"ò"ò"ò!ò
"ò
"ò3òò
òó|>r   r3   c                   ó&   — e Zd ZdZd„ Zdd„Zdd„Zy)ÚEndLineDelegatorz}Generate callbacks with the current end line number.

    The provided callback is called after every insert and delete.
    c                 ó<   — t        j                  | «       || _        y r‘   )r   r@   Úchanged_callback)r?   rª   s     r   r@   zEndLineDelegator.__init__  s   € Ü×Ñ˜4Ô Ø 0ˆÕr   Nc                 ó†   — | j                   j                  |||«       | j                  t        | j                   «      «       y r‘   )Údelegater   rª   r   )r?   r   ÚcharsÚtagss       r   r   zEndLineDelegator.insert  s0   € Ø�‰×Ñ˜U E¨4Ô0Ø×ÑÔ0°·±Ó?Õ@r   c                 ó„   — | j                   j                  ||«       | j                  t        | j                   «      «       y r‘   )r¬   Údeleterª   r   )r?   Úindex1Úindex2s      r   r°   zEndLineDelegator.delete  s.   € Ø�‰×Ñ˜V VÔ,Ø×ÑÔ0°·±Ó?Õ@r   r‘   )r¢   r£   r¤   r¥   r@   r   r°   r¦   r   r   r¨   r¨   
  s   „ ñò1óAôAr   r¨   c                   óF   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	ÚLineNumbersz(Line numbers support for editor windows.c                 óÄ   •— t         ‰| �  |«       t        | j                  «      }| j                  j
                  j                  || j                  j                  ¬«       y )N©rš   )Úsuperr@   r¨   Úupdate_sidebar_textr6   ÚperÚinsertfilterafterÚundo)r?   r6   Úend_line_delegatorÚ	__class__s      €r   r@   zLineNumbers.__init__  sQ   ø€ Ü‰Ñ˜Ô!ä-¨d×.FÑ.FÓGÐð 	�‰×Ñ×*Ñ*Ð+=Ø15·±×1BÑ1Bð 	+õ 	Dr   c           	      óÂ  — t        | j                  «      \  }}t        j                  | j                  dt        j
                  d|dd¬«      | _        | j                  j                  t        j                  ¬«       d| _	        t        | j                  d   «      | _        t        | j                  «      5  | j                  j                  ddd	«       d d d «       | j                  j                  d
d
¬«       | j                  j                  d	t        j                  ¬«       t!        | j                  «      }| j#                  |«       | j                  S # 1 sw Y   ŒƒxY w)Nr~   rt   r   )ÚwidthÚwrapr   r   ÚborderwidthÚhighlightthicknessr,   r¿   r   Ú1Ú
linenumberF)Ú	takefocusÚexportselection)Újustify)r*   r   r$   ÚTextr8   ÚNONEÚsidebar_textÚconfigr0   Úprev_endÚtypeÚ_sidebar_width_typer1   r   Ú
tag_configÚRIGHTr   r¸   )r?   Ú_padxr   r}   s       r   r:   zLineNumbers.init_widgets'  s  € Ü(¨¯©Ó3‰ˆˆtÜŸG™G D§K¡K°q¼r¿w¹wØ)*°Ø01ÀaôIˆÔð 	×Ñ× Ñ ¤r§{¡{Ð Ô3àˆŒÜ#'¨×(9Ñ(9¸'Ñ(BÓ#CˆÔ Ü$ T×%6Ñ%6Õ7Ø×Ñ×$Ñ$ X¨s°LÔA÷ 8à×Ñ× Ñ ¨5À%Ð ÔHØ×Ñ×$Ñ$ \¼2¿8¹8Ð$ÔDä  §¡Ó+ˆØ× Ñ  Ô%à× Ñ Ð ÷ 8Ð7ús   Â5EÅEc                 ó\   — | j                   j                  ddt        j                  ¬«       y )Nr~   r   ©ÚrowÚcolumnÚsticky)rÊ   r   r$   ÚNSEWrD   s    r   r   zLineNumbers.grid:  s!   € Ø×Ñ×Ñ 1¨Q´r·w±wÐÕ?r   c                 ód   — t        j                  | j                  dd«      }|| j                  d<   y )NÚmainÚEditorWindowÚfont)r   ÚGetFontr   rÊ   )r?   rÛ   s     r   r=   zLineNumbers.update_font=  s*   € Ü×Ñ §	¡	¨6°>ÓBˆØ$(ˆ×Ñ˜&Ò!r   c                 ó¨   — t        j                  t        j                  «       d«      }|d   }|d   }| j                  j	                  |||||¬«       y)rI   rÄ   Ú
foregroundÚ
background)ÚfgÚbgÚselectforegroundÚselectbackgroundÚinactiveselectbackgroundN)r   ÚGetHighlightÚCurrentThemerÊ   rË   )r?   ÚcolorsrÞ   rß   s       r   r>   zLineNumbers.update_colorsA  sW   € ä×&Ñ&¤x×'<Ñ'<Ó'>ÀÓMˆØ˜LÑ)ˆ
Ø˜LÑ)ˆ
Ø×Ñ× Ñ Ø˜jØ'¸*Ø%/ð 	!õ 	
r   c                 óÀ  — || j                   k(  ryt        t        |«      «      t        t        | j                   «      «      z
  }|rDt        t	        | j
                  d   «      «      }||z   }| j                  |«      | j
                  d<   t        | j
                  «      5  || j                   kD  rldj                  t        j                  dgt        t        t        | j                   dz   |dz   «      «      «      «      }| j
                  j                  d|d«       n"| j
                  j                  |dz   › d�d«       ddd«       || _         y# 1 sw Y   || _         yxY w)	zå
        Perform the following action:
        Each line sidebar_text contains the linenumber for that line
        Synchronize with editwin.text so that both sidebar_text and
        editwin.text contain the same number of linesNr¿   Ú
Ú r~   zend -1crÄ   z.0 -1c)rÌ   ÚlenÚstrr	   r
   rÊ   rÎ   r1   ÚjoinÚ	itertoolsÚchainr#   Úranger   r°   )r?   r}   Úwidth_differenceÚ	cur_widthÚ	new_widthÚnew_texts         r   r¸   zLineNumbers.update_sidebar_textL  s%  € ð �$—-‘-ÒØäœs 3›x›=¬3¬s°4·=±=Ó/AÓ+BÑBÐÙÜœE $×"3Ñ"3°GÑ"<Ó=Ó>ˆIØ!Ð$4Ñ4ˆIØ)-×)AÑ)AÀ)Ó)LˆD×Ñ˜gÑ&ä$ T×%6Ñ%6Õ7Ø�T—]‘]Ò"ØŸ9™9¤Y§_¡_Ø�DÜœœU 4§=¡=°1Ñ#4°c¸A±gÓ>Ó?ó&ó �ð ×!Ñ!×(Ñ(¨7°X¸|ÕLà×!Ñ!×(Ñ(¨C°©E¨7°&Ð)9¸9ÔE÷ 8ð ˆ�÷ 8ð ˆ�ús   ÂBEÅEc                 ó@   — | j                   j                  |d   «       y)Nr   r[   )rÊ   Úyview_movetorQ   s      r   rT   zLineNumbers.yscroll_eventg  s   € Ø×Ñ×&Ñ& t¨A¡wÔ/Ør   )r¢   r£   r¤   r¥   r@   r:   r   r=   r>   r¸   rT   Ú__classcell__©r½   s   @r   r´   r´     s+   ø„ Ù2ôDò!ò&@ò)ò	
òö6r   r´   c                   ó"   — e Zd Zd„ Zdd„Zdd„Zy)Ú WrappedLineHeightChangeDelegatorc                 ó<   — t        j                  | «       || _        y)z¿
        callback - Callable, will be called when an insert, delete or replace
                   action on the text widget may require updating the shell
                   sidebar.
        N)r   r@   Úcallback)r?   rü   s     r   r@   z)WrappedLineHeightChangeDelegator.__init__m  s   € ô 	×Ñ˜4Ô Ø ˆ�r   Nc                 óª   — d|v}|rt        | |«      }| j                  j                  |||«       |rt        | |«      }|k(  ry | j                  «        y )Nré   )r   r¬   r   rü   )r?   r   r­   r®   Úis_single_lineÚbefore_displaylinesÚafter_displayliness          r   r   z'WrappedLineHeightChangeDelegator.insertv  sW   € Ø UÐ*ˆÙÜ"2°4¸Ó"?Ðà�‰×Ñ˜U E¨4Ô0áÜ!1°$¸Ó!>ÐØ!Ð%8Ò8Øà�‰�r   c                 óà   — |€|dz   }t        | |«      t        | |«      k(  }|rt        | |«      }| j                  j                  ||«       |rt        | |«      }|k(  ry | j	                  «        y )Nz+1c)r   r   r¬   r°   rü   )r?   r±   r²   rþ   rÿ   r   s         r   r°   z'WrappedLineHeightChangeDelegator.delete„  sq   € Øˆ>Ø˜e‘^ˆFÜ# D¨&Ó1´ZÀÀfÓ5MÑMˆÙÜ"2°4¸Ó"@Ðà�‰×Ñ˜V VÔ,áÜ!1°$¸Ó!?ÐØ!Ð%8Ò8Øà�‰�r   r‘   )r¢   r£   r¤   r@   r   r°   r¦   r   r   rú   rú   l  s   „ ò!óôr   rú   c                   ó\   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zˆ xZS )ÚShellSidebarz0Sidebar for the PyShell window, for prompts etc.c                 ó   •— d | _         i | _        t        ‰| �  |«       t	        | j
                  «      }| j                  j                  j                  }|j                  | j                  ure|j                  | j                  j                  j                  ur9|j                  }|j                  | j                  j                  j                  urŒ9| j                  j                  j                  ||¬«       d| _        y )Nr¶   T)ÚcanvasÚline_promptsr·   r@   rú   Úchange_callbackr6   r¹   Útopr¬   r   Úbottomrº   r9   )r?   r6   Úchange_delegatorÚdr½   s       €r   r@   zShellSidebar.__init__—  sÃ   ø€ ØˆŒØˆÔä‰Ñ˜Ô!ô -¨T×-AÑ-AÓBð 	ð �L‰L×Ñ× Ñ ˆØ�:‰:˜TŸY™YÑ&Ø—*‘* D§L¡L×$4Ñ$4×$;Ñ$;Ñ;Ø—J‘J�ð —*‘* D§L¡L×$4Ñ$4×$;Ñ$;Ò;à�‰×Ñ×*Ñ*Ð+;À1Ð*ÔEàˆ�r   c                 ó¬   — t        j                  | j                  dddd¬«      | _        | j	                  «        | j                  «        | j                  S )Né   r   F)r¿   rÁ   rÂ   rÅ   )r$   ÚCanvasr8   r  Úupdate_sidebarr   rD   s    r   r:   zShellSidebar.init_widgets©  sC   € Ü—i‘i §¡°2Ø,-À!Ø*/ô1ˆŒð 	×ÑÔØ�	‰	ŒØ�{‰{Ðr   c                 óš   •— t         ‰| �  «        | j                  j                  t	        j
                  «       rdnd| j                  «       y )Nz
<Button-2>z
<Button-3>)r·   r<   r;   rp   r   ÚisAquaTkÚcontext_menu_event)r?   r½   s    €r   r<   zShellSidebar.bind_events±  s9   ø€ Ü‰ÑÔà×Ñ×Ñä"ŸO™OÔ-‰L°<Ø×#Ñ#õ	
r   c                 ó`  ‡ — t        j                  ‰ j                  d¬«      }t        ‰ j                  j                  dd«      «      }ˆ fd„}|j                  d |d«      |rdnd	¬
«       |j                  d |d«      |rdnd	¬
«       |j                  |j                  |j                  «       y)Nr   )Útearoffr{   r|   c                 ó   •‡ — ˆ ˆfd„S )Nc                  ó:   •— ‰j                   j                  ‰ «      S r‘   )r   rd   ©Ú	eventnamer?   s   €€r   Ú<lambda>z@ShellSidebar.context_menu_event.<locals>.mkcmd.<locals>.<lambda>¾  s   ø€ ˜4Ÿ9™9×3Ñ3°IÔ>r   r¦   r  s   `€r   Úmkcmdz.ShellSidebar.context_menu_event.<locals>.mkcmd½  s	   ù€ Ü>Ð>r   ÚCopyz<<copy>>ÚnormalÚdisabled)ÚlabelÚcommandr-   zCopy with promptsz<<copy-with-prompts>>r[   )
r$   ÚMenur;   Úboolr   Útag_nextrangeÚadd_commandÚtk_popupÚx_rootÚy_root)r?   r^   ÚrmenuÚhas_selectionr  s   `    r   r  zShellSidebar.context_menu_eventº  s¢   ø€ Ü—‘˜×(Ñ(°!Ô4ˆÜ˜TŸY™Y×4Ñ4°U¸EÓBÓCˆô	?à×Ñ Ù"'¨
Ó"3Ù,9¡¸zð 	ô 	Kð 	×ÑÐ 3Ù"'Ð(?Ó"@Ù,9¡¸zð 	ô 	Kð 	�‰�u—|‘| U§\¡\Ô2Ør   c                 ó`   — | j                   j                  ddt        j                  dd¬«       y )Nr~   r   rt   )rÔ   rÕ   rÖ   r   r   )r  r   r$   r×   rD   s    r   r   zShellSidebar.gridÈ  s#   € Ø�‰×Ñ˜Q q´·±¸qÀqÐÕIr   c                 ó>   — | j                   r| j                  «        y y r‘   )r9   r  rD   s    r   r  zShellSidebar.change_callbackË  s   € Ø�=Š=Ø×ÑÕ!ð r   c           	      óh  — | j                   }|j                  }| j                  }i x}| _        |j	                  t
        j                  «       |j                  d«      }|j                  dd«      d   dk7  r|j                  |› d�«      }|j                  |«      x}�–|d   } ||› d�«      }d|v rdnd	|v rd
nd }	|	rM|j                  d|t
        j                  |	| j                  | j                  d   ¬«       t        ||«      }
|	||
<   |j                  |› d�«      }|j                  |«      x}�Œ•y y )Nz@0,0Ú.r~   Ú0z+1line linestartz linestart -1cÚconsolez>>>Ústdinz...rt   r   )Úanchorr   rÛ   Úfillz+1line)r   Ú	tag_namesr  r  r°   r$   ÚALLr   ÚsplitÚ	dlineinfoÚcreate_textÚNWrÛ   rç   r   )r?   r   Útext_tagnamesr  r  r   Úlineinforc   Úprev_newline_tagnamesÚpromptr…   s              r   r  zShellSidebar.update_sidebarÏ  s:  € Ø�y‰yˆØŸ™ˆØ—‘ˆØ+-Ð-ˆ�tÔ(à�‰”b—f‘fÔà—
‘
˜6Ó"ˆØ�;‰;�s˜AÓ˜qÑ! SÒ(Ø—J‘J % Ð(8Ð9Ó:ˆEØŸ>™>¨%Ó0Ð0ˆxÐ=Ø˜‘ˆAÙ$1°U°G¸>Ð2JÓ$KÐ!à"Ð&;Ñ;‘Ø Ð$9Ñ9‘Øð ñ
 Ø×"Ñ" 1 a´·±¸FØ(,¯	©	¸¿¹ÀA¹ð #ô Hä# D¨%Ó0�Ø'-�˜VÑ$Ø—J‘J % ¨Ð/Ó0ˆEð  Ÿ>™>¨%Ó0Ð0ˆxÓ=r   c                 ó$   — | j                  «        y)rV   r[   )r  rQ   s      r   rT   zShellSidebar.yscroll_eventé  s   € ð
 	×ÑÔØr   c                 ó  ‡— t        j                  | j                  dd«      }t        | j                  |¬«      Št	        ˆfd„dD «       «      }| j
                  j                  |dz  dz   ¬«       || _        | j                  «        y	)
rG   rÙ   rÚ   )rÛ   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wr‘   )Úmeasure)Ú.0ÚcharÚtk_fonts     €r   Ú	<genexpr>z+ShellSidebar.update_font.<locals>.<genexpr>õ  s   øè ø€ ÐF¹:°4˜Ÿ™¨×.¹:ùs   ƒ)rx   r,  ru   rv   )r¿   N)	r   rÜ   r   r   Úmaxr  r.   rÛ   r  )r?   rÛ   Ú
char_widthrB  s      @r   r=   zShellSidebar.update_fontñ  sl   ø€ ä×Ñ §	¡	¨6°>ÓBˆÜ�t—y‘y tÔ,ˆÜÓF¹:ÓFÓFˆ
Ø�‰×Ñ J°¡N°QÑ$6ÐÔ7ØˆŒ	Ø×ÑÕr   c                 ó"  — t        j                  t        j                  «       d«      }t        j                  t        j                  «       d«      }|d   }|d   }||f| _        | j                  j                  |¬«       | j                  «        y)rI   rÄ   r.  rÞ   rß   )rß   N)r   rå   ræ   rç   r  r.   r  )r?   Úlinenumbers_colorsÚprompt_colorsrÞ   rß   s        r   r>   zShellSidebar.update_colorsú  sz   € ä%×2Ñ2´8×3HÑ3HÓ3JÈLÓYÐÜ ×-Ñ-¬h×.CÑ.CÓ.EÀyÓQˆØ" <Ñ0ˆ
Ø'¨Ñ5ˆ
Ø! :Ð.ˆŒØ�‰×Ñ¨ÐÔ4Ø×ÑÕr   )r¢   r£   r¤   r¥   r@   r:   r<   r  r   r  r  rT   r=   r>   r÷   rø   s   @r   r  r  •  s9   ø„ Ù:ôò$ô
òòJò"ò1ò4òör   r  c           
      ó°  — ddl m} t        j                  | «      }t        j                  |«      }|j                  t        j                  t        j                  d¬«       |j                  dd¬«       |j                  dd¬«       t        j                  |dd«      }t        j                  |d	d
t        j                  |¬«      }|j                  ddt        j                  ¬«        ||«      }t        j                   |«      |_        t%        |«      }|j'                  «        |j)                  ddj+                  d„ t-        dd«      D «       «      «       y )Nr   )ÚDummy_editwinT)Úsider1  Úexpandr~   )ÚweightrÙ   rÚ   éP   é   )r¿   ÚheightrÀ   rÛ   rÓ   r|   ré   c              3   ó&   K  — | ]	  }d |z  –— Œ y­w)r†   Nr¦   )r@  Úis     r   rC  z,_sidebar_number_scrolling.<locals>.<genexpr>  s   è ø€ Ð >±¨1  Q¥±ùs   ‚ée   )Úidlelib.idle_test.test_sidebarrJ  r$   ÚToplevelÚFramer   ÚLEFTÚBOTHÚrowconfigureÚcolumnconfigurer   rÜ   rÈ   rÉ   r   r×   Ú	ScrollbarrW   r´   rL   r   rí   rð   )r8   rJ  r  r7   rÛ   r   r6   Úlinenumberss           r   Ú_sidebar_number_scrollingr]    s÷   € Ý<ä
�+‰+�fÓ
€CÜ—‘˜#“€JØ‡O�OœŸ™¤r§w¡w°t€OÔ<Ø×Ñ˜A aÐÔ(Ø×Ñ˜q¨ÐÔ+ä×Ñ˜C ¨Ó8€DÜ�7‰7�: R°¼¿¹ÀtÔL€DØ‡I�I�!˜A¤b§g¡g€IÔ.á˜DÓ!€GÜ—<‘< 
Ó+€G„Lä˜gÓ&€KØ×ÑÔà‡K�K��t—y‘yÑ >´°a¸´Ó >Ó>Õ?r   Ú__main__)rÙ   zidlelib.idle_test.test_sidebarrt   F)Ú	verbosityÚexit)Úrun)r¥   Ú
contextlibrn   rî   Útkinterr$   Útkinter.fontr   Úidlelib.configr   Úidlelib.delegatorr   Úidlelibr   r   r   r   r*   Úcontextmanagerr1   r3   r¨   r´   rú   r  r]  r¢   ÚunittestrÙ   Úidlelib.idle_test.htestra  r¦   r   r   Ú<module>rk     sÉ   ðñó Û Û ã Ý Ý #Ý 'Ý ò:ò&ò
 òð4 ×Ññ*ó ð*÷C>ñ C>ôLA�yô Aô$M�+ô Mô`& yô &ôRm�;ô mò`@ð, ˆzÒÝÙÐ	)°Q¸UÕCå+ÙÐ!Õ"ð r   