o
    &[hÐ-  ã                   @   sN  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„ 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„ 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(d1d-d.„Z)d/d0„ Z*dS )2é    )Úabsolute_importNé   TFc                   @   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	   úS/var/www/vscode/pina/lib/python3.10/site-packages/Cython/Compiler/StringEncoding.pyÚ__init__   ó   
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   sX   |dkr"|d8 }| j  t|d d ƒ¡ | j  t|d d ƒ¡ d S | 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    /   ó   c                 C   s   |   |¡ d S r   )r    ©r   r   Úescape_stringr	   r	   r
   Úappend_uescape2   ó   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   ó   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   r4   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   Úencoder4   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   r6   r   r	   r	   r
   r    I   s   z"BytesLiteralBuilder.append_charvalc                 C   s   |   |¡ d S r   )r   r"   r	   r	   r
   r$   L   r%   z"BytesLiteralBuilder.append_uescapec                 C   s   t t| jƒ| jƒS r   )Úbytes_literalÚ
join_bytesr   r4   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   r,   zBytesLiteralBuilder.getstringsN)r-   r.   r/   r0   r   r   r    r$   r)   r;   r+   r	   r	   r	   r
   r3   <   s    r3   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   )r3   r   r   r   r5   r	   r	   r
   r   ^   s   
zStrLiteralBuilder.__init__c                 C   ó   | j  |¡ | j |¡ d S r   )r   r   r   r   r	   r	   r
   r   b   ó   zStrLiteralBuilder.appendc                 C   r=   r   )r   r    r   r   r	   r	   r
   r    f   r>   z StrLiteralBuilder.append_charvalc                 C   s   | j  |¡ | j |¡ d S r   )r   r   r   r    r"   r	   r	   r
   r$   j   r>   z StrLiteralBuilder.append_uescapec                 C   s   | j  ¡ | j ¡ fS r   )r   r)   r   r   r	   r	   r
   r+   n   r!   zStrLiteralBuilder.getstringsN)	r-   r.   r/   r0   r   r   r    r$   r+   r	   r	   r	   r
   r<   [   s    r<   c                   @   sb   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eedƒs/dd„ ZdS dS )r'   Nc                 C   ó   | S r   r	   ©r   Úmemor	   r	   r
   Ú__deepcopy__x   ó   zEncodedString.__deepcopy__c                 C   s   | j d usJ ‚|  | j ¡S r   ©Úencodingr6   r   r	   r	   r
   Ú
byteencode{   s   zEncodedString.byteencodec                 C   s   | j d u sJ ‚|  d¡S )NzUTF-8rD   r   r	   r	   r
   Ú
utf8encode   s   
zEncodedString.utf8encodec                 C   s
   | j d u S r   )rE   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)r9   rG   r   r	   r	   r
   Úas_utf8_stringŠ   r%   zEncodedString.as_utf8_stringc                 C   s2   | j d u r|  ¡ }| ¡ S t|  ¡ | j ƒ}| ¡ S r   )rE   rL   r9   rF   Úas_c_string_literal)r   Úsr	   r	   r
   rM      s
   
ÿz!EncodedString.as_c_string_literalÚisasciic                 C   s&   z|   d¡ W dS  ty   Y dS w )NÚasciiFT)r6   ÚUnicodeEncodeErrorr   r	   r	   r
   rO   –   s   ýÿzEncodedString.isascii)r-   r.   r/   rE   rB   rF   rG   ÚpropertyrH   rJ   rL   rM   Úhasattrr   rO   r	   r	   r	   r
   r'   r   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
   rI       s   ÿrI   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   rT   TéÿÛ  )r1   r2   rU   rV   )rW   Úlast_was_startÚunicode_uses_surrogate_encodingrX   r	   r	   r
   Ústring_contains_lone_surrogates¯   s"   
ÿr\   c                   @   sR   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
Zdd„ Z	e
edƒs'dd„ ZdS dS )ÚBytesLiteralNc                 C   r?   r   r	   r@   r	   r	   r
   rB   Ï   rC   zBytesLiteral.__deepcopy__c                 C   s   t rt| ƒS |  d¡ d¡S r7   )Ú
