a
    Ùc¿_¤=  ã                   @   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Zd dlmZ dZejdkr|dZndZG dd	„ d	ƒZd
d„ ZedkrÌd dlmZ edddd d dlmZ eeƒ dS )é    N)Ú	askstring)ÚidleConfúutf-8Z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d1d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$Zejd%kr¾d&nd'Zd(d)„ Z d2d+d,„Z!d-d.„ Z"d/d0„ Z#dS )3Ú	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   úlib/python3.9/idlelib/iomenu.pyÚ__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#   4   s    zIOBinding.get_savedc                 C   s   | j  |¡ d S r"   )r   Ú	set_saved©r   Úflagr   r   r   r$   7   s    zIOBinding.set_savedc                 C   s   | j  ¡  d S r"   )r   Ú
reset_undor    r   r   r   r'   :   s    zIOBinding.reset_undoNc                 C   s
   || _ d S r"   )r   )r   Úhookr   r   r   Úset_filename_change_hook?   s    z"IOBinding.set_filename_change_hookc                 C   sF   |rt j |¡rd | _|| _n$|| _d | _|  d¡ | jrB|  ¡  d S )Né   )ÚosÚpathÚisdirÚfilenameÚdirnamer$   r   ©r   r.   r   r   r   Úset_filenameE   s    
zIOBinding.set_filenamec                 C   sÊ   | j j}|rt|s|  ¡ }n|}|r`| j rTt| j dd ƒsT| jsT|  ¡ rT| || j¡ qp| |¡ n| jrp| j 	¡  dS |  ¡ rš|  
¡ }|dkrš| j 	¡  dS |s¨|  ¡ }n|}|r¼|  |¡ n
| j 	¡  dS )NÚinterpÚbreakÚcancel)r   ÚflistÚaskopenfileÚgetattrr.   r#   r   Úloadfiler   Ú	focus_setÚ	maybesave)r   ÚeventZeditFiler5   r.   Úreplyr   r   r   r   P   s<    
ÿþý



zIOBinding.openc           	      C   sÞ  zÆzFt  |¡(}| ¡ }|j}|j}d}W d   ƒ n1 s<0    Y  W nz ttfyÂ   | jj 	¡  t
ddd| jjd}t||d(}| ¡ }|j}|j}d}W d   ƒ n1 s´0    Y  Y n0 W nh ty } z$tjdt|ƒ| jd	 W Y d }~dS d }~0  ty.   tjd
d| | jd	 Y dS 0 t|tƒsb|d ur\t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©r=   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   Úreadr>   ÚnewlinesÚUnicodeDecodeErrorÚSyntaxErrorr   r   Úupdater   ÚOSErrorÚtkMessageBoxÚ	showerrorÚstrÚ
isinstanceÚshowwarningr+   ÚlinesepÚdeleter1   r   Úeol_conventionrC   r'   r$   Zmark_setZyviewÚupdaterecentfileslist)	r   r.   ÚfÚcharsr   rR   Z	convertedÚencÚerrr   r   r   r8   ~   sd    &ú,þ
ý



zIOBinding.loadfilec                 C   sp   |   ¡ rdS d| jpd }tjd|tj| jd}|rPd}|  d ¡ |   ¡ sbd}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Údefaultr=   r4   Zno)r#   r.   rK   ZaskyesnocancelZYESr   r   r9   )r   rZ   Úconfirmr<   r   r   r   r:   ¹   s*    ÿü

zIOBinding.maybesavec                 C   sX   | j s|  |¡ n8|  | j ¡rJ|  d¡ z| j ¡  W n tyH   Y n0 | j ¡  dS )NTr3   )	r.   r   Ú	writefiler$   r   Ústore_file_breaksÚAttributeErrorr   r9   ©r   r;   r   r   r   r   Ï   s    

zIOBinding.savec                 C   sd   |   ¡ }|rL|  |¡rL|  |¡ |  d¡ z| j ¡  W n tyJ   Y n0 | j ¡  |  	|¡ dS )Nr*   r3   )
Úasksavefiler]   r1   r$   r   r^   r_   r   r9   rS   ©r   r;   r.   r   r   r   r   Ü   s    




zIOBinding.save_asc                 C   s.   |   ¡ }|r|  |¡ | j ¡  |  |¡ dS )Nr3   )ra   r]   r   r9   rS   rb   r   r   r   r   ê   s    


zIOBinding.save_a_copyc              
   C   s¤   |   ¡ }|  |¡}zPt|dƒ0}| |¡ | ¡  t | ¡ ¡ W d   ƒ n1 sT0    Y  W dS  tyž } z$t	j
dt|ƒ| jd W Y d }~dS d }~0 0 d S )NÚwbTr?   r@   F)ÚfixnewlinesÚencoder   ÚwriteÚflushr+   ÚfsyncÚfilenorJ   rK   rL   rM   r   )r   r.   r   rU   rT   Úmsgr   r   r   r]   ò   s    

,ÿzIOBinding.writefilec                 C   sT   | j  d¡dkr*t| jdƒs*| j  dd¡ | j  dd¡}| jdkrP| d| j¡}|S )z/Return text with final 
 if needed and os eols.zend-2cÚ
r2   zend-1crA   )r   ÚgetÚhasattrr   rC   rR   Úreplace©r   r   r   r   r   rd      s    
ÿ
zIOBinding.fixnewlinesc              
   C   sÖ   t |tƒr|S | jdkr"| d¡S z| d¡W S  ty@   Y n0 z.| dd¡}t t |¡j	¡\}}| |¡W S  t
yœ } zt|ƒ}W Y d }~n"d }~0  ty´   d| }Y n0 tjdd| | jd | d¡S )Nz	utf-8-sigÚasciirn   zInvalid encoding '%s'r?   z%s.
Saving as UTF-8r@   )rN   Úbytesr   re   ÚUnicodeEncodeErrorrD   Údetect_encodingÚioÚBytesIOÚreadlinerH   rM   rK   rL   r   )r   rU   ZencodedrV   Ú_rW   Zfailedr   r   r   re   
  s,    


ýzIOBinding.encodec                 C   sd  t jddt j| jd}|s(| j ¡  dS d }|  ¡ }|r>| j}|rJ|d u r€tjdd\}}|}t	 
|¡ |  |¡s€t	 |¡ dS t	j}d}|dkrªt d	d
d¡}	|	d }	n|dkrÂt d	d
d¡}	nd}|r6|	t |¡ }	t	 |	d¡}
|
 ¡  ¡ }|
 
¡ }|rd| | }|rPdt|	ƒ | }t jd|| jd nd| }t jd|| jd |r`t	 |¡ dS )NZPrintzPrint to Default PrinterrX   r3   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 statusr@   z-Printing is not enabled for this platform: %s)rK   ZaskokcancelZOKr   r9   r#   r.   ÚtempfileZmkstempr+   r!   r]   ÚunlinkÚnamer   Z	GetOptionÚshlexZquoteÚpopenrE   ÚstripÚreprrL   Zshowinfo)r   r;   r\   ZtempfilenameZsavedr.   ZtfdÚplatformZprintPlatformZcommandÚpipeÚoutputZstatusrZ   r   r   r   r   )  sb    ü



