B
    Í‹d<*  ã               @   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   úk/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/Cython/Compiler/StringEncoding.pyÚ__init__   s    zUnicodeLiteralBuilder.__init__c             C   s>   t |tƒr| d¡}t |tƒs.ttt|ƒƒƒ‚| j |¡ d S )NÚASCII)	Ú
isinstanceÚ_bytesÚdecodeÚ_unicodeÚAssertionErrorÚstrÚtyper   Úappend)r   Ú
charactersr   r   r   r      s    

zUnicodeLiteralBuilder.appendiÿÿ  c             C   sV   |dkrB|d8 }| j  t|d d ƒ¡ | j  t|d d ƒ¡ n| j  t|ƒ¡ d S )Niÿÿ  i   i   i Ø  i Ü  )r   r   Ú_unichr)r   Úchar_numberr   r   r   Úappend_charval%   s
    z$UnicodeLiteralBuilder.append_charvalc             C   s   | j  t|ƒ¡ d S )N)r   r   r   )r   r   r   r   r   r   /   s    c             C   s   |   |¡ d S )N)r   )r   r   Ú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 )N)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 )N)r   Útarget_encoding)r   r%   r   r   r   r	   ?   s    zBytesLiteralBuilder.__init__c             C   s@   t |tƒr| | j¡}t |tƒs0ttt|ƒƒƒ‚| j 	|¡ d S )N)
r   r   Úencoder%   r   r   r   r   r   r   )r   r   r   r   r   r   C   s    
zBytesLiteralBuilder.appendc             C   s   | j  t|ƒ d¡¡ d S )Nz
ISO-8859-1)r   r   r   r&   )r   r   r   r   r   r   I   s    z"BytesLiteralBuilder.append_charvalc             C   s   |   |¡ d S )N)r   )r   r   r   r   r   r   r   L   s    z"BytesLiteralBuilder.append_uescapec             C   s   t t| jƒ| jƒS )N)Úbytes_literalÚ
join_bytesr   r%   )r   r   r   r   r   O   s    zBytesLiteralBuilder.getstringc             C   s   |   ¡ S )N)r   )r   r   r   r   ÚgetcharS   s    zBytesLiteralBuilder.getcharc             C   s   |   ¡ d fS )N)r   )r   r   r   r   r   W   s    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 )N)r$   r   r   r   )r   r%   r   r   r   r	   ^   s    
zStrLiteralBuilder.__init__c             C   s   | j  |¡ | j |¡ d S )N)r   r   r   )r   r   r   r   r   r   b   s    zStrLiteralBuilder.appendc             C   s   | j  |¡ | j |¡ d S )N)r   r   r   )r   r   r   r   r   r   f   s    z StrLiteralBuilder.append_charvalc             C   s   | j  |¡ | j |¡ d S )N)r   r   r   r   )r   r   r   r   r   r   r   j   s    z StrLiteralBuilder.append_uescapec             C   s   | j  ¡ | j ¡ fS )N)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   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   | S )Nr   )r   Úmemor   r   r   Ú__deepcopy__x   s    zEncodedString.__deepcopy__c             C   s   | j d k	st‚|  | j ¡S )N)Úencodingr   r&   )r   r   r   r   Ú
byteencode{   s    zEncodedString.byteencodec             C   s   | j d kst‚|  d¡S )NzUTF-8)r-   r   r&   )r   r   r   r   Ú
utf8encode   s    zEncodedString.utf8encodec             C   s
   | j d kS )N)r-   )r   r   r   r   Ú
is_unicodeƒ   s    zEncodedString.is_unicodec             C   s   t | ƒS )N)Ústring_contains_surrogates)r   r   r   r   Úcontains_surrogates‡   s    z!EncodedString.contains_surrogatesc             C   s   t |  ¡ dƒS )NÚutf8)r'   r/   )r   r   r   r   Úas_utf8_stringŠ   s    zEncodedString.as_utf8_string)r   r   r    r-   r,   r.   r/   Úpropertyr0   r2   r4   r   r   r   r   r   r   s   r   c             C   s@   x:t t| ƒD ],}|dkrdS d|  kr0dkrn qdS qW 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.
    iÿÿ  Ti Ø  iÿß  F)ÚmapÚord)ÚustringÚcr   r   r   r1   Ž   s    r1   c             C   sj   d}t jdk}xVtt| ƒD ]H}|dk s.|dkr8|rbdS q|s@dS |dkrV|rPdS d}q|s^dS d}qW |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.
    Fiÿÿ  i Ø  iÿß  TiÿÛ  )r"   r#   r6   r7   )r8   Zlast_was_startZunicode_uses_surrogate_encodingr9   r   r   r   Ústring_contains_lone_surrogates   s     
r:   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 )Nr   )r   r+   r   r   r   r,   ½   s    zBytesLiteral.__deepcopy__c             C   s    t rt| ƒS |  d¡ d¡S d S )Nz
ISO-8859-1)Ú
IS_PYTHON3r   r   r&   )r   r   r   r   r.   À   s    zBytesLiteral.byteencodec             C   s   dst d|  ƒ‚d S )NFz this is not a unicode string: %r)r   )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.
        z
