ó
Ò:\c           @   s‘  d  Z  d d l m Z m Z m 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 m Z m Z m Z e j ƒ  Z e e d „ Z d „  Z e ƒ  Z d	 „  Z d
 „  Z e j d ƒ Z d d d d d d d d d d d d d d d d d d d g Z d „  Z d  „  Z d! „  Z d" „  Z d d# d$ „ Z  d d# d% „ Z! d d& „ Z" d d' „ Z# d( „  Z$ d) „  Z% d S(*   sÃ   
Text encoding utilities, text file I/O.

Functions 'get_coding', 'decode', 'encode' and 'to_unicode' come from Eric4
source code (Utilities/__init___.py) Copyright Â© 2003-2009 Detlev Offenbach
iÿÿÿÿ(   t   BOM_UTF8t	   BOM_UTF16t	   BOM_UTF32N(   t   UniversalDetector(   t	   is_binary(   t   is_binary_stringt	   is_stringt
   is_unicodet   to_text_stringc         C   sa   y |  j  d ƒ j d ƒ SWn@ t k
 r\ y |  j  d ƒ j | ƒ SWq] t k
 rX |  SXn Xd S(   s   Transcode a text stringt   cp437t   cp1252N(   t   decodet   encodet   UnicodeError(   t   textt   inputt   output(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt	   transcode'   s    c          C   s%   t  j ƒ  }  |  d k r! t }  n  |  S(   sU   
    Query the filesystem for the encoding used to encode filenames and envvars.
    N(   t   syst   getfilesystemencodingt   Nonet   PREFERRED_ENCODING(   t   encoding(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyR   :   s    	c         C   sh   t  |  ƒ s$ t |  j ƒ  d ƒ }  n@ t |  ƒ rd y |  j t ƒ } Wn t t f k
 r\ qd X| Sn  |  S(   sT   
    Return a unicode version of string decoded using the file system encoding.
    s   utf-8(   R   R   t   toUtf8R   R   t   FS_ENCODINGR   t	   TypeError(   t   stringt   unic(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt   to_unicode_from_fsH   s    c         C   sD   t  |  ƒ r@ y |  j t ƒ } Wn t t f k
 r8 q@ X| Sn  |  S(   sU   
    Return a byte string version of unc encoded using the file system encoding.
    (   R   R   R   R   R   (   R   R   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt   to_fs_from_unicodeY   s    s   coding[:=]\s*([-\w_.]+)s   utf-8s	   iso8859-1s
   iso8859-15t   asciis   koi8-rs   koi8-us	   iso8859-2s	   iso8859-3s	   iso8859-4s	   iso8859-5s	   iso8859-6s	   iso8859-7s	   iso8859-8s	   iso8859-9s
   iso8859-10s
   iso8859-13s
   iso8859-14s   latin-1s   utf-16c         C   sÓ   xm |  j  ƒ  d  D][ } y t j t | ƒ ƒ } Wn t k
 rC q X| r | j d ƒ } | t k rl | Sq q Wt |  ƒ rÏ t ƒ  } x2 |  j  ƒ  d  D]  } | j	 | ƒ | j
 r– Pq– q– W| j ƒ  | j d Sd S(   sr   
    Function to get the coding of a text.
    @param text text to inspect (string)
    @return coding string
    i   i   R   N(   t
   splitlinest	   CODING_REt   searchR   t   UnicodeDecodeErrort   groupt   CODECSR   R   t   feedt   donet   closet   resultR   (   R   t   lineR(   t   codect   detector(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt
   get_codingv   s$    		
c         C   s  y­ |  j  t ƒ r/ t |  t t ƒ d ƒ d f S|  j  t ƒ r[ t |  t t ƒ d ƒ d f S|  j  t ƒ r‡ t |  t t ƒ d ƒ d f St |  ƒ } | r¬ t |  | ƒ | f SWn t t f k
 rÆ n Xy t |  d ƒ d f SWn t t f k
 r÷ n Xt |  d ƒ d f S(   ss   
    Function to decode a text.

    @param text text to decode (string)
    @return decoded text and encoding
    s   utf-8s	   utf-8-boms   utf-16s   utf-32s   utf-8-guesseds   latin-1s   latin-1-guessed(	   t
   startswithR    R   t   lenR   R   R,   R   t   LookupError(   R   t   coding(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyR   ™   s"    c         C   sm  | d k r# t  |  j d ƒ d f S| r] y |  j | ƒ | f SWq] t t f k
 rY q] Xn  t |  ƒ } | r³ y |  j | ƒ | f SWq³ t t f k
 r¯ t d | ƒ ‚ q³ Xn  | rÈ | j d ƒ s× | j d ƒ r/| j d d ƒ } | j d d ƒ } y |  j | ƒ | f SWq/t t f k
 r+q/Xn  y |  j d ƒ d f SWn t k
 rYn X|  j d ƒ d f S(   s²   
    Function to encode a text.

    @param text text to encode (string).
    @param orig_coding type of the original coding (string).
    @return encoded text and encoding.
    s	   utf-8-boms   utf-8s   Incorrect encoding (%s)s   -defaults   -guessedt    R   (   R    R   R   R/   R,   t   RuntimeErrort   endswitht   replace(   R   t   orig_codingR0   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyR   ¸   s4    c         C   s`   t  |  ƒ s\ xM t D]B } y t |  | ƒ } Wn" t k
 r? q t k
 rP Pq X| Sq Wn  |  S(   s   Convert a string to unicode.(   R   R$   R   R   R   (   R   R*   R   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt
   to_unicodeä   s    t   wbc         C   s>   t  |  | ƒ \ }  } t | | ƒ  } | j |  ƒ Wd QX| S(   sg   
    Write 'text' to file ('filename') assuming 'encoding'.

    Return (eventually new) encoding.
    N(   R   t   opent   write(   R   t   filenameR   t   modet   textfile(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyR9   ó   s    c         C   s   t  t j j |  ƒ | | | ƒ S(   sh   
    Write 'lines' to file ('filename') assuming 'encoding'.

    Return (eventually new) encoding.
    (   R9   t   ost   linesept   join(   t   linesR:   R   R;   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt
   writelinesÿ   s    c         C   s+   t  t |  d ƒ j ƒ  ƒ \ } } | | f S(   sG   
    Read text from file ('filename')
    Return text and encoding
    t   rb(   R   R8   t   read(   R:   R   R   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyRC     s    !c         C   s+   t  |  | ƒ \ } } | j t j ƒ | f S(   sL   
    Read lines from file ('filename').

    Return lines and encoding.
    (   RC   t   splitR=   R>   (   R:   R   R   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt	   readlines  s    c         C   s.   y t  |  ƒ SWn t t f k
 r) t SXd S(   s+   Test if the given path is a text-like file.N(   R   t   OSErrort   IOErrort   False(   R:   (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt   is_text_file  s    c         C   s*   y |  j  d ƒ SWn t k
 r% |  SXd S(   s2   Ensure a file is binary format. From conda/common.s   utf-8N(   R   t   AttributeError(   t   value(    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt   ensure_binary#  s    (&   t   __doc__t   codecsR    R   R   t   localeR=   t   reR   t   chardet.universaldetectorR   t-   anaconda_navigator.external.binaryornot.checkR   t"   anaconda_navigator.utils.py3compatR   R   R   R   t   getpreferredencodingR   R   R   R   R   R   t   compileR    R$   R,   R   R   R6   R9   RA   RC   RE   RI   RL   (    (    (    s@   lib/python2.7/site-packages/anaconda_navigator/utils/encoding.pyt   <module>   s:   "					#		,			
	