ó
ËµÂYc           @  s—   d  Z  d d l m Z d d l Z e j d	 k  r7 e n e Z e j d
 k  rf d d l m	 Z	 e	 ƒ  n  d „  Z
 d „  Z d „  Z e ƒ  \ Z Z [ d S(   uÑ   
Partial backport of new functionality in Python 3.5's os module:

    fsencode (new in Python 3.2)
    fsdecode (new in Python 3.2)

Backport modifications are marked with "XXX backport" and "TODO backport".
iÿÿÿÿ(   t   unicode_literalsNi   (   t   register_surrogateescapec   	      C  sƒ  g  } d } t  |  ƒ } xd| | k  r~|  | } | d k  rM | d 7} q n  y|  | d } | d @d k rÊ | d @d k rÊ | d @d >| d @B} | d k  rº | j | | d g ƒ n  | d	 7} w n  |  | d	 } | d
 @d k rƒ| d @d k rƒ| d @d k rƒ| d @d >| d @Bd >| d @B} | d k  sRd | k oMd k n rs| j | | d | d	 g ƒ n  | d 7} w n  |  | d } | d @d
 k rO| d @d k rO| d @d k rO| d @d k rO| d @d >| d @Bd >| d @Bd >| d @B} | d k  s| d k r?| j | | d | d	 | d g ƒ n  | d 7} w n  Wn t k
 rcn X| j | ƒ | d 7} q W| S(   Ni    i€   i   ià   iÀ   i   i   i?   i   ið   i   i   i Ø  iÿß  i   iø   i   iÿÿ i   (   t   lent   extendt
   IndexErrort   append(	   t   bytest   skipst   it	   len_bytest   c1t   c2t   ct   c3t   c4(    (    s+   lib/python2.7/site-packages/backports/os.pyt   _invalid_utf8_indexes   s\    

 
(!
(

c         c  sJ   d } x4 | D], } |  | | !V|  | | d !V| d } q W|  | Vd  S(   Ni    i   (    (   t   bt   indexesR   t   j(    (    s+   lib/python2.7/site-packages/backports/os.pyt   _chunksV   s    c            så   t  j ƒ  ‰ ˆ d k r! d ‰ n d ‰ d d  l }  t  j d k  o] |  j ˆ ƒ |  j d ƒ k ‰ t  j d k  oŠ |  j ˆ ƒ |  j d ƒ k ‰  t  j d k  r¢ t n d „  ‰ ‡  ‡ ‡ ‡ ‡ f d	 †  } ‡ ‡ ‡ f d
 †  } | | f S(   Nu   mbcsu   strictu   surrogateescapeiÿÿÿÿi   u   utf-8u   asciic         S  s   t  |  g ƒ S(   N(   R   (   R   (    (    s+   lib/python2.7/site-packages/backports/os.pyt   <lambda>o   s    c           sŒ   t  |  t ƒ r |  St  |  t ƒ ra ˆ s. ˆ  rN d j ‡ ‡ f d †  |  Dƒ ƒ S|  j ˆ ˆ ƒ Sn' t d j t |  ƒ j d t j ƒƒ ‚ d S(   uø   
        Encode filename to the filesystem encoding with 'surrogateescape' error
        handler, return bytes unchanged. On Windows, use 'strict' error handler if
        the file system encoding is 'mbcs' (which is the default encoding).
        t    c         3  sV   |  ]L } d  t  | ƒ k o& d k n rA ˆ  t  | ƒ d  ƒ n | j ˆ ƒ Vq d S(   i Ü  iÿÜ  N(   t   ordt   encode(   t   .0R   (   t   _bytet   encoding(    s+   lib/python2.7/site-packages/backports/os.pys	   <genexpr>Ž   s   u   expect bytes or {_str}, not {}t   _strN(	   t
   isinstanceR   R   t   joinR   t	   TypeErrort   formatt   typet   __name__(   t   filename(   t   _HACK_AROUND_PY2_ASCIIt   _HACK_AROUND_PY2_UTF8R   R   t   errors(    s+   lib/python2.7/site-packages/backports/os.pyt   fsencodeq   s    c           sº   t  |  t ƒ r |  St  |  t ƒ r ˆ  r| d d l m } t | t d ƒ |  ƒ ƒ } d j ‡ ‡ f d †  t |  | ƒ Dƒ ƒ S|  j ˆ ˆ ƒ Sn' t	 d j
 t |  ƒ j d t j ƒƒ ‚ d S(	   uø   
        Decode filename from the filesystem encoding with 'surrogateescape' error
        handler, return str unchanged. On Windows, use 'strict' error handler if
        the file system encoding is 'mbcs' (which is the default encoding).
        iÿÿÿÿ(   t   arrayu   Bu    c         3  s!   |  ] } | j  ˆ  ˆ ƒ Vq d  S(   N(   t   decode(   R   t   chunk(   R   R%   (    s+   lib/python2.7/site-packages/backports/os.pys	   <genexpr>¶   s   u   expect bytes or {_str}, not {}R   N(   R   R   R   R'   R   t   strR   R   R(   R   R   R    R!   (   R"   R'   R   (   R$   R   R%   (    s+   lib/python2.7/site-packages/backports/os.pyt   fsdecode˜   s    (   i   (   i   (   i   (   t   syst   getfilesystemencodingt   codecst   version_infot   lookupt   chr(   R.   R&   R+   (    (   R#   R$   R   R   R%   s+   lib/python2.7/site-packages/backports/os.pyt   _fscodec_   s    	''(   i   (   i   (   t   __doc__t
   __future__R    R,   R/   t   unicodeR*   R   t   future.utils.surrogateescapeR   R   R   R2   R&   R+   (    (    (    s+   lib/python2.7/site-packages/backports/os.pyt   <module>   s   
		9			b