
    z%i"2                         	 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 dl
mZ ddZ G d d	ej                        Z G d
 d      Zej!                          edk(  rd dlmZ  eddd       yy)    N)
messagebox)idleConf)	view_text)Hovertip)macosxc                 P   	 d}d}d}d}t        j                  d|       D ][  }|j                         |z
  }||z  }||z  }| |   dk(  r||kD  r||dz
  |z  z  }|dz  }d}n||||z  z
  z  }||kD  r|dz  }|}|dz  }] |t        |       |z
  z  }|dkD  r||dz
  |z  z  }|S |dz  }|S )N   r      z[\t\n]
)refinditerstartlen)s	linewidthtabwidthpos	linecountcurrent_columnmnumcharss           D/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/idlelib/squeezer.pycount_lines_with_wrappingr      s    H
CIN[[A& 779s?x(" S6T> 	) nq0Y>>	NIN h.8*CDDN 	)Q	!)q;@ c!fsl"Nnq(Y66	
  	Q	    c                   <    e Zd Z	 d Zd Zd	dZd	dZd	dZdZd Z	y)
ExpandingButtonc                    | _         || _        || _        || _        |j                  x| _        }|j
                  x| _        }|j                  j                  | _        |dk7  rdnd}d| d| d}t        j                  j                  | ||dd	       d
}	t        | |	d       | j                  d| j                         t        j                          r| j                  d| j"                         n| j                  d| j"                         | j%                  fd       d | _        | j)                  | j*                         y )Nr
   lineslinezSqueezed text ( z).z#FFFFC0z#FFFFE0)text
backgroundactivebackgroundz5Double-click to expand, right-click for more options.P   )hover_delayz<Double-Button-1>z
<Button-2>z
<Button-3>c                 J    t        |       t        |       t        |      z    S N)int)offsetlengthr   s     r   <lambda>z*ExpandingButton.__init__.<locals>.<lambda>z   s    1S[Vs6{1J#K r   )r   tags
numoflinessqueezereditwinr!   perbottom	base_texttkButton__init__r   bindexpandr   isAquaTkcontext_menu_eventselection_handleis_dangerous
after_idleset_is_dangerous)
selfr   r,   r-   r.   r/   r!   line_pluralitybutton_textbutton_tooltip_texts
    `        r   r5   zExpandingButton.__init___   s$   	$ !)!1!11w"<<'	D ++$.!O'
|1^4DBG
		4K&/) 	 	M D 	 	*;		%t{{3??IIlD$;$;<IIlD$;$;<K	M !--.r   c                    d| j                   j                         z  | j                  dkD  xsL t        | j                        dkD  xs2 t        fdt        j                  d| j                        D              | _        y )N2   i  iP  c              3   X   K   | ]!  }t        |j                  d             k\   # yw)r   N)r   group).0
line_matchdangerous_line_lens     r   	<genexpr>z3ExpandingButton.set_is_dangerous.<locals>.<genexpr>   s/       J$$Q'(,>>s   '*z[^\n]+)	r!   winfo_widthr-   r   r   anyr   r   r;   )r>   rH   s    @r   r=   z ExpandingButton.set_is_dangerous   sm    $))"7"7"99OOd" K% "$++i"@  	r   Nc                    	 | j                   | j                          | j                   rgt        j                  ddj	                  g d      | j
                  t        | j                        fz  t        j                  | j                        }|sy| j                  j                  |       }| j                  j                  || j                  | j                         | j                  j                  |        | j                  j!                  || j                  | j                         | j"                  j$                  j'                  |        y )NzExpand huge output?z

)z5The squeezed output is very long: %d lines, %d chars.z2Expanding it could make IDLE slow or unresponsive.z5It is recommended to view or copy the output instead.zReally expand?)titlemessagedefaultparentbreak)r;   r=   r   askokcanceljoinr-   r   r   CANCELr!   indexr2   insertr,   deleter/   on_squeezed_expandr.   expandingbuttonsremove)r>   eventconfirmrU   s       r   r7   zExpandingButton.expand   s    	 $!!# ,,+ % 
 oos466{34 #))yy	"G 		%eTVVTYY7d#''tvvtyyA&&--d3r   c                 \    	 | j                          | j                  | j                         y r'   )clipboard_clearclipboard_appendr   r>   r[   s     r   copyzExpandingButton.copy   s'    	 	dff%r   c                 N    	 t        | j                  d| j                  dd       y )NzSqueezed Output ViewerFnone)modalwrap)r   r!   r   r`   s     r   viewzExpandingButton.view   s%    	 	$))5tvvF	,r   ))ra   ra   )rf   rf   c                 ^   | j                   j                  dd|j                  |j                  fz         t	        j
                  | j                   d      }| j                  D ]"  \  }}|j                  |t        | |             $ |j                  |j                  |j                         y)NrV   z@%d,%dr   )tearoff)labelcommandrQ   )r!   mark_setxyr3   Menurmenu_specsadd_commandgetattrtk_popupx_rooty_root)r>   r[   rmenuri   method_names        r   r9   z"ExpandingButton.context_menu_event   s    		8X%''0B%BC		1-"&"2"2 	OE;E743MN	Ou||U\\2r   r'   )
