o
    gt=                     @   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rhd 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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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   D/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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      
zIOBinding.get_savedc                 C   s   | j | d S r%   )r   	set_savedr   flagr   r   r    r(   7      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?   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   r3   r   r   r    set_filenameE   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getattrr3   r&   r   loadfiler   	focus_set	maybesave)r   eventZeditFiler:   r3   replyr   r   r    r   P   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rB   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   readrC   newlinesUnicodeDecodeErrorSyntaxErrorr   r   updater   OSErrorr   	showerrorstr
isinstanceshowwarningr0   linesepdeleter6   r   eol_conventionrH   r,   r(   Zmark_setZyviewupdaterecentfileslist)	r   r3   fcharsr   rV   Z	convertedencerrr   r   r    r=   ~   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defaultrB   r9   Zno)r&   r3   r   ZaskyesnocancelZYESr   r   r>   )r   r^   confirmrA   r   r   r    r?      s,   

zIOBinding.maybesavec                 C   sX   | j s	| | n| | j r%| d z| j  W n	 ty$   Y nw | j  dS )NTr8   )	r3   r   	writefiler(   r   store_file_breaksAttributeErrorr   r>   r   r@   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 )Nr/   r8   )
asksavefilera   r6   r(   r   rb   rc   r   r>   rW   r   r@   r3   r   r   r    r      s   




zIOBinding.save_asc                 C   s.   |   }|r| | | j  | | dS )Nr8   )re   ra   r   r>   rW   rf   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wbTrD   rE   F)fixnewlinesencoder   writeflushr0   fsyncfilenorO   r   rP   rQ   r   )r   r3   r   rY   rX   msgr   r   r    ra      s$   


zIOBinding.writefilec                 C   sT   | j ddkrt| jds| j dd | j dd}| jdkr(|d| j}|S )z/Return text with final 
 if needed and os eols.zend-2c
r7   zend-1crF   N)r   gethasattrr   rH   rV   replacer   r   r   r   r    rh      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asciirr   zInvalid encoding '%s'rD   z%s.
Saving as UTF-8rE   )rR   bytesr   ri   UnicodeEncodeErrorrI   detect_encodingioBytesIOreadlinerM   rQ   r   rP   r   )r   rY   encodedrZ   _r[   Zfailedr   r   r    ri   
  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 Printerr\   r8   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 statusrE   z-Printing is not enabled for this platform: %s)r   ZaskokcancelZOKr   r>   r&   r3   tempfilemkstempr0   r$   ra   unlinknamer   Z	GetOptionshlexquotepopenrJ   stripreprrP   Zshowinfo)r   r@   r`   ZtempfilenameZsavedr3   ZtfdplatformZprintPlatformZcommandpipeoutputstatusr^   r   r   r    r   )  sd   





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   )rB   	filetypesZ
initialdirZinitialfile)defaultfilename
opendialogr   ZOpenr   r   showr   dirbaser3   r   r   r    r;   f  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   )r3   r0   r1   splitr4   getcwdrO   )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   )rB   r   defaultextensionr   )r   
savedialogr   ZSaveAsr   r   r   r   r   r   r   r    re   z  s   zIOBinding.asksavefilec                 C   s   | j jr| j | dS dS )z-Update recent file list on all editor windowsN)r   r:   Zupdate_recent_files_listr5   r   r   r    rW     s   zIOBinding.updaterecentfileslist)NN)r   )$__name__
__module____qualname__r!   r$   r&   r(   r,   r"   r.   r3   r4   r6   r   r0   rT   rV   r=   r?   r   r   r   ra   rh   ri   r   r   r   r   sysr   r   r;   r   re   rW   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   r:   r   r   printr   saveassavecopyrs   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    r,     r   z)_io_binding.<locals>.MyEditWin.reset_undoc                 S      | j d d S )Nr   r   Zevent_generaterd   r   r   r    r     r+   z#_io_binding.<locals>.MyEditWin.openc                 S   r   )Nr   r   rd   r   r   r    r     r+   z$_io_binding.<locals>.MyEditWin.printc                 S   r   )Nr   r   rd   r   r   r    r     r+   z#_io_binding.<locals>.MyEditWin.savec                 S   r   )Nr   r   rd   r   r   r    r     r+   z%_io_binding.<locals>.MyEditWin.saveasc                 S   r   )Nr   r   rd   r   r   r    r     r+   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   )tkinterr   r   r]   mapintZgeometryr   packr>   r
   )	rB   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)rx   r0   r   r   r   rI   r   r   r   Ztkinter.simpledialogr   ZidlelibZidlelib.configr   rC   r   errorsr
   r   r   Zunittestr   Zidlelib.idle_test.htestr   r   r   r   r    <module>   s2    
  t$