3
¬øÖhÐ-  ã               @   sN  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„ Zddddddd d!œjZd3e e!ee"d%ƒƒƒ Z#d&d'„ Z$d(d)„ Z%e%ƒ Z&d*d+„ Z'd,d-„ Z(d4d/d0„Z)d1d2„ Z*dS )5é    )Ú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   úp/var/www/html/CrowdFlow/Picklecon/ble_analysis_env/lib/python3.6/site-packages/Cython/Compiler/StringEncoding.pyÚ__init__   s    zUnicodeLiteralBuilder.__init__c             C   s>   t |tƒr|jdƒ}t |tƒs.ttt|ƒƒƒ‚| j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 jt|d d ƒƒ | j jt|d d ƒƒ n| j 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 jt|ƒƒ d S )N)r   r   r   )r   r   r   r   r   r   /   s    c             C   s   | j |ƒ d S )N)r   )r   r   Úescape_stringr   r   r   Úappend_uescape2   s    z$UnicodeLiteralBuilder.append_uescapec             C   s   t dj| jƒƒS )NÚ )ÚEncodedStringÚjoinr   )r   r   r   r   Ú	getstring5   s    zUnicodeLiteralBuilder.getstringc             C   s   d | j ƒ 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| jƒ}t |tƒs0ttt|ƒƒƒ‚| j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 jt|ƒj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   | j |ƒ 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   | j ƒ S )N)r   )r   r   r   r   ÚgetcharS   s    zBytesLiteralBuilder.getcharc             C   s   | j ƒ 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|ƒ | jj|ƒ d S )N)r   r   r   )r   r   r   r   r   r   b   s    zStrLiteralBuilder.appendc             C   s   | j j|ƒ | jj|ƒ d S )N)r   r   r   )r   r   r   r   r   r   f   s    z StrLiteralBuilder.append_charvalc             C   s   | j j|ƒ | 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ƒ | 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               @   s^   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ƒsZd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| j ƒS )N)Úencodingr   r&   )r   r   r   r   Ú
byteencode{   s    zEncodedString.byteencodec             C   s   | j d kst‚| j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 | jƒ dƒS )NÚutf8)r'   r/   )r   r   r   r   Úas_utf8_stringŠ   s    zEncodedString.as_utf8_stringc             C   s,   | j d kr| jƒ }nt| jƒ | j ƒ}|jƒ S )N)r-   r4   r'   r.   Úas_c_string_literal)r   Úsr   r   r   r5      s    

z!EncodedString.as_c_string_literalÚisasciic             C   s,   y| j dƒ W n tk
r"   dS X dS d S )NÚasciiFT)r&   ÚUnicodeEncodeError)r   r   r   r   r7   –   s
    zEncodedString.isascii)r   r   r    r-   r,   r.   r/   Úpropertyr0   r2   r4   r5   Úhasattrr   r7   r   r   r   r   r   r   s   
r   c             C   s@   x:t t| ƒD ],}|dkrdS d|  ko.dkn  r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#   r<   r=   )r>   Zlast_was_startZunicode_uses_surrogate_encodingr?   r   r   r   Ústring_contains_lone_surrogates¯   s     
r@   c               @   sN   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ƒsJd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 | jdƒj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
   | j 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   r5   ä   s    z BytesLiteral.as_c_string_literalr7   c             C   s   dS )NTr   )r   r   r   r   r7   é   s    zBytesLiteral.isascii)r   r   r    r-   r,   r.   r/   rC   r0   r5   r;   r   r7   r   r   r   r   rA   Ë   s   
rA   c             C   s    t | tƒst‚t| ƒ} || _| S )N)r   Úbytesr   rA   r-   )r6   r-   r   r   r   r'   î   s    r'   c             C   s,   t | ttfƒst‚t| ƒ} |d k	r(|| _| S )N)r   r   rG   r   r   r-   )r6   r-   r   r   r   Úencoded_stringõ   s
    rH   c             C   s"   t | tƒrt| |ƒS t| |ƒS d S )N)r   rG   r'   rH   )r6   r-   r   r   r   Úencoded_string_or_bytes_literalü   s    

