
    Ae<*              	          d dl mZ d dlZd dlZej                  d    dk\  reeeef\  ZZ	Z
ZdZneeeef\  ZZ	Z
ZdZ e
       Z e       Zej"                  Z G d de      Z G d d	e      Z G d
 de      Z G d de      Zd Zd Z G d de
      Zd Zd Zddddddddj:                  Zd e e e e!d                  z   Z"d Z#d Z$ e$       Z%d  Z&d! Z'd$d"Z(d# Z)y)%    )absolute_importN   TFc                   Z    e Zd ZdZd Zd Zej                  dk(  rd Znd Zd Z	d Z
d	 Zy
)UnicodeLiteralBuilderzAssemble a unicode string.
    c                     g | _         y N)charsselfs    >lib/python3.12/site-packages/Cython/Compiler/StringEncoding.py__init__zUnicodeLiteralBuilder.__init__   s	    
    c                     t        |t              r|j                  d      }t        |t              sJ t	        t        |                   | j                  j                  |       y )NASCII)
isinstance_bytesdecode_unicodestrtyper	   appendr   
characterss     r   r   zUnicodeLiteralBuilder.append   sJ    j&)#**73J*h/FT*5E1FF

*%r     c                 
   |dkD  rZ|dz  }| j                   j                  t        |dz  dz                | j                   j                  t        |dz  dz                y | j                   j                  t        |             y )Nr               r	   r   _unichrr   char_numbers     r   append_charvalz$UnicodeLiteralBuilder.append_charval%   so    U" w&

!!7K4,?6+I#JL

!!7K4,?6+I#JL

!!7;#79r   c                 L    | j                   j                  t        |             y r   r    r"   s     r   r$   z$UnicodeLiteralBuilder.append_charval/   s    JJw{35r   c                 &    | j                  |       y r   )r$   r   r#   escape_strings      r   append_uescapez$UnicodeLiteralBuilder.append_uescape2   s    K(r   c                 J    t        dj                  | j                              S )N )EncodedStringjoinr	   r
   s    r   	getstringzUnicodeLiteralBuilder.getstring5   s    SXXdjj122r   c                 &    d | j                         fS r   r.   r
   s    r   
getstringsz UnicodeLiteralBuilder.getstrings8   s    dnn&''r   N)__name__
__module____qualname____doc__r   r   sys
maxunicoder$   r)   r.   r1    r   r   r   r      s8    & ~~	:	6)3(r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
BytesLiteralBuilderz*Assemble a byte string or char value.
    c                      g | _         || _        y r   )r	   target_encodingr   r<   s     r   r   zBytesLiteralBuilder.__init__?   s    
.r   c                     t        |t              r|j                  | j                        }t        |t              sJ t        t        |                   | j                  j                  |       y r   )	r   r   encoder<   r   r   r   r	   r   r   s     r   r   zBytesLiteralBuilder.appendC   sP    j(+#**4+?+?@J*f-Ds4
3C/DD

*%r   c                 j    | j                   j                  t        |      j                  d             y N
ISO-8859-1)r	   r   r!   r?   r"   s     r   r$   z"BytesLiteralBuilder.append_charvalI   s$    

7;/66|DFr   c                 &    | j                  |       y r   )r   r'   s      r   r)   z"BytesLiteralBuilder.append_uescapeL   s    M"r   c                 T    t        t        | j                        | j                        S r   )bytes_literal
join_bytesr	   r<   r
   s    r   r.   zBytesLiteralBuilder.getstringO   s    Z

3T5I5IJJr   c                 "    | j                         S r   r0   r
   s    r   getcharzBytesLiteralBuilder.getcharS   s    ~~r   c                 &    | j                         d fS r   r0   r
   s    r   r1   zBytesLiteralBuilder.getstringsW   s     $''r   N)r2   r3   r4   r5   r   r   r$   r)   r.   rH   r1   r8   r   r   r:   r:   <   s,    /&G#K (r   r:   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)StrLiteralBuilderzDAssemble both a bytes and a unicode representation of a string.
    c                 B    t        |      | _        t               | _        y r   )r:   r   r   r   r=   s     r   r   zStrLiteralBuilder.__init__^   s    +O<-/r   c                 p    | j                   j                  |       | j                  j                  |       y r   )r   r   r   r   s     r   r   zStrLiteralBuilder.appendb   s&    :&Z(r   c                 p    | j                   j                  |       | j                  j                  |       y r   )r   r$   r   r"   s     r   r$   z StrLiteralBuilder.append_charvalf   s&    "";/$$[1r   c                 p    | j                   j                  |       | j                  j                  |       y r   )r   r   r   r$   r'   s      r   r)   z StrLiteralBuilder.append_uescapej   s&    =)$$[1r   c                 j    | j                   j                         | j                  j                         fS r   )r   r.   r   r
   s    r   r1   zStrLiteralBuilder.getstringsn   s'    %%')@)@)BCCr   N)	r2   r3   r4   r5   r   r   r$   r)   r1   r8   r   r   rK   rK   [   s!    0)22Dr   rK   c                   >    e Zd ZdZd Zd Zd Zed        Zd Z	d Z