IS_PYTHON3r   r   r6   r   r	   r	   r
   rF   Ò   s   zBytesLiteral.byteencodec                 C   s   J d|  ƒ‚)NFz this is not a unicode string: %rr	   r   r	   r	   r
   rG   Ù   r,   zBytesLiteral.utf8encodec                 C   s
   |   d¡S )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        r8   )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
   rM   ä   s   z BytesLiteral.as_c_string_literalrO   c                 C   s   dS )NTr	   r   r	   r	   r
   rO   é   s   zBytesLiteral.isascii)r-   r.   r/   rE   rB   rF   rG   r_   rH   rM   rS   r   rO   r	   r	   r	   r
   r]   Ë   s    
ÿr]   c                 C   s    t | tƒsJ ‚t| ƒ} || _| S r   )r   Úbytesr]   rE   ©rN   rE   r	   r	   r
   r9   î   s   r9   c                 C   s,   t | ttfƒs	J ‚t| ƒ} |d ur|| _| S r   )r   r   rc   r'   rE   rd   r	   r	   r
   Úencoded_stringõ   s
   re   c                 C   s   t | tƒr
t| |ƒS t| |ƒS r   )r   rc   r9   re   rd   r	   r	   r
   Úencoded_string_or_bytes_literalü   s   


rf   úúúÚ
úú	ú)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
	é   éÿÿÿÿro   z\"rn   ú\\r&   c                 S   s   g | ]}d t |ƒ ‘qS )z\%03o)rV   ©Ú.0rX   r	   r	   r
   Ú
<listcomp>  s    z'_to_escape_sequence.<locals>.<listcomp>)Úreprr(   ©rN   r	   r	   r
   Ú_to_escape_sequence  s   ry   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]rn   rs   )Úreplacert   r	   r	   r
   rv      s    z,_build_specials_replacer.<locals>.<listcomp>r   z(%s)ú|c                    s   ˆ |   d¡ S )Nrq   )Úgroup)Úm)Úreplacementsr	   r
   Úreplace_specials$  r%   z2_build_specials_replacer.<locals>.replace_specialsc                    s
   ˆˆ | ƒS r   r	   rx   )r   Úsubr	   r
   rz   &  r   z)_build_specials_replacer.<locals>.replace)Ú
_c_specialr(   r   ry   r6   ÚreÚcompiler€   )ÚsubexpsÚspecialÚregexprz   r	   )r   r~   r€   r
   Ú_build_specials_replacer  s   
r‡   c                 C   sV   t r|  d¡} | dv rt| ƒdd… S | dkrdS t| ƒ}|dk s%|dkr)d	| S | S )
Nr8   z
	\rq   rr   ú'z\'rp   é   z\x%02X)r^   r   rw   rV   )rX   Únr	   r	   r
   Úescape_char-  s   
r‹   c                 C   sÀ   t | ƒ} z|  d¡W S  ty   Y nw tr<tƒ }|j|j}}| D ]}|dkr2|d|  d¡ƒ q"||ƒ q"| d¡S g }|j}| D ]}t|ƒ}|dkrT|d| ƒ qC||ƒ qCt	|ƒ d¡S )z×Escape 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\%3or8   )
Ú_replace_specialsr   ÚUnicodeDecodeErrorr^   Ú	bytearrayr   Úextendr6   rV   r:   )rN   Ús_newr   r   ÚbÚlrX   Úor	   r	   r
   ra   ;  s,   ÿ


ra   éÐ  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   é   rn   rq   é   z"")ÚlenÚfindr   r(   )rN   ÚlimitÚstartÚchunksÚendr	   r	   r
   r`   Z  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r‚g }d tt|ƒ¡d tt|ƒ¡fS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   r   r   r   r   rT   rr   rY   iÿ  é
   ú,)	ÚlistrU   rV   r1   r2   Údivmodr   r(   r   )rN   Úutf16Úutf32Ú
code_pointÚhighÚlowÚ	code_unitr	   r	   r
   Úencode_pyunicode_stringo  s&   

ú
8 r¨   )r•   )+Ú
__future__r   r‚   r1   Úversion_infor   rc   Úchrr   Ú_strr   r   r^   ÚunicodeÚunichrÚempty_bytesÚempty_unicoder(   r:   Úobjectr   r3   r<   r'   rI   r\   r]   r9   re   rf   ÚgetÚchar_from_escape_sequenceÚtuplerU   Úranger   ry   r‡   r   r‹   ra   r`   r¨   r	   r	   r	   r
   Ú<module>   sN   %.#ùø