ÿ
ÿÿ
zIOBinding.print_window))zPython filesz
*.py *.pywÚTEXT)z
Text filesz*.txtr‡   )z	All filesÚ*Údarwinz.pyÚ c                 C   s<   |   d¡\}}| js(tj| j| jd| _| jj||d}|S )Nr   )r=   Ú	filetypes©Z
initialdirZinitialfile)ÚdefaultfilenameÚ
opendialogÚtkFileDialogZOpenr   r‹   Úshow©r   ÚdirÚbaser.   r   r   r   r6   f  s    ÿzIOBinding.askopenfiler   c                 C   sT   | j rtj | j ¡S | jr$| jdfS zt ¡ }W n tyF   d}Y n0 |dfS d S )NrŠ   )r.   r+   r,   Úsplitr/   ÚgetcwdrJ   )r   ÚmodeÚpwdr   r   r   r   n  s    

zIOBinding.defaultfilenamec                 C   s@   |   d¡\}}| js,tj| j| j| jd| _| jj||d}|S )Nr   )r=   r‹   ÚdefaultextensionrŒ   )r   Ú
savedialogr   ZSaveAsr   r‹   r˜   r   r‘   r   r   r   ra   z  s    ýzIOBinding.asksavefilec                 C   s   | j jr| j  |¡ dS )z-Update recent file list on all editor windowsN)r   r5   Zupdate_recent_files_listr0   r   r   r   rS   „  s    zIOBinding.updaterecentfileslist)NN)r   )$Ú__name__Ú
__module__Ú__qualname__r   r!   r#   r$   r'   r   r)   r.   r/   r1   r   r+   rP   rR   r8   r:   r   r   r   r]   rd   re   r   rŽ   r™   r‹   Úsysr„   r˜   r6   r   ra   rS   r   r   r   r   r      s:   
,;
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ú+r*   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   r5   r   r   Úprintr   ÚsaveasÚsavecopyro   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   s   d S r"   r   r%   r   r   r   r$   š  r¥   z(_io_binding.<locals>.MyEditWin.set_savedc                 S   s   d S r"   r   r    r   r   r   r'   ›  r¥   z)_io_binding.<locals>.MyEditWin.reset_undoc                 S   s   | j  d¡ d S )Nr   ©r   Zevent_generater`   r   r   r   r   œ  s    z#_io_binding.<locals>.MyEditWin.openc                 S   s   | j  d¡ d S )Nr   r¦   r`   r   r   r   r¢   ž  s    z$_io_binding.<locals>.MyEditWin.printc                 S   s   | j  d¡ d S )Nr	   r¦   r`   r   r   r   r      s    z#_io_binding.<locals>.MyEditWin.savec                 S   s   | j  d¡ d S )Nr
   r¦   r`   r   r   r   r£   ¢  s    z%_io_binding.<locals>.MyEditWin.saveasc                 S   s   | j  d¡ d S )Nr   r¦   r`   r   r   r   r¤   ¤  s    z'_io_binding.<locals>.MyEditWin.savecopyN)rš   r›   rœ   r   r#   r$   r'   r   r¢   r   r£   r¤   r   r   r   r   Ú	MyEditWin  s   r§   )Ztkinterrž   rŸ   rY   ÚmapÚintZgeometryr”   Zpackr9   r   )	r=   rž   rŸ   ÚrootÚxÚyr§   r   r   r   r   r   Ú_io_binding‰  s    
 r­   Ú__main__)rz   zidlelib.idle_test.test_iomenué   F)Ú	verbosityÚexit)Úrun)rt   r+   r€   r   r}   rD   Ztkinter.filedialogZ
filedialogr   Ztkinter.messageboxZ
messageboxrK   Ztkinter.simpledialogr   ZidlelibZidlelib.configr   r>   r„   Úerrorsr   r­   rš   Zunittestrz   Zidlelib.idle_test.htestr²   r   r   r   r   Ú<module>   s.   
  t$