y)r,   Nc                     | S r   r8   r   memos     r   __deepcopy__zEncodedString.__deepcopy__x       r   c                 T    | j                   J | j                  | j                         S r   encodingr?   r
   s    r   
byteencodezEncodedString.byteencode{   s"    }}(({{4==))r   c                 @    | j                   J | j                  d      S )NzUTF-8rX   r
   s    r   
utf8encodezEncodedString.utf8encode   s    }}$${{7##r   c                     | j                   d u S r   )rY   r
   s    r   
is_unicodezEncodedString.is_unicode   s    }}$$r   c                     t        |       S r   )string_contains_surrogatesr
   s    r   contains_surrogatesz!EncodedString.contains_surrogates   s    )$//r   c                 6    t        | j                         d      S )Nutf8)rE   r\   r
   s    r   as_utf8_stringzEncodedString.as_utf8_string   s    T__.77r   )r2   r3   r4   rY   rU   rZ   r\   propertyr^   ra   rd   r8   r   r   r,   r,   r   s6     H*$ % %08r   r,   c                 Z    t        t        |       D ]  }|dkD  r yd|cxk  rdk  s y  y)z
    Check if the unicode string contains surrogate code points
    on a CPython platform with wide (UCS-4) or narrow (UTF-16)
    Unicode, i.e. characters that would be spelled as two
    separate code units on a narrow platform.
    r   Tr     F)mapord)ustringcs     r   r`   r`      s>     g u9Q &  !
 r   c                     d}t         j                  dk(  }t        t        |       D ]'  }|dk  s|dkD  r|s y|s y|dk  r|r yd}"|s yd}) |S )a  
    Check if the unicode string contains lone surrogate code points
    on a CPython platform with wide (UCS-4) or narrow (UTF-16)
    Unicode, i.e. characters that would be spelled as two
    separate code units on a narrow platform, but that do not form a pair.
    Fr   r   rg   T  )r6   r7   rh   ri   )rj   last_was_startunicode_uses_surrogate_encodingrk   s       r   string_contains_lone_surrogatesrp      sl     N&)nn&=#g #v:V0&[!N!"N#  r   c                   2    e Zd ZdZd Zd Zd Zd ZdZd Z	y)BytesLiteralNc                     | S r   r8   rS   s     r   rU   zBytesLiteral.__deepcopy__   rV   r   c                 d    t         rt        |       S | j                  d      j                  d      S rA   )
IS_PYTHON3r   r   r?   r
   s    r   rZ   zBytesLiteral.byteencode   s+    $< ;;|,33LAAr   c                     J d| z         )Nz this is not a unicode string: %rr8   r
   s    r   r\   zBytesLiteral.utf8encode   s    ?84??r   c                 $    | j                  d      S )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        rB   )r   r
   s    r   __str__zBytesLiteral.__str__   s     {{<((r   Fc                 4    t        t        |             }d|z  S )Nz"%s")split_string_literalescape_byte_string)r   values     r   as_c_string_literalz BytesLiteral.as_c_string_literal   s    $%7%=>~r   )
r2   r3   r4   rY   rU   rZ   r\   rx   r^   r}   r8   r   r   rr   rr      s)    HB@) Jr   rr   c                 N    t        | t              sJ t        |       } || _        | S r   )r   bytesrr   rY   srY   s     r   rE   rE      s$    aQAAJHr   c                 ^    t        | t        t        f      sJ t        |       } ||| _        | S r   )r   r   r   r,   rY   r   s     r   encoded_stringr      s0    a(E*++aA
Hr   
	)z\az\bz\fz\nz\rz\tz\v)\z??"    c           	          | dv rt        |       dd S | dk(  ry| dk(  rydj                  | D cg c]  }d	t        |      z   c}      S c c}w )
