o
    Ni'!                     @   s   d dl Z d dl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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 ),    Nc                   @   s@   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S )UnicodeLiteralBuilderzAssemble a unicode string.
    c                 C   s
   g | _ d S N)charsself r   R/home/ubuntu/.local/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.appendc                 C   s   | j t| d S r   )r   r   chrr   char_numberr   r   r   append_charval      z$UnicodeLiteralBuilder.append_charvalc                 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   r   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	   $   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   (   s   
zBytesLiteralBuilder.appendc                 C   s   | j t|d d S )N
ISO-8859-1)r   r   r   r(   r   r   r   r   r   .   s   z"BytesLiteralBuilder.append_charvalc                 C   s   |  | d S r   )r   r   r   r   r   r   1   r   z"BytesLiteralBuilder.append_uescapec                 C   s   t d| j| jS )N    )bytes_literalr   r   r&   r   r   r   r   r   4   s   zBytesLiteralBuilder.getstringc                 C   s   |   S r   r   r   r   r   r   getchar8   s   zBytesLiteralBuilder.getcharc                 C   s   |   d fS r   r   r   r   r   r   r   <   r    zBytesLiteralBuilder.getstringsN)r!   r"   r#   r$   r	   r   r   r   r   r-   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   _unicoder'   r   r   r   r	   C   s   
zStrLiteralBuilder.__init__c                 C      | j | | j| d S r   )r/   r   r0   r   r   r   r   r   G      zStrLiteralBuilder.appendc                 C   r1   r   )r/   r   r0   r   r   r   r   r   K   r2   z StrLiteralBuilder.append_charvalc                 C   s   | j | | j| d S r   )r/   r   r0   r   r   r   r   r   r   O   r2   z StrLiteralBuilder.append_uescapec                 C   s   | j  | j fS r   )r/   r   r0   r   r   r   r   r   S   r   zStrLiteralBuilder.getstringsN)	r!   r"   r#   r$   r	   r   r   r   r   r   r   r   r   r.   @   s    r.   c                   @   sD   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S )r   Nc                 C      | S r   r   r   memor   r   r   __deepcopy__]      zEncodedString.__deepcopy__c                 C   s   | j d usJ | | j S r   encodingr(   r   r   r   r   
byteencode`   s   zEncodedString.byteencodec                 C   s   | j d u sJ | dS )NzUTF-8r8   r   r   r   r   
utf8encoded   s   
zEncodedString.utf8encodec                 C   s
   | j d u S r   )r9   r   r   r   r   
is_unicodeh   s   
zEncodedString.is_unicodec                 C   s   t |  dS )Nutf8)r,   r;   r   r   r   r   as_utf8_stringl   r   zEncodedString.as_utf8_stringc                 C   s2   | j d u r|  }| S t|  | j }| S r   )r9   r>   r,   r:   as_c_string_literal)r   sr   r   r   r?   o   s
   
z!EncodedString.as_c_string_literal)r!   r"   r#   r9   r6   r:   r;   propertyr<   r>   r?   r   r   r   r   r   W   s    
r   c                 C   s*   t t| D ]}d|kr|dkr dS q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.
       i  TF)mapord)ustringcr   r   r   string_contains_lone_surrogatesx   s
   rG   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   r3   r   r   r4   r   r   r   r6      r7   zBytesLiteral.__deepcopy__c                 C   s   t | S r   )r)   r   r   r   r   r:      s   zBytesLiteral.byteencodec                 C   s   J d|  )NFz this is not a unicode string: %rr   r   r   r   r   r;      r    zBytesLiteral.utf8encodec                 C   s
   |  dS )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        r*   )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   r?      s   z BytesLiteral.as_c_string_literal)
r!   r"   r#   r9   r6   r:   r;   rJ   r<   r?   r   r   r   r   rH      s    rH   c                 C   s    t | tsJ t| } || _| S r   )r   r)   rH   r9   r@   r9   r   r   r   r,      s   r,   c                 C   s,   t | ttfs	J t| } |d ur|| _| S r   )r   r   r)   r   r9   rN   r   r   r   encoded_string   s
   rO   c                 C   s   t | tr
t| |S t| |S r   )r   r)   r,   rO   rN   r   r   r   encoded_string_or_bytes_literal   s   


rP   
	)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
	   rY   z\"rX   \\r   c                 S   s   g | ]
}d t |dqS )rX   03o)rD   .0rF   r   r   r   
<listcomp>       z'_to_escape_sequence.<locals>.<listcomp>)reprr   r@   r   r   r   _to_escape_sequence   s   re   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]rX   r]   )replacer_   r   r   r   ra      rb   z,_build_specials_replacer.<locals>.<listcomp>ASCIIz(%s)|c                    s    |  d S )Nr[   )group)m)replacementsr   r   replace_specials   r   z2_build_specials_replacer.<locals>.replace_specialsc                    s
    | S r   r   rd   )rl   subr   r   rf      r
   z)_build_specials_replacer.<locals>.replace)
_c_specialr   r   re   r(   recompilerm   )subexpsspecialregexprf   r   )rl   rk   rm   r   _build_specials_replacer   s   
rt   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 )
Nr*   z
	\r[   r\   'z\'rZ      z\x%02X)rI   rc   rD   )rF   nr   r   r   escape_char   s   
rx   c                 C   sn   t | } z| dW S  ty   Y nw t }|j|j}}| D ]}|dkr-|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.
    rg   rv   s   \%03o)_replace_specialsrI   UnicodeDecodeError	bytearrayr   extend)r@   s_newr   r|   br   r   r   rL      s   

rL     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      rX   r[      z"")lenfindr   r   )r@   limitstartchunksendr   r   r   rK     s$   $
rK   c                 C   s   t tt| } | d g | }}| D ]#}|dkr1t|d d\}}||d  ||d  q|| q||kr=g }dtt|dtt|fS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   i   i   rB   i   ,)listrC   rD   r   divmodr   r   )r   utf16utf32
code_pointhighlowr   r   r   encode_pyunicode_string  s   

 r   )r   )ro   sysr   r%   r.   r   r   rG   r)   rH   r,   rO   rP   getchar_from_escape_sequencetuplerC   r   rangern   re   rt   ry   rx   rL   rK   r   r   r   r   r   <module>   s:   !

