
WO                 @   s{  d  d l  Z  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l j Z	 d  d l
 j Z d  d l m Z d  d l m Z y# d  d l Z e j e j d  Wn e e j f k
 r Yn Xe j   Z d Z e j d k r1y! e j   d Z e  j e  Wn e k
 r-Yn Xn yA e j e j  Z e d k p[e d k rdd Z e  j e  Wnu e e  e f k
 ry? e j   d Z e d k pe d k rd Z e  j e  Wn e! e f k
 rYn XYn Xe j"   Z e Z# e j$ d	 e j%  Z& e j$ d
 e j%  Z' d d   Z( Gd d   d  Z) d d   Z* e+ d k rwd  d l, m- Z- e- e*  d S)    N)BOM_UTF8)	askstring)idleConf asciiwin32   z&^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)z^[ \t\f]*(?:[#\r\n]|$)c             C   s  t  |  t  r! |  j d  } n |  } d | k rR | j d d  d d  } n4 d | k r} | j d d  d d  } n	 | g } xA | D]5 } t j |  } | d k	 r Pt j |  s d Sq Wd S| j d  } y t j	 |  Wn" t
 k
 rt
 d |   Yn X| S)aV  Return the encoding declaration according to PEP 263.

    When checking encoded data, only the first two lines should be passed
    in to avoid a UnicodeDecodeError if the rest of the data is not unicode.
    The first two lines would contain the encoding specification.

    Raise a LookupError if the encoding is declared but unknown.
    z
iso-8859-1
   Nr   zUnknown encoding: )
isinstancebytesdecodesplit	coding_rematchblank_regroupcodecslookupLookupError)datalinesZlstliner   name r   >/afs/.cs/s/python-3.5.2/amd64_ubu14/lib/python3.5/IOBinding.pycoding_specD   s*    		r   c               @   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 d d d d  Z d Z e j e  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% d&   Z d Z d Z  d: d; d< g Z! e" j# d. k rJd/ n d0 Z$ d1 d2   Z% d3 d4 d5  Z& d6 d7   Z' d8 d9   Z( d S)=	IOBindingc             C   s   | |  _  | j |  _ |  j j d |  j  |  _ |  j j d |  j  |  _ |  j j d |  j  |  _ |  j j d |  j	  |  _
 d  |  _ |  j j d |  j  |  _ d  S)Nz<<open-window-from-file>>z<<save-window>>z<<save-window-as-file>>z<<save-copy-of-window-as-file>>z<<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__o   s    		zIOBinding.__init__c             C   s   |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  d  |  _ d  |  _  d  |  _ d  S)Nz<<open-window-from-file>>z<<save-window>>z<<save-window-as-file>>z<<save-copy-of-window-as-file>>z<<print-window>>)	r    Zunbindr#   r%   r'   r)   r,   r   filename_change_hook)r-   r   r   r   close{   s    		zIOBinding.closec             C   s   |  j  j   S)N)r   	get_saved)r-   r   r   r   r1      s    zIOBinding.get_savedc             C   s   |  j  j |  d  S)N)r   	set_saved)r-   flagr   r   r   r2      s    zIOBinding.set_savedc             C   s   |  j  j   d  S)N)r   
reset_undo)r-   r   r   r   r4      s    zIOBinding.reset_undoNc             C   s   | |  _  d  S)N)r/   )r-   hookr   r   r   set_filename_change_hook   s    z"IOBinding.set_filename_change_hookc             C   sc   | r- t  j j |  r- d  |  _ | |  _ n2 | |  _ d  |  _ |  j d  |  j r_ |  j   d  S)Nr   )ospathisdirfilenamedirnamer2   r/   )r-   r:   r   r   r   set_filename   s    				zIOBinding.set_filenamec             C   s  |  j  j } | r | s' |  j   } n | } | r |  j  r~ t |  j  d d   r~ |  j r~ |  j   r~ | j | |  j  q | j |  n |  j r |  j j	   d S|  j   r |  j
   } | d k r |  j j	   d S| s |  j   } n | } | r|  j |  n |  j j	   d S)NZinterpbreakcancel)r   flistaskopenfilegetattrr:   r1   r"   loadfiler    	focus_set	maybesave)r-   eventZeditFiler?   r:   replyr   r   r   r"      s6    	
	zIOBinding.openz(\r\n)|\n|\rc       	      C   s  yL t  | d  6 } | j   | j   } | j d  | j   } Wd  QRXWnH t k
 r } z( t j d t |  d |  j d SWYd  d  } ~ Xn X|  j	 | |  \ } } | d  k r t j d d | d |  j d S|  j
 j |  } | r| j d  |  _ |  j
 j d |  } |  j j d	 d
  |  j d   |  j j d	 |  |  j   |  j |  | rx|  j d  |  j j d d	  |  j j d  |  j |  d S)Nrbr   z	I/O ErrorparentFzDecoding ErrorzFile %s