Nz
	   r   z\"r   \\r+   z\%03o)reprr-   ri   )r   rk   s     r   _to_escape_sequencer      sU    H}Awq}	
c	
d ww15a3q6)5665s   A
c                     g } i t         D ]q  }dj                  |D cg c]  }d|j                  dd      z   c}      }| j                  |       t	        |      j                  d      |j                  d      <   s t        j                  ddj                  |       z  j                  d            j                  fdfd	}|S c c}w )
Nr+   z[%s]r   r   r   z(%s)|c                 ,    | j                  d         S )Nr   )group)mreplacementss    r   replace_specialsz2_build_specials_replacer.<locals>.replace_specials  s    AGGAJ''r   c                      |       S r   r8   )r   r   subs    r   replacez)_build_specials_replacer.<locals>.replace	  s    #Q''r   )	
_c_specialr-   r   r   r   r?   recompiler   )subexpsspecialrk   regexpr   r   r   r   s        @@@r   _build_specials_replacerr      s    GL ]GLq&199T6#::LMv0CG0L0S0ST[0\W^^G,-] **fsxx0088A
B
F
FC((N Ms   C
c                     t         r| j                  d      } | dv rt        |       dd S | dk(  ryt        |       }|dk  s|dkD  rd	|z  S | S )
NrB   z
	\r   r   'z\'r      z\x%02X)ru   r   r   ri   )rk   ns     r   escape_charr     sY    HH\"JAwq}	
cAA2vS1}r   c                    t        |       } 	 | j                  d      S # t        $ r Y nw xY wt        rbt	               }|j
                  |j                  }}| D ]*  }|dk\  r |d|z  j                  d             # ||       , |j                  d      S g }|j
                  }| D ]&  }t        |      }|dk\  r |d|z          ||       ( t        |      j                  d      S )zEscape a byte string so that it can be written into C code.
    Note that this returns a Unicode string instead which, when
    encoded as ISO-8859-1, will result in the correct byte sequence
    being written.
    r      z\%3orB   )
_replace_specialsr   UnicodeDecodeErrorru   	bytearrayr   extendr?   ri   rF   )r   s_newr   r   blrk   os           r   r{   r{     s     	!Axx   u|| 	ACx!++G45q			
 ||L)) 	AAACxw{#q		 !}##L11s    	**c                    t        |       |k  r| S d}g }|t        |       k  r||z   }t        |       |dz
  kD  rWd| |dz
  | v rM|d| |dz
  | j                  d      z
  z  }| |dz
     dk(  r%|dz  }||k(  r||z   |dz  z
  dz
  }n| |dz
     dk(  r%|j                  | ||        |}|t        |       k  rdj                  |      S )Nr      r   r      z"")lenfindr   r-   )r   limitstartchunksends        r   rz   rz   =  s    
1v~c!fn%-C1vA~$!CE#,"6q1SU3<,,T222Ah$&1HCe|#emuqy9A= Ah$& MM!E#,'E c!fn yy  r   c                 X   t        t        t        |             dgz   } t        j                  dk\  r]g | }}| D ]S  }|dk\  r;t        |dz
  d      \  }}|j                  |dz          |j                  |dz          C|j                  |       U nY| g }}| D ]P  }d|cxk  rdk  r2n n/|r-d|d   cxk  rdk  rn n|d   |}}|d	z  d
z  |d	z  z   dz   |d<   @|j                  |       R ||k(  rg }dj                  t        t        |            dj                  t        t        |            fS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   r   r   r   r   rg   r   rm   i  
   ,)	listrh   ri   r6   r7   divmodr   r-   r   )r   utf16utf32
code_pointhighlow	code_units          r   encode_pyunicode_stringr   R  s4    	Sa[QCA
~~ 1u 	)JW$":#7>	cTF]+S6\*Z(	) "u 	(I,f,6U2Y;XRX;X!"Iyc"Ulr1cEkBWLb	Y'	( ~88C%()388C%4H+IIIr   )i  )*
__future__r   r   r6   version_infor   r   chrr   _strr   r!   ru   unicodeunichrempty_bytesempty_unicoder-   rF   objectr   r:   rK   r,   r`   rp   rr   rE   r   getchar_from_escape_sequencetuplerh   ranger   r   r   r   r   r{   rz   r   r8   r   r   <module>r      s5  
 ' 	 
A!&)3s&:#HdFGJ&-sC&?#HdFGJh

"(F "(J(& (>D D.8H 8886 <  
c  s3b	':!;;
	7 -. 2>!*Jr   