o
    wi(                     @   s   d dl Z d dlZdjZG dd dZG dd dZG dd dZG d	d
 d
eZdd Z	dd Z
G dd deZdd Zdd Zdd ZddddddddjZdeeeed  Zd!d" Zd#d$ Ze Zd%d& Zd'd( Zd.d*d+Zd,d- ZdS )/    N    c                   @   sT   e Zd ZdZdd Zdd Zejdkrdd Znd	d Zd
d Z	dd Z
dd ZdS )UnicodeLiteralBuilderzAssemble a unicode string.
    c                 C   s
   g | _ d S N)charsself r   [/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/Cython/Compiler/StringEncoding.py__init__      
zUnicodeLiteralBuilder.__init__c                 C   s,   t |tsJ dt| | j| d S )NzExpected str, got )
isinstancestrtyper   appendr   
charactersr   r   r	   r      s   zUnicodeLiteralBuilder.append  c                 C   sX   |dkr"|d8 }| j t|d d  | j t|d d  d S | j t| d S )Nr               r   r   chrr   char_numberr   r   r	   append_charval   s
   z$UnicodeLiteralBuilder.append_charvalc                 C   s   | j t| d S r   r   r   r   r   r	   r   !      c                 C   s   |  | d S r   )r   r   r   escape_stringr   r   r	   append_uescape$      z$UnicodeLiteralBuilder.append_uescapec                 C   s   t d| jS )N )EncodedStringjoinr   r   r   r   r	   	getstring'   s   zUnicodeLiteralBuilder.getstringc                 C   s   d |   fS r   r$   r   r   r   r	   
getstrings*      z UnicodeLiteralBuilder.getstringsN)__name__
__module____qualname____doc__r
   r   sys
maxunicoder   r   r$   r&   r   r   r   r	   r      s    


r   c                   @   sH   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dS )BytesLiteralBuilderz*Assemble a byte string or char value.
    c                 C   s   g | _ || _d S r   )r   target_encodingr   r/   r   r   r	   r
   1   s   
zBytesLiteralBuilder.__init__c                 C   s@   t |tr|| j}t |tsJ tt|| j| d S r   )r   r   encoder/   bytesr   r   r   r   r   r   r	   r   5   s   
zBytesLiteralBuilder.appendc                 C   s   | j t|d d S )N
ISO-8859-1)r   r   r   r1   r   r   r   r	   r   ;   s   z"BytesLiteralBuilder.append_charvalc                 C   s   |  | d S r   )r   r   r   r   r	   r   >   r    z"BytesLiteralBuilder.append_uescapec                 C   s   t t| j| jS r   )bytes_literal
join_bytesr   r/   r   r   r   r	   r$   A   s   zBytesLiteralBuilder.getstringc                 C   s   |   S r   r%   r   r   r   r	   getcharE   s   zBytesLiteralBuilder.getcharc                 C   s   |   d fS r   r%   r   r   r   r	   r&   I   r'   zBytesLiteralBuilder.getstringsN)r(   r)   r*   r+   r
   r   r   r   r$   r6   r&   r   r   r   r	   r.   .   s    r.   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )StrLiteralBuilderzDAssemble both a bytes and a unicode representation of a string.
    c                 C   s   t || _t | _d S r   )r.   _bytesr   _unicoder0   r   r   r	   r
   P   s   
