U
    Æ½„b¸)  ã                   @   sb   d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z	 ddgZG dd„ deƒZG dd„ dƒZdS )	é    N)Ú	YAMLErrorÚFileMarkÚ
StringMarkÚYAMLStreamError)Ú_F)ÚRegExpÚReaderÚReaderErrorc                   @   s   e Zd Zdd„ Zdd„ ZdS )r	   c                 C   s"   || _ || _|| _|| _|| _d S ©N)ÚnameÚ	characterÚpositionÚencodingÚreason)Úselfr   r   r   r   r   © r   ú6/tmp/pip-unpacked-wheel-ctuyz3qg/ruamel/yaml/reader.pyÚ__init__$   s
    zReaderError.__init__c                 C   sL   t | jtƒr.td| jt| jƒ| j| j| jd�S td| j| j| j| jd�S d S )Nzˆ'{self_encoding!s}' codec can't decode byte #x{ord_self_character:02x}: {self_reason!s}
  in "{self_name!s}", position {self_position:d})Zself_encodingZord_self_characterÚself_reasonÚ	self_nameÚself_positionzounacceptable character #x{self_character:04x}: {self_reason!s}
  in "{self_name!s}", position {self_position:d})Zself_characterr   r   r   )	Ú
isinstancer   Úbytesr   r   Úordr   r   r   ©r   r   r   r   Ú__str__,   s     øúzReaderError.__str__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r	   #   s   c                   @   sÖ   e Zd Zd)dd„Zdd„ Zedd„ ƒZejdd„ ƒZd*d
d„Zd+dd„Z	d,dd„Z
d-dd„Zdd„ Zdd„ ZedƒZdd eeeddƒƒ¡  d¡Zedd„ ƒZedd „ ƒZed!d"„ ƒZd#d$„ Zd%d&„ Zd.d'd(„ZdS )/r   Nc                 C   s<   || _ | j d k	r*t| j dd ƒd kr*| | j _|  ¡  || _d S )NÚ_reader)ÚloaderÚgetattrr   Úreset_readerÚstream)r   r#   r    r   r   r   r   R   s
    zReader.__init__c                 C   sF   d | _ d| _d| _d| _d| _d | _d | _d | _d| _d| _	d| _
d S )Nr   TÚ )r   Ústream_pointerÚeofÚbufferÚpointerÚ
raw_bufferÚ
raw_decoder   ÚindexÚlineÚcolumnr   r   r   r   r"   Z   s    zReader.reset_readerc                 C   s*   z| j W S  tk
r$   tdƒ‚Y nX d S )Nzinput stream needs to specified)Ú_streamÚAttributeErrorr   r   r   r   r   r#   h   s    zReader.streamc                 C   s˜   |d krd S d | _ t|tƒr8d| _|  |¡ |d | _n\t|tƒrXd| _|| _|  ¡  n<t	|dƒsjt
dƒ‚|| _ t| jddƒ| _d| _d | _|  ¡  d S )	Nz<unicode string>ú z<byte string>Úreadz-stream argument needs to have a read() methodr   z<file>F)r.   r   Ústrr   Úcheck_printabler'   r   r)   Údetermine_encodingÚhasattrr   r!   r#   r&   )r   Úvalr   r   r   r#   p   s$    




