o
     JAfc>                     @   s   d dl Z d dl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 dlmZ ddd	 eD Zd
ZejdkrIdndZG dd dZdd Zedkrsd dlmZ edddd d dlmZ ee dS dS )    N)
filedialog)
messagebox)	askstring)idleConf)py_extensions c                 c   s    | ]}d | V  qdS )*N ).0extr	   r	   %/usr/lib/python3.10/idlelib/iomenu.py	<genexpr>   s    r   utf-8win32surrogatepasssurrogateescapec                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdZdd Z	dZ
dZdd Zd4ddZejZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# ZdZdZd$ed%fd&d'fZejd(kred)nd*Z d+d, Z!d5d.d/Z"d0d1 Z#d2d3 Z$dS )6	IOBindingc                 C   sr   || _ |j| _| jd| j| _| jd| j| _| jd| j| _| jd| j	| _
d| _| jd| j| _d S )N<<open-window-from-file>><<save-window>><<save-window-as-file>><<save-copy-of-window-as-file>>r   <<print-window>>)editwintextbindopen_IOBinding__id_opensave_IOBinding__id_savesave_as_IOBinding__id_saveassave_a_copy_IOBinding__id_savecopyfileencodingprint_window_IOBinding__id_print)selfr   r	   r	   r   __init__   s   zIOBinding.__init__c                 C   sf   | j d| j | j d| j | j d| j | j d| j | j d| j d | _d | _ d | _d S )Nr   r   r   r   r   )	r   Zunbindr   r   r    r"   r%   r   filename_change_hookr&   r	   r	   r   close%   s   
zIOBinding.closec                 C   s
   | j  S N)r   	get_savedr)   r	   r	   r   r,   1      
zIOBinding.get_savedc                 C   s   | j | d S r+   )r   	set_savedr&   flagr	   r	   r   r.   4      zIOBinding.set_savedc                 C   s   | j   d S r+   )r   
reset_undor)   r	   r	   r   r2   7   s   zIOBinding.reset_undoNc                 C   s
   || _ d S r+   )r(   )r&   hookr	   r	   r   set_filename_change_hook<   r-   z"IOBinding.set_filename_change_hookc                 C   sL   |rt j|rd | _|| _d S || _d | _| d | jr$|   d S d S )N   )ospathisdirfilenamedirnamer.   r(   r&   r9   r	   r	   r   set_filenameB   s   

zIOBinding.set_filenamec                 C   s   | j j}|r<|s|  }n|}|r2| j r+t| j dd s+| js+|  r+||| j dS || dS | jr:| j	  dS |  rO| 
 }|dkrO| j	  dS |sV|  }n|}|ra| | dS | j	  dS )Ninterpbreakcancel)r   flistaskopenfilegetattrr9   r,   r   loadfiler   	focus_set	maybesave)r&   eventZeditFiler@   r9   replyr	   r	   r   r   M   sB   






zIOBinding.openc           	      C   s  zcz#t |}| }|j}|j}d}W d    n1 sw   Y  W n= ttfya   | jj	  t
ddd| jjd}t||d}| }|j}|j}d}W d    n1 sZw   Y  Y nw W n2 ty } ztjdt|| jd	 W Y d }~dS d }~w ty   tjd
d| | jd	 Y dS w t|ts|d urtjdd| jd	 d}tj}| jdd | d  || _|| _| jd| |   | | |r| d | jdd | jd | | dS )NFzSpecify file encodingzwThe file's encoding is invalid for Python 3.x.
IDLE will convert it to UTF-8.
What is the current encoding of the file?r   )Zinitialvalueparent)encodingT	I/O ErrorrH   zDecoding ErrorzFile %s
Failed to DecodezMixed Newlinesz:Mixed newlines detected.
The file will be changed on save.1.0endinsert)tokenizer   readrI   newlinesUnicodeDecodeErrorSyntaxErrorr   r   updater   OSErrorr   	showerrorstr
isinstanceshowwarningr6   linesepdeleter<   r#   eol_conventionrN   r2   r.   Zmark_setZyviewupdaterecentfileslist)	r&   r9   fcharsr#   r\   Z	convertedencerrr	   r	   r   rC   {   st   




