
    Rh                     8   d Z ddlZd Zd Zd Zd Zd ZdZd	 Zd
 Z	d Z
d Zd Zd Zd Z G d dej                        Z G d dej                         Z G d dej"                        Z G d deej$                        Z G d deej&                        Zd Zy)uY    Codec for the Punicode encoding, as specified in RFC 3492

Written by Martin v. Löwis.
    Nc                     t               }t               }| D ]<  }t        |      dk  r|j                  t        |             ,|j	                  |       > t        |      }t        |      |fS )z 3.1 Basic code point segregation   )	bytearraysetordappendaddsortedbytes)strbaseextendedcs       )/usr/lib/python3.12/encodings/punycode.py	segregater   
   s`    ;DuH q6C<KKALLO	
 hH;      c                 @    d}| D ]  }t        |      |k  s|dz  } |S )z@Return the length of str, considering only characters below max.r      )r   )r   maxresr   s       r   selective_lenr      s1    
C q6C<1HC Jr   c                 h    t        |       }	 |dz  }||k(  ry| |   }||k(  r|dz   |fS ||k  r|dz  }')a  Return a pair (index, pos), indicating the next occurrence of
    char in str. index is the position of the character considering
    only ordinals up to and including char, and pos is the position in
    the full string. index/pos is the starting position in the full
    string.r   )r   )len)r   charindexposlr   s         r   selective_findr      sV     	CA
q!8H97C<XQJE r   c                     d}g }d}|D ]c  }dx}}t        |      }t        | |      }	|	dz   ||z
  z  }
	 t        | |||      \  }}|dk(  rn!|
||z
  z  }
|j                  |
dz
         |}d}
8|}e |S )3.2 Insertion unsort codingr   r   r   r   )r   r   r   r   )r   r   oldcharresultoldindexr   r   r   r   curlendeltas              r   insertion_unsortr'   0   s    GFH 1vsD)dWn-&s1U37IE#{UX%%EMM%'"HE   Mr   c                 4    d| dz   z  |z
  }|dk  ry|dkD  ry|S )N$   r       )jbiasr   s      r   Tr.   F   s+    
A,
C
Qwq
RxJr   s$   abcdefghijklmnopqrstuvwxyz0123456789c                     t               }d}	 t        ||      }| |k  r#|j                  t        |           t	        |      S |j                  t        || |z
  d|z
  z  z             | |z
  d|z
  z  } |dz  }i)(3.3 Generalized variable-length integersr   r   r)   )r   r.   r   digitsr   )Nr-   r#   r,   ts        r   generate_generalized_integerr4   N   s    [F	A
aJq5MM&)$= fQ1q5R!V"4567UQ	Q r   c                 z    |r| dz  } n| dz  } | | |z  z  } d}| dkD  r| dz  } |dz  }| dkD  r|d| z  | dz   z  z   }|S )Ni     r   i  #   r)   &   r+   )r&   firstnumchars	divisionsr-   s        r   adaptr<   [   sk    #!	UhEI
#+R	 #+ U
urz23DKr   c                     t               }d}t        |      D ]8  \  }}t        ||      }|j                  |       t	        ||dk(  | |z   dz         }: t        |      S )z3.4 Bias adaptationH   r   r   )r   	enumerater4   extendr<   r   )baselendeltasr#   r-   pointsr&   ss          r   generate_integersrE   j   sg     [FD"6* 9(5aUFAIwv~a'789 =r   c                 x    t        |       \  }}t        | |      }t        t        |      |      }|r|dz   |z   S |S )N   -)r   r'   rE   r   )textr   r   rB   s       r   punycode_encoderI   u   sB    t_ND(dH-F TF3Hd{X%%Or   c                 d   d}d}d}	 	 t        | |         }|dz  }d|cxk  rdk  r	n n|dz
  }n1d|cxk  rd	k  r	n n|d
z
  }n|dk(  rt        d| |dz
     z        |dfS t        ||      }	|||z  z  }||	k  r||fS |d|	z
  z  }|dz  }# t        $ r |dk(  rt        d      |dz   dfcY S w xY w)r0   r   r   strictzincomplete punicode stringNA   Z   0   9      z Invalid extended code point '%s'r)   )r   
IndexErrorUnicodeErrorr.   )
r   extposr-   errorsr#   wr,   r   digitr3   s
             r   decode_generalized_numberrW      s   F	A	A
	$x'(D
 	!444KET!T!2IExA!)&(!3 4 5 5 4<aJ%!)196>!aL	Q-   	$!"#?@@A:t##	$s   B  B/.B/c                 ~   d}d}d}d}|t        |      k  rt        ||||      \  }}|| S ||dz   z  }||t        |       dz   z  z  }|dkD  r|dk(  rt        d	|z        t        d
      }|t        |       dz   z  }| d| t	        |      z   | |d z   } t        ||dk(  t        |             }|}|t        |      k  r| S )r!   r   r   r>   r   Nr   i rK   zInvalid character U+%x?)r   rW   rR   r   chrr<   )	r   r   rT   r   r   r-   rS   newposr&   s	            r   insertion_sortr\      s    D
CDF
3x=
 1(F26@= KuQwD	A&&(?!"#;d#BCCs8DSY]#DSzCI%ST
2UVq[3t95! 3x=
 " Kr   c                 Z   t        | t              r| j                  d      } t        | t              rt	        |       } | j                  d      }|dk(  rd}t        | d      j                         }n0t        | d | d|      }t        | |dz   d  d      j                         }t        |||      S )NasciirG   r    r   )
isinstancer   encode
memoryviewr   rfindupperr\   )rH   rT   r   r   r   s        r   punycode_decodere      s    ${{7#$
#T{
**T
C
bytW%++-4:w/tCEF|W-335$&11r   c                       e Zd ZddZddZy)Codecc                 2    t        |      }|t        |      fS N)rI   r   selfinputrT   r   s       r   ra   zCodec.encode   s    e$CJr   c                 X    |dvrt        d|z         t        ||      }|t        |      fS N)rK   replaceignorezUnsupported error handling )rR   re   r   rj   s       r   decodezCodec.decode   s6    88<VCDDeV,CJr   N)rK   )__name__
__module____qualname__ra   rq   r+   r   r   rg   rg      s    r   rg   c                       e Zd ZddZy)IncrementalEncoderc                     t        |      S ri   )rI   rk   rl   finals      r   ra   zIncrementalEncoder.encode   s    u%%r   NF)rr   rs   rt   ra   r+   r   r   rv   rv      s    &r   rv   c                       e Zd ZddZy)IncrementalDecoderc                 z    | j                   dvrt        d| j                   z         t        || j                         S rn   )rT   rR   re   rx   s      r   rq   zIncrementalDecoder.decode   s5    ;;==<T[[HIIudkk22r   Nrz   )rr   rs   rt   rq   r+   r   r   r|   r|      s    3r   r|   c                       e Zd Zy)StreamWriterNrr   rs   rt   r+   r   r   r   r          r   r   c                       e Zd Zy)StreamReaderNr   r+   r   r   r   r      r   r   r   c            	          t        j                  dt               j                  t               j                  t
        t        t        t              S )Npunycode)namera   rq   incrementalencoderincrementaldecoderstreamwriterstreamreader)	codecs	CodecInforg   ra   rq   rv   r|   r   r   r+   r   r   getregentryr      s6    w~~w~~--!! r   )__doc__r   r   r   r   r'   r.   r1   r4   r<   rE   rI   rW   r\   re   rg   rv   r|   r   r   r   r+   r   r   <module>r      s   
 
!$, 
1	<22 
FLL 
&22 &322 3	5,, 		5,, 	
	r   