
    Fwg                        d Z ddlZddlZddlmZ dZd Zd Zej                  re	Z
d ZneZ
e	Zd Z G d	 d
e      Zd Zd Zd Zd ZdZ ed      Z ed      Z ej.                  e      j0                  Zd Zedk(  ryy)z
This is Victor Stinner's pure-Python implementation of PEP 383: the "surrogateescape" error
handler of Python 3.

Source: misc/python/surrogateescape.py in https://bitbucket.org/haypo/misc
    N)utilssurrogateescapec                 H    t         j                  r| S | j                  d      S )Nunicode_escape)r   PY3decode)texts    S/var/www/horilla/myenv/lib/python3.12/site-packages/future/utils/surrogateescape.pyur      s    yy{{+,,    c                 H    t         j                  r| j                  d      S | S )Nlatin1)r   r   encode)datas    r
   br      s    yy{{8$$r   c                     t        | f      S N)bytes)codes    r
   <lambda>r   #   s    UD7^ r   c                     | j                   | j                  | j                   }	 t        | t              rt        |      }nt        | t              rt        |      }n| || j                  fS # t        $ r | w xY w)z
    Pure Python implementation of the PEP 383: the "surrogateescape" error
    handler of Python 3. Undecodable bytes will be replaced by a Unicode
    character U+DCxx on decoding, and these are translated into the
    original bytes on encoding.
    )	objectstartend
isinstanceUnicodeDecodeErrorreplace_surrogate_decodeUnicodeEncodeErrorreplace_surrogate_encodeNotASurrogateError)excmystringdecodeds      r
   surrogateescape_handlerr$   (   sy     zz#))CGG,Hc-..x8G/0 /x8GI SWW  	s   :A- -A9c                       e Zd Zy)r    N)__name__
__module____qualname__ r   r
   r    r    C   s    r   r    c                 4   g }| D ]y  }t        |      }d|cxk  r
dk  st         t        d|cxk  rdk  r!n n|j                  t        |dz
               R|dk  r|j                  t        |dz
               ut         t	               j                  |      S )z
    Returns a (unicode) string, not the more logical bytes, because the codecs
    register_error functionality expects this.
            i  )ordr    append_unichrstrjoin)r"   r#   chr   s       r
   r   r   G   s    
 G % 2w ''$$ ($$
 T#V#NN74&=12V^NN74&=12$$'%( 5::gr   c                 $   g }| D ]q  }t        |t              r|}nt        |      }d|cxk  rdk  r!n n|j                  t	        d|z                M|dk  r|j                  t	        |             mt
         t               j                  |      S )z$
    Returns a (unicode) string
          r-      )r   intr.   r/   r0   r    r1   r2   )mybytesr#   r3   r   s       r
   r   r   d   s     G % b#Dr7D44NN76D=12T\NN74=) %$!%" 5::gr   c                    t         dk(  rg }t        |       D ]e  \  }}t        |      }|dk  rt        |      }n3d|cxk  rdk  rn nt        |dz
        }nt	        t         | ||dz   d      |j                  |       g t               j                  |      S t         dk(  rg }t        |       D ]  \  }}t        |      }d	|cxk  rd
k  rGn nDd|cxk  rdk  r#n n t        |dz
        }|j                  |       Mt	        t         | ||dz   d      |j                  d      }|j                  |        t               j                  |      S | j                  t         t              S )Nasciir5   i  r,   r-      zordinal not in range(128)zutf-8r+   i  zsurrogates not allowed)
FS_ENCODING	enumerater.   	bytes_chrr   r/   r   r2   r   	FS_ERRORS)fnencodedindexr3   r   ch_utf8s         r
   encodefilenamerE   }   s]   g "2 
	IE2r7Dczt_4)6)tf}-(uQw/1 1 NN2
	 w||G$$		 "2 	(IE2r7D''T+V+"4&=1BNN2&,#E57,DF F ))G,w'	( w||G$$yyi00r   c                 6    | j                  t        t              S r   )r   r=   r@   )rA   s    r
   decodefilenamerG      s    99[),,r   r;   u   [abcÿ]u   [abc]c                      t         j                  ry	 t        j                  t               y# t
        $ r! t        j                  t        t               Y yw xY w)zH
    Registers the surrogateescape error handler on Python 2 (only)
    N)r   r   codecslookup_errorr@   LookupErrorregister_errorr$   r)   r   r
   register_surrogateescaperM      sD     yyBI& Bi)@ABs   - 'AA__main__)__doc__rI   sysfuturer   r@   r   r   r   chrr0   r?   unichrr$   	Exceptionr    r   r   rE   rG   r=   rA   rB   lookupnamerM   r&   r)   r   r
   <module>rW      s     
  	
- 	99G+IGI6	 	:2%1N- AkNra6FG fmmK(--	B z r   