zIOBinding.loadfilec                 C   sp   |   rdS d| jpd }tjd|tj| jd}|r(d}| d  |   s'd}n	|d u r/d}nd}| j  |S )NZyesz&Do you want to save %s before closing?zthis untitled documentzSave On ClosetitlemessagedefaultrH   r?   no)r,   r9   r   ZaskyesnocancelZYESr   r   rD   )r&   rd   confirmrG   r	   r	   r   rE      s,   

zIOBinding.maybesavec                 C   sX   | j s	| | n| | j r%| d z| j  W n	 ty$   Y nw | j  dS )NTr>   )	r9   r   	writefiler.   r   store_file_breaksAttributeErrorr   rD   r&   rF   r	   r	   r   r      s   

zIOBinding.savec                 C   sd   |   }|r&| |r&| | | d z| j  W n	 ty%   Y nw | j  | 	| dS )Nr5   r>   )
asksavefilerh   r<   r.   r   ri   rj   r   rD   r]   r&   rF   r9   r	   r	   r   r      s   




zIOBinding.save_asc                 C   s.   |   }|r| | | j  | | dS )Nr>   )rl   rh   r   rD   r]   rm   r	   r	   r   r!      s   


zIOBinding.save_a_copyc              
   C   s   |   }| |}z*t|d}|| |  t|  W d    W dS 1 s,w   Y  W dS  tyQ } zt	j
dt|| jd W Y d }~dS d }~ww )NwbTrJ   rK   F)fixnewlinesencoder   writeflushr6   fsyncfilenorU   r   rV   rW   r   )r&   r9   r   r_   r^   msgr	   r	   r   rh      s$   


zIOBinding.writefilec                 C   sn   	 t | jdr| jd| jd}n| jddkr"| jdd | jdd}| jdkr5|d| j}|S )Nr=   rL   zend-1czend-2c
)	hasattrr   Zget_prompt_textr   indexgetrN   r\   replacer&   r   r	   r	   r   ro      s   
zIOBinding.fixnewlinesc              
   C   s   t |tr|S | jdkr|dS z|dW S  ty    Y nw z|dd}tt|j	\}}||W S  t
yN } z
t|}W Y d }~nd }~w tyZ   d| }Y nw tjdd| | jd |dS )Nz	utf-8-sigasciirz   zInvalid encoding '%s'rJ   z%s.
Saving as UTF-8rK   )rX   bytesr#   rp   UnicodeEncodeErrorrO   detect_encodingioBytesIOreadlinerS   rW   r   rV   r   )r&   r_   encodedr`   _ra   Zfailedr	   r	   r   rp     s2   



zIOBinding.encodec                 C   s\  t jddt j| jd}|s| j  dS d }|  }|r| j}|r%|d u r@tjdd\}}|}t	
| | |s@t	| dS t	j}d}|dkrUtd	d
d}	|	d }	n|dkratd	d
d}	nd}|r|	t| }	t	|	d}
|
  }|

 }|rd| | }|rdt|	 | }t jd|| jd nd| }t jd|| jd |rt	| dS )NZPrintzPrint to Default Printerrb   r>   Z	IDLE_tmp_)prefixTposixmainZGeneralzprint-command-posixz 2>&1ntzprint-command-winFrz#Printing failed (exit status 0x%x)
zPrinting command: %s
zPrint statusrK   z-Printing is not enabled for this platform: %s)r   ZaskokcancelZOKr   rD   r,   r9   tempfilemkstempr6   r*   rh   unlinknamer   Z	GetOptionshlexquotepopenrP   stripreprrV   Zshowinfo)r&   rF   rg   ZtempfilenameZsavedr9   ZtfdplatformZprintPlatformZcommandpipeoutputstatusrd   r	   r	   r   r$   ,  sd   