zStrLiteralBuilder.__init__c                 C      | j | | j| d S r   )r8   r   r9   r   r   r   r	   r   T      zStrLiteralBuilder.appendc                 C   r:   r   )r8   r   r9   r   r   r   r	   r   X   r;   z StrLiteralBuilder.append_charvalc                 C   s   | j | | j| d S r   )r8   r   r9   r   r   r   r   r	   r   \   r;   z StrLiteralBuilder.append_uescapec                 C   s   | j  | j fS r   )r8   r$   r9   r   r   r   r	   r&   `   r   zStrLiteralBuilder.getstringsN)	r(   r)   r*   r+   r
   r   r   r   r&   r   r   r   r	   r7   M   s    r7   c                   @   sL   e Zd ZdZdd Zdd Zdd Zedd	 Zd
d Z	dd Z
dd ZdS )r"   Nc                 C      | S r   r   r   memor   r   r	   __deepcopy__j      zEncodedString.__deepcopy__c                 C   s   | j d usJ | | j S r   encodingr1   r   r   r   r	   
byteencodem   s   zEncodedString.byteencodec                 C   s   | j d u sJ | dS )NzUTF-8rA   r   r   r   r	   
utf8encodeq   s   
zEncodedString.utf8encodec                 C   s
   | j d u S r   )rB   r   r   r   r	   
is_unicodeu   s   
zEncodedString.is_unicodec                 C      t | S r   )string_contains_surrogatesr   r   r   r	   contains_surrogatesy      z!EncodedString.contains_surrogatesc                 C   s   t |  dS )Nutf8)r4   rD   r   r   r   r	   as_utf8_string|   r    zEncodedString.as_utf8_stringc                 C   s2   | j d u r|  }| S t|  | j }| S r   )rB   rK   r4   rC   as_c_string_literal)r   sr   r   r	   rL      s
   
z!EncodedString.as_c_string_literal)r(   r)   r*   rB   r?   rC   rD   propertyrE   rH   rK   rL   r   r   r   r	   r"   d   s    
r"   c                 C   s>   t t| D ]}|dkr dS d|  krdkr dS  qqdS )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cr   r   r	   rG      s   rG   c                 C   sn   d}t jdk}tt| D ](}|dk s|dkr|r dS q|s! dS |dkr-|r* dS d}q|s2 dS d}q|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   rO   T  )r,   r-   rP   rQ   )rR   last_was_startunicode_uses_surrogate_encodingrS   r   r   r	   string_contains_lone_surrogates   s"   
rW   c                   @   s<   e Zd ZdZdd Zdd Zdd Zdd	 Zd
Zdd Z	dS )BytesLiteralNc                 C   r<   r   r   r=   r   r   r	   r?      r@   zBytesLiteral.__deepcopy__c                 C   rF   r   )r2   r   r   r   r	   rC      rI   zBytesLiteral.byteencodec                 C   s   J d|  )NFz this is not a unicode string: %rr   r   r   r   r	   rD      r'   zBytesLiteral.utf8encodec                 C   s
   |  dS )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        r3   )decoder   r   r   r	   __str__   s   
zBytesLiteral.__str__Fc                 C   s   t t| }d| S )Nz"%s")split_string_literalescape_byte_string)r   valuer   r   r	   rL      s   z BytesLiteral.as_c_string_literal)
r(   r)   r*   rB   r?   rC   rD   rZ   rE   rL   r   r   r   r	   rX      s    rX   c                 C   s    t | tsJ t| } || _| S r   )r   r2   rX   rB   rM   rB   r   r   r	   r4      s   r4   c                 C   s,   t | ttfs	J t| } |d ur|| _| S r   )r   r   r2   r"   rB   r^   r   r   r	   encoded_string   s
   r_   c                 C   s   t | tr
t| |S t| |S r   )r   r2   r4   r_   r^   r   r   r	   encoded_string_or_bytes_literal   s   


r`   
	)z\az\bz\fz\nz\rz\tz\v)\z??"    c                 C   sD   | dv rt | dd S | dkrdS | dkrdS dd	d
 | D S )Nz
	   ri   z\"rh   \\r!   c                 S   s   g | ]
}d t |dqS )rh   03o)rQ   .0rS   r   r   r	   
<listcomp>       z'_to_escape_sequence.<locals>.<listcomp>)reprr#   rM   r   r   r	   _to_escape_sequence   s   ru   c                     s   g } i t D ]}ddd |D }| | t|d|d< qtdd|  djfdd  fd	d
}|S )Nr!   c                 S   s   g | ]
}d | dd qS )z[%s]rh   rm   )replacero   r   r   r	   rq      rr   z,_build_specials_replacer.<locals>.<listcomp>ASCIIz(%s)|c                    s    |  d S )Nrk   )group)m)replacementsr   r	   replace_specials  r    z2_build_specials_replacer.<locals>.replace_specialsc                    s
    | S r   r   rt   )r|   subr   r	   rv     r   z)_build_specials_replacer.<locals>.replace)
_c_specialr#   r   ru   r1   recompiler}   )subexpsspecialregexprv   r   )r|   r{   r}   r	   _build_specials_replacer   s   
r   c                 C   sR   |  d} | dv rt| dd S | dkrdS t| }|dk s#|dkr'd	| S | S )
Nr3   z
	\rk   rl   'z\'rj      z\x%02X)rY   rs   rQ   )rS   nr   r   r	   escape_char  s   
r   c                 C   sx   t | } z| dW S  ty   Y nw t }|j|j}}| D ]}|dkr2|d|dd q || q |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 ASCII, will result in the correct byte sequence
    being written.
    rw      rh   rn   )_replace_specialsrY   UnicodeDecodeError	bytearrayr   extendr1   )rM   s_newr   r   br   r   r	   r\     s   

r\     c                 C   s   t | |k r| S d}g }|t | k rk|| }t | |d krZd| |d | v rZ|d| |d | d 8 }| |d  dkrZ|d8 }||krR|| |d  d }n| |d  dks?|| ||  |}|t | k sd|S )Nr      rh   rk      z"")lenfindr   r#   )rM   limitstartchunksendr   r   r	   r[   -  s$   $
r[   c                 C   s$  t tt| dg } tjdkr;g | }}| D ]#}|dkr4t|d d\}}||d  ||d  q|| qnA| g }}| D ]9}d|  krNdkrvn n&|rvd|d   kr^dkrvn n|d |}}|d	@ d
> |d	@  d |d< qB|| qB||krg }dtt|dtt|fS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   r   r   r   r   rO   rl   rT   i  
   ,)	listrP   rQ   r,   r-   divmodr   r#   r   )rM   utf16utf32
code_pointhighlow	code_unitr   r   r	   encode_pyunicode_stringB  s&   


8 r   )r   )r   r,   r#   r5   r   r.   r7   r   r"   rG   rW   r2   rX   r4   r_   r`   getchar_from_escape_sequencetuplerP   r   ranger~   ru   r   r   r   r\   r[   r   r   r   r   r	   <module>   s>   "$

