<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
2a3                 @   s   d dl Z d dlZd dlmZ d dljZd dlm	Z	 d dl
mZ d dlmZ d dlmZ dd	d
ZG dd dejZG dd dZej  edkrd dlmZ edddd dS )    N)Font)idleConf)	view_text)Hovertip)macosxP      c       
      C   s   d}d}d}xt jd| D ]}|j | }||7 }||7 }| | dkrT|d7 }d}n$||||  7 }||krx|d7 }|}|d7 }|dkrt|d |\}}	||7 }|	d }qW |t| | 7 }|dkr||d | 7 }n|d8 }|S )Nr      z[\t\n]
)refinditerstartdivmodlen)
s	linewidthtabwidthposZ	linecountZcurrent_columnmnumcharslinescolumn r   -/opt/alt/python36/lib64/python3.6/squeezer.pycount_lines_with_wrapping   s0    r   c               @   sF   e Zd Zdd Zdd ZdddZddd	Zdd
dZdZdd Z	dS )ExpandingButtonc       	         s    | _ || _|| _|| _|j | _}|j | _}|jj| _d| j }t	j
j| ||ddd d}t| |dd | jd| j tj r| jd	| j n| jd
| j | j fdd d | _| j| j d S )NzSqueezed text (%d lines).z#FFFFC0z#FFFFE0)textZ
backgroundZactivebackgroundz5Double-click to expand, right-click for more options.r   )Zhover_delayz<Double-Button-1>z
<Button-2>z
<Button-3>c                s    t | t | t |  S )N)int)offsetZlength)r   r   r   <lambda>}   s    z*ExpandingButton.__init__.<locals>.<lambda>)r   tags
numoflinessqueezereditwinr   perbottom	base_texttkButton__init__r   Zbindexpandr   ZisAquaTkcontext_menu_eventZselection_handleis_dangerousZ
after_idleset_is_dangerous)	selfr   r    r!   r"   r#   r   Zbutton_textZbutton_tooltip_textr   )r   r   r)   a   s(    


zExpandingButton.__init__c                sL   d| j j   | jdkpDt| jdkpDt fddtjd| jD | _d S )N2   i  iP  c             3   s    | ]}t |jd  kV  qdS )r   N)r   group).0Z
line_match)dangerous_line_lenr   r   	<genexpr>   s   z3ExpandingButton.set_is_dangerous.<locals>.<genexpr>z[^\n]+)	r   winfo_widthr!   r   r   anyr   r   r,   )r.   r   )r2   r   r-      s    

z ExpandingButton.set_is_dangerousNc             C   s   | j d kr| j  | j rTtjddjddddg| jt| jf tj| j	d}|sTdS | j
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-   tkMessageBoxZaskokcanceljoinr!   r   r   ZCANCELr   r&   insertindexr    deleter"   expandingbuttonsremove)r.   eventZconfirmr   r   r   r*      s$    	

zExpandingButton.expandc             C   s   | j   | j| j d S )N)Zclipboard_clearZclipboard_appendr   )r.   rB   r   r   r   copy   s    zExpandingButton.copyc             C   s   t | jd| jddd d S )NzSqueezed Output ViewerFZnone)Zmodalwrap)r   r   r   )r.   rB   r   r   r   view   s    zExpandingButton.viewrC   rE   c             C   sf   | j jdd|j|jf  tj| j dd}x&| jD ]\}}|j|t| |d q2W |j	|j
|j dS )Nr=   z@%d,%dr   )Ztearoff)labelZcommandr:   )r   Zmark_setxyr'   ZMenurmenu_specsZadd_commandgetattrZtk_popupZx_rootZy_root)r.   rB   ZrmenurF   Zmethod_namer   r   r   r+      s    z"ExpandingButton.context_menu_event)N)N)NrC   rC   rE   rE   )rK   rL   )
__name__
__module____qualname__r)   r-   r*   rC   rE   rI   r+   r   r   r   r   r   V   s   !



 r   c               @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
Squeezerc             C   s   t jdddddd| _d S )NmainPyShellzauto-squeeze-min-linesr   r/   )typer8   )r   Z	GetOptionauto_squeeze_min_lines)clsr   r   r   reload   s    zSqueezer.reloadc                sX   | _ |j  _|jj _g  _ddlm} t||rTf |j	f fdd	}||_	d S )Nr   )rR   c                s   |dkr|| |S  j | }| jk r0|| |S t| || }jdtj jd|ddd jd j  jdtj	  j
j| d S )NstdoutZiomark      )windowpadxpady)count_linesrT   r   Zmark_gravityr'   ZRIGHTwindow_createZseeupdateZLEFTr@   append)r   r    writer!   expandingbutton)r.   r   r   r   mywrite   s    





z"Squeezer.__init__.<locals>.mywrite)
r#   r   r$   r%   r&   r@   Zidlelib.pyshellrR   
isinstancera   )r.   r#   rR   rc   r   )r.   r   r   r)      s    


zSqueezer.__init__c                sh    j j } j jj }|dt fddd	D  8 }t j j j jjdd}||jd }t|||S )
N   c                s   g | ]}t  jjj|qS r   )r   r#   r   cget)r1   opt)r.   r   r   
<listcomp>  s   z(Squeezer.count_lines.<locals>.<listcomp>borderr[   font)name0)ri   r[   )	r#   Zget_tk_tabwidthr   r4   sumr   rf   Zmeasurer   )r.   r   r   r   rj   r   )r.   r   r]     s    
zSqueezer.count_linesc       
      C   s  | j jtj}x$dD ]}||krP qW | j j  dS | j j|tjd \}}| j j||}t|dkr|d dkr| j jd| }|d d }| j	j
|| | j|}t|||| }| j j||d	d
d t| j}	x0|	dko| j j| j|	d  d|r|	d8 }	qW | jj|	| dS )NrW   stderrr:   z+1cr   r	   r
   z%s-1crX   rY   )rZ   r[   r\   >)rW   rn   rp   )r   	tag_namesr'   ZINSERTZbellZtag_prevrangegetr   r>   r&   r?   r]   r   r^   r@   Zcomparer=   )
r.   rB   rq   Ztag_namer   endr   r!   rb   ir   r   r   squeeze_current_text_event*  s,    	






z#Squeezer.squeeze_current_text_eventN)rM   rN   rO   classmethodrV   r)   r]   ru   r   r   r   r   rP      s   4rP   __main__)rQ   zidlelib.idle_test.test_squeezerre   F)	verbosityexit)r   r   )r   Ztkinterr'   Ztkinter.fontr   Ztkinter.messageboxZ
messageboxr;   Zidlelib.configr   Zidlelib.textviewr   Zidlelib.tooltipr   Zidlelibr   r   r(   r   rP   rV   rM   ZunittestrQ   r   r   r   r   <module>   s   

9s 