
    d                        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          j        Zd Zedk    rdS dS )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 |                     d          S )Nunicode_escape)r   PY3decode)texts    <lib/python3.11/site-packages/future/utils/surrogateescape.pyur      s$    y -{{+,,,    c                 H    t           j        r|                     d          S | S )Nlatin1)r   r   encode)datas    r
   br      s#    y {{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| n# t          $ r | w xY w|| j        fS )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$   (   s     z#)CG+,Hc-.. 	.x88GG/00 	 /x88GGI   	SWs   AA( (A5c                       e Zd ZdS )r    N)__name__
__module____qualname__ r   r
   r    r    C   s        Dr   r    c                 l   g }| D ]}t          |          }d|cxk    rdk    s	n t          d|cxk    rdk    r)n n&|                    t          |dz
                       ]|dk    r&|                    t          |dz
                       t          t	                                          |          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 % % 2ww  	% 	% 	% 	% 	% 	% 	% 	%$$
 T 	% 	% 	% 	%V 	% 	% 	% 	% 	%NN74&=112222V^ 	%NN74&=112222$$55::gr   c                 j   g }| D ]}t          |t                    r|}nt          |          }d|cxk    rdk    r)n n&|                    t	          d|z                        _|dk    r#|                    t	          |                     t
          t                                          |          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# 	DDr77D4 		% 		% 		% 		%4 		% 		% 		% 		% 		%NN76D=112222T\ 	%NN74==)))) %$55::gr   c                 v   t           dk    rg }t          |           D ]}\  }}t          |          }|dk     rt          |          }n>d|cxk    rdk    rn nt          |dz
            }nt	          t           | ||dz   d          |                    |           ~t                                          |          S t           dk    rg }t          |           D ]\  }}t          |          }d	|cxk    rd
k    rVn nSd|cxk    rdk    r+n n(t          |dz
            }|                    |           \t	          t           | ||dz   d          |                    d          }|                    |           t                                          |          S |                     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   }   s0   g $1 "2 
	 
	IE2r77Dcz 1t__4 1 1 1 16 1 1 1 1 1tf}--(uQw/1 1 1 NN2ww||G$$$		 1 "2 	( 	(IE2r77D 
( 
( 
( 
( 
( 
( 
( 
( 
(T F F F FV F F F F F"4&=11BNN2&&&&,#E57,DF F F ))G,,w''''ww||G$$$yyi000r   c                 B    |                      t          t                    S r   )r   r=   r@   )rA   s    r
   decodefilenamerG      s    99[),,,r   r;   u   [abcÿ]u   [abc]c                      t           j        rdS 	 t          j        t                     dS # t
          $ r# t          j        t          t                     Y dS 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      sl     y BI&&&&& B B Bi)@AAAAA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\     



       	
- - -   	9 G++IIGI  6	 	 	 	 	 	 	 	  :  2%1 %1 %1N- - - AAkNNraa6F6FG fmK((-	B 	B 	B z 	D	 	r   