
    ;e"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                                 edk    rd dlmZ  eddd           dS dS )    N)
messagebox)idleConf)	view_text)Hovertip)macosxP   c                 f   	 d}d}d}d}t          j        d|           D ]e}|                                |z
  }||z  }||z  }| |         dk    r||k    r||dz
  |z  z  }|dz  }d}n||||z  z
  z  }||k    r|dz  }|}|dz  }f|t          |           |z
  z  }|dk    r||dz
  |z  z  }n|dz  }|S )N   r      z[\t\n]
)refinditerstartlen)s	linewidthtabwidthpos	linecountcurrent_columnmnumcharss           '/usr/lib/python3.11/idlelib/squeezer.pycount_lines_with_wrappingr      s"    H
CIN[A&&  7799s?x(" S6T>> 	)) nq0Y>>	NINN h.8*CDDN 	))Q	!)q c!ffsl"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	dS )
ExpandingButtonc                 l   | _         || _        || _        || _        |j        x| _        }|j        x| _        }|j        j        | _        |dk    rdnd}d| d| d}t          j
                            | ||dd	           d
}	t          | |	d           |                     d| j                   t          j                    r|                     d| j                   n|                     d| j                   |                     fd           d | _        |                     | j                   d S )Nr   lineslinezSqueezed text ( z).z#FFFFC0z#FFFFE0)text
backgroundactivebackgroundz5Double-click to expand, right-click for more options.r   )hover_delayz<Double-Button-1>z
<Button-2>z
<Button-3>c                 l    t          |           t          |           t          |          z            S N)int)offsetlengthr   s     r   <lambda>z*ExpandingButton.__init__.<locals>.<lambda>z   s(    1S[[Vs6{{1J%J#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___   se   	$ !)!11w"<'	D +$.!OOG
GG^GGG
	4K&/) 	 	M 	M 	M D 	 	*;;;;		%t{333? 	=IIlD$;<<<<IIlD$;<<<KKKK	M 	M 	M !-.....r   c                     d| j                                         z  | j        dk    pJt          | j                  dk    p2t          fdt          j        d| j                  D                       | _        d S )N2   i  iP  c              3   d   K   | ]*}t          |                    d                     k    V  +dS )r   N)r   group).0
line_matchdangerous_line_lens     r   	<genexpr>z3ExpandingButton.set_is_dangerous.<locals>.<genexpr>   sS         J$$Q''((,>>     r   z[^\n]+)	r"   winfo_widthr-   r   r   anyr   r   r;   )r>   rH   s    @r   r=   z ExpandingButton.set_is_dangerous   s    $)"7"7"9"99Od" KK%    "$+i"@"@     	r   Nc                 B   	 | j         |                                  | j         r\t          j        dd                    g d          | j        t          | j                  fz  t          j        | j	                  }|sdS | j	        
                    |           }| j                            || j        | j                   | j                            |            | j                            || j        | j                   | j        j                            |            d S )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"   	 $!!### 	 ,+ % % %  
 os46{{34 #)y	" 	" 	"G  w	%%eTVTY777d###''tvtyAAA&--d33333r   c                 d    	 |                                   |                     | j                   d S r'   )clipboard_clearclipboard_appendr   r>   r[   s     r   copyzExpandingButton.copy   s7    	 	df%%%%%r   c                 D    	 t          | j        d| j        dd           d S )NzSqueezed Output ViewerFnone)modalwrap)r   r"   r   r`   s     r   viewzExpandingButton.view   s:    	 	$)5tvF	, 	, 	, 	, 	, 	,r   ))ra   ra   )rf   rf   c                 4   | j                             dd|j        |j        fz             t	          j        | j         d          }| j        D ]*\  }}|                    |t          | |                     +|	                    |j
        |j                   dS )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CC	1---"&"2 	O 	OE;E743M3MNNNNu|U\222wr   r'   )
__name__
__module____qualname__r5   r=   r7   ra   rf   ro   r9    r   r   r   r   T   s        	/ / /@	
 	
 	
4 4 4 4>& & & &, , , ,K    r   r   c                   8    e Zd Z	 ed             Zd Zd Zd ZdS )Squeezerc                 D    	 t          j        ddddd          | _        d S )NmainPyShellzauto-squeeze-min-linesr(   rC   )typerO   )r   	GetOptionauto_squeeze_min_lines)clss    r   reloadzSqueezer.reload   s2    /%-%7I7&
 &
 &
"""r   c                 *    	 | _         |j        x _        |j        j         _        dt                              d                    t                              d                    z   z   _        g  _        d|j	        f fd	}||_	        d S )N   borderpadxrz   c                 "   |dk    r || |          S j         }t          |           |k     r || |          S                     |           }||k     r || |          S t          | ||          }                    dt
          j                                       d|dd                               d           	                                                     dt
          j
                   j                            |           d S )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uQ~~% &*%@"1vv...uQ~~%))!,,J222uQ~~% .az4HHO h111x$%A  / / /HHXKKMMMh000 !((99999r   )
r/   r"   r0   r1   r2   r(   cgetwindow_width_deltarY   r   )r>   r/   r   r"   s   `  @r   r5   zSqueezer.__init__   s    	 "<'	D !+ #$		(##$$		&!!""##

 !# gm 	: 	: 	: 	: 	: 	: 	:<  r   c                 8    	 t          || j        j                  S r'   )r   r/   width)r>   r   s     r   r   zSqueezer.count_lines  s    		 )DL,>???r   c                    	 | j                             t          j                  }dD ]}||v r n	| j                                          dS | j                             |t          j        dz             \  }}| j                             ||          }t          |          dk    r3|d         dk    r'| j                             d|z            }|d d         }| j	        
                    ||           |                     |          }t          ||||           }| j                             ||dd	
           t          | j                  }|dk    r_| j                             | j        |dz
           d|          r5|dz  }|dk    r*| j                             | j        |dz
           d|          5| j                            ||           dS )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   	 I''	22	, 	 	H9$$ % INN7 Y,,Xry57HII
sIMM%%% q66A::!B%4--)//'C-00C#2#A 	eS))) %%a((
)!Xz4HH 		o%&Q 	  	0 	0 	0 %&&!ee	))$*?!*D*-@ @eFA !ee	))$*?!*D*-@ @e 	$$Q888wr   N)rw   rx   ry   classmethodr   r5   r   r   rz   r   r   r|   r|      se        
 
 
 [
=  =  = ~@ @ @- - - - -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      sM    
			           # # # # # # & & & & & & $ $ $ $ $ $      5 5 5 5pq q q q qbi q q qhG G G G G G G GT 	    zD	*aeDDDDDD r   