Failed to Decodez\nz1.0endinsertT)r"   readlineseekreadOSErrortkMessageBox	showerrorstrr    _decodeeol_researchr   eol_conventionsubdeleter<   rJ   r4   r2   Zmark_setZyviewupdaterecentfileslist)	r-   r:   f	two_linesr   msgcharsZ	convertedZfirsteolr   r   r   rB      s:    	


zIOBinding.loadfilec          ;   C   s  d } | j  t  r^ y | d d  j d  } Wn t k
 rJ d SYn Xd |  _ | d f Sy t |  } Wnc t k
 r } z. t j d d d d	 | d
 |  j	  d } WYd d } ~ Xn t k
 r d SYn X| ry& t
 | |  } | |  _ | d f SWn t k
 rYn Xy& t
 | d  } d |  _ | d f SWn t k
 rOYn Xy& t
 | d  } d |  _ | d f SWn t k
 rYn Xy] |  j j	 j   t d d d t d
 |  j j	 } | rt
 | |  } d |  _ | d f SWn t t f k
 rYn Xd S)zCreate a Unicode string.N   zutf-8FBOMtitlezError loading the filemessagez^The encoding '%s' is not known to this Python installation. The file may not display correctlyrH   r   z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?ZinitialvalueT)NF)NF)NF)