zIOBinding.print_windowzPython filesTEXT)z
Text filesz*.txtr   )z	All filesr   darwinz.py c                 C   s<   |  d\}}| jstj| j| jd| _| jj||d}|S )Nr   )rH   	filetypesZ
initialdirZinitialfile)defaultfilename
opendialogr   ZOpenr   r   showr&   dirbaser9   r	   r	   r   rA   i  s   zIOBinding.askopenfiler   c                 C   sT   | j r
tj| j S | jr| jdfS z	t }W |dfS  ty)   d}Y |dfS w )Nr   )r9   r6   r7   splitr:   getcwdrU   )r&   modepwdr	   r	   r   r   q  s   

zIOBinding.defaultfilenamec                 C   s@   |  d\}}| jstj| j| j| jd| _| jj||d}|S )Nr   )rH   r   defaultextensionr   )r   
savedialogr   ZSaveAsr   r   r   r   r   r	   r	   r   rl   }  s   zIOBinding.asksavefilec                 C   s   	 | j jr| j | d S d S r+   )r   r@   Zupdate_recent_files_listr;   r	   r	   r   r]     s   zIOBinding.updaterecentfileslist)NN)r   )%__name__
__module____qualname__r'   r*   r,   r.   r2   r(   r4   r9   r:   r<   r   r6   rZ   r\   rC   rE   r   r   r!   rh   ro   rp   r$   r   r   r   r   sysr   r   rA   r   rl   r]   r	   r	   r	   r   r      sB    
,;2

r   c           	      C   s   ddl m}m} || }|d tt|  ddd  \}}|d||d f  G dd	 d	}||}|  |	  ||}t
| d S )
Nr   )ToplevelTextzTest IOBinding+r5   z+%d+%d   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )z_io_binding.<locals>.MyEditWinc                 S   s`   || _ d | _| j d| j | j d| j | j d| j | j d| j | j d| j d S )Nz<Control-o>z<Control-p>z<Control-s>z<Alt-s>z<Control-c>)r   r@   r   r   printr   saveassavecopyr{   r	   r	   r   r'     s   z'_io_binding.<locals>.MyEditWin.__init__c                 S   s   dS )Nr   r	   r)   r	   r	   r   r,         z(_io_binding.<locals>.MyEditWin.get_savedc                 S      d S r+   r	   r/   r	   r	   r   r.     r   z(_io_binding.<locals>.MyEditWin.set_savedc                 S   r   r+   r	   r)   r	   r	   r   r2     r   z)_io_binding.<locals>.MyEditWin.reset_undoc                 S      | j d d S )Nr   r   Zevent_generaterk   r	   r	   r   r     r1   z#_io_binding.<locals>.MyEditWin.openc                 S   r   )Nr   r   rk   r	   r	   r   r     r1   z$_io_binding.<locals>.MyEditWin.printc                 S   r   )Nr   r   rk   r	   r	   r   r     r1   z#_io_binding.<locals>.MyEditWin.savec                 S   r   )Nr   r   rk   r	   r	   r   r     r1   z%_io_binding.<locals>.MyEditWin.saveasc                 S   r   )Nr   r   rk   r	   r	   r   r     r1   z'_io_binding.<locals>.MyEditWin.savecopyN)r   r   r   r'   r,   r.   r2   r   r   r   r   r   r	   r	   r	   r   	MyEditWin  s    r   )tkinterr   r   rc   mapintZgeometryr   packrD   r   )	rH   r   r   rootxyr   r   r   r	   r	   r   _io_binding  s   
 r   __main__)r   zidlelib.idle_test.test_iomenu   F)	verbosityexit)run)r   r6   r   r   r   rO   r   r   r   Ztkinter.simpledialogr   Zidlelib.configr   Zidlelib.utilr   joinrI   r   errorsr   r   r   Zunittestr   Zidlelib.idle_test.htestr   r	   r	   r	   r   <module>   s0      z$