rI   úúúÚ
úú	ú)z\az\bz\fz\nz\rz\tz\vú\ú??ú"é    c             C   sH   | dkrt | ƒdd
… S | dkr$dS | dkr0dS djdd	„ | D ƒƒS d S )Nz
	é   rS   z\"rQ   z\\r   c             S   s   g | ]}d t |ƒ ‘qS )z\%03o)r=   )Ú.0r?   r   r   r   ú
<listcomp>  s    z'_to_escape_sequence.<locals>.<listcomp>éÿÿÿÿ)Úreprr   )r6   r   r   r   Ú_to_escape_sequence  s    rZ   c                 s†   g } i ‰xBt D ]:}djdd„ |D ƒƒ}| j|ƒ t|ƒjdƒˆ|jdƒ< qW tjddj| ƒ jdƒƒj‰‡fdd„‰ ‡ ‡fd	d
„}|S )Nr   c             S   s   g | ]}d |j ddƒ ‘qS )z[%s]rQ   z\\)Úreplace)rV   r?   r   r   r   rW      s    z,_build_specials_replacer.<locals>.<listcomp>r
   z(%s)ú|c                s   ˆ | j dƒ S )NrU   )Úgroup)Úm)Úreplacementsr   r   Úreplace_specials$  s    z2_build_specials_replacer.<locals>.replace_specialsc                s
   ˆˆ | ƒS )Nr   )r6   )r`   Úsubr   r   r[   &  s    z)_build_specials_replacer.<locals>.replace)Ú
_c_specialr   r   rZ   r&   ÚreÚcompilera   )ZsubexpsZspecialÚregexpr[   r   )r`   r_   ra   r   Ú_build_specials_replacer  s    

rf   c             C   sZ   t r| j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
	\rU   ú'z\'rT   é   z\x%02XrX   )rB   r   rY   r=   )r?   Únr   r   r   Úescape_char-  s    
rj   c             C   sÌ   t | ƒ} y
| jdƒS  tk
r&   Y nX tr|tƒ }|j|j }}x0| D ](}|dkrf|d| jdƒƒ qF||ƒ qFW |jdƒS g }|j}x2| D ]*}t|ƒ}|dkr®|d| ƒ qŒ||ƒ qŒW t	|ƒj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   ÚUnicodeDecodeErrorrB   Ú	bytearrayr   Úextendr&   r=   r(   )r6   Zs_newr   ro   ÚbÚlr?   Úor   r   r   rE   ;  s*    



rE   éÐ  c             C   sÔ   t | ƒ|k r| S d}g }x¬|t | ƒk rÄ|| }t | ƒ|d kr¬d| |d |… kr¬|d| |d |… jdƒ 8 }x:| |d  dkrª|d8 }||krr|| |d  d }P qrW |j| ||… ƒ |}qW dj|ƒS d S )Nr   é   rQ   rU   é   z"")ÚlenÚfindr   r   )r6   ÚlimitÚstartÚchunksÚendr   r   r   rD   Z  s     $rD   c             C   s.  t tt| ƒƒdg } tjdkrzg |  }}xÖ| D ]F}|dkrjt|d dƒ\}}|j|d ƒ |j|d ƒ q.|j|ƒ q.W n†| g  }}xz| D ]r}d|  ko dkn  rò|ròd|d   koÀdkn  rò|d | }}|d	@ d
> |d	@  d |d< qŠ|j|ƒ qŠW ||krg }djtt|ƒƒdjtt|ƒƒfS )zBCreate Py_UNICODE[] representation of a given unicode string.
    r   i   i   i Ø  i Ü  iÿß  rU   iÿÛ  iÿ  é
   ú,rX   rX   rX   )	Úlistr<   r=   r"   r#   Údivmodr   r   r   )r6   Úutf16Úutf32Ú
code_pointÚhighÚlowZ	code_unitr   r   r   Úencode_pyunicode_stringo  s$    




8
r…   )rQ   rR   rS   )rs   )+Ú
__future__r   rc   r"   Úversion_infor   rG   Úchrr   Ú_strr   r   rB   ÚunicodeÚunichrZempty_bytesZempty_unicoder   r(   Úobjectr   r$   r*   r   r1   r@   rA   r'   rH   rI   ÚgetZchar_from_escape_sequenceÚtupler<   Úrangerb   rZ   rf   rl   rj   rE   rD   r…   r   r   r   r   Ú<module>   sF   %.#

