a
    b<*                     @   sF  d dl mZ d dlZd dlZejd  dkrDe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 deZG dd	 d	eZG d
d de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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 )0    )absolute_importN   TFc                   @   sT   e Zd ZdZdd Zdd Zejdkr0d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	   n/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Compiler/StringEncoding.py__init__   s    zUnicodeLiteralBuilder.__init__c                 C   s>   t |tr|d}t |ts.J tt|| j| d S )NASCII)
isinstance_bytesdecode_unicodestrtyper   appendr   
charactersr	   r	   r
   r      s    

zUnicodeLiteralBuilder.append  c                 C   sV   |dkrB|d8 }| j t|d d  | j t|d d  n| j t| d S )Nr               r   r   _unichr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   /   s    c                 C   s   |  | d S r   )r   r   r   Zescape_stringr	   r	   r
   append_uescape2   s    z$UnicodeLiteralBuilder.append_uescapec                 C   s   t d| jS )N )EncodedStringjoinr   r   r	   r	   r
   	getstring5   s    zUnicodeLiteralBuilder.getstringc                 C   s   d |   fS r   r%   r   r	   r	   r
   
getstrings8   s    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   ?   s    zBytesLiteralBuilder.__init__c                 C   s@   t |tr|| j}t |ts0J tt|| j| d S r   )	r   r   encoder/   r   r   r   r   r   r   r	   r	   r
   r   C   s    
zBytesLiteralBuilder.appendc                 C   s   | j t|d d S N
ISO-8859-1)r   r   r   r1   r   r	   r	   r
   r   I   s    z"BytesLiteralBuilder.append_charvalc                 C   s   |  | d S r   )r   r    r	   r	   r
   r!   L   s    z"BytesLiteralBuilder.append_uescapec                 C   s   t t| j| jS r   )bytes_literal
join_bytesr   r/   r   r	   r	   r
   r%   O   s    zBytesLiteralBuilder.getstringc                 C   s   |   S r   r&   r   r	   r	   r
   getcharS   s    zBytesLiteralBuilder.getcharc                 C   s   |   d fS r   r&   r   r	   r	   r
   r'   W   s    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.   r   r   r   r0   r	   r	   r
   r   ^   s    
zStrLiteralBuilder.__init__c                 C   s   | j | | j| d S r   )r   r   r   r   r	   r	   r
   r   b   s    zStrLiteralBuilder.appendc                 C   s   | j | | j| d S r   )r   r   r   r   r	   r	   r
   r   f   s    z StrLiteralBuilder.append_charvalc                 C   s   | j | | j| d S r   )r   r   r   r   r    r	   r	   r
   r!   j   s    z StrLiteralBuilder.append_uescapec                 C   s   | j  | j fS r   )r   r%   r   r   r	   r	   r
   r'   n   s    zStrLiteralBuilder.getstringsN)	r(   r)   r*   r+   r   r   r   r!   r'   r	   r	   r	   r
   r7   [   s   r7   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   | S r   r	   r   memor	   r	   r
   __deepcopy__x   s    zEncodedString.__deepcopy__c                 C   s   | j d usJ | | j S r   encodingr1   r   r	   r	   r
   
byteencode{   s    zEncodedString.byteencodec                 C   s   | j d u sJ | dS )NzUTF-8r;   r   r	   r	   r
   
utf8encode   s    zEncodedString.utf8encodec                 C   s
   | j d u S r   )r<   r   r	   r	   r
   
is_unicode   s    zEncodedString.is_unicodec                 C   s   t | S r   )string_contains_surrogatesr   r	   r	   r
   contains_surrogates   s    z!EncodedString.contains_surrogatesc                 C   s   t |  dS )Nutf8)r4   r>   r   r	   r	   r
   as_utf8_string   s    zEncodedString.as_utf8_string)r(   r)   r*   r<   r:   r=   r>   propertyr?   rA   rC   r	   r	   r	   r
   r#   r   s   
r#   c                 C   s@   t t| D ]0}|dkr dS d|  kr0dkr
n q
 dS 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
   r@      s    r@   c                 C   sn   d}t jdk}tt| D ]P}|dk s,|dkr8|rh dS q|sB dS |dkrZ|rT dS d}q|sd 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   rE   T  )r,   r-   rF   rG   )rH   Zlast_was_startZunicode_uses_surrogate_encodingrI   r	   r	   r
   string_contains_lone_surrogates   s     