r   c                 C   sJ   z| j | j|  W S  tk
rD   |  |d ¡ | j | j|   Y S X d S )Né   )r'   r(   Ú
IndexErrorÚupdate)r   r+   r   r   r   Úpeek‡   s
    zReader.peekr7   c                 C   s4   | j | t| jƒkr|  |¡ | j| j | j | … S r
   )r(   Úlenr'   r9   )r   Úlengthr   r   r   Úprefix�   s    
zReader.prefixc                 C   s°   | j | d t| jƒkr&|  |d ¡ |dkr¬| j| j  }|  j d7  _ |  jd7  _|dksv|dkrŒ| j| j  dkrŒ|  jd7  _d| _n|dkr¢|  jd7  _|d8 }q&d S )Nr7   r   u	   
Â…â€¨â€©úÚ
õ   ï»¿©r(   r;   r'   r9   r+   r,   r-   ©r   r<   Úchr   r   r   Úforward_1_1•   s     ÿÿzReader.forward_1_1c                 C   s°   | j | d t| jƒkr&|  |d ¡ |dkr¬| j| j  }|  j d7  _ |  jd7  _|dksv|dkrŒ| j| j  dkrŒ|  jd7  _d| _n|dkr¢|  jd7  _|d8 }q&d S )Nr7   r   r?   r>   r@   rA   rB   r   r   r   Úforward¦   s     zReader.forwardc                 C   sB   | j d kr(t| j| j| j| j| j| jƒS t| j| j| j| jƒS d S r
   )	r#   r   r   r+   r,   r-   r'   r(   r   r   r   r   r   Úget_markµ   s    
     ÿzReader.get_markc                 C   sŒ   | j s(| jd kst| jƒdk r(|  ¡  q t| jtƒr~| j tj¡rRtj	| _
d| _n,| j tj¡rptj| _
d| _ntj| _
d| _|  d¡ d S )Né   z	utf-16-lez	utf-16-bezutf-8r7   )r&   r)   r;   Ú
update_rawr   r   Ú
startswithÚcodecsÚBOM_UTF16_LEÚutf_16_le_decoder*   r   ÚBOM_UTF16_BEÚutf_16_be_decodeÚutf_8_decoder9   r   r   r   r   r4   ¾   s    
zReader.determine_encodingu!   [^	
 -~Â…Â -íŸ¿î€€-ï¿½ð�€€-ô�¿¿]z	
r$   é    é   Úasciic                 C   s@   |  d¡}| d | j¡}|s d S |d d… }| |¡| d¡fS )NrR   r7   )ÚencodeÚ	translateÚ_printable_asciir+   Údecode)ÚclsÚdataZascii_bytesÚnon_printablesZnon_printabler   r   r   Ú_get_non_printable_asciiÔ   s    
zReader._get_non_printable_asciic                 C   s(   | j  |¡}t|ƒsd S | ¡ | ¡ fS r
   )ÚNON_PRINTABLEÚsearchÚboolÚstartÚgroup)rW   rX   Úmatchr   r   r   Ú_get_non_printable_regexÞ   s    zReader._get_non_printable_regexc                 C   s0   z|   |¡W S  tk
r*   |  |¡ Y S X d S r
   )rZ   ÚUnicodeEncodeErrorra   )rW   rX   r   r   r   Ú_get_non_printableæ   s    zReader._get_non_printablec                 C   sN   |   |¡}|d k	rJ|\}}| jt| jƒ| j  | }t| j|t|ƒddƒ‚d S )NÚunicodez"special characters are not allowed)rc   r+   r;   r'   r(   r	   r   r   )r   rX   Znon_printable_matchr^   r   r   r   r   r   r3   î   s    
ûzReader.check_printablec              
   C   sT  | j d krd S | j| jd … | _d| _t| jƒ|k �rP| jsD|  ¡  | jd k	rúz|  | j d| j¡\}}W nŽ tk
rö } zp| j |j }| j	d k	r¨| j
t| j ƒ |j }n(| j	d k	rÊ| j
t| j ƒ |j }n|j}t| j|||j|jƒ‚W 5 d }~X Y nX n| j }t|ƒ}|  |¡ |  j|7  _| j |d … | _ | jr&|  jd7  _d | _ �qPq&d S )Nr   Ústrictr0   )r)   r'   r(   r;   r&   rH   r*   ÚUnicodeDecodeErrorr^   r#   r%   r	   r   r   r   r3   )r   r<   rX   Z	convertedÚexcr   r   r   r   r   r9   ü   s6    



*
zReader.updatec                 C   sX   |d krd}| j  |¡}| jd kr*|| _n|  j|7  _|  jt|ƒ7  _|sTd| _d S )Ni   T)r#   r1   r)   r%   r;   r&   )r   ÚsizerX   r   r   r   rH     s    
zReader.update_raw)N)r   )r7   )r7   )r7   )N)r   r   r   r   r"   Úpropertyr#   Úsetterr:   r=   rD   rE   rF   r4   r   r[   ÚjoinÚmapÚchrÚrangerS   rU   ÚclassmethodrZ   ra   rc   r3   r9   rH   r   r   r   r   r   D   s2   






	ÿ 
	

 )rJ   Zruamel.yaml.errorr   r   r   r   Zruamel.yaml.compatr   Zruamel.yaml.utilr   ÚAnyÚDictÚOptionalÚListÚUnionÚTextÚTupleÚ__all__r	   r   r   r   r   r   Ú<module>   s   !