ISO-8859-1)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/   r=   r0   rA   r   r   r   r   r;   ¹   s   r;   c             C   s    t | tƒst‚t| ƒ} || _| S )N)r   Úbytesr   r;   r-   )Úsr-   r   r   r   r'   ×   s    r'   c             C   s,   t | ttfƒst‚t| ƒ} |d k	r(|| _| S )N)r   r   rB   r   r   r-   )rC   r-   r   r   r   Úencoded_stringÞ   s
    rD   úúúÚ
úú	ú)z\az\bz\fz\nz\rz\tz\v)ú\z??ú"é    c             C   sH   | dkrt | ƒdd… S | dkr$dS | dkr0dS d d	d
„ | D ƒ¡S d S )Nz
	é   éÿÿÿÿrM   z\"rL   z\\r   c             S   s   g | ]}d t |ƒ ‘qS )z\%03o)r7   )Ú.0r9   r   r   r   ú
<listcomp>ü   s    z'_to_escape_sequence.<locals>.<listcomp>)Úreprr   )rC   r   r   r   Ú_to_escape_sequenceó   s    rT   c                 s†   g } i ‰xBt D ]:}d dd„ |D ƒ¡}|  |¡ t|ƒ d¡ˆ| d¡< qW t dd | ¡  d¡¡j‰‡fdd„‰ ‡ ‡fd	d
„}|S )Nr   c             S   s   g | ]}d |  dd¡ ‘qS )z[%s]rL   z\\)Úreplace)rQ   r9   r   r   r   rR     s    z,_build_specials_replacer.<locals>.<listcomp>r
   z(%s)ú|c                s   ˆ |   d¡ S )NrO   )Úgroup)Úm)Úreplacementsr   r   Úreplace_specials  s    z2_build_specials_replacer.<locals>.replace_specialsc                s
   ˆˆ | ƒS )Nr   )rC   )rZ   Úsubr   r   rU   	  s    z)_build_specials_replacer.<locals>.replace)Ú
_c_specialr   r   rT   r&   ÚreÚcompiler[   )ZsubexpsÚspecialÚregexprU   r   )rZ   rY   r[   r   Ú_build_specials_replacerÿ   s    

ra   c             C   sZ   t r|  d¡} | dkr&t| ƒdd… S | dkr2dS t| ƒ}|dk sJ|dkrRd	| S | S d S )
Nz
ISO-8859-1z
	\rO   rP   ú'z\'rN   é   z\x%02X)r<   r   rS   r7   )r9   Únr   r   r   Úescape_char  s    
re   c             C   sÌ   t | ƒ} y
|  d¡S  tk
r&   Y nX tr|tƒ }|j|j }}x0| D ](}|dkrf|d|  d¡ƒ qF||ƒ qFW | d¡S g }|j}x2| D ]*}t|ƒ}|dkr®|d| ƒ qŒ||ƒ qŒW t	|ƒ d¡S 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\%3oz
ISO-8859-1N)
Ú_replace_specialsr   ÚUnicodeDecodeErrorr<   Ú	bytearrayr   Úextendr&   r7   r(   )rC   Zs_newr   rj   ÚbÚlr9   Úor   r   r   r?     s*    



r?   éÐ  c             C   sÔ   t | ƒ|k r| S d}g }x¬|t | ƒk rÄ|| }t | ƒ|d kr¬d| |d |… kr¬|d| |d |…  d¡ 8 }x:| |d  dkrª|d8 }||krr|| |d  d }P qrW | | ||… ¡ |}qW d |¡S d S )Nr   é   rL   rO   é   z"")ÚlenÚfindr   r   )rC   ÚlimitÚstartÚchunksÚendr   r   r   r>   =  s     $r>   c             C   s.  t tt| ƒƒdg } tjdkrzg |  }}xÖ| D ]F}|dkrjt|d dƒ\}}| |d ¡ | |d ¡ q.| |¡ q.W n†| g  }}xz| D ]r}d|  kr¢dkròn nL|ròd|d   krÂdkròn n,|d | }}|d	@ d
> |d	@  d |d< qŠ| |¡ qŠW ||krg }d tt|ƒ¡d tt|ƒ¡fS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   i   i   i Ø  i Ü  iÿß  rP   iÿÛ  iÿ  é
   ú,)	Úlistr6   r7   r"   r#   Údivmodr   r   r   )rC   Úutf16Úutf32Ú
code_pointÚhighÚlowZ	code_unitr   r   r   Úencode_pyunicode_stringR  s$    




8
r€   )rn   )*Ú
__future__r   r]   r"   Úversion_infor   rB   Úchrr   Ú_strr   r   r<   ÚunicodeÚunichrZempty_bytesZempty_unicoder   r(   Úobjectr   r$   r*   r   r1   r:   r;   r'   rD   ÚgetZchar_from_escape_sequenceÚtupler6   Úranger\   rT   ra   rg   re   r?   r>   r€   r   r   r   r   Ú<module>   sD   %	