__name__
__module____qualname__r5   r=   r7   ra   rf   ro   r9    r   r   r   r   T   s-    	/@	
4>&,Kr   r   c                   0    e Zd Z	 ed        Zd Zd Zd Zy)Squeezerc                 D    	 t        j                  ddddd      | _        y )NmainPyShellzauto-squeeze-min-linesr(   rC   )typerO   )r   	GetOptionauto_squeeze_min_lines)clss    r   reloadzSqueezer.reload   s%    /%-%7%7I7&
"r   c                 0    	 | _         |j                  x _        |j                  j                   _        dt        j                  d            t        j                  d            z   z   _        g  _        d|j                  f fd	}||_	        y )N   borderpadxrz   c                    |dk7  r	 || |      S j                   }t        |       |k  r	 || |      S j                  |       }||k  r	 || |      S t        | ||      }j	                  dt
        j                         j                  d|dd       j                  d       j                          j	                  dt
        j                         j                  j                  |       y )Nstdoutiomark      windowr   pady)r   r   count_linesr   mark_gravityr3   RIGHTwindow_createseeupdateLEFTrY   append)r   r,   writer   r-   expandingbuttonr>   r!   s         r   mywritez"Squeezer.__init__.<locals>.mywrite   s    xQ~% &*%@%@"1v..Q~%))!,J22Q~% .az4HO h1x$%A  /HHXKKMh0 !!((9r   )
r/   r!   r0   r1   r2   r(   cgetwindow_width_deltarY   r   )r>   r/   r   r!   s   `  @r   r5   zSqueezer.__init__   s    	 "<<'	D !++ #$		(#$		&!"##

 !# gmm 	:<  r   c                 D    	 t        || j                  j                        S r'   )r   r/   width)r>   r   s     r   r   zSqueezer.count_lines  s     		 )DLL,>,>??r   c                    	 | j                   j                  t        j                        }dD ]  }||v s n | j                   j	                          y| j                   j                  |t        j                  dz         \  }}| j                   j                  ||      }t        |      dkD  r+|d   dk(  r#| j                   j                  d|z        }|d d }| j                  j                  ||       | j                  |      }t        ||||       }| j                   j                  ||dd	
       t        | j                        }|dkD  re| j                   j                  | j                  |dz
     d|      r8|dz  }|dkD  r.| j                   j                  | j                  |dz
     d|      r8| j                  j!                  ||       y)N)r   stderrrQ   z+1cr   r   z%s-1cr   r   r   r
   >)r!   	tag_namesr3   INSERTbelltag_prevrangegetr   rU   r2   rW   r   r   r   rY   comparerV   )	r>   r   tag_namer   endr   r-   r   is	            r   squeeze_current_textzSqueezer.squeeze_current_text"  s   	 II''		2	, 	H9$	
 IINN YY,,Xryy57HI
sIIMM%% q6A:!B%4-))//'C-0C#2A 	eS) %%a(
)!Xz4H 			o%&Q 	  	0 %%&!e		))$*?*?!*D*-@FA !e		))$*?*?!*D*-@ 	$$Q8r   N)rw   rx   ry   classmethodr   r5   r   r   rz   r   r   r|   r|      s,    
 
 
= ~@-r   r|   __main__)r~   zidlelib.idle_test.test_squeezerr   F)	verbosityexit)r$   )r   tkinterr3   r   idlelib.configr   idlelib.textviewr   idlelib.tooltipr   idlelibr   r   r4   r   r|   r   rw   unittestr~   rz   r   r   <module>r      sr     
   # & $ 5pqbii qhG GT 	  z	*aeD r   