o
    €eX/  ã                   @   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	   úND:\Projects\ConvertPro\env\Lib\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   Z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   r3   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   Úencoder3   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   r5   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   r3   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.   r/   r   r   r    r#   r(   r:   r*   r	   r	   r	   r
   r2   <   s    r2   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   )r2   r   r   r   r4   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.   r/   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   ©Úencodingr5   r   r	   r	   r
   Ú
byteencode{   s   zEncodedString.byteencodec                 C   s   | j d u sJ ‚|  d¡S )NzUTF-8rC   r   r	   r	   r
   Ú
utf8encode   s   
zEncodedString.utf8encodec                 C   s
   | j d u S r   )rD   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)r8   rF   r   r	   r	   r
   Úas_utf8_stringŠ   r$   zEncodedString.as_utf8_stringc                 C   s2   | j d u r|  ¡ }| ¡ S t|  ¡ | j ƒ}| ¡ S r   )rD   rK   r8   rE   Úas_c_string_literal)r   Úsr	   r	   r
   rL      s
   
ÿz!EncodedString.as_c_string_literalÚisasciic                 C   s&   z|   d¡ W dS  ty   Y dS w )NÚasciiFT)r5   ÚUnicodeEncodeErrorr   r	   r	   r
   rN   –   s   ýÿzEncodedString.isascii)r,   r-   r.   rD   rA   rE   rF   ÚpropertyrG   rI   rK   rL   Úhasattrr   rN   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
   rH       s   ÿrH   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   rS   TéÿÛ  )r0   r1   rT   rU   )rV   Zlast_was_startZunicode_uses_surrogate_encodingrW   r	   r	   r
   Ústring_contains_lone_surrogates¯   s"   
ÿrY   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
   rA   Ï   rB   zBytesLiteral.__deepcopy__c                 C   s   t rt| ƒS |  d¡ d¡S r6   )Ú
IS_PYTHON3r   r   r5   r   r	   r	   r
   rE   Ò   s   zBytesLiteral.byteencodec                 C   s   J d|  ƒ‚)NFz this is not a unicode string: %rr	   r   r	   r	   r
   rF   Ù   r+   zBytesLiteral.utf8encodec                 C   s
   |   d¡S )zcFake-decode the byte string to unicode to support %
        formatting of unicode strings.
        r7   )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
   rL   ä   s   z BytesLiteral.as_c_string_literalrN   c                 C   s   dS )NTr	   r   r	   r	   r
   rN   é   s   zBytesLiteral.isascii)r,   r-   r.   rD   rA   rE   rF   r\   rG   rL   rR   r   rN   r	   r	   r	   r
   rZ   Ë   s    
ÿrZ   c                 C   s    t | tƒsJ ‚t| ƒ} || _| S r   )r   ÚbytesrZ   rD   ©rM   rD   r	   r	   r
   r8   î   s   r8   c                 C   s,   t | ttfƒs	J ‚t| ƒ} |d ur|| _| S r   )r   r   r`   r&   rD   ra   r	   r	   r
   Úencoded_stringõ   s
   rb   c                 C   s   t | tƒr
t| |ƒS t| |ƒS r   )r   r`   r8   rb   ra   r	   r	   r
   Úencoded_string_or_bytes_literalü   s   


rc   úúúÚ
úú	ú)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
	é   éÿÿÿÿrl   z\"rk   ú\\r%   c                 S   s   g | ]}d t |ƒ ‘qS )z\%03o)rU   ©Ú.0rW   r	   r	   r
   Ú
<listcomp>  s    z'_to_escape_sequence.<locals>.<listcomp>)Úreprr'   ©rM   r	   r	   r
   Ú_to_escape_sequence  s   rv   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]rk   rp   )Úreplacerq   r	   r	   r
   rs      s    z,_build_specials_replacer.<locals>.<listcomp>r   z(%s)ú|c                    s   ˆ |   d¡ S )Nrn   )Úgroup)Úm)Úreplacementsr	   r
   Úreplace_specials$  r$   z2_build_specials_replacer.<locals>.replace_specialsc                    s
   ˆˆ | ƒS r   r	   ru   )r|   Úsubr	   r
   rw   &  r   z)_build_specials_replacer.<locals>.replace)Ú
_c_specialr'   r   rv   r5   ÚreÚcompiler}   )ZsubexpsZspecialÚregexprw   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 )
Nr7   z
	\rn   ro   ú'z\'rm   é   z\x%02X)r[   r   rt   rU   )rW   Ú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\%3or7   )
Ú_replace_specialsr   ÚUnicodeDecodeErrorr[   Ú	bytearrayr   Úextendr5   rU   r9   )rM   Zs_newr   r‹   ÚbÚlrW   Úor	   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   é   rk   rn   é   z"")ÚlenÚfindr   r'   )rM   Ú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   rS   ro   rX   iÿ  é
   ú,)	ÚlistrT   rU   r0   r1   Údivmodr   r'   r   )rM   Úutf16Úutf32Ú
code_pointÚhighÚlowZ	code_unitr	   r	   r
   Úencode_pyunicode_stringo  s&   

ú
8 r¡   )r   )+Ú
__future__r   r   r0   Úversion_infor   r`   Úchrr   Ú_strr   r   r[   ÚunicodeÚunichrZempty_bytesZempty_unicoder'   r9   Úobjectr   r2   r;   r&   rH   rY   rZ   r8   rb   rc   ÚgetZchar_from_escape_sequenceÚtuplerT   Úranger~   rv   r‚   rˆ   r†   r^   r]   r¡   r	   r	   r	   r
   Ú<module>   sN   %.#ùø