startswithr   r   UnicodeDecodeErrorr*   r   r   rO   rP   r    rQ   r   updater   locale_encoding)r-   rZ   r   r\   encr   r   r   r   rR      sh    		
	
					zIOBinding._decodec          	   C   s   |  j    r d Sd |  j p d } t j d d d | d t j d |  j  } | r{ d } |  j d   |  j    s d	 } n | d  k r d	 } n d
 } |  j j   | S)Nyesz&Do you want to save %s before closing?zthis untitled documentr_   zSave On Closer`   defaultrH   r>   no)r1   r:   rO   ZaskyesnocancelZYESr    r$   rC   )r-   r`   confirmrF   r   r   r   rD   ;  s&    				zIOBinding.maybesavec             C   so   |  j  s |  j |  nE |  j |  j   r^ |  j d  y |  j j   Wn t k
 r] Yn X|  j j   d S)NTr=   )	r:   r&   	writefiler2   r   store_file_breaksAttributeErrorr    rC   )r-   rE   r   r   r   r$   Q  s    	zIOBinding.savec             C   s   |  j    } | ra |  j |  ra |  j |  |  j d  y |  j j   Wn t k
 r` Yn X|  j j   |  j	 |  d S)Nr   r=   )
asksavefilerj   r<   r2   r   rk   rl   r    rC   rX   )r-   rE   r:   r   r   r   r&   ^  s    zIOBinding.save_asc             C   s=   |  j    } | r |  j |  |  j j   |  j |  d S)Nr=   )rm   rj   r    rC   rX   )r-   rE   r:   r   r   r   r(   l  s    zIOBinding.save_a_copyc             C   s   |  j    |  j j d d  } |  j d k rC | j d |  j  } |  j |  } y. t | d   } | j |  Wd  QRXd SWnH t k
 r } z( t	 j
 d t |  d |  j d SWYd  d  } ~ Xn Xd  S)	Nz1.0zend-1cr	   wbTz	I/O ErrorrH   F)fixlastliner    getrU   replaceencoder"   writerN   rO   rP   rQ   )r-   r:   r    r\   rY   r[   r   r   r   rj   t  s    

zIOBinding.writefilec          #   C   s  t  | t  r | S|  j d k r3 t | j d  Sy | j d  SWn t k
 rX Yn Xy t |  } d  } Wn1 t k
 r } z | } d  } WYd  d  } ~ Xn X| s d } | r y | j |  SWn t k
 r d | } Yn Xt j	 d d | d |  j
 t | j d  S)Nr^   zutf-8r   zInvalid encoding '%s'z	I/O Errorz%s.
Saving as UTF-8rH   )r   r   r*   r   rr   UnicodeErrorr   r   rO   rP   r    )r-   r\   re   Zfailedr[   r   r   r   rr     s4    


zIOBinding.encodec             C   s5   |  j  j d  } | d k r1 |  j  j d d  d  S)Nzend-2cr	   zend-1c)r    rp   rJ   )r-   cr   r   r   ro     s    zIOBinding.fixlastlinec          	   C   s  t  j d d d d d t  j d |  j  } | sA |  j j   d Sd  } |  j   } | rb |  j } | su | d  k r t j d d	  \ } } | } t	 j
 |  |  j |  s t	 j |  d St	 j } d
 } | d k r t j d d d  }	 |	 d }	 n* | d k r!t j d d d  }	 n d } | r|	 t j |  }	 t	 j |	 d  }
 |
 j   j   } |
 j
   } | rd | | } | rd t |	  | } t  j d | d |  j n# d | } t  j d | d |  j | rt	 j |  d S)Nr_   ZPrintr`   zPrint to Default Printerrg   rH   r=   prefixZ	IDLE_tmp_T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 statusz-Printing is not enabled for this platform: %s)rO   ZaskokcancelZOKr    rC   r1   r:   tempfilemkstempr7   r0   rj   unlinkr   r   Z	GetOptionshlexquotepopenrM   stripreprrP   Zshowinfo)r-   rE   ri   ZtempfilenameZsavedr:   ZtfdplatformZprintPlatformZcommandpipeoutputstatusr`   r   r   r   r+     sX    					
zIOBinding.print_windowPython files
*.py *.pywTEXT
Text files*.txt	All files*darwinz.pyr   c             C   s^   |  j  d  \ } } |  j s? t j d |  j d |  j  |  _ |  j j d | d |  } | S)Nr"   rH   	filetypes
initialdirinitialfile)defaultfilename
opendialogtkFileDialogZOpenr    r   show)r-   dirbaser:   r   r   r   r@     s    	zIOBinding.askopenfiler"   c             C   sk   |  j  r t j j |  j   S|  j r2 |  j d f Sy t j   } Wn t k
 r\ d } Yn X| d f Sd  S)Nr   )r:   r7   r8   r   r;   getcwdrN   )r-   modepwdr   r   r   r     s    		zIOBinding.defaultfilenamec             C   sg   |  j  d  \ } } |  j sH t j d |  j d |  j d |  j  |  _ |  j j d | d |  } | S)Nr$   rH   r   defaultextensionr   r   )r   
savedialogr   ZSaveAsr    r   r   r   )r-   r   r   r:   r   r   r   rm      s    				zIOBinding.asksavefilec             C   s    |  j  j r |  j  j |  d S)z-Update recent file list on all editor windowsN)r   r?   Zupdate_recent_files_list)r-   r:   r   r   r   rX   
  s    zIOBinding.updaterecentfileslist)r   r   r   )r   r   r   )r   r   ))__name__
__module____qualname__r.   r0   r1   r2   r4   r/   r6   r:   r;   r<   r"   ZeolrecompilerS   r7   lineseprU   rB   rR   rD   r$   r&   r(   rj   rr   ro   r+   r   r   r   sysr   r   r@   r   rm   rX   r   r   r   r   r   m   sD   ,	$D'2	
r   c             C   s   d d l  m } m } | |   } | j d  t t t t j d |  j	      \ } } } } | j	 d | | d f  Gd d   d  } | |  }	 |	 j
   |	 j   | |	  }
 t |
  d  S)	Nr   )ToplevelTextzTest IOBindingz[x+]z+%d+%d   c               @   s|   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  j d |  j  |  j  j d |  j  |  j  j d |  j  |  j  j d |  j  |  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savecopy)r-   r    r   r   r   r.     s    		z'_io_binding.<locals>.MyEditWin.__init__c             S   s   d S)Nr   r   )r-   r   r   r   r1     s    z(_io_binding.<locals>.MyEditWin.get_savedc             S   s   d  S)Nr   )r-   r3   r   r   r   r2      s    z(_io_binding.<locals>.MyEditWin.set_savedc             S   s   d  S)Nr   )r-   r   r   r   r4   !  s    z)_io_binding.<locals>.MyEditWin.reset_undoc             S   s   |  j  j d  d  S)Nz<<open-window-from-file>>)r    event_generate)r-   rE   r   r   r   r"   "  s    z#_io_binding.<locals>.MyEditWin.openc             S   s   |  j  j d  d  S)Nz<<print-window>>)r    r   )r-   rE   r   r   r   r   $  s    z$_io_binding.<locals>.MyEditWin.printc             S   s   |  j  j d  d  S)Nz<<save-window>>)r    r   )r-   rE   r   r   r   r$   &  s    z#_io_binding.<locals>.MyEditWin.savec             S   s   |  j  j d  d  S)Nz<<save-window-as-file>>)r    r   )r-   rE   r   r   r   r   (  s    z%_io_binding.<locals>.MyEditWin.saveasc             S   s   |  j  j d  d  S)Nz<<save-copy-of-window-as-file>>)r    r   )r-   rE   r   r   r   r   *  s    z'_io_binding.<locals>.MyEditWin.savecopyN)r   r   r   r.   r1   r2   r4   r"   r   r$   r   r   r   r   r   r   	MyEditWin  s   r   )tkinterr   r   r_   listmapintr   r   ZgeometrypackrC   r   )rH   r   r   rootwidthZheightxyr   r    r   r   r   r   _io_binding  s    3

r   __main__)run).r   r   r7   r   r~   r   r{   Ztkinter.filedialogZ
filedialogr   Ztkinter.messageboxZ
messageboxrO   Ztkinter.simpledialogr   Zidlelib.configHandlerr   locale	setlocaleLC_CTYPEImportErrorErrorgetfilesystemencodingZfilesystemencodingrd   r   getdefaultlocaler   r   nl_langinfoCODESET	NameErrorrl   
ValueErrorlowerencodingr   ASCIIr   r   r   r   r   r   Zidlelib.idle_test.htestr   r   r   r   r   <module>   s^   
) $