rK   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   s   | S r   r	   r8   r	   r	   r
   r:      s    zBytesLiteral.__deepcopy__c                 C   s    t rt| S | ddS d S r2   )
IS_PYTHON3r   r   r1   r   r	   r	   r
   r=      s    zBytesLiteral.byteencodec                 C   s   dsJ d|  d S )NFz this is not a unicode string: %rr	   r   r	   r	   r
   r>      s    zBytesLiteral.utf8encodec                 C   s
   |  dS )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        r3   )r   r   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
   as_c_string_literal   s    z BytesLiteral.as_c_string_literal)
r(   r)   r*   r<   r:   r=   r>   rN   r?   rR   r	   r	   r	   r
   rL      s   rL   c                 C   s    t | tsJ t| } || _| S r   )r   bytesrL   r<   sr<   r	   r	   r
   r4      s    r4   c                 C   s,   t | ttfsJ t| } |d ur(|| _| S r   )r   r   rS   r#   r<   rT   r	   r	   r
   encoded_string   s
    rV   
	)z\az\bz\fz\nz\rz\tz\v)\z??"    c                 C   sH   | dv rt | dd S | dkr$dS | dkr0dS dd	d
 | D S d S )Nz
	   r_   z\"r^   \\r"   c                 S   s   g | ]}d t | qS )z\%03o)rG   .0rI   r	   r	   r
   
<listcomp>       z'_to_escape_sequence.<locals>.<listcomp>)reprr$   rU   r	   r	   r
   _to_escape_sequence   s    rj   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]r^   rc   )replacerd   r	   r	   r
   rf     rg   z,_build_specials_replacer.<locals>.<listcomp>r   z(%s)|c                    s    |  d S )Nra   )group)m)replacementsr	   r
   replace_specials  s    z2_build_specials_replacer.<locals>.replace_specialsc                    s
    | S r   r	   ri   )rp   subr	   r
   rk   	  s    z)_build_specials_replacer.<locals>.replace)
_c_specialr$   r   rj   r1   recompilerq   )ZsubexpsZspecialregexprk   r	   )rp   ro   rq   r
   _build_specials_replacer   s    
rv   c                 C   sZ   t r| d} | dv r&t| dd S | dkr2dS t| }|dk sJ|dkrRd	| S | S d S )
Nr3   z
	\ra   rb   'z\'r`      z\x%02X)rM   r   rh   rG   )rI   nr	   r	   r
   escape_char  s    
rz   c                 C   s   t | } z| dW S  ty&   Y n0 trxt }|j|j }}| D ](}|dkrd|d| d qD|| qD|dS g }|j}| D ]*}t|}|dkr|d|  q|| qt	|dS 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\%3or3   N)
_replace_specialsr   UnicodeDecodeErrorrM   	bytearrayr   extendr1   rG   r5   )rU   Zs_newr   r   blrI   or	   r	   r
   rP     s*    


rP     c                 C   s   t | |k r| S d}g }|t | k r|| }t | |d krd| |d | v r|d| |d | d 8 }| |d  dkr|d8 }||krn|| |d  d }qqn|| ||  |}qd|S d S )Nr      r^   ra      z"")lenfindr   r$   )rU   limitstartchunksendr	   r	   r
   rO   =  s     $rO   c                 C   s&  t tt| dg } tjdkrvg |  }}| D ]F}|dkrht|d d\}}||d  ||d  q,|| q,n| g  }}| D ]r}d|  krdkrn nL|rd|d   krdkrn n,|d | }}|d	@ 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   r   r   r   r   rE   rb   rJ   i  
   ,)	listrF   rG   r,   r-   divmodr   r$   r   )rU   utf16utf32
code_pointhighlowZ	code_unitr	   r	   r
   encode_pyunicode_stringR  s$    


8
r   )r   )*
__future__r   rs   r,   version_infor   rS   chrr   _strr   r   rM   unicodeunichrZempty_bytesZempty_unicoder$   r5   objectr   r.   r7   r#   r@   rK   rL   r4   rV   getZchar_from_escape_sequencetuplerF   rangerr   rj   rv   r|   rz   rP   rO   r   r	   r	   r	   r
   <module>   sF   %	

